MÓDULO 3.4

⏰ Crons: agendamento e flags

Crons transformam o Hermes de reativo em proativo. Sessão fresh por execução, file lock contra double-run, flags --workdir, --no-agent, --deliver, --skill.

6
Tópicos
35
Minutos
Médio
Nível
Prática
Tipo
1

🚀 Reativo → proativo: sessão fresh por execução

Cron é o que transforma o Hermes em assistente proativo. Sem cron, ele só responde quando você fala. Com cron, ele dispara em horários definidos, abre sessão fresh de AIAgent, executa o prompt e entrega o resultado.

⚙️Como cada tick funciona

  1. Carrega jobs de ~/.hermes/cron/jobs.json
  2. Verifica next_run_at vs horário atual
  3. Inicia sessão fresh de AIAgent pra cada job vencido
  4. Injeta skills anexadas (--skill)
  5. Executa o prompt até conclusão
  6. Entrega a resposta final no destino (--deliver)
  7. Atualiza metadados e próximo horário agendado

⚠️Sessão fresh = prompt auto-contido

A sessão é nova a cada disparo. Não há histórico de conversa anterior. SOUL.md, USER.md e MEMORY.md ficam carregados, mas qualquer contexto além disso precisa estar no prompt do cron. "Continua o que estava fazendo" não funciona — não tem o que continuar.

🔒File lock previne double-run

O scheduler escreve em ~/.hermes/cron/.tick.lock a cada tick. Se um tick demora mais que o intervalo, o próximo NÃO dispara em paralelo — espera. Isso evita rodar a mesma tarefa duas vezes ao mesmo tempo (clássico em integração).

2

💬 Sintaxe natural via chat

O caminho mais rápido pra criar cron é direto pelo chat (Telegram, Discord, terminal). Comando /cron add aceita expressões em linguagem natural.

📝 Exemplos prontos

/cron add 30m "Remind me to check the build"
/cron add "every 2h" "Check server status"
/cron add "every 1h" "Summarize new feed items" --skill blogwatcher
/cron add "every 1h" "Use both skills" --skill blogwatcher --skill maps
/cron add "every 1d at 09:00" "Resumo do dia + agenda"

Durações relativas

  • 30m, 2h, 1d → daqui a X tempo
  • Útil pra lembretes pontuais

Recorrência natural

  • "every 2h" → recorrência
  • "every 1d at 09:00" → diário com horário
  • Útil pra rotinas

💡Comandos úteis

  • /cron list — vê crons ativos
  • /cron remove <id> — remove cron
  • /cron pause <id> / /cron resume <id>
3

🖥️ CLI standalone: hermes cron create

Mesma capacidade via terminal. Útil pra scripts de provisionamento (infra-as-code) que recriam todos os crons numa máquina nova de uma vez.

📝 Exemplo CLI

hermes cron create "every 1d at 09:00" \
  "Audit open PRs, summarize CI health, and post to #eng" \
  --workdir /home/me/projects/acme

📦setup-crons.sh versionado

Crie um script setup-crons.sh no seu repo de infra. Cada cron vira uma linha. Migrar pra novo VPS = rodar o script. Reproduzível, auditável, sem clique.

#!/usr/bin/env bash
hermes cron create "every 1d at 09:00" "Resumo diário" --deliver telegram
hermes cron create "every 6h" "Backup S3" --workdir ~/projetos/site
hermes cron create "every 5m" --no-agent --script ./watchdog.sh \
  --deliver telegram --name "memory-watchdog"

📁Onde fica

Definições persistem em ~/.hermes/cron/jobs.json. Você pode versionar esse arquivo também — backup natural sem precisar refazer setup. Subcomandos: hermes cron list, hermes cron remove <id>.

4

📂 Flag --workdir <path>

Define o diretório de trabalho da sessão fresh. O scheduler faz cd pra lá antes de rodar e detecta os arquivos de contexto do projeto. Equivalente cron tradicional: WORKDIR.

