TOOL-007 — Competitive Narrative Writer
Tier 3 Specialist Tool · Stateless · Composes deal-specific competitive narratives from CompetitiveKnowledgeBase + deal context · Augments AGT-403 reactive briefs · Domain 2 win-rate augment
Tier 3 · Tool
Specced · v31
Domain 2 · Win-rate augment
Sonnet
Purpose
AGT-403 Competitive Intelligence maintains the canonical CompetitiveKnowledgeBase and produces reactive competitive briefs when a competitor is detected. TOOL-007 augments this: given a specific deal context (stage, MEDDPICC state, ICP fit, prior conversation patterns) plus the relevant competitor's KB entry, composes a deal-specific narrative the rep can actually use in conversation — not generic positioning, but tailored to where this deal sits.
Domain 2 augment, not gap-closer. AGT-403 already covers competitive intelligence at 80%+. TOOL-007 lifts the quality of the deal-specific framing — the difference between "here's our competitive positioning vs. X" and "for this prospect at this stage with these specific concerns, here's how to frame the X comparison."
Input schema
{
"opportunity_id": "uuid",
"competitor_id": "string", // matches CompetitiveKnowledgeBase.competitor_id
"deal_context": {
"current_stage": "string",
"deal_health_score": 0,
"icp_tier": "T1" | "T2" | "T3",
"vertical": "string",
"estimated_acv_usd": 0,
"meddpicc_state": { ... }, // per AGT-401 deal health input
"primary_use_case_documented": "string | null"
},
"competitor_kb_entry": { ... }, // from CompetitiveKnowledgeBase
// (positioning, strengths, weaknesses,
// typical objections, displacement scenarios)
"deal_specific_signals": {
"competitor_explicitly_mentioned": true | false,
"objections_raised_so_far": ["string"],
"buyer_quotes_relevant_to_competitor": ["string"],
"stakeholder_personas_engaged": ["string"]
},
"narrative_target": "rep_talking_points" | "deal_brief_section" |
"follow_up_email" | "competitor_battlecard_excerpt"
}
Output schema
{
"tool_call_id": "uuid",
"narrative": {
"format": "string", // matches narrative_target
"headline": "string", // 1-sentence positioning summary
"talking_points": [ // 3-5 deal-specific points
{
"point": "string",
"evidence_in_kb": "string", // citation to competitor_kb_entry section
"why_relevant_to_this_deal": "string"
}
],
"objection_responses": [ // for objections_raised_so_far
{ "objection": "string", "response": "string", "kb_citation": "string" }
],
"do_not_say": [ // anti-patterns specific to this competitor
{ "phrase_to_avoid": "string", "reason": "string" }
]
},
"ungrounded_assumptions": ["string"],
"kb_freshness": {
"competitor_kb_last_updated": "ISO 8601",
"is_stale": true | false, // KB updated > 90 days ago = stale
"staleness_caveat": "string | null"
},
"tool_metadata": {
"model": "claude-sonnet-4-6",
"input_tokens": 0, "output_tokens": 0,
"cost_usd_estimate": 0.0,
"latency_ms": 0
}
}
Hard rule: Every talking point must cite a specific section of the competitor KB entry. The tool cannot invent competitive positioning; it can only re-frame what's already in the KB for the specific deal context. KB updates are AGT-403's responsibility, not TOOL-007's.
Called by
| Caller | Invocation context |
| AGT-403 Competitive Intelligence | Augments the reactive brief generation. AGT-403 detects competitor mention via AGT-407, fetches KB entry, calls TOOL-007 to compose deal-specific narrative for the brief. |
| AGT-405 Meeting Opportunity Prep | For deal-active meeting briefs where competitive context is relevant. AGT-405 calls TOOL-007 to include competitive talking points in the opportunity brief. |
| AGT-902 Account Brain | For per-account "what's the play on Acme HR given the competitive dynamic?" queries. |
| RevOps direct (workspace UI) | Battlecard refresh — RevOps generates competitor-specific narratives for top-of-funnel enablement assets. |
Design principles
- KB is the source of truth. Tool composes; AGT-403 maintains. Tool cannot extend or correct the KB — only re-frame it.
- Deal-specific, not generic. The output must read differently for a $50K SMB deal vs. a $2M enterprise deal. Generic positioning fails the eval.
- Anti-patterns explicit. The
do_not_say field captures phrases that backfire with this specific competitor (e.g., positioning that the KB notes the competitor handles well). Equally important as the talking points.
- Stale KB surfaces caveats. If the competitor KB entry hasn't been updated in > 90 days, the
kb_freshness field flags it and the narrative includes a caveat. Stale competitive intel is worse than no competitive intel.
- Format-aware. Talking points read differently from email copy from a battlecard excerpt. Tool adapts tone + structure to the
narrative_target.
Cost ceiling
| Constraint | Value |
| Per-call input budget | 15K tokens (KB entry + deal context) |
| Per-call output budget | 2K tokens |
| Default model | Sonnet (composition + tone matching) |
| Per-call cost estimate | ~$0.06 |
| Monthly cap (default) | $200/mo (~3,000 calls) |
| Frequency | Moderate — called when AGT-403 fires (competitor detection event) + AGT-405 brief generation + AGT-902 invocations. |
Eval criteria
| Criterion | Pass threshold |
| Schema compliance | 100% (hard) |
| KB grounding | 100% — every talking point cites a real KB section (hard) |
| Hallucinated competitor claims | 0% — tool never makes claims about a competitor that aren't in the KB (hard) |
| Deal-specificity | 10 retrospective deals where competitive narrative was used; reviewer rates whether narrative is actually deal-specific (vs. generic). ≥ 70% rated specific. |
| Adoption rate by reps | % of generated narratives that reps mark as used in actual conversations — calibration signal ≥ 35%. |
| Stale KB recognition | 100% on KB entries > 90d old (hard) — staleness must surface as caveat |
| P95 latency | ≤ 4s |