要让 Claude Code 通知在夜间或会议中保持安静,可以从三个层面入手:hook 本身(在设定时段内不发送)、操作系统(iPhone 和 Mac 上的专注模式,Android、Windows 和 Linux 上的勿扰模式),以及你用来发送提醒的工具。Claude Code 本身没有免打扰时段设置,所以时间表只能放在 hook 脚本、手机或通知工具里。使用 Claude Code Notifier 的话,一行 ccn config set quiet_hours 22:00-08:00 就能搞定。
选哪一层很重要,因为它们的行为不同。安静的 hook 什么都不发送;处于勿扰模式的手机仍会收到提醒,只是不响。下面逐一介绍每种方式及适用场景。
01对 Claude Code 来说,“安静”应该意味着什么
动手设置之前,先想清楚免打扰期间到达的请求该怎么处理。提醒分三种:
- Claude 已完成。可以放心延后,你有空再看。
- Claude 需要权限。Claude Code 会停在 prompt 处等人回应。如果你收不到提醒,会话就会一直停着,直到你回来。
- Claude 提了一个问题。和权限请求一样:会话会等待。
所以免打扰时段是用进度换睡眠。如果你睡前启动了一个长任务,可能希望静音“已完成”提醒,但早上仍能看到待处理的请求。如果你希望 Claude 通宵运行而不询问,那是权限模式的问题,而不是通知的问题。
02在自己写的 hook 中设置免打扰时段
每次事件触发时,Claude Code 都会运行你的 hook 命令。要加入免打扰时段,在脚本开头检查时间并提前退出即可。这适用于任何发送桌面通知、ntfy push 或聊天消息的 hook。
在 Mac 和 Linux 上,将以下内容保存为 ~/.claude/hooks/notify.sh,并用 chmod +x 赋予执行权限:
#!/bin/sh
# Quiet between 22:00 and 08:00, local time
hour=$(date +%H)
if [ "$hour" -ge 22 ] || [ "$hour" -lt 8 ]; then
exit 0
fi
# Your real notification command goes here, for example:
notify-send "Claude Code" "Claude has finished"
在 Mac 上,把最后一行换成 osascript 命令,macOS 指南里有示例。然后在 ~/.claude/settings.json 中把 hook 指向这个脚本:
{
"hooks": {
"Stop": [
{
"hooks": [
{ "type": "command", "command": "~/.claude/hooks/notify.sh" }
]
}
]
}
}
关键是以退出码 0 退出。其他退出码会在对话记录中显示 hook 错误,而 Stop hook 返回退出码 2 会让 Claude 继续工作,这显然不是你想要的。
在 Windows 上,用 PowerShell 的 (Get-Date).Hour 做同样的检查。Windows 指南中有完整的 PowerShell hook。
完全暂停 hook
如果只是想临时安静一次,可以在关闭所有 hook 的情况下启动 Claude Code:
claude --settings '{"disableAllHooks": true}'
这只对当前会话有效。在设置文件中设置 "disableAllHooks": true 会一直关闭 hook,直到你删掉它。注意它会关闭所有 hook,包括格式化代码或拦截命令的 hook,请谨慎使用。
Claude Code 自带的提醒
Claude Code 自带的 terminal 通知由 preferredNotifChannel 控制。设为 "notifications_disabled" 就能关掉这些提醒,但不会停用 hook,hook 照常运行。其他取值见 terminal 提示音指南。
03手机上的专注模式和勿扰模式
如果提醒发到手机上,手机自带的静音模式是最简单的一层,而且不管提醒来自哪个工具都有效。
- iPhone:专注模式(设置 → 专注模式)可以按时间表屏蔽通知,并能指定哪些 App 仍可提醒。想在夜里收到 Claude Code 提醒,就把这个 App 加入允许列表;想保持安静,就别加,提醒会留在通知中心等你查看。
- Android:勿扰模式(在设置的“通知”或“声音”下,因机型而异)用法相同,支持时间表和 App 例外。每个 App 的通知设置里也可以单独关闭该 App 的声音或振动。
手机这层的好处是不会丢消息:提醒照常送达,等你来看。缺点是它作用于手机上的所有内容,所以你是给整个晚上设一次,而不只是针对 Claude Code。
04电脑上的静音
在电脑上,Mac 的专注模式、Windows 的“请勿打扰”以及大多数 Linux 桌面的勿扰开关,都能屏蔽 hook 发出的桌面通知。共享屏幕时尤其有用,毕竟谁都不想屏幕上突然弹出显示项目名或命令的横幅。
05用 Claude Code Notifier 设置免打扰时段
Claude Code Notifier 是一款独立工具,并非 Anthropic 出品。它的命令行工具 ccn 以 Claude Code hook 的形式运行在 Mac、Windows 和 Linux 上,把提醒发送到已配对的 iPhone 或 Android 手机。它内置了免打扰设置,不用自己改脚本:
ccn config set quiet_hours 22:00-08:00
在免打扰时段内,ccn 不会向手机发送任何内容,也不会有消息排队等着推送:Claude Code 照常在 terminal 里询问,你回来时请求还在那里。这段时间里电脑上的桌面通知也会被暂停。运行 ccn config set quiet_hours off 即可关闭时间表。
其他有用的设置:
quiet_when_present默认开启。当你正在使用运行 Claude 的 terminal 时,手机不会收到任何提醒。notify_on_done关闭后不再发送“Claude 已完成”提醒,但保留权限请求和提问提醒。notify_on_permission、notify_on_question分别关闭这两类请求的提醒。sound控制提醒声音。desktop_notifications开启或关闭这台电脑上的桌面通知。例如,ccn config set notify_on_done off 只保留那些会卡住 Claude 的提醒。这些设置大多也能在手机 App 里按电脑分别修改,如果你的工作笔记本和家里台式机作息不同,会很方便。运行 ccn config show 查看当前生效的设置,运行 ccn sync 拉取在手机上做的更改。
如果你想要的恰好相反——晚上安安静静,但 Claude 继续干活——可以看看 离开工作流,里面介绍了如何让会话持续运行,并在你方便时从手机上回复。
06常见问题
Claude Code 有免打扰时段设置吗?
没有。Claude Code 每次事件触发都会运行 hook,没有时间表。可以在 hook 脚本里加时间判断、使用手机的专注模式或勿扰模式,或者用内置免打扰时段的工具,比如 ccn 的 quiet_hours。
免打扰时段内的权限请求会怎样?
Claude Code 会停在 prompt 处,直到有人回应。免打扰时段只是不发提醒。如果想让 Claude 不经询问继续工作,离开前请修改权限模式或添加允许规则。
手机的勿扰模式会屏蔽 Claude Code 通知吗?
会静音,但通知仍会送达并留在通知列表里。在 iPhone 和 Android 上都可以添加例外,让某个 App 在勿扰期间仍能提醒你。
能只关掉“Claude 已完成”提醒吗?
可以。自己搭建的方案里,删除 Stop hook 或给它加时间限制即可。使用 ccn 的话,运行 ccn config set notify_on_done off,权限和提问提醒保持开启。
ccn 的免打扰时段用哪个时区?
电脑的本地时间。出差时,时段以运行 Claude Code 的那台电脑的时钟为准。