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

用一个简单的 Stop Hook,让 Claude Code 每次完成回复后自动播放声音。适合经常把任务丢给 AI、然后切到别的窗口继续工作的人。
我用使用小米的 TTS生成了一个 "老铁666"的提示音文件。

我最近给自己的 Claude Code 加了一个很小的自动化:任务结束后,自动播放一段提示音。
这个功能不复杂,但体感提升很明显。以前让 Claude Code 改代码、跑检查、整理资料时,我经常会切去浏览器、编辑器或微信,过一会儿才想起来回来看看。现在它一结束就响一声,我不用一直盯着终端。
核心思路只有一句话:
利用 Claude Code 的
StopHook,在 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 调用 .NET 的 Media.SoundPlayer。PlaySync() 会同步播放 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 按当前机器上的真实配置来改。
参考
- Anthropic Claude Code Hooks 文档:docs.anthropic.com/en/docs/cla...