plugin-master
Complete guide to Claude Code plugin development, architecture, directory layout, components, and marketplace publishing. PROACTIVELY activate for: (1) creating a plugin from scratch, (2) building or scaffolding a plugin, (3) writing plugin.json, (4) adding commands/agents/skills/hooks/MCP servers, (5) packaging code as a plugin, (6) publishing to a marketplace, (7) validating plugin structure, (8) marketplace.json registration, (9) cross-platform compatibility, (10) version and metadata sync. Provides: plugin schema, layouts, workflows, and publishing steps.
How do I install this agent skill?
npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill plugin-masterIs this agent skill safe to install?
- Gen Agent Trust Hubpass
This skill provides comprehensive documentation, architectural patterns, and scaffolding templates for developing Claude Code plugins. It includes guides for creating agents, commands, skills, and hooks, as well as instructions for marketplace publishing and local testing. No security risks or malicious patterns were detected.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
- Runlayerwarn
6/6 files flagged
What does this agent skill do?
Plugin Development Guide
Quick Reference
| Component | Location | Required |
|---|---|---|
| Plugin manifest | .claude-plugin/plugin.json | Yes |
| Commands | commands/*.md | No (auto-discovered) |
| Agents | agents/*.md | No (auto-discovered) |
| Skills | skills/*/SKILL.md | No (auto-discovered) |
| Hooks | hooks/hooks.json | No |
| MCP Servers | .mcp.json | No |
| Task | Action |
|---|---|
| Create plugin | Ask: "Create a plugin for X" |
| Validate plugin | Run: /validate-plugin |
| Install from marketplace | /plugin marketplace add user/repo then /plugin install name@user |
Critical Rules
Directory Structure
plugin-name/
├── .claude-plugin/
│ └── plugin.json # MUST be inside .claude-plugin/
├── agents/
│ └── domain-expert.md
├── commands/
├── skills/
│ └── skill-name/
│ ├── SKILL.md
│ ├── references/
│ └── examples/
└── README.md
Plugin.json Schema
{
"name": "plugin-name",
"version": "1.0.0",
"description": "Complete [domain] expertise. PROACTIVELY activate for: (1) ...",
"author": {
"name": "Author Name",
"email": "email@example.com"
},
"license": "MIT",
"keywords": ["keyword1", "keyword2"]
}
Validation Rules:
authorMUST be an object{ "name": "..." }- NOT a stringversionMUST be a string"1.0.0"- NOT a numberkeywordsMUST be an array["word1", "word2"]- NOT a string- Do NOT include
agents,skills,slashCommands- these are auto-discovered
YAML Frontmatter (REQUIRED)
ALL markdown files in agents/, commands/, skills/ MUST begin with frontmatter:
---
description: Brief description of what this component does
---
# Content...
Without frontmatter, components will NOT load.
Plugin Design Philosophy (2025)
Agent-First Design
- Primary interface: ONE expert agent named
{domain}-expert - Minimal commands: Only 0-2 for automation workflows
- Why: Users want conversational interaction, not command menus
Naming Standard:
docker-master→ agent nameddocker-expertterraform-master→ agent namedterraform-expert
Progressive Disclosure for Skills
Skills use three-tier loading:
- Frontmatter - Loaded at startup for triggering
- SKILL.md body - Loaded when skill activates
- references/ - Loaded only when specific detail needed
This enables unbounded capacity without context bloat.
Creating a Plugin
Step 1: Detect Repository Context
Before creating files, check:
# Check if in marketplace repo
if [[ -f .claude-plugin/marketplace.json ]]; then
PLUGIN_DIR="plugins/PLUGIN_NAME"
else
PLUGIN_DIR="PLUGIN_NAME"
fi
# Get author from git config
AUTHOR_NAME=$(git config user.name)
AUTHOR_EMAIL=$(git config user.email)
Step 2: Create Structure
mkdir -p $PLUGIN_DIR/.claude-plugin
mkdir -p $PLUGIN_DIR/agents
mkdir -p $PLUGIN_DIR/skills/domain-knowledge
Step 3: Create Files
- plugin.json - Manifest with metadata
- agents/domain-expert.md - Primary expert agent
- skills/domain-knowledge/SKILL.md - Core knowledge
- README.md - Documentation
Step 4 (conditional): Attribution manifest
If the plugin ships any vendored, derived, or licensed third-party content, create NOTICES.md at the plugin root before registering in the marketplace. Treat it as a first-class shipping artifact alongside plugin.json and README.md, not as doc polish. See references/publishing-guide.md ("Licensed / Vendored / Derived Content" checklist) for the structural integrity, license-text-preservation, and cross-reference requirements.
If the plugin contains no third-party content, skip this step.
Step 5: Register in Marketplace
CRITICAL: If .claude-plugin/marketplace.json exists at repo root, you MUST add the plugin:
{
"plugins": [
{
"name": "plugin-name",
"source": "./plugins/plugin-name",
"description": "Same as plugin.json description",
"version": "1.0.0",
"author": { "name": "Author" },
"keywords": ["same", "as", "plugin.json"]
}
]
}
Component Types
Commands
User-initiated slash commands in commands/*.md:
---
description: What this command does
---
# Command Name
Instructions for Claude to execute...
Agents
Autonomous subagents in agents/*.md:
---
name: agent-name
description: |
Brief role summary. PROACTIVELY activate for: (1) trigger, (2) trigger, ..., (N) trigger. Provides: capability list.
# Optional. Include 3-5 <example> blocks ONLY when the agent body
# exceeds 2,500 words. Lean orchestrators omit them by design.
# See agent-development "Example-block requirement by agent body size".
model: inherit
color: blue
---
System prompt for agent...
Skills
Dynamic knowledge in skills/skill-name/SKILL.md:
---
name: skill-name
description: When to use this skill...
---
# Skill content with progressive disclosure...
Hooks
Event automation in hooks/hooks.json:
{
"PostToolUse": [{
"matcher": "Write|Edit",
"hooks": [{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/lint.sh"
}]
}]
}
Events: PreToolUse, PostToolUse, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification, Stop, SubagentStop
Best Practices
Naming Conventions
- Plugins:
kebab-case(e.g.,code-review-helper) - Commands: verb-based (e.g.,
review-pr,run-tests) - Agents: role-based (e.g.,
code-reviewer,test-generator) - Skills: topic-based (e.g.,
api-design,error-handling)
Portability
Use ${CLAUDE_PLUGIN_ROOT} for all internal paths:
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/run.sh"
Never use hardcoded absolute paths.
Platform Notes
- Windows: Use GitHub marketplace installation (local paths may fail)
- Git Bash/MinGW: Detect with
$MSYSTEM, use GitHub method - Mac/Linux: All installation methods work
Troubleshooting
| Issue | Solution |
|---|---|
| Plugin not loading | Check plugin.json is in .claude-plugin/ |
| Commands missing | Verify frontmatter has description field |
| Agent not triggering | Check description has PROACTIVELY activate for: enumeration. Add 3-5 <example> blocks only if agent body > 2,500 words — see agent-development SKILL.md "Example-block requirement by agent body size". Lean orchestrators are exempt. |
| Marketplace not found | Ensure repo is public, check path in marketplace.json |
Additional Resources
For detailed information, see:
references/manifest-reference.md- Complete plugin.json fieldsreferences/component-patterns.md- Advanced component patternsreferences/publishing-guide.md- Marketplace publishing detailsexamples/minimal-plugin.md- Simplest working pluginexamples/full-plugin.md- Complete plugin with all features
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/josiahsiegel/claude-plugin-marketplace/plugin-master">View plugin-master on skillZs</a>