Codex Browser/Chrome plugins installed, but no browser backend registers; `agent.browsers.list()` stays empty
What version of the Codex App are you using (From “About Codex” dialog)?
26.602.30954
What subscription do you have?
Pro
What platform is your computer?
Darwin 25.5.0 arm64 arm
What issue are you seeing?
Title: Codex Browser/Chrome plugins installed, but no browser backend registers; agent.browsers.list() stays empty
Product: Codex desktop app
Severity: High
User impact: Blocks browser-assisted workflows and burns paid tokens during repeated recovery attempts
Token spend: [Could not load usage settings. (gpt-5.4 xhigh, approx. 41 minutes)]
Environment:
- macOS
- Codex Browser plugin installed
- Codex Chrome plugin/extension installed and enabled
- Local networking enabled
- Browser pane opened to a real URL
- Browser bundle version: 26.602.30954
- Chrome bundle version: 26.602.30954
Summary:
The Codex Browser and Chrome integrations appeared installed correctly, but no browser backend ever registered with the runtime. Repeated retries, reinstalls, Chrome relaunches, Codex relaunches, and opening the Browser pane to a real URL did not change the result. agent.browsers.list() always returned []. The local app itself was healthy and could be verified through a Playwright fallback, so the failure appears to be inside Codex/plugin registration rather than the user app.
Steps to reproduce:
- Install/reinstall the Codex Browser plugin.
- Install/enable the Codex Chrome extension/plugin.
- Restart Codex.
- Restart Chrome.
- Open the Codex Browser pane to a real URL such as
http://127.0.0.1:5173. - Run browser setup and list available browsers.
- Observe that no backend is registered.
Expected result:
- The in-app browser should register and be discoverable.
agent.browsers.list()should return at least one backend.agent.browsers.get("iab")and/oragent.browsers.get("extension")should succeed when the corresponding surface is active.
Actual result:
agent.browsers.list()returned[]consistently.agent.browsers.get("iab")failed withBrowser is not available: iab.agent.browsers.get("extension")failed withBrowser is not available: extension.- Significant paid usage was consumed before a non-Codex fallback was used.
Diagnostics that passed:
- Chrome was running.
- Chrome extension was installed and enabled in the selected
Defaultprofile. - Native host manifest existed and matched the expected extension origin.
- Browser pane was opened to a real URL and left open.
- Local app itself was healthy:
- control-plane web responded on
http://127.0.0.1:5173 - control-plane API responded on
http://127.0.0.1:3001 - Playwright fallback successfully opened the app and verified Job Studio UI behavior
Notable evidence:
- Browser runtime bundle:
/Users/timfarmer/.codex/plugins/cache/openai-bundled/browser/26.602.30954/scripts/browser-client.mjs
- Chrome runtime bundle:
/Users/timfarmer/.codex/plugins/cache/openai-bundled/chrome/26.602.30954/scripts/browser-client.mjs
- Both runtimes reported zero backends.
Impact:
- Browser-dependent Codex workflows are blocked even when installation checks pass.
- Recovery guidance can lead to repeated reinstall/restart loops with no progress.
- Users can burn substantial tokens before discovering they need an external fallback.
Suggested investigation:
- Why plugin install state can be healthy while backend registration remains empty
- Whether Browser pane creation is failing to advertise session metadata
- Whether Codex is filtering out valid backends by session/build unexpectedly
- Whether the app should fail fast with a clear registration error instead of repeatedly returning an empty backend list
What steps can reproduce the bug?
Steps to reproduce:
- Install/reinstall the Codex Browser plugin.
- Install/enable the Codex Chrome extension/plugin.
- Restart Codex.
- Restart Chrome.
- Open the Codex Browser pane to a real URL such as
http://127.0.0.1:5173. - Run browser setup and list available browsers.
- Observe that no backend is registered.
What is the expected behavior?
Expected result:
- The in-app browser should register and be discoverable.
agent.browsers.list()should return at least one backend.agent.browsers.get("iab")and/oragent.browsers.get("extension")should succeed when the corresponding surface is active.
Additional information
I hope this helps.
4 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
This appears related to the failure mode I just documented in #25827: extension and native host checks can pass while the current Codex Desktop
node_repl/browser backend registration remains stale or closed.Key additional observation: a fresh worker/subagent with a new
node_replprocess could sometimes recoveragent.browsers.get("extension"), while the original coordinator session kept returningTransport closed. That points away from Chrome installation/profile state and toward session-local MCP/browser backend registration.Consolidated details and suggested diagnostics are here: https://github.com/openai/codex/issues/25827#issuecomment-4843304928
Fresh-session reproduction on macOS after Chrome/plugin reinstall, with newer bundled plugin versions.
Date: 2026-07-04 UTC
Codex Browser plugin bundle:
openai-bundled/browser/26.623.101652Codex Chrome plugin bundle:
openai-bundled/chrome/26.623.101652Environment: Codex desktop/app session on macOS; Chrome previously showed connected in Codex UI, and the prior session had verified Chrome extension/native-host state as healthy after reinstall.
What I ran in a brand-new Codex session:
Observed output:
Per the bundled troubleshooting docs, I then waited 2 seconds and retried the lightweight connector list call:
Result: the fresh session still had no registered browser backends. Both
agent.browsers.get("extension")andagent.browsers.get("iab")failed, so I could not use Chrome to open a localhost admin page or capture a screenshot through the Codex connector.This seems to rule out only stale resumed-thread state. The connector client modules are present and importable, but backend registration remains empty in a new session despite the desktop UI previously reporting Chrome as connected.
macOS, fresh repro 2026-07-05. Same failure class as this thread: extension installed/enabled, native host manifest valid, Chrome and the native-messaging helper process both confirmed healthy — but the official browser client still returns agent.browsers.list() = []. New detail: the rejection surfaces as nativePipe failing with reason missing-code-signing-identity. Confirmed this isn't a Chrome/extension-side problem — a temporary direct-socket client (bypassing the official nativePipe path entirely) connected fine and listed 114 real tabs from the live Chrome profile. So the block is specifically in Codex's own trust/authorization check on the native pipe, not in Chrome, the extension, or the native host. This bug's been open across 10+ duplicate reports since at least June 4 with no maintainer response — flagging with fresh data in case that helps triage.