[macOS Desktop] Restoring one large VS Code-origin thread floods thread/items/list and resets IPC

Open 💬 3 comments Opened Aug 27, 2026 by alfredolopez80
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

What version of the Codex App are you using (From “About Codex” dialog)?

  • Codex Desktop: 26.820.60940 (build 7119)
  • Bundled codex-cli/app-server: 0.150.0-alpha.8

What subscription do you have?

ChatGPT paid plan. The exact tier does not appear relevant because the failure occurs in the local Desktop renderer and IPC path before model execution.

What platform is your computer?

  • macOS 26.5.2 (build 25F84), Apple Silicon
  • uname -mprs: Darwin 25.5.0 arm64 arm

What issue are you seeing?

Codex Desktop repeatedly becomes unresponsive while restoring a large, recent, pinned thread that originated in the VS Code extension. The VS Code app and its app-server were fully closed during the reproduction, so this is not caused by two concurrently running app-servers.

The affected thread is unarchived, uses paginated history, and has approximately:

  • 15,386 persisted display items
  • 1.84 million reported tokens
  • three persisted Desktop route entries

On one clean Desktop launch, the client issued 122 thread/items/list requests for only two threads within about 2.5 seconds. Of those, 114 targeted the affected thread. The app-server responses were fast:

  • mean response time: 9.37 ms
  • maximum response time: 60 ms

Immediately afterward, the Desktop main-process log recorded four window missing events, three ipc-connection-reset broadcasts, and one Stopping app-server transport event. The UI stopped progressing even though the app-server had answered the history requests quickly.

This sequence reproduced across five Desktop launches:

| Launch | thread/items/list calls | IPC resets | window missing | Transport stops |
| --- | ---: | ---: | ---: | ---: |
| 1 | 110 | 3 | 6 | 1 |
| 2 | 130 | 3 | 6 | 1 |
| 3 | 120 | 3 | 4 | 1 |
| 4 | 125 | 3 | 4 | 1 |
| 5 | 122 | 3 | 4 | 1 |

By contrast, a later launch that did not restore/open the large thread made only eight thread/items/list calls and recorded zero IPC resets, zero missing-window events, and zero transport stops. It remained responsive.

The evidence points to an unbounded or duplicated renderer hydration/restoration path, possibly amplified by stale or repeated window/tab routes. It does not look like slow rollout parsing or a slow app-server query.

No data loss has been observed, but the Desktop UI can become unusable and require relaunching.

What steps can reproduce the bug?

  1. Create or retain a very large local Codex thread in the VS Code extension. The reproduced thread had about 15.4k display items and 1.84M reported tokens.
  2. Keep that thread unarchived and pinned so it remains represented in shared/persisted Codex state.
  3. Fully quit VS Code and verify that its Codex app-server is no longer running.
  4. Launch Codex Desktop on macOS.
  5. Let Desktop restore the previous UI state, or open the pinned VS Code-origin thread.
  6. Observe a burst of more than 100 thread/items/list requests for that single thread.
  7. Observe that the Desktop window becomes unresponsive, followed by missing-window messages, IPC resets, and app-server transport shutdown in the main-process log.
  8. Relaunch Desktop without restoring/opening that large thread. The request burst and IPC reset sequence do not occur.

A minimal synthetic thread is not yet available. Private thread IDs, prompts, outputs, local paths, and raw logs are intentionally omitted. I can provide narrower sanitized diagnostics if maintainers specify what is needed.

What is the expected behavior?

  • Desktop should remain interactive while restoring a large paginated thread.
  • Initial hydration should have bounded item and byte budgets and should render the newest useful content first.
  • Concurrent or repeated history requests for the same thread should be coalesced, deduplicated, or cancelled when the owning view/window disappears.
  • Stale route or window state should be discarded without resetting IPC or stopping the app-server transport.
  • Older history should load progressively and must not block the composer, task navigation, or active status.
  • A single large pinned thread should not make the whole Desktop app unusable.

Additional information

Isolation checks performed:

  • VS Code was fully closed.
  • Only one Codex Desktop app-server remained running.
  • The Chrome companion extension host was idle and did not correlate with the freezes.
  • No plugin or MCP error correlated with the failure.
  • Archiving old sessions and rotating a multi-gigabyte log database reduced local storage pressure but did not remove this failure, because the triggering thread is recent and pinned.
  • The current small thread remains stable in the same Desktop installation.

