Claude Sonnet 5 shipped June 30 with a five-position effort dial that controls how many thinking tokens the model burns per request. The default is high
. Most developers haven’t touched it. Pair that with a new tokenizer producing 30% more tokens than Sonnet 4.6, and you have a hidden cost multiplier running inside every agent loop you’ve deployed. Standard pricing hits September 1. Here’s what the dial does and how to set it before the bill arrives.
What Adaptive Thinking Actually Is #
Extended thinking on Sonnet 4.6 was opt-in. You passed thinking: {type: "enabled", budget_tokens: N}
to enable it. On Sonnet 5, that parameter is gone — it returns a 400 error. In its place is adaptive thinking, which is on by default for every request.
The behavioral change catches teams off guard: on Sonnet 4.6, omitting the thinking
field meant no thinking. On Sonnet 5, omitting it enables adaptive thinking. If your integration never used extended thinking, you’re getting it now unless you explicitly opt out.
One thing worth knowing about the display
setting: it controls what comes back in the response, not what gets billed. Setting display
to "omitted"
— the new default — hides thinking output but does not stop thinking from happening. You pay for it either way. To actually disable thinking, pass thinking={"type": "disabled"}
. Note: that option exists on the Anthropic API. On Amazon Bedrock, you cannot disable adaptive thinking on Sonnet 5.
The Five Effort Levels #
Effort is a behavioral signal, not a hard token cap. The model uses your setting to calibrate how much to think, but it retains discretion. Here’s the practical breakdown:
| Level | Token Usage | When to Use |
|---|---|---|
low |
Minimal | Chat, simple classification, latency-sensitive high-volume work |
medium |
Moderate | Cost-sensitive tasks; roughly Sonnet 4.6 at high effort |
high |
Balanced (default) | Complex reasoning, coding, agentic tasks |
max |
Heavy | Extended autonomous work, multi-step planning |
xhigh |
Maximum | Hardest coding and agentic tasks |
The effort parameter lives in output_config
. You can set it per request — every call can carry a different effort level. That’s the point: a classification task and a debugging session shouldn’t share the same setting. See Anthropic’s effort documentation for the full parameter reference.
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=16000,
output_config={"effort": "medium"},
messages=[{"role": "user", "content": "..."}]
)
The xhigh Trap #
At xhigh
effort, Sonnet 5 performs roughly at Opus 4.8’s high-effort level on agentic benchmarks. Benchmark data from independent evaluators puts them close on OSWorld and BrowseComp. But at xhigh
, Sonnet 5 can cost more than Opus 4.8 at high effort for the same quality output.
The rule follows directly: if you need Opus 4.8-class quality, use Opus 4.8. Don’t escalate Sonnet to its ceiling — you end up paying flagship prices for a model that isn’t the flagship.
Turn Thinking Off for Structured Extraction #
Adaptive thinking and structured extraction don’t mix well. For tasks where you’re asking the model to read input and emit a fixed JSON schema — extraction, form filling, strict classification — thinking competes with output tokens within the max_tokens
budget. The model thinks first, uses up tokens, then clips the JSON output. You get a truncated or empty result with no obvious error message. This edge case is well-documented but easy to miss during migration.
The fix is one line:
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=2048,
thinking={"type": "disabled"},
messages=[{"role": "user", "content": "Extract these fields as JSON: ..."}]
)
There’s no reasoning to do in a pure extraction task. Disabling thinking here doesn’t cost you quality — it prevents a silent failure mode.
The September Cost Math #
Introductory API pricing through August 31: $2 input / $10 output per million tokens. Standard pricing starting September 1: $3 input / $15 output — a 50% increase on both sides.
Layer that on top of the tokenizer change. The same prompt that cost X on Sonnet 4.6 uses 30% more tokens on Sonnet 5. Independent benchmark data shows an average task costs $2.29 on Sonnet 5 versus $1.20 on Sonnet 4.6, at current introductory prices. After September 1, untuned agent loops built on Sonnet 5 can run 2–3x what the same workload cost on 4.6.
The introductory price is masking that. Most teams won’t notice until the September bill arrives.
Three Settings to Check Before September 1 #
First: audit every integration running Sonnet 5 and set output_config={"effort": ...}
explicitly. Don’t accept the default high
for workloads that don’t need it. Classify tasks into simple (use low
or medium
), standard (use high
), and exceptional (use max
or xhigh
).
Second: add thinking={"type": "disabled"}
to any extraction or strict structured output workflow. The adaptive thinking default is not appropriate for those tasks.
Third: re-run token counts against Sonnet 5 before you finalize max_tokens
limits. Counts from Sonnet 4.6 don’t transfer — the new tokenizer changes the math. A max_tokens
limit tuned for 4.6 may truncate equivalent output on Sonnet 5. The adaptive thinking documentation covers how to leave adequate headroom for thinking tokens.
The effort dial is there precisely because different tasks need different amounts of compute. The default is a reasonable starting point for general use — but it’s not the right answer for everything, and it costs more starting in 34 days.