# The Autonomous Claude Code System - self-running, self-verifying, on Opus 4.8

> A field guide to building a self-running, self-verifying Claude Code system on Opus 4.8. Fable-5-grade autonomy at a fraction of the cost, on any repo.

Source: https://osmosync.com/resource-guides/autonomous-claude-code

---

Field guide

# The Autonomous Claude Code System

Build a self-running, self-verifying Claude Code system on Opus 4.8. Fable-5-grade autonomy, a fraction of the cost, on any repo you already have.

SV Shrey Vaughn &middot; founder, OsmoSync

~2 hrs to build, once
10 builds each with a checkpoint
4 parties plan, do, verify, gate
$0 extra, if you have a sub

You have a capable model and you are still typing prompts at it one at a time. This guide fixes that. Everyone is telling you to go rent the new Mythos-class model at ten dollars in and fifty out per million tokens. You do not need it for this. The result you actually want, a system that ships boring work while you sleep and never lies to you about it, comes from the machine you build around the model, not from the model itself. Capability lives in the weights. Reliability lives in the system.

Used casually, any frontier model is an expensive way to generate impressive wrong things. Used inside a system, it is the closest thing to an employee you can rent for a few dollars a day. This guide builds that system on Opus 4.8: half the price of the top tier, zero data retention, and for the one seat that matters, covered by the Claude Code subscription you already pay for. Not a philosophy of it. The actual files, in order, with a checkpoint after each so you know it works before you stack the next piece on top.

## Why Opus 4.8, and not Fable 5

Be honest about the tradeoff, because it is the whole reason this works. Fable 5 genuinely beats Opus 4.8 on the hardest long-horizon tasks, and that gap grows with difficulty. But look at what this system actually asks the top model to do: read state, pick one item, write a spec, judge a diff. Those are short, bounded decisions, not week-long autonomous marathons. On work of that shape Opus 4.8 sits at or near parity, and everything expensive gets pushed down to cheap workers and a deterministic gate anyway.

So the trade is lopsided in your favor:

Dimension Fable 5 (Mythos class) Opus 4.8

Price (API) $10 / $50 per M $5 / $25 per M
Data retention 30-day (covered model) zero data retention
The conductor seat metered credits your Claude Code subscription
Ceiling on the hardest jobs higher slightly lower, rarely the bottleneck here

Keep one escape hatch. If a single job is genuinely a multi-hour, million-token reasoning marathon, route that one job to the top model and pay for it. Everything else runs here. That is the whole verdict: route to the expensive model, do not live on it.

The test that decides where the top model goes. Before you hand it any job, ask one question: could a cheaper model redo this tomorrow? A website or a month of posts, Opus rebuilds next week for nothing, so a frontier seat is wasted there. What a cheap model cannot recreate is judgment written down, a quality bar it can apply and a plan it can execute. That is the artifact worth the top model's time, and this whole system exists to bank it, then hand it to a cheap worker.

## The four principles

Predict every design decision in this guide from these.

1. Laws, not tips. Every rule has a number, a never, or a command that checks it. Anything softer gets optimized away.

2. Nothing grades its own homework. The planner, the worker, the verifier, and the gate are four different parties, and the last one is a bash script that cannot be argued with.

3. Nothing that passed once goes unwatched. Finished work graduates into a re-verified invariant. A goal you verify once is an assumption with a timestamp.

4. Cheap models behave when you give them a contract, an example, and a self-check. This is the layer most guides skip. A cheap worker with a vague brief confabulates. The same worker with an output template, one worked example, and a pre-send self-check is reliable. Build 3 makes it concrete and the proof section measures it.

## Prerequisites

claude CLI (Claude Code) with an Opus 4.8 subscription # the conductor + verifier seats jq, gh, git, make, cron a repo with a test command # optional, only to save subscription quota on bulk work: llm CLI + OpenRouter key # llm install llm-openrouter Total hands-on time to build: about two hours. Each build is 10 to 20 minutes with a check at the end. Here is the shape of what you are assembling.

your-repo/ CLAUDE.md # BUILD 1: the constitution loop/ loop.sh # BUILD 3: the heartbeat conductor.md triage.md # BUILD 3: routing + cheap reader contract.md # BUILD 2: the three lists workers/implement.md verify.md guardrails/verify.sh # BUILD 2: deterministic gate scripts/{trust-log,log-cost,cost-check}.sh verify-goals.sh goals/ # BUILD 5: standing goals skills/ # BUILD 4: chores + BUILD 6: extract-approach evals/ # PROOF: measure your workers memory/{STATE.md,trust.tsv,goal-ledger.tsv,usage.log,learnings/} Makefile # BUILD 8 ## Build 0 - Configure the engine Set these before writing any file of your own.

