Automatic Notification System for Claude Code Task Completion & AskUserQuestion
让 Claude Code 在完成任务后、或向你提问需要回答时,自动发送通知提醒你,支持本地桌面通知和飞书推送。
- ✅ 任务完成通知:Claude Code 停止响应时(Stop hook)推送提醒
- ✅ 提问等待通知:Claude Code 调用
AskUserQuestion向你提问时(PreToolUse hook)推送提醒,避免对话挂起没人理 - ✅ 本地通知:Linux/macOS/Windows 桌面弹窗提醒
- ✅ 飞书推送:远程服务器工作时的移动端通知
- ✅ 开箱即用:Hooks 是 Claude Code 内置功能,无需安装插件
- ✅ 简单配置:仅需修改配置文件即可启用
- ✅ Codex CLI 支持:同时适配 OpenAI Codex CLI,任务完成自动推送(见下方 Codex CLI 支持)
# 复制脚本到 Claude Code 配置目录
cp notify.sh ~/.claude/notify.sh # 任务完成通知
cp notify-ask.sh ~/.claude/notify-ask.sh # 提问等待通知(可选,依赖 jq)
# 添加执行权限
chmod +x ~/.claude/notify.sh ~/.claude/notify-ask.sh💡
notify-ask.sh用jq解析 Claude Code 传入的问题文本。建议安装:
- Ubuntu/Debian:
sudo apt-get install jq- macOS:
brew install jq- 未安装 jq 也能工作,但飞书卡片不会显示具体问题内容
如果你想接收飞书通知:
- 打开飞书,进入一个群聊(或新建一个)
- 点击群设置 → 群机器人 → 添加机器人
- 选择「自定义机器人」,设置名称
- 复制生成的 Webhook 地址
- 编辑
~/.claude/notify.sh,填入 Webhook:
FEISHU_WEBHOOK="https://open.feishu.cn/open-apis/bot/v2/hook/your-webhook-url"编辑 ~/.claude/settings.json,添加以下配置:
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "/your/home/dir/.claude/notify.sh" // Windows版本填写:"powershell.exe -ExecutionPolicy Bypass -File \"C:\\Users\\admin\\.claude\\notify.ps1\""(配置完需要删掉注释)
}
]
}
],
"PreToolUse": [
{
"matcher": "AskUserQuestion",
"hooks": [
{
"type": "command",
"command": "/your/home/dir/.claude/notify-ask.sh" // Windows版本填写:"powershell.exe -ExecutionPolicy Bypass -File \"C:\\Users\\admin\\.claude\\notify-ask.ps1\""(配置完需要删掉注释)
}
]
}
]
}
}配置说明:
"Stop"— 在 Claude 完成响应时触发,对应notify.sh(任务完成通知)"PreToolUse" + matcher "AskUserQuestion"— 在 Claude 调用提问工具时触发,对应notify-ask.sh(提问等待通知)"matcher": ""— 空字符串表示所有情况都触发"command"— 脚本的绝对路径(使用~/.claude/notify.sh的绝对路径)
💡 两个 hook 可以单独启用,按需配置。只要任务完成提醒就只配
Stop,只要等待提问提醒就只配PreToolUse。
获取绝对路径:
echo ~/.claude/notify.sh
# 输出:/root/.claude/notify.sh配置完成后,重启 Claude Code 即可生效。
随便问 Claude Code 一个问题,当它回复完成后,你应该能收到通知!
使用 notify-send 发送桌面通知。
# 安装(Ubuntu/Debian)
sudo apt-get install libnotify-bin支持 terminal-notifier 或 osascript。
# 安装 terminal-notifier(可选)
brew install terminal-notifier通过 PowerShell 发送 Toast 通知(支持 WSL/Git Bash)。
发送富文本卡片消息:
任务完成通知(绿色卡片):
- 通知标题
- 执行状态
- 当前工作目录
- 完成时间
提问等待通知(橙色卡片):
- 「❓ Claude Code 等待你的回答」标题
- 具体问题文本(从 hook 输入中解析)
- 选项数和问题数
- 当前工作目录
- 触发时间
Claude Code 在长任务中可能会通过 AskUserQuestion 工具向用户提问,比如:
- 「要不要清理这些临时文件?」
- 「这两种实现方案你选哪种?」
如果此时你已经离开终端去做别的事,Claude Code 会一直挂起等待回答,但你完全不知道。Stop hook 在这种情况下不会触发(因为对话还没结束)。
notify-ask.sh / notify-ask.ps1 解决的就是这个问题:
- 在 Claude 调用
AskUserQuestion工具之前(PreToolUse),先推一条飞书橙色卡片 - 卡片包含具体问题文本,你看一眼就知道该不该立刻回去回答
- 异步发送,不会阻塞 Claude Code 的执行
除了 Claude Code,本仓库也提供了 OpenAI Codex CLI 的通知脚本 notify-codex.sh。Codex 完成一轮响应时(agent-turn-complete)会自动推送飞书绿色卡片,包含 Codex 最后一段回复摘要。
两者触发机制不同,配置方式也不同:
| Claude Code | Codex CLI | |
|---|---|---|
| 传递方式 | stdin(JSON) | 命令行参数 $1(JSON) |
| 触发配置 | hooks(settings.json) |
notify(config.toml) |
| 事件字段 | transcript_path |
type + last-assistant-message |
1. 安装脚本
cp notify-codex.sh ~/.codex/notify-codex.sh
chmod +x ~/.codex/notify-codex.sh2. 填入飞书 Webhook
编辑 ~/.codex/notify-codex.sh:
FEISHU_WEBHOOK="https://open.feishu.cn/open-apis/bot/v2/hook/your-webhook-url"3. 配置 Codex
编辑 ~/.codex/config.toml,添加 notify 配置(顶层字段):
notify = ["/Users/你的用户名/.codex/notify-codex.sh"]
⚠️ notify数组里填脚本的绝对路径。
4. 测试
~/.codex/notify-codex.sh '{"type":"agent-turn-complete","last-assistant-message":"测试 Codex 通知"}'收到飞书绿色卡片 + 本地通知即配置成功。下次运行 codex 任务,完成时会自动推送。
编辑 notify.sh 中的配置区域:
TITLE="Claude Code"
MESSAGE="任务执行完成"在 notify.sh 中添加新的函数,例如:
send_telegram_notification() {
# 你的 Telegram Bot 逻辑
curl -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
-d "chat_id=$CHAT_ID" \
-d "text=$MESSAGE"
}
# 在脚本末尾调用
send_telegram_notificationA: 使用 claude --debug 启动,查看详细的 Hook 执行日志。
A: Hooks 在启动时加载。修改后需重启 Claude Code,或使用 /hooks 命令重新加载。
A: 检查系统是否安装了通知工具:
- Linux:
notify-send - macOS:
terminal-notifier或osascript - Windows: PowerShell
A: 检查:
- Webhook URL 是否正确
- 飞书机器人是否被禁用
- 网络连接是否正常
除了任务完成通知,你还可以实现:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "/path/to/safety-check.sh"
}
]
}
]
}
}{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "prettier --write ."
}
]
}
]
}
}{
"hooks": {
"SessionStart": [
{
"matcher": "startup",
"hooks": [
{
"type": "command",
"command": "echo \"$(date): 新会话\" >> ~/.claude/session.log"
}
]
}
]
}
}| 事件名称 | 触发时机 | 典型用途 |
|---|---|---|
| SessionStart | 会话启动或恢复时 | 加载配置、初始化环境 |
| UserPromptSubmit | 用户提交问题时 | 注入上下文、记录日志 |
| PreToolUse | 工具执行前 | 拦截危险操作、审批确认 |
| PermissionRequest | 需要用户授权时 | 自动审批或拒绝 |
| PostToolUse | 工具执行后 | 记录操作、触发后续任务 |
| Notification | 发送通知时 | 自定义通知渠道 |
| Stop | Claude 完成响应时 | 发送完成通知 ⭐ |
| SubagentStop | 子代理完成时 | 监控子任务状态 |
| PreCompact | 压缩上下文前 | 保存重要信息 |
如果你对 Claude Code 开发感兴趣,推荐查看以下项目:
一套完整的微信公众号内容创作工具,包括:
- AI 写作助手 - 智能生成高质量技术文章
- 文章格式化 - Markdown 转微信排版
- 草稿发布 - 自动发布到微信后台
💡 本通知工具与微信工具集配合使用,可实现文章发布后的自动通知提醒!
使用本工具和其他 Claude Code 技巧创作的精选文章:
💡 提示:以上文章均使用 Claude Code 和相关工具完成创作,欢迎参考学习!
扫描下方二维码关注我的微信公众号,获取更多 Claude Code 和 AI 开发技巧:
👆 关注公众号 - 第一时间获取最新文章和工具更新
扫描下方二维码添加作者微信,交流使用心得:
👆 添加微信 - 疑问解答、技术交流,拉你入群
扫描下方二维码加入微信群,与更多开发者交流:
👆 加入群聊 - 技术讨论、问题解答、交流讨论
如果这个项目对你有帮助,欢迎赞赏支持:
👆 赞赏支持 - 您的支持是我最大的动力
MIT License - 供个人和商业使用
感谢 Claude Code 团队提供的强大 Hooks 功能!
祝你使用愉快! 🎉
如有问题或建议,欢迎通过上方二维码联系我!





