Skip to main content

安裝

在虛擬環境中安裝套件。在最近的 Debian、Ubuntu 和 Homebrew Python 安裝上,針對系統 Python 執行 pip install 會失敗,並出現 error: externally-managed-environment 錯誤。
如需 uv、Windows PowerShell 和 API 金鑰設定,請參閱 Agent SDK 快速入門中的設定。

在 query() 和 ClaudeSDKClient 之間選擇

Python SDK 提供了兩種與 Claude Code 互動的方式: 針對互動式應用程式(例如聊天介面)或當下一個動作取決於 Claude 的回應時,使用 ClaudeSDKClient。

函數

此頁面上的簽名區塊和裸露的 async for / async with 片段僅供說明之用。若要執行它們,請將主體包裝在 async def main(): ... 中並呼叫 asyncio.run(main())。

query()

為每次與 Claude Code 的互動建立新 session。返回一個非同步迭代器,在消息到達時產生消息。每次呼叫 query() 都會重新開始,不記得先前的互動,除非您傳遞 continue_conversation=True 或在 ClaudeAgentOptions 中傳遞 resume。請參閱 Sessions。

參數

返回

返回 AsyncIterator[Message],從對話中產生消息。

範例 - 使用選項

tool()

用於定義具有類型安全的 MCP tools 的裝飾器。

參數

輸入架構選項

  1. 簡單類型對應(推薦):
  2. JSON Schema 格式(用於複雜驗證):
  3. TypedDict 類別:一種具類型的 schema,其中 NotRequired 鍵不會列入 required。
    • Python 3.11 及更新版本:從 typing 匯入 TypedDict 和 NotRequired。
    • Python 3.10:typing 沒有 NotRequired。請從 typing_extensions 匯入 TypedDict 和 NotRequired,SDK 會在 Python 3.10 上安裝此套件。
在簡單對應和 TypedDict 形式中,將類型包裝在 Annotated[type, "description"] 中即可設定該欄位的描述。

返回

一個裝飾器函數,包裝 tool 實現並返回 SdkMcpTool 實例。

範例

ToolAnnotations

tool 的行為提示,作為 tool() 的 annotations 引數傳遞。ToolAnnotations 擴展 MCP SDK 的 mcp.types.ToolAnnotations,具有 maxResultSizeChars 欄位,您可以用 camelCase 或 snake_case 寫入每個提示:ToolAnnotations(readOnlyHint=True) 和 ToolAnnotations(read_only_hint=True) 是等效的。若要從物件讀回提示,請使用您已安裝的 mcp 套件所宣告的拼寫:在 mcp 1.x 上使用 .readOnlyHint,在 2.x 上使用 .read_only_hint,而 .maxResultSizeChars 在兩者上皆可使用。您也可以在 SDK 接受註解的任何地方傳遞純 mcp.types.ToolAnnotations。 snake_case 名稱和類型化的 maxResultSizeChars 欄位需要 Python Agent SDK 0.2.140 或更新版本。版本 0.1.31 到 0.2.139 重新匯出 mcp.types.ToolAnnotations 不變。在版本 0.1.55 到 0.2.139 上,您仍然可以將 maxResultSizeChars 作為關鍵字引數傳遞:MCP 類別接受額外欄位,SDK 將值轉發給 Claude Code。 所有欄位都是可選的。客戶端不應依賴提示進行安全決策。

create_sdk_mcp_server()

建立在 Python 應用程式內執行的進程內 MCP 伺服器。

參數

返回

返回 McpSdkServerConfig 物件,可以傳遞給 ClaudeAgentOptions.mcp_servers。

範例

list_sessions()

列出過去的 sessions 及其中繼資料。按專案目錄篩選或列出所有專案中的 sessions。同步;立即返回。

參數

返回類型:SDKSessionInfo

範例

列印專案的 10 個最近 sessions。結果按 last_modified 降序排序,因此第一項是最新的。省略 directory 以搜尋所有專案。

get_session_messages()

從過去的 session 中檢索消息。同步;立即返回。

參數

返回類型:SessionMessage

範例

get_session_info()

按 ID 讀取單個 session 的中繼資料,無需掃描完整專案目錄。同步;立即返回。

參數

返回 SDKSessionInfo,如果找不到 session,則返回 None。

範例

查詢單個 session 的中繼資料,無需掃描專案目錄。當您已經從先前的執行中獲得 session ID 時很有用。

rename_session()

通過附加自訂標題項來重新命名 session。重複呼叫是安全的;最新的標題獲勝。同步。

參數

如果 session_id 不是有效的 UUID 或 title 為空,則引發 ValueError;如果找不到 session,則引發 FileNotFoundError。

範例

重新命名最近的 session,以便稍後更容易找到。新標題在後續讀取時出現在 SDKSessionInfo.custom_title 中。

tag_session()

標記 session。傳遞 None 以清除標籤。重複呼叫是安全的;最新的標籤獲勝。同步。

參數

