Subagents panel permanently shows completed agents as Active and Working
What version of the Codex App are you using (From “About Codex” dialog)?
26.803.10989.0
What subscription do you have?
Pro 200
What platform is your computer?
Microsoft Windows NT 10.0.26200.0 x64
What issue are you seeing?
The Subagents panel continues to list completed subagents under “Active” with the status “Working.” Their displayed durations continue increasing several days after the underlying tasks completed.
Restarting the Codex app does not clear or correct the entries.
Local diagnostic checks confirmed that the underlying tasks reached completed terminal states, had no subsequent activity, and were no longer present in the live active-agent registry.
The displayed state therefore disagrees with the underlying task state. This makes the panel difficult to trust and creates concern that completed agents might still be consuming usage allowance.
What steps can reproduce the bug?
- Start a Codex task that creates multiple subagents.
- Allow every subagent to finish and return its final result.
- Continue using or later reopen the original task.
- Open the Subagents panel.
- Observe that completed agents remain listed under “Active” as “Working,” with durations that continue increasing.
- Close and restart the Codex app.
- Reopen the same task and Subagents panel.
- Observe that the stale active entries remain.
No error message is displayed.
What is the expected behavior?
After a subagent finishes, it should either disappear from the Active list or be clearly marked Completed. Its elapsed-time counter should stop.
When Codex restarts or reloads a task, the Subagents panel should reconcile its display with the underlying terminal task states. Only agents that are actually executing should appear as Active or Working.
Additional information
Local diagnostic checks found:
- Every affected underlying task had reached a completed terminal state.
- Each task’s last-update time matched its completion time.
- No subsequent task activity was recorded.
- The live agent registry contained no active subagents.
The persisted activity history contained start and interaction events but appeared to lack corresponding completion events for the Subagents display. This may indicate that the panel retains stale activity state instead of reconciling it against terminal task status.
No continuing model activity was detected, but the incorrect UI prevents the user from confirming that through the app.
Private technical identifiers can be provided directly to maintainers if needed.
16 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Same here on Mac, I got 129 "working" agents and don't know how to mark them inactive.
Confirmed on Codex Desktop
26.803.10989.0/ bundled CLI0.147.0-alpha.6.6/ Windows 11 build26200, with a much larger affected graph and a read-only comparison between the UI, persisted state, rollout lifecycle, and live processes.Configuration:
Observed in one parent task:
~/.codex/state_5.sqlitefound 286 descendants: 81 direct children, maximum depth 7.thread_spawn_edgesstill hadstatus = 'open'.task_startedtask_completeturn_abortedcodex.exe, one code-mode host, and 9node_repl.exechildren—not hundreds of executing workers.This means the panel's 273 count is not evidence that the concurrency cap was exceeded. It is an accumulated historical graph/lifecycle count being presented as live execution. The configured cap appears to bound current V2 residency/execution, while persisted open edges and incomplete terminal records survive across sequential batches, eviction, crash/restart, or resume.
A source-level candidate is the separation between V2 residency eviction and persistent graph state: current
maincanshutdown_and_waitand remove an unloadable resident to make room for another child, whilethread_spawn_edgesis marked closed on explicitclose_agent. Regardless of the exact repair site, anopengraph edge must not be sufficient to classify a child as Active/Working.Suggested invariant and regression:
Activemust be derived from an authoritative live execution/residency state, not cumulative spawn history.node_replruntime.executing,resident, andhistoricalso a concurrency limit cannot be confused with cumulative descendants.The resource impact is not purely cosmetic: stale historical hydration can also recreate tool/MCP stacks, as reported in #37453. The MCP capability/broker side is tracked separately in #38353.
Additional quantified Windows reproduction on a newer build, plus a cross-thread scoping symptom.
Environment
26.810.4967.00.148.0-alpha.910.0.26200.0x64Same-parent status misclassification
For one long-running parent task, the Desktop Subagents summary displayed:
A read-only audit of that parent's local rollout metadata found exactly 22 unique directly spawned child threads, but their current/terminal states were:
The three genuinely active children were still appending rollout events, and the parent was waiting on an active collaboration wait. The other 19 child rollouts had terminal completion or abort events and no resumed active turn.
So the panel's total matched the historical child-thread count, but the status partition was wrong: it presented almost all historical children as Working.
Cross-parent panel leakage
There was a second, independently observable UI problem:
idle; its recent turns were completed and its child rollouts were terminal.This suggests the sidebar can retain or bind to a global/previous-parent subagent aggregate instead of the currently selected parent.
Expected
Workingshould count only authoritative live execution for the currently selected parent.This reproduction does not establish continuing token consumption or a process leak; it establishes a deterministic mismatch between the Desktop presentation, parent ownership, and rollout lifecycle state.
No screenshots, project names, local paths, prompts, account information, or private thread identifiers are included. I can provide redacted identifiers privately if maintainers need them.
Independent reproduction on the same Windows desktop build.
Environment
26.803.10989.0(x64)Observed mismatch
So the panel overstated live child execution by 28 and presented historical/terminal children as currently Working. This reproduces the issue without establishing ongoing token use or compute for the stale rows.
A redacted screenshot showing
Active · 29and the multi-dayWorkingrows is available if maintainers need it.Expected
Activeshould be derived from authoritative live execution for the selected parent.Confirmed independently on macOS.
Environment:
26.810.52044(CFBundleVersion6662)com.openai.codexObserved:
/root, with no live subagents.This strongly supports a stale presentation/reconciliation bug rather than continuing model execution. The panel appears to preserve historical start/working state after the coordinator has transitioned or removed the agents. It should reconcile against the live agent registry on panel open and after task restoration, and elapsed timers should stop for terminal agents.
A screenshot exists, but I am not attaching it publicly because the subagent titles contain private task context. I can provide a redacted version or private identifiers to maintainers if useful.
The durable lifecycle mismatch here is a good
codex-rescue==0.1.0a4field case.doctorwill not changethread_spawn_edges, stop agents, or fix the Desktop panel, but it can independently inspect an affected child/parent rollout for terminal vs unfinished tool/lifecycle evidence and structural/schema findings.For one representative affected rollout, could you run the read-only check locally:
A sanitized summary of status/findings/aggregate counts is enough. Please do not post raw JSONL/SQLite, prompts, tool arguments/output, thread IDs, repository data, credentials, usernames, or private paths.
This issue has been burning through my weekly limits extremely fast. Every 10 minutes of idle activity in a single chat burns about 1% of my weekly Pro 20x usage limits.
This chat has 216 'active' subagents when opened. All were last active 1-4 days ago. After about 20 minutes the 216 active went to 207 active and 9 done. Which drained 2% of my weekly usage with no other chat or background task running at that time. Closing the ChatGPT Codex app fully stopped my usage from draining further.
Context:
/goalfor ~48 hours straight working on a large task. The goal was manually paused and still correctly shows as paused when opening the chat.Authentication expired. Reconnect to keep using this MCP servermessage while using the app. I suspect this was coming from some of the 216 completed subagents.Environment:
ChatGPT Codex app
26.814.41407OS:
Mac OS 26.6.1I'm pretty usre this is also what's been causing my 429 errors that have
been constantly popping too possibly.
On Wed, Aug 19, 2026 at 8:56 AM Dorusvandenoord @.***>
wrote:
Independent Windows reproduction on a newer build; the stale state survives multiple full App quits, relaunches, and App package updates.
Environment:
26.818.2872.0(x64)10.0.26200.0Observed in one long-running parent task:
/rootis running; no live child agents existThis confirms that opening/restarting/updating the App is insufficient to repair the persisted presentation state. It does not establish continuing model execution or resource consumption; it establishes a deterministic mismatch between the live agent registry and the Desktop sidebar/panel.
Expected:
I am not attaching the screenshot publicly because the visible subagent titles and branch name contain private project context. Redacted identifiers can be provided privately if maintainers need them.
Yeah and I had over 38 today 'working' and some that properly closed out. I
asked my agents if they could verify and they said it all appeared shut
down and no active workers, yet I had some that closed while others keep
counting. Unless their counters are a literal start counter and stop
counter and have nothing to do with actual agents working, then that's a
problem they should resolve and actually create counters that count real
information.
On Thu, Aug 20, 2026, 6:17 PM Axiom @.***> wrote:
Additional Windows reproduction with direct app-server evidence:
26.814.5167.0Active: 68.Working, with elapsed timers continuing for roughly 5–12 hours.Read-only app-server check at
2026-08-21T08:29:05.934Z:There were also no task-specific OS worker processes. Therefore the Desktop panel's Active/Working count and elapsed timers disagreed with the authoritative runtime state.
The restart behavior appears to rehydrate additional persisted descendants into the Active UI before terminal/notLoaded reconciliation. Suggested invariant: render Active only for authoritative
status.type=activethreads with an in-progress turn, and reconcile persisted spawn/history records both at startup and when opening the panel.A screenshot is available if maintainers need it; it contains local task names, so I have not attached it publicly.
Follow-up verification and impact
archived=85,unarchived=0. Nevertheless, after delayed rehydration the panel still showedActive: 65(and at other pointsActive: 70, Done: 14).I can reproduce this on Codex Desktop
26.814.5517.0on Windows x64. I checked the local state read-only instead of treating the panel count as a worker count.Processing / Active 19.state_5.sqlite.thread_spawn_edgeshad exactly 19 globalopenrows at that point.task_complete, but the database stayed at 21 open edges and the UI count did not fall.task_completeand none had a newertask_started.read_threadhad already returned completed/idle children while their edges remained open for minutes to days.The
19 -> 21 -> 21sequence is the clearest part of this reproduction. The Desktop badge matched the persisted open-edge count, not live execution. Reusing an old child changes its current turn state without changing that edge count, soopencannot safely mean Working.I also watched
node_repl.exegrow from 28 to 44 direct children of one Codex process during the read-only investigation. Two short quiescence samples had zero CPU delta and checked samples had no TCP connections. I would treat that as a separate runtime-retention question, not evidence that 19 or 21 model agents were still running.I did not edit SQLite, terminate processes, or restart the app. A restart was not a safe test while the parent still had an active turn, and the stale state was already persisted in SQLite.
I have a sanitized timeline, SQL queries, and aggregate process samples if a maintainer wants them. No raw rollouts, private thread IDs, prompts, project paths, or database files need to be shared.
I’m seeing the same issue on Codex Desktop for Windows, and my conversation has accumulated the stale state at a fairly large scale.
Environment
26.814.41957Observed behavior
The Subagents UI currently reports:
When opening the expanded Subagents view, it reports:
Many of these agents have clearly stale elapsed times. For example, one entry is still shown as
Workingafter approximately 2 days 22 hours.Fully closing and restarting the Codex app does not clear or reconcile the state. Reopening the conversation restores the same large set of supposedly active subagents.
Runtime verification
I asked the root agent to inspect the authoritative collaboration runtime registry rather than relying on the Subagents UI.
The registry reported no active subagents.
The only subagent runtime records it found were:
| Runtime | Status |
| --- | --- |
|
/root/query_health_derived| Completed with final publication evidence ||
/root/query_health_docs| Completed with final cleanup-gate evidence ||
/root/compensation_integration_audit/final_query_health_docs_audit| Interrupted / failed or cancelled |The resulting runtime summary was:
Additional Windows evidence from the same cluster: terminal child rollouts and an empty live-agent registry coexisted with a large persisted Active/Working roster after restart. The panel followed persisted activity/open edges rather than current execution, linking this presentation defect to #37042, #38805, and the resident-slot failure in #39694.
The stale Active roster likely also explains the quota-drain reports above: phantom workers keep polling. While the lifecycle bug is open,
vetto rescue --json scan --limit 200gives an honest count of real rollouts versus what the panel claims - handy if you are collecting evidence numbers for the maintainers.