diffox
Blog

Reasoning effort, fast mode and ultracode: when to use each

What reasoning effort, ultracode and fast mode do and what they cost, in Claude Code, Codex, Copilot, Cursor and Antigravity.

ShareXLinkedIn

Summary. Coding agents have three settings that are easy to mix up: how much the model thinks (effort), how many agents the work is split across (ultracode and its kin), and how fast the same model runs (fast mode; batch and flex go the other way). On 20 October 2026 we read the API docs of Anthropic, OpenAI and Google, and the docs and release notes of Claude Code, OpenAI’s Codex, GitHub Copilot (CLI and VS Code), Cursor and Google’s Antigravity CLI. To see what effort does to the result, we looked at the vendor’s own measurement, an independent index and our own logs.

  • Effort sets no hard token limit. All three providers have you pick a level by name; the only hard limit is the output token limit. Thinking tokens are billed as output tokens even when you don’t see them.
  • Ultracode is not an effort level. In Claude Code it is a separate setting that splits the work across subagents; Ultra in Codex and /boost in Antigravity do a similar job. No vendor publishes how many times more tokens this uses.
  • Fast mode makes the same model faster, at a higher price. On Opus 5.5 output speed goes up by as much as 2.5×, and the token price doubles. Batch and flex go the other way: the same model at half price, for anyone who can wait.
  • More effort is not always a better result. In an independent measurement, max came out both more expensive and weaker than xhigh on one model. In our own logs, effort changed whether the model thought at all more than how much it thought.

What is effort, and how does it set how much the model thinks?

5effort levels at Anthropic: low, medium, high, xhigh, max
2.5×fast mode output speed on Opus 5.5, at most (Anthropic)
0 → 100calls that think, from medium to xhigh (100 calls, our own logs)
4.2×what max costs on Haiku 5.5 against xhigh, for a lower score (Artificial Analysis)

Effort is the setting where you choose how much work the model puts into an answer; OpenAI calls it reasoning effort, Google calls it thinking level. In the SWE-bench post we showed the same model getting a different score when only effort changed, and in the subagents post how subagents inherit effort. This post puts effort next to two settings it is often mixed up with:

3 settings often mixed up. Each one changes something different. 1. Effort. How much the model thinks. 2. Ultracode, Ultra, /boost. How many agents the work is split across. 3. Fast mode, batch, flex. The same model’s speed and price.
Source: the API docs of Anthropic, OpenAI and Google; the docs of Claude Code, Codex and Antigravity, 20 October 2026.

All three providers now have you set thinking with a named level rather than a token count. Anthropic’s documentation says plainly what the level is: effort is not a budget but guidance given to the model (“a behavioral signal, not a strict token budget”). It affects not only thinking but also the text and the tool calls; as effort goes down, the model makes fewer and shorter tool calls.

Effort at three providers: the parameter, the levels, the default and how thinking is billed
ProviderParameterLevelsDefaultHow thinking is billed
Anthropicoutput_config.effortlow, medium, high, xhigh, max; depends on the modelhigh on most models; on Opus 5.5 and Haiku 5.5, mediumAs output tokens, even when the thinking text is not returned to you
OpenAIreasoning.effortFrom none to max, depending on the model; on GPT-6.1 Sol, low to maxDepends on the model; on GPT-6.1 Sol, mediumAs output tokens; reasoning tokens are not visible
Googlethinking_levelOn Gemini 4 Argon, low, medium, highOn Gemini 4 Argon, mediumAdded to the output tokens

Source: the three providers’ API docs, 20 October 2026. GPT-6.1 Sol does not support the none and minimal levels. At Google, the minimal level does not guarantee that thinking is off, even on the models that support it.

In all three, the hard limit is the output token limit: max_tokens at Anthropic, max_output_tokens at OpenAI and Google. Anthropic puts it briefly: effort is soft guidance, max_tokens is a strict limit. If the model hits that limit while it is thinking, the answer is cut off or comes back empty; OpenAI and Google say plainly that the thinking spent is billed anyway.

