跳轉到主要內容

安裝

SDK 為您的平台捆綁了一個原生 Claude Code 二進制文件作為可選依賴項,例如 @anthropic-ai/claude-agent-sdk-darwin-arm64。您不需要單獨安裝 Claude Code。如果您的包管理器跳過可選依賴項,SDK 會拋出 Native CLI binary for <platform> not found;改為將 pathToClaudeCodeExecutable 設置為單獨安裝的 claude 二進制文件。

編譯為單個可執行文件

當您使用 bun build --compile 將應用程序編譯為單個文件可執行文件時,SDK 無法在運行時解析捆綁的 CLI 二進制文件。require.resolve 在編譯後可執行文件的 $bunfs 虛擬文件系統內不起作用,因此 SDK 會拋出 Native CLI binary for <platform> not found 要解決此問題,請將平台二進制文件嵌入為文件資產,在啟動時使用 extractFromBunfs() 將其提取到真實路徑,並將該路徑傳遞給 pathToClaudeCodeExecutable extractFromBunfs() 輔助函數需要 @anthropic-ai/claude-agent-sdk v0.3.144 或更高版本。下面的示例為 Apple Silicon 上的 macOS 構建:
extractFromBunfs() 將嵌入的二進制文件從編譯後可執行文件的虛擬文件系統複製到每個用戶的臨時目錄,並返回真實路徑。在編譯後的可執行文件外,它返回輸入路徑不變,因此相同的代碼在開發中無需修改即可運行。 每個編譯後的可執行文件都嵌入單個平台的二進制文件。將導入中的平台包與您的 --target 匹配:
  • 要進行交叉編譯,請安裝不匹配的平台包,例如 npm install @anthropic-ai/claude-agent-sdk-linux-x64 --force
  • 在 Windows 上,二進制子路徑是 claude.exe,例如 @anthropic-ai/claude-agent-sdk-win32-x64/claude.exe

函數

query()

與 Claude Code 互動的主要函數。創建一個異步生成器,在消息到達時流式傳輸消息。

參數

返回值

返回一個 Query 對象,它擴展了 AsyncGenerator<SDKMessage, void> 並具有額外的方法。

startup()

通過生成 CLI 子進程並在提示可用之前完成初始化握手來預熱 CLI 子進程。返回的 WarmQuery 句柄稍後接受提示並將其寫入已準備好的進程,因此第一個 query() 調用解析時無需支付子進程生成和初始化成本。

參數

返回值

返回一個 Promise<WarmQuery>,在子進程生成並完成其初始化握手後解析。

示例

早期調用 startup(),例如在應用程序啟動時,然後在提示準備好後在返回的句柄上調用 .query()。這將子進程生成和初始化移出關鍵路徑。

tool()

為與 SDK MCP 服務器一起使用創建類型安全的 MCP 工具定義。

參數

ToolAnnotations

@modelcontextprotocol/sdk/types.js 重新導出。所有字段都是可選提示;客戶端不應依賴它們進行安全決策。

createSdkMcpServer()

創建在與應用程序相同的進程中運行的 MCP 服務器實例。

參數

listSessions()

發現並列出具有輕量級元數據的過去會話。按項目目錄篩選或列出所有項目中的會話。

參數

返回類型:SDKSessionInfo

示例

打印項目的 10 個最近會話。結果按 lastModified 降序排序,因此第一項是最新的。省略 dir 以搜索所有項目。

getSessionMessages()

從過去的會話記錄中讀取用戶和助手消息。

參數

返回類型:SessionMessage

示例

getSessionInfo()

按 ID 讀取單個會話的元數據,無需掃描完整項目目錄。

參數

返回 SDKSessionInfo,如果找不到會話則返回 undefined

renameSession()

通過附加自定義標題條目來重命名會話。重複調用是安全的;最新的標題獲勝。

參數

tagSession()

標記會話。傳遞 null 以清除標籤。重複調用是安全的;最新的標籤獲勝。

參數

resolveSettings()

使用與 CLI 相同的合併引擎為給定目錄解析有效的 Claude Code 設定,無需生成 Claude CLI。在調用 query() 之前使用它來檢查 query() 調用將看到什麼配置。
此函數處於 alpha 階段,其 API 在穩定之前可能會更改。它讀取 MDM 源,包括 macOS plist 和 Windows HKLM/HKCU,以與 CLI 啟動保持一致,但不執行管理員配置的 policyHelper 子進程。permissions.defaultMode 字段從所有層級(包括項目設定)按原樣返回。CLI 在遵守升級權限模式之前應用的信任過濾器不被應用。

參數

resolveSettings() 接受單個選項對象。所有字段都是可選的。

返回類型:ResolvedSettings

resolveSettings() 返回一個對象,描述合併的設定和為每個鍵提供的源。

示例

下面的示例為項目目錄解析設定並打印控制清理期的源。

類型

Options

query() 函數的配置對象。

Handle slow or stalled API responses