如果 session_id 不是有效的 UUID 或 tag 在清理後為空,則引發 ValueError;如果找不到 session,則引發 FileNotFoundError。

範例

標記 session,然後在稍後的讀取中按該標籤篩選。傳遞 None 以清除現有標籤。

fork_session()

將工作階段的逐字稿複製到新的工作階段中,讓您可以將對話導向另一個方向,同時原始工作階段保持不變。若要從對話中較早的時間點分支,請傳遞 up_to_message_id。同步。

參數

返回一個 ForkSessionResult,其 session_id 為新工作階段的 UUID。將其作為 resume 傳遞以繼續該分叉。分叉不包含原始工作階段的檔案檢查點,因此無法將其倒回到分叉之前擷取的檢查點。 fork_session() 會引發:
  • ValueError:session_id 或 up_to_message_id 不是有效的 UUID
  • ValueError:工作階段沒有任何消息,或 up_to_message_id 與逐字稿中的任何消息都不相符
  • FileNotFoundError:找不到工作階段

範例

以新標題分叉最近的工作階段,然後繼續該分叉。原始工作階段保留其自身的歷史記錄。

類別

ClaudeSDKClient

在多個交換中維持對話 session。 這是 TypeScript SDK 的 query() 函數內部工作方式的 Python 等效物 - 它建立一個可以繼續對話的客戶端物件。請參閱 與 query() 的比較。

方法

上下文管理器支援

客戶端可以用作非同步上下文管理器以進行自動連接管理:
重要: 在迭代訊息時,避免使用 break 提前退出,因為這可能導致 asyncio 清理問題。相反,讓迭代自然完成或使用旗標來追蹤何時找到所需內容。

範例 - 繼續對話

範例 - 使用 ClaudeSDKClient 進行串流輸入

query() 也接受使用者訊息字典的非同步可迭代物件,因此您可以在傳送時組合提示或包含內容區塊,例如影像。Claude Code 會在第一個產生的訊息到達時立即開始回應,無需等待可迭代物件完成,而 receive_response() 會在結束該回應的 ResultMessage 處停止。將 Claude 應該在回答前讀取的所有內容放入一個訊息中,如此產生器所做的,並將每個 query() 呼叫與其自己的 receive_response() 迴圈配對。

範例 - 使用中斷

中斷後的緩衝區行為: interrupt() 發送停止信號但不清除訊息緩衝區。已由中斷任務產生的訊息,包括其 ResultMessage,保留在流中。您必須在讀取新查詢的回應之前使用 receive_response() 清空它們。如果您在 interrupt() 之後立即發送新查詢並僅呼叫一次 receive_response(),您將收到中斷任務的訊息,而不是新查詢的回應。

範例 - 進階權限控制

類型

@dataclass vs TypedDict: 此 SDK 使用兩種類型。以 @dataclass 裝飾的類別(例如 ResultMessage、AgentDefinition、TextBlock)在執行時是物件實例,支援屬性存取:msg.result。以 TypedDict 定義的類別(例如 ThinkingConfigEnabled、McpStdioServerConfig、SyncHookJSONOutput)在執行時是純字典,需要鍵存取:config["budget_tokens"],而不是 config.budget_tokens。ClassName(field=value) 呼叫語法對兩者都有效,但只有資料類別會產生具有屬性的物件。

SdkMcpTool

使用 @tool 裝飾器建立的 SDK MCP 工具定義。

Transport

自訂傳輸實作的抽象基底類別。使用此類別透過自訂通道與 Claude 程序通訊(例如,遠端連線而不是本機子程序)。
這是低階內部 API。介面可能在未來版本中變更。自訂實作必須更新以符合任何介面變更。
匯入:from claude_agent_sdk import Transport

ClaudeAgentOptions

Claude Code 查詢的設定資料類別。

處理緩慢或停滯的 API 回應

CLI 子程序讀取多個環境變數,這些變數控制 API 逾時和停滯偵測。透過 ClaudeAgentOptions.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 並向父 agent 報告停滯。對於背景 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 後面的閘道以保活 ping 保持開啟的回應時,設定 include_partial_messages 的主機會繼續接收 ping StreamEvent 訊息。將這些框架讀取為活躍性,而不是在沉默時讓工作階段逾時。在 v2.1.257 之前,框架在最後一個真實串流事件後 5 分鐘停止。

OutputFormat

結構化輸出驗證的設定。作為 dict 傳遞至 ClaudeAgentOptions 上的 output_format 欄位:

SystemPromptPreset

使用 Claude Code 的預設系統提示詞(含選用新增項目)的設定。

SystemPromptCustom

物件形式的自訂系統提示詞,等同於傳遞字串作為 system_prompt,也可以設定 snapshot。需要 claude-agent-sdk v0.2.153 或更新版本。

SystemPromptFile