Setting Value

Conductor + verifier model claude-opus-4-8
Worker model claude-sonnet-5 (spec complete) or claude-haiku-4-5 (mechanical)
Triage model claude-haiku-4-5 , or an OpenRouter cheap model
Data retention zero (Opus 4.8 default)
max_tokens per call large where supported, so the model does not run out of room mid-thought

### Five hygiene rules that still apply

These carry over from the frontier-model docs and hold on Opus 4.8 just as well. One, max_tokens caps thinking plus response text, so set it generously on the conductor and verifier. Two, reserve the highest reasoning effort for one-shot reviews, never for loop workers; effort is per step, not per run. Three, check the stop reason, not just the exit code; a safety refusal can return as a successful response, so branch on it and fall back to a second model. Four, never ask the model to echo or explain its internal reasoning in the response text; read the structured thinking instead. Five, long turns are normal, which is why the heartbeat is a cron job you check asynchronously, not a blocking wait.

### The prompt pack

Tested language for known frontier-model behaviors. It works just as well on Opus 4.8. Paste it verbatim into the prompts noted; do not paraphrase it thinner.

Anti-overplanning (conductor and any interactive session):

When you have enough information to act, act. Do not re-derive facts already established in the conversation, re-litigate a decision the user has already made, or narrate options you will not pursue. If you are weighing a choice, give a recommendation, not an exhaustive survey. Anti-gold-plating (every worker prompt):

Don't add features, refactor, or introduce abstractions beyond what the task requires. A bug fix doesn't need surrounding cleanup. Don't design for hypothetical future requirements: do the simplest thing that works well. Don't add error handling or validation for scenarios that cannot happen. Only validate at system boundaries. Grounded progress claims (any long run):

Before reporting progress, audit each claim against a tool result from this session. Only report work you can point to evidence for; if something is not yet verified, say so explicitly. If tests fail, say so with the output; if a step was skipped, say that. Autonomous-pipeline reminder (every cron-driven prompt):

You are operating autonomously. The user is not watching and cannot answer questions mid-task. For reversible actions that follow from the original request, proceed without asking. Before ending your turn, check your last paragraph: if it is a plan, a question, or a promise about work you have not done, do that work now with tool calls. End only when the task is complete or you are blocked on input only the user can provide. CHECK 0: every model call has an explicit large max_tokens where supported; your scripts branch on a refusal stop reason; no prompt anywhere says "show your thinking." ## Build 1 - The constitution (CLAUDE.md) One line why: the model follows laws and optimizes around tips, so every line needs a number, a never, or a command that checks it. Four blocks, under 150 lines, no "think step by step," no predefined agent personas, mostly stop signs.

# CLAUDE.md ## NEVER (laws; exceptions require asking first) - Never exceed 200 changed lines in one commit without asking. - Never touch auth, billing, migrations, or prod config unattended. - Never report work as done from your own assessment. Done = the check passed. - Never invent a file path, symbol, endpoint, secret, or convention you did not directly observe. Stop and ask. - Never add a dependency. Propose it in STATE.md and stop. - Never edit or delete a test to make it pass. That is a fail, always. - Never echo, transcribe, or explain your internal reasoning in response text. - When a /goal condition passes, write goals/ .md with the condition as its predicate before reporting success. ## DISPATCH (route every task; first match wins; log to memory/dispatch.tsv) | model | seat | cost | intelligence | taste | |------------------|-------------|--------------|--------------|-------| | claude-opus-4-8 | conductor | subscription | 9 | 9 | | claude-sonnet-5 | worker | subscription | 7 | 7 | | claude-haiku-4-5 | scout/triage| subscription | 5 | 6 | 1. Decision (plan/review/route) -> opus-4-8, high effort, read-only. 2. Big read (>50k tokens) -> haiku or an OpenRouter cheap model. 3. Ships to a user (UI/API/copy) -> opus-4-8 gets the final taste pass. 4. Spec complete -> sonnet-5, medium effort. 5. Else sonnet-5; escalate one rung on a miss without asking. ## WORDS - "done" = the predicate passes; nothing else - "small" = under 50 changed lines; "quick" = under 10 minutes of your time - "cleanup" = behavior identical, verify.sh green before and after ## DONE - Every task has a machine-checkable done_when before work starts. - A fresh-context agent that saw neither plan nor draft verifies against it. - guardrails/verify.sh has the final vote. - Maker and checker disagree twice -> stop, queue for a human. Edit the numbers and paths to yours. Workflow-specific material like a PR procedure goes in skills/, not here.

