Skip to content

[Windows][Codex App 26.930.7945.0] Chrome discovered but tab enumeration and creation fail with nodeRepl.fetch request failed #51363

Open

Description

@We1chan

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

Installed Windows package version: 26.930.7945.0 (OpenAI.Codex, read from Get-AppxPackage; About dialog was not checked).

What subscription do you have?

Not collected for this report.

What platform is your computer?

Windows 11 Home, Chinese edition, x64; OS version 10.0.26200.
Google Chrome installed binary version: 154.0.8037.98.
Reproduced on October 6, 2026, in a local Codex desktop chat.

What issue are you seeing?

Codex discovers Chrome as an extension-backed browser, but cannot enumerate its tabs or create a new tab. Browser operations fail after approximately 21–22 seconds with:

nodeRepl.fetch request failed

This blocks a simple user request to open a public website in Chrome.

The initial await cua.getState() returned Chrome provider metadata, then an inventory error:

{
  "apps": [],
  "browsers": [
    {
      "family": "chrome",
      "id": "3",
      "name": "Chrome",
      "type": "extension",
      "tabs": []
    },
    {
      "id": "2",
      "name": "Codex In-app Browser",
      "type": "iab",
      "tabs": []
    },
    {
      "id": "1",
      "name": "Codex MCP Apps",
      "type": "mcpapps",
      "tabs": []
    }
  ],
  "errors": [
    "Browser 3: Error: nodeRepl.fetch request failed"
  ]
}

Chrome profile name and extension/session identifiers have been omitted. The empty tab array is returned alongside an error, so it does not establish that Chrome actually had no tabs. The other browser providers were listed; their navigation functionality was not tested.

Relevant redacted stack frames from the initial failure:

Error: nodeRepl.fetch request failed
    at <TEMP>\kernel.js:1595:16
    at Object.settle (<TEMP>\worker-runtime.js:396:5)
    at <TEMP>\kernel.js:1871:11
    at handleInputFrame (<TEMP>\worker-runtime.js:418:7)
    at Socket.<anonymous> (<TEMP>\worker-runtime.js:434:9)

What steps can reproduce the bug?

  1. In the Windows Codex desktop app, ask the agent to test the Chrome connection.
  2. Call await cua.getState(). Chrome appears in the inventory as an extension-backed provider, but tab enumeration fails with the error above. The observed tool duration was 21.789 seconds.
  3. Explicitly mention @Chrome using plugin://browser@openai-bundled?browserFamily=chrome and ask it to open Baidu (https://www.baidu.com).
  4. Refresh browser discovery using await cua.listBrowsers(). This succeeds and reports Chrome with current provider ID "4" and the same extension instance as before.
  5. Use the newly discovered ID to create a tab:
await cua.createBrowserTab("4", "https://www.baidu.com");
  1. This fails again with nodeRepl.fetch request failed after 21.326 seconds. No successful tab creation or page load was confirmed.

The IDs above are observed session values, not stable IDs to reuse in another session. Use the current Chrome ID from discovery when reproducing.

What is the expected behavior?

When the connected Chrome extension is discovered, Codex should be able to enumerate its tabs and open a new tab at https://www.baidu.com.

If the extension transport is unavailable, the error should identify the failure and provide a supported recovery step instead of only exposing a generic fetch failure.

Additional information

Two separate intermediate errors occurred before the final attempt:

  • Reusing the previous provider ID "3" returned Browser is not available: 3; discovery then returned ID "4".
  • Passing { visible: true } to createBrowserTab returned Capability is not available: visibility. Removing that option and using the current provider ID still produced the fetch failure above.

These intermediate errors were corrected before the final failed tab request. Their relationship to the transport failure is unknown.

Related reports: #44383, #46095, #50837, and #50675 (Edge).

This report adds the exact current Windows app/Chrome versions, successful provider discovery, and a failed tab-creation attempt using the freshly discovered provider ID. No proxy/TLS/root-cause conclusion is established by the evidence collected here.