用於從檔案載入自訂系統提示詞(而不是以字串傳遞)的設定。SDK 將此對應至 CLI --system-prompt-file 旗標。當提示詞很大時使用檔案形式:SDK 在 CLI 子程序 argv 上傳遞字串 system_prompt,在 SDK 傳送任何 API 請求之前就會受到 OS 命令列長度限制。在 Linux 上,單一引數長於大約 128 KB 會在程序生成時失敗,並出現 Argument list too long。在 Windows 上,整個命令列上限為大約 32 KB,因此字串形式在較低的閾值失敗。

SettingSource

控制 SDK 從哪些基於檔案系統的設定來源載入設定。

預設行為

當 setting_sources 被省略或為 None 且 skills 未設定時,query() 載入與 Claude Code CLI 相同的檔案系統設定:使用者、專案和本機。設定 skills 時,setting_sources 列描述目前的預設值。端點管理的原則在所有情況下都會載入;當工作階段使用組織憑證在合格組態上進行驗證時,會擷取伺服器管理的設定。如需詳細資訊,請參閱settingSources 不控制的內容。

為什麼使用 setting_sources

停用檔案系統設定:
在 Python SDK 0.1.59 及更早版本中,空清單的處理方式與省略選項相同,因此 setting_sources=[] 未停用檔案系統設定。如果您需要空清單生效,請升級到較新版本。TypeScript SDK 不受影響。
僅載入特定設定來源:
僅限 SDK 的應用程式:
若要載入 CLAUDE.md 專案指示,請在 setting_sources 中包含 "project"。請參閱修改系統提示詞以了解 CLAUDE.md 載入如何與系統提示詞選項互動。

設定優先順序

載入多個來源時,設定會依此優先順序合併(從高到低):
  1. 本機設定(.claude/settings.local.json)
  2. 專案設定(.claude/settings.json)
  3. 使用者設定(~/.claude/settings.json)
程式設計選項(例如 agents、allowed_tools 和 settings)會覆寫使用者、專案和本機檔案系統設定。受管原則設定優先於程式設計選項。

AgentDefinition

以程式設計方式定義的 subagent 設定。
AgentDefinition 欄位名稱使用 camelCase,例如 disallowedTools、permissionMode 和 maxTurns。這些名稱直接對應至與 TypeScript SDK 共用的線路格式。這與 ClaudeAgentOptions 不同,後者對等頂層欄位(例如 disallowed_tools 和 permission_mode)使用 Python snake_case。因為 AgentDefinition 是資料類別,傳遞 snake_case 關鍵字會在建構時引發 TypeError。

PermissionMode

用於控制工具執行的權限模式。

EffortLevel

用於指導思考深度的 effort 等級。

CanUseTool

工具權限回呼函式的類型別名。
回呼接收:
  • tool_name:被呼叫工具的名稱
  • input_data:工具的輸入參數
  • context:具有其他資訊的 ToolPermissionContext
傳回 PermissionResult(PermissionResultAllow 或 PermissionResultDeny)。 回呼是互動式權限提示的 SDK 替代品:僅在權限評估流程解決為提示時叫用。由 allowed_tools 項目、設定允許規則或權限模式(例如 acceptEdits 或 bypassPermissions)預先核准的工具呼叫永遠不會叫用它。若要限制每個工具呼叫,請改用 PreToolUse hook。 允許規則不會預先核准任何模式都不自動核准的動作;請參閱權限如何評估以了解其中哪些到達回呼以及在 dontAsk 和 auto 模式中發生的情況。

ToolPermissionContext

傳遞至工具權限回呼的上下文資訊。

PermissionResult

權限回呼結果的聯合類型。

PermissionResultAllow

指示應允許工具呼叫的結果。

PermissionResultDeny

指示應拒絕工具呼叫的結果。

PermissionUpdate

以程式設計方式更新權限的設定。

PermissionRuleValue

要在權限更新中新增、取代或移除的規則。

ToolsPreset

使用 Claude Code 預設工具集的預設工具設定。

ThinkingConfig

控制延伸思考行為。三個設定的聯合:
選用的 display 欄位控制思考文字是否傳回 "summarized" 或 "omitted"。在 Claude Opus 4.7 及更新版本上,API 預設值為 "omitted",因此設定 "summarized" 以在 ThinkingBlock 輸出中接收思考內容。Claude Code 不會將您的 display 值傳遞給部分提供者,例如 Amazon Bedrock 和 Google Cloud 的 Agent Platform。在這些提供者上,即使您將 display 設定為 "summarized",Opus 4.7 及更新版本也會傳回空的 ThinkingBlock 輸出。 因為這些是 TypedDict 類別,它們在執行時是純字典。將它們建構為字典常值或呼叫類別作為建構函式;兩者都會產生 dict。使用 config["budget_tokens"] 存取欄位,而不是 config.budget_tokens:

TaskBudget

API 端任務預算(以 token 為單位),與 ClaudeAgentOptions 中的 task_budget 欄位搭配使用。
因為這是 TypedDict,將其作為純字典傳遞,例如 ClaudeAgentOptions(task_budget={"total": 50000})。

SdkBeta

