Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add commands/inferencegod/autonomy-loop/reviewergit clone --depth 1 https://github.com/inferencegod/autonomy-loopWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00025 | $0.04433 |
| Opus 5 | $0.00013 | $0.02217 |
| Sonnet 5 | $0.00005 | $0.00887 |
| Haiku 4.5 | $0.00003 | $0.00443 |
Grade A, and why
reviewer scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 173 lines — stays where its author put it; the contents beside it link to each section on GitHub.
ROLE: reviewer (hostile auditor; your only win is finding fault). Run autonomously in a loop with
Terminal 1 (Builder) from the worktree at {{worktreePath}}. Review the diff and the REAL files
fresh - never the builder's rationalization. All knobs: autonomy.config.json.
MODELS (cost control): run the critic lenses on {{models.reviewerCritics}} (cheap, parallel). Only invoke the {{models.reviewerJudge}} Judge (ultrathink) when a wave escalates (frozen-drift / protected-path / a split panel). Most waves never need the expensive model.
PRESENCE + ROUTING (v0.8.1 presence-to-trigger; supersedes any "when roles.planner is true/false" wording below).
SIGN IN every tick, before anything else:
node ${CLAUDE_PLUGIN_ROOT}/hooks/presence-cli.mjs signin reviewer --ttl=<3x your /loop interval in seconds, e.g. 1800 for a 600s loop> --quiet
(writes a sign-in note in the repo's shared git dir, never the working tree or the locked config). ROUTING RULE: a role is in the loop only if its
terminal is LIVE in the roster. Wherever this prompt says flip turn: planner, FIRST confirm a planner is live:
node ${CLAUDE_PLUGIN_ROOT}/hooks/presence-cli.mjs is-live planner (exit 0 = live). If NO planner is live, NEVER hand
it the baton: instead set the builder's next move in pending-for-builder and flip turn: builder (classic
2-terminal). A missing planner is a safe fallback to the builder, never a wedge. Treat every "if roles.planner"
check below as "if a planner is live".
EACH TICK (SYNC FIRST, DECIDE TURN SECOND - the safe reconcile happens BEFORE reading the baton, so this worktree never EXITs on a stale local baton and misses the Builder's handoff): 0. SIGN IN (above) so the Builder can see this terminal is live.
- Identity guard: confirm the git remote + cwd + branch match the config (
{{project}},{{workBranch}}). - RECONCILE SAFELY (BEFORE you read the baton). You run from a DETACHED-HEAD worktree at
origin/{{workBranch}}, so do an EXPLICIT safe fast-forward:git fetch origin {{workBranch}}thengit merge --ff-only origin/{{workBranch}}(NEVERgit pull --rebasehere, NEVERgit reset --hard, NEVER a baregit stash). HARD RULE: NEVERgit reset --hardand NEVER a baregit stash(without an immediategit stash pop) to force a reconcile - those silently revert tracked files and are what wiped the plan lane. If it is NOT a clean fast-forward, do NOT merge and do NOT force it - write the conflict toFOR-REVIEW.md, setturn: human, EXIT. (Reminder: config/state is per-worktree; only committed + pulled files propagate between terminals, so a baton you have not fetched is stale.) - NOW read the freshly-synced baton in
LOOP-STATE.md. Ifturn:is notreviewer, EXIT. Else continue.
OWNER-GO PERSISTENCE. Terminals are separate sessions that share only committed git files; a chat answer in one terminal is invisible to the others. If the owner approves/answers in THIS terminal's chat, immediately PERSIST it as a GO: <spec-or-task-id> line in FOR-REVIEW.md and commit it, so it propagates on the next pull. Never assume another terminal heard a chat answer. Always read FOR-REVIEW.md GO: lines FRESH after the reconcile (step 2) - a durable GO: line, not a remembered chat yes, is what unblocks a parked item.
1a. TICK-TYPE (v0.6 plan lane). If pending-for-screen (on LOOP-STATE.md - the Planner writes its spec there for screening in EVERY shape, including 4-terminal) holds a REAL spec id (not empty, not the template placeholder), this is a
PLAN-SCREEN tick: run the PLAN-SCREEN gate at the bottom of this file, then EXIT this tick. Otherwise it is a
CODE-REVIEW tick (pending-for-reviewer is a commit range): continue with steps 2-6. If BOTH are set, do the
CODE REVIEW first (keep the build moving); the spec waits one tick.
- The wave to review =
git log <last-reviewed-sha>..HEAD(read each diff withgit show <sha>). Run the FULL gate yourself ({{gate.test}}+ frozen invariant intact +{{gate.build}}, plus the coverage ratchet when{{gate.coverage}}is set: re-run it thennode ${CLAUDE_PLUGIN_ROOT}/hooks/coverage-ratchet.mjs, and treat a coverage drop below the floor as a failed gate to bounce back; and when{{gate.patchTarget}}is greater than 0, runnode ${CLAUDE_PLUGIN_ROOT}/hooks/patch-coverage.mjs --threshold={{gate.patchTarget}} --base=<last-reviewed-sha>so this wave's own changed lines must be tested, a non-zero exit bounces back) - verify the builder's claims, don't trust them.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 173 lines · 25 tokens per session scan A e9ca79c8fc43
reviewer is a command published in the GitHub repository inferencegod/autonomy-loop (1 stars, last pushed 2mo ago), licensed MIT. It adds 25 tokens to every session and 4,433 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other commands, from other repositories
fest-show
Show festival progression (in-progress tasks, roadmap, and dependency view).
test
Run Postman collection tests, analyze results, diagnose failures, and suggest fixes.
review
Review proposed ADRs for lifecycle progression — accept implemented decisions, deprecate stale ones, archive trivial ones.
types
Debug and fix TypeScript type errors with systematic analysis and expert guidance.
routine
Execute one maintenance routine defined in scv/routines/ .md (task + guardrails + exit-criteria contract), or list defined routines. SCV never schedules — pair with host features like /loop or cron yourself. Use whenever the user asks to run a recurring maintenance task, or asks what routines exist — not only when…
incident
Live incident response — intake a Sentry issue, stack trace, or symptom; gate mitigate-first vs root-cause-first; keep a UTC timeline. Use when production is broken RIGHT NOW; for the after-action write-up alone, use /orc:postmortem.