生成模型 :Claude Opus 4.6 (anthropic/claude-opus-4-6) Token 消耗 :输入 ~310k tokens,输出 ~5k tokens(本节)
在多代理架构中,不同 Agent 的能力和权限应当有所区分。一个负责代码执行的 Agent 需要文件读写和 shell 工具,但不应该有权限操控浏览器或发送消息到通道。OpenClaw 通过沙箱工具策略 (Sandbox Tool Policy)实现了这种精细的工具级隔离。
衍生解释:最小权限原则 最小权限原则(Principle of Least Privilege)是计算机安全的基本原则之一。它要求每个模块只拥有完成其任务所必需的最小权限集合。在 AI Agent 场景中,这意味着子代理不应该获得超出其任务所需的工具访问权限——一个只需要读文件的 Agent 不应该拥有执行 shell 命令的能力。
sandbox/constants.ts 定义了沙箱环境中的工具白名单和黑名单:
Copy // src/agents/sandbox/constants.ts
export const DEFAULT_TOOL_ALLOW = [
" exec " , // Shell 命令执行
" process " , // 进程管理
" read " , // 文件读取
" write " , // 文件写入
" edit " , // 文件编辑
" apply_patch " , // 补丁应用
" image " , // 图像处理
" sessions_list " , // 列出会话
" sessions_history " , // 查看会话历史
" sessions_send " , // 向会话发送消息
" sessions_spawn " , // 派生子代理
" session_status " , // 查看会话状态
] as const ;
export const DEFAULT_TOOL_DENY = [
" browser " , // 浏览器自动化
" canvas " , // Canvas/A2UI
" nodes " , // 设备节点控制
" cron " , // 定时任务
" gateway " , // Gateway 管理
... CHANNEL_IDS , // 所有消息通道(telegram, discord, slack...)
] as const ; 白名单设计体现了"执行能力开放,通信能力封闭 "的安全哲学:
read, write, edit, apply_patch
注意 CHANNEL_IDS 是从通道注册表动态展开的,这意味着每个已注册的消息通道都会自动被加入黑名单——即使未来添加新通道也不需要手动更新。
tool-policy.ts 实现了三级优先级的策略解析:
策略解析的优先级链:
返回的 SandboxToolPolicyResolved 中包含 sources 字段,记录了每条策略的来源("agent" / "global" / "default"),便于调试和审计。
image 工具享有特殊待遇:除非在黑名单中被显式禁止,否则即使白名单中未列出,也会被自动添加。这是因为多模态交互(如截图分析、图像生成)已经成为 AI Agent 的基础能力。
工具名称的匹配支持精确匹配和通配符模式:
匹配算法遵循黑名单优先 原则:
通配符 * 被转换为正则表达式中的 .*。例如,"sessions_*" 会匹配 sessions_list、sessions_spawn 等所有以 sessions_ 开头的工具。
每个 Agent 的沙箱配置通过 resolveSandboxConfigForAgent() 解析:
沙箱配置的关键维度:
"off" / "auto" / "always"
"agent" / "session" / "shared"
"none" / "readonly" / "readwrite"
scope 决定了 Docker 容器的生命周期:
"agent" :每个 Agent 共享一个容器。容器随 Agent 的首次使用创建,空闲后回收。
"session" :每个会话创建独立容器。最高隔离度,但资源消耗最大。
"shared" :所有 Agent 共享一个全局容器。资源消耗最低,但无隔离。
resolveSandboxDockerConfig() 解析 Docker 容器的安全参数:
默认的安全配置非常严格:
衍生解释:Linux Capabilities Linux Capabilities 是将传统的 root 超级权限拆分成多个细粒度权限的机制。例如,CAP_NET_ADMIN 允许配置网络,CAP_SYS_PTRACE 允许调试进程。capDrop: ["ALL"] 表示丢弃所有这些能力,容器内的进程即使以 root 身份运行,也几乎没有特权操作的能力。
对于需要浏览器能力的 Agent,OpenClaw 提供了独立的浏览器沙箱:
浏览器沙箱使用专门的 Docker 镜像(openclaw-sandbox-browser:bookworm-slim),内置 Chromium 浏览器和 VNC 服务器。Agent 通过 CDP(Chrome DevTools Protocol)远程控制容器内的浏览器,而管理员可以通过 noVNC 的 Web 界面实时观察 Agent 的浏览器操作。
沙箱容器的清理通过 resolveSandboxPruneConfig() 配置:
这两个参数共同确保沙箱容器不会无限占用系统资源。
沙箱的运行状态持久化在 ~/.openclaw/sandbox/ 目录下:
containers.json 记录所有活跃的沙箱容器信息(容器 ID、创建时间、关联的 Agent 等),browsers.json 记录浏览器沙箱的对应关系。
以下展示一个多代理沙箱配置的完整示例:
在这个配置中:
main Agent 直接在宿主运行,拥有完整权限
coder Agent 在 Docker 沙箱中运行,每个会话一个容器,有网络访问和 2GB 内存限制,但不能派生子代理
browser-agent 在浏览器沙箱中运行,只能使用浏览器和文件读取工具,不能执行命令或写入文件
这种配置实现了纵深防御 ——即使 AI Agent 被恶意指令诱导,它能造成的损害也被严格限制在其沙箱边界内。
默认工具策略 遵循"执行能力开放、通信能力封闭"原则:允许文件和进程操作,禁止浏览器、通道、定时任务等。
三级优先级 策略解析:Agent 级 > 全局 > 默认常量,每级都记录来源便于审计。
黑名单优先 的匹配算法:deny 优先于 allow,支持 * 通配符匹配。
image 工具特殊保护 :除非显式禁止,否则自动加入白名单,保障多模态基础能力。
沙箱容器安全默认值 极为严格:只读根文件系统、无网络、丢弃所有 Linux 能力。
三种容器范围 :agent(Agent 共享)、session(会话隔离)、shared(全局共享),平衡隔离度与资源消耗。
浏览器沙箱 使用独立镜像,通过 CDP 控制 + VNC 观察,实现浏览器操作的安全隔离。
容器生命周期管理 :24 小时空闲停止 + 7 天强制清除,防止资源泄漏。