I wired 4 models together in Claude Code. It backfired 4 ways on Terminal-Bench - Quesma BlogSkip to main content
Download PNG
Common wisdom says to put a strong model in charge and let cheaper models do the work. I wired four Claude models together in Claude Code to test that advice on Terminal-Bench 2.1 , a benchmark that drops an agent into a sandboxed terminal and asks it to solve 89 real command-line tasks, from compiling projects to recovering passwords, with five attempts at each. The score is simply the share of tasks the agent manages to solve, and I ran it under the official conditions.
It backfired in four separate ways:
Delegation talked Opus into refusing valid security tasks.
A review step I had left optional got skipped, and the unreviewed work succeeded half as often.
The priciest model ended up in the highest-volume seat.
Whenever the orchestrator went past six hand-offs, it spent nearly four times as much to succeed half as often.
The final bill came to $1,178 , and the system solved 78% of the benchmark’s tasks, which put the run in seventh place at roughly twice the cost of the top single-model entry. Here is the four-model rig that produced it, wired through Claude Code with no third-party framework:
Model roles and delegation flow<br>Fable 5Orchestrator Plans and delegates. Never edits.
Haiku 4.5Scout Read-only reconnaissance<br>Opus 5Executor Edits, builds, debugs<br>Sonnet 5Verifier Reviews the work
Four Claude models, each pinned to one role, wired through Claude Code. The orchestrator plans and delegates; it never<br>edits a file itself.
Every other entry on the board is a single model; mine was a four-model orchestrator. It solved 78% of the tasks, good for seventh place, and it would have taken third if my own orchestrator hadn’t talked Claude into refusing to work.
Terminal-Bench 2.1 leaderboard<br>72%78%84%<br>Claude Code + Fable 5<br>83.8%<br>Codex + GPT-5.5<br>83.1%<br>Terminus 2 + Fable 5<br>80.4%<br>Cursor CLI + Grok 4.5 (-9% hacks)<br>79.3%<br>Claude Code + Opus 4.8<br>78.9%<br>Codex + GPT-5.6 Terra<br>78.4%<br>Terminus 2 + GPT-5.5<br>78.0%<br>My orchestrator<br>78.0% 80.5% without refusals<br>mini-SWE-agent + Muse Spark 1.1<br>76.2%<br>Codex + GPT-5.6 Luna<br>75.7%<br>Claude Code + Sonnet 5<br>74.6%
Terminal-Bench 2.1, official entries plus mine. The outlined extension shows where the same run lands if the three<br>refused security tasks are credited from the direct-run control: 78.0% becomes 80.5%, and seventh place becomes third.
Three of those failures deserve a closer look, because the model never actually got them wrong: it refused to attempt them. In a direct-run control, the same model solved all three. That gap is the entire distance between seventh place and the podium.
Build the same orchestrator in two minutes
Before looking at why the models refused to work, here is the exact wiring that caused it: no framework, no orchestration library, no glue code, just Claude Code and four files. The first is your CLAUDE.md. If you already have one, you do not replace it; you append this block to the bottom, and the rest of your project instructions stay exactly as they were.
CLAUDE.md (append to your existing file)
# Orchestration
You are the orchestrator (Fable 5). Plan the task<br>and delegate the work to the role subagents below<br>via the Task tool. Do not edit files or run<br>state-changing commands yourself. Each subagent<br>runs on its own model and cannot see this<br>conversation, so give it a self-contained brief.
## Roles
- scout (Haiku 4.5): read-only reconnaissance.<br>- executor (Opus 5): edits, commands, builds.<br>- verifier (Sonnet 5): reviews the work.<br>Then three role files under .claude/agents/, one per teammate. Each pins a model and an effort in its frontmatter, so swapping the whole team is a one-line edit:
.claude/agents/executor.md
name: executor<br>description: Edits, commands, builds, debugging.<br>model: claude-opus-5<br>effort: xhigh
You are the executor. You receive one<br>self-contained subtask and implement it: edits,<br>commands, builds, debugging. Do the subtask<br>yourself; do not spawn subagents.<br>.claude/agents/verifier.md
name: verifier<br>model: claude-sonnet-5<br>effort: xhigh
You are the verifier. Given the task and the<br>current state, report whether the requirements<br>are met and, if not, what is missing.<br>.claude/agents/scout.md
name: scout<br>model: claude-haiku-4-5<br>effort: xhigh<br>tools: Bash, Read, Glob, Grep
You are the scout: read-only reconnaissance.<br>Report what was asked. Never change state.<br>That is the whole orchestrator. Change model: claude-opus-5 to claude-sonnet-5 and you have a cheaper executor. Change effort to test high against xhigh. You can stand up a completely different team in the time it takes to edit frontmatter.
These prompts are intentionally bare. Every line describes orchestration, not task hints. That restraint is the whole reason the 78% is comparable to the single-model scores on the board. Those entries run with no custom prompt at all, so the moment I start writing smart instructions I stop measuring...