1.3 Thinking: Adaptive Mode, Effort & Reasoning Budgets

Key Takeaways

  • On Claude Opus 5, Claude Sonnet 5, and Claude Fable 5.1 thinking is adaptive and already on; display defaults to omitted, so thinking text is hidden until you set thinking type adaptive with display summarized.
  • Manual extended thinking with thinking.budget_tokens is deprecated on Claude Opus 4.6 and Claude Sonnet 4.6 and is not accepted on later models, so pinning a token budget on a current model is not a valid configuration.
  • output_config.effort takes low, medium, high, xhigh, and max; high is the API default and is exactly equivalent to omitting the parameter, and adaptive is a thinking mode rather than an effort value.
  • Thinking tokens are billed as output tokens even when the text is not returned, and they count against max_tokens alongside the response text.
  • Thinking blocks must be passed back unchanged with their signature in multi-turn and tool-use conversations, and any thinking or top-level effort change starts a new prompt-cache prefix.
Last updated: September 2026

Thinking: Adaptive Mode, Effort & Reasoning Budgets

Exam Blueprint Focus: Thinking sits inside Claude API Mechanics (6.8%) and drives Cost and Token Management. The configuration surface changed across generations, and CCDV-F grades the current one: adaptive thinking steered by effort on the current lineup, with manual budget_tokens surviving only on older extended-thinking-only models. Confusing the two is the single most common way to get a thinking question wrong.

Architectural Purpose: Separating Reasoning from the Answer

A model that answers in one pass has to be right on its first token. It cannot backtrack, cannot check an intermediate result, and cannot abandon a bad approach halfway. For a proof, a subtle bug, or a long agentic task, the first approach is often not the best one.

Thinking removes that constraint. When thinking is active, Claude works the problem in its own words first — restating the ask, trying approaches, checking intermediate results, discarding paths that do not hold up — and that reasoning arrives in thinking content blocks ahead of the response. Three engineering benefits follow:

  1. Backtracking becomes possible. A discarded approach lives in the thinking block, not in the answer the user reads.
  2. The output payload stays clean. Your parser reads text blocks; scratch work never pollutes them.
  3. Deliberation beats greedy decoding. The model is not forced toward the locally-plausible next token when a globally better structure exists.

The cost is real and billed: thinking tokens are billed as output tokens even when the text is not returned to you, and they count against max_tokens alongside the response text.


Configuring Thinking on the Current Lineup

Adaptive thinking (Claude Sonnet 5, Claude Opus 5, Claude Fable 5.1)

On Claude Opus 5, Claude Sonnet 5, and Claude Fable 5.1, thinking is already on and needs no configuration. Claude decides whether to think on a given request, and how deeply, based on the request and the resolved effort level.

What you do configure is whether you get to see it. The display field defaults to "omitted" on these models, which returns thinking blocks with an empty thinking field. Opt in explicitly:

{
  "model": "claude-opus-5",
  "max_tokens": 16000,
  "thinking": { "type": "adaptive", "display": "summarized" },
  "output_config": { "effort": "high" },
  "messages": [
    { "role": "user", "content": "Find the race condition in this lock-free ring buffer." }
  ]
}

On Claude Opus 4.8, 4.7, 4.6 and Claude Sonnet 4.6, thinking is off until you set thinking: {"type": "adaptive"}.

The effort parameter is the depth dial

thinking controls whether Claude reasons in thinking blocks. output_config.effort controls how much work Claude puts into the whole response, which in adaptive mode includes how often and how deeply it thinks.

LevelBehaviourTypical use
maxNo constraint on token spendingFrontier problems where depth justifies cost
xhighExtended capability for long-horizon workMulti-hour agentic and coding tasks
highAPI default. Identical to omitting the parameterComplex reasoning, difficult coding, agentic work
mediumBalanced, moderate token savingsAgentic work balancing speed, cost, quality
lowMost efficient, some capability reductionSimple tasks, subagents, latency-sensitive paths

Three rules the exam can test directly:

  • high is the default and is exactly equivalent to omitting effort.
  • adaptive is a thinking mode, not an effort level. Passing "effort": "adaptive" is a mistake.
  • Effort applies to all output tokens — text, tool calls, and thinking — so lower effort also produces fewer and terser tool calls, not just less reasoning.

Claude Haiku 4.5 does not support effort at all; it uses manual extended thinking.

Manual extended thinking (legacy models only)

On models that support only extended thinking, you configure thinking: {"type": "enabled", "budget_tokens": N} and the old arithmetic applies: budget_tokens has a 1,024-token minimum and max_tokens must be strictly greater than budget_tokens, because thinking and the visible answer share the max_tokens ceiling. Violating it returns a 400 invalid_request_error.

