Pular para o conteúdo principal
O ChatCLI implementa um sistema de permissoes avancado que controla quais operacoes o agente pode executar automaticamente, quais requerem aprovacao e quais sao sempre bloqueadas. O sistema combina politicas de multiplas fontes, rastreia negacoes do usuario e mantem padroes de seguranca imunes a bypass.

Resolucao de Politicas Multi-Fonte

As politicas de permissao sao carregadas e mescladas de multiplas fontes, com prioridade definida:
PrioridadeFonteArquivoEscopo
1 (mais alta)CLI flagsArgumentos de linha de comandoSessao atual
2Projeto.chatcli/coder_policy.jsonWorkspace atual
3Usuario~/.chatcli/coder_policy.jsonGlobal do usuario
4 (mais baixa)DefaultsRegras embutidas no binarioTodos
Fontes de prioridade mais alta prevalecem sobre as mais baixas. Se uma regra do projeto diz allow para @coder exec, mas a regra do usuario diz deny, a regra do projeto prevalece.

Formato do Arquivo de Politica

{
  "rules": [
    {
      "pattern": "@coder exec *",
      "action": "ask"
    },
    {
      "pattern": "@coder read *",
      "action": "allow"
    },
    {
      "pattern": "@coder write *.go",
      "action": "allow"
    },
    {
      "pattern": "@coder exec rm *",
      "action": "deny"
    }
  ],
  "merge": true
}

Acoes Disponiveis

AcaoComportamento
allowExecucao automatica sem perguntar
denyBloqueio automatico sem perguntar
askSolicita aprovacao interativa do usuario

Rastreamento de Negacoes

O Denial Tracker monitora quando o usuario nega permissao para prevenir prompts infinitos:
Quando o usuario nega a mesma ferramenta 3 vezes consecutivas, ela e auto-bloqueada para o resto da sessao.
[1] @coder exec "npm install" → usuario nega
[2] @coder exec "npm install" → usuario nega
[3] @coder exec "npm install" → usuario nega
→ @coder exec auto-bloqueado para esta sessao
O contador consecutivo e resetado quando o usuario aprova uma execucao da ferramenta.

Configuracao do Denial Tracker

Variavel de AmbienteDescricaoDefault
CHATCLI_MAX_CONSECUTIVE_DENIALSNegacoes consecutivas antes de bloquear a tool3
CHATCLI_MAX_TOTAL_DENIALSNegacoes totais antes de escalar sessao20

Imunidade de Seguranca (Safety Bypass)

Existem 40+ padroes de operacao que SEMPRE requerem aprovacao do usuario, independentemente de qualquer regra allow na politica. Esses padroes protegem contra erros catastroficos:
  • rm -rf / rm -fr e variantes
  • mkfs (formatar filesystem)
  • dd escrevendo em devices (of=/dev/)
  • shred (exclusao segura)
  • Escrita em /etc/, /boot/, /sys/, /proc/
  • Redirecionamento de output para /etc/
  • sudo qualquer comando
  • su - (troca de usuario)
  • chmod 777 (world-writable)
  • chmod +s (setuid/setgid)
  • chown root
  • insmod, rmmod, modprobe (modulos de kernel)
  • sysctl -w (escrita em sysctl)
  • iptables -F (flush de firewall)
  • systemctl stop/disable/mask
  • /dev/tcp/ (reverse shell bash)
  • nc -l / ncat -l (netcat em modo listen)
  • .ssh/ (chaves SSH)
  • .gnupg/ (chaves GPG)
  • .aws/credentials
  • .kube/config
  • DROP DATABASE/TABLE/SCHEMA
  • TRUNCATE TABLE
  • DELETE FROM ... WHERE 1=1
  • git push --force / git push -f
  • git reset --hard
  • git clean -f
  • kill -9, killall, pkill -9
  • shutdown, reboot, poweroff, halt
Esses padroes sao imunes a bypass: mesmo que @coder exec * esteja configurado como allow, comandos que matcham esses padroes sempre pedem confirmacao.

Allowlist de Comandos Read-Only

O ChatCLI mantem uma allowlist de 90+ comandos que sao automaticamente aprovados por serem somente leitura:
ls, ll, cat, head, tail, less, more, wc, file, stat, du, df, find (sem -delete/-exec), tree, realpath, readlink, basename, dirname, md5sum, sha256sum

Protecoes Adicionais

Mesmo para comandos da allowlist, certas flags e padroes sao nao auto-aprovados:
ComandoFlags Nao Seguras
tail-f (follow = long-running)
find-delete, -exec, -execdir
sed-i, --in-place
sort-o (escrita em arquivo)
git config--global, --system
Alem disso, comandos com pipe para destinos perigosos (| rm, | sudo, | xargs, | sh) ou redirecionamento de output (>, >>) nunca sao auto-aprovados.

Fluxo de Decisao

Tool call recebida

  ├─ 1. Safety Bypass Check
  │   └─ Match em padrao imune? → SEMPRE ASK (ignora tudo abaixo)

  ├─ 2. Denial Tracker Check
  │   ├─ Sessao escalada? → ASK
  │   └─ Tool bloqueada? → DENY

  ├─ 3. Policy Resolution (CLI > Projeto > Usuario > Default)
  │   ├─ allow → proximo check
  │   ├─ deny → DENY
  │   └─ ask → ASK

  ├─ 4. Read-Only Allowlist
  │   └─ Comando na allowlist sem flags perigosas? → ALLOW

  └─ 5. Default → ASK

Proximos Passos

Seguranca do Coder

Detalhes sobre a seguranca do modo coder.

Sistema de Hooks

Hooks PreToolUse para guardrails adicionais.

Seguranca

Modelo geral de seguranca do ChatCLI.

Plugin @coder

Referencia das ferramentas protegidas pelo sistema de permissoes.