Claude Code pedindo permissão a cada comando: como reduzir os prompts sem perder o controle

As permissões do Claude Code não são um botão de liga e desliga, são camadas. Você tem os modos (plan, acceptEdits, auto e bypassPermissions), as regras allow, ask e deny avaliadas nessa ordem com a primeira correspondência decidindo, e um Bash em sandbox que empurra o limite pro sistema operacional (no uso interno da Anthropic isso derrubou 84% dos pedidos de permissão). A ordem que funciona é escrever o deny dos arquivos sensíveis primeiro, escolher o modo depois e liberar allow específico por último, sempre nomeando o comando em vez de liberar o runner solto
Fala aí, beleza? Você pede uma coisa simples, sai pra pegar café, volta e o Claude tá parado esperando você apertar "sim" pra rodar um npm test
Aí você aperta, ele anda três passos e para de novo
O reflexo é liberar tudo e nunca mais pensar no assunto. Só que aí você trocou a interrupção por outro problema: um agente com acesso total à sua máquina, sem ninguém olhando
O caminho do meio existe e é bem menos glamouroso do que "prompt mágico": é decidir POR CAMADA o que vale aprovar sozinho
O Claude Code te dá três alavancas pra isso: os modos de permissão, as regras allow, ask e deny, e um Bash em sandbox que joga o limite pro sistema operacional. Cada projeto pede uma combinação diferente, e é isso que a gente vai montar aqui
Modos de permissão do Claude Code: o que cada um libera
Antes de escrever regra nenhuma, entenda o que cada modo faz. É a decisão mais grossa e a que mais muda seu dia
| Modo | O que aprova sozinho | O que continua pedindo | Risco | Quando faz sentido |
|---|---|---|---|---|
plan |
Nada de escrita: lê arquivos e roda comandos de shell pra explorar, e escreve um plano | Nada de edição no código fonte: ele não edita, só propõe o plano | Baixo | Entender código alheio, revisar, planejar antes de tocar |
acceptEdits |
Operações de arquivo | Comandos Bash que não são operações de sistema de arquivos seguem passando pelas permissões normais | Médio: a revisão fica pra depois | Quem prefere revisar no editor ou no git diff |
auto |
Ações somente leitura e edições de arquivo no diretório de trabalho, que pulam o classificador | Comandos de shell e operações de rede vão pro classificador, e escritas em caminhos protegidos também | Médio: o classificador revisa shell e rede no seu lugar | Dia a dia em projeto seu, com deny bem escrito |
bypassPermissions |
Tudo: acesso autônomo total ao sistema, sem nenhum aviso de aprovação | Nada | Alto | Só em ambiente isolado, tipo container ou VM, onde ele não pode causar dano |
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 45min
Detalhe importante do modo auto: desde 14 de agosto ele é o modo de permissão padrão em novas sessões nos planos Pro, Max e Team
Se você já tinha definido um modo padrão seu, ele continua valendo, a não ser que você aceite o aviso único de troca. E padrão gerenciado pela organização não muda sozinho
O classificador não é um "sim pra tudo" com nome bonito: ele bloqueia ações que escapam do escopo do seu pedido, que miram infraestrutura não reconhecida ou que parecem dirigidas por conteúdo hostil que o Claude leu no caminho
Antes de mexer nas permissões: onde as regras moram e quem ganha de quem
Aqui é a parte que a galera pula e depois jura que "a regra não funciona"
Formato da regra. Uma regra de permissão é Tool ou Tool(especificador). Só isso. Bash(npm test), Read(./.env), WebFetch(domain:example.*)
Ordem de avaliação. As regras são avaliadas em deny, depois ask, depois allow, e a PRIMEIRA correspondência decide, independente de qual regra é mais específica
Repete isso pra você mesmo, porque é contraintuitivo: um deny amplo ganha de um allow cirúrgico. Não é o mais específico que vence, é o que casa primeiro na ordem
De onde a regra vem. O Claude Code lê configuração em ordem de precedência, do maior pro menor: managed policy, depois argumentos de linha de comando, depois .claude/settings.local.json, depois .claude/settings.json, depois ~/.claude/settings.json
E quando as camadas se combinam, arrays são mesclados e escalares da camada mais alta sobrescrevem os de baixo
Traduzindo: sua lista de deny do projeto NÃO apaga a lista de deny global, ela soma. Já um valor único (um modo padrão, por exemplo) é substituído por quem tá mais em cima
Esse escopo por camada é a mesma lógica que vale pra outras coisas que você configura por projeto, tipo skills, comandos e subagentes, então se você já pegou o jeito lá, aqui vai parecer familiar
A fonte da verdade. O comando /permissions abre uma interface que lista todas as regras (allow, ask e deny) e o arquivo settings.json de onde cada uma veio
Tem também uma aba de modo auto, pra ver e editar as regras do classificador sem abrir arquivo nenhum. Ela lista as entradas allow, soft_deny, hard_deny e environment de cada escopo lido pelo classificador
Tome cuidado com a versão: essa aba exige Claude Code v2.1.246 ou posterior. Se ela não aparecer pra você, é aí que eu olharia primeiro
Passo a passo: reduzindo os prompts sem abrir a guarda
A ordem aqui não é decorativa. É do mais seguro pro mais permissivo, porque cada passo diminui o risco do passo seguinte
1. Rode /permissions e mapeie o que já existe
Antes de escrever qualquer coisa, descubra o que já tá valendo
<pre><code>/permissions</code></pre>
Olhe as três listas e, principalmente, a ORIGEM de cada regra. Uma regra que veio de ~/.claude/settings.json te acompanha em todo projeto, e é bem comum a pessoa achar que tá configurando o repositório atual quando na verdade tá mexendo na configuração global
O erro comum deste passo: escrever regra nova sem olhar a lista, e depois brigar com um deny herdado que você mesmo criou meses atrás 🙂
2. Escreva o deny dos arquivos sensíveis PRIMEIRO
Nunca comece afrouxando. Comece fechando
A doc traz esse exemplo pra arquivos sensíveis:
<pre><code class="language-json">{ "permissions": { "deny": [ "Read(./.env)", "Read(./.env.*)", "Read(./secrets/**)" ] } }</code></pre>
E olha que legal: arquivo coberto por deny de leitura também some da descoberta de arquivos e dos resultados de busca, e Edit e Write ficam bloqueados nesses caminhos

