Subagent UI label shows session model instead of per-agent model override
Description
When the main session runs on one model (Fable 5 / claude-fable-5) and subagents are dispatched via the Agent tool with an explicit model: "opus" override, the agents UI labels every spawned agent as Fable — the session's model — not the model the agent actually runs on.
The override itself IS honored: grepping the agents' JSONL transcripts (grep -o '"model":"[^"]*"' <task output_file>) shows every assistant message was generated by claude-opus-4-8 (the model field echoed in each API response), e.g.:
{"type": "assistant", "model": "claude-opus-4-8", "usage_in": 13766, "usage_out": 7}
So this is display-only, but it's misleading: the user believed a 15-agent review fan-out was burning Fable tokens (and challenged it twice) when it was running on Opus as requested.
Steps to reproduce
- Start a session on claude-fable-5.
- Have Claude dispatch a subagent:
Agent(subagent_type: "general-purpose", model: "opus", ...). - Observe the agent's model label in the agents/tasks UI: shows Fable.
- Grep the agent's transcript JSONL: all assistant messages are
claude-opus-4-8.
Expected
The agent list should show the model the subagent actually resolved to (the per-agent override), not the parent session's model.
Environment
- Claude Code CLI on macOS (darwin 25.4.0)
- Session model: claude-fable-5; agent override: opus → claude-opus-4-8
🤖 Generated with Claude Code
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