Claude Codeに仕事が終わったら通知して欲しい
https://blog.utgw.net/entry/2026/03/25/155551 みたいなことを手でやってた。
ここにあるように、TaskCompleted hookでやると毎回通知されるとうっとうしいか? という気がした。
settings.json{ "$schema": "https://json.schemastore.org/claude-code-settings.json", "hooks": { "TaskCompleted": [ { "hooks": [ { "type": "command", "command": "~/local/bin/tell-task-completed.sh", "timeout": 60 } ] } ] }}claude本人と話していたら、以下のようにしたらいい感じになった。
settings.json "hooks": { "Stop": [ { "hooks": [ { "type": "command", "command": "~/bin/claude-delayed-notify.sh &", "timeout": 1 } ] } ], "UserPromptSubmit": [ { "hooks": [ { "type": "command", "command": "~/bin/claude-cancel-notify.sh", "timeout": 1 } ] } ]claude-delayed-notify.sh#!/bin/bashPIDFILE="$HOME/.claude-notify.pid"
# 既存の待機プロセスをキャンセルif [ -f "$PIDFILE" ]; then OLD_PID=$(cat "$PIDFILE") kill "$OLD_PID" 2>/dev/null rm "$PIDFILE"fi
# 自分のPIDを記録してバックグラウンドで待機echo $$ > "$PIDFILE"sleep 10
# まだPIDファイルが残っていれば通知(キャンセルされなかった)if [ -f "$PIDFILE" ] && [ "$(cat "$PIDFILE")" = "$$" ]; then osascript -e 'display notification "入力待ちだ" with title "Claude Code"' rm "$PIDFILE"ficlaude-cancel-notify.sh#!/bin/bashPIDFILE="$HOME/.claude-notify.pid"
if [ -f "$PIDFILE" ]; then PID=$(cat "$PIDFILE") kill "$PID" 2>/dev/null rm "$PIDFILE"fi10秒待機して、それでも放置されてたら通知されるようにしたら、今のところいい感じ。