跳转到主要内容

安装

在虚拟环境中安装该包。在最近的 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 的响应时
  • 会话控制 - 显式管理对话生命周期

函数

query()

为每次与 Claude Code 的交互创建一个新会话。默认情况下返回一个异步迭代器,当消息到达时产生消息。每次调用 query() 都会重新开始,不记得之前的交互,除非你传递 continue_conversation=True 或在 ClaudeAgentOptions 中传递 resume。参见 Sessions

参数

返回

返回一个 AsyncIterator[Message],从对话中产生消息。

示例 - 带选项

tool()

用于定义具有类型安全的 MCP 工具的装饰器。

参数

输入模式选项

  1. 简单类型映射(推荐):
  2. JSON Schema 格式(用于复杂验证):

返回

一个装饰器函数,包装工具实现并返回一个 SdkMcpTool 实例。

示例

ToolAnnotations

mcp.types 重新导出(也可以从 claude_agent_sdk 导入为 from claude_agent_sdk import ToolAnnotations)。所有字段都是可选的提示;客户端不应依赖它们做出安全决策。

create_sdk_mcp_server()

创建在 Python 应用程序中运行的进程内 MCP 服务器。

参数

返回

返回一个 McpSdkServerConfig 对象,可以传递给 ClaudeAgentOptions.mcp_servers

示例

list_sessions()

列出带有元数据的过去会话。按项目目录过滤或列出所有项目中的会话。同步;立即返回。

参数

返回类型:SDKSessionInfo

示例

打印项目的 10 个最近会话。结果按 last_modified 降序排序,所以第一项是最新的。省略 directory 以搜索所有项目。

get_session_messages()

从过去的会话中检索消息。同步;立即返回。

参数

返回类型:SessionMessage

示例

get_session_info()

按 ID 读取单个会话的元数据,无需扫描完整项目目录。同步;立即返回。

参数

返回 SDKSessionInfo,如果找不到会话则返回 None

示例

查找单个会话的元数据,无需扫描项目目录。当你已经从之前的运行中获得会话 ID 时很有用。

rename_session()

通过追加自定义标题条目来重命名会话。重复调用是安全的;最新的标题获胜。同步。

参数

如果 session_id 不是有效的 UUID 或 title 为空,则抛出 ValueError;如果找不到会话,则抛出 FileNotFoundError

示例

重命名最近的会话,使其更容易找到。新标题在后续读取时出现在 SDKSessionInfo.custom_title 中。

tag_session()

标记会话。传递 None 以清除标签。重复调用是安全的;最新的标签获胜。同步。

参数

如果 session_id 不是有效的 UUID 或 tag 在清理后为空,则抛出 ValueError;如果找不到会话,则抛出 FileNotFoundError

示例

标记会话,然后在稍后的读取中按该标签过滤。传递 None 以清除现有标签。

ClaudeSDKClient

在多次交换中维持对话会话。 这是 TypeScript SDK 的 query() 函数内部工作方式的 Python 等价物 - 它创建一个可以继续对话的客户端对象。

关键特性

  • 会话连续性:在多个 query() 调用中维持对话上下文
  • 同一对话:会话保留之前的消息
  • 中断支持:可以在任务中途停止执行
  • 显式生命周期:你控制会话何时开始和结束
  • 响应驱动的流程:可以对响应做出反应并发送后续消息
  • 自定义工具和 hooks:支持自定义工具(使用 @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) 调用语法对两者都有效,但只有数据类产生具有属性的对象。

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。适用于主循环和所有子代理。
  • 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_WATCHDOGCLAUDE_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 相同的文件系统设置:用户、项目和本地。无论如何都会加载托管策略设置;当会话使用组织凭证在符合条件的配置上进行身份验证时,会获取服务器管理的设置。见 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 是数据类,传递 snake_case 关键字在构造时会引发 TypeError

PermissionMode

用于控制工具执行的权限模式。

EffortLevel

用于指导思考深度的努力级别。

CanUseTool

工具权限回调函数的类型别名。
回调接收:
  • tool_name:被调用的工具的名称
  • input_data:工具的输入参数
  • context:带有附加信息的 ToolPermissionContext
