⚡ AutomationsAI|Portal de Cursos →

Verificando acesso...

MÓDULO 4.2

💾 Backup, segurança e monitoramento

Memória é o ativo mais caro do agente — e o mais fácil de perder. API keys vazadas são incidente recorrente e caro. Sem monitor, a fatura te avisa do problema. Este módulo cobre backup automatizado, recuperação testada, gestão de segredos, isolamento por container e o playbook para quando algo dá ruim de verdade.

6
Tópicos
~45
Minutos
Médio
Nível
Ops
Tipo
1

💾 Backup de memória — DB SQLite + skills

A pasta ~/.hermes/ guarda tudo: memory.db (SQLite), skills/, profiles/, config.yaml e snapshots/. Backup correto é um tarball cifrado com snapshot consistente do SQLite — não use cp direto enquanto o agente está rodando.

# 1. Snapshot consistente do banco (não trava escritas)
$ sqlite3 ~/.hermes/memory.db "VACUUM INTO '/tmp/memory-snap.db'"

# 2. Empacotar tudo (substitui memory.db pela cópia consistente)
$ DEST=~/backups/hermes-backup-$(date +%Y%m%d).tgz
$ tar --exclude='./logs' --exclude='./snapshots' \
      --transform="s|memory.db|memory.db.live|" \
      -czf "$DEST" -C ~/.hermes . \
      -C /tmp memory-snap.db

# 3. Cifrar com age (chave pública do destinatário)
$ age -r age1ql3z7hjy54... -o "$DEST.age" "$DEST"
$ shred -u "$DEST"   # remove o tarball claro

# 4. Enviar para storage externo
$ rclone copy "$DEST.age" remote:hermes-backups/

💡 Dica — backup automático via cron

Coloque em crontab -e:

# Backup diário 03:00, mantém 14 dias
0 3 * * * /usr/local/bin/hermes-backup.sh >> ~/.hermes/logs/backup.log 2>&1

No macOS use launchd. No Windows, Task Scheduler. Para servidor, prefira systemd timer com OnCalendar=daily.

2

🔄 Recuperação — Restaurar em outra máquina

Backup não testado = backup que não existe. Restaure pelo menos uma vez por trimestre em máquina limpa e rode hermes doctor. Abaixo, o caminho completo de restore num host novo (laptop quebrou, migrou pro servidor, está montando um par dev/prod).

1

Instalar a mesma versão

pipx install hermes-agent==0.9.7

Skills do backup podem depender de APIs específicas da versão. Sempre alinhe a versão antes do restore.

2

Decifrar e extrair

age -d -i ~/.age/key.txt backup.tgz.age | tar -xz -C ~/.hermes

Restaure dentro de ~/.hermes/ recém-criado, com permissões 700 (chmod 700 ~/.hermes).

3

Reconfigurar segredos

API keys NÃO devem vir no backup. Refaça via pass / 1Password / Vault.

Esse é o motivo de separar segredos do diretório de dados: backup pode viajar; segredos não.

4

Sanity check

hermes doctor && hermes memory stats && hermes skills list

Confira que # de conversas, skills e perfis batem com a origem. Se bater, restore validado.

3

🔐 Gestão de API keys — Rotação e secrets manager

Chaves em .env versionado por engano é o incidente mais comum de IA generativa em 2025-2026. Tire keys do disco em claro. Use um gerenciador de segredos e injete em runtime.

✓ O que FAZER

  • Rotar keys a cada 90 dias (calendário recorrente).
  • Usar pass, op (1Password CLI), Vault ou AWS Secrets Manager.
  • Keys com escopo mínimo (uma key por projeto).
  • Rodar gitleaks detect em pre-commit.
  • Logar somente os últimos 4 caracteres da key.

✗ O que NÃO fazer

  • Commitar .env (mesmo em repo privado).
  • Compartilhar a key no Slack/Discord.
  • Usar a mesma key em dev, staging e prod.
  • Postar saída de env em screenshot.
  • Reutilizar a key depois de "achar que vazou".
# Com pass (password-store)
$ pass insert hermes/openrouter
$ export OPENROUTER_API_KEY="$(pass hermes/openrouter)"
$ hermes chat

# Com 1Password CLI
$ op signin
$ op run --env-file=.env.template -- hermes chat
# .env.template usa: OPENROUTER_API_KEY=op://Personal/openrouter/credential

# Wrapper reusável
$ cat > ~/bin/hermes-secure <<'EOF'
#!/usr/bin/env bash
export OPENROUTER_API_KEY="$(pass hermes/openrouter)"
export ANTHROPIC_API_KEY="$(pass hermes/anthropic)"
exec hermes "$@"
EOF
$ chmod +x ~/bin/hermes-secure

⚠️ Atenção — key vazada é incidente

Se a key foi commitada, postada ou apareceu em log público, o relógio começou. Revogue antes de qualquer outra coisa: OpenRouter → Settings → Keys → Revoke. Anthropic → Console → API Keys → Revoke. Não tente "limpar o histórico do git" sem antes revogar — atacantes monitoram pushes em real time.

4

🛡️ Isolamento — sandbox e containers

Agente com acesso a shell + arquivos + internet é uma arma poderosa e uma superfície de ataque enorme. Prompt injection via documento/site pode tentar roubar arquivos ou exfiltrar dados. Isolamento contém o estrago.

