[Regression] In-app Browser and Chrome extension still wait ~30s on ab.chatgpt.com Statsig timeouts in VPN TUN mode
What issue are you seeing?
This appears to be a regression or an incomplete fix for #29385, which was closed as completed on 2026-07-14.
On the latest Codex/ChatGPT Desktop build, both the in-app Browser and the Chrome extension can eventually navigate to a normal webpage, but the browser-control operation still takes about 30.5–30.7 seconds. During the wait, the browser client logs 10-second Statsig request timeouts to ab.chatgpt.com.
Current measurements for https://example.com/:
| Browser surface | Result | Elapsed time |
| --- | --- | ---: |
| Codex in-app Browser | Success; title Example Domain | 30743 ms |
| Codex Chrome extension | Success; title Example Domain | 30584 ms |
The in-app Browser logged both:
ERROR [Statsig] POST https://ab.chatgpt.com/v1/initialize?... Timeout of 10000ms expired.
ERROR [Statsig] POST https://ab.chatgpt.com/v1/rgstr?... Timeout of 10000ms expired.
The Chrome extension path logged:
ERROR [Statsig] POST https://ab.chatgpt.com/v1/rgstr?... Timeout of 10000ms expired.
The requested webpage is reachable and returns the correct URL/title. However, the browser operation completes only after the ambient Statsig requests time out. Since the total duration is slightly above 30 seconds, this can still surface as a browser-call timeout even though the requested page itself is reachable.
Environment
Codex/ChatGPT Desktop: 26.715.21316 (5484)
Codex CLI: 0.145.0-alpha.18
In-app Browser plugin: openai-bundled/browser/26.715.21316
Chrome plugin: openai-bundled/chrome/26.715.21316
Google Chrome: 150.0.7871.116
macOS: 26.5.2 (25F84)
Architecture: arm64
The same approximately 30-second symptom was also reproducible before updating, with Browser/Chrome plugin build 26.707.91948.
VPN / proxy details
A VPN was already running continuously in TUN mode before Codex and Chrome were launched; it was not enabled only for this test.
The VPN connection dashboard confirms that both processes:
codexCodex (Service)
created HTTPS connections to ab.chatgpt.com:443, and both connections were matched to the active proxy node. This indicates that Codex traffic to this hostname is being captured and routed by the TUN proxy.
In a normal Chrome tab, opening https://ab.chatgpt.com/ returns an HTTP response immediately:
RBAC: access denied
That response is expected for an unauthenticated direct page request, but it confirms that Chrome can resolve, connect to, and receive an HTTP response from the hostname through the current network path. Despite that, the browser-client Statsig POST requests still expire after 10000 ms.
Steps to reproduce
- On macOS, enable a VPN in TUN mode before starting Codex.
- Confirm that Codex traffic to
ab.chatgpt.com:443is routed through the active proxy node. - Start Codex Desktop with the in-app Browser and Chrome plugins installed.
- With the in-app Browser, create a tab and navigate to
https://example.com/. - Verify that the page eventually returns
https://example.com/and titleExample Domain. - Observe that the operation takes about 30 seconds and logs 10-second Statsig timeouts for
/v1/initializeand/or/v1/rgstr. - Repeat through the Codex Chrome extension.
- Observe the same approximately 30-second completion time and Statsig timeout pattern.
Expected behavior
Non-critical Statsig initialization and event logging should not block or delay a user-requested browser operation.
If ab.chatgpt.com is temporarily unreachable from the browser-client network context, these requests should fail open quickly or run independently from the critical navigation path. If the process is expected to honor the system/TUN proxy, its privileged network path should use the same effective routing as the rest of the Codex application.
A successful navigation to a reachable target page should return well within the normal browser-call timeout.
Troubleshooting already attempted
- Updated Codex/ChatGPT Desktop to the latest available build.
- Restarted Codex.
- Restarted Chrome.
- Reinstalled the Codex Chrome extension.
- Restarted macOS.
- Repeated the test after the application/plugin update.
- Confirmed through the VPN dashboard that both
codexandCodex (Service)connections toab.chatgpt.com:443use the proxy node.
The behavior remains reproducible on both browser surfaces.
Related issues
- #29385 — same in-app Browser/Chrome ambient timeout problem; closed as completed, but still reproducible on build
26.715.21316. - #30841 — overlaps with the ambient ~30-second delay, but also reports a separate deep-control/CDP bridge hang. This report is limited to the shared Statsig delay that affects both normal Browser surfaces.
6 Comments
Try adding the config below to ~/.codex/config.toml:
Resolved on my side. The working setup and restart-persistent system-level
node_replproxy configuration are documented here:https://github.com/openai/codex/issues/30841#issuecomment-5035475747
Additional reproducible data from Codex Desktop 26.803.41515 on macOS:
Before the workaround, setting only
BROWSER_USE_DISABLE_AMBIENT_NETWORK=1removed visible Statsig errors, but page-execution commands still had a fixed ~30s tail:goto31.5s, DOM snapshot 30.0s, evaluate 30.0s, screenshot 30.0s, and console logs 30.0s.The durable workaround was to configure the managed
node_replenvironment at the system level, because Codex Desktop rewrote/removed the proxy variables from the user-level managed block after restart:After placing this in
/etc/codex/config.tomland fully restarting the app, every freshnode_replinherited all four values. A clean in-app-browser run againsthttps://example.com/measured:The DOM/evaluate results were correct, the screenshot was valid, console logs contained no Statsig errors, and there were no
ab.chatgpt.comOTLP timeout entries after restart. The fixed ~30s command tail is gone.This suggests two product fixes would be valuable:
/etc/codex/config.toml.Additional no-TUN data from a newer build
Adding a narrower data point from observed behavior; I cannot identify the internal root cause.
Environment
127.0.0.1:7891Observed behavior
https://example.com/was fast, so this was not a general loss of network connectivity.ab.chatgpt.com. I did not establish that Statsig was the sole cause of the Browser delay.https://ab.chatgpt.com/using the exact bundled Node binary reached my 8-second test deadline without environment-proxy support, but completed in about 0.7 seconds through the existing local proxy when Node's built-in environment-proxy support was enabled.One bounded integrated test
I ran one non-persistent test of a child-only proxy setup:
https://example.com/did not return usable content within my predeclared<10ssuccess threshold and reached my predeclared 25-second client-side tool-call deadline.I did not independently verify that this Browser call invoked the selected wrapper. The attempted setup did not make this operation pass the threshold, but it does not identify the failing internal runtime or request path.
Per the predeclared stop rule, I did not retry, change parameters, or continue to the Chrome test. I quit the experimental instance and reopened Codex normally; network configuration and the global environment remained unchanged.
Expected / request
Could Codex provide documented proxy behavior, or a supported process-scoped proxy setting, for in-app Browser and Chrome-control subprocesses without requiring system-level configuration or global environment changes? It would also help to have timeout isolation between auxiliary requests, such as Statsig or telemetry, and a user-requested browser operation, plus a secret-safe diagnostic of the effective runtime and proxy mode.
Adding a Windows A/B data point that appears to match this issue.
Environment: Codex Desktop / browser plugin
26.810.52044on Windows. The browser extension was installed and signed in through Microsoft Edge. Edge is not currently supported by the Chrome extension documentation, so this is diagnostic evidence for the shared browser-client path, not a supported-browser confirmation.Prerequisite: an HTTP(S) proxy was already running, and
NODE_USE_ENV_PROXY=1,HTTP_PROXY,HTTPS_PROXY, andNO_PROXYwere already set in the environment inherited by Codex. The configuration below does not define a proxy or any proxy values; it only whitelists those existing variables into thenode_replMCP child. Without those pre-existing variables, this snippet alone has no effect.Before the workaround, three lightweight DOM list reads took
21.216 s,21.188 s, and21.159 s(median21.188 s). Local parsing was only2–4 ms; almost all time was insidedomSnapshot/ browser control. Logs repeatedly showed:This usually occurred twice per call. Inspection indicated that this Statsig path used privileged
globalThis.nodeRepl.fetch, while thenode_replchild did not receiveNODE_USE_ENV_PROXY,HTTP_PROXY,HTTPS_PROXY, orNO_PROXY.As a project-scoped workaround, I added only the environment-variable names below to the trusted project's
.codex/config.toml, then fully quit and restarted Codex:This differs from defining values under
[mcp_servers.node_repl.env]: the project config contains no proxy address or credentials and relies on the already configured host environment.After restart, three equivalent reads took
0.922 s,0.623 s, and1.042 s(median0.922 s, about23×faster). The Statsig timeout disappeared, and all14/14list items were returned with no warning.One persistence detail: the plugin-managed
node_replblock in the user-level config had previously been regenerated on restart and removed a manualenv_varsedit; the trusted project-level override persisted. The config reference documentsmcp_servers.<id>.env_varsas the allowlist for additional variables passed to an MCP stdio server: https://learn.chatgpt.com/docs/config-file/config-referenceThis is a workaround and root-cause data point, not an official fix. Chrome/Edge support boundary: https://learn.chatgpt.com/docs/chrome-extension
Adding a distinct same-session cold-start data point from the current macOS build.
Environment
First operations in a fresh in-app Browser session
Without changing the proxy or Codex configuration:
ab.chatgpt.com/v1/rgstrdom_cua.get_visible_dom()call took 30.020 sThe requested page itself did load correctly.
Same session after the initial timeout period
The user signed in directly in the in-app Browser's separate profile. The Browser Use runtime was not recreated, Codex was not restarted, and no proxy/configuration change was made between these measurements.
Subsequent operations on the same in-app Browser tab were consistently fast:
Several state-changing operations completed successfully and returned explicit success UI.
Interpretation
This suggests that the approximately 30-second ambient-network delay can sometimes be concentrated in the first Browser Use operations of a session and then disappear without a restart or configuration change. A likely explanation is that ambient initialization finishes, times out, or enters retry backoff/circuit-breaker behavior, but the exact internal mechanism is not visible from the public diagnostics.
This does not resolve the separate Chrome extension deep-control problem. In the same overall workflow, Chrome tab discovery remained fast while DOM, clipboard, and input operations continued to time out. That separate macOS evidence is documented here: #36278 (https://github.com/openai/codex/issues/36278#issuecomment-5326928482).
Request
Please keep Statsig/telemetry initialization completely outside the critical path for navigation, DOM, screenshot, and input operations. A privacy-safe diagnostic showing the browser runtime's effective proxy mode and ambient-network initialization state would also make this much easier to isolate.
Even when the session eventually recovers, the initial 30-38 second ambiguity is disruptive because it can exceed the outer browser-call deadline and look indistinguishable from a failed page operation.