techygarg/skill-validate
Validate any Lattice SKILL.md against all tier conventions — atoms, molecules, and refiners. Catches structural errors, broken cross-references, and convention violations before they reach the repo. If you just wrote or modified a Lattice skill file and haven't run this yet, run it now — manual review consistently misses the same categories of errors this skill is specifically designed to catch. Use when the user says 'validate this skill', 'check this skill', 'does this follow conventions', 'review this skill file', 'check my SKILL.md', or 'skill validate'. Reports PASS/FAIL with specific file-and-section findings and actionable fixes. Standalone — does not call other skills.
npx skills add https://github.com/techygarg/lattice --skill skill-validate
Core responsibility: Verify that a SKILL.md is structurally correct, follows all Lattice tier conventions, and composes correctly with the rest of the framework.
Input: One or more of:
skills/atoms/clean-code/SKILL.mdclean-code (resolves to the correct path automatically)atoms (validates all skills in that tier)skills/ at runtime — never hardcoded)Output: A findings report per skill:
## Skill Validator — {skill-name}
Tier: {atom | molecule | refiner}
### Structural PASS / FAIL — specific findings
### Tier conventions PASS / FAIL — specific findings
### Cross-references PASS / FAIL — specific findings
### Three-angle review PASS / WARN / FAIL per lens
Result: PASS | FAIL (N errors, M warnings)
How to verify this skill did its job:
Read PROJECT.md — Skill Conventions section. This is the source of truth. STOP: do not rely on memory.
Read references/convention-rules.md for the detailed per-tier checklist.
For every SKILL.md being validated:
[ ] Frontmatter: name field present, lowercase-hyphenated
[ ] Frontmatter: description field present and non-empty
[ ] Frontmatter: description contains trigger phrases (what the user would type)
[ ] Folder name matches name field exactly
[ ] No inline atom content in molecules (no duplicating what framework:{atom} already provides)
Read references/convention-rules.md for the full per-tier checklist. Apply the relevant section based on tier (determined from file path: atoms/, molecules/, refiners/).
For every framework:{atom-name} reference in a molecule:
ls skills/atoms/{atom-name}/SKILL.md 2>/dev/null || echo "BROKEN REF: framework:{atom-name}"
For every paths.{key} config key referenced in a refiner or atom:
docs/configuration.md paths tableFor every .lattice/{subfolder}/ path referenced in a molecule:
PROJECT.mdThese three lenses are fixed — they match the three stakeholder types who depend on Lattice skills working correctly. This is a structural review (does the skill follow conventions?), not a behavioral review (does it work in practice?) — use skill-review for the latter.
Each lens asks a different question:
Product Owner lens — "Will this produce the right output for its users?"
Business Analyst / Practitioner lens — "Are the rules complete and enforceable?"
Technical Lead lens — "Does this compose correctly with the rest of the framework?"
framework:{name}) resolve to real skills?.lattice/ subfolder (never root)?STOP: a passing category gets the bare word PASS — no restated commentary; findings text only on FAIL/WARN. Format findings as:
## Skill Validator — {skill-name}
Tier: {atom | molecule | refiner}
### Structural
PASS
### Tier conventions
FAIL — [Atom] Self-Validation Checklist missing STOP language on check 3
FAIL — [Molecule] Planning molecule Step 2 has no confirmation gate
### Cross-references
PASS
### Three-angle review
[PO] PASS
[BA] WARN — no guidance for interrupted session (resume behavior)
[Tech] FAIL — .lattice/myoutput/ not in known subfolders list
---
Result: FAIL (2 errors, 1 warning)
Distinguish errors (must fix) from warnings (should consider).
If the user says "fix it" or "apply fixes" — apply all error-level findings directly to the files. Re-run validation after fixes. STOP: do not fix warnings without asking which ones to apply.
Take techygarg/skill-validate from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.