Community编程与开发github.com

slack-waiting-on-me

扫描 Slack,找出所有等待你回复、审批或操作的消息,并写入 Claude Peek 桌面组件。

slack-waiting-on-me 是什么?

该技能旨在帮助用户高效管理 Slack 中需要自己跟进的消息。它通过 Slack 搜索和读取 API,查找提及用户、私信(DM/群组 DM)以及用户参与的线程中,其他人正在等待用户回复、审批、审核或决策的会话。技能会严格过滤掉仅用于知会(FYI)、状态更新或无需用户操作的自动机器人消息。对于每个符合条件的会话,该技能会提取最新待回复消息,并分类为 'error'(错误)、'approval'(审批)、'question'(问题)或 'request'(请求)类型,同时根据紧急程度赋予 'blocked'(阻塞)、'input'(需输入)或 'read'(需阅览)优先级。最终,结果会以 JSON 格式写入 Claude Peek 桌面组件可读取的文件中,确保组件总能获取最新待办列表。该技能支持 Slack 工作区,并以只读方式运行,绝不会在 Slack 中发送、回复或编辑任何内容。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/stephensebastin/glance/tree/HEAD/scan

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

您正在刷新用户 Claude Peek 桌面组件中的“等待你处理”列表。请找到每一个当前等待用户回复的 Slack 会话,并将其写入 JSON 文件。请注意:只读操作,绝不在 Slack 中发送、发布、回复或编辑任何内容。

谁

  • 用户:Slack 用户 ID <YOUR_SLACK_USER_ID>,工作区 (团队 <YOUR_TEAM_ID>),时区 。
  • 使用 Slack 连接器工具:slack_search_public_and_private、slack_read_thread、slack_read_channel。

输出文件

路径:~/Library/Application Support/ClaudePeek/slack.json

  1. 如果文件已存在,请先读取它。它的 items 是之前的列表。重新检查每一项(仅当仍处于等待状态时才保留),并使用其 scannedAt 来确定搜索窗口。
  2. 搜索窗口:从(上一次的 scannedAt 减去 1 小时)到当前时间。如果没有之前的文件,或 scannedAt 超过 3 天,则使用最近 3 天。

查找候选会话(执行以下搜索;按时间戳排序;include_context 设为 false;每个搜索最多翻 3 页)

  1. 直接提及:关键词 ["<@<YOUR_SLACK_USER_ID>>"],过滤器 "after:"(所有频道类型,include_bots 设为 true)。
  2. 发送给用户的私聊和群组私聊:过滤器 "is:dm after:",channel_types 设为 "im,mpim"。
  3. 用户参与的线程:过滤器 "from:<@<YOUR_SLACK_USER_ID>> is:thread after:"。对于每个线程,检查是否有其他人在用户之后回复了需要用户处理的内容。 丢弃超出搜索窗口的命中结果(搜索日期精确到天,请使用消息的时间戳进行过滤)。

判断每个会话(一条私聊,或一个线程)

对于每个候选会话,读取完整的线程(使用父级 ts 调用 slack_read_thread)或最近的私聊历史(调用 slack_read_channel,oldest 设为窗口开始时间),以便查看用户消息之后的所有发言,包括用户自己的回复。

仅当所有以下条件都为真时,才包含该会话:

  • 除用户以外的其他人(或按名称提及用户的警报/机器人)正在等待用户处理:向用户提问、请求审批/决策/审核/签署/ETA、用户必须解除的阻塞、需要用户处理的错误或事件,或者某人向用户问候、请求交谈并正在等待回复的私聊。
  • 用户在同一个线程/私聊中尚未回复该消息,并且尚未对该消息用 :white_check_mark:、:heavy_check_mark:、:+1: 或 :thumbsup: 做出反应(反应仅算作确认或批准,不算作需要回答的问题)。
  • 没有其他人在线程中已经解决了该问题。
  • 等待用户的最近一条消息小于 7 天。

排除项(这是“无噪音”规则——当不确定时,请排除):

  • 用户只是被抄送、标记为知会或可见(“cc”、“++”、“for visibility”、“fyi”),或者是状态更新/公告,不包含具体请求。
  • @here / @channel / 广播消息,没有按名称请求用户。
  • 无需用户操作的自动机器人帖子,即使它们在抄送列表中标记了用户。
  • 会话中最后一条消息是用户的,或者对方刚刚回复“ok”、“thanks”、“sure”且没有待办事项。

每个项目

每个会话一个项目,对应于等待用户处理的最近一条消息: { "id": "<channel_id>:<thread_ts 或消息本身(如果不在线程中)的 ts>", "from": "<等待用户的人的 first name>", "where": "#channel-name" | "DM" | "Group DM", "summary": "<用户需要做什么,用英文描述,最多 80 个字符,请以动词或请求开头,例如 'Approve per-minute rate limit for flooding customer'。对于非英文消息进行翻译。>", "kind": "error" | "approval" | "question" | "request", "priority": "blocked" | "input" | "read", "ts": "<该消息的 Slack ts 字符串,例如 1793199861.146969>", "permalink": "<该消息的永久链接,格式与搜索结果或线程结果中给出的完全相同,例如 https://.slack.com/archives/C.../p...?thread_ts=...&cid=C...>" } kind 字段:当为事件、故障、宕机或警报时,设为 "error";当为审批/决策/签署时,设为 "approval";当为直接问题时,设为 "question";其他情况均设为 "request"。

priority 字段表示用户必须采取行动的时间紧迫程度。用户会优先阅读 "blocked" 项目,因此请正确设置:

  • "blocked":用户在行动之前,其他人的工作无法继续。包括:审批、签署和 Go/No-Go 决策;用户在构建前必须选择的方案(“你建议哪个?”);阻止发布或交付给客户的审核;需要用户处理的错误、宕机或事件;标记为紧急、ASAP 或 EOD,或期限在 24 小时内的任何事情。
  • "input":需要用户的回答、意见或审核,但用户的工作尚未因此受阻。包括:开放性问题、提案、“我们可以构建…吗”、“我们应该…吗”、检查错误列表、请求交谈的人。
  • "read":用户只需要查看或确认某些内容,打开即可:例如“请看看”、标记给用户的文档或更新(不含问题)。纯粹的 FYI 和抄送仍作为噪音排除。 当在两者之间犹豫时,请选择更紧急的那个。

排序:先显示 blocked,然后是 input,最后是 read;在每个优先级内,按时间戳升序排列,以便等待时间最长的项目排在顶部。最多 25 个项目。

写入

编写以下 JSON,然后将其移至正确位置,以确保组件永远不会读到未完成写入的文件: {"scannedAt": "<现在时间,ISO 8601 格式包含时区偏移,例如 2026-10-28T21:30:00+05:30>", "items": [ ... ]} 将内容写入同一文件夹下的 slack.json.tmp 文件(如果文件夹不存在则创建),然后使用 mv -f 将其移动到 slack.json。即使没有项目("items": []),也要写入文件,以便组件知道扫描已运行。

最后用一行简短描述结束:有多少人正在等待用户处理。不要添加其他内容。

相关技能