给 Claude Code 加上 Windows 提醒——一个小功能,少操十份心

36 阅读5分钟

人和 AI 并行工作,最怕的就是"我让 AI 去做 A,然后自己去忙 B,结果 B 做完了 A 还没消息,不知道它卡在哪了也不知道要不要去管"。

加上 Windows Toast 提醒,就没这个问题了。

原理:Claude Code 的 Hooks 机制

Claude Code 提供了 Hooks——一种在特定事件发生时自动执行脚本的机制。你可以把 Hook 理解为"监听器":当某个事件(比如 AI 停下来、对话结束、需要你审批权限)发生时,Claude Code 自动帮你跑一段代码,这段代码可以弹出一个 Windows 通知,提醒你去关注。

核心流程:

用户操作或AI行为 → 触发 Hook 事件 → 执行脚本 → 调用 win11toast → 桌面弹窗通知

你只需要做两件事:

  1. 安装 win11toast
  2. settings.json 里加几行配置

安装前提

1. 安装 Python 通知库

pip install win11toast

2. 验证安装成功

安装完成后,先跑一条命令确认 win11toast 能正常工作:

python -c "from win11toast import toast; toast('测试', '如果看到这个弹窗,说明安装成功')"

看到弹窗了,再继续往下配置。没看到弹窗,先重新安装:

pip install --force-reinstall win11toast

注意:本文仅适用于 Windows 11。Mac 用户需要用 osascriptterminal-notifier 等其他方案。

3. 确认配置文件位置

你的 settings.json 在:

C:\Users\singsky\.claude\settings.json

所有 Hook 配置都写在这个文件里。

场景一:AI 停止时提醒我(Stop Hook)

最常用的场景:AI 停止了(可能遇到了问题,或者任务完成),弹个通知告诉你。

settings.jsonhooks 字段里添加:

"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"
          }
        ]
      }
    ]
  }
}

如何合并到现有配置?StopSessionEndPermissionRequest 这三个块,复制到你现有的 settings.jsonhooks 字段里即可。如果某个事件已经存在,就合并数组,不要覆盖。

常用 Hook 类型一览

Hook 事件触发时机典型用途
SessionStart开始新对话时加载项目状态
SessionEnd对话结束时任务收尾提醒
StopAI 停止工作时检查是否卡住
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} 个待办事项")

弹窗没出来?排查步骤

  1. 手动测试 win11toast 是否正常

    python -c "from win11toast import toast; toast('测试', '检查是否能弹窗')"
    

    没弹 → 重新安装 pip install --force-reinstall win11toast

  2. 确认命令能执行

    bash -c 'python -c "from win11toast import toast; toast(\"Test\", \"Test\")"'
    

    报错 → 检查 Python 路径,Windows 上可能需要用完整路径

  3. 检查 settings.json 格式是否正确

    • JSON 不能有多余逗号
    • 每个 Hook 数组内的对象结构要完整
    • 可以用在线 JSON 验证工具先过一遍
  4. 重启 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 会:

  1. 读取你现有的 settings.json
  2. 追加 StopSessionEndPermissionRequest 三个 Hook 配置
  3. 保留你原有的所有 Hook 不动
  4. 把修改后的完整配置给你过目

你确认没问题,它再写入文件。整个过程你只需要发出一句话。