From agentic-plugin-dev
Validates Claude Code plugin structure against the official spec. Use when the user asks to "validate a plugin", "check plugin structure", "audit a plugin", "verify plugin setup", or "is this plugin valid". Covers manifest validation, directory structure, and component frontmatter checks. Does NOT review skill quality or content (use skill-reviewer). Does NOT review agent quality (use agent-creator).
npx claudepluginhub shawn-sandy/agentics --plugin agentic-plugin-devThis skill uses the workspace's default tool permissions.
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.
Writes articles, guides, blog posts, tutorials, and newsletters in a voice from examples or brand guidance. For polished long-form content with structure, pacing, and credibility.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Executes repo commands, inspects git state, debugs CI failures, and pushes narrow fixes with exact proof of execution and verification. Use for command runs, repo checks, or evidence-based changes.
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.
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 should contain "Does NOT..." | 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.