🛡️ Camadas de isolamento (do mais leve ao mais forte)

  • Workdir restrito: tools só leem/escrevem dentro de ~/work/hermes/.
  • firejail / bubblewrap: sandbox no nível do processo (Linux).
  • Container Docker/Podman: filesystem, rede e usuário isolados.
  • VM efêmera: microVM (Firecracker) ou Lima — máxima contenção.
  • Allowlist de domínios: network namespace + proxy só libera APIs conhecidas.
# Docker isolado, sem rede além das APIs necessárias
$ docker run --rm -it \
    --name hermes-sbx \
    -v ~/.hermes:/root/.hermes \
    -v $(pwd):/work:ro \
    --workdir /work \
    --cap-drop ALL \
    --security-opt no-new-privileges \
    --read-only --tmpfs /tmp \
    --env-file <(pass hermes/env) \
    ghcr.io/nousresearch/hermes-agent:0.9.7 hermes chat

# firejail (rápido, Linux desktop)
$ firejail --net=none --whitelist=~/.hermes --whitelist=~/work \
           --read-only=/etc --caps.drop=all hermes chat
5

📊 Monitoramento — Métricas, alertas, custos

Você só gerencia o que mede. Hermes expõe métricas via /metrics (Prometheus) quando rodando em modo serviço, e o comando hermes stats dá um snapshot pontual. Combine com alertas de custo no painel do provedor.

📊 Checklist mínimo de monitoramento

  • Custo OpenRouter / Anthropic mensal — alerta em 70% do budget.
  • # de skills instaladas — anomalia se aumentar sozinho.
  • # de sessões / dia — baseline ajuda a detectar abuso.
  • Latência p95 — alerta se subir > 2× a média móvel de 7 dias.
  • Taxa de erro por tool — alerta se > 5% em janela de 15 min.
  • Tokens/sessão p99 — picos podem indicar loop ou prompt injection.
  • Tamanho do memory.db — cresce muito rápido = compactar.
# Exemplo de regra Prometheus (alertmanager)
groups:
- name: hermes
  rules:
  - alert: HermesHighErrorRate
    expr: rate(hermes_tool_errors_total[15m]) / rate(hermes_tool_calls_total[15m]) > 0.05
    for: 10m
    annotations:
      summary: "Taxa de erro de tools > 5% por 10 minutos"

  - alert: HermesDailyCostBudget
    expr: sum(increase(hermes_provider_cost_usd[24h])) > 25
    annotations:
      summary: "Custo diário ultrapassou US$ 25"

💡 Dica — alertas leves via ntfy

Para projetos pessoais sem Grafana/PagerDuty, um script cron que dispara push pro ntfy.sh quando o custo diário passa de US$ 5 já evita a fatura-surpresa. curl -d "Hermes US$ 7 hoje" ntfy.sh/seu-topico.

6

🚨 Incident response — Quando dá ruim

Em incidente, decisão lenta custa. Playbook escrito vira piloto automático. Os quatro cenários mais comuns no Hermes: key vazada, fatura disparada, loop infinito, memória corrompida.

🔥

Key vazada (commit, post, screenshot)

Contenção em < 5 minutos

1. Revogar a key no painel do provedor. 2. Emitir nova key, guardar em secret manager. 3. Buscar uso anômalo nas últimas 24h. 4. Só depois, rebase do git ou remoção do post.

💸

Fatura disparada (10× do baseline)

Conter primeiro, investigar depois

1. Pausar / revogar a key. 2. Rodar hermes stats --since=24h e jq nos logs por correlation_id mais caro. 3. Identificar se foi loop, abuse, ou skill nova. 4. Aplicar limite (rate-limit) e voltar.

♾️

Loop infinito de tools

Sintoma: agente chama a mesma tool sem parar

1. Ctrl-C ou hermes kill <sess_id>. 2. Ativar HERMES_DEBUG=1 e reproduzir. 3. Setar max_tool_iterations: 8 em config.yaml. 4. Pedir issue no repo se for bug do core.

🗃️

Memória corrompida (DB lock, integrity check falhou)

Sintoma: database disk image is malformed

1. hermes stop. 2. Tentar sqlite3 memory.db ".recover" | sqlite3 memory-recovered.db. 3. Se falhar, restaurar do último backup. 4. Rodar hermes doctor antes de voltar a usar.

💡 Dica — post-mortem blame-free

Depois de cada incidente acima de 30 minutos, escreva 1 página: o que aconteceu, impacto, linha do tempo, causa raiz, ações de prevenção. Sem nomes, sem culpados. Vire pasta no repo (docs/postmortems/) e revisite trimestralmente.

Resumo do Módulo

Backup com VACUUM INTO + age + rclone — automatize com cron diário e teste o restore.
Backup não testado = backup que não existe. Restore trimestral é regra.
Keys em secret manager (pass, 1Password, Vault) e rotação ≤ 90 dias.
Isolamento por container/firejail contém estrago de prompt injection.
Monitoramento mínimo: custo diário, erro por tool, latência p95, tamanho do DB.
Playbook de incidente revogar primeiro, investigar depois. Post-mortem blame-free.

Próximo módulo:

4.3 — 💰 Custo, billing e otimização. Dashboard OpenRouter, alertas de budget, escolha de modelo por tarefa, prompt caching e fallback dinâmico. Redução típica de 60-80% no gasto mensal.