BigPizzaV3/CodexPlusPlus · error · anyhow::Error
missing cached {plugin} plugin for openai-bundled marketplac
Error message
missing cached {plugin} plugin for openai-bundled marketplace What it means
On Windows, staging the openai-bundled marketplace (crates/codex-plus-core/src/computer_use_guard.rs:639) does not ship plugin files itself — it copies each plugin in BUNDLED_MARKETPLACE_PLUGINS from the local cache via latest_cache_plugin_version(home, plugin). If no cached version of any listed plugin exists, the guard bails with 'missing cached <plugin> plugin for openai-bundled marketplace' before completing the staging directory.
Source
Thrown at crates/codex-plus-core/src/computer_use_guard.rs:639
});
candidates.into_iter().next()
}
#[cfg(windows)]
fn build_marketplace_from_cache(home: &Path, staging: &Path) -> anyhow::Result<()> {
let plugins_dir = staging.join("plugins");
std::fs::create_dir_all(staging.join(".agents").join("plugins"))?;
std::fs::create_dir_all(&plugins_dir)?;
std::fs::write(
staging
.join(".agents")
.join("plugins")
.join("marketplace.json"),
bundled_marketplace_json().as_bytes(),
)?;
for plugin in BUNDLED_MARKETPLACE_PLUGINS {
let Some(source) = latest_cache_plugin_version(home, plugin) else {
anyhow::bail!("missing cached {plugin} plugin for openai-bundled marketplace");
};
copy_dir_recursive(&source, &plugins_dir.join(plugin))?;
}
Ok(())
}
#[cfg(windows)]
fn bundled_marketplace_json() -> String {
let plugins = [
("browser", "Engineering"),
("chrome", "Productivity"),
("computer-use", "Productivity"),
("latex", "Research"),
]
.into_iter()
.map(|(name, category)| {
serde_json::json!({
"name": name,View on GitHub (pinned to 1f431ae49b)
Solutions
- Run Codex once while online so it downloads and caches the required plugins, then re-run the guard/staging
- Check the plugin cache directory under the home dir for the expected plugin version subfolders and re-populate it if a cleanup tool removed them
- Verify you are on current Codex++/Codex versions — a cache-layout change on either side makes old caches unfindable
- If the machine must stay offline, pre-seed the cache from another machine with the same plugin versions
Example fix
# before: fresh install, guard runs offline, cache is empty # -> missing cached computer-use plugin for openai-bundled marketplace # after: let Codex populate the plugin cache once, then re-run # 1) launch Codex with network access and trigger plugin install # 2) re-run the guard / manager action; staging now finds the cached plugins
Defensive patterns
Strategy: validation
Validate before calling
// Before invoking the guard on Windows, confirm cached plugins exist
for plugin in ["browser", "chrome", "computer-use"] { // mirror BUNDLED_MARKETPLACE_PLUGINS
ensure!(latest_cache_plugin_version(home, plugin).is_some(),
"plugin '{plugin}' not cached — run Codex online once first");
} Type guard
fn bundled_plugins_cached(home: &std::path::Path) -> bool {
BUNDLED_MARKETPLACE_PLUGINS.iter()
.all(|p| latest_cache_plugin_version(home, p).is_some())
} Try / catch
match stage_bundled_marketplace(home) {
Ok(()) => Ok(()),
Err(e) if e.to_string().contains("missing cached") => {
// expected on fresh/offline installs — degrade gracefully and guide the user
eprintln!("run Codex once online to populate the plugin cache, then retry");
Err(e)
}
Err(e) => Err(e),
} Prevention
- Populate the plugin cache with one online Codex session before enabling computer-use features
- Exclude the plugin cache directory from disk-cleanup tools
- After version upgrades, re-verify cached plugin layout before running the guard
- On offline machines, pre-seed the cache from an identical online install
When it happens
Trigger: Running the computer-use guard on Windows before Codex has ever downloaded the required plugins (fresh install, always-offline machine), or after the plugin cache directory was cleared/deleted; cache layout change between versions can also make lookups miss.
Common situations: Fresh Windows install where the user enables computer-use features before the first successful online Codex session; disk-cleanup tools purging the cache; CI environments with a pristine home directory; version upgrades that moved/renamed cached plugin directories.
Related errors
- invalid bundled marketplace path
- invalid @oai/sky package.json path
- invalid runtime file path
- SetThreadDpiAwarenessContext failed
- failed to wait for Windows process id {process_id}
AI-assisted analysis of BigPizzaV3/CodexPlusPlus@1f431ae49b (2026-08-16).
Data as JSON: /api/errors/b85cf42362c2618f.
Report an issue: GitHub.