Plugin skill paths leak mutable marketplace cache commit into model-visible context
Plugin skill paths leak mutable marketplace cache commit into model-visible context
Summary
Codex Desktop exposes local plugin cache paths for skills in model-visible context. For the Superpowers plugin, the path includes the current openai-curated marketplace commit prefix, for example:
$HOME/.codex/plugins/cache/openai-curated/superpowers/8770e9d2/skills/using-superpowers/SKILL.md
That cache suffix changes when the curated marketplace repository updates, even when the Superpowers plugin itself has not changed. This makes an internal implementation detail user-visible and potentially confusing, and it leaks local filesystem layout into prompts/context.
Environment
- Product: Codex Desktop
- Session
cli_version:0.135.0-alpha.1 - Platform: macOS
- Plugin:
superpowers@openai-curated - Superpowers plugin version:
5.1.0 - Current curated marketplace commit:
8770e9d21ce393173797c63b25dc38fb18ddd7c8
Observed behavior
The available skills list shown to the model includes absolute local paths like:
$HOME/.codex/plugins/cache/openai-curated/superpowers/8770e9d2/skills/systematic-debugging/SKILL.md
Earlier sessions referenced the same plugin under a different cache suffix:
$HOME/.codex/plugins/cache/openai-curated/superpowers/6188456f/skills/systematic-debugging/SKILL.md
On the current machine:
$ cat ~/.codex/.tmp/plugins.sha
8770e9d21ce393173797c63b25dc38fb18ddd7c8
$ git -C ~/.codex/.tmp/plugins log -1 --format='%H %cI %s'
8770e9d21ce393173797c63b25dc38fb18ddd7c8 2026-05-31T23:02:32-07:00 Add Moody's plugin skills (#293)
$ grep -n '"version"' ~/.codex/plugins/cache/openai-curated/superpowers/8770e9d2/.codex-plugin/plugin.json
3: "version": "5.1.0",
So the visible cache suffix appears to be derived from the whole openai/plugins marketplace revision, not from the Superpowers plugin content or version. A marketplace update for an unrelated plugin caused the user-visible Superpowers cache path to change.
Expected behavior
Users and models should not need to know local plugin cache paths. Model-visible skill metadata should expose stable identifiers such as:
superpowers:systematic-debugging
superpowers:using-superpowers
or a stable virtual URI, not a mutable absolute filesystem path.
Impact
- Users can notice and ask why an internal Superpowers cache path changed even though they changed nothing.
- Generated instructions, debugging output, or user scripts may accidentally rely on volatile cache paths.
- The model-visible prompt leaks local filesystem details such as home directory layout.
- Marketplace updates for unrelated plugins can make a stable plugin appear to have moved.
Suggested fixes
- Do not include absolute local
SKILL.mdpaths in model-visible skill metadata. Expose stable skill IDs and let the loader resolve them internally. - Consider stable virtual URIs for internal references, for example
codex://skills/superpowers/systematic-debugging. - Scope plugin cache keys to the individual plugin content hash or plugin version rather than the whole marketplace commit.
- Keep active-session plugin paths stable across marketplace refreshes, or resolve through an immutable session manifest.
- Add a regression test that refreshes
openai-curatedwith an unrelated plugin change and verifies that model-visible Superpowers skill identifiers remain unchanged and do not contain$HOME/.codex/plugins/cache/....
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