Codex Desktop Chrome plugin hangs during extension backend bootstrap/openTabs on Windows

Open 💬 5 comments Opened May 8, 2026 by squarezue
💡 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 (From “About Codex” dialog)?

26.506.21252

What subscription do you have?

CHATGPT PLUS

What platform is your computer?

10.0.26100.1 x64 Windows 10 Pro 64-bit

What issue are you seeing?

The Codex Desktop Chrome plugin hangs while trying to establish the Chrome extension backend session.

Chrome is running, the Codex Chrome Extension is installed and enabled, and the native messaging host checks pass. However, when Codex tries to initialize browser automation or read open tabs, the Node REPL execution hangs until it times out.

Observed error:

js execution timed out; kernel reset, rerun your request
This happens before any navigation or page interaction. I do not get far enough to call browser.tabs.new(), browser.tabs.list(), or tab.goto(...).

Environment details:

OS: Windows 10 Pro, 64-bit
Windows version: 2009
OS HAL: 10.0.26100.1
Shell: PowerShell
Codex CLI: codex-cli 0.129.0-alpha.15
Chrome plugin cache path: C:\Users\Administrator\.codex\plugins\cache\openai-bundled\chrome\0.1.7
Google Chrome: 147.0.7727.102
Chrome path: C:\Program Files\Google\Chrome\Application\chrome.exe
Default browser: Microsoft Edge (MSEdgeHTM)
Codex Chrome Extension ID: hehggadaopoacecdllhhajmbjkdcmajg
Codex Chrome Extension version: 1.1.4_0
Chrome profile checked by plugin scripts: C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default

### What steps can reproduce the bug?

```markdown
1. Install/enable the Chrome plugin in Codex Desktop.
2. Install/enable the Codex Chrome Extension in Google Chrome.
3. Confirm that Google Chrome is running.
4. Run the bundled plugin checks from:

```powershell
cd C:\Users\Administrator\.codex\plugins\cache\openai-bundled\chrome\0.1.7

node scripts/chrome-is-running.js --json
node scripts/check-extension-installed.js --json
node scripts/check-native-host-manifest.js --json
The checks report Chrome running, extension installed/enabled, and native host configuration correct.

In the Node REPL tool, run:
const pluginRoot = "C:/Users/Administrator/.codex/plugins/cache/openai-bundled/chrome/0.1.7";

if (!globalThis.agent) {
  const { setupAtlasRuntime } = await import(`${pluginRoot}/scripts/browser-client.mjs`);
  await setupAtlasRuntime({ globals: globalThis });
}

if (!globalThis.browser) {
  globalThis.browser = await agent.browsers.get("extension");
}

await browser.nameSession("Chrome access test");
const tabs = await browser.user.openTabs();
The command hangs until the Node REPL tool times out:
js execution timed out; kernel reset, rerun your request

**What is the expected behavior?**

```markdown
The Chrome plugin should establish the extension backend session and return the currently open Chrome tabs via:

```js
const tabs = await browser.user.openTabs();
After that, normal Chrome browser automation should be available.


**Additional information**

```markdown
Bundled setup checks pass.

`node scripts/chrome-is-running.js --json` reports:

```json
{
  "platform": "win32",
  "running": true
}
node scripts/check-extension-installed.js --json reports:

{
  "extensionId": "hehggadaopoacecdllhhajmbjkdcmajg",
  "preferencesPath": "C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Secure Preferences",
  "profilePath": "C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data\\Default",
  "installed": true,
  "registered": true,
  "enabled": true,
  "disabled": false,
  "exitCode": 0,
  "versions": ["1.1.4_0"]
}
node scripts/check-native-host-manifest.js --json reports:

{
  "manifestPath": "C:\\Users\\Administrator\\AppData\\Local\\OpenAI\\extension\\com.openai.codexextension.json",
  "registryKey": "HKCU\\Software\\Google\\Chrome\\NativeMessagingHosts\\com.openai.codexextension",
  "registryManifestPath": "C:\\Users\\Administrator\\AppData\\Local\\OpenAI\\extension\\com.openai.codexextension.json",
  "expectedHostName": "com.openai.codexextension",
  "actualHostName": "com.openai.codexextension",
  "expectedExtensionId": "hehggadaopoacecdllhhajmbjkdcmajg",
  "expectedOrigin": "chrome-extension://hehggadaopoacecdllhhajmbjkdcmajg/",
  "allowedOrigins": [
    "chrome-extension://hehggadaopoacecdllhhajmbjkdcmajg/"
  ],
  "exists": true,
  "nameMatches": true,
  "hasExpectedOrigin": true,
  "registryMatchesManifestPath": true,
  "correct": true,
  "problem": null
}

