安裝
在虛擬環境中安裝套件。在最近的 Debian、Ubuntu 和 Homebrew Python 安裝上,針對系統 Python 執行pip install 會失敗,並出現 error: externally-managed-environment 錯誤。
在 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 的裝飾器。
參數
輸入架構選項
-
簡單類型對應(推薦):
-
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 裝飾的類別(例如 ResultMessage、AgentDefinition、TextBlock)在執行時是物件實例,支援屬性存取:msg.result。用 TypedDict 定義的類別(例如 ThinkingConfigEnabled、McpStdioServerConfig、SyncHookJSONOutput)在執行時是純字典,需要鍵存取:config["budget_tokens"],而不是 config.budget_tokens。ClassName(field=value) 呼叫語法對兩者都有效,但只有 dataclasses 產生具有屬性的物件。SdkMcpTool
使用 @tool 裝飾器建立的 SDK MCP tool 的定義。
Transport
自訂傳輸實現的抽象基類。使用此來透過自訂通道與 Claude 程序通訊(例如,遠端連接而不是本地子程序)。
匯入:
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的主機會繼續接收pingStreamEvent消息。將這些框架讀取為活躍性,而不是在沉默時逾時 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 不受影響。setting_sources 中包括 "project"。見修改系統提示以了解 CLAUDE.md 載入如何與系統提示選項互動。
設定優先順序
當載入多個來源時,設定會以此優先順序合併(最高到最低):- 本地設定(
.claude/settings.local.json) - 專案設定(
.claude/settings.json) - 使用者設定(
~/.claude/settings.json)
agents 和 allowed_tools)會覆蓋使用者、專案和本地檔案系統設定。受管原則設定優先於程式設計選項。
AgentDefinition
以程式設計方式定義的子代理的配置。
AgentDefinition 欄位名稱使用 camelCase,例如 disallowedTools、permissionMode 和 maxTurns。這些名稱直接對應到與 TypeScript SDK 共享的線路格式。這與 ClaudeAgentOptions 不同,後者對等頂級欄位(例如 disallowed_tools 和 permission_mode)使用 Python snake_case。因為 AgentDefinition 是 dataclass,傳遞 snake_case 關鍵字在構造時會引發 TypeError。PermissionMode
用於控制 tool 執行的權限模式。
EffortLevel
用於指導思考深度的努力級別。
CanUseTool
tool 權限回呼函數的類型別名。
tool_name:被呼叫的 tool 名稱input_data:tool 的輸入參數context:具有其他資訊的ToolPermissionContext
PermissionResult(PermissionResultAllow 或 PermissionResultDeny)。
回呼是互動式權限提示的 SDK 替代品:它僅在權限評估流程解決為提示時呼叫。由 allowed_tools 項目、設定允許規則或權限模式(例如 acceptEdits 或 bypassPermissions)已批准的 tool 呼叫永遠不會呼叫它。要限制每個 tool 呼叫,改用 PreToolUse hook。
允許規則不會預先批准任何模式都不自動批准的操作;見權限如何評估以了解其中哪些到達回呼,以及在 dontAsk 和 auto 模式中發生什麼。
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 欄位一起使用以啟用測試版功能。
McpSdkServerConfig
使用 create_sdk_mcp_server() 建立的 SDK MCP 伺服器的配置。
McpServerConfig
MCP 伺服器配置的聯合類型。
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
McpServerStatusConfig
MCP 伺服器的配置,如 get_mcp_status() 所報告。這是所有 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 中。
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
助手消息的可能錯誤類型。
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()和權限回呼返回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 或更新版本。
usage 字典僅涵蓋主代理迴圈,並排除子代理和其他嵌套或輔助模型呼叫。在串流輸入模式中,值是按轉的。優先使用 model_usage 進行令牌和成本計算。usage 字典在出現時包含以下鍵:
model_usage 字典將模型名稱對應到每個模型的使用情況。它涵蓋透過查詢管道進行的每個模型呼叫:主迴圈、子代理和內部呼叫(例如壓縮和 Workflow 代理)。該管道外的輔助呼叫(例如權限分類器和令牌計數請求)從 model_usage 中排除。將 model_usage 視為估計值,而不是計費聲明。
在串流輸入模式中,model_usage 和 total_cost_usd 在轉中是累積的,因此讀取最新結果而不是在結果中求和。請參閱在串流輸入模式中追蹤成本以了解重設,以及在 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。Python Agent SDK 0.2.140 版本之前引發的是不屬於 ClaudeSDKError 子類別的純 Exception。
CLINotFoundError
當 Claude Code CLI 未安裝或找不到時引發。
CLIConnectionError
當連接到 Claude Code 失敗時引發。
ProcessError
當 Claude Code 程序失敗時引發。
ResultError
當 Claude Code 程序因執行結束時出現錯誤結果(例如轉數限制錯誤或 API 錯誤)而結束時,在最終 ResultMessage 之後引發。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 上執行。
Tool 輸入/輸出類型
所有內建 Claude Code tools 的輸入/輸出架構文件。雖然 Python SDK 不將這些匯出為類型,但它們代表消息中 tool 輸入和輸出的結構。Agent
Tool 名稱:Agent。先前的名稱 Task 仍接受作為別名,初始化 SystemMessage 中的 tools 列表為了向後相容性將此 tool 報告為 Task。
輸入:
"completed"):
"async_launched"):
"remote_launched"):
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 是該請求的輸出 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 並每個文字框架發出一個事件。請提供 command 或 ws 中的恰好一個。
當 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
輸入:
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:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
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。先前的名稱 KillShell 和 KillBash 仍接受作為別名。
輸入:
ExitPlanMode
Tool 名稱:ExitPlanMode
輸入:
ListMcpResources
Tool 名稱:ListMcpResourcesTool
輸入:
ReadMcpResource
Tool 名稱: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 區塊中以繼續通過它。請參閱處理結果以了解錯誤合約。範例使用
SandboxNetworkConfig
沙箱模式的網路特定配置。這些設定適用於當父 SandboxSettings 中的 enabled 為 True 時的沙箱化 Bash 命令。它們不會限制 WebFetch 工具,該工具改用權限規則。
SandboxIgnoreViolations
用於忽略特定沙箱違規的配置。
未沙箱化命令的權限回退
當allowUnsandboxedCommands 啟用時,模型可以透過在 tool 輸入中設定 dangerouslyDisableSandbox: True 來請求在沙箱外執行命令。這些請求回退到現有權限系統,意味著您的 can_use_tool 處理程序將被呼叫,允許您實現自訂授權邏輯。列在 excludedCommands 中的命令改為自動繞過沙箱,無需模型參與;請參閱 SandboxSettings。
以下範例記錄每個未沙箱化請求,並除非您自己的授權邏輯允許,否則拒絕它:
另見
- SDK 概述 - 一般 SDK 概念
- TypeScript SDK 參考 - TypeScript SDK 文件
- 自訂工具 - 為 Claude 定義可呼叫的程序內 MCP 工具
- CLI 參考 - 命令列介面
- 常見工作流程 - 逐步指南