Coba antarmuka V2 baru (pratinjau): Antarmuka yang disederhanakan dengan pola send() dan receive() kini tersedia, membuat percakapan multi-putaran lebih mudah. Pelajari lebih lanjut
npm install @anthropic-ai/claude-agent-sdkquery()Fungsi utama untuk berinteraksi dengan Claude Code. Membuat generator asinkron yang melakukan streaming pesan saat tiba.
function query({
prompt,
options
}: {
prompt: string | AsyncIterable<SDKUserMessage>;
options?: Options;
}): Query| Parameter | Tipe | Deskripsi |
|---|---|---|
prompt | string | AsyncIterable<SDKUserMessage> | Prompt input sebagai string atau async iterable untuk mode streaming |
options | Options | Objek konfigurasi opsional (lihat tipe Options di bawah) |
Mengembalikan objek Query yang memperluas AsyncGenerator<SDKMessage, void> dengan metode tambahan.
tool()Membuat definisi tool MCP yang aman tipe untuk digunakan dengan server MCP SDK.
function tool<Schema extends ZodRawShape>(
name: string,
description: string,
inputSchema: Schema,
handler: (args: z.infer<ZodObject<Schema>>, extra: unknown) => Promise<CallToolResult>
): SdkMcpToolDefinition<Schema>| Parameter | Tipe | Deskripsi |
|---|---|---|
name | string | Nama tool |
description | string | Deskripsi tentang apa yang dilakukan tool |
inputSchema | Schema extends ZodRawShape | Skema Zod yang mendefinisikan parameter input tool |
handler | (args, extra) => Promise<CallToolResult> | Fungsi asinkron yang mengeksekusi logika tool |
createSdkMcpServer()Membuat instance server MCP yang berjalan dalam proses yang sama dengan aplikasi Anda.
function createSdkMcpServer(options: {
name: string;
version?: string;
tools?: Array<SdkMcpToolDefinition<any>>;
}): McpSdkServerConfigWithInstance| Parameter | Tipe | Deskripsi |
|---|---|---|
options.name | string | Nama server MCP |
options.version | string | String versi opsional |
options.tools | Array<SdkMcpToolDefinition> | Array definisi tool yang dibuat dengan tool() |
OptionsObjek konfigurasi untuk fungsi query().
| Properti | Tipe | Default | Deskripsi |
|---|---|---|---|
abortController | AbortController | new AbortController() | Pengontrol untuk membatalkan operasi |
additionalDirectories | string[] | [] | Direktori tambahan yang dapat diakses Claude |
agents | Record<string, [AgentDefinition](#agentdefinition)> | undefined | Tentukan subagen secara terprogram |
QueryAntarmuka yang dikembalikan oleh fungsi query().
interface Query extends AsyncGenerator<SDKMessage, void> {
interrupt(): Promise<void>;
rewindFiles(userMessageUuid: string): Promise<void>;
setPermissionMode(mode: PermissionMode): Promise<void>;
setModel(model?: string): Promise<void>;
setMaxThinkingTokens(maxThinkingTokens: number | null): Promise<void>;
supportedCommands(): Promise<SlashCommand[]>;
supportedModels(): Promise<ModelInfo[]>;
mcpServerStatus(): Promise<McpServerStatus[]>;
accountInfo(): Promise<AccountInfo>;
}| Metode | Deskripsi |
|---|---|
interrupt() | Menghentikan query (hanya tersedia dalam mode input streaming) |
rewindFiles(userMessageUuid) | Mengembalikan file ke keadaan mereka pada pesan pengguna yang ditentukan. Memerlukan enableFileCheckpointing: true. Lihat File checkpointing |
setPermissionMode() | Mengubah mode izin (hanya tersedia dalam mode input streaming) |
setModel() | Mengubah model (hanya tersedia dalam mode input streaming) |
setMaxThinkingTokens() | Mengubah token thinking maksimal (hanya tersedia dalam mode input streaming) |
supportedCommands() | Mengembalikan slash command yang tersedia |
AgentDefinitionKonfigurasi untuk subagen yang didefinisikan secara terprogram.
type AgentDefinition = {
description: string;
tools?: string[];
prompt: string;
model?: 'sonnet' | 'opus' | 'haiku' | 'inherit';
}| Field | Diperlukan | Deskripsi |
|---|---|---|
description | Ya | Deskripsi bahasa alami tentang kapan menggunakan agent ini |
tools | Tidak | Array nama tool yang diizinkan. Jika dihilangkan, mewarisi semua tool |
prompt | Ya | System prompt agent |
model | Tidak | Override model untuk agent ini. Jika dihilangkan, menggunakan model utama |
SettingSourceMengontrol sumber konfigurasi berbasis filesystem yang dimuat pengaturan SDK.
type SettingSource = 'user' | 'project' | 'local';| Nilai | Deskripsi | Lokasi |
|---|---|---|
'user' | Pengaturan pengguna global | ~/.claude/settings.json |
'project' | Pengaturan proyek bersama (version controlled) | .claude/settings.json |
'local' | Pengaturan proyek lokal (gitignored) | .claude/settings.local.json |
Ketika settingSources dihilangkan atau undefined, SDK tidak memuat pengaturan filesystem apa pun. Ini memberikan isolasi untuk aplikasi SDK.
Muat semua pengaturan filesystem (perilaku legacy):
// Muat semua pengaturan seperti SDK v0.0.x
const result = query({
prompt: "Analisis kode ini",
options: {
settingSources: ['user', 'project', 'local'] // Muat semua pengaturan
}
});Muat hanya sumber pengaturan tertentu:
// Muat hanya pengaturan proyek, abaikan pengguna dan lokal
const result = query({
prompt: "Jalankan pemeriksaan CI",
options: {
settingSources: ['project'] // Hanya .claude/settings.json
}
});Lingkungan testing dan CI:
// Pastikan perilaku konsisten di CI dengan mengecualikan pengaturan lokal
const result = query({
prompt: "Jalankan test",
options: {
settingSources: ['project'], // Hanya pengaturan bersama tim
permissionMode: 'bypassPermissions'
}
});Aplikasi SDK-only:
// Tentukan semuanya secara terprogram (perilaku default)
// Tidak ada dependensi filesystem - settingSources default ke []
const result = query({
prompt: "Tinjau PR ini",
options: {
// settingSources: [] adalah default, tidak perlu ditentukan
agents: { /* ... */ },
mcpServers: { /* ... */ },
allowedTools: ['Read', 'Grep', 'Glob']
}
});Memuat instruksi proyek CLAUDE.md:
// Muat pengaturan proyek untuk menyertakan file CLAUDE.md
const result = query({
prompt: "Tambahkan fitur baru mengikuti konvensi proyek",
options: {
systemPrompt: {
type: 'preset',
preset: 'claude_code' // Diperlukan untuk menggunakan CLAUDE.md
},
settingSources: ['project'], // Memuat CLAUDE.md dari direktori proyek
allowedTools: ['Read', 'Write', 'Edit']
}
});Ketika beberapa sumber dimuat, pengaturan digabungkan dengan preseden ini (tertinggi ke terendah):
.claude/settings.local.json).claude/settings.json)~/.claude/settings.json)Opsi terprogram (seperti agents, allowedTools) selalu mengganti pengaturan filesystem.
PermissionModetype PermissionMode =
| 'default' // Perilaku izin standar
| 'acceptEdits' // Auto-accept edit file
| 'bypassPermissions' // Bypass semua pemeriksaan izin
| 'plan' // Mode perencanaan - tidak ada eksekusiCanUseToolTipe fungsi izin kustom untuk mengontrol penggunaan tool.
type CanUseTool = (
toolName: string,
input: ToolInput,
options: {
signal: AbortSignal;
suggestions?: PermissionUpdate[];
}
) => Promise<PermissionResult>;PermissionResultHasil pemeriksaan izin.
type PermissionResult =
| {
behavior: 'allow';
updatedInput: ToolInput;
updatedPermissions?: PermissionUpdate[];
}
| {
behavior: 'deny';
message: string;
interrupt?: boolean;
}McpServerConfigKonfigurasi untuk server MCP.
type McpServerConfig =
| McpStdioServerConfig
| McpSSEServerConfig
| McpHttpServerConfig
| McpSdkServerConfigWithInstance;McpStdioServerConfigtype McpStdioServerConfig = {
type?: 'stdio';
command: string;
args?: string[];
env?: Record<string, string>;
}McpSSEServerConfigtype McpSSEServerConfig = {
type: 'sse';
url: string;
headers?: Record<string, string>;
}McpHttpServerConfigtype McpHttpServerConfig = {
type: 'http';
url: string;
headers?: Record<string, string>;
}McpSdkServerConfigWithInstancetype McpSdkServerConfigWithInstance = {
type: 'sdk';
name: string;
instance: McpServer;
}SdkPluginConfigKonfigurasi untuk memuat plugin di SDK.
type SdkPluginConfig = {
type: 'local';
path: string;
}| Field | Tipe | Deskripsi |
|---|---|---|
type | 'local' | Harus 'local' (hanya plugin lokal yang didukung saat ini) |
path | string | Path absolut atau relatif ke direktori plugin |
Contoh:
plugins: [
{ type: 'local', path: './my-plugin' },
{ type: 'local', path: '/absolute/path/to/plugin' }
]Untuk informasi lengkap tentang membuat dan menggunakan plugin, lihat Plugins.
SDKMessageTipe union dari semua pesan yang mungkin dikembalikan oleh query.
type SDKMessage =
| SDKAssistantMessage
| SDKUserMessage
| SDKUserMessageReplay
| SDKResultMessage
| SDKSystemMessage
| SDKPartialAssistantMessage
| SDKCompactBoundaryMessage;SDKAssistantMessagePesan respons asisten.
type SDKAssistantMessage = {
type: 'assistant';
uuid: UUID;
session_id: string;
message: APIAssistantMessage; // Dari Anthropic SDK
parent_tool_use_id: string | null;
}SDKUserMessagePesan input pengguna.
type SDKUserMessage = {
type: 'user';
uuid?: UUID;
session_id: string;
message: APIUserMessage; // Dari Anthropic SDK
parent_tool_use_id: string | null;
}SDKUserMessageReplayPesan pengguna yang diputar ulang dengan UUID yang diperlukan.
type SDKUserMessageReplay = {
type: 'user';
uuid: UUID;
session_id: string;
message: APIUserMessage;
parent_tool_use_id: string | null;
}SDKResultMessagePesan hasil akhir.
type SDKResultMessage =
| {
type: 'result';
subtype: 'success';
uuid: UUID;
session_id: string;
duration_ms: number;
duration_api_ms: number;
is_error: boolean;
num_turns: number;
result: string;
total_cost_usd: number;
usage: NonNullableUsage;
modelUsage: { [modelName: string]: ModelUsage };
permission_denials: SDKPermissionDenial[];
structured_output?: unknown;
}
| {
type: 'result';
subtype:
| 'error_max_turns'
| 'error_during_execution'
| 'error_max_budget_usd'
| 'error_max_structured_output_retries';
uuid: UUID;
session_id: string;
duration_ms: number;
duration_api_ms: number;
is_error: boolean;
num_turns: number;
total_cost_usd: number;
usage: NonNullableUsage;
modelUsage: { [modelName: string]: ModelUsage };
permission_denials: SDKPermissionDenial[];
errors: string[];
}SDKSystemMessagePesan inisialisasi sistem.
type SDKSystemMessage = {
type: 'system';
subtype: 'init';
uuid: UUID;
session_id: string;
apiKeySource: ApiKeySource;
cwd: string;
tools: string[];
mcp_servers: {
name: string;
status: string;
}[];
model: string;
permissionMode: PermissionMode;
slash_commands: string[];
output_style: string;
}SDKPartialAssistantMessagePesan parsial streaming (hanya ketika includePartialMessages adalah true).
type SDKPartialAssistantMessage = {
type: 'stream_event';
event: RawMessageStreamEvent; // Dari Anthropic SDK
parent_tool_use_id: string | null;
uuid: UUID;
session_id: string;
}SDKCompactBoundaryMessagePesan yang menunjukkan batas pemadatan percakapan.
type SDKCompactBoundaryMessage = {
type: 'system';
subtype: 'compact_boundary';
uuid: UUID;
session_id: string;
compact_metadata: {
trigger: 'manual' | 'auto';
pre_tokens: number;
};
}SDKPermissionDenialInformasi tentang penggunaan tool yang ditolak.
type SDKPermissionDenial = {
tool_name: string;
tool_use_id: string;
tool_input: ToolInput;
}Untuk panduan komprehensif tentang menggunakan hook dengan contoh dan pola umum, lihat panduan Hooks.
HookEventEvent hook yang tersedia.
type HookEvent =
| 'PreToolUse'
| 'PostToolUse'
| 'PostToolUseFailure'
| 'Notification'
| 'UserPromptSubmit'
| 'SessionStart'
| 'SessionEnd'
| 'Stop'
| 'SubagentStart'
| 'SubagentStop'
| 'PreCompact'
| 'PermissionRequest';HookCallbackTipe fungsi callback hook.
type HookCallback = (
input: HookInput, // Union dari semua tipe input hook
toolUseID: string | undefined,
options: { signal: AbortSignal }
) => Promise<HookJSONOutput>;HookCallbackMatcherKonfigurasi hook dengan matcher opsional.
interface HookCallbackMatcher {
matcher?: string;
hooks: HookCallback[];
}HookInputTipe union dari semua tipe input hook.
type HookInput =
| PreToolUseHookInput
| PostToolUseHookInput
| PostToolUseFailureHookInput
| NotificationHookInput
| UserPromptSubmitHookInput
| SessionStartHookInput
| SessionEndHookInput
| StopHookInput
| SubagentStartHookInput
| SubagentStopHookInput
| PreCompactHookInput
| PermissionRequestHookInput;BaseHookInputAntarmuka dasar yang diperluas oleh semua tipe input hook.
type BaseHookInput = {
session_id: string;
transcript_path: string;
cwd: string;
permission_mode?: string;
}PreToolUseHookInputtype PreToolUseHookInput = BaseHookInput & {
hook_event_name: 'PreToolUse';
tool_name: string;
tool_input: unknown;
}PostToolUseHookInputtype PostToolUseHookInput = BaseHookInput & {
hook_event_name: 'PostToolUse';
tool_name: string;
tool_input: unknown;
tool_response: unknown;
}PostToolUseFailureHookInputtype PostToolUseFailureHookInput = BaseHookInput & {
hook_event_name: 'PostToolUseFailure';
tool_name: string;
tool_input: unknown;
error: string;
is_interrupt?: boolean;
}NotificationHookInputtype NotificationHookInput = BaseHookInput & {
hook_event_name: 'Notification';
message: string;
title?: string;
}UserPromptSubmitHookInputtype UserPromptSubmitHookInput = BaseHookInput & {
hook_event_name: 'UserPromptSubmit';
prompt: string;
}SessionStartHookInputtype SessionStartHookInput = BaseHookInput & {
hook_event_name: 'SessionStart';
source: 'startup' | 'resume' | 'clear' | 'compact';
}SessionEndHookInputtype SessionEndHookInput = BaseHookInput & {
hook_event_name: 'SessionEnd';
reason: ExitReason; // String dari array EXIT_REASONS
}StopHookInputtype StopHookInput = BaseHookInput & {
hook_event_name: 'Stop';
stop_hook_active: boolean;
}SubagentStartHookInputtype SubagentStartHookInput = BaseHookInput & {
hook_event_name: 'SubagentStart';
agent_id: string;
agent_type: string;
}SubagentStopHookInputtype SubagentStopHookInput = BaseHookInput & {
hook_event_name: 'SubagentStop';
stop_hook_active: boolean;
}PreCompactHookInputtype PreCompactHookInput = BaseHookInput & {
hook_event_name: 'PreCompact';
trigger: 'manual' | 'auto';
custom_instructions: string | null;
}PermissionRequestHookInputtype PermissionRequestHookInput = BaseHookInput & {
hook_event_name: 'PermissionRequest';
tool_name: string;
tool_input: unknown;
permission_suggestions?: PermissionUpdate[];
}HookJSONOutputNilai pengembalian hook.
type HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput;AsyncHookJSONOutputtype AsyncHookJSONOutput = {
async: true;
asyncTimeout?: number;
}SyncHookJSONOutputtype SyncHookJSONOutput = {
continue?: boolean;
suppressOutput?: boolean;
stopReason?: string;
decision?: 'approve' | 'block';
systemMessage?: string;
reason?: string;
hookSpecificOutput?:
| {
hookEventName: 'PreToolUse';
permissionDecision?: 'allow' | 'deny' | 'ask';
permissionDecisionReason?: string;
updatedInput?: Record<string, unknown>;
}
| {
hookEventName: 'UserPromptSubmit';
additionalContext?: string;
}
| {
hookEventName: 'SessionStart';
additionalContext?: string;
}
| {
hookEventName: 'PostToolUse';
additionalContext?: string;
};
}Dokumentasi skema input untuk semua tool Claude Code bawaan. Tipe-tipe ini diekspor dari @anthropic-ai/claude-agent-sdk dan dapat digunakan untuk interaksi tool yang aman tipe.
ToolInputCatatan: Ini adalah tipe dokumentasi saja untuk kejelasan. Ini mewakili union dari semua tipe input tool.
type ToolInput =
| AgentInput
| AskUserQuestionInput
| BashInput
| BashOutputInput
| FileEditInput
| FileReadInput
| FileWriteInput
| GlobInput
| GrepInput
| KillShellInput
| NotebookEditInput
| WebFetchInput
| WebSearchInput
| TodoWriteInput
| ExitPlanModeInput
| ListMcpResourcesInput
| ReadMcpResourceInput;Nama tool: Task
interface AgentInput {
/**
* Deskripsi singkat tugas (3-5 kata)
*/
description: string;
/**
* Tugas untuk dijalankan agent
*/
prompt: string;
/**
* Tipe agent khusus yang digunakan untuk tugas ini
*/
subagent_type: string;
}Meluncurkan agent baru untuk menangani tugas kompleks multi-langkah secara otonom.
Nama tool: AskUserQuestion
interface AskUserQuestionInput {
/**
* Pertanyaan untuk ditanyakan kepada pengguna (1-4 pertanyaan)
*/
questions: Array<{
/**
* Pertanyaan lengkap untuk ditanyakan kepada pengguna. Harus jelas, spesifik,
* dan diakhiri dengan tanda tanya.
*/
question: string;
/**
* Label sangat singkat ditampilkan sebagai chip/tag (maks 12 karakter).
* Contoh: "Auth method", "Library", "Approach"
*/
header: string;
/**
* Pilihan yang tersedia (2-4 opsi). Opsi "Other" disediakan
* secara otomatis.
*/
options: Array<{
/**
* Teks tampilan untuk opsi ini (1-5 kata)
*/
label: string;
/**
* Penjelasan tentang apa arti opsi ini
*/
description: string;
}>;
/**
* Atur ke true untuk memungkinkan beberapa pilihan
*/
multiSelect: boolean;
}>;
/**
* Jawaban pengguna diisi oleh sistem izin.
* Memetakan teks pertanyaan ke label opsi yang dipilih.
* Jawaban multi-pilih dipisahkan dengan koma.
*/
answers?: Record<string, string>;
}Menanyakan pertanyaan klarifikasi kepada pengguna selama eksekusi. Lihat Handling the AskUserQuestion Tool untuk detail penggunaan.
Nama tool: Bash
interface BashInput {
/**
* Perintah yang akan dieksekusi
*/
command: string;
/**
* Timeout opsional dalam milidetik (maks 600000)
*/
timeout?: number;
/**
* Deskripsi jelas dan ringkas tentang apa yang dilakukan perintah ini dalam 5-10 kata
*/
description?: string;
/**
* Atur ke true untuk menjalankan perintah ini di background
*/
run_in_background?: boolean;
}Mengeksekusi perintah bash dalam sesi shell persisten dengan timeout opsional dan eksekusi background.
Nama tool: BashOutput
interface BashOutputInput {
/**
* ID shell background untuk mengambil output dari
*/
bash_id: string;
/**
* Regex opsional untuk memfilter baris output
*/
filter?: string;
}Mengambil output dari shell bash background yang sedang berjalan atau selesai.
Nama tool: Edit
interface FileEditInput {
/**
* Path absolut ke file yang akan dimodifikasi
*/
file_path: string;
/**
* Teks yang akan diganti
*/
old_string: string;
/**
* Teks untuk menggantinya (harus berbeda dari old_string)
*/
new_string: string;
/**
* Ganti semua kemunculan old_string (default false)
*/
replace_all?: boolean;
}Melakukan penggantian string yang tepat dalam file.
Nama tool: Read
interface FileReadInput {
/**
* Path absolut ke file yang akan dibaca
*/
file_path: string;
/**
* Nomor baris untuk mulai membaca dari
*/
offset?: number;
/**
* Jumlah baris yang akan dibaca
*/
limit?: number;
}Membaca file dari filesystem lokal, termasuk teks, gambar, PDF, dan notebook Jupyter.
Nama tool: Write
interface FileWriteInput {
/**
* Path absolut ke file yang akan ditulis
*/
file_path: string;
/**
* Konten yang akan ditulis ke file
*/
content: string;
}Menulis file ke filesystem lokal, menimpa jika ada.
Nama tool: Glob
interface GlobInput {
/**
* Pola glob untuk mencocokkan file
*/
pattern: string;
/**
* Direktori untuk dicari (default ke cwd)
*/
path?: string;
}Pencocokan pola file cepat yang bekerja dengan ukuran codebase apa pun.
Nama tool: Grep
interface GrepInput {
/**
* Pola ekspresi reguler untuk dicari
*/
pattern: string;
/**
* File atau direktori untuk dicari (default ke cwd)
*/
path?: string;
/**
* Pola glob untuk memfilter file (misalnya "*.js")
*/
glob?: string;
/**
* Tipe file untuk dicari (misalnya "js", "py", "rust")
*/
type?: string;
/**
* Mode output: "content", "files_with_matches", atau "count"
*/
output_mode?: 'content' | 'files_with_matches' | 'count';
/**
* Pencarian case insensitive
*/
'-i'?: boolean;
/**
* Tampilkan nomor baris (untuk mode content)
*/
'-n'?: boolean;
/**
* Baris untuk ditampilkan sebelum setiap kecocokan
*/
'-B'?: number;
/**
* Baris untuk ditampilkan setelah setiap kecocokan
*/
'-A'?: number;
/**
* Baris untuk ditampilkan sebelum dan sesudah setiap kecocokan
*/
'-C'?: number;
/**
* Batasi output ke N baris/entri pertama
*/
head_limit?: number;
/**
* Aktifkan mode multiline
*/
multiline?: boolean;
}Tool pencarian yang kuat dibangun di atas ripgrep dengan dukungan regex.
Nama tool: KillBash
interface KillShellInput {
/**
* ID shell background yang akan dibunuh
*/
shell_id: string;
}Membunuh shell bash background yang sedang berjalan berdasarkan ID-nya.
Nama tool: NotebookEdit
interface NotebookEditInput {
/**
* Path absolut ke file notebook Jupyter
*/
notebook_path: string;
/**
* ID sel yang akan diedit
*/
cell_id?: string;
/**
* Sumber baru untuk sel
*/
new_source: string;
/**
* Tipe sel (code atau markdown)
*/
cell_type?: 'code' | 'markdown';
/**
* Tipe edit (replace, insert, delete)
*/
edit_mode?: 'replace' | 'insert' | 'delete';
}Mengedit sel dalam file notebook Jupyter.
Nama tool: WebFetch
interface WebFetchInput {
/**
* URL untuk mengambil konten dari
*/
url: string;
/**
* Prompt untuk dijalankan pada konten yang diambil
*/
prompt: string;
}Mengambil konten dari URL dan memprosesnya dengan model AI.
Nama tool: WebSearch
interface WebSearchInput {
/**
* Query pencarian yang digunakan
*/
query: string;
/**
* Hanya sertakan hasil dari domain ini
*/
allowed_domains?: string[];
/**
* Jangan pernah sertakan hasil dari domain ini
*/
blocked_domains?: string[];
}Mencari web dan mengembalikan hasil yang diformat.
Nama tool: TodoWrite
interface TodoWriteInput {
/**
* Daftar todo yang diperbarui
*/
todos: Array<{
/**
* Deskripsi tugas
*/
content: string;
/**
* Status tugas
*/
status: 'pending' | 'in_progress' | 'completed';
/**
* Bentuk aktif dari deskripsi tugas
*/
activeForm: string;
}>;
}Membuat dan mengelola daftar tugas terstruktur untuk melacak kemajuan.
Nama tool: ExitPlanMode
interface ExitPlanModeInput {
/**
* Rencana yang akan dijalankan oleh pengguna untuk persetujuan
*/
plan: string;
}Keluar dari mode perencanaan dan meminta pengguna untuk menyetujui rencana.
Nama tool: ListMcpResources
interface ListMcpResourcesInput {
/**
* Nama server opsional untuk memfilter resource
*/
server?: string;
}Mencantumkan resource MCP yang tersedia dari server yang terhubung.
Nama tool: ReadMcpResource
interface ReadMcpResourceInput {
/**
* Nama server MCP
*/
server: string;
/**
* URI resource yang akan dibaca
*/
uri: string;
}Membaca resource MCP tertentu dari server.
Dokumentasi skema output untuk semua tool Claude Code bawaan. Tipe-tipe ini mewakili data respons aktual yang dikembalikan oleh setiap tool.
ToolOutputCatatan: Ini adalah tipe dokumentasi saja untuk kejelasan. Ini mewakili union dari semua tipe output tool.
type ToolOutput =
| TaskOutput
| AskUserQuestionOutput
| BashOutput
| BashOutputToolOutput
| EditOutput
| ReadOutput
| WriteOutput
| GlobOutput
| GrepOutput
| KillBashOutput
| NotebookEditOutput
| WebFetchOutput
| WebSearchOutput
| TodoWriteOutput
| ExitPlanModeOutput
| ListMcpResourcesOutput
| ReadMcpResourceOutput;Nama tool: Task
interface TaskOutput {
/**
* Pesan hasil akhir dari subagen
*/
result: string;
/**
* Statistik penggunaan token
*/
usage?: {
input_tokens: number;
output_tokens: number;
cache_creation_input_tokens?: number;
cache_read_input_tokens?: number;
};
/**
* Total biaya dalam USD
*/
total_cost_usd?: number;
/**
* Durasi eksekusi dalam milidetik
*/
duration_ms?: number;
}Mengembalikan hasil akhir dari subagen setelah menyelesaikan tugas yang didelegasikan.
Nama tool: AskUserQuestion
interface AskUserQuestionOutput {
/**
* Pertanyaan yang ditanyakan
*/
questions: Array<{
question: string;
header: string;
options: Array<{
label: string;
description: string;
}>;
multiSelect: boolean;
}>;
/**
* Jawaban yang diberikan oleh pengguna.
* Memetakan teks pertanyaan ke string jawaban.
* Jawaban multi-pilih dipisahkan dengan koma.
*/
answers: Record<string, string>;
}Mengembalikan pertanyaan yang ditanyakan dan jawaban pengguna.
Nama tool: Bash
interface BashOutput {
/**
* Output stdout dan stderr gabungan
*/
output: string;
/**
* Exit code perintah
*/
exitCode: number;
/**
* Apakah perintah dibunuh karena timeout
*/
killed?: boolean;
/**
* Shell ID untuk proses background
*/
shellId?: string;
}Mengembalikan output perintah dengan status exit. Perintah background mengembalikan segera dengan shellId.
Nama tool: BashOutput
interface BashOutputToolOutput {
/**
* Output baru sejak pemeriksaan terakhir
*/
output: string;
/**
* Status shell saat ini
*/
status: 'running' | 'completed' | 'failed';
/**
* Exit code (saat selesai)
*/
exitCode?: number;
}Mengembalikan output inkremental dari shell background.
Nama tool: Edit
interface EditOutput {
/**
* Pesan konfirmasi
*/
message: string;
/**
* Jumlah penggantian yang dibuat
*/
replacements: number;
/**
* Path file yang diedit
*/
file_path: string;
}Mengembalikan konfirmasi edit yang berhasil dengan jumlah penggantian.
Nama alat: Read
type ReadOutput =
| TextFileOutput
| ImageFileOutput
| PDFFileOutput
| NotebookFileOutput;
interface TextFileOutput {
/**
* Konten file dengan nomor baris
*/
content: string;
/**
* Total jumlah baris dalam file
*/
total_lines: number;
/**
* Baris yang benar-benar dikembalikan
*/
lines_returned: number;
}
interface ImageFileOutput {
/**
* Data gambar yang dikodekan Base64
*/
image: string;
/**
* Tipe MIME gambar
*/
mime_type: string;
/**
* Ukuran file dalam byte
*/
file_size: number;
}
interface PDFFileOutput {
/**
* Array konten halaman
*/
pages: Array<{
page_number: number;
text?: string;
images?: Array<{
image: string;
mime_type: string;
}>;
}>;
/**
* Total jumlah halaman
*/
total_pages: number;
}
interface NotebookFileOutput {
/**
* Sel notebook Jupyter
*/
cells: Array<{
cell_type: 'code' | 'markdown';
source: string;
outputs?: any[];
execution_count?: number;
}>;
/**
* Metadata notebook
*/
metadata?: Record<string, any>;
}Mengembalikan konten file dalam format yang sesuai dengan tipe file.
Nama alat: Write
interface WriteOutput {
/**
* Pesan kesuksesan
*/
message: string;
/**
* Jumlah byte yang ditulis
*/
bytes_written: number;
/**
* Jalur file yang ditulis
*/
file_path: string;
}Mengembalikan konfirmasi setelah berhasil menulis file.
Nama alat: Glob
interface GlobOutput {
/**
* Array jalur file yang cocok
*/
matches: string[];
/**
* Jumlah kecocokan yang ditemukan
*/
count: number;
/**
* Direktori pencarian yang digunakan
*/
search_path: string;
}Mengembalikan jalur file yang cocok dengan pola glob, diurutkan berdasarkan waktu modifikasi.
Nama alat: Grep
type GrepOutput =
| GrepContentOutput
| GrepFilesOutput
| GrepCountOutput;
interface GrepContentOutput {
/**
* Baris yang cocok dengan konteks
*/
matches: Array<{
file: string;
line_number?: number;
line: string;
before_context?: string[];
after_context?: string[];
}>;
/**
* Total jumlah kecocokan
*/
total_matches: number;
}
interface GrepFilesOutput {
/**
* File yang berisi kecocokan
*/
files: string[];
/**
* Jumlah file dengan kecocokan
*/
count: number;
}
interface GrepCountOutput {
/**
* Jumlah kecocokan per file
*/
counts: Array<{
file: string;
count: number;
}>;
/**
* Total kecocokan di semua file
*/
total: number;
}Mengembalikan hasil pencarian dalam format yang ditentukan oleh output_mode.
Nama alat: KillBash
interface KillBashOutput {
/**
* Pesan kesuksesan
*/
message: string;
/**
* ID shell yang dibunuh
*/
shell_id: string;
}Mengembalikan konfirmasi setelah menghentikan shell latar belakang.
Nama alat: NotebookEdit
interface NotebookEditOutput {
/**
* Pesan kesuksesan
*/
message: string;
/**
* Jenis edit yang dilakukan
*/
edit_type: 'replaced' | 'inserted' | 'deleted';
/**
* ID sel yang terpengaruh
*/
cell_id?: string;
/**
* Total sel dalam notebook setelah edit
*/
total_cells: number;
}Mengembalikan konfirmasi setelah memodifikasi notebook Jupyter.
Nama alat: WebFetch
interface WebFetchOutput {
/**
* Respons model AI terhadap prompt
*/
response: string;
/**
* URL yang diambil
*/
url: string;
/**
* URL akhir setelah pengalihan
*/
final_url?: string;
/**
* Kode status HTTP
*/
status_code?: number;
}Mengembalikan analisis AI terhadap konten web yang diambil.
Nama alat: WebSearch
interface WebSearchOutput {
/**
* Hasil pencarian
*/
results: Array<{
title: string;
url: string;
snippet: string;
/**
* Metadata tambahan jika tersedia
*/
metadata?: Record<string, any>;
}>;
/**
* Total jumlah hasil
*/
total_results: number;
/**
* Query yang dicari
*/
query: string;
}Mengembalikan hasil pencarian web yang diformat.
Nama alat: TodoWrite
interface TodoWriteOutput {
/**
* Pesan kesuksesan
*/
message: string;
/**
* Statistik todo saat ini
*/
stats: {
total: number;
pending: number;
in_progress: number;
completed: number;
};
}Mengembalikan konfirmasi dengan statistik tugas saat ini.
Nama alat: ExitPlanMode
interface ExitPlanModeOutput {
/**
* Pesan konfirmasi
*/
message: string;
/**
* Apakah pengguna menyetujui rencana
*/
approved?: boolean;
}Mengembalikan konfirmasi setelah keluar dari mode rencana.
Nama alat: ListMcpResources
interface ListMcpResourcesOutput {
/**
* Sumber daya yang tersedia
*/
resources: Array<{
uri: string;
name: string;
description?: string;
mimeType?: string;
server: string;
}>;
/**
* Total jumlah sumber daya
*/
total: number;
}Mengembalikan daftar sumber daya MCP yang tersedia.
Nama alat: ReadMcpResource
interface ReadMcpResourceOutput {
/**
* Konten sumber daya
*/
contents: Array<{
uri: string;
mimeType?: string;
text?: string;
blob?: string;
}>;
/**
* Server yang menyediakan sumber daya
*/
server: string;
}Mengembalikan konten sumber daya MCP yang diminta.
PermissionUpdateOperasi untuk memperbarui izin.
type PermissionUpdate =
| {
type: 'addRules';
rules: PermissionRuleValue[];
behavior: PermissionBehavior;
destination: PermissionUpdateDestination;
}
| {
type: 'replaceRules';
rules: PermissionRuleValue[];
behavior: PermissionBehavior;
destination: PermissionUpdateDestination;
}
| {
type: 'removeRules';
rules: PermissionRuleValue[];
behavior: PermissionBehavior;
destination: PermissionUpdateDestination;
}
| {
type: 'setMode';
mode: PermissionMode;
destination: PermissionUpdateDestination;
}
| {
type: 'addDirectories';
directories: string[];
destination: PermissionUpdateDestination;
}
| {
type: 'removeDirectories';
directories: string[];
destination: PermissionUpdateDestination;
}PermissionBehaviortype PermissionBehavior = 'allow' | 'deny' | 'ask';PermissionUpdateDestinationtype PermissionUpdateDestination =
| 'userSettings' // Pengaturan pengguna global
| 'projectSettings' // Pengaturan proyek per-direktori
| 'localSettings' // Pengaturan lokal yang diabaikan git
| 'session' // Sesi saat ini sajaPermissionRuleValuetype PermissionRuleValue = {
toolName: string;
ruleContent?: string;
}ApiKeySourcetype ApiKeySource = 'user' | 'project' | 'org' | 'temporary';SdkBetaFitur beta yang tersedia yang dapat diaktifkan melalui opsi betas. Lihat header Beta untuk informasi lebih lanjut.
type SdkBeta = 'context-1m-2025-08-07';| Nilai | Deskripsi | Model Kompatibel |
|---|---|---|
'context-1m-2025-08-07' | Mengaktifkan jendela konteks 1 juta token | Claude Sonnet 4, Claude Sonnet 4.5 |
SlashCommandInformasi tentang perintah garis miring yang tersedia.
type SlashCommand = {
name: string;
description: string;
argumentHint: string;
}ModelInfoInformasi tentang model yang tersedia.
type ModelInfo = {
value: string;
displayName: string;
description: string;
}McpServerStatusStatus server MCP yang terhubung.
type McpServerStatus = {
name: string;
status: 'connected' | 'failed' | 'needs-auth' | 'pending';
serverInfo?: {
name: string;
version: string;
};
}AccountInfoInformasi akun untuk pengguna yang diautentikasi.
type AccountInfo = {
email?: string;
organization?: string;
subscriptionType?: string;
tokenSource?: string;
apiKeySource?: string;
}ModelUsageStatistik penggunaan per-model yang dikembalikan dalam pesan hasil.
type ModelUsage = {
inputTokens: number;
outputTokens: number;
cacheReadInputTokens: number;
cacheCreationInputTokens: number;
webSearchRequests: number;
costUSD: number;
contextWindow: number;
}ConfigScopetype ConfigScope = 'local' | 'user' | 'project';NonNullableUsageVersi Usage dengan semua field yang dapat bernilai null dibuat non-nullable.
type NonNullableUsage = {
[K in keyof Usage]: NonNullable<Usage[K]>;
}UsageStatistik penggunaan token (dari @anthropic-ai/sdk).
type Usage = {
input_tokens: number | null;
output_tokens: number | null;
cache_creation_input_tokens?: number | null;
cache_read_input_tokens?: number | null;
}CallToolResultJenis hasil alat MCP (dari @modelcontextprotocol/sdk/types.js).
type CallToolResult = {
content: Array<{
type: 'text' | 'image' | 'resource';
// Field tambahan bervariasi menurut tipe
}>;
isError?: boolean;
}AbortErrorKelas error khusus untuk operasi abort.
class AbortError extends Error {}SandboxSettingsKonfigurasi untuk perilaku sandbox. Gunakan ini untuk mengaktifkan sandboxing perintah dan mengonfigurasi pembatasan jaringan secara terprogram.
type SandboxSettings = {
enabled?: boolean;
autoAllowBashIfSandboxed?: boolean;
excludedCommands?: string[];
allowUnsandboxedCommands?: boolean;
network?: NetworkSandboxSettings;
ignoreViolations?: SandboxIgnoreViolations;
enableWeakerNestedSandbox?: boolean;
}| Properti | Tipe | Default | Deskripsi |
|---|---|---|---|
enabled | boolean | false | Aktifkan mode sandbox untuk eksekusi perintah |
autoAllowBashIfSandboxed | boolean | false | Setujui otomatis perintah bash saat sandbox diaktifkan |
excludedCommands | string[] | [] | Perintah yang selalu melewati pembatasan sandbox (misalnya, ['docker']). Ini berjalan tanpa sandbox secara otomatis tanpa keterlibatan model |
Pembatasan akses sistem file dan jaringan TIDAK dikonfigurasi melalui pengaturan sandbox. Sebaliknya, mereka berasal dari aturan izin:
Gunakan pengaturan sandbox untuk sandboxing eksekusi perintah, dan aturan izin untuk kontrol akses sistem file dan jaringan.
import { query } from "@anthropic-ai/claude-agent-sdk";
const result = await query({
prompt: "Build and test my project",
options: {
sandbox: {
enabled: true,
autoAllowBashIfSandboxed: true,
excludedCommands: ["docker"],
network: {
allowLocalBinding: true,
allowUnixSockets: ["/var/run/docker.sock"]
}
}
}
});NetworkSandboxSettingsKonfigurasi khusus jaringan untuk mode sandbox.
type NetworkSandboxSettings = {
allowLocalBinding?: boolean;
allowUnixSockets?: string[];
allowAllUnixSockets?: boolean;
httpProxyPort?: number;
socksProxyPort?: number;
}| Properti | Tipe | Default | Deskripsi |
|---|---|---|---|
allowLocalBinding | boolean | false | Izinkan proses untuk mengikat ke port lokal (misalnya, untuk server dev) |
allowUnixSockets | string[] | [] | Jalur soket Unix yang dapat diakses proses (misalnya, soket Docker) |
allowAllUnixSockets | boolean | false | Izinkan akses ke semua soket Unix |
httpProxyPort |
SandboxIgnoreViolationsKonfigurasi untuk mengabaikan pelanggaran sandbox tertentu.
type SandboxIgnoreViolations = {
file?: string[];
network?: string[];
}| Properti | Tipe | Default | Deskripsi |
|---|---|---|---|
file | string[] | [] | Pola jalur file untuk mengabaikan pelanggaran |
network | string[] | [] | Pola jaringan untuk mengabaikan pelanggaran |
Ketika allowUnsandboxedCommands diaktifkan, model dapat meminta untuk menjalankan perintah di luar sandbox dengan mengatur dangerouslyDisableSandbox: true dalam input alat. Permintaan ini kembali ke sistem izin yang ada, yang berarti handler canUseTool Anda akan dipanggil, memungkinkan Anda untuk menerapkan logika otorisasi khusus.
excludedCommands vs allowUnsandboxedCommands:
excludedCommands: Daftar statis perintah yang selalu melewati sandbox secara otomatis (misalnya, ['docker']). Model tidak memiliki kontrol atas ini.allowUnsandboxedCommands: Membiarkan model memutuskan pada waktu runtime apakah akan meminta eksekusi tanpa sandbox dengan mengatur dangerouslyDisableSandbox: true dalam input alat.import { query } from "@anthropic-ai/claude-agent-sdk";
const result = await query({
prompt: "Deploy my application",
options: {
sandbox: {
enabled: true,
allowUnsandboxedCommands: true // Model dapat meminta eksekusi tanpa sandbox
},
permissionMode: "default",
canUseTool: async (tool, input) => {
// Periksa apakah model meminta untuk melewati sandbox
if (tool === "Bash" && input.dangerouslyDisableSandbox) {
// Model ingin menjalankan perintah ini di luar sandbox
console.log(`Unsandboxed command requested: ${input.command}`);
// Kembalikan true untuk mengizinkan, false untuk menolak
return isCommandAuthorized(input.command);
}
return true;
}
}
});Pola ini memungkinkan Anda untuk:
Perintah yang berjalan dengan dangerouslyDisableSandbox: true memiliki akses sistem penuh. Pastikan handler canUseTool Anda memvalidasi permintaan ini dengan hati-hati.
allowDangerouslySkipPermissions |
boolean |
false |
Aktifkan bypass izin. Diperlukan saat menggunakan permissionMode: 'bypassPermissions' |
allowedTools | string[] | Semua tool | Daftar nama tool yang diizinkan |
betas | SdkBeta[] | [] | Aktifkan fitur beta (misalnya, ['context-1m-2025-08-07']) |
canUseTool | CanUseTool | undefined | Fungsi izin kustom untuk penggunaan tool |
continue | boolean | false | Lanjutkan percakapan terbaru |
cwd | string | process.cwd() | Direktori kerja saat ini |
disallowedTools | string[] | [] | Daftar nama tool yang tidak diizinkan |
enableFileCheckpointing | boolean | false | Aktifkan pelacakan perubahan file untuk rewinding. Lihat File checkpointing |
env | Dict<string> | process.env | Variabel lingkungan |
executable | 'bun' | 'deno' | 'node' | Terdeteksi otomatis | Runtime JavaScript yang digunakan |
executableArgs | string[] | [] | Argumen untuk diteruskan ke executable |
extraArgs | Record<string, string | null> | {} | Argumen tambahan |
fallbackModel | string | undefined | Model yang digunakan jika model utama gagal |
forkSession | boolean | false | Saat melanjutkan dengan resume, fork ke ID sesi baru alih-alih melanjutkan sesi asli |
hooks | Partial<Record<HookEvent, HookCallbackMatcher[]>> | {} | Callback hook untuk event |
includePartialMessages | boolean | false | Sertakan event pesan parsial |
maxBudgetUsd | number | undefined | Anggaran maksimal dalam USD untuk query |
maxThinkingTokens | number | undefined | Token maksimal untuk proses thinking |
maxTurns | number | undefined | Putaran percakapan maksimal |
mcpServers | Record<string, [McpServerConfig](#mcpserverconfig)> | {} | Konfigurasi server MCP |
model | string | Default dari CLI | Model Claude yang digunakan |
outputFormat | { type: 'json_schema', schema: JSONSchema } | undefined | Tentukan format output untuk hasil agent. Lihat Structured outputs untuk detail |
pathToClaudeCodeExecutable | string | Menggunakan executable bawaan | Path ke executable Claude Code |
permissionMode | PermissionMode | 'default' | Mode izin untuk sesi |
permissionPromptToolName | string | undefined | Nama tool MCP untuk prompt izin |
plugins | SdkPluginConfig[] | [] | Muat plugin kustom dari path lokal. Lihat Plugins untuk detail |
resume | string | undefined | ID sesi untuk dilanjutkan |
resumeSessionAt | string | undefined | Lanjutkan sesi pada UUID pesan tertentu |
sandbox | SandboxSettings | undefined | Konfigurasi perilaku sandbox secara terprogram. Lihat Sandbox settings untuk detail |
settingSources | SettingSource[] | [] (tidak ada pengaturan) | Kontrol sumber pengaturan berbasis filesystem yang dimuat. Saat dihilangkan, tidak ada pengaturan yang dimuat. Catatan: Harus menyertakan 'project' untuk memuat file CLAUDE.md |
stderr | (data: string) => void | undefined | Callback untuk output stderr |
strictMcpConfig | boolean | false | Terapkan validasi MCP ketat |
systemPrompt | string | { type: 'preset'; preset: 'claude_code'; append?: string } | undefined (prompt kosong) | Konfigurasi system prompt. Teruskan string untuk prompt kustom, atau { type: 'preset', preset: 'claude_code' } untuk menggunakan system prompt Claude Code. Saat menggunakan bentuk objek preset, tambahkan append untuk memperluas system prompt dengan instruksi tambahan |
tools | string[] | { type: 'preset'; preset: 'claude_code' } | undefined | Konfigurasi tool. Teruskan array nama tool atau gunakan preset untuk mendapatkan tool default Claude Code |
supportedModels()| Mengembalikan model yang tersedia dengan info tampilan |
mcpServerStatus() | Mengembalikan status server MCP yang terhubung |
accountInfo() | Mengembalikan informasi akun |
allowUnsandboxedCommands | boolean | false | Izinkan model untuk meminta menjalankan perintah di luar sandbox. Ketika true, model dapat mengatur dangerouslyDisableSandbox dalam input alat, yang kembali ke sistem izin |
network | NetworkSandboxSettings | undefined | Konfigurasi sandbox khusus jaringan |
ignoreViolations | SandboxIgnoreViolations | undefined | Konfigurasi pelanggaran sandbox mana yang akan diabaikan |
enableWeakerNestedSandbox | boolean | false | Aktifkan sandbox bersarang yang lebih lemah untuk kompatibilitas |
number |
undefined |
| Port proxy HTTP untuk permintaan jaringan |
socksProxyPort | number | undefined | Port proxy SOCKS untuk permintaan jaringan |