| name | model-routing |
| description | Split the Plan/Act/Verify loop across three model tiers — frontier planner, cheap executor, frontier judge — via env vars read by run.sh. |
| when_to_use | when a long unattended loop is being tuned for cost, or when you want a stronger judge than executor. |
Model routing
run.sh reads three optional env vars and threads them into each claude invocation as --model. All default to unset, in which case the CLI default model is used (behaviour unchanged from a bare run).
The three knobs
CLAUDE_PLANNER_MODEL — reserved for /spec workflows that draft PROMPT.md up front. Not read by the current run.sh loop, but claimed here so future planner passes bind to it.
CLAUDE_EXECUTOR_MODEL — used on the "do the next step" call. This is the workhorse; it runs on every iteration. Pick something cheap and fast.
CLAUDE_JUDGE_MODEL — used on the /verify call. Runs once per iteration to adversarially check the executor's diff. Pick a frontier model — a weak judge is worse than no judge.
Recommended shape
planner = frontier (Opus-class, runs once at /spec time)
executor = cheap-fast (Haiku-class, runs every turn)
judge = frontier (Opus-class, runs every turn but on a small diff)
Example
export CLAUDE_PLANNER_MODEL="claude-opus-4-7"
export CLAUDE_EXECUTOR_MODEL="claude-haiku-4-7"
export CLAUDE_JUDGE_MODEL="claude-opus-4-7"
./run.sh
The Elvis Executor+Judge finding
A cheap executor paired with a frontier judge outperforms a frontier executor with no judge on long loops. The judge catches the executor's premature-victory claims that a mono-model run rationalises away when it runs out of context. Cost stays low because the judge only sees the diff, not the working history.