Sandbox 应该属于 Harness 还是 Runtime?
这个问题看起来像架构洁癖。
其实不是。
你把 Sandbox 放错位置,后面权限、审批、恢复、trace 都会跟着乱。
我的答案是:
Sandbox 的执行环境属于 Harness。
Sandbox 的策略决策属于 Runtime。
这两句话要同时成立。
先把三个词分开
Agent Runtime 负责一次 run 的执行治理:
上下文
模型调用
工具计划
权限审批
预算
trace
checkpoint
停止条件
Harness 负责把 Agent 放进一个可运行的外壳里:
工作目录
进程启动
文件挂载
网络配置
环境变量
容器 / VM / microVM
终端 IO
资源限制
Sandbox 是 Harness 提供的一类执行边界:
哪些文件能读写
能不能联网
能不能启动子进程
环境变量是否过滤
能不能访问宿主系统
运行结束后是否销毁
所以 Sandbox 不是一个纯业务模块。
它要落到操作系统、容器、网络、文件系统和进程隔离上。
但 Sandbox 也不是单纯基础设施。
因为'给这个 run 多大权限',必须由 Runtime 根据任务、工具风险、用户审批和 policy 决定。
为什么说执行环境在 Harness
Runtime 不应该自己假装能隔离系统调用。
真正的隔离要靠底层:
macOS Seatbelt
Linux namespace / seccomp / bubblewrap
Windows restricted user / job object / firewall
container
microVM
remote sandbox
OpenAI 的 Codex 安全文档把 sandbox 和 approval 分开讲:sandbox 定义技术执行边界,比如能写哪里、是否能联网、哪些路径受保护;approval policy 决定什么时候要问用户。Anthropic 在 Claude Code sandbox 文章里也强调文件系统和网络隔离要一起做,否则只隔一边很容易被绕过。
这说明一件事:
Sandbox 的硬边界必须由运行环境提供。
靠 prompt 不行。
靠模型自觉不行。
靠工具函数里写几行 if 也不够。
工具函数可以做第一层防护,但它拦不住进程逃逸、依赖脚本、恶意测试、子进程读取环境变量。
所以 Harness 必须能创建和管理执行环境。
为什么说策略决策在 Runtime
但 Harness 不应该独自决定所有权限。
Harness 知道'我能提供哪些隔离级别'。
Runtime 知道'这次 run 需要哪些能力,以及哪些能力被允许'。
比如用户说:
帮我修复测试。
Runtime 会看到:
当前工具计划:read_file, write_file, npm test
风险:读、写、shell
用户策略:允许 workspace 内写入,禁止联网
预算:最多 8 step
checkpoint:写文件前必须保存 snapshot
然后 Runtime 请求 Harness:
启动 sandbox
挂载 workspace
允许 workspace 内读写
禁止网络
过滤敏感环境变量
允许 npm test
限制超时和输出
如果 Harness 自己决定'这个工具能不能跑',它缺少上下文。
如果 Runtime 自己直接跑命令,不走 Harness,它缺少硬隔离。
两者都不完整。
Permission 不是 Sandbox
很多人会把 permission 和 sandbox 混在一起。

