跳轉到主要內容

安裝

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

query()ClaudeSDKClient 之間選擇

Python SDK 提供了兩種與 Claude Code 互動的方式:

快速比較

何時使用 query()(一次性任務)

最適合:
  • 一次性問題,不需要對話歷史
  • 不需要先前交換上下文的獨立任務
  • 簡單的自動化腳本
  • 當您想每次都重新開始時

何時使用 ClaudeSDKClient(持續對話)

最適合:
  • 繼續對話 - 當您需要 Claude 記住上下文時
  • 後續問題 - 基於先前回應進行構建
  • 互動式應用程式 - 聊天介面、REPL
  • 回應驅動邏輯 - 當下一個動作取決於 Claude 的回應時
  • Session 控制 - 明確管理對話生命週期

函數

query()

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

參數

返回

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

範例 - 使用選項

tool()

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

參數

輸入架構選項

  1. 簡單類型對應(推薦):
  2. JSON Schema 格式(用於複雜驗證):

返回

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

範例

ToolAnnotations

mcp.types 重新匯出(也可以從 claude_agent_sdk 匯入)。所有欄位都是可選提示;客戶端不應依賴它們進行安全決策。

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 等效物 - 它建立一個可以繼續對話的客戶端物件。

主要功能

  • Session 連續性:在多個 query() 呼叫中維持對話上下文
  • 相同對話:session 保留先前的消息
  • 中斷支援:可以在任務中途停止執行
  • 明確生命週期:您控制 session 何時開始和結束
  • 回應驅動流程:可以對回應做出反應並發送後續消息
  • 自訂 tools 和 hooks:支援自訂 tools(使用 @tool 裝飾器建立)和 hooks

方法

上下文管理器支援

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

範例 - 繼續對話

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

範例 - 使用中斷

中斷後的緩衝區行為: interrupt() 發送停止信號但不清除消息緩衝區。已由中斷任務產生的消息,包括其 ResultMessage(帶有 subtype="error_during_execution"),保留在流中。您必須在讀取新查詢的回應之前使用 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:使用 run_in_background 啟動的子代理的停滯監視程式。預設 600000。在每個串流事件上重置;停滯時中止子代理,將任務標記為失敗,並將錯誤呈現給父代理,包含任何部分結果。不適用於同步子代理。
  • CLAUDE_ENABLE_STREAM_WATCHDOG 搭配 CLAUDE_STREAM_IDLE_TIMEOUT_MS:當標頭已到達但回應本體停止串流時中止請求。監視程式預設在所有提供者上啟用;設定 CLAUDE_ENABLE_STREAM_WATCHDOG=0 以停用它。CLAUDE_STREAM_IDLE_TIMEOUT_MS 預設為 300000 並限制在該最小值。中止的請求會經過正常重試路徑。

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 不受影響。
明確載入所有檔案系統設定:
僅載入特定設定來源:
測試和 CI 環境:
僅 SDK 應用程式:
載入 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 AskUserQuestion、標記為 requiresUserInteraction 的 MCP tools,以及您的組織設定為 ask 的連接器 tools 即使允許規則相符也會到達回呼。在 dontAsk 模式下,這些呼叫會被拒絕,而不呼叫回呼。

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 輸出中接收思考內容。 因為這些是 TypedDict 類別,它們在執行時是純字典。要麼將它們構造為字典字面量,要麼呼叫類別作為構造函數;兩者都產生 dict。使用 config["budget_tokens"] 存取欄位,而不是 config.budget_tokens

SdkBeta

SDK 測試版功能的字面類型。
ClaudeAgentOptions 中的 betas 欄位一起使用以啟用測試版功能。
context-1m-2025-08-07 測試版自 2026 年 4 月 30 日起已停用。使用 Claude Sonnet 4.5 或 Sonnet 4 傳遞此標頭沒有效果,超過標準 200k 令牌上下文視窗的請求會返回錯誤。要使用 1M 令牌上下文視窗,請遷移到 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

使用者輸入消息。

AssistantMessage

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

AssistantMessageError

助手消息的可能錯誤類型。

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 上填入。
usage 字典在出現時包含以下鍵: model_usage 字典將模型名稱對應到每個模型的使用情況。內部字典鍵使用 camelCase,因為該值從基礎 CLI 程序未修改地傳遞,符合 TypeScript ModelUsage 類型:

StreamEvent

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

RateLimitEvent

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

RateLimitInfo

RateLimitEvent 攜帶的速率限制狀態。

TaskStartedMessage

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

TaskUsage

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

TaskProgressMessage

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

TaskNotificationMessage

在背景任務完成、失敗或停止時發出。背景任務包括 run_in_background Bash 命令、Monitor 監視和背景子代理。

內容區塊類型

ContentBlock

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

