plugins/octave/skills/battlecard/SKILL.md
Generate competitive battlecards, displacement campaigns, trap questions, and objection counters grounded in library data and real deal evidence — as inline text analysis or a polished HTML battlecard document. Use when user says "battlecard for [competitor]", "how do we beat [competitor]", "competitive intel", "trap questions", "displacement campaign", "visual battlecard", "battlecard document", "competitive reference doc", or mentions competing against a rival.
npx skillsauth add octavehq/lfgtm battlecardInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Dedicated competitive intelligence skill that generates living competitive artifacts — battlecards, displacement campaigns, trap questions, objection counters, and side-by-side comparisons — all grounded in your library's competitive data and real conversation evidence.
One intelligence pipeline, two output formats:
--format doc) — a self-contained HTML reference document with sticky sidebar navigation, color-coded win/loss indicators, expandable objection handlers, and a visual scorecard. Designed to be bookmarked and referenced during live competitive deals./octave:battlecard [mode] [--competitor <name>] [--persona <name>] [--format text|doc] [--style <preset>]
/octave:battlecard # Interactive - pick competitor and mode
/octave:battlecard battlecard --competitor "Acme" # Full competitive battlecard
/octave:battlecard displacement --competitor "Acme" # Displacement campaign
/octave:battlecard traps --competitor "Acme" # Trap questions to expose weaknesses
/octave:battlecard objections --competitor "Acme" # Objection counters
/octave:battlecard compare --competitor "Acme" # Side-by-side comparison
/octave:battlecard landscape # Full competitive landscape overview
/octave:battlecard --competitor "Acme" --format doc # HTML battlecard document
/octave:battlecard landscape --format doc --style neon-pulse
When the user runs /octave:battlecard:
If no competitor specified, list available competitors:
# Get all competitors
list_entities({ entityType: "competitor" })
Present:
Which competitor are you focused on?
COMPETITORS IN YOUR LIBRARY
1. [Competitor 1] - [Brief description]
2. [Competitor 2] - [Brief description]
3. [Competitor 3] - [Brief description]
OTHER
4. Research a new competitor (provide name/domain)
5. Full competitive landscape (all competitors)
Your choice:
If no mode specified, ask:
What do you need?
1. Full Battlecard - Comprehensive positioning guide for sales
2. Displacement Campaign - Outreach to steal their customers
3. Trap Questions - Discovery questions that expose their weaknesses
4. Objection Counters - Paired risk-and-response guidance
5. Side-by-Side Compare - Feature/capability comparison
6. Competitive Landscape - Overview of all competitors
Your choice:
Output format. Default is text. Switch to the HTML document when the user passes --format doc or asks for a "battlecard document", "visual battlecard", or something to bookmark and share. The doc format applies to the Full Battlecard and Competitive Landscape modes; the other modes (displacement, traps, objections, compare) are text-first — offer to fold their content into a full document if the user wants one.
This research plan feeds both formats. Layer multiple sources — competitor profile + deal outcomes + conversation evidence + proof points combine into intelligence grounded in real data. Don't stop at one tool when three would give a stronger picture.
# Get competitor entity
get_entity({ oId: "<competitor_oId>" })
# Find Custom Motion Playbooks for this competitor (narrative type COMPETITIVE)
list_motions()
list_motion_playbooks({ motionOId: "<motion_oId>" })
# Filter for narrativeType === "COMPETITIVE" and matching competitor
get_motion_playbook({ motionPlaybookOId: "<motion_playbook_oId>" })
# Also pull the Default Motion Playbook's Motion ICPs for general positioning
list_motion_icps({ motionOId: "<motion_oId>" })
find_motion_icp({ motionIcpOId: "<motion_icp_oId>", includeLearnings: true })
# Search for proof points (especially competitive wins)
search_knowledge_base({
query: "<competitor name> win switch migration",
entityTypes: ["proof_point", "reference"]
})
# Search conversation data for competitor mentions
list_findings({
query: "<competitor name> objections competitive mentions",
startDate: "<90 days ago>",
eventFilters: {
competitors: ["<competitor_oId>"]
}
})
# Get won deals where this competitor was present
list_events({
startDate: "<180 days ago>",
filters: {
eventTypes: ["DEAL_WON"],
competitors: ["<competitor_oId>"]
}
})
# Get lost deals to this competitor
list_events({
startDate: "<180 days ago>",
filters: {
eventTypes: ["DEAL_LOST"],
competitors: ["<competitor_oId>"]
}
})
# Get product details for comparison
list_entities({ entityType: "product" })
get_entity({ oId: "<product_oId>" })
Also useful: list_entities({ entityType: "proof_point" }) and list_entities({ entityType: "reference" }) for switching stories, and search_resources({ query: "<competitor>" }) for uploaded analyst reports or competitive docs. For landscape mode, run the deal and findings queries without the competitor filter and fetch list_entities({ entityType: "competitor" }) for full profiles.
Output discipline. A battlecard is an internal seller tool, so follow the shared output rules in ../shared/presentation-principles.md, with two that bite competitive content most:
generate_email is a written deliverable — that stays written, just keep it human.)https://app.octavehq.com/entity/{oId} (the oId from its tool result) so the rep is one click from the source. Never put these links in a customer-facing asset.See full-battlecard.md for the full battlecard template.
See displacement-campaign.md for the displacement campaign template (generate_email call + email sequence output format).
See trap-questions.md for the trap questions template.
See objection-counters.md for the objection counters template.
See side-by-side-compare.md for the side-by-side comparison template.
See competitive-landscape.md for the competitive landscape template.
When the format is doc, gather intelligence exactly as in Step 2, then:
neon-pulse, electric-studio) suit battlecards; skip the prompt if --style was provided..octave-battlecards/
└── battlecard-<competitor-kebab>-<YYYY-MM-DD>/
└── battlecard-<competitor-kebab>.html
Landscape mode: .octave-battlecards/battlecard-landscape-<YYYY-MM-DD>/battlecard-landscape.html. The .octave-battlecards/ directory is gitignored — nothing here gets committed.--skip-review or "skip review". Tell the user at intake that you'll review before finishing.bash "${CLAUDE_PLUGIN_ROOT:-.}"/scripts/export-pdf.sh <path-to-html> — or Cmd+P / Ctrl+P → Save as PDF (the sidebar is hidden in print).The output-discipline rules from Step 3 apply in full — talking points not scripts, entity deep-links, label every value.
What would you like to do next?
1. Deep dive on a specific area
2. Generate displacement outreach for a specific person
3. Create a persona-specific version
4. Re-generate any piece using a saved agent
5. Update competitor entity with new insights
6. Render as an HTML document (or refresh the doc)
7. Done
This skill uses Octave's generate_content and generate_email tools by default. Two alternatives:
list_agents when relevant. See /octave:explore-agents.generate_* calls, gather Octave context, Claude writes directly. Offer when user wants more control.For the full interactive mode selector, use /octave:generate.
list_entities (competitor) - List competitors (slim; add all: true for the full set)list_entities (competitor / product / proof_point / reference) with includeDetails: true - Full entity dataget_entity - Get competitor or product detailssearch_knowledge_base - Find competitive positioning, proof pointslist_findings - Real conversation mentions and objectionslist_events - Deal win/loss data against competitorget_event_detail - Deep dive into specific competitive dealssearch_resources - Uploaded analyst reports and competitive docslist_motions - List Motions in the workspacelist_motion_playbooks - Surface Custom Motion Playbooks (narrative type COMPETITIVE) layered onto each Motionget_motion_playbook - Full details for a Custom Motion Playbook (competitive narrative)list_motion_icps - List Motion ICP cells (persona × segment) for a Motionfind_motion_icp - Motion ICP narrative + Learning Loop learningsgenerate_email - Displacement email campaignsgenerate_content - Trap questions, objection guides, comparisonsNo Competitors in Library:
No competitors found in your library.
Options:
- Add a competitor first:
/octave:library create competitor- Tell me the competitor name and I'll create a basic comparison
No Deal Data:
No win/loss data found against [Competitor].
I'll build the battlecard from library data and general positioning. As you log deals, the battlecard will get richer with real evidence.
Competitor Not in Library:
"[Name]" isn't in your library yet.
Options:
- Create the competitor entity first:
/octave:library create competitor "[name]"- I'll generate a basic comparison with available information
No Conversation Evidence:
No conversation mentions found for [Competitor].
The objection handlers and trap questions will be based on library data and general competitive positioning rather than real conversation evidence. They'll improve as your team logs more calls where this competitor comes up.
Octave Connection Failed:
Could not connect to your Octave workspace.
The battlecard builder needs Octave data to pull competitor profiles, deal outcomes, and conversation evidence.
To reconnect: check your MCP configuration or run
/octave:workspace status
/octave:research - Research a specific account in a competitive deal/octave:brief - Account-focused dossier for a specific competitive deal/octave:deck - Competitive presentation for an audience (the battlecard doc is a reference, not a deck)/octave:campaign - Generate competitive campaign content/octave:insights - Surface competitive mentions from conversations/octave:wins-losses - Analyze win/loss patterns against competitors/octave:enablement - Package competitive intel for the teamdevelopment
Turn one or more Octave GTM Explorer / Beats reports into a branded, shareable digest with selectable insight scope, evidence depth, and output format. Use when the user asks for a report digest, weekly or monthly insight recap, executive intelligence brief, magazine-style insight story, report deck, or a recurring published summary of Octave insights.
content-media
Product and feature launch planning with full content kit generation across channels and audiences. Use when user says "launch plan", "product launch", "feature announcement", "GTM plan for launch", "launch content kit", or mentions launching something new.
development
A dense internal deal room a rep hands to a champion so they can run the buying-committee sell without you in the room. Quantified business case, stakeholder map with per-seat ammo, objection handling, and a path to yes, rendered as self-contained HTML. Use when user says "champion deal room", "arm my champion", "help my champion sell internally", "internal business case for [deal]", or wants a champion enablement doc. For a customer-facing top-of-funnel page use /octave:microsite; for the formal closing proposal use /octave:proposal.
data-ai
Analyze email threads, call transcripts, and conversations for resonance, adherence to messaging, and competitive differentiation. Use when user says "analyze this call", "how did the email land", "score this thread", "conversation analysis", or pastes conversation content to evaluate.