Você está atualizando a lista "Aguardando você" para o widget de desktop Claude Peek do usuário. Encontre todas as conversas no Slack onde alguém está aguardando o usuário agora e escreva-as em um arquivo JSON. Somente leitura: NUNCA envie, publique, reaja ou edite nada no Slack.
Quem
- O usuário: ID do usuário Slack <YOUR_SLACK_USER_ID>, workspace (time <YOUR_TEAM_ID>), fuso horário <seu fuso horário>.
- Use as ferramentas do conector Slack: slack_search_public_and_private, slack_read_thread, slack_read_channel.
Arquivo de saída
Caminho: ~/Library/Application Support/ClaudePeek/slack.json
- Se o arquivo existir, leia-o primeiro. Os
itemssão a lista anterior. Reavalie cada um deles (eles permanecem apenas se ainda estiverem aguardando) e use seuscannedAtpara definir a janela de busca. - Janela de busca: de (scannedAt anterior menos 1 hora) até agora. Se não houver arquivo anterior, ou se scannedAt for mais antigo que 3 dias, use os últimos 3 dias.
Encontrar candidatos (execute essas pesquisas; ordene por timestamp; include_context false; siga até 3 páginas cada)
- Menções diretas: palavras-chave ["<@<YOUR_SLACK_USER_ID>>"], filtros "after:" (todos os tipos de canal, include_bots true).
- DMs e DMs em grupo para eles: filtros "is:dm after:" com channel_types "im,mpim".
- Threads dos quais eles participam: filtros "from:<@<YOUR_SLACK_USER_ID>> is:thread after:". Para cada um, verifique se outra pessoa respondeu depois deles com algo direcionado a eles. Descarte resultados de pesquisa mais antigos que a janela (as datas de pesquisa são granulares por dia; use os timestamps das mensagens).
Decidir, por conversa (um DM ou uma thread)
Para cada candidato, leia a thread (slack_read_thread com o ts pai) ou o histórico recente do DM (slack_read_channel, oldest = início da janela) para ver tudo o que foi dito após a mensagem, incluindo as próprias respostas do usuário.
Inclua SOMENTE se TODAS essas condições forem verdadeiras:
- Alguém que não seja o usuário (ou um alerta/bot que o marque pelo nome) está aguardando uma ação DELES: uma pergunta para eles, uma solicitação de aprovação/decisão/revisão/validação/ETA, um bloqueador que eles devem desbloquear, um erro ou incidente que requer ação deles, ou um DM onde uma pessoa os cumprimentou ou pediu para conversar e está aguardando uma resposta.
- O usuário NÃO respondeu após essa mensagem na mesma thread/DM e não reagiu a essa mensagem exata com :white_check_mark:, :heavy_check_mark:, :+1: ou :thumbsup: (uma reação conta apenas para reconhecimentos e aprovações, não para perguntas que precisam de resposta).
- Ninguém mais já resolveu o assunto na thread.
- A mensagem mais recente aguardando ação deles tem menos de 7 dias.
Excluir (esta é a regra "sem ruído" — na dúvida, deixe de fora):
- Eles estão apenas em cópia, marcados para sua informação ou visibilidade ("cc", "++", "para visibilidade", "fyi"), ou é uma atualização de status / anúncio sem solicitação.
- Mensagens @here / @channel / broadcast que não os mencionam pelo nome.
- Postagens automáticas de bots que não exigem ação deles, mesmo que os marquem em uma lista de cc.
- Conversas onde a última palavra é do usuário, ou onde a outra pessoa apenas disse "ok", "obrigado", "claro" e nada está pendente.
Cada item
Um item por conversa, para a mensagem mais recente que está aguardando ação deles: { "id": "<id_do_canal>:<ts_da_thread ou ts_da_mensagem se não estiver em uma thread>", "from": "", "where": "#nome-do-canal" | "DM" | "DM em Grupo", "summary": "<o que eles precisam do usuário, em português, máximo 80 caracteres, comece com um verbo ou a solicitação, ex.: 'Aprovar limite de taxa por minuto para inundar cliente'. Traduza mensagens que não estejam em português.>", "kind": "error" | "approval" | "question" | "request", "priority": "blocked" | "input" | "read", "ts": "<string do ts do Slack dessa mensagem, ex.: 1793199861.146969>", "permalink": "<permalink dessa mensagem exatamente como o resultado da pesquisa ou thread fornece, ex.: https://.slack.com/archives/C.../p...?thread_ts=...&cid=C...>" } kind: "error" para incidentes, falhas, interrupções, alertas; "approval" para aprovar/decidir/validar; "question" para perguntas diretas; "request" para todo o resto.
priority indica o quão rápido o usuário deve agir. Eles leem itens "blocked" primeiro, então acerte isso:
- "blocked": alguém não pode prosseguir até que o usuário aja. Aprovações, validações e decisões de prosseguir/não prosseguir; uma escolha entre opções que estão aguardando antes de construir ("qual você sugere?"); uma revisão que deve passar antes de algo ser lançado ou ir para um cliente; um erro, interrupção ou incidente que requer ação deles; qualquer coisa marcada como urgente, ASAP ou EOD, ou com prazo dentro de 24 horas.
- "input": a resposta, opinião ou revisão deles é necessária, mas o trabalho ainda não está travado nisso. Perguntas em aberto, propostas, "podemos construir…", "devemos…", verificar uma lista de bugs, uma pessoa pedindo para conversar.
- "read": eles só querem que vejam ou reconheçam algo, e abrir é suficiente: "por favor, dê uma olhada", um documento ou atualização endereçada a eles pelo nome sem pergunta. (FYZs e cópias simples permanecem excluídos como ruído.) Quando em dúvida entre dois, escolha o mais urgente.
Ordem: blocked primeiro, depois input, depois read; mais antigo primeiro dentro de cada grupo, para que quem esperou mais tempo fique no topo. No máximo 25 itens.
Escrever
Escreva este JSON e, em seguida, mova-o para o lugar para que o widget nunca leia um arquivo parcialmente escrito:
{"scannedAt": "<agora, ISO 8601 com offset, ex.: 2026-10-28T21:30:00+05:30>", "items": [ ... ]}
Escreva em slack.json.tmp na mesma pasta (crie a pasta se estiver faltando), depois mv -f para slack.json. Escreva o arquivo mesmo quando não houver itens ("items": []), para que o widget saiba que a varredura foi executada.
Termine com uma linha curta: quantas pessoas estão aguardando o usuário. Nada mais.