slack-waiting-on-me

Analyse les conversations Slack pour détecter les messages où quelqu'un attend une réponse, une approbation ou une action de l'utilisateur, et les écrit dans le widget Claude Peek.

Qu'est-ce que slack-waiting-on-me ?

Cette compétence est conçue pour les agents IA, comme Claude Code ou Cursor, afin d'alimenter le widget de bureau Claude Peek avec une liste « En attente de vous » depuis Slack. Elle identifie les conversations où l'utilisateur est attendu : mentions directes, messages directs (DM), messages de groupe (group DM), et fils de discussion où l'utilisateur a participé. La compétence lit les messages, analyse le contexte (questions, approbations, demandes, erreurs) et classe chaque élément par priorité (bloquant, contribution, lecture). Elle exclut automatiquement les bruits comme les notifications « pour info », les messages @here/@channel sans mention nominative, ou les conversations déjà résolues. Les résultats sont écrits dans un fichier JSON, avec une mise à jour incrémentale pour éviter de re-scanner l'historique complet à chaque exécution. Cette compétence est utile pour les développeurs et chefs de projet qui souhaitent centraliser leurs actions en attente directement depuis leur bureau, sans avoir à naviguer manuellement dans Slack.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/stephensebastin/glance/tree/HEAD/scan

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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

  1. Si le fichier existe, lisez-le d'abord. Ses items sont la liste précédente. Revérifiez chacun d'eux (ils ne restent que s'ils sont toujours en attente), et utilisez son scannedAt pour choisir la fenêtre de recherche.
  2. 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)

  1. Mentions directes : keywords ["<@<YOUR_SLACK_USER_ID>>"], filters "after:" (tous les types de canaux, include_bots true).
  2. DMs et DMs de groupe à leur attention : filters "is:dm after:" avec channel_types "im,mpim".
  3. 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.

Skills associés