Two things changed this year. First, the old token budget is on its way out: at Anthropic, budget_tokens is deprecated on the 4.6 models and rejected by 4.7 and later; at Google, thinking_budget is deprecated for Gemini 4 Argon. On Opus 5.5 and Gemini 4 Argon you cannot even turn thinking off; the level is the only knob you have. Second, the defaults came down. Opus 5.5, Haiku 5.5, GPT-6.1 Sol and Gemini 4 Argon start at medium, so Opus 5.5 starts one level below Opus 5. Sonnet 5.5’s default depends on where it runs: high on the Claude API, medium in Claude Code.

Don’t compare level names across models. Claude Code’s documentation says the scale is calibrated for each model separately, so the same name does not mean the same amount of thinking on different models; Sonnet 5.5’s levels were recalibrated against Sonnet 5. Codex’s documentation also says the levels do not map exactly between model generations.

Changing effort in the middle of a conversation has a price. At Anthropic, changing effort at the request level invalidates the prompt cache; per-message effort (beta) changes the level while keeping the cache, and works on Opus 5.5, Sonnet 5.5 and Haiku 5.5. At OpenAI, configuration_update has done the same job since 3 September. Why the cache breaks is in the prompt caching post.

How do you set effort in the five tools?

All five tools let you pick the level with a command or a setting. Where they differ is the default, and whether there is a higher mode that splits the work across subagents. We read the table from each tool’s own documentation and release notes on 20 October 2026:

Effort in five coding tools: where it is set, the levels, the default and the mode that splits the work across agents
ToolWhere it is setLevelsDefaultMode that splits the work across agents
Claude Code/effort, --effort, CLAUDE_CODE_EFFORT_LEVEL, effortLevel in the settingslow, medium, high, xhigh, max; depends on the modelOn Opus 5.5, Sonnet 5.5 and Haiku 5.5, medium; on Opus 4.7, xhigh; on the others, highultracode: a separate toggle inside /effort
Codexmodel_reasoning_effort; plan_mode_reasoning_effort for Plan mode; /model in the CLIlow to max, and ultra; depends on the model and the clientNot in the docs; Plan mode has its own defaultUltra: spreads the parts of the work across parallel subagents
GitHub Copilot CLI--effort, /model; reasoningEffort in a custom agentlow, medium, high, xhigh, max; max on Anthropic modelsNot in the docsHydraFusion Max: runs several models together (research preview)
Copilot, VS CodeThe “Thinking Effort” submenu in the model pickerDepends on the modelVS Code picks the recommended level, with adaptive reasoning onHydraFusion Max
CursorEffort and Fast, in the model choiceDepends on the modelFixed on the Plus plan: effort medium, Fast offThe docs say nothing about a mode tied to the effort setting
Antigravity CLI/effort, --effortlow to max; on most models low, medium, highThe model’s default, otherwise medium/boost: multi-agent reasoning (paid plans)

Source: each tool’s documentation and release notes, 20 October 2026. “Not in the docs”: we found no sentence saying so on the pages we read that day. --effort came to Copilot CLI with version 1.0.10 (20 March), and max for Anthropic models with 1.0.60 (5 June). /effort came to Antigravity CLI with version 1.1.5 (21 July), and /boost to the Antigravity app with 2.12.0 (2 September). HydraFusion Max was announced on 14 October.

In Claude Code, /effort opens a slider; you can also type the level directly, as in /effort high. effortLevel in the settings file takes values from low to xhigh; max is not accepted there and can only be chosen for a session. You can also write effort into skill and subagent definitions; while that skill or subagent runs, it takes the place of the session’s level.

In Codex, the level is set by model_reasoning_effort in ~/.codex/config.toml; which levels you can pick depends on the model and the client. You can give Plan mode a value of its own; if you leave it empty, Plan mode uses its own default. An example:

~/.codex/config.toml
model_reasoning_effort = "high"
plan_mode_reasoning_effort = "xhigh"

Codex’s models page tells the two top levels apart: Max gives a single task more time to think, while Ultra spreads the separate parts of a complex job across parallel subagents. The same page says most tasks need neither.

In Copilot CLI, --effort (long name --reasoning-effort) takes five levels from low to max; max exists only on Anthropic models. Since version 1.0.88, the reasoningEffort in a custom agent’s definition applies when that agent is selected; a level you pass explicitly on the command line still wins. In VS Code, you pick the level from the “Thinking Effort” submenu, which opens when you click the arrow next to the model’s name in the model picker, and it is remembered per session. GitHub’s documentation also names the price: a higher level spends more tokens, and so more AI credits; start at the regular level and raise it only for hard tasks.

