Langsung ke konten utama

Instalasi

npm install @anthropic-ai/claude-agent-sdk
SDK menggabungkan biner Claude Code asli untuk platform Anda sebagai dependensi opsional seperti @anthropic-ai/claude-agent-sdk-darwin-arm64. Anda tidak perlu menginstal Claude Code secara terpisah. Jika pengelola paket Anda melewatkan dependensi opsional, SDK melempar Native CLI binary for <platform> not found; setel pathToClaudeCodeExecutable ke biner claude yang diinstal secara terpisah sebagai gantinya.

Kompilasi ke executable tunggal

Ketika Anda mengompilasi aplikasi Anda menjadi executable file tunggal dengan bun build --compile, SDK tidak dapat menyelesaikan biner CLI yang dibundel saat runtime. require.resolve tidak berfungsi di dalam filesystem virtual $bunfs executable yang dikompilasi, jadi SDK melempar Native CLI binary for <platform> not found. Untuk mengatasi ini, sematkan biner platform sebagai aset file, ekstrak ke path nyata saat startup dengan extractFromBunfs(), dan teruskan path tersebut ke pathToClaudeCodeExecutable. Helper extractFromBunfs() memerlukan @anthropic-ai/claude-agent-sdk v0.3.144 atau lebih baru. Contoh di bawah ini membangun untuk macOS pada Apple Silicon:
import binPath from "@anthropic-ai/claude-agent-sdk-darwin-arm64/claude" with { type: "file" };
import { extractFromBunfs } from "@anthropic-ai/claude-agent-sdk/extract";
import { query } from "@anthropic-ai/claude-agent-sdk";

const cliPath = extractFromBunfs(binPath);

for await (const message of query({
  prompt: "Hello",
  options: { pathToClaudeCodeExecutable: cliPath },
})) {
  console.log(message);
}
extractFromBunfs() menyalin biner yang disematkan keluar dari filesystem virtual executable yang dikompilasi ke direktori temp per-pengguna dan mengembalikan path nyata. Di luar executable yang dikompilasi, ia mengembalikan path input tidak berubah, jadi kode yang sama berjalan dalam pengembangan tanpa modifikasi. Setiap executable yang dikompilasi menyematkan biner platform tunggal. Cocokkan paket platform dalam impor ke --target Anda:
  • Untuk cross-compile, instal paket platform yang tidak cocok, misalnya npm install @anthropic-ai/claude-agent-sdk-linux-x64 --force.
  • Di Windows, subpath biner adalah claude.exe, misalnya @anthropic-ai/claude-agent-sdk-win32-x64/claude.exe.

Fungsi

query()

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

ParameterTipeDeskripsi
promptstring | AsyncIterable<SDKUserMessage>Prompt input sebagai string atau async iterable untuk mode streaming
optionsOptionsObjek konfigurasi opsional (lihat tipe Options di bawah)

Pengembalian

Mengembalikan objek Query yang memperluas AsyncGenerator<SDKMessage, void> dengan metode tambahan.

startup()

Pra-pemanasan subprocess CLI dengan menspawnya dan menyelesaikan handshake inisialisasi sebelum prompt tersedia. Handle WarmQuery yang dikembalikan menerima prompt nanti dan menulisnya ke proses yang sudah siap, sehingga panggilan query() pertama diselesaikan tanpa membayar biaya spawn dan inisialisasi subprocess secara inline.
function startup(params?: {
  options?: Options;
  initializeTimeoutMs?: number;
}): Promise<WarmQuery>;

Parameter

ParameterTipeDeskripsi
optionsOptionsObjek konfigurasi opsional. Sama dengan parameter options ke query()
initializeTimeoutMsnumberWaktu maksimum dalam milidetik untuk menunggu inisialisasi subprocess. Default ke 60000. Jika inisialisasi tidak selesai tepat waktu, promise ditolak dengan error timeout

Pengembalian

Mengembalikan Promise<WarmQuery> yang diselesaikan setelah subprocess telah dispawn dan menyelesaikan handshake inisialisasinya.

Contoh

Panggil startup() lebih awal, misalnya saat boot aplikasi, kemudian panggil .query() pada handle yang dikembalikan setelah prompt siap. Ini memindahkan spawn subprocess dan inisialisasi keluar dari jalur kritis.
import { startup } from "@anthropic-ai/claude-agent-sdk";

// Bayar biaya startup di muka
const warm = await startup({ options: { maxTurns: 3 } });

// Nanti, ketika prompt siap, ini langsung
for await (const message of warm.query("What files are here?")) {
  console.log(message);
}

tool()

Membuat definisi tool MCP yang aman tipe untuk digunakan dengan server MCP SDK.
function tool<Schema extends AnyZodRawShape>(
  name: string,
  description: string,
  inputSchema: Schema,
  handler: (args: InferShape<Schema>, extra: unknown) => Promise<CallToolResult>,
  extras?: { annotations?: ToolAnnotations }
): SdkMcpToolDefinition<Schema>;

Parameter

ParameterTipeDeskripsi
namestringNama tool
descriptionstringDeskripsi tentang apa yang dilakukan tool
inputSchemaSchema extends AnyZodRawShapeSkema Zod yang mendefinisikan parameter input tool (mendukung Zod 3 dan Zod 4)
handler(args, extra) => Promise<CallToolResult>Fungsi asinkron yang mengeksekusi logika tool
extras{ annotations?: ToolAnnotations }Anotasi tool MCP opsional yang memberikan petunjuk perilaku kepada klien

ToolAnnotations

Dieksport ulang dari @modelcontextprotocol/sdk/types.js. Semua field adalah petunjuk opsional; klien tidak boleh mengandalkannya untuk keputusan keamanan.
FieldTipeDefaultDeskripsi
titlestringundefinedJudul yang dapat dibaca manusia untuk tool
readOnlyHintbooleanfalseJika true, tool tidak memodifikasi lingkungannya
destructiveHintbooleantrueJika true, tool dapat melakukan pembaruan destruktif (hanya bermakna ketika readOnlyHint adalah false)
idempotentHintbooleanfalseJika true, panggilan berulang dengan argumen yang sama tidak memiliki efek tambahan (hanya bermakna ketika readOnlyHint adalah false)
openWorldHintbooleantrueJika true, tool berinteraksi dengan entitas eksternal (misalnya, pencarian web). Jika false, domain tool ditutup (misalnya, tool memori)
import { tool } from "@anthropic-ai/claude-agent-sdk";
import { z } from "zod";

const searchTool = tool(
  "search",
  "Search the web",
  { query: z.string() },
  async ({ query }) => {
    return { content: [{ type: "text", text: `Results for: ${query}` }] };
  },
  { annotations: { readOnlyHint: true, openWorldHint: true } }
);

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

ParameterTipeDeskripsi
options.namestringNama server MCP
options.versionstringString versi opsional
options.toolsArray<SdkMcpToolDefinition>Array definisi tool yang dibuat dengan tool()

listSessions()

Menemukan dan membuat daftar sesi masa lalu dengan metadata ringan. Filter berdasarkan direktori proyek atau buat daftar sesi di semua proyek.
function listSessions(options?: ListSessionsOptions): Promise<SDKSessionInfo[]>;

Parameter

ParameterTipeDefaultDeskripsi
options.dirstringundefinedDirektori untuk membuat daftar sesi. Ketika dihilangkan, mengembalikan sesi di semua proyek
options.limitnumberundefinedJumlah maksimum sesi yang akan dikembalikan
options.includeWorktreesbooleantrueKetika dir berada di dalam repositori git, sertakan sesi dari semua jalur worktree

Tipe pengembalian: SDKSessionInfo

PropertiTipeDeskripsi
sessionIdstringPengenal sesi unik (UUID)
summarystringJudul tampilan: judul kustom, ringkasan yang dihasilkan otomatis, atau prompt pertama
lastModifiednumberWaktu modifikasi terakhir dalam milidetik sejak epoch
fileSizenumber | undefinedUkuran file sesi dalam byte. Hanya diisi untuk penyimpanan JSONL lokal
customTitlestring | undefinedJudul sesi yang ditetapkan pengguna (melalui /rename)
firstPromptstring | undefinedPrompt pengguna bermakna pertama dalam sesi
gitBranchstring | undefinedCabang Git di akhir sesi
cwdstring | undefinedDirektori kerja untuk sesi
tagstring | undefinedTag sesi yang ditetapkan pengguna (lihat tagSession())
createdAtnumber | undefinedWaktu pembuatan dalam milidetik sejak epoch, dari timestamp entri pertama

Contoh

Cetak 10 sesi terbaru untuk proyek. Hasil diurutkan berdasarkan lastModified menurun, jadi item pertama adalah yang terbaru. Hilangkan dir untuk mencari di semua proyek.
import { listSessions } from "@anthropic-ai/claude-agent-sdk";

const sessions = await listSessions({ dir: "/path/to/project", limit: 10 });

for (const session of sessions) {
  console.log(`${session.summary} (${session.sessionId})`);
}

getSessionMessages()

Membaca pesan pengguna dan asisten dari transkrip sesi masa lalu.
function getSessionMessages(
  sessionId: string,
  options?: GetSessionMessagesOptions
): Promise<SessionMessage[]>;

Parameter

ParameterTipeDefaultDeskripsi
sessionIdstringrequiredUUID sesi untuk dibaca (lihat listSessions())
options.dirstringundefinedDirektori proyek untuk menemukan sesi. Ketika dihilangkan, mencari di semua proyek
options.limitnumberundefinedJumlah maksimum pesan yang akan dikembalikan
options.offsetnumberundefinedJumlah pesan yang akan dilewati dari awal

Tipe pengembalian: SessionMessage

PropertiTipeDeskripsi
type"user" | "assistant"Peran pesan
uuidstringPengenal pesan unik
session_idstringSesi yang pesan ini milik
messageunknownPayload pesan mentah dari transkrip
parent_tool_use_idstring | nullUntuk pesan subagent, tool_use_id dari panggilan tool Agent yang memicu. null untuk pesan sesi utama dan sesi yang lebih lama

Contoh

import { listSessions, getSessionMessages } from "@anthropic-ai/claude-agent-sdk";

const [latest] = await listSessions({ dir: "/path/to/project", limit: 1 });

if (latest) {
  const messages = await getSessionMessages(latest.sessionId, {
    dir: "/path/to/project",
    limit: 20
  });

  for (const msg of messages) {
    console.log(`[${msg.type}] ${msg.uuid}`);
  }
}

getSessionInfo()

Membaca metadata untuk sesi tunggal berdasarkan ID tanpa memindai direktori proyek lengkap.
function getSessionInfo(
  sessionId: string,
  options?: GetSessionInfoOptions
): Promise<SDKSessionInfo | undefined>;

Parameter

ParameterTipeDefaultDeskripsi
sessionIdstringrequiredUUID sesi yang akan dicari
options.dirstringundefinedJalur direktori proyek. Ketika dihilangkan, mencari di semua direktori proyek
Mengembalikan SDKSessionInfo, atau undefined jika sesi tidak ditemukan.

renameSession()

Mengganti nama sesi dengan menambahkan entri judul kustom. Panggilan berulang aman; judul terbaru menang.
function renameSession(
  sessionId: string,
  title: string,
  options?: SessionMutationOptions
): Promise<void>;

Parameter

ParameterTipeDefaultDeskripsi
sessionIdstringrequiredUUID sesi yang akan diganti nama
titlestringrequiredJudul baru. Harus tidak kosong setelah memangkas spasi putih
options.dirstringundefinedJalur direktori proyek. Ketika dihilangkan, mencari di semua direktori proyek

tagSession()

Menandai sesi. Lewatkan null untuk menghapus tag. Panggilan berulang aman; tag terbaru menang.
function tagSession(
  sessionId: string,
  tag: string | null,
  options?: SessionMutationOptions
): Promise<void>;

Parameter

ParameterTipeDefaultDeskripsi
sessionIdstringrequiredUUID sesi yang akan ditandai
tagstring | nullrequiredString tag, atau null untuk menghapus
options.dirstringundefinedJalur direktori proyek. Ketika dihilangkan, mencari di semua direktori proyek

resolveSettings()

Menyelesaikan pengaturan Claude Code yang efektif untuk direktori tertentu menggunakan mesin penggabungan yang sama dengan CLI, tanpa menspawn CLI Claude. Gunakan untuk memeriksa konfigurasi apa yang akan dilihat oleh panggilan query() sebelum memanggil satu.
Fungsi ini alpha dan API-nya mungkin berubah sebelum stabilisasi. Fungsi ini membaca sumber MDM, termasuk plist macOS dan Windows HKLM/HKCU, untuk paritas dengan startup CLI, tetapi tidak mengeksekusi subprocess policyHelper yang dikonfigurasi admin. Field permissions.defaultMode dikembalikan apa adanya dari semua tingkat termasuk pengaturan proyek. Filter kepercayaan yang diterapkan CLI sebelum menghormati mode izin yang meningkat tidak diterapkan.
function resolveSettings(
  options?: ResolveSettingsOptions
): Promise<ResolvedSettings>;

Parameter

resolveSettings() menerima objek opsi tunggal. Semua field bersifat opsional.
ParameterTipeDefaultDeskripsi
options.cwdstringprocess.cwd()Direktori untuk menyelesaikan pengaturan proyek dan lokal relatif terhadap
options.settingSourcesSettingSource[]Semua sumberSumber filesystem mana yang akan dimuat. Lewatkan [] untuk melewati pengaturan pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola dimuat dalam semua kasus
options.managedSettingsSettingsundefinedPengaturan tingkat kebijakan pembatasan yang disediakan oleh host penyematan. Dijatuhkan secara default ketika tingkat terkelola yang diterapkan admin hadir; digabungkan di bawah tingkat itu ketika parentSettingsBehavior adalah "merge". Kunci non-pembatasan seperti model secara diam-diam dijatuhkan sehingga opsi ini dapat memperketat kebijakan terkelola tetapi tidak melonggarkannya
options.serverManagedSettingsSettingsundefinedPayload pengaturan terkelola server dari /api/claude_code/settings. Kunci non-pembatasan melewati tanpa filter

