Claude Code の承認待ちにすぐ気づく方法 — 通知と状態の見える化
Claude Code はツールの実行に許可が必要になると作業を止め、あなたが答えるまで先に進みません。すぐに気づくには、Claude Code の Notification hook を使います。この hook は、承認プロンプトが出たまま数秒操作がないときと、返答を終えてから 1 分ほど入力がないときに呼ばれます。Claude が 1 つだけなら、この hook からデスクトップ通知を出せば十分です。複数を並列で動かしている場合は、どのセッションが待っているかも知る必要があります。gtree のサイドバー、「対応待ち」、Dock のバッジはそのためにあります。
Claude Code はなぜ止まって待つのですか?
Claude Code は、事前に許可していない操作の前に必ず確認します。シェルコマンドの実行、許可範囲外のファイルの編集、Web ページの取得などです。確認はそのセッションのターミナルに表示され、選択するまでセッションは止まったままです。
これは妥当なデフォルトです。困るのは、その間に別の作業をしているときです。10 分で終わるはずのタスクが、ターミナルが別のウィンドウの後ろに隠れていたせいで、40 分後もまだ承認プロンプト(「Do you want to proceed?」)で止まっている、ということが起こります。
git worktree で Claude Code を複数並列に動かしていると、この問題は何倍にもなります。タブが 5 つあれば、どれが待っていてもおかしくありません。
Claude Code が承認を求めたら通知するには?
まずは標準機能を確認しましょう。Ghostty、Kitty、iTerm2 では、タスクを終えたときや承認プロンプトで止まったときに、あなたがターミナルから離れているようであれば Claude Code が自分でデスクトップ通知を出します(iTerm2 は環境設定で Notification Center Alerts をオンにする必要があります)。ほかのターミナルでは、~/.claude/settings.json に "preferredNotifChannel": "terminal_bell" を設定するとベルを鳴らせます。ターミナルによっては、Dock アイコンが跳ねたりバッジが付いたりします。
通知の内容を自分で決めたいなら hook(特定のイベントで実行されるシェルコマンド)を使います。使うのは Notification イベントです。~/.claude/settings.json に次を追加します(既存の hooks があればマージしてください)。
{
"hooks": {
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code が待っています\" with title \"Claude Code\"'"
}
]
}
]
}
}
各 Claude Code セッションを再起動すると、どれかが待ち状態になるたびに macOS の通知が表示されます。発生するのは次の 2 つの場合です。
- 承認が必要なとき: 承認プロンプトが表示されてから約 6 秒、操作がない場合。
- 返答を終えて待っているとき: Claude が返答を終えてから約 60 秒、入力がない場合。
hook には標準入力で JSON が渡され、理由を説明するメッセージとセッションの作業ディレクトリが含まれているので、小さなスクリプトを書けば通知にプロジェクト名を入れることもできます。1 分待たずに、終わった瞬間に知りたい場合は Stop hook も追加します。返答が終わるたびに発生します。ただし、スクリプトを終了コード 2 で終えないでください。「止まるな」という意味になり、Claude が作業を続けてしまいます。
自前の hook の限界
hook は動きますが、頼り切ると次のような点が気になってきます。
osascriptの通知は「スクリプトエディタ」の名義になります。 システム設定でスクリプトエディタの通知がオフになっていると(よくあることです)、コマンドは成功しても何も表示されません。- 通知をクリックしても該当セッションには移動しません。 結局、正しいターミナルタブを自分で探すことになります。
- 一瞬の通知であって、状態ではありません。 バナーを見逃すと、まだ待っているものを確認する場所がありません。
- 全体を見渡せません。 どのセッションが実行中で、どれがアイドルで、どれが 30 分動いていないのかがわかりません。
gtree なら、どのエージェントが待っているかひと目でわかる
gtree は同じイベントを、ひと目でわかる画面に変えます。まず Claude Code に一度接続します。ようこそガイドの最後のページか、設定(⌘,)から行えます。接続するまでは、スタートページの上部に「Claude Code に接続されていません」という案内と「Claude Code に接続」ボタンが出ます。gtree は ~/.claude/settings.json に自分の hook エントリを追加し、それ以外の内容には一切触れません。以後は、あなたが自分のターミナルで起動したものも含め、すべてのセッションの状態を把握します。設定で Codex もつなげば、Codex のセッションも同じように「作業中」「承認待ち・質問待ち」を報告します。
サイドバー:worktree ごとに 1 つのマーク
サイドバーの各 worktree の行末には状態マークが 1 つだけ付きます。文字ではなく形で読み取れます。
- 紫の回転アイコン:エージェントが考え中、またはツールを実行中。
- 点滅する赤いベル:あなたを待っています。
- 薄い紫のロボット:セッションは開いているが待機中。
- 薄いターミナルアイコン:ターミナルだけが開いていて、エージェントは動いていない。
アイコンにホバーすると、何をしているか、何を待っているか(「あなたの応答待ち」など)が表示されます。折りたたんだプロジェクトの中に待っているセッションがあると、プロジェクト名に赤い点が付きます。
「対応待ち」:あなたが対応すべきものを 1 つのリストに
「対応待ち」(⌘1)が答えるのは「いま自分を待っているものはあるか」という 1 つの問いだけです。いちばん上に「N 件があなたを待っています」として 1 件ずつ並びます。行をクリックすればそのセッションに直接移動でき、↑↓ と ↩ でも操作できます。gtree 内で動いているセッションならそのターミナルタブに切り替わり、別のターミナルアプリで動いているものは、gtree がウィンドウを切り替えられないため、会話の読み取り専用リプレイを開きます。
その下の**「念のため確認」**には、まだ止まってはいないものの、見ておいたほうがいいものが集まります。
- 「作業中」のままなのに 10 分以上何も動きがないセッション
- 2 つの worktree が同じファイルを変更していて、どちらもまだコミットしていない
- あるエージェントが別のエージェントの回答を長く待っている
- エージェント間の伝言が 10 分以上届いていない
- 別のエージェントにした質問に回答が届いた(その場で展開して読めます)
どれも「了解」(または ⌫)で閉じられ、状況が変わればまた表示されます。さらにその下が**「作業中」で、動いているセッションが並びます。何も待っていないときは「すべて順調」**とだけ表示されます。
「対応待ち」の件数は、開いているプロジェクトだけでなくすべてのプロジェクトが対象です。同じ数字が gtree の Dock アイコンにも表示され、ウィンドウを閉じていても更新され続けます。
クリックでそのセッションに移動できる通知
セッションが待ち状態になると、gtree は自分の名前で macOS の通知を出すので、スクリプトエディタの通知設定には左右されません。クリックするとその worktree のセッション(別のターミナルのセッションなら読み取り専用リプレイ)に移動します。邪魔をする必要がないときは静かにしています。
- gtree でそのセッションをすでに見ているときは通知しません。
- 同じ worktree からは 10 秒以内に再通知しないので、承認プロンプトが続いても通知は 1 回です。
通知の許可は、作業の途中ではなく、ようこそガイドの最後のページで求めます。設定画面で通知がオンになっているかを確認し、「テスト通知を送る」で試せます。
「終わった」はどうわかる?
エージェントがターンを終えると、回転アイコンが止まります。返信しないままでいると、Claude Code は約 60 秒後にアイドル通知を出し、gtree はそれをほかの待ち状態と同じように扱います。ベル、「対応待ち」への追加、通知です。つまり、タスクが終わってから 1 分ほどでわかります。この「答え終わって返信待ち」のベルは、そのセッションのターミナルタブに切り替えた時点で消えます。何か入力する必要はありません。(Codex はアイドルのイベントを送らないため、Codex のセッションでベルが鳴るのは承認が必要なときと質問があるときだけです。)
gtree の外で動いているセッション
iTerm などのターミナルで起動したセッションも同じ hook で報告するので、サイドバーと「対応待ち」に表示されます。ステータスバーには、どこで開いているか(例:「iTerm で AI が 1 件開いています」)が表示されます。
自前の hook と gtree の比較
Notification hook + osascript |
gtree | |
|---|---|---|
| エージェントが承認を求めたら通知 | できる | できる |
| どのプロジェクト・worktree かを表示 | スクリプト次第 | できる |
| 通知のクリックでセッションへ移動 | できない | できる |
| まだ待っているものの一覧 | ない | 「対応待ち」 |
| Dock アイコンの件数表示 | ない | あり(全プロジェクト対象) |
| 見ているときは通知しない | できない | できる |
| 各セッションの作業中 / 待機の状態 | わからない | サイドバーのアイコンと「対応待ち」 |
よくある質問
承認が必要なときに発生する Claude Code のイベントは?
Notification hook です。承認プロンプトが出てから約 6 秒操作がないとき、そして返答を終えてから約 60 秒入力がないときに発生し、理由を説明するメッセージが含まれます。承認ダイアログが出た瞬間に反応したい場合は PermissionRequest hook を使います。
Codex でも使えますか?
使えます。設定で Codex をつなぐと、Codex のセッションにも同じ回転アイコンが付き、承認が必要なときや質問があるときは同じようにベルが鳴ります。Codex はアイドルのイベントを送らないため、「答え終わって返信待ち」のベルはありません。
gtree を入れると Claude Code は遅くなりますか?
なりません。gtree の hook は 1 回あたり数ミリ秒で終わるので、Claude が待たされることはありません。gtree 側で何か問題が起きても hook は静かに処理を飛ばし、会話はそのまま続きます。
gtree に Claude Code の設定を変更させたくない場合は?
設定画面で、gtree が追加した hook とそれぞれの役割を確認でき、個別にオフにすることも、Claude Code との接続を丸ごと解除することもできます(Codex の接続解除もそこからできます)。gtree が追加・削除するのは自分のエントリだけです。
gtree の中でエージェントを動かす必要がありますか?
ありません。Claude Code に接続すれば、どのターミナルのセッションも状態を報告します。gtree の内蔵ターミナルで動かすと、hook がまだ一度も発生していない段階でも、ターミナルのタイトルから Claude が動いているかを判別できるという利点があります。
gtree のローカル機能は無料で、登録も不要です。gtree があなたのコードをアップロードすることはありません。gtree をダウンロードして Claude Code に接続すれば、どのエージェントがあなたを待っているかはベルが教えてくれます。
この記事は gtree 0.3.14 に合わせて更新しました(2026 年 10 月)。