My daily driver is Fable 5. It is the smartest model I have ever used, and the most expensive. And yet, on a normal working day, most of the tokens I burn don’t go through it. They go through OpenAI models running in a separate CLI, doing the heavy lifting while Fable supervises.
That started as a cost optimization. Then I noticed the work was coming out better. A different model catches things my daily driver walks right past, and it makes different mistakes, which are far easier to spot than the same mistakes twice. That is the bet this post is about: mixing labs beats going all-in on one, even if that one is the best. First the reasoning, then the actual config, because the philosophy is worthless if switching models costs you any friction.
Model capability isn’t a single number. A model that crushes competitive programming can fumble a CSS layout. Researchers call this the jagged frontier: the boundary of what a model can do is not a smooth circle but a coastline, full of peaks and inlets that don’t follow intuition. The two shapes are my own scoring of the models I use every day, and the honest part is how little they differ. Small edges, in different places.
You can watch it play out in public: Tech Twitter argues endlessly about whether Claude or Codex is better at frontend, and nobody is citing benchmarks. They are reacting to taste, and the same divergence runs through module structure, naming, error handling, tests. Frontend is just where it is visible enough to fight about.
The important part: every model’s frontier is jagged in a different place, and not by accident. The training data differs, because each lab has its own corpus and pipelines and choices. The post-training differs even more: months of work where thousands of small human judgments about “good behavior” get beaten into the weights. Anthropic’s judgments are not OpenAI’s judgments. The models don’t just know different things. They have different instincts.
That’s why cross-lab is the strongest version of the idea. Same-lab models are siblings. Different-lab models share almost nothing. What you want is model diversity; lab boundaries are just where the diversity is deepest.
What team science already knew
There is a name for why this helps: cognitive diversity. Teams of different thinkers beat teams of similar experts, because their blind spots don’t overlap. Ensembles in machine learning win the same way: the gain comes from the models being uncorrelated, not from them being individually great.
Two Claude instances reviewing each other share instincts and blind spots. A GPT model reviewing Claude’s work brings an actually independent perspective. When they agree, the consensus means something. When they disagree, I’ve learned where to look.
That’s the theory. For my own workflows it’s still a hypothesis: no controlled eval, just many hours of driving it, a pile of bugs one model missed and the other caught, and enough conviction to build my whole setup around it.
Credit where it's due
The idea that model diversity itself is the point came from Atin Woodard, who I trade agent-setup notes with. Atin also builds c11, a terminal multiplexer made for running a room full of agents in parallel. I use it every day and it gets its own writeup soon. The shape of my setup, one orchestrator delegating through thin wrappers, borrows from how Theo Browne runs his. What you just read is my version of their ideas.
scored from daily use, not benchmarks
covers = share of the frontier the shape encloses
~/.claude
CLAUDE.md
1## Picking the right models for workflows and subagents
2Rankings, higher = better.
3
4Cost reflects what I actually pay, not list price.
5Intelligence is how hard a problem you can hand the model unsupervised.
6Taste covers UI/UX, code quality, API design, and copy.
7
8| model | cost | intelligence | taste |
9| codex | 9 | 7 | 5 |
10| sonnet-5 | 5 | 5 | 7 |
11| opus-4.8 | 4 | 7 | 8 |
12| opus-5 | 4 | 8 | 8 |
13| fable-5 | 2 | 9 | 9 |
14
15How to apply:
16- These are defaults, not limits. If a cheaper model's output doesn't
17 meet the bar, rerun with a smarter model without asking.
18 Judge the output, not the price tag.
19- Bulk/mechanical work (clear-spec implementation, migration): codex.
21- Reviews: always a different model than the author.
22- If computer use is helpful for completing or verifying work,
23 shell out to codex for it.
24- Mechanics: codex models are only reachable through the Codex CLI
25 (codex exec / codex review). Use the codex-implementation,
26 codex-review, and codex-computer-use skills; for work they don't
27 cover, run codex exec -s read-only with a self-contained prompt.
Expensive judgment, cheap muscle
Here’s what makes this an easy bet: the setup pays for itself even if the diversity thesis turns out to be worth nothing.
Fable is spectacular and priced accordingly. Running it on bulk implementation work, the kind where the spec is clear and the model mostly needs to grind through files, is like hiring a principal engineer to rename variables. The work gets done. It’s just a waste of the thing you’re paying for, which is judgment.
So an ordinary task runs the way the two terminals do. I type what I want into Fable. It decides the work is bounded, writes a self-contained prompt, and hands it to a model from another lab with write access to the working tree. That model burns the tokens. Then Fable reads the diff that comes back and decides whether the patch survives.
None of this works if delegation has friction. If handing a task to another model means opening a second terminal, writing a fresh prompt, and copy-pasting results back, you’ll stop doing it within a week. The entire trick is making the handoff cost nothing. In my setup, delegation is something Fable does mid-conversation without me thinking about it.
That is the shape: expensive judgment, cheap muscle. Fable scopes the task, delegates, inspects what comes back, and takes the final review. The other models burn the tokens in the middle. Everything after this is the config that makes the handoff free, and all of it lives in one folder.
The subscription angle
If you run on consumer plans rather than API credits, codex is very attractive right now: the plans are cheaper than Anthropic’s, and OpenAI has been generous with usage resets on top. I max out three Claude Max subscriptions every cycle and almost never exhaust my single, cheaper Codex plan. That will surely change. But today, the heavy-lifting tier of my setup is close to free.
scored from daily use, not benchmarks
covers = share of the frontier the shape encloses
fable 5 · toolcallers
>add the CSV export button to the reports page
⏺Bounded, and the spec is clear. Codex work by the rubric.
⏺Skill(codex-implementation)
⎿
baseline pinned · 0 uncommitted files
codex exec -s workspace-write · no commits
✳ Delegating… (waiting on the report)
>
codex exec · gpt-5.6-terra
>Implement the CSV export button.
⏺Update(src/reports/ExportButton.tsx)
⎿
1 addition
19+<Button onClick={exportCsv}>Export</Button>
⏺Bash(npm test -- reports)
⎿
PASS 12 tests, 0 failures
⏺Report written. 1 file changed.
>
~/.claude
CLAUDE.md
1## Picking the right models for workflows and subagents
2Rankings, higher = better.
3
4Cost reflects what I actually pay, not list price.
5Intelligence is how hard a problem you can hand the model unsupervised.
6Taste covers UI/UX, code quality, API design, and copy.
7
8| model | cost | intelligence | taste |
9| codex | 9 | 7 | 5 |
10| sonnet-5 | 5 | 5 | 7 |
11| opus-4.8 | 4 | 7 | 8 |
12| opus-5 | 4 | 8 | 8 |
13| fable-5 | 2 | 9 | 9 |
14
15How to apply:
16- These are defaults, not limits. If a cheaper model's output doesn't
17 meet the bar, rerun with a smarter model without asking.
18 Judge the output, not the price tag.
19- Bulk/mechanical work (clear-spec implementation, migration): codex.
21- Reviews: always a different model than the author.
22- If computer use is helpful for completing or verifying work,
23 shell out to codex for it.
24- Mechanics: codex models are only reachable through the Codex CLI
25 (codex exec / codex review). Use the codex-implementation,
26 codex-review, and codex-computer-use skills; for work they don't
27 cover, run codex exec -s read-only with a self-contained prompt.
A rubric every session reads
So I split the work the way you’d staff a team. In my global CLAUDE.md there is a small table that every session reads, ranking the models I use on the three axes I actually care about.
A snapshot, not scripture. I have already updated my real table since I first wrote it, because the labs keep shipping, and by the time you read this it will be stale again. That’s fine. The numbers rot; the structure doesn’t. There is always a spread between what models cost and what they’re good at, and the spread is the opportunity.
The rules underneath the table matter more than the numbers. Bulk and mechanical work goes to the cheapest capable model. Anything user-facing needs a taste score of 7 or higher. Reviews always go to a different model than the one that wrote the code. And the defaults are not limits: the orchestrator has standing permission to escalate to a smarter model when the cheap output doesn’t meet the bar, without asking me. Judge the output, not the price tag.
That last rule does a lot of work. It means I never have to choose between saving money and shipping quality. The cheap model gets the first attempt. If it’s good, I saved tokens on my expensive model’s budget. If it’s not, Fable redoes it and I’ve lost almost nothing, because the first attempt was nearly free.
scored from daily use, not benchmarks
covers = share of the frontier the shape encloses
~/.claude
CLAUDE.md
1## Picking the right models for workflows and subagents
2Rankings, higher = better.
3
4Cost reflects what I actually pay, not list price.
5Intelligence is how hard a problem you can hand the model unsupervised.
6Taste covers UI/UX, code quality, API design, and copy.
7
8| model | cost | intelligence | taste |
9| codex | 9 | 7 | 5 |
10| sonnet-5 | 5 | 5 | 7 |
11| opus-4.8 | 4 | 7 | 8 |
12| opus-5 | 4 | 8 | 8 |
13| fable-5 | 2 | 9 | 9 |
14
15How to apply:
16- These are defaults, not limits. If a cheaper model's output doesn't
17 meet the bar, rerun with a smarter model without asking.
18 Judge the output, not the price tag.
19- Bulk/mechanical work (clear-spec implementation, migration): codex.
21- Reviews: always a different model than the author.
22- If computer use is helpful for completing or verifying work,
23 shell out to codex for it.
24- Mechanics: codex models are only reachable through the Codex CLI
25 (codex exec / codex review). Use the codex-implementation,
26 codex-review, and codex-computer-use skills; for work they don't
27 cover, run codex exec -s read-only with a self-contained prompt.
The workhorse
The rubric decides where work goes. Three skills are how it gets there, and they sit in the same folder as the rubric. I wrote about that machinery in the configuration system post; this is the same machinery pointed at a new problem.
None of it is secret sauce, so all three files are here verbatim, exactly as my agent loads them. Copy each into its own folder under ~/.claude/skills/ as a SKILL.md and Claude Code picks them up automatically.
codex-implementation is the workhorse. When a task is bounded and the spec is clear, Claude writes a self-contained prompt, pins the repo state with git status, and runs the Codex CLI with write access to the working tree. Codex implements, writes a report, and exits.
Then the important part: Claude diffs the result against the pinned baseline, inspects every change, and runs verification itself. Codex is not allowed to commit, push, or touch config. It produces a patch; my daily driver decides whether the patch survives. That asymmetry is the whole safety story. The cheap model can be wrong as often as it likes, because nothing it writes reaches main without the expensive one reading it first.
scored from daily use, not benchmarks
covers = share of the frontier the shape encloses
~/.claude
skills/codex-implementation/SKILL.md
1---
2name: codex-implementation
3description: Ask Codex CLI (OpenAI's coding agent; model comes from ~/.codex/config.toml, currently the gpt-5.6 family — Sol/Terra/Luna) to implement scoped code changes in the current repository, then have Claude inspect the resulting diff and verification. This is how OpenAI models are invoked for implementation work. Use when the user asks Claude to delegate implementation to Codex, gpt, or an OpenAI model by name, when the model-selection rubric routes the work to codex, or when a bounded task would benefit from another coding agent producing a patch.
4---
5
6# Codex Implementation
7
8Use Codex as a separate implementation agent for bounded code changes. Claude remains responsible for scoping the task, reviewing the diff, running or checking verification, and explaining the final result.
9
10Use this when the user asks for Codex or delegation, or when a bounded task would benefit from a parallel implementation agent producing a patch. Do not let Codex commit, push, deploy, or edit global config unless the user explicitly asked for that.
11
12## Workflow
13
141. Create a temporary artifact directory for Codex's report.
152. Pin the current state with `git status --short > "$ARTIFACT_DIR/baseline.txt"` so Codex's changes can be separated from user changes afterwards.
163. Define the implementation scope: files or behavior to change, files to avoid, constraints, and verification commands.
174. Run `codex exec` with repo write access.
185. After Codex exits, compare `git status --short` against the baseline and inspect `git diff`.
196. Run the cheapest reliable verification yourself when practical.
207. Report what Codex changed, what Claude verified, and any remaining risks.
29git status --short > "$ARTIFACT_DIR/baseline.txt"
30
31# Write a self-contained prompt to $PROMPT, then run:
32codex exec \
33 -C "$PWD" \
34 --add-dir "$ARTIFACT_DIR" \
35 -s workspace-write \
36 -o "$REPORT" \
37 - < "$PROMPT"
38```
39
40Codex runs often exceed Bash's default timeout: pass an explicit `timeout` (up to
41600000 ms), or for longer runs use `run_in_background: true` and read `$REPORT` once the
42command exits.
43
44Use `-s workspace-write` by default. Use `-s danger-full-access` only when the implementation needs access outside the repo, app launch automation, simulator work, package manager global state, or other machine-level operations.
45
46## Prompt Requirements
47
48Tell Codex:
49
50- The exact implementation goal and acceptance criteria.
51- The repo path and current branch context if relevant
52- Which existing patterns, files or tests to inspect first.
53- Files or behavior that must not be changed.
54- That it must preserve unrelated user changes.
55- That it must not commit, push, deploy or edit global config.
56- Which verification commands to run, or to explain why they were skipped.
57- To write a concise final report which files changed, verification, and unresolved questions.
58
59Keep the task bounded. If the requested work bundles several substantial changes, split it into separate Codex runs or ask the user to choose the scope first.
70- Add keyboard navigation to the command palette.
71
72Acceptance criteria:
73- ArrowUp and ArrowDown move the highlighted item.
74- Enter selects the highlighted item.
75- Escape closes the palette.
76- Existing mouse behavior keeps working.
77
78Constraints:
79- Preserve unrelated user changes.
80- Do not commit, push, deploy, or edit global config.
81- Follow existing component and test patterns.
82
83Verification
84- Run the focused component tests if available.
85- Otherwise run the nearest relevant typecheck or test command and explain the choice.
86
87Report:
88- Files changed
89- Behavioral summary
90- Verification run and result
91- Anything blocked or uncertain
92```
93
94## Review After Codex
95
96Always inspect Codex's diff before telling the user the work is done. Revert only Codex-created mistakes when you are sure they are not user changes. If Codex leaves the repo in a worse state or changes unrelated files, stop and report the issue with the diff summary.
97
98If `codex` is not installed, the command fails, or rate limits have been hit, report the error and offer to implement the change directly instead.
No model grades its own homework
codex-review is the independent second opinion. Claude finishes a piece of work, then hands the diff to a model from a different lab with fresh eyes and no memory of writing it. This is where the diversity thesis earns its keep most visibly: the review comes from a model that does not share the author’s instincts.
Author bias is real for models just like it is for people. You don’t grade your own homework, and in my setup, no model grades its own homework either.
Most of the file is about stance rather than commands. It tells Claude to treat the reviewer’s output as evidence and not authority, to check each finding against the code before repeating it, and to separate confirmed issues from suggestions it did not verify. A review you forward unread is not a second opinion. It is your judgment, outsourced.
The third skill got its own post
codex-computer-useis the same idea with hands. When “does it work” means clicking through a flow, launching a simulator, or taking screenshots, it hands the job to a model that drives the machine and reports back with evidence, so nobody has to sit there clicking. Its SKILL.md is still in the tree on the right if you want to peek at it. But that one turned out to be the skill I recommend first and the one people ask about most, so it has its own writeup: stop being the one who clicks around.
The three files encode the workflow so I don’t have to. Each one tells Claude how to scope the prompt, which sandbox level to use, where the report lands, and what to verify when the run comes back. From my side, the entire experience is typing what I want. The routing happens underneath.
One practical note. The model picker in these tools only accepts models from its own lab, for obvious reasons. So inside larger workflows, cross-lab delegation runs through a thin wrapper: a minimal Claude agent whose only job is to write the Codex prompt, run the CLI, and return the report. I label those agents with a codex: prefix so the workflow view tells me which brain actually did the work. Small thing, but when six agents are running in parallel you want the org chart to be honest.
Is this provably better than a monoculture? I said it upfront: it’s a bet. But again and again the cross-lab review catches something the author model was structurally unable to see, because seeing it would have required not being the model that wrote it.
Different brains, cheap handoffs, no model grading its own homework. That’s the setup. The configuration system makes it nearly free to try, and my honest expectation is that once you’ve watched a rival model catch your favorite model’s bug, you won’t go back to a monoculture either.
scored from daily use, not benchmarks
covers = share of the frontier the shape encloses
~/.claude
skills/codex-review/SKILL.md
1---
2name: codex-review
3description: >-
4 Ask Codex CLI for an independent code review of uncommitted changes, branch diff, a commit,
5 or a specific implementation. Runs the review_model from ~/.codex/config.toml (currently
6 gpt-5.6-sol). This is how OpenAI models are invoked for review work. Use when the user asks
7 Claude to have Codex, gpt, or an OpenAI model review work, when the model-selection rubric
8 calls for an independent codex review perspective, or when Codex should audit a diff, find
9 bugs or regressions, or compare Claude's implementation against requirements. For a review
10 by Claude itself, use the normal review process instead.
11---
12
13# Codex review
14
15Use Codex as an independent reviewer when the user wants a second-pass review or when a
16change is broad enough that another agent's perspective is useful.
17
18Prefer Claude's normal review process for small local checks. Do not delegate review just to
19avoid reading the code yourself. Treat Codex's output as evidence, not authority.
20
21## Workflow
22
231. Identify the review target: uncommitted changes, base branch, commit SHA, PR checkout, or
24specific files.
252. Create a temporary artifact directory for the Codex report.
263. Run `codex review` with a focused review prompt.
274. Read Codex's report and verify important claims against the code before presenting them.
28
29Use one of these command shapes. Note: the target-selector flags (`--uncommitted`,
30`--base`, `--commit`) reject a custom prompt (verified on codex-cli 0.142.5, despite the
31`[OPTIONS] [PROMPT]` usage line) — pick the shape by target and whether you need a custom
54If a selector flag errors with "cannot be used with '[PROMPT]'", the installed CLI has this
55restriction — use the shapes above rather than retrying the combination. A later CLI version
56may restore flag+prompt composition; re-test before simplifying this section.
57
58Codex reviews often exceed Bash's default timeout: pass an explicit `timeout` (up to
59600000 ms), or for longer runs use `run_in_background: true` and read `$REPORT` once the
60command exits.
61
62## Review Prompt
63
64Ask Codex to use a code-review stance:
65
66```text
67Review these changes for bugs, regressions, missing tests, security issues and requirement mismatches.
68
69Prioritize findings over summary. For each finding include:
70- severity
71- file and line reference
72- concrete failure mode
73- suggested fix direction
74
75Do not edit files. If there are no substantive findings, say so and name any residual test gaps.
76```
77
78Add task-specific context when useful: requirements, risky areas, expected behavior, relevant tests, or files Claude is unsure about.
79
80## Report back
81Before relaying a Codex finding, inspect the cited code or diff enough to decide whether the finding is real. In the user-facing response, separate confirmed issues from Codex suggestions you did not verify.
82
83If Codex finds nothing, say that clearly and mention what review target it inspected.
84
85If `codex` is not installed, the command fails, or rate-limits have been exceeded, report the error and offer to review the changes directly instead.