cost-reflect
The 'why is my bill high' skill: audits where spend goes across token categories (cache_read, cache_write, output, input) and per-session attribution. Invoke for questions like 'cost breakdown', 'which sessions are expensive', 'what's driving spend', or 'cold start costs'. Not for week-over-week trend lines (use hermit-evolution) or simple total-spend summaries.
- License 许可
- MIT
- 所属仓库
- gtapps/hermitd
- 最近更新
- 2026-11-14
- Stars
- ★ 85
- Forks
- 16
01 前言 Front Matter
- name
- cost-reflect
- description
- The 'why is my bill high' skill: audits where spend goes across token categories (cache_read, cache_write, output, input) and per-session attribution. Invoke for questions like 'cost breakdown', 'which sessions are expensive', 'what's driving spend', or 'cold start costs'. Not for week-over-week trend lines (use hermit-evolution) or simple total-spend summaries.
03 SKILL.md 正文
Cost Reflect
Runs a structural cost audit over the last 7 days of cost-log.jsonl and delivers the result to the operator. The math is done by a script — your job is to run it and deliver the output through the right channel.
Invocation mode
- Manual (no arguments): reply only to the invoking terminal or channel conversation.
- Automated (
--maintainer, or any routine/proactive invocation): produce the full technical report and send it as a maintainer-tier notice.
Step 1 — Run the analyzer
On a channel-tagged turn without --maintainer (the inbound prompt contains a <channel source="..."> tag), run
the plain-language mode instead of the full breakdown — a channel operator asking "why is my bill
high" shouldn't get raw token-category jargon:
bun ${CLAUDE_PLUGIN_ROOT}/scripts/cost-report.ts reflect .hermit --plain
Otherwise (terminal/dev use or --maintainer), run the full breakdown:
bun ${CLAUDE_PLUGIN_ROOT}/scripts/cost-report.ts reflect .hermit
Capture stdout. status: "empty" → say no spend is recorded yet and stop; there's nothing to send. On an error, say cost data is unavailable and stop.
Step 2 — Relay the report
Terminal: compose the report from the JSON in under 1500 characters: the window total with turns and sessions, the by_type split, by_model and cold_starts when non-empty, by_source (with more_sources), and top_sessions. Report the figures as given, without commentary.
Channel (--plain output): reply through that channel's reply tool, in the operator's language, for someone with no technical background: today's spend against a typical day (today_usd, vs_typical, typical_day_usd), each drivers work in everyday words with its cost_usd (background_checks: background check-ins; scheduled_routines: scheduled routines; channel_messages: their chat messages; other_sessions: other sessions on this machine; conversations: conversations with you), the budget cap when present, and that the figures are a tracking estimate, not a literal bill. No token types, session IDs, PROP-/T-... or slash commands.
Step 3 — Channel delivery
When $ARGUMENTS contains --maintainer (or the invocation is a routine/proactive prompt rather than
a direct operator conversation), deliver the report through the operator's channel. Spend detail is
maintainer-tier by definition, so send it as the maintainer leg only (no client leg):
bun ${CLAUDE_PLUGIN_ROOT}/scripts/channel-send.ts .hermit --notice
with {"maintainer": "<report>"} on stdin. On a technical install with no maintainer chat configured, sendOperatorNotice's default fallback: "client" puts it in the primary chat. On a non-technical install with no maintainer chat, the report goes to state/watchdog-events.jsonl and no chat sees it (fail-closed on spend disclosure). If nothing was delivered, follow § Operator Notification's fallback (push if enabled, log to Findings).
To set a preferred channel, add "primary": "<channel-name>" inside channels in config.json.
Notes
- Scheduling: this skill doesn't self-register a routine. To run it on a schedule, add
hermitd:cost-reflect --maintaineras a routine via/hermitd:hermit-settings. - What it measures: cold-start turns are context warm-ups with no prior cache hit;
by_typeshares are of rows that record a split. For week-over-week totals, use/hermitd:hermit-evolutioninstead. - Non-technical installs (
config.operator_profile === 'non-technical'): a client-chat spend question never reaches this skill, sincechannel-responderdeflects it with a plain "handled by your provider" reply. Spend figures stay maintainer-side (terminal, maintainer chat, weekly review), so a channel-tagged run here is expected only from a maintainer-audience surface.
04 同仓库更多 Skills
dream
Nightly memory maintenance from transcript ground truth. Verifies, enriches and tidies auto-memory and topic pages with snapshot validation and undo. Also handles 'undo the dream'.
when-done-switch-to
Arm a deferred model or effort switch. Use for "when done switch to", "after this drop to sonnet", or "switch model when idle".
weekly-review
Generate the weekly review report for the current ISO week. Writes to .hermit/compiled/review-weekly-YYYY-Www.md (dev-facing detail) and sends a plain-language channel summary (Delivered / Decisions / Waiting on you / Spend). Runs every Sunday at 23:00 via routine.
watch
Background events via the config watch monitor or ad-hoc Monitor tool. Quiet watches cost zero tokens.
watch-activate
Activate the config watch monitor.
voice-notes
Transcribe and respond to voice notes. Activates when any channel message carries an audio attachment, or when asked to transcribe an inbound voice message.