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:
GML-MMGroup/Diverter#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:
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:
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.md loading
- failed reads
- retry steps
It may subsequently recover and continue successfully.
Additional information
The plugin manifest correctly declares:
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:
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:
Exact expansion produces the valid path:
Codex instead attempted to read:
It appears to have treated the repeated marketplace/plugin name as accidental duplication and removed one required
divertercomponent.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:Related downstream report:
GML-MMGroup/Diverter#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:
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:
diverterPlugin name:
diverterPlugin version:
0.3.1Valid installed path:
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:
What do you see instead?
Codex removes a required repeated directory component, reads a nonexistent path, and exposes internal recovery details such as:
SKILL.mdloadingIt may subsequently recover and continue successfully.
Additional information
The plugin manifest correctly declares:
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:
https://developers.openai.com/plugins/build/plugins#how-local-marketplaces-work
https://learn.chatgpt.com/docs/build-skills
https://learn.chatgpt.com/docs/hooks