Repository navigation
Chrome plugin Node REPL bootstrap fails from WSL due to Windows path/trust mismatch #21971
Description
Summary
On Windows with Codex running in WSL, the Chrome plugin can show enabled/connected on both the Codex and Chrome sides, but new agent turns cannot actually complete the Chrome skill bootstrap. The failure happens before browser automation is usable.
Observed failures
Depending on the local workaround state, fresh turns hit one of these errors:
Node runtime not found; install Node or set NODE_REPL_NODE_PATH
Module not found: /mnt/c/.../.codex/plugins/cache/openai-bundled/chrome/latest/scripts/browser-client.mjs
privileged native pipe bridge is not available; browser-client is not trusted
Earlier in the same install path there was also a plugin install issue where installManifest.mjs rewrote chrome/0.1.7 to chrome/latest, but chrome/latest did not exist until it was manually copied from the versioned plugin directory.
Environment shape
- Windows host with Chrome and Codex Chrome Extension installed.
- Codex desktop / agent runtime running from WSL with workspace paths like
/mnt/c/.... - Chrome native host manifest and registry entry exist on Windows.
extension-host.exeis running.- Chrome plugin is enabled in Codex config.
Root cause from debugging
There appear to be three WSL boundary mismatches:
- The
node_replMCP command may be configured as a Windows.exepath that cannot correctly launch the bundled Windows Node runtime from the WSL/sandbox context, sonode_replis missing or reports no Node runtime. - When
node_replis made to run using the Windows bundled Node, the Chrome skill still tells agents to importbrowser-client.mjsusing the WSL plugin path (/mnt/c/...). That import fails because the Node process is Windows-backed and needs a Windows path/file URL such asfile:///C:/.../browser-client.mjs. - After using a Windows file URL,
node_replstill rejects the Chrome browser-client unless the exact bundledbrowser-client.mjshash is trusted viaNODE_REPL_TRUSTED_BROWSER_CLIENT_SHA256S. In this WSL/custom-wrapper path, that trust information does not appear to be propagated automatically.
Local workaround that made smoke tests pass
A WSL wrapper for node_repl was configured to launch through Windows cmd.exe, set the bundled Windows Node path, and trust only the exact SHA-256 of the installed Chrome browser-client.mjs:
#!/usr/bin/env bash
exec /mnt/c/Windows/System32/cmd.exe /c "set NODE_REPL_NODE_PATH=C:\\Users\\<user>\\.cache\\codex-runtimes\\codex-primary-runtime\\dependencies\\node\\bin\\node.exe && set NODE_REPL_TRUSTED_BROWSER_CLIENT_SHA256S=<sha256-of-browser-client.mjs> && C:\\Users\\<user>\\AppData\\Local\\OpenAI\\Codex\\bin\\node_repl.exe"The local Chrome skill bootstrap examples also had to use the Windows file URL for browser-client.mjs rather than the /mnt/c/... path.
After those two changes, a fresh codex exec smoke test using @chrome and calling only browser.user.openTabs() succeeded and returned the live Chrome tab list.
Expected fix
For Windows+WSL sessions, Codex/Chrome plugin setup should automatically:
- expose the
node_repljstool in new turns, - launch
node_replwith a Node executable that works across the WSL/Windows boundary, - provide an importable browser-client path compatible with the actual Node runtime path semantics,
- propagate the trusted Chrome browser-client hash/path metadata to
node_repl, and - ensure
chrome/latestexists or avoid rewriting to it when only a versioned plugin directory exists.
The user-facing symptom is that the Chrome plugin looks healthy/connected, but @chrome cannot actually control Chrome until these path/trust issues are manually worked around.
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
[-]Chrome plugin Node REPL bootstrap fails from WSL due Windows path/trust mismatch[/-][+]Chrome plugin Node REPL bootstrap fails from WSL due to Windows path/trust mismatch[/+]bbbiggest commentedon Jun 10, 2026
I hit a very similar failure on Windows + WSL with the bundled Chrome plugin.
Setup:
openai-bundled/chrome/26.608.12217agent.browsers.get("extension")failed withBrowser is not available: extensionThe native host manifest at
%LOCALAPPDATA%\OpenAI\extension\com.openai.codexextension.jsonwas being written with:But there was no
chrome\latestdirectory. The actual host binary was at:Rewriting the manifest to that real Windows path restored Chrome plugin bootstrap after a full Chrome restart;
browser.user.openTabs()returned the live tab list again. The workaround only stuck once the manifest stopped being overwritten back to the/mnt/c-style path.This seems related to #24268, but in this case the bad WSL/Windows path ends up directly in the Chrome Native Messaging Host manifest.
My guess for the durable fix:
/mnt/<drive>/...to<drive>:\...or use the Windows-side cache path directly;chrome/latestunless that alias exists, or create/update the alias during install/reconcile.MisterRound commentedon Jun 10, 2026
Updated Chrome/
node_replWSL findings from the same Windows Desktop + WSL environment.The current working local shape is:
node_replMCP server is routed through a WSL wrapper;node_repl.exe --disable-sandboxfrom an isolated Windows runtime home:or, in the current runtime shape, the extension backend under the populated
agentobject.Important distinction for debugging:
browser.tabs.list()can correctly return an empty array because it lists automation-owned tabs.browser.user.openTabs()is the user-tab smoke that proves the extension path can see live user tabs.browser.tabs.queryis not part of the wrapper API I tested.The Chrome path can now work while still not proving the underlying WSL shell/
arg0bug is fixed. The acceptance gate after a Chrome smoke should include:nodeRepl.cwdis the isolated Windows runtime home;%USERPROFILE%\.codex\tmp\arg0remains WSL/Linux-only;.bathelpers appear only under the isolated runtime home;node_repl.exe -> codex.exe app-server --listen stdio://sidecar is spawned.This matters because earlier successful Chrome smokes still triggered product-generated bare sidecars that polluted shared
arg0. The durable product fix is not only path normalization for Chrome native host files; it also needs product-generated browser/CUAnode_replsidecars in Desktop WSL mode to use an isolated Windows runtime home by default.yui-stingray commentedon Jun 17, 2026
I’m seeing a related Windows + WSL Chrome plugin failure with a slightly different local signal.
Environment:
Observed behavior:
Browser is not available: extensionLocal diagnostics:
scripts/check-extension-installed.js --jsonreports the extension installed/enabled/registered in the WSL Chrome profile.scripts/check-native-host-manifest.js --jsoncannot validate this setup because it exits with:Unsupported platform for native host manifest check: linux. This script supports macOS and Windows.Native Messaging manifest issue:
The WSL Chrome Native Messaging manifest exists at:
<WSL_HOME>/.config/google-chrome/NativeMessagingHosts/com.openai.codexextension.jsonBut it points to a stale Windows-side plugin path:
<WINDOWS_HOME>/.codex/plugins/cache/openai-bundled/chrome/0.1.7/extension-host/windows/x64/extension-host.exeThat target no longer exists.
The current WSL plugin cache is:
<WSL_HOME>/.codex/plugins/cache/openai-bundled/chrome/26.611.61049and the only extension-host binary found under the current cache is:
<WSL_HOME>/.codex/plugins/cache/openai-bundled/chrome/26.611.61049/extension-host/windows/x64/extension-host.exefileidentifies it as:PE32+ executable (console) x86-64, for MS WindowsExpected behavior:
agent.browsers.get("extension")should either work or return an actionable reason.Actual behavior:
Browser is not available: extension.I avoided manual manifest edits because this looks like a plugin install/native-host registration boundary issue rather than a user config issue.