From superpowers-plus
Validates skill file structure: YAML frontmatter fields, line count limits, and coordination metadata. Use after bulk skill changes.
How this skill is triggered — by the user, by Claude, or both
Slash command
/superpowers-plus:skill-health-checkThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **Purpose:** Cheap structural lint for skill files. Not a runtime diagnostic.
Purpose: Cheap structural lint for skill files. Not a runtime diagnostic.
Wrong skill? Runtime skill issues →
superpowers-doctor. Writing new skills →skill-authoring. Skill prose quality →writing-skills.
Announce at start: "I'm running the skill-health-check structural lint."
superpowers-doctor: Full runtime diagnostics (heavier than this lint)
skill-authoring: Writing new skill files
superpowers-help: Skill discovery (lighter)
writing-skills: Skill file format reference
evolution-loop: Self-improvement cycle
skills/ — catches formatting errors early| Check | Severity | What it validates |
|---|---|---|
| YAML frontmatter | ERROR | name, source, triggers, description fields present |
| Line count | ERROR | No skill.md exceeds 250 lines |
| Coordination metadata | ERROR | coordination: block present with required keys: group, order, internal |
| Failure modes section | WARN | ## Failure Modes heading present (presence only) |
What it does NOT check: coordination semantic validity (correct group names, valid order numbers), cross-reference accuracy, runtime behavior, install state. Those are superpowers-doctor territory. Structural lint validates that required keys exist; doctor validates they are correct.
# Quick check (skill count + line limits)
bash tools/harsh-review.sh
# Full ecosystem health (checks 1-4, uses Ruby YAML parser)
ruby -ryaml -e '
errors = []; warnings = []
Dir.glob("skills/**/skill.md").each do |path|
content = File.read(path)
parts = content.split("---", 3)
if parts.length < 3
errors << "#{path}: No YAML frontmatter"; next
end
data = YAML.safe_load(parts[1]) rescue (errors << "#{path}: Invalid YAML"; next)
%w[name source triggers description].each do |f|
errors << "#{path}: Missing #{f}" unless data&.key?(f)
end
unless data&.key?("coordination")
errors << "#{path}: Missing coordination block"
else
coord = data["coordination"]
%w[group order internal].each do |k|
errors << "#{path}: coordination missing '#{k}'" unless coord&.key?(k)
end
end
warnings << "#{path}: Missing Failure Modes" unless content.include?("## Failure Modes")
lines = content.count("\n")
errors << "#{path}: #{lines} lines (max 250)" if lines > 250
end
errors.each { |e| puts "ERROR: #{e}" }
warnings.each { |w| puts "WARN: #{w}" }
puts "\n#{errors.length} errors, #{warnings.length} warnings"
'
| Failure | Fix |
|---|---|
| New skill created without running health check | Run after every skill creation — catches missing fields immediately |
| README count drifted | Update README counts when adding/removing skills |
| Cross-reference points to renamed/deleted skill | Search for old skill name across all skill.md files |
npx claudepluginhub bordenet/superpowers-plus --plugin superpowers-plusGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.