| name | battlecard |
| description | Turn a tracked competitor's profile + live sources into a 6-section, rep-ready, fully-cited battle card. Triggers: 'battle card', 'battlecard', 'build a battle card for', '/battlecard'. |
| argument-hint | [competitor slug, e.g. 'northwind'] (must exist under competitors/) |
Battlecard
Generate a competitive battle card a rep can read in 90 seconds where every claim is cited to a source. The card is grounded, not guessed: each "where they win / where you win" line points to something the competitor actually published, so it survives contact with a skeptical prospect.
This skill reads a competitor profile you define once (competitors/<slug>/competitor.yaml), gathers evidence from that competitor's live sources, and writes a 6-section card to competitors/<slug>/battlecard.md.
Deploy when
- You're setting up a competitor for the first time and need the initial card.
weekly-refresh.py flagged a card STALE because a source changed, and you're regenerating it.
- A rep is about to walk into a competitive deal and wants the current card.
What this is NOT
- Not a research tool that invents claims. If a differentiator can't be tied to a source, it does not go in the card.
- Not a one-time doc generator. It's designed to be re-run every time a source moves. The card is disposable; the profile is the asset.
STEP 0: Parse input
Read the competitor slug from the argument (e.g. /battlecard northwind). Resolve competitors/<slug>/competitor.yaml. If it doesn't exist, stop and tell the user to cp -r competitors/_template competitors/<slug> and fill it in.
STEP 1: Load the profile
Parse competitor.yaml. Extract:
name, domain, category
your_product, your_differentiators (the case you want the card to make)
their_known_strengths (seed honesty; you'll verify and expand these)
sources[] (label, url, type)
card_path (where to write; default competitors/<slug>/battlecard.md)
STEP 2: Gather evidence
For each source in sources[], fetch the page and read it. Pay attention to source type:
changelog / docs -> what they shipped recently; capabilities they now claim.
pricing -> tiers, what's gated, what's "contact us", per-seat vs. usage.
reviews -> recurring complaints and recurring praise in the competitor's own customers' words.
news -> funding, leadership, marquee customers, positioning shifts.
Also run a web search for "<name>" vs and <name> limitations to surface how the market already frames the matchup. Record the source URL next to every fact. You will cite it in the card.
STEP 3: Synthesize the 6 sections
Write the card with exactly these sections. Each factual line ends with a [label] citation matching a source.
- What they are - one neutral sentence.
- Where you win - exactly 3. Each must be specific ("no SSO below the $X tier [pricing]"), verifiable, and tied to
your_differentiators. No vague "we're more flexible".
- Where they win - exactly 2. Honest, cited. This is the credibility of the whole card.
- Objections they create + your response - the top 3 objections a prospect will raise because this competitor exists, each with a calibrated 1-2 sentence response.
- Landmine questions - 3 questions the rep can ask that expose a weakness you found in Step 2.
- Competitive verdict - 1-2 sentences a rep can say out loud.
STEP 4: Write output
Write the card to card_path using the exact structure in competitors/example-northwind/battlecard.md. Start the file with a front-matter block recording competitor, generated (today's date), and the list of sources_cited.
End the card with a Sources list mapping each [label] to its URL, so any claim can be checked in one click.
STEP 5: Report
Print a 3-line summary: competitor name, how many claims are cited, and which sources were freshest (most recently changed). If any source in the profile was unreachable, say so explicitly. A card built on a dead source is a silent lie.
Output format
competitors/<slug>/battlecard.md, matching the example card's structure exactly: the 6 numbered sections, then a ## Sources block.
Configuration
No API keys required for the skill itself - it uses Claude Code's built-in fetch + web search. The refresh script (scripts/weekly-refresh.py) optionally reads SLACK_WEBHOOK_URL from the environment.
Installation
This skill ships inside the repo at .claude/skills/battlecard/. Opening the repo in Claude Code registers /battlecard automatically. To use it in another project, copy the battlecard/ folder into that project's .claude/skills/.