Mistral Vibe 自动批准:放开执行,别放开记录

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

Kelly
← 返回博客
Mistral Vibe 自动批准:放开执行,别放开记录

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"。