安裝
SDK 為您的平台捆綁了一個原生 Claude Code 二進制文件作為可選依賴項,例如
@anthropic-ai/claude-agent-sdk-darwin-arm64。您不需要單獨安裝 Claude Code。如果您的包管理器跳過可選依賴項,SDK 會拋出 Native CLI binary for <platform> not found;改為將 pathToClaudeCodeExecutable 設置為單獨安裝的 claude 二進制文件。編譯為單個可執行文件
當您使用bun build --compile 將應用程序編譯為單個文件可執行文件時,SDK 無法在運行時解析捆綁的 CLI 二進制文件。require.resolve 在編譯後可執行文件的 $bunfs 虛擬文件系統內不起作用,因此 SDK 會拋出 Native CLI binary for <platform> 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。
函數
query()
與 Claude Code 互動的主要函數。創建一個異步生成器,在消息到達時流式傳輸消息。
參數
| 參數 | 類型 | 描述 |
|---|---|---|
prompt | string | AsyncIterable<SDKUserMessage> | 輸入提示,可以是字符串或異步可迭代對象用於流式模式 |
options | Options | 可選配置對象(見下面的 Options 類型) |
返回值
返回一個Query 對象,它擴展了 AsyncGenerator<SDKMessage, void> 並具有額外的方法。
startup()
通過生成 CLI 子進程並在提示可用之前完成初始化握手來預熱 CLI 子進程。返回的 WarmQuery 句柄稍後接受提示並將其寫入已準備好的進程,因此第一個 query() 調用解析時無需支付子進程生成和初始化成本。
參數
| 參數 | 類型 | 描述 |
|---|---|---|
options | Options | 可選配置對象。與 query() 的 options 參數相同 |
initializeTimeoutMs | number | 等待子進程初始化的最大時間(毫秒)。默認為 60000。如果初始化未在時間內完成,promise 將以超時錯誤拒絕 |
返回值
返回一個Promise<WarmQuery>,在子進程生成並完成其初始化握手後解析。
示例
早期調用startup(),例如在應用程序啟動時,然後在提示準備好後在返回的句柄上調用 .query()。這將子進程生成和初始化移出關鍵路徑。
tool()
為與 SDK MCP 服務器一起使用創建類型安全的 MCP 工具定義。
參數
| 參數 | 類型 | 描述 |
|---|---|---|
name | string | 工具的名稱 |
description | string | 工具功能的描述 |
inputSchema | Schema extends AnyZodRawShape | 定義工具輸入參數的 Zod 架構(支持 Zod 3 和 Zod 4) |
handler | (args, extra) => Promise<CallToolResult> | 執行工具邏輯的異步函數 |
extras | { annotations?: ToolAnnotations } | 可選的 MCP 工具註釋,為客戶端提供行為提示 |
ToolAnnotations
從 @modelcontextprotocol/sdk/types.js 重新導出。所有字段都是可選提示;客戶端不應依賴它們進行安全決策。
| 字段 | 類型 | 默認值 | 描述 |
|---|---|---|---|
title | string | undefined | 工具的人類可讀標題 |
readOnlyHint | boolean | false | 如果為 true,工具不會修改其環境 |
destructiveHint | boolean | true | 如果為 true,工具可能執行破壞性更新(僅在 readOnlyHint 為 false 時有意義) |
idempotentHint | boolean | false | 如果為 true,使用相同參數的重複調用沒有額外效果(僅在 readOnlyHint 為 false 時有意義) |
openWorldHint | boolean | true | 如果為 true,工具與外部實體交互(例如,網絡搜索)。如果為 false,工具的域是封閉的(例如,記憶工具) |
createSdkMcpServer()
創建在與應用程序相同的進程中運行的 MCP 服務器實例。
參數
| 參數 | 類型 | 描述 |
|---|---|---|
options.name | string | MCP 服務器的名稱 |
options.version | string | 可選版本字符串 |
options.tools | Array<SdkMcpToolDefinition> | 使用 tool() 創建的工具定義數組 |
listSessions()
發現並列出具有輕量級元數據的過去會話。按項目目錄篩選或列出所有項目中的會話。
參數
| 參數 | 類型 | 默認值 | 描述 |
|---|---|---|---|
options.dir | string | undefined | 列出會話的目錄。省略時,返回所有項目中的會話 |
options.limit | number | undefined | 返回的最大會話數 |
options.includeWorktrees | boolean | true | 當 dir 在 git 存儲庫內時,包括來自所有 worktree 路徑的會話 |
返回類型:SDKSessionInfo
| 屬性 | 類型 | 描述 |
|---|---|---|
sessionId | string | 唯一會話標識符(UUID) |
summary | string | 顯示標題:自定義標題、自動生成的摘要或第一個提示 |
lastModified | number | 上次修改時間(自紀元以來的毫秒數) |
fileSize | number | undefined | 會話文件大小(字節)。僅針對本地 JSONL 存儲填充 |
customTitle | string | undefined | 用戶設置的會話標題(通過 /rename) |
firstPrompt | string | undefined | 會話中的第一個有意義的用戶提示 |
gitBranch | string | undefined | 會話結束時的 Git 分支 |
cwd | string | undefined | 會話的工作目錄 |
tag | string | undefined | 用戶設置的會話標籤(見 tagSession()) |
createdAt | number | undefined | 創建時間(自紀元以來的毫秒數),來自第一個條目的時間戳 |
示例
打印項目的 10 個最近會話。結果按lastModified 降序排序,因此第一項是最新的。省略 dir 以搜索所有項目。
getSessionMessages()
從過去的會話記錄中讀取用戶和助手消息。
參數
| 參數 | 類型 | 默認值 | 描述 |
|---|---|---|---|
sessionId | string | 必需 | 要讀取的會話 UUID(見 listSessions()) |
options.dir | string | undefined | 查找會話的項目目錄。省略時,搜索所有項目 |
options.limit | number | undefined | 返回的最大消息數 |
options.offset | number | undefined | 從開始跳過的消息數 |
返回類型:SessionMessage
| 屬性 | 類型 | 描述 |
|---|---|---|
type | "user" | "assistant" | 消息角色 |
uuid | string | 唯一消息標識符 |
session_id | string | 此消息所屬的會話 |
message | unknown | 來自記錄的原始消息有效負載 |
parent_tool_use_id | string | null | 對於子代理消息,生成 Agent 工具調用的 tool_use_id。對於主會話消息和較舊的會話為 null |
示例
getSessionInfo()
按 ID 讀取單個會話的元數據,無需掃描完整項目目錄。
參數
| 參數 | 類型 | 默認值 | 描述 |
|---|---|---|---|
sessionId | string | 必需 | 要查找的會話 UUID |
options.dir | string | undefined | 項目目錄路徑。省略時,搜索所有項目目錄 |
SDKSessionInfo,如果找不到會話則返回 undefined。
renameSession()
通過附加自定義標題條目來重命名會話。重複調用是安全的;最新的標題獲勝。
參數
| 參數 | 類型 | 默認值 | 描述 |
|---|---|---|---|
sessionId | string | 必需 | 要重命名的會話 UUID |
title | string | 必需 | 新標題。修剪空格後必須非空 |
options.dir | string | undefined | 項目目錄路徑。省略時,搜索所有項目目錄 |
tagSession()
標記會話。傳遞 null 以清除標籤。重複調用是安全的;最新的標籤獲勝。
參數
| 參數 | 類型 | 默認值 | 描述 |
|---|---|---|---|
sessionId | string | 必需 | 要標記的會話 UUID |
tag | string | null | 必需 | 標籤字符串,或 null 以清除 |
options.dir | string | undefined | 項目目錄路徑。省略時,搜索所有項目目錄 |
resolveSettings()
使用與 CLI 相同的合併引擎為給定目錄解析有效的 Claude Code 設置,無需生成 Claude CLI。在調用 query() 之前使用它來檢查 query() 調用將看到什麼配置。
此函數處於 alpha 階段,其 API 在穩定之前可能會更改。它讀取 MDM 源,包括 macOS plist 和 Windows HKLM/HKCU,以與 CLI 啟動保持一致,但不執行管理員配置的
policyHelper 子進程。permissions.defaultMode 字段從所有層級(包括項目設置)按原樣返回。CLI 在遵守升級權限模式之前應用的信任過濾器不被應用。參數
resolveSettings() 接受單個選項對象。所有字段都是可選的。
| 參數 | 類型 | 默認值 | 描述 |
|---|---|---|---|
options.cwd | string | process.cwd() | 用於解析項目和本地設置的相對目錄 |
options.settingSources | SettingSource[] | 所有源 | 要加載的文件系統源。傳遞 [] 以跳過用戶、項目和本地設置。託管策略設置在所有情況下都會加載 |
options.managedSettings | Settings | undefined | 由嵌入主機提供的限制性策略層設置。當存在管理員部署的託管層時被丟棄;當 parentSettingsBehavior 為 "merge" 時在該層下合併。非限制性鍵(如 model)會被靜默丟棄,以便此選項可以加強託管策略但不能放寬它 |
options.serverManagedSettings | Settings | undefined | 來自 /api/claude_code/settings 的服務器託管設置有效負載。非限制性鍵無過濾地通過 |
返回類型:ResolvedSettings
resolveSettings() 返回一個對象,描述合併的設置和為每個鍵提供的源。
| 屬性 | 類型 | 描述 |
|---|---|---|
effective | Settings | 在優先級順序中應用所有啟用源後的合併設置 |
provenance | Partial<Record<keyof Settings, ProvenanceEntry>> | 對於 effective 中的每個頂級鍵,哪個源提供了該值 |
sources | Array<{ source, settings, path?, policyOrigin? }> | 每個源的原始設置,按從最低到最高優先級排序 |
示例
下面的示例為項目目錄解析設置並打印控制清理期的源。類型
Options
query() 函數的配置對象。
| 屬性 | 類型 | 默認值 | 描述 |
|---|---|---|---|
abortController | AbortController | new AbortController() | 用於取消操作的控制器 |
additionalDirectories | string[] | [] | Claude 可以訪問的其他目錄 |
agent | string | undefined | 主線程的代理名稱。代理必須在 agents 選項或設置中定義 |
agents | Record<string, [AgentDefinition](#agentdefinition)> | undefined | 以編程方式定義子代理 |
agentProgressSummaries | boolean | false | 當為 true 時,為子代理生成單行進度摘要,並通過 summary 字段在 task_progress 事件上轉發它們。適用於前景和背景子代理 |
allowDangerouslySkipPermissions | boolean | false | 啟用繞過權限。使用 permissionMode: 'bypassPermissions' 時需要 |
allowedTools | string[] | [] | 無需提示即可自動批准的工具。這不會將 Claude 限制為僅這些工具;未列出的工具會進入 permissionMode 和 canUseTool。使用 disallowedTools 來阻止工具。見 權限 |
betas | SdkBeta[] | [] | 啟用測試功能 |
canUseTool | CanUseTool | undefined | 工具使用的自定義權限函數 |
continue | boolean | false | 繼續最近的對話 |
cwd | string | process.cwd() | 當前工作目錄 |
debug | boolean | false | 為 Claude Code 進程啟用調試模式 |
debugFile | string | undefined | 將調試日誌寫入特定文件路徑。隱式啟用調試模式 |
disallowedTools | string[] | [] | 要拒絕的工具。裸名稱如 "Bash" 會從 Claude 的上下文中移除該工具。作用域規則如 "Bash(rm *)" 會保留該工具可用,並在每個權限模式中拒絕匹配的調用,包括 bypassPermissions。見 權限 |
effort | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | 'high' | 控制 Claude 在其響應中投入多少努力。與自適應思考一起工作以指導思考深度 |
enableFileCheckpointing | boolean | false | 啟用文件更改跟蹤以進行回滾。見 文件 checkpointing |
env | Record<string, string | undefined> | process.env | 環境變量。設置此項時,這會替換子進程環境而不是與 process.env 合併,因此傳遞 { ...process.env, YOUR_VAR: 'value' } 以保留繼承的變量如 PATH。見 處理緩慢或停滯的 API 響應 了解此模式的示例,以及 環境變量 了解底層 CLI 讀取的變量。設置 CLAUDE_AGENT_SDK_CLIENT_APP 以在 User-Agent 標頭中標識您的應用程序 |
executable | 'bun' | 'deno' | 'node' | 自動檢測 | 要使用的 JavaScript 運行時 |
executableArgs | string[] | [] | 傳遞給可執行文件的參數 |
extraArgs | Record<string, string | null> | {} | 其他參數 |
fallbackModel | string | undefined | 主模型失敗時使用的模型 |
forkSession | boolean | false | 使用 resume 恢復時,分叉到新會話 ID 而不是繼續原始會話 |
forwardSubagentText | boolean | false | 轉發子代理文本和思考塊作為助手和用戶消息,並設置 parent_tool_use_id,以便消費者可以呈現嵌套記錄。默認情況下,只有來自子代理的 tool_use 和 tool_result 塊被發出 |
hooks | Partial<Record<HookEvent, HookCallbackMatcher[]>> | {} | 事件的 hooks 回調 |
includeHookEvents | boolean | false | 將 hooks 生命週期事件包括在消息流中,作為 SDKHookStartedMessage、SDKHookProgressMessage 和 SDKHookResponseMessage |
includePartialMessages | boolean | false | 包括部分消息事件 |
loadTimeoutMs | number | 60000 | Alpha。 在恢復物化期間,每個 sessionStore.load() 和 sessionStore.listSubkeys() 調用的超時時間(以毫秒為單位)。如果適配器未在此窗口內解決,查詢將失敗而不是掛起。未設置 sessionStore 時忽略 |
managedSettings | Settings | undefined | 由生成父進程提供的策略層設置。當機器上已存在 IT 控制的託管設置層時被丟棄,除非該管理員選擇使用 parentSettingsBehavior: 'merge'。無論如何都被過濾為僅限制性鍵 |
maxBudgetUsd | number | undefined | 當客戶端成本估計達到此 USD 值時停止查詢。與 total_cost_usd 的相同估計進行比較;見 跟蹤成本和使用情況 了解準確性注意事項 |
maxThinkingTokens | number | undefined | 已棄用: 改用 thinking。思考過程的最大令牌數 |
maxTurns | number | undefined | 最大代理轉數(工具使用往返) |
mcpServers | Record<string, [McpServerConfig](#mcpserverconfig)> | {} | MCP 服務器配置 |
model | string | CLI 默認值 | 要使用的 Claude 模型 |
onElicitation | (request: ElicitationRequest, options: { signal: AbortSignal }) => Promise<ElicitationResult> | undefined | 用於處理 MCP 引出請求的回調。當 MCP 服務器請求用戶輸入且沒有 hooks 首先處理它時調用。未提供時,未處理的引出請求會自動被拒絕 |
outputFormat | { type: 'json_schema', schema: JSONSchema } | undefined | 為代理結果定義輸出格式。見 結構化輸出 了解詳情 |
outputStyle | string | undefined | 不是 Options 字段。改為在內聯 settings 對象或設置文件中設置 outputStyle。見 激活輸出樣式 |
pathToClaudeCodeExecutable | string | 從捆綁的原生二進制文件自動解析 | Claude Code 可執行文件的路徑。僅在安裝期間跳過可選依賴項或您的平台不在支持的集合中時需要 |
permissionMode | PermissionMode | 'default' | 會話的權限模式 |
permissionPromptToolName | string | undefined | 權限提示的 MCP 工具名稱 |
persistSession | boolean | true | 當為 false 時,禁用會話持久化到磁盤。會話之後無法恢復 |
planModeInstructions | string | undefined | Plan Mode 的自定義工作流指令。當 permissionMode 為 'plan' 時,此字符串替換默認 Plan Mode 工作流正文。CLI 仍然使用只讀強制前言和 ExitPlanMode 協議頁腳包裝它 |
plugins | SdkPluginConfig[] | [] | 從本地路徑加載自定義 plugins。見 Plugins 了解詳情 |
promptSuggestions | boolean | false | 啟用提示建議。在每個轉數後發出 prompt_suggestion 消息,帶有預測的下一個用戶提示 |
resume | string | undefined | 要恢復的會話 ID |
resumeSessionAt | string | undefined | 在特定消息 UUID 處恢復會話 |
sandbox | SandboxSettings | undefined | 以編程方式配置 sandbox 行為。見 Sandbox 設置 了解詳情 |
sessionId | string | 自動生成 | 使用特定 UUID 作為會話,而不是自動生成一個 |
sessionStore | SessionStore | undefined | 將會話記錄鏡像到外部後端,以便任何主機都可以恢復它們。見 將會話持久化到外部存儲 |
sessionStoreFlush | 'batched' | 'eager' | 'batched' | Alpha。 sessionStore 的刷新模式。未設置 sessionStore 時忽略 |
settings | string | Settings | undefined | 內聯 設置 對象或設置文件的路徑。填充 優先級順序 中的標誌設置層。使用 applyFlagSettings() 在運行時更改 |
settingSources | SettingSource[] | CLI 默認值(所有源) | 控制加載哪些文件系統設置。傳遞 [] 以禁用用戶、項目和本地設置。無論如何都會加載託管策略設置。見 使用 Claude Code 功能 |
skills | string[] | 'all' | undefined | 會話可用的 skills。傳遞 'all' 以啟用每個發現的 skill,或傳遞 skill 名稱列表。設置後,SDK 會自動將 Skill 工具添加到 allowedTools。如果您也傳遞 tools,請在該列表中包含 'Skill'。見 Skills |
spawnClaudeCodeProcess | (options: SpawnOptions) => SpawnedProcess | undefined | 用於生成 Claude Code 進程的自定義函數。用於在 VM、容器或遠程環境中運行 Claude Code |
stderr | (data: string) => void | undefined | stderr 輸出的回調 |
strictMcpConfig | boolean | false | 僅使用在 mcpServers 中傳遞的服務器,並忽略項目 .mcp.json、用戶設置、plugin 提供的 MCP 服務器和 claude.ai connectors |
systemPrompt | string | { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean } | undefined(最小提示) | 系統提示配置。傳遞字符串以獲得自定義提示,或 { type: 'preset', preset: 'claude_code' } 以使用 Claude Code 的系統提示。使用預設對象形式時,添加 append 以使用其他指令擴展它,並設置 excludeDynamicSections: true 以將每個會話上下文移到第一個用戶消息中以獲得 跨機器更好的提示 cache 重用 |
taskBudget | { total: number } | undefined | Alpha。 API 端任務預算(以令牌為單位)。設置後,模型會被告知其剩餘令牌預算,以便它可以調整工具使用速度並在達到限制前完成 |
thinking | ThinkingConfig | 支持的模型為 { type: 'adaptive' } | 控制 Claude 的思考/推理行為。見 ThinkingConfig 了解選項 |
title | string | undefined | 會話的顯示標題。通過 resume 或 continue 恢復時,恢復的會話的持久化標題優先;使用 renameSession() 重新標題現有會話 |
toolAliases | Record<string, string> | undefined | 將內置工具名稱映射到 MCP 工具名稱,以便 Claude 調用您的 MCP 實現而不是內置工具。例如,{ Bash: 'mcp__workspace__bash' } |
toolConfig | ToolConfig | undefined | 內置工具行為的配置。見 ToolConfig 了解詳情 |
tools | string[] | { type: 'preset'; preset: 'claude_code' } | undefined | 工具配置。傳遞工具名稱數組或使用預設以獲得 Claude Code 的默認工具 |
處理緩慢或停滯的 API 響應
CLI 子進程讀取多個環境變量,這些變量控制 API 超時和停滯檢測。通過env 選項傳遞它們:
API_TIMEOUT_MS:Anthropic 客戶端上的每個請求超時,以毫秒為單位。默認600000。適用於主循環和所有子代理。CLAUDE_CODE_MAX_RETRIES:最大 API 重試次數。默認10。每次重試都有自己的API_TIMEOUT_MS窗口,因此最壞情況下的牆時間大約是API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)加上退避。CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS:使用run_in_background啟動的子代理的停滯監視程序。默認600000。在每個流事件上重置;在停滯時中止子代理,將任務標記為失敗,並將錯誤與任何部分結果一起呈現給父代理。不適用於同步子代理。CLAUDE_ENABLE_STREAM_WATCHDOG=1與CLAUDE_STREAM_IDLE_TIMEOUT_MS:當標頭已到達但響應正文停止流式傳輸時中止請求。默認關閉。CLAUDE_STREAM_IDLE_TIMEOUT_MS默認為300000並被限制為該最小值。中止的請求通過正常重試路徑進行。
Query 對象
由 query() 函數返回的介面。
方法
| 方法 | 描述 |
|---|---|
interrupt() | 中斷查詢(僅在流式輸入模式下可用) |
rewindFiles(userMessageId, options?) | 將文件恢復到指定用戶消息時的狀態。傳遞 { dryRun: true } 以預覽更改。需要 enableFileCheckpointing: true。見 文件 checkpointing |
setPermissionMode() | 更改權限模式(僅在流式輸入模式下可用) |
setModel() | 更改模型(僅在流式輸入模式下可用) |
setMaxThinkingTokens() | 已棄用: 改用 thinking 選項。更改最大思考令牌 |
applyFlagSettings(settings) | 在運行時將設置合併到會話的標誌設置層中(僅在流式輸入模式下可用)。見 applyFlagSettings() |
initializationResult() | 返回完整的初始化結果,包括支持的命令、模型、帳戶信息和輸出樣式配置 |
supportedCommands() | 返回可用的 slash commands |
supportedModels() | 返回具有顯示信息的可用模型 |
supportedAgents() | 返回可用的子代理,作為 AgentInfo[] |
mcpServerStatus() | 返回連接的 MCP 服務器的狀態 |
accountInfo() | 返回帳戶信息 |
reconnectMcpServer(serverName) | 按名稱重新連接 MCP 服務器 |
toggleMcpServer(serverName, enabled) | 按名稱啟用或禁用 MCP 服務器 |
setMcpServers(servers) | 動態替換此會話的 MCP 服務器集。返回有關添加、刪除的服務器和任何錯誤的信息 |
streamInput(stream) | 將輸入消息流式傳輸到查詢以進行多輪對話 |
stopTask(taskId) | 按 ID 停止運行的後台任務 |
close() | 關閉查詢並終止底層進程。強制結束查詢並清理所有資源 |
applyFlagSettings()
在運行會話上更改任何 設置,無需重新啟動查詢。當沒有專用設置器的設置需要在會話中期更改時使用它,例如在代理讀取不受信任的輸入後收緊 permissions。setModel() 和 setPermissionMode() 是這兩個鍵的專用設置器;applyFlagSettings() 是接受任何設置鍵子集的通用形式,在此處傳遞 model 的行為與 setModel() 相同。
只有某些鍵在會話中期生效:
- 在下一個轉數上應用:
model、effortLevel、ultracode、permissions、hooks、skillOverrides、fastMode、awaySummaryEnabled、agent。切換agent也會在下一個轉數上應用該代理的模型覆蓋、hooks 和系統提示。 - 在會話中期無效:系統提示選項。這些在啟動時解決一次,因此運行會話保持原始值,即使調用成功。要更改它們,請啟動新會話。
query() 的 settings 選項在啟動時填充的同一層。標誌設置位於 設置優先級順序 的頂部附近:它們覆蓋用戶、項目和本地設置,只有託管策略設置可以覆蓋它們。這是 優先級部分 稱為編程選項的同一層。
連續調用淺合併頂級鍵。第二次調用 { permissions: {...} } 會替換先前調用中的整個 permissions 對象,而不是深度合併到其中。要從標誌層清除鍵並回退到較低優先級源,請為該鍵傳遞 null。傳遞 undefined 沒有效果,因為 JSON 序列化會將其刪除。
僅在流式輸入模式下可用,與 setModel() 和 setPermissionMode() 的約束相同。
下面的示例在會話中期切換活動模型,然後清除覆蓋,以便模型回退到用戶或項目設置指定的任何內容。
applyFlagSettings() 僅適用於 TypeScript。Python SDK 不公開等效方法。WarmQuery
由 startup() 返回的句柄。子進程已生成並初始化,因此在此句柄上調用 query() 會直接將提示寫入準備好的進程,無需啟動延遲。
方法
| 方法 | 描述 |
|---|---|
query(prompt) | 向預熱的子進程發送提示並返回 Query。每個 WarmQuery 只能調用一次 |
close() | 關閉子進程而不發送提示。使用此方法丟棄不再需要的預熱查詢 |
WarmQuery 實現 AsyncDisposable,因此可以與 await using 一起使用以進行自動清理。
SDKControlInitializeResponse
initializationResult() 的返回類型。包含會話初始化數據。
initialize 時,控制響應包裝器也會帶有可選的 pending_permission_requests 數組。該字段位於響應包裝器本身上,而不是上面的 SDKControlInitializeResponse 有效負載中。每個條目都是一個完整的 control_request 消息,具有與會話在運行時為權限請求流式傳輸的相同 { type: "control_request", request_id, request } 形狀。
這些是在客戶端連接之前發出的請求,仍在等待回复,因此讀取此數組以立即在表面中顯示進行中的權限提示;它們不會被重新發送。
AgentDefinition
以編程方式定義的子代理的配置。
| 字段 | 必需 | 描述 |
|---|---|---|
description | 是 | 何時使用此代理的自然語言描述 |
tools | 否 | 允許的工具名稱數組。如果省略,從父代理繼承所有工具。要將 Skills 預加載到代理的上下文中,請使用 skills 字段而不是在此處列出 'Skill' |
disallowedTools | 否 | 要為此代理明確禁止的工具名稱數組 |
prompt | 是 | 代理的系統提示 |
model | 否 | 此代理的模型覆蓋。接受別名如 'sonnet'、'opus'、'haiku'、'inherit' 或完整模型 ID。如果省略或 'inherit',使用主模型 |
mcpServers | 否 | 此代理可用的 MCP 服務器規範 |
skills | 否 | 要預加載到代理上下文中的 skill 名稱數組 |
initialPrompt | 否 | 當此代理作為主線程代理運行時,自動提交為第一個用戶轉數 |
maxTurns | 否 | 最大代理轉數(API 往返),然後停止 |
background | 否 | 當調用時,將此代理作為非阻塞後台任務運行 |
memory | 否 | 此代理的內存源:'user'、'project' 或 'local' |
effort | 否 | 此代理的推理努力級別。接受命名級別或整數 |
permissionMode | 否 | 此代理內工具執行的權限模式。見 PermissionMode |
criticalSystemReminder_EXPERIMENTAL | 否 | 實驗性:添加到系統提示的關鍵提醒 |
AgentMcpServerSpec
指定子代理可用的 MCP 服務器。可以是服務器名稱(字符串,引用父代理 mcpServers 配置中的服務器)或內聯服務器配置記錄,將服務器名稱映射到配置。
McpServerConfigForProcessTransport 是 McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig。
SettingSource
控制 SDK 從哪些基於文件系統的配置源加載設置。
| 值 | 描述 | 位置 |
|---|---|---|
'user' | 全局用戶設置 | ~/.claude/settings.json |
'project' | 共享項目設置(版本控制) | .claude/settings.json |
'local' | 本地項目設置(gitignored) | .claude/settings.local.json |
默認行為
當settingSources 被省略或 undefined 時,query() 加載與 Claude Code CLI 相同的文件系統設置:用戶、項目和本地。託管策略設置在所有情況下都會加載。見 settingSources 不控制什麼 了解無論此選項如何都會讀取的輸入,以及如何禁用它們。
為什麼使用 settingSources
禁用文件系統設置:設置優先級
加載多個源時,設置按此優先級(最高到最低)合併:- 本地設置(
.claude/settings.local.json) - 項目設置(
.claude/settings.json) - 用戶設置(
~/.claude/settings.json)
agents、allowedTools 和 settings)覆蓋用戶、項目和本地文件系統設置。託管策略設置優先於編程選項。
PermissionMode
CanUseTool
用於控制工具使用的自定義權限函數類型。
| 選項 | 類型 | 描述 |
|---|---|---|
signal | AbortSignal | 如果應中止操作則發出信號 |
suggestions | PermissionUpdate[] | 建議的權限更新,以便用戶不會再次被提示此工具。Bash 提示包括帶有 localSettings 目標 的建議,因此在 updatedPermissions 中返回它會將規則寫入 .claude/settings.local.json 並在會話中持久化。 |
blockedPath | string | 觸發權限請求的文件路徑(如果適用) |
decisionReason | string | 解釋為什麼觸發此權限請求 |
toolUseID | string | 此特定工具調用在助手消息中的唯一標識符 |
agentID | string | 如果在子代理中運行,子代理的 ID |
PermissionResult
權限檢查的結果。
ToolConfig
內置工具行為的配置。
| 字段 | 類型 | 描述 |
|---|---|---|
askUserQuestion.previewFormat | 'markdown' | 'html' | 選擇進入 AskUserQuestion 選項上的 preview 字段並設置其內容格式。未設置時,Claude 不發出預覽 |
McpServerConfig
MCP 服務器的配置。
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
McpSdkServerConfigWithInstance
McpClaudeAIProxyServerConfig
SdkPluginConfig
SDK 中加載 plugins 的配置。
| 字段 | 類型 | 描述 |
|---|---|---|
type | 'local' | 必須是 'local'(目前僅支持本地 plugins) |
path | string | 插件目錄的絕對或相對路徑 |
消息類型
SDKMessage
查詢返回的所有可能消息的聯合類型。
SDKAssistantMessage
助手響應消息。
message 字段是來自 Anthropic SDK 的 BetaMessage。它包括 id、content、model、stop_reason 和 usage 等字段。
SDKAssistantMessageError 是以下之一:'authentication_failed'、'oauth_org_not_allowed'、'billing_error'、'rate_limit'、'overloaded'、'invalid_request'、'model_not_found'、'server_error'、'max_output_tokens' 或 'unknown'。'model_not_found' 表示選定的模型不存在或對您的帳戶或部署不可用。'overloaded' 表示 API 返回了 529,因為伺服器已滿載,與 'rate_limit' 相對,後者是針對您配額的 429。
SDKUserMessage
用戶輸入消息。
shouldQuery 設置為 false 以將消息附加到記錄而不觸發助手轉數。消息被保留並合併到下一個觸發轉數的用戶消息中。使用此方法注入上下文,例如您在帶外運行的命令的輸出,而無需在其上花費模型調用。
SDKUserMessageReplay
帶有必需 UUID 的重放用戶消息。
SDKResultMessage
最終結果消息。
subtype 之外還攜帶診斷詳細信息:
api_error_status:終止對話的 API 錯誤的 HTTP 狀態碼。當轉數在沒有 API 錯誤的情況下結束時,不存在或為null。ttft_ms:首個令牌的時間(毫秒)。僅在成功分支上出現。terminal_reason:循環結束的原因。為"completed"、"max_turns"、"tool_deferred"、"aborted_streaming"、"aborted_tools"、"hook_stopped"、"stop_hook_prevented"、"blocking_limit"、"rapid_refill_breaker"、"prompt_too_long"、"image_error"或"model_error"之一。fast_mode_state:為"on"、"off"或"cooldown"之一。
origin 字段轉發觸發此結果的用戶消息的 SDKMessageOrigin。當後台任務完成且 SDK 注入合成後續轉數時,生成的 SDKResultMessage 攜帶 origin: { kind: "task-notification" }。檢查此字段以區分回答您的提示的結果與為後台任務後續發出的結果,以便您可以路由或抑制後者。對於在任何用戶轉數之前發出的結果(例如啟動錯誤),該字段不存在。
當 PreToolUse hook 返回 permissionDecision: "defer" 時,結果具有 stop_reason: "tool_deferred" 和 deferred_tool_use 攜帶待處理工具的 id、name 和 input。讀取此字段以在您自己的 UI 中顯示請求,然後使用相同的 session_id 恢復以繼續。有關完整往返,請參閱稍後延遲工具調用。
SDKSystemMessage
系統初始化消息。
SDKPartialAssistantMessage
流式部分消息(僅當 includePartialMessages 為 true 時)。
SDKCompactBoundaryMessage
指示對話壓縮邊界的消息。
SDKPluginInstallMessage
插件安裝進度事件。當設置 CLAUDE_CODE_SYNC_PLUGIN_INSTALL 時發出,以便您的 Agent SDK 應用程序可以在第一個轉數之前跟蹤市場插件安裝。started 和 completed 狀態括起整體安裝。installed 和 failed 狀態報告單個市場並包括 name。
SDKPermissionDeniedMessage
當權限系統自動拒絕工具調用而不進行互動式提示時發出的流事件。使用它在發生時在您的 UI 中呈現拒絕,而不是僅觀察隨後的 is_error 工具結果。互動式詢問路徑通過 canUseTool 回調單獨到達您的應用程序。由 PreToolUse hook 發出的拒絕不會通過此事件報告。
此事件需要 Claude Code v2.1.136 或更高版本。
| 字段 | 類型 | 描述 |
|---|---|---|
tool_name | string | 被拒絕的工具的名稱 |
tool_use_id | string | 此拒絕回答的 tool_use 塊的 ID |
agent_id | string | 當被拒絕的調用源自子代理內部時的子代理 ID。鏡像 can_use_tool 上的字段以進行主機端路由 |
decision_reason_type | string | 決定組件的判別器,例如 "rule"、"mode"、"classifier" 或 "asyncAgent" |
decision_reason | string | 來自決定組件的人類可讀原因(如果可用) |
message | string | 在 tool_result 中返回給模型的拒絕消息 |
SDKPermissionDenial
有關被拒絕的工具使用的信息。
SDKMessageOrigin
用戶角色消息的來源。這在 SDKUserMessage 上顯示為 origin,並轉發到相應的 SDKResultMessage,以便您可以判斷給定轉數的觸發因素。
kind | 含義 |
|---|---|
human | 來自最終用戶的直接輸入。在用戶消息上,缺少的 origin 也表示人類輸入。 |
channel | 在頻道上到達的消息。server 是源 MCP 伺服器名稱。 |
peer | 來自另一個代理會話的消息,通過 SendMessage。from 是發送者地址;name 是發送者的顯示名稱(如果可用)。 |
task-notification | 後台任務完成後注入的合成轉數。請參閱 SDKTaskNotificationMessage。 |
coordinator | 來自代理團隊中的團隊協調員的消息。 |
Hook 類型
有關使用 hooks 的綜合指南,包括示例和常見模式,見 Hooks 指南。HookEvent
可用的 hook 事件。
HookCallback
Hook 回調函數類型。
HookCallbackMatcher
帶有可選匹配器的 Hook 配置。
HookInput
所有 hook 輸入類型的聯合類型。
BaseHookInput
所有 hook 輸入類型擴展的基本介面。
PreToolUseHookInput
PostToolUseHookInput
PostToolUseFailureHookInput
PostToolBatchHookInput
在批次中的每個工具呼叫都已解決後、下一個模型請求之前觸發一次。tool_response 攜帶序列化的 tool_result 內容,模型會看到;其形狀與 PostToolUseHookInput 的結構化 Output 物件不同。
NotificationHookInput
UserPromptSubmitHookInput
SessionStartHookInput
SessionEndHookInput
StopHookInput
SubagentStartHookInput
SubagentStopHookInput
PreCompactHookInput
PermissionRequestHookInput
SetupHookInput
TeammateIdleHookInput
TaskCompletedHookInput
ConfigChangeHookInput
WorktreeCreateHookInput
WorktreeRemoveHookInput
MessageDisplayHookInput
HookJSONOutput
Hook 返回值。
AsyncHookJSONOutput
SyncHookJSONOutput
工具輸入類型
所有內置 Claude Code 工具的輸入架構文檔。這些類型從@anthropic-ai/claude-agent-sdk 導出,可用於類型安全的工具交互。
ToolInputSchemas
所有工具輸入類型的聯合,從 @anthropic-ai/claude-agent-sdk 導出。
Agent
工具名稱:Agent(之前是 Task,仍然接受作為別名)
AskUserQuestion
工具名稱:AskUserQuestion
Bash
工具名稱:Bash
Monitor
工具名稱:Monitor
persistent: true。Monitor 遵循與 Bash 相同的權限規則。見 Monitor 工具參考 了解行為和提供商可用性。
TaskOutput
工具名稱:TaskOutput
Edit
工具名稱:Edit
Read
工具名稱:Read
pages(例如,"1-5")。
Write
工具名稱:Write
Glob
工具名稱:Glob
Grep
工具名稱:Grep
TaskStop
工具名稱:TaskStop
NotebookEdit
工具名稱:NotebookEdit
WebFetch
工具名稱:WebFetch
WebSearch
工具名稱:WebSearch
Workflow
工具名稱:Workflow
Workflow 工具在 Agent SDK v0.3.149 及更高版本中可用。至少需要 script、name 或 scriptPath 之一。
| 字段 | 類型 | 描述 |
|---|---|---|
script | string | 內聯工作流腳本。必須以 export const meta = { name, description, phases } 作為字面量開始,然後是使用 agent()、parallel()、pipeline() 和 phase() 的腳本主體 |
name | string | 內置工作流的名稱或保存在 .claude/workflows/ 中的工作流名稱。解析為腳本 |
scriptPath | string | 磁盤上工作流腳本文件的路徑。優先於 script 和 name。每次調用都會持久化其腳本並在結果中返回路徑,因此您可以編輯該文件並使用相同的 scriptPath 重新調用以進行迭代 |
args | unknown | 輸入值,作為全局 args 暴露給腳本,用於參數化的命名工作流,例如研究問題或文件路徑列表。將數組和對象作為實際 JSON 值傳遞,而不是作為 JSON 編碼的字符串 |
resumeFromRunId | string | 先前 Workflow 調用的運行 ID 以恢復。具有未更改輸入的已完成 agent() 調用返回緩存結果;只有更改或新調用才會實時運行。僅限同一會話 |
TodoWrite
工具名稱:TodoWrite
自 TypeScript Agent SDK 0.3.142 起,
TodoWrite 預設為禁用。改用 TaskCreate、TaskGet、TaskUpdate 和 TaskList。見 遷移到 Task 工具 更新您的監視代碼,或設置 CLAUDE_CODE_ENABLE_TASKS=0 以恢復為 TodoWrite。TaskCreate
工具名稱:TaskCreate
TaskUpdate
工具名稱:TaskUpdate
status 設置為 "deleted" 以移除它。
TaskGet
工具名稱:TaskGet
null。
TaskList
工具名稱:TaskList
ExitPlanMode
工具名稱:ExitPlanMode
ListMcpResources
工具名稱:ListMcpResourcesTool
ReadMcpResource
工具名稱:ReadMcpResourceTool
EnterWorktree
工具名稱:EnterWorktree
path 以切換到當前存儲庫的現有 worktree,而不是創建新的。name 和 path 互斥。
工具輸出類型
所有內置 Claude Code 工具的輸出架構文檔。這些類型從@anthropic-ai/claude-agent-sdk 導出,代表每個工具返回的實際響應數據。
ToolOutputSchemas
所有工具輸出類型的聯合。
Agent
工具名稱:Agent(之前是 Task,仍然接受作為別名)
status 字段上區分:"completed" 用於已完成的任務,"async_launched" 用於後台任務,"sub_agent_entered" 用於交互式子代理。
AskUserQuestion
工具名稱:AskUserQuestion
response 被設置;當存在時,Claude 會收到「用戶回應:…」而不是每個問題的答案列表。
Bash
工具名稱:Bash
backgroundTaskId。
Monitor
工具名稱:Monitor
TaskStop 一起提前取消監視。
Edit
工具名稱:Edit
Read
工具名稱:Read
type 字段上區分。
Write
工具名稱:Write
Glob
工具名稱:Glob
Grep
工具名稱:Grep
mode 而異:文件列表、帶匹配的內容或匹配計數。
TaskStop
工具名稱:TaskStop
NotebookEdit
工具名稱:NotebookEdit
WebFetch
工具名稱:WebFetch
WebSearch
工具名稱:WebSearch
Workflow
工具名稱:Workflow
error:失敗語法檢查的腳本返回 status: "async_launched" 並設置 error,並且永遠不會運行。
| 字段 | 類型 | 描述 |
|---|---|---|
status | "async_launched" | 工具接受了調用。這是該字段採用的唯一值 |
taskId | string | 運行的後台任務標識符 |
runId | string | 工作流運行標識符,用於在稍後調用時作為 resumeFromRunId 傳遞 |
summary | string | 工作流功能的單行描述 |
transcriptDir | string | 執行期間寫入子代理轉錄的目錄 |
scriptPath | string | 此運行的持久化工作流腳本的路徑。編輯它並作為 scriptPath 傳回以重新運行而無需重新發送腳本 |
error | string | 當腳本失敗其語法檢查時設置。存在時,儘管 async_launched 狀態,運行未啟動 |
TodoWrite
工具名稱:TodoWrite
自 TypeScript Agent SDK 0.3.142 起,
TodoWrite 預設為禁用。改用 TaskCreate、TaskGet、TaskUpdate 和 TaskList。請參閱遷移到 Task 工具以更新您的監視代碼,或設置 CLAUDE_CODE_ENABLE_TASKS=0 以恢復為 TodoWrite。TaskCreate
工具名稱:TaskCreate
TaskUpdate
工具名稱:TaskUpdate
TaskGet
工具名稱:TaskGet
null。
TaskList
工具名稱:TaskList
ExitPlanMode
工具名稱:ExitPlanMode
ListMcpResources
工具名稱:ListMcpResourcesTool
ReadMcpResource
工具名稱:ReadMcpResourceTool
EnterWorktree
工具名稱:EnterWorktree
權限類型
PermissionUpdate
用於更新權限的操作。
PermissionBehavior
PermissionUpdateDestination
PermissionRuleValue
其他類型
ApiKeySource
SdkBeta
可通過 betas 選項啟用的可用測試功能。見 Beta 標頭 了解更多信息。
SlashCommand
有關可用 slash command 的信息。
ModelInfo
有關可用模型的信息。
AgentInfo
有關可通過 Agent 工具調用的可用子代理的信息。
| 字段 | 類型 | 描述 |
|---|---|---|
name | string | 代理類型標識符(例如,"Explore"、"general-purpose") |
description | string | 何時使用此代理的描述 |
model | string | undefined | 此代理使用的模型別名。如果省略,繼承父代理的模型 |
McpServerStatus
連接的 MCP 服務器的狀態。
McpServerStatusConfig
MCP 服務器的配置,如 mcpServerStatus() 報告的那樣。這是所有 MCP 服務器傳輸類型的聯合。
McpServerConfig 了解每種傳輸類型的詳情。
AccountInfo
經過身份驗證的用戶的帳戶信息。
ModelUsage
結果消息中返回的每個模型使用統計。costUSD 值是客戶端估計。見 跟蹤成本和使用情況 了解計費注意事項。
ConfigScope
NonNullableUsage
Usage 的版本,所有可空字段都變為非可空。
Usage
令牌使用統計。這是來自 @anthropic-ai/sdk 的 BetaUsage 類型。
BetaServerToolUsage 和 BetaIterationsUsage 在 @anthropic-ai/sdk 中定義。
CallToolResult
MCP 工具結果類型(來自 @modelcontextprotocol/sdk/types.js)。structuredContent 是一個 JSON 對象,可以與 content 一起返回,包括圖像塊。見 返回結構化數據。
ThinkingConfig
控制 Claude 的思考/推理行為。優先於已棄用的 maxThinkingTokens。
display 字段控制思考文本是否返回為 "summarized" 或 "omitted"。在 Claude Opus 4.7 及更高版本上,API 默認值為 "omitted",因此設置 "summarized" 以在 thinking 塊中接收思考內容。
SpawnedProcess
自定義進程生成的介面(與 spawnClaudeCodeProcess 選項一起使用)。ChildProcess 已滿足此介面。
SpawnOptions
傳遞給自定義生成函數的選項。
signal 字段告訴您的生成函數何時拆除進程。將其作為 signal 選項傳遞給 Node 的 spawn(),或將其傳遞給您的 VM 或容器拆除處理程序。此信號不會在 Options.abortController 中止的瞬間觸發。SDK 首先關閉進程的 stdin 並等待約兩秒,以便 CLI 可以乾淨地關閉,然後中止此信號。要在調用者中止的瞬間做出反應,請改為監聽您自己的 Options.abortController.signal,您的生成函數可以從其封閉範圍引用。McpSetServersResult
setMcpServers() 操作的結果。
RewindFilesResult
rewindFiles() 操作的結果。
SDKStatusMessage
狀態更新消息(例如,壓縮)。
SDKTaskNotificationMessage
後台任務完成、失敗或停止時的通知。後台任務包括 run_in_background Bash 命令、Monitor 監視和後台子代理。
SDKToolUseSummaryMessage
對話中工具使用的摘要。
SDKHookStartedMessage
Hook 開始執行時發出。
SDKHookProgressMessage
Hook 運行時發出,帶有 stdout/stderr 輸出。
SDKHookResponseMessage
Hook 完成執行時發出。
SDKToolProgressMessage
工具執行時定期發出,以指示進度。
SDKAuthStatusMessage
在身份驗證流程中發出。
SDKTaskStartedMessage
後台任務開始時發出。task_type 字段是 "local_bash" 用於後台 Bash 命令和 Monitor 監視,"local_agent" 用於子代理,或 "remote_agent"。
SDKTaskProgressMessage
子代理或後台任務運行時定期發出。summary 字段僅在啟用 agentProgressSummaries 時填充。
SDKTaskUpdatedMessage
後台任務的狀態發生變化時發出,例如當它從 running 轉換為 completed 時。將 patch 合併到按 task_id 鍵入的本地任務映射中。end_time 字段是 Unix 紀元時間戳(以毫秒為單位),可與 Date.now() 比較。
SDKFilesPersistedEvent
文件檢查點持久化到磁盤時發出。
SDKRateLimitEvent
會話遇到速率限制時發出。
SDKLocalCommandOutputMessage
本地 slash command 的輸出(例如,/voice 或 /usage)。在記錄中顯示為助手風格的文本。
SDKCommandsChangedMessage
可用命令集在會話中期發生變化時發出,例如當代理進入子目錄時發現技能。commands 陣列是完整的更新列表,因此用此有效負載替換任何緩存的命令列表。再次調用 supportedCommands() 不等同:該方法返回在初始化時捕獲的快照,不反映會話中期的變化。
SDKPromptSuggestionMessage
啟用 promptSuggestions 時在每個轉數後發出。包含預測的下一個用戶提示。
AbortError
中止操作的自定義錯誤類。
沙箱配置
SandboxSettings
沙箱行為的配置。使用此選項以編程方式啟用命令沙箱和配置網絡限制。
| 屬性 | 類型 | 默認值 | 描述 |
|---|---|---|---|
enabled | boolean | false | 為命令執行啟用沙箱模式 |
failIfUnavailable | boolean | true | 如果 enabled 為 true 但沙箱無法啟動,則在啟動時停止。設置為 false 以回退到無沙箱執行,並在 stderr 上顯示警告 |
autoAllowBashIfSandboxed | boolean | true | 啟用沙箱時自動批准 bash 命令 |
excludedCommands | string[] | [] | 始終繞過沙箱限制的命令(例如,['docker'])。這些自動運行在沙箱外,無需模型參與 |
allowUnsandboxedCommands | boolean | true | 允許模型請求在沙箱外運行命令。當為 true 時,模型可以在工具輸入中設置 dangerouslyDisableSandbox,這會回退到 權限系統 |
network | SandboxNetworkConfig | undefined | 網絡特定的沙箱配置 |
filesystem | SandboxFilesystemConfig | undefined | 文件系統特定的沙箱配置,用於讀/寫限制 |
ignoreViolations | Record<string, string[]> | undefined | 違規類別到要忽略的模式的映射(例如,{ file: ['/tmp/*'], network: ['localhost'] }) |
enableWeakerNestedSandbox | boolean | false | 為兼容性啟用較弱的嵌套沙箱 |
ripgrep | { command: string; args?: string[] } | undefined | 沙箱環境中的自定義 ripgrep 二進制配置 |
沙箱取決於平台支持,在 Linux 上,還需要
bubblewrap 和 socat 等工具。當 enabled 為 true 且沙箱無法啟動時,query() 會報告一條 result 消息,其中 subtype: "error_during_execution",並在 errors 中包含原因,然後停止。應監視該子類型,而不是期望 query() 在產生消息之前拋出異常。要改為運行無沙箱,請設置 failIfUnavailable: false。示例用法
SandboxNetworkConfig
沙箱模式的網絡特定配置。這些設置適用於當父級 SandboxSettings 中的 enabled 為 true 時的沙箱化 Bash 命令。它們不限制 WebFetch 工具,該工具改用 權限規則。
| 屬性 | 類型 | 默認值 | 描述 |
|---|---|---|---|
allowedDomains | string[] | [] | 沙箱進程可以訪問的域名 |
deniedDomains | string[] | [] | 沙箱進程無法訪問的域名。優先於 allowedDomains |
allowManagedDomainsOnly | boolean | false | 僅限受管設置。在 受管設置 中設置時,僅遵守受管設置中的 allowedDomains 條目,而忽略來自用戶、項目或本地設置的條目。通過 SDK 選項設置時無效 |
allowLocalBinding | boolean | false | 允許進程綁定到本地端口(例如,用於開發服務器) |
allowUnixSockets | string[] | [] | 進程可以訪問的 Unix socket 路徑(例如,Docker socket) |
allowAllUnixSockets | boolean | false | 允許訪問所有 Unix sockets |
httpProxyPort | number | undefined | 網絡請求的 HTTP 代理端口 |
socksProxyPort | number | undefined | 網絡請求的 SOCKS 代理端口 |
SandboxFilesystemConfig
沙箱模式的文件系統特定配置。
| 屬性 | 類型 | 默認值 | 描述 |
|---|---|---|---|
allowWrite | string[] | [] | 允許寫入訪問的文件路徑模式 |
denyWrite | string[] | [] | 拒絕寫入訪問的文件路徑模式 |
denyRead | string[] | [] | 拒絕讀取訪問的文件路徑模式 |
無沙箱命令的權限回退
啟用allowUnsandboxedCommands 時,模型可以通過在工具輸入中設置 dangerouslyDisableSandbox: true 來請求在沙箱外運行命令。這些請求回退到現有的權限系統,意味著您的 canUseTool 處理程序被調用,允許您實現自定義授權邏輯。
excludedCommands vs allowUnsandboxedCommands:excludedCommands:始終自動繞過沙箱的命令的靜態列表(例如,['docker'])。模型對此無控制。allowUnsandboxedCommands:讓模型在運行時通過在工具輸入中設置dangerouslyDisableSandbox: true來決定是否請求無沙箱執行。
- 審計模型請求: 記錄模型何時請求無沙箱執行
- 實現允許列表: 僅允許特定命令在沙箱外運行
- 添加批准工作流: 需要對特權操作進行明確授權
另見
- SDK 概述 - 常規 SDK 概念
- Python SDK 參考 - Python SDK 文檔
- CLI 參考 - 命令行介面
- 常見工作流 - 分步指南