Skip to content
cccskills
FreePublished on GitHub

plugin-checker

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.

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md7.7 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

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
  • name field 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):

  • version follows semver (X.Y.Z)
  • description is a non-empty string
  • author has name field (string)
  • author.email is valid email format (if present)

2. Directory Structure Validation

Required structure:

plugin-name/
├── .claude-plugin/
│   └── plugin.json    ← REQUIRED

Valid optional directories:

  • agents/ - Contains .md files only
  • skills/ - Contains subdirectories with SKILL.md
  • commands/ - Contains .md files only
  • hooks/ - Contains hooks.json
  • scripts/ - Contains executable scripts

Invalid patterns to flag:

  • ❌ AGENTS.md at root (should be agents/*.md)
  • ❌ SKILL.md at root (should be skills/*/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
  • name field present
  • description field 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.md file
  • SKILL.md has YAML frontmatter

Frontmatter:

  • name field present
  • description field 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:

  • description field present
  • argument-hint is string (if present)
  • allowed-tools is 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 hooks object at root (or in description + hooks)

Event names (if present):

  • PreToolUse
  • PostToolUse
  • Stop
  • SubagentStop
  • SessionStart
  • SessionEnd
  • UserPromptSubmit
  • PreCompact
  • Notification
  • PermissionRequest

Hook entries:

  • matcher field present (for tool events)
  • hooks array present
  • Each hook has type ("command" or "prompt")
  • Command hooks have command field
  • Prompt hooks have prompt field

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.md structure
  • 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

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Complete methodology for preventing AI hallucinations. Use when accuracy is critical and you need Claude to verify before claiming, cite before asserting, and admit uncertainty instead of guessing.

The English summary is being prepared. Showing the original description.

a-ariff/ariff-claude-plugins14Updated Mar 29, 2026

Transform rough ideas into solid designs through structured questioning

The English summary is being prepared. Showing the original description.

a-ariff/ariff-claude-plugins14Updated Mar 29, 2026

Canvas API Connection Skill

The English summary is being prepared. Showing the original description.

a-ariff/ariff-claude-plugins14Updated Mar 29, 2026

Forces every code-related claim to include file:line citations. No citation means the claim must be verified or removed. Use when building documentation, writing code reviews, or any output that others will rely on.

The English summary is being prepared. Showing the original description.

a-ariff/ariff-claude-plugins14Updated Mar 29, 2026

Assign confidence scores (0-100) to every claim in a response. Helps users understand which parts are verified facts and which are educated guesses. Use when the user needs to know how much to trust each part of the answer.

The English summary is being prepared. Showing the original description.

a-ariff/ariff-claude-plugins14Updated Mar 29, 2026

Forces Claude to extract exact quotes from files before making claims about them. Prevents hallucinations by grounding every statement in actual text from the codebase. Use when working with large files or unfamiliar code.

The English summary is being prepared. Showing the original description.

a-ariff/ariff-claude-plugins14Updated Mar 29, 2026

See all skills by a-ariff

Report a problem with this skill