Repository navigation
[Windows][Desktop] Chrome discovered but list/open tabs fail with nodeRepl.fetch on 26.915.4065.0 #47732
Description
Summary
The Chrome plugin in Codex Desktop on Windows is unusable in this environment. Chrome can be discovered as an extension-backed browser, but listing tabs or opening a requested page fails with nodeRepl.fetch request failed.
This is an additional environment report on a newer desktop package than #45249. Please link or consolidate it with the existing tracking issue if appropriate. The root cause has not been established.
Environment
- OS: Windows 10 Pro, version 10.0.19045, build 19045, x64.
- Codex desktop MSIX package:
OpenAI.Codex_26.915.4065.0_x64(verified from the running application path). - Bundled Chrome / Computer Use component manifests:
26.915.31945. - Google Chrome installed binary version:
153.0.8010.53. - Chrome connection extension version:
1.26.901.11451_0. - Extension ID:
hehggadaopoacecdllhhajmbjkdcmajg. - Local HTTP proxy software is present. The environment's
NO_PROXYcontainslocalhost,127.0.0.1,::1. No controlled proxy A/B test was completed in this report. - Observed repeatedly during troubleshooting on September 23–24, 2026.
Steps to reproduce
- Open Chrome using a profile with the OpenAI connection extension installed and enabled.
- Open a local Codex desktop task and invoke
@Chromewith an ordinary navigation/search request. - The browser-control runtime can successfully execute
await cua.listBrowsers()and return a Chrome backend withfamily: "chrome"andtype: "extension". - Use the exact returned browser ID to request its tabs, for example
await cua.listTabs({browser: "2"})when the discovered ID is2. - The call fails with
nodeRepl.fetch request failed. Earlier repetitions took approximately 21 seconds; the most recent repetition took approximately 14.6 seconds. - Opening a new Chrome tab through
cua.createBrowserTab("chrome", ...)also failed. Its completion could not be verified because the subsequent tab-list call failed as well.
Expected behavior
Codex should list the tabs in the discovered Chrome profile, open the requested page, and return readable page state.
Actual behavior
cua.listBrowsers(): Chrome extension backend discovered
cua.listTabs({browser: "<returned-id>"}): nodeRepl.fetch request failed
cua.createBrowserTab("chrome", ...): nodeRepl.fetch request failed
At other points the Chrome backend disappeared between discovery and selection, producing Browser is not available.
The latest failed attempt also emitted networking errors for requests to ab.chatgpt.com from the Statsig client. Those errors occurred alongside the browser-control failure; causation has not been established. Full request URLs and query parameters are intentionally omitted.
Checks already completed
- The desktop settings UI reports Google Chrome as installed, with browsing allowed.
- Both
chrome@openai-bundledandcomputer-use@openai-bundledhaveenabled = truein the local configuration. - There was a difference between Chrome profiles: the default profile did not have the extension during the latest inventory, while another profile had it installed and enabled. Opening the enabled profile restored browser discovery, but tab listing still failed. This does not fully explain the problem.
- The bundled native-host-manifest diagnostic returned
correct: true, with matching registry/manifest paths and the expected allowed extension origins. - The native messaging host executable exists, and
extension-host.exewas observed running during reproduction. - Resetting the browser tool's JavaScript session did not restore control.
- Bringing the current Codex task to the foreground and reopening its browser panel temporarily restored some discovery responses, but Chrome tab operations continued to fail.
- Restarting the desktop app/browser and checking the extension were already tried by the user without resolution.
Additional diagnostic clue
Desktop logs repeatedly include:
No ChatGPT browser route is available for browser session <redacted-current-task-id>
Some consecutive in-app-browser getInfo requests failed and then succeeded; similar failures later recurred. This may be relevant to task/session routing, but it has not been proven to cause the Chrome failure.
Impact and requested help
The issue has blocked ordinary browser work for the user over an extended period. Please investigate the Windows browser-control request path after successful backend discovery, and provide either a verified fix/workaround or a supported way to obtain the underlying transport error code.
Related reports
- [Windows][Desktop] Chrome discovery succeeds but listTabs fails after ~21s, even after Doctor WebSocket recovery #45249 — Chrome discovery succeeds but listTabs fails after approximately 21 seconds.
- [Windows][Desktop] Browser session discovery still fails with nodeRepl.fetch after clean IPC rebuild #47123 — Windows browser/session discovery still fails after IPC rebuild.
- [Windows] IAB route disappears after successful getInfo and persists after full app-data reset #45028 — IAB route disappears after successful getInfo.
- Windows desktop: cua.getState fails with nodeRepl.fetch request failed while built-in browser is visible #45340 — visible built-in browser cannot be enumerated.
Only the checks above were performed in this environment. Troubleshooting steps from the linked reports are not being claimed as performed here.
Privacy
This report includes only selected diagnostic facts. It does not attach screenshots, raw logs, conversation contents, account identifiers, profile names, private local paths, tokens, cookies, or browser storage.
Activity
github-actions commentedon Sep 24, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
mrli343 commentedon Sep 26, 2026
Additional reproduction on Codex 26.924.22138, observed September 26, 2026, with a separate network diagnostic that may help narrow this down.
Environment
10.0.26200.0.26.924.22138, build11645, channelprod; the app's update check reportedup_to_datefor that channel.26.924.2738.0(a different version field from the product version).153.0.8010.54; connection extension1.26.901.11451.Reproduction and observed results
cua.listBrowsers()successfully discovers Chrome withfamily: "chrome",type: "extension"and browser ID2in this run.cua.createBrowserTab("chrome", "about:blank", {sessionName: "🔎 Chrome 连接诊断"})fails withnodeRepl.fetch request failed(about 14.7 seconds).cua.listTabs({browser: "2", emit: false})fails with the same error (about 2.3 seconds).No usable tab handle was returned. Whether the failed create operation left a blank tab could not be verified because listing also failed. Expected behavior is successful tab creation/listing for the discovered Chrome backend. The failure blocks browser work before any target website is accessed.
The bundled extension diagnostic reports installed/enabled/registered, with no disable reasons. Native-host registration, the host executable, and the expected extension origin are present; the native host was also observed running. These checks establish installation state, not working browser control.
New diagnostic clue: separate, unauthenticated network probe
Using the packaged Node binary (
v24.21.0) in separate processes, a HEAD request to the publichttps://chatgpt.com/robots.txtendpoint produced:TypeError, cause codeECONNREFUSED200The probe used no login credentials and read no response body. Proxy variables were temporary to the test process. The managed browser-tool manifest did not explicitly configure proxy variables, but the actual running browser-tool process environment was not inspected.
This is a diagnostic clue, not proof of the root cause: the probe did not exercise the actual CUA request destination, authenticated transport, or browser-control path. No browser-tool configuration patch or application restart has been applied, and Chrome control remains unresolved.
Is there a supported way to inspect the underlying transport error or configure proxy inheritance for the Windows browser-control process? A clearer error than
nodeRepl.fetch request failedwould help distinguish network reachability from session routing or authentication failures.VidyFoo commentedon Sep 27, 2026
Verified workaround on macOS for the same discovery-success / browser-control-timeout symptom, tested September 27, 2026: enabling FlClash TUN restored actual Chrome tab enumeration and page reading.
This is a separate macOS reproduction, not confirmation of a Windows fix. It also relates to #46609 and #43787.
Environment:
Before enabling TUN:
nodeRepl.fetch request failed.node_replprocess making direct TCP connections, stuck in SYN_SENT, to addresses matching the local DNS results forchatgpt.comandab.chatgpt.com.Workaround and verification:
cua.getState()successfully returned Chrome and its 11 open tabs (tool call about 7.8 seconds).cua.createBrowserTab(..., "https://example.com", ...)succeeded (tool call about 1 second), returning the Example Domain heading, body text and link.No official application/plugin files, native-host binaries, certificate checks, or authentication policy were patched to obtain this result.
Interpretation: this before/after result strongly supports network routing as a blocker in this environment. TUN can cover traffic from helper processes that do not use the system HTTP proxy. It does not establish which internal authenticated request originally failed, a universal root cause for this issue, or that every similar failure is fixed by TUN. TUN must remain operational for this workaround where direct connectivity is unavailable; it is not a fix for operation with the proxy fully stopped.
A supported way for browser helper processes to honor OS proxy settings, plus errors identifying the failed network prerequisite, would help avoid repeated extension reinstalls.
No private URLs, account identifiers, credentials, browser contents, or raw logs are attached.
zbzbdzb commentedon Sep 29, 2026
Additional Windows reproduction and transport-boundary evidence on Codex Desktop
26.924.22138, build11645, prod; Store package26.924.2738.0; bundled Node24.21.0.With the original CUA launcher restored, no custom Codex HTTP(S) proxy environment configuration, and a full Desktop restart:
nodeRepl.fetch request failed.Subsequent controlled network change: after the user enabled the existing proxy client's TUN adapter, with the same original runtime/configuration and a fresh CUA state, Chrome control succeeded. We verified creation and reading of the loopback page, local navigation by clicking, external HTTPS navigation, following a visible link and reading the destination, and closing the test tab. No runtime patch, feature toggle or policy bypass was used. The immediately preceding system-proxy/global-mode test with TUN off still failed after approximately 21.7 seconds. This establishes a working TUN-on path, not dynamic system-proxy support when TUN is off.
Further A/B observation: after the user switched to another working proxy node with TUN still enabled, resetting the JavaScript state and initializing Chrome succeeded again, with verified local clicks and external page reads. After disabling TUN while retaining the system proxy, the existing initialized JS session could still follow a link and read the destination. However, after cleaning up its test tab and resetting the JS kernel, initialization failed again after approximately 21.8 seconds. Thus a previously initialized session continuing to work with TUN off is insufficient evidence of a fix.
js_resetresets JavaScript bindings; it is not a verified restart of the Rust host or its connection pool. Full-process restart, local-port changes and runtime updates are not claimed as tested.The actual fetch path appears independent of Node global fetch. The installed
node_repl.exeembeds the privileged JS messagetype: "authenticated_fetch",src/authenticated_fetch.rs, the exact observed error string, and reqwest 0.12.28 / hyper-util 0.1.20. An independent NodeglobalThis.fetchtest withNODE_USE_ENV_PROXYtherefore does not establish the behavior of this Rust path.The installed host contains proxy environment variable names, but an ASCII/UTF-16 presence check did not find
respect_system_proxy,system_proxy_fallback, or the Windows registry constantsInternet Settings,ProxyEnable, andProxyServer. Upstream reqwest/hyper-util gates Windows system-proxy discovery behind a separate compile feature. This suggests a missing system-proxy capability in the independent host, but string absence is not conclusive build-feature proof.A user configuration overlay does not currently appear to solve this durably. A read-only CLI probe that supplies the same official executable plus one harmless environment marker parses successfully, but replaces the entire CUA registration: the original script argument, 18 generated environment entries and other launch/tool settings are absent. This does not prove a complete copied registration could not run; it means it would have to copy Desktop-generated runtime, service, pipe and tool metadata. The public plugin configuration schema intentionally excludes transport fields, and the public MCP catalog chooses a whole registration rather than deep-merging it. No services were started with the probe, and no persistent configuration was written.
Could maintainers clarify:
respect_system_proxyfeature, or a separate client?The required behavior is: proxy stays enabled; switching proxy nodes or local ports and enabling/disabling TUN should recover automatically; replacing the Codex runtime should not require reapplying a patch. Proxy-off operation is not required. A TUN-always-on workaround does not cover the full requirement.
No TLS, authentication, URL-policy or request-header-policy checks were disabled. This report omits private URLs, usernames, local paths, port values, process/session identifiers, credentials, cookies, tokens and raw logs.
q3579338 commentedon Oct 8, 2026
Windows workaround without TUN: inject proxy env into the CUA/node_repl launch configs
Reproduction confirmed on Windows 10 Pro (build 19045), Codex Desktop
26.1002.52244(product) /26.1002.7124.0(MSIX), bundled Node24.21.0, Chrome extension1.26.901.x. Same symptom:cua.listBrowsers()discovers Chrome (familychrome, typeextension), butlistTabs/createBrowserTabfail withnodeRepl.fetch request failed(~14-21s) whenever TUN is off and only a system HTTP proxy is present.What worked without TUN: after injecting proxy env vars into the CUA/node_repl launch configuration (not just the user/system environment), Chrome tab enumeration and page reads succeeded with the system proxy (TUN off). Three injection points, all re-appliable after every auto-update:
~/.codex/config.toml→[mcp_servers.node_repl.env]add:plugins/cache/openai-bundled/unified-computer-use/<ver>/.mcp.json→mcpServers.cua_repl.envadd the sameHTTP_PROXY/HTTPS_PROXY/ALL_PROXY/NO_PROXY.runtimes/cua_node/<hash>/bin/node_modules/@oai/cua-repl/bin/cua-repl.mjs→ setprocess.env.HTTP_PROXY/HTTPS_PROXY/ALL_PROXYbeforeawait import("@oai/cua-repl").A full Desktop restart after the edit was required (env is only read by newly-launched helper processes).
Why the user-level env vars alone did NOT work: the Desktop MCP config uses an environment allowlist (
NODE_REPL_UNTRUSTED_ENV_ALLOWLIST), so host-levelHTTP_PROXY/NODE_USE_ENV_PROXYare filtered out before reaching the helper. They must be written into the MCP serverenvblocks above.Note on the fetch path: this corroborates @zbzbdzb's Rust-path finding. On this machine
NODE_USE_ENV_PROXY=1made no observable difference by itself (consistent with the fetch being the embedded Rustauthenticated_fetch/ reqwest path, not Node global fetch). The part that actually mattered here was theHTTP_PROXY/HTTPS_PROXY/ALL_PROXYvalues reaching the helper process via the config, which reqwest-based clients honor. So treat step 1+2 (the configenvblocks) as the essential fix and step 3 as belt-and-suspenders.Caveats (same ones @zbzbdzb raised): this is a config patch, not a durable fix. It must be re-applied after every Desktop auto-update (the runtime/plugin directories get re-extracted with a new hash), and it does not solve dynamic proxy-node/port switching. A supported first-class mechanism (helper honors the Windows system proxy, or a stable per-app proxy setting that survives updates) is still the correct long-term answer.
No private URLs, credentials, or tokens included.