沙箱与审批
两个设置,干的是不同的事。 沙箱决定 agent 能做什么;审批决定它做之前必须先问什么。
沙箱
sandbox_mode = "workspace-write"
| agent 可以 | |
|---|---|
read-only | 看文件,不能改 |
workspace-write | 在它的工作目录里写 |
danger-full-access | 你的账号能做的一切 |
读取在任何模式下都不受限制。 只有写入和网络访问受限,所以 read-only 意味着
agent 能看你整块硬盘,但一个字都改不了。
可写根就是工作目录
在 workspace-write 下,「工作区」指的是对话或运行所在的那个目录。不是项目,不是
仓库 —— 就是那个目录。
这是这一页最重要的一句话。 一次在你家目录里打开的运行,可以写 .ssh、Documents
和 Library。
这不是假设。 一个在部门出现之前建的定时任务带着家目录,已经那样跑了四十二次, 每一次都能够到这些地方,没人被问过,也没人说过什么。给新对话改默认值动不了它, 因为默认值不是追溯性的。
所以有了第二道检查,在运行开始的那一刻。
一次后台运行可以从哪里开始
一次运行只有在目录是产品已知的那几种时,才允许开始:
- 在工作区里
- 在某个部门的目录里
- 在你按名字授权过的地方
其他一律扣住,出现在派发面板的等你授权下,带一个「允许这个目录」按钮。授权一个 地方会放行所有在等它的运行。
问这一下就是重点:跑在一个不寻常的地方往往正是本意,而正确的回应是问,不是拒绝。
审批
approval_policy = "on-failure"
untrusted | 所有不是已知安全的命令都先给你看 |
on-failure | 命令自己跑,需要更大权限时才问你 |
never | 执行前什么都不显示 |
never 同时意味着什么都不会被扣住。把审批关掉的人已经把话说明白了 ——
认定他们的意思其实更窄一点,是产品在推翻自己提供的设置。
用在你愿意让脚本撒野的目录上。
会坑到人的那个组合
sandbox_mode = "danger-full-access" 配 approval_policy = "never",是一个
在你机器上任意执行命令、什么都不显示、什么都不问的 agent。
有些目录里这是对的答案。你的家目录不是其中之一。
沙箱不做的两件事
- 它不阻止模型读你的文件。 任何模式下读取都不受限。
- 它不管它启动的命令之后干了什么。 agent 启动的脚本继承沙箱;它启动的、活得比这次 运行还久的服务,不继承。