MistralはコーディングエージェントVibe 3.1.1を公開し、ユーザーのメッセージをモデルに渡す前に、内容を自動で修正したりブロックしたりできるようにした。会話の開始時と終了時の自動処理も加え、複数の作業を行き来する開発者が会話を再開したり、分岐させて続けたりする流れも見直した。

1. モデルがメッセージを読む前に介入するフック

今回のリリースの中心は、モデルがユーザーメッセージを読む前に実行されるpre_agentフックだ。フックは、決められたタイミングで別の処理を実行するための仕組みである。リリースノートによると、このフックはメッセージをブロックしたり、文章を書き換えたり、モデルに渡すコンテキストを追加したりできる。

入力の検査や共通の案内の追加など、モデルが回答する前に行う処理をエージェントの流れに組み込める。メッセージごとに同じ案内を手作業で付ける代わりに、モデルに渡す直前に自動で補う用途に使える。

session_startフックは、セッションの開始・再開・初期化・分岐時に実行され、次のメッセージに渡すコンテキストを追加できる。セッションごとに必要な背景情報を、会話の開始フローに載せて渡す仕組みだ。

セッション終了時には、session_endフックがバックグラウンドで実行される。終了理由は、プログラムの終了、会話の初期化、その他に分けられる。

承認や回答が必要なとき、またはモデルの1回の応答処理が終了もしくは失敗したときには、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とともに既定で追跡される。下部のステータスリンクから一覧を開いて状態を更新でき、作業と依頼の進捗を1つの画面で確認しやすい。不要なら設定で追跡を無効にできる。

リクエストの状態を会話画面で確認し、終了処理をフックに任せられるようになった一方で、Vibe終了時には、まだ実行中のnotificationとsession_endフックを最大5秒待つ。

macOSとLinuxでは、bashコマンドやフックが終了すると、その中で&を使って起動したプロセスも停止する。そのため、長時間実行するコマンドには、別のバックグラウンドプロセス機能を使う必要がある。

Vibe 3.1.1の要点は、会話の開始と終了に自動処理を組み込み、複数の作業を行き来しても、最後のモデル・エージェントと会話の状態を引き継げるよう流れを整えたことにある。