Tipe pengembalian: ResolvedSettings

resolveSettings() mengembalikan objek yang menjelaskan pengaturan yang digabungkan dan sumber yang berkontribusi pada setiap kunci.
PropertiTipeDeskripsi
effectiveSettingsPengaturan yang digabungkan setelah menerapkan semua sumber yang diaktifkan dalam urutan preseden
provenancePartial<Record<keyof Settings, ProvenanceEntry>>Untuk setiap kunci tingkat atas dalam effective, sumber mana yang memasok nilai
sourcesArray<{ source, settings, path?, policyOrigin? }>Pengaturan mentah per-sumber, diurutkan dari preseden terendah hingga tertinggi

Contoh

Contoh di bawah ini menyelesaikan pengaturan untuk direktori proyek dan mencetak sumber yang mengontrol periode pembersihan.
import { resolveSettings } from "@anthropic-ai/claude-agent-sdk";

const { effective, provenance } = await resolveSettings({
  cwd: "/path/to/project",
  settingSources: ["user", "project", "local"],
});

console.log(`Cleanup period: ${effective.cleanupPeriodDays} days`);
console.log(`Set by: ${provenance.cleanupPeriodDays?.source}`);

Tipe

Options

Objek konfigurasi untuk fungsi query().
PropertiTipeDefaultDeskripsi
abortControllerAbortControllernew AbortController()Pengontrol untuk membatalkan operasi
additionalDirectoriesstring[][]Direktori tambahan yang dapat diakses Claude
agentstringundefinedNama agen untuk thread utama. Agen harus didefinisikan dalam opsi agents atau dalam pengaturan
agentsRecord<string, [AgentDefinition](#agentdefinition)>undefinedTentukan subagen secara terprogram
agentProgressSummariesbooleanfalseKetika true, hasilkan ringkasan kemajuan satu baris untuk subagen dan teruskan pada event task_progress melalui field summary. Berlaku untuk subagen foreground dan background
allowDangerouslySkipPermissionsbooleanfalseAktifkan bypass izin. Diperlukan saat menggunakan permissionMode: 'bypassPermissions'
allowedToolsstring[][]Tool untuk auto-approve tanpa prompt. Ini tidak membatasi Claude hanya pada tool ini; tool yang tidak terdaftar jatuh ke permissionMode dan canUseTool. Gunakan disallowedTools untuk memblokir tool. Lihat Izin
betasSdkBeta[][]Aktifkan fitur beta
canUseToolCanUseToolundefinedFungsi izin kustom untuk penggunaan tool
continuebooleanfalseLanjutkan percakapan terbaru
cwdstringprocess.cwd()Direktori kerja saat ini
debugbooleanfalseAktifkan mode debug untuk proses Claude Code
debugFilestringundefinedTulis log debug ke jalur file tertentu. Secara implisit mengaktifkan mode debug
disallowedToolsstring[][]Tool untuk tolak. Nama bare seperti "Bash" menghapus tool dari konteks Claude. Aturan scoped seperti "Bash(rm *)" membiarkan tool tersedia dan menolak panggilan yang cocok dalam setiap mode izin, termasuk bypassPermissions. Lihat Izin
effort'low' | 'medium' | 'high' | 'xhigh' | 'max''high'Mengontrol seberapa banyak usaha yang Claude masukkan ke dalam responsnya. Bekerja dengan pemikiran adaptif untuk memandu kedalaman pemikiran
enableFileCheckpointingbooleanfalseAktifkan pelacakan perubahan file untuk rewinding. Lihat File checkpointing
envRecord<string, string | undefined>process.envVariabel lingkungan. Ketika diatur, ini mengganti lingkungan subprocess alih-alih menggabungkan dengan process.env, jadi lewatkan { ...process.env, YOUR_VAR: 'value' } untuk menyimpan variabel yang diwariskan seperti PATH. Lihat Tangani respons API yang lambat atau terhenti untuk contoh pola ini, dan Variabel lingkungan untuk variabel yang dibaca CLI yang mendasarinya. Atur CLAUDE_AGENT_SDK_CLIENT_APP untuk mengidentifikasi aplikasi Anda di header User-Agent
executable'bun' | 'deno' | 'node'Auto-detectedRuntime JavaScript yang akan digunakan
executableArgsstring[][]Argumen untuk diteruskan ke executable
extraArgsRecord<string, string | null>{}Argumen tambahan
fallbackModelstringundefinedModel yang digunakan jika model utama gagal
forkSessionbooleanfalseSaat melanjutkan dengan resume, fork ke ID sesi baru alih-alih melanjutkan sesi asli
forwardSubagentTextbooleanfalseTeruskan blok teks dan pemikiran subagen sebagai pesan asisten dan pengguna dengan parent_tool_use_id diatur, sehingga konsumen dapat merender transkrip bersarang. Secara default hanya blok tool_use dan tool_result dari subagen yang dipancarkan
hooksPartial<Record<HookEvent, HookCallbackMatcher[]>>{}Callback hook untuk event
includeHookEventsbooleanfalseSertakan event lifecycle hook dalam aliran pesan sebagai SDKHookStartedMessage, SDKHookProgressMessage, dan SDKHookResponseMessage
includePartialMessagesbooleanfalseSertakan event pesan parsial
loadTimeoutMsnumber60000Alpha. Timeout dalam milidetik untuk setiap panggilan sessionStore.load() dan sessionStore.listSubkeys() selama materialisasi resume. Jika adapter tidak settle dalam jendela ini, query gagal alih-alih hang. Diabaikan ketika sessionStore tidak diatur
managedSettingsSettingsundefinedPengaturan tingkat kebijakan yang disediakan oleh proses parent yang memunculkan. Dijatuhkan ketika tier managed-settings yang dikontrol IT sudah ada di mesin, kecuali admin itu memilih dengan parentSettingsBehavior: 'merge'. Disaring ke kunci restrictive-only terlepas dari itu
maxBudgetUsdnumberundefinedHentikan query ketika estimasi biaya sisi klien mencapai nilai USD ini. Dibandingkan dengan estimasi yang sama seperti total_cost_usd; lihat Lacak biaya dan penggunaan untuk peringatan akurasi
maxThinkingTokensnumberundefinedDeprecated: Gunakan thinking sebagai gantinya. Token maksimum untuk proses pemikiran
maxTurnsnumberundefinedPutaran agen maksimum (perjalanan round-trip penggunaan tool)
mcpServersRecord<string, [McpServerConfig](#mcpserverconfig)>{}Konfigurasi server MCP
modelstringDefault dari CLIModel Claude yang akan digunakan
onElicitation(request: ElicitationRequest, options: { signal: AbortSignal }) => Promise<ElicitationResult>undefinedCallback untuk menangani permintaan elicitation MCP. Dipanggil ketika server MCP meminta input pengguna dan tidak ada hook yang menanganinya terlebih dahulu. Ketika tidak disediakan, permintaan elicitation yang tidak ditangani secara otomatis ditolak
outputFormat{ type: 'json_schema', schema: JSONSchema }undefinedTentukan format output untuk hasil agen. Lihat Output terstruktur untuk detail
outputStylestringundefinedBukan field Options. Atur outputStyle dalam objek settings inline atau file pengaturan sebagai gantinya. Lihat Aktifkan output style
pathToClaudeCodeExecutablestringAuto-resolved dari biner asli bundelJalur ke executable Claude Code. Hanya diperlukan jika dependensi opsional dilewati selama instalasi atau platform Anda tidak dalam set yang didukung
permissionModePermissionMode'default'Mode izin untuk sesi
permissionPromptToolNamestringundefinedNama tool MCP untuk prompt izin
persistSessionbooleantrueKetika false, menonaktifkan persistensi sesi ke disk. Sesi tidak dapat dilanjutkan nanti
planModeInstructionsstringundefinedInstruksi alur kerja kustom untuk mode plan. Ketika permissionMode adalah 'plan', string ini mengganti badan alur kerja mode plan default. CLI masih membungkusnya dengan preamble penegakan read-only dan footer protokol ExitPlanMode
pluginsSdkPluginConfig[][]Muat plugin kustom dari jalur lokal. Lihat Plugins untuk detail
promptSuggestionsbooleanfalseAktifkan saran prompt. Mengirimkan pesan prompt_suggestion setelah setiap putaran dengan prompt pengguna berikutnya yang diprediksi
resumestringundefinedID sesi untuk dilanjutkan
resumeSessionAtstringundefinedLanjutkan sesi pada UUID pesan tertentu
sandboxSandboxSettingsundefinedKonfigurasi perilaku sandbox secara terprogram. Lihat Pengaturan sandbox untuk detail
sessionIdstringAuto-generatedGunakan UUID tertentu untuk sesi alih-alih auto-generate
sessionStoreSessionStoreundefinedCerminkan transkrip sesi ke backend eksternal sehingga host apa pun dapat melanjutkannya. Lihat Pertahankan sesi ke penyimpanan eksternal
sessionStoreFlush'batched' | 'eager''batched'Alpha. Mode flush untuk sessionStore. Diabaikan ketika sessionStore tidak diatur
settingsstring | SettingsundefinedObjek pengaturan inline atau jalur ke file pengaturan. Mengisi lapisan flag-settings dalam urutan preseden. Ubah saat runtime dengan applyFlagSettings()
settingSourcesSettingSource[]CLI defaults (all sources)Kontrol pengaturan filesystem mana yang akan dimuat. Lewatkan [] untuk menonaktifkan pengaturan pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola dimuat terlepas dari itu. Lihat Gunakan fitur Claude Code
skillsstring[] | 'all'undefinedSkills yang tersedia untuk sesi. Lewatkan 'all' untuk mengaktifkan setiap skill yang ditemukan, atau daftar nama skill. Ketika diatur, SDK menambahkan tool Skill ke allowedTools secara otomatis. Jika Anda juga meneruskan tools, sertakan 'Skill' dalam daftar itu. Lihat Skills
spawnClaudeCodeProcess(options: SpawnOptions) => SpawnedProcessundefinedFungsi kustom untuk spawn proses Claude Code. Gunakan untuk menjalankan Claude Code di VM, kontainer, atau lingkungan jarak jauh
stderr(data: string) => voidundefinedCallback untuk output stderr
strictMcpConfigbooleanfalseGunakan hanya server yang diteruskan dalam mcpServers dan abaikan .mcp.json proyek, pengaturan pengguna, server MCP yang disediakan plugin, dan konektor claude.ai
systemPromptstring | { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean }undefined (minimal prompt)Konfigurasi prompt sistem. Lewatkan string untuk prompt kustom, atau { type: 'preset', preset: 'claude_code' } untuk menggunakan prompt sistem Claude Code. Saat menggunakan bentuk objek preset, tambahkan append untuk memperluas dengan instruksi tambahan, dan atur excludeDynamicSections: true untuk memindahkan konteks per-sesi ke pesan pengguna pertama untuk reuse prompt-cache yang lebih baik di seluruh mesin
taskBudget{ total: number }undefinedAlpha. Anggaran tugas sisi API dalam token. Ketika diatur, model diberitahu anggaran token sisa yang tersisa sehingga dapat mengatur kecepatan penggunaan tool dan membungkus sebelum batas
thinkingThinkingConfig{ type: 'adaptive' } untuk model yang didukungMengontrol perilaku pemikiran/penalaran Claude. Lihat ThinkingConfig untuk opsi
titlestringundefinedJudul tampilan untuk sesi. Saat melanjutkan melalui resume atau continue, judul sesi yang dilanjutkan yang bertahan mengambil preseden; gunakan renameSession() untuk mengubah judul sesi yang ada
toolAliasesRecord<string, string>undefinedPetakan nama tool bawaan ke nama tool MCP sehingga Claude memanggil implementasi MCP Anda sebagai gantinya dari bawaan. Misalnya, { Bash: 'mcp__workspace__bash' }
toolConfigToolConfigundefinedKonfigurasi untuk perilaku tool bawaan. Lihat ToolConfig untuk detail
toolsstring[] | { type: 'preset'; preset: 'claude_code' }undefinedKonfigurasi tool. Lewatkan array nama tool atau gunakan preset untuk mendapatkan tool default Claude Code

Tangani respons API yang lambat atau terhenti

Subprocess CLI membaca beberapa variabel lingkungan yang mengontrol timeout API dan deteksi stall. Lewatkan melalui opsi env:
const result = query({
  prompt: "Analyze this code",
  options: {
    env: {
      ...process.env,
      API_TIMEOUT_MS: "120000",
      CLAUDE_CODE_MAX_RETRIES: "2",
      CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: "120000",
    },
  },
});
  • API_TIMEOUT_MS: timeout per-request pada klien Anthropic, dalam milidetik. Default 600000. Berlaku untuk loop utama dan semua subagen.
  • CLAUDE_CODE_MAX_RETRIES: maksimum retry API. Default 10. Setiap retry mendapatkan jendela API_TIMEOUT_MS sendiri, jadi waktu dinding terburuk kira-kira API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1) ditambah backoff.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: stall watchdog untuk subagen yang diluncurkan dengan run_in_background. Default 600000. Reset pada setiap event stream; pada stall itu membatalkan subagen, menandai tugas gagal, dan menampilkan error ke parent dengan hasil parsial apa pun. Tidak berlaku untuk subagen sinkron.
  • CLAUDE_ENABLE_STREAM_WATCHDOG=1 dengan CLAUDE_STREAM_IDLE_TIMEOUT_MS: membatalkan request ketika header telah tiba tetapi body respons berhenti streaming. Dimatikan secara default. CLAUDE_STREAM_IDLE_TIMEOUT_MS default ke 300000 dan diklem ke minimum itu. Request yang dibatalkan melalui jalur retry normal.

Objek Query

Antarmuka yang dikembalikan oleh fungsi query().
interface Query extends AsyncGenerator<SDKMessage, void> {
  interrupt(): Promise<void>;
  rewindFiles(
    userMessageId: string,
    options?: { dryRun?: boolean }
  ): Promise<RewindFilesResult>;
  setPermissionMode(mode: PermissionMode): Promise<void>;
  setModel(model?: string): Promise<void>;
  setMaxThinkingTokens(maxThinkingTokens: number | null): Promise<void>;
  applyFlagSettings(settings: { [K in keyof Settings]?: Settings[K] | null }): Promise<void>;
  initializationResult(): Promise<SDKControlInitializeResponse>;
  supportedCommands(): Promise<SlashCommand[]>;
  supportedModels(): Promise<ModelInfo[]>;
  supportedAgents(): Promise<AgentInfo[]>;
  mcpServerStatus(): Promise<McpServerStatus[]>;
  accountInfo(): Promise<AccountInfo>;
  reconnectMcpServer(serverName: string): Promise<void>;
  toggleMcpServer(serverName: string, enabled: boolean): Promise<void>;
  setMcpServers(servers: Record<string, McpServerConfig>): Promise<McpSetServersResult>;
  streamInput(stream: AsyncIterable<SDKUserMessage>): Promise<void>;
  stopTask(taskId: string): Promise<void>;
  close(): void;
}

Metode

MetodeDeskripsi
interrupt()Mengganggu query (hanya tersedia dalam mode input streaming)
rewindFiles(userMessageId, options?)Mengembalikan file ke keadaan mereka pada pesan pengguna yang ditentukan. Lewatkan { dryRun: true } untuk pratinjau perubahan. 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()Deprecated: Gunakan opsi thinking sebagai gantinya. Mengubah token pemikiran maksimum
applyFlagSettings(settings)Menggabungkan pengaturan ke dalam lapisan flag settings sesi saat runtime (hanya tersedia dalam mode input streaming). Lihat applyFlagSettings()
initializationResult()Mengembalikan hasil inisialisasi lengkap termasuk perintah yang didukung, model, info akun, dan konfigurasi gaya output
supportedCommands()Mengembalikan perintah slash yang tersedia
supportedModels()Mengembalikan model yang tersedia dengan info tampilan
supportedAgents()Mengembalikan subagen yang tersedia sebagai AgentInfo[]
mcpServerStatus()Mengembalikan status server MCP yang terhubung
accountInfo()Mengembalikan informasi akun
reconnectMcpServer(serverName)Sambungkan kembali server MCP berdasarkan nama
toggleMcpServer(serverName, enabled)Aktifkan atau nonaktifkan server MCP berdasarkan nama
setMcpServers(servers)Ganti secara dinamis set server MCP untuk sesi ini. Mengembalikan info tentang server mana yang ditambahkan, dihapus, dan error apa pun
streamInput(stream)Alirkan pesan input ke query untuk percakapan multi-putaran
stopTask(taskId)Hentikan tugas latar belakang yang sedang berjalan berdasarkan ID
close()Tutup query dan hentikan proses yang mendasarinya. Secara paksa mengakhiri query dan membersihkan semua sumber daya

applyFlagSettings()

Mengubah pengaturan apa pun pada sesi yang sedang berjalan tanpa memulai ulang query. Gunakan ketika pengaturan yang tidak memiliki setter khusus perlu berubah di tengah sesi, seperti memperketat permissions setelah agen membaca input yang tidak terpercaya. setModel() dan setPermissionMode() adalah setter khusus untuk dua kunci itu; applyFlagSettings() adalah bentuk umum yang menerima subset kunci pengaturan apa pun, dan melewatkan model di sini berperilaku sama seperti setModel(). Hanya beberapa kunci yang berlaku di tengah sesi:
  • Diterapkan pada putaran berikutnya: model, effortLevel, ultracode, permissions, hooks, skillOverrides, fastMode, awaySummaryEnabled, agent. Beralih agent juga menerapkan penggantian model agen itu, hooks, dan prompt sistem pada putaran berikutnya.
  • Tidak ada efek di tengah sesi: opsi prompt sistem. Ini diselesaikan sekali saat startup, jadi sesi yang sedang berjalan menyimpan nilai asli meskipun panggilan berhasil. Untuk mengubahnya, mulai sesi baru.
Nilai ditulis ke lapisan flag-settings, lapisan yang sama yang opsi settings inline dari query() isi saat startup. Flag settings duduk di dekat bagian atas urutan preseden pengaturan: mereka mengganti pengaturan pengguna, proyek, dan lokal, dan hanya pengaturan kebijakan terkelola yang dapat mengganti mereka. Ini adalah tier yang sama yang bagian preseden di halaman sebut opsi terprogram. Panggilan berturut-turut shallow-merge kunci tingkat atas. Panggilan kedua dengan { permissions: {...} } mengganti seluruh objek permissions dari panggilan sebelumnya daripada deep-merging ke dalamnya. Untuk menghapus kunci dari lapisan flag dan kembali ke sumber preseden lebih rendah, lewatkan null untuk kunci itu. Melewatkan undefined tidak memiliki efek karena serialisasi JSON menjatuhkannya. Hanya tersedia dalam mode input streaming, batasan yang sama seperti setModel() dan setPermissionMode(). Contoh di bawah beralih model aktif di tengah sesi, kemudian menghapus override sehingga model kembali ke apa pun yang ditentukan pengaturan pengguna atau proyek.
const q = query({ prompt: messageStream });

// Override model untuk sisa sesi
await q.applyFlagSettings({ model: "claude-opus-4-6" });

// Nanti: hapus override dan kembali ke pengaturan preseden lebih rendah
await q.applyFlagSettings({ model: null });
applyFlagSettings() adalah TypeScript-only. SDK Python tidak mengekspos metode setara.

WarmQuery

Handle yang dikembalikan oleh startup(). Subprocess sudah dispawn dan diinisialisasi, jadi memanggil query() pada handle ini menulis prompt langsung ke proses yang siap tanpa latensi startup.
interface WarmQuery extends AsyncDisposable {
  query(prompt: string | AsyncIterable<SDKUserMessage>): Query;
  close(): void;
}

Metode

MetodeDeskripsi
query(prompt)Kirim prompt ke subprocess yang sudah dipanaskan dan kembalikan Query. Hanya dapat dipanggil sekali per WarmQuery
close()Tutup subprocess tanpa mengirim prompt. Gunakan ini untuk membuang warm query yang tidak lagi diperlukan
WarmQuery mengimplementasikan AsyncDisposable, jadi dapat digunakan dengan await using untuk pembersihan otomatis.

SDKControlInitializeResponse

Tipe pengembalian dari initializationResult(). Berisi data inisialisasi sesi.
type SDKControlInitializeResponse = {
  commands: SlashCommand[];
  agents: AgentInfo[];
  output_style: string;
  available_output_styles: string[];
  models: ModelInfo[];
  account: AccountInfo;
  fast_mode_state?: "off" | "cooldown" | "on";
};
Ketika klien mengirim initialize ke sesi yang sudah berjalan, wrapper control-response juga membawa array pending_permission_requests opsional. Field berada pada wrapper respons itu sendiri, bukan dalam payload SDKControlInitializeResponse di atas. Setiap entri adalah pesan control_request lengkap dengan bentuk { type: "control_request", request_id, request } yang sama dengan sesi yang dialirkan untuk permintaan izin saat berjalan. Ini adalah permintaan yang dikeluarkan sebelum klien terhubung dan masih menunggu balasan, jadi baca array ini untuk menampilkan prompt izin in-flight segera; mereka tidak akan dikirim ulang.

AgentDefinition

Konfigurasi untuk subagen yang didefinisikan secara terprogram.
type AgentDefinition = {
  description: string;
  tools?: string[];
  disallowedTools?: string[];
  prompt: string;
  model?: string;
  mcpServers?: AgentMcpServerSpec[];
  skills?: string[];
  initialPrompt?: string;
  maxTurns?: number;
  background?: boolean;
  memory?: "user" | "project" | "local";
  effort?: "low" | "medium" | "high" | "xhigh" | "max" | number;
  permissionMode?: PermissionMode;
  criticalSystemReminder_EXPERIMENTAL?: string;
};
FieldDiperlukanDeskripsi
descriptionYaDeskripsi bahasa alami tentang kapan menggunakan agen ini
toolsTidakArray nama tool yang diizinkan. Jika dihilangkan, mewarisi semua tool dari parent. Untuk preload Skills ke dalam konteks agen, gunakan field skills daripada mencantumkan 'Skill' di sini
disallowedToolsTidakArray nama tool untuk secara eksplisit tidak izinkan untuk agen ini
promptYaPrompt sistem agen
modelTidakPenggantian model untuk agen ini. Menerima alias seperti 'sonnet', 'opus', 'haiku', 'inherit', atau ID model lengkap. Jika dihilangkan atau 'inherit', menggunakan model utama
mcpServersTidakSpesifikasi server MCP untuk agen ini
skillsTidakArray nama skill untuk preload ke konteks agen
initialPromptTidakAuto-submitted sebagai putaran pengguna pertama ketika agen ini berjalan sebagai agen thread utama
maxTurnsTidakJumlah maksimum putaran agen (API round-trips) sebelum berhenti
backgroundTidakJalankan agen ini sebagai tugas latar belakang non-blocking ketika dipanggil
memoryTidakSumber memori untuk agen ini: 'user', 'project', atau 'local'
effortTidakTingkat usaha penalaran untuk agen ini. Menerima tingkat bernama atau integer
permissionModeTidakMode izin untuk eksekusi tool dalam agen ini. Lihat PermissionMode
criticalSystemReminder_EXPERIMENTALTidakEksperimental: Pengingat kritis ditambahkan ke prompt sistem

AgentMcpServerSpec

Menentukan server MCP yang tersedia untuk subagen. Dapat berupa nama server (string yang mereferensikan server dari konfigurasi mcpServers parent) atau konfigurasi server inline yang merekam nama server ke config.
type AgentMcpServerSpec = string | Record<string, McpServerConfigForProcessTransport>;
Di mana McpServerConfigForProcessTransport adalah McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig.

SettingSource

Mengontrol sumber konfigurasi berbasis filesystem mana yang dimuat pengaturan SDK.
type SettingSource = "user" | "project" | "local";
NilaiDeskripsiLokasi
'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

Perilaku default

Ketika settingSources dihilangkan atau undefined, query() memuat pengaturan filesystem yang sama seperti CLI Claude Code: pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola dimuat dalam semua kasus. Lihat Apa yang tidak dikontrol settingSources untuk input yang dibaca terlepas dari opsi ini, dan cara menonaktifkannya.

Mengapa menggunakan settingSources

Nonaktifkan pengaturan filesystem:
// Jangan muat pengaturan pengguna, proyek, atau lokal dari disk
const result = query({
  prompt: "Analyze this code",
  options: { settingSources: [] }
});
Muat semua pengaturan filesystem secara eksplisit:
const result = query({
  prompt: "Analyze this code",
  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: "Run CI checks",
  options: {
    settingSources: ["project"] // Hanya .claude/settings.json
  }
});
Lingkungan pengujian dan CI:
// Pastikan perilaku konsisten di CI dengan mengecualikan pengaturan lokal
const result = query({
  prompt: "Run tests",
  options: {
    settingSources: ["project"], // Hanya pengaturan bersama tim
    permissionMode: "bypassPermissions"
  }
});
Aplikasi SDK-only:
// Tentukan semuanya secara terprogram.
// Lewatkan [] untuk opt out dari sumber pengaturan filesystem.
const result = query({
  prompt: "Review this PR",
  options: {
    settingSources: [],
    agents: {
      /* ... */
    },
    mcpServers: {
      /* ... */
    },
    allowedTools: ["Read", "Grep", "Glob"]
  }
});
Memuat instruksi proyek CLAUDE.md:
// Muat pengaturan proyek untuk menyertakan file CLAUDE.md
const result = query({
  prompt: "Add a new feature following project conventions",
  options: {
    systemPrompt: {
      type: "preset",
      preset: "claude_code" // Gunakan prompt sistem Claude Code
    },
    settingSources: ["project"], // Memuat CLAUDE.md dari direktori proyek
    allowedTools: ["Read", "Write", "Edit"]
  }
});

Preseden pengaturan

Ketika beberapa sumber dimuat, pengaturan digabungkan dengan preseden ini (tertinggi ke terendah):
  1. Pengaturan lokal (.claude/settings.local.json)
  2. Pengaturan proyek (.claude/settings.json)
  3. Pengaturan pengguna (~/.claude/settings.json)
Opsi terprogram seperti agents, allowedTools, dan settings mengganti pengaturan filesystem pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola mengambil preseden atas opsi terprogram.

PermissionMode

type PermissionMode =
  | "default" // Perilaku izin standar
  | "acceptEdits" // Auto-accept edit file
  | "bypassPermissions" // Bypass semua pemeriksaan izin
  | "plan" // Mode perencanaan - tool read-only saja
  | "dontAsk" // Jangan prompt untuk izin, tolak jika tidak pre-approved
  | "auto"; // Gunakan classifier model untuk approve atau deny setiap tool call

CanUseTool

Tipe fungsi izin kustom untuk mengontrol penggunaan tool.
type CanUseTool = (
  toolName: string,
  input: Record<string, unknown>,
  options: {
    signal: AbortSignal;
    suggestions?: PermissionUpdate[];
    blockedPath?: string;
    decisionReason?: string;
    toolUseID: string;
    agentID?: string;
  }
) => Promise<PermissionResult>;
OpsiTipeDeskripsi
signalAbortSignalSignaled jika operasi harus dibatalkan
suggestionsPermissionUpdate[]Saran pembaruan izin sehingga pengguna tidak diprompt lagi untuk tool ini. Prompt Bash menyertakan saran dengan destination localSettings, jadi mengembalikannya dalam updatedPermissions menulis aturan ke .claude/settings.local.json dan bertahan di seluruh sesi.
blockedPathstringJalur file yang memicu permintaan izin, jika berlaku
decisionReasonstringMenjelaskan mengapa permintaan izin ini dipicu
toolUseIDstringPengenal unik untuk tool call spesifik ini dalam pesan asisten
agentIDstringJika berjalan dalam sub-agen, ID sub-agen

PermissionResult

Hasil pemeriksaan izin.
type PermissionResult =
  | {
      behavior: "allow";
      updatedInput?: Record<string, unknown>;
      updatedPermissions?: PermissionUpdate[];
      toolUseID?: string;
    }
  | {
      behavior: "deny";
      message: string;
      interrupt?: boolean;
      toolUseID?: string;
    };

ToolConfig

Konfigurasi untuk perilaku tool bawaan.
type ToolConfig = {
  askUserQuestion?: {
    previewFormat?: "markdown" | "html";
  };
};
FieldTipeDeskripsi
askUserQuestion.previewFormat'markdown' | 'html'Opt-in ke field preview pada opsi AskUserQuestion dan atur format kontennya. Ketika tidak diatur, Claude tidak mengirimkan preview

McpServerConfig

Konfigurasi untuk server MCP.
type McpServerConfig =
  | McpStdioServerConfig
  | McpSSEServerConfig
  | McpHttpServerConfig
  | McpSdkServerConfigWithInstance;

McpStdioServerConfig

type McpStdioServerConfig = {
  type?: "stdio";
  command: string;
  args?: string[];
  env?: Record<string, string>;
};

McpSSEServerConfig

type McpSSEServerConfig = {
  type: "sse";
  url: string;
  headers?: Record<string, string>;
};

McpHttpServerConfig

type McpHttpServerConfig = {
  type: "http";
  url: string;
  headers?: Record<string, string>;
};

McpSdkServerConfigWithInstance

type McpSdkServerConfigWithInstance = {
  type: "sdk";
  name: string;
  instance: McpServer;
};

McpClaudeAIProxyServerConfig

type McpClaudeAIProxyServerConfig = {
  type: "claudeai-proxy";
  url: string;
  id: string;
};

SdkPluginConfig

Konfigurasi untuk memuat plugin di SDK.
type SdkPluginConfig = {
  type: "local";
  path: string;
};
FieldTipeDeskripsi
type'local'Harus 'local' (hanya plugin lokal yang saat ini didukung)
pathstringJalur 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.

Tipe Pesan

SDKMessage

Tipe union dari semua pesan yang mungkin dikembalikan oleh query.
type SDKMessage =
  | SDKAssistantMessage
  | SDKUserMessage
  | SDKUserMessageReplay
  | SDKResultMessage
  | SDKSystemMessage
  | SDKPartialAssistantMessage
  | SDKCompactBoundaryMessage
  | SDKStatusMessage
  | SDKLocalCommandOutputMessage
  | SDKHookStartedMessage
  | SDKHookProgressMessage
  | SDKHookResponseMessage
  | SDKPluginInstallMessage
  | SDKToolProgressMessage
  | SDKAuthStatusMessage
  | SDKTaskNotificationMessage
  | SDKTaskStartedMessage
  | SDKTaskProgressMessage
  | SDKTaskUpdatedMessage
  | SDKSessionStateChangedMessage
  | SDKCommandsChangedMessage
  | SDKNotificationMessage
  | SDKFilesPersistedEvent
  | SDKToolUseSummaryMessage
  | SDKMemoryRecallMessage
  | SDKRateLimitEvent
  | SDKElicitationCompleteMessage
  | SDKPermissionDeniedMessage
  | SDKPromptSuggestionMessage
  | SDKAPIRetryMessage
  | SDKMirrorErrorMessage;

SDKAssistantMessage

Pesan respons asisten.
type SDKAssistantMessage = {
  type: "assistant";
  uuid: UUID;
  session_id: string;
  message: BetaMessage; // Dari Anthropic SDK
  parent_tool_use_id: string | null;
  error?: SDKAssistantMessageError;
};
Field message adalah BetaMessage dari Anthropic SDK. Ini mencakup field seperti id, content, model, stop_reason, dan usage. SDKAssistantMessageError adalah salah satu dari: 'authentication_failed', 'oauth_org_not_allowed', 'billing_error', 'rate_limit', 'overloaded', 'invalid_request', 'model_not_found', 'server_error', 'max_output_tokens', atau 'unknown'. 'model_not_found' berarti model yang dipilih tidak ada atau tidak tersedia untuk akun atau deployment Anda. 'overloaded' berarti API mengembalikan 529 karena server mencapai kapasitas, berbeda dengan 'rate_limit', yang merupakan 429 terhadap kuota Anda.

SDKUserMessage

Pesan input pengguna.
type SDKUserMessage = {
  type: "user";
  uuid?: UUID;
  session_id?: string;
  message: MessageParam; // Dari Anthropic SDK
  parent_tool_use_id: string | null;
  isSynthetic?: boolean;
  shouldQuery?: boolean;
  tool_use_result?: unknown;
  origin?: SDKMessageOrigin;
};
Atur shouldQuery ke false untuk menambahkan pesan ke transkrip tanpa memicu putaran asisten. Pesan ditahan dan digabungkan ke pesan pengguna berikutnya yang memicu putaran. Gunakan ini untuk menyuntikkan konteks, seperti output perintah yang Anda jalankan out of band, tanpa menghabiskan panggilan model.

SDKUserMessageReplay

Pesan pengguna yang diputar ulang dengan UUID yang diperlukan.
type SDKUserMessageReplay = {
  type: "user";
  uuid: UUID;
  session_id: string;
  message: MessageParam;
  parent_tool_use_id: string | null;
  isSynthetic?: boolean;
  tool_use_result?: unknown;
  origin?: SDKMessageOrigin;
  isReplay: true;
};

SDKResultMessage

Pesan hasil akhir.
type SDKResultMessage =
  | {
      type: "result";
      subtype: "success";
      uuid: UUID;
      session_id: string;
      duration_ms: number;
      duration_api_ms: number;
      is_error: boolean;
      api_error_status?: number | null;
      num_turns: number;
      result: string;
      stop_reason: string | null;
      ttft_ms?: number;
      total_cost_usd: number;
      usage: NonNullableUsage;
      modelUsage: { [modelName: string]: ModelUsage };
      permission_denials: SDKPermissionDenial[];
      structured_output?: unknown;
      deferred_tool_use?: { id: string; name: string; input: Record<string, unknown> };
      terminal_reason?: TerminalReason;
      fast_mode_state?: FastModeState;
      origin?: SDKMessageOrigin;
    }
  | {
      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;
      stop_reason: string | null;
      total_cost_usd: number;
      usage: NonNullableUsage;
      modelUsage: { [modelName: string]: ModelUsage };
      permission_denials: SDKPermissionDenial[];
      errors: string[];
      terminal_reason?: TerminalReason;
      fast_mode_state?: FastModeState;
      origin?: SDKMessageOrigin;
    };
Beberapa field pada hasil membawa detail diagnostik di luar subtype:
  • api_error_status: kode status HTTP dari kesalahan API yang mengakhiri percakapan. Tidak ada atau null ketika putaran berakhir tanpa kesalahan API.
  • ttft_ms: waktu ke token pertama dalam milidetik. Hadir hanya pada cabang kesuksesan.
  • terminal_reason: mengapa loop berakhir. Salah satu dari "completed", "max_turns", "tool_deferred", "aborted_streaming", "aborted_tools", "hook_stopped", "stop_hook_prevented", "blocking_limit", "rapid_refill_breaker", "prompt_too_long", "image_error", atau "model_error".
  • fast_mode_state: salah satu dari "on", "off", atau "cooldown".
Field origin meneruskan SDKMessageOrigin dari pesan pengguna yang memicu hasil ini. Ketika tugas latar belakang selesai dan SDK menyuntikkan putaran lanjutan sintetis, SDKResultMessage yang dihasilkan membawa origin: { kind: "task-notification" }. Periksa field ini untuk membedakan hasil yang menjawab prompt Anda dari hasil yang dipancarkan untuk lanjutan tugas latar belakang, sehingga Anda dapat merutekan atau menekan yang terakhir. Field ini tidak ada untuk hasil yang dipancarkan sebelum putaran pengguna apa pun, seperti kesalahan startup. Ketika hook PreToolUse mengembalikan permissionDecision: "defer", hasilnya memiliki stop_reason: "tool_deferred" dan deferred_tool_use membawa id, name, dan input tool yang tertunda. Baca field ini untuk menampilkan permintaan di UI Anda sendiri, kemudian lanjutkan dengan session_id yang sama untuk melanjutkan. Lihat Defer a tool call for later untuk perjalanan putaran lengkap.

SDKSystemMessage

Pesan inisialisasi sistem.
type SDKSystemMessage = {
  type: "system";
  subtype: "init";
  uuid: UUID;
  session_id: string;
  agents?: string[];
  apiKeySource: ApiKeySource;
  betas?: string[];
  claude_code_version: string;
  cwd: string;
  tools: string[];
  mcp_servers: {
    name: string;
    status: string;
  }[];
  model: string;
  permissionMode: PermissionMode;
  slash_commands: string[];
  output_style: string;
  skills: string[];
  plugins: { name: string; path: string }[];
};

SDKPartialAssistantMessage

Pesan parsial streaming (hanya ketika includePartialMessages adalah true).
type SDKPartialAssistantMessage = {
  type: "stream_event";
  event: BetaRawMessageStreamEvent; // Dari Anthropic SDK
  parent_tool_use_id: string | null;
  uuid: UUID;
  session_id: string;
};

SDKCompactBoundaryMessage

Pesan 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;
  };
};

