Windows bundled marketplace EBUSY leaves Computer Use unavailable

Open 💬 5 comments Opened Jun 15, 2026 by neo052-dot
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

What version of the Codex App are you using?

  • Codex Desktop App: 26.609.4994.0
  • Codex CLI: 0.140.0-alpha.2
  • Bundled Browser / Computer Use plugin version: 26.609.41114
  • CUA runtime: cua_node/789504f803e82e2b

What subscription do you have?

Not specified.

What platform is your computer?

  • Windows x64
  • PowerShell

What issue are you seeing?

Codex Desktop intermittently reports "Computer Use plugin is unavailable" in Settings, even though:

  • computer_use is enabled.
  • [plugins."computer-use@openai-bundled"] enabled = true is present in config.toml.
  • The Computer Use native pipe starts successfully.
  • The Computer Use runtime can successfully connect and list desktop applications.

The failure occurs because Codex attempts to delete and rebuild:

%USERPROFILE%\.codex\.tmp\bundled-marketplaces\openai-bundled

while processes are still loading files from that directory. On Windows, the locked files cannot be deleted. The marketplace reconciliation then fails and leaves a partially rebuilt directory containing only some bundled plugins. computer-use is omitted, so Settings reports that it is unavailable.

Observed locked files and processes included:

plugins\chrome\extension-host\windows\x64\extension-host.exe
plugins\browser\scripts\node_modules\classic-level\prebuilds\win32-x64\classic-level.node

The processes holding these files included extension-host.exe and a Codex CUA Node child process.

Relevant logs

[bundled-plugins] bundled_plugins_reconcile_started hasExternalPluginStateSync=true queued=false reason=startup

[computer-use-native-pipe] computer-use native pipe startup ready
pipePath=\\.\pipe\codex-computer-use-...
platform=win32

[BundledPluginsMarketplace] bundled_plugins_marketplace_resolve_failed
errorCode=EBUSY
errorMessage="EBUSY: resource busy or locked, rmdir
'C:\Users\<user>\.codex\.tmp\bundled-marketplaces\openai-bundled\plugins\chrome\extension-host\windows\x64'"

After the failed reconciliation, the temporary marketplace contained only:

plugins\browser
plugins\chrome

It did not contain:

plugins\computer-use
.agents\plugins\marketplace.json

The complete bundled marketplace, including computer-use, was still present inside the installed Codex App resources.

Steps to reproduce

The issue is intermittent, but the following sequence reproduces the underlying failure:

  1. Use Browser, Chrome, or Computer Use so that Codex starts Node REPL / CUA Node / Chrome extension-host processes.
  2. Leave one of these processes running with a module or executable loaded from the temporary bundled marketplace.
  3. Restart or update Codex Desktop, causing bundled plugin marketplace reconciliation.
  4. Codex attempts to remove and rebuild the temporary marketplace.
  5. Windows rejects removal of the loaded executable or native .node module with EBUSY.
  6. Marketplace reconciliation leaves a partial directory.
  7. Open Settings > Computer Control.
  8. Settings displays "Computer Use plugin is unavailable".

Expected behavior

Bundled plugin reconciliation should never leave a partial marketplace.

Before replacing the marketplace, Codex should:

  1. Stop processes that load files from the existing temporary marketplace.
  2. Build the new marketplace in a separate directory.
  3. Validate that all expected manifests and plugin files exist.
  4. Atomically switch to the new marketplace.
  5. Keep the previous valid marketplace if cleanup or replacement fails.

If reconciliation fails, Computer Use should remain available from the last valid marketplace and Settings should surface a diagnostic error instead of reporting only that the plugin is unavailable.

Actual behavior

  • Marketplace deletion fails because child processes still hold files open.
  • Reconciliation leaves a partially populated marketplace.
  • Computer Use disappears from the registered bundled plugins.
  • Settings reports Computer Use as unavailable.
  • The native pipe and runtime can still work, creating inconsistent UI and runtime states.
  • Manually restoring files only works until a later reconciliation repeats the failure.

Workaround

The temporary workaround was:

  1. Identify and stop the exact extension-host.exe / Codex Node process loading files from the temporary marketplace.
  2. Delete the temporary bundled marketplace.
  3. Restore a complete marketplace from the installed Codex App resources.
  4. Explicitly enable computer_use.
  5. Restart Codex Desktop.

This is not durable because future reconciliation can encounter the same file locks.

Related issues

  • #19365: Windows Codex App: Browser Use unavailable because Node REPL tool is not exposed
  • #19858: Codex Desktop leaks MCP server processes from internal title-generation sessions on Windows
  • #18881: MCP child processes leak when McpConnectionManager is replaced
  • #19753: Terminate stdio MCP servers on shutdown to avoid process leaks

This report appears distinct because the direct failure is an EBUSY error during bundled marketplace replacement, followed by a partially rebuilt marketplace and inconsistent Computer Use availability.

View original on GitHub ↗

5 Comments

github-actions[bot] contributor · 2 months ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #27234
  • #26785
  • #26692
  • #28084
  • #26792

Powered by Codex Action

gktdgktd · 2 months ago

