Skip to main content

Effort, Thinking, and Fallback

Effort​

The effort levels are low, medium, high, xhigh, and max. A level the model does not accept runs as the highest accepted level below it. The effort cost index scales the cost of a level against high, which is 1. It comes from the catalog (

Undocumented: Only the program shows this item. It can change without notice.
). claude-opus-4-7 has the default xhigh and no index. Other models not listed have no default effort in the catalog.

ItemStatusWhat it does
--effort <level>
Documented: An official docs page names this item.
Sets the effort for a session. ultracode sets xhigh and turns on the workflow mode.
CLAUDE_CODE_EFFORT_LEVEL
Documented: An official docs page names this item.
Sets the effort. It wins over --effort, /effort, and settings. auto uses the model default.
effortLevel, maxEffortLevel, modelSettings
Documented: An official docs page names this item.
Settings for the default level and a cap.
output_config.effort
Documented: An official docs page names this item.
The request field that carries the level. Since 2.1.310, when the server refuses it, the request goes again without it, and it stays off for that model until the process ends (the program).
per-turn-control-2026-07-01
Undocumented: Only the program shows this item. It can change without notice.
A beta that lets some models take the effort with each message.
ultrathink
Documented: An official docs page names this item.
A word in a prompt that asks for deeper thinking on that turn only. Since 2.1.311, in the interactive terminal on the Anthropic API, it runs the turn at xhigh effort on Opus 5.5, Sonnet 5.5, Haiku 5.5, and Fable 5.1. Typed while Claude is working, it raises the rest of that turn. The rainbow on the word shows only where it can raise effort (see the note below).
Default effort
Documented: An official docs page names this item.
The default is high, except medium for Opus 5.5, Sonnet 5.5, and Haiku 5.5, and xhigh for Opus 4.7.
Cache warning
Undocumented: Only the program shows this item. It can change without notice.
Since 2.1.312, the dialog Switch model? or Change effort level? says This conversation is cached for the current model. Switching to the new value in bold means the full history gets re-read. (the program, chunk-7ss0ryz6.js:58010, :58046-58051). The old text ended with on your next message.
Effort note in the prompt
Undocumented: Only the program shows this item. It can change without notice.
The prompt shows the level and /effort. Since 2.1.312, it shows may wait for your next message in place of /effort only while the request has not yet carried the shown level (see the note below).
Spinner effort
Undocumented: Only the program shows this item. It can change without notice.
The spinner adds the text with <level> effort. Since 2.1.312, the level is the one the request carried (see the note below).

Source for ultrathink: the Claude Code changelog and the program. These four models are the ones whose catalog entry has the capability per_turn_effort (chunk-dmakgjeg.js:207, :423, :712, :805). At submit, chunk-8qajn51r.js:4138 sets the turn effort to xhigh. A prompt typed during a turn gets the same level (chunk-qw7sm5zw.js:3626). The gate that decides whether a model can take the boost is chunk-r1ht672j.js:18693. The prompt colors the word only when it passes (chunk-xnjmsx7r.js:54917).

Source for the cache warning, the prompt note, and the spinner: the program and the 2.1.312 release notes. The text of the prompt note did not change in 2.1.312. Only the flag changed. In 2.1.311, the flag was true after a step key press while Claude was working, on a model that passes the per-turn check, and it cleared when Claude stopped (chunk-xnjmsx7r.js:57759, :57763, :59815, :60285). Since 2.1.312, the flag is true when the request sent a level, no turn effort is set, the sent level differs from the shown level, and the model passes the per-turn check (chunk-7ss0ryz6.js:60684). The note clears when one of these stops being true. The program then removes the effort-level notification (chunk-7ss0ryz6.js:60697). The program builds the prompt text at chunk-7ss0ryz6.js:11353. The request puts its level in output_config.effort (chunk-r5cyd28m.js:136925). The request sends it with the stream start (chunk-r5cyd28m.js:140243). The program stores it as the sent level (chunk-7ss0ryz6.js:97569, :97576). The spinner reads the sent level first (chunk-zgj89n5s.js:1465). It uses the resolved level only when the program stores no sent level (chunk-8h49xv0g.js:1512-1516). In 2.1.311, the spinner function took no sent level (chunk-a4650erw.js:1503-1507).