SDK 測試版功能的常值類型。
與 ClaudeAgentOptions 中的 betas 欄位搭配使用以啟用測試版功能。
在 Claude API 上,context-1m-2025-08-07 測試版已針對 Claude Sonnet 4.5 和 Claude Sonnet 4 停用。如果您仍在使用這兩個模型之一時傳遞它,超過標準 200K token 上下文視窗的請求會傳回錯誤,因此請將其從 betas 中移除。若要以 1M token 上下文視窗執行工作階段,請將 model 設定為預設以 1M 視窗執行的模型,例如 claude-sonnet-5-5 或 claude-opus-5-5。對於僅能透過其 [1m] 變體達到 1M 的模型,請將後綴附加到模型 ID,例如 claude-opus-4-6[1m]。

McpSdkServerConfig

使用 create_sdk_mcp_server() 建立的 SDK MCP 伺服器設定。

McpServerConfig

MCP 伺服器設定的聯合類型。

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpServerStatusConfig

由 get_mcp_status() 報告的 MCP 伺服器設定。這是所有 McpServerConfig 傳輸變體加上用於透過 claude.ai 代理的伺服器的僅輸出 claudeai-proxy 變體的聯合。
McpSdkServerConfigStatus 是 McpSdkServerConfig 的可序列化形式,僅包含 type("sdk")和 name(str)欄位;程序內 instance 被省略。McpClaudeAIProxyServerConfig 具有 type("claudeai-proxy")、url(str)和 id(str)欄位。

McpStatusResponse

來自 ClaudeSDKClient.get_mcp_status() 的回應。在 mcpServers 鍵下包裝伺服器狀態清單。

McpServerStatus

連線 MCP 伺服器的狀態,包含在 McpStatusResponse 中。

ContextUsageResponse

來自 ClaudeSDKClient.get_context_usage() 的回應。這是 Claude Code 為互動式工作階段中的 /context 命令呈現的相同 payload,因此除了 token 計數外,它還帶有顯示欄位,例如 color 和 gridRows,Claude Code 使用這些欄位來繪製 /context 使用量網格。 Claude Code 透過向 token 計數 API 傳送多個請求來建立此 payload。這些請求不會出現在訊息串流中,因此讀取串流的成本追蹤不會看到它們。在 Anthropic API 上,token 計數不計費。
每個 ContextUsageCategory 項目帶有 name、tokens、color 和選用的 isDeferred 旗標。totalTokens 是工作階段目前的上下文使用量,maxTokens 是測量該使用量所依據的視窗。該視窗是模型的上下文視窗,或適用時較低的自動壓縮視窗,rawMaxTokens 帶有與 maxTokens 相同的值。apiUsage 保留最新 API 回應的使用量,而不是工作階段的執行總計。Claude Code 會讓選用的 deferredBuiltinTools、systemTools 和 systemPromptSections 鍵保持未設定,因此即使類型宣告了它們,也應該預期它們不存在。

SdkPluginConfig

在 SDK 中載入外掛的設定。
範例:
如需建立和使用外掛的完整資訊,請參閱外掛。

消息類型

Message

所有可能消息的聯合類型。

UserMessage

使用者輸入消息。
SDK 從 CLI 未修改地傳遞 tool_use_result。對於外部 MCP 伺服器上的 tool,其結果包含 resource_link 區塊,該字典具有 TypeScript SDKMcpResourceLink 類型的鍵的 resourceLinks 鍵,保存字典清單。Claude 將每個連結作為 tool 結果中的一行文字接收。若要呈現伺服器返回的檔案,請讀取 resourceLinks 而不是解析該文字。resourceLinks 鍵需要 Python Agent SDK 0.2.150 或更新版本和 Claude Code v2.1.257 或更新版本;該 SDK 版本隨附的 CLI 滿足 Claude Code 要求。 CLI 在結果沒有連結時和子代理的結果上省略該鍵。CLI 每個結果最多保留 50 個連結,一旦清單達到 64 KiB 的序列化 JSON,就停止新增連結。使用 tool() 在程序中定義的 tool 永遠不會產生該鍵,因為 SDK 在 CLI 看到結果之前將其 resource_link 區塊扁平化為文字。

AssistantMessage

具有內容區塊的助手回應消息。

AssistantMessageError

助手消息的可能錯誤類型。
基礎 CLI 程序可以發出此 Literal 未列出的錯誤類型,例如 max_output_tokens。SDK 未修改地傳遞該值,因此將此清單外的字串視為您對待 unknown 的方式。TypeScript SDKAssistantMessageError 類型列出 CLI 可以發出的完整值集。

SystemMessage

具有中繼資料的系統消息。
沒有專屬 dataclass 的 subtype 會以 SystemMessage 的形式送達。若要在回合之間追蹤工作階段,請設定 CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1,並在每則 subtype 為 session_state_changed 的消息上讀取 message.data["state"]。SDKSessionStateChangedMessage 列出它可能攜帶的狀態。請使用 receive_messages() 進行迭代以讀取這些消息:receive_response() 會在 ResultMessage 處停止,而 session_state_changed 消息可能出現在該結果之後。

