🐶

Mac Claude Code Hooksで通知を出す設定メモ(音・バナー)

に公開

Claude Codeでは hooks 機能を使って、タスクが完了したときやユーザーの入力待機状態になったときに、通知(音・バナー)を出すことができます。
UX向上に役立ちますが、設定にはいくつかトリッキーなポイントがあるため、備忘録として整理しておきます。

ポイント1:macOSでの通知には事前の許可が必要

通知を行う際にosascript を使って macOS のネイティブ通知(バナー)を出すには、Apple製Script Editor.app を起動し、一度手動で通知を実行して許可を与える必要があります。
許可が得られていないと、スクリプトを実行しても通知が表示されません。

スクリプトエディタを開き、

display notification "テスト通知" with title "通知許可チェック"

と入力して再生ボタンを押すと通知許可ダイアログが出てくるので許可してください。

すでに許可(あるいは拒否)されている場合はシステム設定から通知を検索してスクリプトエディタの設定を確認してください。

上記を行ってターミナルから以下を実行して通知が表示されれば準備完了です。

osascript -e 'display notification "Claude Codeのタスクが完了しました" with title "通知"'

ポイント2:osascriptのメッセージは静的

osascript-e オプションでは 変数展開ができないため、通知内容を柔軟に変えることができません。
そのため、通知文言はあらかじめ用意した 汎用的なメッセージにしておくのが現実的です。

osascript -e 'display notification "作業が完了しました" with title "Claude Code"'

ポイント3:Claude Code v1.0.51時点では /hooks 経由の編集にバグあり

Claude Codeのバージョン v1.0.51 時点では、/hooks コマンドでフックを追加・削除する際に、
settings.json 内の hooks 配列が正しく更新されないバグがありました。

このため、フックを編集・登録する際は エディタで直接 settings.json を開いて編集する方が確実です。

私のsettings.jsonは以下の設定にしています。メッセージや音はお好みに応じて変更してください。

{
  "hooks": {
    "PreToolUse": [],
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "afplay /System/Library/Sounds/Ping.aiff"
          },
          {
            "type": "command",
            "command": "osascript -e 'display notification \"Claude Code is waiting for you.\" with title \"Claude Code\"'"
          }
        ]
      }
    ],
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "afplay /System/Library/Sounds/Funk.aiff"
          },
          {
            "type": "command",
            "command": "osascript -e 'display notification \"Claude Code completed tasks.\" with title \"Claude Code\"'"
          }
        ]
      }
    ]
  }
}

ポイント4:settings.json 編集後はClaude Codeの再起動が必要

settings.json を直接編集しても、Claude Codeは自動で変更後のhooksを実行してくれませんでした
変更内容を有効にするには、Claude Codeを一度終了し、再起動する必要があったので、同様の事象が起きた時は再起動をお試しください。


Claude Codeはものすごい勢いで改善されていくのでどんどん修正されてくと思いますが、どなたかの役に立てば幸いです。

Discussion