Claude CodeのHooksでタスク完了メッセージをデスクトップ通知する
Claude CodeではNotificationでベル音を鳴らすことができますが、私は音量をゼロにしてMacを使っているため、デスクトップのバナー通知で視覚的に知らせてほしいと思っていました。一部のユーザーは、osascriptやterminal-notifierのコマンド呼び出し指示を各自CLAUD.mdに記載してこれを実現させているようですが、毎回推論コンテキストに載せるに抵抗があり、そこまでは手を出せていませんでした。
しか昨日リリースされたHooks機能は、まさにこの用途に最適でした。ドキュメントにもカスタム通知を設定する例が載っています。
すでにHooksのさまざまなユースケースが公開されていて、例えばファイルのフォーマッタやSlack・LINEへの通知などを行っているユーザーがいます。

Claude CodeのHooksで作業が終わった際に
— すてぃお (@suthio_) July 1, 2025
Slackに通知するようにした。
どういう内容をやったかログが残るし、通知もSlackで受けれるので便利 pic.twitter.com/tKh5dyau7i
Hooksつかって、Claude Codeのタスク完了時にWindowsとLineに通知するのできたー。
— fujihide (@hfujikawa77) July 1, 2025
これでタスク投げて待ち時間中に他のことできるし、席も外せるぜ☕ pic.twitter.com/HeE53DYAck
Hooksの仕様としては、イベントごとに決まったJSONテキストが標準入力されるので、それに応答するコマンドを設定ファイルに記述します。公式ドキュメントの例では、jqコマンドでパースしてパイプ処理し、ファイル書き込みをするワンライナーが紹介されています。それより複雑なことをしたい場合は、Pythonスクリプトなどを書くことが推奨されているようでした。
私はこれを利用して、完了メッセージを会話ログファイルの末尾から取得するスクリプトを作成しました。これをデスクトップに通知したいと思います。並列に分析タスクを実行しているので会話内容を含むことでどのタスクが完了したのか分かりやすくなります。

これは以下のようなスクリプトで配置して設定します。
mkdir -p ~/.claude/hooks
pbpaste > ~/.claude/hooks/stop-send-notification.mjs
chmod +x ~/.claude/hooks/stop-send-notification.mjs
cat ~/.claude/settings.json
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/stop-send-notification.mjs"
}
]
}
]
}
}
会話の応答が止まるタイミングで以下のように通知されます。

NotificationではなくStopなのはなぜかというと私の環境では期待したタイミングでNotificationが呼ばれないからです(なぜ・・)。
なお、macOSのScript Editorに権限が設定されていない場合、osascriptのdisplay notificationによる通知が届かないのでご注意ください。

私は通常、Claude CodeのVScode拡張のエディタを使って埋め込みターミナルウィンドウ内でClaude Codeを起動しています。
Claude Codeこのパネル構成でVSCodeから使ってる。右にピン留めしたのがPlanだけするプロセスで右に作業を増やしていく。左は常にGit status。auto acceptするかはタスクによって変える。worktreeで分割は今してない。そもそも競合するようなタスク同時に進めてないので…… pic.twitter.com/4L0dKXeerw
— Iaiso (@laiso) June 12, 2025
これまでは、常にサイドバーにログを表示し、更新が止まったことを目視してタスクの完了を把握していました。この設定に移行したことによりエディタのタブをバックグラウンドに隠してラップトップの画面が広く使えるようになってよかったです。
TIPSとして、「claude -p "grep foo" --debug」とデバッグオプションで実行すると、Hooksの開発がしやすくなります。これは、どのHookがいつ呼ばれているかを画面に出力してくれます。
