Subagent model and reasoning effort are invisible to every consumer — absent from the agent's own context, from the Agent tool surface, and from the sidecar the panel renders
Related to #74358 (asked for the agent's name in the Background tasks panel; closed by the inactivity bot, not fixed). This is the same sidecar and the same root cause, one layer deeper — see "Why one fix closes both" below.
What I expected
When a session spawns a subagent, I expected to be able to (a) see which model it ran on and at what reasoning effort, and (b) set the effort per dispatch. Neither is possible today.
What happens
1. No readback in the UI. The per-subagent sidecar at~/.claude/projects/<project>/<session>/subagents/agent-<id>.meta.json
contains exactly:
{ "agentType": "claude-code-guide", "description": "...",
"toolUseId": "toolu_...", "spawnDepth": 1,
"requestShape": "background", "requestNonInteractive": true }
agentType is there — that is the field #74358 asked to render, and it has been available the whole time. model and effort are absent entirely.
2. No readback inside the subagent. A subagent's system prompt names its model ("You are powered by the model named ...", plus the exact model ID) but says nothing about effort, so it cannot report its own level when asked.
3. No control at dispatch. The Agent tool schema exposes description, prompt, subagent_type, model, isolation, run_in_background — a per-call model override, but no per-call effort override. Effort can only be inherited, or fixed ahead of time in an agent definition's frontmatter.
4. The transcript records effort inconsistently. Surveying subagent transcripts in one project (12 parent transcripts, 4,792 lines, plus every subagents/*.jsonl under them):
| session | model | effort on messages |
|---|---|---|
| parent A | claude-opus-5 | "high" on 189/189 |
| └ subagent of A (haiku 4.5) | claude-haiku-4-5-... | key absent, 0/30 |
| parent B | claude-fable-5-1 | "high" on 247/247 |
| └ subagent of B (opus 5) | claude-opus-5 | "high" on 42/42 |
One subagent carries effort, the other omits the key entirely. So even reading the raw transcript cannot distinguish "this subagent ran at a different effort" from "effort was simply not recorded for it". Note that in session B the model is not inherited (fable parent, opus subagent) while effort apparently is — exactly the combination a reader needs the field to disambiguate.
Why it matters
The docs state that a subagent "inherits the main session's extended thinking configuration" and that teammates "inherit the lead's effort level". With no readback anywhere, that inheritance is unfalsifiable in practice: you cannot confirm a subagent ran at the effort you believed you were paying for, and you cannot attribute a weak result to effort rather than to the brief. The same argument #74358 made about token attribution applies, one level down.
Why one fix closes both
#74358 and this report are both blocked on the same file. Writing model and effort into agent-<id>.meta.json and rendering all three fields (agentType, model, effort) in the subagent panel resolves #74358 and item 1 here in a single change.
Proposed fix
- Write
modelandeffortintoagent-<id>.meta.json; renderagentType,modelandeffortin the subagent panel. (Also closes #74358.) - Record
efforton every subagent message unconditionally, so absence of the key is never ambiguous. - Name the subagent's effort level in its system prompt, beside the model.
- Add an optional
effortparameter to theAgenttool, mirroring the existingmodeloverride.
Items 1–3 are pure visibility. Item 4 is the feature ask and is separable.
Environment
Claude Code desktop app (Code tab), Windows 11, model Opus 5.