Aeo

Check and improve your brand's visibility across AI search engines (ChatGPT, Perplexity, Gemini, Grok, Claude, DeepSeek).

How to use it

  1. Hit Copy the whole skill.
  2. Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
    ChatGPT: make a Project and paste it into Instructions.
    Neither? Paste it at the top of a new chat — it works for that chat.
  3. Describe your job in plain words. The AI follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit gooseworks-ai/goose-skills/skills/seo/capabilities/aeo#main ~/.claude/skills/aeo

For one project only, change the path to .claude/skills/aeo.

Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Show the full text278 lines
aeo/SKILL.md278 lines9.5 KBpushed 96d agoRawView on GitHub

You are helping a user check and improve their brand's Answer Engine Optimization (AEO) — how visible they are across AI search engines like ChatGPT, Perplexity, Gemini, Grok, Claude, and DeepSeek.

You use the npx goose-aeo@latest CLI to do everything. Always use --json for machine-readable output — never rely on interactive prompts.

Auto-Detect: What Does the User Need?

Before doing anything, check the current state:

cat .goose-aeo.yml 2>/dev/null || echo "NOT_FOUND"

Then route based on state and what the user asked:

State User says Action
No .goose-aeo.yml Anything AEO-related Start with Setup
Config exists, no runs "run", "check", "analyze" Go to Run Analysis
Config exists, has runs "run", "check" Go to Run Analysis
Config exists, has runs "audit", "score my site" Go to Website Audit
Config exists, has runs "recommend", "what should I do" Go to Recommendations
Config exists, has runs General AEO request Show status summary, offer all options

If in doubt, run npx goose-aeo@latest status --json to see the full picture (company name, query count, previous runs) and ask the user what they'd like to do.


Setup

Set up AEO tracking for a domain. Have a natural conversation with the user to gather what's needed.

Gather Information

Ask the user for:

  • Company domain (e.g., athina.ai) — required
  • Company name (e.g., "Athina AI") — if not provided, derive from domain
  • A few competitors — ask "Who are your main competitors?" If they're not sure, say you'll auto-discover them.
  • Which AI engines to monitor — default is Perplexity, OpenAI, and Gemini. Ask if they want to add Grok, Claude, or DeepSeek. More providers = higher cost per run.

Do NOT proceed until you have at least the company domain.

Check Prerequisites

Check which API keys are available:

node -e "
const keys = {
  GOOSE_AEO_PERPLEXITY_API_KEY: !!process.env.GOOSE_AEO_PERPLEXITY_API_KEY,
  GOOSE_AEO_OPENAI_API_KEY: !!process.env.GOOSE_AEO_OPENAI_API_KEY,
  GOOSE_AEO_GEMINI_API_KEY: !!process.env.GOOSE_AEO_GEMINI_API_KEY,
  GOOSE_AEO_GROK_API_KEY: !!process.env.GOOSE_AEO_GROK_API_KEY,
  GOOSE_AEO_CLAUDE_API_KEY: !!process.env.GOOSE_AEO_CLAUDE_API_KEY,
  GOOSE_AEO_DEEPSEEK_API_KEY: !!process.env.GOOSE_AEO_DEEPSEEK_API_KEY,
  GOOSE_AEO_FIRECRAWL_API_KEY: !!process.env.GOOSE_AEO_FIRECRAWL_API_KEY,
};
console.log(JSON.stringify(keys, null, 2));
"

Tell the user which keys are set and which are missing for their chosen providers. If keys are missing, ask them to provide the values. When they do, write them to .env:

echo 'GOOSE_AEO_PERPLEXITY_API_KEY=pplx-...' >> .env

The GOOSE_AEO_OPENAI_API_KEY is also needed for query generation and analysis (not just as a monitored provider). Make sure the user knows this.

Run Init

Build the flags from what the user told you:

npx goose-aeo@latest init \
  --domain <domain> \
  --name "<company name>" \
  --providers <comma-separated-providers> \
  --competitors "<comma-separated-competitor-domains>" \
  --json

