claude-code-notifier
工作原理 指南 常见问题
◐简体中文
English العربية Deutsch Español Français עברית Italiano 日本語 한국어 Nederlands Polski Português (Brasil) Русский Türkçe Tiếng Việt 简体中文 繁體中文
开始使用
全部指南

用 ntfy 实现 Claude Code 推送通知(自己动手)

更新于 2026年10月31日 · 阅读约 6 分钟
本页内容 01第 1 步:选定 topic 并订阅 02第 2 步:hook 脚本(Mac 和 Linux) 03第 3 步:接入 settings.json 04Windows(PowerShell) 05保护隐私 06Claude Code Notifier 的定位 07常见问题

想用 ntfy 接收 Claude Code 的 push 通知,只需在手机上安装 ntfy 应用,订阅一个难以猜到的 topic,再添加一个运行 curl -d "message" https://ntfy.sh/your-topic 的 Claude Code hook。Notification hook 会在 Claude 需要权限或等你操作时提醒你,Stop hook 则在一轮对话结束时立刻通知你。完全免费,大约十分钟就能配好,支持 Mac、Windows 和 Linux。

01第 1 步:选定 topic 并订阅

ntfy 无需注册。topic 在第一次有人发布或订阅时自动创建,任何知道名字的人都能读取。ntfy 官方文档说 topic 本质上就是密码,所以要取得又长又随机,例如 claude-7f3k9q2xw4mz。topic 名可以包含字母、数字、下划线和短横线,最长 64 个字符。

安装 ntfy 应用(App Store、Google Play 或 F-Droid),点 +,在 ntfy.sh 上订阅你的 topic。

在 terminal 里测试一下:

curl -H "Title: Test" -d "Hello from my computer" https://ntfy.sh/claude-7f3k9q2xw4mz

手机应该在一两秒内收到提醒。在 Windows 上,Windows 10 和 11 自带 curl.exe,同样的命令可以直接用。

02第 2 步:hook 脚本(Mac 和 Linux)

Claude Code 会通过标准输入给每个 hook 传一个 JSON 对象。两种事件都有 cwd 和 hook_event_name 等字段。Notification 额外提供 message 和 notification_type,Stop 额外提供 last_assistant_message,即 Claude 最后一条回复的文本。下面的脚本会把两者都转成易读的 push。脚本依赖 jq(brew install jq,Debian 和 Ubuntu 上用 apt install jq)。

保存为 ~/.claude/ntfy-notify.sh,然后运行 chmod +x ~/.claude/ntfy-notify.sh:

#!/bin/sh
TOPIC_URL="https://ntfy.sh/claude-7f3k9q2xw4mz"

input=$(cat)
event=$(printf '%s' "$input" | jq -r '.hook_event_name')
project=$(basename "$(printf '%s' "$input" | jq -r '.cwd')")

if [ "$event" = "Stop" ]; then
  title="Claude finished: $project"
  body=$(printf '%s' "$input" | jq -r '(.last_assistant_message // "Done") | .[0:300]')
  priority=3
else
  title="Claude needs you: $project"
  body=$(printf '%s' "$input" | jq -r '.message // "Needs your attention"')
  priority=4
fi

curl -s -H "Title: $title" -H "Priority: $priority" -H "Tags: robot" \
  -d "$body" "$TOPIC_URL" > /dev/null
exit 0

优先级范围是 1(最低)到 5(紧急)。Tags 会给通知加一个 emoji,robot 显示的是机器人脸。

03第 3 步:接入 settings.json

把 hook 加到 ~/.claude/settings.json。如果文件里已经有 hooks 对象,把这些事件加进去,不要整个替换掉。

{
  "hooks": {
    "Notification": [
      {
        "matcher": "permission_prompt",
        "hooks": [
          { "type": "command", "command": "~/.claude/ntfy-notify.sh" }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          { "type": "command", "command": "~/.claude/ntfy-notify.sh", "async": true }
        ]
      }
    ]
  }
}

"async": true 让 Stop hook 在后台发送,网络再慢也不会拖住 Claude。改完后要开一个新的 Claude Code 会话,因为 hook 是在会话启动时加载的。

用 Stop 还是 idle_prompt?

只要 Claude 一完成,Stop 就会触发,哪怕你就坐在电脑前。如果嫌太频繁,可以去掉 Stop 配置块,改用 matcher permission_prompt|idle_prompt。根据 Anthropic 的文档,idle_prompt 会在 Claude 完成约 60 秒后、且期间你没有输入时触发;permission_prompt 则在权限提示等待约六秒无按键后触发。这样不用额外工作,就有了一个粗略的“只在我离开时提醒”的过滤。各字段和触发时机详见 Notification hook 指南和 Stop hook 指南。

04Windows(PowerShell)

在 Windows 上,把下面的内容保存为 %USERPROFILE%\.claude\ntfy-notify.ps1,无需额外安装任何东西:

$in = [Console]::In.ReadToEnd() | ConvertFrom-Json
$project = Split-Path $in.cwd -Leaf

if ($in.hook_event_name -eq 'Stop') {
  $title = "Claude finished: $project"
  $body = [string]$in.last_assistant_message
  if ($body.Length -gt 300) { $body = $body.Substring(0, 300) }
  $priority = '3'
} else {
  $title = "Claude needs you: $project"
  $body = [string]$in.message
  $priority = '4'
}

