Claude Code には、決まったタイミングでコマンドを実行する仕組みがあります。フックと呼ばれるもので、設定ファイルに書くだけで使えます。応答が終わったときに動くのが Stop です。
音で知らせる設定
-
設定ファイルを開く
~/.claude/settings.json を開きます。無ければ作ります。 -
hooks を書き足す
下の内容を貼ります。すでに他の設定があるときは、hooks の行だけを足してください。 -
Claude Code を開き直す
設定は起動時に読まれます。開いたままだと効きません。
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "aplay -q /usr/share/sounds/freedesktop/stereo/complete.oga"
}
]
}
]
}
}
これで、Claude Code が応答を終えるたびに音が鳴ります。ファイルの場所は環境で違うので、鳴らないときは ls /usr/share/sounds/freedesktop/stereo/ で中身を見て、別のファイル名に変えてください。macOS なら afplay /System/Library/Sounds/Glass.aiff です。
設定ファイルの置き場所
画面に通知を出す
音ではなく通知を出したいときは、コマンドの中身を差し替えます。
"command": "notify-send 'Claude Code' '作業が終わりました'"
Linux の場合、通知を受け取る常駐プログラムが動いている必要があります。動いていないと org.freedesktop.Notifications was not provided というエラーになります。実際に手元で試したときも、デスクトップにログインしていない状態では出ませんでした。音のほうが確実です。
スマホに飛ばす
席を外すなら、スマホに送るのが確実です。ntfy というサービスを使うと、登録なしで送れます。
"command": "curl -s -d '作業が終わりました' https://ntfy.sh/自分だけの長い文字列"
スマホに ntfy のアプリを入れて、同じ文字列を購読しておくと届きます。この文字列を知っている人は誰でも同じ通知を見られるので、推測されない長いものにしてください。
複数を同時にやる
コマンドは ; でつなげます。音を鳴らしつつ、記録も残す形です。
"command": "aplay -q /usr/share/sounds/freedesktop/stereo/complete.oga; date >> /tmp/claude-hook.log"
動いていないと思ったら
実際に試した結果
この記事の内容は Ubuntu で実際に動かして確かめました。フックに書いたコマンドが実行されること、音が鳴ること、ntfy にメッセージが届くことを確認しています。デスクトップ通知だけは、通知を受け取る常駐プログラムが無い環境では出ませんでした。エラーの文言もそのまま載せてあります。
