Tu bot de Slack no para de avisar de silencios: llega thread_followup_silence

El incidente está cerrado. En el hilo de Slack, dos colegas rematan: “el clúster eu ya está arriba, ¿no?” — “sí, el failover terminó a las 09:12” — “gracias, cierro el ticket”. Y tu bot publica: ⚠️ el modelo solo devolvió un marcador de silencio y ninguna respuesta.
Técnicamente es correcto. Decidió no hablar. Pero para las tres personas de ese hilo, la frase es puro ruido.
Para qué sirve ese aviso
Hermes tiene una guarda: cuando el modelo responde a un mensaje obviamente respondible con nada más que un marcador de silencio como [SILENT], el gateway no deja pasar el silencio — publica un aviso en su lugar. La lógica es deliberadamente conservadora: mejor una línea de más que una pregunta real que nadie contesta.
En Slack, el juicio para las respuestas de hilo es blando. Una vez que el bot ha participado en un hilo de canal, las respuestas posteriores de ese hilo se tratan como “puede que sean para el bot”, así que el gateway registra la respuesta como ni esperada ni inesperada. Cuando el modelo decide entonces “esto no va conmigo” y produce un marcador de silencio pelado, el marcador se rechaza y aparece la tarjeta de aviso.
El desajuste está en cómo se comportan de verdad los hilos: en un hilo cálido, la charla entre humanos supera con creces los mensajes de humano a bot.
Qué hace el interruptor
thread_followup_silence es opcional y viene desactivado. Cuando está activo, una respuesta no dirigida en un hilo que no es DM se juzga como que no espera respuesta, así que un marcador de silencio pelado se mantiene y no se publica nada.
# config.yaml — top-level slack: block, or platforms.slack.extra (extra wins if both set)
slack:
thread_followup_silence: true
O por entorno:
export SLACK_THREAD_FOLLOWUP_SILENCE=true
La comparación:
| Mensaje | Por defecto (off) | Interruptor activo |
|---|---|---|
| respuesta no dirigida en un hilo de canal | el silencio se sustituye por el aviso | el silencio se mantiene, no se publica nada |
| una @mención al bot | respuesta normal | respuesta normal |
| DM 1:1 | respuesta normal | respuesta normal |
| DM de grupo (varias personas) | reglas de superficie compartida | sin cambios |
| comandos y triggers de reacción | se tratan como siempre | se tratan como siempre |
canal plano (reply_in_thread: false) |
mantiene el aviso | mantiene el aviso |
Así que estrecha un agujero muy concreto: hilos de canal, sin mención al bot, que no son DM.
Por qué el valor por defecto sigue apagado
Porque el default antiguo resuelve un problema real. Si alguien le pregunta algo al bot en un hilo sin mencionarlo, y el bot se calla sin dejar rastro, la pregunta simplemente se evapora — y nadie sabe que se saltó.
El interruptor es para workspaces donde los hilos en los que participa el bot son sobre todo personas hablando entre ellas, y el aviso es el ruido. Para todos los demás no cambia nada; la ruta por defecto es byte a byte la misma.
Hay también una herramienta más estrecha en la misma zona: ignore_other_user_mentions. Se salta solo los mensajes que abren mencionando a otra persona, mientras que los follow-ups normales siguen recibiendo respuesta. Si la molestia es “deja de meterte cuando los colegas se llaman por su nombre”, esa encaja mejor. Si es “el hilo entero está charlando y el bot presenta un informe de silencio cada vez”, este interruptor es el que buscas.
Comprobar que ha surtido efecto
Elige un hilo en el que el bot haya participado y manda una respuesta sin @mención:
- Si el modelo decide quedarse fuera: no debería aparecer nada — ninguna tarjeta de aviso.
- Menciona al bot en el mismo hilo: debería responder con normalidad. Si también se calla ahí, algo más lo está frenando (la política de menciones a nivel de canal), no este flag.
Para el juicio de fondo, mira en el log del gateway el campo de respuesta esperada de esa respuesta: con el flag activo, pasa de “indeterminado” a “no”.
¿Se puede usar ya?
Sí — esto salió en v0.22.7 el 3 de noviembre, así que es una clave de config real en una versión publicada. Actívala después de hermes update.
Si quieres la otra cara de la misma moneda — cómo se acota la decisión de silencio por sala en montajes multiagente — el post sobre silencio por sala lo recorre. La lista completa de opciones de Slack está en la sección de Slack de la referencia de comandos, y si el problema real es que los eventos importantes nunca te llegan, la guía de atención y notificaciones cubre el extremo receptor.