Extended Thinking, Adaptive Thinking and Effort
With extended thinking, Claude reasons internally before the final answer (thinking blocks). On newer models this is adaptive: Claude decides when and how much to think. How much effort it spends is controlled by the effort parameter.
- 1.User prompt: a hard question
- 2.Thinking block: internal reasoning (billed, hidden by default)
- 3.Tool calls?: tools if needed, thinking again in between
- 4.Text block: the final answer
Thinking tokens are billed like output tokens
6.1 Configuration
response = client.messages.create(
model="claude-opus-5-5",
max_tokens=16000,
thinking={"type": "adaptive", "display": "summarized"}, # show a summary
output_config={"effort": "high"}, # low | medium | high | xhigh | max
messages=[{"role": "user", "content": "Prove the time complexity of this algorithm..."}],
)
for b in response.content:
print(b.type) # "thinking" then "text"6.2 Effort levels
| Effort | When to use |
|---|---|
| low | Simple chat, classification, sub-agents, latency-sensitive work |
| medium | Good quality while saving cost (default for Opus 5.5 and Haiku 5.5) |
| high | The minimum for intelligence-sensitive work; default for most models |
| xhigh | Best for coding and agentic work (Claude Code's default) |
| max | When correctness matters more than cost |
6.3 Old vs new approach
| Point | Old (up to Claude 3.7 / 4.x) | New (4.6+ / 5.x) |
|---|---|---|
| Config | {type: "enabled", budget_tokens: N} | {type: "adaptive"} |
| Control | Fixed thinking token budget | effort level |
| Turning off | Remove the thinking param | Thinking is always on for Opus 5.5 / Fable; lower the effort |
| Display | Summarized by default | omitted by default; you must set summarized |
| Interleaved thinking | Beta header | Automatic in adaptive (thinking between tool calls) |