--- name: plugin-builder description: 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. allowed-tools: Read, Write, Edit, Glob, Bash --- # Plugin Builder ## Overview 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**: - Initialize plugin directory structure - Generate valid plugin.json and marketplace.json manifests - Validate plugin structure and 2025 schema compliance - Package existing skills into plugin format - Automate repetitive plugin tasks **Pattern**: Task-based (independent operations, flexible order) **Time Savings**: 2-4 hours manual work → 15-30 minutes automated ## What Are Claude Code Plugins? Plugins are distributable packages that extend Claude Code with custom functionality. They can contain: - **Skills**: Agent capabilities (what we have 32 of!) - **Commands**: Custom slash commands - **Agents**: Specialized subagents - **Hooks**: Event handlers - **MCP Servers**: External tool integrations **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 ``` ## When to Use Use plugin-builder when you need to: **Creating Plugins**: - Package your skills for distribution - Create installable skill collections - Share skills with your team - Publish to community marketplaces **Validation & Quality**: - Validate plugin structure before publishing - Ensure 2025 schema compliance - Check manifest correctness - Verify component formatting **Distribution Setup**: - Create team/organization marketplaces - Set up GitHub distribution - Configure multi-plugin catalogs **Bulk Operations**: - Convert multiple skills to plugins - Package entire skill ecosystems - Migrate existing skills to plugin format ## Prerequisites Before using plugin-builder: **Knowledge**: - Basic understanding of Claude Code skills - Familiarity with terminal/command line - Basic JSON concepts (scripts generate it for you) **Tools**: - Python 3.8+ installed - Skills/commands/agents to package (for packaging operations) - Git installed (for marketplace distribution) **Optional**: - GitHub account (for public distribution) - Text editor (for manual manifest edits) ## Operations ### Operation 1: Initialize Plugin Structure Create a complete plugin directory structure with minimal configuration. **Purpose**: Quickly scaffold a new plugin with correct structure and minimal boilerplate **When to Use**: - Starting a new plugin from scratch - Need proper directory layout - Want generated README template **Prerequisites**: - Plugin name decided (kebab-case recommended) - Basic metadata known (description, author) **Inputs**: - Plugin name - Optional: Description, author information **Process**: **Method 1: Interactive Script (Recommended)** ```bash cd /path/to/your/workspace python /path/to/plugin-builder/scripts/init_plugin.py ``` Follow prompts: 1. Enter plugin name (will create directory with this name) 2. Enter description (brief, 1-2 sentences) 3. Enter author name 4. Enter author email (optional) 5. Choose components to include (skills/commands/agents) **Method 2: Command Line** ```bash python /path/to/plugin-builder/scripts/init_plugin.py my-plugin \ --description "My awesome plugin" \ --author "Your Name" \ --email "you@example.com" \ --components skills,commands ``` **Method 3: Manual Creation** ```bash 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**: - [ ] Directory created with correct name - [ ] .claude-plugin/plugin.json exists with valid JSON - [ ] README.md exists - [ ] Selected component directories created **Example**: ```bash # 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](templates/plugin.json.minimal) for the generated manifest structure --- ### Operation 2: Generate plugin.json 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**: - After initializing plugin structure - Need to add/update metadata - Want all optional fields included - Upgrading from minimal to complete manifest **Prerequisites**: - Plugin directory exists - Plugin name decided - Metadata information available **Inputs**: - Plugin name (required) - Version (recommended, default: 1.0.0) - Description (recommended) - Author information (optional but recommended) - Homepage URL (optional) - Repository URL (optional) - License (optional, default: MIT) - Keywords (optional, for discoverability) - Component paths (optional, uses defaults) **Process**: **Method 1: Interactive Script (Recommended)** ```bash 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** ```bash python scripts/generate_manifest.py /path/to/my-plugin --update ``` Loads existing manifest, prompts only for changes/additions. **Method 3: Use Template** ```bash 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 examples **Method 4: Manual Creation** Copy from [templates/plugin.json.standard](templates/plugin.json.standard) and edit: ```json { "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**: - Valid `plugin.json` in `.claude-plugin/` directory - JSON formatted and validated - All required fields present - Optional fields included as specified **Validation**: - [ ] JSON syntax is valid - [ ] Name field present (required) - [ ] Name is kebab-case - [ ] Version follows semver if present - [ ] No absolute paths - [ ] File saved in correct location **Example**: ```bash $ 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**: - Use semantic versioning (MAJOR.MINOR.PATCH) - Include keywords for discoverability - Add repository URL for open source plugins - Keep description under 200 characters - Use kebab-case for plugin name **See Also**: - [references/plugin-json-schema.md](references/plugin-json-schema.md) - Complete field reference - [templates/](templates/) - All manifest templates --- ### Operation 3: Generate marketplace.json 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**: - Distributing plugins via GitHub repository - Creating team marketplace - Publishing multiple plugins - Setting up plugin catalog **Prerequisites**: - One or more plugins ready for distribution - Marketplace name decided - Owner information available **Inputs**: - Marketplace name (required) - Owner name and email (required) - Plugin entries (required): - Plugin name - Source (path, GitHub repo, or git URL) - Description - Category (optional) - Version (optional) **Process**: **Method 1: Interactive Script (Recommended)** ```bash python scripts/generate_marketplace.py ``` Follow prompts: 1. Marketplace name (kebab-case) 2. Marketplace description 3. Owner name and email 4. Plugin source directory (optional, for auto-discovery) 5. For each plugin: - Name - Source (local path, GitHub, git URL) - Description - Category - Version **Method 2: Auto-Discover Plugins** ```bash 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](templates/marketplace.json.minimal) and edit: ```json { "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**: - Valid `marketplace.json` file - All plugins listed with metadata - Ready for Git repository hosting **Validation**: - [ ] JSON syntax valid - [ ] Required fields present (name, owner, plugins) - [ ] All plugin sources are valid - [ ] Plugin names are kebab-case - [ ] Categories are standard (development, productivity, security, learning) **Example**: ```bash $ 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-plugins ``` **Distribution Setup**: After generating marketplace.json: 1. **Create GitHub Repository**: ```bash 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 ``` 2. **Users Add Marketplace**: ``` /plugin marketplace add username/my-marketplace ``` 3. **Users Install Plugins**: ``` /plugin install plugin-name@my-marketplace ``` **See Also**: - [references/marketplace-json-schema.md](references/marketplace-json-schema.md) - Complete schema - [references/distribution-guide.md](references/distribution-guide.md) - Setup instructions - [templates/marketplace.json.multi](templates/marketplace.json.multi) - Multi-plugin example --- ### Operation 4: Validate Plugin Comprehensive validation of plugin structure, manifests, and component compliance. **Purpose**: Ensure plugin is correctly structured and ready for distribution **When to Use**: - Before publishing to marketplace - After making changes to plugin - Before creating GitHub release - Troubleshooting plugin issues - Ensuring 2025 schema compliance **Prerequisites**: - Plugin directory exists - plugin.json file exists **Inputs**: - Plugin directory path **Process**: **Method 1: Script Validation (Comprehensive)** ```bash python scripts/validate_plugin.py /path/to/my-plugin ``` **Method 2: Verbose Output** ```bash python scripts/validate_plugin.py /path/to/my-plugin --verbose ``` Shows detailed checks and reasoning. **Method 3: Specific Validation Type** ```bash # 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**: - [x] `.claude-plugin/` directory exists - [x] `plugin.json` exists in `.claude-plugin/` - [x] Component directories at plugin root (NOT in `.claude-plugin/`) - [x] Directory names are kebab-case - [x] README.md exists (recommended) **2. Manifest Validation**: - [x] `plugin.json` is valid JSON - [x] Required field `name` present - [x] Name is kebab-case (no spaces, underscores) - [x] Version follows semver if present - [x] No absolute paths (all paths relative with `./`) - [x] Referenced files in manifest actually exist **3. Component Validation**: - [x] Skills have `SKILL.md` files - [x] Skills have valid YAML frontmatter - [x] Skills have `allowed-tools` field (2025 schema) - [x] Commands have valid markdown with frontmatter - [x] Agents have proper markdown structure - [x] No placeholder TODO comments in production files **4. 2025 Schema Compliance**: - [x] All skills have `allowed-tools` field in frontmatter - [x] `allowed-tools` lists valid Claude Code tools - [x] Frontmatter format is correct **Outputs**: **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 ready - `1`: Errors found, plugin not ready - `2`: Script execution error **Common 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: - [ ] Structure validation: 0 errors - [ ] Manifest validation: 0 errors - [ ] Component validation: 0 errors - [ ] 2025 compliance: All skills have allowed-tools - [ ] README exists and is complete - [ ] Test installation locally **See Also**: - [references/validation-rules.md](references/validation-rules.md) - Complete validation rules - [references/plugin-json-schema.md](references/plugin-json-schema.md) - Schema reference --- ### Operation 5: Package Skills Copy existing skills into plugin structure and update manifest. **Purpose**: Convert standalone skills into plugin-packaged skills ready for distribution **When to Use**: - Converting `.claude/skills/` to plugin format - Packaging skill collections - Migrating existing skills to plugins - Creating skill-focused plugins **Prerequisites**: - Plugin structure initialized - Skills exist in source directory - Skills are 2025-compliant (or will be validated and flagged) **Inputs**: - Source skills directory path - Target plugin path - Optional: Specific skills to package (default: all) - Optional: Validation mode (strict/warn) **Process**: **Method 1: Package All Skills** ```bash 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** ```bash python scripts/package_skills.py /path/to/skills /path/to/plugin \ --skills skill1,skill2,skill3 ``` **Method 3: Package with Validation** ```bash 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)** ```bash python scripts/package_skills.py /path/to/skills /path/to/plugin --dry-run ``` Shows what would be packaged without actually copying. **What Happens**: 1. **Scans Source Directory**: - Finds all skill directories - Identifies skills with SKILL.md files - Lists skills to be packaged 2. **Validates Skills** (if --validate): - Checks SKILL.md exists - Validates YAML frontmatter - Checks for `allowed-tools` field (2025 schema) - Reports warnings for missing fields 3. **Copies Skills**: - Creates plugin/skills/ if doesn't exist - Copies each skill directory - Preserves structure (SKILL.md, references/, scripts/) - Copies all files (no modification) 4. **Updates Manifest**: - Adds skills to plugin.json - Updates skills array (if field exists) - Preserves existing manifest fields 5. **Reports Results**: - Number of skills packaged - Any warnings or issues - Next steps **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**: - [ ] All skills copied successfully - [ ] Directory structure preserved - [ ] SKILL.md files exist in each skill - [ ] plugin.json updated (if applicable) - [ ] 2025 compliance checked **Example**: ```bash $ 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: 1. **Manual Fix**: Add to SKILL.md frontmatter: ```yaml --- name: my-skill description: Skill description allowed-tools: Read, Write, Edit, Glob, Bash --- ``` 2. **Common Tool Sets**: - **Read-only analysis**: `Read, Grep, Glob` - **File editing**: `Read, Write, Edit` - **Automation**: `Read, Write, Bash` - **Research**: `Read, WebSearch, WebFetch` - **All tools**: `Read, Write, Edit, Glob, Grep, Bash, WebSearch, WebFetch` 3. **Re-package** after fixing: ```bash python scripts/package_skills.py .claude/skills plugin --validate ``` **Tips**: - Use `--validate` to catch issues early - Use `--dry-run` to preview before packaging - Fix 2025 compliance warnings before distribution - Keep original skills as backup - Test plugin installation locally before publishing **See Also**: - [references/component-packaging-guide.md](references/component-packaging-guide.md) - Detailed packaging guide - [references/validation-rules.md](references/validation-rules.md) - 2025 compliance rules --- ## Best Practices ### Plugin Development **1. Start with MVP**: - Get basic plugin working first - Add optional metadata later - Test early, test often **2. Use Semantic Versioning**: - Format: MAJOR.MINOR.PATCH (e.g., 1.2.3) - MAJOR: Breaking changes - MINOR: New features, backward compatible - PATCH: Bug fixes **3. Write Good Descriptions**: - Clear, concise (under 200 chars) - Explain what plugin does - Mention key features - Include use cases **4. Include Comprehensive README**: - Installation instructions - Usage examples - List of components - Configuration options - Troubleshooting **5. Validate Before Publishing**: ```bash python scripts/validate_plugin.py my-plugin/ # Should show 0 errors ``` **6. Test Installation Locally**: ```bash # Create local marketplace python scripts/generate_marketplace.py # Test installation (if possible) /plugin marketplace add ./my-marketplace /plugin install my-plugin ``` ### Manifest Best Practices **1. Always Include**: - `name`: Clear, kebab-case identifier - `version`: Semantic version - `description`: What it does - `author`: Who maintains it **2. Highly Recommended**: - `keywords`: For discoverability - `license`: Legal clarity (MIT, Apache-2.0, etc.) - `repository`: Source code location - `homepage`: Documentation URL **3. Path Rules**: - Always use relative paths: `./skills/` - Never use absolute paths: `/Users/me/skills` - Use forward slashes (cross-platform): `./path/to/file` **4. Naming Conventions**: - Plugin names: `kebab-case` - No spaces, underscores, or special chars - Descriptive and memorable ### 2025 Schema Compliance **1. All Skills Must Have allowed-tools**: ```yaml --- name: my-skill description: What it does allowed-tools: Read, Write, Bash --- ``` **2. Common Tool Combinations**: - Analysis: `Read, Grep, Glob` - Editing: `Read, Write, Edit` - Automation: `Read, Write, Bash` - Research: `Read, WebSearch, WebFetch` **3. Be Specific**: - Only list tools skill actually uses - Don't include all tools if not needed - Helps Claude optimize execution ### Distribution Best Practices **1. GitHub Repository Setup**: - Clear repository name - Comprehensive README.md - LICENSE file - .gitignore for OS files **2. Version Management**: - Tag releases: `git tag v1.0.0` - Write changelogs - Follow semver strictly **3. Documentation**: - Installation instructions - Usage examples - Component documentation - Troubleshooting guide **4. Team Distribution**: - Use `.claude/settings.json` for team-wide: ```json { "extraKnownMarketplaces": [ {"source": "github", "repo": "company/approved-plugins"} ] } ``` ## Common Mistakes ### Mistake 1: Component Directories in Wrong Location **❌ 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 --- ### Mistake 2: Absolute Paths in Manifests **❌ Wrong**: ```json { "name": "my-plugin", "skills": "/Users/me/my-plugin/skills" } ``` **✅ Correct**: ```json { "name": "my-plugin", "skills": "./skills" } ``` **Why**: Absolute paths break on other machines **Fix**: Use relative paths starting with `./` --- ### Mistake 3: Non-Kebab-Case Names **❌ Wrong**: ```json { "name": "My_Plugin" // Underscores and capitals } ``` **✅ Correct**: ```json { "name": "my-plugin" // Kebab-case } ``` **Why**: Naming convention expected by Claude Code **Fix**: Use lowercase with hyphens --- ### Mistake 4: Missing allowed-tools (2025 Schema) **❌ Wrong**: ```yaml --- name: my-skill description: What it does --- ``` **✅ Correct**: ```yaml --- 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 --- ### Mistake 5: Invalid JSON Syntax **❌ Wrong**: ```json { "name": "my-plugin", "version": "1.0.0", // Trailing comma } ``` **✅ Correct**: ```json { "name": "my-plugin", "version": "1.0.0" } ``` **Why**: JSON doesn't allow trailing commas **Fix**: Remove trailing commas, validate JSON --- ### Mistake 6: No README **❌ 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 --- ### Mistake 7: Not Validating Before Publishing **❌ Wrong**: ```bash git push origin main # Push without validation ``` **✅ Correct**: ```bash 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 --- ### Mistake 8: No Version Bumping **❌ Wrong**: ```json { "version": "1.0.0" // Never changes } ``` **✅ Correct**: ```json { "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 --- ## Quick Reference ### Essential Commands ```bash # 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 Structure ``` 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 ``` ### plugin.json Minimal ```json { "name": "my-plugin" } ``` ### plugin.json Standard ```json { "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" } ``` ### marketplace.json ```json { "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" } ] } ``` ### 2025 Skill Frontmatter ```yaml --- name: my-skill description: What it does. Use when [triggers]. allowed-tools: Read, Write, Bash --- ``` ### Validation Checklist Before publishing: - [ ] Run `python scripts/validate_plugin.py my-plugin/` - [ ] 0 errors, 0 warnings - [ ] README.md exists and is complete - [ ] All skills have allowed-tools field - [ ] Version number bumped (if updating) - [ ] Git tag created for release - [ ] Test installation locally ### Distribution Workflow 1. **Create Plugin**: ```bash python scripts/init_plugin.py my-plugin python scripts/generate_manifest.py my-plugin/ python scripts/package_skills.py .claude/skills my-plugin/ ``` 2. **Validate**: ```bash python scripts/validate_plugin.py my-plugin/ ``` 3. **Create Marketplace**: ```bash python scripts/generate_marketplace.py ``` 4. **Push to GitHub**: ```bash 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 main ``` 5. **Users Install**: ``` /plugin marketplace add username/my-marketplace /plugin install my-plugin@my-marketplace ``` ### Common Tool Sets (2025) - **Read-only**: `Read, Grep, Glob` - **File editing**: `Read, Write, Edit` - **Automation**: `Read, Write, Bash` - **Research**: `Read, WebSearch, WebFetch` - **Full access**: `Read, Write, Edit, Glob, Grep, Bash, WebSearch, WebFetch` ### Script Help All scripts support `--help`: ```bash python scripts/init_plugin.py --help python scripts/generate_manifest.py --help python scripts/validate_plugin.py --help python scripts/package_skills.py --help ``` --- ## Next Steps After MVP This MVP includes the core operations needed to package and distribute plugins. Future enhancements could include: **Additional Operations**: - Package commands (Operation 6) - Package agents (Operation 7) - Update existing plugin (Operation 9) - Bulk package multiple plugins (Operation 10) **Enhanced Features**: - Automated GitHub repo creation - Change log generation - Dependency resolution - Plugin analytics **For Now**: The MVP operations (1-5) are sufficient to: - Create plugins - Package your 32 skills - Distribute via GitHub - Validate compliance - Share with team or community --- ## References Detailed guides for advanced topics: - **[plugin-json-schema.md](references/plugin-json-schema.md)** - Complete field reference, all options, examples - **[marketplace-json-schema.md](references/marketplace-json-schema.md)** - Marketplace structure, source types, plugin entries - **[validation-rules.md](references/validation-rules.md)** - All validation checks, error fixes, 2025 compliance --- **plugin-builder** makes plugin creation fast, validated, and reliable. Use it to package your skills and share them with your team or the community!