授权就地决策
卡片里能看到完整命令、要改的文件和补丁内容。点“允许”或“拒绝”,结果作为 hook 输出回传,终端里的 agent 立刻接着跑,不用你切过去敲回车。
多个 coding agent 并行跑的时候,谁在等你授权、谁问了问题、谁已经跑完,你只能一个个终端翻。CCNotify 把这些事件收拢成屏幕右上角的卡片——点“允许”,决定直接回传给 agent。
需要 macOS 13+ · 支持 Claude Code 与 Codex CLI · 全部流量只走 127.0.0.1
Agent 越好用,你开的会话就越多。可它们都是被动的:卡在授权上就一直卡着,跑完了也不会喊你。
不是把日志再抄一遍给你看,而是把需要人做的那一下,搬到你眼前。
卡片里能看到完整命令、要改的文件和补丁内容。点“允许”或“拒绝”,结果作为 hook 输出回传,终端里的 agent 立刻接着跑,不用你切过去敲回车。
Agent 反问“部署到预发还是生产?”时,选项直接铺在卡片上,点一下就选好了。长文本折叠显示,需要时展开看全文。
想自己接管就点卡片上的终端按钮,直接激活发起这次会话的那个窗口和标签页——靠 tty 与终端会话标识定位,不是瞎猜最前面那个。
菜单栏点开就是设置面板,不用手改 JSON。主题、提示音与音量、每类卡片停留多久、折叠行数,都在面板里改,改完立即生效。
鼠标停在卡片上或正在拖动时,倒计时暂停;移开后从零重新计时。需要你决策的卡片默认不会自己消失,卡片多了可以上下滚动,右划关闭。
服务只监听 127.0.0.1,请求要带本机生成的 token,不上传任何代码。App 没开、端口变了、请求超时,hook 一律静默退出 0,agent 自动回退到它原生的授权流程。
没有云端、没有中转、没有轮询。整条链路都在你这台机器上,往返一次通常在几十毫秒。
需要授权、要问你问题、任务结束时,Claude Code 或 Codex 会执行安装好的 ccnotify-hook —— 一个几十行的 sh 脚本,把事件 JSON 从 stdin 转发出去。
CCNotify 在 127.0.0.1 上校验 token,按事件类型播放提示音,在右上角弹出对应卡片;终端定位信息随请求头一起送到,用于之后跳回。
你点下的按钮被写成 hook 的标准输出,agent 读到 allow 或 deny 就继续执行。没人点也不会永远卡着:到时间自动放行给终端。
两家的 hook 协议形状几乎一致:stdin 收一个 JSON,stdout 回一个决定。所以一个 hook 客户端就同时服务两者,卡片上会标明事件来自谁。
| 能力 | Claude Code | Codex CLI |
|---|---|---|
| 授权卡片(允许 / 拒绝回传) | ✓ | ✓ |
| 任务完成卡片 | ✓ | ✓ |
| 会话开始 / 结束跟踪 | ✓ | ✓ |
| 选项卡片(AskUserQuestion) | ✓ | — |
| 空闲提醒(Notification) | ✓ | — |
| 一键跳回终端 | ✓ | ✓ |
~/.codex/hooks.json 之后,你需要在 Codex 里执行一次 /hooks 重新信任,否则 hook 会静默地不执行、也不报错。下载 .pkg 双击就行。App 启动后自己写入 hook、幂等地合并进两个 agent 的配置(改动前自动备份)、注册开机自启,并弹一张面板告诉你每一步的结果。
一个 435 KB 的 CCNotify-0.3.0.pkg,里面就是编译好的 App,不含任何需要你执行的脚本。
安装包还没做苹果签名,首次打开请在 Finder 里右键 → 打开(或到「系统设置 › 隐私与安全性」点“仍要打开”)。之后一路下一步,输一次管理员密码,App 会装进「应用程序」并自动启动。
面板会列出 hook、Claude Code、Codex CLI、开机自启四项的状态。Claude Code 新开的会话即刻生效;Codex 用户记得在 Codex 里执行一次 /hooks 重新信任。
./build.sh 生成 build/CCNotify.app,双击它就会自己完成接入;想自己打一个安装包就再跑 ./packaging/build-pkg.sh。只依赖 Xcode Command Line Tools,不需要完整 Xcode。下面每一张都是从运行中的 App 上按窗口截下来的,没有重绘。在设置面板里随时切换。

light
paper
dark
midnight
glass
apply_patch127.0.0.1,端口和随机 token 写在 ~/.ccnotify/runtime.env,每个请求都要带这个 token。没有任何出网请求,卡片内容只在本机内存和屏幕上出现。ccnotify-hook 挂上去。hook 会带上一个 agent 标识,卡片上就会显示它的名字。/hooks。Codex 的 hook 信任和配置内容的哈希绑定,CCNotify 改写过 hooks.json,旧的信任就失效了——而它跳过未信任的 hook 时是完全静默的。/Applications/CCNotify.app 拖进废纸篓,再从 ~/.claude/settings.json 和 ~/.codex/hooks.json 里移除包含 ccnotify-hook 的条目即可。配置、日志和 hook 客户端都在 ~/.ccnotify/,整个目录删掉就干净了。一个菜单栏小工具,几十 KB 的 hook 脚本,装上就不用再守着终端了。
约 435 KB · 双击安装,无需终端 · macOS 13 或更高版本 · 首次打开请右键 → 打开