SDKPluginInstallMessage

Event kemajuan instalasi plugin. Dipancarkan ketika CLAUDE_CODE_SYNC_PLUGIN_INSTALL diatur, sehingga aplikasi Agent SDK Anda dapat melacak instalasi plugin marketplace sebelum putaran pertama. Status started dan completed membatasi keseluruhan instalasi. Status installed dan failed melaporkan marketplace individual dan menyertakan name.
type SDKPluginInstallMessage = {
  type: "system";
  subtype: "plugin_install";
  status: "started" | "installed" | "failed" | "completed";
  name?: string;
  error?: string;
  uuid: UUID;
  session_id: string;
};

SDKPermissionDeniedMessage

Event aliran yang dipancarkan ketika sistem izin secara otomatis menolak panggilan tool tanpa prompt interaktif. Gunakan ini untuk merender penolakan di UI Anda saat terjadi, daripada hanya mengamati hasil tool is_error yang mengikuti. Jalur tanya interaktif mencapai aplikasi Anda secara terpisah melalui callback canUseTool. Penolakan yang dikeluarkan oleh hook PreToolUse tidak dilaporkan melalui event ini. Event ini memerlukan Claude Code v2.1.136 atau lebih baru.
type SDKPermissionDeniedMessage = {
  type: "system";
  subtype: "permission_denied";
  tool_name: string;
  tool_use_id: string;
  agent_id?: string;
  decision_reason_type?: string;
  decision_reason?: string;
  message: string;
  uuid: UUID;
  session_id: string;
};
FieldTipeDeskripsi
tool_namestringNama tool yang ditolak
tool_use_idstringID dari blok tool_use yang dijawab penolakan ini
agent_idstringID subagent ketika panggilan yang ditolak berasal dari dalam subagent. Mencerminkan field pada can_use_tool untuk perutean sisi host
decision_reason_typestringDiskriminator untuk komponen yang memutuskan, seperti "rule", "mode", "classifier", atau "asyncAgent"
decision_reasonstringAlasan yang dapat dibaca manusia dari komponen yang memutuskan, ketika tersedia
messagestringPesan penolakan yang dikembalikan ke model dalam tool_result

