Guide for Claude Agent SDK - build custom AI agents powered by Claude. Triggers on agent sdk, claude-agent-sdk, @anthropic-ai/claude-agent, build agent, programmatic agent, embed claude, custom ai agent, agent infrastructure. Covers installation, authentication providers, tool permissions, file-based configuration, and TypeScript/Python code examples.
Inherits all available tools
Additional assets for this skill
This skill inherits all available tools. When active, it can use any tool Claude has access to.
The Claude Agent SDK enables developers to build custom AI agents powered by Claude. It's the same agent infrastructure that powers Claude Code, now available for embedding in your own applications.
Key Value:
npm install @anthropic-ai/claude-agent-sdk
pip install claude-agent-sdk
Automatic compaction ensures your agent doesn't run out of context during extended operations. The SDK handles token management transparently.
Built-in capabilities include:
Fine-grained control over agent capabilities:
{
allowedTools: ['Read', 'Write', 'Bash'], // Explicit allowlist
disallowedTools: ['WebSearch'], // Explicit blocklist
permissionMode: 'default' | 'strict' // Overall strategy
}
export ANTHROPIC_API_KEY=sk-ant-...
Get your key from console.anthropic.com
export CLAUDE_CODE_USE_BEDROCK=1
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
export AWS_REGION=us-east-1
export CLAUDE_CODE_USE_VERTEX=1
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json
export VERTEX_REGION=us-central1
export VERTEX_PROJECT_ID=your-project
export CLAUDE_CODE_USE_FOUNDRY=1
# Azure credentials configuration
Agents can leverage Claude Code's file-based architecture for extensibility:
| Directory | Purpose |
|---|---|
.claude/agents/ | Subagent definitions (Markdown) |
.claude/skills/ | Skill files (SKILL.md) |
.claude/commands/ | Slash commands (Markdown) |
.claude/settings.json | Hooks configuration |
CLAUDE.md | Project memory/context |
Important: To use project settings, explicitly enable with:
{
settingSources: ['project']
}
import { Agent } from '@anthropic-ai/claude-agent-sdk';
const agent = new Agent({
model: 'claude-sonnet-4-20250514',
allowedTools: ['Read', 'Write', 'Bash'],
systemPrompt: `You are a code review assistant.
Analyze code for bugs, security issues, and best practices.`,
});
const result = await agent.run({
prompt: 'Review the code in src/auth.ts for security issues',
});
console.log(result.output);
import { Agent } from '@anthropic-ai/claude-agent-sdk';
const agent = new Agent({
model: 'claude-sonnet-4-20250514',
mcpServers: {
database: {
command: 'npx',
args: ['-y', '@modelcontextprotocol/server-postgres'],
env: { DATABASE_URL: process.env.DATABASE_URL },
},
},
});
const result = await agent.run({
prompt: 'List all users who signed up in the last 24 hours',
});
from claude_agent_sdk import Agent
agent = Agent(
model="claude-sonnet-4-20250514",
allowed_tools=["Read", "Write", "Bash"],
system_prompt="""You are a code review assistant.
Analyze code for bugs, security issues, and best practices.""",
)
result = agent.run(
prompt="Review the code in src/auth.py for security issues"
)
print(result.output)
from claude_agent_sdk import Agent, PermissionMode
agent = Agent(
model="claude-sonnet-4-20250514",
permission_mode=PermissionMode.STRICT,
allowed_tools=["Read", "Grep", "Glob"],
disallowed_tools=["Bash"], # Extra safety
)
result = agent.run(
prompt="Find all TODO comments in the codebase"
)
Begin with minimal tool access and expand as needed:
// Start here
allowedTools: ['Read']
// Then add as required
allowedTools: ['Read', 'Grep', 'Glob']
// Only if truly needed
allowedTools: ['Read', 'Write', 'Bash']
Break large tasks into specialized subagents:
.claude/agents/
├── code-reviewer.md # Reviews code changes
├── test-writer.md # Generates tests
└── doc-generator.md # Creates documentation
try {
const result = await agent.run({ prompt });
if (result.error) {
console.error('Agent error:', result.error);
// Implement retry or fallback logic
}
} catch (error) {
console.error('SDK error:', error);
// Handle network/auth issues
}
const agent = new Agent({
// ... config
onToolUse: (tool, input) => {
console.log(`Tool: ${tool}, Input: ${JSON.stringify(input)}`);
},
onThinking: (thought) => {
console.log(`Thinking: ${thought}`);
},
});
/majestic:agent-scaffold to generate a new Agent SDK projectnew-skill for creating skills your agent can usenew-agent for creating subagent definitions