
plugin-checker
by a-ariff
๐ Production-ready Claude Code plugin marketplace with 41 components: 21 autonomous agents, 15 power skills, 2 smart hooks, 2 custom commands. Transform Claude Code into an autonomous development powerhouse. One-line install, cross-device sync, comprehensive documentation.
SKILL.md
name: plugin-checker description: >- Use this skill when asked to "validate plugin", "check plugin structure", "verify plugin", "audit plugin", "is my plugin correct", "plugin issues", or when troubleshooting plugin problems.
Plugin Checker Skill
This skill provides comprehensive validation guidelines for Claude Code plugins, helping identify structural issues, misconfigurations, and best practice violations.
Validation Checklist
1. Plugin Manifest Validation
Check .claude-plugin/plugin.json:
Required:
- File exists at
.claude-plugin/plugin.json - Valid JSON syntax
-
namefield present and valid
Name validation:
- Uses kebab-case (lowercase letters, numbers, hyphens)
- Length between 3-50 characters
- No spaces or special characters
- Starts with a letter
Optional fields (if present):
-
versionfollows semver (X.Y.Z) -
descriptionis a non-empty string -
authorhasnamefield (string) -
author.emailis valid email format (if present)
2. Directory Structure Validation
Required structure:
plugin-name/
โโโ .claude-plugin/
โ โโโ plugin.json โ REQUIRED
Valid optional directories:
-
agents/- Contains.mdfiles only -
skills/- Contains subdirectories withSKILL.md -
commands/- Contains.mdfiles only -
hooks/- Containshooks.json -
scripts/- Contains executable scripts
Invalid patterns to flag:
- โ
AGENTS.mdat root (should beagents/*.md) - โ
SKILL.mdat root (should beskills/*/SKILL.md) - โ Nested
.claude-plugin/directories - โ Files directly in
skills/(should be in subdirs)
3. Agent File Validation
For each file in agents/*.md:
Frontmatter checks:
- File starts with
--- - Valid YAML frontmatter
-
namefield present -
descriptionfield present
Name field:
- Lowercase letters, numbers, hyphens only
- 3-50 characters
- Matches filename (recommended)
Description field:
- Contains trigger conditions
- Has at least one
<example>block (recommended) - Example has
user:,assistant:,<commentary>
Model field (if present):
- Valid value:
inherit,sonnet,opus,haiku
Color field (if present):
- Valid value:
blue,cyan,green,yellow,magenta,red
Tools field (if present):
- Is an array
- Contains valid tool names
Content check:
- Has system prompt after frontmatter
- System prompt is substantial (>20 chars)
4. Skill Directory Validation
For each directory in skills/*/:
Structure:
- Contains
SKILL.mdfile -
SKILL.mdhas YAML frontmatter
Frontmatter:
-
namefield present -
descriptionfield present with trigger phrases
Optional subdirectories:
-
references/- Additional documentation -
examples/- Working examples -
scripts/- Utility scripts
5. Command File Validation
For each file in commands/*.md:
Frontmatter:
-
descriptionfield present -
argument-hintis string (if present) -
allowed-toolsis array (if present)
Naming:
- Filename is kebab-case
- No spaces or special characters
6. Hooks Validation
For hooks/hooks.json:
JSON structure:
- Valid JSON syntax
- Has
hooksobject at root (or indescription+hooks)
Event names (if present):
-
PreToolUse -
PostToolUse -
Stop -
SubagentStop -
SessionStart -
SessionEnd -
UserPromptSubmit -
PreCompact -
Notification -
PermissionRequest
Hook entries:
-
matcherfield present (for tool events) -
hooksarray present - Each hook has
type("command" or "prompt") - Command hooks have
commandfield - Prompt hooks have
promptfield
Path portability:
- Uses
${CLAUDE_PLUGIN_ROOT}for plugin paths - No hardcoded absolute paths
Script references:
- Referenced scripts exist
- Scripts are executable (have shebang)
7. Security Checks
Credentials:
- No hardcoded API keys or tokens
- No passwords in configuration
- Environment variables used for secrets
URLs:
- MCP servers use HTTPS/WSS (not HTTP/WS)
Scripts:
- No obvious command injection vulnerabilities
- Input validation present
- Variables properly quoted
Common Issues and Fixes
Issue: "plugin not found"
Cause: Missing or invalid plugin.json
Fix: Create .claude-plugin/plugin.json with valid JSON and name field
Issue: "agents not loading"
Cause: Agents not in correct location
Fix: Move to agents/ directory with .md extension
Issue: "skill not triggering"
Cause: Weak trigger description or wrong structure Fix:
- Ensure
skills/{name}/SKILL.mdstructure - Add specific trigger phrases to description
Issue: "hooks not running"
Cause: Invalid hooks.json or script permissions Fix:
- Validate JSON syntax
- Make scripts executable:
chmod +x scripts/*.sh - Use
${CLAUDE_PLUGIN_ROOT}in paths
Issue: "command not appearing"
Cause: Missing frontmatter or wrong location
Fix: Ensure commands/*.md with description in frontmatter
Validation Commands
Quick structure check:
# Check plugin.json exists and is valid
jq . my-plugin/.claude-plugin/plugin.json
# List all components
find my-plugin -name "*.md" -o -name "*.json" | head -20
# Check hooks.json
jq . my-plugin/hooks/hooks.json 2>/dev/null || echo "No hooks.json"
Test plugin locally:
claude --plugin-dir /path/to/my-plugin
Debug mode:
claude --debug --plugin-dir /path/to/my-plugin
Validation Report Format
When reporting validation results:
## Plugin Validation Report
### Plugin: [name]
Location: [path]
### Summary
[PASS/FAIL] - [brief assessment]
### Critical Issues (must fix)
- [ ] `path/to/file` - [issue] - [fix]
### Warnings (should fix)
- [ ] `path/to/file` - [issue] - [recommendation]
### Components Found
- Agents: [count] files
- Skills: [count] directories
- Commands: [count] files
- Hooks: [present/not present]
### Positive Findings
- [What's done correctly]
### Recommendations
1. [Priority fix]
2. [Improvement suggestion]
Quick Validation Script
#!/bin/bash
# validate-plugin.sh <plugin-dir>
PLUGIN_DIR="${1:-.}"
echo "=== Plugin Validation ==="
# Check plugin.json
if [ -f "$PLUGIN_DIR/.claude-plugin/plugin.json" ]; then
echo "โ plugin.json exists"
NAME=$(jq -r '.name' "$PLUGIN_DIR/.claude-plugin/plugin.json" 2>/dev/null)
if [ -n "$NAME" ] && [ "$NAME" != "null" ]; then
echo "โ name: $NAME"
else
echo "โ ERROR: name field missing or invalid"
fi
else
echo "โ CRITICAL: .claude-plugin/plugin.json not found"
fi
# Check agents
if [ -d "$PLUGIN_DIR/agents" ]; then
AGENT_COUNT=$(find "$PLUGIN_DIR/agents" -name "*.md" | wc -l)
echo "โ agents/: $AGENT_COUNT files"
fi
# Check skills
if [ -d "$PLUGIN_DIR/skills" ]; then
SKILL_COUNT=$(find "$PLUGIN_DIR/skills" -name "SKILL.md" | wc -l)
echo "โ skills/: $SKILL_COUNT SKILL.md files"
fi
# Check commands
if [ -d "$PLUGIN_DIR/commands" ]; then
CMD_COUNT=$(find "$PLUGIN_DIR/commands" -name "*.md" | wc -l)
echo "โ commands/: $CMD_COUNT files"
fi
# Check hooks
if [ -f "$PLUGIN_DIR/hooks/hooks.json" ]; then
if jq empty "$PLUGIN_DIR/hooks/hooks.json" 2>/dev/null; then
echo "โ hooks/hooks.json: valid JSON"
else
echo "โ hooks/hooks.json: invalid JSON"
fi
fi
echo "=== Validation Complete ==="
References
- Plugin structure: https://code.claude.com/docs/en/plugins-reference
- Hooks reference: https://code.claude.com/docs/en/hooks
- Official examples: https://github.com/anthropics/claude-code/tree/main/plugins
Score
Total Score
Based on repository quality metrics
SKILL.mdใใกใคใซใๅซใพใใฆใใ
ใฉใคใปใณในใ่จญๅฎใใใฆใใ
100ๆๅญไปฅไธใฎ่ชฌๆใใใ
GitHub Stars 100ไปฅไธ
1ใถๆไปฅๅ ใซๆดๆฐ
10ๅไปฅไธใใฉใผใฏใใใฆใใ
ใชใผใใณIssueใ50ๆชๆบ
ใใญใฐใฉใใณใฐ่จ่ชใ่จญๅฎใใใฆใใ
1ใคไปฅไธใฎใฟใฐใ่จญๅฎใใใฆใใ
Reviews
Reviews coming soon

