From skillcheck-free
Validates SKILL.md files against Anthropic guidelines and the agentskills specification. Checks frontmatter structure, required fields, and security issues like XML angle brackets.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skillcheck-free:skill-checkThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Check skills against Anthropic guidelines and the agentskills specification. This file contains Free tier validation rules.
Check skills against Anthropic guidelines and the agentskills specification. This file contains Free tier validation rules.
Want deeper analysis? Upgrade to Pro for anti-slop detection, security scanning, token optimization, WCAG compliance, enterprise checks, and Eval Kit (auto-generated test prompts for your skills).
Worked valid/invalid examples for every check below are in references/examples.md. The rules are here; the examples are one file away to keep this file scannable.
Apply these checks in order. Each subsection defines patterns to match and issues to flag.
Every SKILL.md must start with YAML frontmatter between --- markers.
| Field | Required | Rules |
|---|---|---|
name | Yes | Lowercase, hyphens only, 1-64 chars, no reserved words |
description | Yes | WHAT + WHEN pattern, 1-1024 chars |
Check 1.9-xml-in-frontmatter (Critical): Frontmatter values must not contain XML angle brackets (< or >). Frontmatter appears in Claude's system prompt; angle brackets could enable prompt injection.
Detection: Scan all frontmatter string values (name, description, compatibility, etc.) for < or > characters.
Fix: Remove angle brackets from frontmatter. Use plain text descriptions. Markdown formatting and XML tags are fine in the SKILL.md body.
Fields defined in the agentskills.io specification:
| Field | Purpose |
|---|---|
license | License name or reference to bundled license file |
allowed-tools | Tools the skill can use (space-separated or YAML list) |
compatibility | Platform compatibility info (max 500 chars) |
metadata | Additional key-value pairs |
Recognized by Claude Code but not part of the agentskills.io spec. Other agents may ignore these fields.
| Field | Purpose |
|---|---|
category | Skill domain(s) for discovery and filtering |
model | Override model (full ID like claude-opus-4-6 or alias: opus, sonnet, haiku) |
effort | Reasoning effort level: low, medium, or high |
maxTurns | Maximum agent turns (positive integer; warns above 100) |
disallowedTools | Tools the skill must not use (space-separated or YAML list) |
context | Run context ("fork" for sub-agent) |
agent | Agent type when context: fork |
hooks | Lifecycle hooks (PreToolUse, PostToolUse, Stop) |
user-invocable | Show in slash menu (default: true) |
disable-model-invocation | Manual-only skill |
produces | Artifact types this skill outputs (comma-separated) |
consumes | Artifact types this skill reads from other skills (comma-separated) |
Not part of any spec. Used by community tools and registries.
| Field | Purpose |
|---|---|
type | Skill type indicator |
author | Skill author |
date | Creation/update date |
argument-hint | Hints for skill arguments |
Note:
categoryis a Claude Code extension, not part of the agentskills.io spec. Do not flag a missing category field. Only validate format if present.
Format: String or array of strings, lowercase letters, numbers, and hyphens only.
Pattern: ^[a-z][a-z0-9-]*[a-z0-9]$ (same rules as skill name)
Common categories: development, productivity, data, automation, writing, design, security, devops, api, testing, documentation, legal, financial, marketing, ai-ml
Note:
producesandconsumesare Claude Code extensions for inter-skill artifact passing. Do not flag missing fields. Only validate format if present.
Format: Comma-separated list of artifact type names. Each type must be lowercase with hyphens only.
Known artifact types: content-brief, knowledge-note, reading-log-entry, sift-article
Check 1.10-artifact-types (Warning): If produces or consumes contains a type not in the known list above, flag as a warning (not an error). New types are valid but should be registered in rules/artifact-passing.md.
Check 1.11-consumes-without-tools (Warning): If a skill declares consumes: but its allowed-tools does not include Read or Glob, flag as a warning. Consuming artifacts requires reading files.
Pattern: ^[a-z][a-z0-9-]*[a-z0-9]$
Naming suggestions: Avoid generic terms that don't describe what the skill does: helper, utils, tools, misc, stuff, things, manager, handler. Product-specific terms (claude, anthropic, mcp) are allowed but may limit portability across agents.
Must contain:
Recommended structure: [What it does] + [When to use it] + [Key capabilities]
Action verbs: Create, Generate, Build, Convert, Extract, Analyze, Transform, Process, Validate, Format, Export, Import, Parse, Search, Find
WHEN triggers: "Use when", "Use for", "Use this when", "Invoke when", "Activate when", "Triggers on", "Auto-activates", "Run when", "Applies to", "Helps with"
Both space-separated (allowed-tools: Read Glob) and YAML list formats are valid. See references/examples.md for both shapes.
Skills can include optional subdirectories per the agentskills spec:
| Directory | Purpose | Validation |
|---|---|---|
references/ | Additional docs (REFERENCE.md, etc.) | Files should be .md format |
scripts/ | Executable code (Python, Bash, JS) | Should have execute permissions |
assets/ | Static resources (templates, data) | No validation required |
Check 1.10-readme-in-folder (Warning): Skill folder must not contain a README.md file. All documentation goes in SKILL.md or references/. For GitHub distribution, place the README at the repo root, outside the skill folder.
Detection: Use Glob to check if {skill-dir}/README.md exists.
Skill path formats supported:
~/.claude/skills/{skill-name}/SKILL.md~/.claude/skills/{namespace}/{skill-name}/SKILL.mdNamespace support: Namespaces allow organizing skills by source (personal, team, project):
~/.claude/skills/internal/weekly-reports/SKILL.md~/.claude/skills/shared/code-review/SKILL.mdDirectory name must match skill name: The parent directory name must exactly match the name field in frontmatter.
Names should be descriptive compounds, not single words.
Length Guidelines: Minimum 3 chars, optimal 10-30 chars, maximum 64 chars.
Check 2.8-antipattern-format (Suggestion): When a skill documents anti-patterns (sections with headers matching "anti-pattern", "what not to do", "avoid", "common mistakes", "bad practices", "pitfalls"), the content should use structured formats (tables or bullet lists) rather than wall-of-text prose.
Fires when:
Does NOT fire when:
| col | col |) or bullet lists (- item)Validate logical consistency and clarity of skill instructions.
Flag conflicting instructions that simultaneously require and forbid the same action.
Flag vague language that should be more specific. Terms like "multiple items" or "correct settings" lack precision. Use exact counts or specific criteria instead.
Exceptions (not flagged):
Skills that mention output should specify format with concrete examples.
Detection:
## Output sectionCheck 4.6-wisdom-platitude (Suggestion): Detects generic advice ("wisdom") that lacks actionable content. Skills should contain concrete instructions, not motivational prose.
Three detection layers:
"Ensure quality", "maintain standards", "strive for best practices"Exceptions (not flagged):
Check 4.8-description-trigger-style (Suggestion): The description field should read as a trigger condition, not a capability summary. Claude scans descriptions to decide "is there a skill for this request?" A trigger-oriented description activates when the request matches; a summary-oriented one gets overlooked.
Detection: Description opens with summary patterns instead of trigger patterns:
Does NOT fire when:
Severity: Suggestion
Fix: Rewrite to lead with action verb and include "Use when" clause. The description is a routing instruction, not documentation.
Check 4.9-railroading (Suggestion): Skills should give Claude information and context, not dictate exact sequences. Excessive prescriptive language reduces Claude's ability to adapt to the user's actual situation.
Detection: Count prescriptive phrases outside example blocks, code blocks, and anti-pattern sections:
Fires when: 5+ prescriptive phrases in non-example content.
Does NOT fire when:
Severity: Suggestion
Check 4.4: Body contains trigger conditions that belong in the description field.
Detection: Body contains a heading matching ## When to Use or ## When to Use This Skill, or body text contains routing phrases like "Activate when user", "Trigger this skill when", "Use this skill when".
Problem: The skill body loads only AFTER the Skill tool is invoked. Trigger conditions placed here don't influence routing decisions. Claude reads the description field during routing; that's where "Use when" patterns, trigger keywords, and example phrases belong.
Severity: Warning
Fix: Merge unique trigger content from the body section into the description field, then remove the redundant body section.
Check 22.7-hollow-content (Suggestion): A gotchas/troubleshooting section that contains only generic filler and no concrete knowledge is hollow. It promises hard-won advice but delivers platitudes.
Detection: In a ## Gotchas / ## Troubleshooting / ## Tips / ## Caveats / ## Pitfalls section, fire when 3+ lines match generic filler (follow team standards, ensure proper handling, handle appropriately, consider relevant factors, use appropriate methods, maintain quality) AND no line carries a concrete knowledge signal (a specific threshold/number-with-unit, a consequence "X because Y", a numbered debugging step, or a file/function reference).
Exceptions (not flagged): content inside code blocks; a section that includes at least one concrete threshold, consequence, or debugging step.
Check 28.2-restraint-without-carveout (Warning): If a skill instructs restraint/minimalism but never carves out validation, security, or accessibility, flag it. Restraint without that carve-out can reward skipping non-negotiables, not just avoiding gold-plating. "Lazy, not negligent" is the line.
Detection: A restraint/anti-overbuild directive is present (YAGNI, "keep it minimal", "don't over-build / over-engineer", "simplest thing that works", "resist the urge to add", "prefer the stdlib"), AND no line pairs a keep/never-cut cue ("never cut", "always keep", "still required", "non-negotiable") with a safety noun (validation, security, accessibility / a11y). An incidental mention of "security" or "validation" without a keep cue does NOT count as a carve-out.
Does NOT fire when: no restraint directive is present; or an explicit carve-out clause exists.
Severity: Warning
Recognize positive patterns in skills. These are reported as "strengths" rather than issues.
npx claudepluginhub olgasafonova/skillcheck-freeValidates SKILL.md files against the agentskills specification. Catches structural, semantic, and naming issues before publishing.
Audits pm-skills skills against structural conventions and quality criteria, producing a pass/fail report with actionable recommendations. Use before shipping or after editing a skill.
Evaluates SKILL.md design quality against official specs and best practices. Provides multi-dimensional scoring, knowledge categorization, and actionable improvement suggestions.