In Cursor, the Plus plan runs Cursor’s own models at fixed settings: effort medium, Fast off. Choosing an effort level and Fast takes Premium or higher. Max Mode on the old request-based plans is not an effort level; it is a separate option that widens the model’s context window.

In Antigravity CLI, /effort picks the level and saves it for later sessions; --effort applies only to that run. Most models offer low, medium and high; xhigh and max exist only on some. If you still use Gemini CLI: its command list has no command for effort, and the thinking setting lives only in the model definitions in the configuration. Google replaced Gemini CLI with Antigravity CLI for free-tier and Google One users on 18 June 2026; with paid API keys, Gemini CLI can still be used.

What is ultracode, and how is it different from effort?

Ultracode is, in the words of Claude Code’s documentation, “a Claude Code setting rather than a model effort level”. With it on, Claude plans a dynamic workflow for every substantive task: it writes a JavaScript script that splits the work into parts and manages many subagents, and runs the script in the background. According to the workflows documentation, a single request can turn into several workflows in a row: one to understand the code, one to make the change, one to verify it.

Effort, on the other hand, sets how much a single agent thinks. The two are independent: ultracode runs at whatever level the session is at. This split is new. When ultracode was announced with dynamic workflows on 28 May, it raised effort to xhigh. Since version 2.1.284 (28 September), it is a separate toggle inside /effort and leaves the level alone. Write-ups from before that date describe the old behaviour. One exception remains: if you start the session with claude --effort ultracode, the level becomes xhigh too. The four ways to turn ultracode on are in the subagents post.

There is no multiplier for the cost. Anthropic does not publish how many times more tokens ultracode uses; the documentation says each request will use more tokens and take longer, and that on a subscription you will reach a session or weekly limit sooner. With ultracode on, two brakes come off: the “Large workflow” warning for workflows that expect more than 25 agents or 1.5 million tokens is not shown, and the session’s concurrent subagent limit does not apply to subagents started with the Agent tool. The workflow’s own limits stay in place: by default 16 at a time, and at most 1,000 agents in a run. Ultracode does not turn on if workflows are off or the model does not support xhigh.

The other tools have their own versions of the same idea. None of them is the same thing as effort:

Modes in five tools that split the work across several agents or models, and what the docs say about their cost
ToolModeWhat it doesCost, per the docs
Claude CodeultracodePlans a workflow that manages subagents for every substantive taskNo multiplier: more tokens, more time
CodexUltraSpreads the separate parts of a complex job across parallel subagentsNo multiplier for Ultra; work with subagents uses more tokens than a single agent
GitHub CopilotHydraFusion MaxRuns several models together and uses higher effort on the steps that need depthEach model it uses, at that model’s price; a task can use more credits than with one model
Cursor—The docs say nothing about a mode tied to the effort setting—
Antigravity/boostBreaks the problem down, hands the parts to subagents, verifies the solutions round by roundNot in the docs; on paid plans

Source: the Claude Code, Codex, HydraFusion and Antigravity documentation, 20 October 2026. In Codex, Ultra sits as a level on the effort slider (from Light to Ultra); it is not among the reasoning.effort values of the OpenAI API.

Ultrathink, with its similar name, is something else. When you type ultrathink into a prompt, Claude Code adds an instruction asking for deeper thinking on that turn, but the effort level sent to the API does not change. So ultrathink is a one-message request, effort is the session’s setting, and ultracode is how many agents do the work.

The sources we read contain no measurement that compares ultracode on and off, and none for the similar modes either. So try ultracode on a large job that can be split, and on a small slice of it first. The workflows documentation also suggests running it in a single folder first, to see the spend before you start a large job.

What does fast mode speed up, and what does it cost?

Effort changes how much the same model thinks; fast mode changes how fast the same model writes its answer. Providers sell the same model at several speeds: cheaper for whoever can wait, more expensive for whoever is in a hurry. We read the table from the providers’ pricing and tier documentation on 20 October 2026:

