lofty-csm-health
v0.1.2
Published
CSM churn-risk signals — Claude Code plugin
Maintainers
Readme
lofty-csm-health
Claude Code plugin for surfacing Customer Success churn-risk signals.
Install
Already have obs-health installed? No migration needed — csm-health lives in the same lofty-internal-tools marketplace catalog. Just refresh and install:
/plugin marketplace update lofty-internal-tools
/plugin install csm-health@lofty-internal-toolsFirst-time installer (no obs-health yet)? Register the catalog and install:
/plugin marketplace add https://lofty-internal-tools.s3.us-west-1.amazonaws.com/plugins/obs-health/marketplace.json
/plugin install csm-health@lofty-internal-toolsThe plugin internally calls a private Lambda Function URL. On first use, the CLI prompts for the API key (kept in 1Password).
Three call shapes
csm-health # show live catalog
csm-health <signal-name> # population scan
csm-health <signal-name> --teams=A,B,C # filtered scan
csm-health <signal-name> --days N # window override
csm-health check --teams=A,B,C # multi-signal per-team risk view
csm-health check --teams=A,B,C --tag billing # tag-filtered subset
csm-health --all # all signals, full populationThe CLI never enumerates signals locally — Lambda is the single source of truth. Run csm-health (no args) to fetch the live catalog of signals + tags + descriptions. New signals deployed to Lambda show up in the catalog automatically without any plugin update.
How it fits together
User asks Claude → Claude reads SKILL.md → runs `csm-health` for live catalog
→ picks the matching signal
→ runs `csm-health <signal> ...` or
`csm-health check --teams=...`
↓
HTTPS + x-api-key
↓
Private Lambda (signal logic)
↓
Returns structured JSON to Claude AI
↓
Claude renders the resultThe plugin contents (CLI binary + SKILL.md + metadata) have no secrets — they're a thin client that calls the Lambda. The Lambda enforces auth via x-api-key header, validated against AWS Secrets Manager.
What you'll get
For population scans: list of flagged teams/users with the trigger detail (count, dollar amount, dates).
For check --teams=A,B,C: one row per team, with firingSignals[] listing every signal that fired and the signal-specific detail. Designed for the CSM weekly-review use case ("here are the 10 accounts I'm meeting with — anyone at risk?").
Five-file plugin layout
csm-health-plugin/
├── package.json ← npm publishing
├── .claude-plugin/
│ ├── plugin.json ← plugin identity for Claude Code
│ └── marketplace.json ← catalog entry
├── bin/
│ └── csm-health ← passthrough CLI (no signal logic)
└── skills/csm-health/
└── SKILL.md ← instructions for Claude AIThe plugin is a thin shim. All business logic lives in the private Lambda — this package is safe to be public on npm because it contains no internal infrastructure detail.
