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/specworkflows that draft PROMPT.md up front. Not read by the currentrun.shloop, 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/verifycall. 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.