You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Chrome plugin connection fails with missing-code-signing-identity #30155
Codex reports no available Chrome backend / cannot communicate with the Codex Chrome
Extension.
Chrome opens a fresh tab, but Codex still cannot use Chrome.
Local checks:
Chrome is running.
Codex Chrome Extension hehggadaopoacecdllhhajmbjkdcmajg is installed and enabled in
Chrome profile Default.
Native host manifest exists and points to the Codex for Chrome host:
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/
com.openai.codexextension.json
Codex should connect to the Codex Chrome Extension and control Chrome for the requested @chrome task.
Additional information
Local checks show Chrome is running, the extension is installed and enabled, the native
host manifest exists, and the Codex for Chrome native host process is running.
The app log contains:
browser-use-native-pipe-server rejected socket peer reason=missing-code-signing-
identity
Confirmed on macOS 15.7.7 (Intel x86_64) — ChatGPT app 26.707.41301, bundled Chrome plugin 26.707.41301, standalone codex-cli 0.144.1, Chrome 149.0.7827.201, extension 1.2.27203.26575. Every agent.browsers.get("extension") attempt from a terminal session correlates 1:1 with a browser-use native pipe rejected socket peer reason=missing-code-signing-identity warning in the desktop app log, while all of Codex's own diagnostics (extension installed/enabled, native host manifest, host process, chrome-native-hosts-v2.json presence) report healthy.
I dug into the authorizer (ChatGPT.app/Contents/Resources/native/browser-use-peer-authorization.node). It resolves the peer via getsockopt(LOCAL_PEERTOKEN) → SecCodeCopyGuestWithAttributes → SecCodeCopySigningInformation, hardcodes TeamIdentifier 2DC432GLL2 plus a signing-identifier allowlist (codex, com.openai.codex{,.agent,.alpha,.beta,.dev,.nightly,.runtime}, node, node_repl), and — per its strings (peer, peer parent, peer grandparent, failed to read … code signing identity) — it validates the process ancestry chain, not just the peer itself.
Decisive experiment: dialing the live pipe with OpenAI's own signed Node binary (/Applications/ChatGPT.app/Contents/Resources/cua_node/bin/node, Identifier node, Team 2DC432GLL2) launched from bash gets rejected with the exact same reason (new log line appears immediately). The only non-OpenAI element in that chain was the shell. A terminal-launched CLI always has the user's shell (an Apple platform binary with no OpenAI TeamIdentifier) within two ancestry hops, so authorization can never pass from a terminal — which matches the symptom pattern across these reports: desktop app flows work, terminal/CLI/VS Code sessions are rejected.
This also explains why reinstalling the plugin never helps: the rejection happens inside the app's pipe server, before any plugin code is involved.
Suggested fix directions: stop walking the ancestry once an allowlisted OpenAI-signed process is found; or treat Apple platform binaries (shells/terminals) as neutral ancestry; or have the connection dialed by a process whose 2-hop ancestry stays within OpenAI-signed processes (e.g. the sandboxed REPL kernel).
Additional data point: the "alias the app-bundled codex binary" workaround does NOT work on build 26.707.72221 -- addon-level verdicts included
Environment:
macOS Tahoe 26.5.2 (25F84), arm64
ChatGPT desktop app 26.707.72221
codex CLI: npm 0.144.4 (/opt/homebrew/bin/codex, shim under homebrew node 25.9.0, which is adhoc-signed) and app-bundled 0.144.2 (/Applications/ChatGPT.app/Contents/Resources/codex)
Chrome 150.0.7871.125; Codex extension installed + enabled; native host (extension-host/macos/arm64/ChatGPT for Chrome) validly signed, spawned by Chrome, and listening on its /tmp/codex-browser-use/*.sock
Symptom matches this issue exactly: agent.browsers.get("extension") -> Browser is not available: extension, agent.browsers.list() -> [], while every plugin self-check passes. The desktop app log records a rejection at the exact minute of every attempt:
The community workaround from Chrome backend unavailable in terminal/API session: untrusted-code-signing-identity while Codex App @Chrome works #30545 (use the app-bundled signed binary) fails on this build. A headless run of /Applications/ChatGPT.app/Contents/Resources/codex exec (0.144.2) doing only setupBrowserRuntime + agent.browsers.list() returned [], with two missing-code-signing-identity rejections logged at the matching timestamp. So on 26.707.x it is not just unsigned/npm installs that are rejected.
Addon-level verdicts. I loaded ChatGPT.app/Contents/Resources/native/browser-use-peer-authorization.node in a standalone Unix-socket server and called authorizeSocketPeer(fd, flag) on accepted connections:
Peer = OpenAI's own cua_node/bin/node (TeamIdentifier 2DC432GLL2, identifier node), launched from zsh:
{"authorized":false,"teamId":"2DC432GLL2","signingIdentifier":"node","reason":"missing-code-signing-identity"}
The peer's identity was read successfully (it's in the verdict), so the "missing" identity is an ancestor's. Both values of the boolean flag give the same result.
Peer = /usr/bin/nc (Apple platform binary): same rejection.
Ancestry is the deciding factor. Failing npm session tree: node_repl (2DC432GLL2) <- vendor codex (2DC432GLL2) <- homebrew node (adhoc) <- zsh. Failing app-bundled tree: node_repl <- codex (2DC432GLL2) <- zsh (Apple platform, no TeamIdentifier). csops(CS_OPS_STATUS) shows every involved process is CS_VALID and signed at runtime, so this is a policy rejection, not binary corruption. Any terminal launch puts a shell (or an adhoc node) inside the checked window, so terminal sessions can never authorize on this build.
Desktop-app UI @chrome threads work on the same machine (tree node_repl <- codex <- ChatGPT.app, all 2DC432GLL2): those days show zero rejections in the log and Chrome is driven normally. Logs on this machine go back through the older Codex.app (failed to read peer parent code signing identity variant from early July): zero terminal authorizations have ever succeeded.
Suggested direction: terminate the ancestry walk at the first allowlisted OpenAI-signed ancestor (the codex/node_repl chain itself proves provenance), or accept Apple platform binaries (shells, login) as neutral links. As-is, the check structurally excludes every terminal-launched CLI session regardless of how codex was installed.
Also confirming for other readers: reinstalling the app/plugin/extension does nothing (the rejection happens before any of them are consulted), and a failed discovery is cached for the life of a codex process, so always retest in a fresh session.
Activity
github-actions commentedon Jun 26, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
yuzhang-cao commentedon Jun 30, 2026
Also reproducible on:
019f114e-c19d-70c2-94ab-f8d9f4266761Observed:
Browser is not available: extensionagent.browsers.list()returns[]Verified:
Codex.appis accepted as Notarized Developer ID.doogie-bigmack commentedon Jul 6, 2026
I have this same issue
@chrome still fails: agent.browsers.list() returns []; agent.browsers.get("extension") returns Browser is not available: extension.
This is a known upstream issue, not a Security Civilization repo issue and not something reinstalling the Codex CLI fixes. Matching open issues:
Current local versions:
Get this fixed!
hectorlcastro09 commentedon Jul 11, 2026
Confirmed on macOS 15.7.7 (Intel x86_64) — ChatGPT app 26.707.41301, bundled Chrome plugin 26.707.41301, standalone codex-cli 0.144.1, Chrome 149.0.7827.201, extension 1.2.27203.26575. Every
agent.browsers.get("extension")attempt from a terminal session correlates 1:1 with abrowser-use native pipe rejected socket peer reason=missing-code-signing-identitywarning in the desktop app log, while all of Codex's own diagnostics (extension installed/enabled, native host manifest, host process,chrome-native-hosts-v2.jsonpresence) report healthy.I dug into the authorizer (
ChatGPT.app/Contents/Resources/native/browser-use-peer-authorization.node). It resolves the peer viagetsockopt(LOCAL_PEERTOKEN)→SecCodeCopyGuestWithAttributes→SecCodeCopySigningInformation, hardcodes TeamIdentifier2DC432GLL2plus a signing-identifier allowlist (codex,com.openai.codex{,.agent,.alpha,.beta,.dev,.nightly,.runtime},node,node_repl), and — per its strings (peer,peer parent,peer grandparent,failed to read … code signing identity) — it validates the process ancestry chain, not just the peer itself.Decisive experiment: dialing the live pipe with OpenAI's own signed Node binary (
/Applications/ChatGPT.app/Contents/Resources/cua_node/bin/node, Identifiernode, Team2DC432GLL2) launched from bash gets rejected with the exact same reason (new log line appears immediately). The only non-OpenAI element in that chain was the shell. A terminal-launched CLI always has the user's shell (an Apple platform binary with no OpenAI TeamIdentifier) within two ancestry hops, so authorization can never pass from a terminal — which matches the symptom pattern across these reports: desktop app flows work, terminal/CLI/VS Code sessions are rejected.This also explains why reinstalling the plugin never helps: the rejection happens inside the app's pipe server, before any plugin code is involved.
Suggested fix directions: stop walking the ancestry once an allowlisted OpenAI-signed process is found; or treat Apple platform binaries (shells/terminals) as neutral ancestry; or have the connection dialed by a process whose 2-hop ancestry stays within OpenAI-signed processes (e.g. the sandboxed REPL kernel).
dobromirivanov1 commentedon Jul 13, 2026
Still reproducible on a newer environment:
26.707.62119(build5211)26.5.2(25F84), Apple Silicon150.0.7871.1141.2.27203.26575Observed:
agent.browsers.get("extension")reportsBrowser is not available: extension.browser-use native pipe rejected socket peer reason=missing-code-signing-identityin the desktop log.Verified locally:
Defaultprofile.Developer ID Application: OpenAI OpCo, LLC (2DC432GLL2), and has a valid signature.ChatGPT.app.ChatGPT.apppasses strict deep code-signature verification.This confirms the issue remains present in the
26.707.62119release and Chrome 150; it is not resolved by the newer extension/native-host build.koppula commentedon Jul 19, 2026
Additional data point: the "alias the app-bundled codex binary" workaround does NOT work on build 26.707.72221 -- addon-level verdicts included
Environment:
Symptom matches this issue exactly: agent.browsers.get("extension") -> Browser is not available: extension, agent.browsers.list() -> [], while every plugin self-check passes. The desktop app log records a rejection at the exact minute of every attempt:
warning [browser-use-native-pipe-server] browser-use native pipe rejected socket peer reason=missing-code-signing-identity
Findings beyond what's already in the thread:
{"authorized":false,"teamId":"2DC432GLL2","signingIdentifier":"node","reason":"missing-code-signing-identity"}
The peer's identity was read successfully (it's in the verdict), so the "missing" identity is an ancestor's. Both values of the boolean flag give the same result.
Suggested direction: terminate the ancestry walk at the first allowlisted OpenAI-signed ancestor (the codex/node_repl chain itself proves provenance), or accept Apple platform binaries (shells, login) as neutral links. As-is, the check structurally excludes every terminal-launched CLI session regardless of how codex was installed.
Also confirming for other readers: reinstalling the app/plugin/extension does nothing (the rejection happens before any of them are consulted), and a failed discovery is cached for the life of a codex process, so always retest in a fresh session.