Invoke-RestMethod -Method Post -Uri 'https://ntfy.sh/claude-7f3k9q2xw4mz' `
  -Headers @{ Title = $title; Priority = $priority } `
  -Body ([Text.Encoding]::UTF8.GetBytes($body)) | Out-Null

然后用这个 hook 配置替换上面的 command 行:

{
  "type": "command",
  "shell": "powershell",
  "command": "powershell -NoProfile -ExecutionPolicy Bypass -File \"$HOME\\.claude\\ntfy-notify.ps1\""
}

如果你在 WSL 里运行 Claude Code,请改用 Mac 和 Linux 版脚本;对 hook 来说,WSL 就是 Linux。

05保护隐私

push 的所有内容都会经过 ntfy 服务器,而在 ntfy.sh 上,任何知道 topic 名的人都能读到。上面的 Stop 消息包含 Claude 回复的开头部分,里面可能有代码或文件名。有三种方式可以收紧:

  1. 少发内容。把 Stop 的正文换成固定字符串,比如 "Done",标题里只保留项目名。
  2. 使用 access token。ntfy 的任何发布请求都支持 -H "Authorization: Bearer tk_..."。在自己的服务器上,设置 auth-default-access: "deny-all",用 ntfy user add 创建用户,再用 ntfy token add 创建 token。
  3. 自建服务器。ntfy 支持自托管。若要让 iPhone 应用即时收到消息,ntfy 文档建议设置 upstream-base-url: "https://ntfy.sh",这样只会把消息 ID 和 topic 哈希转发给 ntfy.sh 用于唤醒手机,应用随后再从你的服务器拉取消息内容。

如果 Claude Code 跑在远程服务器上,同一个 hook 无需修改就能用,所以 ntfy 也很适合通过 SSH 接收通知。

06Claude Code Notifier 的定位

如果只需要单向提醒,上面的配置已经足够,我们也不会劝你换掉。但它只负责通知。push 告诉你 Claude 需要权限时,会话仍然会一直等到你回到键盘前。

ntfy 支持发起 HTTP 请求的操作按钮,所以你可以自己搭一条回复通道:用一个 PermissionRequest hook 发布请求,在第二个 topic 上等待回复,然后返回决定。有些开源项目就是这么做的(见对比)。

Claude Code Notifier 把这条通道做成了现成方案。配对手机后,你可以直接在手机上单次允许、在本会话内允许或拒绝权限请求,在 Claude 提问时选择答案,并在 Claude 完成后发送下一条指令。它还会检测你是否在场:如果你在最近 30 秒内有输入,terminal 会照常询问,不会等手机;如果你不在,terminal 会等待你的回复,直到你设定的上限,而你一碰键盘它就停止等待。ccn 支持 Mac、Windows 和 Linux;手机应用请见 ccn 页面和价格。

07常见问题

用 ntfy 接收 Claude Code 通知免费吗?

在 ntfy.sh 上发布和订阅都不需要账号,服务器对所有人开放。ntfy 也提供付费套餐,并支持自托管。当前限额请以 ntfy 官网为准。

为什么我的 ntfy hook 没有触发?

修改 settings.json 后要开一个新的 Claude Code 会话,因为 hook 在启动时加载。然后手动运行那行 curl 测试命令,再把示例 JSON 通过管道传给脚本,例如 echo '{"hook_event_name":"Stop","cwd":"/tmp/x"}' | ~/.claude/ntfy-notify.sh。其他情况见排查清单。

可以直接在 ntfy 通知里回复 Claude Code 吗?

单纯发布消息做不到。ntfy 的 HTTP 操作按钮可以发请求,但你还需要一个 hook 来等待回复,并把它转换成 Claude Code 能理解的决定。

每种通知类型都会推送吗?

只会推送你列出的 matcher。如果在 Notification 配置中省略 matcher,就会收到所有类型,包括认证和 MCP 对话框。

Claude Code Notifier Claude Code 完成任务或需要你介入时,手机会收到 push,你可以直接在手机上批准、拒绝或回复。ccn 命令行工具在 Mac、Windows 和 Linux 上均可免费使用。
下载 iOS 版 下载 Android 版 安装 ccn

相关指南

  • 获取 Claude Code 通知的所有方式对比内置提醒、自己写的 hook、ntfy 和聊天 webhook、Anthropic 的 Remote Control 以及各类通知 app,逐一对比它们能做什么、不能做什么。
  • 将 Claude Code 通知发送到 Telegram、Slack 或 Discord一个 hook 脚本,即可把 Claude Code 提醒发送到 Telegram bot、Slack incoming webhook 或 Discord webhook,支持 Mac、Windows 和 Linux。
  • Claude Code Notification hook:何时触发、如何使用Claude Code 的 Notification hook 何时触发,permission_prompt 和 idle_prompt 的含义,它接收的输入,以及为什么会延迟触发。
  • Claude Code Stop hook:在 Claude 完成时执行命令介绍 Claude Code 的 Stop hook 如何工作、接收哪些输入、如何在 Claude 完成时执行命令,以及如何安全地让 Claude 继续工作。
claude-code-notifier

Claude Code Notifier 是一款独立的第三方应用,与 Anthropic, PBC 无关联,亦未获其认可或赞助。“Claude”和“Claude Code”是 Anthropic, PBC 的商标。

应用 iOS 应用 Android 应用 适用于 macOS、Windows 和 Linux 的 ccn 全部指南
法律信息 隐私政策 服务条款 其他语言 © 2026 touchtap。保留所有权利。 TouchTap Ltd 注册于英格兰和威尔士,公司编号 13942589。