Repository navigation
Chrome plugin installed but Chrome backend is not exposed; only In-app Browser appears #27962
Description
What version of the Codex App are you using (From “About Codex” dialog)?
Codex Desktop 26.609.3341.0 Plugin/cache version observed: 26.609.30741
What subscription do you have?
ChatGPT Plus
What platform is your computer?
Microsoft Windows NT 10.0.19045.0 x64 Locale: pt-BR
What issue are you seeing?
The Chrome plugin and Codex Chrome Extension appear installed/enabled, and extension-host.exe is running, but Codex Desktop never exposes the Chrome backend to threads.
In a Codex thread, agent.browsers.list() only returns:
- Codex In-app Browser (type: iab)
Both of these fail:
- agent.browsers.get("extension") => Browser is not available: extension
- agent.browsers.get("chrome") => Browser is not available: chrome
The Chrome extension UI shows Connected, and the Codex Desktop plugin page also shows the Chrome plugin installed/enabled. However, Codex cannot access or claim current Chrome tabs.
What steps can reproduce the bug?
- Install/enable the Chrome plugin in Codex Desktop.
- Install/enable the Codex Chrome Extension in Chrome.
- Restart both Chrome and Codex Desktop.
- Open a Chrome tab.
- In Codex, ask it to access the current Chrome tab.
- Observe that Chrome is not available as a browser backend.
I also tried:
- reinstalling the Chrome extension
- uninstalling/reinstalling the Codex Chrome plugin
- clearing a corrupted plugin cache manually
- restarting Chrome and Codex Desktop multiple times
- opening Chrome via scripts/open-chrome-window.js
- running Chrome and Codex as administrator
- creating a new thread
- setting Chrome as default browser
The result is always the same: only the in-app browser backend appears.
What is the expected behavior?
Codex Desktop should expose the Chrome plugin backend so that agent.browsers.list() includes a Chrome/extension backend, and agent.browsers.get("extension") or the documented Chrome backend should allow Codex to list/claim open Chrome tabs.
Additional information
Chrome extension version: 1.1.5
Chrome profile: Default
Chrome plugin/cache version: 26.609.30741
extension-host.exe is running from:
C:\Users******.codex\plugins\cache\openai-bundled\chrome\latest\extension-host\windows\x64\extension-host.exe
The native host manifest exists:
C:\Users******\AppData\Local\OpenAI\extension\com.openai.codexextension.json
Direct registry check confirms:
HKCU\Software\Google\Chrome\NativeMessagingHosts\com.openai.codexextension
(default value points to the manifest above)
Potential related issue:
scripts/check-native-host-manifest.js appears to falsely report the registry key as missing on pt-BR Windows, because it expects the default registry value name "(Default)", while reg query /ve outputs "(padrão)" on this system.
Even after the native-host file updated to a current PID and extension-host.exe was running, Codex still only exposed the iab backend.
Activity
github-actions commentedon Jun 12, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
rajnpatel commentedon Jun 23, 2026
I’m seeing the same failure class on Windows Store Codex, with a slightly newer build and matching local evidence.
Environment / observed state:
OpenAI.Codex_26.616.6631.0_x64__2p2nqsd0c76g0BROWSER_USE_CODEX_APP_VERSION = "26.616.51431"hehggadaopoacecdllhhajmbjkdcmajg, version1.1.5_0DefaultnativeMessaging, and its service worker has started.HKCU\Software\Google\Chrome\NativeMessagingHosts\com.openai.codexextension...\openai-bundled\chrome\latest\extension-host\windows\x64\extension-host.exeextension-host.exeprocesses are running.[plugins."chrome@openai-bundled"] enabled = trueand
BROWSER_USE_AVAILABLE_BACKENDS = "chrome,iab".Actual behavior:
ChromeshowsNo plugins or skills found.agent.browsers.get("chrome")returns:Browser is not available: chromeComputer Use has been stopped for this turn because it could not determine the current browser URL on Windows with enough confidence to enforce policy.Additional local clue:
codex plugin marketplace listdoes not showopenai-bundled, even thoughconfig.tomlcontains stale-lookingopenai-bundledmarketplace/plugin entries.codex plugin marketplace addfails because the folder does not contain a supported marketplace manifest.26.616.41845, while current browser-use metadata says26.616.51431.This looks like the Chrome extension/native host can be installed and running, but the Codex Desktop runtime still does not publish/register the Chrome backend into the agent session.
DokPlay commentedon Jul 1, 2026
Adding a related Windows data point. My symptom is not exactly “only IAB appears”, but it looks connected to the same Chrome integration / native-host / backend wiring area.
Environment:
26.623.70822openai-bundled/computer-use/26.623.70822openai-bundled/chrome/26.623.708221.1.5Default149.0.7827.20110.0.26200x64Local Chrome setup checks look valid:
HKCU\Software\Google\Chrome\NativeMessagingHosts\com.openai.codexextensioncom.openai.codexextension.jsonexistsextension-host.exeexistschrome-extension://hehggadaopoacecdllhhajmbjkdcmajg/Important detail: Computer Use is not generally broken in my case. It can list apps/windows, and the same kind of workflow works in another browser, for example Sun Browser.
The failure is specific to Google Chrome.
Computer Use detects Chrome and the active Chrome window correctly, but when targeting Chrome it stops at
get_window_state()with:Computer Use has been stopped for this turn because it could not determine the current browser URL on Windows with enough confidence to enforce policy.So even when the extension/native-host setup appears valid, Chrome can still be unusable from Codex/Computer Use on Windows. This may be a related failure mode where the Chrome backend/native-host wiring is present, but the Chrome window cannot be reliably mapped to the current tab URL.
EyJustMix commentedon Jul 30, 2026
Working well now on the current version
Codex desktop windows 10: 26.721.81911.
plugin chrome: 1.2.27236.6274
zemeng5208 commentedon Aug 14, 2026
I maintain WinBridge Recovery, an independent Windows Codex Desktop local-state recovery tool: https://github.com/zemeng5208/winbridge-recovery
This is a useful failure signature because several layers look healthy at once — the extension says Connected,
extension-host.exeis running, the manifest/registry exist — but the thread only advertises theiabbackend. WinBridge treats that as a consistency problem to diagnose, not as “the extension is installed so everything is fine.”It checks the active
CODEX_HOME, official AppX plugin source, generated bundled marketplace, concrete Chrome plugin version/latest, native-host manifest + registry/v2 records, andcua_node/node_replpaths together. That can catch stale or split local state left by updates/reinstalls. It also avoids relying on localizedreg.exeoutput such as(Default)vs(padrão)as the sole health signal.If all of those local layers validate and a fresh thread still exposes only
iab, WinBridge will not try to manufacture a privileged browser backend; that remaining state is more consistent with Desktop session/backend injection and needs an upstream fix.If someone here tests WinBridge on this exact “host running + Connected + only iab exposed” case, please leave the outcome at zemeng5208/winbridge-recovery#4. ✅ / 🟡 / ❌ are all valuable, including no-change results.
barcuchj commentedon Sep 3, 2026
This is related to my macOS report in #29389, but not an exact platform duplicate. The macOS reproduction shows the same product-level invariant: Chrome, the extension, and native-host checks can look healthy while the Codex session exposes no usable Chrome backend.
The cross-platform requirement is to expose separate health states for Chrome, extension, native host, and session/backend registration, with a reason for each unavailable backend and a recoverable state after transient disconnects. Please keep the Windows-specific registration/packaging diagnosis separate from the macOS backend/session diagnosis while tracking this shared observability and recovery gap.
bernard9708c commentedon Oct 11, 2026
Codex-Browser-Backend-Evidence.zip
[Bug] Chrome extension browser backend is discovered but never registered —
agent.browsers.list()only ever returnsmcpappsSummary
On Windows, a healthy ChatGPT/Codex Chrome extension backend (served by
extension-host.exeover\\.\pipe\codex-browser-use\<uuid>) is discovered andanswers
getInfocorrectly, but the browser runtime never registers it.agent.browsers.list()returns only the desktop-providedmcpappsbackend, andagent.browsers.get("chrome" | "extension" | "iab")always fails withBrowser is not available: <id>.Reproducible with a synthetic mock backend as well, so the defect is in the
runtime's backend registration, not in Chrome, the extension, native messaging,
or the
chrome-native-hosts-v2.jsondiscovery files.Environment
chromeplugin,latestjunction OK)DefaultC:\Users\admin\.codex->E:\AI-Data\CodexHomeSteps to reproduce
Transport-side checks all pass:
installed-browsers.js --json,chrome-is-running.js --browser chrome --json,check-extension-installed.js --browser chrome --json,check-native-host-manifest.js --json(see attached JSON).Evidence
Chrome launches the native host 1 s after startup
(
cmd.exe /d /s /c "...\extension-host.exe" chrome-extension://hehgg.../ --parent-window=0 < \\.\pipe\chrome.nativeMessaging.in.<h> > \\.\pipe\chrome.nativeMessaging.out.<h>),and
extension-host.exelistens on\\.\pipe\codex-browser-use\<uuid>(verified with
GetNamedPipeServerProcessId).The runtime enumerates that pipe as a candidate —
fs.readdirSync("\\\\.\\pipe\\")+path.resolve("\\\\.\\pipe\\", name)+startsWith("\\\\.\\pipe\\codex-browser-use")returns it, and the runtime really does connect to it (verified with a
transparent relay; the request below was captured on the wire).
Request the runtime sends (raw frame, 4-byte LE length prefix + JSON):
{"jsonrpc":"2.0","method":"getInfo","params":{"session_id":"<session>","turn_id":"<turn>","session_context":"live"},"id":1}{"id":1,"jsonrpc":"2.0","result":{"agentRequestHeaderEnabled":false,"browserTabMentions":{"buildChannel":"prod","generation":"<uuid>","protocolVersion":1},"capabilities":{"browser":[{"description":"Controls an explicit browser viewport override ...","id":"viewport"}],"tab":[{"description":"List assets already observed ...","id":"pageAssets"}]},"family":"chrome","metadata":{"extensionId":"hehggadaopoacecdllhhajmbjkdcmajg","extensionInstanceId":"982991cc-b5a1-4d57-8795-516477f6a7df"},"name":"Chrome","type":"extension","version":"1.26.901.11451"}}Direct probe at the same moment (plain Node client, no relay): connect to the pipe,
write frame (3), read → frame (4) in under 100 ms. So the backend is alive and correct.
Controlled A/B experiment (fresh JS kernel, one process):
$te()inbrowser-service.mjsincrements a module-level counterNtefor everybackend it successfully creates, so the
idof themcpappsentry reveals how manybackends were created during a refresh.
The mock is a faithful byte-copy of reply (4) served on a clean pipe name
(
\\.\pipe\codex-browser-use-abtest). It receives the request and replies, but theruntime creates no browser for that pipe. Therefore the response is never
delivered to / processed by the JS transport, and the per-pipe result is
{ failure: "backend-info-request/<msg>" }.Conclusion: for every candidate pipe that is not served by ChatGPT.exe, the
getInfohandshake never completes, sokF()keeps only the desktop'smcpappsbackend and the Chrome/Edge extension backends are always dropped.Things that do NOT cause it (all verified)
HKCU\Software\Google\Chrome\NativeMessagingHosts+ allowed_originsextension-host.exeprocess, its pipe, itsgetInforeplychrome-native-hosts-v2.jsonfiles (schemaVersion 2, valid, paths exist)latestjunction and every path in the v2 entries (allTest-Path= True)BROWSER_USE_AVAILABLE_BACKENDSallowlist:Rn("extension") === "chrome"andVC()acceptschrome,iab,cdp,mcpapps(probed through trusted RPC), sothe allowlist cannot be the filter
Lte()session filter: extension backends default todiscoveryScope: "global"and are therefore never dropped by it
(
privileged-node-repl.js) is byte-identical, so the local build skew is not proven causalDiagnostics visibility request
The per-pipe failure reason (
failures: [...]inkF()) is only reported throughthe Statsig event
browser_use_backend_discovery_failed(Zte()->Qm()); nothingis written to any local log. Searching local logs for
browser_use_backend_discovery_failedtherefore finds nothing, which makes thisclass of failure very hard to diagnose on user machines. Please emit the same
diagnostic to a local log (or expose it through a command such as
runtime_config/ abrowser_diagnosticscommand).Also observed on this machine (possibly unrelated, reported for completeness)
bundled_plugins_marketplace_add_failed errorMessage="marketplaceopenai-bundledis reserved and cannot be added from this source"followed by
bundled_plugins_reconcile_failed.bundled_plugin_chrome_extension_sync_decisionnever appears in any historical log,i.e. the Chrome-extension install-state sync path never runs.
chrome@openai-bundled/browser@openai-bundledwithreason=not_in_bundled_marketplace_plugin_namesand issuedchrome_native_host_manifest_remove_requested(the last successful
backend=chromePiP record is 2026-10-10 06:41:49Z).\\.\pipe\codex-browser-use-<uuid>instances from dead sessions stay open for the lifetime of ChatGPT.exe.
codex doctor --summaryon this machine reports[XX] sandbox elevated Windows sandbox provisioning recorded a structured failure.Attachments
evidence/extension-endpoint-getInfo-trace.txt(raw frames + direct probe)evidence/ab-experiment-id-delta.txt(A/B experiment)evidence/pipe-ownership.txt(pipe -> server process map)evidence/check-*.json(4 plugin diagnostics)evidence/chrome-native-hosts-v2.*.json,evidence/com.openai.codexextension.jsonevidence/config.toml.snapshot,evidence/codex-doctor.txtAttachments: the full evidence bundle is provided as Codex-Browser-Backend-Evidence.zip (uploaded to this issue manually; GitHub CLI cannot upload binary attachments).
barcuchj commentedon Oct 19, 2026
The newer diagnostics are useful because they further separate local Chrome/native-host health from Codex-side bundled-plugin/session registration. If Desktop can remove or fail to reconcile
chrome@openai-bundledwhile local transport still looks healthy, the product needs explicit backend-registration/reconcile diagnostics and a recovery path rather than sending users back through reinstall loops.