SDK for building AI agents with Claude Code's capabilities to programmatically interact with Claude and build autonomous agents that can understand codebases, edit files, and execute workflows.
Comprehensive configuration via the Options interface.
interface Options {
// Model & Execution
model?: string;
fallbackModel?: string;
cwd?: string;
maxTurns?: number;
maxBudgetUsd?: number;
maxThinkingTokens?: number;
abortController?: AbortController;
// Tools
tools?: string[] | {type: 'preset'; preset: 'claude_code'};
allowedTools?: string[];
disallowedTools?: string[];
// Permissions
permissionMode?: PermissionMode;
canUseTool?: CanUseTool;
allowDangerouslySkipPermissions?: boolean;
permissionPromptToolName?: string;
// Environment
additionalDirectories?: string[];
env?: {[envVar: string]: string | undefined};
executable?: 'bun' | 'deno' | 'node';
executableArgs?: string[];
pathToClaudeCodeExecutable?: string;
extraArgs?: Record<string, string | null>;
// Extensions
agents?: Record<string, AgentDefinition>;
hooks?: Partial<Record<HookEvent, HookCallbackMatcher[]>>;
mcpServers?: Record<string, McpServerConfig>;
strictMcpConfig?: boolean;
// System
systemPrompt?: string | {type: 'preset'; preset: 'claude_code'; append?: string};
outputFormat?: OutputFormat;
includePartialMessages?: boolean;
// Session
continue?: boolean;
resume?: string;
resumeSessionAt?: string;
forkSession?: boolean;
settingSources?: SettingSource[];
// Other
plugins?: SdkPluginConfig[];
sandbox?: SandboxSettings;
betas?: SdkBeta[];
stderr?: (data: string) => void;
}{
model: 'claude-sonnet-4-5-20250929',
cwd: '/path/to/project',
maxTurns: 20,
maxBudgetUsd: 1.00
}// Specific tools only
{allowedTools: ['Read', 'Grep', 'Glob']}
// All except specified
{
tools: {type: 'preset', preset: 'claude_code'},
disallowedTools: ['Edit', 'Write', 'Bash']
}
// Minimal toolset
{tools: ['Grep', 'Glob']}// Auto-accept edits
{permissionMode: 'acceptEdits'}
// Planning mode (no execution)
{permissionMode: 'plan'}
// Bypass all (requires safety flag)
{
permissionMode: 'bypassPermissions',
allowDangerouslySkipPermissions: true
}
// Custom handler
{
canUseTool: async (toolName, input, opts) => {
// Custom logic
return {behavior: 'allow', updatedInput: input};
}
}{
cwd: '/path/to/project',
additionalDirectories: ['/path/to/shared'],
env: {
NODE_ENV: 'production',
API_KEY: process.env.API_KEY
},
executable: 'bun',
executableArgs: ['--no-warnings']
}// Continue previous
{continue: true}
// Resume specific session
{resume: 'session-id-123'}
// Resume and fork
{resume: 'session-id-123', forkSession: true}
// Resume from message
{resume: 'session-id', resumeSessionAt: 'msg-uuid'}{
agents: {
'reviewer': {
description: 'Reviews code',
tools: ['Read', 'Grep'],
prompt: 'Review code for bugs and style',
model: 'opus'
}
}
}{
hooks: {
PreToolUse: [{
hooks: [async (input) => {
console.log('Tool:', input.tool_name);
return {continue: true};
}]
}]
}
}{
mcpServers: {
'db': {
command: 'node',
args: ['./db-server.js'],
env: {DB_HOST: 'localhost'}
},
'api': {
type: 'http',
url: 'http://localhost:3000/mcp'
}
},
strictMcpConfig: true
}{
sandbox: {
enabled: true,
autoAllowBashIfSandboxed: true,
network: {
allowUnixSockets: ['/var/run/docker.sock'],
allowLocalBinding: true
},
excludedCommands: ['docker']
}
}// Custom
{systemPrompt: 'You are a TypeScript expert.'}
// Extend default
{
systemPrompt: {
type: 'preset',
preset: 'claude_code',
append: 'Explain reasoning step by step.'
}
}{
outputFormat: {
type: 'json_schema',
schema: {
type: 'object',
properties: {
complexity: {type: 'number'},
issues: {type: 'array', items: {type: 'object'}}
},
required: ['complexity']
}
}
}// All settings
{settingSources: ['user', 'project', 'local']}
// Isolated (no filesystem settings)
{settingSources: []}
// Project only (for CLAUDE.md)
{settingSources: ['project']}{
model: 'claude-sonnet-4-5-20250929',
betas: ['context-1m-2025-08-07'] // 1M token context
}{
stderr: (data) => console.error('[STDERR]', data),
includePartialMessages: true // Streaming updates
}type PermissionMode = 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'dontAsk';
type SettingSource = 'user' | 'project' | 'local';
type SdkBeta = 'context-1m-2025-08-07';
interface OutputFormat {
type: 'json_schema';
schema: Record<string, unknown>;
}
interface SdkPluginConfig {
type: 'local';
path: string;
}Install with Tessl CLI
npx tessl i tessl/npm-anthropic-ai--claude-agent-sdk