openai / openai/codex

Desktop CUA browser automation fails: authenticated_fetch exceeds Statsig policy timeout and returns after NetworkCore timeout

Open
#44,761 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

app browser bug connectivity Linux
Dominant language
Rust
Stars
125k
Forks
19.4k
PR merge metrics
PR metrics pending

Description

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

26.903.61454

What subscription do you have?

ChatGPT Pro (5x usage)

What platform is your computer?

OS: Arch Linux Codex CLI: 0.154.0 ChatGPT Desktop / CUA bundle: Desktop browser component: 26.903.61454 Chrome extension: ID: hehggadaopoacecdllhhajmbjkdcmajg

What issue are you seeing?

Symptom

Desktop CUA browser automation can detect the Chrome extension instance successfully:

  • cua.listBrowsers() succeeds
  • cua.getBrowser() succeeds

However, browser tab operations fail during browser request-header policy initialization.

The failing operation:

browser.user.openTabs()

returns:

Unable to load browser request-header policy. Retry the browser command.

The Chrome extension itself remains usable from the ChatGPT sidebar.

Investigation summary

The issue does not appear to be caused by:

  • Chrome extension installation
  • Native Messaging manifest
  • stale chrome-native-hosts entries
  • approval permission settings
  • Desktop proxy startup arguments

The failure happens after browser discovery, during the authenticated fetch flow used for browser request-header policy initialization.

Observed behavior

The request appears to involve two timeout layers:

Statsig NetworkCore timeout:
~10 seconds

authenticated_fetch / reqwest client timeout:
~30 seconds

Observed examples:

Request A:

t=0
authenticated_fetch starts

t=10s
NetworkCore timeout

t=30s
bridge fulfilled with HTTP 200

Request B:

t=0
authenticated_fetch starts

t=10s
NetworkCore timeout

t=30s
bridge rejected

This suggests cancellation may not propagate from the JS layer to the underlying authenticated_fetch task.

Static investigation

Observed request path:

browser-service.mjs
|
runtime.fetch
|
globalThis.nodeRepl.fetch
|
authenticated_fetch message
|
JsRuntimeManager::handle_authenticated_fetch_request
|
Reqwest HTTP client

The embedded node_repl reports:

nodeRepl.fetch request failed

A 30-second timeout configuration exists during the HTTP client construction.

Questions

Could maintainers confirm:

  1. Is the 30-second reqwest timeout expected behavior for authenticated_fetch?
  2. Should Statsig NetworkCore cancellation abort the underlying authenticated_fetch request?
  3. Is there a debug mode to preserve the original reqwest error instead of converting it into:

nodeRepl.fetch request failed

  1. Has this behavior changed in newer Desktop CUA bundles?

Additional notes

No source files were modified.

All diagnostics were performed with read-only inspection.

The issue reproduces with a single:

browser.user.openTabs()

call.

What steps can reproduce the bug?

Steps to reproduce

  1. Start Codex Desktop with Desktop CUA browser automation enabled.
  2. Ensure Chrome extension bridge is available.
  3. Verify browser discovery:

cua.listBrowsers()
cua.getBrowser()

Both succeed.

  1. Execute:

browser.user.openTabs()

  1. Observe the failure:

Unable to load browser request-header policy. Retry the browser command.

Expected behavior

browser.user.openTabs() should return the current browser tabs successfully.

Actual behavior

The request waits for the authenticated_fetch timeout chain and eventually fails after the browser policy initialization timeout.

What is the expected behavior?

No response

Additional information

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Read browser-service.mjs and trace runtime.fetch through globalThis.nodeRepl.fetch, authenticated_fetch, and JsRuntimeManager::handle_authenticated_fetch_request. Reproduce the failure with browser.user.openTabs() after confirming cua.listBrowsers() and cua.getBrowser() succeed. Done means browser tabs load reliably without the timeout-chain failure and the underlying request result remains diagnosable.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, rust
Domain
backend, desktop, devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.