CLI 子進程讀取多個環境變量,這些變量控制 API 超時和停滯檢測。通過 env 選項傳遞它們:
  • API_TIMEOUT_MS:Anthropic 客戶端上的每個請求超時,以毫秒為單位。默認 600000。適用於主循環和所有子代理。
  • CLAUDE_CODE_MAX_RETRIES:最大 API 重試次數。默認 10,上限為 15。每次重試都有自己的 API_TIMEOUT_MS 窗口,因此最壞情況下的牆時間大約是 API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1) 加上退避。對於需要等待更長時間中斷的無人值守運行,設置 CLAUDE_CODE_RETRY_WATCHDOG=1:它無限期重試容量錯誤,自 Claude Code v2.1.199 起,為其他瞬時錯誤提高默認值至 300 並移除此變量的上限。
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS:使用 run_in_background 啟動的子代理的停滯監視程序。默認 600000。在每個流事件上重置;在停滯時中止子代理,將任務標記為失敗,並將錯誤與任何部分結果一起呈現給父代理。不適用於同步子代理。
  • CLAUDE_ENABLE_STREAM_WATCHDOGCLAUDE_STREAM_IDLE_TIMEOUT_MS:當標頭已到達但響應正文停止流式傳輸時中止請求。監視程序對所有提供商默認開啟;設置 CLAUDE_ENABLE_STREAM_WATCHDOG=0 以禁用它。CLAUDE_STREAM_IDLE_TIMEOUT_MS 默認為 300000 並被限制為該最小值。中止的請求通過正常重試路徑進行。

Query object

query() 函數返回的介面。

Methods

applyFlagSettings()

在運行會話上更改任何 settings,無需重新啟動查詢。當沒有專用設置器的設置需要在會話中期更改時使用它,例如在代理讀取不受信任的輸入後收緊 permissionssetModel()setPermissionMode() 是這兩個鍵的專用設置器;applyFlagSettings() 是接受任何設置鍵子集的通用形式,在此處傳遞 model 的行為與 setModel() 相同。 只有某些鍵在會話中期生效:
  • 在下一個轉數上應用modeleffortLevelultracodepermissionshooksskillOverridesfastModeagent。切換 agent 也會在下一個轉數上應用該代理的模型覆蓋、hooks 和系統提示。
  • 在會話中期無效:系統提示選項。這些在啟動時解決一次,因此運行會話保持原始值,即使調用成功。要更改它們,請啟動新會話。
effortLevel 接受 effort level 名稱。它也接受 "ultracode",它以 xhigh 努力運行會話並打開 ultracodeSettings 類型聲明 effortLevel 沒有該值,因此在 TypeScript 中傳遞等效的 { ultracode: true }ultracode 值需要 Claude Code v2.1.203 或更高版本,並且僅由 applyFlagSettings() 接受,不由設置文件中的 effortLevel 鍵接受。 這些值被寫入標誌設置層,這是內聯 query()settings 選項在啟動時填充的同一層。標誌設置位於 settings precedence order 的頂部附近:它們覆蓋用戶、項目和本地設置,只有託管策略設置可以覆蓋它們。這是 on-page precedence section 稱為編程選項的同一層。 連續調用淺合併頂級鍵。第二次調用 { permissions: {...} } 會替換先前調用中的整個 permissions 對象,而不是深度合併到其中。要從標誌層清除鍵並回退到較低優先級源,請為該鍵傳遞 null。傳遞 undefined 沒有效果,因為 JSON 序列化會將其刪除。 僅在流式輸入模式下可用,與 setModel()setPermissionMode() 的約束相同。 下面的示例在會話中期切換活動模型,然後清除覆蓋,以便模型回退到用戶或項目設置指定的任何內容。
applyFlagSettings() 僅適用於 TypeScript。Python SDK 不公開等效方法。

WarmQuery

startup() 返回的句柄。子進程已生成並初始化,因此在此句柄上調用 query() 會直接將提示寫入準備好的進程,無需啟動延遲。

Methods

WarmQuery 實現 AsyncDisposable,因此可以與 await using 一起使用以進行自動清理。

SDKControlInitializeResponse

initializationResult() 的返回類型。包含會話初始化數據。
當客戶端向已運行的會話發送 initialize 時,控制響應包裝器也會帶有可選的 pending_permission_requests 數組。該字段位於響應包裝器本身上,而不是上面的 SDKControlInitializeResponse 有效負載中。每個條目都是一個完整的 control_request 消息,具有與會話在運行時為權限請求流式傳輸的相同 { type: "control_request", request_id, request } 形狀。 這些是在客戶端連接之前發出的請求,仍在等待回复。SDK 為您讀取數組並將每個條目分派到您的 canUseTool 回調,這是 reinitialize() 在傳輸間隙後觸發的相同重新傳遞。以冪等方式處理重複的請求 ID,因為一個條目可以重複回調已經收到的請求,然後連接斷開。

SDKControlInterruptResponse

中斷收據:interrupt() 在公告 SDKSystemMessage.capabilities 中的 interrupt_receipt_v1 功能的 CLI 上解決的值。需要 Claude Code v2.1.205 或更高版本。較早的 CLI 使用空成功有效負載回答中斷,因此 interrupt() 解決為 undefined
still_queued 列出存活中斷的用戶消息的 UUID:仍在隊列中的消息,加上任何已出隊用於下一個轉數但尚未被中止到達的批次。除非您先取消它,否則每個都作為其自己的轉數在中斷後運行。使用收據決定是否重新發送任何內容;重新發送已列出的消息會產生重複轉數。 使用這些注意事項解釋列表:
  • 僅出現已使用 UUID 入隊的消息。空數組並不意味著沒有其他內容會運行。
  • 僅列出主線程消息。發送給子代理的消息超出範圍。
  • 列表可以包括您的客戶端從未發送的 UUID,例如 scheduled task 觸發器。忽略您不認識的 UUID,而不是將其視為錯誤。
