Skip to content

[Bug]: Remote Agents panel shows 9 subagents while host shows 17 for the same thread #12131

Description

@coygeek

Before submitting

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

Area

apps/web

Steps to reproduce

  1. Run a Codex thread with multiple direct subagent spawns in T3 Code on a MacBook Pro.
  2. Open that same MacBook-hosted thread through a remote T3 Code session on a Mac Studio.
  3. Compare the Agents panels on the two clients.

Observed in the supplied screenshots: the host panel shows 17 idle direct spawns, while the remote panel shows only 9. The exact trigger for the omission has not been isolated; these are observations from an existing session, not a deterministic minimal reproduction.

Expected behavior

The host and remote clients viewing the same thread should expose the same complete direct-spawn roster and consistent aggregate counts once synchronized.

Actual behavior

The remote client shows 9 idle agents and a 12.8M token total. The host client shows 17 idle agents and a 62.3M token total. All 9 entries visible remotely also appear on the host.

The 8 entries absent remotely are: workflow_contract, daemon_catchup, delivery_performance, catchup_health_order, unfetched_next_step, durable_blocker_next_step, guidance_handoff, and incoming_example.

The screenshots were taken at different moments, so elapsed times are not directly comparable. The missing roster entries and different counts are the reported failure; no root cause or fixed nine-agent limit has been established.

Impact

Minor bug or occasional failure

Version or commit

T3 Code (Nightly) 0.0.43-nightly.20260916.1811 on both machines: the MacBook Pro host and the Mac Studio remote client.

Environment

macOS; T3 Code host on MacBook Pro and remote client on Mac Studio; Codex provider.

Logs or stack traces

Screenshots, recordings, or supporting files

SCR-20260916-kkjk.png
download.png

Workaround

No response

Activity

  1. added
    bugSomething is broken or behaving incorrectly.
    needs-triageIssue needs maintainer review and initial categorization.
    on Sep 16, 2026
  2. juliusmarminge commented on Sep 16, 2026

    @juliusmarminge
    Member

    Triage

    This looks like a real consistency bug, not a nine-agent UI cap and not a relay/tunnel drop.

    The Agents panel is not a server roster. Web/desktop fold task.* rows from whatever thread.activities that client currently holds (ChatView → foldSubagentActivities → deriveAgentPanelModel → AgentsPanel). There is no 9 limit (ROSTER_LIMIT is 100). An agent appears only if at least one of its rows is in that array.

    Those two clients are not holding the same array:

    • The host has been live-subscribed. The client reducer appends activity rows with no 500 cap, then can resume that fat cache via afterSequence. Reloading the host app can still show all 17.
    • The remote is a fresh load. Initial HTTP/WS snapshot is the last 10 user-anchored turns (INITIAL_THREAD_USER_TURN_LIMIT) and at most the last 500 activities in that window (THREAD_DETAIL_ACTIVITY_LIMIT), with a 150 raw-turn page ceiling. The panel has no “load earlier” of its own.

    So the remote 9-idle / 12.8M footer is the fold over a truncated window. The host 17-idle / 62.3M footer is the fold over the accumulated live cache. The eight missing names (workflow_contract, daemon_catchup, delivery_performance, catchup_health_order, unfetched_next_step, durable_blocker_next_step, guidance_handoff, incoming_example) are the children whose last retained row sits outside that window. That also matches the token gap: the omitted agents are the older/heavier ones.

    This will show up as “host vs remote” in practice (host ran the thread; remote just opened it). The same split should appear with a second fresh client on the host machine. It is provider-agnostic; Codex just produced a chatty direct-spawn fleet.

    Not the main line

    • Codex v2 status mapping (#11164, #11996) — wrong status, not missing idle rows.
    • Host-only Codex files — children are already persisted as task.* on the shared server.

    Related

    • #5493 turn windows
    • #6153 500-activity hydration cap
    • #8309 cached-turn resume
    • #4779 v2 subagent projection (v2Projection is still unused)

    Surfaces

    Web + desktop share this fold. Mobile has no Agents panel; chat spawn-summary rows use the same windowed activities and can under-count. Not macOS-specific.

    Suggested fix

    Stop deriving the fleet from the chat pagination window. Give the panel a thread-level agent projection (the v2 path already sketched in subagentRuntime.ts) or a query of agent-kind task.* rows that is independent of turnLimit / the 500-row chat cap. Until that exists, a partial window must not be presented as the complete idle count or token total.

    Capping the host to match the remote would hide agents everywhere. Wrong direction.

    Optional confirmation

    1. Fresh profile / empty cache on the host — expect the remote 9, not 17.
    2. Remote “load earlier” in chat — some missing names may return if older SQL pages still have their rows.
    3. User-turn count and roughly how many task.* rows that thread has.

    Accepting. No duplicate found.

  3. added
    acceptedfeature request accepted
    via-triageFiled through npx t3 triage
    and removed
    needs-triageIssue needs maintainer review and initial categorization.
    on Sep 16, 2026
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

    acceptedfeature request acceptedbugSomething is broken or behaving incorrectly.via-triageFiled through npx t3 triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions