brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
plugin-authoringCreates Claude Code plugins that package skills, agents, hooks, and MCP servers into distributable bundles. Covers plugin.json manifest, directory structure, namespacing, and distribution. Follows official Anthropic best practices. USE WHEN: user mentions "create plugin", "plugin", "plugin.json", "distribute skills", "share agents", "plugin marketplace", "…
Independent GitHub snapshot · Automated classification · Original documentation governs
name: plugin-authoring description: | Creates Claude Code plugins that package skills, agents, hooks, and MCP servers into distributable bundles. Covers plugin.json manifest, directory structure, namespacing, and distribution. Follows official Anthropic best practices.
USE WHEN: user mentions "create plugin", "plugin", "plugin.json", "distribute skills", "share agents", "plugin marketplace", "package extension", ".claude-plugin"
skill-authoring;
creating standalone agents - use agent-authoring;
creating standalone hooks - use hook-authoring
allowed-tools: Read, Grep, Glob, Write, EditPlugins bundle skills, agents, hooks, and MCP servers into shareable packages. Skills get namespaced: /plugin-name:skill-name.
my-plugin/
├── .claude-plugin/
│ └── plugin.json # Manifest (ONLY file inside .claude-plugin/)
├── skills/ # Agent Skills with SKILL.md
│ └── code-review/
│ └── SKILL.md
├── commands/ # Skills as simple Markdown files
│ └── review.md
├── agents/ # Custom agent definitions
│ └── reviewer.md
├── hooks/
│ └── hooks.json # Hook configurations
├── .mcp.json # MCP server configurations
├── .lsp.json # LSP server configurations
├── settings.json # Default settings (only "agent" key supported)
└── README.md # Documentation
Critical: skills/, agents/, hooks/ go at plugin root, NOT inside .claude-plugin/.
See quick-ref/manifest-schema.md for the complete schema.
{
"name": "my-plugin",
"description": "A code quality plugin with review skills and formatting hooks",
"version": "1.0.0",
"author": {
"name": "Your Name"
},
"homepage": "https://github.com/user/my-plugin",
"repository": "https://github.com/user/my-plugin",
"license": "MIT"
}
name: unique identifier, becomes skill namespace prefixversion: semantic versioning (MAJOR.MINOR.PATCH)name and description are requiredPlugin skills are prefixed: /my-plugin:hello, /my-plugin:review.
This prevents conflicts between plugins with same skill names.
Same as standalone skills but in plugin-root/skills/. Each needs SKILL.md with frontmatter.
Same Markdown format as .claude/agents/. Placed in plugin-root/agents/.
Create hooks/hooks.json — same format as hooks in settings.json:
{
"hooks": {
"PostToolUse": [{
"matcher": "Write|Edit",
"hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs prettier --write" }]
}]
}
}
Configure in .mcp.json at plugin root. Use ${CLAUDE_PLUGIN_ROOT} for relative paths:
{
"my-server": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/my-server",
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
"env": { "API_KEY": "${API_KEY}" }
}
}
settings.json at plugin root — currently only agent key supported:
{ "agent": "security-reviewer" }
This activates the named agent as main thread when plugin is enabled.
# Test locally (no install needed)
claude --plugin-dir ./my-plugin
# Multiple plugins
claude --plugin-dir ./plugin-one --plugin-dir ./plugin-two
# Verify components
/help # Skills listed under namespace
/agents # Agents visible
/mcp # MCP servers running
Changes require restart to take effect.
.claude/plugins.json| Standalone | Plugin |
|---|---|
| Personal workflow | Sharing with team/community |
| Single project | Reusable across projects |
| Quick experiments | Versioned releases |
Short names (/hello) | Namespaced (/plugin:hello) |
Tip: Start standalone in .claude/, convert to plugin when ready to share.
| Anti-Pattern | Fix |
|---|---|
Components inside .claude-plugin/ | Only plugin.json goes there; rest at root |
| No description in plugin.json | Required for discovery |
| Hardcoded paths in MCP config | Use ${CLAUDE_PLUGIN_ROOT} |
| Missing README | Add docs for users installing the plugin |
.claude-plugin/plugin.json with name, description, version${CLAUDE_PLUGIN_ROOT} for paths--plugin-dir