ainyc/canonry/aero

Claude Code and agent skill by ainyc/canonry

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Diagnose AEO regressions and interpret Canonry AI visibility, SEO data, Advanced multi-property portfolios, and Site Health evidence. Use when prioritizing keyword or organic ranking opportunities, explaining mention or citation changes, comparing Properties or markets, diagnosing page findings, preparing reports, or analyzing a completed `cnry` sweep or site audit. Preserves measurement scope, missing-data states, and comparison limits. Use the canonry skill for setup and operations.

Install

npx vskill@latest install ainyc/canonry/aero

SKILL.md

Aero Orchestration Skill

Use Canonry's stored evidence to explain AI visibility, SEO opportunities, and site readiness. In built-in Aero, use aero_list_toolkits and aero_load_toolkit to load relevant tools, then call the available canonry_* tools directly. Project-scoped tools use the session's project; they do not accept a different project from the model. External agents can use connected MCP or cnry <command> --format json. CLI examples in the references are for hosts with a shell; built-in Aero should use the corresponding exposed tool, not invent shell access.

Canonry is the source of truth for runs, measurement plans, Property evidence, Site Health audits, integrations, and history. Read stored page audits before proposing fresh agent-readiness work. New crawls and provider work require approval covering that work; an existing explicit authorization remains valid.

Choose the evidence scope

  • SEO data: read references/seo-analysis.md before prioritizing keywords,

organic rankings, or domain comparisons. In built-in Aero, discover it with list_skill_docs, then call read_skill_doc with slug: "seo-analysis". Load the seo toolkit and use the selected profile's saved evidence. Priorities are recommendations, not computed scores or traffic forecasts. Aero cannot edit SEO profiles or start paid SEO refreshes.

  • Establish the portfolio type before answering; never infer it.

canonry_project_overview returns no plan, Target, or Property data, so its silence is not evidence of a Simple project. When the system prompt carries a "Project shape:" line, it already states the type and plan revision; do not call canonry_measurement_plan_get to confirm it. Without that line, call canonry_measurement_plan_get before stating that a project has no Properties, no Advanced plan, or cannot break out per-Property performance. The plan is structure only, with no metrics, and can be very large: never analyze, list, or rank Properties from it. For "which Property is best/worst", use canonry_measurement_portfolio_summary, then canonry_measurement_overview for more rows.

  • Simple portfolio: use project overview, visibility statistics, and stored

answer evidence. Advanced portfolio: use the measurement tools; the portfolio summary and overview carry the metrics, the plan does not. Preserve Property/Target identity, market, plan revision, run, provider/model, location, and query class. Read references/portfolio-analysis.md before ranking Properties or comparing Advanced results.

  • Advanced routing. Answer each question from its read:
  • Is the sweep complete, is anything unreliable:

canonry_measurement_data_quality (quote completeness expected, executed, missing, plus unattributedByClass and latestFill), then canonry_run_completeness with its run.displayedRunId for missing answers per engine. A Healthy run status and canonry_doctor are not completeness checks.

  • Which names answers give instead across the portfolio:

canonry_competitor_landscape with answers: not-mentioned, queryClass and runId: latest. Report its selected answer count and population. These conditioned reads provide counts, not competitive share of voice. Per-Property named-instead lists sample weak Properties.

  • What changed: canonry_measurement_changes once per class, with its

distribution and withinNoise.

  • Which metros have the biggest gaps: the compact portfolio summary's

weakestMarkets, ranked from actual full metro aggregates with its own population and queryClass. Quote each row's mention and citation rates with their numerators and denominators. Its eligible/excluded counts cover every top-level metro; list: markets pages provide the remaining rollups. tiedAtWeakest.byMetro counts zero-signal Properties within metros. Those Property counts never supply metro rates or a ranking of metros.

  • Noise. Between two sweeps, a Property that moved 2 answers or fewer

(withinNoise: true) is within noise. Never call it a gain, loss, trend, or regression.

  • Partial results. A result with truncated: true, a total

(totalProperties, total, questionTotal) above its rows, a nextCursor, a __partialLists field (it comes first and names each list the tool cut, as shown of total), or a __truncation note is partial. Say how many of how many you saw, and never call those rows the biggest, all, or the full picture. Rows tied at the weakest rate are listed by name, not rank: give tiedAtWeakest.count and call the rows examples. Compact reads omit .byMetro; request raw detail only when those tie counts are needed.

  • Site Health: read references/site-health.md before diagnosing scores,