SDKPermissionDenial

Informasi tentang penggunaan tool yang ditolak.
type SDKPermissionDenial = {
  tool_name: string;
  tool_use_id: string;
  tool_input: Record<string, unknown>;
};

SDKMessageOrigin

Asal-usul pesan dengan peran pengguna. Ini muncul sebagai origin pada SDKUserMessage dan diteruskan ke SDKResultMessage yang sesuai sehingga Anda dapat mengetahui apa yang memicu putaran tertentu.
type SDKMessageOrigin =
  | { kind: "human" }
  | { kind: "channel"; server: string }
  | { kind: "peer"; from: string; name?: string }
  | { kind: "task-notification" }
  | { kind: "coordinator" };
kindArti
humanInput langsung dari pengguna akhir. Pada pesan pengguna, origin yang tidak ada juga berarti input manusia.
channelPesan yang tiba di channel. server adalah nama server MCP sumber.
peerPesan dari sesi agen lain melalui SendMessage. from adalah alamat pengirim; name adalah nama tampilan pengirim ketika tersedia.
task-notificationPutaran sintetis yang disuntikkan setelah tugas latar belakang selesai. Lihat SDKTaskNotificationMessage.
coordinatorPesan dari koordinator tim dalam tim agen.

Tipe Hook

Untuk panduan komprehensif tentang menggunakan hooks dengan contoh dan pola umum, lihat panduan Hooks.