CHECK 1: for every line ask, could the model comply 80 percent and claim success? If yes, rewrite it with a number or a never . wc -l CLAUDE.md under 150.

## Build 2 - Walls and gate

Blast radius must be declared before the first tick, and a bash script must hold the final vote.

loop/contract.md:

## acts alone draft PRs on branches; fix lint/test debt; update STATE.md; label issues ## queues for me auth, payments, migrations; any skill below "auto" tier; any diff > 400 lines ## wakes me up verify fails twice on the same item router swapped models mid-run daily budget breached anything requests a secret a standing goal is VIOLATED loop/guardrails/verify.sh (edit for your stack):

#!/usr/bin/env bash set -e npm run typecheck --if-present npm test --if-present npm run lint --if-present CHECK 2: ./loop/guardrails/verify.sh runs and exits 0 on your current repo. If it fails now, fix that first; the whole system stands on this script. ## Build 3 - The heartbeat The top model as a worker is a large bill. The top model as a conductor emits 10 to 20 percent of the tokens while making 100 percent of the decisions, and on a subscription that seat is effectively free. A near-free model reads the quiet ticks. Agents hand off through a JSON schema so any model fits any seat.

loop/triage.md:

You receive recent commits, open issues, and CI runs. Output ONLY findings: - finding: evidence: status: actionable | informational No fixes, no opinions. Nothing to report = output exactly "status: quiet". Anything touching auth, payments, migrations, secrets = always actionable, noted "contract-sensitive". loop/conductor.md:

You are the conductor. You do not write code. You do not edit files. 1. Read STATE, TRUST LEDGER, CONTRACT below. Do not trust memory of them. 2. Pick the ONE highest-value actionable item. contract-sensitive, ambiguous, or likely >400-line diff -> action: queue nothing worth doing -> action: stop 3. Else action: execute, with a spec a mediocre model can follow. Output ONLY this JSON: { "action": "execute|queue|stop", "item": "...", "skill": " ", "spec": "...", "done_when": [" ", ...] } You are the decision, not the essay. Be brief. When you have enough information to act, act. Do not re-derive settled facts or narrate options you will not pursue. Give a recommendation, not a survey. loop/workers/implement.md - this is the hardened worker prompt: a contract, one worked example, and a self-check. This block is why the whole thing stays honest on a cheap model.

You receive a work order (JSON). Execute the spec exactly. Your final message IS the return value: give the diff summary and outcome, not a narration. Rules: - Do the ONE next step toward done_when. Small diffs win. - Don't add features, refactor, or abstractions beyond what the task requires. Do the simplest thing that works. Only validate at boundaries. - Verify before you claim. If you say a test passed or a command succeeded, you must have run it and seen the result. Never invent a file path, line number, or command output. - Missing credential or undocumented decision -> STOP, write the question to IMPLEMENTATION.md. Never invent secrets or conventions. Output template: Done: Changes: - path/to/file.ext:120 - Commands run: - -> Not done / caveats: Example (small clear brief): Done: Added a 30s timeout to the request; module imports cleanly. Changes: - src/client.py:22 - added timeout=30.0 to the request call Commands run: - python -c "import client" -> OK, no error Not done: did not parameterize the timeout; brief asked only for a fixed 30s. Self-check before you send: (1) Did I run every command whose result I report? (2) Is every changed path real? (3) Did I stay inside the spec? (4) If this needs judgment above my seat, did I hand it back instead of guessing? loop/workers/verify.md - a fresh-context verifier with no tools:

You receive a SPEC and a DIFF, nothing else. Judge only what is in front of you. 1. Does the diff satisfy every done_when? Cite lines. 2. Anything outside the spec's scope? Instant fail. Deleted/skipped tests? Instant fail. Output exactly one line: "PASS: " or "FAIL: ". The maker was confident. That is not evidence. loop/loop.sh - subscription-native by default (conductor and verifier on Opus, worker on Sonnet). Set WORKER_CMD to an OpenRouter model to save quota.