TextBlock

文字內容區塊。

ThinkingBlock

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

ToolUseBlock

工具使用請求區塊。

ToolResultBlock

工具執行結果區塊。

錯誤類型

ClaudeSDKError

所有 SDK 錯誤的基礎例外類別。

CLINotFoundError

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

CLIConnectionError

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

ProcessError

當 Claude Code 程序失敗時引發。

CLIJSONDecodeError

當 JSON 解析失敗時引發。

Hook 類型

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

HookEvent

支援的 hook 事件類型。
TypeScript SDK 支援 Python 中尚未提供的其他 hook 事件:SessionStartSessionEndSetupTeammateIdleTaskCompletedConfigChangeWorktreeCreateWorktreeRemovePostToolBatchMessageDisplay

HookCallback

hook 回呼函數的類型定義。
參數:
  • input:強類型 hook 輸入,具有基於 hook_event_name 的判別聯合(見 HookInput
  • tool_use_id:可選 tool 使用識別碼(用於 tool 相關 hooks)
  • context:具有其他資訊的 hook 上下文
返回可能包含以下內容的 HookJSONOutput
  • decision"block" 以阻止動作
  • systemMessage:警告消息,顯示給使用者
  • hookSpecificOutput:hook 特定輸出資料

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

包含 hook 事件名稱和事件特定欄位的 TypedDict。形狀取決於 hookEventName 值。如需每個 hook 事件的可用欄位的完整詳情,見 使用 hooks 控制執行 事件特定輸出類型的判別聯合。hookEventName 欄位決定哪些欄位有效。

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,仍接受作為別名) 輸入:
輸出:

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
自 Claude Code v2.1.142 起,TodoWrite 預設為停用。改用 TaskCreateTaskGetTaskUpdateTaskList。見 遷移到 Task tools 以更新您的監視程式碼,或設定 CLAUDE_CODE_ENABLE_TASKS=0 以還原為 TodoWrite
輸入:
輸出:

TaskCreate

Tool 名稱: TaskCreate 輸入:
輸出:

TaskUpdate

Tool 名稱: TaskUpdate 輸入:
輸出:

TaskGet

Tool 名稱: TaskGet 輸入:
輸出:

TaskList

Tool 名稱: TaskList 輸入:
輸出:

BashOutput

Tool 名稱: BashOutput 輸入:
輸出:

KillBash

Tool 名稱: KillBash 輸入:
輸出:

ExitPlanMode

Tool 名稱: ExitPlanMode 輸入:
輸出:

ListMcpResources

Tool 名稱: ListMcpResourcesTool 輸入:
輸出:

ReadMcpResource

Tool 名稱: ReadMcpResourceTool 輸入:
輸出:

使用 ClaudeSDKClient 的進階功能

建立持續對話介面

使用 Hooks 進行行為修改

即時進度監控

範例使用

基本檔案操作(使用 query)

錯誤處理

使用客戶端的串流模式

使用 ClaudeSDKClient 的自訂 tools

沙箱配置

SandboxSettings

沙箱行為的配置。使用此來啟用命令沙箱並以程式設計方式配置網路限制。
沙箱取決於平台支援,在 Linux 上,需要 bubblewrapsocat 等工具。預設情況下,當 enabledTrue 但沙箱無法啟動時,命令會在沙箱外執行,並在 stderr 上顯示警告。此預設與 TypeScript SDK 不同,其中 failIfUnavailable 預設為 true在沙箱設定中設定 "failIfUnavailable": True 以改為停止。該鍵尚未在 SandboxSettings 上宣告,但 SDK 會將其轉發給 Claude Code,後者會遵守它。query() 然後報告 ResultMessage,其中 subtype="error_during_execution" 且原因在 errors 中。監視該子類型,而不是期望 query() 在產生訊息之前引發。

範例使用

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 vs allowUnsandboxedCommands
  • excludedCommands:始終自動繞過沙箱的靜態命令清單(例如 ["docker"])。模型無法控制此。
  • allowUnsandboxedCommands:讓模型在執行時透過在 tool 輸入中設定 dangerouslyDisableSandbox: True 來決定是否請求未沙箱化執行。
此模式使您能夠:
  • 審計模型請求:記錄模型何時請求未沙箱化執行
  • 實現允許清單:僅允許特定命令在沙箱外執行
  • 新增批准工作流程:需要明確授權以進行特權操作
使用 dangerouslyDisableSandbox: True 執行的命令具有完整系統存取權限。確保您的 can_use_tool 處理程序仔細驗證這些請求。如果 permission_mode 設定為 bypassPermissionsallow_unsandboxed_commands 啟用,模型可以自主執行沙箱外的命令,無需任何批准提示。此組合實際上允許模型無聲地逃脫沙箱隔離。

另見