bi-health-score — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited bi-health-score (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The foundational skill for the Book Intelligence pillar of the CSM Agent Twin. Every other Book Intelligence skill depends on the health score this skill produces. If this skill is unreliable, every downstream skill degrades.
Computes a composite health score (0-100) for every account in a CSM's book by pulling data from multiple sources, normalising against segment benchmarks, and producing a weighted index with component-level breakdown and trend analysis.
This is a detection and surfacing skill. It computes, classifies, and writes data. It never contacts customers, sends emails, or initiates any external action.
Gather current-period data from each input source. If a source is unavailable or stale (>7 days for usage, >30 days for sentiment), flag the staleness explicitly in the output rather than computing from incomplete data.
Required data sources:
| Source | Data Points | Refresh Cadence |
|---|---|---|
| Product Analytics | DAU/WAU/MAU, feature adoption rates, session depth, API call volume, key workflow completions | Daily |
| Support Platform | Ticket volume, severity distribution, resolution time, CSAT per ticket, open P1/P2 count | Daily |
| CRM | Contact engagement (emails, meetings, calls), last touch per stakeholder, activity log | Daily |
| Survey Tool | NPS responses, CSAT scores, qualitative feedback flags | As received |
| Billing/Contract | ARR, contract end date, payment history, licence utilisation | Weekly |
Convert raw metrics to a 0-100 scale using segment-specific benchmarks. Segment is defined by the account's tier, company size band, and contract age cohort.
For each metric:
references/segment-benchmarks.mdApply the default weighting formula:
Composite = (Usage * 0.35) + (Engagement * 0.25) + (Support * 0.20) + (Sentiment * 0.10) + (Commercial * 0.10)Component definitions:
If a component has no data (e.g., no NPS response in 90 days), redistribute its weight proportionally across the remaining components and flag the gap.
See references/weight-customisation.md for guidance on adjusting weights by segment or business model.
For each component and the composite:
For each account:
Write the following to the CRM health object per account:
Per-account health record:
{
"account_id": "string",
"composite_score": 72,
"trend": "declining",
"components": {
"usage": { "score": 81, "trend": "stable" },
"engagement": { "score": 65, "trend": "declining" },
"support": { "score": 58, "trend": "declining" },
"sentiment": { "score": 80, "trend": "stable" },
"commercial": { "score": 75, "trend": "improving" }
},
"risk_drivers": [
"Support: P1 ticket volume 3x segment median",
"Engagement: No executive contact in 74 days"
],
"data_freshness": {
"stale_sources": [],
"last_computed": "2026-03-10T08:00:00Z"
}
}Weekly portfolio summary:
This skill surfaces data to humans. It does not make decisions. Handoff triggers:
| Condition | Action | Urgency |
|---|---|---|
| Composite drops below 65 | Surface to CSM with full component breakdown | Same day |
| Any component below segment 25th percentile | Flag in daily digest with specific driver | Next business day |
| Composite declines >10 points in 7 days | Alert CSM immediately with trend evidence | Immediate |
| Data staleness on >1 source for >14 days | Alert CS Ops to investigate integration | Within 48 hours |
What the human does with this: Interprets the score in relationship context, decides whether to investigate or act, prioritises against other accounts. The score is an input to judgment, not a substitute for it.
references/weight-customisation.mdRequired integrations:
Required reference data:
references/segment-benchmarks.md) -- must be maintained and updated quarterlyDownstream consumers:
bi-usage-monitor (reads usage component)bi-risk-detector (reads composite + components + trends)bi-expansion-detector (reads composite for health filter)bi-account-brief (reads full health record)bi-segment-trends (reads all account health records for portfolio analysis)Score seems wrong for a specific account: Check data freshness first. If all sources are fresh, check segment classification -- an account miscategorised into the wrong size band will benchmark incorrectly.
Scores cluster too tightly (all accounts 60-80): Benchmark data may be stale or segment definitions too broad. Tighten segmentation or refresh benchmarks.
Component weight feels wrong for a segment: See references/weight-customisation.md. High-touch enterprise accounts may need higher Engagement weight; PLG accounts may need higher Usage weight.
references/segment-benchmarks.md -- Benchmark definitions and update proceduresreferences/weight-customisation.md -- Guidance on adjusting component weights by segmentreferences/integration-patterns.md -- API patterns for each supported data source~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.