I recently had a batch of subagents scan a pile of screenshots for one thing: does this contain an error, yes or no. Every single time I got a tidy answer back, complete with reasoning and a short summary. Nicely meant, but for a yes-or-no question you end up paying for thinking nobody asked for.
Anthropic just gave the Claude API a direct dial for that: effort. No separate model, no prompt trick. One parameter that controls how eager Claude is to spend tokens on an answer.
What it does
Effort controls how thoroughly the model thinks, independent of the question you ask. The same prompt to the same model returns a short, direct answer at a low setting, and a fuller, more carefully reasoned one at a high setting. You trade speed and cost against depth, without switching models.
The parameter works across every current Claude model, with no beta header required. On Opus 4.6 and Sonnet 4.6 it replaces the old budget_tokens mechanism as the recommended way to steer thinking depth.
One detail worth remembering: effort is a behavioral signal, not a hard token budget. Even at the lowest level, the model still thinks through a problem that genuinely needs it. It just thinks less far than it would at a higher level on that same problem.
The levels
Five settings, from frugal to unrestricted:
| Level | Best for | Effect |
|---|---|---|
low | Simple classification, quick lookups, subagents | Most efficient, shorter answers |
medium | Tasks that need a balance of speed and quality | Moderate savings |
high | Complex reasoning, difficult code, most agentic tasks | Default, same as not setting the parameter |
xhigh | Heavy coding work, long search, tasks running tens of minutes | Meaningfully higher token usage than high |
max | Pushing the limit on a genuinely hard problem | No constraint on token spending |
Claude Sonnet 5 defaults to high. That covers most day-to-day work fine. For the heaviest coding jobs, xhigh is the starting point, not max: the latter is reserved for genuinely frontier problems and adds little quality on most tasks for a noticeably bigger bill.
How you set it
In the API call, effort is just an extra field:
{
"model": "claude-sonnet-5",
"effort": "low",
"messages": [...]
}
No separate config, no other model to load. Same call, different behavior.
Why this matters to me
This is exactly the dial that was missing from my own setup. Subagents doing classification work now run at low, while the main session stays on high for the actual thinking. Claude Code’s ultracode mode, for what it’s worth, uses xhigh combined with standing permission to run multiple agents at once, not some separate level above it.
It does not change what the model can do. It changes what you pay for work that never needed that depth in the first place. And that is exactly the kind of improvement you do not see in a demo, but you do see on your bill.
Want to know how I put dials like this to work in my own day? Read along at sparkone.nl or email me at jeroen@sparkone.nl.