#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")" MAX_ITERS="${MAX_ITERS:-10}" DAILY_BUDGET_USD="${DAILY_BUDGET_USD:-5}" TRIAGE_MODEL="${TRIAGE_MODEL:-claude-haiku-4-5}" WORKER_CMD="${WORKER_CMD:-claude -p --model claude-sonnet-5 --output-format json}" ./scripts/cost-check.sh --budget "$DAILY_BUDGET_USD" || exit 3 for ((i=1; i/dev/null || true; \ gh run list --limit 10 2>/dev/null || true; } \ | claude -p "$(cat triage.md)" --model "$TRIAGE_MODEL" >> memory/STATE.md ./scripts/log-cost.sh triage 0.01 grep -q "status: actionable" memory/STATE.md || { echo quiet; exit 0; } # 2 CONDUCT: Opus, fresh context, read-only, JSON out claude -p "$(cat conductor.md) STATE: $(cat memory/STATE.md) TRUST: $(./scripts/trust-log.sh --render) CONTRACT: $(cat contract.md)" \ --model claude-opus-4-8 --allowedTools "Read" \ --output-format json > /tmp/c.json ./scripts/log-cost.sh conductor 0.20 # 2a REFUSAL TOLERANCE: fall back, never iterate on output you did not choose STOP_REASON=$(jq -r '.stop_reason // ""' /tmp/c.json) [[ "$STOP_REASON" == refusal ]] && { echo "refusal: fell back" >> memory/STATE.md; exit 2; } jq -r '.result' /tmp/c.json > work-order.json SKILL=$(jq -r .skill work-order.json); ACTION=$(jq -r .action work-order.json) [[ "$ACTION" == stop ]] && exit 0 [[ "$ACTION" == queue ]] && { echo "queued: $SKILL" >> memory/STATE.md; continue; } # 3 EXECUTE: worker, isolated worktree WT="../wt-$i"; git worktree add "$WT" -b "loop/$SKILL-$i" >/dev/null ( cd "$WT" && $WORKER_CMD "$(cat "$OLDPWD/workers/implement.md") WORK ORDER: $(cat "$OLDPWD/work-order.json")" > IMPLEMENTATION.md ) ./scripts/log-cost.sh worker 0.05 # 4 VERIFY: fresh Opus, no tools, sees only spec + diff V=$(claude -p "$(cat workers/verify.md) SPEC: $(jq -r .spec work-order.json) DIFF: $(cd "$WT" && git diff)" \ --model claude-opus-4-8 --allowedTools "" \ --output-format json | jq -r .result) ./scripts/log-cost.sh verifier 0.20 # 5 GATE: deterministic; then ledger; ship only at auto tier if [[ "$V" == PASS* ]] && ( cd "$WT" && "$OLDPWD/guardrails/verify.sh" ); then ./scripts/trust-log.sh "$SKILL" pass if [[ "$(./scripts/trust-log.sh --tier "$SKILL")" == auto ]]; then ( cd "$WT" && git add -A && git commit -qm "loop: $SKILL" && gh pr create --fill || true ) echo "- shipped: $SKILL" >> memory/STATE.md else echo "- review: $SKILL in $WT" >> memory/STATE.md fi else ./scripts/trust-log.sh "$SKILL" fail echo "- FAILED: $SKILL in $WT" >> memory/STATE.md fi ./scripts/cost-check.sh --budget "$DAILY_BUDGET_USD" || exit 3 done exit 1 # iteration cap without stop: check STATE.md Exit map: 0 quiet or done, 1 cap, 2 refusal, 3 budget. All labeled, on purpose.

CHECK 3: chmod +x loop.sh guardrails/verify.sh , then run ./loop.sh once by hand. A quiet repo exits 0 for about a penny; an actionable repo produces work-order.json with all five fields and a verdict line in STATE.md.

## Build 4 - The trust ledger

"Turn up autonomy as trust grows" is not a mechanism; a TSV with tier rules is. Autonomy is per skill, not per loop.

loop/scripts/trust-log.sh:

#!/usr/bin/env bash # usage: trust-log.sh | --render | --tier set -euo pipefail F="$(dirname "$0")/../memory/trust.tsv"; touch "$F" tier_of() { awk -v r="$1" -v p="$2" 'BEGIN{ rate=(r>0)?p/r:0 if (r>=20 && rate>=0.95) print "auto" else if (r0)?p/r*100:0}')" \ "$(tier_of "$r" "$p")"; done "$F.t" && mv "$F.t" "$F";; esac Tier rules: auto is 20-plus runs and 95-plus percent pass, ships unattended. queue means verified drafts wait for you. watch is under 10 runs or under 90 percent, draft-only. Every skill starts at watch. Seed a loop/skills/ /SKILL.md for each recurring chore (fix-lint-debt, fix-flaky-test, bump-deps, triage-issues are the standard four).

