关于 task-banner
task-banner 是一项 macOS 技能,可在 Claude Code 完成一轮操作时显示桌面浮层。它通过 Stop hook 展示简短完成摘要,不依赖通知中心。
主要功能
- 01显示置顶完成横幅
- 02展示任务专属摘要
- 03使用 Claude Code Stop hook
- 04通过标记文件静音或恢复
适用场景
- 01及时发现 Claude Code 完成操作
- 02查看已完成工作的简短摘要
- 03无需修改配置即可静音或恢复横幅
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ openclaudia/ openclaudia-skills --skill task-banner安装后在 Claude Code 中输入/task-banner确认已加载。
附带文件mac-overlay.js
详细介绍
task-banner
当 Claude Code 完成一轮任务时,显示一个大型、始终置顶的桌面横幅,并用一行文字总结实际完成的内容。即使 macOS 通知中心静默丢弃 osascript display notification 调用,也能正常工作(这是一个常见问题:CLI 未在通知中心注册,因此命令以 0 退出,但没有任何显示)。
此横幅是由 mac-overlay.js 绘制的无边框 Cocoa 覆盖窗口(该脚本是根据 peon-ping 改编的 JXA 脚本),因此不需要通知权限。
要求
- macOS(覆盖窗口通过 JXA /
osascript -l JavaScript使用 Cocoa) - 支持钩子的 Claude Code
设置
-
将此技能目录中的
mac-overlay.js复制到~/.claude/scripts/mac-overlay.js。 -
将
Stop钩子合并到~/.claude/settings.json(先读取文件并保留现有钩子):
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "m=$(cat /tmp/claude-banner-msg 2>/dev/null); rm -f /tmp/claude-banner-msg; [ -f ~/.claude/banner.off ] || osascript -l JavaScript ~/.claude/scripts/mac-overlay.js \"${m:-Task done}\" blue \"\" 0 4 2>/dev/null || true",
"async": true
}
]
}
]
}
}
- 若要让横幅显示已完成的具体内容(而不是笼统的“任务已完成”),请将以下内容添加到全局 Agent 指令文件(
~/.claude/CLAUDE.md或AGENTS.md)中:
每项任务完成后,将简短的完成摘要写入
/tmp/claude-banner-msg(例如:printf 'Typecheck fixed and committed' > /tmp/claude-banner-msg)。说明实际完成的任务;不要使用笼统的“任务已完成”。
Stop 钩子会显示这条消息并删除文件。如果文件不存在,则会显示“任务已完成”。
切换(静音 / 取消静音)
钩子会检查一个哨兵文件 — 无需编辑配置:
touch ~/.claude/banner.off # mute the banner
rm -f ~/.claude/banner.off # unmute
当用户要求将横幅设为静音或取消静音时,运行对应的命令并报告结果状态。
工作原理 / 说明
mac-overlay.js <message> <color> <icon> <slot> <dismiss_seconds>— 颜色为blue/yellow/red,dismiss为0时表示持续显示,直到点击。- 即使处于静音状态,钩子也会读取并删除
/tmp/claude-banner-msg,因此取消静音后不会弹出过期摘要。 - 在较新的 macOS 上,JXA 桥接常量
NSTextAlignmentCenter的值是旧版 AppKit 中的值(2),而统一运行时会将其视为右对齐 — 随附脚本将对齐值硬编码为1(居中)以作补偿。 - 并行运行的 Claude 会话共用
/tmp/claude-banner-msg;如果两个会话恰好同时完成,一个横幅可能会显示另一个会话的摘要。如果这会造成问题,请使用按会话区分的文件路径。
评论
支持 Markdown