TOOL-010 — Champion Movement Detector
Tier 3 Specialist Tool · Stateless · Detects when a champion at a customer account changes role, leaves the company, or stops engaging — high-leverage churn / deal-risk signal often missed by behavioral telemetry alone
Tier 3 · Tool
Specced · v32
Domain 2 / Post-sales
Haiku
External enrichment dependency
Purpose
A champion's departure or role change is among the highest-leverage churn predictors in B2B sales-led GTM — often visible in external signals (LinkedIn updates, email-bounce patterns, AGT-407 "person no longer in calls" detection) before account behavioral telemetry shifts. TOOL-010 reads multiple weak signals across these sources and produces a structured movement classification with confidence, recommended interventions, and explicit acknowledgment of which signals contributed.
High-signal, low-cost early warning. Most accounts that lose a champion 60+ days before renewal end up at-risk; behavioral telemetry usually doesn't catch this until 2–3 months later, when the new champion is showing surface_only adoption patterns. TOOL-010 surfaces the signal as soon as the champion's situation changes.
External enrichment dependency. Effectiveness depends on having external signals: LinkedIn job-change webhooks (or equivalent enrichment provider), email-bounce monitoring on key contact emails, and AGT-407 ConvIntelligence with sufficient call coverage to detect "person stopped attending calls." Without these signals, the tool degrades to "AGT-407-only" mode and surfaces lower-confidence outputs.
Input schema
{
"account_id": "uuid",
"tracked_champions": [ // contacts flagged as champions in CRM
{
"contact_id": "uuid",
"contact_name": "string",
"title_at_last_check": "string",
"company_at_last_check": "string",
"champion_classification": "primary" | "secondary" | "technical_champion",
"first_identified_as_champion_date": "ISO 8601",
"last_engaged_at": "ISO 8601"
}
],
"external_signals": { // optional — depends on enrichment provider
"linkedin_signals": [
{ "contact_id": "uuid", "title_change_detected": true | false,
"company_change_detected": true | false, "detected_at": "ISO 8601" }
],
"email_bounce_signals": [
{ "contact_id": "uuid", "bounce_type": "soft" | "hard",
"first_bounce_at": "ISO 8601", "consecutive_bounce_count": 0 }
]
},
"internal_signals": {
"conv_intelligence_attendance": [ // from AGT-407 trailing 90 days
{
"contact_id": "uuid",
"calls_attended_trailing_30d": 0,
"calls_attended_trailing_90d": 0,
"last_call_attendance_at": "ISO 8601 | null",
"last_call_sentiment": "positive" | "neutral" | "negative" | null
}
],
"email_engagement": [
{ "contact_id": "uuid", "last_reply_at": "ISO 8601 | null",
"trailing_30d_reply_count": 0 }
]
},
"account_context": {
"renewal_date": "ISO 8601",
"current_health_tier": "string",
"open_opportunities_count": 0
}
}
Output schema
{
"tool_call_id": "uuid",
"champion_movements": [
{
"contact_id": "uuid",
"movement_type": "left_company" | "role_changed_internal" |
"stopped_engaging" | "engagement_declining" |
"no_movement_detected",
"confidence": "high" | "medium" | "low",
"earliest_signal_at": "ISO 8601 | null",
"contributing_signals": [
{ "signal_type": "string", "signal_detail": "string",
"signal_strength": "strong" | "moderate" | "weak" }
],
"implications": {
"champion_replacement_needed": true | false,
"renewal_risk_uplift": "none" | "low" | "medium" | "high",
"deal_risk_uplift": "none" | "low" | "medium" | "high"
},
"recommended_interventions": [
{
"intervention_type": "identify_new_champion" |
"executive_sponsor_outreach" |
"escalate_to_slm" |
"introduce_csm_handoff" |
"reconfirm_renewal_path" |
"no_action_needed",
"urgency": "high" | "medium" | "low",
"rationale": "string"
}
]
}
],
"account_level_summary": {
"primary_champion_status": "stable" | "at_risk" | "lost",
"champion_redundancy": "high" | "medium" | "single_threaded",
"overall_movement_signal": "stable" | "early_warning" | "active_concern" | "critical"
},
"data_quality": {
"external_signal_coverage": "full" | "partial" | "none",
"internal_signal_coverage": "full" | "partial" | "none",
"overall_quality": "high" | "medium" | "low"
},
"ungrounded_assumptions": ["string"],
"tool_metadata": {
"model": "claude-haiku-4-5",
"input_tokens": 0, "output_tokens": 0,
"cost_usd_estimate": 0.0,
"latency_ms": 0
}
}
Hard rule: Every movement_type classification stronger than no_movement_detected must have at least one contributing_signal with strength ≥ moderate. Tool cannot fabricate champion movement based on pattern guesses; needs evidence.
Called by
| Caller | Invocation context |
| AGT-502 Churn Risk Detector | Weekly batch on accounts with renewal in ≤ 180 days. Output augments churn risk drivers; champion-movement signal becomes one of the renewal-proximity multiplier inputs. |
| AGT-401 Deal Health Monitor | For active opportunities, called when champion is identified as economic buyer or strong influencer. Champion movement triggers AGT-401 rescore. |
| AGT-902 Account Brain | For per-account "what's the move" queries when AM/CSM raises concern about champion engagement. |
| AGT-501 Customer Health | Augments behavioral health monitoring for accounts with explicit champion tracking enabled in CRM. |
Design principles
- Multi-signal fusion, not single-signal alerting. A title change without engagement decline may just be a promotion; a hard email bounce alone could be an out-of-office misconfig. The tool fuses signals; single weak signals do not produce high-confidence movement classifications.
- Graceful degradation when external signals absent. Many accounts will not have LinkedIn or email-bounce signals available. The tool clearly reports
external_signal_coverage and degrades confidence accordingly. Internal signals (AGT-407 attendance, email engagement) alone can detect stopped_engaging reliably, but not left_company with high confidence.
- Distinguish movement types. Champion who left the company is a different intervention than champion who shifted internal role (still at the company, different priorities) than champion who stopped engaging (still in role, disengaged). Recommended interventions differ.
- No proactive signaling on weak data. When data quality is low, tool returns conservative classifications. Better to under-flag than to drown signal in noise — AM trust matters.
- Privacy disciplined. Tool reads only signals already in the OS or from approved enrichment providers under signed data agreements. No web-scraping, no scraping personal social media beyond LinkedIn role-change webhooks the customer has consented to.
Cost ceiling
| Constraint | Value |
| Per-call input budget | 10K tokens (multiple champions + multi-signal context) |
| Per-call output budget | 2K tokens |
| Default model | Haiku |
| Per-call cost | ~$0.015 |
| Monthly cap | $250/mo (~16,000 calls) |
| Frequency | Weekly batch from AGT-502 over T-180-day renewal cohort, plus event-driven on enrichment signal changes. |
Eval criteria
| Criterion | Pass threshold |
| Schema compliance | 100% (hard) |
| Movement classification accuracy | 15 retrospective accounts with known champion movements (LinkedIn job changes, observed disengagement); ≥ 75% match. |
| False positive rate on stable accounts | ≤ 10% — over-flagging produces alert fatigue and burns AM trust. |
| Lead time | For accounts that retrospectively churned with champion-loss as a contributing factor: % where TOOL-010 flagged movement ≥ 60 days before churn. ≥ 60%. |
| Single-signal restraint | For 5 cases with one weak signal only: tool returns confidence = low or no_movement_detected. 100% (hard). |
| Privacy compliance | 0 instances of using non-consented signals (hard) |
| P95 latency | ≤ 2s |