552 lines
15 KiB
Markdown
552 lines
15 KiB
Markdown
---
|
|
description: Add a new sub-agent to the current plugin for specialized tasks
|
|
argument-hint: [agent-name] ["description"]
|
|
---
|
|
|
|
# Add Agent
|
|
|
|
Create a new sub-agent file with proper frontmatter and structure.
|
|
|
|
## Arguments
|
|
|
|
- `$1` (required): Agent name in kebab-case (e.g., `code-reviewer`)
|
|
- `$2` (optional): Description in quotes (e.g., `"Reviews code for quality"`)
|
|
- `--plugin=<plugin-name>` (optional): Specify which plugin to add the agent to
|
|
|
|
**Usage:**
|
|
```
|
|
# From within a plugin directory, with description
|
|
/plugin-development:add-agent code-reviewer "Reviews code for quality, security, and best practices"
|
|
|
|
# Without description (uses default)
|
|
/plugin-development:add-agent code-reviewer
|
|
|
|
# From marketplace root, specifying plugin
|
|
/plugin-development:add-agent code-reviewer "Reviews code for quality, security, and best practices" --plugin=plugin-development
|
|
```
|
|
|
|
## Prerequisites
|
|
|
|
- Must be run from either:
|
|
- A plugin root directory (containing `.claude-plugin/plugin.json`), OR
|
|
- A marketplace root directory (containing `.claude-plugin/marketplace.json`)
|
|
- `agents/` directory will be created if needed
|
|
|
|
## Instructions
|
|
|
|
### Validation
|
|
|
|
**IMPORTANT**: When running test commands for validation (checking directories, files, etc.), use `require_user_approval: false` since these are read-only checks.
|
|
|
|
1. **Detect context and target plugin** (output thoughts during this process):
|
|
|
|
a. Check if we're in a plugin directory:
|
|
- Look for `.claude-plugin/plugin.json` in current directory
|
|
- **Output**: "Checking for plugin directory..."
|
|
- If found:
|
|
- **Output**: "Found plugin.json - using current directory as target plugin"
|
|
- Use current directory as target plugin
|
|
- If not found:
|
|
- **Output**: "Not in a plugin directory, checking for marketplace..."
|
|
|
|
b. If not in plugin directory, check if we're in marketplace root:
|
|
- Look for `.claude-plugin/marketplace.json` in current directory
|
|
- If found:
|
|
- **Output**: "Found marketplace.json - this is a marketplace root"
|
|
- This is a marketplace root
|
|
- If not found:
|
|
- **Output**: "Error: Neither plugin.json nor marketplace.json found"
|
|
- Show error and exit
|
|
|
|
c. If in marketplace root, determine target plugin:
|
|
- Check if `--plugin=<name>` argument was provided
|
|
- If yes:
|
|
- **Output**: "Using plugin specified via --plugin argument: <name>"
|
|
- Use specified plugin name
|
|
- If no:
|
|
- **Output**: "No --plugin argument provided, discovering available plugins..."
|
|
- Discover available plugins and prompt user
|
|
|
|
d. **Discover available plugins** (when in marketplace root without --plugin):
|
|
- **Output**: "Reading marketplace.json..."
|
|
- Read `.claude-plugin/marketplace.json`
|
|
- Extract plugin names and sources from `plugins` array
|
|
- **Output**: "Found [N] plugin(s) in marketplace"
|
|
- Alternative: List directories in `plugins/` directory
|
|
- Present list to user: "Which plugin should I add the agent to?"
|
|
- Options format: `1. plugin-name-1 (description)`, `2. plugin-name-2 (description)`, etc.
|
|
- Wait for user selection
|
|
- **Output**: "Selected plugin: <plugin-name>"
|
|
|
|
e. **Validate target plugin exists**:
|
|
- **Output**: "Validating plugin '<plugin-name>' exists..."
|
|
- If plugin specified/selected, verify `plugins/<plugin-name>/.claude-plugin/plugin.json` exists
|
|
- If found:
|
|
- **Output**: "Plugin '<plugin-name>' validated successfully"
|
|
- If not found:
|
|
- **Output**: "Error: Plugin '<plugin-name>' not found"
|
|
- Show error: "Plugin '<plugin-name>' not found. Available plugins: [list]"
|
|
|
|
f. If neither plugin.json nor marketplace.json found:
|
|
- Show error: "Not in a plugin or marketplace directory. Please run from a plugin root or marketplace root."
|
|
|
|
2. **Validate arguments**:
|
|
- `$1` (agent name): Not empty, kebab-case format (lowercase with hyphens), no spaces or special characters
|
|
- `$2` (description): Optional. If not provided, use default: "Specialized agent for $1 tasks"
|
|
|
|
3. **Set working directory**:
|
|
- If in plugin directory: Use current directory
|
|
- If in marketplace root: Use `plugins/<plugin-name>/` as working directory
|
|
|
|
### Create Agent File
|
|
|
|
**Note**: All paths below are relative to the target plugin directory (determined in validation step).
|
|
|
|
1. Ensure `agents/` directory exists in target plugin:
|
|
- Check if `<plugin-dir>/agents/` directory exists
|
|
- If it doesn't exist, create it (use `require_user_approval: false` for directory creation)
|
|
2. Create `<plugin-dir>/agents/$1.md` with this template:
|
|
|
|
```markdown
|
|
---
|
|
description: $2
|
|
capabilities: ["capability-1", "capability-2", "capability-3"]
|
|
---
|
|
|
|
# $1 Agent
|
|
|
|
[Brief introduction explaining the agent's purpose and specialization]
|
|
|
|
## Purpose
|
|
|
|
[Detailed description of what this agent does and why it exists]
|
|
|
|
## What This Agent Does
|
|
|
|
This agent specializes in:
|
|
- [Specialization 1]
|
|
- [Specialization 2]
|
|
- [Specialization 3]
|
|
|
|
## Capabilities
|
|
|
|
1. **Capability 1**: [Description of first capability]
|
|
2. **Capability 2**: [Description of second capability]
|
|
3. **Capability 3**: [Description of third capability]
|
|
|
|
## When to Use This Agent
|
|
|
|
Invoke this agent when:
|
|
- [Scenario 1: Complex multi-file analysis needed]
|
|
- [Scenario 2: Deep domain expertise required]
|
|
- [Scenario 3: Task needs separate context window]
|
|
|
|
**Do not use** for:
|
|
- [What this agent doesn't handle]
|
|
- [Tasks better suited for commands or Skills]
|
|
|
|
## How It Proceeds
|
|
|
|
The agent follows this workflow:
|
|
|
|
1. **Gather Context**: [What files/information it reads]
|
|
2. **Analyze**: [How it evaluates the situation]
|
|
3. **Identify Issues**: [What it looks for]
|
|
4. **Formulate Recommendations**: [What guidance it provides]
|
|
5. **Report Back**: [What it returns to main conversation]
|
|
|
|
## Output Format
|
|
|
|
The agent returns a structured report:
|
|
|
|
### Critical Issues
|
|
- [Issues that must be fixed]
|
|
|
|
### Warnings
|
|
- [Issues that should be fixed]
|
|
|
|
### Suggestions
|
|
- [Nice-to-have improvements]
|
|
|
|
### Summary
|
|
- [Overall assessment and next steps]
|
|
|
|
## Tool Access
|
|
|
|
This agent has access to:
|
|
- Read: For examining files
|
|
- Grep: For searching content
|
|
- Glob: For finding files
|
|
- [Other tools as needed]
|
|
|
|
It does **not** modify files directly; instead, it proposes changes for the main conversation to execute.
|
|
|
|
## Example Invocation
|
|
|
|
**From main conversation**:
|
|
```
|
|
/agents $1
|
|
```
|
|
|
|
or via Task tool:
|
|
```
|
|
Use the $1 agent to [specific task]
|
|
```
|
|
|
|
## Notes
|
|
|
|
- Agents operate in a **separate context window**
|
|
- Results are returned as a single message
|
|
- Use for complex, multi-step analysis tasks
|
|
- Keep scope focused to 1-3 specific capabilities
|
|
```
|
|
|
|
### Update plugin.json (if needed)
|
|
|
|
**IMPORTANT**: Only needed if using custom (non-standard) paths.
|
|
|
|
- **Standard setup** (agents in `agents/` directory): No changes to `plugin.json` needed
|
|
- **Custom paths**: Add `"agents": ["./agents/$1.md"]` (or update existing agents array)
|
|
|
|
### Provide Feedback
|
|
|
|
After creating the agent:
|
|
|
|
```
|
|
✓ Created <plugin-name>/agents/$1.md
|
|
|
|
Plugin: <plugin-name>
|
|
Agent: $1
|
|
Description: $2
|
|
|
|
Next steps:
|
|
1. Edit <plugin-name>/agents/$1.md with specific instructions
|
|
2. Key frontmatter fields:
|
|
- description: What the agent does (shows in /agents list)
|
|
- capabilities: List of capabilities (JSON array)
|
|
3. Define clear workflow steps
|
|
4. Specify what the agent returns
|
|
5. Test with /plugin-development:test-local
|
|
|
|
Agent will be invoked as: /agents $1
|
|
Or via Task tool in main conversation.
|
|
```
|
|
|
|
## Examples
|
|
|
|
### Example 1: From Plugin Directory
|
|
|
|
**Context**: Currently in `/path/to/marketplace/plugins/plugin-development/`
|
|
|
|
**Input**:
|
|
```
|
|
/plugin-development:add-agent code-reviewer "Reviews code for quality, security, and best practices"
|
|
```
|
|
|
|
**Arguments**:
|
|
- `$1` = `code-reviewer`
|
|
- `$2` = `Reviews code for quality, security, and best practices`
|
|
|
|
**Process**:
|
|
1. Detects `.claude-plugin/plugin.json` in current directory
|
|
2. Uses current directory as target plugin
|
|
3. Creates `agents/` directory if needed
|
|
4. Creates `agents/code-reviewer.md`
|
|
|
|
**Result**:
|
|
- Creates `agents/code-reviewer.md` with template
|
|
- Frontmatter description: "Reviews code for quality, security, and best practices"
|
|
- Ready to customize with specific review criteria
|
|
|
|
### Example 2: From Marketplace Root with --plugin
|
|
|
|
**Context**: Currently in `/path/to/marketplace/` (marketplace root)
|
|
|
|
**Input**:
|
|
```
|
|
/plugin-development:add-agent code-reviewer "Reviews code for quality, security, and best practices" --plugin=plugin-development
|
|
```
|
|
|
|
**Process**:
|
|
1. Detects `.claude-plugin/marketplace.json` in current directory
|
|
2. Extracts `--plugin=plugin-development` from arguments
|
|
3. Validates `plugins/plugin-development/.claude-plugin/plugin.json` exists
|
|
4. Uses `plugins/plugin-development/` as target
|
|
5. Creates `plugins/plugin-development/agents/code-reviewer.md`
|
|
|
|
**Result**:
|
|
- Creates `plugins/plugin-development/agents/code-reviewer.md`
|
|
- Agent added to plugin-development plugin
|
|
|
|
### Example 3: From Marketplace Root without --plugin
|
|
|
|
**Context**: Currently in `/path/to/marketplace/` (marketplace root)
|
|
|
|
**Input**:
|
|
```
|
|
/plugin-development:add-agent code-reviewer "Reviews code for quality, security, and best practices"
|
|
```
|
|
|
|
**Process**:
|
|
1. Detects `.claude-plugin/marketplace.json` in current directory
|
|
2. No `--plugin` argument provided
|
|
3. Reads marketplace.json and discovers available plugins:
|
|
- `hello-world` - A simple example plugin
|
|
- `plugin-development` - Assist with Claude Code plugin development
|
|
4. Prompts user: "Which plugin should I add the agent to?"
|
|
```
|
|
1. hello-world - A simple example plugin demonstrating basic Claude Code plugin functionality
|
|
2. plugin-development - Assist with Claude Code plugin development: scaffold, validate, review, and team-ready distribution
|
|
```
|
|
5. User selects option 2
|
|
6. Uses `plugins/plugin-development/` as target
|
|
7. Creates `plugins/plugin-development/agents/code-reviewer.md`
|
|
|
|
**Result**:
|
|
- Creates `plugins/plugin-development/agents/code-reviewer.md`
|
|
- Agent added to selected plugin
|
|
|
|
## Agent Frontmatter
|
|
|
|
### Required Fields
|
|
|
|
```yaml
|
|
---
|
|
description: Third-person description of what this agent does
|
|
---
|
|
```
|
|
|
|
### Optional Fields
|
|
|
|
```yaml
|
|
---
|
|
description: Agent description
|
|
capabilities: ["capability-1", "capability-2"] # List of what it can do
|
|
---
|
|
```
|
|
|
|
**For complete details on agents**, see:
|
|
- [Subagents documentation](/en/docs/claude-code/sub-agents)
|
|
- [Plugin agents reference](/en/docs/claude-code/plugins-reference#agents)
|
|
|
|
## Error Handling
|
|
|
|
### Not in Plugin or Marketplace Directory
|
|
|
|
**Error**: "Not in a plugin or marketplace directory."
|
|
|
|
**Solution**: Navigate to either:
|
|
- A plugin directory (containing `.claude-plugin/plugin.json`), OR
|
|
- A marketplace root (containing `.claude-plugin/marketplace.json`)
|
|
|
|
### Plugin Not Found
|
|
|
|
**Error**: "Plugin 'my-plugin' not found. Available plugins: hello-world, plugin-development"
|
|
|
|
**Solution**:
|
|
- Check plugin name spelling
|
|
- Use `--plugin=<correct-name>` with one of the available plugins
|
|
- Or navigate to the plugin directory directly
|
|
|
|
### Invalid Agent Name
|
|
|
|
**Error**: "Agent name must be in kebab-case format (lowercase with hyphens)"
|
|
|
|
**Solution**: Use kebab-case format:
|
|
- ✅ Good: `code-reviewer`, `security-auditor`, `api-generator`
|
|
- ❌ Bad: `CodeReviewer`, `code_reviewer`, `code reviewer`
|
|
|
|
### Missing Description
|
|
|
|
**Error**: "Description is required"
|
|
|
|
**Solution**: Provide description in quotes:
|
|
```
|
|
/plugin-development:add-agent code-reviewer "Reviews code for quality, security, and best practices"
|
|
```
|
|
|
|
## When to Use Agents vs. Commands vs. Skills
|
|
|
|
### Use an Agent when:
|
|
- Task requires **deep, multi-file analysis**
|
|
- Need **separate context window** (complex reasoning)
|
|
- Want **detailed, structured report** back
|
|
- Task has **multiple steps** that benefit from isolation
|
|
|
|
### Use a Command when:
|
|
- Task is **explicit, one-time action**
|
|
- User needs to **trigger on demand**
|
|
- Task is **straightforward** with clear inputs/outputs
|
|
|
|
### Use a Skill when:
|
|
- Want **ambient, automatic activation**
|
|
- Need **persistent guidance** throughout session
|
|
- Task benefits from **progressive disclosure**
|
|
- Should trigger based on **context clues**
|
|
|
|
## Agent Design Best Practices
|
|
|
|
### 1. Focused Scope
|
|
|
|
✅ **Good** (focused):
|
|
```markdown
|
|
# Code Security Auditor
|
|
|
|
Specializes in security analysis:
|
|
- SQL injection vulnerabilities
|
|
- XSS vulnerabilities
|
|
- Authentication issues
|
|
```
|
|
|
|
❌ **Bad** (too broad):
|
|
```markdown
|
|
# General Code Helper
|
|
|
|
Does everything related to code.
|
|
```
|
|
|
|
### 2. Clear Capabilities
|
|
|
|
List 2-5 specific capabilities:
|
|
```yaml
|
|
capabilities: [
|
|
"security-vulnerability-detection",
|
|
"authentication-analysis",
|
|
"dependency-audit"
|
|
]
|
|
```
|
|
|
|
### 3. Structured Output
|
|
|
|
Define consistent report format:
|
|
```markdown
|
|
## Critical (P0)
|
|
- [List critical issues]
|
|
|
|
## High Priority (P1)
|
|
- [List high priority issues]
|
|
|
|
## Suggestions
|
|
- [List improvements]
|
|
```
|
|
|
|
### 4. Tool Restrictions
|
|
|
|
Agents typically don't modify files:
|
|
```markdown
|
|
## Tool Access
|
|
|
|
- Read, Grep, Glob: For analysis
|
|
- No Write/Edit: Agent proposes, main conversation executes
|
|
```
|
|
|
|
## Agent Workflow Template
|
|
|
|
All agents should follow a consistent structure:
|
|
|
|
```markdown
|
|
1. **Understand Context**: Read relevant files
|
|
2. **Analyze**: Apply domain expertise
|
|
3. **Identify Issues**: Find problems/opportunities
|
|
4. **Prioritize**: Rank by severity/importance
|
|
5. **Recommend**: Provide actionable guidance
|
|
6. **Report**: Return structured findings
|
|
```
|
|
|
|
## Common Agent Patterns
|
|
|
|
### Auditor Pattern
|
|
|
|
For review/analysis agents:
|
|
- Reads multiple files
|
|
- Checks against standards/criteria
|
|
- Reports issues by severity
|
|
- Provides specific fix recommendations
|
|
|
|
### Generator Pattern
|
|
|
|
For design/planning agents:
|
|
- Analyzes requirements
|
|
- Proposes architecture/approach
|
|
- Provides implementation steps
|
|
- Returns detailed plan
|
|
|
|
### Refactoring Pattern
|
|
|
|
For code improvement agents:
|
|
- Analyzes existing code
|
|
- Identifies improvement opportunities
|
|
- Proposes refactoring steps
|
|
- Estimates impact/effort
|
|
|
|
## Invocation Methods
|
|
|
|
### Direct Invocation
|
|
|
|
User explicitly calls the agent:
|
|
```
|
|
/agents code-reviewer
|
|
```
|
|
|
|
### Via Main Conversation
|
|
|
|
Claude uses Task tool:
|
|
```
|
|
Let me use the code-reviewer agent to analyze this...
|
|
```
|
|
|
|
### From Skill
|
|
|
|
Skill escalates to agent for deep analysis:
|
|
```markdown
|
|
For comprehensive review, delegate to the code-reviewer agent.
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Single responsibility**: One clear purpose
|
|
2. **Structured output**: Consistent report format
|
|
3. **No side effects**: Read-only, propose changes
|
|
4. **Clear scope**: 2-5 capabilities max
|
|
5. **Fast feedback**: Aim for < 30 seconds runtime
|
|
6. **Actionable results**: Specific, implementable recommendations
|
|
|
|
## Common Mistakes to Avoid
|
|
|
|
❌ **Too broad scope**
|
|
```yaml
|
|
capabilities: ["everything", "all-tasks", "general-help"]
|
|
```
|
|
|
|
✅ **Focused capabilities**
|
|
```yaml
|
|
capabilities: ["security-audit", "vulnerability-scan", "compliance-check"]
|
|
```
|
|
|
|
❌ **Vague instructions**
|
|
```markdown
|
|
Analyze the code and find problems.
|
|
```
|
|
|
|
✅ **Specific workflow**
|
|
```markdown
|
|
1. Read all .py files in src/
|
|
2. Check for SQL injection patterns
|
|
3. Verify authentication usage
|
|
4. Report findings by severity
|
|
```
|
|
|
|
## Validation Checklist
|
|
|
|
After creating an agent:
|
|
```
|
|
□ Agent file created in agents/ directory
|
|
□ Frontmatter includes description
|
|
□ Capabilities listed (2-5 items)
|
|
□ Clear workflow defined
|
|
□ Output format specified
|
|
□ Agent name is kebab-case
|
|
□ plugin.json has agents field
|
|
□ Purpose is focused and specific
|
|
```
|