/validate-skills — Skill Library Linter
Purpose: Validate that all skill, prompt, agent, and domain files in this repo conform to their platform's conventions. Catches missing frontmatter, broken cross-references, naming drift, and structural issues before they ship.
Arguments
- (none) — validate everything
claude— validate onlyclaude/skillscopilot-native— validate onlycopilot-native/assetsdomain-review— validate onlyclaude/domain-review/domains and profiles<path>— validate a specific file or directory
Checks
Claude skills (claude/*/SKILL.md)
For each top-level skill directory (not _rubrics/, not nested specialists):
- SKILL.md exists in the directory
- Frontmatter has
name:anddescription:fields name:matches directory name —claude/plan/SKILL.mdmust havename: plan- Description is quoted and under 200 characters
- No orphan directories — every
claude/*/has a SKILL.md (except_rubrics/)
Claude rubrics (claude/_rubrics/*/SKILL.md)
- SKILL.md exists
- Frontmatter has
name:anddescription: - Not user-invokable — rubrics should not appear in skill-help categories
Code review domains (claude/domain-review/concept/*.md)
Run the existing validation script: bash claude/domain-review/tests/validate-structure.sh
Report the result. If it fails, surface the specific failures.
Copilot-native prompts (copilot-native/prompts/**/*.prompt.md)
- Frontmatter has
description:field - File extension is
.prompt.md - Path convention — prompts live under
copilot-native/prompts/{category}/
Copilot-native agents (copilot-native/agents/*.agent.md)
- Frontmatter has
description:field - Frontmatter has
tools:list - File extension is
.agent.md
Copilot-native skills (copilot-native/skills/*/SKILL.md)
- SKILL.md exists in the directory
- Frontmatter has
name:anddescription:fields
Cross-platform checks
- Asset catalog — if
copilot-native/asset-catalog.mdexists, verify every file listed in it actually exists - README references — if
claude/domain-review/README.mdlists domains, verify they exist - Profile references — every domain ID in a profile YAML resolves to a file
Output
=== Skill Library Validation ===
Claude skills: N checked, M issues
Copilot-native: N checked, M issues
Code review domains: N checked, M issues
Issues:
[WARN] claude/foo/SKILL.md — name "bar" doesn't match directory "foo"
[ERROR] copilot-native/agents/missing.agent.md — listed in asset-catalog but file not found
[WARN] claude/baz/SKILL.md — description exceeds 200 characters
Summary: N errors, M warnings
Rules
- ERROR = something is broken (missing file, broken reference, missing required field)
- WARN = convention violation (naming mismatch, long description, deprecated pattern)
- Report counts at the end. Exit with nonzero if any ERRORs.