让 Agent 只动一个文件的承诺可验证:OS 级边界强制
给编码 agent 派活的人都会面对一个别扭的前提:你让它只动一个文件,它告诉你只动了一个文件。也许确实动了。但你读到的这份报告,来自你正要验证的那个进程。
作者构建的 Orvena 承诺比"agent 表现良好"更窄:你声明一个任务的范围——哪些文件、多少步预算——它在 OS 层强制,而不是 prompt 层。区别是全部要点:prompt 是一个模型可能误读、遗忘、或在"想帮忙"时悄悄越过的请求;而被拒绝的 syscall 不是请求——在边界内,agent 没有别的解读方式。边界本身就是文件系统,不是 agent 能触达的一切:受控 agent 仍能通过自己的网络连模型提供商,那段流量不在盒子里。目前验证的是 macOS;Linux 强制需要启用 Landlock 的内核,测试套件会响亮地报告"不支持"而不是报一个无法支撑的通过。
连自己的话也不信:一个没有模型的对抗者
作者没直接相信自己的这个说法,于是构建了一个没有模型的对战者:十四种逃逸方式——路径遍历、symlink 出界、后台进程、exec 进新 shell——每种跑两遍。一遍不加限制,它必须成功,这样"因为自身原因失败的技巧"永远不会被误当成"被沙箱拦住";一遍受限,它必须失败且不留痕迹。同时跑一个阳性对照,因为一个连正经活都一起挡下的沙箱会通过所有围堵测试却毫无意义。
真实问题:同一任务,管与不管
然后跑真正的问题:同一任务、同一模型、同一 agent,一次无治理、一次有治理,直接读差异而不是断言差异。这是单机上一个本地模型的、自托管的单一信号——不足以支撑一篇基准论文——但它是真实数字,报告里不含 transcript 也不含 prompt,只有那次运行实际做的事。诚实的注脚:产出它的那次运行几乎没被攻击,每条被记录的越界都是同一件小事、且只发生在无治理那条腿——那轮没人对治理腿试过 redirect、symlink 或 rename。干净数字来自一场安静的战斗,与来自一场真战斗不是同一个说法。
定位
Orvena 不写更好的代码,它甚至不写代码。它做的是把"agent 说它待在范围内"变成一件不必听 agent 自说自话的事——与 org schema 是同一个动作,瞄准的是不同的边界:前者让"什么算合法组织"可检查,后者让 agent 对自己工作的陈述可检查。
实践建议
- 给 agent 下任务时把范围写进可执行声明(文件集合 + 步数预算),而不是指望 prompt 里的"只改这一个文件";
- 验证 agent 越界行为要带阳性对照与无治理基线,否则"没被抓住"和"本来就抓不住"无法区分;
- macOS 可即刻用,Linux 部署先确认内核有 Landlock 再谈落地。
来源:The Agent Says It Only Touched One File. Here's How I Made That Provable. - DEV Community