Votre bot Slack alerte à chaque silence : voici thread_followup_silence

L’incident est clos. Dans le fil Slack, deux collègues concluent : « le cluster eu est de nouveau debout, non ? » — « oui, le basculement s’est terminé à 09:12 » — « merci, je ferme le ticket. » Et votre bot poste : ⚠️ the model returned only a silence marker and no reply.
C’est techniquement exact. Il a bien décidé de ne pas parler. Mais pour les trois humains de ce fil, la phrase est du bruit pur.
À quoi sert cet avertissement
Hermes a un garde-fou : quand le modèle répond à un message manifestement appelant une réponse avec pour tout contenu un marqueur de silence comme [SILENT], le gateway ne laisse pas le silence passer — il poste un avis à la place. La logique est volontairement prudente : mieux vaut une ligne de trop qu’une vraie question restée sans réponse.
Sur Slack, le jugement pour les réponses de fil est souple. Dès que le bot a participé à un fil de canal, les réponses ultérieures de ce fil sont traitées comme « peut-être destinées au bot », si bien que le gateway enregistre la réponse comme ni attendue ni inattendue. Quand le modèle décide ensuite que ce n’est pas pour lui et produit un marqueur de silence nu, le marqueur est rejeté et la carte d’avertissement apparaît.
Le décalage vient du comportement réel des fils : dans un fil vivant, les échanges entre humains dépassent de loin les messages humain-vers-bot.
Ce que fait l’interrupteur
thread_followup_silence est un opt-in, désactivé par défaut. Quand il est actif, une réponse non adressée dans un fil qui n’est pas un DM est jugée comme n’attendant pas de réponse : un marqueur de silence nu tient, et rien n’est posté.
# config.yaml — top-level slack: block, or platforms.slack.extra (extra wins if both set)
slack:
thread_followup_silence: true
Ou par variable d’environnement :
export SLACK_THREAD_FOLLOWUP_SILENCE=true
La comparaison :
| Message | Défaut (off) | Interrupteur actif |
|---|---|---|
| réponse non adressée dans un fil de canal | silence remplacé par l’avis | silence conservé, rien n’est posté |
| une @mention du bot | réponse normale | réponse normale |
| DM 1:1 | réponse normale | réponse normale |
| DM de groupe (plusieurs personnes) | règles de surface partagée | inchangé |
| commandes et déclencheurs par réaction | traités comme d’habitude | traités comme d’habitude |
canal plat (reply_in_thread: false) |
garde l’avis | garde l’avis |
Il bouche donc un trou bien précis : les fils de canal, sans mention du bot, hors DM.
Pourquoi le défaut reste désactivé
Parce que l’ancien défaut règle un vrai problème. Si quelqu’un pose une question au bot dans un fil sans le mentionner, et que le bot se tait sans laisser de trace, la question s’évapore — et personne ne sait qu’elle a été ignorée.
L’interrupteur est fait pour les espaces de travail où les fils impliquant le bot sont surtout des humains qui se parlent entre eux, et où l’avertissement est le bruit. Tout le reste ne change rien ; le chemin par défaut est identique octet pour octet.
Il existe aussi un outil plus étroit dans le même domaine : ignore_other_user_mentions. Il ignore uniquement les messages qui commencent par mentionner quelqu’un d’autre, tandis que les relances simples reçoivent toujours une réponse. Si la gêne est « arrête de t’interposer quand les collègues s’appellent par leur nom », c’est celui-là. Si c’est « tout le fil discute et le bot dépose un rapport de silence à chaque fois », c’est cet interrupteur-ci.
Vérifier qu’il a bien pris effet
Prenez un fil auquel le bot a participé et envoyez une réponse sans @mention :
- Si le modèle décide de rester en dehors : rien ne doit apparaître — pas de carte d’avertissement.
- Mentionnez le bot dans le même fil : il doit répondre normalement. S’il reste muet là aussi, autre chose le bloque (politique de mention au niveau du canal), pas ce flag.
Pour le jugement sous-jacent, surveillez dans le log du gateway le champ « réponse attendue » de cette réponse : avec le flag actif, il passe de « indéterminé » à « non ».
Peut-on l’utiliser aujourd’hui ?
Oui — c’est sorti dans la v0.22.7 le 3 novembre, c’est donc une vraie clé de config dans une version publiée. Réglez-la après hermes update.
Si vous voulez l’autre face de la même pièce — comment la décision de silence est cadrée par salon dans les configurations multi-agents — l’article sur le silence par salon la détaille. La liste complète des options Slack vit dans la section Slack de la référence des commandes, et si le vrai problème est que les événements importants ne vous parviennent jamais, le guide de l’attention et des notifications traite du côté réception.