Where Codex CLI skills are stored
There are two answers and both are current. The Codex CLI installed today still discovers personal skills in ~/.codex/skills — $CODEX_HOME/skills, if you have moved it — and that is where its own skill-creator puts them. The documented discovery roots are .agents/skills, scanned from your working directory up to the repository root, plus $HOME/.agents/skills for the user scope and /etc/codex/skills for the machine. A skill is a folder with a SKILL.md in it in every one of them.
The folders Codex reads
- ~/.codex/skills/
- Personal skills, available in every repository. $CODEX_HOME/skills when that variable is set. This is where the CLI creates a skill when you do not tell it otherwise.
- .agents/skills/
- Repository skills. Codex scans this folder in every directory from where you launched it up to the repository root, so a skill can belong to one module or to the whole repo.
- ~/.agents/skills/
- The documented user scope. Same idea as ~/.codex/skills — yours, everywhere — under the agent-neutral folder name.
- /etc/codex/skills/
- Machine scope. For skills an administrator installs once for every user on the box or in the container.
Beyond those there are the skills bundled with Codex itself, which you cannot see as folders you own — the skill-creator is one of them. Codex follows symlinks when it scans, so keeping the real folder in a repository you version and linking it into place is a supported way to work.
~/.codex/skills/
└── release-notes/
├── SKILL.md # name and description in the frontmatter
└── scripts/ # optional, anything the skill runsSKILL.md must carry a name and a description. Codex loads the name, the description and — unlike Claude Code — the file path of every skill up front, then reads the body only when it decides to use one. That listing is capped at about 2% of the context window, so a large collection of skills with long descriptions can get truncated and some skills simply will not be offered.
Listing what you have
No single command prints every scope, so it is one line per folder. The repository one is worth running from the directory you actually launch Codex in, because that is where the upward scan starts.
ls ~/.codex/skills # personal, the CLI default
ls ~/.agents/skills # personal, the documented user scope
ls .agents/skills # this repository
ls /etc/codex/skills # installed for everyone on this machineIf two skills share a name across scopes, Codex does not merge them: both can appear in the selector, which is confusing in exactly the way you would expect. Rename one.
Turning a Codex skill off without deleting it
There is a supported switch, and it lives in the config file rather than in the skills folder. Point it at the SKILL.md and set enabled to false; the folder stays where it is.
[[skills.config]]
path = "/path/to/skill/SKILL.md"
enabled = falseThe alternative that works in any agent is to move the folder out of a scanned root and back again when you want it. That is the same move as retiring a Claude Code skill, for the same reason: a skill is only ever a folder, and being loaded is a matter of where it sits.
How this compares with Claude Code
The format is shared. A folder with a SKILL.md carrying a name and a description works in Claude Code, in Codex and in OpenCode, which is why the same skill can be dropped into any of them. What differs is the address and the plumbing around it, and that is where a skill goes missing.
- Claude Code looks in ~/.claude/skills for personal skills and .claude/skills for project ones, and only in the project root — it does not walk up the directory tree the way Codex does with .agents/skills.
- Codex shows itself the file path of each skill in the initial listing and budgets that listing to about 2% of the context window; Claude Code budgets its own listing to roughly 1%.
- Claude Code counts how often each skill fires, in ~/.claude.json under skillUsage. Codex exposes no equivalent per-skill counter, so on the Codex side what you can see is what is in the folders.
- Turning one off is a config edit in both, in different files: [[skills.config]] in ~/.codex/config.toml for Codex, skillOverrides in settings.json for Claude Code.
The companion page, "Where Claude Code skills are stored", covers the three Claude locations and the plugin case that explains most missing skills. Between them they are the two halves of the same question, and Loadout reads both sets of folders so you do not have to hold the difference in your head.
Questions
- Where does the Codex CLI put a skill it creates for me?
- In $CODEX_HOME/skills, which is ~/.codex/skills unless you have set that variable. Its own skill-creator asks where you want the skill and falls back to that folder precisely because Codex discovers it there without further configuration.
- What is the difference between .codex/skills and .agents/skills?
- They are two roots for the same thing. ~/.codex/skills is the CLI-specific personal folder; .agents/skills is the agent-neutral one the documentation describes, scanned in your home folder and in every directory from your working directory up to the repository root. Both are read, and a skill in either is a folder with a SKILL.md.
- Can I use the same SKILL.md in Codex and Claude Code?
- Yes. The format is the same folder with a SKILL.md and a name and description in its frontmatter, so a skill written for one runs in the other. Only the folder it has to live in changes, and one symlink can put a single copy in both.
Loadout shows all of this in one list, with usage counts
A free Mac app that reads the same folders this guide describes: every skill, subagent, slash command, plugin and MCP server, and how often each one actually fires. Nothing leaves your machine.