About this template
"Churn risk: 73%." Where did 73 come from?
Nobody knows. It goes in the board deck anyway, and the CS team works the list top-down sending "we noticed you haven't logged in lately" — which tells a wavering customer they're being watched and confirms they should leave.
Meanwhile the account that actually left had a stable login count and a champion who quit in February.
This refuses to predict, on purpose
No model, no training set, no validated baseline — so no probabilities and no risk scores. Those numbers end up in a deck and become fiction.
You get an ordinal list instead: HIGH / MEDIUM / WATCH. A comparison between accounts, not a claim about any one of them. It's the accounts a human should look at first, and it's called exactly that.
Change, not level
The signal that matters most is a drop from the account's own baseline. A customer who always logged in twice a month and still does is fine. One who went from daily to weekly is the signal.
Signals ranked by how much they actually mean:
- Contractual — renewal approaching with no engagement, a downgrade, a seat reduction, a failed payment. Facts, not inference.
- Behavioural delta — against their own normal, never an absolute number.
- Relationship — champion left, sentiment turned, escalation unresolved.
- Support — volume spike or a repeated unresolved issue.
Anything flagged only by 3 or 4 caps at WATCH, never HIGH.
The output is a question, not a task
"Their weekly sessions fell from 40 to 9 after the March seat change — ask if something broke for that team."
Not "check in with Acme". That's a task; this is something a human can actually walk into a call with. Every flagged account gets the specific observation with dates, who should reach out, and what to ask.
Two honesty rules
Absence of usage data is not absence of risk. If your export has no usage signal the ranking is marked CONTRACT-ONLY and substantially weaker — a quiet account never gets to look healthy just because you can't see it.
Never a discount as the first move. A discount answers a price objection, most churn isn't one, and leading with money trains renewal hostage-taking.
What you supply
Your own Claude Code login, plus a subscription list with renewal dates in
~/churn/exports/ — and usage/support exports if you have them.
No CRM key. Exports are the input, which is also why it cannot contact anyone.
Where this stops
It flags and drafts internal notes. It does not email customers, create CRM tasks, or offer save-deals.
It won't state a churn probability or predicted revenue impact, won't guess why an
account is disengaging (you get cause unknown — ask), and won't tell you an account
is safe — it ranks risk, it doesn't clear it.
Verified on build: the skill, the working tree, the NEVER_CONTACT_OR_DISCOUNT
guard, the not-a-prediction rule, all four signal classes and both honesty rules are
present on a fresh fork. Running it on your own book is yours to do.