How to Prompt Correctly in Claude Code: Effort Levels, Verification Loops and What to Delete From Your Prompts
Why Opus 5 overthinks, feels slow or seems to perform worse than before - and how the right effort level, disciplined context management and verification loops give you consistently better results in Claude Code.
If you want consistently good results in Claude Code, the thing to tune is not the wording of your prompt but three others: the effort level, the context, and a check the model can run itself. When Opus 5 overthinks a long, complex task, the fix is usually counterintuitive - not more thinking, but less: run the same task at medium or low effort.
Since the Opus 5 release the same questions keep coming up: why does the model perform worse than its predecessor? Why is it so slow? Why does it overthink simple things? And why did Claude Code get slower in the first place? Every one of those has a documented answer - and in almost all cases the cause is not the model but prompts, configurations and habits carried over from the era of older models. This article sorts out the causes and describes the setup we use ourselves.
What actually changed with Claude Opus 5?
Opus 5 is not an incremental update, and several changes bear directly on how prompts behave:
| Change | What it means for your work |
|---|---|
| Thinking is on by default | The model decides when and how deeply to think on each turn; effort is the control |
| 1M token context window (default and maximum) | Long sessions are possible - but context discipline still decides quality |
| Five effort levels: low, medium, high, xhigh, max | Effort has become the primary cost and latency control |
| Verifies its own work unprompted | Legacy verification instructions now cause over-verification |
| Longer responses and longer written documents | Brevity has to be requested explicitly |
| Delegates to subagents more readily | Without guardrails this multiplies cost and time |
Thinking can only be disabled up to effort high | At xhigh and max the API returns a 400 |
The key consequence is in Anthropic's own documentation: Opus 5 converts additional effort into better results more reliably than any earlier Opus model - which means the level you pick carries more weight than before, in both directions.
Why does Opus 5 perform worse than the previous model?
Because many prompts are still written for a model that no longer exists. The following five patterns were helpful on Opus 4.x and are actively harmful on Opus 5:
| Pattern in the prompt | Why it hurts on Opus 5 |
|---|---|
| "Double-check your answer", "re-verify before responding" | Opus 5 verifies anyway; the instruction compounds and produces over-verification with no quality gain |
| "Include a final verification step", "use a subagent to verify" | Same effect, plus unnecessary subagent cost |
| "Only report high-severity issues", "be conservative" | Followed literally: the model reports less than it found |
| "Keep responses under X words" in the system prompt | Hard verbosity limits measurably cost quality (see the postmortem below) |
| Effort defaults carried over from the previous model | The levels behave differently on Opus 5; Anthropic explicitly recommends a fresh effort sweep |
There is also a behaviour that quickly reads as "worse quality": scope expansion. Opus 5 adds steps that weren't requested and applies its own judgement about what the task should be. On narrow tasks that isn't a feature, it's a diff nobody wanted to review. The counter-measure is an explicit scope rule in the prompt or in CLAUDE.md:
Deliver what was asked, at the scope intended. Make routine
judgment calls yourself, and check in only when different
readings of the request would lead to materially different
work. If a better approach exists, say so in a sentence and
then do what was asked anyway.
Does Opus 5 overthink - and what helps?
Yes. And the most effective counter-move is to solve the task at a lower level.
The pattern is well documented: on long, complex tasks at high effort levels, the model starts second-guessing obviously correct approaches, initiating extra refactors and making changes outside the assigned scope. Anthropic already notes for the previous models that max can lead to overthinking on structured or less intelligence-sensitive tasks; independent benchmarks report a coding-performance optimum for Opus 5 in the middle of the effort range, with diminishing to negative returns above it.
The practical rule: when Opus 5 overthinks a long, complex task, run the same task at medium or low. That is not a quality compromise - it is frequently a quality improvement, and it saves a substantial share of the tokens and the waiting time along the way.
| Effort level | What it's for | When to pick it |
|---|---|---|
low | Maximum efficiency, significant token savings | Clearly scoped single tasks, subagents, classification, fast iteration |
medium | Balance of speed, cost and quality | The best starting point for routine coding and agentic workflows |
high (default) | High capability | Complex reasoning, hard bugs, unfamiliar codebases |
xhigh | Extended capability for long-horizon work | Agentic tasks over 30 minutes, large refactors, wide tool loops |
max | Maximum with no token constraints | Only when the task justifies unconstrained token spending |
Two details cause recurring confusion:
- Effort is a behavioural signal, not a token budget. Even at
lowthe model still thinks on sufficiently hard problems - just less deeply than athigh. - Effort does not control response length. On Opus 5, lowering effort does not reliably shorten the visible answer. If you want shorter responses, ask for them: "Keep responses focused, brief and concise. Keep disclaimers short and spend most of the response on the main answer."
A third point matters for anyone tempted to disable thinking to save cost: on Opus 5 that is only possible up to effort high, and with thinking disabled two artefacts occasionally appear - tool calls written as text instead of a structured call, and internal XML tags leaking into the visible response. Thinking enabled at low beats thinking disabled at comparable cost.
Why is Opus 5 so slow?
A fair question, but it rarely has a single cause. In order of frequency:
- Effort is set to
highorxhighwheremediumwould do. The biggest and fastest-acting lever. Switch it in Claude Code with/effort. - The context is full. The context window holds every message, every file read and every command output. Performance degrades as it fills - the model starts "forgetting" earlier instructions and making more mistakes. Use
/clearbetween unrelated tasks and/compact <focus>at breakpoints. - Research runs in the main context instead of subagents. A broad codebase investigation reads dozens of files - all of which land in your context. Subagents have their own context window and report back only a summary.
- Too many MCP servers and tools are active. Every tool schema costs context on every turn.
- Unrequested subagent delegation. Opus 5 delegates readily; on small tasks that multiplies cost and time. A rule in CLAUDE.md helps: delegate only for large, genuinely independent tracks of work, and never to double-check its own output.
- Outdated version or a platform incident.
claude --versionandclaude update, then/doctor, then the status page.
Why did Claude Code get slower and worse?
For March to April 2026 there is an official and unusually transparent answer. In a postmortem published on 23 April 2026, Anthropic disclosed three independent product changes that overlapped, each affecting a different slice of traffic:
- 4 March: Claude Code's default reasoning effort was lowered from
hightomedium, in response to very long thinking times that made the UI appear frozen. Anthropic later called this the wrong trade-off and reverted it. - 26 March: A change was meant to clear older thinking once from sessions idle for more than an hour. A bug made it happen on every turn for the rest of the session - Claude seemed forgetful and repetitive. Fixed on 10 April.
- 16 April: A verbosity limit in the system prompt ("keep text between tool calls to 25 words or less", "keep final responses to 100 words or less"). Ablations run during the investigation showed roughly a 3% quality drop. Reverted on 20 April.
Model weights and the API layer were unaffected. For everyday practice there is a lesson in this that outlives the incident: hard length caps in a system prompt cost quality. If Anthropic's own verbosity limit measurably hurt, the same instruction in your CLAUDE.md does too. Control length through style preferences ("focused and concise"), not through hard word ceilings on the work itself.
What does a good prompt in Claude Code look like?
The biggest difference is not the phrasing but the amount of usable context and a verifiable end state:
| Instead of | Better |
|---|---|
| "Add tests for foo.py" | "Write a test for foo.py covering the edge case where the user is logged out. Avoid mocks." |
| "Fix the login bug" | "Users report that login fails after session timeout. Check the auth flow in src/auth/, especially token refresh. Write a failing test that reproduces the issue, then fix it." |
| "Add a calendar widget" | "Look at how existing widgets are implemented on the home page - HotDogWidget.php is a good example. Follow that pattern. No new libraries." |
| "The build is failing" | "The build fails with this error: [error]. Fix it and verify the build succeeds. Address the root cause, don't suppress the error." |
| "Make the dashboard look better" | "[screenshot] Implement this design. Then take a screenshot of the result, compare it to the original, list the differences and fix them." |
For larger work the order is explore → plan → code → commit: read and understand in plan mode first, then have a plan written, then implement. For small, clearly scoped changes plan mode is pure overhead - if you can describe the diff in one sentence, skip it.
Opus 5 is at its strongest when it gets the complete task specification up front and is then left to run. For bigger features a two-stage approach pays off: in a first session let it interview you ("Interview me in detail about technical implementation, UX, edge cases and trade-offs, then write a complete spec to SPEC.md"), then implement the spec in a second, fresh session. The new session has clean context, and you have a written reference document.
Verification loops: the lever with the largest effect
Claude stops when the work looks done. Without a check it can run itself, "looks done" is the only signal available - and you are the verification loop: every mistake waits for you to notice it.
A verification loop is anything that returns a readable pass or fail: a test suite, a build exit code, a linter, a script that diffs output against a fixture, a browser screenshot compared against a design. There are four escalation levels for how hard that check gates the end of a turn:
| Level | Implementation | When it makes sense |
|---|---|---|
| In the prompt | "...run the tests and iterate until they pass" | Works today, on any task |
| As a skill | Capture the recurring check in .claude/skills/ | Project-specific rules no linter knows |
| As a session goal or hook | A Stop hook blocks the turn from ending until the script passes | Unattended runs |
| As a second opinion | A review subagent in fresh context, looking only at the diff | Before merging, after long autonomous runs |
The skill route compounds the most: you write the procedure down once in plain language - the way you'd hand it to a new teammate on day one - and save it as a SKILL.md. In Building verification loops in Claude Code with Skills Anthropic describes four deployment models: standalone (invoked manually, e.g. for security audits), embedded (runs automatically inside a producing skill's workflow), chained (one skill triggers the next) and PR-integrated (runs in GitHub Actions on every pull request). The practical entry point: for one week, note down which correction you keep giving Claude by hand - that is exactly what belongs in a skill.
What matters throughout is evidence: have it show the test output, the command it ran, or the screenshot, instead of trusting a "done". Reviewing evidence is faster than re-running the verification yourself - and it works for sessions you weren't watching.
Context is the scarcest resource
Nearly every Claude Code best practice follows from a single observation: the context window fills up fast, and performance degrades as it fills. One debugging session can generate tens of thousands of tokens. Four habits make the difference:
/clearbetween unrelated tasks. The "kitchen sink session", where you jump between three topics, is the most common self-inflicted wound.- Stop after two failed corrections. If you've corrected the same issue twice and it's still wrong, the context is polluted with failed approaches.
/clearplus a better initial prompt that incorporates what you learned almost always beats a long session with accumulated corrections. - Move research into subagents. "Use subagents to investigate how our auth system handles token refresh" keeps the main context free for implementation.
- Scope investigations narrowly. A vague "have a look at this" leads to hundreds of files being read.
What belongs in CLAUDE.md - and what doesn't
CLAUDE.md is loaded at the start of every session, so every line costs context permanently, and a bloated file causes real rules to get lost. The test for each line: would removing this cause Claude to make mistakes? If not, cut it.
| Include | Exclude |
|---|---|
| Bash commands Claude can't guess | Anything discoverable by reading the code |
| Code style rules that differ from defaults | Language conventions the model already knows |
| Test runners and testing instructions | Detailed API documentation (link to it instead) |
| Repository etiquette (branch naming, PR conventions) | Information that changes frequently |
| Architectural decisions specific to this project | File-by-file descriptions of the codebase |
| Environment quirks and non-obvious gotchas | Self-evident advice like "write clean code" |
| Scope and delegation guardrails for Opus 5 | Verification instructions ("double-check your work") |
If Claude keeps doing something wrong despite a rule against it, the file is usually too long and the rule is drowning in noise. Knowledge that is only needed sometimes doesn't belong in CLAUDE.md but in skills - Claude loads those on demand without weighing down every session.
A prompt template to copy
For a typical implementation task this structure covers the four things that matter: location, pattern, scope and check.
Goal: [what should work at the end, in one sentence]
Context:
- Relevant files: @src/... , @tests/...
- Follow the existing pattern in [file]
- Out of scope: [what must not be touched]
Approach:
- Read and understand first, then implement
- No new dependencies
Verification:
- Write a failing test that reproduces the problem first
- Run [command] and iterate until it passes
- Show me the test output, not just a success message
What is deliberately missing from this template: "double-check your work", "be thorough", "think carefully", "you are a senior engineer". Role prompts and double-check instructions add nothing on current models - and the verification instructions actively hurt on Opus 5.
Troubleshooting: symptom, cause, fix
| Symptom | Likely cause | Fix |
|---|---|---|
| Overthinks simple tasks, refactors unprompted | Effort too high for the task | /effort medium or low; add a scope rule to the prompt |
| Extremely long answers | Opus 5's verbosity default | Ask for brevity explicitly (effort won't do it) |
| Seems forgetful, repeats itself | Context full or session too long | /clear, /compact <focus>, move research to subagents |
| Reports too little in review | "Be conservative" phrasing in the prompt | Have it report everything, filter in a second pass |
| Burns tokens without progress | Over-verification from legacy instructions | Delete verification and double-check sentences |
| Spawns too many subagents | Opus 5's delegation default | Delegation guardrail in CLAUDE.md, cap spawn counts |
| Plausible code that misses edge cases | No verification loop | Test cases in the prompt, the check as a skill or hook |
| Generally slow, tool calls hang | Version, MCP load or platform | claude update, /doctor, trim MCP servers, check status page |
Conclusion
The three most common complaints about Opus 5 - too slow, overthinks, worse than before - share one root: the model works more thoroughly and more independently than its predecessors, and legacy prompts amplify exactly what it already does. Delete the verification and double-check sentences, constrain scope explicitly, treat the effort level as a primary control instead of leaving it at the default, and give the model a check it can run itself - and the same model produces markedly better and faster results.
The shortest rule of thumb for daily work: if it overthinks, drop to medium. If it doesn't know enough, move up to the larger model. And always give it something that tells it when it's actually done.
Want AI-assisted development and automation to be a reliable process in your company rather than an experiment? Let's talk.
Sources
- Anthropic - Prompting Claude Opus 5 - verbosity, scope, over-verification, subagent delegation, thinking disabled.
- Anthropic - What's new in Claude Opus 5 - thinking on by default, 1M token context, effort restriction, pricing.
- Anthropic - Effort - the five levels, Opus 5 recommendations, effort with tool use and prompt caching.
- Anthropic - Best practices for Claude Code - verification, plan mode, context management, CLAUDE.md, failure patterns.
- Anthropic - Building verification loops in Claude Code with Skills - the four deployment models for verification skills.
- Anthropic - An update on recent Claude Code quality reports (23 April 2026) - effort default, caching bug, verbosity limit with ~3% quality drop.
- Anthropic - Choosing a Claude model and effort level in Claude Code - model versus effort, the diagnostic question.
- Anthropic - Prompt engineering best practices for 2026 - what is less necessary today (XML tags, role prompts) and what still holds.
- SitePoint - Claude Opus 5 is most efficient at medium effort (FrontierCode) - independent benchmark showing a performance optimum at medium effort.
- InfoQ - Anthropic traces six weeks of Claude Code quality complaints to three product changes - context on the postmortem.
Frequently asked questions
- Why is Opus 5 suddenly performing worse than the previous model?
- In most cases it isn't the model, it's prompts written for an older one. Opus 5 verifies its own work without being told. Instructions like 'double-check your answer', 'include a final verification step' or 'use a subagent to verify' compound with that behaviour and, per Anthropic, cause over-verification: more tokens, more time, no quality gain. Restrictive review phrasing has a similar effect ('only report high-severity issues'): Opus 5 follows it literally and reports less than it found. If you migrated from an earlier model, delete those lines from your system prompt and CLAUDE.md.
- Why is Opus 5 so slow?
- Three causes dominate. First: thinking is on by default on Opus 5 and the effort level defaults to 'high', so the model thinks longer than earlier models running without thinking. Second: context fills up during long sessions, and every file read and tool output adds latency and error rate. Third: Opus 5 delegates to subagents more readily and writes longer responses. The fastest lever is the effort level: 'medium' or 'low' cuts tokens and latency substantially, often with no measurable quality loss.
- Does Opus 5 overthink, and what helps?
- Yes, especially on long, complex tasks and at high effort levels: it second-guesses obviously correct approaches, expands the task with steps nobody asked for and refactors code outside the given scope. The most effective counter-move is to solve the same task at 'medium' or 'low' effort instead of 'high' or 'xhigh'. Anthropic explicitly recommends using 'low' and 'medium' liberally as the primary control for token cost and response time wherever quality holds. Constraining scope explicitly in the prompt helps on top of that.
- Why did Claude Code get slower?
- For March to April 2026 there is a documented answer: in an April 23 postmortem Anthropic disclosed three overlapping product changes - an effort default lowered to 'medium', a caching bug that kept clearing older thinking every turn in long sessions, and a system prompt verbosity limit that ablations measured at roughly a 3% quality drop. All three were resolved by April 20. If you're experiencing slowness today, check your version ('claude update'), the selected model and effort level, context usage, and how many MCP servers are active.
- Which effort level should I use in Claude Code?
- The default is 'high'. Anthropic recommends starting there and adjusting in both directions: 'xhigh' for demanding coding and agentic work, 'max' only when the task justifies unconstrained token spending, and 'low' or 'medium' liberally wherever quality holds. In practice 'medium' is an excellent starting point for routine work; independent benchmarks report a coding-performance optimum at medium effort rather than at the top of the ladder. Important: effort controls how much the model thinks, not how long its visible answer is - brevity has to be requested separately.
- What is a verification loop and why is it the biggest lever?
- A verification loop is a check the model can run itself that returns an unambiguous pass or fail: a test suite, a build exit code, a linter, a script that diffs output against a fixture, or a screenshot comparison. Without one, 'looks done' is the only signal available and you become the verification loop. With one, the loop closes on its own: Claude works, runs the check, reads the result and iterates until it passes. Recurring checks can be captured as skills in '.claude/skills/' and run automatically.
