Claude Agent Development
Create and validate specialized subagents that extend Claude Code with focused expertise.
Agents vs Skills
Critical distinction:
| Aspect | Agents (This Skill) | Skills |
|---|---|---|
| Purpose | Specialized subagents with focused expertise | Capability packages with instructions |
| Invocation | Task tool (subagent_type parameter) | Automatic (model-triggered by context) |
| Location | agents/ directory | skills/ directory |
| Structure | Single .md file with frontmatter | Directory with SKILL.md + resources |
See agent-vs-skill.md for details.
Quick Start
Using Templates
Copy a template from templates/:
| Template | Use When |
|---|---|
basic.md | Simple agents with focused expertise |
advanced.md | Full-featured agents with all config options |
Scaffolding
./scripts/scaffold-agent.sh security-reviewer -t reviewer
Workflow Overview
- •Discovery - Define purpose, scope, and triggers
- •Design - Choose archetype and configuration
- •Implementation - Write frontmatter and instructions
- •Validation - Verify against quality standards
Stage 1: Discovery
Before writing code, clarify:
- •Purpose: What specialized expertise does this agent provide?
- •Triggers: What keywords/phrases should invoke it?
- •Scope: What does it do? What does it NOT do?
- •Location: Personal (
~/.claude/agents/), project (agents/), or plugin?
Key questions:
- •Is this a specialized role or a general capability? (Role = agent, Capability = skill)
- •What user phrases should trigger this agent?
- •What tools does it need access to?
Stage 2: Design
Agent Archetypes
| Type | Purpose | Typical Tools |
|---|---|---|
| Analyzer | Examine without modifying | Glob, Grep, Read, Skill, Task, TaskCreate, TaskUpdate, TaskList, TaskGet |
| Implementer | Build and modify code | Full access (inherit) |
| Reviewer | Provide feedback | Glob, Grep, Read, Skill, Task, TaskCreate, TaskUpdate, TaskList, TaskGet |
| Tester | Create and manage tests | Glob, Grep, Read, Write, Edit, Bash, ... |
| Researcher | Find and synthesize info | ..., WebSearch, WebFetch |
| Deployer | Handle infrastructure | ..., Bash(kubectl *), Bash(docker *) |
See agent-types.md for details.
Frontmatter Schema
--- name: agent-name # Required: kebab-case, matches filename description: | # Required: when to use + triggers + examples Use this agent when [conditions]. Triggers on [keywords]. <example> Context: [Situation] user: "[User message]" assistant: "I'll use the agent-name agent to [action]." </example> model: inherit # Optional: inherit|haiku|sonnet|opus tools: Glob, Grep, Read # Optional: restrict tools (default: inherit all) skills: tdd, debugging # Optional: skills to auto-load (NOT inherited) permissionMode: default # Optional: default|acceptEdits|bypassPermissions ---
See frontmatter.md for complete schema.
Model Selection
| Model | When to Use |
|---|---|
inherit | Recommended default - adapts to parent context |
haiku | Fast exploration, simple tasks, low-latency |
sonnet | Balanced cost/capability (default if omitted) |
opus | Nuanced judgment, security/architecture review, irreversible decisions |
Tool Configuration
Philosophy: Don't over-restrict. Only limit tools when there's a specific safety reason.
Baseline (always include when restricting):
tools: Glob, Grep, Read, Skill, Task, TaskCreate, TaskUpdate, TaskList, TaskGet
See tools.md for patterns.
Stage 3: Implementation
Agent File Structure
--- name: security-reviewer description: | Use this agent for security vulnerability detection. Triggers on security audits, OWASP, injection, XSS. <example> Context: User wants security review. user: "Review auth code for vulnerabilities" assistant: "I'll use the security-reviewer agent." </example> model: inherit --- # Security Reviewer You are a security expert specializing in [expertise]. ## Expertise - Domain expertise 1 - Domain expertise 2 ## Process ### Step 1: [Stage Name] - Action item - Action item ### Step 2: [Stage Name] - Action item ## Output Format For each finding: - **Severity**: critical|high|medium|low - **Location**: file:line - **Issue**: Description - **Remediation**: How to fix ## Constraints **Always:** - Required behavior **Never:** - Prohibited action
Description Guidelines
Descriptions are the most critical field for agent discovery:
- •Start with trigger conditions: "Use this agent when..."
- •Include 3-5 trigger keywords: specific terms users would say
- •Add 2-3 examples: showing user request -> assistant delegation
- •Be specific: avoid vague descriptions like "helps with code"
Best Practices
Single Responsibility
# Good: Focused description: SQL injection vulnerability detector # Bad: Too broad description: Security expert handling all issues
Document Boundaries
## What I Don't Do - I analyze, not implement fixes - I review, not build from scratch
Consistent Output Format
Define structured output so results are predictable and parseable.
Stage 4: Validation
After creating an agent, validate against these checklists.
YAML Frontmatter Checks
- • Opens with
---on line 1 - • Closes with
---before content - •
namepresent and matches filename (without.md) - •
descriptionpresent and non-empty - • Uses spaces (not tabs) for indentation
- •
toolsuses comma-separated valid tool names - •
modelis valid:sonnet,opus,haiku, orinherit
Naming Conventions
- • Kebab-case (lowercase-with-hyphens)
- • Follows
[role]-[specialty]or[specialty]pattern - • Specific, not generic
- • Concise (1-3 words, max 4)
Good: code-reviewer, test-runner, security-auditor
Bad: helper, my-agent, the-best-agent
Description Quality
- • WHAT: Explains what the agent does
- • WHEN: States when to invoke it
- • TRIGGERS: Includes 3-5 trigger keywords
- • EXAMPLES: Has 2-3 example conversations
- • Specific about agent's purpose (not vague)
- • Clear about scope
Anti-patterns:
- •"Helps with code" - too vague
- •No trigger conditions
- •Missing keywords
System Prompt Quality
- • Clear role definition
- • Step-by-step process
- • Key practices or guidelines
- • Output format specification
- • Specific and actionable instructions
- • Constraints (what NOT to do)
- • Single responsibility focus
Anti-patterns:
- •"You are helpful" - too vague
- •No process defined
- •Missing constraints
- •Scope creep
Tool Configuration
- • Field name is
tools:(notallowed-tools:) - • Comma-separated list
- • Tool names correctly spelled and case-sensitive
- • Includes baseline tools if restricting:
Glob, Grep, Read, Skill, Task, TaskCreate, TaskUpdate, TaskList, TaskGet - • Tools appropriate for agent's purpose
Common patterns:
# Read-only tools: Glob, Grep, Read, Skill, Task, TaskCreate, TaskUpdate, TaskList, TaskGet # Read-only + git tools: Glob, Grep, Read, Skill, Task, TaskCreate, TaskUpdate, TaskList, TaskGet, Bash(git show:*), Bash(git diff:*) # Research tools: Glob, Grep, Read, Skill, Task, TaskCreate, TaskUpdate, TaskList, TaskGet, WebSearch, WebFetch # Full access # (omit field to inherit all)
Validation Report Format
# Agent Validation Report: [Agent Name] ## Summary - **Status**: PASS | FAIL | WARNINGS - **Location**: [path] - **Issues**: [count critical] / [count warnings] ## Critical Issues (must fix) 1. [Issue with specific fix] ## Warnings (should fix) 1. [Issue with specific fix] ## Strengths - [What's done well]
Agent Scopes
| Scope | Location | Priority | Visibility |
|---|---|---|---|
| Project | agents/ | Highest | Team via git |
| Personal | ~/.claude/agents/ | Medium | You only |
| Plugin | <plugin>/agents/ | Lowest | Plugin users |
Project agents override personal agents with the same name.
Testing Agents
Manual Testing
- •Create agent file in
agents/ - •In Claude Code: "Use the [agent-name] agent to [task]"
- •Claude invokes via Task tool
- •Review results
Verify Discovery
Agents are loaded from:
- •
~/.claude/agents/(personal) - •
./agents/(project) - •Plugins (installed)
Debug with: claude --debug
Troubleshooting
Agent Not Being Invoked
- •Check file location:
agents/agent-name.md - •Validate YAML frontmatter syntax
- •Make description more specific with trigger keywords
- •Add example conversations
Wrong Agent Invoked
- •Make description more distinct
- •Add specific trigger keywords
- •Include negative examples (what NOT to use it for)
Agent Has Wrong Tools
Prefer model: inherit to use parent's tool access. Only specify tools: when agent needs different access.
References
| Reference | Content |
|---|---|
| agent-vs-skill.md | Agents vs Skills distinction |
| frontmatter.md | YAML schema and fields |
| tools.md | Tool configuration patterns |
| task-tool.md | Task tool integration |
| discovery.md | How agents are found and loaded |
| agent-types.md | Archetypes: analysis, implementation, etc. |
| patterns.md | Best practices and multi-agent patterns |
| tasks.md | Task tool patterns for agents |
| advanced-features.md | Resumable agents, CLI config |
See EXAMPLES.md for complete real-world agent examples.
See templates/ for starter templates.
Related Skills
- •skills-development: Create Skills (different from agents)
- •claude-plugin-development: Bundle agents into plugins