doing-a-simple-two-sta…
Use when analyzing a large corpus of text, code, or data that exceeds a single agent's effective context - orchestrates parallel Worker subagents, Critic…
Use when creating a new Claude Code plugin or setting up plugin structure - provides complete file organization, manifest format, and component definitions for commands, agents, skills, hooks, and MCP servers
$ npx -y skills add ed3dai/ed3d-plugins --skill creating-a-plugin --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/creating-a-pluginContext preview
The summary Claude sees to decide when to auto-load this skill.
Use when creating a new Claude Code plugin or setting up plugin structure - provides complete file organization, manifest format, and component definitions for commands, agents, skills, hooks, and MCP servers
name: creating-a-plugin description: Use when creating a new Claude Code plugin or setting up plugin structure - provides complete file organization, manifest format, and component definitions for commands, agents, skills, hooks, and MCP servers user-invocable: false
A **Claude Code plugin** packages reusable components (commands, agents, skills, hooks, MCP servers) for distribution. Create a plugin when you have components that work across multiple projects.
**Don't create a plugin for:**
**Plugin storage locations:**
Minimal viable plugin:
1. Create directory: `my-plugin/` 2. Create `.claude-plugin/plugin.json` with at minimum:
{
"name": "my-plugin"
}3. Add components (commands, agents, skills, hooks, or MCP servers) 4. Test locally: `/plugin install file:///absolute/path/to/my-plugin` 5. Reload: `/plugin reload`
my-plugin/
.claude-plugin/
plugin.json # Required: plugin manifest
commands/ # Optional: slash commands
my-command.md
agents/ # Optional: specialized subagents
my-agent.md
skills/ # Optional: reusable techniques
my-skill/
SKILL.md
hooks/ # Optional: event handlers
hooks.json
.mcp.json # Optional: MCP server configs
README.md # Recommended: documentation**Critical:** The `.claude-plugin/` directory with `plugin.json` inside must exist at plugin root.
| Component | Location | File Format | When to Use | |-----------|----------|-------------|-------------| | Commands | `commands/*.md` | Markdown + YAML frontmatter | Custom slash commands for repetitive tasks | | Agents | `agents/*.md` | Markdown + YAML frontmatter | Specialized subagents for complex workflows | | Skills | `skills/*/SKILL.md` | Markdown + YAML frontmatter | Reusable techniques and patterns | | Hooks | `hooks/hooks.json` | JSON | Event handlers (format code, validate, etc.) | | MCP Servers | `.mcp.json` | JSON | External tool integrations |
**Minimal valid manifest:**
{
"name": "my-plugin"
}**Complete annotated manifest:**
{
"name": "my-plugin", // Required: kebab-case identifier
"version": "1.0.0", // Recommended: semantic versioning
"description": "What this plugin does", // Recommended: brief description
"author": { // Optional but recommended
"name": "Your Name",
"email": "you@example.com",
"url": "https://github.com/yourname"
},
"homepage": "https://github.com/yourname/my-plugin",
"repository": "https://github.com/yourname/my-plugin",
"license": "MIT",
"keywords": ["productivity", "automation"],
"commands": [ // Optional: explicit command paths
"./commands/cmd1.md",
"./commands/cmd2.md"
],
"agents": [ // Optional: explicit agent paths
"./agents/agent1.md"
],
"hooks": [ // Optional: inline hooks
{
"event": "PostToolUse",
"matcher": "Edit|Write",
"command": "npx prettier --write \"$CLAUDE_FILE_PATHS\""
}
],
"mcpServers": { // Optional: inline MCP configs
"my-server": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/my-server",
"args": ["--port", "8080"],
"env": {
"API_KEY": "${API_KEY}"
}
}
}
}**Key points:**
**File location:** `commands/my-command.md` creates `/my-command` slash command
**Nested commands:** `commands/feature/sub-command.md` creates `/plugin-name:feature:sub-command`
**Template:**
--- description: Brief description of what this command does allowed-tools: Read, Grep, Glob, Bash model: sonnet argument-hint: "[file-path]" --- # Command Name Your command prompt goes here. You can use: - $1, $2, etc. for positional arguments - $ARGUMENTS for all arguments as single string - @filename to include file contents - !bash command to execute shell commands Example implementation instructions...
**Frontmatter fields:**
**Complete example** (`commands/review-pr.md`):
--- description: Review pull request for security and best practices allowed-tools: Read, Grep, Glob, Bash model: opus argument-hint: "[pr-number]" --- # Pull Request Review Review pull request #$1 for: 1. Security vulnerabilities 2. Performance issues 3. Best practices compliance 4. Error handling Steps: 1. Use Bash to run: gh pr diff $1 2. Use Read to examine changed files 3. Use Grep to search for common anti-patterns 4. Provide structured feedback with file:line references Focus on critical issues first.
**File location:** `agents/code-reviewer.md` creates agent named "code-reviewer"
**Template:**
Ed's repo of Claude Code plugins, centered around a research-plan-implement workflow. Only a tiny bit cursed. If you're lucky.
Repo: ed3dai/ed3d-plugins
Use when analyzing a large corpus of text, code, or data that exceeds a single agent's effective context - orchestrates parallel Worker subagents, Critic…
Use when creating specialized subagents for Claude Code plugins or the Task tool - covers description writing for auto-delegation, tool selection, prompt…
Use when creating, releasing, or maintaining a Claude Code Plugin Marketplace - covers marketplace.json schema, version management, release checklists,…
Use when completing development phases or branches to identify and update CLAUDE.md or AGENTS.md files that may have become stale - analyzes what changed,…
Use when writing skills, CLAUDE.md files, agent prompts, or any directives that involve shell commands, environment variables, API credentials, file creation,…