Vigias

Peça ao Pepe para ficar de olho em algo e te avisar assim que acontecer. Ele mesmo faz a checagem, sobrevive a reinícios e avisa uma única vez.

Vigias

Uma vigia responde a uma pergunta bem diferente das tarefas agendadas: não “faça isso num horário fixo”, mas “fica de olho nisso aqui e me avisa quando acontecer”. Ela recheca uma condição periodicamente e, assim que essa condição se torna verdadeira, notifica você uma única vez e para por ali. É durável: continua funcionando depois de um reinício ou do encerramento da sessão que a criou, e sempre entrega a resposta no mesmo canal onde nasceu.

Sonda ou agente: dois jeitos de disparar

A parte barata de uma vigia é o gatilho, que roda a cada intervalo configurado. Só quando esse gatilho dispara é que a notificação, essa sim potencialmente cara, entra em ação, e só uma vez. Existem dois tipos de gatilho:

Como cada checagem de agente custa tokens, o intervalo mínimo dela é maior: 300 segundos contra apenas 30 segundos de uma sonda. O intervalo padrão, de qualquer forma, é 120 segundos.

O que ela manda quando dispara

Quando o gatilho finalmente passa, a vigia entrega uma mensagem, que pode ser um texto fixo definido de antemão (sem gastar chamada de modelo nenhuma), ou algo composto pelo próprio agente no momento do disparo (uma única chamada de modelo), o que permite incluir detalhes frescos, como um resumo real do que acabou de acontecer.

A combinação que vale a pena conhecer é uma sonda gratuita controlando uma mensagem composta pelo agente: o curl de sondagem não custa nada, e o modelo só entra em cena, uma única vez, para escrever o resumo bem na hora em que a condição se confirma.

Criando uma vigia pela CLI

A CLI cria vigias baseadas em sonda. Vigias que dependem de julgamento do agente nascem pela conversa, onde o modelo já está no circuito de qualquer forma.

pepe watch add "api-up" \
  --probe "curl -sf https://api.example.com/health" \
  --message "The API is back up." \
  --every 120 \
  --deliver "telegram:123456789"

Gerenciando vigias já criadas:

pepe watch list                 # todas as vigias, com estado e contagem de checagens
pepe watch pause api-up
pepe watch resume api-up
pepe watch cancel api-up

Fazendo pelo painel

A página Watches, disponível enquanto o pepe serve está no ar, lista cada vigia com seu estado, gatilho, intervalo e quantas checagens já consumiu do orçamento total. É dali que dá para pausar, retomar ou cancelar qualquer uma delas. Vigias novas, porém, ainda nascem pela CLI ou pela conversa, que é onde o gatilho e o destino de entrega são de fato configurados.

Fazendo pela conversa

Basta pedir em linguagem natural, e o agente cria a vigia usando a própria ferramenta watch. Assim como schedule_task, essa ferramenta já vem habilitada por padrão (tire-a das ferramentas de um agente se ele nunca deve criar vigias sozinho), e cada criação continua passando pelo mesmo pedido de permissão de sempre.

Me avisa quando o deploy terminar. Confere a cada poucos minutos.

Quando a checagem é algo scriptável, o agente monta uma sonda; quando o caso exige julgamento, ele monta um gatilho de agente, formulando sozinho a pergunta de sim ou não que vai responder a cada intervalo. Ele também pode optar por compor a mensagem final com o modelo em vez de usar um texto fixo, deixando a notificação com um resumo real em vez de uma frase genérica. As ações disponíveis na ferramenta watch são create, list, pause, resume e cancel.

Para não deixar isso crescer sem controle, no máximo 50 vigias podem estar ativas ao mesmo tempo, e o Pepe recusa criar uma vigia nova cuja condição seja idêntica à de outra já em execução, evitando duplicatas acidentais. Toda vigia também tem um teto de checagens: se a condição nunca se confirmar dentro desse orçamento, ela simplesmente expira em silêncio, em vez de continuar sondando para sempre.

Entrega sempre no canal de origem

No momento em que é criada, uma vigia registra sua origem: o canal e a conversa de onde partiu. Quando dispara, ela entrega ali mesmo, mesmo que tenha havido um reinício pelo meio, seja um chat do Telegram (envio direto), uma sessão de terminal ou WebSocket conectada, ou o log da aplicação. Num WebSocket, a notificação chega como um evento "watch" no canal; passando um session estável ao entrar, você continua recebendo essas notificações mesmo depois de reconectar, em vez de depender do mesmo socket que criou a vigia originalmente. No pepe chat, ela aparece direto impressa no console. Já uma vigia criada pela API HTTP, que não tem sessão de conversa nenhuma para responder de volta, cai automaticamente no log.

Duas garantias sustentam essa confiabilidade:

Ao longo da vida, uma vigia passa por um conjunto pequeno de estados: pending (ainda observando), paused, done (já disparou e entregou), expired (esgotou o orçamento de checagens) ou cancelled.

Sem banco de dados para instalar, sem crontab. Tarefas agendadas continuam sendo registros simples dentro do ~/.pepe/config.json (na chave "crons"), com um arquivo JSONL de histórico por tarefa em <PEPE_HOME>/data/cron_logs/. Vigias vivem no mesmo pequeno arquivo SQLite embutido que guarda os compromissos, sem nada para você instalar ou administrar à parte. De um jeito ou de outro, não existe nenhum processo extra para manter no ar: o agendador inteiro é só um cronômetro rodando dentro do próprio processo, seja ele o pepe serve, um gateway, ou um pepe chat interativo, e para assim que essa superfície para. Rode só uma dessas por vez sobre a mesma configuração: duas rodando juntas disparariam ao mesmo tempo, e uma vigia acabaria avisando duas vezes.