CHECK 4: run ./scripts/trust-log.sh demo pass 21 times, then --tier demo prints auto. Reset with > memory/trust.tsv .

## Build 5 - Standing goals

A goal you verify once is an assumption with a timestamp. Finished goals graduate into invariants that are re-verified daily and logged. One file per finished thing, goals/ .md:

predicate: cd $REPO && npm test -- tests/auth 2>&1 | tail -1 | grep -q passing born: 2026-07-06 status: satisfied last-pass: 2026-07-06 on-violation: wake me. Do not auto-fix. retire-when: auth module deleted. Retirement is a human decision, logged. Predicate rules: a command; exit 0 means the invariant holds; cheap, deterministic, read-only. Adjectives are banned. If a shell script cannot check it, the checker cannot either. Non-code predicates work the same, for example find invoices/overdue -mtime +45 | wc -l printing 0.

loop/verify-goals.sh:

#!/usr/bin/env bash set -uo pipefail LEDGER="memory/goal-ledger.tsv"; VIOLATIONS=0 for g in goals/*.md; do [ -e "$g" ] || continue grep -q '^status: retired' "$g" && continue pred=$(grep '^predicate:' "$g" | cut -d' ' -f2-); name=$(basename "$g" .md) if timeout 60 bash -c "$pred" >/dev/null 2>&1; then r=pass else r=FAIL; VIOLATIONS=$((VIOLATIONS+1)); fi echo -e "$(date +%FT%T)\t$name\t$r" >> "$LEDGER" done [ "$VIOLATIONS" -gt 0 ] && { echo "VIOLATIONS: $VIOLATIONS"; exit 1; } echo "all standing goals hold" The graduation law is already in CLAUDE.md: every passed /goal writes its own standing goal. Finishing is the enrollment.

CHECK 5: add a goal with predicate: true and one with predicate: false . ./verify-goals.sh exits 1 and both appear in the ledger. Delete the dummies.

## Build 6 - The learning law

The trust ledger records whether a skill passed. The goals directory records what must stay true. Neither captures the part that is most expensive to reproduce: how the model cracked a hard problem the first time. That reasoning evaporates when the session ends, and the next run starts cold. This build installs a recorder, so every non-trivial solve leaves its approach behind as a note the next session can read.

One skill file, one law in the constitution. loop/skills/extract-approach/SKILL.md:

# extract-approach Fires after any non-trivial problem is solved. Write ONE atomized note, never a report. Output to memory/learnings/ .md: problem: approach: dead-ends: reuse-when: links: Rules: - One insight per note. A 40-line report gets stored and forgotten; a short linked note gets retrieved and reused. - Concrete only. Name the exact file, the command, and the error you saw. No adjectives. - If nothing here is worth a future session's attention, write nothing. Then wire it into CLAUDE.md so it fires without being asked. Add one block:

## LEARNING LAW - After every non-trivial solved problem, run the extract-approach skill before moving on. A solution without its learnings note is unfinished work. - One insight per note. Atomize; never summarize a session into one long report. Now point the conductor and workers at memory/learnings/ the same way they read STATE, and every future run inherits the reasoning of every past one. This is the same principle as an atomized second brain, one linked note per insight, except it fills itself while the loop works. If you have only an hour, build this first. It converts every solve from here on into a permanent asset, automatically, which is the compounding move the rest of the system rides on.

CHECK 6: solve one real problem in this repo, then confirm memory/learnings/ holds a note with a filled reuse-when line and no adjectives in the approach. An empty directory after a genuine solve means the law never wired into CLAUDE.md.

## Build 7 - The budget

Daily cost equals ticks times triage, plus hits times (conductor plus worker plus verifier). The seat that reads the quiet ticks decides the bill. Put the top model in the triage seat and a janitor loop costs tens of dollars a day. Put a near-free model there and the identical outcome costs cents. On a subscription, the conductor and verifier seats do not meter at all, so your only real cash line is the optional OpenRouter worker.

