CommunityProgramación y desarrollogithub.com

slack-waiting-on-me

Escanea Slack en busca de conversaciones donde alguien espera una respuesta, aprobación o acción del usuario y las escribe en la pastilla Claude Peek.

¿Qué es slack-waiting-on-me?

Esta habilidad se encarga de gestionar la lista de "Pendientes contigo" para el widget de escritorio Claude Peek. Su propósito es identificar de manera automática y no intrusiva todas aquellas conversaciones en Slack donde el usuario tiene una acción pendiente, como responder una pregunta, dar una aprobación, desbloquear a alguien o atender una incidencia. La habilidad está diseñada para ser de solo lectura: jamás envía, publica, reacciona o edita nada en Slack. Funciona en cualquier plataforma que ejecute Claude Peek y utiliza las herramientas de conector de Slack para buscar y leer mensajes. El proceso consiste en buscar menciones directas, DMs, DMs grupales y los hilos en los que el usuario ha participado. Luego evalúa cada conversación para determinar si realmente alguien está esperando al usuario, aplicando estrictas reglas de exclusión para evitar ruido. Finalmente, escribe un archivo JSON con los ítems encontrados, priorizando los más urgentes (bloqueado, luego entrada, luego lectura) y ordenados por antigüedad. Esto permite al widget mostrar de forma clara y concisa quién y qué necesita atención, ayudando al usuario a priorizar su trabajo.

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

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Estás actualizando la lista de "Pendientes contigo" para el widget de escritorio Claude Peek. Encuentra cada conversación de Slack donde alguien está esperando al usuario ahora mismo y escríbelas en un archivo JSON. Solo lectura: NUNCA envíes, publiques, reacciones o edites nada en Slack.

Quién

  • El usuario: ID de usuario de Slack <YOUR_SLACK_USER_ID>, espacio de trabajo (equipo <YOUR_TEAM_ID>), zona horaria .
  • Usa las herramientas de conector de Slack: slack_search_public_and_private, slack_read_thread, slack_read_channel.

Archivo de salida

Ruta: ~/Library/Application Support/ClaudePeek/slack.json

  1. Si el archivo existe, léelo primero. Sus items son la lista anterior. Vuelve a verificar cada uno (se quedan solo si aún están esperando) y usa su scannedAt para elegir la ventana de búsqueda.
  2. Ventana de búsqueda: desde (anterior scannedAt menos 1 hora) hasta ahora. Si no hay archivo anterior, o scannedAt tiene más de 3 días, usa los últimos 3 días.

Encontrar candidatos (ejecuta estas búsquedas; ordena por marca de tiempo; include_context false; sigue hasta 3 páginas cada una)

  1. Menciones directas: palabras clave ["<@<YOUR_SLACK_USER_ID>>"], filtros "after:" (todos los tipos de canal, include_bots true).
  2. DMs y DMs grupales para ellos: filtros "is:dm after:" con channel_types "im,mpim".
  3. Hilos de los que forman parte: filtros "from:<@<YOUR_SLACK_USER_ID>> is:thread after:". Para cada uno, verifica si alguien más respondió después de ellos con algo que les corresponda. Descarta los resultados de búsqueda más antiguos que la ventana (las fechas de búsqueda son por día; usa las marcas de tiempo de los mensajes).

Decidir, por conversación (un DM o un hilo)

Para cada candidato, lee el hilo (slack_read_thread con el ts principal) o el historial reciente del DM (slack_read_channel, oldest = inicio de la ventana) para ver todo lo dicho después del mensaje, incluyendo las propias respuestas del usuario.

