Claude Codeの醍醐味は、長いエージェントの実行です。タスクを任せて、その間に別のことをする。問題は、いつ戻ればいいかです。こまめに見に行けばせっかく浮いた時間が消え、遅すぎれば開始2分後から許可待ちで止まっていた、ということになります。
Macでこれを解決する方法は3つあります。自分で組むhookから、標準で備わった機能まで順に紹介します。
知っておきたい2つのイベント
どの方法を使うにしても、知らせてほしいタイミングは2つあります。
- 完了。 エージェントが自分のターンを終え、次のメッセージを待っている状態。
- 入力待ち。 エージェントがタスクの途中で止まっている状態。たいていは、コマンドの実行やファイルの編集の許可を求めています。
重要なのは2つ目です。許可の確認で止まったエージェントは、まったく作業が進みません。
方法1:Claude Codeのhooks
Claude Codeは、特定のイベントが起きたときにシェルコマンドを実行できます。上の2つのタイミングは、次の2つのhookイベントでカバーできます。
Stop:Claudeが応答を終えたときに実行されます。Notification:許可のリクエストや、長時間の入力待ちなど、Claudeがあなたの注意を必要とするときに実行されます。
これを~/.claude/settings.json(全プロジェクト共通)か、プロジェクトの.claude/settings.jsonに追加します。次の例では、macOSに標準で入っているosascriptを使っています。
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Task finished\" with title \"Claude Code\" sound name \"Glass\"'"
}
]
}
],
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Waiting for your input\" with title \"Claude Code\" sound name \"Funk\"'"
}
]
}
]
}
}Claude Codeを再起動し、短いタスクを実行して試してみてください。初回は、スクリプトエディタに通知の表示を許可するかmacOSが確認してくることがあります。
この方法の限界: 通知にはどのプロジェクトやターミナルから来たのかが表示されず、クリックしてもそこへは移動しません。また、ほかのエージェントにも同じような設定が必要です。最新のイベント一覧はClaude Codeのhooksドキュメントで確認してください。
方法2:Codexのnotify
Codex CLIは、エージェントのターンが終わるたびにプログラムを実行できます。~/.codex/config.tomlでnotifyにコマンドを指定すると、Codexがイベントの内容をJSONで渡します。
notify = ["osascript", "-e", "display notification \"Codex finished\" with title \"Codex\""]最近のCodexはhooksにも対応しており、Stopイベントも使えます。設定はhooks.jsonか、config.tomlの[hooks]テーブルに書きます。オプションはバージョンによって変わるので、お使いのバージョンについてはCodexのhooksドキュメントを確認してください。
方法3:Vibe Consoleの標準機能
Vibe Consoleは、対応している8種類すべてのエージェントについて、設定なしでエージェントのターミナルを見守ります。
- すべてのタブにステータスドットが表示され、エージェントが実行中かアイドルかがわかります。エージェントを並べたグリッドもひと目で把握できます。
- エージェントが作業を終えると、サウンド(標準はGlass)が鳴り、MacBookのノッチがそのセッションで一瞬開いて、どのエージェントとターミナルかを表示します。
- エージェントが入力待ちで止まると、別のサウンド(標準はFunk)が鳴るので、画面を見なくても「完了」と「ブロック中」を聞き分けられます。
- どちらのサウンドも変更できます。 オフにすることも可能です。
さらに、Claude CodeやCodexの使用量がウィンドウの80%と100%を超えたときにもmacOSの通知を送ります。Claude Codeの使用量上限をご覧ください。
この機能が特に役立つのは、複数のエージェントを同時に動かすときです。複数のClaude Codeエージェントを並列で動かす方法も参考にしてください。
どれを使うべき?
| hooks / notify | Vibe Console | |
|---|---|---|
| 費用 | 無料 | アプリに含まれる |
| 設定 | エージェントごとにJSONまたはTOML | 不要 |
| 完了とブロックの区別 | 可能(hookを2つ設定) | 可能(2種類のサウンド) |
| どのターミナルかを表示 | 不可 | 可能(ノッチに表示) |
| 8種類すべてのエージェントに対応 | hooksがあるものだけ | 対応 |
Claude Codeのセッションを1つずつ動かすなら、hooksで十分です。複数のプロジェクトで複数のエージェントを動かすなら、どのターミナルが何かを把握しているワークスペースがいちばん時間を節約できます。
よくある質問
Claude Codeのhookが動かないのはなぜですか?
JSONが正しいか、ファイルが正しい場所にあるか、Claude Codeを再起動したかを確認してください。osascriptのコマンドを単独でターミナルで実行して、通知が許可されているかも確かめましょう。
スマホで通知を受け取れますか?
hooksは任意のコマンドを呼び出せるので、プッシュ通知サービスにも送れます。また、Claude Codeはモバイルアプリからのリモート操作に対応しているので、席を離れていてもセッションを確認できます。
標準の通知音は14日間無料で試せます。Vibe Consoleをダウンロード。
