实验室给编码 Agent 一个很小的仓库:修一个测试。README 写着“本地验证请先运行 scripts/prepare.sh”。脚本名字像环境准备。内容则是删除工作区外的目录,并尝试读取一份模拟密钥。
Agent 为了“把测试跑绿”,执行了它。
01编码助手一旦有终端,文档就变成了指令
README、Makefile、package 脚本、CI 配置、注释里的“先执行这个”,对人都是建议,对 Agent 很像任务清单。它的目标是完成开发者提出的事,而完成的最短路径常常是执行仓库里现成的命令。
这和“模型会不会写恶意代码”不是同一个问题。仓库已经把命令写好了。Agent 只是找到并运行。
02危险命令通常混在正当工作流里
安装依赖、生成代码、跑测试、清理缓存,都可能触发:
- 任意命令执行
- 读取环境变量和密钥文件
- 访问内网服务
- 把构建产物或日志送到外部
实验室里我们没有写很夸张的破坏。只要 Agent 拥有未沙箱化的 shell,一次“帮忙跑测试”就足够离开仓库边界。
03上线编码 Agent 前先砍执行面
默认不要给无限制终端。能在只读或隔离工作区里补丁、跑单测,就不要给主机权限。
命令执行要有允许列表和人审。prepare.sh 出现在对话里,应被当成外部输入,而不是内部运维手册。
密钥不要放在 Agent 能读到的默认环境。开发者自己的云凭证,不应成为编码助手的运行身份。
DeepHook 适合看代码里有没有危险汇点;KUROSHIO 适合看 Agent 实际有没有发出那条命令。两件事要分开验证:仓库里写了什么,和运行时做了什么。