如何让 Claude Code 每轮对话结束播放提示音通知你
Claude Code 处理长任务时,开发者切到浏览器或终端做别的事,完成后没有声音提示,容易错过回复时机。同样,Claude 向你提问或请求权限审批时如果没注意到,也会拖慢整个流程。通过配置 Stop、Notification、PermissionRequest 三个 Hook,可以让 Claude 在不同场景下自动播放不同提示音。
Claude Code 的 Hook 机制
Hook 是 Claude Code 的生命周期钩子系统,在特定事件发生时自动执行命令。与声音通知相关的事件:
| 事件 | 触发时机 | 音效建议 |
|---|---|---|
Stop |
Claude 完成一轮回复 | tada.wav — 任务完成 |
Notification |
Claude 发出通知(包括提问) | notify.wav — 需要你注意 |
PermissionRequest |
Claude 请求权限审批 | chimes.wav — 需要立即审批 |
三个事件用不同音效,听声音就知道该做什么。
配置方法
编辑用户级配置文件 ~/.claude/settings.json,添加 hooks 字段:
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "(New-Object Media.SoundPlayer 'C:\\Windows\\Media\\tada.wav').PlaySync()",
"shell": "powershell",
"timeout": 10
}
]
}
],
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "(New-Object Media.SoundPlayer 'C:\\Windows\\Media\\notify.wav').PlaySync()",
"shell": "powershell",
"timeout": 10
}
]
}
],
"PermissionRequest": [
{
"hooks": [
{
"type": "command",
"command": "(New-Object Media.SoundPlayer 'C:\\Windows\\Media\\chimes.wav').PlaySync()",
"shell": "powershell",
"timeout": 10
}
]
}
]
}
}保存后立即生效,无需重启。
字段说明
| 字段 | 值 | 作用 |
|---|---|---|
type |
"command" |
执行 shell 命令 |
command |
PowerShell 播放音频的命令 | 播放指定 .wav 文件 |
shell |
"powershell" |
显式指定 PowerShell,避免被 Git Bash 接管 |
timeout |
10 |
超时秒数,防止音频卡死阻塞会话 |
command 中的路径使用 \\ 双反斜杠,因为 JSON 字符串中 \ 是转义字符。
换成自定义音效
Windows 系统自带音效位于 C:\Windows\Media\,可选 tada.wav、notify.wav、chimes.wav、ding.wav 等。
如果想用自定义音效:
- 准备一个
.wav文件,放到任意路径 - 将
command中的路径替换为自定义文件路径:
"command": "(New-Object Media.SoundPlayer 'C:\\Users\\你的用户名\\sounds\\custom.wav').PlaySync()"macOS / Linux 方案
非 Windows 系统需要替换 command,并去掉 shell 字段(默认使用 bash):
macOS:
{
"type": "command",
"command": "afplay /System/Library/Sounds/Glass.aiff"
}Linux(需安装 paplay 或 aplay):
{
"type": "command",
"command": "paplay /usr/share/sounds/freedesktop/stereo/complete.oga"
}禁用与管理
- 临时禁用:在 Claude Code 中输入
/hooks,找到对应 Hook 禁用 - 永久删除:从
settings.json中移除hooks字段 - 音频太吵:将
timeout设为1,超时后自动中断播放
本文由 AI 辅助生成,可能存在错误或遗漏,请以实际资料和官方文档为准。