Windows Codex Desktop: Chrome plugin and Browser Use setup hang; plugin uninstall fails with os error 5
Summary
On Windows Codex Desktop, the Chrome plugin and shared browser automation bridge are unstable. The Chrome plugin can sometimes open a basic HTTPS page and read the title, but it is very slow and unreliable; direct browser-client setup calls hang until timeout. The Codex plugin UI also cannot uninstall the bundled Chrome plugin.
Environment
- OS: Windows
- Codex Desktop package:
OpenAI.Codex_26.506.2212.0_x64 - Plugin:
chrome@openai-bundled0.1.7 - Chrome extension ID:
hehggadaopoacecdllhhajmbjkdcmajg - Chrome extension version:
1.1.4_0 - Chrome plugin config:
[plugins."chrome@openai-bundled"] enabled = true - Current browser backends exposed in the turn metadata:
["chrome", "iab"]
Reproduction
- Restart Codex Desktop.
- Enable the bundled Chrome plugin in Codex plugins settings.
- Ask Codex:
``text``
@chrome open https://example.com and read the page title
- Observe that it can sometimes succeed, but one run took about
1m50sfor a trivial page title read. - Ask Codex to inspect Chrome bookmarks:
``text``
@chrome can you view my bookmarks directory?
- It reports that the Chrome plugin/tool is unavailable for that task.
- In Codex plugin settings, attempt to uninstall the Chrome plugin.
- The UI shows a toast in Chinese:
插件卸载失败(Plugin uninstall failed).
Direct diagnostics
From the agent-side Node REPL / browser-client path:
- Importing the Chrome plugin
browser-client.mjssucceeds quickly (~47ms). - Calling
setupAtlasRuntime({ globals })for the Chrome plugin hangs until tool timeout (120s). - Calling
setupAtlasRuntime({ globals, backend: "iab" })for the in-app browser backend also hangs until timeout (120s), so the issue may be in the shared browser-use/native pipe bridge, not only the Chrome extension. - The current turn metadata includes:
``json``
{
"x-codex-browser-use-available-backends": ["chrome", "iab"]
}
Local health checks that pass
The plugin-provided diagnostic scripts report that the local pieces are present:
- Chrome is installed and running.
- The Codex Chrome Extension is installed and enabled.
- The native host manifest exists and points to the bundled Chrome plugin
latestextension host. - The expected extension origin is allowed.
Relevant log lines
The Codex Desktop logs contain repeated plugin uninstall failures:
failed to uninstall plugin: failed to remove existing plugin cache entry: 拒绝访问。 (os error 5)
They also contain browser/IPC instability:
IpcRouter Socket error: write EPIPE
app_server_connection.state_changed ... next=disconnected
There are also bundled plugin cache install/update warnings on Windows:
bundled_plugins_marketplace_install_failed
errorCategory=plugin_cache_windows_file_lock
errorMessage="failed to install plugin: failed to back up plugin cache entry: 拒绝访问。 (os error 5)"
Expected behavior
@chromesetup should initialize reliably or fail fast with a clear error.- Browser automation setup should not hang until the outer
120stool timeout. - The Chrome plugin should reliably handle simple page tasks such as opening
https://example.comand reading the title. - The plugin UI should either uninstall the plugin or clearly explain that bundled plugins cannot be uninstalled.
- If Chrome bookmarks /
chrome://internal pages are intentionally unsupported, the model/plugin should report that limitation directly rather than implying the Chrome plugin/tool is unavailable.
Actual behavior
- Simple page-title reading can work, but is very slow and unreliable.
- Direct setup calls for both Chrome and IAB browser backends hang until timeout.
- The Chrome plugin UI uninstall flow fails with a generic toast.
- Logs point to Windows file-lock/access-denied failures and IPC disconnection.
Related issues checked
This appears related to other Windows browser/app-server issues, but this report includes the Chrome plugin and plugin uninstall failure combination:
- #21530
- #20846
- #20661
- #20206
- #20048
- #19693
14 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
I can reproduce the Browser Use / Chrome setup hang on Windows with a slightly narrower diagnostic that may help isolate it.
Environment from my repro:
setupAtlasRuntime({ globals: globalThis })hangs from both plugin client paths:Both time out after the Node REPL tool timeout and reset the kernel.
However, direct named-pipe JSON-RPC probes using the same 4-byte length-prefixed protocol used by
browser-client.mjsreturn quickly. With the currentsession_idandturn_id:Direct RPC to the Chrome extension pipe also works:
So in this repro the Chrome extension/native host and the Browser Use backend pipes are alive and responsive; the hang appears to be inside the official
setupAtlasRuntime()initialization path after/beyond the rawgetInfopipe responses.I filed #21691 with these details before noticing this issue. Closing that one as a duplicate and leaving this diagnostic here.
the os error 5 + EPIPE + setupAtlasRuntime hang are probably one bug, not three. windows holds file handles past process exit until handle gc, so if a previous bridge host didn't shut down cleanly the plugin cache stays locked and the next setupAtlasRuntime call wedges on the manifest read. both chrome and IAB backends go through the same native pipe bridge, so they share the lock and both hang the same way. before restarting codex, check task manager for orphaned host processes from the prior session. the 120s timeout is hiding which mutex is stuck, not the actual fault, so cleaner shutdown ordering on the bridge side would surface the real error fast.
Additional local diagnostic after updating/reinstalling Chrome plugin.
Environment now:
The user-level
@chrome list open Chrome tab titlespath still failed/hung earlier withtool call failed for node_repl/js/timed out awaiting tools/call after 120s.I then reproduced Boboo-Zhao's lower-level diagnostic on the same running session by bypassing
setupAtlasRuntime()and sending JSON-RPC directly over the Windows named pipes using the same 4-byte length-prefixed framing.Results, with private tab URLs/titles redacted:
So on this machine the Chrome extension/native messaging host is alive and responsive, and the IAB backend is also alive. The failure is still above the raw pipe layer, consistent with the hypothesis that the official
setupAtlasRuntime()/ browser discovery or bridge initialization path is hanging.One extra environment detail: I still see a separate old runtime process from another integration:
That may be unrelated, because the direct pipe RPC succeeds against the current session, but it is present and could be relevant if stale runtimes/handles affect discovery.
Follow-up after trying the official troubleshooting direction and changing Windows sandbox to elevated.
Current local state after restart:
User-level test still does not use the functional Chrome extension path. Asking
@chrome list current Chrome tab titlesproduced a fallback-style answer that only read the foreground Chrome window title and said it could not detect a Chrome DevTools remote debugging port. This is not the expected Codex Chrome extension/native messaging behavior, since the official Chrome extension docs do not require a DevTools remote debugging port.Direct pipe probe in the same session still succeeds:
So even after elevated sandbox + restart, the extension/native messaging pipe remains healthy, but normal
@chromeusage in Codex Desktop does not route through it successfully.Additional related symptom: Codex Desktop UI cannot remove the Chrome plugin while the Chrome extension host is running from the plugin cache.
Observed in the current Windows session:
This looks related to the same lifecycle/bridge problem rather than a separate Chrome installation issue:
getInfo,getUserTabs).@chromeuse in Codex Desktop does not reliably route through that backend.extension-host.exebefore removing the plugin cache.Expected behavior:
This strengthens the hypothesis that this is a Codex Desktop Windows plugin runtime lifecycle issue involving
extension-host.exe, named-pipe bridge setup/discovery, and plugin cache cleanup.Additional narrower diagnostic from the same Windows machine after another Codex update/reinstall attempt.
I found a state where Codex Desktop Settings > Computer Use > Google Chrome showed Connected and
extension-host.exewas running, but the official bundled check reported the actual Chrome extension was not installed in the selected Chrome profile:At the same time the native host manifest was correct:
Process state at that time:
Direct JSON-RPC to the Chrome extension pipe then timed out at
getInfo:After manually stopping the orphaned
extension-host.exeprocesses and opening the official Chrome Web Store URL for the expected extension ID, the official check changed to installed/enabled:Direct pipe RPC then recovered:
However, the official
setupAtlasRuntime({ globals: globalThis })path still hung for 60s innode_repl/js. Killing stalenode_repl.exeand the childcodex.exe app-server --listen stdio://closed the currentnode_repltransport, so the next recovery step requires restarting Codex or opening a fresh turn to force recreation of the REPL/tool runtime.This suggests at least two related lifecycle problems:
extension-host.exe/pipe exists.setupAtlasRuntime()can still hang in the Codex Desktopnode_replnative pipe bridge layer.This also explains why plugin uninstall fails: the plugin cache contains a running
extension-host.exe, so removal needs to stop/release that process first and surface the exact blocker if it cannot.Follow-up: I found and locally verified a workaround that narrows this failure to the browser-use ambient network/account initialization path rather than Chrome itself.
Current environment:
Key observations:
\\.\pipe\codex-browser-use\<uuid>pipe returns promptly:setupAtlasRuntime({ globals: globalThis })path previously timed out. I then tested the suspected ambient network probe directly inside the built-in Node REPL:That did not return before the tool timeout and reset the kernel. The AbortController did not reliably interrupt the hang.
nodeRepl.requestMetais frozen/non-extensible, so the flag cannot be injected from inside a running JS call:CODEX_NODE_REPL_PATH. The wrapper preserves the existingNODE_REPL_REQUEST_META, adds:and execs the official bundled
node_repl.exe.After restarting Codex Desktop, the request metadata included the flag:
With that metadata present, loading from the trusted bundled marketplace path succeeded quickly:
Then the normal browser-use API worked:
So for this Windows reproduction, disabling ambient network initialization unblocks the real Chrome extension backend. This is consistent with #21704 and #21722.
Suggested product fix:
https://chatgpt.com/backend-api/me/ account / analytics initialization path non-blocking for Chrome backend discovery.x-codex-browser-use-disable-ambient-networkor honorBROWSER_USE_DISABLE_AMBIENT_NETWORK=1in packaged Codex Desktop's built-in Node REPL.This workaround does not require reinstalling Chrome and does not change Chrome user data, the Chrome extension, the native messaging manifest, or the plugin cache. It only changes the request metadata passed to the Node REPL runtime before
browser-client.mjsinitializes.Windows workaround: manually disable Chrome plugin in Codex config
I was unable to uninstall the Chrome plugin from the Codex UI on Windows.
Even after removing the Codex Chrome extension from Chrome, Codex still showed the Chrome plugin and the UI displayed:
The fix was to manually remove the bundled plugin cache and disable the plugin in the Codex config.
Environment
Steps that worked
Close Codex and Chrome first, then run PowerShell as Administrator:
Thanks for sharing this workaround. This matches the uninstall/disable part of what I saw locally too: the Codex UI can fail to remove the Chrome plugin on Windows while plugin/runtime processes are still around, and manually disabling the plugin in
config.tomlplus clearing the plugin cache can get Codex back to a disabled state.One caution:
taskkill /F /IM node.execan also kill unrelated Node processes outside Codex. If possible, I would narrow the cleanup to Codex-related processes, for examplenode_repl.exe,extension-host.exe, andcodex.exe app-server --listen stdio://, plusCodex.exeitself.There also seems to be a second, separate failure mode after reinstalling/enabling the extension. In my case the official checks passed:
and direct JSON-RPC to the Chrome extension pipe worked, but the normal
setupAtlasRuntime()path still hung. The thing that unblocked runtime usage was disabling the Browser Use ambient network/account initialization path by injecting this request metadata before Node REPL starts:I did that with a local
CODEX_NODE_REPL_PATHwrapper that preserves the existingNODE_REPL_REQUEST_META, adds the flag above, and then execs the official bundlednode_repl.exe. After restarting Codex Desktop,setupAtlasRuntime()completed in about 100ms and:returned the current Chrome tabs successfully.
So I think there may be two related Windows issues here:
extension-host.exe, so UI removal fails.https://chatgpt.com/backend-api/me/ account initialization path blockssetupAtlasRuntime().Your workaround is useful for getting back to a disabled/clean plugin state. For users who want the Chrome plugin to remain installed and usable, the ambient-network workaround may be the more relevant direction until Codex makes that initialization non-blocking or exposes a supported config flag.
I've encountered a similar issue.
Windows 10
Codex Desktop
Chrome Extension 1.1.4
Extension ID: hehggadaopoacecdllhhajmbjkdcmajg
native host check-native-host-manifest.js: correct true
check-extension-installed.js: installed/registered/enabled true
extension-host.exe running
Chrome popup shows Connected
browser-client.mjs imports successfully
setupAtlasRuntime({ globals }) times out
Additional repro from a Windows Codex Desktop session, specifically for the bundled Browser Use / in-app browser path.
Environment observed locally:
Symptom:
The import succeeds, but
setupAtlasRuntime({ globals: globalThis })hangs until the Node REPL tool timeout. Restarting Codex did not clear the issue.Lower-level diagnostic:
\\.\pipe\codex-browser-use-*IAB pipes were present.Browser session does not belong to this IAB pipe.Direct length-prefixed JSON-RPC to the matching IAB pipe works. These calls succeeded:
Using that direct pipe path I could navigate the Codex in-app browser to
https://example.com, read page title/body text, and capture a screenshot. I also served a local HTML deck viahttp://127.0.0.1:<port>/...and opened it successfully in the in-app browser.file://navigation was less reliable, but the browser backend itself was clearly controllable.This suggests the IAB backend is healthy and the failure is in the official Browser Use wrapper initialization/discovery path rather than in the browser runtime itself. A likely fix direction is to make discovery robust when multiple browser-use pipes are present: apply strict per-pipe connect/getInfo/read timeouts, ignore stale or foreign-session pipes, and proceed with the pipe whose
codexSessionIdmatches the current request metadata. The wrapper should also surface which initialization step is blocking instead of hanging until the outer tool timeout.Thanks for the detailed Windows diagnostics. I maintain a small community Codex Skill focused specifically on Windows Codex Desktop failures around the bundled Chrome and Computer Use plugins:
https://github.com/navi118/codex-desktop-doctor-skill
It is not a general Codex repair script, and it does not make automatic destructive changes. The goal is to help an agent collect the relevant local evidence first, especially around the Codex Chrome Extension/native host, browser/Chrome backend setup, bundled marketplace/cache state, and Windows file-lock / access-denied patterns such as
plugin_cache_windows_file_lock,EBUSY,os error 5,missing-helper-path, orWindows Computer Use helper paths are unavailable.This issue looks related to the same Windows Chrome/browser native-pipe and bundled-cache failure family, especially because local Chrome checks can pass while
setupAtlasRuntime()still hangs and the logs show plugin uninstall/cache access-denied failures.Sharing the Skill here as a cautious evidence-gathering aid, not as an official fix or a recommendation to manually delete cache state.
Additional Windows reproduction confirming this is still present in newer builds (observed July 10, 2026).
Environment
26.707.3748.00.144.0150.0.7871.1011.2.27203.26575_0Local checks
Reproduction
@chromefrom Codex Desktop.No credentials, private data, or production/customer data were involved.
This appears to combine the Windows browser/IPC instability described here with the authenticated upload-form hang in #21597. The especially disruptive behavior is that the failure leaves Chrome visibly locked instead of failing fast and releasing user control.