Windows Codex Desktop WSL: Browser Use IAB skill unavailable because node_repl/js tool is not injected

Open 💬 0 comments Opened Apr 30, 2026 by kdo82

What version of the Codex App are you using (From “About Codex” dialog)?

26.426.12240

What subscription do you have?

Pro

What platform is your computer?

Microsoft Windows NT 10.0.26200.0 x64

What issue are you seeing?

Summary

In Codex Desktop on Windows using WSL runtime, the bundled Browser Use / in-app browser skill appears to be installed and enabled, and the in-app browser itself can be opened and used manually. However, the skill cannot automate the browser because the required Node REPL js tool is not injected into the thread.

The Browser Use skill expects a callable tool such as mcp__node_repl__js, but the active thread only receives the standard desktop tools.

Environment

Platform

Microsoft Windows NT 10.0.26200.0 x64

Runtime

  • Codex Desktop on Windows
  • Agent runtime: WSL
  • WSL distro: Ubuntu
  • Workspace opened from a WSL filesystem path
  • CODEX_HOME is set to a WSL-side path, for example ~/.codex

Codex app-server

The WSL-side app-server process is launched by Codex Desktop as:

<Windows user profile>/.codex/bin/wsl/codex app-server --analytics-default-enabled
The app-server environment includes:

HOME=<WSL home>
CODEX_HOME=<WSL home>/.codex
SHELL=/usr/bin/zsh
WSL_DISTRO_NAME=Ubuntu
CODEX_INTERNAL_ORIGINATOR_OVERRIDE=Codex Desktop
What I expected
When using the bundled browser-use:browser skill with the Codex in-app browser, the thread should expose the Node REPL JavaScript execution tool, typically:

mcp__node_repl__js
Then the skill should be able to run:

const { setupAtlasRuntime } = await import("<plugin root>/scripts/browser-client.mjs");
await setupAtlasRuntime({ globals: globalThis, backend: "iab" });
and control the Codex in-app browser.

What actually happens
The Browser Use skill is available, but the required node_repl / js tool is not available in the thread.

The current thread dynamic tools only include:

automation_update
read_thread_terminal
load_workspace_dependencies
install_workspace_dependencies
No node_repl, js, or mcp__node_repl__js tool is present.

Tool discovery for node_repl js, mcp__node_repl__js, and similar terms does not expose the Node REPL tool.

Configuration
browser-use@openai-bundled is enabled in config.toml:

[plugins."browser-use@openai-bundled"]
enabled = true

[marketplaces.openai-bundled]
source_type = "local"
source = "<WSL home>/.codex/.tmp/bundled-marketplaces/openai-bundled"
Relevant feature config:

[features]
js_repl = true
js_repl_tools_only = false
plugins = true
tool_search = true
However, the app-server feature list reports:

browser_use                         stable   true
in_app_browser                      stable   true
js_repl                             removed  false
js_repl_tools_only                  removed  false
plugins                             stable   true
tool_search                         stable   true
Additional diagnostics
The in-app browser itself appears to work manually. I can open the IAB and search Google manually.

Desktop logs show the Browser Use native pipe server starting, for example:

browser-use native pipe listening pipePath=\\.\pipe\codex-browser-use\<uuid>
The bundled Browser Use plugin files exist, including:

<WSL home>/.codex/plugins/cache/openai-bundled/browser-use/0.1.0-alpha1/skills/browser/SKILL.md
<WSL home>/.codex/plugins/cache/openai-bundled/browser-use/0.1.0-alpha1/scripts/browser-client.mjs
I also tested node_repl.exe manually. It can expose MCP tools js and js_reset when launched directly. With CODEX_HOME passed through WSLENV, the privileged native pipe bridge can be injected for modules under CODEX_HOME.

However, manual node_repl cannot complete Browser Use setup because it does not have Codex turn/session metadata:

Failed to connect to browser-use backend "iab".
No current Codex session metadata was available, so IAB ownership could not be checked.
This suggests that Browser Use requires the official Desktop/app-server-injected Node REPL tool so that x-codex-turn-metadata / session ownership metadata is available.

Suspected cause
This looks like a Desktop/app-server tool injection issue rather than a missing plugin or browser problem.

The Browser Use plugin is installed and enabled, the IAB native pipe server exists, and the browser UI is usable manually. But the thread does not receive the required node_repl/js execution tool, so the skill cannot bootstrap.

It may be related to js_repl being marked as removed while Browser Use still depends on node_repl for IAB control.

Reproduction steps
Use Codex Desktop on Windows.
Configure Agent runtime to WSL.
Enable the bundled browser-use@openai-bundled plugin.
Start a new thread.
Ask Codex to use browser-use:browser to open or inspect a page in the in-app browser.
Observe that the Browser Use skill is loaded, but mcp__node_repl__js / node_repl is not available.
The assistant cannot run Browser Use bootstrap code because the required js tool is missing.
Expected fix
Please ensure that when Browser Use / IAB is available in Codex Desktop, the required Node REPL JavaScript execution tool is injected into the thread with the necessary Codex turn/session metadata, or update the Browser Use skill/runtime to use the current supported mechanism.

### What steps can reproduce the bug?

1. Open Codex Desktop on Windows.

2. Configure the Agent runtime to WSL.

3. Make sure the bundled Browser Use plugin is enabled:

```toml
[plugins."browser-use@openai-bundled"]
enabled = true
Start a new Codex Desktop thread.

Ask Codex to use the bundled Browser Use skill, for example:

Use browser-use:browser to open https://www.google.com in the in-app browser.
Observe that the in-app browser can be opened and used manually, but the assistant cannot automate it.

Inspect the tools available to the thread. The expected Node REPL JavaScript execution tool is missing.

Expected tool:

mcp__node_repl__js
Actual tools exposed to the thread:

automation_update
read_thread_terminal
load_workspace_dependencies
install_workspace_dependencies
Because mcp__node_repl__js / node_repl is not injected, the Browser Use skill cannot run its required bootstrap code:
const { setupAtlasRuntime } = await import("<plugin root>/scripts/browser-client.mjs");
await setupAtlasRuntime({ globals: globalThis, backend: "iab" });
If node_repl.exe is launched manually as an MCP server, it can expose js and js_reset, but Browser Use setup still fails because Codex turn/session metadata is missing:
Failed to connect to browser-use backend "iab".
No current Codex session metadata was available, so IAB ownership could not be checked.
So this seems to require the official Desktop/app-server-injected Node REPL tool, not a manually launched MCP server.

Session id: available on request, but omitted here to avoid including user-specific local state.

Token/context usage: not applicable. The issue reproduces in a fresh thread before context pressure becomes relevant.

### What is the expected behavior?

_No response_

### Additional information

_No response_

View original on GitHub ↗