Desktop CUA browser automation fails: authenticated_fetch exceeds Statsig policy timeout and returns after NetworkCore timeout
Nobody has claimed this yet.
- 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()succeedscua.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:
- Is the 30-second reqwest timeout expected behavior for authenticated_fetch?
- Should Statsig NetworkCore cancellation abort the underlying authenticated_fetch request?
- Is there a debug mode to preserve the original reqwest error instead of converting it into:
nodeRepl.fetch request failed
- 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
- Start Codex Desktop with Desktop CUA browser automation enabled.
- Ensure Chrome extension bridge is available.
- Verify browser discovery:
cua.listBrowsers()
cua.getBrowser()
Both succeed.
- Execute:
browser.user.openTabs()
- 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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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