macOS: stale bundled Chrome/Computer Use marketplace installs revoked helpers and prevents native-host registration
Summary
On macOS, Codex/ChatGPT Desktop continued using a stale local snapshot of the openai-bundled marketplace even though the installed application contained newer Chrome and Computer Use plugins.
This produced a misleading combination of symptoms:
- Computer Use could be toggled on and the UI showed a success toast, but the tool was unavailable or disappeared after restart.
- The Chrome plugin/extension appeared installed, but
@chromecould not connect. - The Chrome native-messaging manifest was never created.
- macOS never displayed a Privacy & Security approval prompt.
- Reinstalling or toggling the plugins in the UI repeatedly did not repair the state.
The underlying problem was not a missing macOS TCC permission. The stale plugin helpers failed macOS trust validation before they could reach a permission-protected action. Replacing the stale marketplace contents with the versions bundled in the current app, reinstalling the plugins, and running the in-app Chrome Connect flow restored both plugins.
Environment
- macOS 26.5.2 (25F84), arm64
- Desktop app:
/Applications/ChatGPT.app - Bundle ID:
com.openai.codex - App version:
26.707.72221(bundle 5307) - Google Chrome with the Codex Chrome extension enabled
Symptoms
- Enabling Computer Use produced an in-app “installed/enabled” toast, but Computer Use was not reliably attached to the active task.
- Chrome did not consistently appear on the Plugins page.
- Under Computer Use → Browser connection, Chrome showed “Browser connection not installed, Connect.”
- Installing the Chrome integration produced a success toast, but
@chromestill initially failed. - The expected native-host manifest was absent:
``text``
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.openai.codexextension.json
- No entry appeared in macOS Privacy & Security because helper validation/launch failed before macOS had a TCC permission request to present.
- A legacy manually registered
[mcp_servers.computer-use]entry could coexist with the plugin-owned MCP server and contribute to inconsistent attachment/ownership.
Confirmed root cause
The local bundled-marketplace snapshot under:
~/.codex/.tmp/bundled-marketplaces/openai-bundled
was stale and advertised:
- Chrome plugin
0.1.7 - Computer Use plugin
1.0.780
The installed app already contained newer packages:
- Chrome plugin
26.707.72221 - Computer Use plugin
1.0.1000387
The native helpers from the stale packages failed spctl validation with:
CSSMERR_TP_CERT_REVOKED
The helpers bundled in the current application passed trust validation. This explains why repeatedly reinstalling from the stale marketplace did not help: it kept reinstalling the same revoked/obsolete helper binaries.
The missing Chrome manifest was a second concrete blocker. Having the Chrome extension installed and enabled was insufficient without the native-host registration.
Recovery sequence that worked
- Fully quit ChatGPT/Codex Desktop and Google Chrome.
- Back up
~/.codexbefore changing plugin state. This preserved skills, automations, configuration, and other user data. - Compare the plugin versions/signatures in the local
openai-bundledmarketplace snapshot with those inside the installed app. - Replace the stale local bundled-marketplace snapshot with the current
openai-bundledmarketplace shipped inside/Applications/ChatGPT.app. - Reinstall
chrome@openai-bundledandcomputer-use@openai-bundledthrough the supported Codex plugin CLI path. - Remove/disable the stale manual Computer Use MCP registration so it does not compete with the plugin-owned registration. Keep the plugin entries enabled.
- Relaunch
/Applications/ChatGPT.appand enable Computer Use from the in-app Computer Use settings. - Open Computer Use → Browser connection → Chrome and click Connect. The success toast alone was not enough; this specific connection flow created the native-host manifest.
- Launch Chrome with the Codex extension enabled.
- Verify that the native-host manifest now points to the current helper:
``text``
~/.codex/plugins/cache/openai-bundled/chrome/26.707.72221/extension-host/macos/arm64/ChatGPT for Chrome
- Start a fresh task so plugin/MCP discovery is rebuilt.
- Test
@chromewithout falling back to Computer Use. It successfully enumerated Chrome tabs and opened YouTube.
Final installed plugin cache:
~/.codex/plugins/cache/openai-bundled/chrome/26.707.72221
~/.codex/plugins/cache/openai-bundled/computer-use/1.0.1000387
Expected behavior
- The app should invalidate or replace stale app-bundled marketplace snapshots when the installed app contains a newer marketplace/package.
- Reinstalling an app-bundled plugin should not select obsolete helpers whose signing certificate is revoked.
- The Chrome connection UI should verify that the native-host manifest was actually created before reporting success.
- Plugin-owned and legacy manually registered MCP servers should not silently compete for the same plugin.
- When installation fails before TCC is involved, the UI should report the signing/native-host failure instead of leading users toward macOS Privacy & Security.
Related issues
- #25809 — plugins disappear after restart; Chrome native-host manifest missing; Computer Use MCP not attached
- #21936 — Chrome plugin missing due to stale bundled marketplace cache
- #22659 — Chrome native host fails code-signing validation on macOS arm64
- #21579 — Computer Use missing despite plugin/helper being present
Related open PRs
These appear related to stale plugin/tool state and recovery, although none appears to fully address the app-bundled helper signature plus Chrome native-host installation failure:
- #31201 — expires cached plugin discovery metadata instead of retaining it for the process lifetime
- #29890 — adds a forced plugin-list refetch and refresh of installed plugin/tool state
- #30083 — adds targeted in-place refresh of one MCP server
Additional note
After repair, the Chrome extension itself did not need to be removed. The critical missing component was the native messaging host and its registration, using the helper from the current trusted plugin package.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