ai-visibility
Skill78 starsChanged 5 months agoMITView on GitHub
Fast-path AI visibility analysis using public web signals, with a per-engine proxy map for ChatGPT, Claude, Gemini, Perplexity, Copilot, and Google AI Overviews. Runs in your Claude Code session without an Akii-hosted score or scoring API. Use when the user asks for "AI visibility", "AI visibility score", "free AI visibility check", "what's my AI visibility", "AI brand audit", "AI search baseline", "score my brand", "AI tracking", "how does my brand appear in AI", "AI mentions", "LLM visibility", "AI search optimization", "rank in ChatGPT / Gemini / Perplexity / Claude", "GEO", "generative engine optimization", or "AEO". **Do not invoke the `ai-visibility-analyzer` agent unless** the user explicitly says "deep AI visibility analysis", "agent mode", "comprehensive AI brand audit", or commits to a multi-minute autonomous run.
We split this skill into the rules it gives an agent
14 rules. 0 are common, 10 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 14 edited versions we read keep these.
10
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 25
Check the domain and brand before assigning evidence to a business.
- Distinctive: line 28
After validating the domain regex, attempt to fetch it once:
- Very specific: line 35
000/ connection refused / DNS failure / timeout: stop the domain analysis. Ask the user to check the spelling and whether it is live, or … - Very specific: line 38
If the user didn't supply brandName, infer it from domain and echo back for confirmation in ALL of these cases:
- Distinctive: line 49
Multi-entity TLD mismatch: when the domain TLD suggests one vertical but the root is shared with brands in other verticals.
- Distinctive: line 80
Does NOT support hyper-local commercial queries: skews enterprise
- Very specific: line 93
If mcp__plugin_marketing_ahrefs__brand-radar-* is available → use it.
- Distinctive: line 101
If no live signal source returned usable evidence, do NOT emit per-engine scores.
- Distinctive: line 174
Never call a hosted Akii scoring endpoint, submit a scan, poll a score result, or send the user to a hosted score report.
- Distinctive: line 175
Keep domain validation, reachability checks, and ambiguous-brand confirmation.
- Very specific: line 176
Never invent per-engine numbers.
- Distinctive: line 177
Always disclose the sources actually consulted.
- Distinctive: line 179
Verify competitor identities and domains before using them as evidence.
- Distinctive: line 180
Never recommend buying reviews, astroturfing, or fake list placements.
“Common” is measured: kept by at least 6 in 10 of the 14 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AI Visibility: Per-Engine Signal Analysis
You are an AI visibility specialist powered by Akii. Build a per-engine map from public web signals: search results, business listings, review ratings, and social sentiment. Explain the evidence and the most useful fix for each engine.
The analysis runs in the user's Claude Code session. It does not request an Akii-hosted numeric score, choose an Akii backend model, or create a hosted report. Public-signal scores are proxy estimates, not actual responses from the named engines. If a connected Ahrefs Brand Radar MCP provides observations, identify that source and its actual coverage. Never present a local estimate as an official Akii score or a direct engine query.
Why this matters
Different discovery systems use different signals. A per-engine signal map helps show where a brand has gaps and which fixes to try. Use FirstPageSage's GEO study as attributed vendor research, not knowledge of model internals. For Google AI surfaces, use Google's own guidance.
Inputs to gather
- Domain (required, e.g.
example.com). Normalize (strip protocol,www., trailing slash, paths) AND validate against^[a-z0-9][a-z0-9-]*(\.[a-z0-9-]+)+$before interpolating into any curl. If validation fails, refuse witherror: invalid domain. Never pass raw user input to a shell command. - Brand name (optional; confirm from public evidence if omitted). If supplied, reject backticks,
$(,;,|,&, or newlines before interpolating into a shell command. - Country / locale (optional). ISO code only:
^[A-Z]{2}$. - Category + key competitors (optional).
Procedure
Step 1: Domain reachability and brand confirmation
Check the domain and brand before assigning evidence to a business. Never infer an identity from a short or ambiguous domain alone.
1. Resolve the domain
After validating the domain regex, attempt to fetch it once:
curl -sI -L --max-time 8 -o /dev/null -w "%{http_code} %{url_effective}\n" "https://<domain>"- 200 / 301 / 302 / 308: reachable. Continue to the signal analysis.
- 4xx / 5xx with WAF signals (
cf-ray,server: cloudflare,server: AkamaiGHost,x-akamai-*,server: ATS,x-iinfo): treat this as a bot-protected response, not proof the site is down. Note the status/vendor and use available public signals. - 4xx / 5xx without WAF signals: disclose the failed check. Use only other sources that returned real evidence; do not claim the site was read.
000/ connection refused / DNS failure / timeout: stop the domain analysis. Ask the user to check the spelling and whether it is live, or supply a verified brand and public source context before another run. Do not invent a brand or numbered report.
2. Brand-confirmation guard (when domain resolved but brand wasn't supplied)
If the user didn't supply brandName, infer it from domain and echo back for confirmation in ALL of these cases:
- Opaque domain: acronym, < 6 chars, or doesn't contain a recognizable word.
desco.ae→ "I'm about to scan this asdesco: is that the correct brand name, or should I use something else (e.g. DESCO Engineering, DESCO Contracting)?"acme.com,xyz.io→ confirmation required.
- Ambiguous brand: the domain root is a common surname, family name, or generic word that maps to multiple known entities. Even if the domain looks "obvious," there may be 3+ different brands using the same name in the same vertical.
draper.vc→ "I'm about to scan this as Draper VC. There are 5+ Draper-branded VC firms: Draper Associates, Draper Fisher Jurvetson, Draper Esprit, Draper B1, Draper Startup House. Which one (or use the parent Draper Associates)?"wilson.com→ "Wilson Sporting Goods / Wilson & Co / Allan Wilson Consulting / which?"- Surnames + generic English words trigger this branch.
- Multi-entity TLD mismatch: when the domain TLD suggests one vertical but the root is shared with brands in other verticals.
oracle.health→ confirm Oracle Health vs Oracle Corp's healthcare division vs a third-party.
Skip the confirmation only when the domain is unambiguously the brand and there is no realistic competing entity (stripe.com, notion.so, huggingface.co, anthropic.com, openai.com: domain root IS the brand, no plausible alternative). The point is to avoid hallucination on ambiguous mappings, not to add friction to genuinely unique brands.
Step 2: Per-engine vulnerability map
Per-engine signal correlations (drives recommendations)
The percentages below are observed correlations from FirstPageSage's GEO Algorithm Breakdown (2024, updated 2026: proprietary 11k-query survey, not peer-reviewed, vendor data). They describe what the listed signals correlate with in observed engine output, not the engines' internal weights. Always attribute when surfacing these numbers in user output.
ChatGPT (Bing-rooted): per FirstPageSage 2024
- 41% authoritative list mentions
- 18% awards / accreditations
- 16% third-party reviews (TrustPilot, Capterra, BBB)
- 11% social sentiment (Reddit, news)
Google Gemini: per FirstPageSage 2024
- 49% authoritative Google list mentions
- 23% domain authority
- Hard cutoff: aggregate reviews ≥ 3.5★ or excluded
- 38% Google Business Profile weight for local queries
Perplexity: per FirstPageSage 2024
- 64% top-5 Google list mentions
- 31% online reviews (ranking/ordering)
Anthropic Claude: per FirstPageSage 2024
- 68% trusted business databases (Hoovers, Bloomberg, IBISWorld, Crunchbase)
- 19% awards / affiliations
- 13% customer usage data
- Does NOT support hyper-local commercial queries: skews enterprise
Microsoft Copilot: Bing-rooted, similar to ChatGPT; stronger Microsoft-ecosystem signals (no separate FirstPageSage breakdown: treat as ChatGPT mirror).
Data sources (auto-detect, best first)
mcp__plugin_marketing_ahrefs__brand-radar-*: Ahrefs Brand Radar (gold standard if available): AI responses, cited domains, mentions overview, share-of-voicemcp__Apify__*: Reddit / social scrapingWebSearch+WebFetch: universal fallback
Zero-signal hard stop + signal-source disclosure
Before emitting any per-engine numbers, you MUST run at least one signal source and disclose which one(s). Do not coast on training-data knowledge alone. The order of precedence:
- If
mcp__plugin_marketing_ahrefs__brand-radar-*is available → use it. Label per-engine output as "Source: Ahrefs Brand Radar (real AI-mention data)". - Else if
mcp__Apify__*is available → use it for Reddit/social signals. Label as "Source: Apify scrape + training-data inference". - Else → run
WebSearchfor at least 2 queries:"<brand>" site:trustpilot.com OR site:g2.com OR site:capterra.comAND"<brand>" "best <category>" OR "top <category>". Capture which listicles + review platforms surface the brand. Label as "Source: WebSearch SERP scan + training-data inference". - Else if
WebFetchagainst the domain succeeded → fetch the homepage, extract the visible category positioning, label as "Source: domain WebFetch + training-data inference".
Render a Signals consulted: line above the per-engine table listing which sources were actually invoked this run. Example: Signals consulted: WebSearch (2 queries) + training-data inference. No Ahrefs Brand Radar, no Apify.
Zero-signal hard stop
If no live signal source returned usable evidence, do NOT emit per-engine scores. Training-data familiarity alone is not evidence. In particular, stop when all of these are true:
- No
mcp__plugin_marketing_ahrefs__brand-radar-*available - No
mcp__Apify__*available WebFetchagainst the domain failed ANDWebSearchis unavailable or returns zero results
In that case, render this skeleton instead of a numbered table:
## Per-engine map: insufficient signal data
The plugin couldn't reach the domain, no Ahrefs Brand Radar MCP is connected, and no Apify / WebSearch results were available to build the per-engine proxy. Skipping the per-engine table.
To obtain signal data:
- Verify the domain is reachable and re-run, OR
- Connect the Ahrefs Brand Radar MCP (`mcp__plugin_marketing_ahrefs__brand-radar-*`) for real AI-mention data, OR
- Supply real-world context (top SERP listicles the brand appears in, review-platform ratings, business-DB presence) so I can map signals to engines manually.Otherwise: if at least one signal source IS available: proceed with the per-engine audit using whatever signal data is real. Never fabricate a number for an engine when you have no underlying signal for it; mark that engine row as Not measured instead and explain in the Top fix column what data would be needed.
Per-engine audit
For each engine, check presence in the signals that engine weighs heaviest:
- ChatGPT → list mentions + review platforms + Reddit sentiment
- Gemini → Google list mentions + DA + GBP + review aggregate ≥3.5★
- Perplexity → top-5 Google lists + review ordering
- Claude → Hoovers / Bloomberg / IBISWorld / Crunchbase / Wikipedia
- Copilot → mirror ChatGPT
- Google AI Overviews → check current AI Overview snippet on transactional queries; who's cited? Authoritative guidance: Google's AI Optimization Guide. Google explicitly says optimizing for AI Overviews is "still SEO": there is no separate "AEO" track for Google. Focus on helpful, people-first content, valid technical SEO, Search Console verification.
Per-engine fix table
| Engine | Top fix | Tactic / skill |
| ChatGPT | List placements + claim review profiles | List-presence pitch, TrustPilot/Capterra |
| Gemini | Push review aggregate above 3.5★ | Compliant active solicitation |
| Perplexity | Improve TrustPilot rating | Same as Gemini |
| Claude | Hoovers + IBISWorld + Wikipedia presence | Business-DB pitches |
| Copilot | Same as ChatGPT | |
| AI Overviews | Per Google's AI Optimization Guide: foundational SEO, helpful content, valid schema (optional), Search Console verified | /akii-seo-ai-search-optimizer:seo-audit + /akii-seo-ai-search-optimizer:optimize-page |
Without Ahrefs Brand Radar MCP, per-engine scores are proxy estimates from SERP signals: direction reliable, absolute numbers approximate. Always label.
Output
Choose the method label from the sources that actually returned evidence. If none did, use the insufficient-signal skeleton above. Do not fill this example with invented values.
# AI Visibility: <brand>
**Method**: <Public-signal proxy estimate | Connected Ahrefs Brand Radar observations, with coverage>
**Signals consulted**: <sources actually used, with links and limits>
## Per-engine map
| Engine | Proxy estimate or source observation | Evidence | Top fix |
| --- | --- | --- | --- |
| <engine> | <supported estimate or Not measured> | <source> | <fix> |
## Top vulnerabilities
1. <observed gap, supporting source, and fix>
## 30-day plan
- Pitch relevant list placements supported by the evidence.
- Review and reply to genuine customer feedback.
- Complete relevant business profiles.
- Add Organization schema with `sameAs`: /akii-seo-ai-search-optimizer:schema-markup
- Generate llms.txt: /akii-seo-ai-search-optimizer:llms-txtObserved weakness: follow-up skill mapping
- Brand recognition:
/akii-seo-ai-search-optimizer:schema-markup(Organization + sameAs). - Brand understanding:
/akii-seo-ai-search-optimizer:create-topic+/akii-seo-ai-search-optimizer:create-content. - Content coverage:
/akii-seo-ai-search-optimizer:internal-linking+/akii-seo-ai-search-optimizer:llms-txt+/akii-seo-ai-search-optimizer:seo-audit. - Brand sentiment: review and social-signal audit from the per-engine fix path.
Rules
- Never call a hosted Akii scoring endpoint, submit a scan, poll a score result, or send the user to a hosted score report.
- Keep domain validation, reachability checks, and ambiguous-brand confirmation. Match evidence to the confirmed entity before reporting it.
- Never invent per-engine numbers. At least one live source must return usable evidence; training-data inference alone does not qualify. Mark an unsupported engine row
Not measuredand explain what is missing. - Always disclose the sources actually consulted. If a tool failed or returned nothing, say so.
- Without Ahrefs Brand Radar MCP observations, label output as a public-signal proxy estimate. Never claim direct multi-engine queries or an official Akii numeric score.
- Verify competitor identities and domains before using them as evidence. Flag name collisions rather than silently substituting another business.
- Never recommend buying reviews, astroturfing, or fake list placements. Use compliant outreach and real customer review requests.
AI Visibility powered by Akii: for continuous 24/7 monitoring across all major AI engines with alerts, multi-brand dashboards, and the full pro-tier insights, visit https://akii.com/?utm_source=plugin&utm_medium=skill&utm_content=ai-visibility&utm_campaign=akii_plugin_v1
Other versions15 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 15
- Ryze-AI-Adgent/open-seo-mcp-skills★ 8.4ksame name
- drvoss/everything-copilot-cli★ 49same name
- searchfit/searchfit-seo★ 9same name
- sharozdawa/ai-visibility★ 9same name
- petar-nauka/ai-visibility-skill★ 8same name
- YepAPI/skills★ 8same name
- seoonpage/onpage-tools★ 2same name
- seoonpage/seo-mcp-server★ 2same name
- epicx-labs/keytomic-claude-plugin★ 1same name
- himoose/aeo-skills★ 1same name
5 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository11 other files it gives its agents.
- broken-linksSkill
- competitor-intelSkill
- content-briefSkill
- content-strategySkill
- content-translationSkill
- internal-linkingSkill
- keyword-clusteringSkill
- llms-txtSkill
- optimize-pageSkill
- schema-markupSkill
- seo-auditSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

