Pick the model and the effort
Two knobs, often turned in the wrong order. The model decides how capable the answer can be; the effort decides how much work goes into it. This lesson is mostly about not touching either one.
01The goal
Pick a model and an effort level for a task on purpose, set them for a session, for all your sessions, or for one skill — and tell from a wrong result which knob, if any, to turn.
02The idea
Two separate choices shape an answer. The model decides how capable the answer can be. The effort decides how much work Claude does on each request: how many files it reads, how much it verifies, how far it goes before checking back with you. The default effort is high on most current models, and Anthropic’s guidance is to start from the default for most tasks and change it when a result tells you to.
| What happened, or what the task is | What to change |
|---|---|
| Claude lacked context — vague prompt, missing file, no skill | The context, not a knob |
| Claude didn’t try hard enough — skipped a file, didn’t run the tests | A higher effort |
| Claude had the context, tried, and was still wrong — subtle bug, unfamiliar domain | A larger model, such as opus |
| Routine work you can describe precisely | A smaller model, such as sonnet, and a lower effort |
| Deep planning, then routine execution | opusplan — Opus in plan mode, Sonnet to carry it out |
That table is the discipline; everything else is mechanics. Where a choice applies decides how you set it:
| Scope | Model | Effort |
|---|---|---|
| This session only | /model, then s on a row | s in the /effort slider |
| Your default, going forward | /model, Enter on a row | /effort <level> |
| One turn | — | ultrathink in the prompt |
| One skill or subagent | model: in its frontmatter | effort: in its frontmatter |
We hold this stance because the knobs are seductive. Every engineer we work with has a story about turning effort to max and shipping the same bug — max lasts for the session and can overthink; the diagnosis table would have said "the prompt never named the file". Treat model and effort as you treat permissions: defaults you change deliberately, with a reason you could write down.
03The walkthrough
- 01Start claude and run /status — the model — then /effort status: it prints the effort level in force.
- 02Switch the model for this session only: /model, move to Sonnet, press s. /status shows the change; your default for new sessions is untouched. Press Enter instead and it would have become your default — the two keys are the whole scope distinction.
- 03Ask for deeper reasoning on one turn, without touching the level: "ultrathink: which links could our checker report as broken although their file exists?" Claude Code recognizes the word anywhere in the prompt and requests deeper reasoning for that turn only. "Think hard" and friends are ordinary text.
- 04Give one task its own effort. five-whys from lesson 1 traces a cause from evidence — verification is the job. Add effort: high to its frontmatter and the skill runs at high while it is active, over the session’s level.
04Your turn
Give a routine task the smallest settings that do the job. Write .claude/skills/changelog/SKILL.md: a description saying it adds a one-line entry for the staged changes to CHANGELOG.md when asked; model: sonnet and effort: low in the frontmatter (routine work, precisely describable — the table’s fourth row); disable-model-invocation: true (it edits a file on request, not on a guess). The body: read the staged changes with git diff --staged, add one "- " item under ## Unreleased in CHANGELOG.md — creating the file and heading if absent — and change no other file. Stage a small change, run /changelog, approve the edit, and commit the change, the changelog and the skill together.
Watch the cache. Switching models mid-session, and on most models changing the effort, makes the next request read the whole conversation with no cache hits; while the cache is warm Claude Code asks you to confirm the switch. It is a small friction that exists to make the change deliberate — let it.
Claude read the right files and still got a subtle concurrency bug wrong. The table says…
- AA larger model, such as opus
- BA higher effort
- CRewrite the prompt
→Check your answer
Context was there and the trying was there; capability is the remaining suspect. That is the "larger model" row — the rarest, and the most over-used.
How do you set an effort for this session only, leaving your default alone?
- A/effort high
- Bs in the /effort slider
- Ceffort: high in CLAUDE.md
→Check your answer
s applies the level to this session; the typed command saves it as your default. There is no effort: key for CLAUDE.md — frontmatter is for skills and subagents.
What does ultrathink do?
- ARaises the session effort to max
- BTurns on Opus for one turn
- CRequests deeper reasoning on that one turn, level unchanged
→Check your answer
One turn, no lasting change — and other phrases like "think hard" pass through as ordinary text.