How to Get Claude Code Notifications on Your Wrist
Claude Codeに作業を頼んでいると、たまにツール使用許可を求めて止まっていることがあります。ターミナルの画面が隠れていると作業が停止していることに気づかず、タイムロスになってしまいます。
これの対策として、Claude Codeからの通知を(スマホ経由で)スマートウォッチで受け取れるようにしました。
Pushoverの設定
通知を受け取るために、Pushoverというサービスを使用します。2025年9月時点の料金体系は、最初の30日が無料トライアル、その後は$4.99の買い切りらしいです。筆者もまだ使い始めて30日経っていないのでよくわかりません。
実際に通知が入るのはスマホアプリです。これをスマートウォッチで確認するように連携します。
アカウントを作ったら、ユーザーページからUser Keyを控えておきます。また、Your Applicationsからアプリを作成し、API Tokenを取得します。
Pushover.netの画面
これらを環境変数としてローカル環境で用意しておきましょう。
User KeyとApi Tokenが漏れると、他人が勝手に自分のデバイスに通知を飛ばせてしまう危険があります。厳重に管理しましょう。
export PUSHOVER_API_TOKEN=your_pushover_api_token
export PUSHOVER_USER_KEY=your_pushover_user_key
設定できたら、環境変数を使って以下のようにリクエストを飛ばしてみましょう。スマホアプリで通知されたら成功です。
curl -s \
--form-string "token=${PUSHOVER_API_TOKEN}" \
--form-string "user=${PUSHOVER_USER_KEY}" \
--form-string "message='This is test message'" \
--form-string "device=iphone15" \
--form-string "title='Test Notification'" \
https://api.pushover.net/1/messages.json
なお、device
はユーザーが独自に設定できる名前です。これが指定されていない場合は自分のPushoverアプリ全てに通知が飛ぶようです。
スマホとスマートウォッチの通知を連携させる方法は各自お持ちのアイテムの設定ガイドを確認してください。
Claude Codeの設定
Claude Codeの通知はNotificationというフックで発動できます。
claudeの設定に以下のように記述します。
{
"hooks": {
"Notification": [{
"hooks": [{
"type": "command",
"command": "CLAUDE_CONFIG_DIR/notification.sh"
}]
}],
},
// その他は略…
}
notification.shを以下の内容で作成し、 chmod +x notification.sh
で実行権限をつけておきます。実行にはjqが必要です。
#!/usr/bin/env bash
# Read JSON input from stdin
input=$(cat)
MESSAGE=$(echo "$input" | jq -r '.message')
case "$MESSAGE" in
'Claude is waiting for your input')
NOTIFY_MSG="入力を待っています"
;;
'Claude Code login successful')
# do nothing
exit 0
;;
'Claude needs your permission to use '*)
NOTIFY_MSG="${MESSAGE#Claude needs your permission to use }の許可が必要です"
;;
*)
NOTIFY_MSG="${MESSAGE}"
;;
esac
# Pushover notification
curl -s \
--form-string "token=${PUSHOVER_API_TOKEN}" \
--form-string "user=${PUSHOVER_USER_KEY}" \
--form-string "message=${NOTIFY_MSG}" \
--form-string "device=iphone15" \
--form-string "title=Claude Code" \
https://api.pushover.net/1/messages.json
リファレンスにありますが、フックスクリプトに渡されるJSONにmessage
というフィールドがあるので、ここで通知の中身を判定できます。
上記のスクリプトでは以下のとおり分岐しています:
-
Claude is waiting for your input
- Claude Codeが作業を完了し、しばらくユーザーが何も入力していない場合のメッセージ
- その旨を通知
-
Claude Code login successful
- ログインしたときの通知
- これが出るときは操作をしている途中のはずなのでわざわざ通知を飛ばす必要はない
- ということで何もせず終了
-
Claude needs your permission to use {ツール名}
- 何らかのツールの許可を求めている状態
- ツール名を使用して通知文を作成(例:
Writeの許可が必要です
)
- その他
- 他のメッセージがあるのかよくわかっていない
- とりあえずメッセージをそのまま通知
- 今後分岐を追加するかも
末尾の部分は既に紹介したPushoverのAPIを呼んでいます。deviceやtitleは読者の好みに合わせて調整してください。
便利
Claudeの指示待ちを見逃しづらくなり、かなり便利になりました。
欲を言えばスマートウォッチから直接実行許可を出したいのですが、さすがに難しそうです。
スマホから接続して指示を出すことはできるかもしれないので、知見のある方がいらっしゃいましたらアドバイスをいただけると嬉しいです。
Discussion