文件最后提交记录最后更新时间
fix(validator): address all remaining review feedback from @mukul975 Three issues fixed: 1. Description list check — added elif isinstance(desc, list) branch that emits 'Description must be a string value, not a list'. Previously the block was silently skipped when YAML returned a list, causing the skill to pass without validating the description field. 2. tools/README.md synced — updated description constraint from '20-500 characters' to 'at least 50 characters (no upper limit)' to match the current code (DESCRIPTION_MIN_CHARS=50, no max enforced). 3. --all with wrong CWD now exits 1 — if glob returns no skill dirs, the script prints an error and exits with code 1 instead of reporting 'Total: 0 Passed: 0 Failed: 0' and exiting 0, which would cause CI to silently pass while validating nothing. All 754 skills continue to pass (0 regressions). 1 个月前
fix(validator): address all remaining review feedback from @mukul975 Three issues fixed: 1. Description list check — added elif isinstance(desc, list) branch that emits 'Description must be a string value, not a list'. Previously the block was silently skipped when YAML returned a list, causing the skill to pass without validating the description field. 2. tools/README.md synced — updated description constraint from '20-500 characters' to 'at least 50 characters (no upper limit)' to match the current code (DESCRIPTION_MIN_CHARS=50, no max enforced). 3. --all with wrong CWD now exits 1 — if glob returns no skill dirs, the script prints an error and exits with code 1 instead of reporting 'Total: 0 Passed: 0 Failed: 0' and exiting 0, which would cause CI to silently pass while validating nothing. All 754 skills continue to pass (0 regressions). 1 个月前
README.md

Skill Validation Tools

validate-skill.py

Validate SKILL.md metadata before submitting a PR.

Usage

# Validate a single skill
python tools/validate-skill.py skills/my-new-skill/

# Validate all skills
python tools/validate-skill.py --all

What it checks

  • SKILL.md exists in the skill directory
  • Valid YAML frontmatter (between --- markers)
  • Required fields present: name, description, domain, subdomain, tags
  • Name is kebab-case, 1–64 characters
  • Description is at least 50 characters (no upper limit; multi-line folded scalars are valid)
  • Domain is cybersecurity
  • Subdomain is from the allowed list
  • Tags is a list with at least 2 items

Requirements

Python 3.8+ (stdlib only, no external dependencies)