| name | custom-agent-design |
| description | Design custom agents from scratch using Claude Agent SDK patterns. Use when building domain-specific agents, designing agents with full SDK control, or creating specialized agents with custom tools and prompts. |
| allowed-tools | Read, Grep, Glob |
Custom Agent Design Skill
Design domain-specific agents using Claude Agent SDK patterns.
Purpose
Guide the design of custom agents that solve domain-specific problems with full SDK control over Context, Model, Prompt, and Tools.
When to Use
- Building a new custom agent
- Converting generic workflow to specialized agent
- Designing domain-specific automation
- Creating repeatable agent patterns
Prerequisites
- Clear understanding of the domain problem
- Access to Claude Agent SDK documentation
- Understanding of when custom agents are appropriate (see @agent-evolution-path.md)
Design Process
Step 1: Define Agent Purpose
Answer these questions:
- What specific problem does this agent solve?
- What domain expertise does it need?
- What is the single purpose? (One agent, one purpose)
- Who are the stakeholders?
Output: Purpose statement (2-3 sentences)
Step 2: Select Model
Choose based on task complexity:
| Task Type | Model | Why |
|---|---|---|
| Simple transformations | Haiku | Fast, cheap |
| Balanced tasks | Sonnet | Good trade-off |
| Complex reasoning | Opus | Highest quality |
Decision factors:
- Speed requirements
- Quality requirements
- Cost constraints
- Task complexity
Step 3: Design System Prompt
Choose architecture:
Override (system_prompt=...)
- When: Building a new product
- Result: NOT Claude Code anymore
- Full control over behavior
Append (append_system_prompt=...)
- When: Extending Claude Code
- Result: Enhanced Claude Code
- Adds capabilities
System Prompt Template:
# [Agent Name]
## Purpose
[Identity and role definition - 2-3 sentences]
## Instructions
[Core behaviors - bullet list]
- Behavior 1
- Behavior 2
## Constraints
[What the agent must NOT do]
## Examples (if needed)
[Input/Output pairs]
Step 4: Configure Tool Access
Questions to answer:
- What tools does this agent need?
- What tools should be blocked?
- Are custom tools required?
Tool configuration:
# Whitelist approach
allowed_tools=["Read", "Write", "Bash"]
# Blacklist approach
disallowed_tools=["WebFetch", "WebSearch", "TodoWrite"]
# No default tools
disallowed_tools=["*"]
# Custom tools
mcp_servers={"domain": custom_mcp_server}
allowed_tools=["mcp__domain__tool1", "mcp__domain__tool2"]
Step 5: Add Governance (Optional)
If security/governance required:
hooks = {
"PreToolUse": [
HookMatcher(matcher="Read", hooks=[block_sensitive_files]),
HookMatcher(hooks=[log_all_tool_usage]),
]
}
Step 6: Select Deployment Form
| Form | Use When |
|---|---|
| Script | One-off automation, ADWs |
| Terminal REPL | Interactive tools |
| Backend API | UI integration |
| Data Stream | Real-time processing |
| Multi-Agent | Complex workflows |
Step 7: Create Configuration
Assemble the ClaudeAgentOptions:
options = ClaudeAgentOptions(
# Context
system_prompt=load_system_prompt("agent_system.md"),
# Model
model="opus",
# Tools
allowed_tools=["Read", "Write", "custom_tool"],
disallowed_tools=["WebFetch", "WebSearch"],
# Custom Tools (if needed)
mcp_servers={"domain": domain_mcp_server},
# Governance (if needed)
hooks=security_hooks,
# Session (if needed)
resume=session_id,
)
Output Format
When designing a custom agent, provide:
## Custom Agent Design
**Name:** [agent-name]
**Purpose:** [1-2 sentences]
**Domain:** [area of expertise]
### Configuration
**Model:** [haiku/sonnet/opus] - [reason]
**System Prompt Architecture:**
- Type: [Override/Append]
- Reason: [why this choice]
**Tool Access:**
- Allowed: [list]
- Disallowed: [list]
- Custom: [list if any]
**Governance:**
- Hooks: [list if any]
- Security: [considerations]
**Deployment:**
- Form: [script/repl/api/stream/multi-agent]
- Reason: [why this form]
### System Prompt
[Full system prompt content]
### Implementation Notes
[Any special considerations]
Design Checklist
- Purpose is specific and clear
- Model matches task complexity
- System prompt architecture chosen (override vs append)
- System prompt follows template
- Tool access is minimal (only what's needed)
- Governance hooks added if security required
- Deployment form selected
- Configuration assembled
Anti-Patterns
| Avoid | Why | Instead |
|---|---|---|
| Competing with Claude Code | Can't beat general agent | Specialize instead |
| Generic system prompts | No domain advantage | Domain-specific |
| Too many tools | Context overhead | Minimal tool set |
| Missing governance | Security risk | Add hooks |
| Override when append works | Loses Claude Code benefits | Use append |
Cross-References
- @agent-evolution-path.md - When to build custom agents
- @core-four-custom.md - Core Four configuration
- @system-prompt-architecture.md - Override vs append
- @custom-tool-patterns.md - Tool creation
- @model-selection skill - Model selection guidance
Version History
- v1.0.0 (2025-12-26): Initial release
Last Updated
Date: 2025-12-26 Model: claude-opus-4-5-20251101