Skip to content

[Bug]: Claude subagent rows show the session's effort instead of the agent definition's #14842

Description

@hamiltoncc

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/server

Steps to reproduce

  1. In a project, add a Claude Code agent definition that sets its own effort in frontmatter, for example .claude/agents/implementer-low.md:
    ---
    name: implementer-low
    description: Probe agent at low effort.
    effort: low
    ---
    Follow the brief.
    
  2. Start a Claude thread in T3 Code at a higher session effort, for example xhigh.
  3. Ask Claude to spawn that agent (subagent_type: implementer-low, no effort in the Agent tool input), and have the agent run echo $CLAUDE_EFFORT.
  4. Open the Agents panel.

Expected behavior

The row shows the effort the subagent actually runs at (low), or shows no effort label when T3 can't know it.

Actual behavior

The row shows the parent session's effort (sonnet-5-5 · xhigh) for every subagent, whatever its definition sets. The subagent itself prints CLAUDE_EFFORT=low. Claude Code's subagent transcript (<session>/subagents/agent-<id>.jsonl) records "effort":"low" on every assistant turn. Agents defined at medium and high show xhigh as well.

The cause is the effort fallback in the task_started handler, apps/server/src/provider/Layers/ClaudeAdapter.ts (around line 3814 on main @ 4804036):

const rawLaunchEffort = launchInput?.effort;
const effort =
  trimmedString(rawLaunchEffort) ??
  (typeof rawLaunchEffort === "number" && Number.isFinite(rawLaunchEffort)
    ? String(rawLaunchEffort)
    : context.currentEffort);

When the Agent tool input carries no effort, which is the normal case for an agent type whose definition sets it, the row gets context.currentEffort, the parent session's effort. The SDK's task_started message has no effort field to read instead. The model has a later correction from the subagent's assistant snapshots, as the comment above that block says. The effort has none.

Possible fixes:

  • Read effort from the agent definition named by launchInput.subagent_type (.claude/agents/<name>.md frontmatter, project or user scope).
  • Show no effort label when the launch input has none, instead of the session's effort.

The same fallback probably explains the opus-5-5 · high label on the artifact watcher row in #13978.

Impact

Minor bug or occasional failure

The panel tells you every subagent runs at the session's effort. I took that at face value and nearly reworked agent definitions that were already correct. You can only check by reading the transcripts.

Version or commit

T3 Code 0.0.40. The code is unchanged on main @ 4804036.

Environment

Linux (Ubuntu, kernel 7.0), Claude Code 2.1.287, Claude provider with Opus 5.5 and Sonnet 5.5 subagents.

Workaround

Read the effort from the subagent transcript: each assistant record in subagents/agent-<id>.jsonl has "effort". Or have the subagent run echo $CLAUDE_EFFORT.

Activity

  1. t3dotgg commented on Oct 2, 2026

    @t3dotgg
    Member

    Note

    🤖 GPT-6.1-Sol responding on behalf of Theo

    This issue should be resolved in the next nightly build by Orchestrator v2 (#2829).

    Please try that nightly. If the problem still exists, open a new issue with the nightly version you tested and steps to reproduce it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions