A turned-down subagent launch now records whether it hit the nesting cap, the concurrency cap or a budget.
What's wrong with this entry?
When a Task launch is turned down, the session now records why alongside the existing telemetry, giving three named reasons: depth_limit for the nesting cap, concurrency_limit for too many at once, and budget for an exhausted allowance.
- The depth cap still throws the same error naming
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH; the refusal is recorded just before it throws. - Task rows gained a
spawnedSubagentfield, andspawnDepthis now written only when it applies. - The concurrency check reads the session's effort setting through a new accessor rather than off the app state directly.
recordRefused("depth_limit"), recordRefused("concurrency_limit")
Strings lifted out of the shipped bundle, so the claim above can be checked against them.
Related
Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.
-
v2.1.234
Another forged control tag is escaped in subagent output
Both mention subagent
-
v2.1.234
Spawned processes get
--flag=valuewhen the value looks like a flagBoth mention subagent
-
v2.1.235
New error for delegating to a subagent without naming one
Both mention subagent