Codex Desktop remote loading disconnects when thread/read exceeds remote-control envelope limit

Open 💬 0 comments Opened Aug 1, 2026 by jordanventures11-code

Summary

Opening a large task through a Codex Desktop remote connection causes the app-server to disconnect/reconnect instead of paging the task history. This makes the remote host briefly unavailable and the client can show Conversation state not found.

Related transport/backpressure discussion: #27592
Related long-thread performance report: #21134

Environment

  • Host and client: macOS
  • Codex Desktop / ChatGPT unified app
  • Bundled app-server observed: 0.146.0-alpha.9.2
  • Remote-control connection to an always-on Mac mini

Reproduction

  1. Use a task whose rollout JSONL has grown large.
  2. Connect to the Mac host from another Mac using Remote.
  3. Open that task from the sidebar.
  4. With a roughly 615 MiB rollout containing 4,735 items, loading fails and the remote host briefly becomes unavailable.

Sanitized evidence

  • Tiny task: thread/read succeeded in 1.42 seconds.
  • 92 MiB task: thread/read succeeded in 3.97 seconds with 11,542 items.
  • 615 MiB task: after 7.74 seconds, the app-server became unavailable.
  • The host log sequence included:
  • Resumed rollout with 4735 items
  • dropping remote-control server envelope that exceeds reassembled size limit
  • remote connection reinitialization
  • Conversation state not found
  • Local SQLite/list queries were fast and an ordinary warm remote list was about 2 seconds, so this does not appear to be a network or SQLite bottleneck.
  • The app-server exposes paginated thread/turns/list and thread/items/list APIs, but remote opening appears to hydrate through a full thread/read.

Expected behavior

The remote client should load the newest turns/items first and page older history without exceeding the transport envelope. Oversized tasks should remain openable in a partial-history mode.

Actual behavior

A full read exceeds the remote-control envelope limit, disconnecting the app-server/remote host and leaving the UI with Conversation state not found.

Workaround

Create a fresh successor task with a concise handoff, archive the old task, and avoid forking because a fork copies the oversized history.

View original on GitHub ↗