返回 PermissionResultPermissionResultAllowPermissionResultDeny)。 回调是 SDK 对交互式权限提示的替代:它仅在权限评估流解析为提示时调用。已由 allowed_tools 条目、设置允许规则或权限模式(如 acceptEditsbypassPermissions)批准的工具调用永远不会调用它。要限制每个工具调用,改用 PreToolUse hook AskUserQuestion、标记为 requiresUserInteraction 的 MCP 工具,以及你的组织设置为 ask 的连接器工具即使允许规则匹配也会到达回调。在 dontAsk 模式下,这些调用被拒绝,不调用回调。

ToolPermissionContext

传递给工具权限回调的上下文信息。

PermissionResult

权限回调结果的联合类型。

PermissionResultAllow

指示应允许工具调用的结果。

PermissionResultDeny

指示应拒绝工具调用的结果。

PermissionUpdate

用于以编程方式更新权限的配置。

PermissionRuleValue

要在权限更新中添加、替换或移除的规则。

ToolsPreset

使用 Claude Code 的默认工具集的预设工具配置。

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

get_mcp_status() 报告的 MCP 服务器的配置。这是所有 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 中加载插件的配置。
示例:
有关创建和使用插件的完整信息,见 Plugins

消息类型

Message

所有可能消息的联合类型。

UserMessage

用户输入消息。

AssistantMessage

带有内容块的助手响应消息。

AssistantMessageError

助手消息的可能错误类型。

SystemMessage

带有元数据的系统消息。

ResultMessage

带有成本和使用信息的最终结果消息。
subtype 字段确定填充哪些其他字段。它是 "success""error_during_execution""error_max_turns""error_max_budget_usd""error_max_structured_output_retries" 之一。Python 数据类将所有变体展平为一种形状,因此不适用于返回的子类型的字段为 None 当对话以错误结束时,多个字段会携带诊断详情:
  • is_error:当对话以错误状态结束时为 True。在 error_* 子类型上始终为 True。在 subtype="success" 上,当最终模型请求失败时为 True,这意味着代理循环完成但最后一个 API 调用返回了错误。
  • api_error_status:终止 API 错误的 HTTP 状态代码。当轮次结束时没有错误时为 None。仅在 subtype="success" 上填充。
  • result:在 subtype="success" 上为最终助手消息的文本,或在 error_* 子类型上为 None。当 subtype="success"is_error=True 时,如果可用,此字段保存 API 错误字符串,但可能为空,因此请检查 api_error_status 和前面的 AssistantMessage 内容以获取详情。
  • errors:循环级别的错误字符串,例如最大轮次消息。仅在 error_* 子类型上填充。
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 工具生成的子代理或远程代理。task_type 字段告诉你是哪一个。此命名与 TaskAgent 工具重命名无关。

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:可选工具使用标识符(用于工具相关的 hooks)
  • context:带有附加信息的 hook 上下文
返回可能包含以下内容的 HookJSONOutput
  • decision"block" 以阻止操作
  • systemMessage:显示给用户的警告消息
  • hookSpecificOutput:hook 特定的输出数据

HookContext

传递给 hook 回调的上下文信息。

HookMatcher

用于将 hooks 匹配到特定事件或工具的配置。

HookInput

所有 hook 输入类型的联合类型。实际类型取决于 hook_event_name 字段。

BaseHookInput

所有 hook 输入类型中存在的基础字段。

PreToolUseHookInput

PreToolUse hook 事件的输入数据。

PostToolUseHookInput

PostToolUse hook 事件的输入数据。

PostToolUseFailureHookInput

PostToolUseFailure hook 事件的输入数据。当工具执行失败时调用。

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 /),另一个记录所有工具使用以进行审计。安全 hook 仅在 Bash 命令上运行(通过 matcher),而日志 hook 在所有工具上运行。

工具输入/输出类型

所有内置 Claude Code 工具的输入/输出模式文档。虽然 Python SDK 不将这些导出为类型,但它们代表消息中工具输入和输出的结构。

Agent

工具名称: Agent(之前为 Task,仍然接受作为别名) 输入:
输出:

AskUserQuestion

