Claude Peek 데스크톱 위젯의 'Waiting on you' 목록을 갱신하고 있습니다. 누군가 사용자의 답변을 기다리고 있는 모든 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, oldest = 기간 시작) 사용자의 답변을 포함하여 메시지 이후에 작성된 모든 내용을 확인합니다.
다음 조건이 모두 참인 경우에만 포함합니다:
- 사용자(또는 사용자 이름으로 태그하는 알림/봇) 외의 다른 사람이 사용자를 기다리고 있음: 사용자에게 하는 질문, 승인/결정/리뷰/서명/ETA 요청, 사용자가 해결해야 하는 차단 항목, 사용자의 조치가 필요한 오류/사고, 또는 누군가 인사하거나 대화를 요청하고 답변을 기다리는 DM.
- 사용자가 동일한 스레드/DM에서 해당 메시지 이후에 답변하지 않았고, 해당 메시지에 :white_check_mark:, :heavy_check_mark:, :+1: 또는 :thumbsup: 반응을 남기지 않음(반응은 승인 및 확인에만 해당, 답변이 필요한 질문에는 적용되지 않음).
- 다른 사람이 스레드에서 이미 해결하지 않음.
- 사용자를 기다리는 최신 메시지가 7일 미만인 경우.
제외 (이것은 "노이즈 없음" 규칙 — 의심스러우면 제외):
- 사용자가 참조(cc), FYI 또는 가시성을 위해 태그된 경우("cc", "++", "for visibility", "fyi"), 또는 요청 사항이 없는 상태 업데이트/공지.
- @here / @channel / 사용자 이름을 직접 요청하지 않는 브로드캐스트 메시지.
- 사용자의 조치가 필요하지 않은 자동화된 봇 게시물(CC 목록에 태그하더라도).
- 마지막 메시지가 사용자의 것이거나, 상대방이 "ok", "thanks", "sure"만 말하고 더 이상 기다리는 것이 없는 대화.
각 항목
사용자를 기다리는 가장 최근 메시지에 대해, 대화당 하나의 항목: { "id": "<channel_id>:<thread_ts 또는 스레드가 아닌 경우 해당 메시지의 ts>", "from": "<기다리는 사람의 이름>", "where": "#channel-name" | "DM" | "Group DM", "summary": "<사용자에게 필요한 것, 영어로, 최대 80자, 동사나 요청으로 시작, 예: '고객 홍수 방지를 위한 분당 속도 제한 승인'. 영어가 아닌 메시지 번역>", "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": 사용자가 보거나 확인하기만 하면 되고, 열어보는 것으로 충분함: "한번 봐주세요", 이름으로 지칭된 문서 또는 업데이트(질문 없음). (단순 FYI 및 CC는 여전히 노이즈로 제외됨.) 두 가지 사이에서 고민될 경우, 더 긴급한 것을 선택.
순서
blocked 먼저, 그다음 input, 그다음 read; 각 그룹 내에서는 가장 오래 기다린 항목이 위에 오도록 오래된 순서. 최대 25개 항목.
쓰기
이 JSON을 작성한 후, 위젯이 절반만 작성된 파일을 읽지 않도록 원자적으로 이동:
{"scannedAt": "<현재 시간, ISO 8601 오프셋 포함, 예: 2026-10-28T21:30:00+05:30>", "items": [ ... ]}
같은 폴더에 slack.json.tmp로 작성(폴더가 없으면 생성), 그런 다음 mv -f로 slack.json으로 이동. 항목이 없더라도 파일을 작성("items": [])하여 위젯이 스캔이 실행되었음을 알 수 있도록 함.
한 줄로 마무리: 사용자를 기다리는 사람 수. 그 외에는 아무것도 하지 않음.