Pular para o conteúdo principal
O ChatCLI foi projetado para ser uma ferramenta poderosa, mas o poder exige controle. No Modo Coder (/coder), a IA tem capacidade de ler, escrever, criar e executar comandos no seu sistema. Para garantir que voce esteja sempre no comando, implementamos um sistema de governanca inspirado no ClaudeCode.

Como Funciona?

Toda a vez que a IA sugere uma acao (como criar um arquivo ou rodar um script), o ChatCLI verifica as suas regras de seguranca locais antes de executar.

Os 3 Estados de Permissao

Allow (Permitido)

A acao e executada automaticamente, sem interrupcao. Ideal para comandos de leitura (read, tree, search) e Git read-only (git-status, git-diff, git-log, git-changed, git-branch).

Deny (Bloqueado)

A acao e bloqueada silenciosamente (ou com erro para a IA). Ideal para proteger arquivos sensiveis ou comandos destrutivos.

Ask (Perguntar)

O ChatCLI pausa e exibe um menu interativo para voce decidir. Este e o padrao para acoes nao configuradas.

Quando uma acao cai no estado “Ask”, voce vera uma caixa de seguranca com informacoes contextuais sobre a acao:
+========================================================+
|              SECURITY CHECK                             |
+========================================================+
 Acao:   Escrever arquivo
         arquivo: main.go
 Regra:  nenhuma regra para '@coder write'
 --------------------------------------------------------
 Escolha:
   [y] Sim, executar (uma vez)
   [a] Permitir sempre (@coder write)
   [n] Nao, pular
   [d] Bloquear sempre (@coder write)

 > _
O prompt exibe a acao em linguagem humana (ex.: “Escrever arquivo”, “Executar comando no shell”, “Modificar arquivo (patch)”) e os detalhes parseados dos argumentos JSON, em vez de mostrar JSON bruto.

Tipos de Acao Reconhecidos

SubcomandoLabel no PromptDetalhes Exibidos
execExecutar comando no shell$ <comando>, dir: <cwd>
testExecutar testes$ <comando>, dir: <cwd>
writeEscrever arquivoarquivo: <path>
patchModificar arquivo (patch)arquivo: <path>
readLer arquivoarquivo: <path>
searchPesquisar no codigotermo: <pattern>, dir: <path>
treeListar estrutura de diretoriosdir: <path>

Prompt com Contexto no Modo Paralelo

Quando a acao e solicitada por um worker do modo multi-agent, o prompt inclui informacoes adicionais sobre qual agent esta requisitando:
+========================================================+
|              SECURITY CHECK                             |
+========================================================+
 Agent:  shell
 Tarefa: Executar testes do modulo auth
 --------------------------------------------------------
 Acao:   Executar comando no shell
         $ go test ./pkg/auth/...
 Regra:  nenhuma regra para '@coder exec'
 --------------------------------------------------------
Isso permite que voce saiba exatamente qual agent esta solicitando a acao e por que, facilitando decisoes de seguranca informadas.

Opcoes

1

y (Yes)

Executa apenas desta vez. Na proxima, perguntara novamente.
2

a (Always)

Cria uma regra permanente de ALLOW para esse comando (ex: libera todas as escritas com @coder write).
3

n (No)

Pula a execucao. A IA recebe um erro informando que o usuario negou.
4

d (Deny)

Cria uma regra permanente de DENY. A acao sera bloqueada automaticamente no futuro.
Para comandos exec, as opcoes “Always” e “Deny Forever” nao sao disponibilizadas, pois cada execucao e unica e requer aprovacao individual.

Gerenciamento de Regras

As regras sao salvas localmente em ~/.chatcli/coder_policy.json. Voce pode editar esse arquivo manualmente se desejar, mas o menu interativo e a forma mais facil de configurar. O matching usa o subcomando efetivo do @coder mesmo quando args e JSON (ex.: {"cmd":"read"} vira @coder read).

Policy Local (Por Projeto)

