CLI AI

SAFE, CAUTION, DANGER: como o CliAI classifica o que vai rodar

2026-03-09

Todo comando que o CliAI devolve recebe um dos três selos antes de chegar na sua shell. Entender os selos é a diferença entre usar com cautela e usar com confiança. Este post é sobre o sistema, o que ele captura e — honestamente — o que escapa.

Três níveis

SAFE. Só leitura ou quase. ls, pwd, cat, grep, find -printf. Aperta Enter, sem atrito extra.

CAUTION. Muda o estado de forma limitada. rm de arquivos específicos, mv, chmod de um único arquivo, kill -9 de PID conhecido, git reset --hard em branch não-compartilhada. Selo amarelo, pausa para confirmação.

DANGER. Muda de forma ampla ou irreversível: rm -rf cruzando raízes conhecidas, dd em block device, chmod -R de /, git push --force em main, qualquer coisa que toque * no nível raiz. Selo vermelho, exige yes literal — o atalho Enter é desabilitado.

clai
┌─ Task ───────────────────────────────────────────────┐│ apaga meu home inteiro                               │├─ Command ────────────────────────────────────────────┤│ rm -rf -- ~/                                         │├─ Safety: DANGER ─────────────────────────────────────┤│ Remoção recursiva cruzando raiz $HOME.               ││ Digite "yes" para confirmar.                         │└──────────────────────────────────────────────────────┘

Como a classificação acontece

Por regex, no servidor, depois de o LLM produzir o candidato. Os padrões não são segredo — são uma lista curada de formas estruturais que historicamente causaram dano:

  • remoção recursiva cruzando raízes conhecidas (/, $HOME, /etc, /var, /usr);
  • escrita crua em block devices (dd of=/dev/sd*);
  • operações git destrutivas com force em branches protegidas;
  • pipes encadeados com cauda destrutiva (tar | … && rm -rf …).

Se bate com o conjunto DANGER, vira DANGER. Se muda estado sem cruzar limiares, CAUTION. O resto, SAFE.

O que captura e te pega de surpresa

Um comando que parece tranquilo na primeira leitura pode ser DANGER quando você lê o pipeline todo. O classificador olha a linha inteira, não só o primeiro estágio:

clai
┌─ Task ───────────────────────────────────────────────┐│ arquiva, sobe, e limpa atrás                         │├─ Command ────────────────────────────────────────────┤│ tar -czf - . | aws s3 cp - s3://b/k && rm -rf -- .   │├─ Safety: DANGER ─────────────────────────────────────┤│ Remoção recursiva final de $PWD.                     │└──────────────────────────────────────────────────────┘

O que escapa — honestamente

  • Expansões de glob exóticas que resolvem para alvos perigosos em runtime (rm -rf $UNSET_VAR/*) — o texto estático nem sempre revela o estrago.
  • Scripts próprios. Se o comando é ./deploy.sh, o classificador não vê o conteúdo.
  • Destruição indireta — dd if=/dev/zero of=/path/to/important/file raramente é pego, porque não é estatisticamente um "padrão perigoso".

O selo é dica, não garantia. Inspect-then-run continua sendo o mecanismo real de segurança. Você lê o comando, você aperta Enter.

Veja também