### What is the expected behavior?

_No response_

### Additional information

_No response_

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.

  • #21698
  • #21705
  • #21691
  • #21670
  • #21719

Powered by Codex Action

jholmes033169 · 3 months ago

Same issue, though I got it to install once, but it would not connect to the browser extension. I installed it and now it will not install at all (get the error: Failed to install plugin). Correlation id: b70a9231-7c08-4fa2-83b7-28cfeafe8a8d

wissenz · 3 months ago

I’m seeing the same issue on Windows.

Official @chrome wrapper hangs at setupAtlasRuntime and times out, but the underlying Chrome extension pipe works.

Evidence:

  • check-native-host-manifest.js returns correct: true
  • Codex Chrome Extension installed/enabled: 1.1.4_0
  • Direct pipe getInfo returns Chrome / extension / 1.1.4
  • Direct low-level JSON-RPC calls work:

createTab -> attach -> executeCdp Page.enable -> executeCdp Page.navigate

  • Successfully opened:

https://www.youtube.com/
https://cn.investing.com/

  • But official setupAtlasRuntime({ globals: globalThis }) still times out before browser.user.openTabs()

Environment:

  • Windows
  • Codex desktop app
  • Chrome plugin openai-bundled/chrome 0.1.7
  • Chrome version observed: 147.0.7727.138
yowen521 · 3 months ago

I hit a related Windows failure mode where the Chrome extension/native-host side was healthy, but Codex Desktop still had no usable @chrome control entry.

Environment observed:

  • Windows
  • Codex Desktop app package: 26.519.5221.0
  • Codex CLI/doctor: 0.133.0-alpha.1
  • Chrome plugin cache: openai-bundled/chrome/26.519.41501
  • Google Chrome: 148.0.7778.179
  • Codex Chrome Extension: 1.1.5_0
  • Extension ID: hehggadaopoacecdllhhajmbjkdcmajg

Chrome-side checks were all healthy:

chrome-is-running.js --json => running: true
check-extension-installed.js --json => installed: true, enabled: true
check-native-host-manifest.js --json => correct: true

But Codex-side routing was missing:

codex mcp get node_repl
Error: No MCP server named 'node_repl' found.

In another partial state, node_repl existed but browser-client.mjs was not trusted, producing:

privileged native pipe bridge is not available; browser-client is not trusted

Repairing the Codex-side MCP entry and trusting the bundled Chrome browser-client hash fixed it:

$codex = "$env:LOCALAPPDATA\OpenAI\Codex\bin\codex.exe"
$nodeRepl = "$env:LOCALAPPDATA\OpenAI\Codex\bin\node_repl.exe"
$node = "$env:LOCALAPPDATA\OpenAI\Codex\bin\node.exe"
$browserClient = "$env:USERPROFILE\.codex\plugins\cache\openai-bundled\chrome\26.519.41501\scripts\browser-client.mjs"
$hash = (Get-FileHash -Algorithm SHA256 -LiteralPath $browserClient).Hash.ToLowerInvariant()

& $codex mcp remove node_repl 2>$null | Out-Null
& $codex mcp add node_repl --env "NODE_REPL_NODE_PATH=$node" --env "NODE_REPL_TRUSTED_BROWSER_CLIENT_SHA256S=$hash" -- $nodeRepl
& $codex mcp get node_repl

One extra step was required: restart the Codex Desktop app-server / start a fresh Codex turn after writing config. Before the restart, the UI still behaved as if no Chrome control entry existed.

Verification after repair:

const { setupBrowserRuntime } = await import("file:///C:/Users/<user>/.codex/plugins/cache/openai-bundled/chrome/26.519.41501/scripts/browser-client.mjs");
await setupBrowserRuntime({ globals: globalThis });
globalThis.browser = await agent.browsers.get("extension");
const tabs = await browser.user.openTabs();
nodeRepl.write("CHROME_OK tabs=" + tabs.length);

Result:

CHROME_OK tabs=1

So there seem to be at least two distinct but user-visible-similar states:

  1. Chrome extension/native host is connected, but browser backend initialization hangs.
  2. Chrome extension/native host is connected, but the active Codex app-server never exposes the node_repl/browser-client control path to the turn.