VPS Hostinger para seu sistema
10% OFF extraVPS com SSD NVMe e backups semanais. O cupom MATHEUSHORADECODAR é aplicado automaticamente pelo link.
Ver planos com 10% OFF →Ou seja, não é só "ele não lê": ele não acha, não busca e não escreve por cima
O erro comum deste passo: achar que deny de leitura é blindagem total. Ele cobre as ferramentas de arquivo embutidas e os comandos de arquivo que o Claude Code reconhece no Bash (cat, head, tail, sed), mas não cobre subprocesso arbitrário: um script Python ou Node que abre o arquivo por conta própria passa
3. Escolha o modo do dia a dia
Com o deny no lugar, aí sim escolhe o modo
Dentro da sessão, Shift+Tab alterna entre os modos (a partir do modo manual, uma vez já te joga no modo plan)
Na abertura, dá pra definir direto:
<pre><code class="language-bash">claude –permission-mode plan</code></pre>
O erro comum deste passo: escolher o modo mais solto "só pra essa tarefa" e esquecer que ficou solto. Se é exceção, abra a sessão com a flag e feche ela quando acabar, em vez de mudar o padrão
4. Empurre o limite pro sistema operacional
Essa é a alavanca mais subestimada
O Bash em sandbox deixa o Claude rodar a maioria dos comandos sem parar pra pedir permissão, porque quem aplica o limite não é o julgamento do modelo, é o sistema
São duas fronteiras: isolamento de sistema de arquivos (leitura e escrita no diretório de trabalho, bloqueando modificação fora dele) e isolamento de rede (acesso só por um socket unix ligado a um proxy fora do sandbox). Vale pra cada comando Bash e pros processos filhos dele
Por baixo, ele é construído sobre primitivas do próprio sistema: bubblewrap no Linux e seatbelt no macOS
No uso interno da Anthropic, isso deu uma redução de 84% nos pedidos de permissão
Quando você precisar de mais folga, os ajustes são sandbox.filesystem.allowWrite, que concede escrita em caminhos adicionais, e sandbox.filesystem.disabled, que dispensa o isolamento de sistema de arquivos MANTENDO o isolamento de rede
O erro comum deste passo: tentar isso no Windows nativo. Não é suportado. Roda o Claude Code dentro de uma distribuição WSL2 (macOS, Linux e WSL2 estão cobertos)
5. Só agora libere allow específico, por projeto
Chegou a hora do allow, e a regra de ouro é: nomeie o comando, não o executor
Regras de Bash pra executores de ambiente casam com TUDO que vem depois do comando. Então Bash(devbox run *) libera qualquer coisa depois do run, e a doc orienta escrever a regra específica incluindo o comando interno:
<pre><code class="language-json">{ "permissions": { "allow": [ "Bash(devbox run npm test)" ] } }</code></pre>
O erro comum deste passo: liberar o runner porque "é só pra rodar teste". Você não liberou teste, você liberou o shell inteiro com um prefixo bonitinho
6. Ajuste em tempo real, sem matar a sessão
Desde a semana de 17 a 21 de agosto de 2026, dá pra abrir o /permissions ou rodar /add-dir <path> ENQUANTO o Claude tá trabalhando, e a mudança de regra vale pro resto do turno atual
Isso muda bastante o fluxo: em vez de cancelar, editar arquivo e recomeçar do zero, você corrige a regra e a tarefa segue
O erro comum deste passo: usar isso como muleta e ir liberando na correria, uma regra ampla de cada vez, até o projeto virar um allow gigante que ninguém releu
7. No modo auto, revise o que foi negado
Quando o classificador nega uma ação, a negação volta como resultado de ferramenta com instrução pro modelo procurar um caminho mais seguro em vez de contornar o bloqueio. Ele é instruído a tratar o limite de boa fé e não tentar rotear em volta
Se a negação foi engano, você não precisa reescrever nada na mão: dentro do /permissions tem a aba Recently denied, e a tecla r marca a ação negada pra retry
Ao sair do diálogo, o Claude Code avisa o modelo que pode tentar de novo e retoma a conversa
O erro comum deste passo: ignorar as negações e ficar reformulando o pedido no chat. Se algo legítimo tá sendo barrado toda hora, o lugar de arrumar é a regra, não o prompt
Quando a regra não funciona como você esperava
Separei os tropeços mais previsíveis, com causa e correção
Sintoma: você escreveu um allow bem específico e ele é ignorado
Causa: um deny amplo casou antes. Uma regra deny ampla bloqueia todas as chamadas correspondentes, inclusive as que também batem em um allow mais estreito. O exemplo da própria doc é Bash(aws *), que bloqueia tudo que casa, mesmo com allow mais específico no lugar
Correção: estreite o deny em vez de empilhar allow por cima. Primeira correspondência decide, lembra?
Sintoma: o Claude rodou um comando que você jura que não liberou
Causa: você liberou o runner. Bash(devbox run *) casa com qualquer coisa depois do run
Correção: reescreva incluindo o comando interno, tipo Bash(devbox run npm test)
Sintoma: o padrão de caminho não pega o alvo certo
Causa: em Read e Edit, o asterisco simples casa exatamente UM segmento do caminho e o asterisco duplo casa ATRAVÉS de segmentos, com o casamento ancorado no caminho de diretório inteiro

