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 格式(用於複雜驗證):

返回

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

範例

ToolAnnotations

tool 的行為提示,作為 tool()annotations 引數傳遞。ToolAnnotations 擴展 MCP SDK 的 mcp.types.ToolAnnotations,具有 maxResultSizeChars 欄位,您可以用 camelCase 或 snake_case 寫入每個提示:ToolAnnotations(readOnlyHint=True)ToolAnnotations(read_only_hint=True) 是等效的。您也可以在 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 以清除現有標籤。

類別

ClaudeSDKClient

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

方法

上下文管理器支援

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

範例 - 繼續對話

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

範例 - 使用中斷

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

範例 - 進階權限控制

類型

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

SdkMcpTool

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

Transport

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

ClaudeAgentOptions

Claude Code 查詢的配置 dataclass。

處理緩慢或停滯的 API 回應

CLI 子程序讀取多個環境變數,控制 API 逾時和停滯偵測。透過 ClaudeAgentOptions.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:subagents 的停滯監視程式。當串流監視程式開啟時,預設為 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 後面的閘道保持開啟的回應(帶有保活 ping)時,設定 include_partial_messages 的主機會繼續接收 ping StreamEvent 消息。將這些框架讀取為活躍性,而不是在沉默時逾時 session。在 v2.1.257 之前,框架在最後一個真實串流事件後 5 分鐘停止。

OutputFormat

結構化輸出驗證的配置。將此作為 dict 傳遞給 ClaudeAgentOptions 上的 output_format 欄位:

SystemPromptPreset

使用 Claude Code 的預設系統提示配置,可選新增。

SystemPromptFile

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

SettingSource

控制 SDK 從哪些檔案系統配置來源載入設定。

預設行為

setting_sources 被省略或為 None 時,query() 載入與 Claude Code CLI 相同的檔案系統設定:使用者、專案和本地。無論如何都會載入受管原則設定;當 session 使用組織認證在符合條件的配置上進行驗證時,會擷取伺服器管理的設定。見 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
程式設計選項(例如 agentsallowed_tools)會覆蓋使用者、專案和本地檔案系統設定。受管原則設定優先於程式設計選項。

AgentDefinition

以程式設計方式定義的子代理的配置。
AgentDefinition 欄位名稱使用 camelCase,例如 disallowedToolspermissionModemaxTurns。這些名稱直接對應到與 TypeScript SDK 共享的線路格式。這與 ClaudeAgentOptions 不同,後者對等頂級欄位(例如 disallowed_toolspermission_mode)使用 Python snake_case。因為 AgentDefinition 是 dataclass,傳遞 snake_case 關鍵字在構造時會引發 TypeError

PermissionMode

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

EffortLevel

用於指導思考深度的努力級別。

CanUseTool

tool 權限回呼函數的類型別名。
回呼接收:
  • tool_name:被呼叫的 tool 名稱
  • input_data:tool 的輸入參數
  • context:具有其他資訊的 ToolPermissionContext
返回 PermissionResultPermissionResultAllowPermissionResultDeny)。 回呼是互動式權限提示的 SDK 替代品:它僅在權限評估流程解決為提示時呼叫。由 allowed_tools 項目、設定允許規則或權限模式(例如 acceptEditsbypassPermissions)已批准的 tool 呼叫永遠不會呼叫它。要限制每個 tool 呼叫,改用 PreToolUse hook 允許規則不會預先批准任何模式都不自動批准的操作;見權限如何評估以了解其中哪些到達回呼,以及在 dontAskauto 模式中發生什麼。

ToolPermissionContext

傳遞給 tool 權限回呼的上下文資訊。

PermissionResult

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

PermissionResultAllow

指示應允許 tool 呼叫的結果。

PermissionResultDeny

指示應拒絕 tool 呼叫的結果。

PermissionUpdate

用於以程式設計方式更新權限的配置。

PermissionRuleValue

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

ToolsPreset

使用 Claude Code 預設 tool 集的預設 tools 配置。

ThinkingConfig

控制擴展思考行為。三個配置的聯合:
可選的 display 欄位控制思考文本是否返回為 "summarized""omitted"。在 Claude Opus 4.7 及更新版本上,API 預設為 "omitted",因此設定 "summarized" 以在 ThinkingBlock 輸出中接收思考內容。Claude Code 不會將 display 發送到 Amazon Bedrock 或 Google Cloud 的 Agent Platform,因此在這些提供者上,Opus 4.7 及更新版本即使您將 display 設定為 "summarized" 也會返回空的 ThinkingBlock 輸出。 因為這些是 TypedDict 類別,它們在執行時是純字典。要麼將它們構造為字典字面量,要麼呼叫類別作為構造函數;兩者都產生 dict。使用 config["budget_tokens"] 存取欄位,而不是 config.budget_tokens

