DEV Community

Johmisking
Johmisking

Posted on Originally published at tokensave.app

Claude Code moved its Explore subagent off Haiku in 2.1.198. Two env vars get it back for 60% less.

In February a post here said Claude Code's built-in Explore subagent is hard-coded to Haiku. I measured something different last week: on 2.1.318, an Opus session's Explore calls all ran on Opus.

Both were right. I ran 205 headless sessions across 26 Claude Code versions to find out when it changed.

  • Up to 2.1.197: Explore ran on Haiku in every run.
  • From 2.1.198: Explore runs on whatever model your main session uses.
  • Cost on Opus: a delegated code search went from $0.18 to $0.37 per run (+105%).
  • The fix: CLAUDE_CODE_SUBAGENT_MODEL=haiku plus CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1. Explore went back to Haiku in 36 of 36 runs, cost dropped 60%, and it found the same answers.

Explore subagent model by version

The setup

Each run asks Claude Code a "find every place" question in an open-source repo (undici, fastify, cachetools, Python-Markdown, anyio, zod) and tells it to use the Explore subagent. Headless claude -p, read-only tools, stream-json logs. The subagent's model comes from its own messages and the per-model cost split in the log.

  • Version history: 18 versions from 2.1.0 to 2.1.318, then a bisection over the npm releases in between. Main model fixed to Opus 4.5, because the API refuses Opus 5.5 below 2.1.280.
  • Settings test: 2.1.318 with Opus 5.5 on 12 questions × 3 runs, under three settings.

Pre-registered on GitHub before the runs, with two dated amendments (one is my own bisection bug, explained below).

The settings

Setting Explore ran on Found Cost/run
Default Opus 5.5 100% $0.38
CLAUDE_CODE_SUBAGENT_MODEL=claude-haiku-5-5 Opus 5.5 99% $0.37
CLAUDE_CODE_SUBAGENT_MODEL=haiku + CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1 Haiku 5.5 100% $0.15

Setting the subagent model alone did nothing for Explore. That matches the sub-agents docs: CLAUDE_CODE_SUBAGENT_MODEL is only a default, and the FORCE flag (2.1.257+) is what applies it to every subagent. The docs also mention a project subagent named Explore with model: haiku. I didn't test that route.

To use it, put both in your shell or in settings.json:

{ "env": { "CLAUDE_CODE_SUBAGENT_MODEL": "haiku", "CLAUDE_CODE_SUBAGENT_MODEL_FORCE": "1" } }
Enter fullscreen mode Exit fullscreen mode

Note that FORCE applies to every subagent, not only Explore.

A mistake I made on the way

My first bisection said the switch was at 2.1.176. The script checked for Haiku with a regex that could never match the log format, so every probe looked like "not Haiku". When I read the raw logs, 2.1.176 through 2.1.186 were all Haiku. I fixed the check, re-ran the bisection and logged it as an amendment. The wrong-step probes are in the data too.

Limits

Two questions per version in the history, so it shows which model ran, not how good it was. One machine, one account, one prompt. Defaults can change again.

Data

All 205 runs (model, cost split, recall, every answer) are public under CC BY 4.0:

Previous round: telling Claude Code to use subagents found nothing more and cost up to 221% more.

Top comments (0)