plugins/claude-code-hermit/skills/cost-reflect/SKILL.md
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.
npx skillsauth add gtapps/claude-code-hermit cost-reflectInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.
--maintainer): produce the full technical report and send it as a maintainer-tier
notice. Existing routine/proactive invocations without the flag retain this behavior for backward
compatibility, but new routine configuration should pass --maintainer explicitly.On a channel-arrived message without --maintainer (the inbound prompt contains a <channel source="..."> tag), reply via that channel's reply tool.
Otherwise, do not send a channel reply in Step 0; proceed and deliver the result via Step 2 (terminal/manual) or Step 3 (maintainer notice).
On a channel-tagged turn without --maintainer (Step 0 detected 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 .claude-code-hermit --plain
Otherwise (terminal/dev use or --maintainer), run the full breakdown:
bun ${CLAUDE_PLUGIN_ROOT}/scripts/cost-report.ts reflect .claude-code-hermit
Capture stdout. If the output starts with "No cost data" or "No spend recorded yet", report that message and stop — there's nothing to send.
Terminal: the script output is already formatted and capped at 1500 characters. Relay it verbatim. Don't summarize, reformat, or add commentary — the output is the report.
Channel (--plain output): the script output is already plain language and jargon-free — no cache_read/cache_write/token-type labels, no session IDs, no PROP-/S-NNN, no slash commands. Relay it translated into the operator's language if the inbound message wasn't in English. Translation only — add no commentary and don't reintroduce token-category detail.
When $ARGUMENTS contains --maintainer, deliver the report through the operator's channel.
For backward compatibility, do the same when the invocation is clearly from an existing routine or
proactive prompt without the flag (i.e., not from a direct operator conversation). 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 .claude-code-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 — today's behavior. On a non-technical install with no maintainer chat, the report goes to SHELL.md Findings 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.
claude-code-hermit:cost-reflect --maintainer via /claude-code-hermit:hermit-settings — a
Sunday 22:00 cadence (0 22 * * 0) before weekly-review works well./claude-code-hermit:hermit-evolution instead.--plain mode (channel-tagged turns only): today's spend vs. a trailing-7-day typical day, drivers named by work (not token type), spend-cap status, and a one-line notional-dollars caveat. No token categories, session IDs, or internal IDs.config.operator_profile === 'non-technical'): a client-chat spend question never reaches this skill, since channel-responder deflects 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.tools
Composes and delivers the daily fitness brief — a forward-looking morning read (readiness + today's plan) or a backward-looking evening read (today's training, or an earned-rest note, + tomorrow's setup) — in the operator's configured voice. Invoke with /claude-code-fitness-hermit:fitness-brief --morning|--evening|--slot <name>. Becomes the plugin's two daily beats — the morning Strava connectivity check and the evening activity sync, RPE binding, and Run deep-dive.
development
Renew the hermit's long-lived Claude login token over the channel, before it expires. Relays a one-time sign-in link to the operator, takes the code back, installs the new token, and restarts. Activates on messages like 'relogin', 'renew my login', 'reauth', 'the login is expiring', or when doctor's credential-expiry check flags setup-token.
development
Synthesizes the past 7 days of archived briefs into a weekly digest — top stories, emerging vs faded themes, category activity, and per-source performance built from archive frontmatter. Delivers to the operator's configured channel and archives a weekly note. Designed as a weekly routine. Invoke with /feed-hermit:weekly-digest.
development
Manage developing story arcs tracked across briefs — add, resolve, and list active arcs in compiled/story-arcs-*.md. Arc Watch keywords drive the feed-brief arc-tagging enrichment. Invoke with /feed-hermit:story-arcs add|resolve|list.