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
Turns a React component into a social card with preview, code, and props table. Builds a static preview and screenshots react-card.html via Playwright. Use when asked to share a React component.
data-ai
Refine-prompt: interviews users and assembles a structured AI prompt using Anthropic best-practice techniques. Use when the user runs /plan-agent:refine-prompt or asks to refine a prompt.
development
Plan review Agent Team. Reviews HTML implementation plans in parallel, synthesizes findings, and applies improvements in place. Use when the user asks to review or improve an implementation plan.
data-ai
Craft-prompt: interviews users and assembles a structured AI prompt using Anthropic best-practice techniques. Use when the user runs /plan-agent:craft-prompt or asks to craft a prompt.