Voce pode adicionar uma policy local no diretorio do projeto:
  • Local: ./coder_policy.json
  • Global: ~/.chatcli/coder_policy.json
Se merge: true, as regras locais mesclam com a global (local sobrescreve padroes iguais).
{
  "merge": true,
  "rules": [
    { "pattern": "@coder write", "action": "ask" },
    { "pattern": "@coder exec --cmd 'rm -rf'", "action": "deny" }
  ]
}

Exemplo de Politica (coder_policy.json)

{
  "rules": [
    {
      "pattern": "@coder read",
      "action": "allow"
    },
    {
      "pattern": "@coder git-status",
      "action": "allow"
    },
    {
      "pattern": "@coder write",
      "action": "ask"
    },
    {
      "action": "deny",
      "pattern": "@coder exec --cmd 'rm -rf'"
    }
  ]
}

Matching com Word Boundary

O sistema de policies usa matching com word boundary, garantindo que regras nao casem parcialmente com subcomandos diferentes:
RegraComandoResultado
@coder read = allow@coder read file.txtPermitido
@coder read = allow@coder readlink /tmpNao casa (vai para Ask)
@coder read --file /etc = deny@coder read --file /etc/passwdDeny (path-prefix match)
Isso significa que @coder read nunca vai liberar @coder readlink ou @coder readwrite acidentalmente.

Validacao de Comandos (50+ Padroes)

Alem da governanca de policies, o @coder exec valida cada comando contra 50+ padroes regex que detectam:

Destruicao de dados

rm -rf, dd if=, mkfs, drop database

Execucao remota

curl | bash, base64 | sh

Injecao de codigo

python -c, eval, $(curl ...)

Substituicao de processos

<(cmd), >(cmd)

Manipulacao de kernel

insmod, modprobe, rmmod

Evasao

${IFS;cmd}, VAR=x; bash
Voce pode adicionar padroes customizados via CHATCLI_AGENT_DENYLIST:
export CHATCLI_AGENT_DENYLIST="terraform destroy;kubectl delete namespace"
Para a lista completa de protecoes de seguranca do ChatCLI, veja a documentacao de Seguranca e Hardening.

Boas Praticas

1

Inicie com Cautela

Mantenha os comandos de escrita (write, patch, exec) como ask ate sentir confianca no agente.
2

Libere Leituras

Geralmente, e seguro dar “Always” para coder read, coder tree, coder search e Git read-only (git-status, git-diff, git-log).
3

Seja Especifico

O matching usa word boundary para prefixos de subcomando e path-prefix para argumentos. Voce pode liberar coder exec --cmd 'ls mas bloquear coder exec --cmd 'rm.
4

Exec Seguro

O @coder exec bloqueia padroes perigosos por padrao (50+ regras). Use --allow-unsafe apenas quando necessario.

Governanca no Modo Multi-Agent (Paralelo)

As policies de seguranca sao totalmente respeitadas pelos workers do modo multi-agent. Quando o /coder ou /agent opera em modo paralelo, cada worker verifica as regras do coder_policy.json antes de executar qualquer acao.

Comportamento

RegraAcao no Worker
allowAcao executada automaticamente pelo worker
denyAcao bloqueada; o worker recebe [BLOCKED BY POLICY] e continua seu fluxo
askO worker pausa, o spinner de progresso e suspenso, e o prompt de seguranca e exibido
Os prompts de seguranca de multiplos workers sao serializados — apenas um prompt por vez e exibido, evitando sobreposicao visual. Regras criadas durante a sessao (via “Always” ou “Deny”) sao imediatamente visiveis para todos os workers subsequentes.

UI do Modo Coder

Voce pode controlar o estilo e o banner do /coder via variaveis de ambiente:
VariavelValoresDescricao
CHATCLI_CODER_UIfull (padrao), minimalEstilo da interface
CHATCLI_CODER_BANNERtrue (padrao), falseMostra/oculta o cheat sheet
Essas configuracoes aparecem em /status e /config.