Critical currency rule: manual extended thinking is deprecated on Claude Opus 4.6 and Claude Sonnet 4.6, and is not accepted on later models. Sending thinking: {"type": "enabled", "budget_tokens": 4096} to Claude Opus 5 or Claude Sonnet 5 is not a valid current configuration. If an exam option pins a reasoning budget in tokens on a current model, that option is wrong.

Turning thinking off

Claude Opus 5 accepts thinking: {"type": "disabled"} at effort high or below. At xhigh or max effort thinking cannot be turned off: the combination returns a 400 error. With thinking disabled, Opus 5 can occasionally emit tool calls as plain text or leak internal XML tags into visible output, so disabling it is a deliberate trade, not a free latency win.


Reading Thinking Output

A response returns one or more thinking blocks before the text blocks:

{
  "content": [
    {
      "type": "thinking",
      "thinking": "Two writers can observe the same tail index before either CAS lands...",
      "signature": "WaUjzkypQ2mUEVM36O2Txu...=="
    },
    { "type": "text", "text": "The race is in the producer's tail advance..." }
  ]
}

Two properties matter in production:

  • You never see the raw chain of thought. The text in a thinking block is a summary of Claude's reasoning. Do not build logic that depends on token-level reasoning fidelity.
  • Every thinking block carries a signature — an encrypted copy of the full reasoning. Whether display is "summarized" or "omitted", the block is billed the same and passed back the same.

The multi-turn preservation rule

Mandatory: in multi-turn and tool-use conversations, pass previous thinking blocks back unchanged, signature intact.

Stripping the signature, editing the thinking text, or dropping the block breaks the conversation's integrity guarantee. In an agent loop this is not cosmetic: the model relies on its own preserved reasoning to continue a plan across tool results.

Interleaved thinking — reasoning between tool calls — is automatic on every model that supports adaptive thinking, with no beta header required. Claude Haiku 4.5 does not support it. Under interleaved thinking the reasoning allocation can span the whole assistant turn rather than a single response.

Redacted thinking

Occasionally a thinking block returns as redacted_thinking with encrypted content instead of readable text, when internal safety systems flag the reasoning. Your client must pass redacted blocks back unchanged like any other thinking block and must not crash on the unfamiliar type. A client that only handles thinking and text will throw on the first redacted_thinking block it sees.


Thinking, Caching, and the Context Window

Configuration changes invalidate the prompt cache. The thinking configuration and the resolved effort level are rendered into the prompt itself, so switching between adaptive, enabled, and disabled, or changing the effort value, starts a new cache prefix. Message-level breakpoints always miss; tool and system breakpoints can miss too. Practical rule: pick an effort level at the start of a cached conversation and hold it constant. On Claude Opus 5 and Claude Fable 5.1 you can change effort mid-conversation with a per-message output_config in a role: "system" message, which preserves the cached prefix.

Thinking blocks are cached with tool results. During a tool-use loop, prior thinking blocks are cached along with the rest of the history and count as input tokens when read back — automatically, even without explicit cache_control markers. Reasoning you never see again still shows up in your input-token bill.


Workload Decision Matrix

WorkloadThinking postureRationale
Intent classification, tagging, extractionHaiku 4.5, or low effortSingle-step; deliberation adds latency and billed tokens for no accuracy gain
Customer-facing chat under a latency SLASonnet 5 at low/mediumEffort is the latency dial before you change tier
RAG answer synthesis over 20 documentsSonnet 5 at highCross-document reconciliation genuinely benefits
Multi-file refactor with tool loopsOpus 5 at xhigh, large max_tokensLong horizon; thinking and text share the ceiling
Algorithmic proof, hard debuggingOpus 5 at max, or Fable 5.1Deep deliberation is the deliverable

Prompting note: with adaptive thinking, do not micro-manage the reasoning. Do not ask Claude to "think step by step in your thinking block" — that is what the mode already does. State the problem, the constraints, and the success criteria, then steer depth with effort rather than with prose.

Loading diagram...
Adaptive vs Extended Thinking Configuration Paths
Test Your Knowledge

An engineer wants deeper reasoning from Claude Opus 5 on a hard planning task and writes: thinking set to type enabled with budget_tokens 32000, and max_tokens 40000. What happens, and what is the correct current configuration?

A
B
C
D
Test Your Knowledge

A long-running agent on Claude Sonnet 5 relies on prompt caching across a 40-turn session. To save money on routine turns, the team changes top-level output_config.effort from high to low midway through the session. Costs go up instead of down. Why?

A
B
C
D
Test Your Knowledge

A production client parses Claude responses by iterating content blocks and handling type thinking and type text, throwing on anything else. After weeks of stable operation it starts throwing on a small fraction of requests. What is the most likely cause and the correct fix?

A
B
C
D