详细分析 ▾
运行时依赖
版本
cc-sticky-notify 1.0.2 --- 新功能 来源显示 通知窗口现新增“来源”字段,显示触发通知的程序名称,方便快速识别消息出处。 跨桌面跟随模式 通知可随你切换虚拟桌面。默认关闭——点击窗口左侧灰色竖条激活;激活后竖条变为琥珀色,通知窗口将自动出现在当前桌面。 折叠 / 展开 通知窗口可折叠为仅显示标题栏,节省屏幕空间;单击即可再次展开。 --- 改进 项目名称高亮 项目名称现以粗体红色显示,在多项目切换时一眼识别。 同会话更新脉冲动画更强 同一会话收到新消息时,脉冲动画更醒目,降低专注工作时错过通知的可能。 --- 缺陷修复 消息去重 连续相同消息现仅触发一次通知,消除重复提醒。 多窗口焦点修复 修复长期存在的点击通知时,若同一程序有多窗口,无法准确聚焦目标窗口的问题。 仅主屏幕显示 在多显示器环境下,通知窗口现仅在主屏出现,避免在副屏弹出,保持视觉焦点一致。
安装命令
点击复制技能文档
# cc-sticky-notify 一款固定在 Mac 右上角的便笺通知系统。关键 Claude Code 事件会以黄色浮动便笺形式出现在右上角,直到手动关闭才会消失。 ## 文件结构(完全自包含) `` ~/.claude/skills/cc-sticky-notify/ ├── SKILL.md ├── install.sh ← 一次性设置:chmod + settings.json 指引 └── scripts/ ├── notify.sh ← 主通知脚本(由 hooks 直接调用) ├── sticky-window.swift ← Swift 源码(首次安装时由 install.sh 编译) └── sticky-notify.app/ ← .app 包(首次使用时自动构建) └── Contents/ ├── Info.plist └── MacOS/ └── sticky-notify-app ` 双层通知机制: 1. display notification —— 无需权限,瞬间出现在右上角 2. Swift NSWindow(.floating 层级)—— 固定便笺,手动点 ✕ 关闭 Hook 覆盖(与 popo-notify 保持一致): | Hook | 触发条件 | 便笺内容 | |------|----------|----------| | Stop | 任务完成 | ✅ Task completed + 时间/项目/会话 | | Notification/permission_prompt | 需要权限审批 | 🔐 Permission approval required | | Notification/idle_prompt | 等待用户选择 | 💬 Awaiting your input | | PostToolUse/Bash(失败时) | 命令执行失败 | ❌ Command failed, exit code | --- ## 要求 - macOS 12 Monterey 或更高版本 - Xcode Command Line Tools —— 编译 Swift 浮动窗口、代码签名及 JSON 解析必需 `bash xcode-select --install ` 所有依赖(swiftc、codesign)均来自 Xcode CLT。install.sh 会检查,若 CLT 缺失则提前退出并给出指引。 --- ## 安装 当用户请求安装时,按以下步骤操作: ### 步骤 1 —— 运行 install.sh `bash bash ~/.claude/skills/cc-sticky-notify/install.sh ` 该脚本执行: 1. 检查 Xcode CLT —— 若 xcode-select -p 失败则提前退出并提示。 2. chmod +x notify.sh —— 确保脚本可执行(git clone 可能丢失 +x 权限)。 3. 构建 .app 包 —— 编译 sticky-window.swift,生成 Info.plist + 权限文件,使用 codesign 签名。若包已存在则跳过。 4. 检查 hook 配置 —— 检查 ~/.claude/settings.json 是否已有 cc-sticky-notify 条目,若无则打印所需 hook 命令。 5. 冒烟测试 —— 通过 notify.sh 发送一条测试通知。 ### 步骤 2 —— 配置 settings.json hooks 读取 ~/.claude/settings.json,在 hooks 字段的以下四个位置各追加一条 sticky-notify 条目(若已存在则跳过)。 Stop —— 追加到 Stop[0].hooks: `json { "type": "command", "command": "$HOME/.claude/skills/cc-sticky-notify/scripts/notify.sh" } ` Notification/permission_prompt —— 追加: `json { "type": "command", "command": "$HOME/.claude/skills/cc-sticky-notify/scripts/notify.sh '🔐 Claude Code Permission approval required, check terminal'" } ` Notification/idle_prompt —— 追加: `json { "type": "command", "command": "$HOME/.claude/skills/cc-sticky-notify/scripts/notify.sh '💬 Claude Code Awaiting your input, check terminal'" } ` PostToolUse/Bash —— 追加(仅在失败时触发): `json { "type": "command", "command": "bash -c 'INPUT=$(cat); STATUS=$(echo \"$INPUT\" | jq -r \".tool_response.exitCode // 0\"); [ \"$STATUS\" != \"0\" ] && $HOME/.claude/skills/cc-sticky-notify/scripts/notify.sh \"❌ Claude Code Command failed, exit code: $STATUS\" || true'" } ` ### 步骤 3 —— 验证 `bash # 测试参数模式(模拟 Notification hook) $HOME/.claude/skills/cc-sticky-notify/scripts/notify.sh '✅ Installation verified' # 测试 stdin 模式(模拟 Stop hook) echo '{"session_id":"test12345678"}' | $HOME/.claude/skills/cc-sticky-notify/scripts/notify.sh ` 若右上角出现黄色便笺及系统通知,即表示安装成功。 --- ## 配置 ### CC_STICKY_NOTIFY_CLOSE_TIMEOUT —— 自动关闭超时 默认情况下,便笺1 小时(3600 秒)后自动关闭。可通过环境变量覆盖: `bash export CC_STICKY_NOTIFY_CLOSE_TIMEOUT=300 # 5 分钟后自动关闭 ` - 单位:秒(支持小数,如 30.5) - 必须大于 0;否则回退到默认 3600 秒 - 设为较大值(如 86400)可让便笺几乎全天可见 如需永久生效,写入 shell 配置(~/.zshrc 或 ~/.bashrc): `bash echo 'export CC_STICKY_NOTIFY_CLOSE_TIMEOUT=300' >> ~/.zshrc ` --- ## 故障排除 连系统通知也未出现 - 确认 ~/.claude/settings.json 中的 hooks 配置正确 - 路径应为 $HOME/.claude/skills/cc-sticky-notify/scripts/notify.sh xcrun: error: invalid active developer path 编译时报错 - Xcode Command Line Tools 路径损坏(macOS 升级或重装 Xcode 后常见) - 修复:sudo xcode-select --reset - 若仍无效,重装:xcode-select --install - 若 swiftc 无法编译,浮动窗口会被禁用,但系统通知仍可用 Permission denied 提示在 notify.sh - 脚本缺少执行权限 —— 克隆/复制时未保留权限 - 修复:chmod +x ~/.claude/skills/cc-sticky-notify/scripts/notify.sh - 修复后重新运行 install.sh(最新版启动时会自动执行 chmod +x`)