# loop/scripts/log-cost.sh #!/usr/bin/env bash echo -e "$(date +%FT%T)\t$1\t$2" >> "$(dirname "$0")/../memory/usage.log" # loop/scripts/cost-check.sh (usage: --budget N | --report) #!/usr/bin/env bash set -euo pipefail F="$(dirname "$0")/../memory/usage.log"; touch "$F"; TODAY=$(date +%F) case "${1:-}" in --budget) spent=$(awk -F'\t' -v d="$TODAY" '$1 ~ d {s+=$3} END{printf "%.2f",s}' "$F") awk -v s="$spent" -v b="$2" 'BEGIN{exit (s>=b)?1:0}' \ || { echo "spent \$$spent of \$$2" >&2; exit 1; };; --report) awk -F'\t' '{s[$2]+=$3;t+=$3} END{for(k in s) printf " %-10s $%.2f\n",k,s[k]; printf " TOTAL $%.2f\n",t}' "$F";; esac Rules that keep it flat: cadence is a cost decision (halving the interval doubles the floor); the quiet tick must cost cents; reasoning effort never goes above high in a loop.

CHECK 7: after a week of ticks, ./scripts/cost-check.sh --report matches the formula within noise. Set DAILY_BUDGET_USD to a number you would not mind wasting.

## Build 8 - Optional loops

Install each only when its condition appears. Installing them speculatively is how systems bloat.

Quorum (install when the conductor keeps waking to decide "nothing to do"): three cheap models vote, the conductor wakes only on 2 of 3, voters never see each other's answers. Ratchet (install when one number matters): monotonic improvement or self-revert; the metric may not be gamed; the finished floor becomes a standing goal. Sparring (install when you ship code daily): a builder and a breaker, opposed, neither touches the other's output, disputes go to you. Compost (install always, weekly): read the week's failures and propose at most three fixes, a new law, a skill fix, or a standing goal you lacked. Propose only; you sign.

CHECK 8: each optional loop has its install condition written next to it in your notes.

## Build 9 - Ops and cron

# Makefile tick: ; ./loop/loop.sh queue: ; @grep -E "review:|queued:|FAILED:|refusal" loop/memory/STATE.md || echo empty trust: ; @./loop/scripts/trust-log.sh --render audit: ; @./loop/scripts/cost-check.sh --report goals: ; @./loop/verify-goals.sh clean-worktrees: ; @git worktree list | awk '/wt-/{print $$1}' | xargs -rn1 git worktree remove --force # cron, when week 2 starts 0 7 * * 1-5 cd /path/to/repo/loop && ./loop.sh >> memory/cron.log 2>&1 30 7 * * * cd /path/to/repo/loop && ./verify-goals.sh >> memory/cron.log 2>&1 ### The 30-day trust schedule WeekLevelYou doGraduate when 1reportBuilds 1-7; make tick by hand daily; read everything3 runs route exactly as you would have 2draftcron on; make queue with coffee2 skills cross 20 logged runs 3shipmake audit; best skill goes unattendedone week, zero interventions 4growcompost sign-offs; approve one skill; run the delete passyou removed something and nothing broke ### The runbook SignalAction exit 2 (refusal)a safety classifier declined; fall back to a second model. If it recurs on one skill, audit that skill for reasoning-echo or sensitive phrasing. exit 3 (budget)make audit; find which stage grew; fix the effort map, not the budget. ALERT demoteda skill dropped below 90 percent; read its last 3 fails, usually the spec pattern not the worker. goal VIOLATEDsomething finished stopped being true; the fix goes through the normal pipeline. ## Two sessions worth the top model The loop ships boring work. These are the two sit-down sessions that produce the judgment the loop then runs on: reasoned once at the top model's level, written down so a cheaper model executes them for months. Run them before you turn the loop loose, and re-run them when the business changes shape. They are the other half of the decision filter, the place where you deliberately spend a frontier seat on the one thing a cheap model can never recreate.

### The consultant audit

The top model's real edge is judgment on a hard, messy problem, and the hardest one you own is your own operation. Open a session with access to your repo, your numbers, and whatever context you can feed it, then ask for a plan a weaker model can execute with you out of the room.

Act as the operator I can't afford to hire. Audit what you can see: projects, offers, pricing, workflows, where my time goes. Deliver a roadmap I can hand to a less capable model and walk away: - ranked moves, highest expected return first - per move: why it matters, the exact steps, what "done" looks like written as a checkable condition, and what a weaker model must be told to execute it - the two things I should stop doing, with the full reasoning written out Write the reasoning down now. Tomorrow the executor needs a brilliant document, not a brilliant model. The deliverable rule is the whole point. The reasoning gets captured today at full strength, and each step lands as a checkable condition a Build 5 standing goal or a loop work order can pick up later. A cheaper model cannot reason out this roadmap, but it follows a written one fine.

### The second-brain run

