rabadon

overview / commands / Environment

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.

variabledefaulteffect
RABADON_JUDGEunset = off1 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_MODELclaude-haiku-4-5model for the drift verdict
RABADON_SEMANTIC_REVIEWunset = off1 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_MODELopusmodel for the semantic completion review
RABADON_DIAGNOSE_MODELaccount defaultmodel for the red-suite diagnosis
RABADON_MODELunsetproposer model for do / loop / repair. Not read by the gate — one name for two jobs sends the judge somewhere nobody asked for.
RABADON_TIERSunsetcheap-first tier ladder for loop, e.g. haiku,opus
RABADON_CLAUDE_BINclaudeproposer binary for repair
RABADON_DIR~/.rabadonspool + 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/projectstranscript source for lens
RABADON_NOTIFYon0 silences desktop notifications
RABADON_OFFunset1 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_DRILLunset1 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.

commands

rabadon lens