TOOL-002 — Dev-Persona ICP Enricher
Tier 3 Specialist Tool · Stateless · Augments AGT-201 ICP scoring with developer-persona signals · Closes the dev-buyer side of the Domain 3 gap
Tier 3 · Tool
Specced · v29
Domain 3 · API/Dev GTM
Haiku
Purpose
AGT-201's 6-dimension ICP scorer captures firmographic, vertical, revenue, tech-stack, growth, and intent signals — but materially under-weights developer-buyer signal. For API-first products with developer-led adoption, the buying signal is technical: who's hiring engineers with specific stacks, whose GitHub orgs are public-active, who's experimenting with the product via API keys before commercial conversation. TOOL-002 takes those signals and produces a structured dev-persona enrichment that AGT-201 consumes alongside its existing dimensions.
Closes the dev-persona side of the Domain 3 gap. AGT-201 keeps its existing 6-dimension model unchanged; the dev-persona enrichment is a parallel signal stream, not a replacement.
Input schema
{
"account_id": "uuid",
"account_basics": {
"company_name": "string",
"domain": "string",
"employee_count": 0,
"industry": "string"
},
"technical_signals": {
"job_postings": [ // optional — observed in last 90 days
{ "title": "string", "stack_keywords": ["string"], "posted_date": "ISO 8601" }
],
"github_org_activity": { // optional — public-only data
"org_name": "string",
"public_repo_count": 0,
"trending_languages": ["string"],
"recent_topic_keywords": ["string"]
},
"technographic_data": { // from AGT-204 enrichment if available
"detected_stack": ["string"],
"infrastructure_signals": ["string"] // e.g., "uses Stripe", "deploys via GitHub Actions"
},
"product_telemetry": { // optional — UsageMeteringLog or upstream
"api_keys_active": 0,
"first_api_call_at": "ISO 8601",
"endpoint_diversity_score": 0.0 // 0-1, how many distinct endpoints touched
}
},
"current_icp_score": { // from AGT-201, for context
"tier": "T1" | "T2" | "T3",
"dimension_breakdown": {
"firmographic": 0, "vertical": 0, "revenue": 0,
"tech_stack": 0, "growth": 0, "intent": 0
}
}
}
All technical_signals subfields are optional — the tool degrades gracefully when data is sparse, and the output reflects which signals were available vs. missing.
Output schema
{
"tool_call_id": "uuid",
"account_id": "uuid",
"dev_persona_score": 0, // 0-100 composite
"dev_persona_tier": "high" | "medium" | "low" | "none",
"buyer_persona_classification": {
"primary": "developer" | "platform_team" | "compliance_engineer"
| "data_engineer" | "non_technical_buyer" | "unclear",
"confidence": "high" | "medium" | "low"
},
"signals_present": { // which signals contributed
"job_postings_signal": "strong" | "weak" | "absent",
"github_signal": "strong" | "weak" | "absent",
"technographic_signal": "strong" | "weak" | "absent",
"telemetry_signal": "strong" | "weak" | "absent"
},
"key_drivers": [ // top 3 drivers of the score, with citations
{ "driver": "string", "evidence": "string", "input_field": "string" }
],
"agt_201_recommended_adjustment": { // suggested dimension adjustments for AGT-201
"tech_stack_dimension_adjust": 0, // -15 to +15; bounded
"intent_dimension_adjust": 0, // -15 to +15; bounded
"rationale": "string"
},
"ungrounded_assumptions": ["string"], // explicit list, parallels TOOL-001
"data_completeness": "high" | "partial" | "sparse",
"tool_metadata": {
"model": "claude-haiku-4-5",
"input_tokens": 0, "output_tokens": 0,
"cost_usd_estimate": 0.0,
"latency_ms": 0
}
}
Bounded adjustment magnitude. The tool can recommend AGT-201 dimension adjustments up to ±15 points on tech_stack and intent dimensions only. It cannot recommend changes to firmographic, vertical, revenue, or growth dimensions — those are not under TOOL-002's purview. AGT-201 retains the right to ignore the adjustment recommendation.
Called by
| Caller | Invocation context |
| AGT-201 ICP Scorer | On account update events that include technical signals (job posting added, GitHub activity refreshed via AGT-204, product telemetry signal change). AGT-201 calls TOOL-002, ingests the recommended adjustment as one input alongside its 6-dimension model, decides whether to apply. |
| AGT-901 Pipeline Brain | Cross-account analysis of dev-persona patterns. "Are we under-tiered in API-first companies hiring backend engineers?" Brain calls TOOL-002 across a target list to identify dev-persona-rich accounts that AGT-201 ranked low. |
| AGT-204 Lead Enrichment | As an enrichment subroutine. AGT-204's existing 6-category enrichment may invoke TOOL-002 when technical signals are present, before the rescore trigger fires AGT-201. |
Design principles
- Augment, don't replace. AGT-201's 6-dimension model stays the canonical ICP signal. TOOL-002 is a parallel enrichment that AGT-201 chooses to integrate — the existing scoring logic is unchanged.
- Sparse-data friendly. Technical signals are uneven by company. Most accounts won't have GitHub org data; many won't have product telemetry. The tool degrades gracefully and reports
data_completeness honestly.
- Bounded magnitude. Dev-persona signal is real but not infinite — capped at ±15 points on two dimensions. A high-grade developer fingerprint shouldn't single-handedly flip a Tier 3 to Tier 1; the firmographic and revenue dimensions still matter.
- Distinguish persona from intent. A company can have strong developer presence without buying intent for our specific product. The output separates buyer_persona_classification (who they are) from intent_dimension_adjust (whether they're showing buying signal).
- Honest unclear classification. When signals point in conflicting directions, the tool returns "unclear" rather than fabricating a confident classification.
Cost ceiling
| Constraint | Value |
| Per-call input budget | 10K tokens (account + signals + current ICP score; bounded narrow context) |
| Per-call output budget | 1K tokens (structured enrichment output) |
| Default model | Haiku — classification task with bounded scope; Sonnet tested with no measurable quality lift |
| Per-call cost estimate | ~$0.01–$0.02 per call at Haiku pricing |
| Monthly cap (default) | $200/mo — bounds usage to ~10,000 calls/month |
| Frequency expectation | High — called on AGT-204 enrichment events, AGT-201 rescore events, AGT-901 batch analyses. Most monthly usage will come from AGT-204 routine enrichment. |
Eval criteria
| Criterion | Measurement | Pass threshold |
| Schema compliance | Output validates against output schema | 100% (hard) |
| Persona classification accuracy | 15-account retrospective set with known buyer personas (from won deals); % where primary classification matches | ≥ 70% |
| Sparse-data graceful degradation | Tool produces useful output when only 1-2 of 4 signal categories present (vs. fabricating confidence) | data_completeness honestly reflects sparse state; confidence is low or medium not high |
| Adjustment magnitude calibration | Recommended adjustments correlate with retrospective dev-persona quality (won deals at dev-persona accounts) | Pearson correlation ≥ 0.4 across the eval set |
| Hallucinated signals | % of key_drivers citing input fields that don't exist or aren't populated | 0% (hard) |
| P95 latency | End-to-end tool call | ≤ 2s — tool is called in line with AGT-204 enrichment, latency budget tight |
Failure modes
| Symptom | Cause | Action |
| Tool inflates dev-persona scores when signals are sparse | Confidence calibration drift | Eval catches. Tighten "honest unclear classification" instruction in prompt; add few-shot examples of sparse-data outputs that correctly returned low confidence. |
| Tool flips firmographically-low accounts to T1 via adjustment | Magnitude bound violated, or AGT-201 over-applying recommendation | The ±15 cap is enforced in the output schema. If the issue is AGT-201 stacking adjustments, that's an AGT-201 calibration concern, not TOOL-002. |
| High latency in batch invocations from AGT-901 | Tool called per-account synchronously in a 100-account batch | Caller responsibility — AGT-901 should batch-parallelize calls. Tool itself is stateless and fast per-call. |
| Persona classifications drift over time | Tech stack signals aging (yesterday's "developer" stack is today's mainstream) | Quarterly catalog review; refresh prompt examples with current dev-persona signals. |
| Cost spike | AGT-204 enrichment running on too-frequent cadence | Cost cap blocks runaway. Audit AGT-204 invocation cadence; per the existing v22 spec it should be T1 daily, T2 weekly, T3 monthly — if drifted, reset. |
Interaction with AGT-201 ICP scoring
AGT-201's spec is unchanged. The integration point is: AGT-201 reads tech_stack_dimension_adjust and intent_dimension_adjust from the most recent TOOL-002 output for the account (logged in EnrichmentLog with the AGT-204 enrichment record), and treats them as additive deltas to its computed dimension scores. AGT-201 retains discretion to ignore the adjustment if other signals contradict.
For backwards compatibility, accounts with no TOOL-002 enrichment are scored exactly as before (deltas default to 0). The dev-persona enrichment is purely additive — no existing T1/T2/T3 tier is downgraded by its absence.