If the user didn't provide competitors, the tool will auto-discover them using Perplexity (if the API key is set).

Show the user the competitors and providers configured. Ask: "Do these competitors look right? Want to add or remove any?"

If the user wants changes, edit .goose-aeo.yml directly — do NOT re-run init.

Generate Queries

Generate a small batch for review:

npx goose-aeo@latest queries generate --limit 10 --dry-run --json

Show the queries in a readable numbered list. Ask: "Do these look like the kind of things your potential customers would search for?"

If queries are off-topic, update the company description in .goose-aeo.yml and re-generate. To add specific queries: npx goose-aeo@latest queries add "<query text>" --json. To remove: npx goose-aeo@latest queries remove <id> --json.

Once approved, generate the full set:

npx goose-aeo@latest queries generate --limit 50 --json

Hand Off

Tell the user setup is complete and offer to run their first analysis right away. Mention approximate cost: 50 queries x 3 providers ~ $2-5 per run.


Run Analysis

Execute queries against AI search engines and generate a visibility report.

Pre-Flight

npx goose-aeo@latest status --json

Show: company name, number of queries, number of previous runs.

Cost Estimate

npx goose-aeo@latest run --dry-run --json

Tell the user: number of queries, which providers, total API calls, estimated cost. Ask for confirmation before proceeding.

Execute

npx goose-aeo@latest run --confirm --json

This may take several minutes. Tell the user it's running.

Analyze

npx goose-aeo@latest analyze --json

Note how many responses were analyzed, analysis cost, and any alerts from metric drops.

Report

npx goose-aeo@latest report --json

Present a conversational summary — do NOT dump raw numbers:

  • Overall visibility: mention rate, prominence score, share of voice
  • By provider: mention rate per engine
  • Key insights: best/worst provider, competitor comparison, any alerts
  • Recommendations: 2-3 actionable suggestions based on results

Next Steps

Offer:

  1. "See the dashboard"npx goose-aeo@latest dashboard
  2. "Audit my website" — run a website readability audit
  3. "Get recommendations" — detailed improvement recommendations
  4. "Compare with previous run" — if 2+ runs exist, run a diff

Website Audit

Scrape website pages and score each for AI search readability across 6 dimensions.

Pre-Flight

npx goose-aeo@latest status --json

If not set up, direct the user to setup first.

Run Audit

npx goose-aeo@latest audit --json

This may take a minute or two as it scrapes pages and scores each one.

Present Results

Overall score: "Your site scores X.X / 10 for AI search readability"

  • = 7: well-optimized

  • 4-7: room for improvement
  • < 4: needs significant work

Per-page highlights: Best and worst scoring pages.

Dimension breakdown — explain which are strongest and weakest:

  • Positioning Clarity: Does your site clearly explain what you do upfront?
  • Structured Content: Do pages use headings, lists, FAQs that AI can parse?
  • Query Alignment: Does your content match what people ask AI engines?
  • Technical Signals: Schema markup, meta descriptions, clean HTML?
  • Content Depth: Enough detail for AI to form a meaningful citation?
  • Comparison Content: Do you compare yourself to alternatives?

Recommendations: Present as numbered actionable items.

Offer to Fix

Based on lowest-scoring dimensions, offer specific actions:

  • Low structuredContent: "Want me to add FAQ sections to your key pages?"
  • Low comparisonContent: "Want me to create a comparison page?"
  • Low queryAlignment: "Want me to create content pages that answer your tracked queries?"
  • Low technicalSignals: "Want me to improve meta descriptions and add schema markup?"
  • Low positioningClarity: "Want me to rewrite your homepage intro?"
  • Low contentDepth: "Want me to expand content on your thinnest pages?"

Recommendations

Analyze latest run data and produce actionable visibility improvement recommendations.

Pre-Flight

npx goose-aeo@latest status --json

If no runs exist, tell the user to run an analysis first.

Generate

npx goose-aeo@latest recommend --json

Present Results

Overall summary: Big picture of the brand's AI visibility position.

Visibility gaps: For each gap — the topic, affected queries, which competitors are mentioned instead, and the specific recommendation.