ResultMessage

具有成本和使用情況資訊的最終結果消息。
subtype 欄位決定了其他哪些欄位會被填入。它是 "success"、"error_during_execution"、"error_max_turns"、"error_max_budget_usd" 或 "error_max_structured_output_retries" 之一。Python dataclass 將所有變體扁平化為一個形狀,因此不適用於返回的 subtype 的欄位為 None。 多個欄位會帶有診斷詳細資訊,說明對話如何結束:
  • is_error:當對話以錯誤狀態結束時為 True。在 error_* subtypes 上始終為 True。在 subtype="success" 上,當最終模型請求失敗時為 True,表示代理迴圈已完成但最後一個 API 呼叫返回了錯誤。
  • api_error_status:終止 API 錯誤的 HTTP 狀態碼。當轉在沒有錯誤的情況下結束時為 None。僅在 subtype="success" 上填入。
  • result:在 subtype="success" 上為最終助手消息的文字,或在 error_* subtypes 上為 None。當 subtype="success" 且 is_error=True 時,如果可用,此欄位會保存 API 錯誤字串,但可能為空,因此請檢查 api_error_status 和前面的 AssistantMessage 內容以獲取詳細資訊。
  • errors:迴圈級別的錯誤字串,例如最大轉數消息。僅在 error_* subtypes 上填入。
  • terminal_reason:查詢迴圈結束的原因,例如 "completed"、"max_turns"、"api_error"、"aborted_streaming" 或 "aborted_tools"。"aborted_streaming" 或 "aborted_tools" 的值表示轉在完成前被中止。常見原因是 interrupt() 和權限回呼返回 PermissionResultDeny 且 interrupt=True。在早於該欄位的 CLI 版本上為 None,在本地命令(例如 /voice 或 /usage)的結果上為 None,這些命令繞過查詢迴圈,或在 session 致命失敗時發出的合成錯誤結果上為 None。鏡像 TypeScript SDK 的 SDKResultMessage.terminal_reason,其列出完整的值集。
  • origin:觸發此轉的使用者消息的來源。在串流輸入模式中,檢查此項以區分您自己提示的結果(其中 origin 為 None 或 {"kind": "human"})與注入轉(例如背景任務通知)的結果。需要 Python Agent SDK 0.2.137 或更新版本。
當數個背景任務在相近的時間內完成時,Claude Code 可以在一個回合中回應它們的通知,而不是每個通知各用一個回合。您仍會依序為每個通知收到一個 ResultMessage,每個都帶有 kind 為 "task-notification" 的 origin。除最後一個之外,其餘的 num_turns 皆設為 0 且 result 為空,而最後一個則承載回應所有通知的回合。 usage 字典僅涵蓋主代理迴圈,並排除子代理和其他嵌套或輔助模型呼叫。在串流輸入模式中,值是按轉的。優先使用 model_usage 進行令牌和成本計算。usage 字典在出現時包含以下鍵: model_usage 字典將模型名稱對應到每個模型的使用情況。它涵蓋透過查詢管道進行的每個模型呼叫:主迴圈、子代理和內部呼叫(例如壓縮和 Workflow 代理)。該管道外的輔助呼叫(例如權限分類器和令牌計數請求)從 model_usage 中排除。將 model_usage 視為估計值,而不是計費聲明。 在串流輸入模式中,model_usage 和 total_cost_usd 在轉中是累積的,因此讀取最新結果而不是在結果中求和。恢復 session 的呼叫也會計算從 session 的早期呼叫復原的總計。請參閱在串流輸入模式中追蹤成本以了解重設,以及在 session 崩潰後復原總計以了解歸零結果。 model_usage 中的每個值都是 ModelUsage TypedDict,透過 from claude_agent_sdk.types import ModelUsage 匯入。其鍵使用 camelCase,因為 SDK 從基礎 CLI 程序未修改地傳遞該值,符合 TypeScript ModelUsage 類型:

StreamEvent

用於在串流期間進行部分消息更新的串流事件。僅在 ClaudeAgentOptions 中 include_partial_messages=True 時接收。透過 from claude_agent_sdk.types import StreamEvent 匯入。

RateLimitEvent

當速率限制狀態變更時發出(例如,從 "allowed" 到 "allowed_warning")。使用此來在使用者達到硬限制之前警告他們,或在狀態為 "rejected" 時退避。

RateLimitInfo

由 RateLimitEvent 攜帶的速率限制狀態。

ConversationResetMessage

在不結束連線的情況下替換對話時發出,例如在 /clear 之後。請參閱在串流輸入模式中追蹤成本以了解重設如何影響後續 ResultMessage 物件上的執行總計。需要 Python Agent SDK 0.2.137 或更新版本。

TaskStartedMessage

在背景任務啟動時發出。背景任務是在主轉之外追蹤的任何內容:背景 Bash 命令、Monitor 監視、透過 Agent tool 生成的子代理或遠端代理。task_type 欄位告訴您是哪一個。此命名與 Task 到 Agent tool 重新命名無關。

