Confirmed on macOS: T3 Code Nightly 0.1.2-nightly.20261022.3526 (desktop), macOS 26.6.2, Claude Code 2.1.309. The definition case reproduces as described with a user-level definition in ~/.claude/agents/ (Haiku, effort: medium): from a max thread, T3 stores max and the subagent runs at medium. On earlier nightlies with the same fallback (Claude Code 2.1.306โ2.1.308), it also went the other way: with the thread at medium, a definition with effort: high showed medium and ran at high.
A third path: Claude Code's maxEffortLevel clamp. Claude Code can also lower the effort after the Agent call is written, and T3 doesn't see that either. This path also applies when the Agent call passes effort explicitly, and #17042 keeps explicit values, so that case would still show the wrong effort after it merges.
Steps, using the same checks as steps 4 and 5 above:
- In
~/.claude/settings.json, cap Sonnet athigh(these are my exact settings):json1 "modelSettings": { "claude-sonnet-5-5": { "effortLevel": "high", "maxEffortLevel": "high" } } - Start a Claude Opus 5.5 thread at
max. - Send:
Call the Agent tool three times with subagent_type "general-purpose" and the prompt "Reply OK": model "sonnet" without passing effort, model "sonnet" with effort "xhigh", and model "haiku" without passing effort. - Run steps 4 and 5 above for each subagent.
| Agent call | T3 stores | Ran at (transcript .effort) |
|---|---|---|
model: "sonnet", effort not passed | max | high |
model: "sonnet", effort: "xhigh" | xhigh | high |
model: "haiku", effort not passed (control, no cap) | max | max |
$CLAUDE_EFFORT inside each subagent matched its transcript (high, high, max). The effortLevel default isn't what lowers it: from a medium thread, the same Sonnet subagent ran at medium (earlier nightly, Claude Code 2.1.306).
The first row is the common one in practice. In my state database, 34 Sonnet general-purpose subagents launched without an effort argument from a max thread over Oct 20โ23 show max and ran at high on every turn. #17042 would blank that label; the second row would keep showing xhigh. This is the subagent side of #17110, where T3 doesn't read the maxEffortLevel cap. #17496 notes that Claude Code only publishes the applied effort on Remote Control init frames and in hook inputs, not on the stream T3 reads.
Investigated by Claude Opus 5.5 in T3 Code.