// reference management
Competitor Scan
/ttm-competitor-scan
On-demand competitor analysis that updates COMPETITORS.md. Use when you need fresh competitive intelligence for campaign planning.
Overview
ttm-competitor-scan runs on-demand competitor analysis and writes fresh competitive intelligence into .taketomarket/COMPETITORS.md. It surveys your declared competitors' positioning, recent campaigns, and channel mix, then compares them against your POSITIONING.md to detect collisions, flag threats, and surface gap opportunities you could own.
Reach for it with ttm-competitor-scan when you need up-to-date competitive context for campaign planning. The discover and brief steps consume this file to avoid sounding identical to whoever you're up against, and competitor positioning is the reference input that goes stale fastest, so run it periodically.
It detects WebSearch/WebFetch tools for automated research and falls back to a manual paste mode when those tools are unavailable. Differentiation is only a verifiable property if you have an explicit competitor reference; without one your assets drift toward the category mean, because that's what the model has seen most.
How it works
The workflow is a single-pass process (per D-06 and D-09). It validates findings against POSITIONING.md to identify differentiation gaps and opportunities. Required reading: @${CLAUDE_PLUGIN_ROOT}/references/context-loading.md and @${CLAUDE_PLUGIN_ROOT}/templates/reference-files/competitors.md.
Step 0: First-run inline education
Read .taketomarket/CONFIG.md. Parse first_run_seen (object) and inline_education (boolean, default true).
If inline_education is false: skip this step. Else if first_run_seen.ttm-competitor-scan is not true, print the explainer below verbatim, then mark this skill as seen:
node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-competitor-scanUse this exact check (bash) to decide whether to print: node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-competitor-scan --raw — the JSON seen field is true once the explainer has run before.
Explainer for /ttm-competitor-scan
/ttm-competitor-scansurveys your declared competitors' positioning, recent campaigns, and channel mix, then writes a structured comparison into.taketomarket/COMPETITORS.md. Discover and brief consume this to avoid sounding identical to whoever you're against.Why it matters: differentiation is a verifiable property only if you have an explicit competitor reference. Without one, your assets drift toward the category mean because that's what the model has seen most. Run this periodically — competitor positioning is the input that goes stalest fastest.
(Canonical source: references/inline-education-blurbs.md. Embedded verbatim because workflows do not @-resolve files at runtime.)
Purpose
On-demand competitor analysis that updates COMPETITORS.md with new intelligence. Detects WebSearch/WebFetch MCP tools for automated research; falls back to manual paste when tools unavailable. Validates findings against POSITIONING.md to identify differentiation gaps and opportunities. Single-pass workflow per D-06 and D-09.
Constraints: POSITIONING.md is READ-ONLY
Text-Mode Detection
Text mode (--text flag): Set TEXT_MODE=true if --text is present in $ARGUMENTS or if the runtime is not Claude Code. When TEXT_MODE is active, replace every AskUserQuestion call with a plain-text numbered list.
Detection:
if echo "$ARGUMENTS" | grep -q -- '--text'; then TEXT_MODE=true; fiIf AskUserQuestion tool is not available in the current runtime, set TEXT_MODE=true. When TEXT_MODE is active, replace each AskUserQuestion with a plain-text numbered list.
Step 1: Load Context
takeToMarket > LOADING CONTEXTLoad Tier 1 summaries from all 9 reference files (lines 1 to <!-- END_SUMMARY -->):
.taketomarket/POSITIONING.md.taketomarket/BRAND.md.taketomarket/ICP.md.taketomarket/CHANNELS.md.taketomarket/STATE.md(frontmatter only).taketomarket/CALENDAR.md.taketomarket/COMPETITORS.md.taketomarket/METRICS.md.taketomarket/LEARNINGS.md
Load Tier 2 (full content) for analysis:
.taketomarket/COMPETITORS.md.taketomarket/POSITIONING.md
If .taketomarket/COMPETITORS.md does not exist, error: "COMPETITORS.md not found. Run /ttm-init first to set up your marketing system." Exit.
Parse POSITIONING.md for: category, primary differentiator, target audience, must-not-say terms. Parse COMPETITORS.md for: existing competitor list, positioning map, SOV baselines.
Step 2: Tool Detection
Attempt a WebSearch call with a minimal test query related to the user's category (from POSITIONING.md category field): "${CATEGORY} competitors ${CURRENT_YEAR}".
When WebSearch is available (SEARCH_MODE=web)
takeToMarket > COMPETITOR SCAN MODE: WEBProceed to Step 3 with automated research capabilities.
When WebSearch is NOT available (SEARCH_MODE=manual)
takeToMarket > COMPETITOR SCAN MODE: MANUALTell the user:
Web search tools are not available in this session.
To run a competitor scan, please paste any of the following:
1. Competitor websites or landing page content
2. Competitor social media posts or ad creative
3. Industry reports or market analysis
4. Search results for your category keywords
5. Any other competitive intelligence you have gathered
Paste your findings below and I will analyze them.Wait for the user to paste content.
Step 3: Research Competitors
If SEARCH_MODE=web:
For each competitor already listed in COMPETITORS.md:
- WebSearch:
"${COMPETITOR_NAME} ${CATEGORY}"for latest positioning - WebFetch on competitor homepage URL if known (from COMPETITORS.md)
Search for new entrants:
- WebSearch:
"${CATEGORY} alternatives ${CURRENT_YEAR}" - WebSearch:
"${CATEGORY} new tools ${CURRENT_YEAR}"
Tag all findings with confidence levels:
- HIGH: verified from competitor URL or cited data from web search
- MEDIUM: indirect evidence or partial match from search results
- LOW: inference drawn from patterns without direct evidence
If SEARCH_MODE=manual:
Analyze pasted content for:
- Positioning claims and messaging themes
- Channel presence and content strategy signals
- Pricing signals or packaging changes
- New competitors not in current COMPETITORS.md
Tag all pasted insights as MEDIUM confidence (user-provided, not independently verified). Insights cross-referenced against existing COMPETITORS.md data may be elevated to HIGH.
Step 4: Analyze and Compare
For each competitor (existing and newly discovered):
- Current positioning claim: What they say they are/do
- Differentiator comparison: Compare against our POSITIONING.md primary differentiator
- Overlap areas: Where competitor messaging is similar to ours (risk zones)
- Gap opportunities: Areas competitors are not covering that we could own
- SOV signals: Any share-of-voice indicators (content volume, social presence, ad spend)
Summarize findings:
takeToMarket > ANALYSIS COMPLETE
Competitors analyzed: ${TOTAL_COUNT}
New competitors found: ${NEW_COUNT}
Positioning overlaps: ${OVERLAP_COUNT}
Gap opportunities: ${GAP_COUNT}Step 5: Validate and Update
Ask user to confirm via AskUserQuestion (or text-mode freeform):
- Question 1 — header: "Confirm New Competitors"; question: "New competitors found: [list names]. Add all to COMPETITORS.md? Or specify which to include/exclude."
- Question 2 — header: "Update Existing Competitors"; question: "Updated intelligence for: [list names with change summary]. Accept all updates? Or specify which to accept/reject."
- Question 3 — header: "Inactive Competitors"; question: "Any competitors to mark as inactive/irrelevant? List names or type 'none'."
Validate all proposed updates:
- No update suggests user adopt a competitor's positioning
- No update contradicts POSITIONING.md differentiator or must-not-say terms
- Gap opportunities align with our positioning scope
Write updated .taketomarket/COMPETITORS.md:
- Update existing competitor entries with new findings (positioning, strengths, weaknesses)
- Add new competitors with full profiles (name, positioning, strength, weakness)
- Mark inactive competitors with
[INACTIVE: YYYY-MM-DD]suffix in name column - Update
## Positioning Mapsection with new/changed positions - Update
## Share of Voice Baselinewith new SOV signals - Update
## Competitor Content Analysisfor analyzed competitors
Step 6: Completion Banner
========================================
takeToMarket > COMPETITOR SCAN COMPLETE
========================================
Competitors analyzed: ${COUNT}
New competitors found: ${NEW_COUNT}
Positioning overlaps detected: ${OVERLAP_COUNT}
Research method: ${SEARCH_MODE}
Next steps:
- Review updated .taketomarket/COMPETITORS.md
- Run /ttm-positioning-check if overlaps concern youSuccess criteria
- Tier 1 summaries loaded from all 9 reference files
- Tier 2 full content loaded for COMPETITORS.md and POSITIONING.md
- WebSearch tool detection attempted before research
- SEARCH_MODE=web path uses WebSearch and WebFetch for automated research
- SEARCH_MODE=manual path prompts user to paste competitive intelligence
- All findings tagged with confidence levels (HIGH/MEDIUM/LOW)
- Analysis compares each competitor against POSITIONING.md differentiator
- User confirms new additions and updates before writing
- No update contradicts POSITIONING.md
- COMPETITORS.md updated with preserved structure and summary markers
- Completion banner displayed with scan results
What if this doesn't fit?
Looks like /ttm-competitor-scan can't do that yet.
- Want a new skill?
/ttm-request-skill - Existing skill needs work?
/ttm-improve-skill