📚Ordem de prioridade do contexto de projeto

  1. .hermes.md ou HERMES.md (sobe até git root)
  2. AGENTS.md (walk recursivo de subdiretórios)
  3. CLAUDE.md (CWD apenas)
  4. .cursorrules (CWD apenas)

Apenas UM tipo é carregado por sessão. SOUL.md sempre é carregado independentemente.

⚠️Sem --workdir, ele roda em ~

Cron pra projeto específico precisa do contexto desse projeto. Sem --workdir, o scheduler roda em ~ (home) e não acha .hermes.md/AGENTS.md/CLAUDE.md do projeto. Resultado: agente perdido, sem convenções de código nem instruções específicas.

📝Exemplo prático

hermes cron create "every 1d at 18:00" \
  "Audit changed files today, propose changelog entry" \
  --workdir /home/me/projetos/api-clientes \
  --deliver telegram

A sessão lê o AGENTS.md do projeto e segue as convenções específicas (formato de changelog, branch policy etc.).

5

🔇 Flag --no-agent (NOAGENT mode)

Modo que pula o LLM completamente. O cron roda só um script .sh/.bash/.py. Saída vazia = silêncio. Saída não-zero = alerta entregue. Ideal pra watchdogs que não precisam de raciocínio.

📝 Watchdog de memória

hermes cron create "every 5m" \
  --no-agent \
  --script memory-watchdog.sh \
  --deliver telegram \
  --name "memory-watchdog"

stdout vazio

Tick silencioso, sem entrega. Ambiente está OK.

stdout não vazio

Conteúdo é entregue como alerta no destino configurado.

exit não-zero

Mesma coisa: alerta de erro vai pro destino. Bom pra detectar falha do próprio script.

⚙️Como o script é executado

  • • Scripts .sh / .bash rodam sob /bin/bash
  • • Outros (Python etc.) rodam no Python interpreter do Hermes
  • • Funciona com qualquer linguagem que produza stdout/exit code padrão

💰Por que NOAGENT

Watchdog de memória/disco roda a cada 5min. Se passasse pelo LLM, gastaria token sem necessidade. NOAGENT mantém custo zero pra esse tipo de tarefa enquanto preserva entrega na plataforma de mensagem.

6

📡 Flags --deliver e --skill

Duas flags que completam o quadro: --deliver <plataforma> escolhe destino. --skill <name> injeta skill no início da sessão fresh, garantindo que o procedimento esteja disponível mesmo sem histórico.

--deliver <plataforma>

  • telegram — manda no chat principal Telegram
  • discord — canal Discord configurado
  • all — todas as plataformas ativas
  • origin — onde o cron foi criado

--skill <name>

  • Carrega skill no início da sessão fresh
  • Pode passar múltiplas: --skill A --skill B
  • Garante procedimento disponível sem depender da descoberta automática

📝 Exemplo combinando tudo

hermes cron create "every 1h" \
  "Summarize new feed items and post the digest" \
  --workdir /home/me/projetos/blog \
  --skill blogwatcher \
  --skill maps \
  --deliver telegram

🎯Resumo das flags

FlagEquivalente cronFunção
--workdir <path>WORKDIRDiretório de trabalho + contexto de projeto
--no-agentNOAGENTScript-only, pula LLM
--deliver <plat>CONTEXTFROMPlataforma de entrega
--skill <name>skill injectionInjeta skill na sessão fresh

🎯Resumo do módulo

Cron transforma reativo em proativo — sessão fresh por execução, file lock previne double-run.
Sintaxe natural via chat/cron add 30m "...", /cron add "every 2h" "...".
CLI standalone permite versionar setuphermes cron create em scripts reproduzíveis.
--workdir carrega AGENTS.md/CLAUDE.md do projeto — sem ele, agente roda perdido em ~.
--no-agent pula LLM — watchdogs custo zero, stdout vazio = silêncio.
--deliver e --skill completam o controle — telegram/discord/all/origin + skills injetadas.

Próximo módulo:

3.5 - 🔄 Loop de Auto-Aperfeiçoamento