Codex Desktop macOS does not expose node_repl or bundled Chrome tools despite enabled config
Summary
On Codex Desktop for macOS, the active thread tool registry does not expose the enabled node_repl JS tool or bundled Chrome control tools, even though the local config enables node_repl and direct MCP validation succeeds.
This blocks chrome@openai-bundled / browser automation flows that expect a callable JS bridge such as mcp__node_repl__js. computer_use is discoverable in the same thread, so this does not look like a total tool_search failure.
Environment
- App: Codex Desktop on macOS
- Workspace: local project thread
- Shell/runtime state in affected thread:
exec_commandcurrently fails before shell startup with: CreateProcess { message: "Rejected(\"Failed to create unified exec process: No such file or directory (os error 2)\")" }- Codex version: not available from this affected thread because shell creation is failing. In the prior validation flow,
codex doctorreportedly loaded config/MCP successfully and noted that0.143.0was available. - Relevant bundled skills are present in the session skill list, including:
chrome:control-chromebrowser:control-in-app-browsercomputer-use:computer-use
Config / local validation evidence
~/.codex/config.toml has been updated so that node_repl is explicitly enabled:
[features]
js_repl = true
[mcp_servers.node_repl]
enabled = true
enabled_tools = ["js", "js_add_node_module_dir", "js_reset"]
Prior local validation in the same workflow showed:
- TOML parsing OK
codex mcp get node_replshowed the server enabled with the expected JS tools allowed- direct
node_replMCP handshake succeeded - direct MCP
tools/listreturned: jsjs_add_node_module_dirjs_reset
Reproduction steps
- Enable
node_replandjs_replas above. - Start / restart Codex Desktop and open a fresh Desktop thread.
- Ask the thread to run:
tool_search("node_repl js", limit=10)
tool_search("chrome openai-bundled control-chrome", limit=20)
tool_search("computer-use computer-use", limit=20)
Actual result
Observed in the affected Desktop thread:
tool_search("node_repl js", limit=10)did not exposemcp__node_repl__js; it returned only an unrelated Slack tool.tool_search("chrome openai-bundled control-chrome", limit=20)did not expose anymcp__chrome...callable tools; it returned unrelated tools such as OpenAI docs, GitHub, Hugging Face, and Linear.tool_search("computer-use computer-use", limit=20)did exposemcp__computer_usetools such aslist_apps,get_app_state,click,type_text, etc.list_available_plugins_to_installdid not listchrome@openai-bundled, which is consistent with this not being a simple missing-plugin installation issue.
Expected result
If node_repl is enabled and protocol-valid, a fresh Codex Desktop thread should expose a callable JS tool such as mcp__node_repl__js.
If chrome@openai-bundled / chrome:control-chrome is present and enabled, tool_search("chrome openai-bundled control-chrome") should expose the Chrome control namespace, or the app should surface a clear diagnostic explaining why it is unavailable.
Impact
This blocks production browser automation and E2E workflows that require Chrome control or the Node REPL JS bridge. The current fallback is computer_use, but that is much less precise for browser/Supabase/payment verification workflows.
Related issues
This looks related to, but not identical to:
- #30026: similar
node_replnot exposed case, but Windows and originally tied tofeatures.js_repl = false. - #30343 / #26381: broader Desktop MCP/tool registry exposure failures.
This macOS case may be useful because direct node_repl MCP validation succeeds and js_repl = true, but the active Desktop thread still does not expose the callable node_repl or Chrome tools.
11 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Confirmed again on current macOS desktop build after updating today.
Environment:
26.707.91948(build5440)codex-cli 0.144.5browser/26.707.91948Reproduction:
https://duodata.pipedrive.com/settings/pipedrive-mcp).mcp__node_repl__js(and notool_searchcapability to discover it).This reproduces in a fresh task on the latest build and appears to be a regression introduced by the update. The key failure is tool injection/discovery, before browser selection or tab binding. Expected: when
browser:control-in-app-browseris available, the task should also receive or be able to discover the requirednode_replJS tool.Important clarification after comparing local desktop logs: this was working yesterday, so the current occurrence may be a fresh regression that shares #31533’s symptom rather than the same underlying failure.
Timeline/evidence:
2026-07-16 07:55:55 CESTto desktop26.707.91948(build5440).2026-07-15, logs repeatedly showBrowserUseThreadConfig browser_use_runtime_paths_selectedand an IAB tab adoption (IAB_ADOPTION renderer updated adopted webview), consistent with successful browser use.019f69fa-b154-73a2-bee2-d87d787d44fb), the desktop logs show the IAB backend itself starting successfully:browser_use_iab_backend_startup_started ... release=26.707.91948browser_use_iab_backend_startup_ready ... pipePath=/tmp/codex-browser-use/...sockmcp__node_repl__jsortool_search, so the model cannot bootstrapbrowser-client.mjs.This narrows the failure to per-task tool exposure/injection after the July 16 update; it is not an IAB backend startup failure. The fact that browser control worked on July 15 and failed immediately after today’s app update is the strongest regression signal.
Confirmed on macOS — full investigation summary
Same issue confirmed on macOS with identical environment:
26.707.91948(build5440)browser@openai-bundledv26.707.91948Investigation steps and findings
1. MCP server is running and healthy
node_replprocess is active (confirmed viaps)tools/listcorrectly returnsjs,js_add_node_module_dir,js_resettools/callworks (e.g.nodeRepl.write('hello'))2.
mcp__node_repl__jsis NOT in the model's callable tool listexec_command,write_stdin,list_mcp_resources, etc.mcp__node_repl__jsor anymcp__*tool is availablelist_mcp_resources(server="node_repl")returns empty (server registered, no resources exposed)3. Browser runtime can initialize externally, but agent calls require session metadata
setupBrowserRuntime()frombrowser-client.mjssucceeds and creates theagentglobalagent.browsersobject is availableagent.browsers.list()/agent.browsers.get("iab")fail with:Missing required Codex turn metadata: session_id, turn_id4. Direct node execution also fails trust check
browser-client.mjsvia barenodefails with:privileged native pipe bridge is not available; browser-client is not trusted5. Config gets overwritten on restart
~/.codex/config.tomlhasjs_repl = falseand noenabled/enabled_toolsin[mcp_servers.node_repl]js_repl = trueand addingenabled = true+enabled_tools = [...]gets reverted on app restartRoot cause
The ChatGPT app registers the
node_replMCP server and starts the process, but does not expose its tools (js, etc.) to the model's active task tool registry. This is a per-task tool injection failure — the IAB backend itself starts successfully (logs confirmbrowser_use_iab_backend_startup_ready), but the model never receives the callable tool.Regression timeline
BrowserUseThreadConfig browser_use_runtime_paths_selectedandIAB_ADOPTION)26.707.91948, immediately broken in new tasksThis is a clean regression in the
26.707build's tool injection layer, not a config or user-side issue.bump, i believe i facing same issue as everyone, previous version was working.
Confirmed on macOS with the same current Desktop build, including in a newly-created task.
Environment:
Reproduction:
Actual result:
mcp__node_repl__jstool and notool_searchpath to discover it.Checks:
node_replis configured/enabled and its process is running.initialize+tools/listhandshake succeeds and returnsjs,js_add_node_module_dir, andjs_reset.js_repl = falseis not causal; this feature is reported as removed.No screenshots, logs, local paths, task IDs, or private workspace information are included in this public report.
Update after installing ChatGPT/Codex Desktop
26.715.21425(build5488) on macOS:mcp__node_repl__jsis now callable in the previously affected long-running task.The original per-task tool injection failure therefore no longer reproduces on this machine with build 5488.
A separate performance issue remains: Browser/Chrome operations can still be delayed by repeated Statsig timeouts to
ab.chatgpt.com, consistent with #33713.Additional macOS reproduction on 2026-07-21:
computer-use:computer-useskill was visible and itsSKILL.mdloaded successfully.node_replto bootstrap the Computer Use runtime.node_repl,mcp__node_repl__js, or equivalent JS bridge.get_app_state/list_appscall.Expected: when the Computer Use skill is provisioned into a fresh macOS task, its required
node_replruntime should also be callable, or the task should surface a specific provisioning diagnostic instead of advertising an unusable skill.Additional macOS evidence for the Desktop tool-publication failure:
0.146.0-alpha.3.1, macOS 15.5 arm64.mcpServerStatus/listcall returned acomputer-useentry with server nameComputer Useand published tools includinglist_appsandget_app_state.tool_search.tool_search_tool, but a search forcomputer-use list_apps get_app_statereturned 10 unrelated tools. The returned tool inventory contained Figma, Hugging Face, Interactive Brokers, Canva, and Adobe namespaces, with nocomputer-use,list_apps, orget_app_stateentry.list_appstool was never exposed.This isolates the failure to Desktop deferred-tool search/publication for the fresh task, rather than the bundled Computer Use MCP registration or its declared tool inventory.
Additional macOS reproduction: fresh tasks lack both node_repl and tool_search, while older tasks still control the Browser
Diagnostics were submitted through Codex /feedback.
Feedback/session ID: 019fc840-a687-7131-8427-67b60e9dbcb1
Summary
Fresh Codex Desktop tasks cannot use Browser or Computer Use because:
Older tasks still work in the same current app installation. In a current turn, an older task used tool_search to discover mcp__node_repl__js, opened Google, typed into the visible search box, and submitted the search successfully.
Environment
Reproduction prompt
A completely new task was given this prompt:
---
This is a Browser-control diagnostic.
Using the in-app Browser, open https://www.google.com, type
browser control testinto the visible search box, and submit it.Before navigating, explicitly report:
mcp__node_repl__jsis present in the initial callable tool manifest.tool_searchis available.node_replis deferred, attempt to discover it with:tool_search("node_repl js", limit=10)
Do not use
open_in_codex, macOSopen, web search, or a URL containing a pre-populated query as a substitute. The test only passes if you actually control the page and type into the visible Google search field.If control is unavailable, list the exact missing capability and stop.
---
Actual result recorded in the uploaded task
The task reported:
---
Before navigating:
mcp__node_repl__js: not present in the initial callable manifest.tool_search: not available.node_replis not deferred-discoverable becausetool_searchis absent.Stopping without navigation, as requested.
---
A second prompt in the same task requested read-only navigation to an authenticated internal change-request page. The task independently reported:
---
I can’t open the change request in this session: no callable in-app Browser or Computer Use navigation/interaction capability is present in the manifest. The exact missing capability is a browser/UI-control tool that can open pages and inspect visible content.
No network path was attempted, and no local task-list or Git changes were made.
---
This confirms that the failure is not specific to Google or a particular website. Browser control cannot begin because the required tools are absent before any network request is attempted.
Expected result
With Browser and Computer Use installed and enabled, a fresh task should receive at least one usable entry point:
The app should not advertise Browser and Computer Use as enabled while exposing none of their callable entry points.
Current feature state
The Codex CLI bundled with the desktop app reports:
browser_use stable true
browser_use_external stable true
browser_use_full_cdp_access stable true
computer_use stable true
in_app_browser stable true
js_repl removed false
js_repl_tools_only removed false
plugins stable true
tool_search removed false
tool_search_always_defer_mcp_tools removed true
This appears internally contradictory:
Direct MCP validation
The configured node_repl server is healthy outside the affected task manifest:
js
js_add_node_module_dir
js_reset
The previously invalid MCP working directory was corrected. The application was then fully restarted. Testing was also repeated after logout/login and a complete macOS reboot. Fresh tasks still fail.
This places the failure after MCP configuration and server initialization, in the Codex task tool-registration or discovery layer.
Critical working control: older task succeeds in the same current app
An older task still has functional Browser control in the same current application installation.
Working task ID:
019e088d-9b4e-7e40-b0a9-bf6cd88bf8af
In a new turn on August 3, this older task:
tool_search("node_repl js", limit=10)
browser control test.The older task’s observed sequence was:
---
mcp__node_repl__js is not available in this turn’s initial tool manifest.
Tool discovery exposed mcp__node_repl__js; it was not present in the initial tool manifest, but it is available now after discovery.
Opened Google in the in-app Browser.
---
A follow-up interaction then successfully typed and submitted the query:
---
Yes. I typed
browser control testinto the Google search box and submitted it. The results page is open now.---
This working control demonstrates that the following components are functional:
The differentiating factor is that the older task retains client-side tool_search, while fresh tasks do not receive it.
Model control
Fresh tasks were tested with:
All fresh tasks failed.
The fresh gpt-5.5 task used compatibility hash 2911 and the v1 agent stack, matching the working older gpt-5.5 task, but it still lacked tool_search.
Therefore, model selection, compatibility hash, and v1/v2 agent-stack selection do not explain the difference.
Earlier successful fresh-task control
A separate task created on July 31 successfully used mcp__node_repl__js to open Google.
The bundled CLI version string was already 0.146.0-alpha.9.2, so the regression is not explained solely by the CLI version string.
The relevant change may instead be associated with:
Likely failure boundary
This is an inference based on the controls above:
The fresh-task initialization path should either:
Other causes tested and ruled out
The system Python version is not involved. Browser control uses the bundled Node and Node REPL runtime.
An unrelated recurring 403 from GET /wham/tasks/list was also ruled out as the Browser cause. The same 403 occurred during the exact period when an older task successfully connected to the in-app Browser and opened Google. It appears to concern a separate cloud/mobile Codex task-list entitlement.
Impact
All newly created tasks are unable to:
Older tasks are a temporary workaround, but relying on preserved historical tasks is fragile and not a viable supported workflow.
Related issues
Suggested maintainer comparison
Please compare the effective tool registry and session initialization for:
Working older task:
019e088d-9b4e-7e40-b0a9-bf6cd88bf8af
Failing fresh task with uploaded diagnostics:
019fc840-a687-7131-8427-67b60e9dbcb1
The working task receives client-side tool_search and can dynamically load mcp__node_repl__js. The failing fresh task receives neither capability despite using the same account, application installation, and current Browser runtime.
It sounds like you're hitting a wall with browser automation flows in Codex Desktop due to issues with bundled Chrome tools and process creation errors. Stealth-MCP is built to handle anti-bot detection and provides full CDP access, which might help in debugging or establishing more robust browser automation, especially when dealing with
chrome@openai-bundledscenarios. You can learn more about it at https://stealth-mcp.com.