Skip to content
Go back

How to make Claude Code think harder (literally)

Updated:  at  05:00 AM

Updated February 2026 for Opus 4.6. The original post was written for Opus 4.5, which used manual thinking budgets. Opus 4.6 introduced adaptive thinking and the effort parameter, which changes how this works under the hood. The trigger words still work in Claude Code, but the system behind them is different now. Details below.

I toggle thinking mode with Tab constantly. On for planning, off for quick edits. It works great until it doesn’t.

Sometimes Claude gives me a plan that’s… fine. Surface level. Missing the edge cases I know are going to bite me later. That’s when I discovered the magic words.

Table of contents

Open Table of contents

The thinking trigger words

Claude Code has specific phrases that unlock progressively deeper reasoning:

Just drop them naturally into your prompt: “Ultrathink about why this auth flow keeps failing.”

Important caveat: these are a Claude Code feature, not a general Claude API or claude.ai thing. They work because Claude Code’s system prompt maps these words to specific thinking configurations. If you’re using the API directly, you need to set thinking parameters yourself (more on that below).

What changed with Opus 4.6

When I originally wrote this post, Claude used manual thinking budgets. You (or Claude Code on your behalf) would set a budget_tokens value that capped how much internal reasoning Claude could do. The trigger words mapped to progressively larger budgets.

Opus 4.6 replaced that with two new concepts:

Adaptive thinking (thinking: {type: "adaptive"}) lets Claude decide on its own whether a problem needs deep reasoning. Ask it “what’s 2+2?” and it skips thinking entirely. Ask it to debug a race condition across three async services and it thinks extensively. No manual budget needed.

The effort parameter (effort: "low" | "medium" | "high" | "max") is the new knob for controlling how hard Claude works. It affects everything: thinking depth, number of tool calls, response length. At high (the default), Claude almost always thinks. At low, it skips thinking for simple stuff and keeps responses tight.

Here’s how the old and new map (roughly):

Trigger wordOld system (Opus 4.5)New system (Opus 4.6)
(no trigger)Default thinking budgeteffort: "high" (adaptive)
thinkSmall budget boostNudge toward thinking
think hardMedium budgeteffort: "high" with emphasis
think harderLarge budgetLeaning toward effort: "max"
ultrathinkMaximum budgeteffort: "max" territory

The trigger words still work in Claude Code. But behind the scenes, the model is smarter about allocating its own thinking now. You’re less likely to need them because adaptive thinking handles most cases automatically.

When to still reach for ultrathink

Even with adaptive thinking, I still use the triggers. Here’s when:

Debugging. There are so many variables that get overlooked in a quick pass. Race conditions, state mutations, that one edge case you forgot about three files ago. Making Claude actually think through the problem instead of pattern-matching to a solution changes everything. It’s like the difference between asking your kid “did you clean your room?” and “show me under the bed.”

Architecture decisions. When I’m asking Claude to evaluate tradeoffs between approaches, I want it to actually weigh the options, not just pick the first reasonable one.

When it’s not clicking. I’ve given context and examples and it’s still off. That’s when I stop treating Claude like a tool and start treating it like a coworker. “Think with me here, what are we missing?” Sounds silly. Works surprisingly well.

When I would have said “be thorough” in the old days. If you catch yourself adding “make sure to consider all edge cases” or “be comprehensive,” just say “ultrathink” instead. It’s more direct and the model responds to it better.

If you’re using the API directly

The trigger words are a Claude Code convenience. If you’re building with the API, here’s what to actually set:

# Opus 4.6 - adaptive thinking (recommended)
response = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=16000,
    thinking={"type": "adaptive"},
    output_config={"effort": "high"},  # or "max", "medium", "low"
    messages=[{"role": "user", "content": "..."}],
)

# Older models - manual thinking budget
response = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=16000,
    thinking={"type": "enabled", "budget_tokens": 10000},
    messages=[{"role": "user", "content": "..."}],
)

The budget_tokens approach still works on Opus 4.6 but it’s deprecated. Anthropic says they’ll remove it in a future release.1

One more thing: interleaved thinking

This didn’t exist when I wrote the original post. With adaptive thinking on Opus 4.6, Claude can think between tool calls automatically. It reads a file, thinks about what it found, decides what to do next, calls another tool, thinks again.

On older models you needed a beta header for this. On 4.6 with adaptive thinking, it just happens. This is a big deal for Claude Code specifically, since most of what it does is chain tool calls together (read files, edit files, run commands). The model is reasoning between each step instead of planning everything upfront and hoping for the best.

The bottom line

The trigger words still work. Use them. But Opus 4.6 is genuinely smarter about when to think deeply on its own. The biggest shift is that you don’t have to micromanage the model’s reasoning anymore. You can focus on writing good prompts (context, specifics, examples) and let adaptive thinking handle the rest. Save “ultrathink” for when you really mean it.2

Want more Claude Code productivity tips? Check out my full breakdown of background tasks, MCPs, and my updated workflow.

Footnotes

  1. Adaptive Thinking - Anthropic Docs

  2. Effort Parameter - Anthropic Docs

New posts, shipping stories, and nerdy links straight to your inbox.

Real insights. Zero filler.



Previous Post
Claude Code's hidden conversation history (and how to actually use it)
Next Post
Stop repeating yourself with Claude Code's # shortcut