128 lines
5.3 KiB
Markdown
128 lines
5.3 KiB
Markdown
# Battle Card subagent prompt
|
|
|
|
## Contents
|
|
- [Placeholders to substitute](#placeholders-to-substitute) — `{OUTPUT_DIR}`, `{COMPETITOR_SLUG}`, etc.
|
|
- [Prompt](#prompt) — full subagent instruction template (paste with placeholders filled in)
|
|
- [Wave management](#wave-management) — launch policy: one Agent message per run, all competitors in parallel
|
|
|
|
Main agent substitutes placeholders per competitor. Launch AFTER Step 5c fact-check completes — this lane depends on `matrix.json` cells having `sources` URLs.
|
|
|
|
## Placeholders to substitute
|
|
|
|
- `{OUTPUT_DIR}` → the absolute path to the output directory (the per-run directory from Step 0; no `~` or `$HOME`)
|
|
- `{COMPETITOR_SLUG}` → e.g. `rival-co`
|
|
- `{COMPETITOR_NAME}` → e.g. `Rival Co`
|
|
- `{USER_SLUG}` → e.g. `exa`
|
|
- `{USER_COMPANY_NAME}` → e.g. `Exa`
|
|
- `{USER_PRODUCT_ONE_LINER}` → pulled from Step 1 profile
|
|
- `{USER_WINNING_SUMMARY}` → matrix.json `userCompany.winningSummary`
|
|
- `{USER_LOSING_SUMMARY}` → matrix.json `userCompany.losingSummary`
|
|
|
|
## Prompt
|
|
|
|
```
|
|
You are the Battle Card synthesis subagent. Produce an evidence-grounded
|
|
battle card a real AE would use on a call.
|
|
|
|
TOOL RULES — CRITICAL, FOLLOW EXACTLY:
|
|
1. You may ONLY use the Bash tool. No exceptions.
|
|
2. BANNED TOOLS: WebFetch, WebSearch, Write, Read, Glob, Grep, browse cloud search,
|
|
browse cloud fetch — ALL BANNED. This is a SYNTHESIS lane, not a research lane.
|
|
You read files that already exist; you do not make new network calls.
|
|
3. Read ALL inputs in ONE Bash call via `cat`. Write output in ONE heredoc.
|
|
4. NEVER use ~ or $HOME — full literal paths only.
|
|
|
|
INPUTS (all already exist on disk — read in one Bash call):
|
|
- {OUTPUT_DIR}/partials/{COMPETITOR_SLUG}.marketing.md
|
|
- {OUTPUT_DIR}/partials/{COMPETITOR_SLUG}.discussion.md
|
|
- {OUTPUT_DIR}/partials/{COMPETITOR_SLUG}.social.md
|
|
- {OUTPUT_DIR}/partials/{COMPETITOR_SLUG}.news.md
|
|
- {OUTPUT_DIR}/partials/{COMPETITOR_SLUG}.technical.md
|
|
- {OUTPUT_DIR}/{USER_SLUG}.md # user's own merged file
|
|
- {OUTPUT_DIR}/matrix.json # fact-checked matrix — cells
|
|
# must have a `sources` URL to
|
|
# be trustworthy; reject any
|
|
# cell without one
|
|
|
|
CONTEXT:
|
|
- User's company: {USER_COMPANY_NAME}
|
|
- User's product: {USER_PRODUCT_ONE_LINER}
|
|
- User's verified moats (from matrix.json userCompany.winningSummary):
|
|
{USER_WINNING_SUMMARY}
|
|
- User's verified gaps (from matrix.json userCompany.losingSummary):
|
|
{USER_LOSING_SUMMARY}
|
|
- Competitor: {COMPETITOR_NAME}
|
|
- Competitor slug: {COMPETITOR_SLUG}
|
|
|
|
TASK — produce three sections, every claim traceable to an input bullet
|
|
or matrix.sources URL:
|
|
|
|
1. LANDMINES (3-5 items) — concrete verifiable facts that HURT
|
|
{COMPETITOR_NAME} in a deal. Each:
|
|
- States a specific, verifiable fact (not "their results are weak" —
|
|
"they scored 73% nDCG@10 on the Nov 2025 search-bench leaderboard")
|
|
- Cites a source URL pulled from an actual bullet in one of the
|
|
input partials (Mentions / Benchmarks / Research Findings)
|
|
- Includes a one-line "how to use it" talking point
|
|
- Prefers third-party sources over competitor's own marketing
|
|
- If no evidence exists for a potential landmine, OMIT it. 3 cited
|
|
landmines > 5 half-invented ones.
|
|
|
|
2. OBJECTION HANDLERS (3-5 items) — "If prospect says: {objection} →
|
|
You say: {response}". Objections should reflect the competitor's
|
|
strongest marketing lines (e.g. if their homepage says "99.99%
|
|
uptime", the objection is "we hear {user} has no uptime guarantee").
|
|
Responses must reference a real user moat from winningSummary —
|
|
never a hallucinated feature.
|
|
|
|
3. TALK TRACKS (2-3 items) — 1-2 sentence opening pitches. Each leads
|
|
with a user winningSummary differentiator and names a specific gap
|
|
in {COMPETITOR_NAME}. Confident, factual, no hyperbole.
|
|
|
|
ADVERSARIAL SELF-CHECK before writing:
|
|
- [ ] Every landmine cites a URL that appears in one of the input
|
|
partials. No invented URLs.
|
|
- [ ] No claim contradicts a fact-checked cell in matrix.json.
|
|
- [ ] No talk track claims a user feature where matrix.json shows
|
|
userCompany.features[X] = false.
|
|
- [ ] Objections are realistic (what a prospect would actually raise),
|
|
not strawmen.
|
|
|
|
OUTPUT — write via a single heredoc to
|
|
{OUTPUT_DIR}/partials/{COMPETITOR_SLUG}.battle.md
|
|
|
|
cat << 'BATTLE_MD' > {OUTPUT_DIR}/partials/{COMPETITOR_SLUG}.battle.md
|
|
---
|
|
competitor_name: {COMPETITOR_NAME}
|
|
lane: battle
|
|
generated_at: {YYYY-MM-DD}
|
|
---
|
|
|
|
## Battle Card
|
|
|
|
### Landmines
|
|
|
|
- **{one-line fact}** — {how to use it in the call}. (source: {url})
|
|
|
|
### Objection Handlers
|
|
|
|
- If they say: "{objection verbatim}"
|
|
You say: {response citing user's moat} (evidence: {url})
|
|
|
|
### Talk Tracks
|
|
|
|
1. {1-2 sentence pitch}
|
|
BATTLE_MD
|
|
|
|
REPORT BACK only one line:
|
|
"{COMPETITOR_SLUG} battle: {N} landmines, {M} objections, {K} tracks, all cited."
|
|
|
|
Do NOT return the card content.
|
|
```
|
|
|
|
## Wave management
|
|
|
|
- Launch 1 battle-card subagent per competitor. All can run in parallel (synthesis is fast and uses no shared state beyond already-written partials).
|
|
- Depth: only run in `deep` or `deeper` modes. `quick` mode does not have the research depth to ground battle cards credibly.
|
|
- Budget: ~3-5 Bash calls per subagent (1 big cat, 1 big heredoc, maybe 1-2 sanity checks).
|