[app][Windows][26.727.6591.0] New voice chat races startup watchdog before Realtime begins
What version of the Codex App are you using?
- Codex Desktop:
26.727.6591.0 - Bundled Codex CLI:
0.146.0-alpha.9.2
What subscription do you have?
Not provided.
What platform is your computer?
- Windows x64
- Windows build
26200.8875
What issue are you seeing?
Starting a new Voice Chat from the global/avatar voice entry intermittently fails with:
Voice chat took too long to start
Retrying after the app has warmed up, or starting Voice Chat from an existing task, usually succeeds.
The failure occurs while Desktop is still creating the provisional task, before thread/realtime/start, WebRTC, ICE, or microphone initialization begins.
Steps to reproduce
- Fully quit Codex Desktop.
- Relaunch it.
- During the cold-start period, select Start new voice chat from the global/avatar voice entry.
- Observe that the overlay waits and may report
Voice chat took too long to start. - Retry after the app is warm, or open an existing task first and start Voice Chat from its composer.
- Observe that the warm/existing-task path usually succeeds.
Sanitized failing timeline
All timestamps are UTC.
08:21:06.920 provisional thread/start begins
08:21:15.628 "Voice chat took too long to start"
08:21:15.904 thread/start returns, durationMs=8984
The provisional thread/start response arrived only 276 ms after the client declared voice startup timed out.
No thread/realtime/start call was made during this attempt. Therefore, the failing critical path had not reached Realtime, WebRTC, ICE, or microphone-track setup.
A second cold-start failure showed the same race:
10:00:48.716 "Voice chat took too long to start"
10:00:49.329 thread/start returns, durationMs=5696
Here, thread/start completed 613 ms after the timeout.
The pending provisional task continued to materialize after the client had timed out, followed by:
Failed to discard provisional realtime voice thread
Inactive thread archive did not persist
This suggests the watchdog does not reliably cancel the pending task creation and can leave cleanup work behind.
Successful warm-start control
A successful new Voice Chat after the application was warm:
thread/start 2274 ms
thread/realtime/start RPC 7 ms
realtime_session_started +1344 ms
realtime_session_updated +2626 ms
Total time from initiating thread/start until voice became available was approximately 6.3 seconds.
Starting Voice Chat from an existing task skips provisional thread/start and takes approximately 4 seconds.
Expected behavior
- A normal cold-start delay should not cause new Voice Chat to fail just before provisional task creation completes.
- Provisional task creation and Realtime/WebRTC startup should have separate, stage-specific time budgets.
- Nonessential task-start work should not consume the voice-critical timeout budget.
- If the watchdog fires, the pending
thread/startshould be cancelled or its eventual result should be cleaned up reliably.
Actual behavior
- One combined startup watchdog expires while
thread/startis still pending. - The response can arrive only a few hundred milliseconds too late.
- Realtime setup is never attempted in the primary failure.
- The provisional task can still materialize after timeout, and archive/discard cleanup can fail.
- Warm and existing-task paths work.
Contributing cold-start work observed
During reproduced cold starts, Desktop was also doing some combination of:
- SessionStart hooks;
- bundled plugin marketplace reconciliation/synchronization;
- Browser Use runtime initialization;
- multiple plugin-list requests;
- at incident time, preconnecting a configured SSH app-server even though Voice Chat used
hostId=local.
The SSH connection was later removed. It was concurrent load, not a direct authentication dependency for voice.
One installed Vercel plugin has three synchronous SessionStart hooks. Its optional telemetry request can wait up to three seconds. With telemetry disabled, the hooks benchmarked at approximately 0.21 seconds. However, this plugin is not the sole cause: a cold-start voice timeout was also reproduced while the entire plugin was disabled.
A malformed local process index was also found to contain only NUL bytes and had generated repeated JSON parse errors. Quarantining it removed that background noise, but it was not the sole cause either.
Items ruled out
- Windows microphone permission was enabled.
- The default microphone was active and not muted.
- Windows audio services were healthy.
- Codex accessed the microphone during testing.
- The OpenAI Realtime WebSocket proxy handshake completed in approximately 1.1 seconds.
- STUN/UDP connectivity tests succeeded.
- The primary failure occurred before
thread/realtime/start, so it was not caused by WebRTC or microphone initialization. - Voice used
hostId=local; SSH authentication was not a direct cause.
Suggested fixes
- Do not use one short watchdog for provisional
thread/startplus Realtime/WebRTC startup. - Give provisional task creation and Realtime startup separate budgets (for example, 30 seconds and 10–15 seconds).
- Materialize and return the provisional task ID before awaiting nonessential SessionStart hooks.
- Defer nonessential hooks, telemetry, plugin synchronization, and remote-host preconnection until after the Realtime session starts.
- Expose a voice-specific origin to hooks so they can skip/defer noncritical work.
- Cancel pending
thread/startwhen the voice watchdog fires, or reliably reconcile and archive its eventual result. - Add explicit per-stage timing logs such as
overlay_ready,thread_materialized,session_hooks_complete,realtime_session_created,webrtc_connected, andaudio_track_ready.
Related issue
- openai/codex#35252 reported a similar user-visible timeout on an earlier Windows build, but that report reached
thread/realtime/startand then received a null Realtime session ID. - This report is distinct because the primary failure occurs earlier:
thread/startmisses the client watchdog by only 276 ms and Realtime is never called.
Current workaround
Wait 10–15 seconds after launching Codex, or open an existing task first and start Voice Chat from that task.
Privacy note
This report intentionally excludes usernames, task IDs, local project paths, conversation contents, raw logs, authentication material, and SSH details. Additional sanitized timing excerpts can be provided if needed.
3 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Same issue on Windows.
Voice worked in this same app and account before. Now new Voice chats repeatedly fail with “Voice chat took too long to start.” The failed attempts leave sidebar entries that cannot be resumed and show “Failed to resume chat: no rollout found for thread.”
This is not limited to new chats for me anymore. Voice now also fails in other older chats. One existing chat still works, but it is basically the only one.
I have already restarted the app, signed out and back in, and installed two updates. No change.
Additional Windows reproduction after a Microsoft Store app update.
Environment
26200OpenAI.Codex 26.803.5235.0OpenAI.Codex 26.803.10989.0Update/regression evidence
In the pre-update session, Desktop was running from the
26.803.5235.0package and successfully completed voice discovery:That same session then logged the Windows Store updater comparing:
The currently installed and running package is now
26.803.10989.0. After that update, starting Voice Chat consistently ends with:This reproduced several hours after the application launched, so in this case it is not limited to the immediate cold-start period.
Client-side observations
The renderer/Sentry breadcrumbs around the failed launch show the voice overlay opening, followed by:
The overlay animation then loads and eventually displays the timeout. No voice/realtime network request appears in the captured renderer breadcrumbs before the timeout. The live session's Desktop log files are currently zero-length/buffered, so I cannot yet provide a decisive app-server RPC trace for this build.
Dictation also stopped initializing after the update. Multiple clicks on the composer button are recorded as:
but there is no recording UI, OS permission prompt, microphone access, or transcription request afterward.
Local checks
Allow.OpenAI.Codexapp-specific microphone entry remainsPromptand has no last-used timestamps, indicating that the updated client never reaches an OS microphone-access attempt.OK.appLicensing,runFullTrust,unvirtualizedResources, andinternetClient; it does not contain an explicit microphone capability.This appears consistent with the pre-Realtime startup failure described here, with two potentially useful differences: it reproduces after the app is already warm, and voice dictation silently no-ops at the same time. The symptoms began immediately after the move from
26.803.5235.0to26.803.10989.0.