YOLO mode 让 AI Agent 在执行命令、修改文件或调用外部服务时不再逐次请求许可。它能明显减少交互中断,但也会把“错误建议”升级成“已经发生的操作”。真正的问题不是 Agent 能否自主运行,而是它获得了哪些权限、影响范围有多大,以及失败后能否恢复。
从自动确认到真实执行
普通 Agent 工作流通常把高风险动作停在审批点,例如执行 shell 命令、删除文件、发送 HTTP 请求或提交代码。YOLO 模式跳过这些确认,使 Agent 可以连续完成规划、执行、观察和修正。
这对批量重构、测试修复和临时环境初始化很有用,但必须区分两种能力:
- 自主决策:Agent 可以自行选择下一步操作。
- 无限权限:Agent 可以访问宿主机、密钥、生产环境和任意网络资源。
前者可能提高效率,后者通常没有必要。安全运行 YOLO 模式的核心,是保留自主决策,同时通过系统边界限制执行能力。
风险不只来自 rm -rf
破坏文件是最直观的风险,但实际使用中还要关注更隐蔽的后果:
- 范围扩大:Agent 原本只需修改一个项目,却扫描或改写了整个主目录。
- 凭据泄露:环境变量、云端配置、SSH 密钥或 Git 凭据可能被读取并发送到外部服务。
- 提示注入:仓库文档、Issue 内容或网页文本可能包含诱导 Agent 执行危险动作的指令。
- 资源失控:循环调用模型、云 API 或构建任务会持续消耗费用和计算资源。
- 不可逆副作用:发送消息、发布软件包、合并代码和修改生产数据不能靠 Git 回滚完全恢复。
因此,“Agent 在容器里运行”只是起点。如果容器挂载了 Docker socket、宿主机根目录或生产凭据,它仍可能越过隔离边界。
可以这样实践:在受限容器中运行
下面是一个可复制的沙箱启动脚本。假设本机已安装 Docker,并且你的 Agent 有可用的容器镜像。运行前需要把 AGENT_IMAGE 改成实际镜像;脚本默认禁用网络,只把指定工作目录以可写方式挂载到容器中。
#!/usr/bin/env bash
set -euo pipefail
if [ "$#" -eq 0 ]; then
echo "Usage: AGENT_IMAGE=image ./run-agent-sandbox.sh <command> [args...]" >&2
exit 64
fi
workspace="${AGENT_WORKSPACE:-$PWD/agent-workspace}"
image="${AGENT_IMAGE:-alpine:3.20}"
mkdir -p "$workspace"
docker run --rm -it \
--network none \
--read-only \
--cap-drop ALL \
--security-opt no-new-privileges \
--pids-limit 128 \
--memory 2g \
--cpus 2 \
--tmpfs /tmp:rw,noexec,nosuid,size=256m \
--mount "type=bind,src=$workspace,dst=/workspace" \
--workdir /workspace \
--env HOME=/tmp \
"$image" "$@"
保存为 run-agent-sandbox.sh 并赋予执行权限:
chmod +x run-agent-sandbox.sh
AGENT_IMAGE=your-agent-image:latest \
AGENT_WORKSPACE="$PWD/sandbox-worktree" \
./run-agent-sandbox.sh agent-cli --yolo --task "运行测试并修复失败用例"
这里的 agent-cli --yolo 是通用占位命令,需要替换为实际工具的启动方式。安全属性来自外层容器,而不是命令名称:网络被关闭、Linux capabilities 被移除、根文件系统只读,并设置了进程数、内存和 CPU 上限。
如果任务确实需要下载依赖,可以有条件地启用网络,但不要顺手注入云凭据:
# 仅在明确需要联网时,把脚本中的这一项:
--network none
# 改为受控网络,例如:
--network agent-egress
更稳妥的做法是通过代理设置域名白名单,并记录所有外连请求。仅打开网络而不限制目标地址,仍然允许数据外传和不受控 API 调用。
把审批放在不可逆动作之前
YOLO 模式不必是全开或全关。可以让 Agent 自主读取代码、编辑隔离工作区和运行测试,同时对以下动作保留人工审批:
- 向远程仓库推送代码或创建合并操作;
- 使用生产环境、云平台或支付系统凭据;
- 发布软件包、发送邮件或调用会产生费用的 API;
- 删除工作区之外的数据;
- 修改基础设施、数据库结构或访问控制策略。
还应设置明确的终止条件,例如最长运行 30 分钟、最多执行 100 个工具调用、费用达到指定阈值,或者连续三次测试结果没有改善。没有退出条件的自主循环,可能在错误方向上持续消耗资源。
启用前检查清单
在个人实验环境中,可以接受较宽松的限制;在团队和生产相关场景中,建议至少确认以下事项:
- 使用临时工作区、容器或一次性虚拟机,不直接操作主要开发目录;
- 默认关闭网络,按任务开放必要出口;
- 不挂载 SSH、云端和包管理器凭据;
- 使用短期、最小权限令牌,并限制费用与调用次数;
- 保存命令、文件差异、网络请求和工具调用日志;
- 在执行前创建 Git 分支或快照,并验证恢复流程;
- 将部署、发布、付款和生产数据修改留在人工审批之后。
YOLO 模式适合处理边界清楚、结果可验证、失败可恢复的任务。若一个操作会影响客户数据、生产系统或外部账户,就不应仅依赖 Agent 自己判断是否安全。让 Agent 跑得更快之前,先确保它只能在你愿意承担后果的范围内行动。