Vigias

Diga ao Pepe para ficar de olho em algo e te avisar no momento em que acontecer. Ele checa sozinho, sobrevive a reinícios e avisa exatamente uma vez.

Vigias

Uma vigia responde a uma pergunta diferente: não “faça isso pelo relógio”, mas “fique de olho em algo e me avise no momento em que acontecer”. Uma vigia recheca uma condição em um cronômetro e te notifica uma vez quando ela se torna verdadeira, e então para. Ela é durável: sobrevive a um reinício e ao fechamento da sessão que a criou, e sempre responde no canal em que foi criada.

Gatilhos por sonda e por agente

A parte barata de uma vigia é o gatilho, que roda a cada intervalo. Só quando o gatilho dispara é que a notificação (possivelmente cara) roda, uma vez. Há dois tipos de gatilho:

Como checagens de agente custam tokens, o intervalo mínimo delas é maior: 300 segundos para gatilhos de agente, 30 segundos para sondas. O intervalo padrão é de 120 segundos.

O que ela envia quando dispara

Quando o gatilho enfim passa, uma vigia entrega uma mensagem. Essa mensagem é ou um texto fixo (que você define de antemão, sem chamada ao modelo), ou é composta pelo agente na hora do disparo (uma chamada ao modelo, uma vez), para que possa incluir detalhe fresco, como um resumo do que de fato aconteceu.

A combinação que vale a pena conhecer é uma sonda gratuita controlando uma mensagem composta pelo agente. A sondagem com curl não custa nada, e o modelo só é chamado para escrever o resumo no momento em que a condição passa.

Criar uma vigia pela CLI

A CLI cria vigias por sonda. Vigias julgadas por agente são criadas pela conversa, onde o modelo já está no loop.

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:

pepe watch list                 # all watches, with state and check count
pepe watch pause api-up
pepe watch resume api-up
pepe watch cancel api-up

Faça pelo painel

Abra a página Watches sob pepe serve para ver cada vigia com o estado, o gatilho, o intervalo e quantas checagens ela já usou do orçamento dela. Dali você pode pausar, retomar e cancelar uma vigia. Vigias novas são criadas pela CLI ou pela conversa, onde o gatilho e o destino de entrega são configurados.

Faça pela conversa

Peça em linguagem natural e o agente cria a vigia pela ferramenta watch dele. Assim como schedule_task, a ferramenta watch já vem habilitada por padrão (remova-a das ferramentas do agente se ele nunca dever criar uma) e ainda passa pelo mesmo pedido de permissão a cada criação.

Me avise quando o deploy terminar. Cheque a cada poucos minutos.

Para uma checagem scriptável o agente configura uma sonda. Para algo que precisa de julgamento ele configura um gatilho de agente, formulando uma pergunta de sim/não que responde a cada intervalo. Ele também pode escolher compor a mensagem de disparo com o modelo em vez de usar um texto fixo, para que a notificação carregue um resumo real em vez de uma linha enlatada. As ações da ferramenta watch são create, list, pause, resume e cancel.

Para manter as coisas limitadas, pode haver no máximo 50 vigias ativas ao mesmo tempo, e o Pepe recusa uma vigia nova cuja condição seja idêntica a uma já em execução, então você não empilha duplicatas sem querer. Uma vigia também tem um número máximo de checagens; se a condição nunca se tornar verdadeira dentro desse orçamento, a vigia expira em silêncio em vez de sondar para sempre.

Entrega no canal de origem

Uma vigia registra a origem, o canal e a conversa em que foi criada, no momento da criação. Quando dispara, ela entrega de volta ali, mesmo após um reinício, seja um chat do Telegram (um envio direto), uma sessão de terminal ou WebSocket conectada, ou o log da aplicação. No WebSocket a notificação chega como um evento "watch" no canal; passe um session estável ao entrar e você a recebe mesmo depois de reconectar, em vez de só no socket que por acaso criou a vigia. No pepe chat ela é impressa direto no console. Se a vigia foi criada pela API HTTP sem estado (que não tem conversa para responder), ela recorre ao log.

Duas garantias tornam isso confiável:

Uma vigia passa por um pequeno conjunto de estados ao longo da vida: pending (ainda vigiando), paused, done (disparada e entregue), expired (esgotou o orçamento de checagens) ou cancelled.

Sem banco de dados para instalar, sem crontab. As tarefas agendadas continuam sendo registros simples no ~/.pepe/config.json (sob "crons"), com um arquivo JSONL de histórico de execuções por tarefa sob <PEPE_HOME>/data/cron_logs/. As vigias vivem no mesmo pequeno arquivo SQLite embutido dos compromissos, não é algo que você precise instalar ou administrar. De qualquer forma, não há mais nada para manter rodando: todo o agendador é um cronômetro dentro do processo, que roda em qualquer superfície de vida longa que estiver de pé: pepe serve, um gateway ou um pepe chat interativo, e para quando você para a superfície. Rode só uma delas por vez sobre a mesma configuração: duas iriam disparar as duas, e uma vigia avisaria duas vezes.