HookEvent

Event hook yang tersedia.
type HookEvent =
  | "PreToolUse"
  | "PostToolUse"
  | "PostToolUseFailure"
  | "PostToolBatch"
  | "Notification"
  | "UserPromptSubmit"
  | "SessionStart"
  | "SessionEnd"
  | "Stop"
  | "SubagentStart"
  | "SubagentStop"
  | "PreCompact"
  | "PermissionRequest"
  | "Setup"
  | "TeammateIdle"
  | "TaskCompleted"
  | "ConfigChange"
  | "WorktreeCreate"
  | "WorktreeRemove"
  | "MessageDisplay";

HookCallback

Tipe fungsi callback hook.
type HookCallback = (
  input: HookInput, // Union dari semua tipe input hook
  toolUseID: string | undefined,
  options: { signal: AbortSignal }
) => Promise<HookJSONOutput>;

HookCallbackMatcher

Konfigurasi hook dengan matcher opsional.
interface HookCallbackMatcher {
  matcher?: string;
  hooks: HookCallback[];
  timeout?: number; // Timeout dalam detik untuk semua hook dalam matcher ini
}

HookInput

Tipe union dari semua tipe input hook.
type HookInput =
  | PreToolUseHookInput
  | PostToolUseHookInput
  | PostToolUseFailureHookInput
  | PostToolBatchHookInput
  | NotificationHookInput
  | UserPromptSubmitHookInput
  | SessionStartHookInput
  | SessionEndHookInput
  | StopHookInput
  | SubagentStartHookInput
  | SubagentStopHookInput
  | PreCompactHookInput
  | PermissionRequestHookInput
  | SetupHookInput
  | TeammateIdleHookInput
  | TaskCompletedHookInput
  | ConfigChangeHookInput
  | WorktreeCreateHookInput
  | WorktreeRemoveHookInput
  | MessageDisplayHookInput;

BaseHookInput

Antarmuka dasar yang diperluas oleh semua tipe input hook.
type BaseHookInput = {
  session_id: string;
  transcript_path: string;
  cwd: string;
  permission_mode?: string;
  effort?: { level: string };
  agent_id?: string;
  agent_type?: string;
};

PreToolUseHookInput

type PreToolUseHookInput = BaseHookInput & {
  hook_event_name: "PreToolUse";
  tool_name: string;
  tool_input: unknown;
  tool_use_id: string;
};

PostToolUseHookInput

type PostToolUseHookInput = BaseHookInput & {
  hook_event_name: "PostToolUse";
  tool_name: string;
  tool_input: unknown;
  tool_response: unknown;
  tool_use_id: string;
  duration_ms?: number;
};

PostToolUseFailureHookInput

type PostToolUseFailureHookInput = BaseHookInput & {
  hook_event_name: "PostToolUseFailure";
  tool_name: string;
  tool_input: unknown;
  tool_use_id: string;
  error: string;
  is_interrupt?: boolean;
  duration_ms?: number;
};

PostToolBatchHookInput

Dipicu sekali setelah setiap pemanggilan alat dalam batch telah diselesaikan, sebelum permintaan model berikutnya. tool_response membawa konten tool_result yang diserialisasi yang dilihat model; bentuknya berbeda dari objek Output terstruktur dari PostToolUseHookInput.
type PostToolBatchHookInput = BaseHookInput & {
  hook_event_name: "PostToolBatch";
  tool_calls: PostToolBatchToolCall[];
};

type PostToolBatchToolCall = {
  tool_name: string;
  tool_input: unknown;
  tool_use_id: string;
  tool_response?: unknown;
};

NotificationHookInput

type NotificationHookInput = BaseHookInput & {
  hook_event_name: "Notification";
  message: string;
  title?: string;
  notification_type: string;
};

UserPromptSubmitHookInput

type UserPromptSubmitHookInput = BaseHookInput & {
  hook_event_name: "UserPromptSubmit";
  prompt: string;
};

SessionStartHookInput

type SessionStartHookInput = BaseHookInput & {
  hook_event_name: "SessionStart";
  source: "startup" | "resume" | "clear" | "compact";
  agent_type?: string;
  model?: string;
};

SessionEndHookInput

type SessionEndHookInput = BaseHookInput & {
  hook_event_name: "SessionEnd";
  reason: ExitReason; // String dari array EXIT_REASONS
};

StopHookInput

type StopHookInput = BaseHookInput & {
  hook_event_name: "Stop";
  stop_hook_active: boolean;
  last_assistant_message?: string;
  background_tasks?: BackgroundTaskSummary[];
  session_crons?: SessionCronSummary[];
};

SubagentStartHookInput

type SubagentStartHookInput = BaseHookInput & {
  hook_event_name: "SubagentStart";
  agent_id: string;
  agent_type: string;
};

SubagentStopHookInput

type SubagentStopHookInput = BaseHookInput & {
  hook_event_name: "SubagentStop";
  stop_hook_active: boolean;
  agent_id: string;
  agent_transcript_path: string;
  agent_type: string;
  last_assistant_message?: string;
  background_tasks?: BackgroundTaskSummary[];
  session_crons?: SessionCronSummary[];
};

type BackgroundTaskSummary = {
  id: string;
  type: string;
  status: string;
  description: string;
  command?: string;
  agent_type?: string;
  server?: string;
  tool?: string;
  name?: string;
};

type SessionCronSummary = {
  id: string;
  schedule: string;
  recurring: boolean;
  prompt: string;
};

PreCompactHookInput

type PreCompactHookInput = BaseHookInput & {
  hook_event_name: "PreCompact";
  trigger: "manual" | "auto";
  custom_instructions: string | null;
};

PermissionRequestHookInput

type PermissionRequestHookInput = BaseHookInput & {
  hook_event_name: "PermissionRequest";
  tool_name: string;
  tool_input: unknown;
  permission_suggestions?: PermissionUpdate[];
};

SetupHookInput

type SetupHookInput = BaseHookInput & {
  hook_event_name: "Setup";
  trigger: "init" | "maintenance";
};

TeammateIdleHookInput

type TeammateIdleHookInput = BaseHookInput & {
  hook_event_name: "TeammateIdle";
  teammate_name: string;
  team_name: string;
};

TaskCompletedHookInput

type TaskCompletedHookInput = BaseHookInput & {
  hook_event_name: "TaskCompleted";
  task_id: string;
  task_subject: string;
  task_description?: string;
  teammate_name?: string;
  team_name?: string;
};

ConfigChangeHookInput

type ConfigChangeHookInput = BaseHookInput & {
  hook_event_name: "ConfigChange";
  source:
    | "user_settings"
    | "project_settings"
    | "local_settings"
    | "policy_settings"
    | "skills";
  file_path?: string;
};

WorktreeCreateHookInput

type WorktreeCreateHookInput = BaseHookInput & {
  hook_event_name: "WorktreeCreate";
  name: string;
};

WorktreeRemoveHookInput

type WorktreeRemoveHookInput = BaseHookInput & {
  hook_event_name: "WorktreeRemove";
  worktree_path: string;
};

MessageDisplayHookInput

type MessageDisplayHookInput = BaseHookInput & {
  hook_event_name: "MessageDisplay";
  turn_id: string;
  message_id: string;
  index: number;
  final: boolean;
  delta: string;
};

HookJSONOutput

Nilai pengembalian hook.
type HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput;

AsyncHookJSONOutput

type AsyncHookJSONOutput = {
  async: true;
  asyncTimeout?: number;
};

SyncHookJSONOutput

type SyncHookJSONOutput = {
  continue?: boolean;
  suppressOutput?: boolean;
  stopReason?: string;
  decision?: "approve" | "block";
  systemMessage?: string;
  reason?: string;
  hookSpecificOutput?:
    | {
        hookEventName: "PreToolUse";
        permissionDecision?: "allow" | "deny" | "ask" | "defer";
        permissionDecisionReason?: string;
        updatedInput?: Record<string, unknown>;
        additionalContext?: string;
      }
    | {
        hookEventName: "UserPromptSubmit";
        additionalContext?: string;
      }
    | {
        hookEventName: "SessionStart";
        additionalContext?: string;
      }
    | {
        hookEventName: "Setup";
        additionalContext?: string;
      }
    | {
        hookEventName: "SubagentStart";
        additionalContext?: string;
      }
    | {
        hookEventName: "PostToolUse";
        additionalContext?: string;
        updatedToolOutput?: unknown;
        /** @deprecated Gunakan `updatedToolOutput`, yang berfungsi untuk semua alat. */
        updatedMCPToolOutput?: unknown;
      }
    | {
        hookEventName: "PostToolUseFailure";
        additionalContext?: string;
      }
    | {
        hookEventName: "PostToolBatch";
        additionalContext?: string;
      }
    | {
        hookEventName: "Notification";
        additionalContext?: string;
      }
    | {
        hookEventName: "PermissionRequest";
        decision:
          | {
              behavior: "allow";
              updatedInput?: Record<string, unknown>;
              updatedPermissions?: PermissionUpdate[];
            }
          | {
              behavior: "deny";
              message?: string;
              interrupt?: boolean;
            };
      };
};

Tipe Input Tool

Dokumentasi skema input untuk semua tool Claude Code bawaan. Tipe ini dieksport dari @anthropic-ai/claude-agent-sdk dan dapat digunakan untuk interaksi tool yang aman tipe.

ToolInputSchemas

Union dari semua tipe input tool, dieksport dari @anthropic-ai/claude-agent-sdk.
type ToolInputSchemas =
  | AgentInput
  | AskUserQuestionInput
  | BashInput
  | TaskOutputInput
  | EnterWorktreeInput
  | ExitPlanModeInput
  | FileEditInput
  | FileReadInput
  | FileWriteInput
  | GlobInput
  | GrepInput
  | ListMcpResourcesInput
  | McpInput
  | MonitorInput
  | NotebookEditInput
  | ReadMcpResourceInput
  | SubscribeMcpResourceInput
  | SubscribePollingInput
  | TaskCreateInput
  | TaskGetInput
  | TaskListInput
  | TaskStopInput
  | TaskUpdateInput
  | TodoWriteInput
  | UnsubscribeMcpResourceInput
  | UnsubscribePollingInput
  | WebFetchInput
  | WebSearchInput
  | WorkflowInput;

Agent

Nama tool: Agent (sebelumnya Task, yang masih diterima sebagai alias)
type AgentInput = {
  description: string;
  prompt: string;
  subagent_type: string;
  model?: "sonnet" | "opus" | "haiku";
  resume?: string;
  run_in_background?: boolean;
  max_turns?: number;
  name?: string;
  team_name?: string;
  mode?: "acceptEdits" | "bypassPermissions" | "default" | "dontAsk" | "plan";
  isolation?: "worktree";
};
Meluncurkan agen baru untuk menangani tugas kompleks multi-langkah secara otonom.

AskUserQuestion

Nama tool: AskUserQuestion
type AskUserQuestionInput = {
  questions: Array<{
    question: string;
    header: string;
    options: Array<{ label: string; description: string; preview?: string }>;
    multiSelect: boolean;
  }>;
};
Menanyakan pertanyaan klarifikasi kepada pengguna selama eksekusi. Lihat Tangani persetujuan dan input pengguna untuk detail penggunaan.

Bash

Nama tool: Bash
type BashInput = {
  command: string;
  timeout?: number;
  description?: string;
  run_in_background?: boolean;
  dangerouslyDisableSandbox?: boolean;
};
Mengeksekusi perintah bash dalam sesi shell persisten dengan timeout opsional dan eksekusi latar belakang.

Monitor

Nama tool: Monitor
type MonitorInput = {
  command: string;
  description: string;
  timeout_ms?: number;
  persistent?: boolean;
};
Menjalankan skrip latar belakang dan mengirimkan setiap baris stdout ke Claude sebagai event sehingga dapat bereaksi tanpa polling. Atur persistent: true untuk watch panjang sesi seperti log tails. Monitor mengikuti aturan izin yang sama seperti Bash. Lihat referensi tool Monitor untuk perilaku dan ketersediaan provider.

TaskOutput

Nama tool: TaskOutput
type TaskOutputInput = {
  task_id: string;
  block: boolean;
  timeout: number;
};
Mengambil output dari tugas latar belakang yang sedang berjalan atau selesai.

Edit

Nama tool: Edit
type FileEditInput = {
  file_path: string;
  old_string: string;
  new_string: string;
  replace_all?: boolean;
};
Melakukan penggantian string yang tepat dalam file.

Read

Nama tool: Read
type FileReadInput = {
  file_path: string;
  offset?: number;
  limit?: number;
  pages?: string;
};
Membaca file dari filesystem lokal, termasuk teks, gambar, PDF, dan notebook Jupyter. Gunakan pages untuk rentang halaman PDF (misalnya, "1-5").

Write

Nama tool: Write
type FileWriteInput = {
  file_path: string;
  content: string;
};
Menulis file ke filesystem lokal, menimpa jika ada.

Glob

Nama tool: Glob
type GlobInput = {
  pattern: string;
  path?: string;
};
Pencocokan pola file cepat yang bekerja dengan ukuran codebase apa pun.

Grep