TaskUsage

背景任務的令牌和計時資料。

TaskProgressMessage

定期為執行中的背景任務發出進度更新。

TaskNotificationMessage

在背景任務完成、失敗或停止時發出。背景任務包括 run_in_background Bash 命令、Monitor 監視和背景子代理。
當 CLI 將長 MCP tool 呼叫移至背景時,該呼叫的 tool 結果僅保存佔位符,該呼叫的實際結果在此消息中到達。在此類呼叫的 "completed" 通知上,CLI 新增 resource_links 鍵,列出 tool 透過參考返回的檔案,具有與 UserMessage.tool_use_result 上的 resourceLinks 鍵相同的項目和限制。resource_links 鍵需要 Python Agent SDK 0.2.150 或更新版本和 Claude Code v2.1.257 或更新版本;該 SDK 版本隨附的 CLI 滿足 Claude Code 要求。 dataclass 沒有 resource_links 的欄位。從消息繼承自 SystemMessage 的 data 字典讀取它:message.data.get("resource_links")。使用 tool_use_id 將通知與呼叫相符。當結果沒有連結時和不是 MCP tool 呼叫的任務的通知上,CLI 省略該鍵。

內容區塊類型

ContentBlock

所有內容區塊的聯合類型。

TextBlock

文字內容區塊。

ThinkingBlock

思考內容區塊(用於具有思考能力的模型)。

ToolUseBlock

工具使用請求區塊。

ToolResultBlock

工具執行結果區塊。

錯誤類型

下面的類型定義了您的程式碼捕捉的內容。如需查看與這些類型引發的錯誤訊息相關的項目、原因和修正方法,請參閱疑難排解。

ClaudeSDKError

所有 SDK 錯誤的基礎例外類別。
當單次 query() 以錯誤結果結束時(例如轉數限制錯誤),SDK 會引發 ResultError。

CLINotFoundError

當 Claude Code CLI 未安裝或找不到時引發。

CLIConnectionError

當連接到 Claude Code 失敗時引發。

ProcessError

當 Claude Code 程序失敗時引發。

ResultError

當 Claude Code 程序因執行以錯誤的結果訊息結束(例如轉數限制錯誤或 API 錯誤)而退出時引發。ResultError 是 ProcessError 的子類別,因此現有的 except ProcessError 處理程式也會捕捉它。其屬性包含該結果訊息的欄位,因此您可以根據執行失敗的原因進行分支,而無需解析訊息文字。需要 Python Agent SDK 0.2.140 或更新版本。
若要區分失敗,請在檢查 subtype 之前先檢查 terminal_reason。當最終請求失敗時(例如 API 錯誤),Claude Code 會報告 subtype 為 "success",原因在 terminal_reason 中,例如 "api_error";當您設定的限制結束執行時(例如 max_turns 或 max_budget_usd),它會報告 error_* 子類型。

CLIJSONDecodeError

當 JSON 解析失敗時引發。

Hook 類型

如需使用 hooks 的綜合指南,包括範例和常見模式,見 Hooks 指南。

HookEvent

支援的 hook 事件類型。
TypeScript SDK 支援 Python 中尚未提供的其他 hook 事件。見 hook 可用性表以了解各 SDK 的支援情況。

HookCallback

hook 回呼函數的類型定義。
參數:
  • input:強類型 hook 輸入,具有基於 hook_event_name 的判別聯合(請參閱 HookInput)
  • tool_use_id:可選 tool 使用識別碼(用於 tool 相關 hooks)
  • context:具有其他資訊的 hook 上下文
返回 HookJSONOutput。

HookContext

傳遞給 hook 回呼的上下文資訊。

HookMatcher

用於將 hooks 符合到特定事件或 tools 的配置。

HookInput

所有 hook 輸入類型的聯合類型。實際類型取決於 hook_event_name 欄位。

BaseHookInput

所有 hook 輸入類型中存在的基礎欄位。

PreToolUseHookInput

PreToolUse hook 事件的輸入資料。

PostToolUseHookInput

PostToolUse hook 事件的輸入資料。

PostToolUseFailureHookInput

PostToolUseFailure hook 事件的輸入資料。在 tool 執行失敗時呼叫。

UserPromptSubmitHookInput

UserPromptSubmit hook 事件的輸入資料。

StopHookInput

Stop hook 事件的輸入資料。

SubagentStopHookInput

SubagentStop hook 事件的輸入資料。

PreCompactHookInput

PreCompact hook 事件的輸入資料。

NotificationHookInput

Notification hook 事件的輸入資料。

SubagentStartHookInput

SubagentStart hook 事件的輸入資料。

PermissionRequestHookInput

PermissionRequest hook 事件的輸入資料。允許 hooks 以程式設計方式處理權限決策。

HookJSONOutput

hook 回呼返回值的聯合類型。

SyncHookJSONOutput

具有控制和決策欄位的同步 hook 輸出。
在 Python 程式碼中使用 continue_(帶下劃線)。發送到 CLI 時會自動轉換為 continue。