Activity

  1. added
    bugSomething isn't working
    appIssues related to the Codex desktop app
    windows-osIssues related to Codex on Windows systems
    connectivityIssues involving networking or endpoint connectivity problems (disconnections)
    on Oct 6, 2026
  2. Isla0721 commented on Oct 8, 2026

    @Isla0721

    I am experiencing the same issue on Windows 10.

    My environment:

    • Windows 10 Pro 22H2 (OS Build 19045)
    • Codex Desktop: 26.930.7945.0
    • Chrome: 149.0.7735.XX
    • PowerShell: 7.6.6

    Symptoms:

    • Codex detects Chrome, but cannot access or control Chrome tabs.
    • Using Computer Use to open a website in Chrome fails with:
      "nodeRepl.fetch request failed"
    • Codex reports:
      "Chrome is detected, but its automation bridge isn't responding."
    • Computer Use can detect Chrome, but no Chrome tabs are available.
    • The same problem occurs after restarting Codex.
    • I also restarted Windows, but the problem persists.

    I also confirmed that the official bundled plugins are installed and enabled:

    • browser@openai-bundled
    • chrome@openai-bundled
    • computer-use@openai-bundled
    • unified-computer-use@openai-bundled

    The problem started after a Codex update. Chrome/Computer Use worked normally before the update.

    This appears to be a persistent Windows Browser/Computer Use bridge issue rather than a missing plugin.

    I would appreciate it if you could investigate this issue on Windows 10.

  3. benzhi608-coder commented on Oct 8, 2026

    @benzhi608-coder

    Additional Windows reproduction and a request for supported host-level diagnostics.

    Environment: Codex desktop 26.1002.52244, build 13536; installed Windows package 26.1002.7124.0, x64. The app updater reports up_to_date. Both Chrome and Edge are discovered as extension-backed providers.

    Observed through the supported browser API:

    • cua.getState() initializes and returns provider metadata, but Chrome and Edge inventory results each report nodeRepl.fetch request failed.
    • Selecting the current Chrome provider succeeds; nameSession fails with the same error, before any tab is opened or claimed.
    • A newly created native chat did not resolve the problem. Tool wall durations in that chat were 1.171 seconds for inventory and 0.115 seconds for nameSession. Earlier attempts in another chat took about 21 seconds. These durations do not establish a network root cause.
    • The extension side panel loads. Earlier in-app browser navigation succeeded separately. Neither observation proves external browser control.
    • Ordinary commands, workspace read/write and native chat reads are working; the separate Windows sandbox runtime-ACL failure has a retained reversible workaround and is not claimed to explain this transport failure.

    Bounded read-only investigation of the installed browser-service 0.1.1 and its runtime wrappers:

    • Browser identity and feature-configuration requests use nodeRepl.fetch.
    • That API serializes authenticated_fetch to a Rust supervisor; it is not Node's native global fetch in this installed implementation.
    • The exposed failure is reconstructed from an error-message string. The nested cause/error code is not present in the returned tool error.
    • The checked desktop and sandbox log streams did not contain matching identity, feature-configuration or authenticated_fetch errors.
    • Windows has an enabled local system proxy, while the inspected user proxy environment variables are unset. Whether the supervisor uses the system proxy is unknown. This is a diagnostic observation, not proof of a proxy cause or a request to weaken TLS/security.

    Please provide:

    1. A supported way to obtain the supervisor request failure category/cause and whether the expected proxy was used, without exposing headers, credentials, identity responses or page content.
    2. A fixed compatible desktop/extension build or documented recovery path, if available.

    No account switch, reinstall, private browser RPC, generated-config patch or security-policy weakening was used for this investigation. Usernames, paths, chat IDs, browser profiles, extension IDs, raw logs and credentials are omitted.

  4. NicolaChen commented on Oct 9, 2026

    @NicolaChen

    Same root cause as #52472 (the macOS case, analyzed in depth). Summary of the mechanism found there — it matches the {"family":"chrome","type":"extension","tabs":[]} inventory shown above:

    The desktop app revokes the browser route for the active conversation almost immediately after capturing it: it hands the "browser use host" to a client-new-thread draft session and marks the user's session as ended (374 ms in the macOS logs; reproduced across restarts and conversation types). The extension-backed browser therefore never becomes usable for a real conversation, while the IAB backend can still respond — exactly the asymmetry seen here (Chrome discovered, tab enumeration/creation fails, nodeRepl.fetch request failed).

    Full evidence, code localization and cross-version comparison: #52472

  5. benzhi608-coder commented on Oct 9, 2026

    @benzhi608-coder

    Follow-up: browser request-header policy initialization fails again after a real desktop restart.

    Observed on Windows with installed package version 26.1002.7124.0. Earlier browser operations had succeeded after TUN was enabled, including after a previously confirmed account switch and app restart. Those successes did not establish durable recovery.

    After another confirmed Codex desktop app restart, with the same package:

    • The documented CUA inventory still discovered the Chrome extension.
    • cua.getState() failed after about 26.6 seconds with: "Unable to load browser request-header policy. Retry the browser command."
    • One normal cua.listTabs({browser: '3'}) retry failed with the same error after about 20.1 seconds. No further retries were attempted.
    • Startup logs still recognized the installed/current Chrome extension and reused the existing plugin root.
    • The proxy process and allowlisted persisted settings were unchanged: rule mode, system proxy and TUN enabled. This is not a complete in-memory route attestation.
    • Credential-free HEAD probes to https://ab.chatgpt.com/v1/initialize returned HTTP 403 through both the system route and the existing explicit proxy. These probes establish HTTP reachability only; they do not reproduce the CUA runtime's actual policy request or establish why initialization failed.

    The inspected desktop logs did not expose a corresponding policy request status, timeout stage, or response detail. We have not disabled the policy gate or changed credentials, permissions or proxy rules.

    Is there a supported way to obtain request-level diagnostics for this policy initialization failure (request ID, response category or timeout stage), without exposing credentials or bypassing the policy? The current evidence does not justify treating extension reinstallation or TUN alone as a durable fix.

  6. benzhi608-coder commented on Oct 10, 2026

    @benzhi608-coder

    Follow-up: browser request-header policy failure, recovered on a supported retry, with diagnostic detail loss

    Environment

    • Windows desktop package: 26.1007.2314.0
    • Codex CLI/app-server: 0.162.0-alpha.17.2
    • Installed CUA runtime: cfb32733c877621e
    • Browser-service bundle SHA-256: 8c83e93bdca10cdffa9f7af80db7775ddf1d993186dbf4b8b3d32d11e9bd9666

    Observed on 2026-10-10, approximately 14:10-14:13 UTC

    1. The supported browser inventory call discovered both Chrome and Edge, but each extension provider failed with:
      "Unable to load browser request-header policy. Retry the browser command."
    2. One subsequent supported Chrome tab-list retry succeeded.
    3. Chrome then successfully opened a public page, read its accessibility tree, clicked an observed link, and read the destination page.
    4. No reinstall, account switch, proxy change, model change, runtime patch, or policy bypass was performed by the agent during this comparison. This is a bounded recovery observation, not proof of a durable fix.

    Read-only source findings from the exact installed bundle

    • The final policy guard checks the latest SDK update result's success and client readiness, then constructs a new generic Error. It does not retain the update's error, source, or warnings.
    • Initialization/user-update wrappers can receive a resolved unsuccessful result without reporting its details through their rejection handlers.
    • The SDK data adapter races a 10-second result deadline against network work. The deadline can return null while the underlying retry sequence is still pending. Its debug timer is not canceled when the network wins, so a later timeout log alone does not establish that the deadline won.
    • The latest-ready wait follows replacement of the update promise. We therefore cannot infer an account-switch race from the mere existence of a stale-user branch.

    These are static error-propagation/deadline observations. They do NOT establish the unique trigger of this incident, nor prove a disabled gate, bad account, TLS failure, or network-provider fault.

    Transport comparison and log limits

    • Official codex doctor --json under restricted command execution reported UnknownIssuer.
    • The same official diagnostic under the normal host environment reported reachable provider HTTP endpoints and a successful Responses WebSocket handshake (HTTP 101); local database integrity checks also passed.
    • Native Windows TLS validation of the public ChatGPT and policy-host root pages succeeded. Root-page HTTP responses are not the authenticated policy request's status.
    • The desktop log and a narrowly time-filtered local log database did not expose the original policy request's status/error or SDK update details. Conversation-text echoes were excluded. Absence of these fields is not proof that no underlying error occurred.
    • Directory metadata incorrectly appeared to show empty log files; shared-handle reads contained the relevant time window. We are not reporting a proven logging outage.

    Request
    Please expose a supported, redacted browser-policy diagnostic that retains:

    • initialization versus user/backend-update phase;
    • current update success/readiness, safe source/warnings and original error code/name;
    • response status or transport/parse outcome, attempt number and elapsed time;
    • whether the data deadline actually won, whether network work completed later, and a safe correlation identifier.

    Please also review deadline/retry/cancellation coordination and preserve these details in the existing error path while keeping policy enforcement intact. The current generic error makes different failure modes indistinguishable and encourages ineffective reinstall/account/network troubleshooting.

    No credentials, account identifiers, business URLs, screenshots, response bodies, or local user paths are included in this supplement.

  7. benzhi608-coder commented on Oct 12, 2026

    @benzhi608-coder

    Follow-up: bounded host-response diagnostics and a compressed-transport comparison (Windows, October 12, 2026)

    This separates the observed failure stage from the ultimate network/header cause. It is not evidence of a policy denial, an account problem, or an SD-WAN fault.

    1. Six observed initialization-route requests reached the host response-body read stage.

    A temporary, consented diagnostic observed the original in-flight requests after the SDK had already reported failure. Six terminal host results returned "nodeRepl.fetch response read failed" after 30,002–30,003 ms. These are six selected observations on the initialization route, not a unique correlation to the failed policy gate. They show that the local request/result bridge progressed for those requests; they did not remain indefinitely before a host result.

    Read-only analysis of the pinned local host binary identified the response-body collection error branch constructing that fixed error string and discarding the underlying reqwest error. The existing JavaScript bridge forwards the error text without a structured cause. We still do not have the original HTTP status, received byte count, timeout flag, or error chain. Static analysis is not a captured native stack or proof of an exact timer type.

    1. A narrowly scoped compressed-transport candidate passed; the restored original failed again.

    The candidate changes only the existing Statsig initialization POST transport: it requests Brotli through the same host.fetch and performs bounded local decoding. The original SDK, feature-gate checks, policy decisions, timeouts and retries are preserved; malformed input fails closed. An independent review of the exact candidate implementation and isolated SDK tests verified the 10 MiB bounds on compressed and decoded bodies and the fail-closed cases; the successful live requests alone do not prove those bounds. No alternate endpoint, authentication change or policy bypass is introduced.

    Candidate: browser inventory completed in 3.97 s. At the helper boundary, the response had HTTP 200 and 689,699 compressed bytes, decoded to 5,215,728 bytes. The Content-Encoding indication was absent there; bounded Brotli decoding succeeded. A new public page was then created and read successfully.

    After restoring the exact original file and resetting the current chat browser tool, inventory failed again with "Unable to load browser request-header policy. Retry the browser command." after 20.51 s.

    Under separate consent for retained use, the same candidate passed again: inventory 3.75 s; HTTP 200, 685,954 compressed bytes, 5,215,355 decoded bytes; the same absent-encoding branch. Public-page reading passed and the test tab was closed. The candidate remains a pinned local workaround, not an official fix or an automatic upgrade patch.

    1. Limits and requested product diagnostics.

    The paired comparison supports the usefulness of this transport change in the tested environment, but does not establish a unique root cause. The missing encoding indication was observed only at the helper boundary: we cannot yet distinguish origin behavior from an intermediary or local response-header forwarding. We cannot infer why the original body read failed from the compressed success.

    A later desktop process started after adoption also passed Chrome enumeration and public-page reading. That check observed HTTP 204 passthrough, not a fresh Brotli response or proven cold initialization. Account switching, Cockpit launch provenance, Edge and long-term reliability remain unverified.

    Could the supported diagnostic path preserve sanitized error category/timeout flags, status when available, bytes received and response-encoding presence at the host boundary, correlated to the failed request? Also please check that the authenticated-fetch response body and encoding metadata remain consistent across forwarding. These fields would distinguish incomplete upstream/body transfer from local forwarding or decoding problems without exposing policy contents, credentials or browsing data.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    appIssues related to the Codex desktop appbrowserbugSomething isn't workingconnectivityIssues involving networking or endpoint connectivity problems (disconnections)windows-osIssues related to Codex on Windows systems

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions