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.
62
76%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./.claude/skills/plugin-builder/SKILL.mdThe canonical home for this skill is plugin-builder in fernandezbaptiste/Skrillz
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-nameStructure:
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: DocumentationUse 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.pyFollow prompts:
Method 2: Command Line
python /path/to/plugin-builder/scripts/init_plugin.py my-plugin \
--description "My awesome plugin" \
--author "Your Name" \
--email "you@example.com" \
--components skills,commandsMethod 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
\`\`\`
EOFOutputs:
my-plugin/
├── .claude-plugin/
│ └── plugin.json # Minimal manifest (name only)
├── skills/ # If selected
├── commands/ # If selected
├── agents/ # If selected
└── README.md # Template with installation instructionsValidation:
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): devops@company.com
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-pluginFollow 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 --updateLoads existing manifest, prompts only for changes/additions.
Method 3: Use Template
python scripts/generate_manifest.py /path/to/my-plugin --template standardTemplates 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": "you@example.com"
},
"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: devops@company.com
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": "devops@company.com",
"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.pyFollow 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": "team@company.com"
},
"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: engineering@company.com
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-pluginsDistribution Setup:
After generating marketplace.json:
cd /path/to/marketplace
git init
git add .
git commit -m "Initial marketplace setup"
git remote add origin git@github.com:username/my-marketplace.git
git push -u origin main/plugin marketplace add username/my-marketplace/plugin install plugin-name@my-marketplaceSee 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-pluginMethod 2: Verbose Output
python scripts/validate_plugin.py /path/to/my-plugin --verboseShows 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 2025Validation 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 directoryError: Absolute paths in manifest
ERROR: "skills" field has absolute path: /Users/me/skills
FIX: Change to relative path: ./skillsError: 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 fileError: 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/pluginCopies 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,skill3Method 3: Package with Validation
python scripts/package_skills.py /path/to/skills /path/to/plugin --validateValidates each skill for 2025 compliance before packaging.
Method 4: Dry Run (Preview)
python scripts/package_skills.py /path/to/skills /path/to/plugin --dry-runShows 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.mdValidation:
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 --validateTips:
--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 errors6. Test Installation Locally:
# Create local marketplace
python scripts/generate_marketplace.py
# Test installation (if possible)
/plugin marketplace add ./my-marketplace
/plugin install my-plugin1. 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 ROOTWhy: 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 mainWhy: 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/ --validateplugin-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": "you@example.com"
},
"keywords": ["keyword1", "keyword2"],
"license": "MIT"
}{
"name": "my-marketplace",
"description": "Plugin marketplace",
"owner": {
"name": "Maintainer",
"email": "maintainer@example.com"
},
"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.pyPush to GitHub:
cd my-marketplace
git init
git add .
git commit -m "Initial plugin marketplace"
git remote add origin git@github.com:username/my-marketplace.git
git push -u origin mainUsers Install:
/plugin marketplace add username/my-marketplace
/plugin install my-plugin@my-marketplaceRead, 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 --helpThis 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!
93ed392
Canonical home
since Sep 12, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.