🔔 Claude Code Task Notify

为 Windows 环境下的 Claude Code 打造的 ChatGPT 风格桌面通知浮层:
✅ 任务完成提醒 / ❓ 等待用户输入 / ⏳ 等待执行命令审批。

提问与审批提醒卡片会在屏幕右下角持久常驻,绝不漏掉进度;一旦你在终端输入回答或按回车批准,弹窗会在瞬间毫秒级自动关闭! 纯系统原生 PowerShell 5.1 + WPF 编写,零第三方依赖,不抢占键盘焦点,不打断编码心流。


🔗 项目开源主页


💡 为什么做这个工具 (Why)

在使用 Claude Code 进行高强度编码时,我们经常让 Claude 编写测试、执行全工程重构或分析大批文件。在长达数十秒甚至数分钟的运行过程中,开发者往往会切到浏览器查文档、看网页或回复消息。

这时常常遇到两大痛点:

  1. 不知道什么时候跑完:需要频繁在终端与浏览器之间反复 Alt-Tab 确认,严重割裂注意力;
  2. 提问或审批卡死:Claude 突然调用 AskUserQuestion 向你确认方案,或者申请运行一条 Bash 命令权限。终端进入无声等待,而你以为它还在思考,白白浪费大量等待时间。

Claude Code Task Notify 正是为解决这一痛点而生!

┌──────────────────────────────────────────────┐
│  ✅  Task complete                  my-blog  │
│  All changes applied — 3 files touched,     │
│  type check and tests pass cleanly.          │
└──────────────────────────────────────────────┘
   ↑ 屏幕右下角 · 典雅圆角白卡 · DirectWrite 高清排版
     普通完成 8 秒自动淡出 · 提问/等待授权持久常驻直至作答

🌟 核心特性一览

  • 无感常驻触发:通过 Claude Code 官方底座级 Hooks 机制触发(配置于 ~/.claude/settings.json),即便大模型不配合也 100% 稳定弹出;
  • 智能意图分类:
    • 正常执行结束输出:弹出 ✅ Task complete(8 秒后柔和淡出);
    • 检测到回答以问号结尾或请求信息:弹出 ❓ Needs your input;
    • Claude 触发提问(AskUserQuestion)或申请权限审批:弹出 ❓ Waiting for your answer / ⏳ Waiting for your approval,并提取问题摘要;
  • 答复即时自动关闭 (Auto-Close):
    • 当你在终端输入答案或按下回车批准工具后,通过轻量级 notify-close-check.cmd 极速预检(未等待时仅 ≈30ms 提前退出开销,绝无 PowerShell 冷启动延迟);
    • 弹窗通过双通道握手文件毫秒级捕捉信号,并立即自动关闭退出,完全无需手动挪鼠标点叉!
  • 不抢占前台焦点:
    • 采用 Windows 原生 ShowActivated=false 与 WS_EX_NOACTIVATE 扩展样式,弹窗浮现瞬间绝不抢占当前打字窗口的键盘焦点;
  • 内容精炼提炼:
    • 自动剥离代码块、HTML 标签、网络实体和长 URL,仅截取核心首段 180 字符,一眼即知 Claude 的工作结论;
  • 多项目并发展示:
    • 卡片右上角显式显示当前工程名称(Project Name),多终端并行工作流清晰不混淆;
  • 防抖与噪声抑制:
    • 2 秒内同类重复事件自动聚类,剔除重复通知;严格过滤 AskUserQuestion 本身产生的权限噪声。

🔧 系统运作架构

Claude Code 事件流 (~/.claude/settings.json, 超时 5s)
        │  stdin JSON 数据输入
        ├─ Stop (主回复生成完毕) ──────────────────┐
        ├─ PreToolUse(AskUserQuestion) (Claude 提问等待) ──┤
        ├─ PermissionRequest (请求用户批准命令) ───────────┤
        └─ PostToolUse / PostToolUseFailure / PermissionDenied
           → notify-close-check.cmd 极速预检 (无弹窗时 30ms 闪电退出)
           → 写入 close 握手标志 → 退出 ───────────────────┘
        ▼
notify-complete.ps1  (主入口脚本,500ms 内非阻塞快速返回)
        │  ① 过滤事件类型与内部白噪音
        │  ② 本地文本清洗蒸馏 (过滤 code/HTML/URL,提取 180 字符)
        │  ③ SHA-256 去重防抖 (2 秒窗口)
        │  ④ 写入临时 payload 数据
        │     → 后台独立进程拉起 show-popup.ps1
        ▼
show-popup.ps1  (独立后台进程,-STA 模式)
        │  读取 payload,登记 waiting 握手凭证
        │  → 利用 WPF DirectWrite 高保真渲染浮窗卡片
        ▼
右下角卡片渲染:不抢焦点 · 圆角微阴影 · 点击或 ✕ 均可手动关闭
  · Stop 完成事件:8 秒平滑渐隐
  · 提问 / 审批等待事件:屏幕常驻,直至终端作答自动关闭 (或 30 分钟兜底超时)

🚀 极速安装指南

方式一:让 Claude Code 自动安装(推荐)

只需复制以下提示词,连同仓库链接发送给你的 Claude Code 终端,Claude 即可全自动完成安装并执行自检测试:

请将仓库 https://github.com/yyyyolo7a79-sketch/claude-task-notify 安装到我的 Windows 全局 Claude Code 配置中:

  1. 将 scripts/notify-complete.ps1、scripts/show-popup.ps1 和 scripts/notify-close-check.cmd 拷贝至 ~/.claude/scripts/ 目录;
  2. 在 ~/.claude/settings.json 中配置对应的 hook 条目(包含 Stop、PreToolUse、PermissionRequest、PostToolUse 等);
  3. 运行一次无阻塞测试,确认右下角能正常弹出测试卡片。

方式二:手动配置

  1. 从 Releases 下载 ZIP 并解压;
  2. 将 scripts 目录下的 3 个文件复制到用户目录下的 C:\Users\<你的用户名>\.claude\scripts\;
  3. 打开 ~/.claude/settings.json,在顶级配置项中加入对应的 hooks 声明;
  4. 新开一个 Claude Code 会话,运行 /notify_AskUserQuestion_persistence true 即可体验持久常驻与自动关闭!