Transform repository into a plugin marketplace structure with two plugins: - claude-code plugin: Complete toolkit with 5 skills * claude-code-plugins * claude-code-slash-commands * claude-code-hooks * claude-code-subagents * claude-code-memory - claude-skills plugin: Meta-skill for creating Agent Skills * Comprehensive best practices guide * Templates and examples * Progressive disclosure patterns Infrastructure: - Add marketplace.json manifest - Create plugin.json for each plugin - Update documentation for marketplace structure - Add contribution and testing guides Installation: - /plugin install claude-code@claude-skills - /plugin install claude-skills@claude-skills 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
10 KiB
name, description
| name | description |
|---|---|
| Claude Code Plugin Developer | Create and structure Claude Code plugins with commands, agents, skills, hooks, and MCP servers. Use when building plugins for Claude Code, setting up plugin structure, or configuring plugin manifests. |
Claude Code Plugin Development
When to Use This Skill
Use this skill when:
- Creating a new Claude Code plugin from scratch
- Adding components to an existing plugin (commands, agents, skills, hooks)
- Configuring plugin manifests and metadata
- Setting up plugin distribution and marketplaces
- Troubleshooting plugin structure or installation issues
Do NOT use this skill for:
- Creating standalone MCP servers (use MCP-specific documentation)
- General Claude Code usage (not plugin development)
- Creating individual skills without plugin context
Quick Start: Creating a Plugin
1. Basic Plugin Structure
# Create plugin directory
mkdir my-plugin
cd my-plugin
# Create required manifest directory
mkdir -p .claude-plugin
# Create plugin.json manifest
cat > .claude-plugin/plugin.json << 'EOF'
{
"name": "my-plugin",
"description": "Description of what your plugin does",
"version": "1.0.0",
"author": {
"name": "Your Name"
}
}
EOF
2. Add Component Directories
# Create directories for plugin components
mkdir -p commands # Slash commands
mkdir -p agents # Custom agents
mkdir -p skills # Agent Skills
mkdir -p hooks # Event handlers
Result: Basic plugin structure ready for adding components.
Plugin Manifest (plugin.json)
Required Fields
{
"name": "plugin-name", // Lowercase, kebab-case
"description": "What it does", // Clear, concise description
"version": "1.0.0", // Semantic versioning
"author": {
"name": "Author Name" // Your name or organization
}
}
Optional Fields
{
"name": "my-plugin",
"description": "Advanced features",
"version": "1.2.0",
"author": {
"name": "Your Name",
"email": "you@example.com",
"url": "https://yoursite.com"
},
"repository": {
"type": "git",
"url": "https://github.com/user/repo"
},
"license": "MIT",
"keywords": ["productivity", "automation"]
}
Plugin Components
1. Commands (Slash Commands)
Create markdown files in commands/ directory:
# commands/review-security.md
---
description: Review code for security vulnerabilities
allowed-tools: Read(*), Grep(*)
---
Review the following files for common security issues:
- SQL injection vulnerabilities
- XSS vulnerabilities
- Hardcoded credentials
- Unsafe deserialization
$ARGUMENTS
Usage: /review-security @src/auth.js
2. Agents
Create agent configurations in agents/ directory:
# agents/code-reviewer.md
---
description: Reviews code for best practices
tools: [Read, Grep, Bash]
model: claude-sonnet-4
---
You are a code review specialist. When reviewing code:
1. Check for common patterns and anti-patterns
2. Verify error handling
3. Look for security issues
4. Suggest improvements
3. Skills
Create skill directories in skills/:
mkdir -p skills/my-skill
# Then create skills/my-skill/SKILL.md with proper frontmatter
See the claude-skills skill for comprehensive skill creation guidance.
4. Hooks
Create hooks/hooks.json to define event handlers:
{
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "echo 'File modified: $TOOL_ARGS' >> .claude/activity.log"
}
]
}
]
}
5. MCP Servers
Create .mcp.json for external tools:
{
"mcpServers": {
"my-server": {
"command": "node",
"args": ["server.js"],
"env": {
"API_KEY": "env:MY_API_KEY"
}
}
}
}
Complete Plugin Example
File Structure
weather-plugin/
├── .claude-plugin/
│ └── plugin.json
├── commands/
│ └── weather.md
├── agents/
│ └── forecast-analyst.md
├── skills/
│ └── weather-api/
│ └── SKILL.md
└── README.md
plugin.json
{
"name": "weather-plugin",
"description": "Weather forecasting and analysis tools",
"version": "1.0.0",
"author": {
"name": "Weather Team"
}
}
commands/weather.md
---
description: Get current weather for a location
argument-hint: <location>
---
Get the current weather conditions for: $ARGUMENTS
Include:
- Temperature
- Conditions
- Humidity
- Wind speed
agents/forecast-analyst.md
---
description: Analyzes weather patterns and forecasts
tools: [WebFetch, Read]
---
You are a weather analysis specialist. When asked about weather:
1. Gather current conditions
2. Analyze patterns
3. Provide forecast insights
4. Suggest appropriate actions
Distribution & Installation
Local Development
Test your plugin locally:
# Install from local directory
/plugin install /path/to/my-plugin@local
# Verify installation
/plugin list
Development Marketplace
Create a development marketplace for testing:
// ~/.claude/settings.json
{
"plugin-marketplaces": {
"dev": {
"url": "file:///path/to/marketplace-dir"
}
}
}
Team Distribution
Add to project settings for automatic installation:
// .claude/settings.json
{
"plugins": [
"my-plugin@company-marketplace"
],
"plugin-marketplaces": {
"company-marketplace": {
"url": "https://plugins.company.com"
}
}
}
Best Practices
Plugin Design
- Single responsibility: Each plugin should have a focused purpose
- Clear naming: Use descriptive, kebab-case names
- Semantic versioning: Follow SemVer for version numbers
- Documentation: Include comprehensive README.md
Directory Organization
my-plugin/
├── .claude-plugin/ # Manifest only
│ └── plugin.json
├── commands/ # At plugin root, not in .claude-plugin/
├── agents/ # At plugin root
├── skills/ # At plugin root
└── README.md # Usage documentation
IMPORTANT: Component directories go at the plugin root, NOT inside .claude-plugin/
Testing Checklist
- Plugin.json is valid JSON
- All required fields present
- Component directories at plugin root
- Commands have valid frontmatter
- Skills follow proper structure
- Local installation works
- No sensitive data in files
- README documents all features
Version Management
# Update version in plugin.json
{
"version": "1.1.0" // Increment for changes
}
# Breaking changes: 2.0.0
# New features: 1.1.0
# Bug fixes: 1.0.1
Common Patterns
Multi-Command Plugin
For related commands, use subdirectories:
git-tools/
├── .claude-plugin/plugin.json
└── commands/
├── commit.md
├── pr.md
└── review.md
Usage: /commit, /pr, /review
Agent + Skill Combination
Combine agents with specialized skills:
api-plugin/
├── .claude-plugin/plugin.json
├── agents/
│ └── api-specialist.md
└── skills/
└── rest-api/
└── SKILL.md
The agent can leverage the skill for specialized knowledge.
Hook-Based Automation
Use hooks for workflow automation:
{
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "npm run format $TOOL_ARGS"
}
]
}
]
}
Troubleshooting
Plugin Not Found
Issue: /plugin install can't find plugin
Solutions:
- Check marketplace configuration in settings.json
- Verify plugin name matches directory name
- Ensure plugin.json exists in
.claude-plugin/
Commands Not Available
Issue: Slash commands don't appear
Solutions:
- Verify commands are in
commands/at plugin root - Check markdown files have
.mdextension - Restart Claude Code to refresh
Invalid Structure Error
Issue: Plugin fails to load
Solutions:
- Ensure
.claude-plugin/plugin.jsonexists - Validate JSON syntax
- Move component directories to plugin root (not in
.claude-plugin/)
Security Considerations
Never Include
- API keys or credentials in plugin files
- Personal identifying information
- Proprietary code without permission
- Hardcoded paths to user-specific locations
Use Environment Variables
// .mcp.json
{
"mcpServers": {
"api-server": {
"env": {
"API_KEY": "env:MY_API_KEY" // Reference env var
}
}
}
}
Command Permissions
Limit tool access in command frontmatter:
---
allowed-tools: Read(src/**), Grep(src/**)
---
Plugin Template
Use this as a starting point:
#!/bin/bash
# create-plugin.sh <plugin-name>
PLUGIN_NAME=$1
mkdir -p "$PLUGIN_NAME"/{.claude-plugin,commands,agents,skills,hooks}
cat > "$PLUGIN_NAME/.claude-plugin/plugin.json" << EOF
{
"name": "$PLUGIN_NAME",
"description": "TODO: Add description",
"version": "0.1.0",
"author": {
"name": "TODO: Add author"
}
}
EOF
cat > "$PLUGIN_NAME/README.md" << EOF
# $PLUGIN_NAME
TODO: Add plugin description
## Installation
\`\`\`
/plugin install $PLUGIN_NAME@marketplace
\`\`\`
## Features
TODO: List features
## Usage
TODO: Add usage examples
EOF
echo "Plugin structure created in $PLUGIN_NAME/"
Resources
Quick Reference
Required Structure
plugin-name/
└── .claude-plugin/
└── plugin.json
Common Commands
# Install
/plugin install plugin-name@marketplace
# List installed
/plugin list
# Uninstall
/plugin uninstall plugin-name
Manifest Template
{
"name": "plugin-name",
"description": "What it does",
"version": "1.0.0",
"author": {"name": "Your Name"}
}
Remember: Plugins extend Claude Code with persistent, reusable functionality. Start simple with one or two components, test thoroughly, then expand based on actual needs.