安裝
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_WATCHDOG與CLAUDE_STREAM_IDLE_TIMEOUT_MS:當標頭已到達但響應正文停止流式傳輸時中止請求。監視程序對所有提供商默認開啟;設置CLAUDE_ENABLE_STREAM_WATCHDOG=0以禁用它。CLAUDE_STREAM_IDLE_TIMEOUT_MS默認為300000並被限制為該最小值。中止的請求通過正常重試路徑進行。
Query object
由 query() 函數返回的介面。
Methods
applyFlagSettings()
在運行會話上更改任何 settings,無需重新啟動查詢。當沒有專用設置器的設置需要在會話中期更改時使用它,例如在代理讀取不受信任的輸入後收緊 permissions。setModel() 和 setPermissionMode() 是這兩個鍵的專用設置器;applyFlagSettings() 是接受任何設置鍵子集的通用形式,在此處傳遞 model 的行為與 setModel() 相同。
只有某些鍵在會話中期生效:
- 在下一個轉數上應用:
model、effortLevel、ultracode、permissions、hooks、skillOverrides、fastMode、agent。切換agent也會在下一個轉數上應用該代理的模型覆蓋、hooks 和系統提示。 - 在會話中期無效:系統提示選項。這些在啟動時解決一次,因此運行會話保持原始值,即使調用成功。要更改它們,請啟動新會話。
effortLevel 接受 effort level 名稱。它也接受 "ultracode",它以 xhigh 努力運行會話並打開 ultracode。Settings 類型聲明 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 配置中的服務器)或內聯服務器配置記錄,將服務器名稱映射到配置。
McpServerConfigForProcessTransport 是 McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig。
SettingSource
控制 SDK 從哪些基於文件系統的配置源加載設置。
Default behavior
當settingSources 被省略或 undefined 時,query() 加載與 Claude Code CLI 相同的文件系統設置:用戶、項目和本地。託管策略設置在所有情況下都會加載;當會話使用組織憑證在 eligible configuration 上進行身份驗證時,會獲取服務器管理的設置。見 What settingSources does not control 了解無論此選項如何都會讀取的輸入,以及如何禁用它們。
Why use settingSources
禁用文件系統設置:Settings precedence
加載多個源時,設置按此優先級(最高到最低)合併:- 本地設置(
.claude/settings.local.json) - 項目設置(
.claude/settings.json) - 用戶設置(
~/.claude/settings.json)
agents、allowedTools 和 settings)覆蓋用戶、項目和本地文件系統設置。託管策略設置優先於編程選項。
PermissionMode
CanUseTool
用於控制工具使用的自定義權限函數類型。
函數是 SDK 替代交互式權限提示:它僅在 permission evaluation flow 解決為提示時調用。已由 allowedTools 條目、設置 allow 規則或權限模式(如 acceptEdits 或 bypassPermissions)批准的工具調用永遠不會調用它。要限制每個工具調用,改用 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 的配置。
示例:
消息類型
SDKMessage
查詢返回的所有可能消息的聯合類型。
SDKAssistantMessage
助手響應消息。
message 字段是來自 Anthropic SDK 的 BetaMessage。它包括 id、content、model、stop_reason 和 usage 等字段。
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_result 是 AgentOutput。在 completed 結果上,content 保存子代理的報告,不包含 Claude Code 附加到 tool_result 文本的代理 ID 和使用情況尾部,因此應從 tool_use_result 呈現,而不是解析該文本。
SDKUserMessageReplay
帶有必需 UUID 的重放用戶消息。
origin 類型為 peer 或 channel,無論是在活躍轉數期間傳遞還是在會話閒置時啟動新轉數,都會作為重放到達流。在 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 攜帶待處理工具的 id、name 和 input。讀取此字段以在您自己的 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 應用程式可以在第一個轉數之前追蹤市場插件安裝。started 和 completed 狀態括起整體安裝。installed 和 failed 狀態報告單個市場並包括 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
Monitor
工具名稱:Monitor
command 運行腳本並每個 stdout 行發出一個事件,ws 打開 WebSocket 並每個文本幀發出一個事件。提供 command 或 ws 中的恰好一個。ws 來源需要 Claude Code v2.1.195 或更高版本。
為會話長度的監視(如日誌尾部)設置 persistent: true。Monitor 運行命令時,遵循與 Bash 相同的權限規則;WebSocket 監視會單獨提示批准。見 Monitor 工具參考 了解行為和提供商可用性。
TaskOutput
工具名稱:TaskOutput
Edit
工具名稱:Edit
Read
工具名稱:Read
pages(例如,"1-5")。
Write
工具名稱:Write
Glob
工具名稱:Glob
Grep
工具名稱:Grep
TaskStop
工具名稱:TaskStop
task_id 也接受代理團隊隊友或按代理 ID 或名稱的命名後台代理。
NotebookEdit
工具名稱:NotebookEdit
WebFetch
工具名稱:WebFetch
WebSearch
工具名稱:WebSearch
Workflow
工具名稱:Workflow
Workflow 工具在 Agent SDK v0.3.149 及更高版本中可用。至少需要 script、name 或 scriptPath 之一。
TodoWrite
工具名稱:TodoWrite
自 TypeScript Agent SDK 0.3.142 起,
TodoWrite 預設為禁用。改用 TaskCreate、TaskGet、TaskUpdate 和 TaskList。見 遷移到 Task 工具 更新您的監視代碼,或設置 CLAUDE_CODE_ENABLE_TASKS=0 以恢復為 TodoWrite。TaskCreate
工具名稱:TaskCreate
TaskUpdate
工具名稱:TaskUpdate
status 設置為 "deleted" 以移除它。
TaskGet
工具名稱:TaskGet
null。
TaskList
工具名稱:TaskList
ExitPlanMode
工具名稱:ExitPlanMode
allowedPrompts 字段已棄用且被忽略;Claude Code 仍然接受它,以便現有調用者和記錄驗證。在 v2.1.205 之前,它請求基於提示的 Bash 權限以實施計劃。
ListMcpResources
工具名稱:ListMcpResourcesTool
ReadMcpResource
工具名稱:ReadMcpResourceTool
EnterWorktree
工具名稱:EnterWorktree
path 以切換到現有 worktree,而不是創建新的。在首次進入時,目標必須是當前存儲庫的已註冊 worktree,或在多存儲庫工作區中,必須是嵌套在其中的存儲庫的已註冊 worktree;從 worktree 會話內進入時,必須在會話存儲庫的 .claude/worktrees/ 下。name 和 path 互斥。
工具輸出類型
所有內置 Claude Code 工具的輸出架構文檔。這些類型從@anthropic-ai/claude-agent-sdk 導出,代表每個工具返回的實際響應數據。
ToolOutputSchemas
所有工具輸出類型的聯合。
Agent
工具名稱:Agent(之前是 Task,仍然接受作為別名)
status 字段上區分:"completed" 用於已完成的任務,"async_launched" 用於後台任務,以及 "remote_launched" 用於 Claude Code 分派到遠端雲端工作階段的任務,其中 sessionUrl 連結到該工作階段,taskId 識別它。
completed 和 async_launched 變體上的 resolvedModel 字段命名子代理實際運行的模型,當應用 availableModels 或其他覆蓋時,該模型可能與請求的 model 輸入不同。此字段需要 Claude Code v2.1.174 或更高版本。
在 completed 變體上,當子代理在隔離的 git worktree 中運行時,worktreePath 被設置,當 Claude Code 創建它時,worktreeBranch 命名該 worktree 的分支。usage.service_tier 攜帶 API 為子代理的請求報告的服務層字符串。
在 v2.1.207 之前,發佈的類型更窄。它省略了 worktreePath、worktreeBranch、citations、toolStats.frameCount 以及 inference_geo、speed 和 iterations 使用字段,並將 service_tier 類型化為 "standard" | "priority" | "batch"。類型標記為可選的字段可能在由較早版本記錄的結果中不存在。
AskUserQuestion
工具名稱:AskUserQuestion
response 被設置;當存在時,Claude 會收到「用戶回應:…」而不是每個問題的答案列表。
Bash
工具名稱:Bash
backgroundTaskId。
Monitor
工具名稱:Monitor
TaskStop 一起提前取消監視。
Edit
工具名稱:Edit
Read
工具名稱:Read
type 字段上區分。
Write
工具名稱:Write
Glob
工具名稱:Glob
Grep
工具名稱:Grep
mode 而異:文件列表、帶匹配的內容或匹配計數。
TaskStop
工具名稱:TaskStop
NotebookEdit
工具名稱:NotebookEdit
WebFetch
工具名稱:WebFetch
WebSearch
工具名稱:WebSearch
Workflow
工具名稱:Workflow
error:失敗語法檢查的腳本返回 status: "async_launched" 並設置 error,並且永遠不會運行。
TodoWrite
工具名稱:TodoWrite
自 TypeScript Agent SDK 0.3.142 起,
TodoWrite 預設為禁用。改用 TaskCreate、TaskGet、TaskUpdate 和 TaskList。請參閱遷移到 Task 工具以更新您的監視代碼,或設置 CLAUDE_CODE_ENABLE_TASKS=0 以恢復為 TodoWrite。TaskCreate
工具名稱:TaskCreate
TaskUpdate
工具名稱:TaskUpdate
TaskGet
工具名稱:TaskGet
null。
TaskList
工具名稱:TaskList
ExitPlanMode
工具名稱:ExitPlanMode
ListMcpResources
工具名稱:ListMcpResourcesTool
ReadMcpResource
工具名稱:ReadMcpResourceTool
EnterWorktree
工具名稱:EnterWorktree
權限類型
PermissionUpdate
用於更新權限的操作。
PermissionBehavior
PermissionUpdateDestination
PermissionRuleValue
其他類型
ApiKeySource
SdkBeta
可通過 betas 選項啟用的可用測試功能。見 Beta 標頭 了解更多信息。
SlashCommand
有關可用 slash command 的信息。
ModelInfo
有關可用模型的信息。
AgentInfo
有關可通過 Agent 工具調用的可用子代理的信息。
McpServerStatus
連接的 MCP 服務器的狀態。
McpServerStatusConfig
MCP 服務器的配置,如 mcpServerStatus() 報告的那樣。這是所有 MCP 服務器傳輸類型的聯合。
McpServerConfig 了解每種傳輸類型的詳情。
AccountInfo
經過身份驗證的用戶的帳戶信息。
ModelUsage
結果消息中返回的每個模型使用統計。costUSD 值是客戶端估計。見 跟蹤成本和使用情況 了解計費注意事項。
ConfigScope
NonNullableUsage
Usage 的版本,所有可空字段都變為非可空。
Usage
令牌使用統計。這是來自 @anthropic-ai/sdk 的 BetaUsage 類型。
BetaServerToolUsage 和 BetaIterationsUsage 在 @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 將此消息、SDKHookProgressMessage 和 SDKHookResponseMessage 立即傳遞到消息流,包括在會話啟動期間 SessionStart 或 Setup hook 仍在運行時。Claude Code v2.1.169 至 v2.1.203 在 SessionStart 或 Setup 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_started 和 task_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 下掛載空記錄,並丟棄任何緩存的會話標題。
SDKConversationResetMessage。在 v2.1.203 之前,SDKMessage 引用該類型而不聲明它,因此當 skipLibCheck 被禁用時,在 type === "conversation_reset" 上縮小範圍失敗類型檢查。
AbortError
中止操作的自定義錯誤類。
沙箱配置
SandboxSettings
沙箱行為的配置。使用此選項以編程方式啟用命令沙箱和配置網絡限制。
沙箱取決於平台支援,在 Linux 上,還需要
bubblewrap 和 socat 等工具。當 enabled 為 true 且沙箱無法啟動時,query() 會報告一條 result 訊息,其中 subtype: "error_during_execution",並在 errors 中包含原因。對於單一訊息 query() 呼叫,SDK 會在產生該錯誤結果後拋出異常,因此請將迴圈包裝在 try 區塊中以繼續執行。請參閱處理結果以了解錯誤合約。要改為運行無沙箱,請設置 failIfUnavailable: false。範例用法
SandboxNetworkConfig
沙箱模式的網絡特定配置。這些設置適用於當父級 SandboxSettings 中的 enabled 為 true 時的沙箱化 Bash 命令。它們不限制 WebFetch 工具,該工具改用權限規則。
SandboxFilesystemConfig
沙箱模式的檔案系統特定配置。
無沙箱命令的權限回退
啟用allowUnsandboxedCommands 時,模型可以通過在工具輸入中設置 dangerouslyDisableSandbox: true 來請求在沙箱外運行命令。這些請求回退到現有的權限系統,意味著您的 canUseTool 處理程序被調用,允許您實現自訂授權邏輯。在下面的範例中,isCommandAuthorized 代表您定義的授權檢查。
excludedCommands vs allowUnsandboxedCommands:excludedCommands:始終自動繞過沙箱的命令的靜態列表(例如,['docker'])。模型對此無控制。allowUnsandboxedCommands:讓模型在執行時通過在工具輸入中設置dangerouslyDisableSandbox: true來決定是否請求無沙箱執行。
- 審計模型請求: 記錄模型何時請求無沙箱執行
- 實現允許清單: 僅允許特定命令在沙箱外運行
- 新增批准工作流程: 需要對特權操作進行明確授權
另見
- SDK 概述 - 常規 SDK 概念
- Python SDK 參考 - Python SDK 文檔
- CLI 參考 - 命令行介面
- 常見工作流 - 分步指南