
One Parameter, Five Gears: Control Claude's Thinking Depth Per Step With effort
Chris Harper
3 min read
Jul 19, 2026 · 12:03 UTC
effort in output_config has five levels — use low for cheap leaf subagents and xhigh for Opus 4.7 agentic coding; the model's thinking depth, tool-call frequency, and response thoroughness all scale accordingly.
If you're building agents with Claude Opus 4.7 or newer, you've hit this already: the old budget_tokens field inside the thinking block is deprecated. On Opus 4.7, passing budget_tokens returns a 400 error. The replacement is effort in output_config — and it's broader than what it replaces.
What you'll be able to do after this:
- Pick the right effort level for each role in a multi-agent system (orchestrators vs. leaf agents)
- Migrate away from deprecated
budget_tokenstoeffort+ adaptive thinking on Opus 4.7 and Sonnet 4.6 - Cut 40–60% of agent token costs by matching effort to task complexity rather than using the default for everything
The five levels
| Level | Thinking behavior | Best for |
|---|---|---|
low | Minimal or none | Simple lookups, cheap subagents, classification |
medium | Moderate | Agentic coding on Sonnet 4.6; cost-sensitive workflows |
high | Default — deep on most tasks | Complex reasoning, most single-step agent actions |
xhigh | Extended multi-step exploration | Opus 4.7/4.8 coding + agentic tasks; repeated tool-call loops |
max | No constraints | Frontier problems; adds cost with small gains on most tasks |
effort affects all tokens in the response: thinking, text, and tool calls. At lower effort, Claude makes fewer tool calls, gives terser confirmations, and skips preamble. Higher effort means more calls, detailed planning before action, and thorough summaries.
Setting effort in Python
import anthropic
client = anthropic.Anthropic()
# Orchestrator: xhigh effort — plans, coordinates, validates across many tool calls
orchestrator_response = client.messages.create(
model="claude-opus-4-7",
max_tokens=64000, # set large at xhigh/max to give room to think
messages=[{"role": "user", "content": "Audit this repo and propose a refactor plan."}],
output_config={"effort": "xhigh"},
thinking={"type": "adaptive"}, # required on Opus 4.7
)
# Leaf subagent: low effort — fast, cheap, focused on one thing
leaf_response = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
messages=[{"role": "user", "content": "Classify this GitHub issue: bug, feature, or question?"}],
output_config={"effort": "low"},
thinking={"type": "adaptive"},
)
Model-specific guidance
Opus 4.7 / 4.8: Start with xhigh for coding and agentic tasks. high is the minimum for most intelligence-sensitive workloads. Step down to medium for cost-sensitive flows; step up to max only when evals show measurable headroom. Always set max_tokens ≥ 64k at xhigh / max.
Sonnet 4.6: Default to medium explicitly — high is the API default but produces unexpected latency. Use low for high-volume or latency-sensitive tasks; high only when quality matters more than speed.
Fable 5 / Mythos 5: Adaptive thinking is always on — no thinking config needed. Start with high (the default). At xhigh and high, set a large max_tokens since it is a hard limit on thinking + text.
Sources: Effort — Claude Platform Docs · Adaptive thinking — Claude Platform Docs · Extended thinking — Claude Platform Docs