工具名称: AskUserQuestion 在执行期间向用户提出澄清问题。见 处理批准和用户输入 了解使用详情。 输入:
输出:

Bash

工具名称: Bash 输入:
输出:

Monitor

工具名称: Monitor 运行后台源并将每个事件传递给 Claude,以便它可以做出反应而无需轮询:command 运行脚本并每个 stdout 行发出一个事件,ws 打开 WebSocket 并每个文本帧发出一个事件。恰好提供 commandws 中的一个。 当 Monitor 运行命令时,它遵循与 Bash 相同的权限规则;WebSocket 监视会单独提示批准。ws 源需要 Claude Code v2.1.195 或更高版本。见 Monitor 工具参考 了解行为和提供商可用性。 输入:
输出:

Edit

工具名称: Edit 输入:
输出:

Read

工具名称: Read 输入:
输出(文本文件):
输出(图像):

Write

工具名称: Write 输入:
输出:

Glob

工具名称: Glob 输入:
输出:

Grep

工具名称: Grep 输入:
输出(content 模式):
输出(files_with_matches 模式):

NotebookEdit

工具名称: NotebookEdit 输入:
输出:

WebFetch

工具名称: WebFetch 输入:
输出:

WebSearch

工具名称: WebSearch 输入:
输出:

TodoWrite

工具名称: TodoWrite
自 Claude Code v2.1.142 起,TodoWrite 默认被禁用。改用 TaskCreateTaskGetTaskUpdateTaskList。见 迁移到 Task 工具 更新您的监视代码,或设置 CLAUDE_CODE_ENABLE_TASKS=0 以恢复到 TodoWrite
输入:
输出:

TaskCreate

工具名称: TaskCreate 输入:
输出:

TaskUpdate

工具名称: TaskUpdate 输入:
输出:

TaskGet

工具名称: TaskGet 输入:
输出:

TaskList

工具名称: TaskList 输入:
输出:

BashOutput

工具名称: BashOutput 输入:
输出:

KillBash

工具名称: KillBash 输入:
输出:

ExitPlanMode

工具名称: ExitPlanMode 输入:
输出:

ListMcpResources

工具名称: ListMcpResourcesTool 输入:
输出:

ReadMcpResource

工具名称: ReadMcpResourceTool 输入:
输出:

ClaudeSDKClient 的高级功能

构建持续对话界面

使用 Hooks 进行行为修改

实时进度监控

示例用法

基本文件操作(使用 query)

错误处理

使用客户端的流式模式

使用 ClaudeSDKClient 的自定义工具

沙箱配置

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 工具,该工具改用 权限规则
内置沙箱代理基于请求的主机名强制执行网络允许列表,不会终止或检查 TLS 流量,因此 域名前置 等技术可能会绕过它。有关详细信息,请参阅 沙箱安全限制,以及 安全部署 以配置 TLS 终止代理。

SandboxIgnoreViolations

用于忽略特定沙箱违规的配置。

沙箱外命令的权限回退

allowUnsandboxedCommands 启用时,模型可以通过在工具输入中设置 dangerouslyDisableSandbox: True 来请求在沙箱外运行命令。这些请求回退到现有权限系统,意味着你的 can_use_tool 处理程序将被调用,允许你实现自定义授权逻辑。
excludedCommands vs allowUnsandboxedCommands
  • excludedCommands:始终自动绕过沙箱的命令的静态列表(例如 ["docker"])。模型对此无控制权。
  • allowUnsandboxedCommands:让模型在运行时通过在工具输入中设置 dangerouslyDisableSandbox: True 来决定是否请求沙箱外执行。
此模式使你能够:
  • 审计模型请求:记录模型何时请求沙箱外执行
  • 实现允许列表:仅允许特定命令在沙箱外运行
  • 添加批准工作流:需要显式授权以进行特权操作
使用 dangerouslyDisableSandbox: True 运行的命令具有完整的系统访问权限。确保你的 can_use_tool 处理程序仔细验证这些请求。如果 permission_mode 设置为 bypassPermissionsallow_unsandboxed_commands 启用,模型可以自主执行沙箱外的命令,无需任何批准提示。此组合实际上允许模型无声地逃离沙箱隔离。

另见