如何优雅的给Claude Code装上通知功能
众所周知,相信大家都在或多或少的使用Claude Code辅助工作和学习,一个令人头疼的点在于有些时候让Claude干一件事情,自己去刷别的经常忘记了时间导致效率低下,因为claude code并没有消息提醒。
Claude Code 的 hook 功能可以让你在特定事件发生时执行自定义脚本。要实现推送提醒,你需要:
基本设置
首先在 Claude Code 配置文件中启用 hooks。配置文件通常在 ~/.claude/config.json:
{
"hooks": {
"on_permission_request": "~/.claude/hooks/notify_permission.sh",
"on_task_complete": "~/.claude/hooks/notify_done.sh"
}
}
本地运行实现推送脚本
对于 macOS,可以使用系统通知:
#!/bin/bash
# ~/.claude/hooks/notify_permission.sh
osascript -e 'display notification "Claude Code needs permission" with title "Action Required"'
#!/bin/bash
# ~/.claude/hooks/notify_done.sh
osascript -e 'display notification "Task completed" with title "Claude Code Done"'
对于 Linux,可以用 notify-send:
#!/bin/bash
notify-send "Claude Code" "Needs permission" -u critical
本地更高级的选项
如果你想要更强的提醒(比如声音、Slack 消息等),可以:
- 添加声音:
osascript -e 'beep 2' # macOS
paplay /usr/share/sounds/freedesktop/stereo/bell.oga # Linux
- 发送到手机(使用 Pushover 或类似服务):
curl -s \
--form-string "token=YOUR_APP_TOKEN" \
--form-string "user=YOUR_USER_KEY" \
--form-string "message=Claude needs permission" \
https://api.pushover.net/1/messages.json
- Slack webhook:
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"Claude Code needs permission"}' \
YOUR_SLACK_WEBHOOK_URL
记得给脚本添加执行权限:
chmod +x ~/.claude/hooks/*.sh
这样每次 Claude Code 需要权限或完成任务时,你就会收到通知了。
在服务器上怎么办
那么有很多人说,假设我是SSH到公司或者学校的HPC上怎么办?
在 HPC 上情况会复杂一些,因为通常没有图形界面,而且你可能是通过 SSH 连接的。以下是几个实用方案:
1. 邮件通知(最可靠)
#!/bin/bash
# ~/.claude/hooks/notify_permission.sh
echo "Claude Code needs your permission at $(date)" | \
mail -s "Claude Code: Action Required" [email protected]
一般服务器都应该有配置好的邮件系统,这样你能在手机上立即收到通知。
2. 本地桌面通知(通过 SSH 反向代理)(注意安全 请咨询服务器管理员慎用)
在本地机器运行一个简单的通知服务器:
# 本地机器:~/notify_server.py
from flask import Flask, request
import subprocess
app = Flask(__name__)
@app.route('/notify', methods=['POST'])
def notify():
msg = request.json.get('message', 'Notification')
subprocess.run(['osascript', '-e',
f'display notification "{msg}" with title "Claude Code (HPC)"'])
return 'OK'
app.run(port=5555)
在 HPC 的 hook 脚本中:
#!/bin/bash
# ~/.claude/hooks/notify_permission.sh
curl -X POST http://localhost:5555/notify \
-H "Content-Type: application/json" \
-d '{"message":"Claude needs permission"}'
SSH 连接时使用反向端口转发:
ssh -R 5555:localhost:5555 [email protected]
3. Telegram Bot(推荐,跨平台)
创建 Telegram bot 后:
#!/bin/bash
# ~/.claude/hooks/notify_permission.sh
BOT_TOKEN="your_bot_token"
CHAT_ID="your_chat_id"
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d text="🔔 Claude Code needs permission on $(hostname)"
4. 文件监控(简单但需要轮询)
Hook 写入标记文件:
#!/bin/bash
echo "$(date): Permission needed" >> ~/claude_notifications.log
本地机器定期检查:
# 本地运行
while true; do
ssh greatlakes "tail -n 1 ~/claude_notifications.log" | \
while read line; do
osascript -e "display notification \"$line\" with title \"HPC Alert\""
done
sleep 30
done
5. Slack/Discord Webhook(企业环境常用)
#!/bin/bash
WEBHOOK_URL="your_webhook_url"
curl -X POST "${WEBHOOK_URL}" \
-H 'Content-Type: application/json' \
-d "{\"text\":\"Claude Code on $(hostname) needs permission\"}"
Claude推荐 Telegram Bot 方案,因为:
-
设置简单,不需要保持 SSH 连接
-
手机能即时收到通知
-
免费且可靠
-
不依赖学校和企业的邮件系统延迟
一些好玩的
利用Hooks功能,可以让Claude Code在特定事件发生时执行特定动作,比如在任务完成后播放音频提醒:比如ask for permission或者plan mode ask questions的时候弹出等等等的声音,或者在完成之后播放超级马里奥通关的音乐等等。另外,它还可以让Claude Code自动执行Python脚本,这个想象力就很大了。