Chrome plugin discovery still times out after socket cleanup; extension-host socket does not respond to getInfo

Open 💬 5 comments Opened May 8, 2026 by jjhuang2023
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

What version of the Codex App are you using?

Codex desktop app 26.506.21252.

Bundled Chrome plugin observed locally:

  • plugin path: /Users/julian/.codex/plugins/cache/openai-bundled/chrome/0.1.7
  • Codex Chrome Extension ID: hehggadaopoacecdllhhajmbjkdcmajg
  • Codex Chrome Extension version: 1.1.4_0

What platform is your computer?

macOS on Apple Silicon.

Chrome:

  • Google Chrome 147.0.7727.138
  • profile: Default

What issue are you seeing?

The new bundled Chrome plugin cannot complete browser backend discovery. Calls such as setupAtlasRuntime({ globals }), agent.browsers.get("extension"), and browser.user.openTabs() time out even after:

  • reinstalling/re-enabling the Chrome plugin / Codex Chrome Extension,
  • restarting Codex,
  • restarting Chrome,
  • deleting unrelated /tmp/codex-browser-use/*.sock socket pathnames,
  • cold-starting Chrome from a clean /tmp/codex-browser-use directory.

This appears related to #21672, but this report is for the next failure mode after applying that workaround: even when /tmp/codex-browser-use contains only the Chrome extension-host socket, discovery still times out.

Expected behavior

With Chrome running and the Codex Chrome Extension/native host checks passing, the Chrome plugin should discover the extension backend and browser.user.openTabs() should return the open Chrome tabs.

Actual behavior

setupAtlasRuntime({ globals }) / Chrome backend discovery does not return before the Node REPL tool timeout. The browser task never reaches any page navigation.

Example minimal call that times out:

const { setupAtlasRuntime } = await import("/Users/julian/.codex/plugins/cache/openai-bundled/chrome/0.1.7/scripts/browser-client.mjs");
await setupAtlasRuntime({ globals: globalThis });
globalThis.browser = await agent.browsers.get("extension");
await browser.nameSession("Chrome health check");
const tabs = await browser.user.openTabs();

Local checks that pass

check-extension-installed.js --json reports:

{
  "extensionId": "hehggadaopoacecdllhhajmbjkdcmajg",
  "profilePath": "/Users/julian/Library/Application Support/Google/Chrome/Default",
  "installed": true,
  "registered": true,
  "enabled": true,
  "disabled": false,
  "versions": ["1.1.4_0"],
  "exitCode": 0
}

check-native-host-manifest.js --json reports:

{
  "manifestPath": "/Users/julian/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.openai.codexextension.json",
  "expectedHostName": "com.openai.codexextension",
  "actualHostName": "com.openai.codexextension",
  "expectedExtensionId": "hehggadaopoacecdllhhajmbjkdcmajg",
  "allowedOrigins": ["chrome-extension://hehggadaopoacecdllhhajmbjkdcmajg/"],
  "exists": true,
  "nameMatches": true,
  "hasExpectedOrigin": true,
  "correct": true,
  "problem": null
}

chrome-is-running.js --json reports Chrome running.

Socket state after applying #21672 workaround

After deleting non-Chrome socket pathnames and then doing a full Chrome cold restart, /tmp/codex-browser-use contained only one socket:

/tmp/codex-browser-use/692dd4b5-ca63-45f1-9caa-27d757a02e71.sock

lsof showed it was held by the Chrome extension-host process:

COMMAND     PID   USER   FD   TYPE NAME
extension 65436 julian    3u  unix /tmp/codex-browser-use/692dd4b5-ca63-45f1-9caa-27d757a02e71.sock

Chrome and the host were both fresh processes:

Google Chrome PID 65402, started Fri May 8 14:51:22 2026
extension-host PID 65436, started Fri May 8 14:51:26 2026

The visible socket directory was clean:

total 0
drwxrwxrwt@ 3 julian wheel 96 May 8 14:51 .
srw-------@ 1 julian wheel 0 May 8 14:51 692dd4b5-ca63-45f1-9caa-27d757a02e71.sock

Even in this state, setupAtlasRuntime({ globals }) still timed out.

Additional observation

A direct local framed JSON-RPC probe to the only extension-host socket connected but did not receive a response to ping/getInfo within a short timeout. This was only used as a diagnostic to identify the failing layer; the normal Chrome plugin path also times out in the same state.

Why this seems distinct from #21672

#21672 describes backend discovery hanging when unrelated browser-use sockets exist. That did happen initially on this machine: /tmp/codex-browser-use contained around 20 socket pathnames, and only one was owned by extension-host.

However, after removing all non-extension-host sockets and then cold-starting Chrome so only the new extension-host socket existed, the Chrome plugin still timed out. So there may be a second issue where the Chrome extension-host process is created and owns a socket but does not respond to the browser backend getInfo discovery request.

Suggested fix direction

  • Add bounded per-candidate timeouts around Cc.create(...) and getInfo() during browser backend discovery.
  • Emit diagnostics that identify which socket path/backend type timed out.
  • For the Chrome path, either filter to the extension backend before waiting on all candidates or make non-responsive extension-host discovery fail with a specific error instead of causing a generic setup timeout.

View original on GitHub ↗

5 Comments

github-actions[bot] contributor · 3 months ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #21672
  • #21670

Powered by Codex Action

caaaptaintop · 3 months ago

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.

heartInsert · 3 months ago

Another affected environment here.

Environment:

  • macOS / Apple Silicon
  • Codex Desktop: 26.506.31421
  • Bundled Chrome plugin: openai-bundled/chrome 0.1.7
  • Google Chrome: 147.0.7727.138
  • Codex Chrome Extension: 1.1.4_0
  • Extension ID: hehggadaopoacecdllhhajmbjkdcmajg
  • Chrome profile: Default

What I verified:

  • chrome-is-running.js --check passes.
  • check-extension-installed.js --json reports installed/registered/enabled.
  • check-native-host-manifest.js --json reports the native host manifest is correct.
  • extension-host starts and owns a socket under /tmp/codex-browser-use.

Failure:

  • Minimal @Chrome setup still times out before tab listing.
  • Failing path: setupAtlasRuntime({ globals: globalThis }) / browser.user.openTabs().
  • Tried the #21672 workaround by moving non-extension-host /tmp/codex-browser-use/*.sock pathnames out of the directory and retrying with only the Chrome extension-host socket visible. It still timed out, matching this issue's second-stage failure mode.

No webpage-specific data was involved; this reproduces before any page interaction.

ACuteTomcat · 3 months ago

Another affected environment here with a newer Chrome/Codex setup.

Environment:

  • macOS 26.4.1 / Apple Silicon
  • Codex Desktop: 26.506.31421 (CFBundleVersion 2620)
  • Codex CLI: 0.130.0-alpha.5
  • Bundled Chrome plugin: openai-bundled/chrome 0.1.7
  • Google Chrome: 148.0.7778.97
  • Codex Chrome Extension: 1.1.4_0
  • Extension ID: hehggadaopoacecdllhhajmbjkdcmajg
  • Chrome profile: Default

Checks that pass:

  • chrome-is-running.js --json reports Chrome running.
  • check-extension-installed.js --json reports installed/registered/enabled.
  • check-native-host-manifest.js --json reports the native host manifest is correct.
  • The Codex extension popup in Chrome shows Connected.
  • extension-host starts and owns a socket under /tmp/codex-browser-use.

Failure:

  • setupAtlasRuntime({ globals: globalThis }) / agent.browsers.get("extension") still times out before tab listing.
  • Direct local framed JSON-RPC diagnostics to the extension-host socket also timed out for ping and getInfo.
  • Tried the #21672 workaround by moving non-extension-host sockets out of /tmp/codex-browser-use, then restarting extension-host so only the Chrome socket remained visible. It still timed out.

Current socket evidence:

  • /tmp/codex-browser-use/8b87a293-a7d1-4856-b9e2-faddc5383a73.sock
  • Owned by extension-host PID 26870
  • Parent process is Google Chrome PID 19414

This looks like the same second-stage failure described here: extension/native-host are connected, but the extension-host socket does not respond to backend discovery requests.

Ahmet-Dedeler · 3 months ago

Adding a comparison datapoint from a current macOS repro, because this issue appears to be the next-stage failure after #21672.

In my repro, the install/native-host checks all passed and @Chrome timed out while /tmp/codex-browser-use contained one extension-host socket plus multiple Codex-owned Browser Use/IAB socket pathnames.

Unlike the second-stage failure described here, moving the non-extension-host socket pathnames aside fixed the Chrome backend immediately: the same browser.user.openTabs() call returned tabs.

So there seem to be at least two related failure modes:

  1. First-stage discovery hang: unrelated Codex/IAB sockets are present, and removing only those fixes Chrome. This matches #21672 / #21719.
  2. Second-stage extension-host hang: only the extension-host socket remains, but getInfo / setup still does not respond. That matches this issue.

Both would benefit from bounded per-socket getInfo timeouts and clearer diagnostics that name the socket/backend being waited on.