Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Composite CI gate — runs cost-budget-check + cost-burn + cost-anomaly + cost-projection in parallel and surfaces a single combined health status with max exit code. The operationally-useful entry point — one shell-out covers all four alert ladders.
.claude/skills/ruvnet-cost-health/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -35% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -40% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -26% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -11% | 0% |
The four CI-gate skills (budget / burn / anomaly / projection) each answer a different question. This skill composes them — runs all four IN PARALLEL, returns max(exit_codes), prints a one-line summary per check.
| Subcheck | Question | Default threshold | |---|---|---| | budget | "Have we crossed the configured budget?" | HARD_STOP at 100% | | burn | "Is daily burn accelerating?" | +100% vs prior-week mean | | anomaly | "Is any specific session a >3.5σ outlier?" | ≥1 outlier | | projection | "When will we hit 100% of budget?" | <14 days |
Implementation: scripts/health.mjs.
Promise.all over child_process.spawn).--format json; parse and capture exit code.daysUntilReached[100%] < --alert-days-to-exhaust.max(subcheck exits). Any single failure fails the gate.yaml- name: Cost health gate run: cost health --alert-acceleration 100 --alert-outliers 1
A single step covers four alert ladders. Before this skill you'd wire four separate gates that each duplicated the npx + memory-list overhead; now it's one shell-out (and the four subcheck npx calls run in parallel internally).
bash# Quarterly review — stricter thresholds cost health --alert-acceleration 50 --alert-outliers 1 --alert-days-to-exhaust 30 # Production drift gate — only fire on egregious changes cost health --alert-acceleration 200 --alert-outliers 3 --alert-days-to-exhaust 7 # Skip the slow burn check during a smoke run cost health --skip burn
# Healthy
Overall: ✓ HEALTHY (max exit code 0)
| Check | Status | Detail |
| budget | ✓ | unknown — no budget configured |
| burn | ✓ | delta within ±100% |
| anomaly | ✓ | 0 outliers — under threshold ≥1 |
| projection | ✓ | no budget configured — skipping |
# After adding $5 outlier (vs $0.10 baseline)
Overall: ⚠ UNHEALTHY (max exit code 1)
| burn | ⚠ | ALERT 5163.2% acceleration: latest bucket $5.00 is 5163.2% above prior mean $0.095 |
| anomaly | ⚠ | ALERT 1 outlier (|z|>3.5) |bashcost health --skip burn,projection # only budget + anomaly
Useful when:
| Exit | Meaning | |---|---| | 0 | All subchecks OK | | 1 | At least one subcheck fired an alert (budget HARD_STOP, burn drift, anomaly outlier, projection imminent-exhaust) | | 2 | A subcheck had a config/usage error (e.g. invalid CLI args propagated to a subscript) | | 127 | A subcheck failed to launch (script missing, etc.) |
max() means the worst signal wins — exit 2 (config error) always dominates exit 1 (alert), so you spot misconfigured pipelines before they masquerade as healthy.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 17,326 | 7,978 | -54% | 1 | 1 | 0% | 3,980 | 2,602 | -35% | 0 | 0 | — |
case-02 | fail→fail | 6,331 | 4,272 | -33% | 1 | 1 | 0% | 1,165 | 1,689 | +45% | 0 | 0 | — |
case-03 | fail→pass | 13,792 | 5,520 | -60% | 1 | 1 | 0% | 3,136 | 1,881 | -40% | 0 | 0 | — |
case-04 | fail→pass | 9,135 | 4,100 | -55% | 1 | 1 | 0% | 1,570 | 1,692 | +8% | 0 | 0 | — |
case-05 | pass→pass | 7,644 | 2,753 | -64% | 1 | 1 | 0% | 1,341 | 1,414 | +5% | 0 | 0 | — |
case-06 | pass→pass | 10,208 | 7,504 | -26% | 1 | 1 | 0% | 1,729 | 1,566 | -9% | 0 | 0 | — |
case-07 | pass→pass | 9,112 | 4,194 | -54% | 1 | 1 | 0% | 1,576 | 1,736 | +10% | 0 | 0 | — |
case-08 | fail→pass | 12,415 | 5,313 | -57% | 1 | 1 | 0% | 2,316 | 1,719 | -26% | 0 | 0 | — |
case-09 | fail→pass | 8,923 | 2,036 | -77% | 1 | 1 | 0% | 1,333 | 1,180 | -11% | 0 | 0 | — |
case-10 | pass→pass | 16,157 | 1,938 | -88% | 1 | 1 | 0% | 2,886 | 1,215 | -58% | 0 | 0 | — |
case-11 | fail→pass | 9,998 | 1,530 | -85% | 1 | 1 | 0% | 1,692 | 1,124 | -34% | 0 | 0 | — |
case-12 | pass→pass | 11,446 | 1,705 | -85% | 1 | 1 | 0% | 1,932 | 1,139 | -41% | 0 | 0 | — |
case-13 | fail→pass | 6,678 | 3,099 | -54% | 1 | 1 | 0% | 1,221 | 1,190 | -3% | 0 | 0 | — |
case-14 | fail→pass | 5,054 | 1,977 | -61% | 1 | 1 | 0% | 895 | 1,290 | +44% | 0 | 0 | — |
case-15 | fail→pass | 6,269 | 2,147 | -66% | 1 | 1 | 0% | 1,225 | 1,298 | +6% | 0 | 0 | — |
case-16 | fail→pass | 7,817 | 1,683 | -78% | 1 | 1 | 0% | 1,376 | 1,132 | -18% | 0 | 0 | — |
case-17 | pass→pass | 8,028 | 3,027 | -62% | 1 | 1 | 0% | 1,375 | 1,459 | +6% | 0 | 0 | — |
case-18 | fail→pass | 8,661 | 1,468 | -83% | 1 | 1 | 0% | 1,391 | 1,166 | -16% | 0 | 0 | — |
case-19 | pass→pass | 10,132 | 2,409 | -76% | 1 | 1 | 0% | 1,644 | 1,251 | -24% | 0 | 0 | — |
case-20 | pass→pass | 13,402 | 9,930 | -26% | 1 | 1 | 0% | 2,643 | 2,953 | +12% | 0 | 0 | — |
case-21 | fail→fail | 9,393 | 7,790 | -17% | 1 | 1 | 0% | 1,859 | 2,438 | +31% | 0 | 0 | — |
case-22 | pass→pass | 11,351 | 8,063 | -29% | 1 | 1 | 0% | 2,352 | 2,589 | +10% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +50 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.