Another current reproduction on Windows. This is getting ridiculous: Windows Computer Use should not require users to become local package.json janitors and cache-cleanup operators just to survive normal Codex restarts. The bundled plugin/runtime lifecycle is still leaving the product in a broken state.

This is not just #27287 / the @oai/sky exports mismatch. On this machine the export workaround was already present and verified, but Computer Use still broke after a Codex restart because the native pipe / bundled marketplace / Chrome native-host state got wedged again.

Environment observed:

  • Codex Desktop: OpenAI.Codex_26.609.4994.0_x64__2p2nqsd0c76g0
  • Computer Use plugin: openai-bundled/computer-use/26.609.41114
  • CUA runtime: %LOCALAPPDATA%\OpenAI\Codex\runtimes\cua_node\789504f803e82e2b
  • @oai/sky: 0.4.10
  • The local @oai/sky/package.json already exported:
{
  ".": "./dist/project/cua/sky_js/src/index.js",
  "./dist/project/cua/sky_js/src/targets/windows/internal/computer_use_client_base.js": "./dist/project/cua/sky_js/src/targets/windows/internal/computer_use_client_base.js"
}

Observed failure after restart:

Computer Use native pipe is unavailable: Error: failed to connect native pipe: 系统找不到指定的文件。 (os error 2)

Relevant desktop log lines from the same run:

2026-06-17T01:47:55.181Z info [computer-use-native-pipe] computer-use native pipe startup ready pipePath=\\.\pipe\codex-computer-use-f8331688-7154-438a-adee-551beef5c3dc platform=win32
2026-06-17T01:48:07.511Z warning [BundledPluginsMarketplace] bundled_plugins_marketplace_install_failed ... errorCategory=plugin_cache_windows_file_lock errorMessage="failed to uninstall plugin: failed to remove existing plugin cache entry: 拒绝访问。 (os error 5)" ... pluginName=chrome
2026-06-17T01:48:30.923Z warning [BundledPluginsMarketplace] bundled_plugins_marketplace_install_failed ... errorCategory=plugin_cache_windows_file_lock errorMessage="failed to install plugin: failed to back up plugin cache entry: 拒绝访问。 (os error 5)" ... pluginName=chrome

So the desktop log claimed the Computer Use pipe had started, but the normal Computer Use bootstrap still failed to connect to it. This is exactly the kind of state split a bundled runtime should not expose to users.

Recovery that worked:

  1. Stop the stale Chrome native messaging host under %USERPROFILE%\.codex\plugins\cache\openai-bundled\chrome\latest\extension-host\windows\x64\extension-host.exe.
  2. Remove only %USERPROFILE%\.codex\.tmp\bundled-marketplaces\openai-bundled.
  3. Restart Codex Desktop.
  4. Re-run the normal Computer Use bootstrap.

Verification after that cleanup-first restart:

sky.list_apps() -> ok, appCount: 40
get_window_state({ include_text: true }) on a real targetable window -> ok, stateRead: true

This is a second failure layer on top of the export mismatch. The durable fix needs to be in the bundled plugin/runtime release path, not in per-user local repairs. At minimum, please add a Windows release smoke test that starts Codex Desktop, invokes Computer Use, runs sky.list_apps(), reads one targetable window with get_window_state(), restarts Codex while the Chrome native host exists, and verifies the same sequence still works.

darlingm contributor · 2 months ago

Since Windows is supposed to be officially supported now, it would be great for there to be a Windows VM smoke test before releasing new app/plugin versions to make sure it at least launches and can do basic functionality. It would be even nicer to do both Windows 10 and 11 in separate smoke tests. Windows support was announced but is definitely not a first-class feature right now.

CyrusAuyeung · 2 months ago

I posted a tested public-repo mitigation branch and code-path notes in the canonical thread here: https://github.com/openai/codex/issues/27234#issuecomment-4733496317

Short version: I could not open an upstream PR because this account does not have CreatePullRequest permission on openai/codex, but the branch is available for maintainers to cherry-pick or turn into a PR:

Scope note: the public patch hardens codex-rs/core-plugins plugin-cache replacement on Windows and adds lock regression tests. The Desktop BundledPluginsMarketplace reconciler code that owns the generated bundled marketplace appears to be private, so the full staging/validation fix still needs to happen there.

zemeng5208 · 16 days ago

Disclosure: I maintain WinBridge Recovery, an independent Windows recovery project for Codex Desktop.

The important part of this report for recovery tooling is the split between the trigger and the persistent damage: EBUSY from extension-host.exe / Codex Node workers prevents replacement of the generated bundled marketplace, then the partial marketplace survives and makes Computer Use look unavailable even though the helper/runtime may still be healthy.

WinBridge Recovery is intended to repair that second layer. It validates the current official AppX bundled source against the active managed marketplace, versioned plugin cache and latest pointers, creates a rollback backup, and can rebuild the incomplete user-side state after the locking processes are quiesced.

One useful lesson from this issue that I’m also taking into the project: lock preflight should not look only for extension-host.exe; Codex-owned Node workers can hold native modules from the plugin tree too. I would not recommend killing arbitrary node.exe processes, so any automatic handling should identify only processes tied to the Codex/plugin cache.

This does not fix the upstream lifecycle race itself, but it may make recovery from the partial-marketplace state repeatable instead of manually reconstructing the tree each time.