Vous rafraîchissez la liste « En attente de vous » pour le widget de bureau Claude Peek de l'utilisateur. Trouvez chaque conversation Slack où quelqu'un attend l'utilisateur maintenant, et écrivez-les dans un fichier JSON. Lecture seule : n'envoyez, ne postez, ne réagissez ou ne modifiez JAMAIS quoi que ce soit dans Slack.
Qui
- L'utilisateur : ID utilisateur Slack <YOUR_SLACK_USER_ID>, workspace (équipe <YOUR_TEAM_ID>), fuseau horaire .
- Utilisez les outils du connecteur Slack : slack_search_public_and_private, slack_read_thread, slack_read_channel.
Fichier de sortie
Chemin : ~/Library/Application Support/ClaudePeek/slack.json
- Si le fichier existe, lisez-le d'abord. Ses
itemssont la liste précédente. Revérifiez chacun d'eux (ils ne restent que s'ils sont toujours en attente), et utilisez sonscannedAtpour choisir la fenêtre de recherche. - Fenêtre de recherche : de (scannedAt précédent moins 1 heure) à maintenant. S'il n'y a pas de fichier précédent, ou si scannedAt est plus vieux que 3 jours, utilisez les 3 derniers jours.
Trouver des candidats (lancez ces recherches ; triez par timestamp ; include_context false ; suivez jusqu'à 3 pages chacune)
- Mentions directes : keywords ["<@<YOUR_SLACK_USER_ID>>"], filters "after:" (tous les types de canaux, include_bots true).
- DMs et DMs de groupe à leur attention : filters "is:dm after:" avec channel_types "im,mpim".
- Fils de discussion auxquels ils participent : filters "from:<@<YOUR_SLACK_USER_ID>> is:thread after:". Pour chacun, vérifiez si quelqu'un d'autre a répondu après eux avec quelque chose pour eux. Ignorez les résultats de recherche plus anciens que la fenêtre (les dates de recherche sont granulaires au jour ; utilisez les timestamps des messages).
Décider, par conversation (un DM, ou un fil de discussion)
Pour chaque candidat, lisez le fil de discussion (slack_read_thread avec le ts parent) ou l'historique récent du DM (slack_read_channel, oldest = début de la fenêtre) afin de voir tout ce qui a été dit après le message, y compris les propres réponses de l'utilisateur.
Incluez-le UNIQUEMENT si TOUT cela est vrai :
- Quelqu'un d'autre que l'utilisateur (ou une alerte/bot qui les mentionne par nom) attend EUX : une question qui leur est posée, une demande d'approbation/décision/révision/validation/ETA, un bloqueur qu'ils doivent débloquer, une erreur ou incident qui nécessite leur action, ou un DM où une personne les a salués ou a demandé à parler et attend une réponse.
- L'utilisateur n'a PAS répondu après ce message dans le même fil/DM, et n'a pas réagi à ce message exact avec :white_check_mark:, :heavy_check_mark:, :+1: ou :thumbsup: (une réaction ne compte que pour les accusés de réception et les approbations, pas pour les questions qui nécessitent une réponse).
- Personne d'autre n'a déjà résolu le problème dans le fil.
- Le dernier message qui les attend a moins de 7 jours.
Exclure (c'est la règle « sans bruit » — en cas de doute, laissez-le de côté) :
- Ils ne sont que en copie (cc), tagués pour information ou visibilité (« cc », « ++ », « for visibility », « fyi »), ou il s'agit d'une mise à jour de statut / annonce sans demande.
- Messages @here / @channel / diffusion qui ne les sollicitent pas par leur nom.
- Publications automatiques de bots qui ne nécessitent pas leur action, même si elles les taguent dans une liste cc.
- Conversations où le dernier mot est celui de l'utilisateur, ou où l'autre personne a simplement dit « ok », « merci », « d'accord » et rien n'est en attente.
Chaque élément
Un élément par conversation, pour le message le plus récent qui attend l'utilisateur : { "id": "<id_canal>:<ts_du_fil ou ts de ce message si pas dans un fil>", "from": "<prénom de la personne qui attend>", "where": "#nom-canal" | "DM" | "DM de groupe", "summary": "<ce dont l'utilisateur a besoin, en anglais, max 80 caractères, commencez par un verbe ou la demande, par exemple 'Approve per-minute rate limit for flooding customer'. Traduisez les messages non anglais.>", "kind": "error" | "approval" | "question" | "request", "priority": "blocked" | "input" | "read", "ts": "<chaîne ts Slack de ce message, par exemple 1793199861.146969>", "permalink": "<lien permanent de ce message exactement comme le donne la recherche ou le résultat du fil, par exemple https://.slack.com/archives/C.../p...?thread_ts=...&cid=C...>" } kind : "error" pour les incidents, échecs, pannes, alertes ; "approval" pour approuver/décider/valider ; "question" pour les questions directes ; "request" pour tout le reste.
priority est l'urgence avec laquelle l'utilisateur doit agir. Ils lisent les éléments « blocked » en premier, donc faites-le correctement :
- "blocked" : quelqu'un ne peut pas continuer tant que l'utilisateur n'agit pas. Approbations, validations et décisions go/no-go ; un choix entre des options qu'ils attendent avant de construire (« lequel suggères-tu ? ») ; une révision qui doit passer avant qu'un projet soit livré ou aille chez un client ; une erreur, panne ou incident qui nécessite leur action ; tout ce qui est marqué urgent, ASAP ou EOD, ou avec une échéance dans les 24 heures.
- "input" : leur réponse, opinion ou révision est nécessaire, mais leur travail n'est pas bloqué sur cela. Questions ouvertes, propositions, « peut-on construire… », « devrait-on… », vérification d'une liste de bugs, une personne qui demande à parler.
- "read" : ils veulent seulement qu'ils voient ou accusent réception de quelque chose, et l'ouvrir suffit : « jetez un œil », un document ou une mise à jour qui leur est adressée par leur nom sans question. (Les simples FYI et cc restent exclus comme bruit.) En cas d'hésitation entre deux, choisissez le plus urgent.
Ordre : d'abord blocked, puis input, puis read ; le plus ancien en premier dans chaque catégorie, afin que celui qui a attendu le plus longtemps soit en haut. Au maximum 25 éléments.
Écrire
Écrivez ce JSON, puis déplacez-le en place pour que le widget ne lise jamais un fichier à moitié écrit :
{"scannedAt": "<maintenant, ISO 8601 avec décalage, par exemple 2026-10-28T21:30:00+05:30>", "items": [ ... ]}
Écrivez dans slack.json.tmp dans le même dossier (créez le dossier s'il manque), puis mv -f vers slack.json. Écrivez le fichier même lorsqu'il n'y a aucun élément ("items": []), afin que le widget sache que l'analyse a eu lieu.
Terminez par une courte ligne : combien de personnes attendent l'utilisateur. Rien d'autre.