Claude Code 停下时,终端窗口自动罩一层浅绿色透明遮罩,点一下即恢复。不再错过 claude 等你确认 / 下指令的时刻。
用 Claude Code 时经常开好几个 tab 同时跑。某个 tab 的 claude 跑完停下来等权限确认或下一条指令,你却在看别的窗口——等想起来切回去,它都停了好几分钟了。一天下来光等它就浪费不少时间。
CC Overlay 让终端在 claude 停下时直接变绿,想忽略都难。
- Claude 停下(回合结束 / 权限确认 / 60s idle)→ 终端窗口罩浅绿色半透明遮罩 + 一声「叮」
- 点击遮罩任意位置 → 恢复(或直接发下一条消息,自动关闭)
- 遮罩跟随终端窗口移动,只盖终端,不影响其他窗口
- 绝不抢焦点:不置顶、不切 tab、不激活 Terminal、不弹系统通知——你在别的窗口打字完全不被打断,切回终端看到一片绿就知道 cc 等你了
- 下载最新 Release 里的
CC-Overlay-1.0.0.dmg - 打开 dmg,把 CC Overlay.app 拖到「应用程序」
- 右键 → 打开(首次需右键打开,应用未签名)
- 点「安装」按钮 → 完成
安装器自动:部署 hook 脚本到 ~/.claude/hooks/ + 合并 ~/.claude/settings.json 的 hooks 配置(自动备份,幂等可重复安装)。
仅适配 macOS Apple Terminal.app(中文 / 英文系统均可)。需 Claude Code CLI。
打开 CC Overlay.app → 点「卸载」。或手动删 ~/.claude/hooks/cc-overlay*、cc-focus.sh,并从 settings.json 移除 hooks。
编辑 ~/.claude/hooks/cc-focus.sh 末尾 nohup "$OVERLAY_BIN" 行,追加参数:
| 参数 | 作用 | 默认 |
|---|---|---|
--alpha 0.22 |
透明度 0~1 | 0.22 |
--rgb 0.30,0.95,0.40 |
绿色 RGB | 浅绿 |
--sound Ping |
提示音(系统音效名) | Ping |
--no-sound |
静音 | — |
--label "文字" |
顶部提示文字 | Claude Code 已停下 · 点击任意处恢复 |
--no-label |
不显示文字 | — |
macOS 系统音效可选:Glass / Ping / Tink / Bell / Hero / Pop / Submarine …
cc-overlay(Swift/Cocoa):首次显示时绑定触发的那个 Terminal 窗口的windowID,之后只跟随它;绑定窗口不在最前时自动隐藏(既不穿透到别的窗口,也不跟其他 Terminal 窗口跑),切回该窗口 0.3s 内恢复 → 点击NSApp.terminate退出cc-focus.sh(Stop/Notification hook):沿父进程链找 claude 的 tty → AppleScript 查该 tty 所在 Terminal 窗口的 bounds(只读,不抢焦点)→ 传给遮罩--bind-bounds,遮罩据此绑定正确的 windowIDcc-overlay-stop.sh(UserPromptSubmit hook):发消息时关遮罩(兜底,主路径是点击关闭)
关键坑:中文系统下 Terminal.app 窗口 owner 名是「终端」而非 Terminal,代码匹配 ["Terminal", "终端", "iTerm2", "iTerm"]。
git clone https://github.com/CGIFM/cc-overlay.git
cd cc-overlay
./build.sh # 产出 build/CC Overlay.app + build/CC-Overlay-1.0.0.dmg需要 Xcode Command Line Tools(swiftc)。
src/cc-overlay.swift 遮罩程序源码
installer/CCOverlayInstaller.swift GUI 安装器源码(安装/卸载/合并 settings)
installer/Info.plist .app 配置
hooks/cc-focus.sh Stop / Notification hook
hooks/cc-overlay-stop.sh UserPromptSubmit hook
build.sh 编译打包脚本