HookSpecificOutput

事件特定輸出類型的判別聯合。hookEventName 欄位決定哪些欄位有效。如需每個 hook 事件的可用欄位的完整詳情,見 使用 hooks 控制執行。

AsyncHookJSONOutput

延遲 hook 執行的非同步 hook 輸出。
在 Python 程式碼中使用 async_(帶下劃線)。發送到 CLI 時會自動轉換為 async。

Hook 使用範例

此範例註冊兩個 hooks:一個阻止危險的 bash 命令(如 rm -rf /),另一個記錄所有 tool 使用情況以進行審計。安全 hook 僅在 Bash 命令上執行(透過 matcher),而記錄 hook 在所有 tools 上執行。

工具輸入/輸出類型

所有內建 Claude Code 工具的輸入/輸出結構描述文件。雖然 Python SDK 不會將這些匯出為類型,但它們代表訊息中工具輸入和輸出的結構。 每個顯示的輸出是您從該工具的 UserMessage.tool_use_result 讀取的值。鍵名完全按照 Claude Code 發出的方式出現。標註為 | None 且帶有「出現時」或「選擇性」註釋的鍵在不適用時會被省略。

Agent

工具名稱: Agent。先前的名稱 Task 仍被接受為別名,初始化 SystemMessage 中的 tools 列表為了向後相容性將此工具報告為 Task。 輸入:
啟動新 agent 以自主處理複雜的多步驟任務。 輸出(狀態:"completed"):
輸出(狀態:"async_launched"):
輸出(狀態:"remote_launched"):
返回來自 subagent 的結果。輸出根據 status 欄位進行區分:"completed" 用於已完成的任務,"async_launched" 用於背景任務,"remote_launched" 用於 Claude Code 分派到雲端工作階段的任務,其中 sessionUrl 連結到該工作階段,taskId 識別它。如果 Claude Code 保留了 subagent 的隔離 worktree,completed 變體上的 worktreePath 是找到它的位置,worktreeBranch 是當 Claude Code 使用 git 建立 worktree 時的分支。 在 completed 變體上,resolvedModel 命名 subagent 啟動時使用的模型,當套用 availableModels 或其他覆寫時,可能與請求的 model 輸入不同。此欄位需要 Claude Code v2.1.174 或更新版本。在 async_launched 變體上,resolvedModel 命名 agent 移至背景時使用的模型,因此在背景轉換前發生的交換會反映在那裡。兩個變體上的 modelsUsed 欄位依序列出使用的模型,連續重複已摺疊;只有在執行中途交換模型時才會設定。modelsUsed 和背景轉換時的 resolvedModel 行為需要 Claude Code v2.1.212 或更新版本。 Claude Code 從 subagent 的最終 API 請求填充 usage 和 totalTokens,而不是從整個執行。當存在時,usage 中 output_tokens_details 下的 thinking_tokens 是該請求的輸出 token 中屬於思考 token 的數量。output_tokens_details 鍵需要 Python SDK v0.2.136 或更新版本,其中包含 Claude Code v2.1.228。fallback_credit 鍵需要 Python SDK v0.2.162 或更新版本,其中包含 Claude Code v2.1.285。

AskUserQuestion

工具名稱: AskUserQuestion 在執行期間詢問使用者澄清問題。有關使用詳情,請參閱 處理核准和使用者輸入。 輸入:
輸出:

Bash

工具名稱: Bash 如需了解設定前景上限的內容,請參閱 逾時和輸出限制。如需了解背景時間限制,請參閱 背景命令的時間限制。 輸入:
輸出:

Monitor

工具名稱: Monitor 執行背景來源並將每個事件傳遞給 Claude,以便它可以做出反應而無需輪詢:command 執行指令碼並每個 stdout 行發出一個事件,ws 開啟 WebSocket 並每個文字框架發出一個事件。提供 command 或 ws 中的恰好一個。 當 Monitor 執行命令時,它遵循與 Bash 相同的權限規則;WebSocket 監視會單獨提示核准。ws 來源需要 Claude Code v2.1.195 或更新版本。有關行為和提供者可用性,請參閱 Monitor 工具參考。 輸入:
輸出:

Edit

工具名稱: Edit 輸入:
輸出:

Read

工具名稱: Read 輸入:
輸出根據 Claude 讀取的內容採用以下形式之一。檢查 type 鍵以區分它們。 輸出(type: "text"):
輸出(type: "image"):
輸出(type: "notebook"):
輸出(type: "pdf"):
輸出(type: "parts"):
輸出(type: "file_unchanged"):

Write

工具名稱: Write 輸入:
輸出:

Glob

工具名稱: Glob 輸入:
輸出:
totalMatches 和 countIsComplete 需要 Claude Code v2.1.191 或更新版本。

Grep

工具名稱: Grep 輸入:
輸出:
Grep 在每個輸出模式中返回此 dict 形狀。哪些選擇性鍵出現取決於 output_mode。 totalFiles 需要 Claude Code v2.1.208 或更新版本。totalLines 需要 Claude Code v2.1.210 或更新版本。