crawl coverage, internal links, or page findings. Technical readiness is a separate signal from measured mentions and citations. Use the latest audit run selected by the tool. runSelection explains same-date ambiguity and prefers complete scans, then the largest page sample, on the latest date. For a dated question, pass date: YYYY-MM-DD to the crawl or crawl-pages read. An empty read for an assumed year does not prove a historical scan is missing. When the user omitted the year, use availableScanDates.matchingMonthDayDates from the dated no-data result to resolve it, then request the exact returned YYYY-MM-DD. If several years match, clarify the year. Its date lists are bounded: totalDates and matchingMonthDayTotal describe the full stored populations. Never silently fall back to another date. Use inventorySummary for complete eligibility and exclusion counts; unknown indexability never means a canonical points elsewhere. Report pages failing and pages partial separately, and never call a factor partial when pages fail it.

  • Sentiment (experimental): questions about how answers describe a

Property or the brand (praise, criticism, complaints, tone, reputation) are sentiment questions. Load the monitoring toolkit and read canonry_sentiment; mention and citation tools do not measure it. One branded call returns the headline, per-engine and per-Property breakdowns and criticizedProperties. Take per-engine figures from its provider breakdowns instead of filtering. A provider filter takes ids (openai for ChatGPT, gemini, claude), and an empty filtered read means the filter matched nothing, not that sentiment is missing. criticizedProperties.keys lists up to five Properties, most criticized first. Give favorable, mixed and unfavorable as counts over coverage.judged, which counts assessments (one answer can assess several Properties), and report rated answers of eligible answers separately as coverage; never divide outcome counts by answers. Quote the most criticized Properties' answers with canonry_sentiment_evidence (scope property, outcome: ["mixed", "unfavorable"]). Non-brand is exceptions only: list its mixed and unfavorable answers, never a non-brand favorable share. Its rated share is low because most market answers do not name the Property; that is not missing data. Never pool the two classes, and do not quote sentiment.overall from the project overview, which pools them. An absent subject is not unfavorable, an unrated or partial result is not "no criticism", and partial values are provisional. Say the ratings are model-classified and experimental. A trend needs two different rated runs: pass fromRunId: previous-rated and the current toRunId to canonry_sentiment_compare. If no compatible rated predecessor exists, say there is no trend yet. Preserve population-change and incomplete-target reasons; a bounded-search refusal needs an explicit older run, not a claim that no rating history exists. Preserve other comparison refusal reasons. Never compare a run with itself. Aero cannot turn sentiment on or submit a backfill; send those requests to the operator.

  • Portfolio counts: Properties named is metrics.propertiesMentioned;

never named is metrics.propertiesNeverMentioned, also available per market. Preserve unavailable identities and unmeasured states. tiedAtWeakest requires zero mentions and zero citations. For names given where none of an answer's targeted Properties was named, use answers: not-mentioned on the landscape or portfolio summary and report answerCount with populationSize. Summary reads use compact pages; follow nextCursor with unchanged filters to complete only pageList. Request the appropriate list for another ranking, markets or evidence; the first-page sibling lists are bounded summaries, not complete lists. When __truncation says a cursor skips omitted rows, retry the original cursor with a smaller limit as instructed.

  • Missing runs, not_measured, unavailable metrics, and unchecked signals

are not zero. Use returned numerators, denominators, and availability reasons; do not average Property percentages or sum overlapping markets.

  • When a native turn supplies current-view context, use aero_inspect_view

first for view-relative claims. It resolves the selected Property, market, class, dates, run, or Site Health page against stored evidence. Context is a selection, not permission. Explicit user scope takes precedence; without context, resolve names/URLs or ask which Property/page before scoped claims.

  • Link the returned evidence beside findings. State measurement time separately

from retrieval time, each class's numerator/denominator, missing-data reasons, and comparison limits. Keep observations separate from hypotheses and propose a concrete check for each hypothesis. Never turn an unavailable comparison into a trend or infer a cause from a technical score alone.

  • Read references/agent-operations.md for shared vocabulary, evidence,

comparison, and authority rules. Its MCP onboarding instructions apply to external hosts; built-in Aero loads its authorized toolkits and has skill-doc readers. Tool descriptions define the parameters actually available.

Persist only user-scoped context (operator preferences, communication style) in your platform's native memory. Project-scoped facts live in canonry and must be read back, not remembered.

Two signals, not one. Every (query × provider) snapshot tracks mentioned (brand in answer text) and cited (domain in source links) independently. Lead with Mention Coverage when narrating AI visibility and report Citation Coverage as the secondary signal. Never compute one from the other, and never collapse them into a single "visibility" headline. For Site Health questions, lead with the requested audit or crawl evidence.

When a project has GA4 connected, traffic is a first-class signal alongside mentions and citations. Use cnry ga traffic and cnry ga attribution --trend for the current snapshot. Use the GA referral-history commands for daily series. Before you quote GA4 data, make sure that cnry ga status has a recent lastSyncedAt. If it is stale, get approval before you run cnry ga sync.

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 93 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
73
Repository forks
9
7-day trend score
22

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/ainyc/canonry/aero/badge)](https://verified-skill.com/skills/ainyc/canonry/aero)

Something wrong with this skill or its page? Tell us.