Big model at low effort beats small model at max
When a task needs real intelligence but also needs to be fast, turn the effort dial down on the bigger model instead of switching to a smaller model at max effort.
The official documentation describes the mechanism this relies on. The technique itself is community practice.
What this costs you if it is wrong
Cost, not safety. The demo measured output tokens and wall-clock, not dollars: a big model's tokens cost several times a small model's, so moving bulk work from a small model at high effort to a big model at low effort can multiply spend while the token counter looks flat. The docs' own cost guidance recommends the opposite default (reserve Opus for complex reasoning). The result is also tied to a specific model pair, Opus 4.7 versus Haiku 4.5, on one toy prompt.
You have a task that needs actual judgement — a refactor across three files, a bug whose cause you cannot guess — and you are sitting there watching the spinner. The reflex is to reach for a cheaper, faster model. There is a second dial that does the same job, and the claim here is that it is usually the better one to turn.
Claude Code gives you two independent knobs: which model answers, and how much reasoning it spends per turn. They are set separately, with /model and /effort, and most people only ever move the first.
The two ways to spend less
| Route | What you give up | What you keep |
|---|---|---|
Smaller model, high effort (haiku at max) | Raw capability on anything needing judgement | Very fast time to first token; low price per token |
Bigger model, low effort (opus at low) | Depth of reasoning per step | The bigger model's judgement, code sense, and instruction-following |
The claim, from Anthropic PM Matt Bleifer's Code w/ Claude 2026 talk "The thinking lever": on a task that needs intelligence and needs to be quick, drop the effort on the big model rather than dropping to a small model at max. In his live demo the big model at low effort spent roughly the same number of output tokens as the small model at max, took only slightly longer, and produced a visibly better result.
He splits the two on which latency you care about:
- Small model — fast time to first token, and bulk work that is not intelligence-sensitive: classification, extraction, basic summarising, mechanical edits at volume.
- Big model at low effort — fast time to last token on anything where the answer has to be right.
What the docs actually back
The docs never make this trade. What they do document is the mechanism underneath it, and one line in particular is why the comparison is not absurd:
The effort scale is calibrated per model, so the same level name does not represent the same underlying value across models. — model configuration
low on Opus is not the same amount of thinking as low on Haiku, and it is not comparable to max on Haiku either. The ladder is relative to the model you are on, which is exactly what makes "big model, low effort" a real point in the space rather than a contradiction.
The same page's effort table also supports the other half of his framing:
low— "Reserve for short, scoped, latency-sensitive tasks that are not intelligence-sensitive"max— "Can improve performance on demanding tasks but may show diminishing returns and is prone to overthinking. Test before adopting broadly"
That last row is the docs agreeing that max is often not where the value is. If you are running a small model at max to compensate for the model, you are paying for the ladder's least reliable rung.
Trying it
Set the model, then the effort — they are separate commands:
/model opus
/effort lowWhere that level gets saved matters if you switch models often. Run /effort interactively on your own machine and Claude Code saves the level for the active model under modelSettings in your user settings, so the big model can sit at low while everything else keeps its own rung. That per-model key "Requires Claude Code v2.1.251 or later"; the effortLevel entry records what came before it — "Before v2.1.251, /effort wrote this key" — which meant one shared default across every model rather than a level remembered per model.
Or in one launch, which is the form you want on any model where Claude Code holds the model's own default effort until you change it once:
claude --model opus --effort lowThe session header shows the active level next to the model name ("with low effort"), so you can confirm which rung you are actually on instead of assuming.
What is unverified here
Be clear-eyed about how thin the evidence is:
- Nobody in this project has run it. The result comes from one live demo of one toy prompt (a traffic simulation) in a conference talk. It is not a benchmark, and no numbers were published alongside it.
- The source is a community machine transcript of that talk, with speaker labels assigned by transcription software, not by a human.
- The model generation named is already old. The demo compared Opus 4.7 against Haiku 4.5. Effort is calibrated per model, so the gap on today's models could be wider, narrower, or reversed.
- "Time to first token vs time to last token" is his framing, not documented terminology.
- The token-count claim is not a cost claim, and the talk did not make it one.
What would settle it for your workload: run the same prompt both ways non-interactively and compare the reported usage and cost, then judge the two outputs yourself.
#!/usr/bin/env bash
set -euo pipefail
P='Refactor the error handling in src/ to a single result type, and explain the tradeoff.'
for cfg in "opus:low" "haiku:max"; do
m="${cfg%%:*}"; e="${cfg##*:}"
start=$(date +%s)
claude -p "$P" --model "$m" --effort "$e" --output-format json > "/tmp/eff-$m-$e.json"
echo "$m/$e $(( $(date +%s) - start ))s"
jq '{cost: .total_cost_usd, usage: .usage}' "/tmp/eff-$m-$e.json"
doneRun it on a task from your own repo, not a toy one, and read both answers before looking at the numbers. The interesting question is not whether the token counts match — it is whether the cheaper-model answer was one you would have shipped.
Checkpoint
- Which latency does your task actually care about: the first token appearing, or the finished answer?
Show answerAnswer
That one is yours to decide per task, and the split is the whole point. Work that is not intelligence-sensitive — classification, extraction, basic summarising, mechanical edits at volume — wants a fast time to first token, which is small-model territory. Work where the answer has to be right wants a fast time to last token, and the tip's claim is that you get there by dropping effort on the big model rather than dropping to a small one. Both phrases are the speaker's framing, not documented terminology.
loweffort on a big model andloweffort on a small model — are those the same amount of thinking, and how do you know?Show answerAnswer
No, and you know it from the docs rather than from the demo: model configuration says "The effort scale is calibrated per model, so the same level name does not represent the same underlying value across models." The ladder is relative to whichever model you are on, which is what makes "big model, low effort" a real point in the space instead of a contradiction — and it means
lowon a big model is not comparable tomaxon a small one either.- If both routes spent the same number of output tokens, did they cost the same?
Show answerAnswer
Nowhere near it. A big model's tokens cost several times a small model's, so equal token counts are not equal spend — the demo behind this tip measured output tokens and wall-clock, never dollars. That is why the cost docs push the other way ("Reserve Opus for complex architectural decisions or multi-step reasoning"), and why moving bulk work onto a big model at
lowcan multiply the bill while the token counter barely moves. Settle it for your workload by running the same prompt both ways headless with--output-format jsonand comparing the reportedtotal_cost_usd.