{"slug": "local-agent-first-ai-search-optimization-tooling", "title": "Local agent first AI search optimization tooling", "summary": "Canonry has released an open-source, self-hosted AI engine optimization (AEO) operating platform that tracks citations across Gemini, ChatGPT, Claude, Perplexity, and local LLMs, and includes tools for server-log ingestion, Google Search Console and Analytics integration, Google Business Profile monitoring, ChatGPT ads management via OpenAI Ads Manager, and Common Crawl backlink analysis. The platform offers a CLI, API, and web UI, with a built-in agent called Aero that activates after each run, and supports declarative config-as-code YAML for managing multiple clients.", "body_md": "**Agent-first AEO operating platform. Open source. Self-hosted.**\n\n- Track citations across Gemini, ChatGPT, Claude, Perplexity, and local LLMs\n- Watch AI engines crawl and refer traffic via\n[server-log ingestion](/Canonry/canonry/blob/main/skills/canonry/references/server-side-traffic.md)— Cloud Run, Vercel, and the WordPress Traffic Logger plugin today - Diagnose against real traffic with built-in\n[GSC](/Canonry/canonry/blob/main/docs/google-search-console-setup.md),[GA4](/Canonry/canonry/blob/main/docs/google-analytics-setup.md), and[Bing Webmaster](/Canonry/canonry/blob/main/docs/bing-webmaster-setup.md) - Track local AEO via\n[Google Business Profile](/Canonry/canonry/blob/main/skills/canonry/references/google-business-profile.md)— search-term impressions, performance metrics, and hotel lodging + booking-CTA gaps - Manage\n[ChatGPT ads](/Canonry/canonry/blob/main/docs/mcp.md#tool-surface)with OpenAI Ads Manager — connect an ad account, inspect conversion setup and performance, prepare paused campaigns, and launch only with an explicit human approval - Discover who links to you with\n[Common Crawl backlinks](/Canonry/canonry/blob/main/skills/canonry/references/canonry-cli.md#backlinks-common-crawl)— follows Common Crawl's rolling monthly hyperlink graph, auto-syncing each new window on a schedule, queried locally with DuckDB - Execute fixes via\n[WordPress](/Canonry/canonry/blob/main/docs/wordpress-setup.md), JSON-LD schema, and indexing submissions - Manage many clients declaratively — config-as-code YAML +\n`cnry apply`\n\n- Schedule recurring visibility checks, traffic syncs, and Business Profile syncs, with webhook alerts on regressions\n- Generate client-ready HTML reports —\n`cnry report <project>`\n\n- Drive from your own agent via the\n[67-tool MCP adapter](/Canonry/canonry/blob/main/docs/mcp.md)or webhooks - Or use\n**Aero**— Canonry's built-in agent that wakes up after every run\n\nEvery dashboard view has a matching CLI command and API endpoint. The CLI is the surface; the UI consumes the same API your agent does.\n\n```\nnpm install -g @canonry/canonry\ncnry init\ncnry serve\n```\n\nThe CLI installs as `cnry`\n\n(short form) and `canonry`\n\n— the two are interchangeable.\nThe legacy package name `@ainyc/canonry`\n\nis still published at the same versions for compatibility, but new installs should use `@canonry/canonry`\n\n.\n\nOpen [http://localhost:4100/setup](http://localhost:4100/setup). A guided wizard walks you through provider keys, project setup, queries, and your first visibility check.\n\nIf you serve Canonry on `0.0.0.0`\n\nor a LAN address, complete first-run dashboard password setup from loopback first, or authenticate with a `cnry_...`\n\nbearer key. The unauthenticated setup path is loopback-only by design.\n\nPrefer the terminal?\n\n```\ncnry project create my-site --domain example.com\ncnry query add my-site \"your first query\" \"second query\"\ncnry run my-site --wait\ncnry evidence my-site\ncnry insights my-site\n```\n\nTo pin a project to a provider model for future sweeps, use an explicit override. Omitting a provider keeps the project on all configured engines; omitting its model keeps that engine on the instance setting.\n\n```\ncnry project update my-site --provider gemini --provider-model gemini=gemini-2.5-pro\ncnry project update my-site --clear-provider-model gemini\n```\n\nConnect an OpenAI Ads Manager account to bring its account state, integrity review, conversion pixels and event settings, campaign structure, and paid-performance rollups into the same project as your organic AEO evidence.\n\n```\ncnry ads connect my-site --api-key <ads-manager-sdk-key>\ncnry ads sync my-site\ncnry ads account my-site\ncnry ads summary my-site\n```\n\nCanonry and your agent can inspect the live account, look up geo targets, prepare\ncampaigns, ad groups, and ChatGPT chat-card ads in a paused state, and keep durable\noperation receipts for reconciliation. Activation is deliberately separate: a human\napproves one exact campaign tree, then a scoped executor may launch only that approved\ntree. This keeps spend-bearing changes reviewable and recoverable instead of granting\nan agent unrestricted access to your ad account. See the [MCP tool surface](/Canonry/canonry/blob/main/docs/mcp.md#tool-surface)\nfor the complete agent workflow and safety model.\n\nDrop this into Claude Code, Codex, or any shell-capable agent. It installs canonry, runs your first sweep, audits your site for AEO readiness, and stops for your sign-off before taking any action on your behalf:\n\n```\nSet up canonry for me. Canonry is an open-source platform that tracks how AI answer engines (Gemini, ChatGPT, Claude, Perplexity) cite my site.\n\n1. Ask me for: my domain, 3–5 queries I want to track, and which provider I want to start with (gemini / openai / claude / perplexity). Wait for my answers before proceeding.\n2. Run `npm install -g @canonry/canonry`.\n3. Run `cnry init` in this directory. This scaffolds config and installs the canonry skills into `.claude/skills/canonry/`, `.claude/skills/aero/`, `.codex/skills/canonry/`, and `.codex/skills/aero/`. If the skills aren't there afterwards, run `cnry skills install`.\n4. Read the operator playbook at `.claude/skills/canonry/SKILL.md` and follow it end-to-end: create the project with my domain and queries, wire up the provider key I chose, and trigger the first sweep.\n5. Open my browser to the dashboard so I can see the run results.\n6. Switch to the analyst playbook at `.claude/skills/aero/SKILL.md` and run a baseline AEO audit on my behalf. Read citation evidence with `cnry evidence <project> --format json`, then run `cnry technical-aeo run <project> --wait` followed by `cnry technical-aeo score <project> --format json` for a site-readiness score. This crawls every page in my sitemap (not just the homepage), scores the whole site 0–100, and saves the result so it appears in the dashboard and can be re-audited on a schedule.\n7. Summarize what you found: my mention and citation rates per provider, the top 3 queries I'm not yet cited on, and the highest-impact site issues from the audit. Ask me for permission before taking any further action, such as drafting content, submitting URLs for indexing, editing files, or anything else that changes my site.\n```\n\nOne-click copy at [canonry.ai](https://canonry.ai).\n\n| Problem | Fix |\n|---|---|\n| No provider key configured | Open `/setup` , or grab a free\n`GEMINI_API_KEY` , and restart `cnry serve` . |\n| Why did my first audit fail? | Run `cnry doctor` , then reopen `/setup` ; it checks provider keys and setup blockers before the first sweep. |\n| No results after a run | Visibility checks are async — check the Runs tab or use `cnry run <project> --wait` . |\n| Not sure what queries to test | Setup wizard auto-generates them; expand the basket later with `cnry discover run <project> --icp \"...\"` — see the\n|\n`npm install` fails on `node-gyp` |\nInstall build tools for `better-sqlite3` (\n|\n\n| Provider | Key source | Env var |\n|---|---|---|\n| Gemini |\n|\n\n`GEMINI_API_KEY`\n\n[platform.openai.com](https://platform.openai.com/api-keys)`OPENAI_API_KEY`\n\n[console.anthropic.com](https://console.anthropic.com/settings/keys)`ANTHROPIC_API_KEY`\n\n[perplexity.ai/settings/api](https://www.perplexity.ai/settings/api)`PERPLEXITY_API_KEY`\n\n`LOCAL_LLM_URL`\n\nConfigure during `cnry init`\n\n, in the dashboard `/settings`\n\n, or as env vars.\n\nArchitecture & data model |\n|\n\n**Aero — built-in agent**[skills/aero/SKILL.md](/Canonry/canonry/blob/main/skills/aero/SKILL.md)** MCP — Claude Desktop / Cursor / Codex**[docs/mcp.md](/Canonry/canonry/blob/main/docs/mcp.md)** Integrations**[GSC](/Canonry/canonry/blob/main/docs/google-search-console-setup.md)·[GA4](/Canonry/canonry/blob/main/docs/google-analytics-setup.md)·[Bing](/Canonry/canonry/blob/main/docs/bing-webmaster-setup.md)·[Google Business Profile](/Canonry/canonry/blob/main/skills/canonry/references/google-business-profile.md)·[WordPress](/Canonry/canonry/blob/main/docs/wordpress-setup.md)·[Server-side traffic (Cloud Run + Vercel + WordPress logs)](/Canonry/canonry/blob/main/skills/canonry/references/server-side-traffic.md)**Deployment**— Docker, Railway, Render, systemd, Tailscale[docs/deployment.md](/Canonry/canonry/blob/main/docs/deployment.md)** API**— 118+ endpoints`GET /api/v1/openapi.json`\n\n(no auth)**Skills bundle** for Claude Code / Codex`cnry skills install`\n\n([details](/Canonry/canonry/blob/main/skills/canonry/SKILL.md))**All docs**[docs/README.md](/Canonry/canonry/blob/main/docs/README.md)Node.js ≥ 22.14.0. At least one provider API key.\n\n```\ngit clone https://github.com/Canonry/canonry.git && cd canonry\npnpm install && pnpm run typecheck && pnpm run test && pnpm run lint\n```\n\nSee [CONTRIBUTING.md](/Canonry/canonry/blob/main/CONTRIBUTING.md).\n\n[FSL-1.1-ALv2](/Canonry/canonry/blob/main/LICENSE). Free to use, modify, and self-host. Each version converts to Apache 2.0 after two years.", "url": "https://wpnews.pro/news/local-agent-first-ai-search-optimization-tooling", "canonical_source": "https://github.com/Canonry/canonry", "published_at": "2026-07-22 23:26:22+00:00", "updated_at": "2026-07-22 23:52:13.826660+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "artificial-intelligence", "generative-ai", "ai-products"], "entities": ["Canonry", "OpenAI", "Google", "Gemini", "ChatGPT", "Claude", "Perplexity", "Common Crawl"], "alternates": {"html": "https://wpnews.pro/news/local-agent-first-ai-search-optimization-tooling", "markdown": "https://wpnews.pro/news/local-agent-first-ai-search-optimization-tooling.md", "text": "https://wpnews.pro/news/local-agent-first-ai-search-optimization-tooling.txt", "jsonld": "https://wpnews.pro/news/local-agent-first-ai-search-optimization-tooling.jsonld"}}