ChatGPT Desktop startup rewrites bundled computer-use MCP to enabled=false while plugin stays enabled

Open 💬 3 comments Opened Jul 22, 2026 by jjoanna2-debug

Summary

Launching ChatGPT Desktop on macOS rewrites the shared ~/.codex/config.toml entry for the bundled computer-use MCP server to enabled = false, while leaving computer-use@openai-bundled itself enabled. The next CLI read confirms that the MCP is disabled.

This is a persistence/reconciliation defect, not a missing or unsigned helper. The official Computer Use setup documentation exposes two separate controls and instructs users to turn on both the Computer Use server and skill toggles. It does not document a launch-time reset of either control.

Reproduction

  1. Install and enable the bundled Computer Use plugin.
  2. Enable its MCP server and verify both persisted states:

```toml
[plugins."computer-use@openai-bundled"]
enabled = true

[mcp_servers.computer-use]
command = "<absolute path to signed bundled helper>"
args = ["mcp"]
cwd = "<absolute plugin directory>"
enabled = true
```

  1. Fully launch ChatGPT Desktop.
  2. Read only the two relevant sections of ~/.codex/config.toml, then run codex mcp get computer-use.

Expected behavior

ChatGPT Desktop should preserve the user's enabled MCP state while reconciling the first-party bundled plugin. If path normalization is required, it should not change the enablement decision.

Actual behavior

The plugin remains enabled:

[plugins."computer-use@openai-bundled"]
enabled = true

But the MCP entry is rewritten to:

[mcp_servers.computer-use]
command = "./Codex Computer Use.app/Contents/SharedSupport/SkyComputerUseClient.app/Contents/MacOS/SkyComputerUseClient"
args = ["mcp"]
cwd = "."
enabled = false

codex mcp get computer-use then reports:

computer-use (disabled)

Timestamped before/after evidence

All timestamps below are from the same Mac in Europe/Lisbon time on July 22, 2026:

| Time | Observed state |
| --- | --- |
| 17:41:01 WEST | Known-good config backup contains the valid absolute bundled-helper path and enabled = true; the plugin is also enabled. |
| 19:16:48 WEST | /Applications/ChatGPT.app/Contents/MacOS/ChatGPT starts. |
| 19:16:49 WEST | ChatGPT's embedded codex ... app-server starts. |
| 19:16:58 WEST | ~/.codex/config.toml mtime changes; the MCP stanza now has the relative command/cwd shown above and enabled = false. |

This establishes a launch-correlated write to the shared config. It does not identify which internal ChatGPT reconciliation component performed the write.

Bundled manifest and signature evidence

The first-party plugin manifest supplies command resolution but no enablement policy:

{"mcpServers":{"computer-use":{"command":"./Codex Computer Use.app/Contents/SharedSupport/SkyComputerUseClient.app/Contents/MacOS/SkyComputerUseClient","args":["mcp"],"cwd":"."}}}

Byte-identical copies of this manifest are present in the ChatGPT app bundle, the user plugin cache, and the generated bundled-marketplace snapshot. None contains an enabled field.

The corresponding helper app in each of those three locations passes strict/deep code-signature verification with:

Identifier=com.openai.sky.CUAService
Authority=Developer ID Application: OpenAI OpCo, LLC (2DC432GLL2)
TeamIdentifier=2DC432GLL2

There is therefore no evidence here of a corrupt, modified, or unsigned Computer Use bundle.

Environment

  • macOS 26.5.2 (25F84), Apple Silicon (arm64)
  • ChatGPT Desktop 26.715.72359, bundle build 5718
  • Embedded CLI: codex-cli 0.145.0-alpha.30
  • PATH CLI: codex-cli 0.145.0
  • Computer Use helper 26.715.1000451, build 1000451

Non-duplication and scope boundary

  • #25809 and #26429 concern restart instability, missing/uninstalled plugins, marketplace races, stale paths, or tools not attaching. This reproduction retains the plugin and isolates a persisted enabled = true to enabled = false MCP rewrite during ChatGPT launch.
  • #34110 concerns effective runtime disabling from plugin requirement filtering, not a physical launch-time rewrite of the user's MCP stanza.
  • A separate stale app-server from an older runtime was present with PPID 1 and an old control socket. It started the previous day. It is a cleanup concern, but no evidence attributes the 19:16:58 config write to it, so it is not presented as the cause.

Requested fix

Please make first-party plugin/MCP reconciliation preserve the user's persisted Computer Use server enablement, or establish one authoritative persisted setting that keeps the plugin and MCP controls synchronized. Rewriting command/cwd fields must not silently reset enabled to false.

The supported fix should live in the first-party reconciliation path. Users should not need to patch signed app/plugin bundles, run a config watchdog, or maintain a persistent override merely to retain the documented enabled state across launch.

View original on GitHub ↗

3 Comments

jjoanna2-debug · 1 month ago

@ax-openai, could you route this to the owner of Desktop bundled-plugin/MCP reconciliation? You triaged the closest earlier Computer Use report (#25813) into #25758; that report was later closed after its reporter confirmed the older failure was fixed. This is a current-build regression with a narrower persisted-state failure: the plugin remains enabled, but ChatGPT Desktop launch rewrites the MCP server from enabled = true to enabled = false nine seconds after startup. The timestamped before/after state, manifest boundary, and signature verification are in the issue body. A maintainer determination of whether this rewrite is intended policy or a reconciliation defect would resolve the immediate ambiguity; the requested fix is first-party persistence, not signed-bundle patching or a user watchdog.

PaulRBerg · 15 days ago
Please make first-party plugin/MCP reconciliation preserve the user's persisted Computer Use server enablement, or establish one authoritative persisted setting that keeps the plugin and MCP controls synchronized

Or better yet, define a bespoke config file for the Desktop app, separate from the main ~/.codex/config.toml file!

See https://github.com/openai/codex/issues/38193

PaulRBerg · 15 days ago

@ax-openai can we please get an official answer from the Codex team here? This looks like a bug. I'm noticing the same behavior as @jjoanna2-debug, the MCP servers is automatically disabled:

````toml
[mcp_servers.computer-use]
args = ["mcp"]
command = "./Codex Computer Use.app/Contents/SharedSupport/SkyComputerUseClient.app/Contents/MacOS/SkyComputerUseClient"
cwd = "."
enabled = false

````