4つ動かしているとき、音が鳴りました。
どれかが終わった音です。画面を切り替えて、1つ目、違う。2つ目、これも違う。3つ目で見つけて、次の指示を打ちます。
戻ってくると、また音が鳴っています。今度はさっきとは違う音でした。終わった音ではなく、人を呼んでいる音です。
どの枠から鳴ったのかは、音では分かりません。
2つの「止まっている」
止まっているように見える画面には、2種類あります。
1つは、作業が終わって次の指示を待っている状態です。これは放っておいても害がありません。
もう1つは、作業の途中で「このコマンドを実行してよいか」と聞いたまま止まっている状態です。こちらは、答えるまで1ミリも進みません。放っておいた時間がそのまま無駄になります。
画面を見れば区別がつきます。見なければつきません。そして並列にする理由は、画面を見ずに済ませたいからです。
機械に見張らせるには
人の代わりに見張るには、CLI の側が「いま止まった」と外に知らせてくれる必要があります。ターミナルに描かれた文字を別のプログラムが読む方法もありますが、表示が少し変わるたびに壊れます。
知らせる仕組みを持っているかどうかは、CLI によって違います。MulmoTerminal は7つの CLI を同じやり方で扱っているので、その対応表を見ると差がはっきりします。
| CLI | 終わったと言えるか | 待っていると言えるか |
|---|---|---|
| Claude Code | 言える | 言える |
| Codex | 言える | 言える |
| GitHub Copilot | 言える | 言えない |
| Cursor | 言える | 言えない |
| Antigravity | 配線されていない | 配線されていない |
| Grok | 配線されていない | 配線されていない |
| Muse | 配線されていない | 配線されていない |
終わったことを知らせられるのは4つ、待っていることまで知らせられるのは2つです。
似ているが使えないもの
GitHub Copilot には permissionRequest、Cursor には beforeShellExecution という仕組みがあります。名前からは、承認を求めたときに動くように見えます。
実際に測ると、どちらもツールを呼ぶたびに動きます。承認を求めたかどうかに関係なく動くので、そのまま「待っている」の合図に使うと、全部のツール呼び出しが待ちとして表示されます。
これは、何も表示しないより悪い状態です。常に赤く光っていれば、人はその表示を見なくなります。
言えるほうの2つ
Claude Code には Notification というフックがあります。入力が必要になったときに動きます。
Codex は2か所から取ります。作業の区切りは rollout という記録ファイルの追記を見て判断し、承認待ちは PermissionRequest フックで受け取ります。このフックは0.156から入ったもので、ダイアログを出したときだけ動くことが測られています。
フックのほうには条件が1つあります。Codex は、フックを登録すると一度だけ「これを信頼してよいか」と聞いてきます。断っても作業の区切りは取れますが、承認待ちの合図だけが取れなくなります。
区切りを記録ファイルから、承認待ちをフックから、と分けてあるのはこのためです。片方を断られても、もう片方は生き残ります。
製品を使わずにやる場合
自分で組めます。Claude Code なら設定ファイルにフックを書き、Codex なら起動時に渡します。
codex -c 'hooks.PermissionRequest=[{hooks=[{type="command",command="curl -s -X POST http://127.0.0.1:8080/waiting || true"}]}]'
受け取る側で、どのセッションから来たかを記録して音を鳴らします。セッションを区別する値は環境変数で渡し、コマンド自体は固定にしてください。コマンドの中身が変わるたびに、Codex はまた信頼の確認を出します。
サーバーが落ちているときに失敗で終わらないよう、|| true を付けておきます。CLI はフックの終了状態を見て判断するためです。
違いが出るところ
自分で組むのと既製品の差は、数が増えたときの扱いに出ます。
1つか2つなら、音が鳴ったときに画面を探せば済みます。9つ並ぶと、鳴ったのがどれかを音だけでは区別できません。どのセッションが鳴らしたのかを画面に結びつける必要があります。
MulmoTerminal はブラウザに格子を出して、枠ごとに色を変えます。
npx mulmoterminal@latest
打つとブラウザが開きます。枠を選ぶときに、上の表の7つから選べます。終わったときと待ちになったときで音が違います。枠ごとに git の worktree が切られるので、同時に走らせてもファイルがぶつかりません。
表に無いこと
この表は、それぞれの CLI を一度測った結果です。新しい版が出れば変わります。 Codex の承認待ちも、半年前には取れませんでした。
配線されていないと書いた3つは、できないという意味ではありません。記録はあるのに読む側を作っていないものと、記録自体が無いものが混ざっています。
まとめ
並列にすると、画面を見ない時間が増えます。見ないのであれば、止まったことを機械が知らせる必要があります。
終わったことを知らせられる CLI は多く、待っていることまで知らせられるものは少ないです。そして名前が似ているだけで使えない仕組みもあります。どれを並べるかを決めるときに、この差は効きます。
- MulmoTerminal —
npx mulmoterminal@latest - 対応表の原文