Nama tool: Grep
type GrepInput = {
  pattern: string;
  path?: string;
  glob?: string;
  type?: string;
  output_mode?: "content" | "files_with_matches" | "count";
  "-i"?: boolean;
  "-n"?: boolean;
  "-B"?: number;
  "-A"?: number;
  "-C"?: number;
  context?: number;
  head_limit?: number;
  offset?: number;
  multiline?: boolean;
};
Tool pencarian yang kuat dibangun di atas ripgrep dengan dukungan regex.

TaskStop

Nama tool: TaskStop
type TaskStopInput = {
  task_id?: string;
  shell_id?: string; // Deprecated: gunakan task_id
};
Menghentikan tugas latar belakang atau shell yang sedang berjalan berdasarkan ID.

NotebookEdit

Nama tool: NotebookEdit
type NotebookEditInput = {
  notebook_path: string;
  cell_id?: string;
  new_source: string;
  cell_type?: "code" | "markdown";
  edit_mode?: "replace" | "insert" | "delete";
};
Mengedit sel dalam file notebook Jupyter.

WebFetch

Nama tool: WebFetch
type WebFetchInput = {
  url: string;
  prompt: string;
};
Mengambil konten dari URL dan memprosesnya dengan model AI.

WebSearch

Nama tool: WebSearch
type WebSearchInput = {
  query: string;
  allowed_domains?: string[];
  blocked_domains?: string[];
};
Mencari web dan mengembalikan hasil yang diformat.

Workflow

Nama tool: Workflow
type WorkflowInput = {
  script?: string;
  name?: string;
  scriptPath?: string;
  args?: unknown;
  resumeFromRunId?: string;
};
Menjalankan workflow dinamis: skrip yang mengorkestra banyak subagen di latar belakang dan mengembalikan satu hasil yang dikonsolidasikan. Tool Workflow tersedia di Agent SDK v0.3.149 dan yang lebih baru. Setidaknya satu dari script, name, atau scriptPath diperlukan.
FieldTypeDescription
scriptstringSkrip workflow inline. Harus dimulai dengan export const meta = { name, description, phases } sebagai literal, diikuti oleh badan skrip menggunakan agent(), parallel(), pipeline(), dan phase()
namestringNama workflow bawaan atau yang disimpan di .claude/workflows/. Diselesaikan ke skrip
scriptPathstringJalur ke file skrip workflow di disk. Mengambil prioritas atas script dan name. Setiap invokasi menyimpan skrip dan mengembalikan jalur dalam hasil, sehingga Anda dapat mengedit file itu dan menginvokasi kembali dengan scriptPath yang sama untuk melakukan iterasi
argsunknownNilai input yang diekspos ke skrip sebagai args global, untuk workflow bernama yang diparameterisasi seperti pertanyaan penelitian atau daftar jalur file. Lewatkan array dan objek sebagai nilai JSON aktual, bukan sebagai string yang dikodekan JSON
resumeFromRunIdstringRun ID dari invokasi Workflow sebelumnya untuk dilanjutkan. Panggilan agent() yang selesai dengan input yang tidak berubah mengembalikan hasil yang di-cache; hanya panggilan yang berubah atau baru yang berjalan langsung. Sesi yang sama saja

TodoWrite

Nama tool: TodoWrite
type TodoWriteInput = {
  todos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
};
Membuat dan mengelola daftar tugas terstruktur untuk melacak kemajuan.
Mulai dari TypeScript Agent SDK 0.3.142, TodoWrite dinonaktifkan secara default. Gunakan TaskCreate, TaskGet, TaskUpdate, dan TaskList sebagai gantinya. Lihat Migrasi ke tool Task untuk memperbarui kode pemantauan Anda, atau atur CLAUDE_CODE_ENABLE_TASKS=0 untuk kembali ke TodoWrite.

TaskCreate

Nama tool: TaskCreate
type TaskCreateInput = {
  subject: string;
  description: string;
  activeForm?: string;
  metadata?: Record<string, unknown>;
};
Membuat satu tugas dan mengembalikan ID yang ditugaskan.

TaskUpdate

Nama tool: TaskUpdate
type TaskUpdateInput = {
  taskId: string;
  status?: "pending" | "in_progress" | "completed" | "deleted";
  subject?: string;
  description?: string;
  activeForm?: string;
  addBlocks?: string[];
  addBlockedBy?: string[];
  owner?: string;
  metadata?: Record<string, unknown>;
};
Menambal satu tugas berdasarkan ID. Atur status ke "deleted" untuk menghapusnya.

TaskGet

Nama tool: TaskGet
type TaskGetInput = {
  taskId: string;
};
Mengembalikan detail lengkap untuk satu tugas, atau null ketika ID tidak ditemukan.

TaskList

Nama tool: TaskList
type TaskListInput = {};
Mengembalikan snapshot dari semua tugas dalam daftar saat ini.

ExitPlanMode

Nama tool: ExitPlanMode
type ExitPlanModeInput = {
  allowedPrompts?: Array<{
    tool: "Bash";
    prompt: string;
  }>;
};
Keluar dari mode perencanaan. Secara opsional menentukan izin berbasis prompt yang diperlukan untuk mengimplementasikan rencana.

ListMcpResources

Nama tool: ListMcpResourcesTool
type ListMcpResourcesInput = {
  server?: string;
};
Membuat daftar sumber daya MCP yang tersedia dari server yang terhubung.

ReadMcpResource

Nama tool: ReadMcpResourceTool
type ReadMcpResourceInput = {
  server: string;
  uri: string;
};
Membaca sumber daya MCP tertentu dari server.

EnterWorktree

Nama tool: EnterWorktree
type EnterWorktreeInput = {
  name?: string;
  path?: string;
};
Membuat dan memasuki worktree git sementara untuk pekerjaan terisolasi. Lewatkan path untuk beralih ke worktree yang ada dari repositori saat ini alih-alih membuat yang baru. name dan path saling eksklusif.

Tipe Output Tool

Dokumentasi skema output untuk semua tool Claude Code bawaan. Tipe ini dieksport dari @anthropic-ai/claude-agent-sdk dan mewakili data respons aktual yang dikembalikan oleh setiap tool.

ToolOutputSchemas

Union dari semua tipe output tool.
type ToolOutputSchemas =
  | AgentOutput
  | AskUserQuestionOutput
  | BashOutput
  | EnterWorktreeOutput
  | ExitPlanModeOutput
  | FileEditOutput
  | FileReadOutput
  | FileWriteOutput
  | GlobOutput
  | GrepOutput
  | ListMcpResourcesOutput
  | MonitorOutput
  | NotebookEditOutput
  | ReadMcpResourceOutput
  | TaskCreateOutput
  | TaskGetOutput
  | TaskListOutput
  | TaskStopOutput
  | TaskUpdateOutput
  | TodoWriteOutput
  | WebFetchOutput
  | WebSearchOutput
  | WorkflowOutput;

Agent

Nama tool: Agent (sebelumnya Task, yang masih diterima sebagai alias)
type AgentOutput =
  | {
      status: "completed";
      agentId: string;
      content: Array<{ type: "text"; text: string }>;
      totalToolUseCount: number;
      totalDurationMs: number;
      totalTokens: number;
      usage: {
        input_tokens: number;
        output_tokens: number;
        cache_creation_input_tokens: number | null;
        cache_read_input_tokens: number | null;
        server_tool_use: {
          web_search_requests: number;
          web_fetch_requests: number;
        } | null;
        service_tier: ("standard" | "priority" | "batch") | null;
        cache_creation: {
          ephemeral_1h_input_tokens: number;
          ephemeral_5m_input_tokens: number;
        } | null;
      };
      prompt: string;
    }
  | {
      status: "async_launched";
      agentId: string;
      description: string;
      prompt: string;
      outputFile: string;
      canReadOutputFile?: boolean;
    }
  | {
      status: "sub_agent_entered";
      description: string;
      message: string;
    };
Mengembalikan hasil dari subagen. Didiskriminasikan pada field status: "completed" untuk tugas yang selesai, "async_launched" untuk tugas latar belakang, dan "sub_agent_entered" untuk subagen interaktif.

AskUserQuestion

Nama tool: AskUserQuestion
type AskUserQuestionOutput = {
  questions: Array<{
    question: string;
    header: string;
    options: Array<{ label: string; description: string; preview?: string }>;
    multiSelect: boolean;
  }>;
  answers: Record<string, string>;
  response?: string;
};
Mengembalikan pertanyaan yang diajukan dan jawaban pengguna. response diatur ketika pengguna mengetik balasan bentuk bebas alih-alih menjawab pertanyaan terstruktur; ketika ada, Claude menerima “Pengguna merespons: …” alih-alih daftar jawaban per-pertanyaan.

Bash

Nama tool: Bash
type BashOutput = {
  stdout: string;
  stderr: string;
  rawOutputPath?: string;
  interrupted: boolean;
  isImage?: boolean;
  backgroundTaskId?: string;
  backgroundedByUser?: boolean;
  dangerouslyDisableSandbox?: boolean;
  returnCodeInterpretation?: string;
  structuredContent?: unknown[];
  persistedOutputPath?: string;
  persistedOutputSize?: number;
};
Mengembalikan output perintah dengan stdout/stderr terpisah. Perintah latar belakang menyertakan backgroundTaskId.

Monitor

Nama tool: Monitor
type MonitorOutput = {
  taskId: string;
  timeoutMs: number;
  persistent?: boolean;
};
Mengembalikan ID tugas latar belakang untuk monitor yang sedang berjalan. Gunakan ID ini dengan TaskStop untuk membatalkan watch lebih awal.

Edit

Nama tool: Edit
type FileEditOutput = {
  filePath: string;
  oldString: string;
  newString: string;
  originalFile: string;
  structuredPatch: Array<{
    oldStart: number;
    oldLines: number;
    newStart: number;
    newLines: number;
    lines: string[];
  }>;
  userModified: boolean;
  replaceAll: boolean;
  gitDiff?: {
    filename: string;
    status: "modified" | "added";
    additions: number;
    deletions: number;
    changes: number;
    patch: string;
  };
};
Mengembalikan diff terstruktur dari operasi edit.

Read

Nama tool: Read
type FileReadOutput =
  | {
      type: "text";
      file: {
        filePath: string;
        content: string;
        numLines: number;
        startLine: number;
        totalLines: number;
      };
    }
  | {
      type: "image";
      file: {
        base64: string;
        type: "image/jpeg" | "image/png" | "image/gif" | "image/webp";
        originalSize: number;
        dimensions?: {
          originalWidth?: number;
          originalHeight?: number;
          displayWidth?: number;
          displayHeight?: number;
        };
      };
    }
  | {
      type: "notebook";
      file: {
        filePath: string;
        cells: unknown[];
      };
    }
  | {
      type: "pdf";
      file: {
        filePath: string;
        base64: string;
        originalSize: number;
      };
    }
  | {
      type: "parts";
      file: {
        filePath: string;
        originalSize: number;
        count: number;
        outputDir: string;
      };
    };
Mengembalikan konten file dalam format yang sesuai dengan tipe file. Didiskriminasikan pada field type.

Write

Nama tool: Write
type FileWriteOutput = {
  type: "create" | "update";
  filePath: string;
  content: string;
  structuredPatch: Array<{
    oldStart: number;
    oldLines: number;
    newStart: number;
    newLines: number;
    lines: string[];
  }>;
  originalFile: string | null;
  gitDiff?: {
    filename: string;
    status: "modified" | "added";
    additions: number;
    deletions: number;
    changes: number;
    patch: string;
  };
};
Mengembalikan hasil write dengan informasi diff terstruktur.

Glob

Nama tool: Glob
type GlobOutput = {
  durationMs: number;
  numFiles: number;
  filenames: string[];
  truncated: boolean;
};
Mengembalikan jalur file yang cocok dengan pola glob, diurutkan berdasarkan waktu modifikasi.

Grep

Nama tool: Grep
type GrepOutput = {
  mode?: "content" | "files_with_matches" | "count";
  numFiles: number;
  filenames: string[];
  content?: string;
  numLines?: number;
  numMatches?: number;
  appliedLimit?: number;
  appliedOffset?: number;
};
Mengembalikan hasil pencarian. Bentuknya bervariasi menurut mode: daftar file, konten dengan kecocokan, atau hitungan kecocokan.

TaskStop

Nama tool: TaskStop
type TaskStopOutput = {
  message: string;
  task_id: string;
  task_type: string;
  command?: string;
};
Mengembalikan konfirmasi setelah menghentikan tugas latar belakang.

NotebookEdit

Nama tool: NotebookEdit
type NotebookEditOutput = {
  new_source: string;
  cell_id?: string;
  cell_type: "code" | "markdown";
  language: string;
  edit_mode: string;
  error?: string;
  notebook_path: string;
  original_file: string;
  updated_file: string;
};
Mengembalikan hasil edit notebook dengan konten file asli dan diperbarui.

WebFetch

Nama tool: WebFetch
type WebFetchOutput = {
  bytes: number;
  code: number;
  codeText: string;
  result: string;
  durationMs: number;
  url: string;
};
Mengembalikan konten yang diambil dengan status HTTP dan metadata.

WebSearch

Nama tool: WebSearch
type WebSearchOutput = {
  query: string;
  results: Array<
    | {
        tool_use_id: string;
        content: Array<{ title: string; url: string }>;
      }
    | string
  >;
  durationSeconds: number;
};
Mengembalikan hasil pencarian dari web.

Workflow