Speed tiers of the same model: how they work, their prices and which providers have them
TierHow it worksPrice, against standardWho has it
BatchYou send requests in bulk; the results arrive within 24 hours, often sooner50% offAnthropic, OpenAI, Google
FlexYou wait for the response, but it can be slow; under load a request can be rejected50% offOpenAI, Google
StandardThe defaultList priceAll of them
Fast, PriorityThe same model runs faster or with priorityOn Opus 5.5, $8 / $40 (standard $4 / $20); on GPT-6.1 Sol, 2×; on Gemini, 75%–100% moreAnthropic, OpenAI, Google
UltrafastThe fastest tier of the OpenAI APIOn GPT-6.1 Sol, 6×OpenAI

Source: the providers’ pricing and tier documentation, 20 October 2026. Prices are input / output per MTok. At OpenAI, Priority was renamed Fast mode on 30 July. Google’s Flex is in preview. At Anthropic, fast mode cannot be used together with the Batch API.

Anthropic’s documentation is precise about what fast mode speeds up: it raises the output tokens per second, not the time until the first token arrives. The model and its intelligence stay the same. The difference shows in a long answer or a long diff; on short questions you will barely notice it. There is one more cost: requests at different speeds do not share the cache. Claude Code’s documentation spells out what follows: the first time you turn fast mode on in a conversation, you pay the uncached fast mode price for the entire context so far. So the cheapest moment to turn it on is at the start of the session.

Here is where the five tools stand:

  • Claude Code: /fast turns it on and off. On Opus 5.5 output speed goes up by as much as 2.5×, at $8 / $40 per MTok. On subscription plans it is paid from usage credits, not from your plan limit. On the API, fast mode for Opus 5.5 left research preview on 15 October; Claude Code’s fast mode page still said “research preview” on 20 October 2026.
  • Codex: /fast in the CLI; to keep it on, service_tier = "fast", which goes out in the request as priority. According to the documentation, fast mode draws on your subscription limit at 2.5× the standard rate, and on purchased credits at 2×. Since 8 October, GPT-6.1 Sol also has Ultrafast: 8× from the limit, 6× from credits; only on Pro $500 and eligible Enterprise and Edu plans.
  • GitHub Copilot: there is no tool-wide speed switch; the fast version sits in the model picker as a separate model. “Claude Opus 4.8 (fast mode)” has been in preview since 29 June 2026 and costs more than standard Opus 4.8; on Business and Enterprise an administrator has to turn it on.
  • Cursor: Fast is a separate option in the model table; on models such as Grok 4.7 you can pick it at twice the price. It is off on the Plus plan.
  • Antigravity: the docs say nothing about a paid speed tier.

The price of the cheap tiers is waiting, or being turned away. OpenAI’s flex tier can return 429 under load; these requests are not charged. Google’s Flex does not move a request up to the standard tier on its own when capacity is full; it leaves the retry to you. For work a person is sitting and waiting for, that means a surprise; for a batch job that runs overnight, it means half price.

Does more effort mean a better result?

Up to a point. We looked at three kinds of evidence: the vendor’s own measurement, an independent index and our own logs. Results the vendor reported are marked as such.

We drew the effort sweep from Anthropic’s cost documentation in the SWE-bench post: on a SWE-bench Pro subset Anthropic chose itself, Opus 5.5 solves more tasks as it goes from low to xhigh, and the cost per task multiplies. The same document has a more useful idea: instead of running everything at a high level, run at low first and repeat only the failures at high. At low, 13% of the tasks failed; with those repeated at high, about 97% of the tasks were solved, at about $0.17 per task. With everything at high, the result was 95.3% at $0.29. This is a vendor-reported result with two conditions: you need a signal that tells you a task failed (there, the benchmark’s own tests), and every task that fails on the first try waits for two runs.

On the independent side, Artificial Analysis’s Coding Agent Index measures the same model at every effort level, inside a coding tool: 303 tasks, 3 attempts per task. The results on 20 October 2026:

Artificial Analysis Coding Agent Index: three models, five effort levels; index score and average cost per task
LevelSonnet 5.5, Claude CodeHaiku 5.5, Claude CodeGPT-6.1 Sol, Codex
low42.1% · $0.4828.2% · $0.1457.2% · $0.50
medium45.9% · $0.6233.6% · $0.2361.4% · $0.70
high55.0% · $1.2435.1% · $0.3660.1% · $0.89
xhigh62.9% · $3.3341.4% · $0.6162.9% · $1.04
max68.4% · $14.1936.5% · $2.5860.1% · $1.55

Source: Artificial Analysis, the live page on 20 October 2026; a single snapshot. Each cell holds the index score and the average cost per task. The page gives no confidence interval; a difference of a few points may be noise. When a model refuses for safety reasons, another model can finish the attempt, and the attempt still counts: in the Sonnet 5.5 rows, between 18 and 45 of 909 attempts went this way. Level names are calibrated for each model separately, so read the table column by column, not row by row.

The three models show three different things. Sonnet 5.5 rises at every level, but the cost per task is $0.48 at low and $14.19 at max; the average time per task also grows from about 6 minutes to 87 minutes. On Haiku 5.5, max costs 4.2 times as much as xhigh and scores lower. GPT-6.1 Sol is nearly flat across the levels: its lowest and highest scores are 5.7 points apart.

In the vendor’s own measurements, too, the returns flatten at the top levels. According to Opus 5.5’s system card (vendor-reported), the model scored 66.4% on Terminal-Bench 4.0 at xhigh and 64.8% at max; Anthropic counts the difference as within noise (standard error ±2.6 points). On the same card, Opus 5.5’s best FrontierCode score (54.6%) is at medium; above medium the score drops, and at max it largely comes back. FrontierCode penalises changes the task did not ask for; how the model strays outside the scope at high effort is in the SWE-bench post.

Our own logs showed something else. diffox is an AI code review tool; we ran the Claude model we use several times on the pull requests of a public benchmark set, changing only effort. Each run consists of the same 100 model calls. Because thinking tokens are billed inside the output tokens, we counted whether a call thought by checking whether its response had a thinking block:

Calls whose response has a thinking block. 100 calls per run; the Claude model we use, the same pull requests. medium · run 1 (median 1,062 tokens, 8.9 s): 0 / 100; medium · run 2 (median 1,146 tokens, 9.1 s): 0 / 100; medium · run 3 (median 1,020 tokens, 8.7 s): 0 / 100; high · run 1 (median 2,222 tokens, 17.2 s): 68 / 100; high · run 2 (median 2,283 tokens, 16.7 s): 76 / 100; xhigh · single run (median 8,309 tokens, 60.4 s): 100 / 100.
Source: our own run logs, compiled on 20 October 2026. The token count is output tokens, thinking included; tokens and time are medians per call.

At medium, none of the calls thought; the model wrote the answer directly. At high most calls thought, at xhigh all of them did, and the output and time per call grew with it. So with adaptive thinking, effort changes whether the model thinks more than how long it thinks. Anthropic’s documentation says the same: in adaptive mode, effort sets how often and how deeply the model thinks, and at lower levels it can skip thinking entirely on simple problems. A second benchmark set gave the same picture: at medium none of 200 calls thought, at high 88 of 200 did. We tried max on only two calls, and both thought: 61,470 and 83,150 tokens, 423 and 745 seconds per call.

Whether raising effort catches more bugs is something our logs do not show. To say that, you need repeated runs at every setting; we have one or two runs per setting, and the difference between them is no larger than the usual swing between two runs. Why we don’t count a single run’s outcome as a result is in the LLM-as-a-judge post.

Which setting should you pick for which job?

The sources agree on this: start with the model’s default, and raise it only by measuring on your own work. OpenAI says to treat effort as a tuning knob, not as the main way to recover quality. Google suggests trying all three levels in your own evaluation and picking the lowest one that meets your bar. A summary for common jobs:

Six settings for common jobs. Start with the default; measure before you go higher. everyday change The model’s default: Opus 5.5, GPT-6.1 Sol and Argon: medium. hard bug, big refactor xhigh, measured: If you have tests and can see the difference. hard unattended job max: A task you don’t watch, checked by tests. large job that splits Ultra mode: Migrations, audits: ultracode, Ultra, /boost. work you wait on Fast mode: Long output, live debugging. Turn it on at session start. overnight batch job Batch: Half price; results within hours.
Compiled from the recommendations in the docs of the five tools and the three providers, 20 October 2026.

