kit/plugins/agentic-plugin-dev/skills/plugin-validator/SKILL.md
Validates a plugin against the official Claude Code spec. Checks manifest fields, directory structure, and frontmatter for compliance. Use when the user asks to validate or audit a plugin.
npx skillsauth add shawn-sandy/agentics plugin-validatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Runs a comprehensive structural validation against a Claude Code plugin, checking manifest fields, directory layout, component frontmatter, and marketplace cross-references. Produces a scored report with PASS/FAIL results.
Follow these steps exactly.
Does not review skill quality — use skill-reviewer. Does not review agent quality — use agent-reviewer.
Determine which plugin to validate:
plugins/[name]/.claude-plugin/plugin.json using GlobVerify the target directory exists and contains .claude-plugin/plugin.json. If not, report: "No plugin found at [path] — missing .claude-plugin/plugin.json."
Inventory the plugin directory using Glob and Read:
Scan for these directories and files:
| Path | Expected | Check |
|------|----------|-------|
| .claude-plugin/plugin.json | Required | Must exist |
| commands/*.md | Optional | If present, validate each |
| skills/*/SKILL.md | Optional | If present, validate each |
| agents/*.md | Optional | If present, validate each |
| hooks.json | Optional | If present, validate JSON |
| .mcp.json | Optional | If present, validate JSON |
| CHANGELOG.md | Recommended | Warn if missing |
Flag components found in wrong locations:
.claude-plugin/ — ERROR: "Components should not be inside .claude-plugin/. Move [file] to the appropriate directory."skills/ — WARNING: "Skill files should be at skills/[name]/SKILL.md, not directly in skills/."Read .claude-plugin/plugin.json and validate using rules from references/validation-rules.md:
| Check | Rule | Severity |
|-------|------|----------|
| name exists | Must be present | ERROR |
| name format | Lowercase, hyphens, numbers only. ≤64 chars | ERROR |
| name restricted | Must not contain anthropic or claude | ERROR |
| description exists | Should be present | WARNING |
version is set in plugin.jsonGlob to find .claude-plugin/marketplace.json in the project rootplugin.json has version — ERROR: "For relative-path plugins, version should only be in marketplace.json. Remove version from plugin.json."source path resolves to this plugin directoryWhen a marketplace.json exists:
source path resolves to the validated directorysource path doesn't match — WARNING: "Marketplace source path [path] does not resolve to the validated plugin directory."Validate each component found in Step 2:
commands/*.md)| Check | Rule | Severity |
|-------|------|----------|
| YAML frontmatter | Must have --- delimiters | ERROR |
| description field | Must be present in frontmatter | ERROR |
| File naming | Kebab-case .md files | WARNING |
skills/*/SKILL.md)| Check | Rule | Severity |
|-------|------|----------|
| YAML frontmatter | Must have --- delimiters | ERROR |
| name field | Must be present, kebab-case, ≤64 chars | ERROR |
| description field | Must be present, ≤1,024 chars | ERROR |
| Trigger phrases | Description should contain "Use when..." | WARNING |
| Scope exclusion | Description or body should contain "Does NOT..." or a ## When not to use section | WARNING |
| Directory naming | Directory name should match name field | WARNING |
agents/*.md)| Check | Rule | Severity |
|-------|------|----------|
| YAML frontmatter | Must have --- delimiters | ERROR |
| name field | Must be present, kebab-case, ≤64 chars | ERROR |
| description field | Must be present, ≤1,024 chars | ERROR |
| tools/disallowedTools | Must not both be set | ERROR |
| File naming | Filename should match name field | WARNING |
hooks.json)| Check | Rule | Severity |
|-------|------|----------|
| Valid JSON | Must parse without errors | ERROR |
| Event names | Must be valid hook events | ERROR |
| matcher field | Must be present per hook entry | WARNING |
.mcp.json)| Check | Rule | Severity |
|-------|------|----------|
| Valid JSON | Must parse without errors | ERROR |
| command field | Must be present per server | ERROR |
Present results as a validation report:
## Plugin Validation Report: [plugin-name]
**Location:** [path]
**Result:** [PASS/FAIL] ([error count] errors, [warning count] warnings, [info count] info)
### Manifest
- [PASS/FAIL] Name: [name] ([validation detail])
- [PASS/FAIL] Description: [present/missing]
- [PASS/FAIL] Version conflict: [none/conflict detail]
- [PASS/INFO] Marketplace: [registered/not registered]
### Structure
- [PASS/FAIL] Plugin directory: [valid/issues]
- [PASS/WARNING] Misplaced files: [none/list]
- [PASS/WARNING] CHANGELOG.md: [present/missing]
### Components
- [PASS/FAIL] Commands ([count]): [details]
- [PASS/FAIL] Skills ([count]): [details]
- [PASS/FAIL] Agents ([count]): [details]
- [PASS/FAIL] Hooks: [valid/invalid/not present]
- [PASS/FAIL] MCP: [valid/invalid/not present]
Overall result:
If errors exist, list each with a fix recommendation.
development
Checks whether the branch's PR is ready and merges it when green. Runs the readiness gate, lint, and an approval prompt. Use when the user asks "merge?" or if a PR is ready to merge.
development
Implements a plan file that already exists. Walks its steps, ticks the spec, re-renders, and runs the completion gates. Use when asked to implement an existing plan.
development
Audits and optimizes CLAUDE.md project memory files. Checks adherence to Claude Code best practices and produces actionable fixes. Use when the user asks to audit, optimize, or diagnose a CLAUDE.md.
development
Converts an HTML artifact or Markdown file into a draft post for a static site. Scopes CSS to keep interactive blocks alive and escapes prose for MDX. Use when asked to turn an artifact into a post.