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.