Nama tool: Workflow
type WorkflowOutput = {
  status: "async_launched";
  taskId: string;
  runId?: string;
  summary?: string;
  transcriptDir?: string;
  scriptPath?: string;
  error?: string;
};
Mengembalikan segera setelah tool menerima invokasi. Hasil akhir tiba kemudian sebagai penyelesaian tugas. Periksa error sebelum memperlakukan run sebagai dimulai: skrip yang gagal pemeriksaan sintaksnya mengembalikan status: "async_launched" dengan error diatur, dan tidak pernah berjalan.
FieldTypeDescription
status"async_launched"Tool menerima invokasi. Ini adalah satu-satunya nilai yang diambil field
taskIdstringPengenal tugas latar belakang untuk run
runIdstringPengenal workflow run untuk diteruskan sebagai resumeFromRunId pada invokasi kemudian
summarystringDeskripsi satu baris tentang apa yang dilakukan workflow
transcriptDirstringDirektori tempat transkrip subagen ditulis selama eksekusi
scriptPathstringJalur ke skrip workflow yang disimpan untuk run ini. Edit dan teruskan kembali sebagai scriptPath untuk menjalankan ulang tanpa mengirim ulang skrip
errorstringDiatur ketika skrip gagal pemeriksaan sintaksnya. Ketika ada, run tidak dimulai meskipun status async_launched

TodoWrite

Nama tool: TodoWrite
type TodoWriteOutput = {
  oldTodos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
  newTodos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
};
Mengembalikan daftar tugas sebelumnya dan diperbarui.
Mulai dari TypeScript Agent SDK 0.3.142, TodoWrite dinonaktifkan secara default. Gunakan TaskCreate, TaskGet, TaskUpdate, dan TaskList sebagai gantinya. Lihat Migrasi ke tool Task untuk memperbarui kode pemantauan Anda, atau atur CLAUDE_CODE_ENABLE_TASKS=0 untuk kembali ke TodoWrite.

TaskCreate

Nama tool: TaskCreate
type TaskCreateOutput = {
  task: {
    id: string;
    subject: string;
  };
};
Mengembalikan tugas yang dibuat dengan ID yang ditetapkan.

TaskUpdate

Nama tool: TaskUpdate
type TaskUpdateOutput = {
  success: boolean;
  taskId: string;
  updatedFields: string[];
  error?: string;
  statusChange?: {
    from: string;
    to: string;
  };
};
Mengembalikan hasil pembaruan, termasuk field mana yang berubah.

TaskGet

Nama tool: TaskGet
type TaskGetOutput = {
  task: {
    id: string;
    subject: string;
    description: string;
    status: "pending" | "in_progress" | "completed";
    blocks: string[];
    blockedBy: string[];
  } | null;
};
Mengembalikan catatan tugas lengkap, atau null ketika ID tidak ditemukan.

TaskList

Nama tool: TaskList
type TaskListOutput = {
  tasks: Array<{
    id: string;
    subject: string;
    status: "pending" | "in_progress" | "completed";
    owner?: string;
    blockedBy: string[];
  }>;
};
Mengembalikan snapshot semua tugas dalam daftar saat ini.

ExitPlanMode

Nama tool: ExitPlanMode
type ExitPlanModeOutput = {
  plan: string | null;
  isAgent: boolean;
  filePath?: string;
  hasTaskTool?: boolean;
  awaitingLeaderApproval?: boolean;
  requestId?: string;
};
Mengembalikan status rencana setelah keluar dari mode perencanaan.

ListMcpResources

Nama tool: ListMcpResourcesTool
type ListMcpResourcesOutput = Array<{
  uri: string;
  name: string;
  mimeType?: string;
  description?: string;
  server: string;
}>;
Mengembalikan array sumber daya MCP yang tersedia.

ReadMcpResource

Nama tool: ReadMcpResourceTool
type ReadMcpResourceOutput = {
  contents: Array<{
    uri: string;
    mimeType?: string;
    text?: string;
  }>;
};
Mengembalikan konten sumber daya MCP yang diminta.

EnterWorktree

Nama tool: EnterWorktree
type EnterWorktreeOutput = {
  worktreePath: string;
  worktreeBranch?: string;
  message: string;
};
Mengembalikan informasi tentang worktree git.

Tipe Izin

PermissionUpdate

Operasi 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;
    };

PermissionBehavior

type PermissionBehavior = "allow" | "deny" | "ask";

PermissionUpdateDestination

type PermissionUpdateDestination =
  | "userSettings" // Pengaturan pengguna global
  | "projectSettings" // Pengaturan proyek per-direktori
  | "localSettings" // Pengaturan lokal gitignored
  | "session" // Hanya sesi saat ini
  | "cliArg"; // Argumen CLI

PermissionRuleValue

type PermissionRuleValue = {
  toolName: string;
  ruleContent?: string;
};

Tipe Lainnya

ApiKeySource

type ApiKeySource = "user" | "project" | "org" | "temporary" | "oauth";

SdkBeta

Fitur beta yang tersedia yang dapat diaktifkan melalui opsi betas. Lihat Beta headers untuk informasi lebih lanjut.
type SdkBeta = "context-1m-2025-08-07";
Beta context-1m-2025-08-07 sudah pensiun sejak 30 April 2026. Melewatkan nilai ini dengan Claude Sonnet 4.5 atau Sonnet 4 tidak berpengaruh, dan permintaan yang melebihi jendela konteks standar 200k-token mengembalikan error. Untuk menggunakan jendela konteks 1M-token, migrasikan ke Claude Sonnet 4.6, Claude Opus 4.6, atau Claude Opus 4.7, yang mencakup konteks 1M dengan harga standar tanpa header beta yang diperlukan.

SlashCommand

Informasi tentang perintah slash yang tersedia.
type SlashCommand = {
  name: string;
  description: string;
  argumentHint: string;
  aliases?: string[];
};

ModelInfo

Informasi tentang model yang tersedia.
type ModelInfo = {
  value: string;
  displayName: string;
  description: string;
  supportsEffort?: boolean;
  supportedEffortLevels?: ("low" | "medium" | "high" | "xhigh" | "max")[];
  supportsAdaptiveThinking?: boolean;
  supportsFastMode?: boolean;
};

AgentInfo

Informasi tentang subagen yang tersedia yang dapat dipanggil melalui tool Agent.
type AgentInfo = {
  name: string;
  description: string;
  model?: string;
};
FieldTipeDeskripsi
namestringPengenal tipe agen (misalnya, "Explore", "general-purpose")
descriptionstringDeskripsi tentang kapan menggunakan agen ini
modelstring | undefinedAlias model yang digunakan agen ini. Jika dihilangkan, mewarisi model parent

McpServerStatus

Status server MCP yang terhubung.
type McpServerStatus = {
  name: string;
  status: "connected" | "failed" | "needs-auth" | "pending" | "disabled";
  serverInfo?: {
    name: string;
    version: string;
  };
  error?: string;
  config?: McpServerStatusConfig;
  scope?: string;
  tools?: {
    name: string;
    description?: string;
    annotations?: {
      readOnly?: boolean;
      destructive?: boolean;
      openWorld?: boolean;
    };
  }[];
};

McpServerStatusConfig

Konfigurasi server MCP seperti yang dilaporkan oleh mcpServerStatus(). Ini adalah union dari semua tipe transport server MCP.
type McpServerStatusConfig =
  | McpStdioServerConfig
  | McpSSEServerConfig
  | McpHttpServerConfig
  | McpSdkServerConfig
  | McpClaudeAIProxyServerConfig;
Lihat McpServerConfig untuk detail tentang setiap tipe transport.

AccountInfo

Informasi akun untuk pengguna yang diautentikasi.
type AccountInfo = {
  email?: string;
  organization?: string;
  subscriptionType?: string;
  tokenSource?: string;
  apiKeySource?: string;
};

ModelUsage

Statistik penggunaan per-model yang dikembalikan dalam pesan hasil. Nilai costUSD adalah estimasi sisi klien. Lihat Lacak biaya dan penggunaan untuk peringatan penagihan.
type ModelUsage = {
  inputTokens: number;
  outputTokens: number;
  cacheReadInputTokens: number;
  cacheCreationInputTokens: number;
  webSearchRequests: number;
  costUSD: number;
  contextWindow: number;
  maxOutputTokens: number;
};

ConfigScope

type ConfigScope = "local" | "user" | "project";

NonNullableUsage

Versi Usage dengan semua field nullable dibuat non-nullable.
type NonNullableUsage = {
  [K in keyof Usage]: NonNullable<Usage[K]>;
};

Usage

Statistik penggunaan token. Ini adalah tipe BetaUsage dari @anthropic-ai/sdk.
type Usage = {
  input_tokens: number;
  output_tokens: number;
  cache_creation_input_tokens: number | null;
  cache_read_input_tokens: number | null;
  cache_creation: {
    ephemeral_5m_input_tokens: number;
    ephemeral_1h_input_tokens: number;
  } | null;
  server_tool_use: BetaServerToolUsage | null;
  service_tier: "standard" | "priority" | "batch" | null;
  speed: "standard" | "fast" | null;
  inference_geo: string | null;
  iterations: BetaIterationsUsage | null;
};
BetaServerToolUsage dan BetaIterationsUsage didefinisikan dalam @anthropic-ai/sdk.

CallToolResult

Tipe hasil tool MCP (dari @modelcontextprotocol/sdk/types.js). structuredContent adalah objek JSON yang dapat dikembalikan bersama content, termasuk blok gambar. Lihat Kembalikan data terstruktur.
type CallToolResult = {
  content: Array<{
    type: "text" | "image" | "resource";
    // Field tambahan bervariasi menurut tipe
  }>;
  structuredContent?: Record<string, unknown>;
  isError?: boolean;
};

ThinkingConfig

Mengontrol perilaku pemikiran/penalaran Claude. Mengambil preseden atas maxThinkingTokens yang sudah usang.
type ThinkingDisplay = "summarized" | "omitted";

type ThinkingConfig =
  | { type: "adaptive"; display?: ThinkingDisplay } // Model menentukan kapan dan berapa banyak untuk bernalar (Opus 4.6+)
  | { type: "enabled"; budgetTokens?: number; display?: ThinkingDisplay } // Anggaran token pemikiran tetap
  | { type: "disabled" }; // Tidak ada pemikiran yang diperluas
Field display opsional mengontrol apakah teks pemikiran dikembalikan "summarized" atau "omitted". Pada Claude Opus 4.7 dan yang lebih baru, default API adalah "omitted", jadi atur "summarized" untuk menerima konten pemikiran dalam blok thinking.

SpawnedProcess

