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
- Execute fixes via WordPress, JSON-LD schema, and indexing submissions
- Manage many clients declaratively — config-as-code YAML +
cnry apply - Schedule recurring visibility checks AND traffic syncs, with webhook alerts on regressions
- Generate client-ready HTML reports —
cnry report <project> - 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 @ainyc/canonry cnry init cnry serve
The CLI installs as cnry (short form) and canonry — the two are interchangeable.
Open http://localhost:4100/setup. A guided wizard walks you through provider keys, project setup, queries, and your first visibility check.
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
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.
1. 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.
2. Run `npm install -g @ainyc/canonry`.
3. 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`.
4. 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.
5. Open my browser to the dashboard so I can see the run results.
6. 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 `npx @ainyc/aeo-audit "<my-domain>" --format json` for a site-readiness score.
7. 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 | Grab a free Gemini key, set GEMINI_API_KEY, restart cnry serve. |
| No results after a run | Visibility checks are async — check the Runs tab or use cnry run <project> --wait. |
| Not sure what queries to test | Setup wizard auto-generates them; expand the basket later with cnry discover run <project> --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 · 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) |
| Roadmap & ADRs | docs/roadmap.md · docs/adr/ |
| All docs | docs/README.md |
Requirements
Node.js ≥ 22.14.0. At least one provider API key.
Contributing
git clone https://github.com/ainyc/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.
