Bundled Browser/Chrome/Computer Use plugins disappear after Windows app updates due to stale bundled marketplace path
Bundled Browser/Chrome/Computer Use plugins disappear after Windows app updates due to stale bundled marketplace path
Environment
- Codex Desktop version:
<paste current app version> - Windows version / build:
<paste Windows version and OS build> - Install type: Microsoft Store / WindowsApps packaged app
- Affected bundled plugins/skills:
- Browser
- Chrome
- Computer Use
Summary
After some Codex Desktop updates on Windows, bundled plugins/skills become unavailable until local repair. This has happened repeatedly across multiple app updates.
The recurring pattern is that Codex updates into a new versioned WindowsApps directory, but the local Codex config continues to point the bundled marketplace source at an older versioned app directory. After that, the bundled marketplace temp/cache state becomes incomplete, commonly leaving only the chrome plugin available while browser and computer-use disappear.
This appears to be an app update / marketplace registration regression, not a confirmed security issue.
Expected Behavior
After Codex Desktop updates, bundled plugins should remain registered and available.
Specifically:
[marketplaces.openai-bundled].sourceshould point to the current app version's bundled marketplace source.- The bundled marketplace temp/cache should be refreshed from the current app source.
- Bundled plugins
browser,chrome, andcomputer-useshould remain available after restart/update.
Actual Behavior
After an update:
- Bundled plugins/skills disappear or become unavailable.
- Local config may still reference an older versioned
WindowsAppsapp path. - The bundled marketplace temp/cache can become incomplete.
- In observed cases,
.tmp/bundled-marketplaces/openai-bundled/pluginscommonly contained onlychrome. - The current app's bundled source manifests still existed and parsed correctly for
browser,chrome, andcomputer-use. - Repairing the marketplace source path and rebuilding/restoring temp/cache from the current bundled source restored all three plugins.
Reproduction Pattern
This is intermittent but has recurred after multiple Windows app updates.
- Install / run Codex Desktop on Windows.
- Confirm bundled plugins are available.
- Let Codex Desktop update to a newer packaged app version.
- Restart Codex.
- Check bundled plugin availability.
- Inspect local bundled marketplace config/state:
%USERPROFILE%\.codex\config.toml%USERPROFILE%\.codex\.tmp\bundled-marketplaces\openai-bundled\plugins- Codex cache directories, if relevant
- Observe whether
[marketplaces.openai-bundled].sourcestill points to an olderOpenAI.Codex_<version>directory instead of the currently running app directory.
Evidence / Diagnostics
Most recent observed instance:
- Running app package:
OpenAI.Codex_26.623.4041.0 - Stale configured bundled source before repair:
OpenAI.Codex_26.616.10790.0 - Current bundled source plugin manifest versions:
26.623.31921 - Initial temp bundled marketplace plugins directory contained only:
chrome- Current bundled source under the active app root still contained valid manifests for:
browserchromecomputer-use- After correcting the bundled marketplace source and restoring/rebuilding temp/cache from the current app source, all three plugins validated and became available again.
Prior local occurrences involved these app package versions:
OpenAI.Codex_26.616.6631.0OpenAI.Codex_26.616.9593.0OpenAI.Codex_26.616.10790.0OpenAI.Codex_26.623.4041.0
Suggested diagnostics to attach:
# Redacted excerpt from %USERPROFILE%\.codex\config.toml
[marketplaces.openai-bundled]
source = "<redacted path showing old OpenAI.Codex_<version> vs current OpenAI.Codex_<version>>"
# Redacted directory listing
%USERPROFILE%\.codex\.tmp\bundled-marketplaces\openai-bundled\plugins
<show which plugin folders are present>
# Current app bundled source listing
<redacted WindowsApps path>\OpenAI.Codex_<current version>\...
<show browser/chrome/computer-use manifests exist and parse>
Workaround
A local repair restores functionality:
- Update
[marketplaces.openai-bundled].sourcein%USERPROFILE%\.codex\config.tomlto point at the currentOpenAI.Codex_<version>bundled marketplace source. - Restore/rebuild the bundled marketplace temp/cache from the current app source.
- Restart Codex.
- Validate that
browser,chrome, andcomputer-useare available again.
Requested Fix
Please make Codex Desktop resilient to Windows packaged app updates by ensuring the bundled marketplace registration is refreshed when the app version/path changes.
Possible fixes:
- Avoid persisting an absolute versioned
WindowsAppspath for the bundled marketplace source. - On startup, detect when
[marketplaces.openai-bundled].sourcepoints to an older/non-current app package path. - Re-register or migrate the bundled marketplace source to the current app root automatically.
- Rebuild bundled marketplace temp/cache atomically when the bundled source version changes.
- Validate that all expected bundled plugins are present after update and repair automatically if not.
Privacy / Security Note
This report intentionally excludes private documents, credentials, full local state dumps, and old conversation text. Based on current evidence, this appears to be an update/registration regression affecting bundled plugin availability, not a confirmed security vulnerability.
12 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
I reviewed the suggested duplicates.
This looks related to #28703 and possibly the same Windows bundled-plugin reconciliation/update family of bugs, but I am keeping this issue open for now because it adds a more specific update-path diagnostic:
[marketplaces.openai-bundled].sourcecan remain pointed at an older versionedOpenAI.Codex_<version>WindowsApps path;.tmp\bundled-marketplaces\openai-bundled\pluginscan become incomplete;browser,chrome, andcomputer-usebundled source manifests;#30259 appears related but is already closed and was less specific about the stale bundled marketplace source path.
I pushed a candidate fix to my fork for this stale bundled-marketplace update path.
Compare: https://github.com/openai/codex/compare/main...Nicolas0315:codex:codex/bundled-marketplace-source-refresh
Commit: Nicolas0315/codex@7c0e9d74799fbc8a67de2fcbbf721c8d4c4ec5e8
What changed:
openai-bundled/openai-bundled-alphaconfigured roots now keep using the configured source when it still has a manifest, but fall back to the managed.tmp/bundled-marketplaces/<name>cache when the persisted local source no longer has a marketplace manifest.codex plugin marketplace addcan refresh a changed local source for those reserved bundled marketplace names, so an app package path change is not treated like an ordinary conflicting marketplace.Validation:
just fmt,git diff --check, focusedcodex-core-pluginsregression tests 4/4, focusedcodex-clisnapshot tests 3/3.just test -p codex-core-plugins: 296 passed, 1 failed inmanager::tests::skills_service_reuses_skills_parsed_during_plugin_load; that failure reproduces standalone here and is due ambient Azure/Lottie skills leaking into this machine's test environment, unrelated to marketplace source handling.cyberagent-mac-m5max:git diff --check HEAD~1 HEAD, focused core tests 4/4, focused CLI tests 3/3 passed.nicolas-macbook-pro:git diff --check HEAD~1 HEADpassed; Rust toolchain unavailable on that host.nicolas2025:git diff --check HEAD~1 HEAD, focusedcargo test -p codex-core-pluginscases 4/4, focusedcargo test -p codex-clicases 3/3 passed.rtx5060ti:git diff --check HEAD~1 HEADpassed; Rust compile tests skipped because this host still has the known linker configuration issue that rejects MSVC linker flags.Boundary: this covers the core side of stale persisted source recovery and source refresh. If Desktop fails to repopulate
.tmp/bundled-marketplaces/openai-bundledat all, that packaging/startup copy path still needs to be fixed separately.Thanks, this looks aligned with the stale persisted source evidence from my repro.
The source-refresh behavior you described should cover the concrete case I reported where
[marketplaces.openai-bundled].sourceremained pointed at an olderOpenAI.Codex_<version>WindowsApps path even though the current app package still had valid bundled manifests.One extra data point from my local repro: after updates,
.tmp\bundled-marketplaces\openai-bundled\pluginswas sometimes incomplete as well, commonly retaining onlychrome. In that state, repairing only the persisted source path was not always sufficient; I also had to restore/rebuild the bundled marketplace temp/cache from the current app source.So I agree with your boundary note: this candidate fix seems to address the core stale-source/source-refresh side, while a separate Desktop packaging/startup copy path may still need attention if
.tmp/bundled-marketplaces/openai-bundledis not repopulated correctly.Adding another Windows Store update repro from Codex Desktop
26.623.5546.0.Observed sequence:
OpenAI.Codex_26.623.4041.0_x64__2p2nqsd0c76g0.OpenAI.Codex_26.623.5546.0_x64__2p2nqsd0c76g0.%USERPROFILE%\.codex\config.tomlstill had[marketplaces.openai-bundled].sourcepointing at the oldOpenAI.Codex_26.623.4041.0...\app\resources\plugins\openai-bundledpath.26.623.4041.0WindowsApps path no longer existed; the new26.623.5546.0bundled source existed and contained valid bundled plugins.codex plugin listfailed with:Additional cache/link state from this repro:
browser,chrome, andcomputer-usewere version26.623.42026.26.623.31921.browser/lateststill pointed at...\browser\26.623.31921.chrome/lateststill pointed at%USERPROFILE%\.codex\.tmp\bundled-marketplaces\openai-bundled\plugins\chrome.computer-use/latesteventually pointed at...\computer-use\26.623.42026after re-adding the plugin.Manual repair that restored the plugins:
PowerShell
Remove-Itemhit a null-reference error on some stalelatestjunctions, so I recreated thelatestjunctions with a narrower link-only delete via[System.IO.Directory]::Delete($latest, $false)followed byNew-Item -ItemType Junction.Post-repair validation:
codex doctor --summaryreported0 fail, and Browser runtime discovery could see bothChromeandCodex In-app Browser.This confirms the stale versioned WindowsApps marketplace source is still reproducible after a later update. It also adds one extra detail for the fix boundary: startup/update repair may need to validate not only
[marketplaces.openai-bundled].source, but also the plugin cachelatestjunctions, because they can remain pointed at old cache versions or at the transient.tmp\bundled-marketplacessource after the marketplace source is repaired.I prepared a candidate fix branch for this issue here:
The patch lets managed bundled marketplaces refresh their stale local source path after Windows package updates, and falls back to
.tmp/bundled-marketplaces/<name>when a configured bundled local source no longer has a marketplace manifest.Validation:
cargo test -p codex-core-plugins marketplace_addcargo test -p codex-core-plugins list_marketplacesgit diff --checkI attempted to open a draft PR from the fork, but the current GitHub token/integration is not permitted to create a PR against
openai/codex(Resource not accessible by integration).Thanks for the additional Windows Store update repro. This matches the stale bundled marketplace source failure mode I reported, and the extra
latestjunction detail is useful.I confirmed locally that this is not just a stale
[marketplaces.openai-bundled].sourceproblem. After repair, bundled plugin cache links can also remain stale or point back into.tmp/bundled-marketplaces/openai-bundled/plugins/<plugin>, so startup/update recovery should validate and refresh the per-pluginlatestlink as well as the marketplace source/cache contents.For the candidate fix: I agree a maintainer-side cherry-pick or a normal manual fork PR would be the right path. The integration-token PR failure looks like a GitHub permission limitation rather than evidence that the patch is not useful.
I prepared a fork branch with a regression-tested fix for this issue, but GitHub returns a
CreatePullRequestpermission error for this account when targetingopenai/codexdirectly.Branch: https://github.com/xiaokangzaina/codex/tree/codex/refresh-stale-bundled-marketplace
Compare: https://github.com/openai/codex/compare/main...xiaokangzaina:codex/refresh-stale-bundled-marketplace?expand=1
Commit: https://github.com/xiaokangzaina/codex/commit/92f70c0a580361aa7b16180501247d530c485e67
Summary:
openai-bundledmarketplaces to refresh from a new local directory source instead of rejecting the same marketplace name after Windows app updatesValidation:
cargo test -p codex-core-plugins marketplace_add::tests::add_marketplace_sync_refreshes_bundled_local_directory_source -- --exactcargo test -p codex-core-plugins manager::tests::list_marketplaces_falls_back_to_managed_bundled_root_when_configured_source_is_stale -- --exactgit diff --check upstream/main...HEADStill reproducible after multiple later Windows Store / Desktop updates.
Latest observed repro on Windows Codex Desktop:
OpenAI.Codex_26.623.19656.0_x64__2p2nqsd0c76g0[marketplaces.openai-bundled].sourcebefore repair still pointed at:OpenAI.Codex_26.623.13972.0_x64__2p2nqsd0c76g0\app\resources\plugins\openai-bundledbrowsercomputer-use26.623.141536BROWSER_USE_CODEX_APP_VERSIONin config also showed26.623.141536, so the plugin metadata/runtime version matched the current app package, but the persisted marketplace source was still one package behind.[marketplaces.openai-bundled].sourceto the current package's...\app\resources\plugins\openai-bundled, then restart Codex.node_replremained healthy (nodeRepl.write('ok')returnedok), so this latest repro was not a node runtime failure.Recent consecutive local pattern from this machine:
26.623.4041.0, stale source26.616.10790.026.623.5546.0, stale source26.623.4041.026.623.9142.0, stale source26.623.5546.026.623.11225.0, stale source26.623.9142.026.623.13972.0, stale source26.623.11225.026.623.19656.0, stale source26.623.13972.0So this is no longer intermittent on this Windows Store install: after each app update, the persisted
openai-bundledsource remains pointed at the previous versioned WindowsApps package path. The workaround is simple, but it has to be repeated after every update, which effectively leaves Browser / Computer Use unavailable until manual config repair.Requested fix remains the same: on startup/update, reconcile
[marketplaces.openai-bundled].sourceagainst the currently running WindowsApps package, or avoid persisting a versioned WindowsApps package path in user config for bundled marketplaces.This looks like a bundled-marketplace registration freshness boundary, not only a Windows update bug.
The runtime should separate:
plugin was bundled with the app
≠
plugin is currently registered from the active bundled marketplace source
In the report, the active app package changes after update, but the local marketplace config can still point to an older versioned WindowsApps path.
So the useful invariant is:
RegisteredBundledSourceVersion == RunningAppBundledSourceVersion
and:
ExpectedBundledPlugins ⊆ AvailableBundledPlugins
Failure shape:
Codex Desktop updates to a new WindowsApps package
+
[marketplaces.openai-bundled].source still points to an older package path
+
temp/cache is rebuilt or read from stale/incomplete bundled marketplace state
+
browser / computer-use disappear while current app manifests still exist
=>
installed/bundled plugin identity is no longer supported by the active source path
Minimal startup check:
def validate_bundled_marketplace(running_app, config, cache):
expected = {"browser", "chrome", "computer-use"}
source_is_current = (
config["openai_bundled_source_version"]
== running_app["bundled_source_version"]
)
available = set(cache.get("plugins", []))
missing = expected - available
if not source_is_current or missing:
return {
"decision": "repair_bundled_marketplace",
"source_is_current": source_is_current,
"missing_plugins": sorted(missing),
}
return {
"decision": "bundled_marketplace_ready",
"missing_plugins": [],
}
Regression cases:
=> re-register current bundled source
=> rebuild bundled marketplace cache from current app source
=> local bundled_marketplace_incomplete diagnostic or auto-repair
=> no repair
=> do not silently drop plugins; repair or emit stale_bundled_source_path
The key boundary is:
bundled plugin availability should be derived from the current running app source, not from a stale absolute path persisted across app updates.
If the app package version changes, bundled marketplace registration and cache state should be refreshed atomically before the plugin surface is advertised.
Same issue; Feedback ID: 019f5dac-6042-7652-b369-7a6d9e8da34d
Adding a newer update/recovery instance with the exact source-conflict and uninstall errors.
Environment
OpenAI.Codex_26.707.12708.026.707.6160826.707.91948Confirmed update conflict
A legacy
openai-bundledmarketplace entry remained in%USERPROFILE%\.codex\config.tomlfrom an earlier manual recovery:The updated app generated the new managed marketplace at:
but startup reconciliation failed with:
This left old and new bundled-plugin state mixed. The settings UI then showed the in-app Browser as unavailable and omitted Computer Use even though the native backends/pipes could still be present.
Chrome uninstall failure
Three UI uninstall attempts failed with the same log error:
An orphaned Node REPL process was also present: its recorded parent PID no longer existed. This may have held a cache handle, but I did not prove which process owned the denied handle. The error is in the same Windows cache-lock family as #22114, while the reserved-marketplace source collision is independently confirmed by the log above.
Recovery performed
config.toml.[marketplaces.openai-bundled]block.computer-use@openai-bundledandchrome@openai-bundled.openai-bundledfrom the managed.tmp\bundled-marketplacespath.After restart, Browser installation, Chrome uninstall, and Chrome reinstall all succeeded. Browser, Computer Use, and Chrome caches were rebuilt at
26.707.91948. The official Computer Use bootstrap returnedconnected: true, and the Chrome extension backend connected successfully after Chrome was launched.Requested behavior
For the reserved bundled marketplace names, an app update should migrate or replace a legacy source registration automatically, or at minimum surface an actionable conflict instead of leaving mixed cache/UI state. Plugin refresh/uninstall should also avoid deleting a cache tree while a bundled runtime/native host/Node worker may still hold it, and should fail without partially materializing the replacement.
This recovery did not fix the separate in-app Browser crash after real-page navigation.