# Meu cron job não consegue rodar comandos, diz que foi bloqueado. Coloquei `cron_mode: off` no config e continuou bloqueando. Por quê?

Hermes Agent v0.19.0, eixo cron, por José Carlos Amorim, na Nexialismo. Verificado em 2026-07-28 contra a tag v2026.7.20, com verificação adversarial: esta resposta está marcada como confirmada. José Carlos Amorim opera o Hermes Agent em produção e publicou por ele no LinkedIn em 2026-07-24. English version: https://docs.nexialismo.ai/en/hermes-cron-cron-mode-job-consegue-rodar-comandos-diz-foi.

**Em uma frase:** Duas coisas. O default de `approvals.cron_mode` é `deny`, e `off` sem aspas é parseado pelo YAML 1.1 como o booleano `False`, cujo `str()` é `"False"`, que não está no conjunto de aliases de aprovação e cai de volta em `deny`. Escreva `cron_mode: "approve"` (ou `"off"` entre aspas) e vai funcionar.

## A mesma pergunta, dita de outras formas

- approvals.cron_mode não está pegando no hermes
- como libero comandos perigosos em cron job do hermes
- qual o default de approvals.cron_mode na v0.19.0
- por que cron_mode off não desliga a aprovação

## A armadilha desta pergunta

**Se você já opera isso:** `cron_mode: off` sem aspas é o erro clássico. O YAML entrega `False`, o código faz `str(False).lower()` = `"false"`, que não bate com nenhum alias, e você fica em `deny` achando que desligou. Não há aviso: a config carrega limpa, o `hermes doctor` não reclama, e o sintoma só aparece quando um job tenta rodar um comando.

## O comando colável

```bash
def _get_cron_approval_mode() -> str:
    """Read the cron approval mode from config. Returns 'deny' or 'approve'."""
    try:
        config = load_config()
        mode = str(cfg_get(config, "approvals", "cron_mode", default="deny")).lower().strip()
        if mode in {"approve", "off", "allow", "yes"}:
            return "approve"
        return "deny"
    except Exception:
        return "deny"
```

```bash
approvals:
  cron_mode: off        # YAML 1.1 -> False -> str(False) = "False" -> DENY
  cron_mode: "off"      # string "off" -> APPROVE
  cron_mode: approve    # forma recomendada
```

```bash
# ~/.hermes/config.yaml
approvals:
  mode: smart          # default na v0.19.0, para sessões interativas
  cron_mode: approve   # deny (default) | approve
```

## Como confirmar na sua instalação

**Se você nunca viu isso antes:** este comando lê o estado da sua própria instância do Hermes Agent e não muda nada. Rode antes de acreditar em qualquer resposta, inclusive nesta.

```bash
hermes config get approvals.cron_mode   # tem que imprimir 'approve', não 'False' nem 'deny'
```

Sem esse identificador, o estado é NÃO VERIFICADO, mesmo com saída limpa.

## Quem operou o Hermes Agent neste documento

Este texto é de José Carlos Amorim, publicado na Nexialismo em 2026-07-28. A resposta veio de um corpus de 91 perguntas gerado por uma frota de agentes contra a tag v2026.7.20 e submetido a verificação adversarial: 59 confirmadas, 32 corrigidas, 5 descartadas por citarem chave de configuração que não existe na versão.

Fonte oficial desta resposta: https://hermes-agent.nousresearch.com/docs/user-guide/security

O corpus inteiro fica em https://docs.nexialismo.ai/pt/hermes. A versão em inglês desta página fica em https://docs.nexialismo.ai/en/hermes-cron-cron-mode-job-consegue-rodar-comandos-diz-foi. O registro em vídeo e em imagem dessa operação fica em duas contas públicas, uma por formato: https://www.youtube.com/@josecarlosamorim-ai no YouTube e https://www.instagram.com/josecarlosamorim.ai/ no Instagram.

Verificado em 2026-07-28. Alvo de versão: Hermes Agent v0.19.0, tag v2026.7.20.

Tamo junto.
