Codex Desktop Chrome plugin times out during extension handshake despite extension and native host checks passing
Summary
The Codex Desktop bundled Chrome plugin cannot communicate with the Codex Chrome Extension. The local diagnostics all pass, but the first lightweight extension-backed call times out repeatedly.
Environment
- Codex Desktop: 26.506.21252
- macOS: 15.7.5, build 24G624
- Architecture: arm64
- Chrome plugin: openai-bundled/chrome 0.1.7
- Google Chrome: 148.0.7778.97
- Codex Chrome Extension ID: hehggadaopoacecdllhhajmbjkdcmajg
- Codex Chrome Extension version: 1.1.4_0
What I tried
From Codex Desktop, using the Chrome plugin runtime:
- Bootstrapped
scripts/browser-client.mjs - Called
agent.browsers.get("extension") - Tried
browser.user.openTabs()as a lightweight health check - Retried once after the first timeout
Both attempts timed out and reset the Node kernel:
js execution timed out; kernel reset, rerun your request
Diagnostics
The plugin-provided diagnostics report that Chrome, the extension, and the native messaging manifest are all OK.
Chrome is running:
{
"platform": "darwin",
"running": true
}
Extension check:
{
"installed": true,
"registered": true,
"enabled": true,
"disabled": false,
"versions": ["1.1.4_0"],
"exitCode": 0
}
Native host manifest check:
{
"exists": true,
"nameMatches": true,
"hasExpectedOrigin": true,
"registryMatchesManifestPath": true,
"correct": true,
"problem": null
}
Installed browser check:
{
"installed_browsers": [
{
"name": "Google Chrome",
"path": "/Applications/Google Chrome.app",
"version": "148.0.7778.97"
}
]
}
Expected behavior
browser.user.openTabs() should return the list of open Chrome tabs.
Actual behavior
The extension-backed Chrome plugin handshake hangs until timeout, even though Chrome is running, the Codex Chrome Extension is installed/enabled, and the native messaging manifest is correct.
Notes
This has been reproduced multiple times. The failure appears to be in the Codex Desktop <-> Codex Chrome Extension communication path, not in Chrome installation, extension installation, or native host manifest setup.
7 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Codex 26.506.21252 / chrome@openai-bundled 0.1.7 / Codex Chrome Extension 1.1.4_0,extension installed/enabled, native messaging manifest correct, extension-host launched, but setupAtlasRuntime times out before listing tabs.
We are seeing the same issue on macOS with
chrome@openai-bundled0.1.7and Codex Chrome Extension1.1.4_0.Local plugin diagnostics pass:
But the first lightweight Chrome-backed call still hangs:
We also tested after turning off Clash, and the timeout still reproduced, so proxy/TUN is not the only trigger in this case.
One local signal matches the socket-discovery/native-host family of issues:
/tmp/codex-browser-usecontains multiple sockets;extension-hostis attached to one socket, while the Codex process holds several different sockets. So this looks like the same Chrome plugin handshake/socket discovery failure rather than a page-specific problem.Update after today's Codex Desktop update: this is still reproducible.
Current versions:
Retest details:
scripts/browser-client.mjsagent.browsers.get("extension")browser.user.openTabs()as the lightweight health checkBoth attempts timed out after 45 seconds:
The plugin-provided diagnostics still pass: Chrome is running, the extension is installed/enabled, and the native host manifest is correct.
Additional local narrowing after comparing related issues (#21672, #21704, #21719, #21722):
I tested the socket-cleanup workaround and it did not resolve this reproduction.
What I observed before cleanup:
/tmp/codex-browser-usecontained many socket pathnames.extension-hostprocesses from the previous day were still alive and each held an old/tmp/codex-browser-use/*.socksocket.What I tried:
extension-hostprocesses.extension-hostprocess./tmp/codex-browser-use, keeping only the freshextension-hostsocket.Result: it still timed out after 45 seconds with:
So this machine did have stale/multiple socket symptoms, but the #21672-style socket cleanup alone did not unblock Chrome setup.
I also checked the ambient network direction from #21704/#21722:
curl -I https://chatgpt.com/backend-api/mereturns HTTP 403 withcf-mitigated: challengeandserver: cloudflare.nodeRepl.fetch("https://chatgpt.com/backend-api/me")hangs until the JS kernel times out.nodeRepl.requestMetacontainsx-codex-browser-use-available-backends: ["chrome", "iab"], but does not containx-codex-browser-use-disable-ambient-network: true.I tried to test the #21722 workaround from inside the current Desktop session, but the runtime does not allow setting it dynamically:
and replacing
globalThis.nodeReplwith a proxy fails too:This makes the current reproduction look closer to the #21704/#21722 ambient-network initialization hang than to only stale socket discovery. A supported way to disable or bound the ambient
/backend-api/meprobe would be useful for validating this fully in Codex Desktop.Related Windows 11 finding from a separate repro:
When Chrome is fully closed, the bundled Chrome plugin can fail before the extension backend is discovered, even if the native host manifest is valid. In that state:
Opening the selected Chrome profile starts extension-host.exe, the Chrome backend appears in browser discovery, browser.user.openTabs() succeeds, and a smoke navigation to https://example.com/ returns title Example Domain.
Suggested diagnostic improvement: run a lightweight preflight before browser-client setup that checks whether Chrome is running and whether the native host manifest is valid. If Chrome is closed, show a recovery hint to open Chrome with the selected profile before retrying, instead of surfacing the generic unavailable-backend error.
I have a small candidate patch against the bundled Chrome plugin layout that adds this preflight and updates the Chrome skill flow, but the public openai/codex repository does not appear to contain the bundled Chrome plugin source files, so I cannot open a valid PR against this repo for that patch.
I checked the repository contribution guidance before opening a PR. The documented process says external PRs are by invitation only, and that analysis plus a high-level fix outline should go in the issue thread first.
Candidate fix shape:
I tested this approach locally against the bundled Chrome plugin layout:
Patch summary:
I did not open a PR against openai/codex because this repository does not appear to contain the bundled Chrome plugin source paths changed by the patch. If a maintainer confirms the correct source location or invites a PR here, I can prepare the branch against the right target and include the exact patch.