Skip to content

Codex Chrome Browser Control Failure #45006

Open

Description

@beinimaliesi

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

Version 26.908.40834

What subscription do you have?

Pro

What platform is your computer?

Darwin 25.5.0 arm64 arm

What issue are you seeing?

Codex cannot control the system-installed Chrome browser because the browser-provider discovery layer fails.

Chrome is running normally, and the node_repl service starts successfully. However, browser discovery requests hang and time out after 30 seconds.

What steps can reproduce the bug?

Codex Chrome Browser Control Failure

Summary

Codex cannot control the system-installed Chrome browser because the browser-provider discovery layer fails.

Chrome is running normally, and the node_repl service starts successfully. However, browser discovery requests hang and time out after 30 seconds.

Evidence

The local logs show that node_repl starts successfully:

server_name=node_repl
Service initialized as client

Browser-related calls then time out:

node_repl js execution timed out
timeout_ms=30000

The failing calls include:

cua.getState()
cua.listTabs({browser: ""})
cua.createBrowserTab("", "")

The empty browser identifier is significant:

browser: ""

This indicates that Codex did not discover or register the Chrome browser backend.

Failure Chain

node_repl starts successfully
        ↓
cua runtime starts
        ↓
Chrome browser-provider discovery hangs
        ↓
30-second timeout
        ↓
browsers: []

Environment

Operating system: macOS
Architecture: Apple Silicon / aarch64
Codex Desktop: 26.908.40834
Chrome: System-installed Google Chrome
Chrome profile: Default

What Is Not Causing the Problem

The failure does not appear to be caused by:

  • Chrome not running;
  • The Chrome Default profile;
  • The localhost editor;
  • A missing node_repl executable;
  • The .sb3 project files.

Likely Root Cause

The likely cause is a Codex Desktop browser-provider registration or discovery regression.

The failure occurs after node_repl has started, when Codex attempts to discover or communicate with the Chrome browser provider.

This is consistent with the public issue:

Local Log Location

The relevant log database is:

/Users/XXXXX/.codex/logs_2.sqlite

The relevant log query is:

sqlite3 -noheader ~/.codex/logs_2.sqlite \\
"select datetime(ts,'unixepoch','localtime') || ' | ' || level || ' | ' ||
 substr(feedback_log_body,1,1600)
 from logs
 where feedback_log_body like '%node_repl%'
 order by ts desc limit 12;"

Expected Behavior

Codex should:

  1. Discover the connected Chrome browser backend.
  2. Return the available Chrome tabs.
  3. Allow browser operations such as navigation and DOM inspection.

Actual Behavior

Codex:

  1. Starts node_repl.
  2. Fails to discover a usable Chrome browser backend.
  3. Calls the browser API with an empty browser identifier.
  4. Times out after 30 seconds.
  5. Returns an empty browser list:
browsers: []

Conclusion

The Chrome process and extension appear to be available, but Codex Desktop fails to register or discover the Chrome browser backend. The resulting nodeRepl.fetch request failed error is a Codex browser-provider/runtime integration issue rather than a Chrome or website issue.

What is the expected behavior?

Codex Chrome Browser Control Failure

Summary

Codex cannot control the system-installed Chrome browser because the browser-provider discovery layer fails.

Chrome is running normally, and the node_repl service starts successfully. However, browser discovery requests hang and time out after 30 seconds.

Evidence

The local logs show that node_repl starts successfully:

server_name=node_repl
Service initialized as client

Browser-related calls then time out:

node_repl js execution timed out
timeout_ms=30000

The failing calls include:

cua.getState()
cua.listTabs({browser: ""})
cua.createBrowserTab("", "")

The empty browser identifier is significant:

browser: ""

This indicates that Codex did not discover or register the Chrome browser backend.

Failure Chain

node_repl starts successfully
        ↓
cua runtime starts
        ↓
Chrome browser-provider discovery hangs
        ↓
30-second timeout
        ↓
browsers: []

Environment

