Claude Code Model vs Effort: Knowing More vs Trying Harder
Anthropic's Lydia Hallie explains Claude Code model vs effort: weights are capability, effort is thoroughness. Fable specialist, Opus expert, Sonnet generalist — when to change each.
On July 7–8, 2026, Lydia Hallie (member of technical staff on the Claude Code team) published Choosing a Claude model and effort level in Claude Code — Anthropic's clearest official answer to a question every agentic developer asks: should I switch to Opus, or just crank effort?
The @ClaudeDevs post on X crossed 373K views with a simple headline: knowing more vs. trying harder. Model swaps which frozen weights answer your request. Effort controls how much work those weights do — files read, tests run, verification, tool loops — before Claude checks back in.
This is not the same as "thinking longer." It is the Claude Code team's decision tree for when Fable 5 beats Sonnet, when to leave defaults alone, and why your first fix is almost always context, not settings.
Update — July 9, 2026: Same day Anthropic shipped Claude Reflect — a usage dashboard with 4D AI Fluency scores and quiet hours for chat users with Memory on. Reflect is about how much and how you delegate; model vs effort is about capability and thoroughness per task.
Default rule: Use each model's default effort for most tasks. Tune effort as a general preference, not task-by-task.
Opus 4.8 note: Anthropic reports default effort on Opus 4.8 matches ~same token spend as Opus 4.7 default with better results on the same work.
Model = what Claude knows (frozen weights)
When you press enter in Claude Code, everything packs into one API request: system prompt, tools, CLAUDE.md, history, @-mentioned files. On the server, text tokenizes to integer IDs — the model never sees raw strings.
The model predicts one token at a time, re-running the full weight stack each step. A 200-token reply is 200 forward passes. Those weights are read-only at inference — your prompt steers probabilities; it does not teach the model new facts permanently.
Hallie's key points:
General programming knowledge lives in weights from training
Your codebase in context is steering — works well, but ephemeral per request
Libraries post-training cutoff are not in weights — docs in context help for one turn only
Hallucinated APIs are plausible token sequences from weights, not failed database lookups
Changing model = swapping which weight set handles the loop — and which per-token price you pay
Model does not cap output length. Same prompt can produce very different token counts depending on how much work Claude chooses — which is what effort shapes.
Effort = how hard Claude tries (behavior in weights)
Effort is sent inside the request alongside your prompt. Training baked in how to behave at each level. It sets how thorough and certain Claude must be before considering a task done — weighed on every turn.
Output token categories (all billed the same):
Category
What it is
Thinking
Reasoning streamed before/between actions
Tool calls
Structured Read / Edit / Bash blocks Claude Code executes
Text to you
Plans, progress, summaries
Higher effort → more of all three before check-in. Lower effort → Claude asks you rather than spending tokens exploring.
Anthropic's illustrative comparison: same prompt, high vs lower effort ≈ 7× token difference to reach higher confidence — not because thinking ran 7× longer alone, but because more actions happened.
Plans adapt mid-run
High effort often starts with a plan (e.g., three debugging hypotheses). When step 1 finds the bug, Claude revises the task list and skips unnecessary steps — you see this in Claude Code when todos update mid-session. High effort makes double-checking more likely, but Anthropic says the team trains against artificial overthinking on simple tasks.
Effort is not a hard token cap
The only hard ceiling is max_tokens (API blunt instrument). Softer limits: task budgets, "keep it brief" in prompt — guidance the model follows as it approaches limits. Effort shapes willingness to work, not a wall.
Reads everything, runs tests, thorough on your code
Opus low effort: five minutes with an expert — pattern recognition without reading every file.
Sonnet high effort: generalist with the afternoon — exhaustive on-repo diligence.
Fable: finishes jobs Opus and Sonnet cannot complete at any effort in Anthropic's testing — at highest per-token cost. Save for genuine stretch tasks.
None is universally "better." Model ≈ capable. Effort ≈ thorough.
Cost curves — when bigger model saves money
On routine work at the same effort, both models succeed — larger model adds extra verification tokens at higher per-token price. Drop to Sonnet for long routine stretches.
On hard multi-step work, smaller model grinds toward its capability ceiling — many iterations, high total tokens — while larger model hits quality in fewer steps. Total cost per task can favor the larger model even at higher unit price. More importantly: only the larger model may finish at all.
Anthropic's prescribed sequence when output disappoints:
Context — Is the prompt specific? Right MCP servers and skills? Good CLAUDE.md? Scoped task?
Effort — Did Claude skip steps despite having context? → raise effort (especially if below default)
Model — Did Claude try thoroughly and still fail? → larger model
Inverse — On larger model doing routine work for a while? → drop model for speed and cost
If you are raising effort on tasks that should not need it, the fix is upstream — not the effort dial.
How to set effort in Claude Code
Method
Example
In-session
/effort high (or low / medium / max / xhigh where supported)
CLI flag
claude --effort max
Settings
"effortLevel": "high" in .claude/settings.json
Prompt keyword
ultrathink for one-off deep reasoning (community pattern)
Ultracode (Code-specific): pairs xhigh effort with standing permission for multi-agent workflows — not a separate API effort tier.
Defaults (verify in your version): Opus 4.8 and Sonnet 4.6 default high on Claude Code; Opus 4.7 historically defaulted xhigh. See Claude Code pricing for subscription vs API economics.
What this changes for daily workflows
Don't flip model and effort on every failed diff. Do treat Hallie's article as permission to stay on Sonnet + default effort for mechanical work and reserve Fable for Fable-after-relaunch class problems.
Do audit whether failures are LLM burnout from reviewing slop — effort and model cannot fix bad task decomposition.
Do pair effort with verification hooks — hooks, tests in CI, ultrareview — so "try harder" means run tests, not write more prose.
Based on Lydia Hallie's July 2026 article for the Claude Code team. Model names, defaults, and effort tiers may change — verify in Claude Code settings.