安裝
SDK 為您的平台捆綁了一個原生 Claude Code 二進制文件作為可選依賴項,例如
@anthropic-ai/claude-agent-sdk-darwin-arm64。大多數安裝不需要單獨安裝 Claude Code。SDK 版本追蹤捆綁的 Claude Code 版本。SDK v0.3.191 捆綁 Claude Code v2.1.191,因此本頁面上需要特定 Claude Code 版本的功能需要具有相同補丁號或更高版本的 SDK 版本。如果您的包管理器跳過可選依賴項,SDK 會拋出 Native CLI binary for <platform>-<arch> not found;改為將 pathToClaudeCodeExecutable 設置為單獨安裝的 claude 二進制文件。如果您的包管理器不應用 npm 的 libc 欄位(如 Yarn 1.x 不應用),您會在 Linux 上同時獲得 glibc 和 musl 平台包,大約使安裝大小翻倍。在 Agent SDK v0.2.141 或更高版本上,SDK 仍會啟動正確的變體。要在容器映像中回收空間,請刪除與您的應用程式運行的 libc 不匹配的平台包;對於 x64 上的 glibc 運行時,即 rm -rf node_modules/@anthropic-ai/claude-agent-sdk-linux-x64-musl。在開發機器上,刪除是臨時的,因為 Yarn 會在下一次依賴項更改時重新安裝該包。編譯為單個可執行文件
當您使用bun build --compile 將應用程式編譯為單個文件可執行文件時,SDK 無法在運行時解析捆綁的 CLI 二進制文件。require.resolve 在編譯後可執行文件的 $bunfs 虛擬文件系統內不起作用,因此 SDK 會拋出 Native CLI binary for <platform>-<arch> 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。
當您捆綁 Agent SDK 時從 /core 入口導入
如果您的應用程式將 Agent SDK 與其自身的依賴項一起捆綁,請從 @anthropic-ai/claude-agent-sdk/core 而不是包根目錄導入。/core 入口需要 TypeScript Agent SDK v0.3.282 或更高版本,其類型需要 TypeScript 5.0 或更高版本。
/core 入口導出與根入口相同的 query()、startup()、tool()、createSdkMcpServer() 和 resolveSettings(),以及重命名、標記和刪除會話的函數、AbortError、運行時常數和每種類型。它不添加自己的名稱。為了保持應用程式加載的程式碼較小,/core 省略了一些根導出,包括 prewarm()、InMemorySessionStore 類以及列出、讀取、分叉、導入和總結會話的輔助函數。如果您需要其中之一,請改用根入口。
根入口內聯了自己的 zod 和 @modelcontextprotocol/sdk 副本。/core 入口從您的 node_modules 按照 Agent SDK 的 peerDependencies 聲明的範圍導入它們,因此已經包含它們的捆綁不會攜帶第二份副本。在給定的程序中從根或 /core 導入,而不是兩者:它們是單獨的捆綁,加載兩者會給您兩份 Agent SDK 的類和狀態副本。
函式
query()
與 Claude Code 互動的主要函式。建立一個非同步產生器,在訊息抵達時以串流方式傳送訊息。
參數
傳回值
傳回一個Query 物件,它擴充了 AsyncGenerator<SDKMessage, void> 並提供額外的方法。
startup()
在提示詞可用之前,先啟動 CLI 子程序並完成初始化交握,藉此預熱 CLI 子程序。傳回的 WarmQuery 控制代碼稍後可接受提示詞,並將其寫入已就緒的程序,因此第一次 query() 呼叫在解析時,不必當場負擔子程序啟動與初始化的成本。如果您還不知道工作階段的工作目錄,請改用 prewarm()。
參數
傳回值
傳回一個Promise<WarmQuery>,在子程序啟動並完成初始化交握後解析。
範例
盡早呼叫startup(),例如在應用程式啟動時,然後在提示詞準備好後,對傳回的控制代碼呼叫 .query()。這樣可將子程序啟動與初始化移出關鍵路徑。
prewarm()
Alpha。 在您知道要服務哪個工作階段之前,先啟動一個 Claude Code 程序作為備用,以便稍後透過 claim() 將其繫結到某個工作階段。適用於在使用者選擇資料夾之前就已啟動的應用程式。需要 TypeScript Agent SDK v0.3.282 或更新版本。
prewarm() 會完成與 startup() 相同的初始化交握;若您設定了 options.cwd,程序會在該目錄中等待,否則會在您 Claude Code 設定目錄下的私有暫存目錄中等待。工作階段的工作目錄、其 SessionStart hook、其 stdio MCP 伺服器,以及其 CLAUDE.md 和 git 上下文,都會等到認領時才處理。備用程序在等待期間約佔用 230 到 260 MB 的記憶體。如果您的 spawnClaudeCodeProcess 在另一台機器或容器中執行 Claude Code,請將 options.cwd 設定為該處存在的目錄,讓備用程序在其中等待。
options 和 initializeTimeoutMs 的意義與 startup() 相同,但 options.cwd 僅設定備用程序等待的目錄。程序完成初始化交握後,promise 會以 SpareProcess 解析。如果 options 設定了 resume、continue 或 forkSession,prewarm() 會擲出例外,因為備用程序尚無工作階段。凡是認領時無法設定的項目,例如 mcpServers、hooks、canUseTool、settingSources、systemPrompt 和 plugins,在備用程序的整個生命週期中都是固定的,因此請為每組不同的這類選項各保留一個備用程序,並在它們變更時重新預熱。
範例
在應用程式啟動時預熱,然後在使用者開始工作階段時認領備用程序:tool()
建立型別安全的 MCP 工具定義,供 SDK MCP 伺服器使用。
參數
ToolAnnotations
定義於 @modelcontextprotocol/sdk/types.js。所有欄位都是選用的提示;用戶端不應依賴它們做出安全性決策。
createSdkMcpServer()
建立一個與您的應用程式在同一程序中執行的 MCP 伺服器執行個體。
參數
listSessions()
探索並列出過去的工作階段及其輕量中繼資料。可依專案目錄篩選,或列出所有專案中的工作階段。
參數
傳回型別:SDKSessionInfo
範例
列印某個專案最近的 10 個工作階段。結果依lastModified 遞減排序,因此第一個項目是最新的。省略 dir 即可搜尋所有專案。
getSessionMessages()
從過去的工作階段逐字稿中讀取使用者與助理訊息。
參數
傳回型別:SessionMessage
範例
getSessionInfo()
依 ID 讀取單一工作階段的中繼資料,無需掃描整個專案目錄。
參數
傳回
SDKSessionInfo;若找不到工作階段,則傳回 undefined。
renameSession()
透過附加一個自訂標題項目來重新命名工作階段。重複呼叫是安全的;以最新的標題為準。
參數
tagSession()
為工作階段加上標籤。傳入 null 可清除標籤。重複呼叫是安全的;以最新的標籤為準。
參數
forkSession()
將工作階段的逐字稿複製到新的工作階段,讓您可以將對話導向另一個方向,同時保持原始工作階段不變。若要從對話中較早的某個時間點建立分支,請傳入 upToMessageId。
參數
傳回
{ sessionId },即新工作階段的 UUID。將其作為 resume 傳入即可繼續該分叉。分叉不包含原始工作階段的檔案檢查點,因此您無法將其倒回至分叉之前擷取的檢查點。
forkSession() 在以下情況會擲出例外:
sessionId不是 UUID- 找不到該工作階段,或該工作階段沒有任何訊息
upToMessageId與逐字稿中的任何訊息都不相符
resolveSettings()
使用與 CLI 相同的合併引擎,為指定目錄解析實際生效的 Claude Code 設定,而不需啟動 Claude CLI。可在呼叫 query() 之前,用它檢查該 query() 呼叫將會看到哪些設定。
此函式目前為 alpha 版,其 API 在穩定之前可能會變更。
query() 工作階段所套用的內容有以下差異:
policyHelper:resolveSettings()會讀取 MDM 來源,包括 macOS plist 和 Windows HKLM/HKCU,但不會執行管理員設定的policyHelper子程序。- 伺服器受管設定:
resolveSettings()不會擷取伺服器受管設定。若要納入,請將其作為options.serverManagedSettings傳入。 defaultMode:快照會原封不動地傳回每個層級的permissions.defaultMode,因此可能包含來自專案與本機設定的'auto'和'bypassPermissions'值,而實際執行的工作階段會忽略這些值。
參數
resolveSettings() 接受單一選項物件。所有欄位皆為選用。
傳回型別:ResolvedSettings
resolveSettings() 會傳回一個物件,描述合併後的設定,以及提供每個鍵的來源。
範例
以下範例為專案目錄解析設定,並列印控制清理期間的來源。在沒有任何設定檔設定cleanupPeriodDays 的機器上,列印出的兩行都會顯示值為 undefined,這是預期的輸出,而非錯誤。
型別
Options
query() 函式的設定物件。
處理緩慢或停滯的 API 回應
CLI 子程序會讀取數個控制 API 逾時和停滯偵測的環境變數。請透過env 選項傳遞它們:
-
API_TIMEOUT_MS:Anthropic 用戶端上每個請求的逾時時間,以毫秒為單位。預設為600000。適用於主迴圈和所有 subagent。 -
CLAUDE_CODE_MAX_RETRIES:API 重試的最大次數。預設為10,上限為15。每次重試都有自己的API_TIMEOUT_MS時間範圍。 對於需要等待較長中斷期間的無人值守執行,請設定CLAUDE_CODE_RETRY_WATCHDOG=1:它會無限期重試暫時性的容量錯誤,並且在 Claude Code v2.1.199 或更新版本上,會將其他暫時性錯誤的預設值提高到300,並移除此變數的上限。 -
CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS:subagent 的停滯監控器。當串流監控器開啟時,預設值為CLAUDE_STREAM_IDLE_TIMEOUT_MS加上 5 分鐘,除非您提高該變數,否則為600000。串流監控器關閉時,預設值為600000。在 v2.1.257 之前,預設值一律為600000。 每次串流事件發生時計時器都會重設。發生停滯時,Claude Code 會中止該 subagent 並向父層回報停滯。對於背景 subagent,它也會將任務標記為失敗並附上任何部分結果。 -
CLAUDE_ENABLE_STREAM_WATCHDOG搭配CLAUDE_STREAM_IDLE_TIMEOUT_MS:串流監控器,會在標頭已送達但回應主體停止串流時中止請求。此監控器對所有供應商預設為開啟;設定CLAUDE_ENABLE_STREAM_WATCHDOG=0可停用。CLAUDE_STREAM_IDLE_TIMEOUT_MS預設為300000,且最小值被限制為該值。中止之後,Claude Code 會依據回應已進行的程度採取的行動,請參閱自動重試。 當監控器在等待一個由ANTHROPIC_BASE_URL背後的閘道以 keep-alive ping 保持開啟的回應時,設定了includePartialMessages的主機會持續收到ping串流事件,因此請將這些框架視為存活訊號,而不是因為沉默而讓工作階段逾時。在 v2.1.257 之前,這些框架會在最後一個實際串流事件的 5 分鐘後停止。
Query 物件
query() 函式回傳的介面。
方法
applyFlagSettings()
在不重新啟動查詢的情況下變更正在執行之工作階段的設定。當某個沒有專用 setter 的設定需要在工作階段中途變更時使用,例如在 agent 讀取不受信任的輸入後收緊 permissions。setModel() 和 setPermissionMode() 是這兩個鍵的專用 setter;applyFlagSettings() 則是接受任何設定鍵子集的通用形式,在此傳遞 model 的行為與 setModel() 相同。
只有部分鍵會在工作階段中途生效:
- 在下一個回合套用:
effortLevel、ultracode、permissions、hooks、skillOverrides、fastMode、agent。切換agent也會在下一個回合套用該 agent 的模型覆寫和 hook。其系統提示詞會在下一個回合套用,或者在重複使用已記錄系統提示詞的工作階段中,於工作階段壓縮後套用。 - 在目前回合期間套用:
model。如果您在 Claude 處理某個回合時切換model,Claude 正在產生的回應會以舊模型完成,而該回合的其餘部分(從 Claude Code 對模型發出的下一次呼叫開始)會使用新模型。subagent 會保留它們自己的模型。在 v2.1.212 之前,回合中途的切換會等到下一個回合才生效。 - 在工作階段中途無效:系統提示詞選項。這些選項在啟動時解析一次,因此即使呼叫成功,正在執行的工作階段仍會保留原始值。若要變更它們,請啟動新的工作階段。
effortLevel 接受 effort 等級名稱。它也接受 "ultracode",這會要求 xhigh effort 並開啟 ultracode。applyFlagSettings() 宣告的 effortLevel 不含該值,因此在 TypeScript 中請傳遞 { ultracode: true, effortLevel: "xhigh" } 以得到相同結果,或只傳遞 ultracode 鍵,以在工作階段目前的 effort 等級下開啟 ultracode。ultracode 值需要 Claude Code v2.1.203 或更新版本,且只有 applyFlagSettings() 接受,設定檔中的 effortLevel 鍵不接受。在 v2.1.284 之前,單獨使用 ultracode 鍵也會將等級設為 xhigh。
這些值會寫入旗標設定層,並合併在 query() 的內嵌 settings 選項於啟動時所設定的內容之上。這與本頁優先順序章節所稱的程式化選項屬於同一層級。
連續呼叫會對頂層鍵進行淺層合併。第二次以 { permissions: {...} } 呼叫時,會取代先前呼叫中的整個 permissions 物件,而不是深層合併到其中。
若要清除您以 applyFlagSettings() 設定的鍵,請為該鍵傳遞 null。大多數鍵接著會先退回 query() 的 settings 選項在啟動時設定的值,再退回優先順序較低的來源。清除後的 model 會重設為 Claude Code 的預設模型,即使設定檔中設定了 model 也是如此。傳遞 undefined 沒有作用,因為 JSON 序列化會捨棄它。
除了 model 之外,還有三個鍵會重設工作階段狀態,而不是退回其他來源:
effortLevel: null會將工作階段恢復為模型的預設 effort 等級,而不是query()的effort選項或設定檔中的effortLevel。agent: null會從下一個回合開始以不使用任何 agent 的方式執行主執行緒,而不是恢復query()的agent選項或設定檔中的agent。如果被清除的 agent 曾套用它自己的模型,工作階段會回到它在啟動時解析的模型。ultracode: null會關閉 ultracode(與false相同),而不是恢復設定檔中的ultracode值。工作階段會保留目前的 effort 等級,因此若要變更,請在同一次呼叫中傳遞effortLevel。
setModel() 和 setPermissionMode() 的限制相同。
以下範例在工作階段中途切換使用中的模型,然後清除覆寫,讓模型重設為 Claude Code 的預設模型。
applyFlagSettings() 僅限 TypeScript。Python SDK 沒有提供對應的方法。updateSettings()
將一個允許清單中的鍵寫入磁碟上的設定檔,讓該值在之後載入該來源的工作階段中保留。每個來源接受一個鍵,值為字串:
"localSettings":接受outputStyle,並將其合併到專案的本機設定檔.claude/settings.local.json。新的風格會在工作階段的下一個請求時生效。"userSettings":接受effortLevel,並將其儲存為工作階段目前模型的預設 effort 等級,位於您使用者設定檔中的modelSettings下。傳遞max不會寫入任何內容,因為max僅限工作階段使用。無論如何,正在執行的工作階段都會保留目前的 effort 等級,因此若您也想變更它,請呼叫applyFlagSettings()。此來源需要 TypeScript SDK v0.3.277 或更新版本,其隨附 Claude Code v2.1.277。
settingSources 排除了您指定的來源時,呼叫會被拒絕。不支援刪除鍵。
toggleMcpServer()
停用伺服器會中斷其連線並從工作階段中移除其工具。對於您在工作階段中途新增的伺服器以及處理程序內伺服器,這取決於您的 Claude Code 版本:
- 您在工作階段中途以
setMcpServers()新增的 stdio、SSE 或 HTTP 伺服器:移除其工具需要 Claude Code v2.1.285 或更新版本。 - 您以
createSdkMcpServer()建立的處理程序內伺服器,無論您是在mcpServers中傳遞還是透過setMcpServers()傳遞:中斷其連線並移除其工具需要 Claude Code v2.1.286 或更新版本。停用這類伺服器也會使其仍在執行的工具呼叫失敗,因此 Claude 會立即收到每個呼叫的錯誤結果,而不需等待您的處理常式回傳。
WarmQuery
由 startup() 回傳的控制代碼。子程序已經產生並初始化完成,因此在此控制代碼上呼叫 query() 會將提示詞直接寫入已就緒的程序,沒有啟動延遲。
方法
WarmQuery 實作了 AsyncDisposable,因此可以搭配 await using 使用以自動清理。
SpareProcess
Alpha. 由 prewarm() 回傳的控制代碼:一個已啟動但尚未繫結到工作階段的 Claude Code 程序,可以認領一次。需要 TypeScript Agent SDK v0.3.282 或更新版本。
成員
options.cwd 為必填。認領也可以設定 additionalDirectories、model、permissionMode、maxThinkingTokens、settings 中的旗標設定疊加層、appendSystemPrompt、title、agents,以及 env 中的每個工作階段 token。
Claude Code 可能會拒絕認領,例如資料夾不存在,或資料夾的專案設定設定了 env、agent 或 model。遭拒絕後,claim() 已傳送的提示詞會收到文字開頭為 not_claimed 的錯誤結果,而回傳的查詢接著會擲回例外。請將查詢的迴圈包在 try 區塊中,以便在擲回例外後繼續。當 claimed 以開頭為 option_not_applied 的訊息拒絕時,工作階段正在沒有您要求的 model 或 maxThinkingTokens 的情況下執行。若是其他任何拒絕,您的提示詞都尚未執行,因此請改用 query() 啟動工作階段。
SDKControlInitializeResponse
initializationResult() 的回傳型別。包含工作階段初始化資料。
hooks_applied 回報 Claude Code 是否已註冊 initialize 請求所帶的 hooks。SDK 會在工作階段啟動時傳送該請求一次,並在每次呼叫 reinitialize() 時再次傳送。此欄位需要 Agent SDK v0.3.238 或更新版本。
當請求未帶任何 hook 時,Claude Code 會省略此欄位。當請求帶有 hook 時,其值取決於該請求是否為工作階段的第一次 initialize,以及對於重複的 initialize,它如何送達工作階段:
true:Claude Code 已註冊這些 hook。工作階段的第一次 initialize 會回傳此值。透過 CLI 的 stdin 傳送的重複 initialize 也會回傳true。在這種情況下,新請求中的 hook 會取代先前註冊的 hook。false:Claude Code 忽略了這些 hook。傳送到遠端工作階段的重複 initialize 會回傳此值,因此加入工作階段的第二個用戶端無法取代第一個用戶端註冊的 hook。
hooks。
請求的 sdkMcpServerManifests 欄位和回應的 sdk_mcp_manifests_parked 欄位,是用於您以 createSdkMcpServer() 建立的處理程序內 SDK MCP 伺服器。您的應用程式不需要設定或讀取這兩個欄位。
claude_code_version 是執行工作階段回合之程序的 Claude Code 版本。它與 SDKSystemMessage init 訊息所攜帶的值相同,因此您可以在第一個回合之前讀取 CLI 版本。
- 此欄位需要 Agent SDK v0.3.296 或更新版本,其隨附 Claude Code v2.1.296。
- 如果此欄位為
undefined且您設定了pathToClaudeCodeExecutable,請將其指向 Claude Code v2.1.296 或更新版本。
fast_mode_state,而當有某些因素阻擋快速模式時,fast_mode_disabled_reason 會一併帶有原因代碼,讓您可以說明被阻擋的狀態,而不必重新推導可用性。這兩種行為都需要 Claude Code v2.1.219 或更新版本。在 v2.1.219 之前,回應會在快速模式不可用時省略 fast_mode_state,且從不帶有原因。關於原因代碼及其意義,請參閱結果訊息上的 fast_mode_disabled_reason。
成功的 initialize 的控制回應包裝也帶有一個 pending_permission_requests 陣列。此欄位位於回應包裝本身,而不在上述 SDKControlInitializeResponse payload 中。每個項目都是一則完整的 control_request 訊息,其 { type: "control_request", request_id, request } 形狀與工作階段在執行期間串流權限請求時相同。
此陣列列出此 Claude Code 程序已發出但尚未解決的權限請求。SDK 會為您讀取此陣列,並將每個項目分派給您的 canUseTool 回呼,這與 reinitialize() 在傳輸中斷後觸發的重新傳遞相同。請以冪等方式處理重複的請求 ID,因為某個項目可能會重複回呼在連線中斷前就已收到的請求。
此陣列一律會出現在成功的 initialize 回應中,當此程序沒有未解決的權限請求時則為空。需要 Claude Code v2.1.268 或更新版本。較早的版本可能會省略此欄位,因此如果您自行剖析傳輸協定,請將缺少此欄位視為較舊的 CLI,而不是證明沒有任何待處理的請求。
SDKControlInterruptResponse
中斷回執:在 SDKSystemMessage.capabilities 中宣告 interrupt_receipt_v1 功能的 CLI 上,interrupt() 所解析的值。需要 Claude Code v2.1.205 或更新版本。較早的 CLI 會以空的成功 payload 回應中斷,因此 interrupt() 會解析為 undefined。
still_queued 列出中斷到達時尚待處理之使用者訊息的 UUID:仍在佇列中的訊息,以及 Claude Code 已從佇列中取出準備用於下一個回合的任何訊息。一旦工作階段的第一個回合已經開始,除非您先取消,否則 Claude Code 會在中斷後處理所列出的訊息,並可能將數則訊息合併為一個回合。如果您在第一個回合開始之前中斷,Claude Code 會在該回合一開始就將其中止,而該回合中所列出的訊息不會得到回應。
請使用此回執來決定是否要重新傳送任何內容。您未取消的已列出訊息無論是否得到回應,都會進入對話,因此重新傳送它會將其傳遞給 Claude 兩次。
解讀此清單時請注意以下事項:
- 只有以 UUID 加入佇列的訊息才會出現。空陣列並不代表沒有其他內容會執行。
- 只會列出主執行緒的訊息。傳給 subagent 的訊息不在範圍內。
- 此清單可能包含您的用戶端從未傳送的 UUID,例如排程任務觸發。請忽略您無法識別的 UUID,而不要將其視為錯誤。
interrupt())的用戶端,可以在 interrupt 控制請求上設定 cancel_queued: true。Claude Code v2.1.219 及更新版本會在 SDKSystemMessage.capabilities 中以 interrupt_cancel_queued_v1 功能宣告支援;較舊的 CLI 會忽略此欄位,並讓佇列中的訊息照常執行。這樣的中斷也會取消原本會列在 still_queued 下的每則訊息:回執會改為將它們列在 cancelled 下,still_queued 為空,且它們都不會執行。
cancelled 清單與 still_queued 具有相同的注意事項。interrupt() 方法從不傳送 cancel_queued,因此它所解析的回執不會帶有 cancelled。
此回執是在處理中斷的那一刻所擷取的快照,而在正常的中斷中,它會在被中斷回合的 SDKResultMessage 之前送達。請讀取回執,而不要在該結果之後檢查佇列:迴圈會立即開始下一個佇列中的回合,因此您在結果之後檢查的佇列已經改變了。
SDKControlGetContextUsageResponse
getContextUsage() 的回傳型別。使用預設的 detail 時,這與 Claude Code 在互動式工作階段中為 /context 命令呈現的 payload 相同,因此除了 token 計數之外,它還帶有 color 和 gridRows 等顯示欄位,Claude Code 用它們來繪製 /context 使用量網格。
此方法的選用 detail 引數決定 Claude Code 如何計算每個類別。detail 引數需要 Agent SDK v0.3.257 或更新版本。
'full':預設值。Claude Code 會以 token 計數 API 請求計算每個類別。這些請求不會出現在訊息串流中,因此讀取串流的成本追蹤不會看到它們。在 Anthropic API 上,token 計數不收費。'summary':傳遞{ detail: 'summary' }以改為從上一個回應的用量和本機估算取得答案。不會發出任何 token 計數請求,且各類別的數字為近似值。
/context 作為提示詞傳送而不是呼叫此方法時,Claude Code 會將 SDKContextUsage payload 附加到傳遞結果之 assistant 訊息的 context_usage 欄位。該欄位需要 Agent SDK v0.3.232 或更新版本。
categories保存各類別的總計。每個項目的kind會以與SDKContextUsageCategory相同的值對該列進行分類。請依據它來分類各列,而不是依據顯示用的name。此欄位需要 Agent SDK v0.3.268 或更新版本。mcpTools和agents將 token 歸屬到個別的 MCP 工具和 subagent。memoryFiles列出每個已載入的記憶檔案及其成本。skills.skillFrontmatter將 skill 清單的 token 歸屬到每個包含的 skill。每個 skill 的計數衡量的是 Claude Code 實際傳送的該 skill 清單項目,可能比 skill 的完整 frontmatter 短。比較skills.totalSkills與skills.includedSkills,即可得知是否每個探索到的 skill 都已納入清單。
totalTokens 是工作階段目前的上下文使用量,而 maxTokens 是衡量該使用量所依據的視窗。該視窗是模型的上下文視窗,或在適用時為較低的自動壓縮視窗。rawMaxTokens 帶有與 maxTokens 相同的值,而 percentage 是 totalTokens 佔該視窗的四捨五入百分比。apiUsage 保存的是最新 API 回應的用量,而不是工作階段的累計總量。
Claude Code 不會設定選用的 deferredBuiltinTools、systemTools 和 systemPromptSections 診斷欄位,因此即使型別宣告了它們,也請預期它們不存在。
SDKControlReadFileResponse
readFile() 的回傳型別。
contents 保存檔案文字,或在您要求 encoding: 'base64' 時保存 base64 資料;在這種情況下,回應的 encoding 欄位會設為 'base64'。absPath 是解析後的絕對路徑。當檔案超過 maxBytes 上限且內容在該限制處被截斷時,會設定 truncated。
readFile() 可以讀取的內容
readFile() 提供的檔案範圍比 Read 工具更窄:
- 位於工作階段某個工作目錄(例如
cwd和additionalDirectories)內的一般檔案 - Claude Code 為該工作階段所保存的少數自有檔案,例如工具結果
Read 的拒絕和詢問規則仍會封鎖符合的路徑,而廣泛的 Read 允許規則並不會將檔案系統的其餘部分開放給 readFile()。對於其他任何內容,呼叫都會解析為 null。
SDKControlReloadPluginsResponse
reloadPlugins() 的回傳型別。
commands、agents和mcpServers:工作階段的命令、subagent 和 MCP 伺服器狀態,其形狀與supportedCommands()、supportedAgents()和mcpServerStatus()回傳的相同。supportedAgents()會持續回傳初始化時擷取的清單,因此若要取得重新載入後的集合,請讀取此處的agentsplugins:每個已載入的外掛及其name和安裝path。version重複外掛資訊清單所宣告的內容,由外掛作者控制,因此請在信任之前先驗證。當資訊清單未宣告時會省略error_count:載入外掛時發生的錯誤數量
{ holdOnCacheImpact: true } 傳遞給 reloadPlugins(),以暫緩會使對話提示快取失效的重新載入,而不是套用它。Claude Code 會執行互動式 /reload-plugins 命令在警告快取成本之前所進行的檢查。此選項需要 Agent SDK v0.3.268 或更新版本。早於 v2.1.268 的 Claude Code 執行檔(例如您以 pathToClaudeCodeExecutable 指向的執行檔)會忽略此選項並套用重新載入。
當您傳遞此選項時,請讀取 held 以了解發生了什麼:
true:重新載入未套用,集合欄位描述的是工作階段目前仍維持的狀態。cache_impact說明套用後會有哪些變更。若仍要套用,請在不帶此選項的情況下再次呼叫reloadPlugins()。false:檢查未發現快取影響,且重新載入已套用。- 不存在:您未傳遞此選項,或 Claude Code 執行檔早於 v2.1.268 並已套用重新載入。
cache_impact 只會與 held: true 一起出現。mcp_servers_added 和 mcp_servers_removed 以具範圍的 plugin:<plugin>:<server> 名稱,指出重新載入會註冊或移除的外掛 MCP 伺服器。這些名稱由外掛作者撰寫,因此在顯示之前請先驗證。lsp_tool_change 說明套用後是否會新增或移除 LSP 工具,若兩者皆不會則為 null。may- 形式表示檢查無法完整看到待處理的外掛集合。
SDKControlReloadSkillsResponse
reloadSkills() 的回傳型別。
skills 列出重新載入後可用的 skill,其 SlashCommand 形狀與 supportedCommands() 回傳的相同。
SDKControlReloadOutputStylesResponse
reloadOutputStyles() 的回傳型別。
available_output_styles 列出重新載入後可用的內建和自訂輸出風格名稱。
SDKControlMcpReadResourceResponse
readMcpResource() 的回傳型別,帶有 MCP 伺服器的 resources/read 結果。需要 TypeScript Agent SDK v0.3.280 或更新版本。
mcpServerStatus() 所回報的伺服器名稱和一個 ui:// URI 傳遞給 readMcpResource(),例如工具在其 _meta 中宣告的 ui.resourceUri。對於任何其他 URI 配置、您的應用程式自行託管的 SDK MCP 伺服器,以及未連線的伺服器,呼叫都會被拒絕。當初始化訊息的 capabilities 包含 mcp_read_resource_v1 時即可使用。
每個 contents 項目都是伺服器所傳送的一個內容項目,但會移除 com.anthropic/ 前綴下的任何 _meta 鍵,該前綴保留給 Claude Code 使用。blob 保存二進位項目的 base64 資料,而 _meta 是該項目本身的 _meta,MCP Apps 伺服器會在其中放置資源的 ui.csp 和 ui.permissions。
這些內容是不受信任的第三方 HTML,因此請在沙箱中呈現。
AgentDefinition
以程式方式定義之 subagent 的設定。
AgentMcpServerSpec
指定 subagent 可用的 MCP 伺服器。可以是伺服器名稱(參照父層 mcpServers 設定中某個伺服器的字串),或是將伺服器名稱對應至設定的內嵌伺服器設定記錄。
McpServerConfigForProcessTransport 為 McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig。
SettingSource
控制 SDK 從哪些基於檔案系統的設定來源載入設定。
預設行為
當省略settingSources 或其值為 undefined 時,query() 會載入與 Claude Code CLI 相同的檔案系統設定:使用者、專案與本機設定。關於無論此選項為何都會被讀取的輸入,以及如何停用它們,請參閱 settingSources 不控制的項目。
為何使用 settingSources
停用檔案系統設定:settingSources 中包含 "project"。關於 CLAUDE.md 的載入如何與系統提示詞選項互動,請參閱修改系統提示詞。
設定優先順序
當載入多個來源時,設定會依以下優先順序合併(由高至低):- 本機設定(
.claude/settings.local.json) - 專案設定(
.claude/settings.json) - 使用者設定(
~/.claude/settings.json)
agents、allowedTools 與 settings 等程式化選項會覆寫使用者、專案與本機的檔案系統設定。受管理的政策設定優先於程式化選項。
PermissionMode
CanUseTool
用於控制工具使用的自訂權限函式型別。
此函式是 SDK 中互動式權限提示的替代方案:只有在權限評估流程判定為需要提示時才會被呼叫。已由 allowedTools 項目、設定中的允許規則,或權限模式(例如 acceptEdits 或 bypassPermissions)核准的工具呼叫,永遠不會呼叫此函式。若要對每個工具呼叫進行把關,請改用 PreToolUse hook。
允許規則不會預先核准任何模式都不會自動核准的動作;關於其中哪些動作會送達回呼函式,以及在 dontAsk 與 auto 模式下會發生什麼情況,請參閱權限的評估方式。
回呼函式通常透過回傳
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 中載入外掛的設定。
範例:
訊息類型
SDKMessage
查詢傳回的所有可能訊息的聯合類型。
SDKAssistantMessage
助手回應訊息。
message 欄位是來自 Anthropic SDK 的 BetaMessage。它包含 id、content、model、stop_reason 和 usage 等欄位。
SDKAssistantMessageError 是以下其中之一:'authentication_failed'、'oauth_org_not_allowed'、'account_on_hold'、'billing_error'、'rate_limit'、'overloaded'、'invalid_request'、'model_not_found'、'server_error'、'max_output_tokens'、'cloud_credential_error' 或 'unknown'。其中四個值的含義超出其名稱所表示的內容:
'model_not_found':選定的模型不存在或無法供您的帳戶或部署使用'overloaded':API 傳回 529,因為伺服器已滿載,與'rate_limit'相對,後者是針對您配額的 429'account_on_hold':您的帳戶已被暫停'cloud_credential_error':Claude Code 無法在其執行的機器上取得可用的 AWS 或 Google Cloud 憑證,因此沒有請求到達雲端提供者。通常的原因是雲端登入已過期或從未在該機器上完成,但暫時無法連線的憑證服務也會回報相同的值。請參閱無法載入 AWS 或 Google Cloud 憑證。需要 TypeScript Agent SDK v0.3.267 或更新版本,其中包含 Claude Code v2.1.267
aborted 為 true:訊息沒有 stop_reason,內容可能在詞的中間結束。該欄位在正常完成的訊息上不存在。它需要 Agent SDK v0.3.214 或更新版本。
agent_id 識別產生該訊息的 subagent,主執行緒的訊息不會有此欄位。其值等於該 subagent 的 task_started 及其他任務事件上的 task_id,且在 subagent 恢復時保持不變。此欄位需要 Agent SDK v0.3.292 或更新版本。
請依 agent_id 將 subagent 的訊息與其任務事件配對,而不是將訊息的 parent_tool_use_id 與任務事件的 tool_use_id 配對。當工具呼叫恢復 subagent 時,任務事件會帶有該呼叫的 tool_use_id,而訊息則保留最初啟動該 subagent 之工具呼叫的 parent_tool_use_id,因此兩者將不再相符。
Claude Code 會在符合 user_message_uuid 所述條件時,於該回合的第一則助理訊息上設定 user_message_uuid 和 user_message_uuids。當該回合是接續因重新啟動而中斷的回合時,帶有這些欄位的助理訊息也會帶有 resume_reason。
timestamp 是訊息內容在產生它的程序上完成生成的 ISO 8601 時間。該值來自該機器的時鐘,因此僅用於顯示,不要依其排序訊息。一個 API 回合可以產生多個共用同一 message.id 的助手訊息,每個都有自己的 timestamp。當欄位不存在時,請改用您收到訊息的時間。
context_usage 是 /context 報告的結構化副本,類型為 SDKContextUsage,需要 Agent SDK v0.3.232 或更新版本。當您以提示詞形式傳送 /context 時,Claude Code 會將報告作為助手訊息傳遞,其 message.content 包含 markdown 表格,並將 context_usage 附加到同一訊息。Claude Code 不會在任何其他助手訊息上設定該欄位,較早的版本傳遞 /context 表格時也不會帶有它,因此當欄位存在時從欄位讀取明細,不存在時則改用 markdown 文字。
usage_report 是 /usage 報告的結構化副本,類型為 SDKUsageReport,需要 Agent SDK v0.3.273 或更新版本。當您將 /usage 作為提示詞送出時,Claude Code 會以一則助理訊息傳遞報告,其 message.content 包含文字。只有在工作階段符合下列所有條件時,它才會將 usage_report 附加到同一則訊息上:
- 工作階段使用 claude.ai 憑證進行身分驗證
- 該憑證顯示已知的方案類型,或帶有
user:profile範圍 - 該帳戶並非採用依用量計費
CLAUDE_CODE_OAUTH_TOKEN 傳入的 claude setup-token token 預設不符合條件,因為它只帶有 user:inference 範圍。其他工作階段(例如 API 金鑰工作階段)傳遞的文字不含此欄位,較早的版本也是如此。當欄位存在時請從中讀取報告,不存在時則改用文字。
SDKUserMessage
使用者輸入訊息。
pasted_content 以傳送使用者貼上到您提示詞 UI 中(而非輸入)的內容,每次貼上一個項目,每個項目都是字串或內容區塊陣列。Claude Code 會依序將每個項目的文字附加在輸入的文字之後,並可能將每次貼上的內容包裝在 <pasted_content> 標籤中。文字以外的區塊會被忽略,因此請在 message.content 中傳送圖片和文件。需要 Agent SDK v0.3.277 或更新版本。
設定 inline_pastes 以告訴 Claude Code message.content 中哪些部分是使用者貼上而非輸入的,每次貼上對應一個字串。提示詞文字會保留在使用者放置的位置。Claude Code 可能會就地將每個列出的貼上內容包在 <pasted_content> 標籤中,讓 Claude 能區分貼上的素材與使用者自己的文字。只有提示詞最後一個文字區塊中的貼上內容會被包裝。需要 TypeScript Agent SDK v0.3.280 或更新版本。
每個貼上欄位都有大小限制:
pasted_content:若項目加上其中的內容區塊總數超過 1,000,Claude Code 會忽略整個欄位。inline_pastes:Claude Code 使用前 100 個非空白項目,並忽略其餘項目。
shouldQuery、client_composed 或 priority,以變更 Claude Code 處理您所傳送訊息的方式:
shouldQuery:設定為false以將訊息附加到逐字稿,而不觸發助手回合。訊息會被保留,並合併到下一個會觸發回合的使用者訊息中。使用此方式注入上下文,例如您在頻外執行之命令的輸出,而不必為此花費一次模型呼叫。client_composed:設定為true以讓 Claude Code 依原文傳遞訊息文字。Claude Code 將不會展開@path或@server:resource提及,也不會將以/開頭的文字作為命令執行。當verbatimPrompts選項開啟時,SDK 會在每則訊息上設定該欄位。需要 TypeScript Agent SDK v0.3.280 或更新版本以及 Claude Code v2.1.248 或更新版本。priority:控制您在回合執行期間傳送的訊息何時送達 Claude:'next'或無priority欄位:Claude 會在同一回合中讀取訊息,時間點為其正在執行的工具呼叫完成之後。若回合先結束,該訊息會開始下一個回合。'later':Claude Code 會保留訊息直到回合結束,再將其作為新回合傳送。'now'搭配origin: { kind: "human" }:在 Claude Code v2.1.286 或更新版本上,可在背景繼續進行的工作會移至背景,且 Claude 會在同一回合中讀取訊息。可移動的工作包括 shell 命令、subagent 與 MCP 工具呼叫。在 v2.1.287 或更新版本上,還包括 WebFetch 與 WebSearch 呼叫。當 Claude 只是在撰寫回應,或其正在執行的工作無法移動時,Claude Code 會改為中斷回合,Claude 接著讀取訊息。'now'但未搭配該 origin:Claude Code 會中斷回合,Claude 接著讀取訊息。
tool_result)會帶有 agent_id。請參閱 SDKAssistantMessage,其中定義了此欄位及其版本需求。
在帶有 tool_result 區塊的訊息上,tool_use_result 是工具的結構化輸出物件,而非傳送給模型的文字。其形狀取決於對應 tool_use 區塊所指名的工具,因此此欄位的型別為 unknown;內建形狀列於工具輸出類型。下列結果需要超出其所列形狀的處理:
Agent工具:tool_use_result為AgentOutput。請依據它來呈現,而非剖析tool_result文字。completed結果的content包含 subagent 的報告;對於透過SubagentHandback工具呼叫交回報告的 subagent,則是以一段關於該交回的簡短說明取代報告。在 Claude Code v2.1.271 或更新版本的自動模式中,每個產生completed結果的 subagent 都會以這種方式回報,除非它是 fork,且 Claude 會以來自 subagent 的獨立訊息接收報告。- Claude Code 為了傳遞
'now'訊息而移至背景的 WebFetch 或 WebSearch 呼叫:帶有該呼叫之tool_result的使用者訊息,其tool_use_result設為{ detachedToolCall: true }。該呼叫仍在執行中,Claude 會在其完成後接收結果。該tool_use_id之後不會再有第二個tool_result,因此若您的應用程式為每個工具呼叫繪製一列,請在此訊息到達時將該列標示為已移至背景。需要 Claude Code v2.1.287 或更新版本。 - 結果包含
resource_link區塊的 MCP 工具:tool_use_result是一個物件,含有由SDKMcpResourceLink項目組成的resourceLinks陣列。Claude 會在tool_result區塊中以一行文字接收每個連結,因此請讀取resourceLinks來呈現伺服器回傳的檔案,而非剖析該文字。當結果沒有連結時,以及在來自 subagent 的結果上,Claude Code 會省略resourceLinks;每個結果最多保留 50 個連結,且當陣列的序列化 JSON 達到 64 KiB 時便停止新增連結。resourceLinks需要 Agent SDK v0.3.257 或更新版本。 - 回傳
structuredContent的 MCP 工具:tool_use_result是一個物件,其structuredContent成員包含伺服器傳送的內容,content成員則包含McpOutput值。來自 subagent 的結果不帶有structuredContent。 structuredContent序列化後超過 1,048,576 個字元 JSON 的 MCP 工具:Claude Code 會在tool_use_result中省略structuredContent,並以structuredContentOmitted: true取代,讓您的應用程式能區分被捨棄的物件與未傳送物件的工具。其他成員(例如content和resourceLinks)會保留,Claude 收到的內容也不變。Claude Code v2.1.287 或更新版本會套用此上限。有兩類工具不同:- 來自程序內 SDK 伺服器的工具不受此限,會完整傳遞物件。
tools/list項目宣告了 MCP Appsui://資源的工具,在 Claude Code v2.1.295 或更新版本上的上限為 8,388,608 個字元,而 v2.1.295 之前的版本則不對其設限。
SDKUserMessageReplay
具有必要 UUID 的重播使用者訊息。
origin kind 為 peer 或 channel),無論是在進行中的回合期間傳遞,還是在工作階段閒置時啟動新回合,都會作為重播到達串流。在 v2.1.207 之前,於工作階段閒置時傳遞的注入回合不會在串流上產生訊息,只會在您重新讀取逐字稿時出現。
SDKResultMessage
最終結果訊息。
subtype 之外還提供診斷詳細資訊:
api_error_status:終止對話的 API 錯誤的 HTTP 狀態碼。當回合在沒有 API 錯誤的情況下結束時,不存在或為null。ttft_ms:首個 token 的時間(毫秒),在第一個完整助手訊息到達時測量。僅在成功分支上存在。ttft_stream_ms:直到第一個message_start串流事件(即回應串流開啟時)的時間(毫秒)。低於ttft_ms;兩者之間的差距是串流第一個訊息所花費的時間。僅在成功分支上存在。user_message_uuid:此回合所回答的、您傳送之訊息的uuid。請參閱user_message_uuid以了解哪些結果會攜帶它。user_message_uuids:Claude Code 在此回合中回答的、您傳送之每則訊息的uuid。請參閱user_message_uuids。resume_reason:此回合為何接續因重新啟動而中斷的回合。出現在兩個分支上。請參閱resume_reason。local_command:回合所分派之命令的名稱,出現在由命令完成、未進入 agent 迴圈之回合的成功結果上,例如/compact。名稱會轉為小寫字母和底線,因此/reload-plugins回報為reload_plugins。由 MCP 伺服器提供的命令以及內建的/mcp回報為mcp。您自行定義的命令回報為custom。引數永遠不會包含在內。在每個進入 agent 迴圈的回合上,以及在未執行任何命令的傳送上,此欄位不存在。需要 Agent SDK v0.3.268 或更新版本。request_sent_wall_ms:Claude Code 分派 API 請求時的紀元毫秒,用於與伺服器端時間戳記進行對照。僅與user_message_uuid一起存在,出現在is_error為 false、且其回合傳送了 API 請求的成功結果上。first_content_frame_ms:直到第一個content_block_start或content_block_delta串流事件的時間(毫秒),思考區塊也計為內容。僅在成功分支上、is_error為 false 時存在。需要 Agent SDK v0.3.260 或更新版本。first_stream_post_ms、first_stream_post_ack_ms、first_stream_post_wall_ms:上傳回合第一個串流事件的計時。Claude Code 僅在它串流到 claude.ai 的工作階段中記錄這些值,例如雲端工作階段,query()產生的結果不會攜帶它們。需要 Agent SDK v0.3.260 或更新版本。usage:僅限主 agent 迴圈。排除 subagent 和輔助模型呼叫,且在串流輸入工作階段中按回合計算。token/成本會計請優先使用modelUsage。modelUsage:在此query()呼叫期間,透過查詢管線進行之每個模型呼叫的各模型總計,包括主迴圈、subagent,以及壓縮和 Workflow agent 等內部呼叫。該管線之外的輔助呼叫,例如權限分類器和 token 計數請求,不計入。恢復工作階段的呼叫也會計入從工作階段較早呼叫還原的各模型總計。在串流輸入工作階段中,總計會跨回合累積,因此請讀取最新結果,而不是加總所有結果。請參閱在串流輸入模式中追蹤成本以了解重設,以及在工作階段當機後恢復總計以了解歸零的結果。total_cost_usd:累積的估計成本(美元),涵蓋與modelUsage相同的呼叫,並在相同時間點重設。恢復工作階段的呼叫也會計入從工作階段較早呼叫還原的總計。這是估計值,不是帳單。請參閱追蹤成本和使用情況以了解準確性注意事項。queued_turn_count:您以origin: { kind: "human" }傳送、在 Claude Code 產生結果時仍在等待的訊息數量。請參閱queued_turn_count以了解0和不存在的欄位代表什麼。result_index:此結果在執行之傳遞順序中的位置,從 0 開始,涵蓋程序寫入的每個結果。在兩個分支上都存在。寫入失敗的結果仍會消耗其編號,因此序列中出現間隙即表示有結果遺失。需要 Agent SDK v0.3.268 或更新版本。startup_failure_reason:Claude Code 拒絕啟動的原因,出現在它因已知啟動失敗而結束前寫入的error_during_execution結果上。請參閱startup_failure_reason以了解其值以及哪些失敗會攜帶它。需要 Agent SDK v0.3.274 或更新版本。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"之一。fast_mode_disabled_reason:快速模式目前無法使用的原因。當沒有任何因素阻止快速模式時不存在,但請求仍可能以標準速度執行。在快速模式速率限制後的冷卻期間,Claude Code 會回報fast_mode_state: "cooldown"而不附原因代碼,並在冷卻期結束時重新啟用快速模式。需要 Claude Code v2.1.219 或更新版本。
相同的這對欄位也出現在
SDKSystemMessage 和 SDKControlInitializeResponse 上,因此您可以在第一個回合之前讀取快速模式狀態。
origin 欄位會轉送觸發此結果之使用者訊息的 SDKMessageOrigin。當 SDK 注入合成的後續回合(例如針對已完成的背景任務)時,產生的 SDKResultMessage 會攜帶 origin: { kind: "task-notification" }。觸發器已觸發的 routine,以及來自您其他工作階段、經伺服器驗證的訊息,也會以此 kind 到達,各自帶有任務通知子類型中描述的 subkind。在路由或抑制結果之前,請檢查 kind 以區分回答您提示詞的結果與注入的後續回合。如果您的應用程式宣告排程執行,其結果也會攜帶 kind: "task-notification",因此不要僅依 kind 來抑制。
當多個背景任務完成事件一起排入佇列時,Claude Code 可以在一個回合中回答它們,而不是每個一個回合。每個完成事件仍會產生自己帶有此 origin 的結果。在 Claude Code 一併回答的完成事件中,除最後一個之外,其餘都會依序產生 num_turns: 0 的空結果,而最後一個的結果則攜帶回答所有事件的那個回合。
對於在任何使用者回合之前發出的結果(例如啟動錯誤),該欄位不存在。
當 PreToolUse hook 傳回 permissionDecision: "defer" 時,結果會帶有 stop_reason: "tool_deferred",且 deferred_tool_use 攜帶待處理工具的 id、name 和 input。讀取此欄位以在您自己的 UI 中呈現請求,然後使用相同的 session_id 恢復以繼續。請參閱延後工具呼叫以供稍後處理以了解完整的往返流程。
user_message_uuid
回合所回答之 SDKUserMessage 的 uuid,回傳此值以便您將 Claude Code 的回覆與您傳送的訊息對應起來。只有在您於訊息上設定了 uuid 時,Claude Code 才會回傳它。該欄位在 SDKUserMessage 上是選用的,而傳遞給 query() 的字串提示詞不會攜帶任何 uuid。
回合所回答的是您的哪則訊息,取決於回合的啟動方式:
- 您傳送的一般訊息,即不帶
isSynthetic: true的訊息:回合在整個執行過程中都回答該訊息。當您在短時間內傳送多則訊息時,Claude Code 可以將它們合併為一個回合,此時該欄位僅攜帶最後一則訊息的uuid。若要將回覆與任何一則被合併的訊息對應,請使用user_message_uuids。 - 您以
isSynthetic: true傳送的訊息:回合一開始回答該訊息。如果 Claude Code 在工具呼叫之間接收到您的一般訊息,回合從那時起改為回答所接收的訊息。回傳合成訊息的uuid需要 Agent SDK v0.3.265 或更新版本;較早的版本在合成回合上不會回傳任何內容。 - Claude Code 在
CLAUDE_CODE_RESUME_INTERRUPTED_TURN下為接續中斷回合而產生的提示詞:當中斷回合的最後一個提示詞是您傳送的一般訊息時(無論它是開啟了該回合,或是 Claude Code 在回合中接收的),接續的回合一開始回答該訊息。resume_reason可區分接續回合的框架與中斷嘗試的框架。當最後一個提示詞不是您的一般訊息時,接續的回合一開始不回答您的任何訊息。若 Claude Code 在工具呼叫之間接收了您的一般訊息,回合從那時起便回答所接收的訊息。回傳中斷回合的提示詞需要 Agent SDK v0.3.268 或更新版本。 - Claude Code 自行產生的任何其他提示詞:回合一開始不回答您的任何訊息,其框架不攜帶任何回傳值。如果 Claude Code 在工具呼叫之間接收到您的一般訊息,回合從那時起回答該訊息。接收時的回傳需要 Agent SDK v0.3.265 或更新版本;較早的版本在這些回合上不會回傳任何內容。
uuid:
- 結果:回答了您所傳送訊息之回合的每個結果。在 Agent SDK v0.3.265 或更新版本上,每個此類結果都攜帶它。在 v0.3.265 之前,由一般訊息啟動之回合的成功結果,若該回合未傳送 API 請求或以延後的工具呼叫結束,則缺少此欄位。在 v0.3.246 之前,錯誤結果也缺少此欄位,而在 v0.3.216 之前,每個結果都缺少此欄位。
- 回合的第一個回覆:第一個助手訊息,以及在使用
includePartialMessages時,第一個event.type不是ping的串流事件,讓您可以在結果到達之前對應回覆。第一個回覆的回傳需要 Agent SDK v0.3.246 或更新版本。在 v0.3.269 之前,使用includePartialMessages時,Claude Code 只會在該第一個串流事件上設定此欄位,或在回合未串流任何內容時設定在第一個助手訊息上。當回合所回答的訊息在回合中途變更時,變更後的第一個回覆也會攜帶該欄位,這在 Agent SDK v0.3.265 或更新版本上適用;較早的版本在每個回合只會於一個回覆框架上設定它。 - 回合的每個
thinking_tokens框架:讓您無需等待回合的第一個回覆,就能將思考進度歸屬到您傳送的訊息。需要 Agent SDK v0.3.260 或更新版本。
- 上述第一個回覆以外的回覆框架
- Subagent 框架
- 不回答您任何訊息的回合,或回答您傳送之不帶
uuid訊息的回合 - 不回答您所傳送任何訊息的結果,例如工作程序當機後歸零的結果
user_message_uuids
Claude Code 在此回合中回答的、您所傳送之每則訊息的 uuid。當您在短時間內傳送多則訊息時,Claude Code 可以將它們合併為一個回合,此時 user_message_uuid 只會指名其中的最後一則。若要將回覆與任何一則被合併的訊息對應,請在此清單中任何位置尋找該訊息的 uuid。需要 Agent SDK v0.3.259 或更新版本。
Claude Code 會在每個攜帶 user_message_uuid 的回覆框架以及結果上,將此清單與該欄位一併設定。關於回傳所回答訊息之 uuid 的完整回合框架集合,以及各自所需的版本,請參閱 user_message_uuid。清單一定包含 user_message_uuid,且最多保留 64 個項目。
當 Claude Code 在回合執行期間接收到您傳送的一般訊息時,會將該訊息的 uuid 新增到結果的清單中。
當第一個回覆或結果攜帶 user_message_uuid 但沒有清單時,表示它來自較早的 Claude Code 版本,因此請改用該單一欄位。
resume_reason
此回合為何接續因重新啟動而中斷的回合。Claude Code 會在 CLAUDE_CODE_RESUME_INTERRUPTED_TURN 下接續中斷回合的回合上設定此欄位,讓您能區分接續回合的回覆和結果與中斷嘗試的回覆和結果。需要 Agent SDK v0.3.268 或更新版本。
Claude Code 會在兩種框架上設定此欄位:
- 接續回合的結果:成功和錯誤分支皆然,無論結果是否帶有
user_message_uuid。 - 接續回合的回覆框架:帶有
user_message_uuid的那些框架。
interrupted_turn。
queued_turn_count
您以 origin: { kind: "human" } 傳送、在 Claude Code 產生結果時仍在命令佇列中等待的訊息數量。需要 Agent SDK v0.3.242 或更新版本。
0 和不存在的欄位代表什麼:
0:Claude Code 不會計算您未以該origin傳送的訊息,也不計算任務通知,因此仍可能有後續回合。- 不存在:Claude Code 在當機或致命啟動錯誤後發出的最終結果會省略該欄位,且可能攜帶歸零的總計。
startup_failure_reason
Claude Code 拒絕啟動的原因,讓您的應用程式可以提供修正方式而非重試。Claude Code 會在因已知啟動失敗而結束前寫入的 error_during_execution 結果上設定它。該結果攜帶歸零的總計,其 errors 陣列攜帶與 stderr 相同的文字。在所有其他結果上,此欄位不存在。需要 Agent SDK v0.3.274 或更新版本。
在 env 中將 CLAUDE_CODE_STARTUP_FAILURE_RESULTS 設定為 1,即可針對每個 SDKStartupFailureReason 值接收此結果。若未設定該變數,Claude Code 僅會針對下列失敗寫入結果,其餘失敗則以 stderr 輸出、非零結束代碼且無結果訊息的方式結束:
- Claude Code 因無法將工作階段帶回其 worktree 而停止的恢復,帶有
worktree_unverified或worktree_resume_refused。該章節說明哪個錯誤攜帶哪個值。 - 對背景工作階段所持有之對話的
continue遭拒,帶有session_held_by_background。對於此類對話的resume遭拒,Claude Code 僅在設定了該變數時才會寫入結果。
SDKSystemMessage
系統初始化訊息。
fast_mode_state 回報工作階段的快速模式狀態。當有因素阻止快速模式時,fast_mode_disabled_reason 會指名阻止它的檢查;該欄位需要 Claude Code v2.1.219 或更新版本。關於原因代碼及其含義,請參閱結果訊息上的 fast_mode_disabled_reason。
terminal_slash_commands 指名 slash_commands 中介面綁定於本機終端機的項目,例如 exit。您可以像傳送 slash_commands 中的任何其他項目一樣傳送它們;此欄位的存在是為了讓遠端或行動用戶端能將它們從命令選單中隱藏。此欄位僅在非空時存在,需要 Agent SDK v0.3.229 或更新版本。
- 每個
mcp_servers項目上的source:伺服器定義的來源,其值與McpServerStatus的source相同。需要 Agent SDK v0.3.274 或更新版本。 effort:Claude Code 在工作階段下一個請求上傳送的 effort 等級,若不傳送則為null。Claude Code 只會在傳送給 Remote Control 用戶端的 init 訊息上設定此欄位,並會從您應用程式讀取的 init 訊息中省略它。需要 Agent SDK v0.3.234 或更新版本。
capabilities 陣列指名此 CLI 實作的協定行為,讓您可以進行功能偵測,而不是比較 claude_code_version 字串。這是一個開放集合:請忽略您不認識的值,並檢查您所依賴之行為對應的特定功能。此欄位需要 Claude Code v2.1.205 或更新版本,在較早的 CLI 上不存在。
plugin_errors 陣列列出外掛載入失敗。項目描述的可能是未載入且不在 plugins 中的外掛,或是載入時缺少其中某部分(例如其 hooks 檔案)的外掛。沒有任何失敗時,會省略此鍵。SDKSystemMessage 在 Agent SDK v0.3.283 或更新版本中宣告 plugin_errors。
當您 plugins 選項中的目錄或封存檔本身無法載入時,項目的 plugin 欄位會保存位置標籤(例如 inline[0]),而不是外掛名稱。例如,當路徑不存在或 manifest 無效時,就會發生這種情況。請透過其 path 欄位將此類項目與您的選項對應。
下表列出每個 plugin_errors 項目的欄位。
SDKPartialAssistantMessage
串流部分訊息(僅在 includePartialMessages 為 true 時)。
parent_tool_use_id 欄位一律為 null:串流事件僅針對主工作階段發出。若要歸屬 subagent,請使用完整訊息(其帶有 agent_id 和 parent_tool_use_id),或啟用 forwardSubagentText 以完整訊息形式接收 subagent 的文字和思考內容。
user_message_uuid 所述條件時,於回合中第一個非 ping 的串流事件上設定 user_message_uuid 和 user_message_uuids,並在回合所回答的訊息改變時再次設定。當該回合是接續因重新啟動而中斷的回合時,帶有這些欄位的串流事件也會帶有 resume_reason。
SDKCompactBoundaryMessage
表示對話壓縮邊界的訊息。
SDKInformationalMessage
由迴圈發出的通用文字橫幅。攜帶 Claude Code 提出的警告、通知和其他非錯誤狀態行,以及 hook 回饋,例如 UserPromptSubmit hook 的封鎖原因。
在 Claude Code v2.1.227 或更新版本上,hook 的 systemMessage 可能以此訊息到達,每一行都會加上 hook 名稱作為前綴,例如 PostToolUse:Bash says:。hooks 頁面上每個事件的章節會說明輸出如何呈現。
請以給定的 level 將 content 呈現為純文字。
SDKWorkerShuttingDownMessage
在工作程序正常關閉時發出,讓遠端用戶端可以顯示工作程序結束的原因,而不必等待心跳逾時。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回呼且採用預設的permissionPrompts: 'host':權限提示會交給您的回呼,此事件回報 Claude Code 不呼叫回呼而自行決定的拒絕。 - 兩者皆無:單純的
-p執行,或未設定canUseTool也未設定permissionPromptToolName的query(),會拒絕任何本應提示的工具呼叫,除非PermissionRequesthook 允許它;此事件會回報這些拒絕以及 Claude Code 自行決定的拒絕。在 v2.1.223 之前,Claude Code 在沒有回呼的執行中不會發出此事件。 - 使用 MCP 提示工具(透過
permissionPromptToolName或--permission-prompt-tool旗標設定)且採用預設的permissionPrompts: 'host':Claude Code 完全不會發出此事件,即使是它自行決定的規則拒絕也不會。 - 使用
permissionPrompts: 'none':即使同時設定了canUseTool或 MCP 提示工具,Claude Code 仍會拒絕原本會提示的呼叫,此事件會回報這些拒絕以及 Claude Code 自行決定的拒絕。需要 Claude Code v2.1.259 或更新版本。
PreToolUse hook 路徑上決定的拒絕,無論是 hook 本身拒絕了呼叫,還是拒絕規則覆寫了 hook 的允許或詢問決定。此事件也是盡力而為:Claude Code 偶爾會記錄拒絕而不發出此事件,因此結果訊息上的 permission_denials 才是權威記錄。
SDKPermissionDenial
關於被拒絕之工具使用的資訊。
SDKContextUsage
/context 報告的結構化形式,以 context_usage 攜帶在傳遞 /context 結果的 SDKAssistantMessage 上。Agent SDK v0.3.232 及更新版本會匯出此類型。與 SDKControlGetContextUsageResponse 不同,它只攜帶呈現使用情況明細所需的資料,不含 color 和 gridRows 等顯示欄位。Claude Code 使用不會出現在訊息串流中的 token 計數 API 請求來計算報告;請參閱這些請求的處理方式。
model 到 over_limit 的欄位描述整個工作階段,集合欄位則將 token 歸屬到個別項目。
over_limit.kind 記錄 Claude Code 如何判定視窗,而不是 API 是否接受下一個請求:
hard_limit:視窗是 Claude Code 認定的模型本身上限,超過後 API 會拒絕請求compaction_window:視窗是壓縮原則所用的視窗,可能與模型的上限一致,也可能不一致
SDKContextUsageCategory
/context 依類別之使用情況明細中的一列。
每個
kind 值說明該列的 token 是什麼:
used:佔用上下文視窗的內容free:剩餘的視窗buffer:壓縮保留空間deferred:Claude Code 保留在視窗之外、不計入使用情況計算的工具 schema,僅列出供您參考
SDKUsageReport
/usage 報告的結構化形式,以 usage_report 的形式帶在傳遞 /usage 結果的 SDKAssistantMessage 上。Agent SDK v0.3.273 及更新版本會匯出此類型。此類型為實驗性:其形狀可能會變更。
session 和 rate_limits:
session:Claude Code 持續累計的成本與用量總計,讀取自與SDKResultMessage上的total_cost_usd和modelUsage相同的帳本。每個model_usage項目都是一個ModelUsage。rate_limits:limits中的方案用量列,以及extra_usage中的用量點數支出。當 Claude Code 無法取得方案用量時(例如工作階段的 OAuth token 缺少user:profile範圍),此欄位為null。
session.total_cost_usd,因此它是估算值,而非您方案的計費金額。伺服器回報的用量點數支出是另外的 extra_usage 區塊。關於準確度的注意事項,請參閱追蹤成本與用量。
limits 依伺服器傳送的原樣包含伺服器的用量列:適用哪些計量、其範圍、標籤、嚴重程度和順序都由伺服器決定,因此請依原樣呈現各列。
- 空陣列表示伺服器未回報任何計量。
null表示 Claude Code 沒有可回報的列。
limits 的每一列描述一個用量計量:
在 Agent SDK v0.3.277 之前,此類型將
severity 和 is_active 宣告為選用且可為 null,列可能在不帶這兩個欄位的情況下抵達。
extra_usage 是伺服器回報之該計費期間的用量點數支出與上限,當方案有用量點數時存在。金額以 currency 的最小單位表示,美元為美分。
- 當此帳戶沒有自己的支出上限時,
monthly_limit為null。在 Team 和 Enterprise 方案上,請勿將null呈現為無限制。 - 當用量點數無法支付請求時,
is_enabled為false。
SDKMessageOrigin
使用者角色訊息的來源。它在 SDKUserMessage 上以 origin 出現,並會轉送到對應的 SDKResultMessage,讓您可以得知是什麼觸發了某個回合。
任務通知子類型
當 Claude Code 將任務通知傳遞到工作階段時,若 Anthropic 伺服器已驗證該通知的來源,它會在通知的origin 上設定 subkind。當您的應用程式自行將訊息宣告為排程執行時,它也會設定 subkind,這需要 TypeScript Agent SDK v0.3.280 或更新版本。subkind 需要 Claude Code v2.1.213 或更新版本,其值為下列兩者之一:
scheduled-trigger:通知是 routine 儲存的提示詞,因 routine 的某個觸發器觸發而傳遞:其排程、其 API 觸發器、其 GitHub 觸發器,或立即執行。您的應用程式宣告為排程執行的提示詞也攜帶此值。Claude Code 會向模型將這些表述為工作階段被指派的任務,所附的通知與其他任務通知所附的通知不同。peer-send-message:通知是您的另一個工作階段使用伺服器端send_message工具傳送的訊息,此工具是雲端工作階段彼此傳訊所用,而非跨工作階段SendMessage工具,且 Anthropic 伺服器已驗證兩個工作階段屬於同一個私人工作階段群組。需要 Claude Code v2.1.224 或更新版本。未經伺服器以此方式驗證的send_message傳遞不會有 subkind。
subkind。這包括傳遞到工作階段的 PR 活動,以及已完成任務之類的背景事件。來自跨工作階段 SendMessage 工具的訊息根本不是任務通知:無論它們來自同一台機器上的工作階段,還是透過 Anthropic 伺服器來自另一台機器,Claude Code 都會給予它們 kind: "peer" 和對等來源欄位。
fireReason 以簡短的小寫 token 說明 scheduled-trigger 通知觸發的原因,例如 scheduled、manual、retry、catch_up 或 api。Anthropic 伺服器會在 routine 的傳遞上設定它,您的應用程式則在宣告排程執行時設定它。當兩者都未傳送時,此欄位不存在。需要 TypeScript Agent SDK v0.3.280 或更新版本。
一個背景任務可以在同一個 task_id 下執行多次,例如當 Claude 繼續執行 subagent 時。每次執行都有其自己的 run_id。當某次執行的通知以使用者訊息的形式送達您的工作階段時,該訊息 task-notification origin 上的 runId 會保有相同的值。通知可能在任務的下一次執行開始後才送達,但它仍帶有較早那次執行的 ID。若要判斷某個回合屬於哪次執行,請比較 runId,而非 task_id。需要 TypeScript Agent SDK v0.3.292 或更新版本。
宣告排程執行
如果您的應用程式依自己的排程執行提示詞,請宣告每次執行,讓 Claude Code 向模型將該回合表述為排程任務,而不是來自使用者的即時輸入。請在env 中將 CLAUDE_CODE_HOST_SCHEDULED_RUN 設定為 1 來啟動工作階段,然後以 origin: { kind: "task-notification", subkind: "scheduled-trigger", fireReason: "scheduled" } 且不帶 isSynthetic 傳送該次執行的 SDKUserMessage。在未設定該變數而啟動的程序中,Claude Code 會忽略此宣告。在環境中帶有 CLAUDECODE 或 CLAUDE_CODE_CHILD_SESSION 的程序中,也會忽略它。只有當值為 1 到 32 個小寫字母或底線時,Claude Code 才會保留 fireReason。需要 TypeScript Agent SDK v0.3.280 或更新版本。
對等來源欄位
peer 來源識別是哪個 agent 傳送了訊息:使用 SendMessage 傳送到 main 的程序內隊員,或跨工作階段對等端,也就是您的另一個 Claude Code 工作階段。跨工作階段對等端在 macOS 和 Linux 上需要 Claude Code v2.1.224 或更新版本;關於原生 Windows 的需求,請參閱跨工作階段傳訊可用性。跨工作階段對等端可以在同一台機器上執行,也可以在您的另一台機器上或雲端中執行,此時其訊息透過 Remote Control 到達。這兩種傳送者填入欄位的方式不同:
from:隊員的名稱,或跨工作階段對等端的傳送者位址。對於單向跨機器訊息,傳送者沒有回覆位址,from為"unknown"。此值由傳送者撰寫;verifiedPeerPid才是經驗證的身分。fromMode:傳送端工作階段的權限類別,bypass或prompting,由在您的工作階段之間轉送對等訊息的主機宣告,例如桌面應用程式。Claude Code 會在接收端工作階段套用傳入控制時讀取它。需要 Agent SDK v0.3.234 或更新版本。senderTaskId:隊員的任務 ID。對於跨工作階段對等端不存在。name:傳送者的顯示名稱,經 Claude Code 正規化:它會移除 Unicode 控制、格式、代理(surrogate)以及行或段落分隔符號的碼位,然後修剪結果,並將其限制在 64 個碼位內,超出時加上省略號。需要 Claude Code v2.1.205 或更新版本。body:已移除 peer 信封的解碼訊息本文,與模型所見內容逐位元組一致。單一隊員訊息時存在,多則訊息合併時不存在;對於跨工作階段對等端,僅在回合恰好是一個由 Claude Code 形成的 peer 信封時存在。請直接呈現name和body,而非重新剖析訊息文字。在 v2.1.299 之前,合併的訊息會保留第一則訊息的body。需要 Claude Code v2.1.205 或更新版本。fromSession:傳送者可由主機開啟的工作階段 ID,由傳送者的主機設定,讓您的 UI 可以連結回傳送端工作階段。與from一樣,它是傳送者自行宣稱的:僅將其用作導覽目標,不要將其視為傳送者身分的證明。需要 Claude Code v2.1.216 或更新版本。verifiedPeerPid:連線到此工作階段之跨工作階段傳訊 socket 的程序的程序 ID,由核心驗證,並從連線本身讀取,絕不從 payload 讀取。請使用它而非from來識別傳送者:同一使用者的任何程序都能偽造from。當 Claude Code 無法驗證時,此欄位不存在,例如在 Windows 上或非 socket 的傳入途徑,因此值不存在即表示傳送者未經驗證。對於轉送的流量,它識別的是轉送者而非訊息的作者,且程序 ID 可能被重複使用,因此請將其視為來源資訊,而不是驗證 token。需要 Claude Code v2.1.216 或更新版本。
Hook 類型
有關使用 hook 的綜合指南,包括示例和常見模式,見 Hooks 指南。HookEvent
可用的 hook 事件。
HookCallback
Hook 回調函數類型。
HookCallbackMatcher
帶有可選匹配器的 Hook 配置。
HookInput
所有 hook 輸入類型的聯合類型。
BaseHookInput
所有 hook 輸入類型擴展的基本介面。
prompt_id 欄位是一個 UUID,用於識別目前正在處理的使用者提示。它與 OpenTelemetry 事件上的 prompt.id 屬性相符,在第一個使用者輸入之前不存在。需要 Claude Code v2.1.196 或更新版本。
PreToolUseHookInput
mcp_server 會出現;見 McpServerProvenance。PostToolUse、PostToolUseFailure、PermissionRequest 和 PermissionDenied 輸入攜帶相同的欄位。此欄位需要 Agent SDK v0.3.274 或更新版本。
PostToolUseHookInput
PostToolUseFailureHookInput
PostToolBatchHookInput
在批次中的每個工具呼叫都已解決後、下一個模型請求之前觸發一次。tool_response 攜帶序列化的 tool_result 內容,模型會看到;其形狀與 PostToolUseHookInput 的結構化 Output 物件不同。
PermissionDeniedHookInput
NotificationHookInput
UserPromptSubmitHookInput
UserPromptExpansionHookInput
SessionStartHookInput
SessionEndHookInput
StopHookInput
StopFailureHookInput
SubagentStartHookInput
SubagentStopHookInput
PreCompactHookInput
PostCompactHookInput
PreModelSwitchHookInput
在請求的模型切換生效之前觸發。context_tokens 和其後的欄位估計重新傳送對話到新模型的成本。如需完整的欄位說明和阻止語義,見 PreModelSwitch。
PostModelSwitchHookInput
在工作階段的模型變更後觸發。它攜帶與 PreModelSwitchHookInput 相同的欄位,加上兩個額外的 source 值。見 PostModelSwitch。
PermissionRequestHookInput
SetupHookInput
TeammateIdleHookInput
TaskCreatedHookInput
TaskCompletedHookInput
ElicitationHookInput
ElicitationResultHookInput
ConfigChangeHookInput
InstructionsLoadedHookInput
DirectoryAddedHookInput
directory 是被新增目錄的絕對路徑。source 是 "slash_command"(當 /add-dir 新增時)或 "register_repo_root"(當 SDK 控制請求執行時)。
WorktreeCreateHookInput
WorktreeRemoveHookInput
CwdChangedHookInput
FileChangedHookInput
MessageDisplayHookInput
HookJSONOutput
Hook 返回值。
AsyncHookJSONOutput
SyncHookJSONOutput
工具輸入類型
內建 Claude Code 工具的輸入 schema 文件。這些類型從@anthropic-ai/claude-agent-sdk/sdk-tools 匯出,可用於類型安全的工具互動。
ToolInputSchemas
從 @anthropic-ai/claude-agent-sdk/sdk-tools 匯出的工具輸入類型的聯合;成員包括:
Agent
工具名稱:Agent。先前的名稱 Task 仍被接受為別名,SDKSystemMessage 初始化訊息中的 tools 陣列目前為了向後相容性將此工具列為 Task。
mode 欄位在 Claude Code v2.1.212 或更新版本上已棄用且被忽略。subagent 在父工作階段的權限模式或其定義的 permissionMode 中執行,subagent 繼承規則 決定使用哪一個。AskUserQuestion
工具名稱:AskUserQuestion
Bash
工具名稱:Bash
Monitor
工具名稱:Monitor
command 執行指令碼並每行 stdout 發出一個事件,ws 開啟 WebSocket 並每個文字框架發出一個事件。恰好提供 command 或 ws 其中之一。ws 來源需要 Claude Code v2.1.195 或更新版本。
timeout_ms 是監視的截止時間(毫秒)。預設為 300000,接受最多 3600000 的值。有效截止時間最多為 1800000,即 30 分鐘,因此較大的接受值會縮短至該值。在截止時間時監視結束,Claude 收到一個通知,以便在仍需要時啟動新監視。
匯出的類型將 timeout_ms 標記為必需,因為 schema 會填入預設值;省略它的呼叫會驗證通過。
當 Monitor 執行命令時,它遵循與 Bash 相同的權限規則;WebSocket 監視會單獨提示核准。詳見Monitor 工具參考以了解行為和提供者可用性。
TaskOutput
在 Claude Code v2.1.277 中移除,連同其TaskOutputInput 類型一起移除。先前用於擷取執行中或已完成的背景任務的輸出;Claude 改用 Read 讀取背景任務的輸出檔案。
disallowedTools 項目或仍命名 TaskOutput 的拒絕規則會被忽略而不發出警告。
Edit
工具名稱:Edit
Read
工具名稱:Read
- 使用
pages指定 PDF 頁面範圍(例如"1-5")。 allow_large讓 Claude 在工作階段的上下文視窗仍有空間時,讀取超過一般大小限制的文字檔案。需要 Agent SDK v0.3.296 或更新版本,該版本內含 Claude Code v2.1.296。
tool_result 內容中接收檔案的內容。傳回 pdf 輸出的讀取會帶有摘要 text 區塊,後面跟著 document 區塊。傳回 parts 輸出的讀取會帶有摘要 text 區塊,後面跟著每個擷取頁面的一個區塊:image 區塊,或當 Claude Code 無法將其呈現為影像時命名頁面的 text 區塊。在 Agent SDK v0.3.242 之前,Claude Code 在工具結果後將檔案的內容作為單獨的 user 訊息傳遞。
Write
工具名稱:Write
Glob
工具名稱:Glob
Grep
工具名稱:Grep
TaskStop
工具名稱:TaskStop
task_id 也接受 agent team 隊友,或依 agent ID 或名稱指定的具名背景 agent。
NotebookEdit
工具名稱:NotebookEdit
WebFetch
工具名稱:WebFetch
offset 是從頁面開頭略過的字元數。Claude 會設定它以繼續閱讀較長的頁面。此欄位需要 Agent SDK v0.3.290 或更新版本。
WebSearch
工具名稱:WebSearch
Workflow
工具名稱:Workflow
Workflow 工具在 Agent SDK v0.3.149 及更新版本中可用。至少需要 script、name 或 scriptPath 其中之一。
TodoWrite
工具名稱:TodoWrite
下列工具預設僅在 Claude Opus 4.7、Claude Sonnet 4.6、Claude Haiku 4.5 及更早的模型上可用。在所有其他模型上(包括 Claude Code 無法識別的模型 ID),除非您選擇加入,否則這些工具無法使用:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
CLAUDE_CODE_ENABLE_TASKS=0 時改為提供 TodoWrite。此預設集合適用於 Claude Code v2.1.268 及更新版本,TypeScript Agent SDK 從 v0.3.268 開始包含此版本。詳見模型可用性以選擇加入。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 工作階段內,它必須位於工作階段儲存庫的 .claude/worktrees/ 下。name 和 path 互斥。
ExitWorktree
工具名稱:ExitWorktree
keep 動作將 worktree 和分支保留在磁碟上,而 remove 刪除兩者。當移除具有未提交檔案或未合併提交的 worktree 時,discard_changes 必須為 true。
EnterPlanMode
工具名稱:EnterPlanMode
CronCreate
工具名稱:CronCreate
recurring 設定為 false 以在下一個符合時單次觸發。工作預設為工作階段範圍,使用 --resume 或 --continue 繼續時會還原尚未過期的工作。詳見排程任務。
將 durable 設定為 true 以請求持久化至 .claude/scheduled_tasks.json,使工作在重新啟動後存活。並非每個工作階段都提供持久排程:當不提供時,Claude Code 接受 durable: true 但建立工作為僅工作階段。讀取輸出的 durable 欄位以查看工作是否已持久化。
CronDelete
工具名稱:CronDelete
CronCreate 傳回的 ID 刪除排程的 cron 工作。
CronList
工具名稱:CronList
.claude/scheduled_tasks.json 的持久工作和來自目前工作階段的僅工作階段工作。
ScheduleWakeup
工具名稱:ScheduleWakeup
/loop 命令。執行時間將 delaySeconds 限制在 60 到 3600 秒之間。除非 stop 為 true,否則 delaySeconds、reason、prompt 和 noop 欄位為必需。noop: true 報告沒有任何變更的喚醒。設定 stop: true 會取消待處理的喚醒並結束自步調 /loop。stop 欄位需要 Claude Code v2.1.202 或更新版本。詳見工具參考中的 ScheduleWakeup 列。
RemoteTrigger
工具名稱:RemoteTrigger
/schedule 命令。trigger_id 對於 get、update、run 和 list_runs 動作為必需。body 對於 create、update 和 create_webhook_trigger 為必需,對於 run 為選擇性。
create_webhook_trigger 將事件來源附加到現有 routine,例如觸發它的 GitHub 事件。body 命名來源、事件和要觸發的 routine。需要 Claude Code v2.1.225 或更新版本。
list_runs 列出 routine 的最近執行,get_run_log 讀取一個執行的日誌。session_id 命名要讀取的執行(來自 list_runs 結果),cursor 分頁任一動作的結果。兩個動作都需要 Claude Code v2.1.227 或更新版本。
此工具僅在工作階段使用已啟用 Routines 方案的 claude.ai 帳戶進行驗證時可用,當您的組織政策停用雲端工作階段時不存在。在 Claude Code v2.1.227 或更新版本上,當擁有者為組織關閉 routines時,工具也不存在。在 v2.1.227 之前,僅關閉 routines 切換的工作階段仍顯示工具,伺服器拒絕其呼叫。
PushNotification
工具名稱:PushNotification
message 保持在 200 個字元以下,因為行動作業系統會截斷較長的文字。詳見工具參考中的 PushNotification 列以了解提供者可用性;推播傳遞通過 Anthropic 託管的基礎設施進行,該基礎設施無法從 Amazon Bedrock、AWS 上的 Claude Platform、Google Cloud 的 Agent Platform 或 Microsoft Foundry 存取。
REPL
在 v2.1.275 中移除。直到 v2.1.274,實驗性REPL 工具可以通過在env 選項中設定 CLAUDE_CODE_REPL=1 來開啟。
ReportFindings
工具名稱:ReportFindings
level 為選擇性欄位,保存 Claude 為此審查回報的 effort 等級。Claude Code 不會將其與審查實際執行時的等級進行比較,因此兩者可能不同。
每個發現包含這些欄位:
file:發現所在的儲存庫相對路徑。選擇性line是它錨定到的 1 索引行。summary:缺陷的單句陳述。failure_scenario描述導致錯誤輸出或當機的具體輸入和狀態。short_summary:選擇性壓縮標籤,最多 60 個字元用於緊湊顯示。需要 Claude Code v2.1.212 或更新版本。category:選擇性短 kebab-case 發現類型的 slug,例如correctness或test-coverage。需要 Claude Code v2.1.199 或更新版本。verdict:在驗證通過執行時設定;在僅內嵌審查上不存在。outcome:僅在應用修復後重新報告時設定。
Artifact
工具名稱:Artifact
.html 或 .md 檔案發佈為託管 artifact 頁面,或列出使用者的已發佈 artifact。省略 action 或傳遞 "publish" 以發佈 file_path,這對於發佈動作為必需。以下每個欄位適用於發佈:
icon:artifact 瀏覽器標籤圖示的一個短通用詞,例如chart或map。Claude 在首次發佈時包含它,在更新時省略它,這保留 artifact 的儲存圖示。favicon:已棄用,Claude 省略它。title:在瀏覽器標籤和圖庫中命名已發佈頁面,當 HTML 檔案沒有<title>標籤時。url:目標是現有 artifact 以就地更新,而不是建立新的。
force 是最後手段覆蓋,丟棄另一個工作階段發佈的較新版本。在衝突時,失敗的發佈傳回較新的內容;Claude 將其變更合併到該內容上,或重新讀取 artifact,並再次發佈。僅當使用者明確要求丟棄該版本時傳遞 force。
傳遞 "list" 以列舉使用者的已發佈 artifact;僅 limit 和 scope 可能伴隨它。scope 預設為 "mine",列出使用者擁有的 artifact;"shared" 列出其他人與使用者共享的 artifact,"all" 列出兩者。
limit 設定列表傳回的 artifact 數量上限,範圍為 1 到 200。limit 大於 50 需要 Agent SDK v0.3.292 或更新版本。未指定 limit 時,列表最多傳回 25 個。
capabilities:已發佈頁面使用的執行時功能,以功能名稱為鍵,例如頁面可能呼叫的連接器。artifact 服務會驗證宣告,並拒絕指定了帳戶無法使用的功能或為某功能提供無效設定的發佈。傳遞{}以清除儲存的宣告,在重新部署時省略欄位以保留它。需要 Agent SDK v0.3.235 或更新版本。contract:已發佈頁面執行的執行時版本。省略它以保留 artifact 的目前版本,傳遞"latest"以升級,或傳遞特定版本以釘選或回滾。需要 Agent SDK v0.3.235 或更新版本。
Projects
工具名稱:Projects
method 分派:
project_info:傳回專案中繼資料和文件清單。project_read:按path讀取一個文件。project_search:使用query查詢專案的知識庫。n限制點擊數並預設為5。project_write:在path建立或替換文件,恰好來自content(帶有內嵌文字)或local_path(命名工作目錄內的檔案)其中之一。present_to_user: true將寫入的文件標記為使用者需要查看的可交付成果。project_delete:按path刪除文件。
ReadMcpResourceDir
工具名稱:ReadMcpResourceDirTool
resources 清單,error 欄位報告目錄列表未啟用。
RefreshMcpTools
工具名稱:RefreshMcpTools
env 選項中設定 CLAUDE_CODE_ENABLE_REFRESH_MCP_TOOLS=1 時註冊工具,且僅在至少有一個 MCP 伺服器的工作階段中。需要 Claude Code v2.1.211 或更新版本。
ShowOnboardingRolePicker
工具名稱:ShowOnboardingRolePicker
McpInput
工具名稱:mcp__<server>__<tool> 形式的動態 MCP 工具名稱
工具輸出類型
內建 Claude Code 工具的輸出 schema 文件。這些類型從@anthropic-ai/claude-agent-sdk/sdk-tools 匯出,代表每個工具傳回的實際回應資料。
ToolOutputSchemas
從 @anthropic-ai/claude-agent-sdk/sdk-tools 匯出的工具輸出類型聯合;成員包括:
Agent
工具名稱:Agent。先前的名稱 Task 仍被接受為別名,且 SDKSystemMessage 初始化訊息中的 tools 陣列目前仍將此工具列為 Task 以保持向後相容性。
status 欄位進行區分:"completed" 表示已完成的工作,"async_launched" 表示背景任務,"remote_launched" 表示 Claude Code 分派到雲端工作階段的工作,其中 sessionUrl 連結到該工作階段,taskId 識別它。
在 completed 變體上,resolvedModel 命名 subagent 啟動時使用的模型,當套用 availableModels 或其他覆寫時,可能與請求的 model 輸入不同。此欄位需要 Claude Code v2.1.174 或更新版本。在 async_launched 上,它命名工作移至背景時使用的模型。
modelsUsed 列出 subagent 使用的模型,按順序排列。此欄位僅在發生中途交換時出現,當執行交換回該模型時,模型會再次出現。在 async_launched 上,列表涵蓋背景化前使用的模型。modelsUsed 和 resolvedModel 的背景化行為都需要 Claude Code v2.1.212 或更新版本。
如果 Claude Code 保留了 subagent 的隔離 worktree,completed 結果上的 worktreePath 是找到它的位置。worktreeBranch 是其分支,當 Claude Code 使用 git 建立 worktree 時出現。
Claude Code 從 subagent 的最終 API 請求填充 usage 和 totalTokens,而不是從整個執行,所以 usage.service_tier 是 API 在該請求上報告的服務層級字串。當存在時,usage.output_tokens_details.thinking_tokens 是該請求的輸出 token 中作為思考 token 的數量。output_tokens_details 欄位需要 TypeScript SDK v0.3.228 或更新版本,該版本包含 Claude Code v2.1.228。fallback_credit 欄位需要 TypeScript SDK v0.3.285 或更新版本,該版本包含 Claude Code v2.1.285。
usage.output_tokens_details 在意義上與 Usage.output_tokens_details 相符,範圍限於該最終請求,但其每個層級都是選擇性的。保護物件和欄位,例如 usage.output_tokens_details?.thinking_tokens ?? 0,而不是直接讀取它。
在 v2.1.207 之前,發佈的類型更窄。它省略了 worktreePath、worktreeBranch、citations、toolStats.frameCount 和 inference_geo、speed 和 iterations 使用欄位,並將 service_tier 類型化為 "standard" | "priority" | "batch"。類型標記為選擇性的欄位可能在較早版本記錄的結果中不存在。
AskUserQuestion
工具名稱:AskUserQuestion
response 會被設定;當存在時,Claude 會收到「使用者回應:…」而不是每個問題的答案清單。
Bash
工具名稱:Bash
stdout、stderr 和 backgroundTaskId 欄位攜帶:
timedOutAfterMs 是逾時(以毫秒為單位),當命令達到其逾時並移至背景而不是明確從那裡開始時設定。backgroundCwdHint 在背景化命令包含目錄變更內建函式(例如 cd、pushd、popd 或 chdir)時設定,並注意工作階段工作目錄未變更。兩個欄位都需要 Claude Code v2.1.210 或更新版本。
當在前景執行的 subagent 擁有背景化命令時,該命令在該 subagent 的執行結束時結束。Claude Code 在此類命令上將 backgroundEndsWithFinalResponse 設定為 true,並在命令存活該回合時省略欄位,如主對話或背景 subagent 啟動的命令一樣。此欄位需要 Claude Code v2.1.227 或更新版本。
Claude Code 將 gitOperation.commit.branch 設定為 git 提交摘要行中命名的分支,並對在分離 HEAD 上進行的提交省略它。此欄位需要 Agent SDK v0.3.227 或更新版本。Claude Code 將 gh pr reopen 命令報告為 reopened PR 動作,需要 Agent SDK v0.3.234 或更新版本。
Monitor
工具名稱:Monitor
TaskStop 以提前取消監視。
Edit
工具名稱:Edit
Read
工具名稱:Read
type 欄位進行區分。
Write
工具名稱:Write
originalFile 和 structuredPatch 持有的內容取決於寫入:
- 對於新建立的檔案,
originalFile為 null,structuredPatch為空 - 在覆寫檔案時,
originalFile攜帶先前的內容,除非該內容大於約 10 MB:Claude Code 會跳過差異並傳回originalFilenull 和structuredPatch空 - 當寫入未變更任何內容或差異逾時時,
structuredPatch也為空
Glob
工具名稱:Glob
totalMatches 和 countIsComplete 需要 Claude Code v2.1.191 或更新版本。totalMatches 報告截斷前的符合檔案數。當 countIsComplete 為 false 時,totalMatches 是下限,因為基礎搜尋截斷了自己的輸出。
Grep
工具名稱:Grep
mode 而異:檔案清單、包含符合的內容或符合計數。在 count 模式中,numFiles 和 numMatches 是完整結果集上的總計,不是分頁切片。在 v2.1.208 之前,截斷列出項目的 head_limit 或 offset 也會截斷這些總計。
totalFiles 需要 Claude Code v2.1.208 或更新版本,並在 files_with_matches 模式中報告 head_limit 和 offset 分頁前的結果總數。totalLines 需要 Claude Code v2.1.210 或更新版本,並在 content 模式中報告分頁前的行總數。
TaskStop
工具名稱:TaskStop
NotebookEdit
工具名稱:NotebookEdit
WebFetch
工具名稱:WebFetch
artifactRead 是 Claude Code 自己的 artifact 讀取記錄,僅當 Claude 提取工作階段可以發佈的 artifact 時出現。Claude Code 在工作階段恢復時讀取它回來,以便稍後發佈基於正確版本;您的程式碼不需要對其採取行動。slug 命名 artifact,ver 是讀取記錄的版本,當它未記錄任何內容時不存在,seeded: false 標記其完整來源未到達 Claude 的讀取。seeded 欄位需要 Agent SDK v0.3.239 或更新版本。
WebSearch
工具名稱:WebSearch
Workflow
工具名稱:Workflow
error:語法檢查失敗的指令碼傳回 status: "async_launched" 並設定 error,且永遠不會執行。
TodoWrite
工具名稱:TodoWrite
下列工具預設僅在 Claude Opus 4.7、Claude Sonnet 4.6、Claude Haiku 4.5 及更早的模型上可用。在所有其他模型上(包括 Claude Code 無法識別的模型 ID),除非您選擇加入,否則這些工具無法使用:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
CLAUDE_CODE_ENABLE_TASKS=0 時改為提供 TodoWrite。此預設集合適用於 Claude Code v2.1.268 及更新版本,TypeScript Agent SDK 從 v0.3.268 開始包含此版本。請參閱模型可用性以選擇加入。TaskCreate
工具名稱:TaskCreate
TaskUpdate
工具名稱:TaskUpdate
TaskGet
工具名稱:TaskGet
null。
TaskList
工具名稱:TaskList
ExitPlanMode
工具名稱:ExitPlanMode
ListMcpResources
工具名稱:ListMcpResourcesTool
ReadMcpResource
工具名稱:ReadMcpResourceTool
EnterWorktree
工具名稱:EnterWorktree
ExitWorktree
工具名稱:ExitWorktree
EnterPlanMode
工具名稱:EnterPlanMode
CronCreate
工具名稱:CronCreate
CronDelete
工具名稱:CronDelete
CronList
工具名稱:CronList
.claude/scheduled_tasks.json 的持久化工作和來自目前工作階段的僅限工作階段工作。僅限工作階段的工作攜帶 durable: false;從磁碟讀取的工作省略欄位。
ScheduleWakeup
工具名稱:ScheduleWakeup
stopped 欄位在呼叫以 stop: true 結束迴圈時為 true。它需要 Claude Code v2.1.202 或更新版本。cancelledWakeups 欄位計算 stop: true 呼叫取消了多少個待處理喚醒。值 0 表示沒有待處理,重複 /loop cron 不會被 stop: true 取消。它需要 Claude Code v2.1.206 或更新版本。
RemoteTrigger
工具名稱:RemoteTrigger
PushNotification
工具名稱:PushNotification
ReportFindings
工具名稱:ReportFindings
level 值以及為結果本體回顯的發現。需要 Claude Code v2.1.196 或更新版本。回顯的 short_summary 欄位需要 Claude Code v2.1.212 或更新版本。
Artifact
工具名稱:Artifact
url 和為發佈動作發佈的本機 path,當發佈重新部署現有 artifact 時 updated 設定為 true,warnings 攜帶任何發佈時間建議。清單動作改為傳回 artifacts 列,當存在超過請求限制的 artifact 時 truncated 設定。在其範圍不是 "mine" 的清單上,每列攜帶 rel 標記使用者是否擁有 artifact 或與他們共享,輸出的 scope 記錄哪個非預設範圍產生清單;兩者在預設清單上不存在。
清單結果也會報告 total,即符合所列範圍的 artifact 數量,包括超出 limit 的項目。當設定 total_at_least 時,該數字為下限,可能還有更多 artifact 存在。兩個欄位都需要 Agent SDK v0.3.292 或更新版本。
Projects
工具名稱:Projects
method 欄位進行區分,鏡像輸入。project_read 在 content 中內聯傳回小文字文件,並改為將較大文件寫入 local_file 路徑;project_search 當專案的索引可用時傳回 RAG hits 並設定 rag: true,否則回退到 docs 路徑清單。
ReadMcpResourceDir
工具名稱:ReadMcpResourceDirTool
"inode/directory" 出現;error 在伺服器無法列出目錄時攜帶人類可讀的訊息。
RefreshMcpTools
工具名稱:RefreshMcpTools
refreshed 表示已套用重新查詢的工具清單,error 表示重新查詢失敗且保留了先前的工具集,not_connected 表示伺服器沒有即時連線可查詢。
ShowOnboardingRolePicker
工具名稱:ShowOnboardingRolePicker
role,當他們關閉選擇器時為 dismissed: true。空物件表示使用者批准了呼叫而未選擇角色。
McpOutput
工具名稱: 形式為mcp__<server>__<tool> 的動態 MCP 工具名稱
structuredContent 或資源連結的結果,請參閱 tool_use_result,它在其 content 成員中持有此值。在執行時值也可能是 undefined,儘管匯出的類型不對此進行建模。
權限類型
PermissionUpdate
用於更新權限的操作。
PermissionBehavior
PermissionUpdateDestination
PermissionRuleValue
其他類型
ApiKeySource
工作階段請求的 API 金鑰來源,在 SDKSystemMessage 初始化訊息上報告為 apiKeySource。
Agent SDK v0.3.234 及更新版本在類型中列出這四個值。該類型也保留
user、project、org、temporary 和 oauth,以便舊程式碼仍能編譯,而 Claude Code 不報告它們。
SdkBeta
可透過 betas 選項啟用的可用測試版功能。如需詳細資訊,請參閱 Beta headers。
SlashCommand
有關可用命令的資訊。
builtin 在命令是 Claude Code 自身且輸入 /name 會執行它的列上為 true。對於由使用者、專案、外掛或 MCP 伺服器定義的命令,以及被其中之一按名稱取代的內建捆綁命令,此欄位不存在。需要 Agent SDK v0.3.277 或更新版本。
ModelInfo
有關可用模型的資訊。
AgentInfo
有關可透過 Agent 工具叫用的可用 subagent 的資訊。
McpServerProvenance
提供 mcp__* 工具的 MCP 伺服器,以及該伺服器定義的來源。PreToolUse、PostToolUse、PostToolUseFailure、PermissionRequest 和 PermissionDenied hook 輸入將其作為 mcp_server 攜帶,CanUseTool 選項將其作為 mcpServer 攜帶。對於不來自 MCP 伺服器的工具,兩者都省略它。
source 採用以下值之一。該集合是開放的,因此將您不認識的值視為已設定的來源,絕不視為 sdk:
sdk:您的應用程式註冊的進程內伺服器。只有 SDK 主機應用程式可以註冊此類伺服器,因此已設定的伺服器絕不報告sdk,無論其名稱如何。plugin:外掛 提供的伺服器。其name是 外掛提供的 MCP 伺服器 下所述的範圍化plugin:<plugin-name>:<server-name>形式。- 設定範圍:
user、project、local、dynamic、managed、enterprise、claudeai或agent。.mcp.json伺服器報告project,MCP 安裝範圍 定義local、project和user。您的應用程式在mcpServers選項 中傳遞的伺服器(除了進程內 SDK 伺服器外)報告dynamic。
source 而非 name 或 mcp__<server>__ 工具名稱前綴做出信任決定。對於除 sdk 以外的任何來源,name 是不受信任的文字:在顯示前逸出它。
McpServerProvenance 和攜帶它的欄位需要 Agent SDK v0.3.274 或更新版本。
McpServerStatus
已連線 MCP 伺服器的狀態。
source 說明伺服器定義的來源,具有與 McpServerProvenance 的 source 相同的值和信任規則。該欄位需要 Agent SDK v0.3.274 或更新版本,在較早版本上不存在。
_meta 在 tools 項目上攜帶該工具的 _meta 的 MCP Apps 成員,因此您的應用程式可以找到 ui:// 資源以使用 readMcpResource() 呈現。Claude Code 傳遞 ui 物件和已棄用的平面 ui/resourceUri 字串,並扣留所有其他鍵,不予傳遞。在 ui 內,resourceUri 是 ui:// 字串,visibility 是當伺服器設定時 "model" 和 "app" 的陣列,任何其他成員原封不動地傳遞。Claude Code 在值格式不正確時捨棄任一鍵,並從未宣告任一鍵的工具中省略 _meta。該欄位僅在初始化訊息的 capabilities 包含 mcp_tool_ui_meta_v1 時存在,並需要 TypeScript Agent SDK v0.3.280 或更新版本。
McpServerStatusConfig
由 mcpServerStatus() 報告的 MCP 伺服器的設定。這是所有 MCP 伺服器傳輸類型的聯合。
McpServerConfig。
AccountInfo
已驗證使用者的帳戶資訊。
ModelUsage
結果訊息中傳回的每個模型使用統計資訊。costUSD 值是用戶端估計。如需計費注意事項,請參閱 追蹤成本和使用。
thinkingTokens 計算此模型產生的思考 token。outputTokens 已包含它們,因此不要將兩者相加。在某個回合於會記錄它的 Claude Code 版本上執行之前,該欄位不存在,因此在較早版本上開始的已恢復工作階段會報告部分計數。thinkingTokens 需要 Agent SDK v0.3.257 或更新版本。
canonicalModel 和 provider 欄位需要 Claude Code v2.1.218 或更新版本。canonicalModel 是定價查詢使用的規範模型 ID;它可能與作為項目鍵的原始模型字串不同,例如當該字串是提供者特定 ID 或別名時。
provider 命名提供模型的 API 後端,例如 firstParty、bedrock、vertex、foundry、anthropicAws、mantle 或 gateway。
costBasis 命名為模型最新請求定價的價格表:list 表示清單價格,managed 表示 modelPricing 表,或 unknown 表示模型 ID 都不符合時。該欄位需要 Claude Code v2.1.246 或更新版本。
ConfigScope
NonNullableUsage
Usage 的版本,除了 fallback_credit(仍可為 null)之外,所有可為空的欄位都變為不可為空。
Usage
token 使用統計資訊。這是來自 @anthropic-ai/sdk 的 BetaUsage 類型。
BetaServerToolUsage、BetaIterationsUsage、BetaOutputTokensDetails 和 BetaFallbackCreditUsage 在 @anthropic-ai/sdk 中定義。
output_tokens_details 按類別分解計費輸出。它目前攜帶一個欄位 thinking_tokens: number,計算模型作為內部推理產生的輸出 token,包括思考區塊分隔符。output_tokens_details 欄位需要 TypeScript SDK v0.3.228 或更新版本,該版本捆綁 Claude Code v2.1.228。
- 計費:讀取分解以進行可觀測性,而非計費。
output_tokens保持為權威總計,output_tokens - thinking_tokens近似非推理輸出。 - 計數涵蓋的內容:模型產生的原始推理,可能比回應正文中傳回的思考文字更長。API 透過重新 token 化該原始文字來計算它,因此它可能與模型的確切生成計數相差幾個 token。
- 串流:在串流助手訊息上,此分解(如
output_tokens)是message_start預留位置,不攜帶實際計數,因此從結果訊息的usage讀取它,如 從結果訊息讀取輸出 token 所述。在結果訊息上,當模型或提供者不報告分解時,thinking_tokens讀取0。 null情況:output_tokens_details本身在 Claude Code 合成的助手訊息上為null,例如 API 錯誤訊息。
Usage 是否攜帶 fallback_credit 取決於您安裝的 @anthropic-ai/sdk,該套件於 0.115.0 中新增此欄位。
CallToolResult
MCP 工具結果類型(來自 @modelcontextprotocol/sdk/types.js)。structuredContent 是可與 content 一起傳回的 JSON 物件,包括影像區塊。請參閱 傳回結構化資料。
SDKMcpResourceLink
MCP 工具透過參考傳回的一個檔案。Claude Code 從工具結果中的 resource_link 區塊建立每個項目,並將清單作為 SDKUserMessage.tool_use_result 上的 resourceLinks 傳遞,或在呼叫在背景完成時作為 SDKTaskNotificationMessage 上的 resource_links 傳遞。需要 Agent SDK v0.3.257 或更新版本。
uri 或 name 不是字串的區塊,並省略其值不是列出類型的可選欄位。
ThinkingConfig
控制 Claude 的思考/推理行為。優先於已棄用的 maxThinkingTokens。
display 欄位控制思考文字是否以 "summarized" 或 "omitted" 傳回。在 Claude Opus 4.7 及更新版本上,API 預設為 "omitted",因此設定 "summarized" 以在 thinking 區塊中接收思考內容。Claude Code 不會將您的 display 值傳遞給某些提供者,例如 Amazon Bedrock 和 Google Cloud 的 Agent Platform。在這些提供者上,Opus 4.7 及更新版本即使在您將 display 設定為 "summarized" 時也會傳回空 thinking 區塊。
SpawnedProcess
自訂程序生成的介面(與 spawnClaudeCodeProcess 選項搭配使用)。ChildProcess 已滿足此介面。
SpawnOptions
傳遞至自訂生成函式的選項。
signal 欄位告訴您的生成函式何時拆除程序。將其作為 signal 選項傳遞至 Node 的 spawn(),或將其傳遞至您的 VM 或容器拆除處理程式。此信號不會在 Options.abortController 中止時立即觸發。SDK 首先關閉程序的 stdin 並等待約兩秒,以便 CLI 可以乾淨地關閉,然後中止此信號。若要在呼叫者中止時立即做出反應,請在您自己的 Options.abortController.signal 上監聽,您的生成函式可以從其封閉範圍參考。McpSetServersResult
setMcpServers() 操作的結果。
setMcpServers() 時,Claude Code 應用這些規則:
- 呼叫未命名的伺服器:在雲端工作階段之外,Claude Code 會中斷先前
setMcpServers()呼叫所新增的伺服器以及進程內 SDK 伺服器的連線,並在removed中列出它們。其他伺服器會持續執行,且不會列在removed中,其中包括來自mcpServers選項的 stdio、HTTP 和 SSE 伺服器、來自設定檔的伺服器,以及外掛提供的伺服器。 - 呼叫命名的伺服器:對於先前
setMcpServers()呼叫所新增的 stdio、HTTP 或 SSE 伺服器,Claude Code 只在其設定與您傳遞的設定不同時才替換它。已以該名稱註冊的進程內 SDK 伺服器會保持不變,因此若要替換它,請在一次呼叫中將其省略,並在下一次呼叫中新增它。 - CLI 在啟動時啟動的內建伺服器:如果呼叫命名一個,Claude Code 會捨棄該項目並在
errors中報告它。
added 列出 Claude Code 新增或替換的伺服器,無論它們是否連線。未能連線的伺服器同時出現在 added 和 errors 中,失敗文字在 errors 下,failed 列在 mcpServerStatus() 中。在 Claude Code v2.1.257 之前,連線嘗試拋出的伺服器僅在 errors 下報告。
RewindFilesResult
rewindFiles() 操作的結果。
skippedLinks 計算倒帶為確保連結安全而拒絕恢復或刪除的追蹤路徑:追蹤路徑上的符號連結、硬連結或其他非常規檔案,不再解析為檢查點建立時指向的位置的父目錄,或無法安全讀取的備份。該欄位需要 Claude Code v2.1.216 或更新版本。使用 rewindFiles(userMessageId, { dryRun: true }) 的預覽呼叫永遠不會設定它。
SDKStatusMessage
狀態更新訊息(例如壓縮)。
SDKTaskNotificationMessage
背景工作完成、失敗或停止時的通知。背景工作包括 run_in_background Bash 命令、Monitor 監視和背景 subagent。如需 run_id 和 ambient 欄位,請參閱 SDKTaskStartedMessage,它定義了這些欄位及其版本要求。
reason 會在工作因其自身完成、失敗或停止以外的原因結束時設定,需要 Agent SDK v0.3.273 或更新版本。Claude Code 僅在透過 claude.ai 連線的工作階段中設定它:雲端工作階段(包括在自我託管執行器上的工作階段)以及 Remote Control 工作階段。本機 query() 呼叫永遠不會設定它。其唯一的值 worker_restart 表示正在執行該工作的 Claude Code 程序已重新啟動。該通知帶有狀態 "stopped",因此請將該工作視為既未完成也未失敗。
當 Claude Code 將長 MCP 工具呼叫移至背景 時,該呼叫的 tool_result 區塊僅保留預留位置,呼叫的實際結果在此通知中到達。使用 tool_use_id 將通知與呼叫進行比對。在 completed 通知上,resource_links 以 SDKMcpResourceLink 項目列出工具透過參考傳回的檔案,具有與 tool_use_result.resourceLinks 相同的 50 連結和 64 KiB 限制。Claude Code 在結果沒有連結時省略 resource_links,在不是 MCP 工具呼叫的工作通知上也會省略。resource_links 需要 Agent SDK v0.3.257 或更新版本。
Claude Code 在傳送給模型的每個工作通知前面加上通知,除了帶有 scheduled-trigger 子類型 戳記的傳遞外,它們改為攜帶指派工作框架。通知指出沒有發生人類輸入,因此模型不會將通知視為使用者指令或核准。
若要偵測工作通知回合,請在 SDKUserMessage 或 SDKResultMessage 上檢查 origin.kind === "task-notification",而不是在通知文字上進行比對。如果您需要知道引發它的內容,請從同一欄位讀取 subkind。在 v2.1.205 之前,Claude Code 在工作階段閒置時到達的通知上省略通知。
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
在工具執行時定期發出,以指示進度。
tool_progress 訊息,帶有 heartbeat: true。每個心跳攜帶工具名稱和經過的秒數,因此您可以區分長執行呼叫和停滯工作階段。Claude Code 不為 subagent 內的工具呼叫發出心跳。heartbeat 欄位需要 Agent SDK v0.3.214 或更新版本。在 v2.1.257 之前,Claude Code 也不為前景 Agent 工具呼叫發出心跳。
在除心跳外的 Agent 工具的 tool_progress 訊息上,subagent_type 命名執行中的 subagent 類型,例如 general-purpose。subagent_retry 在該 subagent 等待 API 錯誤退避(例如速率限制或過載)時存在,每次重試嘗試一個訊息。兩個欄位都需要 Agent SDK v0.3.214 或更新版本。
若要從 subagent_retry 呈現重試指示器:
- 按
parent_tool_use_id追蹤指示器,它對每個 subagent 是唯一的。tool_use_id由來自一個助手回合的平行 subagent 共享,因此按它追蹤會讓一個 subagent 的更新清除另一個的指示器。 - 當同一
parent_tool_use_id的稍後tool_progress到達且既不帶subagent_retry也不帶heartbeat: true時,或當工具的結果訊息到達時,清除指示器。帶heartbeat: true的框架僅報告活躍性,因此在此類框架到達時保持指示器。attempt可能在持續重試下超過max_retries,因此不要從計數器衍生清除。 - 將
error_category視為選擇您自己訊息文字的 token,而非顯示文字。值為rate_limit、overloaded、authentication_failed、server_error、cloud_credential_error和unknown。處理您不認識的值的方式與處理unknown的方式相同,因為稍後的版本可以新增值。
SDKAuthStatusMessage
在身分驗證流程期間發出。
SDKTaskStartedMessage
在工作開始時發出。task_type 欄位對 Bash 命令和 Monitor 監視為 "local_bash",對 subagent 為 "local_agent",或 "remote_agent"。
run_id 識別工作的一次執行。當工作以相同的 task_id 再次執行時,例如 Claude 恢復的 subagent,新的執行會取得新的 run_id。該欄位需要 Agent SDK v0.3.292 或更新版本。使用它來區分同一工作的各次執行:
- 將訊息與執行進行比對:同一次執行的
task_started、task_progress、task_updated和task_notification訊息攜帶相同的run_id。每個SDKBackgroundTasksChangedMessage中該執行的項目也攜帶它,傳遞該執行通知的使用者訊息之 origin 上的runId也是如此。 - 偵測延遲到達的訊息:以純字串比較時,同一工作的執行 ID 會依各次執行開始的順序排序,因此
run_id排在您正在顯示的執行之前的訊息來自較早的執行。除了該比較之外,請將此值視為不透明值。 - 退回使用
task_id:當訊息未攜帶run_id時,例如已恢復的工作階段為關閉先前程序所啟動的工作而發出的task_notification,請依task_id歸屬該訊息。
task_started 訊息共用同一個 task_id,而結束第一次執行的通知攜帶第一次執行的 ID:
ambient 對不屬於工作階段工作的工作為 true,例如 Claude Code 為其自身運作而執行的工作。即時更新監視器也是環境工作,包括使用者要求的監視器。從活動指示器中排除環境工作。該欄位需要 Agent SDK v0.3.247 或更新版本。
ambient 也出現在 SDKTaskNotificationMessage 和 SDKBackgroundTasksChangedMessage 項目上。
is_backgrounded 和 spawn_depth 描述 Claude Code 如何啟動工作。兩個欄位都需要 Agent SDK v0.3.238 或更新版本。
is_backgrounded:Claude Code 在"local_agent"和"local_bash"工作上設定它。true表示工作在背景執行。false表示工作在前景執行,啟動它的工具呼叫保持阻止,直到工作完成或移至背景。spawn_depth:Claude Code 僅在"local_agent"工作上設定它。主執行緒生成的 subagent 的深度為1。深度1subagent 生成的 subagent 的深度為2,以此類推。
is_backgrounded: true,因為 Claude Code 在背景執行每個已恢復的 subagent。當前景工作稍後移至背景時,Claude Code 在 task_updated 訊息中報告新的 is_backgrounded 值,而不是傳送第二個 task_started。
parent_task_id 保存啟動此工作的 subagent 的 task_id。使用它將每個工作歸類到啟動它的 subagent 之下。Claude Code 在 subagent、Bash 和 Monitor 工作上設定它。該欄位需要 Agent SDK v0.3.292 或更新版本。在下列情況下,該欄位不存在:
- 主執行緒啟動了該工作
- Claude Code 不再追蹤父工作
- 隊員或工作流程內的 agent 啟動了該工作
SDKTaskProgressMessage
在 subagent 或背景工作執行時定期發出。如需 run_id 欄位,請參閱 SDKTaskStartedMessage,它定義了該欄位及其版本要求。
對於 subagent 工作,summary 欄位攜帶模型產生的進度摘要,僅在啟用 agentProgressSummaries 時填入。對於 背景化的 MCP 工具呼叫,summary 攜帶 MCP 伺服器最新報告的進度,不依賴該選項。
SDKTaskUpdatedMessage
在背景工作的狀態變更時發出,例如當它從 running 轉換為 completed 時。將 patch 合併到以 task_id 為鍵的本機工作對應表中。end_time 欄位是 Unix 紀元時間戳記(以毫秒為單位),可與 Date.now() 比較。如需 run_id 欄位,請參閱 SDKTaskStartedMessage,它定義了該欄位及其版本要求。
SDKBackgroundTasksChangedMessage
每當即時背景工作集變更時發出:工作啟動、完成或被終止;前景 agent 被背景化;或工作的 description、ambient 或 parent_task_id 欄位變更。如需每個項目上的 run_id 和 parent_task_id 欄位,請參閱 SDKTaskStartedMessage,它定義了這些欄位及其版本要求。
tasks 陣列是完整的即時集。用每個 payload 替換任何快取集,而不是配對 task_started 和 task_notification 事件,如此下一個成員資格變更會更正您遺漏的任何事件。
當工作結束時,其 task_updated 和 task_notification 會在將其從清單中移除的 background_tasks_changed 之前到達。除此之外,相對於每個工作事件的順序未指定。
啟動時不發出任何內容。每當工作階段的 CLI 程序啟動或重新啟動時重設為空集,並讓下一個成員資格變更重新填入它。
當您向執行中的工作階段傳送重複的 initialize 控制請求時,例如在傳輸中斷後使用 reinitialize(),Claude Code 在回應後接著傳送目前即時集的快照,即使它是空的。因此重新連線的主機可以了解執行中的內容,而無需等待下一個成員資格變更。在 Agent SDK v0.3.239 之前,Claude Code 在重複 initialize 後沒有傳送快照。
需要 Claude Code v2.1.203 或更新版本。
subagent_type 在 task_type 為 "local_agent" 的項目上命名 subagent 類型,例如 general-purpose 或自訂 subagent 的名稱。該欄位需要 Agent SDK v0.3.293 或更新版本。
SDKThinkingTokensMessage
在 Claude 產生思考區塊時發出,包括經過編輯的區塊。estimated_tokens 是目前區塊中迄今為止產生的思考 token 的累計估計,estimated_tokens_delta 是此框架攜帶的增量。使用這些估計進行進度顯示。
當模型或提供者報告分解時,頂層 agent 迴圈的最終計數是結果訊息的 usage.output_tokens_details.thinking_tokens,不包括 subagent token。
需要 Claude Code v2.1.153 或更新版本。
SDKSessionStateChangedMessage
當 Claude Code 報告工作階段的狀態時發出。若要接收這些訊息,請設定 CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1。Claude Code 可能多次報告相同的狀態,因此請將訊息視為工作階段的目前狀態,而非狀態轉換。
state 欄位攜帶下列值之一:
running:工作階段正在運作。idle:Claude Code 正在等待您的下一個提示詞。requires_action:工作階段因等待其傳送給您主機的請求之回答而受阻,例如權限提示。
idle 訊息與其 result 訊息可能以任一順序到達。若要變更 idle 是否等待背景工作(例如背景 subagent 或 工作流程 執行),請參閱 CLAUDE_CODE_BG_TASKS_REPORT_RUNNING。
SDKFilesPersistedEvent
在檔案檢查點持久化至磁碟時發出。
SDKRateLimitEvent
當工作階段遇到速率限制時發出。
errorCode 為 "credits_required" 時,拒絕來自其內含用量已耗盡的 claude.ai 訂閱,工作階段在使用者購買用量點數之前無法繼續。canUserPurchaseCredits 指示已驗證的使用者是否可以為帳戶購買點數,hasChargeableSavedPaymentMethod 指示是否已儲存付款方式。在不是需要點數之拒絕的速率限制事件上,這三個欄位都不存在。需要 Claude Code v2.1.181 或更新版本。
SDKLocalCommandOutputMessage
Claude Code 不發出此訊息類型。當您傳送命令(例如 /context 或 /usage)作為提示詞時,其輸出作為 SDKAssistantMessage 到達。
SDKCommandsChangedMessage
當可用命令集在工作階段中途變更時發出,例如當 Claude Code 在 agent 進入子目錄時發現 skill。commands 陣列是完整的更新清單,因此用此 payload 替換任何快取命令清單。在此訊息後呼叫 supportedCommands() 會傳回相同的更新清單,因為該方法追蹤最新推送;這需要 Agent SDK v0.3.216 或更新版本。在較早的 SDK 版本中,supportedCommands() 傳回在初始化時擷取的快照,永遠不會反映工作階段中途的變更。
Claude Code 也在 MCP 伺服器的 prompts 加入或離開清單時發出此訊息,例如當伺服器在工作階段啟動後完成連線時。這需要 Claude Code v2.1.281 或更新版本。
SDKPromptSuggestionMessage
在啟用 promptSuggestions 且 Claude Code 為該回合產生建議時,於回合後發出。包含預測的下一個使用者提示詞。對於未取得任何建議的回合,請參閱 Claude Code 何時跳過建議。
SDKConversationResetMessage
在工作階段的對話被替換而不結束工作階段時發出。在 query() 呼叫中,只有 /clear 及其別名產生此訊息。在 new_conversation_id 下掛載空逐字稿,並捨棄任何快取的工作階段標題。
trigger:什麼捨棄了對話。在每個conversation_reset訊息上重設您的逐字稿,包括此欄位不存在或攜帶您不認識的值的訊息。user_message_uuid:攜帶/clear的使用者訊息的uuid。使用它將重設與該訊息進行比對。timestamp:重設發生的時間,作為 UTC 中的 ISO 8601 字串。使用它進行顯示,而非排序訊息。
trigger、user_message_uuid 和 timestamp 欄位需要 Claude Code v2.1.281 或更新版本。
SDK 的已發佈類型在 Claude Code v2.1.203 及更新版本中宣告 SDKConversationResetMessage。在 v2.1.203 之前,SDKMessage 參考該類型而不宣告它,因此當 skipLibCheck 被停用時,在 type === "conversation_reset" 上縮小範圍無法通過類型檢查。
AbortError
中止操作的自訂錯誤類別。
AbortError 是 SDK 類型化 API 中唯一的錯誤類別。其他失敗,例如 Claude Code 程序退出或無法啟動,會以沒有 SDK 類別可比對的錯誤拒絕訊息反覆運算。疑難排解 按訊息列出這些錯誤,並提供每個錯誤的原因和修正方式。
Sandbox 設定
SandboxSettings
Sandbox 行為的設定。使用此設定以程式設計方式啟用命令 sandboxing 並設定網路限制。
Sandbox 取決於平台支援,在 Linux 上,需要
bubblewrap 和 socat 等工具。當 enabled 為 true 且 sandbox 無法啟動時,query() 會報告一個 result 訊息,其中 subtype: "error_during_execution" 且原因在 errors 中。對於單一訊息 query() 呼叫,SDK 會在產生該錯誤結果後拋出,因此請將迴圈包裝在 try 區塊中以繼續執行。請參閱處理結果以了解錯誤合約。若要改為以未 sandboxed 的方式執行,請設定 failIfUnavailable: false。使用範例
SandboxNetworkConfig
Sandbox 模式的網路特定設定。當父 SandboxSettings 中的 enabled 為 true 時,這些設定適用於 sandboxed Bash 命令。它們不會限制 WebFetch 工具,該工具改為使用權限規則。
內建的 sandbox proxy 根據請求的主機名稱強制執行
allowedDomains,不會終止或檢查 TLS 流量,因此網域前置等技術可能會繞過它。請參閱 Sandbox 安全限制以了解詳細資訊,以及安全部署以設定 TLS 終止 proxy。SandboxFilesystemConfig
Sandbox 模式的檔案系統特定設定。
未 Sandboxed 命令的權限回退
當allowUnsandboxedCommands 啟用時,模型可以透過在工具輸入中設定 dangerouslyDisableSandbox: true 來要求在 sandbox 外執行命令。這些請求會回退到現有的權限系統,這表示您的 canUseTool 處理程式會被呼叫,允許您實現自訂授權邏輯。
您的 excludedCommands 項目改為自動繞過 sandbox,無需模型參與;sandbox.excludedCommands 涵蓋何時適用項目。
在下面的範例中,isCommandAuthorized 代表您定義的授權檢查。
另請參閱
- SDK 概觀 - 一般 SDK 概念
- Python SDK 參考 - Python SDK 文件
- CLI 參考 - 命令列介面
- 常見工作流程 - 逐步指南