Files
gh-sjungling-claude-plugins…/skills/builder/references/plugins-guide.md
2025-11-30 08:57:35 +08:00

692 lines
16 KiB
Markdown

# Plugins and Marketplaces Guide
## Overview
Plugins are collections of Claude Code components (agents, commands, skills) packaged for distribution and installation. Plugin marketplaces enable discovery and installation of plugins from repositories.
**Official Documentation**:
- Plugins: https://docs.claude.com/en/docs/claude-code/plugins.md
- Marketplaces: https://docs.claude.com/en/docs/claude-code/plugin-marketplaces.md
## Plugin Structure
A plugin is a directory containing Claude Code components with a marketplace configuration:
```
plugin-name/
├── .claude-plugin/
│ └── marketplace.json # Plugin metadata and component mapping
├── agents/ # Optional: custom agents
│ ├── agent-one.md
│ └── agent-two.md
├── commands/ # Optional: slash commands
│ ├── command-one.md
│ └── command-two.md
├── skills/ # Optional: skills
│ ├── skill-one/
│ │ └── SKILL.md
│ └── skill-two/
│ └── SKILL.md
├── SKILLS.md # Required if skills/ exists
└── README.md # Plugin documentation
```
## Plugin Metadata: plugin.json
Each plugin should include a `plugin.json` file in the `.claude-plugin/` directory:
```json
{
"name": "plugin-name",
"version": "1.0.0",
"description": "Brief description of what the plugin provides",
"author": "Your Name",
"repository": "https://github.com/username/repo",
"keywords": ["swift", "ios", "mobile"],
"category": "development"
}
```
### Fields
**`name`** (string, required)
- Unique identifier for the plugin
- Use kebab-case
- Example: `swift-engineer`, `technical-writer`
**`version`** (string, required)
- Semantic version number
- Format: `MAJOR.MINOR.PATCH`
- Example: `1.0.0`, `2.1.3`
**`description`** (string, required)
- Brief explanation of plugin purpose
- What components it provides
- Who should use it
**`author`** (string, optional)
- Plugin author name or organization
**`repository`** (string, optional)
- URL to source repository
- Enables users to browse code and contribute
**`keywords`** (array of strings, optional)
- Searchable tags
- Technologies, frameworks, use cases
- Example: `["swift", "ios", "xcode"]`
**`category`** (string, optional)
- Plugin category for organization
- Examples: `development`, `documentation`, `testing`, `deployment`
## Marketplace Configuration: marketplace.json
The `.claude-plugin/marketplace.json` file maps plugin components to their file locations:
```json
{
"marketplaceName": "marketplace-name",
"pluginRoot": "./plugins",
"plugins": [
{
"name": "plugin-name",
"source": "./plugins/plugin-name",
"version": "1.0.0",
"description": "Plugin description",
"keywords": ["keyword1", "keyword2"],
"category": "development",
"agents": {
"agent-name": "./agents/agent-name.md"
},
"commands": {
"command-name": "./commands/command-name.md"
},
"skills": {
"skill-name": "./skills/skill-name"
}
}
]
}
```
### Marketplace Fields
**`marketplaceName`** (string)
- Unique identifier for the marketplace
- Used in installation: `/plugin install name@marketplace-name`
**`pluginRoot`** (string)
- Relative path to directory containing all plugins
- Usually `"./plugins"`
**`plugins`** (array)
- List of all plugins in the marketplace
- Each plugin has metadata and component mappings
### Plugin Entry Fields
**`name`** (string, required)
- Plugin identifier
- Must match plugin.json name
**`source`** (string, required)
- Relative path from repository root to plugin directory
- **Must use `./` prefix**: `"./plugins/plugin-name"`
- This is critical for proper plugin discovery
**`version`** (string, required)
- Plugin version, should match plugin.json
**`description`** (string, required)
- Plugin description, should match plugin.json
**`keywords`** (array, optional)
- Searchable keywords
**`category`** (string, optional)
- Plugin category
**`agents`** (object, optional)
- Maps agent names to file paths
- Paths relative to plugin source directory
- Example: `{"ios-expert": "./agents/ios-expert.md"}`
**`commands`** (object, optional)
- Maps command names to file paths
- Paths relative to plugin source directory
- Example: `{"swift-lint": "./commands/swift-lint.md"}`
**`skills`** (object, optional)
- Maps skill names to directory paths
- Paths relative to plugin source directory
- Example: `{"ios-swift-expert": "./skills/ios-swift-expert"}`
### Path Requirements
**Critical**: All paths in marketplace.json must:
1. Be relative, not absolute
2. Use `./` prefix for the `source` field
3. Use forward slashes, even on Windows
4. Point to actual files/directories
**Good**:
```json
"source": "./plugins/swift-engineer"
"agents": {
"ios-expert": "./agents/ios-expert.md"
}
```
**Bad**:
```json
"source": "plugins/swift-engineer" // Missing ./
"source": "/absolute/path/to/plugin" // Absolute path
"agents": {
"ios-expert": "agents\\ios-expert.md" // Backslashes
}
```
## Creating a Plugin
### 1. Plan Your Plugin
Determine:
- What problem does it solve?
- What components are needed (agents, commands, skills)?
- Who is the target audience?
- What tools and workflows will it provide?
### 2. Create Directory Structure
```bash
mkdir -p plugin-name/.claude-plugin
mkdir -p plugin-name/agents
mkdir -p plugin-name/commands
mkdir -p plugin-name/skills
```
### 3. Create plugin.json
```bash
cat > plugin-name/.claude-plugin/plugin.json << 'EOF'
{
"name": "plugin-name",
"version": "1.0.0",
"description": "Your plugin description",
"author": "Your Name",
"keywords": ["tag1", "tag2"],
"category": "development"
}
EOF
```
### 4. Add Components
Create agents, commands, and/or skills following their respective guides:
- See `subagents-guide.md` for agent creation
- See `slash-commands-guide.md` for command creation
- See `skills-guide.md` for skill creation
### 5. Create Documentation
**README.md**:
```markdown
# Plugin Name
Brief description of what the plugin does.
## Components
### Agents
- **agent-name**: Description of agent
### Commands
- **/command-name**: Description of command
### Skills
- **skill-name**: Description of skill
## Installation
Add the marketplace:
\`\`\`
/plugin marketplace add <repository-url>
\`\`\`
Install the plugin:
\`\`\`
/plugin install plugin-name@marketplace-name
\`\`\`
## Usage
[Usage examples and documentation]
```
**SKILLS.md** (if plugin includes skills):
```markdown
# Plugin Skills
## skill-name
Description of what the skill does and when it activates.
### What It Provides
- Capability 1
- Capability 2
### Example Usage
[Brief example]
```
### 6. Register in Marketplace
Add plugin entry to marketplace.json:
```json
{
"marketplaceName": "your-marketplace",
"pluginRoot": "./plugins",
"plugins": [
{
"name": "plugin-name",
"source": "./plugins/plugin-name",
"version": "1.0.0",
"description": "Your plugin description",
"keywords": ["tag1", "tag2"],
"category": "development",
"agents": {
"agent-name": "./agents/agent-name.md"
},
"commands": {
"command-name": "./commands/command-name.md"
},
"skills": {
"skill-name": "./skills/skill-name"
}
}
]
}
```
## Installing Plugins
### Add Marketplace
```bash
/plugin marketplace add /path/to/marketplace
# or
/plugin marketplace add https://github.com/user/marketplace
```
### List Available Plugins
```bash
/plugin list marketplace-name
```
### Install Plugin
```bash
/plugin install plugin-name@marketplace-name
```
### Verify Installation
Check that agents, commands, and skills are available:
- Agents: Use Task tool with subagent_type
- Commands: Type `/command-name`
- Skills: Should activate automatically based on context
## Best Practices
### Plugin Design
**Do:**
- Focus on a specific domain or use case
- Provide comprehensive documentation
- Include usage examples
- Follow semantic versioning
- Test all components before publishing
**Don't:**
- Create overly broad, unfocused plugins
- Duplicate existing functionality
- Include untested components
- Use absolute paths in configurations
### Component Organization
**Agents**: Use when delegatable workflows need isolation
**Commands**: Use for keyboard shortcuts and parameterized tasks
**Skills**: Use for automatic, context-aware guidance
Most plugins should favor **skills** over agents for better UX (automatic activation).
### Documentation
Include in README:
- What problem the plugin solves
- Complete component listing
- Installation instructions
- Usage examples
- Common workflows
- Troubleshooting
Include in SKILLS.md:
- Detailed skill descriptions
- Activation triggers
- What capabilities each skill provides
- Usage examples
### Versioning
Follow semantic versioning:
- **MAJOR**: Breaking changes, incompatible updates
- **MINOR**: New features, backward compatible
- **PATCH**: Bug fixes, backward compatible
Update version in both:
- `plugin.json`
- `marketplace.json` plugin entry
### Testing
Before publishing:
1. **Validate JSON**:
```bash
cat .claude-plugin/marketplace.json | python -m json.tool
cat .claude-plugin/plugin.json | python -m json.tool
```
2. **Test installation**:
```bash
/plugin marketplace add /path/to/your/repo
/plugin install plugin-name@marketplace-name
```
3. **Test components**:
- Invoke each agent
- Run each command
- Trigger each skill
- Verify all work as expected
4. **Verify paths**:
- All files referenced in marketplace.json exist
- Paths are relative with proper `./` prefix
- No broken links in documentation
## Common Patterns
### Single-Purpose Plugin
Plugin with one focused capability:
```
swift-engineer/
├── .claude-plugin/
│ └── plugin.json
├── skills/
│ └── ios-swift-expert/
│ └── SKILL.md
├── commands/
│ └── swift-lint.md
├── SKILLS.md
└── README.md
```
### Multi-Component Plugin
Plugin with multiple related capabilities:
```
web-development/
├── .claude-plugin/
│ └── plugin.json
├── agents/
│ ├── react-expert.md
│ └── api-designer.md
├── commands/
│ ├── create-component.md
│ └── run-dev-server.md
├── skills/
│ ├── react-patterns/
│ │ └── SKILL.md
│ └── api-testing/
│ └── SKILL.md
├── SKILLS.md
└── README.md
```
### Plugin Collection Marketplace
Multiple related plugins in one marketplace:
```
marketplace/
├── .claude-plugin/
│ └── marketplace.json
└── plugins/
├── plugin-one/
│ ├── .claude-plugin/
│ │ └── plugin.json
│ └── [components]
├── plugin-two/
│ ├── .claude-plugin/
│ │ └── plugin.json
│ └── [components]
└── plugin-three/
├── .claude-plugin/
│ └── plugin.json
└── [components]
```
## Marketplace Management
### Adding New Plugins
1. Create plugin directory in `plugins/`
2. Add plugin metadata to `.claude-plugin/plugin.json`
3. Create components
4. Register in `.claude-plugin/marketplace.json`
5. Update main README
6. Test installation
### Updating Plugins
1. Make changes to plugin components
2. Update version in `plugin.json`
3. Update version in `marketplace.json`
4. Document changes in plugin README
5. Test updated plugin
6. Commit and push
### Deprecating Plugins
1. Mark as deprecated in description
2. Add deprecation notice to README
3. Suggest alternative plugins
4. Keep available for backward compatibility
5. Eventually remove from marketplace
## Distribution
### Local Distribution
Share repository path:
```bash
/plugin marketplace add /path/to/marketplace
```
### Git Repository
Host on GitHub/GitLab:
```bash
/plugin marketplace add https://github.com/user/marketplace
```
### Documentation
Provide clear instructions:
1. How to add the marketplace
2. How to install plugins
3. What each plugin provides
4. Usage examples
5. Troubleshooting
## Troubleshooting
### Plugin Not Found
**Issue**: `/plugin install plugin-name@marketplace-name` fails
**Solutions**:
- Verify marketplace is added: `/plugin marketplace list`
- Check plugin name matches marketplace.json
- Ensure marketplace.json is valid JSON
- Verify `source` path has `./` prefix
### Components Not Available
**Issue**: Installed plugin components don't appear
**Solutions**:
- Check component paths in marketplace.json
- Verify files exist at specified paths
- Ensure YAML frontmatter is valid (agents, skills)
- Restart Claude Code session
### Invalid Marketplace JSON
**Issue**: Marketplace JSON validation fails
**Solutions**:
- Validate with JSON linter
- Check for trailing commas
- Verify all paths use forward slashes
- Ensure proper quote escaping
### Skill Not Activating
**Issue**: Skill doesn't trigger in expected contexts
**Solutions**:
- Review skill description for trigger keywords
- Add more specific context triggers
- Verify SKILL.md has valid frontmatter
- Check skill is registered in marketplace.json
## Example: Complete Plugin
**Directory structure**:
```
swift-engineer/
├── .claude-plugin/
│ └── plugin.json
├── agents/
│ └── ios-swift-expert.md
├── commands/
│ └── swift-lint.md
├── skills/
│ └── ios-swift-expert/
│ ├── SKILL.md
│ └── references/
│ └── swift-style-guide.md
├── SKILLS.md
└── README.md
```
**plugin.json**:
```json
{
"name": "swift-engineer",
"version": "1.0.0",
"description": "iOS and macOS development expertise with Swift tooling",
"author": "Scott Jungling",
"repository": "https://github.com/username/claude-plugins",
"keywords": ["swift", "ios", "macos", "xcode", "swiftui"],
"category": "development"
}
```
**marketplace.json entry**:
```json
{
"name": "swift-engineer",
"source": "./plugins/swift-engineer",
"version": "1.0.0",
"description": "iOS and macOS development expertise with Swift tooling",
"keywords": ["swift", "ios", "macos", "xcode", "swiftui"],
"category": "development",
"agents": {
"ios-swift-expert": "./agents/ios-swift-expert.md"
},
"commands": {
"swift-lint": "./commands/swift-lint.md"
},
"skills": {
"ios-swift-expert": "./skills/ios-swift-expert"
}
}
```
**README.md**:
```markdown
# Swift Engineer Plugin
Expert iOS and macOS development assistance with Swift tooling.
## Components
### Skills
**ios-swift-expert**: Automatically activates when working with Swift, SwiftUI, UIKit, Xcode projects, or Apple frameworks. Provides expert guidance on iOS/macOS development.
### Commands
**/swift-lint**: Format and lint Swift code using swift-format
### Agents
**ios-swift-expert**: Delegatable iOS/macOS development expert (prefer using the skill for automatic activation)
## Installation
Add the marketplace:
\`\`\`
/plugin marketplace add https://github.com/username/claude-plugins
\`\`\`
Install the plugin:
\`\`\`
/plugin install swift-engineer@claude-plugins
\`\`\`
## Usage
The ios-swift-expert skill activates automatically when working with Swift code. For example:
- Opening .swift files
- Discussing SwiftUI layouts
- Debugging iOS apps
- Configuring Xcode projects
Use the `/swift-lint` command to format code:
\`\`\`
/swift-lint
\`\`\`
## Requirements
- swift-format installed for linting command
- Xcode for iOS/macOS development
## License
MIT
```
This comprehensive setup provides users with automatic expertise (skill), convenient shortcuts (command), and delegatable workflows (agent).