← Reddit

Your subagents inherit your main model by default, so a nested tree on Opus is Opus all the way down

Reddit · bit_forge007 · June 18, 2026
Claude subagents inherit the main model by default, meaning a conversation running Opus will spawn Opus subagents throughout the entire tree unless explicitly configured otherwise. While subagents are documented as a cost-control tool for routing tasks to cheaper models like Haiku, this default behavior propagates the most expensive model down the hierarchy instead. Developers can manage costs by explicitly setting model fields per agent, restricting available models at the session level, or enforcing permission rules to prevent expensive model usage in subagent spawns.

Detailed Analysis

Claude Code's subagent architecture defaults to model inheritance, meaning any subagent spawned within a conversation automatically runs on the same model as the parent session. This behavior has significant cost implications: a developer running Claude Opus as their primary model will propagate Opus across every level of a nested subagent tree — potentially five levels deep — unless each subagent's `model` field is explicitly overridden in its frontmatter. The default `inherit` value is a convenience feature, but one that directly contradicts the cost-optimization use case that Anthropic's own documentation describes for subagents. The documentation explicitly frames subagents as a tool for routing tasks to faster, cheaper models like Haiku, yet the default configuration does the opposite by silently replicating the most expensive model at every node of the tree.

Recent changes to Claude Code's settings infrastructure have introduced more robust mechanisms for enforcing model constraints across subagent hierarchies. As of the June 10 release (v2.1.172), the `availableModels` setting now correctly restricts model selection for subagents as well as the main session — a fix for a prior bug where subagents could quietly bypass the allowlist. The June 15 release (v2.1.178) extended this further with parameter-level permission matching, enabling developers to add `Agent(model:opus)` to a deny list to block Opus subagents outright. Auto mode now runs its classifier before a subagent launches, catching blocked model selections before any tokens are spent rather than after the fact. Taken together, these updates represent a meaningful tightening of the governance layer around agentic workflows.

The broader significance of this issue lies in how depth acts as a cost multiplier in agentic architectures. Unlike a single-model conversation where token costs scale linearly with usage, a multi-level subagent tree compounds the per-token cost of the default model choice across every rung of the hierarchy. This dynamic is not unique to Anthropic's tooling — it surfaces in any system where tasks are recursively delegated — but Claude Code's explicit five-level nesting limit and its inheritance-by-default behavior make the phenomenon particularly concrete and measurable. The framing of "what is the cheapest model sufficient for each rung" rather than "should I use subagents at all" represents a meaningful shift in how developers must reason about agentic cost management.

For teams operating Claude Code at scale, the configuration options now available — per-agent `model` declarations in `.md` frontmatter, session-wide `availableModels` allowlists, and `enforceAvailableModels` in managed settings — provide a layered enforcement stack that ranges from developer discipline to hard organizational policy. Prior to the June 10 fix, `availableModels` offered incomplete protection since subagents could circumvent it, making team-wide enforcement unreliable. The post-June 15 state of the tooling closes that gap and enables operators to enforce model tiers consistently without relying solely on per-developer configuration hygiene. This progression reflects a general pattern in Anthropic's development of Claude Code: governance controls are being retrofitted and tightened as real-world agentic usage patterns expose gaps between documented intent and actual runtime behavior.

Read original article →