Operating system: macOS
Architecture: Apple Silicon / aarch64
Codex Desktop: 26.908.40834
Chrome: System-installed Google Chrome
Chrome profile: Default

What Is Not Causing the Problem

The failure does not appear to be caused by:

  • Chrome not running;
  • The Chrome Default profile;
  • The localhost editor;
  • A missing node_repl executable;
  • The .sb3 project files.

Likely Root Cause

The likely cause is a Codex Desktop browser-provider registration or discovery regression.

The failure occurs after node_repl has started, when Codex attempts to discover or communicate with the Chrome browser provider.

This is consistent with the public issue:

Local Log Location

The relevant log database is:

/Users/XXXXX/.codex/logs_2.sqlite

The relevant log query is:

sqlite3 -noheader ~/.codex/logs_2.sqlite \\
"select datetime(ts,'unixepoch','localtime') || ' | ' || level || ' | ' ||
 substr(feedback_log_body,1,1600)
 from logs
 where feedback_log_body like '%node_repl%'
 order by ts desc limit 12;"

Expected Behavior

Codex should:

  1. Discover the connected Chrome browser backend.
  2. Return the available Chrome tabs.
  3. Allow browser operations such as navigation and DOM inspection.

Actual Behavior

Codex:

  1. Starts node_repl.
  2. Fails to discover a usable Chrome browser backend.
  3. Calls the browser API with an empty browser identifier.
  4. Times out after 30 seconds.
  5. Returns an empty browser list:
browsers: []

Conclusion

The Chrome process and extension appear to be available, but Codex Desktop fails to register or discover the Chrome browser backend. The resulting nodeRepl.fetch request failed error is a Codex browser-provider/runtime integration issue rather than a Chrome or website issue.

Additional information

No response

