Claude Code Subagent Model: Put Explore on Haiku 5.5

TL;DR
Claude Code's Explore subagent runs on your main model, and CLAUDE_CODE_SUBAGENT_MODEL alone won't move it. Three ways to put it on Haiku 5.5, with test runs.
To run Claude Code's Explore subagent on Haiku 5.5, define your own subagent named Explore with model: haiku, because the built-in Explore runs on your main conversation's model and CLAUDE_CODE_SUBAGENT_MODEL on its own does not move it. If you want every subagent on Haiku, Explore and Plan included, set CLAUDE_CODE_SUBAGENT_MODEL=haiku together with CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1. Keep subagents that edit code on Sonnet 5.5 or your main model.
Last updated: October 9, 2026. Model resolution checked against the Claude Code sub-agents and model-configuration docs, then confirmed with five headless runs on Claude Code v2.1.295 (Sonnet 5.5 as the main model); prices from Anthropic's pricing page on this date.
The question went around this week because the arithmetic got loud. Haiku 5.5 launched on October 7 at $0.10 input and $0.50 output per million tokens for prompts up to 100K, and a r/ClaudeCode thread titled "Haiku 5.5 is 40x cheaper than Opus 5.5. Your Explore subagent is probably still running on Opus" made the follow-up point: most people never changed the model their subagents run on. The headline is right if your session runs on Opus 5.5. The fix is less obvious than it looks, because the setting most people reach for first skips the one subagent they actually wanted to move.
The short answer#
| You want | Do this | What it does not touch |
|---|---|---|
| Only Explore on Haiku (recommended) | A user or project subagent named Explore with model: haiku | Plan, general-purpose, your custom subagents |
| Every subagent without its own model on Haiku | CLAUDE_CODE_SUBAGENT_MODEL=haiku | Built-in Explore and Plan, any subagent with a model field, models Claude passes per call |
| Literally every subagent, teammate and workflow agent on Haiku | CLAUDE_CODE_SUBAGENT_MODEL=haiku plus CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1 | Forks, and skills that run in a subagent with model: inherit |
| One subagent on one model, once | Ask Claude to run that subagent on Haiku; it passes a per-invocation model | Anything after that call (except the same subagent when resumed) |
Everything below is the why, the test runs, and the cases where moving a subagent to Haiku is the wrong call.
Which model each built-in subagent runs on#
From the sub-agents documentation, as of October 9, 2026:
| Built-in | Default model | Tools | Moved by CLAUDE_CODE_SUBAGENT_MODEL alone? |
|---|---|---|---|
| Explore | Main conversation's model. With a Fable main model on a subscription, Console account or ANTHROPIC_BASE_URL gateway, it runs on whatever opus resolves to | Read-only | No |
| Plan | Main conversation's model | Read-only | No |
| general-purpose | CLAUDE_CODE_SUBAGENT_MODEL if set, else the main model | All subagent tools | Yes |
| claude (catch-all) | Follows the normal model order | All subagent tools | Yes |
| claude-code-guide | Haiku | Docs lookup | Not needed |
| statusline-setup | Sonnet | Status line config | Not needed |
So the Reddit title is accurate for two kinds of user: anyone whose main model is Opus 5.5, and anyone running a Fable model on a subscription, where Explore drops to Opus rather than Fable but not to Haiku. If your main model is Sonnet 5.5, Explore runs on Sonnet 5.5. Our older subagents vs agent teams vs workflows comparison listed Explore as a Haiku agent when we wrote it in June; that no longer matches the docs, and we have corrected it there.
One more trap from the model configuration page: switching models with /model also moves every subagent that inherits the main model. Switch to Opus for a hard problem and the Explore passes Claude fires off during that problem run on Opus too.
How Claude Code resolves a subagent's model#
When Claude starts a subagent, Claude Code picks the model in this order:
- The per-invocation
modelparameter Claude passes on the Agent tool call. - The subagent definition's
modelfrontmatter (inheritmeans the main model). CLAUDE_CODE_SUBAGENT_MODEL, if set to an alias or model ID.- The main conversation's model.
Three modifiers sit on top. A mod's agent.spawn hook can set a model, and that replaces the per-invocation parameter (our Claude Code mods guide covers what mods can intercept). CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1 (v2.1.257 or later) makes the environment variable win over the frontmatter and the per-invocation parameter. And every value is checked against your organization's availableModels allowlist, with a blocked family alias falling back to the newest permitted version of that family.
The ordering changed in v2.1.251. Before that, CLAUDE_CODE_SUBAGENT_MODEL came first and overrode everything, which is why older blog posts and forum answers say the variable alone is enough. On current versions it is a default, not an override.
What we tested#
Five claude -p runs on Claude Code v2.1.295, main model Sonnet 5.5, each asking Claude to delegate one lookup to a subagent: find which file under scripts/seo-loop in this site's repository defines the function isBlocked. It is a slightly tricky question, because the directory only re-exports the function from a file one level up. We read the model off each subagent message in the --output-format stream-json --verbose stream, and the cost off the run's per-model usage.
# Run 2: the variable alone
CLAUDE_CODE_SUBAGENT_MODEL=haiku claude -p "Use the Explore subagent with quick thoroughness to find which file under scripts/seo-loop defines the function isBlocked. Do not search yourself; delegate to Explore, then report its answer in one line." --model sonnet --output-format stream-json --verbose --max-turns 6
| Run | Configuration | Subagent | Model it ran on | Subagent tokens | Time | Answer |
|---|---|---|---|---|---|---|
| 1 | Nothing set | Explore | Sonnet 5.5 | 19,059 | 7.8s | Found the re-export, did not follow it to the definition |
| 2 | CLAUDE_CODE_SUBAGENT_MODEL=haiku | Explore | Sonnet 5.5 | 18,249 | 6.5s | Same partial answer |
| 3 | Variable plus CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1 | Explore | Haiku 5.5 | 18,656 | 5.3s | Correct file and line |
| 4 | Custom Explore via --agents, model: haiku, tools Read/Grep/Glob | Explore | Haiku 5.5 | 14,088 | 3.8s | Correct file, line and signature |
| 5 | CLAUDE_CODE_SUBAGENT_MODEL=haiku | general-purpose | Haiku 5.5 | 34,170 | 5.3s | Correct file and line |
Runs 1 and 2 are the point of the exercise: setting the variable changed nothing for Explore. Run 5 shows the variable does work for the general-purpose agent, and its larger token count fits the docs, which say general-purpose loads your CLAUDE.md and the git status snapshot while Explore and Plan skip both.
Do not read the answer column as "Haiku is better at search". It is one easy task per configuration, and the Sonnet runs stopping at the re-export may be thoroughness level as much as model. What the runs do establish is cost and speed on a real lookup. The Haiku legs billed $0.002 to $0.005 each. Priced at the same token counts, run 4's subagent would have cost about $0.044 on Sonnet 5.5 and $0.088 on Opus 5.5, roughly 19x and 38x more. That is an approximation, since another model would not spend exactly the same tokens, but the ratio comes straight from the price sheet.
Option 1: Override Explore with your own subagent#
This is the change we would make first. A user or project subagent named Explore replaces the built-in one and keeps its own model field, per the docs. Put it in .claude/agents/ to share it with your team through git, or in ~/.claude/agents/ for every project on your machine:
---
name: Explore
description: Fast read-only codebase search. Use to find files, symbols, call sites and config without making changes.
tools: Read, Grep, Glob
model: haiku
omitClaudeMd: true
---
You are a read-only code search agent. Find what was asked using Grep, Glob and Read.
Follow re-exports and imports to the real definition. Return a short report with
file paths and line numbers. Never edit files.
Run 4 used the same definition passed as JSON through --agents; the file form above follows the documented frontmatter and adds omitClaudeMd: true (v2.1.271 or later) so it skips CLAUDE.md the way the built-in Explore does. We did not test the file version separately. Two consequences of overriding: your system prompt replaces the built-in Explore prompt entirely, so say what good search looks like, and if you leave out tools the agent inherits every subagent tool, Edit and Write included. If the agents folder did not exist when the session started, restart once so Claude Code picks it up.
Option 2: A default for everything else#
{
"env": {
"CLAUDE_CODE_SUBAGENT_MODEL": "haiku"
}
}
In ~/.claude/settings.json (or a project settings file; our settings.json guide covers which scope wins), this moves general-purpose, the claude catch-all, agent team teammates, workflow agents and any custom subagent without a model field. That is a bigger change than it sounds, because general-purpose is the agent Claude uses for multi-step work that edits code. If your custom subagents all declare a model, the variable mostly lands on general-purpose, which is exactly the one we would leave alone.
Option 3: Force one model everywhere#
{
"env": {
"CLAUDE_CODE_SUBAGENT_MODEL": "haiku",
"CLAUDE_CODE_SUBAGENT_MODEL_FORCE": "1"
}
}
This is the documented way to put every subagent, teammate and workflow agent on one model, and run 3 confirms it moves the built-in Explore. While it is on, Claude Code ignores model fields in subagent definitions and Claude cannot pass a per-call model. Forks and skills running in a subagent with model: inherit stay on the main model. Setting only the force flag, without a model, keeps everything on the main model. Use this for cost ceilings in CI or headless fleets, not as your daily interactive setup.
Per task: ask for it#
The Agent tool takes a per-invocation model parameter, and since v2.1.292 an effort parameter too. In practice you can write "use a Haiku subagent to list every call site of X" and Claude passes the model for that one call. A subagent definition can also pin effort; Haiku 5.5 defaults to medium, and our effort levels explainer covers what each level trades. CLAUDE_CODE_EFFORT_LEVEL overrides both.
To confirm what a subagent ran on in an interactive session, run /tasks while it is running; the row names the model and any effort override (v2.1.242 or later). In headless runs, the stream-json output carries the model on every subagent message, which is how we read the table above.
What it saves#
List prices per million tokens on the Claude API, checked October 9, 2026:
| Haiku 5.5 (up to 100K) | Haiku 5.5 (over 100K) | Sonnet 5.5 | Opus 5.5 | |
|---|---|---|---|---|
| Input | $0.10 | $0.50 | $2.00 | $4.00 |
| Output | $0.50 | $2.50 | $10.00 | $20.00 |
| Cache read | $0.01 | $0.05 | $0.10 | $0.20 |
| 5-minute cache write | $0.125 | $0.625 | $2.50 | $5.00 |
Fresh tokens are 40x cheaper than Opus 5.5 and 20x cheaper than Sonnet 5.5; cache reads are 20x and 10x. The 100K line matters less for Explore than for long-running workers, because each Explore call starts with a fresh context; our five runs used 14K to 34K tokens. A "very thorough" pass over a large monorepo can cross it, and even then Haiku's upper tier charges a quarter of Sonnet's input and output rates. The longer-context tradeoffs, and how Haiku compares with GPT-6 Luna for the same slot, are in Haiku 5.5 vs GPT-6 Luna as a subagent.
On a Pro or Max plan you see usage limits rather than a bill, but the same tokens are being spent; our usage limits playbook covers how to stretch a plan. If you run several sessions or agents in parallel, the multiplier stacks: the fleet cost math shows how fast read-heavy helpers add up.
When to keep a subagent off Haiku#
- Anything that edits code. Anthropic reports 39.2% on Terminal-Bench 4.0 for Haiku 5.5 against 70.6% for Sonnet 5.5, and says Sonnet and Opus remain the better choice for complex agentic coding. Keep general-purpose and your implementation subagents on Sonnet 5.5 or
inherit. - Plan. Plan mode exists to get the plan right before edits start. Leave it on the main model unless you are forcing everything for cost reasons.
- Reviewers and verifiers. A review subagent's job is judgment. Our Opus 5.5 vs Sonnet 5.5 vs Haiku 5.5 page has the routing rule we use: Haiku for bounded, read-heavy work that returns a short report.
- Questions where a miss is expensive. If a wrong "this function is unused" from Explore leads the main agent to delete it, the savings vanish. Make the subagent prompt demand file paths and line numbers so the main model can check.
Gotchas by provider and version#
- Version. The
haikualias resolves to Haiku 5.5 only on Claude Code v2.1.293 or later. Runclaude updatefirst. - Provider. On the Anthropic API,
haikumeans Haiku 5.5. On Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry and Claude Platform on AWS, the same alias still resolves to Haiku 4.5, which costs 10x more per input token than Haiku 5.5's lower tier. Use a full model ID, or pin the alias withANTHROPIC_DEFAULT_HAIKU_MODEL, once your provider serves Haiku 5.5. - Family aliases. If your main model is Opus and a subagent says
model: opus, the subagent runs on your exact main model,[1m]suffix included, rather than whateveropuspoints to. An alias inCLAUDE_CODE_SUBAGENT_MODELalways resolves to the alias target. - Allowlists. If your organization's
availableModelsblocks the model you named, Claude Code substitutes another one and, in interactive sessions, shows a warning naming both. Check/tasksbefore assuming the switch took. - Explore and Plan are one-shot. They return no agent ID, so Claude cannot resume them. A custom subagent with a different name can be resumed; one named
Exploreis a definition override, and we have not checked whether it inherits the built-in's one-shot behaviour.
The strategic read#
Anthropic priced Haiku 5.5 to be the worker under Opus and Sonnet, and its own announcement pitches it as a subagent. Claude Code's defaults, though, keep Explore on whatever model you chose for the main conversation, which favours answer quality over cost. Most users never open the subagent docs, so for them the effective price of Claude Code's exploration is set by that default rather than by the new price sheet.
That makes this a configuration story as much as a model story. Teams that check a small .claude/agents/explore.md into their repo get the Haiku economics on every developer's machine without a policy change. The second-order effect to watch is whether Anthropic moves the default back (Explore was described as a Haiku agent as recently as June): if Haiku 5.5's search quality holds up in practice, a default that spends 20x to 40x more on read-only lookups gets harder to justify.
What people are actually saying#
- The "it falls apart" camp. On the Haiku 5.5 Hacker News thread, one commenter says that when they asked Opus to let Haiku do the work, "it just falls apart and Opus comes back and tells me it switched to Sonnet", and that they would use Haiku more if it could reliably do file editing for Opus or Sonnet. That is an argument for keeping Haiku on read-only work, which is what Option 1 does.
- The subagent-under-100K camp. Another commenter in the same subthread points out that as a subagent prompted by a Sonnet or Opus orchestrator, a "significant part of the dispatched tasks might be under 100k budget". A third says they would "mostly use Haiku in task or explorer subagents" and have quite a few sessions that stay well below 100K.
- The configuration nudge. The r/ClaudeCode thread put the 40x number in front of people. Its framing holds for Opus users; for Sonnet users the gap is 20x, and the fix in both cases is the override, not the environment variable alone.
FAQ#
How do I change the model for Claude Code subagents?#
Set model in the subagent's frontmatter (haiku, sonnet, opus, fable, a full model ID, or inherit). For subagents without a model field, set CLAUDE_CODE_SUBAGENT_MODEL. To override everything, also set CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1.
Why is my Explore subagent not using Haiku?#
The built-in Explore runs on your main conversation's model, and CLAUDE_CODE_SUBAGENT_MODEL alone does not change it. Define a user or project subagent named Explore with model: haiku, or set the force flag. We confirmed both on v2.1.295.
Does CLAUDE_CODE_SUBAGENT_MODEL override a subagent's model field?#
Not since v2.1.251. It is now a default that applies only when neither the per-invocation parameter nor the frontmatter sets a model. CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1 (v2.1.257 or later) restores override behaviour.
How do I see which model a subagent is running on?#
Run /tasks while it runs; each subagent row shows its model and any effort override (v2.1.242 or later). In claude -p runs, use --output-format stream-json --verbose and read the model on messages that carry a parent_tool_use_id.
Is Haiku 5.5 good enough for the Explore subagent?#
For read-only lookups that return file paths and line numbers, it handled our test correctly in all three Haiku runs, at about 2 to 5 tenths of a cent per call. That is a small sample. Keep subagents that edit code, plan, or review on Sonnet 5.5 or Opus 5.5.
Does this work on Amazon Bedrock or Vertex?#
Yes, but the haiku alias there still points at Haiku 4.5. Use the provider's full Haiku 5.5 model ID or set ANTHROPIC_DEFAULT_HAIKU_MODEL once your account has access.
Continue Reading#
- Subagents vs Agent Teams vs Workflows - when to use a subagent at all, versus a team or a scripted workflow
- Haiku 5.5 vs GPT-6 Luna as a Subagent - the cheap-worker choice, the 100K and 272K price lines, and cost per task
- Opus 5.5 vs Sonnet 5.5 vs Haiku 5.5 - which model belongs in the main conversation
- Claude Haiku 5.5 Release Guide - pricing, the tokenizer catch, and what breaks when you migrate from Haiku 4.5
- What a Fleet of Claude Agents Actually Costs - the math once you run many sessions at once
Sources#
- Claude Code sub-agents - built-in subagent models, model resolution order,
CLAUDE_CODE_SUBAGENT_MODEL_FORCE, frontmatter fields, Explore override,/tasks(fetched October 9, 2026) - Claude Code model configuration - alias table by provider, v2.1.293 requirement for Haiku 5.5,
/modelreaching inheriting subagents,ANTHROPIC_DEFAULT_HAIKU_MODEL(fetched October 9, 2026) - Claude Code changelog - v2.1.292 Agent tool
effortparameter, v2.1.293 Haiku 5.5, v2.1.295 subagent skill preload limit - Anthropic API pricing - Opus 5.5, Sonnet 5.5 and Haiku 5.5 rates and the 100K tier (fetched October 9, 2026)
- Introducing Claude Haiku 5.5 - subagent positioning and Terminal-Bench 4.0 figures
- r/ClaudeCode: Haiku 5.5 is 40x cheaper than Opus 5.5. Your Explore subagent is probably still running on Opus - community thread, October 8, 2026
- Hacker News: Claude Haiku 5.5 - launch discussion, comments linked inline
- Test runs: Claude Code 2.1.295,
claude -pwith--output-format stream-json --verbose, main model Sonnet 5.5, five configurations, October 9, 2026
Get the next deep dive like this in your inbox
One email a week on Claude Code and the rest of the AI dev stack. Free.
Read next on Claude Code
Subagents vs Agent Teams vs Workflows: Claude Code's Parallelism Primitives, Compared
Claude Code subagents vs agent teams vs workflows: who holds the plan, the hard limits (16 concurrent, 1,000 agents per run), and which primitive fits your task.
9 min readCheapest Subagent Model: Haiku 5.5 or GPT-6 Luna? Routing, Compaction and Cost per Task
Which cheap model belongs under your orchestrator? Haiku 5.5 vs GPT-6 Luna as a subagent or worker: routing by prompt length, compaction, tool-call gotchas and cost per agent task.
15 min readOpus 5.5 vs Sonnet 5.5 vs Haiku 5.5: Which Claude Model to Use
Sonnet 5.5 is the default, Opus 5.5 is for open-ended long-horizon work, and Haiku 5.5 is for bounded steps and subagents. Prices, benchmarks, cost math.
8 min readTechnical content at the intersection of AI and development. Building with AI agents, Claude Code, and modern dev tools - then showing you exactly how it works.








