Mistral 发布了编程智能体 Vibe 3.1.1,支持在用户消息传递给模型之前自动修改或拦截内容。它还增加了对话开始和结束时的自动处理,并优化了开发者在多项任务间切换时重新打开对话或创建分支继续对话的流程。

1. 在模型读取消息前介入的钩子

本次发布的核心是模型读取用户消息前运行的 pre_agent 钩子。钩子是一种在指定时机接入并执行独立任务的机制。根据发布说明,该钩子可以拦截消息、改写语句,并补充传递给模型的上下文。

输入检查、添加通用提示等需要在模型回答前完成的任务,可以接入智能体流程。不必在每条消息中手动附上相同提示,而是在传递给模型前自动补充。

session_start 钩子会在会话开始、恢复、重置或创建分支时运行,并可为下一条消息添加上下文。它将各会话所需的背景信息接入对话启动流程。

会话结束时,session_end 钩子会在后台运行。结束原因分为程序退出、对话重置和其他情况。

需要批准或答复,或模型的一轮响应任务完成或失败时,notification 钩子会在后台运行。这种结构将整个对话的结束与响应过程中的通知接入不同的时机。

2. 导入其他智能体配置与跟踪命令执行

内置的 /vibe:import 功能会查找其他编程智能体的配置,将指令、技能、子智能体、命令、钩子、遵循外部工具连接规范的 MCP 服务器以及权限导入 Vibe。这一变化减少了逐项迁移的工作,让现有配置可以在 Vibe 中继续使用。

Vibe 执行命令时,环境中会包含 VIBE_SESSION=1。脚本可以检查此值,判断命令是否在 Vibe 内运行。

在非交互式运行模式下,工具调用被拒绝时,会记录到标准错误这一独立的程序诊断消息输出通道,以及导出结果的警告中。智能体未作答便结束时,也会通过标准错误提示。

3. 改进会话恢复与分支流程

vibe --resume 显示的会话 ID 改为末尾 8 位,旧会话仍通过前 8 位恢复。重新打开的会话会沿用上次使用的模型和智能体,而不是当前默认值。

即使智能体正在运行,也可以通过 /branch 创建分支。新对话基于当前响应任务开始前的状态创建,恢复副本的命令会显示在独立面板中,不会混入对话内容。回退或创建分支被拒绝时,现在可以得知原因,例如正在运行的后台进程、作为独立任务运行的程序,或负责分担任务的子智能体。

用于清空会话的 /clear 会启动不含预定指令的新对话。原会话中的预定任务会保留在该会话中,并在重新打开时执行。

以自动批准模式打开新会话时,会使用 auto-approve 智能体,恢复会话时也会保留该智能体。运行期间可通过 Shift+Tab 切换到其他智能体,从而退出自动批准状态。

4. 便利功能的收益与运维代价

会话中的拉取请求,即请求审查并采纳代码更改,以及合并请求,即请求合并代码更改,默认会通过 gh 或 glab 进行跟踪。可以从底部状态链接打开列表并刷新状态,便于在同一界面查看任务和请求的进展。不需要时,可在设置中关闭跟踪。

虽然现在可以方便地在对话界面查看请求状态,并将收尾任务交给钩子,但退出 Vibe 时,会为仍在运行的 notification 和 session_end 钩子最多等待 5 秒。

在 macOS 和 Linux 上,bash 命令或钩子结束时,其中通过 & 启动的进程也会被终止,因此需要长时间运行的命令应使用独立后台进程功能。

Vibe 3.1.1 的核心是在对话开始和结束时接入自动化,并完善在多项任务间切换后仍能沿用上次模型、智能体和对话状态的流程。