Aident AI

Codex Subagents Stuck on Working? Refresh Their Status
If completed Codex subagents reappear as Working after you restart the desktop app, do not assume they are still running. Fresh reports show a presentation mismatch: child tasks have terminal results and no live handle, but the Subagents panel restores their historical cards as active. Test one clearly completed child by opening it and pressing Back. On an affected Windows build, that navigation forced the stale card to refresh from Working to Completed.
Use this only when the child already has a final result. A genuinely active subagent, a parent waiting for a child, and a historical card with stale status require different responses.
Confirm the Card Is Stale
Start with evidence visible in the app. A stale card usually has several of these signals:
the child shows a final answer or terminal error;
the parent already received or incorporated the child's result;
the elapsed time is implausibly long for the task;
quitting and reopening Codex does not produce new child output;
an attempt to inspect or stop the exact child reports that it is completed or no longer found.
The strongest August 8 report inspected 516 historical child sessions across 11 parent conversations. Every child ended with task_complete or turn_aborted, every persisted spawn edge was closed, and backend lookup returned not_found, yet the desktop panel reconstructed them as Working. Independent Windows and macOS reports confirmed the same mismatch.
That evidence does not prove that every long-running card is stale. If the child is still producing output, has a pending approval, or has no final result, leave it alone and inspect its current state before acting.
Separate Three Similar Failures
What you see | Most likely boundary | First safe response |
|---|---|---|
A completed child still says Working | Stale subagent card or rehydration state | Open the child, verify its final output, then press Back |
The parent is still thinking while a child appears finished | Parent and child lifecycle notification mismatch | Inspect the child and parent state before sending another prompt |
A resumed CLI turn is stuck on Working with no terminal event | Interrupted turn recovery | Preserve the session and diagnose the unmatched running turn |
Do not use a UI refresh to conclude that a real process stopped. The refresh only tests whether the card can reconcile to an already-terminal child.
Step 1: Protect the Parent Task
Before touching a stale-looking child, preserve the parent task's current state:
Read the parent's latest message.
Note whether the parent is running, waiting for approval, completed, or idle.
Save any important child result that has not yet been incorporated.
Check repository status before repeating work.
For a repository task, ask the parent for a read-only checkpoint:
Report the current root-task state, each visible subagent's last result, and
git status --short. Do not resume, interrupt, spawn, edit, reset, or rerun anything.
This prevents a stale label from becoming a duplicate implementation, test run, deployment, or provider write.
Step 2: Refresh One Confirmed Child
Choose one child whose final output is already visible and whose work is no longer changing.
Open that child from the Subagents panel.
Confirm that its final result is present.
Do not send a new message and do not choose a resume action.
Press Back to return to the parent.
Check whether the card now says Completed.
One Windows reporter reproduced this on Codex desktop 26.803.5235.0: restarting did not clear stale Working cards, but opening a completed child and pressing Back immediately refreshed its status to Completed. Treat that as a narrow reconciliation test, not an official repair.
If the card changes to Completed, repeat the sequence only for other children with visible terminal results. If the card stays Working, stop. Do not keep reopening or resuming it in the hope that the label will change.
Step 3: Verify That Nothing Restarted
After the refresh, verify the task boundary again:
no new child output appeared;
no new approval request was created;
no duplicate process, job, pull request, deployment, or provider item was started;
repository status is unchanged;
the parent still contains the expected child result.
If Codex exposes the live collaboration registry in the task, ask it to compare the visible cards with live child handles:
List the currently live subagents and their statuses. Compare them with the visible Subagents panel entries. Report mismatches only. Do not interrupt, resume, close, or spawn an agent.
A not_found result for a historical child can support the stale-card diagnosis, but do not repeatedly call termination on the same ID. The older tracking issue documents cases where close and readback already showed no live handle while the desktop UI continued to display the card.
Do Not Delete Codex State
The primary report found a healthy local database and closed spawn edges. That makes destructive local cleanup a poor first response.
Avoid:
deleting
~/.codexdata, conversation files, or the state database;editing SQLite rows to force a status;
clearing all desktop caches;
force-closing every historical child;
resuming a finished child solely to make the UI update;
restarting the parent instruction from scratch.
Those actions can destroy evidence, hide the actual lifecycle mismatch, or create new work. A stale card is annoying, but it is safer than an unverified cleanup that changes task history.
If the Parent Is Actually Blocked
The August 8 evidence establishes a display and rehydration problem. It does not establish that stale cards consume tokens, occupy live subagent slots, or keep processes running.
If the parent cannot continue, gather separate evidence:
the exact error or blocked message;
whether a new subagent can be created;
whether the suspected child has a terminal result;
whether the live registry contains the child;
whether selecting the completed child wakes the parent;
Codex app version, operating system, and failure time.
An older issue describes a parent that resumes after the user opens a completed child, while another documents stale cards after live close and readback. Link your report to the matching boundary instead of claiming that every stale card causes a blocked parent.
Retest After an Update
When a newer Codex desktop release is available:
Let active tasks reach a safe checkpoint.
Record the current app version and one affected parent task.
Update through the supported app channel.
Reopen the same parent task.
Confirm that terminal children appear as Completed without opening each card.
Confirm that only genuinely live children appear as Working.
Success means the panel matches authoritative task state after startup, no navigation trick is required, and historical children do not look active merely because their sessions still exist.
Monitor the Upstream Fix With Aident Loadout
Once the current task is stable, use a read-only integration instead of checking issue pages manually or pasting credentials into a prompt.
Start with the canonical setup instruction:
Follow https://aident.ai/SETUP.md
Then ask your agent:
Check Aident Loadout account authentication and Vault status. Discover the current read-only GitHub issue Action in staging, inspect its schema, and preflight requests for openai/codex issues 37563, 23930, and 23292. If the requests are valid and free, return only each issue's state, updated time, reaction count, labels, title, and canonical URL. Do not comment, react, edit, close, label, resume an agent, or change files.
Success is measurable: discovery, schema inspection, preflight, and read-only issue checks complete; no GitHub write occurs; and no local Codex task is resumed. Set up Aident Loadout and monitor the subagent status fix.
Sources
OpenAI Codex issue 37563: closed subagents rehydrate as Working
OpenAI Codex issue 23930: stale subagent cards remain after close and readback
OpenAI Codex issue 23292: parent can stay active after subagent completion
OpenAI Codex issue 16905: stale busy state after subagent completion
Refresh this guide when issue 37563 changes state, OpenAI documents authoritative subagent reconciliation, or a desktop release restores completed children correctly after startup.



The one tool
for every tool
your agent needs.
Give any AI agent real capabilities in seconds. Connect 1,000+ tools once, skip the setup headache, and let your agents execute.
