阿東的AI手记
返回文章列表

Claude Code 写完了你还不知道?一个桌面通知工具解决!

·约 11 分钟·

Claude Code 跑完或要你确认时,桌面弹窗提醒,还能用 AI 摘要说它干了什么;附安装步骤。

目录
  1. 01盯着终端等 AI,是一种什么体验
  2. 02一个通知气泡,解决所有焦虑
  3. 03为什么现有工具不够用,我决定自己做
  4. 实现方案:桌面通知 + AI 摘要
  5. 缓存 + Fallback:让通知瞬间触发
  6. 04仓库地址 + 完整使用指南
  7. 功能特性
  8. 安装步骤
  9. 可选:启用 AI 摘要
  10. 自定义配置
  11. 卸载
  12. 相关项目推荐
  13. 05写在最后
  14. 引用链接
手绘插画:桌上笔记本电脑正在运行代码,屏幕上方弹出「任务完成」通知气泡,旁边放着待办清单和耳机

Claude Code 是目前最强的终端 AI 编程助手,能自主完成复杂编码任务。但它有一个让人抓狂的问题:任务完成了,没有任何提示。你要么盯着终端干等,要么切走之后完全不知道它什么时候做完。这篇文章是我解决这个问题的完整记录。


盯着终端等 AI,是一种什么体验#

前几天晚上,我同时开了三个终端窗口跑 Claude Code。

一个在重构项目的认证模块,一个在写单元测试,还有一个在做文档生成。三个任务同时交给 Claude,理论上应该很高效——我可以切出去喝杯咖啡,回来收结果。

但实际情况是:我哪也去不了。

因为 Claude Code 没有任何完成提示。不弹窗,不响铃,不闪烁。它安安静静地跑完任务,然后安安静静地等着你回来看。如果你正好切到浏览器看了篇文章,或者回了条消息——完了,你不知道它什么时候完成的,更不知道三个窗口里哪个先做完。

插画:深夜开发者趴在三台显示终端的屏幕前,头顶写着「哪个完成了?」「到底做完没有?」

这个体验很像什么呢?像你点了三份不同的外卖,但骑手到了都不打电话,默默把餐放在门口就走了。你不时要起身开门检查一下,但十次里有八次门口是空的。

如果你用过 Claude Code,你一定经历过这种"反复切回终端检查"的循环。短任务还好,几十秒就完事。但像代码重构、大规模文件生成这种可能跑几分钟的任务,你要么死盯着等,要么不断轮询——两种方式都在浪费时间。

我决定解决这个问题。


一个通知气泡,解决所有焦虑#

先看最终效果。

任务完成时,屏幕右上角弹出一个原生 macOS 通知——带提示音,标题告诉你状态,副标题显示是哪个任务:

macOS 通知截图:标题「已完成」,副标题是任务短名「对话后无提示音分析解决」,正文为 Claude 回复摘要

如果 Claude 需要你确认权限或等待输入,也会弹一个不同风格的通知:

macOS 通知截图:标题「等待操作」,正文为「Claude needs your permission to use Bash」

关键信息:

  • 实时弹窗:Claude 完成的瞬间通知就到了,不需要轮询
  • 带提示音:就算你在看别的 App,声音也能把你"叫回来"
  • AI 智能摘要:通知副标题不是一串 session ID,而是 AI 生成的 6 字短标题(比如"重构认证模块"),一眼就知道是哪个任务完成了
  • 两种状态区分:✅ 已完成(任务做完了)和 ⏳ 等待操作(需要你介入),声音也不同

这是怎么做到的?Claude Code 提供了一个叫 Hooks 的机制——你可以在特定事件(比如任务完成、需要权限确认)触发自定义脚本。我的工具就是基于这个机制构建的。

效果很简单:你可以放心切到别的 App、喝咖啡、做其他事情——通知会自动找你。

下面这张是我实际使用时的桌面截图,右上角的通知弹窗就是 claude-code-notifier 在工作:

实际使用的桌面截图:VS Code 编辑 install.sh 时,屏幕右上角弹出 claude-code-notifier 的「等待操作」通知,请求 Bash 权限

为什么现有工具不够用,我决定自己做#

动手之前,我先在 GitHub 上搜了一圈。"claude code notification"、"claude code hooks sound"——前后看了 20 多个项目,包括 Star 最多的 ctoth/claudio[1](Go 写的音频插件,支持音色包)。装上试了半小时,发现一个核心问题:

只有声音,没有桌面通知弹窗,也无法区分任务。

三个终端同时跑,"叮"一声——哪个窗口完成了?发生了什么?不知道,还是得切回终端看。这些工具做的是"提醒你去看终端",但我想要的是"不用看终端就知道发生了什么"。

于是卸掉,自己做。

三格漫画:搜索现成工具,发现只有声音没有通知弹窗而不满意,最后自己动手做一个

实现方案:桌面通知 + AI 摘要#

思路很直接:写一个 Python 脚本挂到 Claude Code 的 Hooks 上。当 Stop(任务完成)或 Notification(需要操作)事件触发时,脚本读取会话首条消息,调 claude-3-haiku 生成 6 字短标题,然后通过 osascript 发送 macOS 原生通知。

核心流程:

Claude Code Hook (stdin JSON)
        │
        ▼
   notify.sh (入口)
        │
        ▼
   notify.py
        ├── 读取会话 transcript
        ├── AI 摘要 (claude-3-haiku)
        │   或 本地关键词提取
        ├── 缓存摘要
        │
        ▼
   macOS 通知 + 提示音

缓存 + Fallback:让通知瞬间触发#

