Repository navigation
Codex Desktop Chrome plugin times out at setupAtlasRuntime on Windows despite extension/native host checks passing #21878
Description
Summary
Codex Desktop Chrome plugin (chrome@openai-bundled) cannot open/control Chrome. The plugin appears installed and enabled, but browser runtime initialization hangs until timeout at setupAtlasRuntime.
Environment
- OS: Windows
- Codex Desktop: OpenAI.Codex_26.506.3741.0_x64
- Model in session: GPT-5.5
- Chrome: 148.0.7778.97
- Codex Chrome Extension: 1.1.4_0
- Chrome plugin cache:
C:\Users\Administrator\.codex\plugins\cache\openai-bundled\chrome\0.1.7 - Native host exe:
C:\Users\Administrator\.codex\plugins\cache\openai-bundled\chrome\latest\extension-host\windows\x64\extension-host.exe
User-visible issue
Request: @chrome 打开谷歌
Expected: Codex opens Google in the user's Chrome via the Chrome plugin.
Actual: The Chrome plugin call times out. The runtime does not return an actionable error.
Diagnostics performed
All official plugin diagnostic scripts pass when run outside the sandbox:
chrome-is-running: running=true
installed-browsers: Google Chrome installed, version 148.0.7778.97
check-extension-installed: installed=true, registered=true, enabled=true, version=1.1.4_0
check-native-host-manifest: correct=true, registryMatchesManifestPath=true, hasExpectedOrigin=trueCurrent session metadata includes Chrome backend:
"x-codex-browser-use-available-backends": ["chrome", "iab"]Native host process is created and exposes pipes, for example:
extension-host.exe running
chrome.nativeMessaging.in.* / out.* pipes exist
codex-browser-use\\<uuid> pipe exists and is owned by extension-host.exe
However, invoking the Chrome plugin bootstrap hangs until the Node REPL tool timeout resets the kernel:
const { setupAtlasRuntime } = await import('file:///C:/Users/Administrator/.codex/plugins/cache/openai-bundled/chrome/0.1.7/scripts/browser-client.mjs');
await setupAtlasRuntime({ globals: globalThis });Observed result:
js execution timed out; kernel reset, rerun your request
Recovery attempts
- Opened selected Chrome profile with
scripts/open-chrome-window.js. - Verified extension/native-host manifest is correct.
- Killed stale
extension-host.exeand native messagingcmd.exeprocesses. - Relaunched Chrome profile and verified new native-host process and new pipes were created.
- Retried plugin bootstrap multiple times.
- Fully closed Chrome/native-host to unblock plugin uninstall; Chrome extension immediately relaunched native host when Chrome restarted.
The plugin still times out at initialization.
Suspected bug
The Chrome plugin/native-host bridge can reach a state where install diagnostics pass and native-host pipes exist, but setupAtlasRuntime never completes or reports a specific failing backend. The product should either recover, skip stale/unresponsive pipes with bounded per-pipe timeout, or surface a concrete native-host/protocol error instead of hanging until tool timeout.
Impact
@chrome is unusable on this Windows Codex Desktop installation even though Codex reports the Chrome extension as installed and connected.
Activity
github-actions commentedon May 9, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Ji-kuai commentedon May 11, 2026
Adding another Windows data point with one extra diagnostic detail that may help narrow this down.
Environment observed:
chrome@openai-bundled0.1.71.1.4_0148.0.7778.96check-extension-installed.js --json: installed, registered, enabledcheck-native-host-manifest.js --json: correct, expected origin present, registry points to the manifestextension-host.exe;chrome.nativeMessaging.in/out.*pipes appearUser-visible behavior:
@chrome/setupAtlasRuntime({ globals })path hangs until the tool timeout, typically around 120s.Browser is not available: extension, which suggests the hang happens after the Chrome backend exists and is being discovered/initialized.Additional low-level observation:
codex-browser-use\\...named pipe succeeds quickly.getInforeturns a Chrome extension backend (name: Chrome,version: 1.1.4,type: extension).getUserTabswith the current session metadata returns the current Chrome tab list successfully.So in this case the Chrome extension and native host are alive, and the underlying pipe can answer basic requests. The failure appears to be in the higher-level
browser-clientbackend discovery/selection/wrapping path rather than in Chrome, the extension install, or the native host manifest.Also worth noting: locally editing
scripts/browser-client.mjsis not a viable workaround. After modifying that bundled file, the runtime reports that the browser client is not trusted and loses access to the privileged native pipe bridge. Restoring the original file restores normal import behavior, but the original initialization timeout remains.Jameschunxiao commentedon May 12, 2026
Adding another Windows data point that matches this issue.
Environment observed:
openai-bundled/chrome 0.1.7hehggadaopoacecdllhhajmbjkdcmajg1.1.4_0148.0.7778.97Health checks pass:
chrome-is-running.js --check: Chrome running: yescheck-extension-installed.js --json: installed/registered/enabled all true, disabled false, exitCode 0check-native-host-manifest.js --json: manifest exists, registry key matches, expected origin present,correct: true,problem: nullFailure:
scripts/browser-client.mjssucceeds.setupAtlasRuntime({ globals: globalThis })consistently times out after 90-120s.Observed error:
Impact:
This looks like the same class of issue: extension and native host diagnostics are healthy, but the Chrome plugin bridge/runtime initialization hangs.
htazq commentedon May 14, 2026
Adding another Windows reproduction with the same failure mode, plus a couple of local IPC observations that may help narrow it down.
Environment
10.0.26200, x64OpenAI.Codex_26.506.3741.0_x64__2p2nqsd0c76g026.506.31421chrome@openai-bundled 0.1.7148.0.7778.971.1.4_0["chrome", "iab"]User-visible failure
A simple request such as:
never reaches page navigation. The browser-client bootstrap hangs until the Node REPL execution timeout resets the kernel.
Observed with:
Result:
Retrying with a fresh Chrome window opened by
scripts/open-chrome-window.jsalso timed out after 120s.Checks that pass
The plugin diagnostic scripts report the install is healthy:
The native host manifest points to:
and the bundled host binary path under:
Additional IPC/process observations
At one point, after Chrome was no longer listed as running, there were still multiple
extension-host.exeprocesses and native messaging pipes present. A later snapshot showed:Examples of the browser-use pipe pattern observed:
This may be a useful difference from a clean startup: the runtime appears to scan/connect many candidate
codex-browser-use*pipes, andsetupAtlasRuntimedoes not return or fail fast if one or more candidates are stale/unresponsive.Network observation
A direct non-browser probe from the machine to the ambient account endpoint returns a Cloudflare challenge:
This may relate to #21704, but in this Windows reproduction there are also many stale-looking local browser-use/native-host IPC resources, so I would not assume this is only network-related.
Expected behavior
Even if some backend pipes are stale/unresponsive, Chrome/browser-use setup should either skip them with a bounded per-pipe timeout or fail with a concrete diagnostic. The current failure is an outer tool timeout with no actionable browser/plugin error.
Ji-kuai commentedon May 15, 2026
Follow-up to my earlier Windows data point: I was able to validate a non-file-modifying workaround for this failure mode.
In this environment, direct
nodeRepl.fetch("https://chatgpt.com/backend-api/me")hangs until the JS execution timeout resets the kernel. That matches the ambient network bootstrap hypothesis from #21704 / #21722.Before importing the bundled Chrome
browser-client.mjs, I temporarily injected the existing request metadata flag into the current Node REPL runtime:Then I used the normal official Chrome plugin path:
Result:
setupAtlasRuntime()completed immediately instead of timing out.name: Chrome,type: extension).https://www.google.com/; the page title returnedGoogle.browser-client.mjsbreaks trust and causes the privileged native pipe bridge to be unavailable.One caveat: if Chrome is fully closed, this workaround changes the failure from a long timeout into a fast
Browser is not available: extensionerror. Starting Chrome manually, then retrying the same runtime metadata injection + official setup path, works. The bundledopen-chrome-window.jscan also launch Chrome in this environment, but it may not return cleanly even thoughchrome.exeandextension-host.exeare started.So the most practical short-term workaround for affected users appears to be a small local wrapper skill or bootstrap prompt that sets
x-codex-browser-use-disable-ambient-networkbefore calling the official Chrome plugin. The product fix should still be in the runtime: bound/fail-open the ambient/backend-api/meprobe or expose a supported setting for this flag.