ccdwyer/budget-governor

A Claude Code mod that enforces session and daily spend caps: a live gauge above the prompt, a wrap-up nudge at 80%, and new prompts refused at the cap.
ccdwyer/budget-governor

Budget Governor enforces spending caps rather than only displaying them. It renders a fill bar above the prompt showing session and daily spend, burn rate in $/hr over the last hour, and a per-turn cost sparkline. Past 80% of a cap each prompt carries a note asking the model to finish concisely; at 100% new prompts are refused (including scheduled, relayed and background-task prompts), while real slash commands such as /budget stay available. A turn that crosses the cap gets one refused tool call to stop and summarize, and the turn ends if it keeps calling tools. Daily spend is aggregated across sessions through a shared store with per-cap persistence, and the mod fails closed when a check or cap read fails. Commands: /budget, /budget session 5, /budget day 20, /budget raise 5, /budget off. Installed via the ccdwyer/claude-mods marketplace. Runs entirely locally with no network access or telemetry. MIT licensed.
Check the author's README for the marketplace and plugin name first. Commands may change as the repository evolves.
claude plugin marketplace add ccdwyer/budget-governor claude plugin install budget-governor

A Claude Code mod that enforces spending caps instead of just showing them.
$3.20 / $10 today · $1.10 / $5 session, the burn rate in $/hr over the last hour of turns, and a sparkline of what each recent turn cost./budget stays available. That includes skills and /compact, which do cost money. Text that only starts with a / is gated like any other prompt./clear starts a new session with its own count, but its spend still adds to today's total. Resuming a session that began on an earlier day doesn't count its earlier spend against today. That earlier spend does still count toward its session cap. Session totals are kept for a year, so resuming an old conversation doesn't earn it a fresh session allowance.| Command | Effect |
|---|---|
| /budget | Show session and daily spend against the caps |
| /budget session 5 | Cap this session (and later ones) at $5 |
| /budget day 20 | Cap all sessions combined at $20 per local day |
| /budget raise 5 | Raise whichever cap is blocking by $5 |
| /budget off | Remove all caps |
Caps are saved and carry over to later sessions. Costs are what Claude Code's /cost reports. They're booked as they're observed (at every prompt and turn end, and once a minute), so a turn that runs past midnight counts toward the new day. If the host stops reporting cost, the gauge says so, and caps keep being enforced against the last recorded spend.
/plugin marketplace add ccdwyer/claude-mods
/plugin install budget-governor@ccdwyer-mods
/reload-plugins
claude plugin validate .
claude plugin test .
Events this mod hooks, as claude plugin validate reads the module:
session.startsession.endcommand.run{command=budget}turn.startturn.completeprompt.submittool.callui.render{component=AbovePrompt}Engine calls it makes: $.clock.after, $.clock.every (via setUp), $.clock.now, $.clock.sleep, $.command.list (via isCommand), $.command.register (via setUp), $.session.id (via refresh, settled), $.session.usage (via refresh, settled), $.state.get, $.state.set, $.store.delete, $.store.get, $.store.keys, $.store.set (via refresh, setCap), $.turn.abort, $.ui.resolve, $.ui.toast.
A tool.call hook sits in the middle of every tool call: it can see the call, refuse it, or add context to its result. This mod uses that only for the behaviour described above.
It runs entirely on your machine. It sends nothing over the network. It reads the session's cost from Claude Code and keeps a daily ledger in Claude Code's local plugin store.
The mod collects no analytics or telemetry, and its author receives no data from it.
Full policy: PRIVACY.md.
MIT