Codex flattens a valid plugin skill path and exposes internal recovery details
What version of Codex is running?
Codex CLI 0.145.0, observed through a Codex Desktop session.
What subscription do you have?
Not provided.
Which model were you using?
Not recorded.
What platform is your computer?
The failure was observed in a Linux workspace used by Codex Desktop. The exact host OS and kernel were not recorded.
What issue are you seeing?
When Codex selects a skill bundled with a marketplace plugin, it sometimes reconstructs the skill path incorrectly instead of preserving the exact path supplied in the skill catalog.
The catalog contained:
r3 = ~/.codex/plugins/cache/diverter
skill file = r3/diverter/0.3.1/skills/diverter/SKILL.md
Exact expansion produces the valid path:
~/.codex/plugins/cache/diverter/diverter/0.3.1/skills/diverter/SKILL.md
Codex instead attempted to read:
~/.codex/plugins/cache/diverter/0.3.1/skills/diverter/SKILL.md
It appears to have treated the repeated marketplace/plugin name as accidental duplication and removed one required diverter component.
The failed read was then followed by user-visible assistant commentary describing the alias expansion, cache path, failed read, and retry. Codex recovered by reading the correct path, but the internal recovery process was exposed to the user and made a valid plugin installation appear broken.
This incorrect flattened path has appeared in multiple sessions, so it does not appear to be an isolated typo.
The installed layout is valid. The marketplace name and plugin name are both diverter, and the documented cache structure is:
~/.codex/plugins/cache/$MARKETPLACE_NAME/$PLUGIN_NAME/$VERSION/
Related downstream report:
https://github.com/GML-MMGroup/Diverter/issues/3
What steps can reproduce the bug?
- Install a plugin whose marketplace name and plugin name are identical.
- Ensure the plugin contains a skill under:
``text``
skills/<skill-name>/SKILL.md
- Start a new Codex session so the plugin skill appears in the model-visible skill catalog through an aliased root.
- Trigger or explicitly invoke that plugin skill.
- Observe whether Codex removes one of the repeated marketplace/plugin directory components when reading
SKILL.md. - If the first read fails, inspect whether Codex exposes the cache path, alias reconstruction, or retry process in user-visible commentary.
The original reproduction used:
- Marketplace name:
diverter - Plugin name:
diverter - Plugin version:
0.3.1 - Valid installed path:
``text``
~/.codex/plugins/cache/diverter/diverter/0.3.1
What is the expected behavior?
Codex should treat the catalog-provided skill path as authoritative and preserve every path component exactly.
Preferably, the host should resolve the selected skill to an absolute path before asking the model to load it, rather than requiring the model to reconstruct the path from an alias.
Failure reporting should also be sanitized:
- Intentional non-selection of a skill should remain silent.
- An internal failure that recovers automatically should remain silent, with diagnostics retained in internal logs.
- A failure that changes task execution should be reported briefly without internal paths or retry mechanics.
- A failure requiring user action should explain the problem and the required action.
What do you see instead?
Codex removes a required repeated directory component, reads a nonexistent path, and exposes internal recovery details such as:
- skill aliases
- plugin cache paths
SKILL.mdloading- failed reads
- retry steps
It may subsequently recover and continue successfully.
Additional information
The plugin manifest correctly declares:
"skills": "./skills/"
The plugin cache is healthy, and retrying with the exact catalog-expanded path succeeds.
Renaming the marketplace or plugin would only hide this specific reproduction and would not fix the underlying path reconstruction behavior.
Official documentation:
- Plugin cache layout:
https://developers.openai.com/plugins/build/plugins#how-local-marketplaces-work
- Skill loading:
https://learn.chatgpt.com/docs/build-skills
- Plugin-bundled hooks:
2 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Additional reproduction: plugin skill-relative reference loses the selected skill directory
Environment:
This has occurred in multiple fresh sessions.
The skill catalog identifies the relevant paths as:
skill root: <CODEX_HOME>/plugins/cache/openai-curated-remote/superpowers/6.3.0/skills
selected skill: <skill-root>/using-superpowers/SKILL.md
The selected SKILL.md tells Codex to read this platform-specific reference:
references/codex-tools.md
Expected resolution, relative to the directory containing the selected SKILL.md:
<skill-root>/using-superpowers/references/codex-tools.md
Actual path attempted by Codex:
<skill-root>/references/codex-tools.md
The read fails with No such file or directory. Codex then exposes recovery commentary stating that the general skill Codex-specific reference is not present at the path it names and may continue without loading it. In one session it recovered only after searching the plugin tree, which found and successfully read the file at the expected path.
Reproduction steps:
The plugin payload is present and correctly structured; no plugin update, stale cache, or missing file is involved. This differs from the original reproduction in which a repeated marketplace/plugin component is removed, but appears to be the same underlying class of model-visible path reconstruction failure: Codex does not preserve the authoritative selected skill directory when resolving a skill-relative resource.