はじめに
最近は仕事でもAI駆動開発が推進されていて日々AIエージェントと格闘(共闘?)しています。
あるあるですが、Claude Code(などのAIエージェント)は、YOLOモード(--dangerously-skip-permissions)でない限り、コマンド実行時に毎回許可確認で一時停止しますよね。
もちろん YOLO モードを安全に使う方法を探るアプローチもありますが、私はまだ慎重派なので、コミット・プッシュ・PR 作成などは自分で内容確認するスタイルです。
既に多くの方がやっていると思いますが、「エージェントが止まったら気づきたい」という素朴な願いを叶えるため、Mac の通知を出すようにしてみたメモを自分用に書いておきます。
(この手順自体も Claude Code と会話しながらやりました)
目的
- 許可待ちやタスク完了など、Claude Code が停止している状態を見逃さないようにしたい
やったこと
- 許可待ち・入力待ち・タスク完了のイベントで、Mac の右上に通知が残るように設定した
(最初は「音を鳴らす」だけで試していたけど、席を外すと気づかないので通知方式に移行) - 「許可待ち」は5秒ぐらい遅れて通知されます
やり方
1. terminal-notifier をインストール
Mac の通知センターへ任意の通知を送れるユーティリティです。
brew install terminal-notifier
※「新しいツール入れたくない」という場合は osascript でも通知できますが、音と通知を両方まとめて扱ったり、表示内容に柔軟性を持たせたい場合は terminal-notifier が便利でした。
2. Claude Code の設定に Hook を追加
.claude/settings.json または Claude Code の /hooks コマンドで以下を追加します。
※ /hooks コマンドだと Notification の matcher を空にできなかったので設定ファイルを編集しました。
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "echo '{\"cwd\": \"'\"$(pwd)\"'\", \"notification_type\": \"stop\"}' | ~/.claude/notify.sh"
}
]
}
],
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "~/.claude/notify.sh"
}
]
}
]
}
Hook に直接処理を書くこともできますが、スクリプトにすると編集が簡単で、Claude Code の再起動も不要になります。(Hook は即時反映らしいですが一応再起動もしてました)
参考: osascript
もしMac標準の osascript がいいなら以下の感じで動きました。
右上に通知を残したい場合は、 通知 > スクリプトエディタ の通知スタイルを変更すればいいです。
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "/usr/bin/afplay /System/Library/Sounds/Ping.aiff"
},
{
"type": "command",
"command": "osascript -e 'display notification \"許可待ち\" with title \"Claude Code\"'"
}
]
}
]
3. 通知スクリプトを作成する
~/.claude/notify.sh を作成:
#!/bin/bash
input=$(cat)
cwd=$(echo "$input" | jq -r '.cwd')
project=$(basename "$cwd")
notification_type=$(echo "$input" | jq -r '.notification_type')
case "$notification_type" in
"permission_prompt")
terminal-notifier -title "Claude Code" -subtitle "$project" -message "許可待ち" -sound "Ping"
;;
"idle_prompt")
terminal-notifier -title "Claude Code" -subtitle "$project" -message "入力待ち" -sound "Purr"
;;
"stop")
terminal-notifier -title "Claude Code" -subtitle "$project" -message "タスク完了" -sound "Glass"
;;
*)
terminal-notifier -title "Claude Code" -subtitle "$project" -message "通知" -sound ""
;;
esac
実行権限:
chmod +x ~/.claude/notify.sh
4. Cursorで通知音を許可
ひょっとしたら不要だったかもですが、一応設定しました。
accessibility.signals.terminalBell の sound を on に変更します。
5. Mac の通知設定で「持続的」に変更
terminal-notifier の通知スタイルを「バナー」ではなく 持続的 にしておくと、席を外しても後から気づけます。
発端
"Vibe kanban"というツールを教えてもらって試していたら、タスク完了のたびに牛が「モ〜」と鳴きまして。
しばらく使ってないですが Kiro でも進捗時に音が鳴っていたのを思い出し、「あ、音で知らせるのって意外と便利!」と改めて感じたのがきっかけです。
とはいえ音だけだと離席中は気づけないので、Mac に通知を残す方式に落ち着きました。
やっぱり新しいツールを触ってみるのは発見がありますね(普段は慎重派ですが...)。
注意点
VSCode拡張版の Claude Code では Notification が発火しない
Issue に挙がっていました。
https://github.com/anthropics/claude-code/issues/11156
そのため最近は VSCode 拡張に寄せていたのですが、 CLI に戻ろうかなと思ってます。
参考
以下の記事ではセキュリティベストプラクティスまで書かれているので参考にさせてもらいたいと思います。
https://zenn.dev/yuru_log/articles/claude-code-hooks-terminal-notifier-guide
最後に
運動通信社は「日本を世界が憧れるスポーツ大国にする」というビジョンを達成するべく、一緒に働く仲間を募集しています!
PMやアプリエンジニア、Webエンジニアなど色んな職種を募集しておりカジュアル面談大歓迎なので是非採用フォームよりご連絡ください!
ぜひ一緒に、自分たちも世の中もワクワクさせるサービスを作りましょう!

