用 bark-notify 把 Claude Code 完成提醒推送到 iPhone

0 阅读5分钟

用 bark-notify 把 Claude Code 完成提醒推送到 iPhone

最近我写了一个 Claude Code 插件:bark-notify

它做的事情很简单:当 Mac 上的 Claude Code 完成一轮任务、出错、异常退出,或者卡在等待你授权工具调用时,通过 Bark 给 iPhone 推一条通知。

这样我就不用一直盯着终端了。尤其是同时开多个项目 vibe coding 的时候,我可以放心切去手机上摸会儿鱼,Claude 在电脑上继续干活,两边互不耽误。

为什么需要这个插件

我写这个插件主要是因为几个很具体的痛点:

  • Claude Code 经常一跑就是几分钟,中间我会切去做别的事,但又总想着“它是不是已经跑完了”。
  • 公司环境里不太适合开声音提醒,手机通知反而更自然。
  • Claude 官方也有移动端通知能力,但更偏向 Remote Control / Dispatch / Cowork 这套体验;如果你主要用的是 Claude Code CLI,还是 hooks 这条路更轻。
  • 接飞书、钉钉、邮箱、iMessage 也能做提醒,但配置重、权限多,或者绑定特定平台。
  • Bark 对我来说刚好够轻:iPhone 装 App,拿到推送 URL,Mac 本地调一下接口就能收到通知。

所以 bark-notify 的目标不是做一个复杂的机器人,而是把“Claude 该提醒我的时候提醒我”这件小事做好。

插件地址

GitHub:https://github.com/RUIIIOVO/claude-code-bark-notify

目前插件主要适配 macOS + iPhone 的使用场景,Windows 适配还在进行中。如果你也对这个方向感兴趣,可以关注一下我的 GitHub,后续我会继续更新。

目前插件支持:

  • Claude 正常完成:✅ Claude Code 已完成
  • Claude 等待授权:🔔 Claude Code 等待操作
  • Claude 执行出错:❌ Claude Code 出错
  • 会话异常结束:⚠️ Claude Code 会话异常结束
  • 用户主动 /exit/clear/logout:静默,不打扰
  • Claude Code 输入框空闲 60 秒的内置提醒:静默,不误报

通知标题默认是当前项目目录名,所以同时开多个 Claude Code 窗口时,也能一眼看出是哪一个项目需要处理。

准备工作

你需要先准备两样东西:

  1. macOS 上已经装好 Claude Code。
  2. iPhone 上安装 Bark,并复制推送 URL。

Bark 的推送 URL 大概长这样:

https://api.day.app/你的设备key

如果你比较在意隐私,建议后面直接选择加密模式。bark-notify 支持 AES-128-CBC,加密后的正文会在离开 Mac 之前完成加密。

安装插件

在任意 Claude Code 会话里执行:

/plugin marketplace add RUIIIOVO/claude-code-bark-notify
/plugin install bark-notify@bark-notify
/reload-plugins

在这里插入图片描述

装完之后,Claude Code 会识别到这个插件里的几个 slash command。

配置 Bark 通知

执行 setup:

/bark-notify:bark-notify-setup

它会依次问你:

  1. Bark 推送 URL。
  2. 使用普通模式还是加密模式。
  3. 如果选择加密模式,再输入一个 16 位密钥。

在这里插入图片描述

如果选择加密模式,iPhone 端 Bark 里也要设置一致:

  • Algorithm:AES128
  • Mode:CBC
  • Padding:pkcs7
  • Key:和 setup 里填写的 16 位密钥一致
  • IV:随便填一个 16 位字符串用于保存配置即可,真实推送时会使用请求里的 IV

setup 会在本机做两件事:

  • 写入 ~/.claude/claude-stop-bark.sh 本地发送脚本。
  • 合并写入 ~/.claude/settings.json 的 Claude Code hooks。

它不会覆盖你已有的其他设置。

发送测试通知

配置完成后,可以执行:

/bark-notify:bark-notify-test

在这里插入图片描述

如果 iPhone 收到一条 Bark 通知,就说明配置已经打通。之后 Claude Code 每轮任务结束时,会自动推送。

推送内容长什么样

当前版本会按事件类型区分通知内容:

场景通知正文Bark level
Claude 一轮回答正常结束✅ Claude Code 已完成active
Claude 等待你授权工具调用🔔 Claude Code 等待操作timeSensitive
Claude 一轮回答因错误中断❌ Claude Code 出错timeSensitive
Claude Code 会话异常结束⚠️ Claude Code 会话异常结束timeSensitive
用户主动关闭 CLI静默-
输入框空闲 60 秒内置提醒静默-

这里我特意把“等待授权”和“普通完成”分开了,因为这两个场景需要的反应不一样:

  • 普通完成:有空再回去看结果就行。
  • 等待授权:Claude 已经停住了,需要我回到终端点确认。

手机端这边也很简单。打开 Bark 以后,首页就能看到自己的推送地址。这个地址可以理解成这台 iPhone 的“收件地址”,setup 的时候把它填进去,Claude Code 后面就知道通知该往哪里发。

在这里插入图片描述

如果你选择加密模式,还需要到 Bark 的加密设置里把参数配好。我这里用的是 AES128 + CBC + pkcs7,Key 填 16 位字符,IV 填 16 位数字。真正推送时脚本会把加密后的内容发给 Bark,手机端再按同一套参数解密展示。

在这里插入图片描述

在这里插入图片描述

配置完成以后,最直观的效果就是 Bark 历史消息里会出现当前项目名。比如我这个项目叫 claude-code-bark-notify,Claude 跑完时就是“已完成”,异常结束时就是“会话异常结束”。这样手机上一眼就能判断:是可以回去看结果,还是需要马上处理。

在这里插入图片描述

卸载

如果后面不想用了,可以执行:

/bark-notify:bark-notify-uninstall

它会移除 ~/.claude/settings.json 里的 Bark hook,并删除本地脚本。