Local marketplace plugin is enabled but its plugin skills are not exposed in Codex sessions
Summary
A local marketplace plugin is enabled and its plugin manifest points to a valid skills directory, but Codex sessions do not expose the plugin's skills. This reproduces in Codex CLI and Codex App after multiple restarts.
This is currently blocking oh-my-codex plugin-mode usage without falling back to legacy skill installation.
Environment
codex-cli 0.130.0
oh-my-codex v0.16.3
macOS / arm64
Expected behavior
When a local marketplace plugin is configured and enabled, Codex should discover and expose the skills declared by the plugin manifest:
{
"name": "oh-my-codex",
"version": "0.16.3",
"skills": "./skills/",
"mcpServers": "./.mcp.json",
"apps": "./.app.json"
}
In this case, skills such as team, ralph, deep-interview, ultrawork, wiki, etc. should be visible in a fresh Codex session.
Actual behavior
Only the legacy/user-installed omx-setup skill is visible. The rest of the oh-my-codex plugin skills are not exposed.
A fresh codex exec session shows only these matching skills:
omx-setup
compound-engineering:ce-plan
sophi:use-agent-team
Other plugin skills from non-local/plugin-cache sources, such as compound-engineering:*, sophi:*, browser-use:*, etc., are exposed correctly. The issue appears specific to this local marketplace plugin or its layout/discovery path.
Configuration evidence
Relevant ~/.codex/config.toml entries:
[marketplaces.oh-my-codex-local]
source_type = "local"
source = "/opt/homebrew/lib/node_modules/oh-my-codex"
[plugins."oh-my-codex@oh-my-codex-local"]
enabled = true
The plugin bundle exists and contains a valid manifest:
B=/opt/homebrew/lib/node_modules/oh-my-codex/plugins/oh-my-codex
node -e "const p=require('$B/.codex-plugin/plugin.json'); console.log(JSON.stringify({name:p.name,version:p.version,skills:p.skills,mcpServers:p.mcpServers,apps:p.apps}, null, 2))"
Output:
{
"name": "oh-my-codex",
"version": "0.16.3",
"skills": "./skills/",
"mcpServers": "./.mcp.json",
"apps": "./.app.json"
}
The skills are physically present:
find /opt/homebrew/lib/node_modules/oh-my-codex/plugins/oh-my-codex/skills -maxdepth 2 -name SKILL.md | wc -l
# 26
omx doctor also reports the plugin-mode install as healthy:
Resolved setup scope: user
Resolved setup install mode: plugin
[OK] Skills: plugin marketplace oh-my-codex-local registered; OMX skills are supplied by /opt/homebrew/lib/node_modules/oh-my-codex/plugins/oh-my-codex
Results: 15 passed, 0 warnings, 0 failed
Reproduction
- Install and configure
oh-my-codexin plugin mode. - Ensure the local marketplace and plugin are enabled in
~/.codex/config.toml:
```toml
[marketplaces.oh-my-codex-local]
source_type = "local"
source = "/opt/homebrew/lib/node_modules/oh-my-codex"
[plugins."oh-my-codex@oh-my-codex-local"]
enabled = true
```
- Verify the plugin manifest has
skills: "./skills/"and that theskills/*/SKILL.mdfiles exist. - Start a fresh Codex CLI or Codex App session.
- Ask the model to list visible skills, or inspect the model-visible skill list.
Observed: oh-my-codex plugin skills are missing.
Local marketplace commands tried
codex plugin marketplace add /opt/homebrew/lib/node_modules/oh-my-codex
Output:
Marketplace `oh-my-codex-local` is already added from /opt/homebrew/lib/node_modules/oh-my-codex.
Installed marketplace root: /opt/homebrew/lib/node_modules/oh-my-codex
codex plugin marketplace upgrade oh-my-codex-local
Output:
Error: marketplace `oh-my-codex-local` is not configured as a Git marketplace
Questions
- Are skills from
source_type = "local"marketplaces expected to be loaded into Codex sessions? - If yes, is the
oh-my-codexlocal marketplace layout valid for Codex plugin discovery? - Is there a required cache/install step for local marketplace plugins beyond
codex plugin marketplace add <local-root>and[plugins."name@marketplace"].enabled = true? - If this is a Codex loader bug, could Codex surface diagnostics explaining why a plugin's declared
skillsdirectory was skipped?
Why this matters
oh-my-codex plugin mode intentionally avoids legacy skill installation and relies on Codex plugin discovery for bundled skills. Falling back to legacy mode works around the symptom but defeats the plugin-mode path.
6 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Thanks for the duplicate pointer. I checked #22051 and it looks related at the plugin discovery/cache layer, but I don't think this issue is an exact duplicate.
Key differences:
oh-my-codex-local).~/.codex/config.toml.skills: "./skills/".SKILL.mdfiles.So the shared root may be plugin discovery, but this issue is specifically about local marketplace plugin skill discovery / model-visible skills, not only App plugin UI listing or bundled marketplace cache generation.
I reproduced the same issue with an official
openai-curatedplugin.Environment
codex-cli 0.144.0-alpha.4superpowers@openai-curated5.1.3, marketplace revision2f1a8948Findings
config.tomlcontains[plugins."superpowers@openai-curated"] enabled = true.codex plugin listreports the plugin asinstalled, enabled.plugin/readreturns all 14 Superpowers skills withenabled: true.skills/listwithforceReload: truereturns nosuperpowers:*skills.errorsarray is empty.codex execprocess also reports that no Superpowers skills are available.In other words, the plugin details API reports a healthy plugin and complete skill inventory, while the model-visible skill catalog silently omits the entire plugin.
Workaround and isolation
I linked each Superpowers skill directory into
~/.codex/skills/<skill-name>. After that,codex debug prompt-inputincluded all 14 namespaced skills again, for example:The model-visible paths still point to the original marketplace files under
plugins/superpowers/skills/.../SKILL.md. This suggests that the SKILL.md files and Superpowers manifest are valid, and that the failure is in propagating the installed plugin's skill roots into the session skill loader.Possible source-level failure point
On current
main,skills/listfollows this path:effective_plugin_skill_roots()skips all skill roots for an otherwise active plugin whenplugin_namespaceis absent. I have not directly inspected that internal runtime value, so this is only a hypothesis, but it is one concrete point whereplugin/readandskills/listcould diverge without producing a skill loading error.Suggested regression coverage
skills: "./skills/"in its manifest.plugin/readandskills/list(forceReload: true)expose the same enabled skills.errorsor diagnostics instead of silently dropping it.If a maintainer confirms the intended fix and explicitly invites an external PR, I can prepare the regression test and implementation within that scope.
Confirmed on the current stable release after a clean official-only setup.
Environment
codex-cli 0.144.1(matchesnpm view @openai/codex version)source_type = "local"marketplaceEnabled official curated plugins:
codex plugin listreports every one asinstalled, enabledfrom the officialopenai-curatedmarketplace.Reproduction and observed result
openai-curated-remotecache.openai-curated.The resulting model-visible skills list contains 42 ordinary system/runtime/repo-local skills, but zero entries matching
superpowers,build-web-apps,github:, orsentry:.The same result occurs with
codex exec --strict-config --ephemeral.Why this is not only a skill-metadata budget issue
I initially had six curated plugins. I removed the two largest optional plugins (
build-web-data-visualizationandcodex-security), reducing the enabled curated set to the four above. Plugin skill descriptions were well below the documented fallback budget, yet all curated skills remain absent while non-plugin skills remain visible.The plugin state and the model-visible skill catalog therefore still diverge on the current stable release, even for the official curated marketplace and without a local marketplace layout.
A useful regression test would install an official curated plugin in a clean temporary CODEX_HOME and assert that its declared skill roots appear in
codex debug prompt-input/skills/list. Diagnostics should explain an omitted enabled plugin skill root rather than returning an empty skill set without errors.Additional diagnostic correlation: this report was reproduced and validated in Codex thread ID
019f5789-761a-7a60-a64f-185ccd1ab791.For temporary mitigation, globally symlinking each enabled official curated plugin skill directory into
~/.codex/skills/made all 25 skills appear in a freshcodex debug prompt-inputprocess. The displayed sources still resolve to the officialopenai-curatedplugin directories. This reinforces that the manifests and SKILL.md files are valid; the missing step is plugin skill-root propagation into the normal loader.Confirmed on Windows with the official curated GitHub plugin, including the current stable CLI.
Environment
26.707.71524codex-cli 0.144.2@openai/codex 0.144.4github@openai-curated0.1.6, marketplace revision2f1a8948Observed state
codex plugin list --jsonreportsgithub@openai-curatedinstalled and enabled.github:gh-address-comments,github:gh-fix-ci,github:github, andgithub:yeet.Controls attempted
All of these still returned 0/4 GitHub skills:
0.144.4).github@openai-curatedthroughcodex plugin remove/add.@githubinvocation.GITHUB_PAT_TOKENinjected only into the probe process.apps,plugins, andremote_pluginfeature flags are enabled.No manual cache edits or symlink workaround were used. The repository configuration and plugin declaration remained valid.
This independently reproduces the official-curated case on Windows and shows that the omission is not caused by GitHub authentication, the bundled CLI version, a stale plugin install, or lack of explicit invocation. Ideally, an enabled plugin with declared skills should either contribute those roots to
skills/list/debug prompt-input, or emit a diagnostic explaining why each root was excluded.