The reasons behind the cards are in the docs. Claude Code’s documentation warns of diminishing returns and overthinking at max, and asks you to test it before you adopt it widely; Codex’s documentation also says most tasks need neither Max nor Ultra. OpenAI lists security and code review among the common uses of xhigh, but only when your own evaluation shows a clear benefit. Ultra modes help when you can split the work into meaningful parts; on a single hard problem that cannot be split, one agent thinking longer makes more sense. For pull request bots and CI jobs, pick the standard tier: flex can reject requests under load, and batch can take hours.

Three more habits help:

  • Add a scope instruction. If the output will be a diff to merge, add a short sentence to the prompt telling the model to stay within the task’s scope. According to Anthropic, above high Opus 5 made more changes than the task asked for, and with this instruction the score came back on most of those tasks.
  • Change effort per message. In a long session, changing the level at the request level invalidates the cache. Anthropic’s per-message effort and OpenAI’s configuration_update change the level while keeping the cache.
  • Cheap level first, then the expensive one. If you can check the output with a test or a checker, running at a low level first and repeating only the failures at a high level came out cheaper in Anthropic’s measurement than running everything at high.

Frequently asked questions

How do you change effort in Claude Code?

With the slider that opens when you type /effort, or by typing the level directly, as in /effort high. You can start a single session with claude --effort xhigh, and set the default with the CLAUDE_CODE_EFFORT_LEVEL environment variable or with effortLevel in the settings; max is not accepted in the settings file. Opus 5.5, Sonnet 5.5 and Haiku 5.5 start at medium in Claude Code. The current level shows in the session header, next to the model’s name.

What is ultracode?

Ultracode is not an effort level in Claude Code but a separate setting. With it on, Claude plans a dynamic workflow for every substantive task: it writes a script that splits the work and hands it to subagents, and runs it in the background. /effort ultracode turns it on for the session; typing ultracode into a prompt uses it for one task. Each request uses more tokens and takes longer; Anthropic does not publish by how many times. It needs workflows to be on and a model that supports xhigh.

What is the difference between ultracode and max effort?

Max raises a single agent’s thinking to the top. Ultracode splits the work across several subagents and runs at whatever level the session is at; the two can also be on together. Codex makes the same distinction with Max and Ultra: Max gives a single task more time to think, Ultra spreads the parts of the work across parallel subagents. Max suits a hard problem that cannot be split, ultracode a large job that breaks into meaningful parts. According to Codex’s documentation, most tasks need neither.

How expensive is fast mode?

In Claude Code, fast mode for Opus 5.5 costs $8 input and $40 output per MTok; the standard price is $4 and $20, so it is double. On subscription plans it is paid from usage credits. If you turn it on in the middle of a conversation, the entire context so far is paid once at the uncached fast mode price, so turn it on at the start of the session. In Codex, fast mode draws on the subscription limit at 2.5× the standard rate and on credits at 2×; Ultrafast at 8× and 6×.

How do you set reasoning effort in Codex?

In ~/.codex/config.toml, set model_reasoning_effort to a level the model supports: low, medium, high, xhigh, max or ultra. plan_mode_reasoning_effort takes a separate value for Plan mode. In the CLI, pick the model with /model, and you will see the Max and Ultra options under “More reasoning…”. Codex’s documentation says most tasks need neither Max nor Ultra.

Does raising effort make the model write better code?

Not always. In vendor measurements the score usually rises but flattens at the top levels: Opus 5.5 scored slightly lower on Terminal-Bench 4.0 at max than at xhigh, and Anthropic counts the difference as within noise. In the independent Artificial Analysis index, Haiku 5.5 at max both scored lower than at xhigh and cost 4.2 times as much; GPT-6.1 Sol is nearly flat across the levels. On diffs that will be merged, high effort can also bring changes outside the scope. The most reliable way is to run a few tasks from your own work with the same tool, at every level, more than once.

Does effort decide what diffox posts on the pull request?

No. Effort sets how much work the model puts into an answer. In diffox, what is posted on the pull request is decided by each finding’s class: what you need to fix, that is critical findings and warnings, is posted; suggestions wait on the Findings page.