docs/skills/discovery-contract.md
Canonical rules for scanning, inventorying, and rendering GSD skills.
Scan these roots relative to the project root:
.claude/skills/.agents/skills/.cursor/skills/.github/skills/./.codex/skills/These roots are used for project-specific skills and for the project CLAUDE.md skills section.
Scan these roots relative to the user home directory:
~/.claude/skills/~/.codex/skills/These roots are used for managed runtime installs and inventory reporting.
~/.claude/get-shit-done/skills/This root is kept for legacy migration only. Inventory code may report it, but new installs should not write here.
~/.claude/commands/gsd/This is not a skills root. Discovery code only checks whether it exists so inventory can report legacy Claude installs.
SKILL.md.name and description from YAML frontmatter.name is missing.TRIGGER when: ....gsd-* directories as installed framework skills.~/.claude/get-shit-done/skills/ entries as deprecated/import-only.~/.claude/commands/gsd/ as legacy command installation metadata, not skills.sdk/src/query/skills.tsget-shit-done/bin/lib/profile-output.cjsCLAUDE.md skills section.gsd-* directories so the project section stays focused on user/project skills..codex/skills/ to the project discovery set.get-shit-done/bin/lib/init.cjsskill-manifest.skills, roots, installation, and counts.gsd_skills_installed when any discovered skill name starts with gsd-.legacy_claude_commands_installed when ~/.claude/commands/gsd/ contains .md command files.skill-manifest returns a JSON object with:
skills: normalized skill entriesroots: the canonical roots that were checkedinstallation: summary booleans for installed GSD skills and legacy Claude commandscounts: small inventory counts for downstream consumersEach skill entry includes:
namedescriptiontriggerspathfile_pathrootscopeinstalleddeprecated