Claude Code の Hooks でタスクの完了をデスクトップ通知する
やること
下記の画像のように Claude Code に投げたタスクが完了した際に、サウンド付きでデスクトップ通知してサボり者の自分にムチをうちます。
動機
私は怠け者ですので Claude Code にタスクを投げたまま Youtube を見てしまい、無限に時間を溶かし続けていました。
上記の Release Notes にあるように、2025/06/30(多分 JST じゃないと思う....) に Claude Code に Hooks
という機能が追加されました。
これが神機能で、Introduction にあるように
Claude Code hooks are user-defined shell commands that execute at various points in Claude Code’s lifecycle.
とのこと。Hook を登録しておけば Claude Code のライフサイクルイベントとして発火できるよということですね。
Stop
Runs when the main Claude Code agent has finished responding.
こいつを使えば agent のタスク完了を通知できそうということで作業に取り掛かかりました。
手順
これはもう公式ドキュメントを見るべきですが、自分が行った作業を簡単に書き記しておきます。
登録するコマンドを用意する
要件は、macOS のデスクトップに通知をする
です。色々と拘ろうと思えばいくらでも拘れる気もしますが、一旦はシンプルに目的を達成するためのものを用意しました。
そもそも、何を使えばいいのかすら知らなかったので desktop notifications cli macOS
と入力しググってみたところ osascript
というコマンドがあることを知りました。
深く考えず、このコマンドを使うだけで良さそう。OSA
や -e
オプションについては下記を見てください。
これらの情報を元に作ったコマンドは以下の通りです。
osascript -e 'display notification "Invoke \"Stop\" event." with title "Claude Code" sound name "Glass"'
通知が飛ぶかチェックする
画像の通り、Glass
という SE が鳴り、デスクトップに通知が飛んでくれました。
ちなみに、SE はこの Hooks を布教した知り合いが Glass
を使っていて、確かに気づけそう且つ不快じゃないということで真似させてもらいました(でも、もしかしたら不快な音の方が気づけるかもしれない)。下記のリポジトリのファイル名を CLI に打ち込んで片っ端から試すのがいいと思います。
前述のコマンドの Glass
の部分を Basso
とかに変えて気に入ったやつを使ってください。もしかしたらこのフォルダ配下にはないが、指定可能な SE もあるかもしれない。がしかし Glass
が気に入ったので、これ以上調べなかったです。
Hooks に登録する
- Claude Code を起動する
claude
-
/hooks
と入力する
- ライフサイクルイベントを選ぶ
今回はタスク完了後に通知が欲しいので Stop
を選択しました。
- new hook として登録する
- コマンドをコピペする
先ほど CLI で試したコマンドをそのままコピペすればいいです。
- Hooks の適用スコープを決める
今回の設定はあらゆるプロジェクトで有効にしたかったので User
スコープに設定しました。
User スコープでは画像の通り ~/.claude/settings.json
に保存がされます。
こんな感じになっています。matcher
を指定することで発火条件を絞り込めるようですが、今回は常に発火してほしいものなので未指定。
動作確認
少し見づらいが、画像の右上に通知が出ていることが分かる。
めでたしめでたし。
Discussion