.claude/skills/plugin-builder/SKILL.md
Automate Claude Code plugin creation, packaging, validation, and distribution. Use when creating plugins, packaging skills, generating manifests, validating plugin structure, setting up marketplaces, or distributing skill collections.
npx skillsauth add adaptationio/skrillz plugin-builderInstall 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.
plugin-builder automates the entire Claude Code plugin creation and distribution process. It generates valid plugin structures, manifests, validates compliance, packages existing skills, and prepares plugins for marketplace distribution.
Purpose: Transform skills into distributable plugins in minutes instead of hours
Key Capabilities:
Pattern: Task-based (independent operations, flexible order)
Time Savings: 2-4 hours manual work → 15-30 minutes automated
Plugins are distributable packages that extend Claude Code with custom functionality. They can contain:
Distribution: Plugins are shared via Git-based marketplaces. Users install with:
/plugin marketplace add owner/repo
/plugin install plugin-name@marketplace-name
Structure:
plugin-name/
├── .claude-plugin/
│ ├── plugin.json # Required: Plugin metadata
│ └── marketplace.json # Optional: For distribution
├── skills/ # Your skills go here
├── commands/ # Custom commands (optional)
├── agents/ # Subagents (optional)
└── README.md # Recommended: Documentation
Use plugin-builder when you need to:
Creating Plugins:
Validation & Quality:
Distribution Setup:
Bulk Operations:
Before using plugin-builder:
Knowledge:
Tools:
Optional:
Create a complete plugin directory structure with minimal configuration.
Purpose: Quickly scaffold a new plugin with correct structure and minimal boilerplate
When to Use:
Prerequisites:
Inputs:
Process:
Method 1: Interactive Script (Recommended)
cd /path/to/your/workspace
python /path/to/plugin-builder/scripts/init_plugin.py
Follow prompts:
Method 2: Command Line
python /path/to/plugin-builder/scripts/init_plugin.py my-plugin \
--description "My awesome plugin" \
--author "Your Name" \
--email "[email protected]" \
--components skills,commands
Method 3: Manual Creation
mkdir -p my-plugin/.claude-plugin
mkdir -p my-plugin/skills
mkdir -p my-plugin/commands # optional
mkdir -p my-plugin/agents # optional
# Create minimal plugin.json
cat > my-plugin/.claude-plugin/plugin.json <<'EOF'
{
"name": "my-plugin"
}
EOF
# Create README
cat > my-plugin/README.md <<'EOF'
# My Plugin
Description of what this plugin does.
## Installation
\`\`\`bash
/plugin marketplace add your-username/your-repo
/plugin install my-plugin
\`\`\`
EOF
Outputs:
my-plugin/
├── .claude-plugin/
│ └── plugin.json # Minimal manifest (name only)
├── skills/ # If selected
├── commands/ # If selected
├── agents/ # If selected
└── README.md # Template with installation instructions
Validation:
Example:
# Interactive mode
$ python scripts/init_plugin.py
Enter plugin name (kebab-case): team-toolkit
Enter description: Development tools for our team
Enter author name: DevOps Team
Enter author email (optional): [email protected]
Include skills? (y/n): y
Include commands? (y/n): y
Include agents? (y/n): n
Creating plugin structure...
✓ Created team-toolkit/
✓ Created .claude-plugin/plugin.json
✓ Created README.md
✓ Created skills/
✓ Created commands/
Next steps:
1. Add your skills to team-toolkit/skills/
2. Add your commands to team-toolkit/commands/
3. Run: python scripts/generate_manifest.py team-toolkit/
4. Run: python scripts/validate_plugin.py team-toolkit/
See Also: templates/plugin.json.minimal for the generated manifest structure
Create or update the plugin manifest file with complete metadata.
Purpose: Generate a valid, schema-compliant plugin.json with all recommended fields
When to Use:
Prerequisites:
Inputs:
Process:
Method 1: Interactive Script (Recommended)
python scripts/generate_manifest.py /path/to/my-plugin
Follow prompts for each field. Press Enter to accept defaults or skip optional fields.
Method 2: Update Existing Manifest
python scripts/generate_manifest.py /path/to/my-plugin --update
Loads existing manifest, prompts only for changes/additions.
Method 3: Use Template
python scripts/generate_manifest.py /path/to/my-plugin --template standard
Templates available:
minimal: Name only (valid but basic)standard: Name, version, description, author (recommended)complete: All fields with examplesMethod 4: Manual Creation
Copy from templates/plugin.json.standard and edit:
{
"name": "my-plugin",
"version": "1.0.0",
"description": "Brief description of plugin functionality",
"author": {
"name": "Your Name",
"email": "[email protected]"
},
"keywords": ["keyword1", "keyword2"],
"license": "MIT"
}
Save to my-plugin/.claude-plugin/plugin.json.
Outputs:
plugin.json in .claude-plugin/ directoryValidation:
Example:
$ python scripts/generate_manifest.py team-toolkit/
Generating plugin.json for team-toolkit
======================================
Name: team-toolkit (from directory)
Version [1.0.0]: 2.1.0
Description: Development and deployment tools for engineering team
Author name: DevOps Team
Author email: [email protected]
Author URL (optional): https://company.com/devops
Homepage (optional): https://github.com/company/team-toolkit
Repository (optional): https://github.com/company/team-toolkit
License [MIT]: Apache-2.0
Keywords (comma-separated): deployment,ci-cd,automation,team
Component paths (optional, press Enter for defaults):
Skills path [./skills/]:
Commands path [./commands/]:
Agents path:
Generated plugin.json:
{
"name": "team-toolkit",
"version": "2.1.0",
"description": "Development and deployment tools for engineering team",
"author": {
"name": "DevOps Team",
"email": "[email protected]",
"url": "https://company.com/devops"
},
"homepage": "https://github.com/company/team-toolkit",
"repository": "https://github.com/company/team-toolkit",
"license": "Apache-2.0",
"keywords": ["deployment", "ci-cd", "automation", "team"]
}
✓ Saved to team-toolkit/.claude-plugin/plugin.json
✓ Validation: All checks passed
Next steps:
1. Review generated manifest
2. Package your skills: python scripts/package_skills.py
3. Validate: python scripts/validate_plugin.py team-toolkit/
Tips:
See Also:
Create a marketplace catalog file for distributing one or more plugins.
Purpose: Set up a marketplace for team/community distribution of plugins
When to Use:
Prerequisites:
Inputs:
Process:
Method 1: Interactive Script (Recommended)
python scripts/generate_marketplace.py
Follow prompts:
Method 2: Auto-Discover Plugins
python scripts/generate_marketplace.py --scan plugins/
Automatically finds plugins in directory and prompts for metadata.
Method 3: Manual Creation
Copy from templates/marketplace.json.minimal and edit:
{
"name": "my-marketplace",
"description": "Curated plugins for my team",
"owner": {
"name": "Team Name",
"email": "[email protected]"
},
"plugins": [
{
"name": "plugin-one",
"description": "First plugin",
"source": "./plugins/plugin-one",
"category": "development"
}
]
}
Save to repository root as .claude-plugin/marketplace.json.
Outputs:
marketplace.json fileValidation:
Example:
$ python scripts/generate_marketplace.py --scan company-plugins/
Generating marketplace.json
===========================
Scanning company-plugins/ for plugins...
Found 3 plugins:
- deployment-tools
- security-scanner
- test-automation
Marketplace name: company-approved-plugins
Marketplace description: Approved plugins for Company use
Owner name: Engineering Team
Owner email: [email protected]
Plugin 1: deployment-tools
Description: Automated deployment and rollback tools
Category [development]:
Version [1.0.0]: 2.1.0
Source [./plugins/deployment-tools]:
Plugin 2: security-scanner
Description: Security analysis and vulnerability detection
Category [security]:
Version [1.0.0]: 1.5.0
Source [./plugins/security-scanner]:
Plugin 3: test-automation
Description: Automated testing framework and utilities
Category [development]:
Version [1.0.0]: 3.0.0
Source [./plugins/test-automation]:
Generated marketplace.json (3 plugins)
✓ Saved to .claude-plugin/marketplace.json
✓ Validation: All checks passed
Next steps:
1. Create GitHub repository
2. Push marketplace.json to repo root
3. Users can add: /plugin marketplace add company/company-plugins
4. Users can install: /plugin install deployment-tools@company-approved-plugins
Distribution Setup:
After generating marketplace.json:
cd /path/to/marketplace
git init
git add .
git commit -m "Initial marketplace setup"
git remote add origin [email protected]:username/my-marketplace.git
git push -u origin main
/plugin marketplace add username/my-marketplace
/plugin install plugin-name@my-marketplace
See Also:
Comprehensive validation of plugin structure, manifests, and component compliance.
Purpose: Ensure plugin is correctly structured and ready for distribution
When to Use:
Prerequisites:
Inputs:
Process:
Method 1: Script Validation (Comprehensive)
python scripts/validate_plugin.py /path/to/my-plugin
Method 2: Verbose Output
python scripts/validate_plugin.py /path/to/my-plugin --verbose
Shows detailed checks and reasoning.
Method 3: Specific Validation Type
# Structure only
python scripts/validate_plugin.py /path/to/my-plugin --check structure
# Manifests only
python scripts/validate_plugin.py /path/to/my-plugin --check manifests
# Components only (skills, commands, agents)
python scripts/validate_plugin.py /path/to/my-plugin --check components
# 2025 schema compliance
python scripts/validate_plugin.py /path/to/my-plugin --check 2025
Validation Categories:
1. Structure Validation:
.claude-plugin/ directory existsplugin.json exists in .claude-plugin/.claude-plugin/)2. Manifest Validation:
plugin.json is valid JSONname present./)3. Component Validation:
SKILL.md filesallowed-tools field (2025 schema)4. 2025 Schema Compliance:
allowed-tools field in frontmatterallowed-tools lists valid Claude Code toolsOutputs:
Success Example:
Validating plugin: team-toolkit
================================
✓ Structure validation passed (5/5 checks)
✓ .claude-plugin/ directory exists
✓ plugin.json exists
✓ Component directories at root
✓ Directory names valid
✓ README.md present
✓ Manifest validation passed (6/6 checks)
✓ Valid JSON syntax
✓ Required fields present
✓ Name format valid
✓ Version format valid
✓ Paths are relative
✓ Referenced files exist
✓ Component validation passed (8 skills, 3 commands)
✓ All skills have SKILL.md
✓ All skills have valid frontmatter
✓ All skills have allowed-tools field
✓ All commands valid
✓ 2025 schema compliance passed
================
RESULT: PASSED
================
0 errors, 0 warnings
✓ Plugin is ready for distribution!
Error Example:
Validating plugin: my-plugin
============================
✗ Structure validation failed (4/5 checks)
✓ .claude-plugin/ directory exists
✓ plugin.json exists
✗ Component directories at root
ERROR: skills/ directory found in .claude-plugin/ (should be at plugin root)
✓ Directory names valid
✓ README.md present
✗ Manifest validation failed (5/6 checks)
✓ Valid JSON syntax
✓ Required fields present
✗ Paths are relative
ERROR: "commands" field has absolute path: /home/user/commands
FIX: Change to relative path: ./commands
✓ Referenced files exist
✗ Component validation failed (2/3 skills)
✓ All skills have SKILL.md
✗ Skills missing allowed-tools field
ERROR: skills/my-skill/SKILL.md missing allowed-tools in frontmatter
FIX: Add "allowed-tools: Read, Write, Bash" to YAML frontmatter
================
RESULT: FAILED
================
3 errors, 0 warnings
Fix errors above before distributing plugin.
Exit Codes:
0: All validation passed, plugin ready1: Errors found, plugin not ready2: Script execution errorCommon Errors and Fixes:
Error: Component directory in .claude-plugin/
ERROR: skills/ found in .claude-plugin/ (should be at plugin root)
FIX: Move skills/ to plugin root directory
Error: Absolute paths in manifest
ERROR: "skills" field has absolute path: /Users/me/skills
FIX: Change to relative path: ./skills
Error: Missing allowed-tools field
ERROR: skill missing allowed-tools in frontmatter (2025 schema)
FIX: Add to SKILL.md frontmatter:
---
name: my-skill
description: ...
allowed-tools: Read, Write, Glob, Bash
---
Error: Invalid JSON syntax
ERROR: plugin.json has invalid JSON (trailing comma)
FIX: Remove trailing comma in JSON file
Error: Non-kebab-case name
ERROR: Plugin name "my_plugin" should be kebab-case
FIX: Change name to "my-plugin"
Validation Checklist:
Before publishing, ensure all pass:
See Also:
Copy existing skills into plugin structure and update manifest.
Purpose: Convert standalone skills into plugin-packaged skills ready for distribution
When to Use:
.claude/skills/ to plugin formatPrerequisites:
Inputs:
Process:
Method 1: Package All Skills
python scripts/package_skills.py /path/to/skills /path/to/plugin
Copies all skills from source to plugin/skills/ directory.
Method 2: Package Specific Skills
python scripts/package_skills.py /path/to/skills /path/to/plugin \
--skills skill1,skill2,skill3
Method 3: Package with Validation
python scripts/package_skills.py /path/to/skills /path/to/plugin --validate
Validates each skill for 2025 compliance before packaging.
Method 4: Dry Run (Preview)
python scripts/package_skills.py /path/to/skills /path/to/plugin --dry-run
Shows what would be packaged without actually copying.
What Happens:
Scans Source Directory:
Validates Skills (if --validate):
allowed-tools field (2025 schema)Copies Skills:
Updates Manifest:
Reports Results:
Outputs:
plugin/
├── .claude-plugin/
│ └── plugin.json # Updated with skills reference
├── skills/
│ ├── skill1/
│ │ ├── SKILL.md
│ │ ├── references/
│ │ └── scripts/
│ ├── skill2/
│ │ └── SKILL.md
│ └── skill3/
│ ├── SKILL.md
│ └── references/
└── README.md
Validation:
Example:
$ python scripts/package_skills.py .claude/skills skrillz-ecosystem --validate
Packaging skills into plugin: skrillz-ecosystem
==============================================
Scanning .claude/skills for skills...
Found 32 skills:
✓ analysis
✓ anthropic-expert
✓ auto-updater
... (29 more)
Validating skills (2025 schema compliance)...
✓ analysis: Valid (allowed-tools present)
✓ anthropic-expert: Valid (allowed-tools present)
⚠ legacy-skill: WARNING - Missing allowed-tools field
... (checking all 32)
Results: 31 valid, 1 warning
Packaging skills...
✓ Copied analysis (245 KB, 3 files)
✓ Copied anthropic-expert (1.2 MB, 12 files)
✓ Copied auto-updater (180 KB, 5 files)
... (29 more)
✓ 32 skills packaged successfully
✓ Total size: 15.8 MB
✓ Updated plugin.json
Warnings:
⚠ legacy-skill missing allowed-tools field (2025 compliance)
Add to SKILL.md frontmatter: allowed-tools: Read, Write, Bash
Next steps:
1. Fix warnings (add allowed-tools to legacy-skill)
2. Review plugin/skills/ directory
3. Update README.md with skill list
4. Validate: python scripts/validate_plugin.py skrillz-ecosystem
5. Test: /plugin install skrillz-ecosystem (local test)
Handling 2025 Compliance:
If skills are missing allowed-tools field:
---
name: my-skill
description: Skill description
allowed-tools: Read, Write, Edit, Glob, Bash
---
Read, Grep, GlobRead, Write, EditRead, Write, BashRead, WebSearch, WebFetchRead, Write, Edit, Glob, Grep, Bash, WebSearch, WebFetchpython scripts/package_skills.py .claude/skills plugin --validate
Tips:
--validate to catch issues early--dry-run to preview before packagingSee Also:
1. Start with MVP:
2. Use Semantic Versioning:
3. Write Good Descriptions:
4. Include Comprehensive README:
5. Validate Before Publishing:
python scripts/validate_plugin.py my-plugin/
# Should show 0 errors
6. Test Installation Locally:
# Create local marketplace
python scripts/generate_marketplace.py
# Test installation (if possible)
/plugin marketplace add ./my-marketplace
/plugin install my-plugin
1. Always Include:
name: Clear, kebab-case identifierversion: Semantic versiondescription: What it doesauthor: Who maintains it2. Highly Recommended:
keywords: For discoverabilitylicense: Legal clarity (MIT, Apache-2.0, etc.)repository: Source code locationhomepage: Documentation URL3. Path Rules:
./skills//Users/me/skills./path/to/file4. Naming Conventions:
kebab-case1. All Skills Must Have allowed-tools:
---
name: my-skill
description: What it does
allowed-tools: Read, Write, Bash
---
2. Common Tool Combinations:
Read, Grep, GlobRead, Write, EditRead, Write, BashRead, WebSearch, WebFetch3. Be Specific:
1. GitHub Repository Setup:
2. Version Management:
git tag v1.0.03. Documentation:
4. Team Distribution:
.claude/settings.json for team-wide:{
"extraKnownMarketplaces": [
{"source": "github", "repo": "company/approved-plugins"}
]
}
❌ Wrong:
my-plugin/
└── .claude-plugin/
├── plugin.json
└── skills/ # WRONG LOCATION
✅ Correct:
my-plugin/
├── .claude-plugin/
│ └── plugin.json
└── skills/ # AT PLUGIN ROOT
Why: Claude looks for components at plugin root, not in .claude-plugin/
Fix: Move component directories to plugin root
❌ Wrong:
{
"name": "my-plugin",
"skills": "/Users/me/my-plugin/skills"
}
✅ Correct:
{
"name": "my-plugin",
"skills": "./skills"
}
Why: Absolute paths break on other machines
Fix: Use relative paths starting with ./
❌ Wrong:
{
"name": "My_Plugin" // Underscores and capitals
}
✅ Correct:
{
"name": "my-plugin" // Kebab-case
}
Why: Naming convention expected by Claude Code
Fix: Use lowercase with hyphens
❌ Wrong:
---
name: my-skill
description: What it does
---
✅ Correct:
---
name: my-skill
description: What it does
allowed-tools: Read, Write, Bash
---
Why: 2025 schema requires explicit tool permissions
Fix: Add allowed-tools field to all skills
❌ Wrong:
{
"name": "my-plugin",
"version": "1.0.0", // Trailing comma
}
✅ Correct:
{
"name": "my-plugin",
"version": "1.0.0"
}
Why: JSON doesn't allow trailing commas
Fix: Remove trailing commas, validate JSON
❌ Wrong:
my-plugin/
├── .claude-plugin/plugin.json
└── skills/
✅ Correct:
my-plugin/
├── .claude-plugin/plugin.json
├── README.md # Installation & usage
└── skills/
Why: Users need to understand what plugin does and how to install it
Fix: Create README with installation instructions
❌ Wrong:
git push origin main # Push without validation
✅ Correct:
python scripts/validate_plugin.py my-plugin/
# Fix any errors
git push origin main
Why: Catch errors before users try to install
Fix: Always validate before publishing
❌ Wrong:
{
"version": "1.0.0" // Never changes
}
✅ Correct:
{
"version": "1.1.0" // Bumped for each release
}
Why: Users need to know when updates are available
Fix: Bump version for each release following semver
# Initialize new plugin
python scripts/init_plugin.py my-plugin
# Generate manifest (interactive)
python scripts/generate_manifest.py my-plugin/
# Generate marketplace
python scripts/generate_marketplace.py
# Validate plugin
python scripts/validate_plugin.py my-plugin/
# Package skills
python scripts/package_skills.py .claude/skills my-plugin/
# Package with validation
python scripts/package_skills.py .claude/skills my-plugin/ --validate
plugin-name/
├── .claude-plugin/
│ ├── plugin.json # Required: Metadata
│ └── marketplace.json # Optional: Distribution
├── skills/ # Your skills
├── commands/ # Custom slash commands
├── agents/ # Specialized agents
└── README.md # Recommended: Docs
{
"name": "my-plugin"
}
{
"name": "my-plugin",
"version": "1.0.0",
"description": "What this plugin does",
"author": {
"name": "Your Name",
"email": "[email protected]"
},
"keywords": ["keyword1", "keyword2"],
"license": "MIT"
}
{
"name": "my-marketplace",
"description": "Plugin marketplace",
"owner": {
"name": "Maintainer",
"email": "[email protected]"
},
"plugins": [
{
"name": "plugin-one",
"description": "First plugin",
"source": "./plugins/plugin-one",
"category": "development"
}
]
}
---
name: my-skill
description: What it does. Use when [triggers].
allowed-tools: Read, Write, Bash
---
Before publishing:
python scripts/validate_plugin.py my-plugin/Create Plugin:
python scripts/init_plugin.py my-plugin
python scripts/generate_manifest.py my-plugin/
python scripts/package_skills.py .claude/skills my-plugin/
Validate:
python scripts/validate_plugin.py my-plugin/
Create Marketplace:
python scripts/generate_marketplace.py
Push to GitHub:
cd my-marketplace
git init
git add .
git commit -m "Initial plugin marketplace"
git remote add origin [email protected]:username/my-marketplace.git
git push -u origin main
Users Install:
/plugin marketplace add username/my-marketplace
/plugin install my-plugin@my-marketplace
Read, Grep, GlobRead, Write, EditRead, Write, BashRead, WebSearch, WebFetchRead, Write, Edit, Glob, Grep, Bash, WebSearch, WebFetchAll scripts support --help:
python scripts/init_plugin.py --help
python scripts/generate_manifest.py --help
python scripts/validate_plugin.py --help
python scripts/package_skills.py --help
This MVP includes the core operations needed to package and distribute plugins. Future enhancements could include:
Additional Operations:
Enhanced Features:
For Now: The MVP operations (1-5) are sufficient to:
Detailed guides for advanced topics:
plugin-builder makes plugin creation fast, validated, and reliable. Use it to package your skills and share them with your team or the community!
development
Setup secure web-based terminal access to WSL2 from mobile/tablet via ttyd + ngrok/Cloudflare/Tailscale. One-command install, start, stop, status. Use when you need remote terminal access, web terminal, browser-based shell, or mobile access to WSL2 environment.
development
Complete development workflows where Claude writes the code while Gemini and Codex provide research, planning, reviews, and different perspectives. Claude remains the main developer. Use for complex projects requiring expert planning and multi-perspective reviews.
development
Systematic progress tracking for skill development. Manages task states (pending/in_progress/completed), updates in real-time, reports progress, identifies blockers, and maintains momentum. Use when tracking skill development, coordinating work, or reporting progress.
testing
Comprehensive testing workflow orchestrating functional testing, example validation, integration testing, and usability assessment. Sequential workflow for complete skill testing from examples through scenarios to integration validation. Use when conducting thorough testing, pre-deployment validation, ensuring skill functionality, or comprehensive quality checks.