本文へ移動
Vibe Console

Claude Codeの完了をMacで通知する方法:hooks・Codex notify対応

Claude CodeやCodexの完了・入力待ちをMacで通知する方法。Claude Codeのhooks、Codexのnotify、Vibe Consoleの通知音を紹介します。

Nes

Nes

@nesdesignco

· 約6分で読めます

MacBookのノッチに「ターミナル2でClaude Codeが完了」と表示され、その下に実行中・アイドル・入力待ちのステータスドットつきのターミナルタブが並ぶ様子

Claude Codeの醍醐味は、長いエージェントの実行です。タスクを任せて、その間に別のことをする。問題は、いつ戻ればいいかです。こまめに見に行けばせっかく浮いた時間が消え、遅すぎれば開始2分後から許可待ちで止まっていた、ということになります。

Macでこれを解決する方法は3つあります。自分で組むhookから、標準で備わった機能まで順に紹介します。

知っておきたい2つのイベント

どの方法を使うにしても、知らせてほしいタイミングは2つあります。

  1. 完了。 エージェントが自分のターンを終え、次のメッセージを待っている状態。
  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をダウンロード。

エージェントに、専用のウインドウを。

14日間無料。その後は月額$4.99、または年額$39.99。