Skip to content

feat(skills): add geo-audit — generative engine optimization visibility - #2

Open
amritmirch wants to merge 2 commits into
mainfrom
skill/geo-audit
Open

feat(skills): add geo-audit — generative engine optimization visibility#2
amritmirch wants to merge 2 commits into
mainfrom
skill/geo-audit

Conversation

@amritmirch

Copy link
Copy Markdown
Owner

Adds geo-audit: a monthly skill that measures whether a web-grounded AI assistant recommends this project, and tracks that number over time.

SEO measures whether you rank. GEO measures whether you get named in the answer. When someone asks an assistant "best open source agent framework", the answer names three or four projects and the rest of the category effectively does not exist.

What it does

Runs a set of buyer-intent queries through live web search and scores each answer on three axes:

  • appear — named at all
  • prominencefirst / listed / mention / absent
  • sentimentaccurate / hedged / wrong

A clean win requires appear && sentiment == accurate; being named inaccurately is a disambiguation problem, not a win. Headline score is clean wins / total queries.

Beyond the score it extracts two things the number alone won't tell you:

  • name collisions — unrelated entities sharing the brand name on the branded query, the most expensive GEO failure mode
  • cited pages — every URL the answers drew from, deduped and ranked by how many queries cited it, tagged open (accepts PRs/comments) or editorial (needs outreach). This is the placement target list for the next month.

Diffs against the previous snapshot and reports only what moved.

Query-set design

The skill generates four kinds and requires the mix: category (the giants' query), niche (what you should already own), branded (surfaces collisions), problem (how buyers describe the pain before they know product names). An all-category set produces a flat 0/N that never moves and teaches nothing.

Honest limits, stated in the skill

  • Samples one web-grounded assistant, not every engine.
  • Answers are stochastic: the aggregate and the cited-page set are signal, a single flipped query is noise, and the skill is told never to report a flip as a trend.
  • Measures answers, not traffic.

Because answers are grounded in live pages rather than frozen training data, fixes surface in days to weeks, which is why the cadence is monthly: fast enough to see movement, slow enough for noise to average out.

Conventions followed

  • mode: read-only, same contract as seo-audit / competitor-monitor. Verified against skill_mode.sh: the mode grants WebSearch plus the redirect/notify primitives this needs, and no Write/Edit.
  • Snapshots at memory/geo-audit/<STAMP>.json, written before notifying so a notify failure never costs the baseline. Log to memory/logs/${today}.md.
  • Silent when nothing moved (GEO_NO_CHANGE), no-op with no target (GEO_NO_TARGET).
  • Registered enabled: false, schedule: "0 9 1 * *", so it is inert until switched on.
  • references/rubric.md fixes the scoring definitions (so a March score is comparable to an August one) and maps each failure mode to its fix.

Validation run locally

  • bin/generate-skills-json regenerated (74 → 75 skills)
  • eyebrow scan v0.4.1 (checksum-verified) regenerated eyebrowlock.json; findings: none; the CI coverage gate passes for every skill
  • validate-config.js CLEAN · check-skill-categories.sh OK · check-capabilities-parity.sh OK · validate-readme-catalog.mjs OK · validate-skill-packs.mjs OK

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant