---
name: archive228/model-routing
source: https://app.decimal.ai/s/archive228-model-routing@1/SKILL.md
source_sha256: 3b8f38cbad40
---

# 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

```bash
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.