Feature request: subagent model allowlist so unpinned or nested Agent spawns cannot resolve to the main-session (premium) model

Open 💬 1 comment Opened Jul 6, 2026 by gorkem2020

Problem

On Max plans the weekly limit is split into lanes, and the premium model (Fable 5) is capped at a share of the week. A natural setup is: premium model for the interactive main session, sonnet/opus for all subagents. Today that policy is enforceable only by discipline, and one mechanic makes discipline insufficient: an Agent tool spawn without an explicit model resolves to the main session's model, and this also applies to nested spawns (a subagent spawning its own sub-agents). A sonnet subagent that spawns unpinned children therefore silently runs those children on the premium main-session model.

That is how we burned the remaining weekly premium lane in one afternoon: a sonnet research agent fanned out three unpinned children, each inherited the session model, and roughly 580K tokens later the lane was exhausted and the last child died mid-flight on the limit error.

availableModels does not help here: it constrains model selection globally, so it would also block the main session from using the premium model.

Request

A first-class way to restrict which models subagents may run on, independent of the main-session model. Any of these shapes would work:

  • subagentModels: an allowlist (same syntax as availableModels) applied to Agent tool spawns, teammate spawns, and workflow agent() calls, including nested spawns.
  • subagentDefaultModel: what an unpinned spawn resolves to, instead of inheriting the main-session model.
  • At minimum: apply availableModels semantics with a separate scope for spawns.

Fork-type subagents deserve a note in whichever design: they currently always inherit the session model and ignore the model param, so an allowlist should either gate them or document the exemption.

Current workaround

A PreToolUse hook on the Agent tool that denies spawns whose model is missing or matches the premium family, with a deny reason instructing the caller to re-call with an allowed model. Works (including as a teaching mechanism for the erring agent), but every user with model lanes has to reinvent it.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