GVNR

Configure GVNR

Settings live in ~/.enforcer-governor/config.json. You rarely need to edit it by hand:

/enforcer-governor:config          every setting, with which ones you changed
/enforcer-governor:config --why    the same, with why each default is what it is
/enforcer-governor:set dollars 40  change one, with validation
/enforcer-governor:limit 40        the one most people change

Limits

SettingDefaultWhat it does
dollars$20Spend limit per agent. Over it, the agent is stopped until you raise it. A long session runs $20 to $80, so a limit that binds sits above that.
soft0.75The fraction of the limit where GVNR speaks up. A fraction, not a percent.
softActionescalateAt the soft mark, ask you (escalate) or stop the agent (deny). Use deny for anything unattended.
dailyLimit, weeklyLimit, monthlyLimit0, offTotals across every agent. These bound a team; the per-agent limit only bounds one session.

$20 means $20 whichever model the agent is on: each model is priced at its own rate. Where Claude Code's own cost figure is not available, the limit falls back to cost-weighted effective tokens, because cached sessions re-read their whole context every turn and raw token counts explode while costing very little.

At roughly two thirds of the limit, the agent itself is told once, in one sentence, so it can land what it has instead of opening a new front.

Rates, which is where the money actually goes

SettingDefaultWatches
burnLimit$2 a minuteDollars per minute, per agent. Ordinary work runs $0.10 to $0.25 a minute.
fleetBurnLimit$10 a minuteDollars per minute across every agent at once.
fanoutLimit8New agents started in a minute. An orchestrator spawning spawners is exponential.
retryLimit6Upstream errors in a minute. A rate-limited call fails cheaply; the retry after it is what costs.
loopLimit, loopWindow4 of the last 8Identical actions in the recent window that count as a loop.

Rates ask rather than block, and ask once, so an overnight run waits for you instead of dying or nagging. 0 switches one off.

The rules

These ship switched on, and they fire on a full budget, because the expensive mistakes are free:

RuleMatchesAnswer
shell.pipe_to_shellcurl or wget piped into a shelldeny
git.force_pushgit push --force or -frewrite to --force-with-lease
fs.delete_treerm -rfask
git.rewrite_historygit reset --hard, filter-branchask
secrets.access.env, id_rsa, .pem, credentials.json, ~/.aws, ~/.ssh, from any toolask
deploy.publishnpm publish, vercel --prod, kubectl apply or delete, terraform applyask

The rules need no state, so they hold even when GVNR cannot read its own files. Signed in, a matched rule is also put to your organisation's policy if an admin has written one, which can make it stricter or waive a confirmation. See For teams.

Switching checks off

SettingCovers
budgetOnThe spend and rate checks
loopOnThe loop check
rulesOnThe rules above
policyOnAsking your organisation's policy about a matched rule
shipOnSending receipts to your workspace once signed in

They are independent: turning spend off leaves curl | sh and rm -rf guarded. Do not delete state.json to unstick something; it holds the head of the receipt chain. An agent stopped for spending is freed by raising the limit. One stopped for looping needs /enforcer-governor:resume, because a higher limit is not consent to keep doing the same thing.

Settings your organisation sets

A signed-in workspace can publish these settings for every install. They are a floor, not an override: for each one GVNR applies whichever is stricter, so a managed $150 beats your $400, your $40 beats both, and a check the organisation turns on cannot be turned off locally. /enforcer-governor:config marks them with !. They are fetched at session start, at most hourly, and cached; nothing waits on the network to decide.

An Instruxi solution. Verified against Enforcer Governor v2.8.0 on 25 September 2026. Runs in Claude Code today; other harnesses are coming. Nothing leaves your machine until you sign in to an Enforcer workspace. Next: Install, Teams (soon), FAQ. Enforcer, the identity and authorization service, is at enforcer.instruxi.dev.