人和 AI 并行工作,最怕的就是"我让 AI 去做 A,然后自己去忙 B,结果 B 做完了 A 还没消息,不知道它卡在哪了也不知道要不要去管"。
加上 Windows Toast 提醒,就没这个问题了。
原理:Claude Code 的 Hooks 机制
Claude Code 提供了 Hooks——一种在特定事件发生时自动执行脚本的机制。你可以把 Hook 理解为"监听器":当某个事件(比如 AI 停下来、对话结束、需要你审批权限)发生时,Claude Code 自动帮你跑一段代码,这段代码可以弹出一个 Windows 通知,提醒你去关注。
核心流程:
用户操作或AI行为 → 触发 Hook 事件 → 执行脚本 → 调用 win11toast → 桌面弹窗通知
你只需要做两件事:
- 安装
win11toast库 - 在
settings.json里加几行配置
安装前提
1. 安装 Python 通知库
pip install win11toast
2. 验证安装成功
安装完成后,先跑一条命令确认 win11toast 能正常工作:
python -c "from win11toast import toast; toast('测试', '如果看到这个弹窗,说明安装成功')"
看到弹窗了,再继续往下配置。没看到弹窗,先重新安装:
pip install --force-reinstall win11toast
注意:本文仅适用于 Windows 11。Mac 用户需要用
osascript或terminal-notifier等其他方案。
3. 确认配置文件位置
你的 settings.json 在:
C:\Users\singsky\.claude\settings.json
所有 Hook 配置都写在这个文件里。
场景一:AI 停止时提醒我(Stop Hook)
最常用的场景:AI 停止了(可能遇到了问题,或者任务完成),弹个通知告诉你。
在 settings.json 的 hooks 字段里添加:
"Stop": [
{
"hooks": [
{
"command": "bash -c 'python -c \"from win11toast import toast; toast(\\\"Claude Code\\\", \\\"AI 已停止,请检查状态\\\")\"'",
"type": "command"
}
]
}
]
场景二:会话结束时提醒我(SessionEnd Hook)
对话结束(主动关闭或超时),想确认一下有没有遗漏的任务。
"SessionEnd": [
{
"hooks": [
{
"command": "bash -c 'python -c \"from win11toast import toast; toast(\\\"Claude Code\\\", \\\"会话已结束\\\")\"'",
"type": "command"
}
]
}
]
场景三:权限请求时提醒我(PermissionRequest Hook)
需要你审批权限时(比如要执行危险命令),弹通知提醒你去看一下。
"PermissionRequest": [
{
"hooks": [
{
"command": "bash -c 'python -c \"from win11toast import toast; toast(\\\"Claude Code 权限请求\\\", \\\"需要你批准某个操作\\\")\"'",
"type": "command"
}
]
}
]
完整配置示例
下面是一个完整的 Hook 配置,把这几个场景都加进去。注意保留你已有的其他 Hook 配置。
{
"hooks": {
"Stop": [
{
"hooks": [
{
"command": "bash -c 'python -c \"from win11toast import toast; toast(\\\"Claude Code\\\", \\\"AI 已停止,请检查状态\\\")\"'",
"type": "command"
}
]
}
],
"SessionEnd": [
{
"hooks": [
{
"command": "bash -c 'python -c \"from win11toast import toast; toast(\\\"Claude Code\\\", \\\"会话已结束\\\")\"'",
"type": "command"
}
]
}
],
"PermissionRequest": [
{
"hooks": [
{
"command": "bash -c 'python -c \"from win11toast import toast; toast(\\\"Claude Code 权限请求\\\", \\\"需要你批准某个操作\\\")\"'",
"type": "command"
}
]
}
]
}
}
如何合并到现有配置? 把
Stop、SessionEnd、PermissionRequest这三个块,复制到你现有的settings.json的hooks字段里即可。如果某个事件已经存在,就合并数组,不要覆盖。
常用 Hook 类型一览
| Hook 事件 | 触发时机 | 典型用途 |
|---|---|---|
SessionStart | 开始新对话时 | 加载项目状态 |
SessionEnd | 对话结束时 | 任务收尾提醒 |
Stop | AI 停止工作时 | 检查是否卡住 |
PreToolUse | 工具执行前 | 权限预检 |
PostToolUse | 工具执行后 | 记录执行结果 |
PostToolUseFailure | 工具执行失败 | 错误通知 |
UserPromptSubmit | 提交提示词后 | 记录活动状态 |
PermissionRequest | 请求权限时 | 提醒你审批 |
进阶:让提醒更聪明
自定义通知内容
可以把更多上下文信息放进通知里。例如,在 PostToolUseFailure 时显示错误类型:
"PostToolUseFailure": [
{
"hooks": [
{
"command": "bash -c 'python -c \"from win11toast import toast; toast(\\\"Claude Code 出错了\\\", \\\"工具执行失败,请查看终端\\\")\"'",
"type": "command"
}
]
}
]
多条提醒组合
同一个事件可以触发多条通知,或者同时执行其他操作(比如记录日志):
"SessionEnd": [
{
"hooks": [
{
"command": "bash $HOME/.claude/hooks/on-end",
"type": "command"
}
]
},
{
"hooks": [
{
"command": "bash -c 'python -c \"from win11toast import toast; toast(\\\"Claude Code\\\", \\\"会话结束\\\")\"'",
"type": "command"
}
]
}
]
定期提醒检查(Bonus)
如果你在并行工作,可以给 AI 留一个任务清单文件,让它在每次 SessionEnd 时检查你有没有遗漏的待办:
# ~/.claude/hooks/check-reminders.py
import os
from win11toast import toast
reminder_file = os.path.expanduser("~/.claude/reminders.txt")
if os.path.exists(reminder_file):
with open(reminder_file) as f:
lines = f.readlines()
if lines:
count = len(lines)
toast("Claude Code 任务提醒", f"你有 {count} 个待办事项")
弹窗没出来?排查步骤
-
手动测试 win11toast 是否正常
python -c "from win11toast import toast; toast('测试', '检查是否能弹窗')"没弹 → 重新安装
pip install --force-reinstall win11toast -
确认命令能执行
bash -c 'python -c "from win11toast import toast; toast(\"Test\", \"Test\")"'报错 → 检查 Python 路径,Windows 上可能需要用完整路径
-
检查 settings.json 格式是否正确
- JSON 不能有多余逗号
- 每个 Hook 数组内的对象结构要完整
- 可以用在线 JSON 验证工具先过一遍
-
重启 Claude Code 配置修改后需要重启才能生效,关闭当前会话再开一个新对话
配好之后,你就再也不用担心"A 我让它去干什么了,现在什么情况"了。桌面通知弹一下,知道了,继续忙自己的。
让 Claude Code 帮你做(你只管验收)
不想自己改 JSON?把下面这条命令发给 Claude Code,它会帮你搞定所有配置,你只需要确认结果。
帮我把 win11toast 提醒加到 Claude Code 的 hooks 配置里。需要监听三个事件:
1. Stop:AI 停止时弹出"AI 已停止,请检查状态"
2. SessionEnd:会话结束时弹出"会话已结束"
3. PermissionRequest:权限请求时弹出"需要你批准某个操作"
配置文件在 C:\Users\singsky\.claude\settings.json,保留现有所有 hooks 不变,只新增这三个事件。
Claude Code 会:
- 读取你现有的
settings.json - 追加
Stop、SessionEnd、PermissionRequest三个 Hook 配置 - 保留你原有的所有 Hook 不动
- 把修改后的完整配置给你过目
你确认没问题,它再写入文件。整个过程你只需要发出一句话。