收據是在處理中斷時拍攝的快照,在乾淨中斷時,它在中斷轉數的 SDKResultMessage 之前到達。在該結果之後讀取收據而不是檢查隊列:循環立即啟動下一個排隊轉數,因此您在結果後檢查的隊列已經改變。

AgentDefinition

以編程方式定義的子代理的配置。

AgentMcpServerSpec

指定子代理可用的 MCP 服務器。可以是服務器名稱(字符串,引用父代理 mcpServers 配置中的服務器)或內聯服務器配置記錄,將服務器名稱映射到配置。
其中 McpServerConfigForProcessTransportMcpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig

SettingSource

控制 SDK 從哪些基於文件系統的配置源加載設置。

Default behavior

settingSources 被省略或 undefined 時,query() 加載與 Claude Code CLI 相同的文件系統設置:用戶、項目和本地。託管策略設置在所有情況下都會加載;當會話使用組織憑證在 eligible configuration 上進行身份驗證時,會獲取服務器管理的設置。見 What settingSources does not control 了解無論此選項如何都會讀取的輸入,以及如何禁用它們。

Why use settingSources

禁用文件系統設置:
明確加載所有文件系統設置:
僅加載特定設置源:
測試和 CI 環境:
僅 SDK 應用程序:
加載 CLAUDE.md 項目指令:

Settings precedence