NotebookEdit

工具名稱: NotebookEdit 輸入:
輸出:

WebFetch

工具名稱: WebFetch 輸入:
輸出:

WebSearch

工具名稱: WebSearch 輸入:
輸出:

TodoWrite

工具名稱: TodoWrite
下列工具預設僅在 Claude Opus 4.7、Claude Sonnet 4.6、Claude Haiku 4.5 及更早的模型上可用。在所有其他模型上(包括 Claude Code 無法識別的模型 ID),除非您選擇加入,否則這些工具無法使用:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
只要工具可用,Claude Code 就會提供四個 Task 工具,或者當您設定 CLAUDE_CODE_ENABLE_TASKS=0 時改為提供 TodoWrite。此預設集合適用於 Claude Code v2.1.268 及更新版本,TypeScript Agent SDK 從 v0.3.268 開始包含此版本。請參閱 模型可用性 以選擇加入。
輸入:
輸出:

TaskCreate

工具名稱: TaskCreate 輸入:
輸出:

TaskUpdate

工具名稱: TaskUpdate 輸入:
輸出:

TaskGet

工具名稱: TaskGet 輸入:
輸出:

TaskList

工具名稱: TaskList 輸入:
輸出:

TaskOutput

在 Claude Code v2.1.277 中移除。先前從執行中或已完成的背景任務擷取輸出,BashOutput 被接受為別名;Claude 改為使用 Read 讀取背景任務的輸出檔案。 disallowed_tools 項目或仍命名任一名稱的拒絕規則被忽略而不發出警告。

TaskStop

工具名稱: TaskStop。先前的名稱 KillShell 和 KillBash 仍被接受為別名。 輸入:
輸出:

ExitPlanMode

工具名稱: ExitPlanMode 輸入:
輸出:

ListMcpResources

工具名稱: ListMcpResourcesTool 輸入:
結果是列表而不是 dict,因此 tool_use_result 為此工具保留 list。 輸出:

ReadMcpResource

工具名稱: ReadMcpResourceTool 輸入:
輸出:

建立持續對話介面

以下範例保持一個 ClaudeSDKClient 在多個回合中保持連線,因此 Claude 會記住之前的訊息。輸入 new 以斷開連線並重新連線以開始新的工作階段,或輸入 exit 以結束對話。

錯誤處理

以下範例將 query() 呼叫包裝在四個 SDK 引發的錯誤類型 的處理程式中。 此範例捕捉 ResultError,需要 Python Agent SDK 0.2.140 或更新版本。

沙箱配置

SandboxSettings

沙箱行為的配置。使用此來啟用命令沙箱並以程式設計方式配置網路限制。
沙箱取決於平台支援,在 Linux 上,需要 bubblewrap 和 socat 等工具。預設情況下,當 enabled 為 True 但沙箱無法啟動時,命令會在沙箱外執行,並在 stderr 上顯示警告。此預設與 TypeScript SDK 不同,其中 failIfUnavailable 預設為 true。在沙箱設定中設定 "failIfUnavailable": True 以改為停止。該鍵尚未在 SandboxSettings 上宣告,但 SDK 會將其轉發給 Claude Code,後者會遵守它。query() 然後報告 ResultMessage,其中 subtype="error_during_execution" 且原因在 errors 中。因為這是單次 query() 呼叫,SDK 會在產生該錯誤結果後引發,所以將迴圈包裝在 try 區塊中以繼續通過它。請參閱處理結果以了解錯誤合約。

範例使用

Unix socket 安全性:allowUnixSockets 選項可以授予對系統服務的存取權限,這些服務可能超出沙箱範圍。例如,允許 /var/run/docker.sock 實際上透過 Docker API 授予完整主機系統存取權限,繞過沙箱隔離。僅允許嚴格必要的 Unix sockets,並了解每個的安全含義。

SandboxNetworkConfig

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

SandboxIgnoreViolations

用於忽略特定沙箱違規的配置。

未沙箱化命令的權限回退

當 allowUnsandboxedCommands 啟用時,模型可以透過在 tool 輸入中設定 dangerouslyDisableSandbox: True 來請求在沙箱外執行命令。這些請求回退到現有權限系統,意味著您的 can_use_tool 處理程序將被呼叫,允許您實現自訂授權邏輯。 您的 excludedCommands 項目改為自動繞過沙箱,無需模型參與;sandbox.excludedCommands 涵蓋何時適用項目。 以下範例記錄每個未沙箱化請求,並除非您自己的授權邏輯允許,否則拒絕它:
使用 dangerouslyDisableSandbox: True 執行的命令具有完整系統存取權限。確保您的 can_use_tool 處理程序仔細驗證這些請求。如果 permission_mode 設定為 bypassPermissions 且 allowUnsandboxedCommands 啟用,模型可以自主執行沙箱外的命令,無需批准提示,除了動作無模式自動批准的。此組合實際上允許模型無聲地逃脫沙箱隔離。

另見