Local agent first AI search optimization tooling
Canonry is an open-source, self-hostable AI Engine Optimization (AEO) platform that helps websites track citations across Gemini, ChatGPT, Claude, Perplexity, and local LLMs. It offers CLI, dashboard, MCP adapter, and built-in agent for tracking keywords, technical audits, ad management, and more. Initial setup takes 5 minutes.
Uh oh!
There was an error while loading. Please reload this page.
Notifications You must be signed in to change notification settings
Fork 12
Star 89
BranchesTags
Open more actions menu
Folders and files
NameName
Last commit message
Last commit date
Latest commit
History
691 Commits
691 Commits
.claude
.claude
.github
.github
.husky
.husky
.impeccable
.impeccable
apps
apps
docker
docker
docs
docs
eslint-rules
eslint-rules
packages
packages
scripts
scripts
skills
skills
test-setup
test-setup
.dockerignore
.dockerignore
.gitignore
.gitignore
.node-version
.node-version
.nvmrc
.nvmrc
AGENTS.md
AGENTS.md
CLAUDE.md
CLAUDE.md
CONTRIBUTING.md
CONTRIBUTING.md
Dockerfile
Dockerfile
Dockerfile.api
Dockerfile.api
Dockerfile.web
Dockerfile.web
Dockerfile.worker
Dockerfile.worker
LICENSE
LICENSE
Makefile
Makefile
README.md
README.md
canonry-install.sh
canonry-install.sh
eslint.config.js
eslint.config.js
package.json
package.json
pnpm-lock.yaml
pnpm-lock.yaml
pnpm-workspace.yaml
pnpm-workspace.yaml
tsconfig.base.json
tsconfig.base.json
vitest.config.ts
vitest.config.ts
vitest.package.config.ts
vitest.package.config.ts
Repository files navigation
Agent-first AEO operating platform. Open source. Self-hosted.
Track citations across Gemini, ChatGPT, Claude, Perplexity, and local LLMs
Watch AI engines crawl and refer traffic via server-log ingestion — Cloud Run, Vercel, and the WordPress Traffic Logger plugin today
Diagnose against real traffic with built-in GSC, GA4, and Bing Webmaster
Track local AEO via Google Business Profile — search-term impressions, performance metrics, and hotel lodging + booking-CTA gaps
Manage ChatGPT ads 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 Common Crawl backlinks — follows Common Crawl's rolling monthly hyperlink graph, auto-syncing each new window on a schedule, queried locally with DuckDB
Execute fixes via WordPress, JSON-LD schema, and indexing submissions
Manage many clients declaratively — config-as-code YAML + cnry apply
Schedule recurring visibility checks, traffic syncs, and Business Profile syncs, with webhook alerts on regressions
Generate client-ready HTML reports — cnry report
Drive from your own agent via the 67-tool MCP adapter or webhooks
Or use Aero — Canonry's built-in agent that wakes up after every run
Every dashboard view has a matching CLI command and API endpoint. The CLI is the surface; the UI consumes the same API your agent does.
Run your first AI visibility check in 5 minutes
npm install -g @canonry/canonry cnry init cnry serve
The CLI installs as cnry (short form) and canonry — the two are interchangeable. The legacy package name @ainyc/canonry is still published at the same versions for compatibility, but new installs should use @canonry/canonry.
Open http://localhost:4100/setup. A guided wizard walks you through provider keys, project setup, queries, and your first visibility check.
If you serve Canonry on 0.0.0.0 or a LAN address, complete first-run dashboard password setup from loopback first, or authenticate with a cnry_... bearer key. The unauthenticated setup path is loopback-only by design.
Prefer the terminal?
cnry project create my-site --domain example.com cnry query add my-site "your first query" "second query" cnry run my-site --wait cnry evidence my-site cnry insights my-site
To 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.
cnry project update my-site --provider gemini --provider-model gemini=gemini-2.5-pro cnry project update my-site --clear-provider-model gemini
Manage ChatGPT ads with human control
Connect 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.
cnry ads connect my-site --api-key cnry ads sync my-site cnry ads account my-site cnry ads summary my-site
Canonry and your agent can inspect the live account, look up geo targets, prepare campaigns, ad groups, and ChatGPT chat-card ads in a paused state, and keep durable operation receipts for reconciliation. Activation is deliberately separate: a human approves one exact campaign tree, then a scoped executor may launch only that approved tree. This keeps spend-bearing changes reviewable and recoverable instead of granting an agent unrestricted access to your ad account. See the MCP tool surface for the complete agent workflow and safety model.
Or set it up with your AI coding agent
Drop 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:
Set up canonry for me. Canonry is an open-source platform that tracks how AI answer engines (Gemini, ChatGPT, Claude, Perplexity) cite my site.
- 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.
- Run
npm install -g @canonry/canonry. - Run
cnry initin 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, runcnry skills install. - Read the operator playbook at
.claude/skills/canonry/SKILL.mdand 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. - Open my browser to the dashboard so I can see the run results.
- Switch to the analyst playbook at
.claude/skills/aero/SKILL.mdand run a baseline AEO audit on my behalf. Read citation evidence withcnry evidence --format json, then runcnry technical-aeo run --waitfollowed bycnry technical-aeo score --format jsonfor 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. - 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.
One-click copy at canonry.ai.
If you get stuck
Problem Fix
No provider key configured Open /setup, or grab a free Gemini key, set GEMINI_API_KEY, and restart cnry serve.
Why did my first audit fail? Run cnry doctor, then reopen /setup; it checks provider keys and setup blockers before the first sweep.
No results after a run Visibility checks are async — check the Runs tab or use cnry run --wait.
Not sure what queries to test Setup wizard auto-generates them; expand the basket later with cnry discover run --icp "..." — see the discovery methodology.
npm install fails on node-gyp Install build tools for better-sqlite3 (guide).
Provider keys
Provider Key source Env var
Gemini aistudio.google.com GEMINI_API_KEY
OpenAI platform.openai.com OPENAI_API_KEY
Claude console.anthropic.com ANTHROPIC_API_KEY
Perplexity perplexity.ai/settings/api PERPLEXITY_API_KEY
Local LLMs Any OpenAI-compatible endpoint LOCAL_LLM_URL
Configure during cnry init, in the dashboard /settings, or as env vars.
Documentation
Architecture & data model docs/architecture.md · docs/data-model.md
Aero — built-in agent skills/aero/SKILL.md
MCP — Claude Desktop / Cursor / Codex docs/mcp.md
Integrations GSC · GA4 · Bing · Google Business Profile · WordPress · Server-side traffic (Cloud Run + Vercel + WordPress logs)
Deployment — Docker, Railway, Render, systemd, Tailscale docs/deployment.md
API — 118+ endpoints GET /api/v1/openapi.json (no auth)
Skills bundle for Claude Code / Codex cnry skills install (details)
All docs docs/README.md
Requirements
Node.js ≥ 22.14.0. At least one provider API key.
Contributing
git clone https://github.com/Canonry/canonry.git && cd canonry pnpm install && pnpm run typecheck && pnpm run test && pnpm run lint
See CONTRIBUTING.md.
License
FSL-1.1-ALv2. Free to use, modify, and self-host. Each version converts to Apache 2.0 after two years.
About
An agent first AEO monitoring and operating platform
open.canonry.ai
Topics
agent
cli
sqlite
mcp
seo
geo
self-hosted
seo-optimization
websearch
ai-agents
ai-search
local-first
brand-monitoring
aeo
llm-monitoring
ai-visibility
generative-engine-optimization
answer-engine-optimization
geo-optimization
answer-engine-optimisation
Resources
Readme
License
View license
Contributing
Contributing
Uh oh!
There was an error while loading. Please reload this page.
Activity
Custom properties
Stars
89 stars
Watchers
4 watching
Forks
12 forks
Report repository
Releases 7
WordPress Traffic Logger v1.0.0
Latest
May 21, 2026
+ 6 releases
Packages 0
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Contributors
Uh oh!
There was an error while loading. Please reload this page.
Languages
TypeScript 97.9%
PHP 1.0%
CSS 0.7%
JavaScript 0.4%
Shell 0.0%
Dockerfile 0.0%