Controle o que o Claude Code pode fazer sem perguntar
Modos de permissão, regras de liberar e bloquear e onde colocá-las, para o Claude Code parar de perguntar sobre o que é seguro e nunca mexer no que importa.
Conferido na documentação oficial em
Nesta página10 seções
Mais cedo ou mais tarde, todo mundo que usa o Claude Code bate na mesma parede. O Claude pergunta antes de cada comando, você responde "Yes" cinquenta vezes por dia e acaba parando de ler os pedidos ou desligando todas as verificações. Os dois caminhos são piores do que configurar isso direito uma vez.
Este guia explica como o Claude Code decide o que pode fazer sozinho, como mudar isso só para uma sessão ou para sempre, e como escrever regras que aprovam seus comandos de rotina e bloqueiam os que você nunca quer ver rodando.
Como o Claude Code decide
Toda ação que o Claude quer fazer (ler um arquivo, editar um arquivo, rodar um comando, buscar uma página na web) passa por duas camadas:
- O modo de permissão define a base para a sessão inteira: perguntar quase tudo, aceitar edições de arquivos, só planejar, ou deixar um classificador de segurança decidir.
- As regras de permissão ficam por cima do modo. Elas aprovam, obrigam a perguntar ou bloqueiam ferramentas e comandos específicos, qualquer que seja o modo.
Quem aplica as regras é o próprio Claude Code, não o modelo. Escrever "nunca faça push" no seu CLAUDE.md muda o que o Claude tenta fazer, mas não impede nada. Uma regra de bloqueio impede.
Os modos de permissão
- Manual (
default): o Claude lê os arquivos do projeto sem perguntar e pergunta antes de editar arquivos, rodar a maioria dos comandos ou usar a rede. Um pequeno conjunto de comandos só de leitura, comols,cat,grepe os comandosgitque só leem, nunca pergunta. A configuração se chamadefaultporque o modo Manual era o modo inicial antes do Claude Code 2.1.228. Na maioria dos planos, as sessões agora começam no modo Automático (veja a nota abaixo). - Aceitar edições (
acceptEdits): as edições de arquivos dentro do projeto rodam sem perguntar, assim como os comandos de arquivo mais comuns, comomkdir,touch,mv,cperm. Todo o resto continua perguntando. Bom quando você revisa as mudanças depois, comgit diff. - Planejar (
plan): o Claude lê e explora, mas não edita nada até você aprovar o plano dele. Bom para código que você não conhece, ou antes de uma mudança grande. - Automático (
auto): o Claude trabalha sem os pedidos de rotina, e um modelo separado, o classificador, confere cada ação arriscada antes de ela rodar. Mais sobre isso abaixo. - Não perguntar (
dontAsk): tudo o que exigiria uma pergunta é recusado. Só rodam as suas regras já aprovadas. Feito para scripts e automações, onde não tem ninguém para responder. - Ignorar permissões (
bypassPermissions): nenhum pedido de permissão. As regras de bloqueio continuam bloqueando, e as suas regrasaske as exclusões críticas continuam perguntando. Só para contêineres ou máquinas virtuais que o Claude não consiga estragar.
Nota
Nos planos Pro, Max e Team, uma sessão nova no terminal começa no modo Automático. No plano Enterprise, com uma chave de API ou em execuções com claude -p, ela começa no modo Manual. O rodapé, na parte de baixo da tela, sempre mostra o modo atual, por exemplo ⏸ manual mode on ou ⏵⏵ auto mode on.
Trocar de modo
Durante uma sessão, aperte Shift+Tab para passar de um modo para o outro. A partir do modo Automático, o primeiro toque vai para o modo Manual, e daí o ciclo segue para Aceitar edições, Planejar e volta ao começo. O modo Automático aparece no fim do ciclo quando está disponível para você.
Para começar uma única sessão em um modo específico, use a opção de linha de comando:
claude --permission-mode planPara deixar um modo como padrão em todas as sessões da sua máquina, defina defaultMode nas suas configurações de usuário:
{
"permissions": {
"defaultMode": "acceptEdits"
}
}Atenção
"defaultMode": "auto" só funciona em ~/.claude/settings.json. No .claude/settings.json ou no .claude/settings.local.json de um projeto, ele é ignorado, para que um repositório que você clona não consiga colocar sua sessão no modo Automático. O mesmo vale para "bypassPermissions": no nosso teste, a sessão em um projeto que definia esse modo começou no modo Manual. Os outros modos valem quando definidos nas configurações de um projeto. Em um projeto que definia "acceptEdits", a sessão começou no modo Aceitar edições, mesmo em uma pasta que nunca tinha sido marcada como confiável.
Respondendo a um pedido
Quando o Claude quer rodar um comando que ainda não foi aprovado, ele pergunta (o Claude Code mostra o texto em inglês):
Run the project's lint script
❯ 1. Yes
2. Yes, and don't ask again for: npm run *
3. Yes, and switch to auto mode · auto mode handles these prompts for you
4. No- Yes aprova só este comando.
- Yes, and don't ask again salva uma regra, para que o mesmo tipo de comando passe a rodar sem perguntar neste projeto. Leia a regra antes de escolher: o pedido acima oferecia
npm run *, que aprova todos os scripts npm do projeto, não só o do lint. - No recusa. Aperte
Tabcom Yes ou No selecionado para adicionar um comentário, como "use o banco de dados de testes", e o Claude leva isso em conta.
A regra salva vai para .claude/settings.local.json, na raiz do seu repositório git. O Claude Code deixa esse arquivo fora dos seus commits, então a regra fica só sua. A aprovação de uma edição de arquivo é diferente: ela vale só até o fim da sessão.
Escreva suas próprias regras
As regras ficam em um arquivo de configurações, em três listas: allow (liberar), ask (perguntar) e deny (bloquear). Um bom ponto de partida para um projeto:
{
"permissions": {
"allow": [
"Bash(npm test)",
"Bash(npm run lint)",
"Bash(git commit *)"
],
"ask": [
"Bash(git push *)"
],
"deny": [
"Read(.env)",
"Read(.env.*)",
"Read(secrets/**)"
]
}
}Com esse arquivo, o Claude roda os testes, o lint e os commits sem perguntar. Ele sempre pergunta antes de um push, mesmo no modo Automático. Ele não consegue ler nenhum arquivo .env do projeto, nem nada em uma pasta secrets. Uma regra Read de bloqueio também impede as ferramentas de arquivo do Claude de editar ou sobrescrever esses arquivos.
O Claude Code confere as listas em uma ordem fixa: primeiro bloquear, depois perguntar, depois liberar. Vale a primeira que bater. Por isso uma regra de bloqueio sempre ganha, mesmo de uma regra de liberar mais específica. A gente testou isso com Bash(git *) em allow e Bash(git push *) em deny: o git tag rodou sem perguntar e o git push foi recusado com:
Saída
Permission to use Bash with command git push origin master has been denied.Como os padrões funcionam
Bash(npm test)sem*bate exatamente com esse comando e com mais nenhum.npm test --watchcontinua perguntando.*bate com qualquer texto, inclusive espaços.Bash(git commit *)bate com qualquer comandogit commit, e também comgit commitsozinho.- Coloque o
*depois do subcomando.Bash(git log *)libera sógit log, masBash(git *)libera todos os comandos git, inclusivegit pushegit reset --hard. - O espaço antes do
*faz diferença.Bash(ls *)bate comls -lamas não comlsof.Bash(ls*)bate com os dois. - O Claude Code entende
&&,||,;e|. Uma regra que liberanpm testnão aprovanpm test && rm -rf build: cada parte precisa estar liberada sozinha. As regras de bloqueio valem para cada parte, mesmo dentro de uma subshell. - As regras de arquivo (
ReadeEdit) usam padrões no estilo do gitignore, relativos à pasta onde você abriu o Claude. Um nome de arquivo sozinho, comoRead(.env), também bate com esse nome em qualquer subpasta. Para um caminho absoluto, comece com duas barras, como emRead(//etc/**). Nas configurações de um projeto, uma barra só no início, como emEdit(/src/**), quer dizer a pasta do projeto, não a raiz do disco. - As regras para a web usam o domínio:
WebFetch(domain:docs.python.org).
Atenção
As regras de Bash comparam o comando do jeito que o Claude escreve. Elas não são um muro em volta do programa. Uma regra que bloqueia Bash(curl *) barra curl https://example.com, mas não /usr/bin/curl https://example.com nem sh -c 'curl https://example.com'. Uma regra Read de bloqueio não impede um script em Python de abrir o arquivo. Quando uma restrição precisa valer de verdade, ligue a sandbox com /sandbox, que impõe limites de arquivos e de rede no nível do sistema operacional.
Onde ficam as regras
~/.claude/settings.json, suas configurações de usuário: todos os projetos da sua máquina. Bom para preferências pessoais, comodefaultMode, ou uma regra que bloqueiaRead(~/.ssh/**)..claude/settings.jsonem um projeto: compartilhado com todo mundo que trabalha nele, se você colocar no git. Bom para os comandos de teste e de build do projeto..claude/settings.local.jsonem um projeto: só você, só neste projeto. É aqui que o "Yes, and don't ask again" escreve.- Configurações gerenciadas, distribuídas por uma organização: passam por cima de todo o resto e os usuários não podem mudá-las.
Quando tem regras em mais de um arquivo, as listas se somam, não se substituem. Uma regra de bloqueio em qualquer arquivo barra a ação, não importa o que os outros liberem.
Digite /permissions em uma sessão para ver todas as regras em vigor e o arquivo de onde vem cada uma. Você também pode adicionar e remover regras ali, mesmo enquanto o Claude está trabalhando.
A caixa de confiança protege as regras do projeto
O .claude/settings.json de um projeto poderia aprovar qualquer coisa, então o Claude Code não aplica as regras de liberar até você confiar na pasta. Na primeira vez que você abre o Claude Code em uma pasta com regras assim, a caixa de confiança mostra essas regras:
⚠ This folder pre-approves 2 tool permissions in .claude/settings.json:
Bash(npm test) and Bash(git commit *)
These will apply without asking. Only proceed if you trust this configuration.As regras de bloqueio e as de perguntar valem na hora, com ou sem confiança, porque só restringem. Em uma execução com claude -p, em que não há caixa de confiança, as regras de liberar de uma pasta sem confiança são ignoradas, e o Claude Code avisa na saída de erros:
Saída
Ignoring 2 permissions.allow entries from .claude/settings.json: this workspace has not been trusted.Se você rodar claude -p em um repositório que não foi você que escreveu, adicione --setting-sources user, para o Claude Code ler só as suas configurações e ignorar os arquivos do projeto.
Modo Automático
No modo Automático, o Claude trabalha sem os pedidos de rotina. As leituras e as edições dentro do projeto rodam direto. As outras ações, como comandos de shell, acessos à rede e edições fora do projeto, passam antes pelo classificador, que compara cada uma com o que você pediu.
Por padrão, o classificador bloqueia, entre outras coisas:
- baixar e rodar código, como
curl ... | bash - enviar dados sensíveis para serviços externos
- deploys em produção e migrações de banco de dados
- force push e
git reset --hardem trabalho que ainda não foi para um commit - mudanças em infraestrutura compartilhada
- apagar arquivos que já existiam antes da sessão
Quando bloqueia alguma coisa, o Claude vê o motivo e tenta outro caminho, ou pergunta para você. Um exemplo real: quando o pedido foi só "faça as duas", sem dizer o que mudar, o modo Automático recusou uma delas, uma mudança no arquivo de configuração principal de um servidor web, com o motivo Modify Shared Resources. Quando uma mensagem seguinte disse qual era o arquivo e a mudança exata, o classificador deixou passar. Isso bate com a documentação: um pedido na conversa só libera um bloqueio quando diz qual é a ação e o que a torna arriscada.
O que é bom saber:
- Os limites que você dá na conversa contam. Se você disser "não faça push", o classificador bloqueia os pushes. Mas ele lê isso da conversa, então pode se perder quando uma sessão longa é compactada. Para um limite firme, use uma regra de bloqueio.
- As regras
askcontinuam perguntando para você no modo Automático. Elas são a ferramenta certa para "pode seguir, mas fale comigo antes do push". - Ao entrar no modo Automático, regras de liberar amplas demais, como
Bash(*)ouBash(python*), ficam desligadas, porque deixariam tudo passar sem o classificador ver. As regras estreitas, comoBash(npm test), continuam valendo. As amplas voltam quando você sai do modo Automático. - Se o classificador bloquear três ações seguidas, ou vinte em uma sessão, o modo Automático pausa e o Claude Code volta a perguntar para você.
- As ações bloqueadas aparecem em
/permissions, na aba Recently denied, onde você pode apertarrpara tentar de novo com a sua aprovação.
Atenção
O modo Automático diminui o número de pedidos. Ele não torna toda ação segura. Use o modo Automático em trabalhos em que você confia na direção geral, e fique no modo Manual para trabalho sensível em um servidor em produção.
O que nenhuma regra consegue aprovar
Algumas ações sempre passam por uma verificação, mesmo com uma regra de liberar que bata com elas:
- Caminhos protegidos. Gravações em
.git,.claude,.vscode,.bashrc,.zshrc,.gitconfig,.mcp.jsone mais alguns arquivos de configuração nunca são aprovadas por regras de liberar. O modo Manual pergunta, o modo Automático manda para o classificador. - Exclusões críticas.
rmourmdirapontados para a raiz do disco, para uma pasta de primeiro nível como/etcou/usr, para a sua pasta pessoal ou para a própria pasta do projeto também nunca são aprovados por regras de liberar.
Só o bypassPermissions pula a verificação dos caminhos protegidos, e mesmo ele pergunta antes de uma exclusão crítica. Não use esse modo em uma máquina que importa para você. No Linux e no macOS, o Claude Code se recusa a iniciar nesse modo como root ou com sudo.
Fontes
- Configure permissions, documentação do Claude Code (em inglês)
- Choose a permission mode, documentação do Claude Code (em inglês)
- Settings files and precedence, documentação do Claude Code (em inglês)
- Sandboxing, documentação do Claude Code (em inglês)
Conferido em
Claude Code 2.1.280 no AlmaLinux 9.8. As regras deste guia foram testadas em um projeto git descartável: liberar, bloquear, padrões de arquivo em subpastas e a precedência do bloqueio sobre a liberação em execuções com claude -p, e a caixa de confiança e o "Yes, and don't ask again" em uma sessão interativa. Os textos dos pedidos e da caixa acima foram copiados dessas sessões. O comportamento do modo Automático vem da documentação, com exceção do bloqueio real descrito.