Seu bot do Slack vive avisando sobre silêncio: conheça o thread_followup_silence

O incidente está encerrado. Na thread do Slack, dois colegas fecham o assunto: “o cluster eu voltou, né?” — “sim, o failover terminou às 09:12” — “valeu, vou fechar o ticket”. E seu bot posta: ⚠️ o modelo retornou apenas um marcador de silêncio e nenhuma resposta.
Tecnicamente está correto. Ele de fato decidiu não falar. Mas, para as três pessoas naquela thread, a frase é puro ruído.
Para que serve esse aviso
O Hermes tem uma proteção: quando o modelo responde a uma mensagem obviamente respondível com nada além de um marcador de silêncio como [SILENT], o gateway não deixa o silêncio passar — ele posta um aviso no lugar. A lógica é deliberadamente conservadora: melhor uma linha a mais do que uma pergunta real que ninguém responde.
No Slack, o julgamento para respostas de thread é suave. Uma vez que o bot participou de uma thread no canal, as respostas seguintes nessa thread passam a ser tratadas como “talvez sejam para o bot”, então o gateway registra a resposta como nem esperada nem inesperada. Quando o modelo então decide “isso não é para mim” e produz um marcador de silêncio puro, o marcador é rejeitado e o cartão de aviso aparece.
O descompasso está em como as threads realmente funcionam: em uma thread movimentada, a conversa entre humanos supera em muito as mensagens de humano para bot.
O que a opção faz
thread_followup_silence é opt-in e vem desligada por padrão. Quando ligada, uma resposta não endereçada em uma thread que não é DM é julgada como não esperando resposta, então um marcador de silêncio puro se sustenta e nada é postado.
# config.yaml — bloco slack: de nível superior, ou platforms.slack.extra (extra vence se ambos definidos)
slack:
thread_followup_silence: true
Ou via ambiente:
export SLACK_THREAD_FOLLOWUP_SILENCE=true
A comparação:
| Mensagem | Padrão (desligado) | Opção ligada |
|---|---|---|
| resposta não endereçada em uma thread de canal | silêncio substituído pelo aviso | silêncio se sustenta, nada é postado |
| uma @menção ao bot | resposta normal | resposta normal |
| DM 1:1 | resposta normal | resposta normal |
| DM em grupo (várias pessoas) | regras de superfície compartilhada | inalterado |
| comandos e gatilhos de reação | tratados como sempre | tratados como sempre |
canal plano (reply_in_thread: false) |
mantém o aviso | mantém o aviso |
Então ela fecha um buraco específico: threads de canal, sem menção ao bot, e que não são DM.
Por que o padrão continua desligado
Porque o padrão antigo resolve um problema real. Se alguém pergunta algo ao bot em uma thread sem mencioná-lo, e o bot fica em silêncio sem deixar rastro, a pergunta simplesmente evapora — e ninguém sabe que ela foi ignorada.
A opção é para workspaces onde as threads em que o bot está envolvido são majoritariamente humanos conversando entre si, e o aviso é o ruído. Todo o resto não muda nada; o caminho padrão continua idêntico, byte a byte.
Existe também uma ferramenta mais estreita na mesma área: ignore_other_user_mentions. Ela ignora apenas mensagens que começam mencionando outra pessoa, enquanto acompanhamentos simples ainda recebem resposta. Se o incômodo é “pare de se intrometer quando os colegas se chamam pelo nome”, essa é a mais adequada. Se é “a thread inteira está conversando e o bot registra um relatório de silêncio toda vez”, a opção é esta.
Verificando se funcionou
Escolha uma thread em que o bot já participou e envie uma resposta sem @menção:
- Se o modelo decidir ficar de fora: nada deve aparecer — nenhum cartão de aviso.
- Mencione o bot na mesma thread: ele deve responder normalmente. Se também ficar quieto ali, outra coisa está barrando (política de menção no nível do canal), não esta flag.
Para ver o julgamento por trás, acompanhe no log do gateway o campo de resposta esperada dessa mensagem: com a flag ligada, ele passa de “undetermined” para “no”.
Você já pode usar?
Sim — isso foi lançado na v0.22.7, em 3 de novembro, então é uma chave de configuração real em uma versão publicada. Defina depois de hermes update.
Se você quer o outro lado da mesma moeda — como a decisão de silêncio é delimitada por sala em configurações multiagente —, o post sobre silêncio por sala percorre isso. A lista completa de opções do Slack está na seção Slack da referência de comandos, e, se o problema real é que eventos importantes nunca chegam até você, o guia de atenção e notificações cobre a ponta receptora.