From aeko-plugin
Brand-level competitor positioning analysis. Gathers public signals about the competitor via WebSearch / WebFetch, asks Claude for positioning interpretation, then cross-references AEKO's tracked-prompt citation data to show exactly where the competitor wins AI answers that the user's brand doesn't. Replaces the retired `aeko_get_product_analysis` backend tool and the legacy `/competitive-research` skill.
How this skill is triggered — by the user, by Claude, or both
Slash command
/aeko-plugin:aeko-brand-competitor-analysis [domain-id] <competitor>[domain-id] <competitor>This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Produces a competitor-positioning analysis at the **brand level** (not product level — for that use `/aeko-product-competitor-analysis`). Output: a clear picture of what the competitor stands for publicly, where they win AI answers, and one concrete action the user could take.
Produces a competitor-positioning analysis at the brand level (not product level — for that use /aeko-product-competitor-analysis). Output: a clear picture of what the competitor stands for publicly, where they win AI answers, and one concrete action the user could take.
Frame this as "why AI may mention this competitor instead of us." Start with public positioning, AI visibility gap, and one practical next move. Keep source caveats clear; never imply AEKO has measured a signal when it is inferred from WebSearch/WebFetch.
Language: mirror the user's chat language for user-facing steps, summaries, questions, and next actions. Keep slash commands, IDs, file paths, channel slugs, schema keys, and tool names in English/ASCII.
domain-id (optional) — UUID. Missing → aeko_list_domains pick-list.competitor (required) — Competitor name OR root domain (e.g. "필리" or "pilly.co.kr"). Passed as $1 (if no domain arg) or $2.$1 / $2. If first positional is clearly a UUID → domain_id, second is competitor. Else treat the positional as competitor and resolve domain via aeko_list_domains.aeko_get_domain_info(domain_id) + aeko_get_brand_kit(domain_id) to ground the "vs us" comparison.If competitor is a name (not URL), run a quick WebSearch for "<competitor>" official site to resolve to a root domain. Confirm with the user if ambiguous.
Collect in parallel where possible:
WebFetch(<competitor_root>). Extract: tagline, hero messaging, top-nav categories, whether llms.txt / structured data is present.WebSearch("<competitor> site:wikipedia.org") and WebSearch("<competitor> site:wikidata.org"). If results → the competitor has AI-knowledge-graph recognition, which is a load-bearing signal.WebSearch("<competitor> news 2026") (adjust year if needed). Surface any fundraising, product launches, brand refresh.WebSearch("<competitor> partnership OR acquired OR launch") — optional if prose asks for depth.Record the sources. Do NOT fabricate; if a search returns empty, note that.
This is the AEKO-grounded layer — skip this step and you're just a WebSearch wrapper.
aeko_get_visibility_summary(domain_id, scope="cited_sources") — surfaces pages from the user's domain AI engines cite.brand_kit.brand_keywords[] + aeko_search_research_prompts(scope=..., country=...) if no tracked set yet):
aeko_get_tracked_prompt(prompt_id, window="30d") for cited-source analysis.responses[].mentions.responses[].citations[].domain.| Prompt | Our mentions | Competitor mentions | Our citations | Competitor citations |
|--------|--------------|---------------------|---------------|----------------------|
| ... | ... | ... | ... | ... |
Rank prompts by competitor_mentions + competitor_citations - our_mentions - our_citations. Top rows = prompts where the competitor is winning and the user isn't.
Compose a markdown report:
# Competitor Analysis: <competitor>
**Against:** <user's brand> (`<domain>`)
**Generated:** <ISO date>
## Public positioning
- **Tagline:** <from hero crawl, or "none found">
- **Top categories:** <from top-nav>
- **Wikipedia entity:** <yes with URL | no>
- **Wikidata entity:** <yes with URL | no>
- **Recent news:** <1-3 headlines, each with date and URL>
## AI visibility footprint vs <user's brand>
(Embed the comparison matrix from Step 3.)
**Interpretation:**
<one paragraph on what the matrix shows — e.g. "The competitor dominates
awareness-stage informational prompts in KR; we're stronger at
recommendation-stage prompts where brand reputation matters. The gap is
most pronounced in the top-3 prompts, where our brand is absent from
AI answers entirely.">
## What the competitor does that we don't
(From Step 2 signals that translate to AEO leverage:)
- Wikipedia entity → AI models have richer embeddings for them
- llms.txt on root → declared AI-readability
- Structured data present → Product / FAQPage / Organization schemas
- Recent news coverage → fresh signal for news-aware AI engines
- **Content frameworks** → where the competitor's *cited pages* win on substance, name it in the plugin's
AEO vocabulary (BLUF / PREP / Informational Gain / E-E-A-T — see
`skills/aeko-create-content/references/aeo-frameworks.md`) so the gap maps to a fix the executor skills apply.
For each present for competitor but absent for user → flag.
## Recommended action
<one concrete command the user could run to start closing the gap>
Write to ./aeko-artifacts/<domain_id>/competitor-analyses/<competitor-slug>-<YYYYMMDD>.md.
User-facing summary:
✔ Competitor analysis saved: <path>
Competitor: <competitor>
Biggest gap: <top row from Step 3 matrix>
Next: <recommended action command>
/aeko-find-prompts-to-track as a prerequisite./aeko-product-competitor-analysis.npx claudepluginhub aeko-intelligence/aeko-plugin --plugin aeko-pluginGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.