Effort Levels, Ultrathink & Ultracode
Choose Claude Code's reasoning effort deliberately, and understand the verified difference between ultrathink, ultracode, and enforceable CLI cost limits.
What You’ll Learn
Session 25 covered which model to run. This session covers a separate control: how much reasoning Claude Code asks that model to use.
By the end, you’ll understand:
- Which effort levels each current model supports
- Why
ultrathinkis a one-turn instruction, whileultracodeis a session setting - How ultracode combines
xhighreasoning with dynamic workflows - Which settings persist and which reset with the session
- Which cost limits Claude Code actually documents
The Effort Dial
Effort controls adaptive reasoning. Lower levels favor speed and cost; higher levels favor deeper reasoning. The available values depend on the active model:
| Model | Supported levels | Position |
|---|---|---|
| Fable 5 | low, medium, high, xhigh, max | Current Fable option |
| Opus 5 | low, medium, high, xhigh, max | Current Opus generation |
| Sonnet 5 | low, medium, high, xhigh, max | Current Sonnet generation |
| Opus 4.8 | low, medium, high, xhigh, max | Previous Opus generation |
| Haiku 4.5 | Not listed as effort-capable | Do not pass --effort |
This table follows Claude Code 2.1.226’s model configuration. Model visibility, aliases, and entitlement can vary by provider, plan, and account, so confirm the choices shown by /model in your active environment. For an effort-capable model, the same label is calibrated per model, so high is not a universal fixed token budget. Haiku 4.5 is not listed as effort-capable; use it without an effort override.
Use the default for routine coding, then move deliberately:
low: short, scoped, latency-sensitive workmedium: cost-sensitive work that can trade some capabilityhigh: the balanced default for most coding tasksxhigh: deeper reasoning at higher token spendmax: deepest reasoning, with possible diminishing returns or overthinking
Set and Confirm Effort
/effort
/effort high
/effort auto
You can also launch a single session at a chosen level:
claude --effort xhigh
low, medium, high, and xhigh can persist when selected interactively. max is session-only unless set through CLAUDE_CODE_EFFORT_LEVEL. The effortLevel settings key accepts low, medium, high, or xhigh; it does not accept max or ultracode.
The environment variable has the highest precedence. Skill and subagent frontmatter can also set effort for that skill or worker, unless the environment variable overrides it.
Ultrathink Is a One-Turn Instruction
Put ultrathink anywhere in a prompt to request deeper reasoning for that turn:
ultrathink: find the smallest safe migration plan for this schema change
Claude Code adds an in-context instruction, but the effort value sent to the API does not change. It also does not change the session’s saved effort. Phrases such as “think hard” are ordinary prompt text, not equivalent trigger keywords.
Ultracode Is xhigh Plus Workflow Orchestration
Ultracode is not another model effort level. It is a Claude Code session setting that:
- sends
xhigheffort to models that support it; and - lets Claude plan dynamic workflows for substantive tasks.
Turn it on for the current session with:
/effort ultracode
Or start a session with it already enabled:
claude --effort ultracode
The command-line form requires Claude Code 2.1.203 or later. Ultracode resets when the session ends and cannot be stored in effortLevel or CLAUDE_CODE_EFFORT_LEVEL.
For one task, you can type ultracode or directly ask Claude to “use a workflow.” As of 2.1.210, the keyword trigger is limited to human-origin interactive input; it does not silently activate from -p, scheduled tasks, relayed webhooks, or unstamped SDK prompts.
When ultracode is unavailable—for example, because workflows are disabled—--effort ultracode requests xhigh without workflow orchestration. The normal model-level fallback still applies when xhigh is unsupported.
Cost Controls: What Is Actually Enforced
Claude Code does not document prompt-level token directives or a workflow-global budget object. Treat a token target written in a prompt as guidance, not a harness-enforced contract.
The documented controls are:
/workflows: inspect per-agent token use and stop a run- Dynamic workflow size: an advisory target for scripts Claude writes, not a hard cap
- Runtime limits: up to 16 concurrent agents and 1,000 agents per workflow run
- Large-workflow warning: over 25 scheduled agents or 1.5 million projected tokens, available from 2.1.203; the warning is advisory
claude -p --max-budget-usd: a hard dollar ceiling in non-interactive print modeclaude -p --max-turns: a turn limit in non-interactive print mode
Example:
claude -p --max-budget-usd 5 --max-turns 8 \
"Review the migration and return only confirmed blockers"
Those flags stop the print-mode process. They are not token-pool objects exposed inside a workflow script.
A Practical Selection Rule
| Work | Starting point |
|---|---|
| Rename, formatting, known one-file fix | low or medium |
| Normal implementation and review | high |
| Difficult debugging or high-stakes verification | xhigh |
| One unusually hard reasoning turn | ultrathink |
| Large task that benefits from scripted multi-agent work | ultracode or an explicit workflow request |
Start at the cheapest level that can reliably finish the work. Raise effort when the cost of a wrong judgment exceeds the cost of more reasoning; use orchestration only when independent work or repeatable control flow adds value.
Key Insight
Effort and orchestration are different controls. Effort changes how deeply a model reasons. Ultrathink nudges one turn without changing the API effort value. Ultracode adds a workflow-planning policy on top of xhigh. Keeping those layers separate makes both quality and cost easier to reason about.
Next Session
Session 27 opens the orchestration layer: the Workflow tool, where JavaScript holds the control flow and subagents supply judgment.