Claude Code 任务结束会自己喊你:一个 Stop Hook 搞定提示音

Claude Code 任务结束会自己喊你:一个 Stop Hook 搞定提示音

用一个简单的 Stop Hook,让 Claude Code 每次完成回复后自动播放声音。适合经常把任务丢给 AI、然后切到别的窗口继续工作的人。

我用使用小米的 TTS生成了一个 "老铁666"的提示音文件。

我最近给自己的 Claude Code 加了一个很小的自动化:任务结束后,自动播放一段提示音。

这个功能不复杂,但体感提升很明显。以前让 Claude Code 改代码、跑检查、整理资料时,我经常会切去浏览器、编辑器或微信,过一会儿才想起来回来看看。现在它一结束就响一声,我不用一直盯着终端。

核心思路只有一句话:

利用 Claude Code 的 Stop Hook,在 Claude 完成一次回复后执行一条播放音频的命令。

Claude Code Hooks 是什么

Claude Code 支持在一些关键事件发生时自动执行命令,比如工具调用前、工具调用后、会话开始、会话结束,以及 Claude 回复停止时。

这类机制叫 Hooks。官方文档里说明,Hooks 可以配置在这些位置:

  • ~/.claude/settings.json:用户级配置,所有项目生效
  • .claude/settings.json:项目级配置,适合团队共享
  • .claude/settings.local.json:本地项目配置,适合个人偏好

这次用到的是 Stop 事件。它会在 Claude Code 主 Agent 完成回复时触发,所以很适合做"任务结束提醒"。

我本机的实现

我检查了一下自己的 Claude Code 配置,当前 ~/.claude/hooks/hooks.json 里已经有多组 Stop Hook,比如格式化检查、会话记录、桌面通知等。

hook 记录里可以看到我之前实际跑过的播放声音命令,大致是这样:

powershell 复制代码
powershell -NoProfile -ExecutionPolicy Bypass -Command "(New-Object Media.SoundPlayer 'C:\Users\你的用户名\.claude\sounds\lao-tie-666.wav').PlaySync()"

我的音频文件放在:

text 复制代码
~/.claude/sounds/lao-tie-666.wav

Windows 上最简单的播放方式就是用 PowerShell 调用 .NETMedia.SoundPlayerPlaySync() 会同步播放 wav 文件,声音播完后命令结束。

最小可用配置

如果你只想实现"Claude Code 回复结束后响一声",可以在 ~/.claude/settings.json 里加一段类似配置:

json 复制代码
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "powershell -NoProfile -ExecutionPolicy Bypass -Command \"(New-Object Media.SoundPlayer 'C:\\Users\\你的用户名\\.claude\\sounds\\done.wav').PlaySync()\""
          }
        ]
      }
    ]
  }
}

注意几点:

  • Windows 建议使用 .wav 文件,Media.SoundPlayer 对 wav 支持最稳。
  • JSON 里的 Windows 路径要写成双反斜杠,比如 C:\\Users\\...
  • 如果你已经有 hooks 配置,不要直接整段覆盖,应该把 Stop 里的 hook 合并进去。
  • 修改完成后,重启 Claude Code,或者用 /hooks 检查 hook 是否注册成功。

输入提示词一键帮你配置

如果你不想自己手动改 JSON,也可以直接把这件事交给 Claude Code。

我的建议是,不要只说"帮我加一个提示音"。这个描述太宽泛,Claude Code 可能不知道你想加在哪个 hook、音频文件放在哪里、是否需要保留已有配置。更稳的方式是把目标、环境、约束一次说清楚。

可以直接复制下面这段提示词:

text 复制代码
请帮我给 Claude Code 配置一个任务结束提示音。

目标:
当 Claude Code 每次完成回复时,通过 Stop Hook 自动播放一个 wav 音频。

我的环境:
- 系统是 Windows
- Claude Code 配置目录是 ~/.claude
- 音频文件希望放在 ~/.claude/sounds/done.wav

请你帮我完成这些事:
1. 先检查 ~/.claude/settings.json、~/.claude/settings.local.json,以及 ~/.claude/hooks/hooks.json 里是否已经存在 hooks 配置。
2. 如果已经有 hooks,不要覆盖原配置,只合并一个 Stop Hook。
3. 如果 ~/.claude/sounds 目录不存在,请创建它。
4. 如果 done.wav 不存在,请提醒我放入 wav 文件,不要伪造音频文件。
5. Windows 播放命令使用 PowerShell 的 Media.SoundPlayer,并使用 PlaySync()。
6. 修改前先备份原配置文件。
7. 配置完成后,告诉我实际修改了哪个文件,以及如何用 /hooks 或一次简单对话验证。

如果你已经有自己的音频,比如我这里用的是 lao-tie-666.wav,把提示词里的文件名替换掉就行:

text 复制代码
音频文件使用 ~/.claude/sounds/lao-tie-666.wav

这里有一个关键点:一定要强调"不要覆盖原配置,只合并 Stop Hook"。很多人的 Claude Code 里已经有其他 hook,比如格式化、日志、通知、会话记录。直接覆盖 hooks 字段,很容易把原来的自动化弄没。

配置完成后,可以让 Claude Code 再做一次自检:

text 复制代码
请检查刚才添加的 Stop Hook 是否满足:
1. JSON 格式合法;
2. 不影响已有 hooks;
3. 音频文件路径存在;
4. PowerShell 命令可以独立运行;
5. hook 失败时不会阻塞 Claude Code 的正常使用。

这样做的好处是,你不用记 Claude Code hooks 的完整格式,也不用手动处理 JSON 转义。你只需要把需求描述清楚,让 Claude Code 按当前机器上的真实配置来改。

参考

相关推荐
ZC跨境爬虫2 小时前
跟着 MDN 学CSS day_30:(玩转列表样式,从基础到进阶)
前端·css·html·tensorflow·媒体
仙俊红2 小时前
spring有多个对象时如何注入
java·后端·spring
ct9782 小时前
TypeScript 中的泛型
前端·javascript·typescript
Java爱好狂.2 小时前
Redis高级笔记:深入浅出Java面试高频考点!
java·数据库·redis·后端·java面试·java程序员·java八股文
IT_陈寒2 小时前
React hooks闭包陷阱把我坑惨了,原来这才是正确用法
前端·人工智能·后端
会编程的土豆2 小时前
Go 里 interface 为什么能比较?到底在比什么?
开发语言·后端·golang
nnsix2 小时前
MVC、MVP、MVVM 架构 笔记
java·开发语言·前端
qq_420362032 小时前
前端国际化方案
前端·javascript·vue.js·国际化·reactjs
向上的车轮2 小时前
React 19 快速入门:拥抱服务端组件与新特性的现代化开发
前端·javascript·react.js