Codex app injects incorrect .system path for user-installed skills
Summary
Codex app generated an incorrect Skills list path for a user-installed skill.
Actual skill location
C:\Users\{USERNAME}\.codex\skills\vercel-react-best-practices\SKILL.md
Injected path
C:\Users\{USERNAME}\.codex\skills\.system\vercel-react-best-practices\SKILL.md
Expected
User-installed skills should be injected with their real path under:
$CODEX_HOME\skills\<skill-name>\SKILL.md
Only built-in/system skills should be injected from:
$CODEX_HOME\skills\.system\<skill-name>\SKILL.md
Observed
vercel-react-best-practices was injected as a .system skill path, even though it is installed as a normal user skill. The agent failed to open the skill until it manually searched under $CODEX_HOME\skills.
Suggested fix
When generating the session Skills list:
- Use the actual discovered
SKILL.mdpath instead of reconstructing paths. - Validate that the emitted
file:path exists. - Treat
$CODEX_HOME\skills\.system\*as system skills only. - Treat
$CODEX_HOME\skills\*excluding.systemas user-installed skills.
Local evidence
.system contains only:
imagegenopenai-docsplugin-creatorskill-creatorskill-installer
vercel-react-best-practices exists at:
C:\Users\{USERNAME}\.codex\skills\vercel-react-best-practices
Environment
- OS: Windows
- Codex app session
$CODEX_HOME:C:\Users\{USERNAME}\.codex
2 Comments
I took a look at current
origin/main(7d47056). I could not find a session-rendering or injection path that rewrites a user skill path into.systemafter discovery:codex-rs/core-skills/src/loader.rsregisters the normal user skill root separately from the embedded system-skill cache underCODEX_HOME/skills/.system.codex-rs/core-skills/src/injection.rsusesskill.path_to_skills_mddirectly for the injected path.codex-rs/core/src/context/skill_instructions.rsjust carries that path into the<path>field.skill.path_to_skills_mddirectly.So if this repro is current, the wrong root may already be attached during skill discovery/caching, or the app may be reading a stale/cached skill entry. The most useful next artifact would probably be the raw
skills/listentry forvercel-react-best-practices(especiallypathandscope), with local prefixes redacted or normalized toCODEX_HOME.For the cache angle, a safer check would be: quit Codex, temporarily move/rename
CODEX_HOME/skills/.systemso it can be restored, then restart Codex and see whether the emitted path changes.Fresh Linux check (2026-08-25): I cannot reproduce the incorrect
.systemreconstruction with Codex CLI 0.144.3.After
initialize, a directskills/listrequest withforceReload: truereturned this user skill:There is no
.systemcomponent. The ACP bridge used for this probe was @agentclientprotocol/codex-acp 1.6.2, but it forwards the app-server response unchanged.This suggests the original failure was either fixed after the affected build, cached/stale metadata, or a desktop/session rendering path rather than current
skills/listdiscovery. Preserving the original affected build's rawskills/listitem (name, path, scope) would distinguish those cases.