Codex Desktop reconnect loop on new/restarted conversations due to turn/started for unknown conversation
Summary
Codex Desktop consistently enters a reconnect loop when I:
- start a new conversation
- restart an old conversation
This is reproducible on every attempt in the desktop app.
The issue does not appear to be caused by my VPN or local cache state. I reset the relevant local storage areas and the behavior remained unchanged.
Environment
- Product: Codex Desktop
- Date observed: May 5, 2026
- OS: macOS
- App version seen in session metadata:
0.128.0-alpha.1
Reproduction
- Open Codex Desktop
- Start a new conversation
- Or restart an old conversation
- Observe repeated
Reconnecting...retries - Eventually it may recover, but the reconnect loop happens first
Expected behavior
New conversations and restarted conversations should start normally without reconnect loops.
Actual behavior
The app shows repeated reconnect attempts specifically at conversation start / restart time.
Key log evidence
In the desktop logs, the pattern is:
- browser sidebar thread is registered with
conversationId=new-conversation browser-useis force-installed at runtime- the conversation is created successfully
turn/startis routed successfully for the expected conversation- immediately after that, the app logs:
Received turn/started for unknown conversation
This strongly suggests a conversation routing bug inside the desktop app.
Example reproduction after local reset
Log file:
/Users/qinggang/Library/Logs/com.openai.codex/2026/05/05/codex-desktop-cc899bf8-644a-44ab-8b1f-e69327433dde-53115-t0-i1-101625-0.log
Relevant sequence from that log:
registered browser sidebar thread conversationId=new-conversationforceInstallPluginNames=["browser-use"]bundled_plugin_install_requested pluginName=browser-use reason=forcedConversation created conversationId=019df7a3-a20a-7671-8c71-af4fafb29e9c- normal
turn/start captured turn route conversationId=019df7a3-a20a-7671-8c71-af4fafb29e9c- then:
Received turn/started for unknown conversation conversationId=019df7a3-b244-7f80-8d4d-5de2d6ed71b1
Earlier matching reproductions
Same pattern was also seen for these conversations:
019df631-720c-7ba3-9a40-0849d27bbd9b019df78a-be9e-7e12-8125-5788c03e7a9b
What I already tried
I ruled out local state corruption by resetting these areas:
- main app
Session Storage - main app
SharedStorage - browser partition
Partitions/codex-browser-app
I also set this in ~/.codex/config.toml:
[plugins."browser-use@openai-bundled"]
enabled = false
[codex-desktop-reconnect-findings-2026-05-05.md](https://github.com/user-attachments/files/27395651/codex-desktop-reconnect-findings-2026-05-05.md)
8 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Additional macOS reproduction on 2026-06-04 with current public desktop builds.
Environment:
https://persistent.oaistatic.com/codex-app-prod/Codex.dmg26.601.21317/ build3511codex-cli 0.136.0-alpha.2codex-cli 0.137.0What was tried:
/Applications/Codex.appand Codex-specificApplication Support,Caches,Logs,Preferences, HTTP storage, saved state, and crash reports out of the live locations; preserved~/.codexbecause CLI works.3511as latest.26.601.20914/ build349726.527.60818/ build3437Both still reproduced the same routing failure.
browser_use = false,in_app_browser = false); the failure still reproduced. Those config changes were later removed.CODEX_CLI_PATH; setting it in the GUI launchd namespace to/opt/homebrew/bin/codexmade the app spawn the Homebrew runtime and report0.137.0. With rollback UI build3437plus app-server0.137.0, the same unknown-conversation failure still reproduced.Representative log sequence from build
3437:Representative log sequence proving
CODEX_CLI_PATHoverride works:The current public production DMG still embeds
0.136.0-alpha.2, while the standalone CLI is0.137.0and works normally. The symptom appears isolated to the desktop app conversation routing path.Adding another current macOS reproduction with sanitised details. No prompts, raw transcripts, screenshots, account identifiers, or full local paths included.
Environment
codex-cli 0.137.0-alpha.4codex doctor --jsonsummary: auth OK, websocket handshake OK, installation/runtime OK, state rollout DB parity OK, active rollout files and state DB rows agree. The onlydoctorfailure wasTERM=dumbin the agent terminal, which does not look related to Desktop renderer state.User-visible behaviour
No chatseven though local thread/session data still existed and direct thread read by ID worked.Relevant sanitised renderer log sequence
The app registered one conversation ID for the visible thread:
Immediately afterwards, turn lifecycle events arrived for a different conversation ID that the renderer did not know about:
That maps closely to the visible symptom: turn/message activity exists, but the Desktop renderer has no registered conversation to attach it to, so the message state disappears or is not rendered under the active chat.
Extra signal
The affected workspace initially had a Git directory with no commits/no
HEAD, which caused Desktop git probes such asrev-parse --abbrev-ref HEADto fail. I created an initial root commit, and the git branch probe now succeeds. That may explain some sidebar/project grouping instability, but it does not explain the separateturn/... for unknown conversationrenderer errors above.I can provide fuller logs privately if useful, but the public report is intentionally trimmed to avoid leaking local content.
I’m seeing the same failure pattern on macOS with Codex Desktop
26.616.51431.Fresh Desktop chats stay stuck on “thinking”. The key sequence is:
thread/startsucceeds.Conversation created conversationId=019ef210-ed3d-75a3-b4ac-08b836fc6795turn/startsucceeds for that same visible conversation ID.IAB_LIFECYCLE reassigned browser use route sourceConversationId=019ef210-ed3d-75a3-b4ac-08b836fc6795 targetConversationId=client-new-thread:...Received turn/started for unknown conversationfor different IDs, e.g.019ef210-fd51...and019ef211-0427....The unknown IDs do not exist in
~/.codex/state_5.sqlite; only the visible conversation row is persisted.I ruled out local state/config causes:
PRAGMA integrity_checkisok/or temp-cwd rows~/.codex/config.tomldid not fix itThis looks like an app-server/Desktop event-correlation regression:
turn/startis associated with the visible conversation, but subsequentturn/startedevents arrive under different conversation IDs, so the renderer never attaches the running turn.Adding another current macOS reproduction that looks like the same Desktop conversation-routing failure, but with a slightly different user-visible trigger: an in-progress local task is interrupted by quitting the Codex app, and after reopening the same thread appears to keep "thinking" without actually resuming.
Environment:
codex-cli 0.142.0User-visible behavior:
I have a 39s screen recording of this sequence, but I am not attaching it publicly because it includes local project and desktop contents. I can provide a redacted recording if needed.
Relevant sanitized log sequence:
This matches the issue pattern already described here:
turn/startis routed for the visible conversation, but subsequentturn/startedandturn/completedevents arrive under a different conversation ID. The visible Desktop thread then has no event stream to attach to, so it remains stuck in a running/thinking UI state.The important additional trigger here is app lifecycle interruption: quitting the app while a turn is running, then reopening and returning to that session.
Adding another macOS reproduction with a distinct interrupt/rollback trigger and a stronger orphaned-turn state signal.
Environment
Trigger sequence
Actual state
inProgress.status: activewithactiveFlags: [].Sanitized renderer/app-server evidence
The rollout timeline also showed repeated
turn_aborted,thread_rolled_back, andtask_startedevents, followed by anothertask_startedwhile the prior visible turn still had no terminal event.This appears to be the same renderer/app-server conversation-correlation failure, but the user-visible outcome here is two orphaned "running" turns rather than only a reconnect banner. No prompts, transcripts, screenshots, account identifiers, conversation IDs, or full local paths are included.
Additional reproduction on the latest macOS desktop build.
Environment
26.814.41957User-visible symptom
New chat creation intermittently fails with a toast containing an internal-looking object instead of an actionable error:
Fully quitting/reopening the app can temporarily restore operation, but the problem returns. The issue also returns after a full laptop reboot, so this is not just one stale process surviving a normal app quit.
Sanitized desktop-log sequence
The app-server can successfully route
turn/start, but the renderer then reports the new conversation as unknown:The same affected session also produces repeated Browser/IAB route failures:
and later repeated config/UI failures with the same malformed error object:
thread/list/thread/readand someconfigRequirements/readresponses can still return successfully witherrorCode=nullwhile the renderer/UI is already in this inconsistent state.Process observation
During an affected run there were 13 direct
Codex (Renderer)children under the same desktop parent, with renderer client IDs increasing over the session. One renderer was using ~20% CPU at capture time. This may be related to the in-app Browser lifecycle, but I have not established renderer count as the root cause.Notes
no git remotes foundwarnings are present in the same log but do not appear causal; the conversation-routing failures occur independently.Received turn/started for unknown conversation, after which multiple Desktop subsystems surface the same{"value":{},"source":"owned","hooks":[],"promises":[]}object.This appears to show that the conversation-routing bug tracked here is still reproducible on
26.814.41957.Follow-up from the same macOS 26.814.41957 reproduction: new-chat submission now surfaces a different user-facing error:
Unable to send message — Permission mode is unavailable.Targeted logs around the failure show the permission/config RPCs themselves can succeed, while renderer-side state later degrades:
A resume event then shows inconsistent permission state in the renderer:
Later, the renderer repeatedly fails to load config requirements with the same internal-looking object seen in the earlier chat-creation failures:
This repeats multiple times while
configRequirements/readcontinues to succeed in other renderer/webContents contexts.This suggests the new
Permission mode is unavailabletoast is likely another manifestation of the same Desktop renderer/session-state desynchronization: app-server permission/config endpoints are reachable, but the active renderer loses or fails to derive the permission profile required by the composer.Raw logs and conversation IDs are omitted for privacy.