加載多個源時,設置按此優先級(最高到最低)合併:
  1. 本地設置(.claude/settings.local.json
  2. 項目設置(.claude/settings.json
  3. 用戶設置(~/.claude/settings.json
編程選項(如 agentsallowedToolssettings)覆蓋用戶、項目和本地文件系統設置。託管策略設置優先於編程選項。

PermissionMode

CanUseTool

用於控制工具使用的自定義權限函數類型。 函數是 SDK 替代交互式權限提示:它僅在 permission evaluation flow 解決為提示時調用。已由 allowedTools 條目、設置 allow 規則或權限模式(如 acceptEditsbypassPermissions)批准的工具調用永遠不會調用它。要限制每個工具調用,改用 PreToolUse hook AskUserQuestion、標記為 requiresUserInteraction 的 MCP tools 和 connector tools 您的組織設置為 ask 即使 allow 規則匹配也會到達函數。在 dontAsk 模式下這些調用會被拒絕,無需調用它。
回調通常通過返回 PermissionResult 來解決請求,SDK 將其寫回其傳輸作為 control_response。僅當您的應用程序已通過其自己的通道為此請求發送 control_response(回顯 requestId)時才返回 null;SDK 然後跳過將響應寫入其傳輸。在任何其他情況下返回 null 會使工具調用無限期被阻止,因為永遠不會發送 control_response 且權限提示不會超時。 requestId 選項和 null 返回值需要 Claude Code v2.1.199 或更高版本。

PermissionResult

權限檢查的結果。

ToolConfig

內置工具行為的配置。

McpServerConfig

MCP 服務器的配置。

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpSdkServerConfigWithInstance

McpClaudeAIProxyServerConfig

SdkPluginConfig

SDK 中加載 plugins 的配置。
示例:
有關創建和使用 plugins 的完整信息,見 Plugins

消息類型

SDKMessage

查詢返回的所有可能消息的聯合類型。

SDKAssistantMessage

助手響應消息。
message 字段是來自 Anthropic SDK 的 BetaMessage。它包括 idcontentmodelstop_reasonusage 等字段。 SDKAssistantMessageError 是以下之一:'authentication_failed''oauth_org_not_allowed''billing_error''rate_limit''overloaded''invalid_request''model_not_found''server_error''max_output_tokens''unknown''model_not_found' 表示選定的模型不存在或對您的帳戶或部署不可用。'overloaded' 表示 API 返回了 529,因為伺服器已滿載,與 'rate_limit' 相對,後者是針對您配額的 429。

SDKUserMessage

用戶輸入消息。
shouldQuery 設置為 false 以將消息附加到記錄而不觸發助手轉數。消息被保留並合併到下一個觸發轉數的用戶消息中。使用此方法注入上下文,例如您在帶外運行的命令的輸出,而無需在其上花費模型調用。 在攜帶 tool_result 塊的消息上,tool_use_result 是工具的結構化輸出物件,而不是發送給模型的文本。其形狀取決於匹配 tool_use 塊命名的工具,因此該字段的類型為 unknown;內建形狀列在工具輸出類型下。 對於 Agent 工具,tool_use_resultAgentOutput。在 completed 結果上,content 保存子代理的報告,不包含 Claude Code 附加到 tool_result 文本的代理 ID 和使用情況尾部,因此應從 tool_use_result 呈現,而不是解析該文本。

SDKUserMessageReplay

帶有必需 UUID 的重放用戶消息。
從會話外部注入的用戶轉數,其 origin 類型為 peerchannel,無論是在活躍轉數期間傳遞還是在會話閒置時啟動新轉數,都會作為重放到達流。在 v2.1.207 之前,在會話閒置時傳遞的注入轉數在流上不產生任何消息,僅在您重新讀取記錄時出現。

SDKResultMessage

最終結果消息。
結果上的多個字段除了 subtype 之外還攜帶診斷詳細信息:
  • api_error_status:終止對話的 API 錯誤的 HTTP 狀態碼。當轉數在沒有 API 錯誤的情況下結束時,不存在或為 null
  • ttft_ms:首個令牌的時間(毫秒),在第一個完整助手消息到達時測量。僅在成功分支上出現。
  • ttft_stream_ms:直到第一個 message_start 流事件的時間(毫秒),當響應流打開時。低於 ttft_ms;兩者之間的差距是流式傳輸第一條消息所花費的時間。僅在成功分支上出現。
  • terminal_reason:循環結束的原因。為 "completed""max_turns""tool_deferred""aborted_streaming""aborted_tools""hook_stopped""stop_hook_prevented""background_requested""blocking_limit""rapid_refill_breaker""prompt_too_long""image_error""model_error""api_error""malformed_tool_use_exhausted""budget_exhausted""structured_output_retry_exhausted""tool_deferred_unavailable""turn_setup_failed" 之一。
  • fast_mode_state:為 "on""off""cooldown" 之一。
origin 字段轉發觸發此結果的用戶消息的 SDKMessageOrigin。當後台任務完成且 SDK 注入合成後續轉數時,生成的 SDKResultMessage 攜帶 origin: { kind: "task-notification" }。檢查此字段以區分回答您的提示的結果與為後台任務後續發出的結果,以便您可以路由或抑制後者。對於在任何用戶轉數之前發出的結果(例如啟動錯誤),該字段不存在。 PreToolUse hook 返回 permissionDecision: "defer" 時,結果具有 stop_reason: "tool_deferred"deferred_tool_use 攜帶待處理工具的 idnameinput。讀取此字段以在您自己的 UI 中顯示請求,然後使用相同的 session_id 恢復以繼續。有關完整往返,請參閱稍後延遲工具調用

SDKSystemMessage

系統初始化消息。
capabilities 陣列命名此 CLI 實現的協議行為,因此您可以進行功能檢測而不是比較 claude_code_version 字符串。這是一個開放集合:忽略您不認識的值,並檢查您依賴其行為的特定功能。該字段需要 Claude Code v2.1.205 或更高版本,在較早的 CLI 上不存在。

SDKPartialAssistantMessage

流式部分消息(僅當 includePartialMessages 為 true 時)。parent_tool_use_id 字段始終為 null:流事件僅針對主會話發出。對於子代理歸因,使用完整消息(攜帶 parent_tool_use_id),或啟用 forwardSubagentText 以接收子代理文本和思考作為完整消息。

SDKCompactBoundaryMessage

指示對話壓縮邊界的消息。

SDKInformationalMessage

由循環發出的通用文本橫幅。攜帶非錯誤狀態行、hook 反饋(例如 UserPromptSubmit hook 的阻止原因)和命令輸出。將 content 呈現為給定 level 的純文本。

SDKWorkerShuttingDownMessage

在優雅的 worker 拆卸時發出,以便遠程客戶端可以顯示 worker 消失的原因,而不是等待心跳超時。reason 是由主機 CLI 設置的短 snake_case 字符串,例如 "host_exit""remote_control_disabled"。僅在實時流式傳輸時對此採取行動。恢復的會話會重放此消息的過去實例,因此在這種情況下忽略它們。

SDKPluginInstallMessage

插件安裝進度事件。當設置 CLAUDE_CODE_SYNC_PLUGIN_INSTALL 時發出,以便您的 Agent SDK 應用程式可以在第一個轉數之前追蹤市場插件安裝。startedcompleted 狀態括起整體安裝。installedfailed 狀態報告單個市場並包括 name

SDKPermissionDeniedMessage

當權限系統自動拒絕工具調用而不進行互動式提示時發出的流事件。使用它在發生時在您的 UI 中呈現拒絕,而不是僅觀察隨後的 is_error 工具結果。互動式詢問路徑通過 canUseTool 回調單獨到達您的應用程式。由 PreToolUse hook 發出的拒絕不會通過此事件報告。 此事件需要 Claude Code v2.1.136 或更高版本。

SDKPermissionDenial

有關被拒絕的工具使用的信息。

SDKMessageOrigin

用戶角色消息的來源。這在 SDKUserMessage 上顯示為 origin,並轉發到相應的 SDKResultMessage,以便您可以判斷給定轉數的觸發因素。

Hook 類型

有關使用 hooks 的綜合指南,包括示例和常見模式,見 Hooks 指南

HookEvent

可用的 hook 事件。

HookCallback

Hook 回調函數類型。

HookCallbackMatcher

帶有可選匹配器的 Hook 配置。

HookInput

所有 hook 輸入類型的聯合類型。

BaseHookInput

所有 hook 輸入類型擴展的基本介面。
prompt_id 欄位是一個 UUID,用於識別目前正在處理的使用者提示。它與 OpenTelemetry 事件上的 prompt.id 屬性相符,在第一個使用者輸入之前不存在。需要 Claude Code v2.1.196 或更新版本。

PreToolUseHookInput

PostToolUseHookInput

PostToolUseFailureHookInput

PostToolBatchHookInput

在批次中的每個工具呼叫都已解決後、下一個模型請求之前觸發一次。tool_response 攜帶序列化的 tool_result 內容,模型會看到;其形狀與 PostToolUseHookInput 的結構化 Output 物件不同。

NotificationHookInput

UserPromptSubmitHookInput

SessionStartHookInput

SessionEndHookInput

StopHookInput

SubagentStartHookInput

SubagentStopHookInput

PreCompactHookInput

PermissionRequestHookInput

SetupHookInput

TeammateIdleHookInput

TaskCompletedHookInput

ConfigChangeHookInput

WorktreeCreateHookInput

WorktreeRemoveHookInput

MessageDisplayHookInput

HookJSONOutput

Hook 返回值。

AsyncHookJSONOutput

SyncHookJSONOutput

工具輸入類型

所有內置 Claude Code 工具的輸入架構文檔。這些類型從 @anthropic-ai/claude-agent-sdk 導出,可用於類型安全的工具交互。

ToolInputSchemas

所有工具輸入類型的聯合,從 @anthropic-ai/claude-agent-sdk 導出。

Agent

工具名稱: Agent(之前是 Task,仍然接受作為別名)
啟動新代理以自主處理複雜的多步驟任務。

AskUserQuestion

工具名稱: AskUserQuestion
在執行期間向用戶提出澄清問題。見 處理批准和用戶輸入 了解使用詳情。

Bash

工具名稱: Bash
在持久 shell 會話中執行 bash 命令,具有可選的超時和後台執行。

Monitor

工具名稱: Monitor
運行後台來源並將每個事件傳遞給 Claude,以便它可以在不輪詢的情況下做出反應:command 運行腳本並每個 stdout 行發出一個事件,ws 打開 WebSocket 並每個文本幀發出一個事件。提供 commandws 中的恰好一個。ws 來源需要 Claude Code v2.1.195 或更高版本。 為會話長度的監視(如日誌尾部)設置 persistent: true。Monitor 運行命令時,遵循與 Bash 相同的權限規則;WebSocket 監視會單獨提示批准。見 Monitor 工具參考 了解行為和提供商可用性。

TaskOutput

工具名稱: TaskOutput
從運行或已完成的後台任務檢索輸出。

Edit

工具名稱: Edit
在文件中執行精確字符串替換。

Read

工具名稱: Read
從本地文件系統讀取文件,包括文本、圖像、PDF 和 Jupyter 筆記本。對 PDF 頁面範圍使用 pages(例如,"1-5")。

Write

工具名稱: Write
將文件寫入本地文件系統,如果存在則覆蓋。

Glob

工具名稱: Glob
快速文件模式匹配,適用於任何代碼庫大小。

Grep

工具名稱: Grep
基於 ripgrep 的強大搜索工具,支持正則表達式。

TaskStop

工具名稱: TaskStop
按 ID 停止運行的後台任務或 shell。自 v2.1.198 起,task_id 也接受代理團隊隊友或按代理 ID 或名稱的命名後台代理。

NotebookEdit

工具名稱: NotebookEdit
編輯 Jupyter 筆記本文件中的單元格。

WebFetch

工具名稱: WebFetch
從 URL 獲取內容並使用 AI 模型處理它。

WebSearch

工具名稱: WebSearch
搜索網絡並返回格式化結果。

Workflow

工具名稱: Workflow
運行 動態工作流:一個在後台協調許多子代理並返回一個統一結果的腳本。Workflow 工具在 Agent SDK v0.3.149 及更高版本中可用。至少需要 scriptnamescriptPath 之一。

TodoWrite

工具名稱: TodoWrite
創建和管理結構化任務列表以跟蹤進度。
自 TypeScript Agent SDK 0.3.142 起,TodoWrite 預設為禁用。改用 TaskCreateTaskGetTaskUpdateTaskList。見 遷移到 Task 工具 更新您的監視代碼,或設置 CLAUDE_CODE_ENABLE_TASKS=0 以恢復為 TodoWrite

TaskCreate

工具名稱: TaskCreate
創建單個任務並返回其分配的 ID。

TaskUpdate

工具名稱: TaskUpdate
按 ID 修補一個任務。將 status 設置為 "deleted" 以移除它。

TaskGet

工具名稱: TaskGet
返回一個任務的完整詳情,或在找不到 ID 時返回 null

TaskList

工具名稱: TaskList
返回當前列表中所有任務的快照。

ExitPlanMode

工具名稱: ExitPlanMode
退出規劃模式。allowedPrompts 字段已棄用且被忽略;Claude Code 仍然接受它,以便現有調用者和記錄驗證。在 v2.1.205 之前,它請求基於提示的 Bash 權限以實施計劃。

ListMcpResources

工具名稱: ListMcpResourcesTool
列出來自連接服務器的可用 MCP 資源。

ReadMcpResource

工具名稱: ReadMcpResourceTool
從服務器讀取特定的 MCP 資源。

EnterWorktree

工具名稱: EnterWorktree
創建並進入臨時 git worktree 以進行隔離工作。傳遞 path 以切換到現有 worktree,而不是創建新的。在首次進入時,目標必須是當前存儲庫的已註冊 worktree,或在多存儲庫工作區中,必須是嵌套在其中的存儲庫的已註冊 worktree;從 worktree 會話內進入時,必須在會話存儲庫的 .claude/worktrees/ 下。namepath 互斥。

工具輸出類型

所有內置 Claude Code 工具的輸出架構文檔。這些類型從 @anthropic-ai/claude-agent-sdk 導出,代表每個工具返回的實際響應數據。

ToolOutputSchemas

所有工具輸出類型的聯合。

Agent

工具名稱: Agent(之前是 Task,仍然接受作為別名)
返回子代理的結果。在 status 字段上區分:"completed" 用於已完成的任務,"async_launched" 用於後台任務,以及 "remote_launched" 用於 Claude Code 分派到遠端雲端工作階段的任務,其中 sessionUrl 連結到該工作階段,taskId 識別它。 completedasync_launched 變體上的 resolvedModel 字段命名子代理實際運行的模型,當應用 availableModels 或其他覆蓋時,該模型可能與請求的 model 輸入不同。此字段需要 Claude Code v2.1.174 或更高版本。 completed 變體上,當子代理在隔離的 git worktree 中運行時,worktreePath 被設置,當 Claude Code 創建它時,worktreeBranch 命名該 worktree 的分支。usage.service_tier 攜帶 API 為子代理的請求報告的服務層字符串。 在 v2.1.207 之前,發佈的類型更窄。它省略了 worktreePathworktreeBranchcitationstoolStats.frameCount 以及 inference_geospeediterations 使用字段,並將 service_tier 類型化為 "standard" | "priority" | "batch"。類型標記為可選的字段可能在由較早版本記錄的結果中不存在。

AskUserQuestion

工具名稱: AskUserQuestion
返回提出的問題和用戶的答案。當用戶輸入自由形式的回覆而不是回答結構化問題時,response 被設置;當存在時,Claude 會收到「用戶回應:…」而不是每個問題的答案列表。

Bash

工具名稱: Bash
返回命令輸出,stdout/stderr 分開。後台命令包括 backgroundTaskId

Monitor

工具名稱: Monitor
返回運行監視器的後台任務 ID。使用此 ID 與 TaskStop 一起提前取消監視。

Edit

工具名稱: Edit
返回編輯操作的結構化差異。

Read

工具名稱: Read
返回適合文件類型的文件內容。在 type 字段上區分。

Write

工具名稱: Write
返回寫入結果,包含結構化差異信息。

Glob

工具名稱: Glob
返回與 Glob 模式匹配的文件路徑,按修改時間排序。

Grep

工具名稱: Grep
返回搜索結果。形狀因 mode 而異:文件列表、帶匹配的內容或匹配計數。

TaskStop

工具名稱: TaskStop
停止後台任務後返回確認。

NotebookEdit

工具名稱: NotebookEdit
返回筆記本編輯的結果,包含原始和更新的文件內容。

WebFetch

工具名稱: WebFetch
返回獲取的內容,包含 HTTP 狀態和元數據。

WebSearch

工具名稱: WebSearch
返回來自網絡的搜索結果。

Workflow

工具名稱: Workflow
在工具接受調用後立即返回。最終結果稍後作為任務完成到達。在將運行視為已啟動之前檢查 error:失敗語法檢查的腳本返回 status: "async_launched" 並設置 error,並且永遠不會運行。

TodoWrite

工具名稱: TodoWrite
返回之前和更新的任務列表。
自 TypeScript Agent SDK 0.3.142 起,TodoWrite 預設為禁用。改用 TaskCreateTaskGetTaskUpdateTaskList。請參閱遷移到 Task 工具以更新您的監視代碼,或設置 CLAUDE_CODE_ENABLE_TASKS=0 以恢復為 TodoWrite

TaskCreate

工具名稱: TaskCreate
返回創建的任務及其分配的 ID。

TaskUpdate

工具名稱: TaskUpdate
返回更新結果,包括哪些字段已更改。

TaskGet

工具名稱: TaskGet
返回完整的任務記錄,或在找不到 ID 時返回 null

TaskList

工具名稱: TaskList
返回當前列表中所有任務的快照。

ExitPlanMode

工具名稱: ExitPlanMode
返回退出 Plan Mode 後的計劃狀態。

ListMcpResources

工具名稱: ListMcpResourcesTool
返回可用 MCP 資源的數組。

ReadMcpResource

工具名稱: ReadMcpResourceTool
返回請求的 MCP 資源的內容。

EnterWorktree

工具名稱: EnterWorktree
返回有關 git worktree 的信息。

權限類型

PermissionUpdate

用於更新權限的操作。

PermissionBehavior

PermissionUpdateDestination

PermissionRuleValue

其他類型

ApiKeySource

SdkBeta

可通過 betas 選項啟用的可用測試功能。見 Beta 標頭 了解更多信息。
context-1m-2025-08-07 beta 自 2026 年 4 月 30 日起已停用。使用 Claude Sonnet 4.5 或 Sonnet 4 傳遞此值無效,超過標準 200k 令牌上下文窗口的請求返回錯誤。要使用 1M 令牌上下文窗口,請遷移到 Claude Sonnet 5、Claude Sonnet 4.6、Claude Opus 4.6、Claude Opus 4.7 或 Claude Opus 4.8,它們以標準定價包括 1M 上下文,無需 beta 標頭。

SlashCommand

有關可用 slash command 的信息。

ModelInfo

有關可用模型的信息。

AgentInfo

有關可通過 Agent 工具調用的可用子代理的信息。

McpServerStatus

連接的 MCP 服務器的狀態。

McpServerStatusConfig

MCP 服務器的配置,如 mcpServerStatus() 報告的那樣。這是所有 MCP 服務器傳輸類型的聯合。
McpServerConfig 了解每種傳輸類型的詳情。

AccountInfo

經過身份驗證的用戶的帳戶信息。

ModelUsage

結果消息中返回的每個模型使用統計。costUSD 值是客戶端估計。見 跟蹤成本和使用情況 了解計費注意事項。

ConfigScope

NonNullableUsage

Usage 的版本,所有可空字段都變為非可空。

Usage

令牌使用統計。這是來自 @anthropic-ai/sdkBetaUsage 類型。
BetaServerToolUsageBetaIterationsUsage@anthropic-ai/sdk 中定義。

CallToolResult

MCP 工具結果類型(來自 @modelcontextprotocol/sdk/types.js)。structuredContent 是一個 JSON 對象,可以與 content 一起返回,包括圖像塊。見 返回結構化數據

ThinkingConfig

控制 Claude 的思考/推理行為。優先於已棄用的 maxThinkingTokens
可選的 display 字段控制思考文本是否返回為 "summarized""omitted"。在 Claude Opus 4.7 及更高版本上,API 默認值為 "omitted",因此設置 "summarized" 以在 thinking 塊中接收思考內容。

SpawnedProcess

自定義進程生成的介面(與 spawnClaudeCodeProcess 選項一起使用)。ChildProcess 已滿足此介面。

SpawnOptions

傳遞給自定義生成函數的選項。
signal 字段告訴您的生成函數何時拆除進程。將其作為 signal 選項傳遞給 Node 的 spawn(),或將其傳遞給您的 VM 或容器拆除處理程序。此信號不會在 Options.abortController 中止的瞬間觸發。SDK 首先關閉進程的 stdin 並等待約兩秒,以便 CLI 可以乾淨地關閉,然後中止此信號。要在調用者中止的瞬間做出反應,請改為監聽您自己的 Options.abortController.signal,您的生成函數可以從其封閉範圍引用。

McpSetServersResult

setMcpServers() 操作的結果。

RewindFilesResult

rewindFiles() 操作的結果。

SDKStatusMessage

狀態更新消息(例如,壓縮)。

SDKTaskNotificationMessage

後台任務完成、失敗或停止時的通知。後台任務包括 run_in_background Bash 命令、Monitor 監視和後台子代理。

SDKToolUseSummaryMessage

對話中工具使用的摘要。

SDKHookStartedMessage

Hook 開始執行時發出。 Claude Code 將此消息、SDKHookProgressMessageSDKHookResponseMessage 立即傳遞到消息流,包括在會話啟動期間 SessionStartSetup hook 仍在運行時。Claude Code v2.1.169 至 v2.1.203 在 SessionStartSetup hook 完成後以一個批次傳遞這些消息;v2.1.204 恢復了實時傳遞。

SDKHookProgressMessage

Hook 運行時發出,帶有 stdout/stderr 輸出。

SDKHookResponseMessage

Hook 完成執行時發出。

SDKToolProgressMessage

工具執行時定期發出,以指示進度。

SDKAuthStatusMessage

在身份驗證流程中發出。

SDKTaskStartedMessage

後台任務開始時發出。task_type 字段是 "local_bash" 用於後台 Bash 命令和 Monitor 監視,"local_agent" 用於子代理,或 "remote_agent"

SDKTaskProgressMessage

子代理或後台任務運行時定期發出。summary 字段僅在啟用 agentProgressSummaries 時填充。

SDKTaskUpdatedMessage

後台任務的狀態發生變化時發出,例如當它從 running 轉換為 completed 時。將 patch 合併到按 task_id 鍵入的本地任務映射中。end_time 字段是 Unix 紀元時間戳(以毫秒為單位),可與 Date.now() 比較。

SDKBackgroundTasksChangedMessage

每當實時後台任務集合發生變化時發出:任務啟動、完成、被殺死,或前台代理被後台化。tasks 陣列是完整的實時集合。用每個有效負載替換任何緩存的集合,而不是配對 task_startedtask_notification 事件,以便下一個成員資格變化更正您可能錯過的任何事件。 相對於這些每個任務事件的順序是未指定的,因此不要關聯這兩個流。 啟動時不發出任何內容。每當會話的 CLI 進程啟動或重新啟動時重置為空集,並讓下一個成員資格變化重新填充它。 需要 Claude Code v2.1.203 或更高版本。

SDKThinkingTokensMessage

在 Claude 生成思考塊(包括編輯過的思考塊)時發出,帶有迄今為止生成的思考令牌的運行估計。estimated_tokens 是當前思考塊的運行總計,estimated_tokens_delta 是此幀攜帶的增量。將其用於進度顯示。頂級代理循環的最終計數是結果消息的 usage.output_tokens,它不包括子代理令牌;使用 modelUsage 進行整樹會計。 需要 Claude Code v2.1.153 或更高版本。

SDKFilesPersistedEvent

文件檢查點持久化到磁盤時發出。

SDKRateLimitEvent

會話遇到速率限制時發出。
errorCode"credits_required" 時,拒絕來自 claude.ai 訂閱,其包含的使用量已耗盡,會話無法繼續,直到用戶購買使用額度。canUserPurchaseCredits 指示經過身份驗證的用戶是否可以為帳戶購買額度,hasChargeableSavedPaymentMethod 指示是否有保存的付款方式。這三個字段在非信用額度必需拒絕的速率限制事件上不存在。需要 Claude Code v2.1.181 或更高版本。

SDKLocalCommandOutputMessage

本地 slash command 的輸出(例如,/voice/usage)。在記錄中顯示為助手風格的文本。

SDKCommandsChangedMessage

可用命令集在會話中期發生變化時發出,例如當代理進入子目錄時發現技能。commands 陣列是完整的更新列表,因此用此有效負載替換任何緩存的命令列表。再次調用 supportedCommands() 不等同:該方法返回在初始化時捕獲的快照,不反映會話中期的變化。

SDKPromptSuggestionMessage

啟用 promptSuggestions 時在每個轉數後發出。包含預測的下一個用戶提示。

SDKConversationResetMessage

會話的對話被替換而不結束會話時發出,例如在 /clear 之後、計劃模式退出時,或當新對話啟動時。在 new_conversation_id 下掛載空記錄,並丟棄任何緩存的會話標題。
SDK 的已發佈類型在 Claude Code v2.1.203 及更高版本中聲明 SDKConversationResetMessage。在 v2.1.203 之前,SDKMessage 引用該類型而不聲明它,因此當 skipLibCheck 被禁用時,在 type === "conversation_reset" 上縮小範圍失敗類型檢查。

AbortError

中止操作的自定義錯誤類。

沙箱配置

SandboxSettings

沙箱行為的配置。使用此選項以編程方式啟用命令沙箱和配置網絡限制。
沙箱取決於平台支援,在 Linux 上,還需要 bubblewrapsocat 等工具。當 enabledtrue 且沙箱無法啟動時,query() 會報告一條 result 訊息,其中 subtype: "error_during_execution",並在 errors 中包含原因。對於單一訊息 query() 呼叫,SDK 會在產生該錯誤結果後拋出異常,因此請將迴圈包裝在 try 區塊中以繼續執行。請參閱處理結果以了解錯誤合約。要改為運行無沙箱,請設置 failIfUnavailable: false

範例用法

Unix socket 安全性: allowUnixSockets 選項可以授予對強大系統服務的訪問權限。例如,允許 /var/run/docker.sock 實際上通過 Docker API 授予對主機系統的完全訪問權限,繞過沙箱隔離。僅允許絕對必要的 Unix sockets 並了解每個的安全含義。

SandboxNetworkConfig

沙箱模式的網絡特定配置。這些設置適用於當父級 SandboxSettings 中的 enabledtrue 時的沙箱化 Bash 命令。它們不限制 WebFetch 工具,該工具改用權限規則
內置沙箱代理根據請求的主機名強制執行 allowedDomains,並且不終止或檢查 TLS 流量,因此網域前置等技術可能會繞過它。有關詳細資訊,請參閱沙箱安全限制,以及安全部署以配置 TLS 終止代理。

SandboxFilesystemConfig

沙箱模式的檔案系統特定配置。

無沙箱命令的權限回退

啟用 allowUnsandboxedCommands 時,模型可以通過在工具輸入中設置 dangerouslyDisableSandbox: true 來請求在沙箱外運行命令。這些請求回退到現有的權限系統,意味著您的 canUseTool 處理程序被調用,允許您實現自訂授權邏輯。在下面的範例中,isCommandAuthorized 代表您定義的授權檢查。
excludedCommands vs allowUnsandboxedCommands
  • excludedCommands:始終自動繞過沙箱的命令的靜態列表(例如,['docker'])。模型對此無控制。
  • allowUnsandboxedCommands:讓模型在執行時通過在工具輸入中設置 dangerouslyDisableSandbox: true 來決定是否請求無沙箱執行。
此模式使您能夠:
  • 審計模型請求: 記錄模型何時請求無沙箱執行
  • 實現允許清單: 僅允許特定命令在沙箱外運行
  • 新增批准工作流程: 需要對特權操作進行明確授權
使用 dangerouslyDisableSandbox: true 運行的命令具有完整的系統訪問權限。確保您的 canUseTool 處理程序仔細驗證這些請求。如果 permissionMode 設置為 bypassPermissionsallowUnsandboxedCommands 啟用,模型可以自主執行沙箱外的命令,無需任何批准提示(明確的ask 規則仍會強制執行一個)。此組合實際上允許模型無聲地逃離沙箱隔離。

另見