TaskBudget

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

SdkBeta

SDK 測試版功能的字面類型。
ClaudeAgentOptions 中的 betas 欄位一起使用以啟用測試版功能。
context-1m-2025-08-07 測試版自 2026 年 4 月 30 日起已停用。使用 Claude Sonnet 4.5 或 Sonnet 4 傳遞此標頭沒有效果,超過標準 200k 令牌上下文視窗的請求會返回錯誤。要使用 1M 令牌上下文視窗,請遷移到 Claude Opus 5、Claude Sonnet 5、Claude Sonnet 4.6、Claude Opus 4.6、Claude Opus 4.7 或 Claude Opus 4.8,它們以標準定價包括 1M 上下文,無需測試版標頭。

McpSdkServerConfig

使用 create_sdk_mcp_server() 建立的 SDK MCP 伺服器的配置。

McpServerConfig

MCP 伺服器配置的聯合類型。

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpServerStatusConfig

MCP 伺服器的配置,如 get_mcp_status() 所報告。這是所有 McpServerConfig 傳輸變體加上用於透過 claude.ai 代理的伺服器的僅輸出 claudeai-proxy 變體的聯合。
McpSdkServerConfigStatusMcpSdkServerConfig 的可序列化形式,僅具有 type"sdk")和 namestr)欄位;進程內 instance 被省略。McpClaudeAIProxyServerConfig 具有 type"claudeai-proxy")、urlstr)和 idstr)欄位。

McpStatusResponse

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

McpServerStatus

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

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

具有中繼資料的系統消息。

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() 和權限回呼返回 PermissionResultDenyinterrupt=True。在早於該欄位的 CLI 版本上為 None,在本地命令(例如 /voice/usage)的結果上為 None,這些命令繞過查詢迴圈,或在 session 致命失敗時發出的合成錯誤結果上為 None。鏡像 TypeScript SDK 的 SDKResultMessage.terminal_reason,其列出完整的值集。
  • origin:觸發此轉的使用者消息的來源。在串流輸入模式中,檢查此項以區分您自己提示的結果(其中 originNone{"kind": "human"})與注入轉(例如背景任務通知)的結果。需要 Python Agent SDK 0.2.137 或更新版本。
usage 字典僅涵蓋主代理迴圈,並排除子代理和其他嵌套或輔助模型呼叫。在串流輸入模式中,值是按轉的。優先使用 model_usage 進行令牌和成本計算。usage 字典在出現時包含以下鍵: model_usage 字典將模型名稱對應到每個模型的使用情況。它涵蓋透過查詢管道進行的每個模型呼叫:主迴圈、子代理和內部呼叫(例如壓縮和 Workflow 代理)。該管道外的輔助呼叫(例如權限分類器和令牌計數請求)從 model_usage 中排除。將 model_usage 視為估計值,而不是計費聲明。 串流輸入模式中,model_usagetotal_cost_usd 在轉中是累積的,因此讀取最新結果而不是在結果中求和。請參閱在串流輸入模式中追蹤成本以了解重設,以及在 session 崩潰後復原總計以了解歸零結果。 model_usage 中的每個值都是 ModelUsage TypedDict,透過 from claude_agent_sdk.types import ModelUsage 匯入。其鍵使用 camelCase,因為 SDK 從基礎 CLI 程序未修改地傳遞該值,符合 TypeScript ModelUsage 類型:

StreamEvent

用於在串流期間進行部分消息更新的串流事件。僅在 ClaudeAgentOptionsinclude_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 欄位告訴您是哪一個。此命名與 TaskAgent 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 的欄位。從消息繼承自 SystemMessagedata 字典讀取它:message.data.get("resource_links")。使用 tool_use_id 將通知與呼叫相符。當結果沒有連結時和不是 MCP tool 呼叫的任務的通知上,CLI 省略該鍵。

內容區塊類型

ContentBlock

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

TextBlock

文字內容區塊。

ThinkingBlock

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

ToolUseBlock

工具使用請求區塊。

ToolResultBlock

工具執行結果區塊。

錯誤類型

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

ClaudeSDKError

所有 SDK 錯誤的基礎例外類別。
當單次 query() 以錯誤結果結束時(例如轉數限制錯誤),SDK 會在產生最終結果訊息後引發 ResultError。Python Agent SDK 0.2.140 版本之前引發的是不屬於 ClaudeSDKError 子類別的純 Exception

CLINotFoundError

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

CLIConnectionError

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

ProcessError

當 Claude Code 程序失敗時引發。

ResultError

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

Tool 輸入/輸出類型

