Workflow agent() spawns inherit the session model with no override; built-in workflows ship unpinned — one deep-research launch ran 84 agents on Fable 5
Workflow scripts spawn agents through a path that bypasses both CLAUDE_CODE_SUBAGENT_MODEL and PreToolUse Agent/Task hooks. The docs confirm there is no configuration lever: "Every agent in a workflow uses your session's model unless the script routes a stage to a different one" (code.claude.com/docs/en/workflows, Cost section). The built-in workflows (for example deep-research) contain no model: routing on any agent() call.
Result: on July 6, 2026 (v2.1.201), a single deep-research invocation from a session whose main loop ran claude-fable-5 spawned 84 subagents, all on claude-fable-5, consuming ~11.6M tokens (908k input / 202k output / 3.8M cache-write / 6.6M cache-read, deduplicated by message id) from the limited Fable weekly inclusion before it was manually killed. There was no warning at launch time that a built-in workflow would fan out dozens of agents on the session's frontier model.
Related: issue #75054 (pins dropped on wake/resume) — together these mean there is currently no reliable way to keep delegated work off an expensive session model.
Requested (any of):
- A default-model setting for workflow-spawned agents (env var or settings key), or
model:pins in the built-in workflow scripts, or- At minimum, a launch-time warning showing which model the fan-out will run on and roughly how many agents the workflow may spawn.
Environment: Claude Code v2.1.201, macOS, Max subscription, main loop on claude-fable-5[1m].
4 Comments
This looks like a model-budget authority bug, not only a workflow default question.
For workflow-spawned agents, I would want the launch path to produce one decision record before fan-out:
The negative tests I would add are:
The invariant is that model choice for delegated work is authority, cost, and policy state. If the system fans out 80+ agents, the user should be able to inspect whether each agent inherited the session model intentionally, was pinned by workflow policy, or was blocked because no budget/model authority was available.
Boundary: diagnostic/test-boundary feedback only; no claim about Anthropic fix, Claude Code adoption, implementation correctness, official alignment, partnership, customer interest, integration, or Neura usage.
A single request just burned my 5h budget and 10-15% of my Fable usage for the week.
Thanks for the detailed report. Two of the three asks are available today:
CLAUDE_CODE_SUBAGENT_MODELenvironment variable (for examplehaikuorsonnet). It applies to subagents, agent teams, and every agent spawned by a workflow, taking precedence over the session model and any per-stagemodel:in the script.Large workflowwarning pointing to/workflows, where you can stop the run. TheworkflowSizeGuidelinesetting (or Dynamic workflow size in/config) also lets you steer how large dynamic workflows get.Docs: https://code.claude.com/docs/en/workflows#cost and https://code.claude.com/docs/en/model-config#environment-variables
If you still see workflow agents ignoring
CLAUDE_CODE_SUBAGENT_MODELon a current version, please open a bug with the version and a/sharelink.🤖 Generated with Claude Code
Pin
CLAUDE_CODE_SUBAGENT_MODELbefore deep-research — unpinned workflows inherit frontier session model across dozens of agents.