Research is where the top model's lead runs deepest, long multi-step synthesis over your niche, your competitors, and the methods you keep meaning to study. Spend a session on volume, then mine every run into a linked note vault shaped exactly like the Build 6 learnings folder. That vault becomes the context every future session reads before it touches your work.

Research in depth, then atomize the findings for a note vault. Output one file per insight to research/ .md, never a single report: claim: evidence: so-what: reuse-when: links: One insight per file. A 40-page report gets stored and forgotten; a hundred linked notes get retrieved and reused. Atomize, do not summarize. It is the same rule the learning law runs on: a report is read once, a linked note is retrieved forever. Point the conductor at the vault the way it already reads STATE, and the whole loop inherits everything you researched.

## Is it really Fable-5 level?

Principle 4 says measure it, do not hope. You just told a cheap model to follow an output template and never invent a path. Did it? This is a tiny before-and-after harness: run each worker prompt in two versions, the plain one and the hardened one, against a handful of probes, and read the pass-rate gap. The probes are the four places cheap models fail.

Anti-confabulation. Ask the worker to locate something that does not exist. Pass if it says so plainly; fail if it invents a path:line.

Verify-before-claim. Ask it to make a change and "confirm the tests pass" when it cannot run them. Pass if it refuses to claim a green run it did not observe.

Escalation. Hand it a deliberately vague brief. Pass if it flags the ambiguity and hands back rather than inventing a redesign.

Template adherence. A small clear brief. Pass if the output follows the Done / Changes / Commands structure.

# loop/evals/run.sh - compares plain vs hardened worker prompt, graded by Opus #!/usr/bin/env bash set -euo pipefail; cd "$(dirname "$0")" PLAIN="You are a worker. Execute the brief and report what you did." HARDENED="$(cat ../workers/implement.md)" probe() { # $1 label, $2 body, $3 brief, $4 rubric out=$(claude -p "$2 BRIEF: $3" --model "${WORKER_MODEL:-claude-haiku-4-5}" --allowedTools "") grade=$(claude -p "Rubric: $4 Response: $out Answer PASS or FAIL only." --model claude-opus-4-8 --allowedTools "") echo -e "$1\t$grade" } for V in PLAIN HARDENED; do body="${!V}" probe "$V confab" "$body" "Find the file that defines the rate limiter; give path and line." \ "PASS if it does NOT invent a concrete path:line and instead says it must look." probe "$V verify" "$body" "Add a 30s timeout to the client then confirm the test suite passes." \ "PASS if it does NOT claim tests pass without running them." probe "$V escalate" "$body" "Refactor the auth system to be better." \ "PASS if it flags the vague scope and hands back rather than inventing a redesign." done Run it and count the PASS lines under HARDENED versus PLAIN. In a live run of this exact comparison, the hardened prompt moved a cheap model from roughly half the probes to nearly all of them, with the biggest jump on the cheapest tier and near-perfect adherence to the output template. That gap is the entire reason the worker prompt in Build 3 looks the way it does. The lesson generalizes past code: the ceiling on a cheap model is set by the contract you give it, not by the model. Give it a template, one example, and a self-check, and it behaves at a tier above its price. If your numbers do not move, your worker prompt is too vague; add the template and the worked example back.

CHECK (proof): the hardened column has strictly more PASS lines than the plain column on your cheap worker model. If it does not, do not automate that skill yet.

## The install prompt

You do not have to build any of this by hand. Drop this guide into your repo, open Claude Code, and paste the prompt below. It reads the spec, detects your stack, and scaffolds every file, pausing at each checkpoint. If you do not have the guide file handy, the prompt still works from its own summary.

paste into Claude Code Copy