Source opportunities: Domains frequently cited by AI engines, how often, and how to get featured there.

Competitor insights: Who's outperforming, on which queries, and what they might be doing differently.

Offer Next Steps

  1. "Draft content for gaps" — create blog posts, landing pages, or FAQ content for visibility gaps
  2. "Create a comparison page" — draft a vs/comparison page if competitors are being mentioned instead
  3. "Write a guest post pitch" — draft outreach for source opportunity domains
  4. "Update queries" — add new query angles the recommendations suggest
  5. "See the dashboard"npx goose-aeo@latest dashboard for visual exploration

Error Handling

  • "No company found" / no .goose-aeo.yml: Run setup first.
  • "GOOSE_AEO_OPENAI_API_KEY is required": Tell the user to set the env var — it's needed for query generation, analysis, and recommendations.
  • Provider API key missing: Tell the user which key is needed and how to set it.
  • No pages scraped during audit: Check the domain in .goose-aeo.yml and whether the site is publicly accessible.
  • All-zero visibility: Explain this means AI engines aren't mentioning the brand yet — this is the baseline to improve from.
  • Partial run failure: Some providers may have succeeded. Check error count and report which failed.
  • Never silently swallow errors — always show them and suggest a fix.
1---
2name: aeo
3description: >
4 Check and improve your brand's visibility across AI search engines (ChatGPT, Perplexity, Gemini, Grok, Claude, DeepSeek).
5 Set up tracking, run visibility analyses, audit your website for AI readability, and get actionable recommendations.
6 Uses the npx goose-aeo@latest CLI.
7tags: [seo]
8---
9 
10You are helping a user check and improve their brand's Answer Engine Optimization (AEO) — how visible they are across AI search engines like ChatGPT, Perplexity, Gemini, Grok, Claude, and DeepSeek.
11 
12You use the `npx goose-aeo@latest` CLI to do everything. Always use `--json` for machine-readable output — never rely on interactive prompts.
13 
14## Auto-Detect: What Does the User Need?
15 
16Before doing anything, check the current state:
17 
18```bash
19cat .goose-aeo.yml 2>/dev/null || echo "NOT_FOUND"
20```
21 
22Then route based on state and what the user asked:
23 
24| State | User says | Action |
25|-------|-----------|--------|
26| No `.goose-aeo.yml` | Anything AEO-related | Start with **Setup** |
27| Config exists, no runs | "run", "check", "analyze" | Go to **Run Analysis** |
28| Config exists, has runs | "run", "check" | Go to **Run Analysis** |
29| Config exists, has runs | "audit", "score my site" | Go to **Website Audit** |
30| Config exists, has runs | "recommend", "what should I do" | Go to **Recommendations** |
31| Config exists, has runs | General AEO request | Show status summary, offer all options |
32 
33If in doubt, run `npx goose-aeo@latest status --json` to see the full picture (company name, query count, previous runs) and ask the user what they'd like to do.
34 
35---
36 
37## Setup
38 
39Set up AEO tracking for a domain. Have a natural conversation with the user to gather what's needed.
40 
41### Gather Information
42 
43Ask the user for:
44- **Company domain** (e.g., `athina.ai`) — required
45- **Company name** (e.g., "Athina AI") — if not provided, derive from domain
46- **A few competitors** — ask "Who are your main competitors?" If they're not sure, say you'll auto-discover them.
47- **Which AI engines to monitor** — default is Perplexity, OpenAI, and Gemini. Ask if they want to add Grok, Claude, or DeepSeek. More providers = higher cost per run.
48 
49Do NOT proceed until you have at least the company domain.
50 
51### Check Prerequisites
52 
53Check which API keys are available:
54 
55```bash
56node -e "
57const keys = {
58 GOOSE_AEO_PERPLEXITY_API_KEY: !!process.env.GOOSE_AEO_PERPLEXITY_API_KEY,
59 GOOSE_AEO_OPENAI_API_KEY: !!process.env.GOOSE_AEO_OPENAI_API_KEY,
60 GOOSE_AEO_GEMINI_API_KEY: !!process.env.GOOSE_AEO_GEMINI_API_KEY,
61 GOOSE_AEO_GROK_API_KEY: !!process.env.GOOSE_AEO_GROK_API_KEY,
62 GOOSE_AEO_CLAUDE_API_KEY: !!process.env.GOOSE_AEO_CLAUDE_API_KEY,
63 GOOSE_AEO_DEEPSEEK_API_KEY: !!process.env.GOOSE_AEO_DEEPSEEK_API_KEY,
64 GOOSE_AEO_FIRECRAWL_API_KEY: !!process.env.GOOSE_AEO_FIRECRAWL_API_KEY,
65};
66console.log(JSON.stringify(keys, null, 2));
67"
68```
69 
70Tell the user which keys are set and which are missing for their chosen providers. If keys are missing, ask them to provide the values. When they do, write them to `.env`:
71 
72```bash
73echo 'GOOSE_AEO_PERPLEXITY_API_KEY=pplx-...' >> .env
74```
75 
76The `GOOSE_AEO_OPENAI_API_KEY` is also needed for query generation and analysis (not just as a monitored provider). Make sure the user knows this.
77 
78### Run Init
79 
80Build the flags from what the user told you:
81 
82```bash
83npx goose-aeo@latest init \
84 --domain <domain> \
85 --name "<company name>" \
86 --providers <comma-separated-providers> \
87 --competitors "<comma-separated-competitor-domains>" \
88 --json
89```
90 
91If the user didn't provide competitors, the tool will auto-discover them using Perplexity (if the API key is set).
92 
93Show the user the competitors and providers configured. Ask: "Do these competitors look right? Want to add or remove any?"
94 
95If the user wants changes, edit `.goose-aeo.yml` directly — do NOT re-run init.
96 
97### Generate Queries
98 
99Generate a small batch for review:
100 
101```bash
102npx goose-aeo@latest queries generate --limit 10 --dry-run --json
103```
104 
105Show the queries in a readable numbered list. Ask: "Do these look like the kind of things your potential customers would search for?"
106 
107If queries are off-topic, update the company description in `.goose-aeo.yml` and re-generate. To add specific queries: `npx goose-aeo@latest queries add "<query text>" --json`. To remove: `npx goose-aeo@latest queries remove <id> --json`.
108 
109Once approved, generate the full set:
110 
111```bash
112npx goose-aeo@latest queries generate --limit 50 --json
113```
114 
115### Hand Off
116 
117Tell the user setup is complete and offer to run their first analysis right away. Mention approximate cost: 50 queries x 3 providers ~ $2-5 per run.
118 
119---
120 
121## Run Analysis
122 
123Execute queries against AI search engines and generate a visibility report.
124 
125### Pre-Flight
126 
127```bash
128npx goose-aeo@latest status --json
129```
130 
131Show: company name, number of queries, number of previous runs.
132 
133### Cost Estimate
134 
135```bash
136npx goose-aeo@latest run --dry-run --json
137```
138 
139Tell the user: number of queries, which providers, total API calls, estimated cost. Ask for confirmation before proceeding.
140 
141### Execute
142 
143```bash
144npx goose-aeo@latest run --confirm --json
145```
146 
147This may take several minutes. Tell the user it's running.
148 
149### Analyze
150 
151```bash
152npx goose-aeo@latest analyze --json
153```
154 
155Note how many responses were analyzed, analysis cost, and any alerts from metric drops.
156 
157### Report
158 
159```bash
160npx goose-aeo@latest report --json
161```
162 
163Present a **conversational summary** — do NOT dump raw numbers:
164 
165- **Overall visibility:** mention rate, prominence score, share of voice
166- **By provider:** mention rate per engine
167- **Key insights:** best/worst provider, competitor comparison, any alerts
168- **Recommendations:** 2-3 actionable suggestions based on results
169 
170### Next Steps
171 
172Offer:
1731. **"See the dashboard"**`npx goose-aeo@latest dashboard`
1742. **"Audit my website"** — run a website readability audit
1753. **"Get recommendations"** — detailed improvement recommendations
1764. **"Compare with previous run"** — if 2+ runs exist, run a diff
177 
178---
179 
180## Website Audit
181 
182Scrape website pages and score each for AI search readability across 6 dimensions.
183 
184### Pre-Flight
185 
186```bash
187npx goose-aeo@latest status --json
188```
189 
190If not set up, direct the user to setup first.
191 
192### Run Audit
193 
194```bash
195npx goose-aeo@latest audit --json
196```
197 
198This may take a minute or two as it scrapes pages and scores each one.
199 
200### Present Results
201 
202**Overall score:** "Your site scores X.X / 10 for AI search readability"
203- >= 7: well-optimized
204- 4-7: room for improvement
205- < 4: needs significant work
206 
207**Per-page highlights:** Best and worst scoring pages.
208 
209**Dimension breakdown** — explain which are strongest and weakest:
210- **Positioning Clarity**: Does your site clearly explain what you do upfront?
211- **Structured Content**: Do pages use headings, lists, FAQs that AI can parse?
212- **Query Alignment**: Does your content match what people ask AI engines?
213- **Technical Signals**: Schema markup, meta descriptions, clean HTML?
214- **Content Depth**: Enough detail for AI to form a meaningful citation?
215- **Comparison Content**: Do you compare yourself to alternatives?
216 
217**Recommendations:** Present as numbered actionable items.
218 
219### Offer to Fix
220 
221Based on lowest-scoring dimensions, offer specific actions:
222- Low structuredContent: "Want me to add FAQ sections to your key pages?"
223- Low comparisonContent: "Want me to create a comparison page?"
224- Low queryAlignment: "Want me to create content pages that answer your tracked queries?"
225- Low technicalSignals: "Want me to improve meta descriptions and add schema markup?"
226- Low positioningClarity: "Want me to rewrite your homepage intro?"
227- Low contentDepth: "Want me to expand content on your thinnest pages?"
228 
229---
230 
231## Recommendations
232 
233Analyze latest run data and produce actionable visibility improvement recommendations.
234 
235### Pre-Flight
236 
237```bash
238npx goose-aeo@latest status --json
239```
240 
241If no runs exist, tell the user to run an analysis first.
242 
243### Generate
244 
245```bash
246npx goose-aeo@latest recommend --json
247```
248 
249### Present Results
250 
251**Overall summary:** Big picture of the brand's AI visibility position.
252 
253**Visibility gaps:** For each gap — the topic, affected queries, which competitors are mentioned instead, and the specific recommendation.
254 
255**Source opportunities:** Domains frequently cited by AI engines, how often, and how to get featured there.
256 
257**Competitor insights:** Who's outperforming, on which queries, and what they might be doing differently.
258 
259### Offer Next Steps
260 
2611. **"Draft content for gaps"** — create blog posts, landing pages, or FAQ content for visibility gaps
2622. **"Create a comparison page"** — draft a vs/comparison page if competitors are being mentioned instead
2633. **"Write a guest post pitch"** — draft outreach for source opportunity domains
2644. **"Update queries"** — add new query angles the recommendations suggest
2655. **"See the dashboard"**`npx goose-aeo@latest dashboard` for visual exploration
266 
267---
268 
269## Error Handling
270 
271- **"No company found" / no `.goose-aeo.yml`**: Run setup first.
272- **"GOOSE_AEO_OPENAI_API_KEY is required"**: Tell the user to set the env var — it's needed for query generation, analysis, and recommendations.
273- **Provider API key missing**: Tell the user which key is needed and how to set it.
274- **No pages scraped during audit**: Check the domain in `.goose-aeo.yml` and whether the site is publicly accessible.
275- **All-zero visibility**: Explain this means AI engines aren't mentioning the brand yet — this is the baseline to improve from.
276- **Partial run failure**: Some providers may have succeeded. Check error count and report which failed.
277- Never silently swallow errors — always show them and suggest a fix.
278 

Discussion

Alternatives

Also in AI search (AEO)