Antarmuka untuk spawn proses kustom (digunakan dengan opsi spawnClaudeCodeProcess). ChildProcess sudah memenuhi antarmuka ini.
interface SpawnedProcess {
  stdin: Writable;
  stdout: Readable;
  readonly killed: boolean;
  readonly exitCode: number | null;
  kill(signal: NodeJS.Signals): boolean;
  on(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  on(event: "error", listener: (error: Error) => void): void;
  once(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  once(event: "error", listener: (error: Error) => void): void;
  off(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  off(event: "error", listener: (error: Error) => void): void;
}

SpawnOptions

Opsi yang diteruskan ke fungsi spawn kustom.
interface SpawnOptions {
  command: string;
  args: string[];
  cwd?: string;
  env: Record<string, string | undefined>;
  signal: AbortSignal;
}
Field signal memberi tahu fungsi spawn Anda kapan harus merobohkan proses. Teruskan sebagai opsi signal ke spawn() Node, atau teruskan ke handler teardown VM atau container Anda.Signal ini tidak menyala saat Options.abortController membatalkan. SDK pertama-tama menutup stdin proses dan menunggu sekitar dua detik sehingga CLI dapat ditutup dengan bersih, kemudian membatalkan signal ini. Untuk bereaksi saat pemanggil membatalkan, dengarkan Options.abortController.signal Anda sendiri, yang dapat direferensikan fungsi spawn Anda dari cakupan penutupnya.

McpSetServersResult

Hasil operasi setMcpServers().
type McpSetServersResult = {
  added: string[];
  removed: string[];
  errors: Record<string, string>;
};

RewindFilesResult

Hasil operasi rewindFiles().
type RewindFilesResult = {
  canRewind: boolean;
  error?: string;
  filesChanged?: string[];
  insertions?: number;
  deletions?: number;
};

SDKStatusMessage

Pesan pembaruan status (misalnya, pemadatan).
type SDKStatusMessage = {
  type: "system";
  subtype: "status";
  status: "compacting" | null;
  permissionMode?: PermissionMode;
  uuid: UUID;
  session_id: string;
};

SDKTaskNotificationMessage

Notifikasi ketika tugas latar belakang selesai, gagal, atau dihentikan. Tugas latar belakang mencakup perintah Bash run_in_background, watch Monitor, dan subagen latar belakang.
type SDKTaskNotificationMessage = {
  type: "system";
  subtype: "task_notification";
  task_id: string;
  tool_use_id?: string;
  status: "completed" | "failed" | "stopped";
  output_file: string;
  summary: string;
  usage?: {
    total_tokens: number;
    tool_uses: number;
    duration_ms: number;
  };
  uuid: UUID;
  session_id: string;
};

SDKToolUseSummaryMessage

Ringkasan penggunaan tool dalam percakapan.
type SDKToolUseSummaryMessage = {
  type: "tool_use_summary";
  summary: string;
  preceding_tool_use_ids: string[];
  uuid: UUID;
  session_id: string;
};

SDKHookStartedMessage

Dipancarkan ketika hook mulai mengeksekusi.
type SDKHookStartedMessage = {
  type: "system";
  subtype: "hook_started";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  uuid: UUID;
  session_id: string;
};

SDKHookProgressMessage

Dipancarkan saat hook sedang berjalan, dengan output stdout/stderr.
type SDKHookProgressMessage = {
  type: "system";
  subtype: "hook_progress";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  stdout: string;
  stderr: string;
  output: string;
  uuid: UUID;
  session_id: string;
};

SDKHookResponseMessage

Dipancarkan ketika hook selesai mengeksekusi.
type SDKHookResponseMessage = {
  type: "system";
  subtype: "hook_response";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  output: string;
  stdout: string;
  stderr: string;
  exit_code?: number;
  outcome: "success" | "error" | "cancelled";
  uuid: UUID;
  session_id: string;
};

SDKToolProgressMessage

Dipancarkan secara berkala saat tool sedang mengeksekusi untuk menunjukkan kemajuan.
type SDKToolProgressMessage = {
  type: "tool_progress";
  tool_use_id: string;
  tool_name: string;
  parent_tool_use_id: string | null;
  elapsed_time_seconds: number;
  task_id?: string;
  uuid: UUID;
  session_id: string;
};

SDKAuthStatusMessage

Dipancarkan selama alur autentikasi.
type SDKAuthStatusMessage = {
  type: "auth_status";
  isAuthenticating: boolean;
  output: string[];
  error?: string;
  uuid: UUID;
  session_id: string;
};

SDKTaskStartedMessage

Dipancarkan ketika tugas latar belakang dimulai. Field task_type adalah "local_bash" untuk perintah Bash latar belakang dan watch Monitor, "local_agent" untuk subagen, atau "remote_agent".
type SDKTaskStartedMessage = {
  type: "system";
  subtype: "task_started";
  task_id: string;
  tool_use_id?: string;
  description: string;
  task_type?: string;
  uuid: UUID;
  session_id: string;
};

SDKTaskProgressMessage

Dipancarkan secara berkala saat subagen atau tugas latar belakang sedang berjalan. Field summary diisi hanya ketika agentProgressSummaries diaktifkan.
type SDKTaskProgressMessage = {
  type: "system";
  subtype: "task_progress";
  task_id: string;
  tool_use_id?: string;
  description: string;
  subagent_type?: string;
  usage: {
    total_tokens: number;
    tool_uses: number;
    duration_ms: number;
  };
  last_tool_name?: string;
  summary?: string;
  uuid: UUID;
  session_id: string;
};

SDKTaskUpdatedMessage

Dipancarkan ketika status tugas latar belakang berubah, seperti ketika transisi dari running ke completed. Gabungkan patch ke dalam peta tugas lokal Anda yang dikunci oleh task_id. Field end_time adalah timestamp epoch Unix dalam milidetik, dapat dibandingkan dengan Date.now().
type SDKTaskUpdatedMessage = {
  type: "system";
  subtype: "task_updated";
  task_id: string;
  patch: {
    status?: "pending" | "running" | "completed" | "failed" | "killed";
    description?: string;
    end_time?: number;
    total_paused_ms?: number;
    error?: string;
    is_backgrounded?: boolean;
  };
  uuid: UUID;
  session_id: string;
};

SDKFilesPersistedEvent

Dipancarkan ketika checkpoint file dipersistenkan ke disk.
type SDKFilesPersistedEvent = {
  type: "system";
  subtype: "files_persisted";
  files: { filename: string; file_id: string }[];
  failed: { filename: string; error: string }[];
  processed_at: string;
  uuid: UUID;
  session_id: string;
};

SDKRateLimitEvent

Dipancarkan ketika sesi mengalami batas laju.
type SDKRateLimitEvent = {
  type: "rate_limit_event";
  rate_limit_info: {
    status: "allowed" | "allowed_warning" | "rejected";
    resetsAt?: number;
    utilization?: number;
  };
  uuid: UUID;
  session_id: string;
};

SDKLocalCommandOutputMessage

Output dari perintah slash lokal (misalnya, /voice atau /usage). Ditampilkan sebagai teks gaya asisten dalam transkrip.
type SDKLocalCommandOutputMessage = {
  type: "system";
  subtype: "local_command_output";
  content: string;
  uuid: UUID;
  session_id: string;
};

SDKCommandsChangedMessage

Dipancarkan ketika set perintah yang tersedia berubah di tengah sesi, seperti ketika skills ditemukan saat agen memasuki subdirektori. Array commands adalah daftar lengkap yang diperbarui, jadi ganti daftar perintah yang di-cache dengan payload ini. Memanggil supportedCommands() lagi tidak setara: metode itu mengembalikan snapshot yang ditangkap saat inisialisasi dan tidak mencerminkan perubahan di tengah sesi.
type SDKCommandsChangedMessage = {
  type: "system";
  subtype: "commands_changed";
  commands: SlashCommand[];
  uuid: UUID;
  session_id: string;
};

SDKPromptSuggestionMessage

Dipancarkan setelah setiap putaran ketika promptSuggestions diaktifkan. Berisi prompt pengguna berikutnya yang diprediksi.
type SDKPromptSuggestionMessage = {
  type: "prompt_suggestion";
  suggestion: string;
  uuid: UUID;
  session_id: string;
};

AbortError

Kelas error kustom untuk operasi abort.
class AbortError extends Error {}

Konfigurasi Sandbox

SandboxSettings

Konfigurasi untuk perilaku sandbox. Gunakan ini untuk mengaktifkan sandboxing perintah dan mengonfigurasi pembatasan jaringan secara terprogram.
type SandboxSettings = {
  enabled?: boolean;
  failIfUnavailable?: boolean;
  autoAllowBashIfSandboxed?: boolean;
  excludedCommands?: string[];
  allowUnsandboxedCommands?: boolean;
  network?: SandboxNetworkConfig;
  filesystem?: SandboxFilesystemConfig;
  ignoreViolations?: Record<string, string[]>;
  enableWeakerNestedSandbox?: boolean;
  ripgrep?: { command: string; args?: string[] };
};
PropertiTipeDefaultDeskripsi
enabledbooleanfalseAktifkan mode sandbox untuk eksekusi perintah
failIfUnavailablebooleantrueBerhenti saat startup jika enabled adalah true tetapi sandbox tidak dapat dimulai. Atur false untuk kembali ke eksekusi unsandboxed dengan peringatan di stderr
autoAllowBashIfSandboxedbooleantrueAuto-approve perintah bash ketika sandbox diaktifkan
excludedCommandsstring[][]Perintah yang selalu bypass pembatasan sandbox (misalnya, ['docker']). Ini berjalan unsandboxed secara otomatis tanpa keterlibatan model
allowUnsandboxedCommandsbooleantrueIzinkan model untuk meminta menjalankan perintah di luar sandbox. Ketika true, model dapat mengatur dangerouslyDisableSandbox dalam input tool, yang jatuh kembali ke sistem izin
networkSandboxNetworkConfigundefinedKonfigurasi sandbox spesifik jaringan
filesystemSandboxFilesystemConfigundefinedKonfigurasi sandbox spesifik filesystem untuk pembatasan baca/tulis
ignoreViolationsRecord<string, string[]>undefinedPeta kategori pelanggaran ke pola untuk diabaikan (misalnya, { file: ['/tmp/*'], network: ['localhost'] })
enableWeakerNestedSandboxbooleanfalseAktifkan sandbox bersarang yang lebih lemah untuk kompatibilitas
ripgrep{ command: string; args?: string[] }undefinedKonfigurasi biner ripgrep kustom untuk lingkungan sandbox
Sandbox bergantung pada dukungan platform dan, di Linux, alat seperti bubblewrap dan socat. Ketika enabled adalah true dan sandbox tidak dapat dimulai, query() melaporkan pesan result dengan subtype: "error_during_execution" dan alasan dalam errors, kemudian berhenti. Perhatikan subtype itu daripada mengharapkan query() untuk melempar sebelum menghasilkan pesan.Untuk menjalankan unsandboxed sebagai gantinya, atur failIfUnavailable: false.

Contoh penggunaan

import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Build and test my project",
  options: {
    sandbox: {
      enabled: true,
      autoAllowBashIfSandboxed: true,
      network: {
        allowLocalBinding: true
      }
    }
  }
})) {
  if ("result" in message) console.log(message.result);
}
Keamanan Unix socket: Opsi allowUnixSockets dapat memberikan akses ke layanan sistem yang kuat. Misalnya, mengizinkan /var/run/docker.sock secara efektif memberikan akses sistem host penuh melalui API Docker, melewati isolasi sandbox. Hanya izinkan Unix socket yang benar-benar diperlukan dan pahami implikasi keamanan dari masing-masing.

SandboxNetworkConfig

Konfigurasi spesifik jaringan untuk mode sandbox. Pengaturan ini berlaku untuk perintah Bash sandboxed ketika enabled adalah true dalam SandboxSettings induk. Mereka tidak membatasi tool WebFetch, yang menggunakan aturan izin sebagai gantinya.
type SandboxNetworkConfig = {
  allowedDomains?: string[];
  deniedDomains?: string[];
  allowManagedDomainsOnly?: boolean;
  allowLocalBinding?: boolean;
  allowUnixSockets?: string[];
  allowAllUnixSockets?: boolean;
  httpProxyPort?: number;
  socksProxyPort?: number;
};
PropertiTipeDefaultDeskripsi
allowedDomainsstring[][]Nama domain yang dapat diakses proses sandboxed
deniedDomainsstring[][]Nama domain yang tidak dapat diakses proses sandboxed. Mengambil prioritas atas allowedDomains
allowManagedDomainsOnlybooleanfalseHanya pengaturan yang dikelola. Ketika diatur dalam pengaturan yang dikelola, hanya entri allowedDomains dari pengaturan yang dikelola yang dihormati dan entri dari pengaturan pengguna, proyek, atau lokal diabaikan. Tidak berpengaruh ketika diatur melalui opsi SDK
allowLocalBindingbooleanfalseIzinkan proses untuk mengikat ke port lokal (misalnya, untuk dev server)
allowUnixSocketsstring[][]Jalur Unix socket yang dapat diakses proses (misalnya, Docker socket)
allowAllUnixSocketsbooleanfalseIzinkan akses ke semua Unix socket
httpProxyPortnumberundefinedPort proxy HTTP untuk permintaan jaringan
socksProxyPortnumberundefinedPort proxy SOCKS untuk permintaan jaringan
Proxy sandbox bawaan memberlakukan allowedDomains berdasarkan nama host yang diminta dan tidak menghentikan atau memeriksa lalu lintas TLS, sehingga teknik seperti domain fronting dapat berpotensi melewatinya. Lihat Batasan keamanan sandboxing untuk detail dan Penyebaran aman untuk mengonfigurasi proxy yang menghentikan TLS.

SandboxFilesystemConfig

Konfigurasi spesifik filesystem untuk mode sandbox.
type SandboxFilesystemConfig = {
  allowWrite?: string[];
  denyWrite?: string[];
  denyRead?: string[];
};
PropertiTipeDefaultDeskripsi
allowWritestring[][]Pola jalur file untuk mengizinkan akses tulis ke
denyWritestring[][]Pola jalur file untuk menolak akses tulis ke
denyReadstring[][]Pola jalur file untuk menolak akses baca ke

Fallback Izin untuk Perintah Unsandboxed

Ketika allowUnsandboxedCommands diaktifkan, model dapat meminta untuk menjalankan perintah di luar sandbox dengan mengatur dangerouslyDisableSandbox: true dalam input tool. Permintaan ini jatuh kembali ke sistem izin yang ada, berarti handler canUseTool Anda dipanggil, memungkinkan Anda untuk mengimplementasikan logika otorisasi kustom.
excludedCommands vs allowUnsandboxedCommands:
  • excludedCommands: Daftar statis perintah yang selalu bypass sandbox secara otomatis (misalnya, ['docker']). Model tidak memiliki kontrol atas ini.
  • allowUnsandboxedCommands: Biarkan model memutuskan pada runtime apakah akan meminta eksekusi unsandboxed dengan mengatur dangerouslyDisableSandbox: true dalam input tool.
import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Deploy my application",
  options: {
    sandbox: {
      enabled: true,
      allowUnsandboxedCommands: true // Model dapat meminta eksekusi unsandboxed
    },
    permissionMode: "default",
    canUseTool: async (tool, input) => {
      // Periksa apakah model meminta untuk bypass sandbox
      if (tool === "Bash" && input.dangerouslyDisableSandbox) {
        // Model meminta untuk menjalankan perintah ini di luar sandbox
        console.log(`Unsandboxed command requested: ${input.command}`);

        if (isCommandAuthorized(input.command)) {
          return { behavior: "allow" as const, updatedInput: input };
        }
        return {
          behavior: "deny" as const,
          message: "Command not authorized for unsandboxed execution"
        };
      }
      return { behavior: "allow" as const, updatedInput: input };
    }
  }
})) {
  if ("result" in message) console.log(message.result);
}
Pola ini memungkinkan Anda untuk:
  • Audit permintaan model: Catat ketika model meminta eksekusi unsandboxed
  • Implementasikan allowlist: Hanya izinkan perintah tertentu untuk berjalan unsandboxed
  • Tambahkan alur persetujuan: Memerlukan otorisasi eksplisit untuk operasi istimewa
Perintah yang berjalan dengan dangerouslyDisableSandbox: true memiliki akses sistem penuh. Pastikan handler canUseTool Anda memvalidasi permintaan ini dengan hati-hati.Jika permissionMode diatur ke bypassPermissions dan allowUnsandboxedCommands diaktifkan, model dapat secara otonom mengeksekusi perintah di luar sandbox tanpa prompt persetujuan apa pun. Kombinasi ini secara efektif memungkinkan model untuk melarikan diri dari isolasi sandbox secara diam-diam.

Lihat juga