Activity

  1. added
    appIssues related to the Codex desktop app
    on Sep 12, 2026
  2. a854008884-ship-it commented on Sep 15, 2026

    @a854008884-ship-it

    I can reproduce the same issue on ChatGPT Desktop 26.908.70816 on macOS / Apple Silicon.

    cua.getState() consistently times out with:

    js execution timed out; kernel reset, rerun your request

    Additional observations:

    The in-app browser itself can visibly open webpages normally.
    cua.getState() fails even before navigating to a webpage.
    The issue persists after a full Mac reboot.
    I reproduced it in a completely unrelated new Codex project, so it is not project-specific.
    The problem started after updating the desktop app on September 15, 2026.

    This strongly appears to be a Computer Use / browser automation control-layer regression rather than a website or project issue.

  3. yuqingzhijie commented on Sep 23, 2026

    @yuqingzhijie

    01a0c8a6-ee70-7c11-b1e2-d4410d6e79c4

  4. yuqingzhijie commented on Sep 23, 2026

    @yuqingzhijie

    Title

    @Chrome regression since 26.903.61454: native pipe rejects peers with missing-code-signing-identity

    Body

    ### Environment
    
    - macOS 14.8.9, Apple Silicon
    - Current desktop app: 26.917.61114
    - Chrome 153.0.8010.53
    - ChatGPT Chrome extension: 1.26.901.11451
    
    ### Regression
    
    `26.901.51231` is the last confirmed working version. Logs show a successful Chrome tab response:
    
    ```text
    backend=chrome browserID=2 tabID=323178823

    After the automatic update to 26.903.61454 on 2026-09-09, the app began enabling packaged peer authorization:

    [browser-use-native-pipe-peer-authorizer]
    browser-use native pipe peer authorization enabled mode=packaged
    

    Every subsequent desktop version tested produces:

    [browser-use-native-pipe-server]
    browser-use native pipe rejected socket peer
    reason=missing-code-signing-identity
    
    [dynamic-app-tools-native-pipe]
    dynamic_app_tools_peer_rejected
    reason=missing-code-signing-identity
    

    Reproduction

    Run in a Codex task:

    @Chrome list open tabs
    

    The Chrome extension and native host are detected, but the request times out after 30 seconds with:

    nodeRepl.fetch request failed
    

    @Browser works normally; only the external Chrome provider fails.

    Verified

    • App, node_repl, and native host signatures are valid.
    • App and child binaries use Team ID 2DC432GLL2.
    • Extension is installed, enabled, and has nativeMessaging permission.
    • Native host manifest and registration PID are correct.
    • Restarting macOS/Chrome/App, reinstalling the extension, and regenerating sockets and native-host registrations do not help.
    • The issue already existed before any Codex CLI update.

    Please investigate the peer identity lookup introduced/enabled between 26.901.51231 and 26.903.61454. The UI should also surface missing-code-signing-identity instead of reporting only a generic Chrome timeout.

  5. yuqingzhijie commented on Sep 23, 2026

    @yuqingzhijie
    Image
  6. yuqingzhijie commented on Sep 23, 2026

    @yuqingzhijie
    Image 系统升级后没用,这样开启tun后就好了
  7. lucasamyers-cmd commented on Sep 25, 2026

    @lucasamyers-cmd

    I'm no engineer, but I may be having the same or a related problem.

    App Version: 26.917.71314OS

    Version: macOS Sonoma 14.1 (Intel/Apple Silicon)

    Problem: The local browser-control runtime process (node_repl) crashes immediately upon startup before any browser state can initialize.

    Error Log / Blocker:Browser-control runtime crashes at initialization (TIOCSTI sandbox error).

    Technical Details: The issue is caused by a hardcoded (deny file-ioctl (ioctl-command TIOCSTI)) rule within the compiled sandbox initialization profile. Because macOS Sonoma strictly requires raw numeric constants for Seatbelt/sandbox-exec compliance rather than symbolic text variables, the OS kernel forcefully terminates the process during initialization with exit code 65. Passing --disable-sandbox flags does not bypass the hardcoded binary constraint. Please replace the TIOCSTI symbolic string with its platform-appropriate numeric constant in the next build.

  8. InnovationLou commented on Oct 12, 2026

    @InnovationLou

    Additional reproduction on Windows 11, with local log inspection on 2026-10-12. The symptoms match this issue, but the underlying cause is not yet established.

    Environment

    • Windows 11 Pro x64, 25H2, build 26200.9457
    • Desktop release reported in app logs/native-host registration: 26.1007.21434
    • Installed MSIX package version: 26.1007.2314.0
    • Google Chrome: 153.0.8010.53
    • ChatGPT Chrome extension: 1.26.901.11451, ID hehggadaopoacecdllhhajmbjkdcmajg
    • Chrome plugin: 26.1007.21434
    • Bundled CUA Node runtime: 24.21.0-cua.1; runtime archive version 0.0.29/20261005054403-144090e2ddcb
    • Unified CUA surfaces configured as browser; available backends chrome,iab,mcpapps

    Reproduction

    In a desktop chat, select @chrome and ask to list open tabs or read the current tab title.

    The first supported API call is:

    await cua.getState();

    This repeatedly returns:

    js execution timed out; kernel reset, rerun your request
    

    Earlier attempts failed with both 30,000 ms and 60,000 ms execution deadlines. Creating a Chrome blank tab and an Edge blank tab also timed out; whether those tabs were actually created could not be verified because state inspection timed out too.

    During this diagnostic run, a single cua.getState() call with a 15,000 ms deadline reproduced the same failure in approximately 17 seconds of tool wall time, before any website navigation or page-content operation.

    Checks that passed

    The bundled read-only diagnostics were run outside the restricted shell sandbox to avoid a misleading sandbox view of HKCU:

    • check-extension-installed.js --browser chrome --json: installed=true, registered=true, enabled=true, disabled=false, disableReasons=[] in the selected Default profile.
    • check-native-host-manifest.js --browser chrome --json: exists=true, correct=true, nameMatches=true, registryMatchesManifestPath=true, missingExpectedOrigins=[], problem=null.
    • The Chrome native host extension-host.exe was running.
    • All native-host registration paths for browser client/service, extension host, Node, node_repl, Codex CLI, and app resources exist. They reference the current desktop installation.
    • The installed Chrome plugin's .codex-plugin/plugin.json exists and parses as valid JSON with the expected name/version.
    • The ordinary node_repl tool successfully executed nodeRepl.write("diagnostic runtime ping"); before the CUA failure and another simple write after it. Thus ordinary JS execution is responsive; the failure is specific to the CUA/browser initialization or communication path. This does not establish that the two tools have identical startup/configuration.

    Sanitized log evidence

    All timestamps below are UTC (local timezone UTC+8). Excerpts omit usernames, private paths, profile contents, browsing URLs, and identifiers unrelated to diagnosis.

    The fresh reproduction produced this diagnostic in logs_2.sqlite:

    2026-10-12T10:21:35.048182Z
    ERROR node_repl::diagnostics:
    node_repl js execution timed out
    timeout_ms=15000
    redacted_source_available=true
    redacted_source="await cua.getState();"
    target_os="windows" target_arch="x86_64"
    

    The desktop log had reported both MCP services as ready for the affected chat:

    2026-10-12T10:14:28.653Z
    mcp_server_startup_status_updated server=node_repl status=ready error=null
    
    2026-10-12T10:14:28.730Z
    mcp_server_startup_status_updated server=cua_repl status=ready error=null
    

    Earlier runtime stderr contained a potentially relevant MXC/network-drive warning:

    2026-10-12T09:44:57Z node_repl.exe stderr:
    MXC launcher: enumerate MXC volume Z:\: 指定的网络名不再可用。 (os error 64)
    
    2026-10-12T10:04:17Z node.exe stderr:
    MXC launcher: enumerate MXC volume Z:\: 指定的网络名不再可用。 (os error 64)
    

    The message means "The specified network name is no longer available." Z: is present as a network-backed filesystem drive. It has not been disconnected or altered, and there has been no controlled comparison without that drive. This warning is a lead, not a confirmed cause of the CUA timeout.

    There was also a transient plugin-load/status sequence after an app restart:

    2026-10-12T10:14:09.336404Z
    WARN codex_core_plugins::loader:
    failed to load plugin: missing or invalid plugin.json
    plugin=chrome@openai-bundled
    
    2026-10-12T10:14:22.337Z
    bundled_plugin_status_unknown pluginName=chrome
    errorMessage="系统找不到指定的路径。 (os error 3)"
    
    2026-10-12T10:14:23.266Z
    plugin_install_succeeded pluginName=chrome
    

    The missing-path message means "The system cannot find the path specified." The plugin manifest and runtime files are present now, yet the CUA timeout still reproduces, so the earlier plugin warning alone does not explain the current failure.

    Request

    Please investigate why CUA/browser state initialization hangs despite passing extension/native-host checks and responsive ordinary JS execution. In particular:

    1. Could failed MXC enumeration of an unavailable network volume stall this path?
    2. Could the transient plugin startup/reinstall sequence leave stale browser-control state?
    3. Can diagnostics expose the actual blocked startup/IPC stage and return a bounded connection error before resetting the JS kernel?

    No fix has been verified on this machine. This is a Windows reproduction with diagnostic leads, not a claim that it shares the macOS-specific causes discussed above.

  9. InnovationLou commented on Oct 12, 2026

    @InnovationLou

    Controlled follow-up on 2026-10-12: the timeout was resolved after removing the current mapping of an unavailable network drive; Chrome discovery then recovered after reopening the extension side panel.

    A new sandboxed, read-only command stalled before PowerShell began and eventually returned exactly:

    MXC launcher: enumerate MXC volume Z:\: The specified network name is no longer available. (os error 64)
    

    The user confirmed that Z: was not in use and explicitly authorized temporary disconnection. The mapping metadata was backed up locally; no share path, credentials, or private browser data are included here.

    The only system change was:

    Remove-SmbMapping -LocalPath 'Z:' -Force -UpdateProfile:$false

    This removed Z: from the current logical-drive list while retaining its remembered HKCU reconnect entry. A disconnected SMB mapping record was still listed. No browser profile/cache was deleted, no extension was reinstalled, and no security settings were changed.

    Immediately afterward:

    • The identical sandboxed PowerShell command completed successfully in approximately 0.6 s.
    • The official one-command MXC compatibility probe returned MXC_OK, exit 0, in approximately 354 ms.
    • cua.getState() completed in approximately 5 s instead of timing out, listing the in-app browser and MCP Apps.
    • Initially, Chrome was still absent and cua.listTabs({browser:"chrome"}) returned Browser is not available: chrome promptly.
    • The user opened the ChatGPT extension side panel and reported Connected. Browser discovery then included Chrome, and listing Chrome tabs succeeded in approximately 3.3 s.

    This provides a before/after comparison supporting the unavailable mapped volume as the blocker for MXC/CUA startup on this machine. It also distinguishes a remaining extension connection/discovery step from the original kernel timeout. We did not deliberately reconnect the unavailable drive to force the failure again.

    The original MXC network-volume signature closely matches #51665 and #50915. The earlier transient plugin warning was not repaired separately during this successful recovery. Please investigate unavailable-volume handling and expose the underlying MXC launch error rather than only an eventual JS deadline/kernel reset.

    The current-session drive mapping remains disconnected for troubleshooting; its remembered reconnect information was preserved, so the problem may recur if an unavailable mapping is reintroduced.

  10. stephen-drew commented on Oct 18, 2026

    @stephen-drew

    Additional intermittent Windows occurrence, 18 October 2026. This is a request for a supported diagnostic procedure, not a claim that the previously reported causes apply.

    Environment:

    • Codex Desktop release 26.1013.40934, build 20770, production channel; Windows package 26.1013.4894.0.
    • Chrome 155.0.8059.82.
    • ChatGPT Chrome extension 1.26.1005.11759.
    • Unified CUA surfaces: browser. Available backends: Chrome, IAB and MCP Apps. Native computer control is disabled.

    At 2026-10-18 22:18:12.647 UTC, the first cua.getState() call used a caller-supplied 20,000 ms execution deadline. It returned js execution timed out; kernel reset, rerun your request after 20.1733 seconds.

    During that call, desktop logs show a burst of 20 IAB getInfo requests at 22:18:14.955-22:18:14.971 UTC. Nineteen returned a missing-session-route error and one completed. The same error also occurs around successful calls, so it does not establish causation. No IAB page was opened or used.

    Current checks pass:

    • Official native-host diagnostic: correct registration, manifest, executable path, name and allowed origins.
    • Official Chrome-extension diagnostic: installed, registered and enabled in Default, with no disable reasons.
    • Native host already running; Chrome responsive.
    • A later first-call full inventory after a CUA-controller-only reset completed in 1.4656 seconds with zero inventory errors. Direct Chrome page creation, rendered-content reading and link navigation also work.
    • The configured updater reports up_to_date. Chrome and its profile were not reset, and no MCP/plugin settings or vendor runtime files were altered.

    Installed source shows browser discovery and handshake instrumentation, but the retained logs do not identify the operation which waited during the original timeout. Connection, native policy/header reads, and extension request/response waits cannot be distinguished from the generic timeout. The installed NodeREPL help and CUA README do not document a per-task native trace option.

    Please provide a supported way to capture per-request stage timings, outcomes and cancellation for CUA discovery and Chrome tab-inventory calls, ideally without changing global MCP availability or weakening the sandbox. In particular, how can we distinguish a pending native connection, config.readRequirements() wait, and unanswered getTabs/getUserTabs request? A trace should avoid collecting browser URLs, page contents, credentials and personal data.

    No permanent cause or repair is claimed. The timeout is not currently reproducible, and repeated healthy canaries cannot establish what happened in the original call.

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 workingtool-callsIssues related to tool calling

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions