Documentação oficial desta página · v0.20.6
Heartbeat de sessão (/heartbeat)
O /heartbeat dá à sessão atual uma instrução recorrente. Sempre que a sessão está ociosa e o
intervalo se cumpre, o prompt dispara como um turno normal do usuário — mesma conversa, mesmo
contexto, mesmo cache de prompt.
/heartbeat every 10m Confira o deploy e me avise se algo relevante mudou
Inspirado no /heartbeat do Prime-Agent. A adaptação do Hermes mantém as garantias do fluxo de
mensagens: o batimento é injetado só entre turnos (nunca no meio de uma execução), como uma mensagem
comum de usuário.
Heartbeat ou cron?
Parecem a mesma coisa, mas servem a trabalhos diferentes:
/heartbeat | hermes cron | |
|---|---|---|
| Roda em | Esta conversa — contexto completo, com memória da discussão | Uma sessão isolada nova a cada disparo |
| Sobrevive a reinício do processo | O estado sobrevive (SessionDB); o disparo volta quando a sessão for usada de novo | Sim — agendador totalmente durável |
| Quantos | Um por sessão | Tarefas ilimitadas |
| Melhor para | "Fique de olho em X nesta conversa enquanto trabalhamos" | Tarefas permanentes, relatórios, vigias, entregas |
Regra prática: se o prompt recorrente precisa do contexto da conversa, use /heartbeat. Se é uma
tarefa autocontida, use cron.
Comandos
| Comando | O que faz |
|---|---|
/heartbeat every <intervalo> <prompt> | Define (ou substitui) o batimento da sessão. Intervalos: 90s, 10m, 2h, 1d (mínimo de 60s). |
/heartbeat ou /heartbeat status | Mostra o batimento, o intervalo e quanto falta para o próximo. |
/heartbeat pause | Para de disparar, sem apagar. |
/heartbeat resume | Retoma (reancorando o cronômetro — sem disparo atrasado na hora). |
/heartbeat clear | Remove o batimento. |
/hb é apelido. Funciona na CLI e nas plataformas de gateway (no Slack, use
/hermes heartbeat …).
Detalhes de comportamento
- Só quando ocioso. Um batimento nunca interrompe um turno em andamento. Se o agente estiver ocupado na hora, ele dispara na próxima verificação de ociosidade.
- Disparos perdidos se juntam. Se a sessão ficou ocupada (ou o processo não estava rodando) por vários intervalos, você recebe um turno de batimento, não uma fila. O cronômetro reancora a cada disparo.
- Mensagem do usuário tem prioridade. Uma mensagem na fila sempre vem primeiro; o batimento espera a fila esvaziar.
- Seguro para o cache. O prompt injetado é uma mensagem comum de usuário. Sem alterar o prompt de sistema, sem trocar conjunto de ferramentas.
- Persistência. O estado fica em
SessionDB.state_meta, sob a chaveheartbeat:<id_da_sessão>— sobrevive ao/resumee acompanha as rotações de sessão por compressão de contexto. Para disparar, o processo dono (a sessão de CLI ou o gateway) precisa estar rodando; para agendamentos que precisam sobreviver a tudo, use cron. - Proteção contra inventar trabalho. O prompt injetado diz ao agente para responder curto e parar quando nada relevante mudou, para um batimento ocioso não gerar tarefa à toa.
Exemplo
Você: /heartbeat every 15m Veja se o CI do PR #1234 terminou; resuma o resultado quando terminar
♥ Heartbeat set (every 15m): Veja se o CI do PR #1234 terminou; ...
[15 minutos com você fazendo outras coisas na mesma sessão]
Hermes: [Heartbeat — recurring instruction, fires every 15m]
💻 gh pr checks 1234 (1.2s)
O CI ainda está rodando (14 de 37 checagens concluídas). Nada a relatar por enquanto.
Quando a resposta parar de mudar, limpe com /heartbeat clear — ou deixe montando guarda.