Mistral Vibe 自动批准:放开执行,别放开记录
Mistral Vibe 的自动批准到底批准了什么、怎么开(agent 模式、Shift+Tab、--auto-approve 与 --yolo)、哪些情况仍然会问、怎样配置才安全——以及没人配置的另一半:这一轮跑出来的决策,记在哪里。

Mistral Vibe 里的「自动批准」不是一个开关。它是一个四档的旋钮、一个给无人值守运行用的参数,外加一组例外情况——你以为问题都关掉了,它们还是会问。这篇指南把整个机制走一遍:每个设置到底批准了什么、怎么开、边界在哪——然后讲设置页管不到的另一半:Agent 放开跑之后,它做的决策记在哪里?
旋钮的四档
在 Vibe 里,决定「什么被自动批准」的是当前启用的 agent。Agent 是配置覆盖包——可以打包系统提示词、工具选择和审批规则——内置四种:
| Agent | 自动批准什么 | 什么仍然要问 |
|---|---|---|
ask | 什么都不 | 每一次工具调用 |
accept-edits(默认) | 文件编辑 | Shell 命令与其他敏感工具 |
smart-approve | 由一个分类模型判定为安全的工具调用 | 判定为有风险的调用——有风险的调用没有你的确认绝不运行 |
auto-approve | 每一次工具执行,包括 Shell 命令 | 工具层面不问(但下文的例外依然有效) |
伸手去极端档位之前,有两件事值得知道。smart-approve 还在逐步推送中,Mistral 的文档对它的定性很直白:它是分类器,不是沙箱——被它判定安全的调用,是以你本人账户的完整权限运行的。而 auto-approve 自带厂商的警告标签:只用于可信的沙箱环境。
怎么开
交互会话里,用 Shift+Tab 循环切换 agent——输入框边框上的模式标签会显示当前是哪一档——或者启动时直接指定:
vibe --agent auto-approve
想把某档设为默认,在 Vibe 配置里设 default_agent。也可以在每次提示处逐个处理:1/y 允许一次,2 本次会话内允许,3 永远允许,4/n 拒绝。
程序化模式(vibe --prompt …)规则不同,因为没有人能回答提示。Vibe 使用你的默认 agent,任何需要批准的工具调用会被直接拒绝。要让无人值守的运行批准一切调用:
vibe --prompt "…" --auto-approve
--yolo 是同一个参数的别名。两条限制:Mistral 文档给它附了同一个条件——只在沙箱环境;而且如果管理员设了 enable_auto_approve = false,Vibe 会完全忽略这两个参数。
什么仍然会问(什么仍然被拦)
自动批准的范围很广,但它不是唯一的层。下面这些控制与 agent 模式并行存在:
- 工作目录之外。 工具访问工作目录(或
--add-dir加入的目录)之外的位置时,会触发确认——除非一切调用都被自动批准。把outside_workdir = "deny"设上,这类调用会被直接拒绝而不是询问。 .env文件。 工具读取或编辑.env、.envrc文件之前,Vibe 一定会问——哪怕该工具的权限已设为always。把路径放进工具的allowlist是文档写明的、能跳过这些检查的例外——这也让 allowlist 本身成为一项安全决策,而不是图方便。- 逐工具权限。 在
config.toml里,每个工具——内置的、MCP 的、连接器的——都可以设为 ask、always 或 never。bash工具还支持按命令前缀的 allowlist 与 denylist。 - 你的权限规则最先执行。 无论哪档 agent 模式,allowlist 里的命令直接跑,denylist 里的命令始终被拦。
一套不作死的配置
Mistral 官方的建议,加上从机制出发的 obvious 结论:
- 日常工作: 停在
accept-edits,或者smart-approve(如果你已收到推送)。MCP 与连接器工具——一切碰外部系统的——即使在这一档也保持permission = "ask"。 - 不熟悉的代码: 降到
ask,并且在冒险运行之前先 commit,让git reset --hard成为你的回滚。 auto-approve: 只留给一次性环境——容器、CI 运行器、临时虚拟机。绝不要用在握着 SSH 密钥、云凭据或生产权限的机器上。这句话是 Mistral 写的,不是我们。- 把
.vibe/配置纳入版本管理,让团队的安全决策像代码一样被审查、可复现。
另一半:你批准了执行——记录在哪?
Vibe 里的批准,管的是工具运行的那一刻。它天生就是短暂的:会话级批准会重置,分类判定留下一句说明,终端一关,剩下的只有代码的 diff。但一次长时间的自动批准运行,产出的不只是代码。它产出决策——为什么迁移长这样、哪个 workaround 被接受了、Agent 对你的系统得出了什么结论——而在多数配置里,这些都随会话蒸发。下一次运行,或者下一个队友,只能对着代码重新猜当时的理由。
这正是我们给 Mistral Vibe 做的知识库所围绕的那个区分:信任一个文件夹,不等于批准它的产出。让 Vibe 在环境安全允许的范围内尽量放开跑——同时给它产出的东西一个去处:事实落为记录,分量重的那部分以变更请求的形式等着、带着 diff 给人接受,而 Agent 下次该遵循的规则以 Skill 的形式存在、它动手之前会先读。Vibe 可以通过 MCP 接到这一层(见接入指南)。执行可以自动批准,记录不能自动过审。
常见问题
--yolo 和 --auto-approve 有区别吗? 没有。Mistral 文档把 --yolo 列为 --auto-approve 在程序化模式下的别名。两者都批准一切工具调用;管理员禁用自动批准后,两者都会被忽略。
开了自动批准,就能放心在工作机上无人值守跑吗? 不能——文档就是这么写的。自动批准去掉的是提示,不是风险:调用是以你账户的完整权限运行的。无人值守运行属于沙箱化的一次性环境,并且要给一切破坏性操作配上逐工具的 denylist。
用了 smart-approve,还需要逐工具权限吗? 需要。Smart approve 是逐个调用做分类;逐工具权限是先于分类执行的常设政策。两层是叠加的——先政策,后判断——而对外工具,常设政策仍然应该是 permission = "ask"。