Suggested product fixes:

  • Chrome plugin install/enable should ensure node_repl exists.
  • Chrome plugin install/update should refresh NODE_REPL_TRUSTED_BROWSER_CLIENT_SHA256S for the bundled browser-client.mjs.
  • Desktop should prompt/reload app-server after plugin repair.
  • The UI should distinguish extension/native-host Connected from "current Codex turn can use Chrome control".
jholmes033169 · 3 months ago

The other problem is that even when you do get this working... by
completely blowing away Codex and its config... and then reinstalling
clean... it all starts failing again if you switch to WSL rather than
windows native.

On Tue, May 26, 2026 at 5:56 AM yowen521 @.***> wrote:

yowen521 left a comment (openai/codex#21765) <https://github.com/openai/codex/issues/21765#issuecomment-4543097745> I hit a related Windows failure mode where the Chrome extension/native-host side was healthy, but Codex Desktop still had no usable @chrome control entry. Environment observed: - Windows - Codex Desktop app package: 26.519.5221.0 - Codex CLI/doctor: 0.133.0-alpha.1 - Chrome plugin cache: openai-bundled/chrome/26.519.41501 - Google Chrome: 148.0.7778.179 - Codex Chrome Extension: 1.1.5_0 - Extension ID: hehggadaopoacecdllhhajmbjkdcmajg Chrome-side checks were all healthy: chrome-is-running.js --json => running: true check-extension-installed.js --json => installed: true, enabled: true check-native-host-manifest.js --json => correct: true But Codex-side routing was missing: codex mcp get node_repl Error: No MCP server named 'node_repl' found. In another partial state, node_repl existed but browser-client.mjs was not trusted, producing: privileged native pipe bridge is not available; browser-client is not trusted Repairing the Codex-side MCP entry and trusting the bundled Chrome browser-client hash fixed it: $codex = "$env:LOCALAPPDATA\OpenAI\Codex\bin\codex.exe"$nodeRepl = "$env:LOCALAPPDATA\OpenAI\Codex\bin\node_repl.exe"$node = "$env:LOCALAPPDATA\OpenAI\Codex\bin\node.exe"$browserClient = "$env:USERPROFILE\.codex\plugins\cache\openai-bundled\chrome\26.519.41501\scripts\browser-client.mjs"$hash = (Get-FileHash -Algorithm SHA256 -LiteralPath $browserClient).Hash.ToLowerInvariant() & $codex mcp remove node_repl 2>$null | Out-Null& $codex mcp add node_repl --env "NODE_REPL_NODE_PATH=$node" --env "NODE_REPL_TRUSTED_BROWSER_CLIENT_SHA256S=$hash" -- $nodeRepl& $codex mcp get node_repl One extra step was required: restart the Codex Desktop app-server / start a fresh Codex turn after writing config. Before the restart, the UI still behaved as if no Chrome control entry existed. Verification after repair: const { setupBrowserRuntime } = await import("file:///C:/Users/<user>/.codex/plugins/cache/openai-bundled/chrome/26.519.41501/scripts/browser-client.mjs");await setupBrowserRuntime({ globals: globalThis });globalThis.browser = await agent.browsers.get("extension");const tabs = await browser.user.openTabs();nodeRepl.write("CHROME_OK tabs=" + tabs.length); Result: CHROME_OK tabs=1 So there seem to be at least two distinct but user-visible-similar states: 1. Chrome extension/native host is connected, but browser backend initialization hangs. 2. Chrome extension/native host is connected, but the active Codex app-server never exposes the node_repl/browser-client control path to the turn. Suggested product fixes: - Chrome plugin install/enable should ensure node_repl exists. - Chrome plugin install/update should refresh NODE_REPL_TRUSTED_BROWSER_CLIENT_SHA256S for the bundled browser-client.mjs. - Desktop should prompt/reload app-server after plugin repair. - The UI should distinguish extension/native-host Connected from "current Codex turn can use Chrome control". — Reply to this email directly, view it on GitHub <https://github.com/openai/codex/issues/21765?email_source=notifications&email_token=AAZDYAHZFQFHL3NJSDYN7T344VS5XA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTINJUGMYDSNZXGQ22M4TFMFZW63VHMNXW23LFNZ2KKZLWMVXHJLDGN5XXIZLSL5RWY2LDNM#issuecomment-4543097745>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/AAZDYACBBCCEF2TYVUHI54344VS5XAVCNFSM6AAAAACYWFYQB2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHM2DKNBTGA4TONZUGU> . You are receiving this because you commented.Message ID: @.***>

--
Jerry Holmes
PageDragon
http://www.pagedragon.com