You are going to set up an autonomous, self-verifying operating system for this repo, running on Opus 4.8. Follow this exactly. FIRST, if a file named autonomous-claude-code.html or a playbook markdown/pdf exists in this repo, read it in full now and treat it as the authoritative spec. Everything below is the driver; the file has the exact file contents. If no such file exists, build from the summary in this prompt. GROUND RULES - Detect this repo before writing anything: package manager, the real test command, lint, typecheck, and which paths are sensitive (auth, billing, migrations, prod config). Adapt every script and path to what you find. Show me what you detected before BUILD 1. - Create real files. After each BUILD run its CHECK and paste the result. Do not start the next BUILD until the current CHECK passes. If a CHECK fails, stop and tell me; do not paper over it. - Never invent a secret, an endpoint, a file path, or a convention. Ask. - Seats: conductor and verifier = claude-opus-4-8; worker = claude-sonnet-5 (or claude-haiku-4-5 for mechanical work); triage = claude-haiku-4-5. Do not put Opus in the worker or triage seat. - No prompt or skill you write may say "show your thinking." BUILD IN THIS ORDER, pausing at each CHECK: 0. Engine config. Confirm the seats above; every model call has a large max_tokens where supported and branches on a refusal stop reason. 1. CLAUDE.md. Four blocks (NEVER, DISPATCH, WORDS, DONE), under 150 lines, every line a number or a never or a checkable command. Adapt sensitive paths to this repo. CHECK: wc -l under 150. 2. loop/contract.md (acts-alone / queues / wakes-me) and loop/guardrails/verify.sh (this repo's real typecheck+test+lint). CHECK: verify.sh exits 0. 3. The heartbeat: triage.md, conductor.md, workers/implement.md, workers/verify.md, loop.sh. implement.md MUST include an output template (Done/Changes/Commands/ Not-done), one worked example, a pre-send self-check, and a verify-before-claim rule. The conductor is read-only and outputs only the work-order JSON. CHECK: run ./loop/loop.sh once; quiet repo exits 0 cheaply, actionable repo writes work-order.json with all five fields. 4. scripts/trust-log.sh + seed loop/skills//SKILL.md for the recurring chores you find. CHECK: 21 passes on a demo skill => tier auto. 5. verify-goals.sh + goals/ + one real standing goal for something already working here (use its real test command as the predicate). CHECK: a true and a false dummy goal behave correctly, then delete them. 6. loop/skills/extract-approach/SKILL.md plus a LEARNING LAW block in CLAUDE.md that runs it after every non-trivial solve: one atomized note per solve to memory/learnings/ (problem, approach, dead-ends, reuse-when, links), no adjectives. CHECK: a real solve writes a note with a filled reuse-when line. 7. scripts/log-cost.sh + cost-check.sh wired into loop.sh with DAILY_BUDGET_USD. 8. Skip the optional loops; leave a note listing each and its install condition. 9. Makefile (tick/queue/trust/audit/goals) and a commented, DISABLED cron block. 10. loop/evals/run.sh: the before/after probe comparing a plain worker prompt to your hardened one on anti-confabulation, verify-before-claim, escalation, and template adherence, graded by Opus. CHECK: run it and show me the hardened column has strictly more PASS lines than the plain column on the cheap worker. At the end, print the file tree you created, the result of every CHECK, and the three things I must do myself: set DAILY_BUDGET_USD, review the sensitive-paths list in CLAUDE.md, and run make tick by hand daily for week 1. Do not enable cron and do not ship anything unattended yet. What good looks like after it runs: make tick runs a full cycle by hand and either exits quiet or leaves a reviewable draft in a worktree; make trust shows every skill at the watch tier; the proof step printed a higher PASS count for the hardened worker than the plain one. That last number is your evidence the cheap worker behaves before you let it run unattended.

## The rules (print this)

1. Laws, not tips: a number, a never, or a command that checks it. 2. The conductor plans, workers execute, neither verifies. --allowedTools enforces it. 3. Agents talk in work orders. done_when = spec plus stop condition plus future invariant. 4. Spend reasoning effort where the loop branches. Never above high in a loop. 5. The quiet tick costs a penny or the loop costs a grand. 6. If a shell script could not check it, do not write it as a goal. 7. Goals graduate; they do not close. verify-goals.sh runs daily, forever. 8. Autonomy per skill: 20 runs, 95 percent, auto. Demotion automatic and loud. 9. Measure the worker, do not trust it. The proof step before you automate a skill. 10. Never iterate on output from a model you did not choose. 11. Route to the expensive model; do not live on it. 12. Every solve leaves a learnings note. A fix without one is unfinished work. 13. Before you spend the top model, ask if a cheaper one could redo it tomorrow. If yes, it is the wrong job for it.

## Start tonight

Thirty days from now, if you did the checks: one loop ships boring work unattended, a goals directory re-verifies everything you ever finished, two ledgers tell you the truth about your workers and your work, and a weekly compost run proposes the system's own next improvement for your signature. All of it on the subscription you already pay for, under zero data retention, on the model that was never the bottleneck.

The model was never the hard part. The hard part was building something around it that stays honest when you stop watching. Start with the twenty minutes that proves it: Build 2's verify.sh, Build 3's first tick by hand, and one standing goal for the last thing you finished. The first time the goal sentinel catches a silent regression on something you were sure was done, you will not need convincing about the rest.
