macOS remote control stalls: host app-server responsive but remote manager stays disconnected
What version of the Codex App are you using?
Host Mac Studio:
- Codex App:
26.513.31313/ bundle2867 - Bundled CLI:
codex-cli 0.131.0-alpha.9 - PATH CLI:
/opt/homebrew/bin/codex,codex-cli 0.125.0
What platform is your computer?
Host:
- Mac Studio,
Mac13,2, Apple M1 Ultra, 64 GB RAM - macOS
26.4.1, build25E253
Client surfaces where the problem has been observed:
- ChatGPT iPhone app using Codex Remote Control
- A separate MacBook Codex app using Connections / Remote Control to connect to the Mac Studio host
What issue are you seeing?
Codex Remote Control / remote connections are extremely slow or fail to become usable when connecting to a Mac Studio host.
The latest concrete reproduction was on 2026-05-19 21:57 JST, after switching the Mac Studio host to wired Ethernet. From a MacBook Codex app, I opened Connections and selected the Mac Studio host. After tens of seconds, the remote session still did not become usable and the thread list did not appear.
This also matches the earlier iPhone ChatGPT app behavior: connecting to the same Mac Studio host is very slow, unstable, or disconnects. In contrast, MacBook -> Tailscale -> Screen Sharing to the same Mac Studio is comparatively stable, so the Mac Studio itself appears reachable and the problem seems specific to Codex Remote Control / relay / remote state propagation.
What steps can reproduce the bug?
- Start Codex App on the Mac Studio host.
- Ensure the Mac Studio is reachable and signed into Codex.
- From another device, open Codex Remote Control:
- ChatGPT iOS app -> Codex remote connection, or
- another macOS Codex app -> Connections -> select the Mac Studio host.
- Open the host/thread list or try to open a remote Codex thread.
- Observe that the remote connection is extremely slow, stalls, or does not populate threads after tens of seconds.
What is the expected behavior?
Remote Control should connect promptly, show the host thread list, and stream updates reliably for simple thread operations. It should not leave the client waiting indefinitely while the host app-server is responsive.
Host-side evidence from the Mac Studio
I collected sanitized Mac Studio-side logs around the 2026-05-19 21:57 JST repro window. I am not attaching full logs because they may include private session metadata. The relevant excerpt is below.
The host app-server initialized normally:
2026-05-19 21:55:04.581 JST info [AppServerConnection]
initialize_handshake_result durationMs=313 outcome=success transportKind=stdio
2026-05-19 21:55:04.581 JST info [AppServerConnection]
app_server_connection.state_changed ... hostId=local ... previous=connecting next=connected ... transport=stdio
The Mac Studio host discovered one remote-control connection entry, but the manager state stayed disconnected:
2026-05-19 21:55:06.589 JST info [remote-connections/window-context]
refresh_remote_control_completed autoConnectConnectionCount=0 nextConnectionCount=1 previousConnectionCount=0
2026-05-19 21:55:06.631 JST info [electron-message-handler]
remote_connections.manager_state_set hostId=remote-control:<redacted-env-id>
previousState=disconnected nextState=disconnected previousError=null nextError=null
source=bootstrap_connection_state_fetch
During the time when the remote client was not becoming usable, local app-server RPCs on the host were still fast:
2026-05-19 21:57:23.405 JST info [AppServerConnection]
response_routed method=thread/read durationMs=2 errorCode=null
2026-05-19 21:57:23.619 JST info [AppServerConnection]
response_routed method=thread/resume durationMs=79 errorCode=null
2026-05-19 21:57:47.969 JST info [AppServerConnection]
response_routed method=thread/list durationMs=125 errorCode=null
2026-05-19 21:58:05.369 JST info [AppServerConnection]
response_routed method=thread/start durationMs=404 errorCode=null
Suspicious state/indexing lines also appeared:
2026-05-19 21:58:05.835 JST error [electron-message-handler]
Received turn/started for unknown conversation conversationId=<redacted-conversation-id>
2026-05-19 21:58:10.746 JST error [electron-message-handler]
Received turn/completed for unknown conversation conversationId=<redacted-conversation-id>
The remote connection inventory continued to see one connection, but I did not find a later connected state transition in the Mac Studio host log:
2026-05-19 21:59:07.395 JST info [remote-connections/window-context]
refresh_remote_control_completed autoConnectConnectionCount=0 nextConnectionCount=1 previousConnectionCount=1
2026-05-19 21:59:08.252 JST info [remote-connections/window-context]
refresh_remote_control_completed autoConnectConnectionCount=0 nextConnectionCount=1 previousConnectionCount=1
2026-05-19 21:59:09.163 JST info [remote-connections/window-context]
refresh_remote_control_completed autoConnectConnectionCount=0 nextConnectionCount=1 previousConnectionCount=1
I did not find clear Mac Studio host-side log evidence in this repro window for:
- WebSocket close code
1006 websocket closedtransport_closedCodexClientError- explicit request
timeout/timed out - a reconnect loop after 21:57 JST
The 1006 hits in macOS unified logs were unrelated RunningBoard assertion IDs, not WebSocket close code 1006.
Network evidence
At the time of the latest repro, the Mac Studio was on wired Ethernet:
Current default route at 22:00 JST:
interface=en0
hardware port=Ethernet
Quick ping checks from the Mac Studio were clean:
Gateway ping at 22:01 JST:
10 packets transmitted, 10 received, 0.0% packet loss
rtt min/avg/max/stddev = 0.439/0.644/1.322/0.247 ms
External ping to 1.1.1.1 at 22:01 JST:
10 packets transmitted, 10 received, 0.0% packet loss
rtt min/avg/max/stddev = 3.400/3.996/4.742/0.360 ms
networkQuality -v earlier the same day did not indicate an obvious host-wide connectivity outage.
Interpretation
This does not look like a basic LAN/WAN packet-loss problem on the Mac Studio and does not look like the local host app-server being stalled. The host app-server was responsive, but Remote Control did not become usable from the client side.
The strongest host-side clue is that a remote-control connection entry was discovered, but the remote connection manager remained disconnected, with no later connected transition found in the Mac Studio host log. This suggests a problem in Codex Remote Control state sync, relay/WebSocket path, or client-to-host connection handling.
The unknown conversation and repeated remote task ownership warnings may be related to thread/task state not hydrating correctly once the remote path is partially present.
Related issues checked
This may be related to the broader Remote Control state-propagation problems in #22773 and daemon/discovery mismatch in #23403, but this report adds a Mac Studio host-side log window and an app-to-app macOS remote reproduction where the host app-server is fast while the remote manager remains disconnected.
Additional information
I intentionally did not include full logs, session transcripts, repo-specific private content, API keys, tokens, cookie values, host IDs, conversation IDs, request IDs, IP addresses, or local user names. I can provide additional sanitized excerpts if useful.
10 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Fix: macOS Remote Control Stalls — App-Server Responsive but Remote Manager Disconnected
Root Cause Analysis
On Mac Studio hosts running Codex App 26.513.31313, remote control connections from other devices (iPhone ChatGPT app, MacBook Codex app) are extremely slow, unstable, or fail to populate thread lists after tens of seconds. The host app-server is responsive (verified via Screen Sharing), but the Codex Remote Control relay/state propagation is broken.
Why This Is Specific to Mac Studio + Remote Control
Root Cause Hypothesis
The most likely root cause is a WebSocket/relay connection state management bug in the remote control subsystem:
Why Previous Duplicate Issues (#22773, #23247, #22898, #22762) Didn't Fix This
Those issues likely addressed specific client-side symptoms or different network configurations. This issue is specific to headless Mac Studio hosts where the remote manager may have different initialization behavior.
---
Proposed Fix
Fix: Add Remote Manager Health Check and Auto-Recovery
Fix: Add Connection State Diagnostics
---
Files to Modify
| File | Change |
|------|--------|
|
src/remote/remote-manager.ts| Add health check, auto-recovery, headless detection ||
src/remote/connection-diagnostics.ts| New: connection state diagnostics |---
Testing Plan
---
Estimated Impact
The useful signal in this report is that host-local app-server health and remote-control usability are separate states.
I would be careful not to overfit the diagnosis to Mac Studio/headless before the state boundary is clearer. The minimal health model probably needs to distinguish:
Right now the remote client appears to collapse several of those into "slow/offline/loading". Exposing the specific failed layer would make this class of bug much easier to separate from network loss, stale enrollment, or local thread-store problems.
Same issue here with the Mac Studio and iPhone.
I ran into this issue too. Later I found that it was caused by a corrupted state_5.sqlite, which made codex app-server fail to start. In the end, I also had to reset remote_control so the app and client could reconnect properly and fully resolve the problem.
https://github.com/openai/codex/issues/23247#issuecomment-4505637794
I am seeing a closely related Mac-to-Mac Remote Control failure mode, but with a slightly narrower symptom than a full device-list failure.
Additional reproduction / symptom
Settings > Connections > Control other devices.Why this may be useful for triage
This looks like a partial Remote Control connection rather than a total enrollment or discovery failure:
This seems related to the same class of Remote Control state-sync / relay / app-server routing issues discussed here, and also overlaps with #23933, which was closed as a duplicate. The distinguishing point in this case is: Mac-to-Mac Remote Control can read the remote session, but pressing Send hangs.
I have not yet collected sanitized app logs or exact app/build versions. If maintainers think this narrower read-works/write-hangs case is useful, I can follow up with:
~/.codexlog excerpts around the Send hang.Follow-up with concrete environment details for the Mac-to-Mac read-works/send-hangs case:
Host Mac
26.519.41501(3044)codex-cli 0.133.0-alpha.1Client Mac
26.519.41501(3044)codex-cli 0.133.0-alpha.1Reproduction status
Control other devices: yesThis makes the failure look specific to the macOS-to-macOS controller path. The host is discoverable, the existing remote thread content is readable, and the same host remains controllable from Codex Mobile, but sending/continuing work from the macOS client hangs.
Additional narrowing based on more testing:
New findings
.codexconfig and no Codex hooks.AGENTS.mdagent/codex-operating-model.mdInterpretation
This makes the issue look less like a repository-content, AGENTS.md, hook, account, workspace, or host-environment problem.
The strongest signal is that the same repository content works when copied to a new path, while the original project/path still hangs from the macOS controller. That suggests the failure may be tied to persisted Codex Desktop project/path/thread state for the original repository, for example a stale or corrupted mapping between the original absolute path, remote host/project metadata, and conversation/thread hydration state.
The narrower failure mode is now:
This seems consistent with a macOS-to-macOS controller/project-state issue rather than a host-side repo execution issue.
I’m seeing a closely related macOS Remote Control failure, with a specific trigger that may help narrow the thread hydration path.
Environment:
codex-cli 0.136.0-alpha.2Symptom:
Key trigger / workaround:
1.38GB.Relevant sanitized log signals:
Expected behavior:
Remote Control should tolerate very large active local threads. The mobile/client path probably should not eagerly load or inspect the full local rollout history before opening a thread or sending a new instruction. It should lazily load recent context, page older turns, or otherwise skip huge active histories during remote-control hydration.
This may overlap with the broader Remote Control state-sync issues here, but the useful new signal is the size-related trigger: metadata/listing works, thread detail/context loading hangs, and archiving the huge active thread restores mobile Remote Control.
Small follow-up / clarification on the same reproduction:
After reactivating / unarchiving the huge active thread, the failure is not limited to opening that one large thread. It can block mobile Remote Control from opening other threads as well, and the mobile composer cannot send a new message reliably.
So the observed failure boundary is:
That makes the issue look like a global remote-control hydration/indexing bottleneck caused by one very large active local rollout, rather than a problem isolated to the oversized thread itself.