Skills live in a top-level `skills/` directory, one directory per skill
The skills CLI discovers this layout directly, and plugin packages conventionally expose the same directory. Keeping one canonical tree avoids copies drifting while host-specific paths can point to it through manifests or symlinks.
Observable check
a skills/ directory exists at the repository root, every skill is a direct child of it and holds a SKILL.md, and no other SKILL.md exists in the repository. Resolve a symlinked directory such as .claude/skills to its target before applying the check, so a committed symlink pointing at skills/ does not read as a second copy.
Where this comes from
Last read against these sources on 2026-07-28.
The spec defines a skill as a directory holding SKILL.md. The top-level skills/ directory is the skills CLI's discovery layout, not the spec's, and that half has no source named.