跳到主要内容

沙箱与审批

两个设置,干的是不同的事。 沙箱决定 agent 做什么;审批决定它做之前必须先问什么。

沙箱

sandbox_mode = "workspace-write"
agent 可以
read-only看文件,不能改
workspace-write在它的工作目录里写
danger-full-access你的账号能做的一切

读取在任何模式下都不受限制。 只有写入和网络访问受限,所以 read-only 意味着 agent 能看你整块硬盘,但一个字都改不了

可写根就是工作目录

workspace-write 下,「工作区」指的是对话或运行所在的那个目录。不是项目,不是 仓库 —— 就是那个目录

这是这一页最重要的一句话。 一次在你家目录里打开的运行,可以写 .sshDocumentsLibrary

这不是假设。 一个在部门出现之前建的定时任务带着家目录,已经那样跑了四十二次, 每一次都能够到这些地方,没人被问过,也没人说过什么。给新对话改默认值动不了它, 因为默认值不是追溯性的

所以有了第二道检查,在运行开始的那一刻。

一次后台运行可以从哪里开始

一次运行只有在目录是产品已知的那几种时,才允许开始:

  • 在工作区里
  • 在某个部门的目录里
  • 在你按名字授权过的地方

其他一律扣住,出现在派发面板的等你授权下,带一个「允许这个目录」按钮。授权一个 地方会放行所有在等它的运行。

问这一下就是重点:跑在一个不寻常的地方往往正是本意,而正确的回应是,不是拒绝。

审批

approval_policy = "on-failure"
untrusted所有不是已知安全的命令都先给你看
on-failure命令自己跑,需要更大权限时才问你
never执行前什么都不显示

never 同时意味着什么都不会被扣住。把审批关掉的人已经把话说明白了 —— 认定他们的意思其实更窄一点,是产品在推翻自己提供的设置

用在你愿意让脚本撒野的目录上。

会坑到人的那个组合

sandbox_mode = "danger-full-access"approval_policy = "never",是一个 在你机器上任意执行命令、什么都不显示、什么都不问的 agent

有些目录里这是对的答案。你的家目录不是其中之一。

沙箱不做的两件事

  • 它不阻止模型读你的文件。 任何模式下读取都不受限。
  • 它不管它启动的命令之后干了什么。 agent 启动的脚本继承沙箱;它启动的、活得比这次 运行还久的服务,不继承。