Skip to content

Windows: startup bundled-plugins reconcile races Chrome extension-host.exe (EBUSY) — Computer Use + Chrome plugins disappear; CU helper "paths unavailable" #27234

Description

@pdwhoward

What version of the Codex App are you using (From “About Codex” dialog)?

26.602.9276.0 (also reproduced on 26.602.4764.0)

What subscription do you have?

Pro

What platform is your computer?

No response

What issue are you seeing?

On Windows, the desktop app's startup "bundled plugins reconcile" rebuilds %USERPROFILE%\.codex\.tmp\bundled-marketplaces\openai-bundled by deleting and re-copying it from the app bundle. If the Chrome plugin's native messaging host (extension-host.exe, spawned by Chrome, survives Codex restarts) is still running, it holds a handle inside that folder and the delete fails with EBUSY. The reconcile then aborts mid-way, leaving the runtime marketplace partially deleted (only plugins\chrome remains; .agents\plugins\marketplace.json is gone).

Consequences after every restart while Chrome's host is alive:

  1. Computer Use and Chrome plugins disappear from the marketplace/plugin model.
  2. The Computer Use native pipe fails on a loop (~every 10–30 s):
warning [computer-use-native-pipe] computer-use native pipe startup failed
        errorMessage="Windows Computer Use helper paths are unavailable"
info    [computer-use-native-pipe] computer-use notify config ensure finished
        platform=win32 reason=missing-helper-path status=skipped
  1. Because the aborted reconcile is also what stages plugin caches, the per-user cache (.codex\plugins\cache\openai-bundled\computer-use\<version>) is never populated for a new bundled plugin version after an app update. The CU helper resolver builds its path from the bundled manifest version (plugin.jsonlocalVersion), so it points at a non-existent directory and throws Windows Computer Use helper paths are unavailable even though codex-computer-use.exe ships in the app bundle.

Key log lines from one startup (build 26.602.9276.0):

15:02:17.657Z info [bundled-plugins] bundled_plugins_reconcile_started reason=startup
15:02:32.863Z warning [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'"
15:02:33.976Z warning [computer-use-native-pipe] computer-use native pipe startup failed
              errorMessage="Windows Computer Use helper paths are unavailable"
15:02:34.017Z info [bundled-plugins] bundled_plugins_reconcile_completed reason=startup

The lock holder (confirmed with a rename test + process inspection): a stale extension-host.exe running since a previous session, command line extension-host.exe chrome-extension://hehggadaopoacecdllhhajmbjkdcmajg/ --parent-window=0, image path .codex\plugins\cache\openai-bundled\chrome\latest\extension-host\windows\x64\extension-host.exe. It is launched by Chrome (native messaging), so quitting/restarting Codex does not stop it — one stale host breaks every subsequent launch.

What steps can reproduce the bug?

  1. Windows 11, Codex desktop app, Chrome plugin enabled, Codex Chrome extension installed and used at least once (so extension-host.exe is running).
  2. Quit Codex completely and relaunch it (the extension-host survives because Chrome owns it).
  3. Watch the desktop log: bundled_plugins_marketplace_resolve_failed errorCode=EBUSY, then Computer Use + Chrome disappear from Plugins, and the computer-use native pipe loops "Windows Computer Use helper paths are unavailable".

What is the expected behavior?

Startup reconcile should tolerate a running extension-host: plugins should not vanish after a restart, and the Computer Use helper should start.

Additional information

Verified workaround (root-cause confirmation)

Kill the Chrome-extension host right before/while launching Codex so the reconcile window completes cleanly:

Get-CimInstance Win32_Process -Filter "Name='extension-host.exe'" |
  Where-Object { $_.CommandLine -like '*hehggadaopoacecdllhhajmbjkdcmajg*' } |
  ForEach-Object { Stop-Process -Id $_.ProcessId -Force }
# then launch Codex; reconcile completes with no EBUSY,
# computer-use native pipe reports "startup ready",
# and the reconcile itself re-stages the missing plugin cache version.

With this, the same build goes from permanently broken to fully working (verified across 5+ restarts), which confirms the race is the root cause. The host respawns afterwards and Chrome control keeps working.

Suggested fixes

  • Stage the new marketplace copy to a temp directory and atomically swap/rename, instead of delete-then-recopy in place.
  • Or: treat EBUSY on individual entries as non-fatal (skip + retry) rather than aborting the whole reconcile, so other plugins (computer-use, marketplace.json) still get materialized.
  • Or: have the app terminate/coordinate with its own extension-host.exe before the reconcile delete.
  • Decouple cache staging from the .tmp rebuild so a failed .tmp delete can't leave the Computer Use helper cache unstaged after an app update.

Environment

  • Codex desktop (MSIX): 26.602.9276.0 (also reproduced on 26.602.4764.0)
  • Bundled plugins version: 26.602.71036
  • Windows 11 Enterprise 10.0.26200, x64
  • Chrome with Codex extension (hehggadaopoacecdllhhajmbjkdcmajg)

Possibly related: #25962, #26204 (same user-visible symptom "Computer Use unavailable" on Windows; the mechanism above may explain them).

Metadata

Metadata

Assignees

No one assigned

    Labels

    appIssues related to the Codex desktop appbugSomething isn't workingcomputer-useskillsIssues related to skillswindows-osIssues related to Codex on Windows systems

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions