Effort Levels and Thinking Display Options Reference
A quick-reference table for every effort level and thinking display mode, and how to combine them in a single request.
Search across all documentation pages
A quick-reference table for every effort level and thinking display mode, and how to combine them in a single request.
| Level | Relative speed | Relative cost | Reasoning depth | Typical fit |
|---|---|---|---|---|
low | Fastest | Lowest | Minimal | Classification, extraction, short lookups |
medium | Balanced | Moderate | Standard | General assistant replies, summarization |
high | Slower | Higher | Deep | Code review, multi-step planning |
max | Slowest | Highest | Maximum | Safety-critical analysis, complex debugging |
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
output_config={"effort": "high"},
messages=[{"role": "user", "content": "..."}],
)| Display mode | What it returns | When to use |
|---|---|---|
| Summarized | A condensed version of the thinking block content | Debugging, optional user-facing rationale, audit logs |
| Omitted | No thinking block content returned, even if reasoning happened internally | Production UI paths where raw reasoning should never reach the client |
Display mode is a presentation setting on top of whatever reasoning already happened, it does not change the effort level or the reasoning depth itself.
| Effort | Display | Result |
|---|---|---|
low | Omitted | Fastest, cheapest, no reasoning trace returned, best default for high-volume simple tasks |
medium | Summarized | Balanced cost with a condensed rationale available for debugging |
high | Summarized | Deep reasoning with a readable trace, good for code review tooling |
max | Omitted | Maximum internal reasoning depth, but the client only sees the final answer, useful when reasoning is sensitive or verbose but the answer quality still matters |
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=2048,
thinking={"type": "adaptive"},
output_config={"effort": "max"},
messages=[{"role": "user", "content": "..."}],
)| Model | Adaptive thinking default | Notes |
|---|---|---|
| Claude Fable 5 | Always on | Top-tier model, 1M context, 128K max output |
| Claude Opus 4.8 | Configurable | Flagship reasoning model, 1M context |
| Claude Sonnet 5 | Configurable | Default general-purpose model |
| Claude Haiku 4.5 | Configurable | Fastest and cheapest, 200K context, pairs well with low effort |
low effort, omitted display.medium effort, summarized display for internal logging only.high effort, summarized display shown to developers.max effort, summarized display retained in an audit log even if omitted from the end-user response.No. Effort (output_config.effort) controls reasoning depth and cost. Thinking display controls whether that reasoning is returned summarized or omitted. They are independent and can be combined.
low, medium, high, max, from fastest and cheapest to most thorough and expensive.
No. Reasoning can still happen internally at whatever effort level you set, omitted display just means that reasoning trace is not returned in the response.
A condensed version of the model's reasoning, shorter than the full internal trace but still useful for debugging or optional disclosure.
low effort, typically paired with omitted display, since classification tasks rarely benefit from deep visible reasoning and volume makes cost the primary concern.
No, they are independent. You can run max effort with omitted display when you want maximum reasoning depth internally but do not want to expose or store the raw trace.
Claude Fable 5 runs with always-on adaptive thinking by default, but the effort parameter still applies the same way as with other models to cap reasoning depth and cost.
It is a reasonable default during development. For production, weigh the extra response size and any sensitivity of the reasoning content before deciding to keep summarized display on.
Yes. output_config.effort and thinking are set independently on each messages.create call, so you can vary one without touching the other.
The request uses the model's default reasoning behavior. For explicit, predictable cost and latency control, set output_config.effort deliberately rather than relying on defaults.
No, the four levels covered here (low, medium, high, max) are the standard set. Fine-grained control beyond these four is achieved by routing different request types to different levels, not a fifth level.
Stack versions: Written against the Claude model lineup current as of ~June 2026 - Claude Fable 5, Claude Opus 4.8, Claude Sonnet 5 (the default), and Claude Haiku 4.5 - and the official
anthropicPython SDK (latest 0.x release). Model names, SDK versions, and pricing move quickly - verify current specifics at platform.claude.com/docs before relying on them.
Reviewed by Chris St. John·Last updated Jul 16, 2026