Developer guide 01
Where Claude and Codex Skills Are Stored: Install, Verify, and Fix Them
Exact Claude Code and OpenAI Codex skill paths, valid SKILL.md structure, install checks, and a practical troubleshooting flow for skills that do not show up.
Developer guide 01
Exact Claude Code and OpenAI Codex skill paths, valid SKILL.md structure, install checks, and a practical troubleshooting flow for skills that do not show up.
Quick answer
Exact Claude Code and OpenAI Codex skill paths, valid SKILL.md structure, install checks, and a practical troubleshooting flow for skills that do not show up.
Claude Code stores personal skills under ~/.claude/skills/<skill-name>/SKILL.md and project skills under .claude/skills/<skill-name>/SKILL.md. Codex stores repository skills under .agents/skills/<skill-name>/SKILL.md, user skills under ~/.agents/skills/<skill-name>/SKILL.md, and admin skills under /etc/codex/skills/<skill-name>/SKILL.md. In both tools, a skill is a filesystem package with a SKILL.md entrypoint, not a magic prompt hidden somewhere in the app.
If a skill does not show up, start with the path and folder shape before changing the prompt. Most failures are boring: the file is one directory too high, the frontmatter is malformed, the agent was launched from the wrong working directory, or the current session has not picked up the new folder yet.
| Scope | Claude Code | Codex | Beste Verwendung |
|---|---|---|---|
| Personal | ~/.claude/skills/<skill-name>/SKILL.md | ~/.agents/skills/<skill-name>/SKILL.md | Your private workflows across repos |
| Repository | .claude/skills/<skill-name>/SKILL.md | .agents/skills/<skill-name>/SKILL.md | Team-shared repo workflows |
| Admin or managed | Managed settings / enterprise distribution | /etc/codex/skills/<skill-name>/SKILL.md | Shared machine or organization defaults |
| Bundled | Built into Claude Code | Bundled by OpenAI | Built-in workflows available without setup |
The important detail is the named directory. This is valid:
.agents/
skills/
release-check/
SKILL.md
scripts/
references/
This is not a valid skill package:
.agents/
skills/
SKILL.md
The agent needs a skill folder first, then the SKILL.md file inside it.
Claude and Codex both use SKILL.md as the entrypoint, but their metadata expectations differ slightly.
For Claude Code, the practical minimum is a SKILL.md file with YAML frontmatter and concise instructions. Claude recommends a description because it uses that text to decide when the skill should load automatically. The directory name becomes the command you type, such as /release-check.
---
description: Checks whether a pull request is ready to release. Use when asked to review release risk, deployment readiness, or rollout notes.
---
Review the current diff, test status, migration changes, and deployment notes.
Return blockers first, then follow-up checks.
For Codex, SKILL.md must include both name und description. Codex starts with each skill's name, description, and file path, then loads the full SKILL.md only when it chooses or is asked to use that skill.
---
name: release-check
description: Review release readiness for a pull request, including tests, migrations, environment changes, and deployment notes.
---
Inspect the diff and summarize:
- release blockers
- risky files
- checks already run
- checks still needed
Supporting files are optional. Use scripts/ when a deterministic command is safer than prose, references/ for longer docs, and assets/ for templates or examples. Keep the main SKILL.md short enough that the agent can understand when to use it without reading a manual.
Claude Code can use a skill in two ways: you invoke it directly with /skill-name, or Claude chooses it because the current request matches the skill description. That means the description is not decoration. It is routing metadata.
Good descriptions include the job, the trigger language, and the boundary:
description: Creates a focused frontend QA checklist after UI changes. Use when the user asks to verify layout, accessibility, responsive behavior, screenshots, or visual regressions.
Weak descriptions sound like labels:
description: Frontend helper.
When the description is vague, Claude may never load the skill automatically. When the description is too broad, it may trigger during unrelated work. Treat the description like a compact function signature: specific enough to route, short enough to scan.
Claude watches existing skill directories for file changes. If you edit SKILL.md inside an already watched ~/.claude/skills/ oder .claude/skills/ tree, the change can take effect in the current session. If you created the top-level skills directory after launching Claude Code, restart the session so the new directory is watched.
Codex discovers skills from repository, user, admin, and system locations. For repository skills, it scans .agents/skills from the current working directory up to the repository root. That makes the launch directory matter:
# Good: launched inside the repo
cd ~/work/my-app
codex
# Risky: launched outside the repo, then asked about files elsewhere
cd ~
codex
Codex can use a skill explicitly when you mention it with $skill-name or select it from the skill UI. It can also invoke a skill implicitly when the task matches the description. If many skills are installed, Codex may shorten descriptions in the initial skill list, so front-load the most important trigger words.
Use the built-in creator for a first pass:
$skill-creator
For curated local skills, Codex also provides:
$skill-installer linear
Codex detects newly installed skills automatically. If a skill still does not appear, restart Codex before rewriting the skill.
Use this order. It catches the real failures faster than asking the model to "try harder."
# Claude Code personal skill
ls ~/.claude/skills/<skill-name>/SKILL.md
# Claude Code project skill
ls .claude/skills/<skill-name>/SKILL.md
# Codex repository skill
ls .agents/skills/<skill-name>/SKILL.md
# Codex user skill
ls ~/.agents/skills/<skill-name>/SKILL.md
The path should end with <skill-name>/SKILL.md, not skills/SKILL.md.
For Codex, verify both name und description exist:
head -n 8 .agents/skills/<skill-name>/SKILL.md
For Claude, make sure the YAML fence is valid and the description says when to use the skill.
For Codex repository skills, run from inside the repository and confirm the repo root is what you think it is. A skill under another project tree will not be discovered because it exists somewhere on disk.
Claude may need a restart when the top-level skills directory was created after the session began. Codex usually detects new skills, but the official docs still recommend restarting if a newly installed skill does not appear.
Create the smallest possible skill before debugging a full workflow.
For Claude Code:
mkdir -p .claude/skills/hello-skill
cat > .claude/skills/hello-skill/SKILL.md <<'EOF'
---
description: Replies with the exact phrase HELLO_SKILL_OK. Use when testing whether project skills load.
---
Reply with exactly: HELLO_SKILL_OK
EOF
Then ask:
/hello-skill
For Codex:
mkdir -p .agents/skills/hello-skill
cat > .agents/skills/hello-skill/SKILL.md <<'EOF'
---
name: hello-skill
description: Replies with the exact phrase HELLO_SKILL_OK. Use when testing whether repository skills load.
---
Reply with exactly: HELLO_SKILL_OK
EOF
Then ask:
$hello-skill
If the tiny skill works, the skill system is fine and the original skill has a packaging or description problem. If the tiny skill does not work, the issue is discovery: path, launch directory, session refresh, or disabled configuration.
Use project skills when the workflow belongs to the repository:
| Put it in the repo when... | Keep it personal when... |
|---|---|
| The skill encodes release, testing, design, or review rules the team expects | It reflects your preferred wording, local aliases, or private habits |
The skill references repo scripts such as npm run lint, make test-api, or scripts/deploy-preview.sh | The skill references private tools, home-directory paths, or non-shared credentials |
| New contributors should benefit from it immediately | It would annoy other contributors or leak local setup details |
| The skill should evolve with the codebase | The skill is an experiment you have not validated yet |
The mental model: project skills are executable team documentation. Personal skills are your operator shortcuts.
Read third-party skills before enabling them. A skill can include instructions that ask the agent to run commands, inspect files, call scripts, or use bundled references. Supporting scripts are useful when they make a workflow deterministic, but they are still code entering your agent's operating loop.
Before installing a skill from another repository, check:
SKILL.md ask the agent to read or exfiltrate secrets?Treat a shared skill like a small dependency. Review it, pin it if needed, and keep team-owned skills in version control.
<skill-name>/SKILL.md..claude/skills/; Codex project skills are under .agents/skills/.SKILL.md frontmatter includes name und description.description is specific enough for automatic routing.hello-skill works before you debug the full workflow.