Crie sistemas com IA para vender
Prompts, modelos e checklists para criar e publicar seu sistema com IA e preparar a oferta para o primeiro cliente.
Quero o e-book gratuito Receba o livro e os bônus no seu e-mail.Correção: decida se você quer um nível só (*) ou a subárvore toda (**), e teste conferindo no /permissions
Sintoma: você bloqueou .env e mesmo assim apareceu um .env acessível
Causa: nome de arquivo simples segue semântica de gitignore e casa em qualquer profundidade. Read(.env) e Read(**/.env) são equivalentes: bloqueiam qualquer .env na pasta atual ou abaixo, mas não um .env em diretório pai nem em outro projeto
Correção: se o segredo mora fora do projeto, a regra do projeto não vai te salvar. Trate isso na camada global
Sintoma: o deny de leitura não segurou um script
Causa: deny de Read e Edit cobre as ferramentas de arquivo embutidas e os comandos de arquivo que o Claude Code reconhece no Bash, mas não cobre subprocesso arbitrário. cat, head, tail e sed estão cobertos. Um script Python ou Node que abre o arquivo sozinho, não
Correção: aqui o remédio é o isolamento do sandbox, não mais uma linha de deny
Sintoma: você acha que a regra de domínio tá frouxa demais
Causa/prevenção: boa notícia, o curinga em regra de domínio do WebFetch não atravessa ponto. WebFetch(domain:example.*) casa com example.org, mas NÃO casa com example.evil.com, então um domínio registrado por atacante não entra de carona
Sintoma: a sessão trava de repente e volta pra você
Causa: é proposital. No modo auto existe um limite de negações que interrompe o modelo e escala pro humano: 3 negações consecutivas ou 20 no total na sessão
Correção: não é hora de afrouxar tudo no susto, é hora de olhar a aba de negadas e entender qual regra tá no caminho
Como calibrar por tipo de projeto
Não existe uma configuração só. Existe a combinação que faz sentido pro que tá em jogo naquele repositório
Repositório de trabalho, com segredos e deploy. Deny forte primeiro (.env, .env.*, secrets/**), modo auto pra ter o classificador revisando shell e rede, e allow estreito comando por comando. Nada de runner genérico
Explorar código alheio ou revisar. Modo plan. Ele lê, roda comando de shell pra explorar e escreve um plano, sem editar o código fonte. É o modo que eu deixaria ligado pra ler repositório que não é seu
Refatoração grande, com revisão no git diff. Modo acceptEdits. As operações de arquivo passam direto e você revisa em bloco depois, no editor ou no diff. Lembrando que comando Bash que não é operação de sistema de arquivos continua pedindo permissão
Ambiente descartável, em container ou VM. Aí sim bypassPermissions tem lugar: acesso autônomo total, sem aviso, num ambiente onde o Claude Code não pode causar dano. Fora disso, não
Time ou organização. Use o padrão gerenciado, que fica no topo da precedência e não muda sozinho quando o produto muda o default. E se a política interna não permitir o classificador, dá pra desligar o modo auto pra todo mundo com permissions.disableAutoMode no valor "disable" nas configurações gerenciadas, o que se aplica aos planos Team e Enterprise
E já que a gente tocou em planos: se a sua dúvida do lado do bolso é outra, tem um comparativo aqui sobre como o Claude Code cobra que fecha essa parte
O que vale liberar, o que nunca liberar
Veredito curto, sem enrolação
Vale liberar: leitura e edição dentro do diretório de trabalho, e comandos de teste NOMEADOS. É o grosso da interrupção e o menor risco real, ainda mais com o sandbox segurando escrita fora do projeto
Nunca liberar: leitura de .env e de secrets, runner genérico com curinga solto, e bypassPermissions na sua máquina principal. Esse último a doc já diz na cara: só em ambiente isolado
O princípio que amarra tudo é esse: o ganho não vem de esvaziar a lista de perguntas, vem de MOVER o limite
Ou você move pro sistema operacional, com o sandbox aplicando isolamento de arquivo e de rede, ou você move pra um revisor automático, com o classificador do modo auto olhando shell e rede por você
Inclusive é por isso que o modo auto não fica lento à toa: ações somente leitura e edições de arquivo no diretório de trabalho são aprovadas automaticamente e pulam o classificador (menos escritas em caminhos protegidos, que vão pro classificador mesmo quando um allow casa)
O custo do classificador recai principalmente sobre comandos de shell e operações de rede, que é exatamente onde você quer alguém olhando
Conclusão
A ordem de ataque é sempre a mesma: deny primeiro, modo depois, allow por último
Deny primeiro porque ele ganha na ordem de avaliação e porque tira o arquivo até da busca. Modo depois porque é a decisão mais grossa e muda o comportamento inteiro da sessão. Allow por último e cirúrgico, com o comando interno escrito na regra
E não esquece que camada de settings soma array e sobrescreve escalar, então a regra que te incomoda pode estar vindo de um arquivo que você nem abriu hoje
Próximo passo concreto: abre o /permissions no projeto em que você tá agora, confere a origem de cada regra e escreve o bloco deny ANTES de afrouxar qualquer coisa
Depois disso, afrouxar fica fácil e bem menos assustador 😀
até o próximo post!
Perguntas frequentes
Por que um deny mais genérico bloqueia mesmo eu tendo um allow específico pra mesma ferramenta?
Porque as regras são avaliadas em ordem fixa: deny, depois ask, depois allow, e a primeira que casar decide, não a mais específica. Uma regra deny ampla bloqueia todas as chamadas correspondentes, inclusive as que também batem num allow mais estreito. A correção é estreitar o deny, em vez de empilhar allow por cima
Como bloquear o Claude Code de ler arquivos como .env sem travar o resto do projeto?
Escreva um deny específico pro caminho, como Read(./.env), Read(./.env.*) e Read(./secrets/**), que é o exemplo que a doc traz pra arquivos sensíveis. Arquivo coberto por deny de leitura também some da descoberta e da busca, e Edit e Write ficam bloqueados nesses caminhos. Isso cobre as ferramentas de arquivo e comandos como cat e sed no Bash, mas não cobre um script Python ou Node que abre o arquivo por conta própria
Liberar o comando do meu runner, tipo devbox run, libera qualquer coisa dentro dele?
Sim, e é uma pegadinha comum nas permissões do Claude Code. Regra de Bash pra executor de ambiente casa com tudo que vem depois do comando, então liberar o runner libera qualquer comando interno. O jeito seguro é escrever a regra específica com o comando interno dentro, em vez de deixar o curinga solto depois do runner
O modo auto do Claude Code substitui minha revisão manual das permissões?
Não por completo. No modo auto, ações somente leitura e edições de arquivo no diretório de trabalho são aprovadas sozinhas, mas comandos de shell, operações de rede e escritas em caminhos protegidos passam por um segundo modelo, o classificador, que barra ações fora do escopo do pedido, contra infraestrutura não reconhecida ou puxadas por conteúdo hostil. Desde 14 de agosto ele é o padrão em novas sessões dos planos Pro, Max e Team, mas se você já tinha um modo padrão definido, ele continua valendo
Dá pra usar o Bash em sandbox do Claude Code no Windows?
Não direto. O sandbox é construído sobre bubblewrap no Linux e seatbelt no macOS, e também roda em WSL2. No Windows nativo o caminho é rodar o Claude Code dentro de uma distribuição WSL2
Consigo tentar de novo uma ação que o modo auto negou?
Sim, as ações negadas pelo classificador podem ser revistas e reenviadas dentro do próprio /permissions, sem você reescrever o pedido no chat. Se a mesma coisa legítima vive sendo barrada, o lugar de arrumar é a regra, não o prompt
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares
Bateu o limite de uso do Claude Code? Como retomar a tarefa sem refazer tudo
Bateu o limite de uso do Claude Code? Veja como retomar a tarefa de onde parou com /usage, CLAUDE.md e --continue, sem refazer nada.
Como pagar o Claude Code no Brasil: cartão, dólar, IOF e quanto fica em reais
Claude Code preço Brasil na prática: câmbio, IOF de 3,5% e quanto fica na fatura. Planos Pro e Max convertidos em reais e como pagar com cartão.

O que é o JEV e para que ele serve no Claude Code?
O que é JEV no Claude Code? Entenda o modelo da TypeSafe AI, como instalar a skill e quanto custa por milhão de tokens.
