mcpField
T
task-banner

task-banner

github.com/openclaudiaAgent 工作流722116 次安装1 周前更新
代码仓库

关于 task-banner

task-banner 是一项 macOS 技能,可在 Claude Code 完成一轮操作时显示桌面浮层。它通过 Stop hook 展示简短完成摘要,不依赖通知中心。

主要功能

  1. 01显示置顶完成横幅
  2. 02展示任务专属摘要
  3. 03使用 Claude Code Stop hook
  4. 04通过标记文件静音或恢复

适用场景

  1. 01及时发现 Claude Code 完成操作
  2. 02查看已完成工作的简短摘要
  3. 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

设置

  1. 将此技能目录中的 mac-overlay.js 复制到 ~/.claude/scripts/mac-overlay.js。

  2. 将 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
          }
        ]
      }
    ]
  }
}
  1. 若要让横幅显示已完成的具体内容(而不是笼统的“任务已完成”),请将以下内容添加到全局 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