Programmatic agent definitions for the Claude Agent SDK in TypeScript and Python. Use when creating agents for SDK-based applications rather than filesystem-based Claude Code.
Agent SDK Definitions
For SDK-based applications, agents can be defined programmatically instead of as markdown files.
TypeScript Definition
import { query, ClaudeAgentOptions, AgentDefinition } from "@anthropic-ai/claude-agent-sdk";
const options: ClaudeAgentOptions = {
// Parent agent needs Task tool to invoke subagents
allowed_tools: ["Read", "Grep", "Glob", "Edit", "Write", "Bash", "Task"],
agents: {
"code-reviewer": {
description: "Security-focused code reviewer. Use PROACTIVELY for auth code.",
prompt: `You are a security code reviewer specializing in authentication
and authorization code. You identify vulnerabilities, suggest fixes,
and ensure best practices are followed.
## Focus Areas
- Authentication flows
- Session management
- Input validation
- Access control
## Output Format
Provide findings as:
1. Severity (Critical/High/Medium/Low)
2. Location (file:line)
3. Issue description
4. Recommended fix`,
tools: ["Read", "Grep", "Glob"], // Read-only access
model: "opus"
},
"test-runner": {
description: "Runs tests and analyzes failures. Use when tests need to be executed.",
prompt: `You run test suites and analyze failures. You identify root causes
and suggest fixes for failing tests.`,
// Omit tools to inherit all from parent
model: "sonnet"
}
}
};
// Execute with agents
for await (const message of query({
prompt: "Review the authentication module for security issues",
options
})) {
console.log(message);
}
Python Definition
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition
options = ClaudeAgentOptions(
allowed_tools=["Read", "Grep", "Glob", "Edit", "Write", "Bash", "Task"],
agents={
"code-reviewer": AgentDefinition(
description="Security-focused code reviewer. Use PROACTIVELY for auth code.",
prompt="""You are a security code reviewer specializing in authentication
and authorization code. You identify vulnerabilities, suggest fixes,
and ensure best practices are followed.
## Focus Areas
- Authentication flows
- Session management
- Input validation
- Access control""",
tools=["Read", "Grep", "Glob"],
model="opus"
),
"test-runner": AgentDefinition(
description="Runs tests and analyzes failures. Use when tests need to be executed.",
prompt="You run test suites and analyze failures.",
# tools omitted = inherit all
model="sonnet"
)
}
)
async def main():
async for message in query(
prompt="Review the authentication module",
options=options
):
print(message)
asyncio.run(main())
AgentDefinition Schema
type AgentDefinition = {
description: string; // Required: When to invoke (routing key)
prompt: string; // Required: System prompt content
tools?: string[]; // Optional: Allowed tools (omit = inherit all)
model?: 'sonnet' | 'opus' | 'haiku' | 'inherit'; // Optional: Model override
}
Key Differences from Filesystem Agents
| Aspect | Filesystem (.claude/agents/) | SDK (programmatic) |
|---|---|---|
| Format | Markdown with YAML frontmatter | TypeScript/Python objects |
| Loading | Automatic from directory | Passed in options |
| Prompt | Markdown body | String in prompt field |
| Use case | Claude Code CLI | Custom SDK applications |
When to Use SDK Format
- Building custom agent harnesses
- Programmatic agent orchestration
- Dynamic agent creation at runtime
- CI/CD pipelines with agent tasks
- Applications embedding Claude agents
Providing Both Formats
When a user may use either approach, provide both:
- Markdown file for
.claude/agents/{name}.md - SDK definition for programmatic use
This ensures compatibility with both Claude Code CLI and custom SDK applications.
You Might Also Like
Related Skills

coding-agent
Run Codex CLI, Claude Code, OpenCode, or Pi Coding Agent via background process for programmatic control.
openclaw
add-uint-support
Add unsigned integer (uint) type support to PyTorch operators by updating AT_DISPATCH macros. Use when adding support for uint16, uint32, uint64 types to operators, kernels, or when user mentions enabling unsigned types, barebones unsigned types, or uint support.
pytorch
at-dispatch-v2
Convert PyTorch AT_DISPATCH macros to AT_DISPATCH_V2 format in ATen C++ code. Use when porting AT_DISPATCH_ALL_TYPES_AND*, AT_DISPATCH_FLOATING_TYPES*, or other dispatch macros to the new v2 API. For ATen kernel files, CUDA kernels, and native operator implementations.
pytorch
skill-writer
Guide users through creating Agent Skills for Claude Code. Use when the user wants to create, write, author, or design a new Skill, or needs help with SKILL.md files, frontmatter, or skill structure.
pytorch
implementing-jsc-classes-cpp
Implements JavaScript classes in C++ using JavaScriptCore. Use when creating new JS classes with C++ bindings, prototypes, or constructors.
oven-sh
implementing-jsc-classes-zig
Creates JavaScript classes using Bun's Zig bindings generator (.classes.ts). Use when implementing new JS APIs in Zig with JSC integration.
oven-sh