From fieldguides
This skill should be used when creating plugins, publishing to marketplaces, or when plugin.json, marketplace, create plugin, or distribute plugin are mentioned.
How this skill is triggered — by the user, by Claude, or both
Slash command
/fieldguides:claude-pluginsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Complete lifecycle for developing, validating, and distributing Claude Code plugins.
Complete lifecycle for developing, validating, and distributing Claude Code plugins.
plugin.jsonclaude-craft skillclaude-craft skillclaude-craft skillskillcraft skill# 1. Scaffold plugin
./scripts/scaffold-plugin.sh my-plugin --with-commands
# 2. Add components (commands, agents, hooks, skills)
# 3. Test locally
/plugin marketplace add ./my-plugin
/plugin install my-plugin@my-plugin
# 4. Distribute
git push origin main --tags
Discovery -> Init -> Components -> Validate -> Distribute -> Marketplace
| | | | | |
v v v v v v
Purpose Scaffold Commands Structure Package Catalog
Scope plugin.json Agents Testing Version Publish
Type README Hooks Quality Release Share
Before creating a plugin, clarify:
| Question | Impact |
|---|---|
| What problem does this solve? | Plugin scope and features |
| Who will use it? | Distribution method |
| What components are needed? | Commands, agents, hooks, MCP servers |
| Where will it live? | Personal, project, or marketplace |
Standalone plugins need their own .claude-plugin/plugin.json:
my-plugin/
├── .claude-plugin/
│ └── plugin.json # Required for standalone
├── README.md # Required for distribution
├── commands/ # Optional components
├── agents/
├── skills/
└── hooks/
{
"name": "my-plugin",
"version": "1.0.0",
"description": "Brief description of what this plugin does",
"author": {
"name": "Your Name",
"email": "[email protected]"
},
"license": "MIT"
}
For marketplaces where all plugins live in the same repo, use strict: false to consolidate metadata. Plugins don't need their own manifests:
my-marketplace/
├── .claude-plugin/
│ └── marketplace.json # All metadata here (strict: false)
├── plugin-a/
│ └── commands/
├── plugin-b/
│ └── skills/
└── README.md
{
"name": "my-marketplace",
"owner": {
"name": "Team Name",
"email": "[email protected]"
},
"strict": false,
"plugins": [
{
"name": "plugin-a",
"source": "./plugin-a",
"version": "1.0.0",
"description": "Plugin A",
"license": "MIT"
},
{
"name": "plugin-b",
"source": "./plugin-b",
"version": "1.0.0",
"description": "Plugin B",
"license": "MIT"
}
]
}
Benefits: Single source of truth, no version drift between marketplace and plugin manifests.
For external plugins (GitHub repos), use minimal entries and let the external repo own its manifest.
See structure.md for complete plugin.json schema.
Add components based on plugin needs. See Steps section for which skills to load.
Create custom commands in commands/ directory:
---
description: "Review code for quality issues"
---
Review the following code: {{0}}
Check for: code style, bugs, performance, security
For complex commands, load the claude-craft skill.
Define specialized agents in agents/ directory:
---
name: security-reviewer
description: "Security-focused code reviewer"
---
You are a security expert. When reviewing code:
1. Check for vulnerabilities
2. Verify input validation
3. Report issues with severity levels
For agent design patterns, load the claude-craft skill.
Two ways to define hooks:
File-based (auto-discovered from hooks/hooks.json):
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh"
}
]
}
]
}
}
Inline in plugin.json - same structure, add "hooks" key directly.
Hook types: PreToolUse, PostToolUse, UserPromptSubmit, Stop, SessionStart, SessionEnd
For hook implementation, load the claude-craft skill. See structure.md for hook JSON format and script interface.
Add reusable methodology patterns in skills/ directory. For skill authoring, load the skillcraft skill.
{
"mcpServers": {
"my-server": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/my-server",
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
"env": { "API_KEY": "${MY_API_KEY}" }
}
}
}
Path variables: ${CLAUDE_PLUGIN_ROOT} (plugin directory), ${VAR_NAME} (env var)
When plugins are installed, Claude Code copies them to a cache directory. This has implications:
../../shared/file.md will not work after installskill-name) instead of file referencesSee caching.md for workarounds and best practices.
Before distribution, validate the plugin. See audit.md for detailed per-component checklists, severity levels, and output format.
Structure:
strict: falseComponents:
chmod +x)Documentation:
# Add as local marketplace
/plugin marketplace add ./my-plugin
# Install and test
/plugin install my-plugin@my-plugin
# Test commands
/my-command arg1 arg2
See structure.md for validation commands and detailed component schemas.
Follow semver (MAJOR.MINOR.PATCH):
# 1. Update version in plugin.json
# 2. Update CHANGELOG.md
# 3. Commit and tag
git add plugin.json CHANGELOG.md
git commit -m "chore: release v1.0.0"
git tag v1.0.0
git push origin main --tags
# 4. Create GitHub release
gh release create v1.0.0 --title "v1.0.0" --notes "Initial release"
| Method | Best For | Setup |
|---|---|---|
| GitHub repo | Public/team plugins | Push to GitHub |
| Git URL | GitLab, Bitbucket | Full URL in source |
| Local path | Development/testing | Relative path |
See distribution.md for packaging, CI/CD, and release automation.
A marketplace catalogs plugins for discovery and installation.
Create .claude-plugin/marketplace.json:
{
"name": "my-marketplace",
"owner": { "name": "Team Name", "email": "[email protected]" },
"plugins": [{ "name": "my-plugin", "source": "./plugins/my-plugin" }]
}
// Relative path
{"source": "./plugins/my-plugin"}
// GitHub
{"source": {"source": "github", "repo": "owner/plugin-repo", "ref": "v1.0.0"}}
// Git URL
{"source": {"source": "url", "url": "https://gitlab.com/team/plugin.git"}}
/plugin marketplace add owner/repo # Add marketplace
/plugin marketplace list # List available
/plugin install plugin-name@marketplace # Install from marketplace
/plugin marketplace update marketplace # Update
See marketplace.md for full schema, team configuration, and hosting strategies.
dev-tools)review-pr)security-reviewer)Plugin not loading:
jq empty .claude-plugin/plugin.jsonstrict: false if no plugin.jsonCommands not appearing:
commands/ directoryHooks not executing:
chmod +xMCP servers failing:
~/Library/Logs/Claude/ALWAYS:
.claude-plugin/plugin.jsonstrict: false and consolidate metadata in marketplace.jsonNEVER:
../) for cross-plugin resourcesclaude-craft - Agents, commands, hooks, skills, rules, and configskillcraft - Cross-platform skill creation patternsnpx claudepluginhub outfitter-dev/outfitter --plugin fieldguidesGuides developers in creating, scaffolding, validating, and publishing Claude Code plugins including directory structure, plugin.json schema, YAML frontmatter, agents, commands, skills, and marketplace deployment.
Develops Claude Code plugins through planning, structure setup, component addition (skills, commands, hooks, MCP), dev marketplace testing, release workflows, with patterns and examples.
Guides creation of Claude Code plugins including commands, agents, hooks, MCP servers, skills, directory structure, and plugin.json manifest schema.