positioning-map
Build a positioning map for 3–5 competitors and identify the empty quadrant the founder could own. Use when a founder asks "where's the positioning gap?", "how do I position against X?", "what's the competitive landscape look like on hero / pricing / hiring / customers?", or needs a structured comparison before a launch, repositioning, or fundraise. Combines Anysite MCP (LinkedIn company entity + post search + jobs search; SEC for late-stage) with Exa MCP (fetch JS-heavy SaaS marketing pages, find case studies and changelogs). Returns a comparison table across 5 axes (hero / pricing / specialities / recent shipping / hiring), 3 candidate positioning moves with explicit choice criteria, and a one-sentence positioning statement. Requires customer pain themes as input — positioning without pain context is just rearranging marketing copy. Run competitor-discovery and customer-pain-mining first if you don't have a curated competitor list + pain themes.
What this skill does
# Positioning Map
Positioning isn't marketing copy — it's a **product decision about who you say no to**. This skill makes that choice visible by mapping competitors on 5 signal axes, locating the empty space, and forcing you to pick between 3 candidate moves rather than defaulting to the first one that sounds good.
Founders consistently underweight four things on competitor positioning: hero copy is the most-curated surface (so trust it least), pricing reveals who they actually sell to, what they ship reveals what they think matters, and **who they hire reveals where they're going next quarter** (the leakiest signal of all). Customer logos reveal who they actually catch, which often contradicts who they pitch.
## Frameworks this skill draws from
This skill is the operational version of three positioning frameworks, executed against real public data:
1. **April Dunford — *Obviously Awesome* (5 components):** competitive alternatives, unique attributes, value (and proof), target market characteristics, market category. Dunford's #1 insight: **start with competitive alternatives, not with what you do.** This skill operationalizes that by always grounding "the empty quadrant" against the actual competitor set, not against an abstract market.
2. **Geoffrey Moore — *Crossing the Chasm* (positioning statement template):** "For [target customer] who [need], the [product] is a [category] that [benefit]. Unlike [primary alternative], our product [primary differentiation]." This is the format of the deliverable — the one-sentence positioning move.
3. **Ries & Trout — *Positioning: The Battle for Your Mind* (mental real-estate):** you can only own ONE word/concept in the customer's mind. The "empty quadrant" framing inherits from this: the position you can own is the one nobody else is claiming AND that customers care about.
Adjacent frameworks worth knowing but not directly encoded here: **Treacy & Wiersema's three value disciplines** (product leadership / operational excellence / customer intimacy — pick one, do the others adequately) and **Ulwick's outcome-driven JTBD** (positioning aligned to unmet desired outcomes). If the founder uses these in their own thinking, fold them into the axis choices.
## When this skill applies
- Founder asks where the positioning gap is
- Pre-launch — choosing what to say no to
- Pre-fundraise — proving positioning is defensible
- Post-`customer-pain-mining` — synthesizing what you found with what competitors actually claim
## What you need (inputs)
1. **3–5 competitors with URLs** — fewer than 3 isn't a map; more than 5 is noise.
2. **The job-to-be-done** — one line. Without it, "axis" has no meaning.
3. **Customer pain themes — REQUIRED, not optional.** Output from `customer-pain-mining`. Positioning without pain context is just rearranging marketing copy. The gap lives where pain ≠ competitor claims. If the founder hasn't run pain-mining, refuse to produce a positioning sentence — produce only a descriptive map and flag this in the executive summary.
4. **(Optional) Founder's current positioning** — if doing a repositioning exercise.
If you don't have item 1, run `competitor-discovery`. If you don't have item 3, run `customer-pain-mining` first.
## Tools
**Exa MCP** (primary for axes 1, 2, 4 — modern SaaS marketing sites are JS-rendered SPAs):
- `mcp__claude_ai_Exa__web_fetch_exa(urls)` — pull homepage / pricing / customers / changelog pages. Batch multiple URLs per call.
- `mcp__claude_ai_Exa__web_search_exa(query, numResults)` — find case studies, changelog blogs, "X review" comparison posts.
**Anysite MCP**:
- `mcp__claude_ai_Anysite__execute(source="linkedin", category="company", endpoint="company", params={"company": "<alias>"})` — company entity + URN + employee count + specialities[] + short_description.
- `mcp__claude_ai_Anysite__execute(source="linkedin", category="search", endpoint="search_posts", params={"keywords": "<competitor> <category>", "date_posted": "past-month", "count": 10})` — what they're posting and what's being said about them in the last month. Use this for the "recent shipping" axis; it covers the same ground as `linkedin/company/company_posts` but with richer engagement filtering via `query_cache`.
- `mcp__claude_ai_Anysite__execute(source="linkedin", category="search", endpoint="search_jobs", params={"keywords": "<competitor>", "count": 20})` — open roles. Filter response by `company.alias` matching the actual target (keyword search can catch namesakes — e.g. a keyword search for one competitor may return a different competitor's roles that mention it in the JD).
- `mcp__claude_ai_Anysite__execute(source="sec", category="search", endpoint="search_companies", params={"entity_name": "<competitor>", "forms": ["10-K","S-1","D"], "count": 5})` — only for late-stage / public competitors. For early-stage consumer SaaS, returns nothing useful.
- `mcp__claude_ai_Anysite__execute(source="webparser", category="parse", endpoint="parse", params={...})` — only for static-HTML competitor sites. Modern SaaS marketing pages (Next.js / Vercel) return empty; use Exa instead.
Budget: ~3 Anysite calls per competitor (LinkedIn company + post search + jobs search) + ~2 Exa fetches per competitor. For 5 competitors: ~15 Anysite + ~10 Exa.
## How to run
For each competitor, run the same 5 axes. Capture as a row in a growing table.
### Axis 1 — Hero copy (who they pitch)
`mcp__claude_ai_Exa__web_fetch_exa(urls=["https://<competitor>.com"])`
Extract: H1 headline, sub-headline, the verb (build / write / cite / extract / scrape / etc.), explicit audience callout if any ("for academic researchers," "for indie devs," "for teams 10–500", "for AI agents").
Validated on the web-scraping niche: a single batched Exa fetch on `["brightdata.com", "apify.com", "firecrawl.dev", "scrapingbee.com", "anysite.io"]` returns hero + subhead + pricing summary + customer-logo trust bar for all 5 competitors in one call. The hero is the most curated surface — trust it least for "what the product actually does" and most for "who the company is currently pitching."
Webparser tends to fail on JS-rendered SPAs (Next.js / Vercel marketing sites) — Exa fetch is the reliable primary.
### Axis 2 — Pricing (who they actually sell to)
`mcp__claude_ai_Exa__web_fetch_exa(urls=["https://<competitor>.com/pricing"])`
If `/pricing` returns `CRAWL_NOT_FOUND` (it sometimes does for Next.js sites), the pricing is usually on the homepage from Axis 1 — search for "$" in the body text.
Extract: tier names, lowest paid tier (in $), highest published tier, gating (seats / usage / features / credits). Convert everything to monthly USD for comparability. The lowest tier reveals their floor; the highest reveals ambition.
Web-scraping API niche pricing spread (validated): Firecrawl $0 → $16 Hobby → $83 Standard → $333 Growth (credit-based, 5x multiplier on extract). Apify $5 free → $49 Starter (compute-unit). Bright Data product-by-product: Crawl $1/1K req; Unlocker $1/1K; Browser API $5/GB; Web Scraper $0.001/record; effective $499/mo for 510K records. ScrapingBee $49/mo Freelance → $99 Startup → $599 Business+. The whole category is in pricing turmoil — the dominant pain in `customer-pain-mining` is the credit-multiplier surprise, so the pricing axis has positioning leverage right now.
### Axis 3 — LinkedIn company entity (the org's verbatim self-positioning)
`mcp__claude_ai_Anysite__execute(source="linkedin", category="company", endpoint="company", params={"company": "<alias or website-derived alias>"})`
Returns: `short_description`, `description`, `employee_count`, `founded_on`, `specialities[]`, `headquarter_location`.
What to extract:
- `short_description` — often a single positioning sentence the company curates for LinkedIn (different from their homepage hero — useful contrast).
- `specialities[]` — explicit, comma-separated list of what they claim to do. Rare verbatim self-positioning. In Dunford's terms, this is their stated "unRelated in AI Agents
skill-development
IncludedComprehensive meta-skill for creating, managing, validating, auditing, and distributing Claude Code skills and slash commands (unified in v2.1.3+). Provides skill templates, creation workflows, validation patterns, audit checklists, naming conventions, YAML frontmatter guidance, progressive disclosure examples, and best practices lookup. Use when creating new skills, validating existing skills, auditing skill quality, understanding skill architecture, needing skill templates, learning about YAML frontmatter requirements, progressive disclosure patterns, tool restrictions (allowed-tools), skill composition, skill naming conventions, troubleshooting skill activation issues, creating custom slash commands, configuring command frontmatter, using command arguments ($ARGUMENTS, $1, $2), bash execution in commands, file references in commands, command namespacing, plugin commands, MCP slash commands, Skill tool configuration, or deciding between skills vs slash commands. Delegates to docs-management skill for official documentation.
reprompter
IncludedTransform messy prompts into well-structured, effective prompts — single or multi-agent. Use when: "reprompt", "reprompt this", "clean up this prompt", "structure my prompt", rough text needing XML tags and best practices, "reprompter teams", "repromptception", "run with quality", "smart run", "smart agents", multi-agent tasks, audits, parallel work, anything going to agent teams. Don't use when: simple Q&A, pure chat, immediate execution-only tasks. See "Don't Use When" section for details. Outputs: Structured XML/Markdown prompt, quality score (before/after), optional team brief + per-agent sub-prompts, agent team output files. Success criteria: Single mode quality score ≥ 7/10; Repromptception per-agent prompt quality score 8+/10; all required sections present, actionable and specific.
adaptive-compaction
IncludedAdaptive add-on policy and recovery layer that decides WHEN to compact, prune, snapshot, or fork -- replacing fixed-percent auto-compaction across Claude Code, Codex, and MCP-capable hosts. Trigger on auto-compact timing or damage: "when should I compact", "is it safe to compact now or start a fresh session", "auto-compact fires too early/mid-task", "switching to an unrelated task but the window still has space", "context rot", "answers get worse the longer the session runs", "the agent forgot the plan or my decisions after it summarized", "add a layer on top that manages context without changing the agent", raising autoCompactWindow to give the policy room, or installing/tuning a cross-tool compaction policy or PreCompact hook -- even when "compaction" is never said but the problem is context-window pressure or post-summarization memory loss. Do NOT use to summarize a conversation, build RAG, write a summarization prompt (decides WHEN not HOW), or answer max-context-length trivia.
agent-skill-creator
IncludedCreate cross-platform agent skills from workflow descriptions. Activates when users ask to create an agent, automate a repetitive workflow, create a custom skill, or need advanced agent creation. Triggers on phrases like create agent for, automate workflow, create skill for, every day I have to, daily I need to, turn process into agent, need to automate, create a cross-platform skill, validate this skill, export this skill, migrate this skill. Supports single skills, multi-agent suites, transcript processing, template-based creation, interactive configuration, cross-platform export, and spec validation.
llm-wiki
IncludedUse when building or maintaining a persistent personal knowledge base (second brain) in Obsidian where an LLM incrementally ingests sources, updates entity/concept pages, maintains cross-references, and keeps a synthesis current. Triggers include "second brain", "Obsidian wiki", "personal knowledge management", "ingest this paper/article/book", "build a research wiki", "compound knowledge", "Memex", or whenever the user wants knowledge to accumulate across sessions instead of being re-derived by RAG on every query.
skill-master
IncludedAgent Skills authoring, evaluation, and optimization. Create, edit, validate, benchmark, and improve skills following the agentskills.io specification. Use when designing SKILL.md files, structuring skill folders (references, scripts, assets), ingesting external documentation into skills, running trigger evals, benchmarking skill quality, optimizing descriptions, or performing blind A/B comparisons. Keywords: agentskills.io, SKILL.md, skill authoring, eval, benchmark, trigger optimization.