並列で動かした Claude Code の『終了』と『承認待ち』を別の通知にする — MulmoTerminal のセル色で区別

並列で動かした Claude Code の『終了』と『承認待ち』を別の通知にする — MulmoTerminal のセル色で区別

課題:並列で 10 体回していると、どれが止まっているかが分からない

Claude Code を 1 体だけ動かしているあいだは、画面を見れば状況が分かります。手が止まっていれば、終わったのか、何かを尋ねて止まっているのかはそのセッションを覗けば読める。区別するための仕組みは要りません。

並列に動かすようになると、ここが変わります。

git worktree で同じプロジェクトのコピーを別の場所に作れば、エージェントは互いのファイルを踏まずに並べられます。1 体ずつ順番に回していた作業を、3 体、5 体、10 体で同時に流せます。

10 体のうち 2 体が止まっているのが見えても、どちらが承認待ちで、どちらが完了したのかは、1 セルずつ開いて確かめるしかありません。開いているあいだ、残りも待たせたままになります。

待てる時間が、二つで違う

Claude Code が手を止める理由は、実質 2 種類しかありません。

後者を前者と同じ扱いで放置すると、並列で得たはずの時間がそのまま消えます。並列化してセッションを 10 本抱えるなら、この二つを別の通知として受け取る必要があります。

既存の仕組み:hook は最初から二つに分かれている

ここで分かりやすい話があります。この区別は自分で作る必要がありません。

Claude Code の hooks 一覧に、次の二つがそのまま並んでいます。

欲しい区別が、別々の名前のイベントとして用意されています。しかも Claude Code だけではありません。MulmoTerminal のコードを読むと、他の AI コーディングツールも同じ 2 分割を出しています。

ツール 終了イベント 承認待ちイベント
Claude Code Stop Notification
Codex completed permission_prompt
GitHub Copilot agentStop notification
Cursor stop —

名前は違いますが、「終わった」と「尋ねている」の 2 分類に揃っています。別々の会社が独立に同じ分け方に到達しているのは、それが対象そのものの性質だからです。

必要なのは、受け取った 2 分類を 2 分類のまま人に届ける部分だけです。

MulmoTerminal を使わなくてもできる

ここは正直に書きます。この区別を使うだけなら、特別な道具は不要です。

hook の設定に、Stop のときと Notification のときで別のコマンドを書きます。Mac なら osascript や terminal-notifier で音と通知文を分けられます。スマホに飛ばすのは Claude Code 自身の機能があります。

1 体か 2 体で使っているなら、これで十分です。音が 2 種類に分かれれば、通知の区別は付きます。

数が増えるとこれでは足りなくなります。音は鳴った瞬間しか残らないので、10 体のうちどれが鳴ったのかを聞き逃したら情報が消えます。他のセルに目を落としている最中に Notification が鳴って、戻ったときにはどのセルで鳴ったのかが分からない、という状態が増えます。

MulmoTerminal の解決:聞き逃しても画面に残る

MulmoTerminal は複数の AI セッションを 1 枚のグリッドに並べて見るためのツールです。Node.js が入っていれば npx mulmoterminal@latest で起動します。

1 枚のセルが 1 体の AI で、セルの枠に色が付きます。

状態 セルの色
動いている 進行中であることを示す色
終了(Stop 系の hook が発火した) 完了を示す色
承認待ち(Notification 系の hook が発火した) 待機を示す色

音も鳴りますが、音は補助です。主役は聞き逃しても消えない色のほうです。グリッドを一瞥すれば、承認待ちで止まっているセルがどれかが分かります。

通知の種類は終了と承認待ちだけではなく、コマンドの成否、セッション終了、裏で動かしていた処理の落ち、PR のテストが赤くなった、などにも拡張されています。それぞれに音を割り当てられます。

ただし最初から鳴るのは終了と承認待ちの 2 つだけです。コードの該当箇所にはこう書かれています — あとから種類を追加したときに、頼んでいない人のところで急に鳴り出さないように、「鳴る種類の一覧」は「存在する種類の一覧」とは別に持つ。

通知の設計で一番やってはいけないのは、勝手に増えることです。増えた音は無視され始め、最終的に全部切られます。

区別が要るのは数が増えたときだけ

話を整理します。

MulmoTerminal はそれをセルの色で行っています。音が重なっても、画面を見ていなくても、戻ったときにはどのセルがどの理由で止まっているかが残っています。

使ってみる

MulmoTerminal を起動し、空いているセルで Claude Code を起動します。

  1. npx mulmoterminal@latest で立ち上げる
  2. 空きセルから Claude Code のセッションを 2〜3 本起動する
  3. 片方のセッションで、承認が必要なコマンド(rm やネットワーク越しの操作など)を頼む
  4. そのセルの色が「承認待ち」の色に変わる。隣のセルで Stop 待ちになっているものと色が別になる

承認モードや hook の挙動は MulmoTerminal 公式ガイド に載っています。

まとめ

関連: MulmoTerminal の git worktree 隔離 / MulmoTerminal の orderPriority / MulmoTerminal 公式ガイド

この記事をシェア

関連記事

記事一覧に戻る