overview / commands / Environment
rabadon is deterministic by default: no variable below needs to be set for any law to hold, and with none of them set nothing calls a model.
| variable | default | effect |
|---|---|---|
RABADON_JUDGE | unset = off | 1 enables the drift judge and the red-suite diagnosis. 0 disables both and wins over the guard key. Also settable per project as "judge": true in .rabadon/guard.json. |
RABADON_JUDGE_MODEL | claude-haiku-4-5 | model for the drift verdict |
RABADON_SEMANTIC_REVIEW | unset = off | 1 runs the semantic completion review at Claude's Stop: at most two tool-less reviewer calls per user turn, 30 s and $0.25 each; a grounded correct verdict continues the same session through additionalContext. With it on, each user message also snapshots the project's git-visible files into a session-private store (the user's index, refs and objects are only read) so the reviewer sees what changed since that message, with an explicit complete/partial/unavailable status. Limits and evidence: docs/semantic-review-verdict.md. |
RABADON_REVIEW_MODEL | opus | model for the semantic completion review |
RABADON_DIAGNOSE_MODEL | account default | model for the red-suite diagnosis |
RABADON_MODEL | unset | proposer model for do / loop / repair. Not read by the gate — one name for two jobs sends the judge somewhere nobody asked for. |
RABADON_TIERS | unset | cheap-first tier ladder for loop, e.g. haiku,opus |
RABADON_CLAUDE_BIN | claude | proposer binary for repair |
RABADON_DIR | ~/.rabadon | spool + state root. Keep it shallow: every event is also offered to a local listener on $RABADON_DIR/rabadon.sock (rabadon ships none; nc -lU is one), and sun_path caps a unix socket path at 104 bytes on macOS / 108 on Linux. Over the cap, rabadon says so on stderr and writes to the spool only — judging is unaffected. |
RABADON_LENS_DIR | ~/.claude/projects | transcript source for lens |
RABADON_NOTIFY | on | 0 silences desktop notifications |
RABADON_OFF | unset | 1 makes the gate a no-op for this process and its children (set on every model subprocess rabadon spawns, so the supervisor never supervises itself). One of six silencers; see the six silencers for the other five and the one command that lifts each |
RABADON_DRILL | unset | 1 tags emitted events as self-test, excluded from every count |
When the judge or the diagnosis does run, each call writes one LLM_CALL event carrying purpose, model, ms and ok — failures included. There is no USD on that event on purpose: claude -p --output-format text reports no usage, so the cost is not knowable at that line. It comes from the transcripts instead, via rabadon lens.