Chrome plugin works in UI, but Codex browser bridge reports Browser is not available: chrome.
What version of Codex CLI is running?
codex-cli 0.146.0
What subscription do you have?
Oracle corporate
Which model were you using?
gpt-5.6-sol
What platform is your computer?
macOS 26.5.2 (Build 25F84), Apple Silicon (arm64)
What terminal emulator and version are you using (if applicable)?
Not applicable — reproduced in the Codex desktop app.
Codex doctor report
What issue are you seeing?
The Chrome extension works in the Codex desktop app UI: typing @Chrome show open tabs succeeds, and the Chrome side panel loads.
However, the browser-control runtime used by Codex cannot obtain the Chrome browser session and returns:
Browser is not available: chrome
Earlier, before refreshing the Chrome plugin, it also returned:
Cannot redefine property: process
I re-added the Chrome plugin. The app and Chrome plugin are now both version 26.730.61639. The Chrome extension is installed and enabled in the Default Chrome profile, and its native-host manifest validates correctly. The current failure remains “Browser is not
available: chrome”.
This prevents an agent from using the existing logged-in Chrome session even though the same session works through the Codex UI.
What steps can reproduce the bug?
Uploaded thread: 019f7dcc-32a1-7db1-853f-b51b31999b42
What is the expected behavior?
When @Chrome works in the Codex desktop app and the Chrome extension is connected, browser-control tasks should be able to access the same logged-in Chrome session and its open tabs.
Additional information
Codex desktop app version: 26.730.61639
Chrome plugin version: 26.730.61639
ChatGPT Chrome extension version: 1.2.27236.6274
4 Comments
I can reproduce this issue on a newer Codex desktop/plugin build.
Environment:
The bundled diagnostics report:
However, the browser runtime still returns:
Browser is not available: chromeI also tried:
The problem remains reproducible.
Because the extension is installed in a non-default Chrome profile, this may also be related to #31540.
Assistant-submitted follow-up at the GitHub account owner's explicit request.\n\nI reproduced this on macOS with a useful recovery boundary that points to stale browser-runtime state rather than a Chrome profile or installation problem.\n\nEnvironment observed during failure:\n- Bundled Chrome plugin loaded by the existing task: 26.803.61601\n- Google Chrome: 151.0.7922.138\n- ChatGPT Chrome extension in the selected profile: 1.2.27259.19709\n- Chrome was running\n- The extension was installed and enabled\n- The native-host manifest existed, matched the expected host name and origins, and the packaged diagnostic reported it correct\n\nRuntime result in the existing Codex task:\n- agent.browsers.get("chrome") returned: Browser is not available: chrome\n- Waiting and retrying did not help\n- Opening a fresh Chrome window in the selected profile did not help\n- Reinstalling the Chrome extension and Codex Chrome plugin did not make that already-running task recover\n\nThe significant recovery boundary:\n1. The original task had already initialized and retained the browser runtime from plugin bundle 26.803.61601.\n2. After the reinstall/update, a fresh Codex task initialized the browser runtime from plugin bundle 26.810.41047.\n3. The fresh runtime immediately returned a live Chrome extension browser instance.\n4. It successfully listed open Chrome tabs, claimed an existing authenticated tab, read its DOM, and navigated within the site.\n\nCurrent post-recovery cache state:\n- chrome/latest resolves to chrome/26.810.41047\n- The native-host manifest target exists and resolves through that alias\n\nThis suggests a lifecycle/invalidation failure: an existing task can retain a stale in-memory browser client or backend registration after the plugin/extension changes. Reinstalling the files is insufficient because the persistent task runtime continues reusing its already-initialized agent/browser state. A fresh task/runtime loads the new bundle and recovers.\n\nExpected behavior:\n- On plugin version change, extension reconnection, or a Browser is not available result after otherwise healthy diagnostics, Codex should invalidate and rebuild the browser runtime automatically.\n- The retry path should not keep reusing an in-memory client loaded from an older plugin bundle.\n- Diagnostics should expose the loaded browser-client version and the currently installed plugin version so version skew is visible.\n- Users should not need to reinstall components or create a fresh task to clear stale browser registration.\n\nNo browsing history, authenticated page content, account identifiers, or private logs are included in this report.
For anyone hitting
Browser is not available: chromewhile the extension is installed/enabled and all four bundled diagnostic scripts exit 0 — a diagnostic checklist from a machine where this recurred repeatedly:latestsymlink actually resolves. The manifest host path goes through~/.codex/plugins/cache/openai-bundled/chrome/latest/.... Run:``
bash
`ls -la ~/.codex/plugins/cache/openai-bundled/chrome/
readlink ~/.codex/plugins/cache/openai-bundled/chrome/latest
latestIf
points at a deleted version (or is missing), that's the bug — see #37059. Repair:
`bash
``cd ~/.codex/plugins/cache/openai-bundled/chrome
ln -sfn "$PWD/$(ls | grep -E '^[0-9]' | sort -V | tail -1)" latest
then fully quit and relaunch both the ChatGPT app and Chrome (the app caches the failed plugin init from its own startup and does not retry until relaunched).
check-native-host-manifest.jsvalidates JSON fields but never verifies the manifest'spathexists/is executable, so it exits 0 while every host spawn fails with ENOENT.pgrep -f "ChatGPT for Chrome"shows a process spawned before the last extension update or system wake, kill it — Chrome's extension immediately reconnects and spawns a fresh host; no app restart needed.codex execsession lists tabs fine: that thread's browser binding is stale (host replacement rotates runtime session ids). Reset the session's JS runtime / re-run browser setup, or start a new thread.No space left on device (os error 28)in logs) produces confusing secondary failures including browser errors.All five were needed on the same machine across two weeks; #1 recurred on every plugin update until a local watchdog was added.
Assistant-submitted current-version reproduction at the GitHub account owner's explicit request.
I reproduced this again on a newer Codex desktop/plugin build, with a narrower lifecycle boundary: browser selection can initially succeed and return documentation, but the returned browser ID is already unavailable on the first lightweight call. Opening a fresh Chrome window causes a new browser ID to register and immediately restores control.
Environment:
Exact result:
26.818.41705plugin.agent.browsers.get("chrome")returned a Chrome extension browser andchrome.documentation()completed, yielding browser ID-760e-4154-8ba3-af110d721b1c.chrome.nameSession(...)/chrome.user.openTabs()) failed withBrowser is not available: -760e-4154-8ba3-af110d721b1c.chrome.user.openTabs()once failed with the same error.open-chrome-window.js --browser chromeopened a new Default-profileabout:blankwindow.agent.browsers.get("chrome")returned a new browser ID,-7efa-4dd1-9ba4-1361d6ceb437.nameSession(...)anduser.openTabs()then succeeded immediately.Expected behavior:
get("chrome")should remain usable for the first call.This looks like a stale or prematurely invalidated extension-browser registration rather than a damaged install. Reinstalling was intentionally skipped because the official fresh-window recovery succeeded and every local diagnostic passed.
No browsing history, authenticated page content, account identifiers, credentials, or raw logs are included.