idDefault effortIndex (low, medium, high, xhigh, max)
claude-fable-5high0.6, 0.77, 1, 1.74, 1.91
claude-fable-5-1high0.75, 0.86, 1, 1.38, 1.74
claude-haiku-5-5medium0.38, 0.52, 1, 2.03, 4.34
claude-mythos-5-1high0.75, 0.86, 1, 1.38, 1.74
claude-opus-4-7xhighnone
claude-opus-4-8high0.72, 0.9, 1, 1.65, 1.88
claude-opus-5high0.67, 0.76, 1, 1.6, 1.7
claude-opus-5-5medium0.48, 0.66, 1, 1.66, 3.44
claude-sonnet-5high0.47, 0.74, 1, 2.41, 5.59
claude-sonnet-5-5medium0.49, 0.54, 1, 1.87, 5.5

Thinking​

Sources: Model Configuration and Environment Variables.

ItemStatusWhat it does
thinking: {type: "adaptive"}
Documented: An official docs page names this item.
Lets the model choose how long it thinks. Newer models always use it.
MAX_THINKING_TOKENS
Documented: An official docs page names this item.
Sets a fixed thinking budget. 0 turns thinking off on the Anthropic API. It cannot turn thinking off on Opus 5.5, Sonnet 5.5, Haiku 5.5, and the Fable models.
CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING
Documented: An official docs page names this item.
Returns to the fixed budget on Opus 4.6 and Sonnet 4.6. It has no effect on newer models.
CLAUDE_CODE_DISABLE_THINKING
Documented: An official docs page names this item.
Omits the thinking field, for proxies that reject it.
alwaysThinkingEnabled, showThinkingSummaries
Documented: An official docs page names this item.
Settings for thinking. Option+T or Alt+T toggles it.
--thinking <enabled|adaptive|disabled>
Undocumented: Only the program shows this item. It can change without notice.
This flag is hidden and works in print mode. enabled equals adaptive.
--thinking-display <summarized|omitted|highlights>
Undocumented: Only the program shows this item. It can change without notice.
This flag is hidden. It sets how thinking text comes back.
--max-thinking-tokens
Undocumented: Only the program shows this item. It can change without notice.
Deprecated: The program or the official docs call this deprecated. Use --thinking
This flag is hidden and deprecated. Use --thinking.

Fallback and Retries​

Sources: Model Configuration and Error Reference: Automatic Retries.

ItemStatusWhat it does
--fallback-model <model...>, fallbackModel
Documented: An official docs page names this item.
A chain of up to three models for overload and server errors.
CLAUDE_CODE_NO_MODEL_FALLBACK
Undocumented: Only the program shows this item. It can change without notice.
Forbids the substitution of a model.
CLAUDE_CODE_MAX_RETRIES
Documented: An official docs page names this item.
The number of retries. The default is 10. The maximum is 15.
CLAUDE_CODE_RETRY_WATCHDOG
Documented: An official docs page names this item.
Retries 429 and 529 errors without end and removes the cap. Off by default. Since 2.1.310, CLAUDE_CODE_RETRY_WATCHDOG_SCOPE=capacity keeps only that part. Since 2.1.311, it no longer retries a 429 or 529 that the API marked not to retry with the header x-should-retry: false (chunk-2ht8z368.js:131464). This holds in watchdog mode too. A rate-limit header with the value fetch_error still allows a retry.
CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS, CLAUDE_CODE_OVERLOADED_RETRY_MAX_DELAY_MS
Documented: An official docs page names this item.
The start wait and the longest wait after a 529. The defaults are 500 and 32000.
API_TIMEOUT_MS
Documented: An official docs page names this item.
The request timeout. The default is 600000.
CLAUDE_STREAM_IDLE_TIMEOUT_MS, CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS
Documented: An official docs page names this item.
Stream silence and first-byte deadlines. The program sets the defaults. A value below 5 minutes for CLAUDE_STREAM_IDLE_TIMEOUT_MS counts as 5 minutes.
CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK
Documented: An official docs page names this item.
Stops the retry without streaming after a stream fails. It is off by default.

The rules for these are on Models and Retries and Timeouts.

Automatic Switches and the Prompt for Unrecognized Names​

Both rows are about a model name that Claude Code does not recognize, such as a custom deployment name or an inference profile ARN.

ItemStatusEffectNotes
CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK
Undocumented: Only the program shows this item. It can change without notice.
Turns off the automatic switch to another model after a flagged message.Since 2.1.312, the switch also covers names that Claude Code does not recognize. Before, a name with no catalog flag and no known flagged family got no switch. The setting switchModelsOnFlag is a second control. Source: chunk-1qayfjzs.js lines 13296, 13298 to 13305, and 13376 to 13392.
CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT
Documented: An official docs page names this item.
0 keeps the full system prompt.Since 2.1.312, an unrecognized name gets the short prompt. See Names That Claude Code Does Not Recognize.