所有內建 Claude Code tools 的輸入/輸出架構文件。雖然 Python SDK 不將這些匯出為類型,但它們代表消息中 tool 輸入和輸出的結構。

Agent

Tool 名稱: Agent。先前的名稱 Task 仍接受作為別名,初始化 SystemMessage 中的 tools 列表為了向後相容性將此 tool 報告為 Task 輸入:
啟動新的 agent 以自主處理複雜的多步驟任務。 輸出(狀態:"completed"):
輸出(狀態:"async_launched"):
輸出(狀態:"remote_launched"):
返回來自 subagent 的結果。輸出在 status 欄位上進行區分:"completed" 用於已完成的任務,"async_launched" 用於背景任務,"remote_launched" 用於 Claude Code 分派到遠端雲端工作階段的任務,其中 sessionUrl 連結到該工作階段,taskId 識別它。如果 Claude Code 保留了 subagent 的隔離 worktreecompleted 變體上的 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 請求而不是整個執行填入 usagetotalTokens。當存在時,usageoutput_tokens_details 下的 thinking_tokens 是該請求的輸出 tokens 中是思考 tokens 的數量。output_tokens_details 鍵需要 Python SDK v0.2.136 或更新版本,其中包含 Claude Code v2.1.228。

AskUserQuestion

Tool 名稱: AskUserQuestion 在執行期間詢問使用者澄清問題。見 處理批准和使用者輸入 以了解使用詳情。 輸入:
輸出:

Bash

Tool 名稱: Bash 輸入:
輸出:

Monitor

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

Edit

Tool 名稱: Edit 輸入:
輸出:

Read

Tool 名稱: Read 輸入:
輸出(文字檔案):
輸出(影像):

Write

Tool 名稱: Write 輸入:
輸出:

Glob

Tool 名稱: Glob 輸入:
輸出:

Grep

Tool 名稱: Grep 輸入:
輸出(content 模式):
輸出(files_with_matches 模式):

NotebookEdit

Tool 名稱: NotebookEdit 輸入:
輸出:

WebFetch

Tool 名稱: WebFetch 輸入:
輸出:

WebSearch

Tool 名稱: WebSearch 輸入:
輸出:

TodoWrite

Tool 名稱: TodoWrite
The following tools are available by default only on Claude 3.x models, Opus 4 through 4.7, Sonnet 4 through 4.6, and Haiku 4.5. On every other model, including model IDs Claude Code doesn’t recognize, they aren’t available unless you opt in:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
Wherever the tools are available, Claude Code provides the four Task tools, or TodoWrite instead when you set CLAUDE_CODE_ENABLE_TASKS=0.This default set applies in Claude Code v2.1.268 and later, which the TypeScript Agent SDK bundles from v0.3.268.模型可用性 以選擇加入。
輸入:
輸出:

TaskCreate

Tool 名稱: TaskCreate 輸入:
輸出:

TaskUpdate

Tool 名稱: TaskUpdate 輸入:
輸出:

TaskGet

Tool 名稱: TaskGet 輸入:
輸出:

TaskList

Tool 名稱: TaskList 輸入:
輸出:

TaskOutput

Tool 名稱: TaskOutput。先前的名稱 BashOutput 仍接受作為別名。
TaskOutput 已棄用;改用 Read 在任務的輸出檔案路徑上。以下架構對於遇到此 tool 的 hooks 和權限處理程式仍然有效。
輸入:
輸出:

TaskStop

Tool 名稱: TaskStop。先前的名稱 KillShellKillBash 仍接受作為別名。 輸入:
輸出:

ExitPlanMode

Tool 名稱: ExitPlanMode 輸入:
輸出:

ListMcpResources

Tool 名稱: ListMcpResourcesTool 輸入:
輸出:

ReadMcpResource

Tool 名稱: ReadMcpResourceTool 輸入:
輸出:

建立持續對話介面

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

錯誤處理

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

沙箱配置

SandboxSettings

沙箱行為的配置。使用此來啟用命令沙箱並以程式設計方式配置網路限制。
沙箱取決於平台支援,在 Linux 上,需要 bubblewrapsocat 等工具。預設情況下,當 enabledTrue 但沙箱無法啟動時,命令會在沙箱外執行,並在 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 中的 enabledTrue 時的沙箱化 Bash 命令。它們不會限制 WebFetch 工具,該工具改用權限規則
內建沙箱 proxy 根據請求的主機名稱強制執行網路允許清單,不會終止或檢查 TLS 流量,因此網域前置等技術可能會繞過它。有關詳細資訊,請參閱沙箱安全限制,以及安全部署以配置 TLS 終止 proxy。

SandboxIgnoreViolations

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

未沙箱化命令的權限回退

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

另見