您正在為使用者的 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
- 如果檔案已存在,請先讀取它。其
items為先前的清單。重新檢查每個項目(僅在仍然等待時才保留),並使用其scannedAt來選擇搜尋視窗。 - 搜尋視窗:從(上一次 scannedAt 減 1 小時)到現在。如果沒有先前的檔案,或 scannedAt 已超過 3 天,則使用最近 3 天。
尋找候選項目(執行以下搜尋;按時間戳記排序;include_context false;每個搜尋最多跟進 3 頁)
- 直接提及:關鍵字 ["<@<YOUR_SLACK_USER_ID>>"],篩選條件 "after:"(所有頻道類型,include_bots true)。
- 寄給他們的 DM 和群組 DM:篩選條件 "is:dm after:",channel_types "im,mpim"。
- 他們參與的執行緒:篩選條件 "from:<@<YOUR_SLACK_USER_ID>> is:thread after:"。對於每個執行緒,檢查是否有其他人之後回覆了需要他們處理的內容。 捨棄超出視窗的搜尋結果(搜尋日期為天級精度;使用訊息時間戳記)。
決定,每個對話(一個 DM 或一個執行緒)
對於每個候選項目,讀取執行緒(使用 slack_read_thread 和父 ts)或最近的 DM 歷史(slack_read_channel,最舊 = 視窗起始點),以便看到該訊息之後的所有對話,包括使用者自己的回覆。
僅在所有條件都成立時才包含:
- 使用者以外的人(或透過名稱標記使用者的警示/機器人)正在等待他們:一個問題、對他們的批准/決定/審查/簽核/ETA 請求、一個他們必須解決的阻礙、一個需要他們處理的錯誤或事件,或者一個有人打招呼或要求交談且正在等待回覆的 DM。
- 使用者在同一執行緒/DM 中尚未回覆該訊息,且未對該確切訊息使用 :white_check_mark:、:heavy_check_mark:、:+1: 或 :thumbsup: 反應(反應僅計入確認和批准,不計入需要回答的問題)。
- 執行緒中沒有其他人已經解決它。
- 等待使用者的最新訊息少於 7 天。
排除(這是「無噪音」規則—有疑問時,請排除):
- 他們僅被副本(cc)、標記為僅供參考或知曉(「cc」、「++」、「for visibility」、「fyi」),或者是無要求的狀態更新/公告。
- @here / @channel / 不具名詢問他們的廣播訊息。
- 不需要他們操作的自動機器人貼文,即使它們在副本清單中標記了他們。
- 對話中最後一句話是使用者的,或者對方僅回覆「ok」、「thanks」、「sure」且沒有待辦事項。
每個項目
每個對話一個項目,針對等待使用者的最新訊息: { "id": "<channel_id>:<thread_ts 或該訊息的 ts(如果不在執行緒中)>", "from": "<等待者的名字>", "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":如果使用者不採取行動,有人將無法繼續。批准、簽核和繼續/停止的決定;在他們選擇之前正在等待的選項(「您建議哪一個?」);必須通過才能發布或提供給客戶的審查;需要他們操作的錯誤、中斷或事件;任何標記為緊急、ASAP 或 EOD 的內容,或 24 小時內有截止日期的內容。
- "input":需要他們的答案、意見或審查,但他們的工作尚未因此受阻。開放性問題、提案、「我們可以建立…嗎」、「我們應該…嗎」、檢查錯誤清單、要求交談的人。
- "read":他們只想讓使用者查看或確認某事,打開即可:「請看一下」、一份以他們名字提及且沒有問題的文件或更新。(純粹的僅供參考和副本仍因噪音而排除。) 當在兩者之間猶豫時,選擇更緊迫的那一個。
排序:blocked 優先,然後是 input,最後是 read;每個優先級內按時間排序,最舊的在上方,以確保等待最久的人在最上面。最多 25 個項目。
寫入
寫入此 JSON,然後將其移動到位,以便小工具永遠不會讀取半寫入的檔案:
{"scannedAt": "<現在時間,ISO 8601 含時區偏移,例如 2026-10-28T21:30:00+05:30>", "items": [ ... ]}
寫入相同資料夾中的 slack.json.tmp(如果資料夾不存在則建立),然後使用 mv -f 將其移動到 slack.json。即使沒有項目("items": [])也要寫入檔案,以便小工具知道掃描已執行。
以一行結尾:有多少人正在等待使用者。無其他內容。