一个会话过程中可能触发多次 Stop(Claude 每回复一次就触发),没必要每次都调 API。所以加了缓存机制:每个 session_id 第一次触发时调 AI,摘要写入 ~/.cache/claude-code-notifier/,后续同 session 直接读缓存,瞬间触发。

同时做了本地 fallback:没有 API Key 或调用失败时,自动切换到本地关键词提取。大部分时候用户给 Claude Code 的第一句话就包含核心意图——"重构认证模块""给 API 加限流""修复登录 bug"——不需要 AI 也能提取出来。

功能跑通后,打包成了独立开源工具 claude-code-notifier,写了一键安装脚本和双语 README。


仓库地址 + 完整使用指南#

整个项目已经开源,MIT 协议,开箱即用。

GitHub 仓库:github.com/antonailog/claude-code-notifier

手绘功能图:中心是「代码通知助手」终端窗口,四周标注桌面通知、智能摘要、缓存加速、本地备用、开源免费

功能特性#

  • 任务完成时桌面通知 + Hero 提示音
  • 等待操作时桌面通知 + Sosumi 提示音
  • AI 智能会话摘要(claude-3-haiku 生成 6 字短标题)
  • 本地 fallback(无 API 时自动关键词提取)
  • 缓存机制(每个 session 只调一次 AI,后续通知瞬间触发)

安装步骤#

三步搞定:

# 1. 克隆仓库
git 
clone
 https://github.com/antonailog/claude-code-notifier.git
# 2. 运行安装脚本
cd
 claude-code-notifier
bash install.sh
# 3. 重启 Claude Code

安装脚本会自动备份你的 settings.json,然后把 Hook 配置注入进去。完全无侵入,卸载时一键恢复。

可选:启用 AI 摘要#

如果你想要 AI 生成的智能会话摘要,额外装一个 Python 包:

pip install anthropic

工具会自动使用你现有的 Claude Code API 凭证(ANTHROPIC_API_KEY 或 ANTHROPIC_AUTH_TOKEN)。如果没有配置或 API 不可用,会自动回退到本地关键词提取——完全不影响通知功能本身。

自定义配置#

换提示音: 编辑 notify.py,修改 sound 参数。macOS 自带 14 种系统声音:

声音风格适合场景 Hero 胜利感、振奋任务完成 Sosumi 经典 Mac 警告需要注意 Glass 轻柔、清脆轻量通知 Ping 快速、干净次要更新 Funk 短促、有力错误警告 Pop 柔和、活泼工具完成

加更多事件: Claude Code 支持 8 种 Hook 事件,我默认只监听了最关键的两个。你可以按需添加:

Hook 事件说明建议声音 StopClaude 完成回复 HeroNotification 需要权限 / 等待输入 SosumiSubagentStop 子 Agent 完成任务 PingPreToolUse 工具调用前 TinkPostToolUse 工具调用后 PopSessionStart 新会话开始 Blow

卸载#

cd
 claude-code-notifier
bash uninstall.sh

一键恢复原始配置,不留痕迹。

相关项目推荐#

做这个工具的过程中发现了不少同类项目,各有特点:

  • ctoth/claudio[2] — Go 编写的音频插件,支持音色包和按事件播放不同声音
  • wyattjoh/claude-code-notification[3] — 轻量 macOS 通知 Hook,可自定义系统声音
  • shanraisshan/claude-code-voice-hooks[4] — 工具使用时播放 ding/dong 声音
  • farouqaldori/claude-island[5] — macOS 菜单栏会话管理器,带通知功能
  • soulee-dev/claude-code-notify-powershell[6] — Windows PowerShell toast 通知

写在最后#

这个工具解决的问题说起来很小:Claude Code 完成任务时通知你一声。但用了之后你会发现,它改变的不是某个功能,而是你和 AI 协作的方式。

之前你只能"盯着 AI 工作",现在你可以"让 AI 在后台工作"。

这个差别看起来很微妙,但实际影响很大。你不再需要守在终端前等结果,可以真正做到多线程工作——让 Claude 跑着任务,你去做别的事情,完成了它来找你。

从"人等机器"变成"机器叫人"。

我越来越觉得,AI 工具的核心竞争力最终不是"谁更聪明",而是谁更懂得融入你的工作流。一个能力再强的助手,如果每次做完事都要你亲自跑过去检查,那它本质上还是在消耗你的注意力。真正好用的工具,应该像一个靠谱的同事——活干完了,主动拍你一下,"搞定了,你看看"。

这大概就是 Hooks 机制最大的价值:它让 Claude Code 从一个"需要你盯着的工具"变成了一个"会主动汇报的助手"。一个通知气泡的差距,背后是完全不同的工作模式。

未来的 AI 编程一定是"无感协作"的:你甚至不需要知道 AI 什么时候开始、什么时候结束,它会自己安排好一切,只在需要你的时候出现。我们现在做的每一个小工具,都是在朝那个方向走一步。

仓库地址:github.com/antonailog/claude-code-notifier

Star 一下支持开源。遇到问题欢迎提 Issue,我会持续维护。

如果你对 AI 编程工具、开发效率提升这些话题有兴趣,关注「阿東的 AI 手记」,后续会持续分享实战经验和开源工具。

引用链接#

[1]ctoth/claudio: https://github.com/ctoth/claudio

[2]ctoth/claudio: https://github.com/ctoth/claudio

[3]wyattjoh/claude-code-notification: https://github.com/wyattjoh/claude-code-notification

[4]shanraisshan/claude-code-voice-hooks: https://github.com/shanraisshan/claude-code-voice-hooks

[5]farouqaldori/claude-island: https://github.com/farouqaldori/claude-island

[6]soulee-dev/claude-code-notify-powershell: https://github.com/soulee-dev/claude-code-notify-powershell