Potentially related but not exact duplicates:

  • #38653: count-only bootstrap budget for a large paginated turn
  • #33786: repeated full replay of a completed large thread
  • #39228: IPC churn and EPIPE in the macOS Desktop main process
  • #40934: broad instability and eager restoration of long-running threads

The distinguishing signal here is the combination of a fast app-server, more than 100 item-list requests for one VS Code-origin thread during a short restoration burst, renderer/window loss, and the deterministic IPC reset/transport-stop sequence.

View original on GitHub ↗

3 Comments

github-actions[bot] contributor · 21 hours ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #41097
  • #40934
  • #39946

Powered by Codex Action

alfredolopez80 · 21 hours ago

I reviewed the three automatically suggested issues. This report is related to the same general reliability family, but it is not an exact duplicate.

  • #41097 concerns Windows renderer-state reconciliation and unknown conversation events; it does not show the repeated history-request burst or IPC shutdown sequence.
  • #40934 is a broad Windows report about eager auto-resume, memory growth, rollout corruption, and scroll anchoring.
  • #39946 is a lazy-loading enhancement request, not an IPC failure report.

The distinguishing signature in #41148 is 114 thread/items/list requests for one VS Code-origin thread in about 2.5 seconds, despite fast app-server responses, immediately followed by four window missing events, three ipc-connection-reset broadcasts, and one app-server transport stop. This reproduced across five launches; avoiding that thread produced only eight list calls and zero resets.

An exact search for both thread/items/list and ipc-connection-reset currently returns only #41148. The issues may share an architectural family, but closing #41148 as a duplicate would lose the macOS, cross-client restoration, renderer-window, and deterministic IPC evidence. It should remain separate or be linked as a specific child of a broader tracking issue.

alfredolopez80 · 2 hours ago

Follow-up diagnostic: thread/MCP lifecycle pressure alongside the IPC failure

A later clean-session diagnostic on the same macOS Desktop installation found a second pressure path alongside the original history-hydration/IPC signature. VS Code was closed and only one Desktop app-server was running.

During the inspected log window:

  • 5 thread/resume requests
  • 0 thread/unsubscribe requests
  • 0 thread/closed notifications
  • five corresponding per-thread MCP/plugin process groups under the single app-server
  • 45 direct app-server children and 109 descendants in one process snapshot
  • approximately 6.6 GB RSS across those descendants; this includes active shell/build descendants, so it must not all be attributed to MCP
  • approximately 8.8 GB RSS across the complete Codex process tree
  • approximately 1.35–1.45 GB RSS across Electron renderers

Representative backend calls in the same diagnostic remained fast: thread/items/list about 6 ms, thread/read about 21 ms, and thread/list about 24 ms. The UI nevertheless stalled twice. No explicit renderer unresponsive event was emitted, so this supports renderer/lifecycle pressure but does not by itself prove a specific React loop.

Duplicate review

The MCP-retention part is not novel and overlaps with:

  • #32154 — closest lifecycle reproduction: one eager MCP stack per newly resumed chat, no unsubscribe during navigation, plus a separate history-rendering stall
  • #32942 — closest macOS report: restored tasks fan out plugin MCP servers and correlate with renderer reloads
  • #30408 — per-thread MCP processes retained by app-server
  • #37453 — historical thread resume creates duplicate MCP and node_repl stacks on Windows

#41166 is also related through large-thread restoration and renderer pressure, but it concerns concurrent multi-GB Windows threads, a ResizeObserver storm, and a whole-OS freeze.

#41148 remains distinct: its reproducible signature is one large VS Code-origin thread on macOS, 114 thread/items/list requests in about 2.5 seconds despite fast responses, immediately followed by window missing, ipc-connection-reset, and app-server transport shutdown. A search combining those IPC and item-list signals still identifies #41148 as the specific macOS/cross-client report.

The new evidence therefore does not replace the original suspected failure path. It shows that the already-known per-thread MCP lifecycle behavior can materially amplify the renderer hydration/IPC failure.

The fix likely needs two independent bounds:

  1. coalesce, cancel, paginate, and byte-bound history hydration/rendering; and
  2. avoid eagerly attaching a full MCP runtime to read-only restored threads, or detach process-owning MCP resources when an inactive thread no longer needs them.