Choosing the model and the depth of reasoning is a balance of quality, speed and cost, and it starts with aliases, not random full IDs. Claude Code understands aliases like default, sonnet, opus, haiku and fable, which Anthropic remaps to current versions; there is opusplan for switching the model between plan and execution and variants with extended context. The point of aliases is that they survive the release of new versions, whereas a hardcoded full ID goes stale.
Hence an important warning: do not pin a specific model in a shared book or template just because it was the default at the time of writing. The set of available models depends on the account, the provider and the managed allowlist, and what worked for you may be unavailable to a colleague or in CI. The choice and the check are done live - with the /model command, the --model flag at launch - not carried over from someone else's config as a given.
Effort controls the depth of reasoning, and its levels are worth understanding by purpose, not by feel. low - for short local tasks sensitive to latency; medium - for routine with a spend limit; high - the base balance of quality and cost for most engineering tasks; xhigh - for complex reasoning, architecture and hard debugging; max - for the heaviest cases, where diminishing returns and overthinking are already possible. There is also a session-only mode of workflow behavior.
It helps to gather the effort levels into a table once, to choose consciously. Below is a map from low to max. The key rule next to it: the available levels depend on the model, and they cannot be compared by a single answer. An honest assessment is a repeatable set of tasks on which you measure correctness, the number of turns, token usage and time; the feel from one lucky or unlucky answer is deceptive.
| Effort | Practical use |
|---|---|
| low | Short local tasks sensitive to latency |
| medium | Routine changes with a spend limit |
| high | A balance of quality and cost for most tasks |
| xhigh | Complex reasoning, architecture, hard debugging |
| max | The heaviest cases; diminishing returns possible |
Extended thinking and fast mode are two switches with non-obvious consequences. Thinking is toggled with Alt+T or a setting, but some models use adaptive reasoning or do not let it be fully disabled, and MAX_THINKING_TOKENS=0 does not act the same on different models and providers - so you check /status and the output metadata. Fast mode speeds up supported Opus models and may have a different price; enabling fast from another model can switch the model and cause a cache miss.
Advisor adds a second model as a consulting voice, but not as a guarantee. /advisor connects a model the main agent can call at a key moment; it is not an independent approval and not a promise of a better result. The practical benefit is in a complex choice where a second analysis is cheaper than a large wrong diff. In settings this is expressed by the bundle of model, effortLevel, advisorModel and fallbackModel - a conscious profile, not a random set.
It helps to see such a profile in settings once, to set the model's behavior explicitly. Below is a fragment with the main model, the effort level, an advisor and a fallback model. You return to this form when setting up a working profile for a task: it makes the model choice reproducible and explainable rather than dependent on what was chosen in the previous session.
Providers have their own specifics, and they cannot be ignored. Bedrock, Agent Platform, Foundry and gateways often require mapping aliases to deployment IDs via the ANTHROPIC_DEFAULT_*_MODEL variables or managed modelOverrides, and also describing capabilities - otherwise the UI will offer an unsupported effort or thinking. The typical failure is hardcoding the model by yesterday's default and comparing levels by a single answer; the right move is aliases, a live check and assessment on a repeatable set.
// A conscious model profile in settings
{
"model": "sonnet",
"effortLevel": "high",
"advisorModel": "opus",
"fallbackModel": ["sonnet", "haiku"]
}