# Subagent Creation Guide ## Overview Subagents are specialized AI agents with custom system prompts and behaviors. They extend Claude Code's capabilities by providing domain expertise and focused workflows. **Official Documentation**: https://docs.claude.com/en/docs/claude-code/sub-agents.md ## When to Create a Subagent Create a subagent when you need: - Specialized domain expertise (e.g., iOS development, technical writing) - Consistent behavior patterns for specific tasks - Delegatable workflows that run independently - Context isolation from the main session ## File Structure Subagents are markdown files with YAML frontmatter: ```markdown --- name: agent-name description: Agent description with usage examples model: inherit color: green tools: Read, Write, Edit, Bash, Glob --- [Agent system prompt content] ``` ### Location - Personal: `~/.claude/agents/` - Plugin: `/agents/` - Project: `.claude/agents/` ## YAML Frontmatter Fields ### Required Fields **`name`** (string, kebab-case) - Unique identifier for the agent - Used in Task tool invocations - Example: `ios-swift-expert`, `technical-writer` **`description`** (string) - Clear explanation of what the agent does - Should include usage examples wrapped in `` tags - Visible to users when selecting agents - Example: ```yaml description: Expert in Python linting and code quality analysis. Use when reviewing Python code for style violations, potential bugs, or best practice violations. Examples: user: "Review my Python code for linting issues" assistant: "Let me use the python-linter agent to analyze your code for quality issues" Python linting requires knowledge of PEP 8 and common Python anti-patterns. ``` ### Optional Fields **`model`** (string) - Specifies which model to use - Use `inherit` to use the same model as the parent session - Default: `inherit` - Other options: specific model identifiers (use sparingly) **`color`** (string) - Display color in the UI - Options: `blue`, `green`, `yellow`, `red`, `purple`, `cyan`, `magenta` - Default: system default **`tools`** (comma-separated list) - Pre-approve specific tools for the agent - Common tools: `Read`, `Write`, `Edit`, `Bash`, `Glob`, `Grep`, `WebFetch` - Restricts agent to only listed tools (improves focus and safety) - Example: `tools: Read, Write, Edit` ## System Prompt Best Practices ### Structure 1. **Identity Statement**: Clearly state what the agent is ```markdown You are an expert in iOS and macOS development with deep knowledge of Swift, SwiftUI, UIKit, and Apple frameworks. ``` 2. **Expertise Areas**: List specific capabilities ```markdown ## Your Expertise You specialize in: - Swift language features and best practices - SwiftUI declarative interface design - UIKit view hierarchies and lifecycle ``` 3. **Workflow Guidance**: Provide step-by-step processes ```markdown ## Workflow When implementing features: 1. Analyze requirements 2. Design data models 3. Create views 4. Test functionality ``` 4. **Reference Resources**: Link to documentation ```markdown ## Documentation References - Apple Developer: https://developer.apple.com/documentation/ - Swift.org: https://swift.org/documentation/ ``` 5. **Success Criteria**: Define what good looks like ```markdown ## Success Criteria Your code is successful when: - It compiles without warnings - It follows Swift API design guidelines - It handles errors appropriately ``` ### Writing Effective Prompts **Do:** - Be specific about the agent's expertise boundaries - Include concrete examples of when to use the agent - Provide step-by-step workflows for common tasks - Reference authoritative documentation - Define clear success criteria **Don't:** - Make the agent too general-purpose - Include tasks better suited for skills or commands - Duplicate main Claude Code capabilities - Create overly complex nested workflows ## Naming Conventions - Use **kebab-case** for agent names - Be descriptive but concise - Indicate domain or specialty - Examples: - `ios-swift-expert` - `technical-writer` - `cli-ux-designer` - `yaml-recipe-expert` ## Testing Your Subagent 1. **Invoke with Task tool**: ``` Use the Task tool with subagent_type="your-agent-name" ``` 2. **Verify behavior**: - Does it stay focused on its domain? - Does it follow the workflow you defined? - Does it have appropriate tool access? 3. **Iterate**: - Refine system prompt based on actual usage - Adjust tool preapprovals as needed - Update examples in description ## Common Patterns ### Domain Expert Pattern ```markdown --- name: domain-expert description: Expert in specific technology or domain model: inherit color: blue tools: Read, Write, Edit, Bash --- You are an expert in [specific domain]. ## Your Expertise [List specific capabilities] ## Workflow [Define standard processes] ## Best Practices [Domain-specific guidelines] ``` ### Workflow Automation Pattern ```markdown --- name: workflow-automator description: Automates specific multi-step workflows model: inherit color: green tools: Read, Write, Edit, Bash, Grep, Glob --- You automate [specific workflow]. ## Workflow Steps 1. [Step 1] 2. [Step 2] 3. [Step 3] ## Tool Usage [How to use preapproved tools] ## Success Criteria [What constitutes successful completion] ``` ## Integration with Plugins When creating subagents as part of plugins: 1. Place in `agents/` subdirectory of plugin 2. Register in `.claude-plugin/marketplace.json`: ```json { "agents": { "agent-name": "./agents/agent-name.md" } } ``` 3. Document in plugin README.md 4. Consider whether a **skill** might be more appropriate (skills auto-activate based on context) ## Subagents vs Skills vs Commands **Use Subagents when:** - You need context isolation - Workflow is delegatable and self-contained - You want explicit invocation control - Agent requires specialized model or tools **Use Skills when:** - You want automatic activation based on context - Guidance should always be available - Users shouldn't need to remember to invoke it - Example: Code formatting rules, design patterns **Use Commands when:** - Workflow is simple and linear - You want a quick shortcut - No complex decision-making needed - Example: Run tests, format code ## Example: Complete Subagent ```markdown --- name: api-designer description: Expert API designer specializing in RESTful and GraphQL APIs. Use when designing API endpoints, defining schemas, or establishing API conventions. Examples: user: "Help me design a REST API for user management" assistant: "Let me use the api-designer agent to create a well-structured API" API design requires expertise in REST principles and best practices. model: inherit color: cyan tools: Read, Write, Edit --- You are an expert API designer with deep knowledge of REST, GraphQL, OpenAPI, and API best practices. ## Your Expertise You specialize in: - RESTful API design following Richardson Maturity Model - GraphQL schema design and query optimization - OpenAPI/Swagger specification authoring - API versioning strategies - Authentication and authorization patterns (OAuth 2.0, JWT, API keys) - Rate limiting and pagination patterns - Error response design - API documentation ## Workflow When designing APIs: 1. **Understand Requirements** - Identify resources and relationships - Determine access patterns - Consider scalability needs 2. **Choose Architecture** - REST for resource-oriented APIs - GraphQL for flexible data fetching - Consider hybrid approaches 3. **Design Endpoints/Schema** - Follow naming conventions - Use appropriate HTTP methods - Design consistent response formats - Handle errors gracefully 4. **Document** - Create OpenAPI specification (REST) - Generate schema documentation (GraphQL) - Provide usage examples - Document authentication ## Best Practices ### REST APIs - Use nouns for resources, not verbs - Leverage HTTP methods (GET, POST, PUT, PATCH, DELETE) - Version using URL path (`/v1/users`) or headers - Return appropriate status codes - Use HATEOAS for discoverability (Level 3 maturity) ### GraphQL APIs - Design schema-first - Use meaningful type names - Implement proper error handling - Optimize for N+1 query problem - Provide pagination using cursor-based approach ### Common Patterns - Use UUIDs for public IDs - Implement request/response logging - Support filtering, sorting, pagination - Include rate limit headers - Use JSON:API or HAL for hypermedia ## Reference Documentation - REST: https://restfulapi.net/ - GraphQL: https://graphql.org/learn/ - OpenAPI: https://swagger.io/specification/ - HTTP Status Codes: https://httpstatuses.com/ ## Success Criteria Your API design is successful when: - It follows industry standards and conventions - Resources and endpoints are intuitive - Error handling is comprehensive and clear - Documentation enables easy integration - Design scales with usage growth ```