Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Roll up the yakos dispatch-log into a per-runtime / per-agent / per-day cost summary, optionally posting to a webhook. Use when reviewing spend, before a budget check, or when asked "what did this cost?".
.claude/skills/bilal140202-cost-summary/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 79% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 75% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 77% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 98% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 70% | 0% |
Generate a human-readable cost summary from the yakos dispatch-log (~/.yakos-state/dispatch-log*.ndjson) over a configurable window. Designed for daily/weekly check-ins — operator runs the skill, gets a markdown summary, optionally posts to a Slack/Discord webhook.
yakos cost --json.per-day breakdowns.
YAKOS_COST_WEBHOOK is set in the operator's environment AND--post is passed, POSTs the summary to that webhook (Slack / Discord / Mattermost / generic JSON receiver). The webhook URL format is up to the operator; the skill emits a JSON body of {"text": "<markdown>"} which most chat receivers accept.
supplies the URL via env var.
the next operator knows the burn rate.
~/.yakos-state/dispatch-log.ndjson | jq is faster.
per-runtime token counts are emitted by the v0.6+ telemetry path for claude (and v0.6.x+ for codex/gemini); use the runtime's own billing dashboard for authoritative numbers.
sh yakos doctor --probe-runtime | head -20
sh yakos cost --since "${SINCE:-$(date -u -v-7d +%Y-%m-%d 2>/dev/null || date -u -d '7 days ago' +%Y-%m-%d)}" --json --by runtime > /tmp/cost-runtime.json yakos cost --since "${SINCE}" --json --by agent > /tmp/cost-agent.json yakos cost --since "${SINCE}" --json --by day > /tmp/cost-day.json
pending model-routing notice: sh MR_CANDS="${HOME}/.yakos-state/model-routing-candidates.ndjson" if [ -s "$MR_CANDS" ]; then n="$(jq -rs '[.[].agent] | unique | length' "$MR_CANDS" 2>/dev/null || echo 0)" echo "pending model-routing candidates: $n (run \yakos model-routing list\ to see)" fi Then include three tables (runtime, agent, day) and the totals. Mark the est-tokens columns "estimate" so readers know to consult the runtime's own billing for billable numbers.
--post is set AND YAKOS_COST_WEBHOOK isnon-empty, also POST: sh if [ -n "${YAKOS_COST_WEBHOOK:-}" ] && [ "${POST:-0}" = "1" ]; then curl -fsS -X POST -H 'Content-Type: application/json' \ --data "$(jq -Rs '{text: .}' < /tmp/summary.md)" \ "$YAKOS_COST_WEBHOOK" fi
If automation is overkill, the operator runs:
shyakos cost --since 2026-05-01 --by agent yakos cost --since 2026-05-01 --by runtime yakos cost --since 2026-05-01 --by day --json | jq
…and pastes the relevant table into a chat or weekly note.
for claude dispatches in the usage field of each dispatch_finished event. Codex + gemini real counts arrive in v0.6.x+. The skill's totals mix both — note this in the output.
yakos cost reads all~/.yakos-state/dispatch-log*.ndjson (current + rotated archives). After heavy use, the windowed total covers archives too. If the window predates the oldest archive, the tail is silently missing — call this out in the summary if --since predates the oldest log file.
across machines requires copying logs to a central host first.
task_preview (first200 chars of the task). If the cost summary is posted to a shared channel, scrub or summarize before posting; do not raw- paste task previews to a public webhook.
cli/lib/cost.sh — the underlying command.~/.yakos-state/dispatch-log.ndjson — the source data.docs/runtime-matrix.md — what real telemetry is availableper-runtime.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 10,283 | 16,967 | +65% | 1 | 1 | 0% | 1,892 | 3,386 | +79% | 0 | 0 | — |
case-02 | fail→fail | 11,395 | 8,452 | -26% | 1 | 1 | 0% | 2,007 | 1,868 | -7% | 0 | 0 | — |
case-03 | fail→fail | 16,618 | 3,012 | -82% | 1 | 1 | 0% | 3,355 | 1,675 | -50% | 0 | 0 | — |
case-04 | fail→pass | 6,574 | 3,329 | -49% | 1 | 1 | 0% | 1,064 | 1,864 | +75% | 0 | 0 | — |
case-05 | pass→pass | 6,761 | 5,636 | -17% | 1 | 1 | 0% | 1,074 | 2,219 | +107% | 0 | 0 | — |
case-06 | fail→pass | 8,348 | 6,762 | -19% | 1 | 1 | 0% | 1,417 | 2,509 | +77% | 0 | 0 | — |
case-07 | fail→pass | 5,634 | 3,286 | -42% | 1 | 1 | 0% | 975 | 1,926 | +98% | 0 | 0 | — |
case-08 | fail→pass | 6,577 | 2,783 | -58% | 1 | 1 | 0% | 1,084 | 1,848 | +70% | 0 | 0 | — |
case-09 | fail→pass | 10,412 | 4,468 | -57% | 1 | 1 | 0% | 1,800 | 2,159 | +20% | 0 | 0 | — |
case-10 | fail→pass | 11,337 | 5,100 | -55% | 1 | 1 | 0% | 1,701 | 2,167 | +27% | 0 | 0 | — |
case-11 | fail→pass | 8,406 | 2,295 | -73% | 1 | 1 | 0% | 1,364 | 1,652 | +21% | 0 | 0 | — |
case-12 | fail→pass | 14,890 | 4,853 | -67% | 1 | 1 | 0% | 2,215 | 2,112 | -5% | 0 | 0 | — |
case-13 | fail→pass | 8,749 | 4,383 | -50% | 1 | 1 | 0% | 1,415 | 2,080 | +47% | 0 | 0 | — |
case-14 | fail→pass | 7,267 | 1,616 | -78% | 1 | 1 | 0% | 1,004 | 1,541 | +53% | 0 | 0 | — |
case-15 | fail→pass | 10,022 | 3,251 | -68% | 1 | 1 | 0% | 1,632 | 1,863 | +14% | 0 | 0 | — |
case-16 | fail→pass | 16,254 | 8,925 | -45% | 1 | 1 | 0% | 2,462 | 3,001 | +22% | 0 | 0 | — |
case-17 | pass→pass | 19,463 | 3,403 | -83% | 1 | 1 | 0% | 1,209 | 1,710 | +41% | 0 | 0 | — |
case-18 | fail→pass | 9,443 | 1,515 | -84% | 1 | 1 | 0% | 1,533 | 1,530 | -0% | 0 | 0 | — |
case-19 | fail→pass | 13,413 | 2,325 | -83% | 1 | 1 | 0% | 2,431 | 1,642 | -32% | 0 | 0 | — |
case-20 | pass→pass | 8,136 | 1,692 | -79% | 1 | 1 | 0% | 1,371 | 1,524 | +11% | 0 | 0 | — |
case-21 | pass→pass | 9,168 | 1,521 | -83% | 1 | 1 | 0% | 1,510 | 1,527 | +1% | 0 | 0 | — |
case-22 | pass→pass | 12,505 | 3,576 | -71% | 1 | 1 | 0% | 2,161 | 1,915 | -11% | 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, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +68 percentage points is the difference between those two pass rates over the 21 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
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.