Skip to content
Guide

Where Claude Code skills are stored

Personal skills live in ~/.claude/skills, one folder per skill, each with a SKILL.md inside. Project skills live in .claude/skills next to the code they belong to. Plugin skills come bundled inside the plugin and never appear in either folder, which is why a skill you can invoke is often nowhere you look. The part most people get backwards: when the same skill name exists in both your home folder and your project, the personal one runs.

By Miguel Silva · Updated

The four levels a skill can live at

~/.claude/skills/
Personal skills. Available in every project on the machine. One folder per skill, each holding a SKILL.md. On Windows this is the same path under your user profile: C:\Users\<you>\.claude\skills\.
.claude/skills/
Project skills, in the repository. Available only inside that project and committed with it. Claude Code reads this folder in the directory you start it from and in every parent up to the repository root, so starting in a subdirectory still picks up the skills defined at the top.
<plugin>/skills/
Plugin skills, inside the plugin rather than in either skills folder. Installed plugins sit under ~/.claude/plugins/cache/<marketplace>/<plugin>/<version>/, so the skill is at that path with /skills/<skill-name>/SKILL.md on the end.
Managed settings
Enterprise skills live under .claude/skills in the managed settings directory. An administrator deploys them; they take precedence over personal and project skills.

A skill is a folder, not a file. The folder name is the skill name, and the SKILL.md inside it carries the frontmatter (name and description) that decides when Claude loads it.

~/.claude/skills/
└── commit-msg/
    ├── SKILL.md          # name, description, and the instructions
    └── references/       # anything the skill reads when it runs
One personal skill, as it sits on disk.

Which one wins when two share a name

Enterprise overrides personal, and personal overrides project. That is the opposite of the way most scoped configuration works, and it is the single most common thing to get wrong about skills: put a deploy skill in ~/.claude/skills and another in your project .claude/skills, and typing /deploy runs the personal one. The project skill is still loaded — it just does not answer to the name.

  • A skill at any of those levels also overrides a bundled skill of the same name — but not that bundled skill’s aliases. A project code-review skill replaces /code-review, while /review still runs the built-in one.
  • Plugin skills cannot collide at all. They are namespaced as plugin-name:skill-name, so a plugin deploy becomes /my-plugin:deploy and loads alongside yours.
  • A skill beats a command of the same name. With both .claude/commands/deploy.md and .claude/skills/deploy/SKILL.md, /deploy runs the skill.
  • A skill from any of these sources overrides one synced from your claude.ai account with the same name.

The practical consequence is that a personal skill you wrote months ago can quietly shadow the project skill your team committed, in a repository where everyone else gets the team version. If a skill behaves differently for you than for a colleague, this is the first thing to check.

How to list them from the terminal

Use /skills to inspect the skills available to the current session. These filesystem commands show the personal, project and plugin-cache folders; cached files are not proof that a plugin is enabled.

ls ~/.claude/skills                      # personal
ls .claude/skills                        # this project
find ~/.claude/plugins/cache \
  -maxdepth 6 -name SKILL.md             # cached plugin skill files

What this does not tell you is which of them Claude has actually used. The folder is the same size whether a skill fired two hundred times or never once.

Why a skill you can use is not in ~/.claude/skills

Almost always because it came from a plugin. Plugins install into ~/.claude/plugins and bring their own skills, subagents and slash commands with them; those never appear in the personal skills folder, and disabling the plugin takes them all away at once.

Check which client you are using. Codex documents its own .agents/skills locations. The companion guide "Where Codex CLI skills are stored" compares those roots with older CLI-specific setups.

  • A skill in a project folder only exists while you are in that project: open another repository and it is gone.
  • A skill whose SKILL.md has no description is loaded but rarely triggered: the description is what Claude matches against.
  • A skill that is there and does nothing may be shadowed by a personal skill of the same name, which is the precedence rule above rather than a broken file.

The roots that are not levels

Four more places supply skills without being one of the four levels, and between them they explain most of the remaining "I can invoke it and I cannot find it" cases.

apps/<pkg>/.claude/skills/
Nested project skills, below your working directory. They do not load at startup: the first time Claude reads or edits a file in that subdirectory they become available for the rest of the session. Until then they are not in autocomplete and cannot be invoked. Where a name collides with the repository root, /deploy runs the root one and /apps/web:deploy runs the nested one.
--add-dir <path>
A directory added at launch. Skills and commands are the exception to what --add-dir loads: Claude Code reads .claude/skills/ and .claude/commands/ from each added directory. The permissions.additionalDirectories setting does not do this — it grants file access only.
~/.claude/skills/synced/
Skills enabled on claude.ai, downloaded here when CLAUDE_CODE_SYNC_SKILLS is set in non-interactive mode. The folder name synced is reserved at the enterprise, personal and project levels in any capitalisation, and a skill you author under that name is skipped.
A symlinked skill folder
Any <skill-name> entry at the enterprise, personal or project level can be a symlink to a directory elsewhere on disk; Claude Code follows it and reads SKILL.md from the target. If the same target is reachable from two locations it is still loaded once. Plugin skills handle symlinks differently.

Edits are picked up live in the three folders Claude Code watches — ~/.claude/skills, the project .claude/skills, and .claude/skills inside an --add-dir directory — so adding or changing a skill takes effect in the session you are already in. Creating a top-level skills directory that did not exist when the session started is the exception: restart, or nothing is watching it.

Questions

Do project skills override personal skills with the same name?
No — it is the other way round. Enterprise overrides personal, and personal overrides project, so a deploy skill in ~/.claude/skills wins over one in your project .claude/skills and /deploy runs the personal one. Both are still loaded, which is worth knowing when you are counting what is in the context window.
Where are Claude Code skills stored on Windows?
The same paths, under your user profile: C:\Users\<you>\.claude\skills\ for personal skills and .claude\skills in the repository for project skills. The layout inside is identical — one folder per skill, each with a SKILL.md.
Can I move a skill from a project into ~/.claude/skills?
Yes. Copy the whole folder, not just the SKILL.md, and it becomes available in every project. Remember it then takes precedence over the project copy of the same name. The reverse works too, and is the honest fix for a personal skill that only ever makes sense in one repository.
Where do Codex and OpenCode keep theirs?
Each assistant has its own discovery roots. Codex documents .agents/skills for shared personal and project skills. Check the companion Codex guide and the relevant assistant documentation before moving files; shared SKILL.md syntax does not guarantee identical behavior.

Sources checked for this guide

See your coding-agent configuration in one place

Loadout is a free Mac app for browsing skills, subagents, slash commands, plugins and MCP servers. It shows recorded skill usage where available, so you can decide what to keep. Browsing your configuration is local; Ask uses your assistant provider.