Inclúyelo SOLO si TODAS estas condiciones se cumplen:

  • Alguien distinto al usuario (o una alerta/bot que los etiqueta por nombre) está esperando por ELLOS: una pregunta para ellos, una solicitud de aprobación/decisión/revisión/firma/ETA, un bloqueo que deben desbloquear, un error o incidente que necesita su acción, o un DM donde una persona los saludó o pidió hablar y está esperando una respuesta.
  • El usuario NO ha respondido después de ese mensaje en el mismo hilo/DM, y no ha reaccionado a ese mensaje exacto con :white_check_mark:, :heavy_check_mark:, :+1: o :thumbsup: (una reacción solo cuenta para acuses de recibo y aprobaciones, no para preguntas que necesitan respuesta).
  • Nadie más lo ha resuelto ya en el hilo.
  • El último mensaje que espera al usuario tiene menos de 7 días.

Excluir (esta es la regla de "sin ruido" — en caso de duda, déjalo fuera):

  • Solo está en copia, etiquetado para información o visibilidad ("cc", "++", "para visibilidad", "fyi"), o es una actualización de estado / anuncio sin solicitud.
  • Mensajes @here / @channel / de difusión que no preguntan por su nombre.
  • Publicaciones automáticas de bots que no necesitan su acción, incluso si lo etiquetan en una lista de cc.
  • Conversaciones donde la última palabra es del usuario, o donde la otra persona acaba de decir "ok", "gracias", "claro" y no hay nada pendiente.

Cada elemento

Un elemento por conversación, para el mensaje más reciente que está esperando al usuario: { "id": "<channel_id>:<thread_ts o ts de ese mensaje si no está en un hilo>", "from": "", "where": "#nombre-del-canal" | "DM" | "DM grupal", "summary": "<lo que necesitan del usuario, en español, máximo 80 caracteres, comienza con un verbo o la solicitud, p. ej. 'Aprobar límite de tasa por minuto para cliente flood'. Traduce mensajes que no estén en español.>", "kind": "error" | "approval" | "question" | "request", "priority": "blocked" | "input" | "read", "ts": "<cadena ts de Slack de ese mensaje, p. ej. 1793199861.146969>", "permalink": "<permalink exacto de ese mensaje tal como lo da el resultado de búsqueda o hilo, p. ej. https://.slack.com/archives/C.../p...?thread_ts=...&cid=C...>" } kind: "error" para incidentes, fallos, cortes, alertas; "approval" para aprobar/decidir/firmar; "question" para preguntas directas; "request" para todo lo demás.

priority es qué tan pronto debe actuar el usuario. Leen los elementos "blocked" primero, así que hazlo bien:

  • "blocked": alguien no puede continuar hasta que el usuario actúe. Aprobaciones, autorizaciones y decisiones de seguir/no seguir; una elección entre opciones que esperan antes de construir ("¿cuál sugieres?"); una revisión que debe pasar antes de que algo se lance o vaya a un cliente; un error, corte o incidente que necesita su acción; cualquier cosa marcada como urgente, ASAP o EOD, o con una fecha límite dentro de 24 horas.
  • "input": se necesita su respuesta, opinión o revisión, pero su trabajo aún no está bloqueado. Preguntas abiertas, propuestas, "podemos construir…", "deberíamos…", verificar una lista de errores, una persona que pide hablar.
  • "read": solo quieren que vea o reconozca algo, y abrirlo es suficiente: "échale un vistazo por favor", un documento o actualización dirigida a él por su nombre sin pregunta. (Los FYI simples y cc's se quedan excluidos como ruido). Cuando dudes entre dos, elige el más urgente.

Orden: primero blocked, luego input, luego read; dentro de cada uno el más antiguo primero, para que quien ha esperado más tiempo esté arriba. Máximo 25 elementos.

Escribir

Escribe este JSON, luego muévelo a su lugar para que el widget nunca lea un archivo a medio escribir: {"scannedAt": "<ahora, ISO 8601 con offset, p. ej. 2026-10-28T21:30:00+05:30>", "items": [ ... ]} Escribe en slack.json.tmp en la misma carpeta (crea la carpeta si falta), luego mv -f a slack.json. Escribe el archivo incluso cuando no haya elementos ("items": []), para que el widget sepa que el escaneo se ejecutó.

Termina con una línea corta: cuántas personas están esperando al usuario. Nada más.

Skills relacionados