Pular para o conteúdo principal
O Claude Agent SDK fornece controles de permissão para gerenciar como Claude usa ferramentas. Use modos de permissão e regras para definir o que é permitido automaticamente, e o callback canUseTool para lidar com tudo mais em tempo de execução.
Esta página cobre modos de permissão e regras. Para construir fluxos de aprovação interativos onde os usuários aprovam ou negam solicitações de ferramentas em tempo de execução, consulte Lidar com aprovações e entrada do usuário.

Como as permissões são avaliadas

Quando Claude solicita uma ferramenta, o SDK verifica as permissões nesta ordem:
1

Hooks

Execute hooks primeiro. Um hook pode negar a chamada completamente ou passá-la adiante. Um hook que retorna allow não ignora as regras de negar e perguntar abaixo; essas são avaliadas independentemente do resultado do hook.
2

Regras de negação

Verifique as regras deny (de disallowed_tools e settings.json). Se uma regra de negação corresponder, a ferramenta é bloqueada, mesmo no modo bypassPermissions. Entradas com nome simples como Bash removem a ferramenta do contexto do Claude antes desta avaliação começar, portanto apenas regras com escopo como Bash(rm *) são verificadas neste passo.
3

Regras de pergunta

Verifique as regras ask de settings.json. Se uma regra de pergunta corresponder, a chamada passa para seu callback canUseTool para confirmação, mesmo no modo bypassPermissions. No modo dontAsk, uma regra de pergunta correspondente é negada, porque esse modo nunca solicita.
4

Modo de permissão

Aplique o modo de permissão ativo. bypassPermissions aprova tudo que chega a este passo. acceptEdits aprova operações de arquivo. plan roteia ferramentas de edição de arquivo e escrita de shell para seu callback canUseTool independentemente das regras de permitir, portanto operações de escrita não podem ser aprovadas automaticamente durante o planejamento. Outros modos passam adiante.
5

Regras de permissão

Verifique as regras allow (de allowed_tools e settings.json). Se uma regra corresponder, a ferramenta é aprovada.
6

Callback canUseTool

Se não for resolvido por nenhum dos anteriores, chame seu callback canUseTool para uma decisão. No modo dontAsk, este passo é ignorado e a ferramenta é negada.
Diagrama do fluxo de avaliação de permissões em cinco etapas correspondendo aos passos acima: uma solicitação de ferramenta passa por hooks, regras de negação, modo de permissão, regras de permissão e canUseTool. Hooks, regras de negação e canUseTool podem rotear para Bloqueado; bypass de modo de permissão, regras de permissão e canUseTool podem rotear para Executar. Esta página se concentra em regras de permitir e negar e modos de permissão. Para os outros passos:

Regras de permitir e negar

allowed_tools e disallowed_tools (TypeScript: allowedTools / disallowedTools) adicionam entradas às listas de regras de permitir e negar no fluxo de avaliação acima. Regras de permitir afetam apenas a aprovação: uma ferramenta não listada em allowed_tools ainda está disponível para Claude e passa para o modo de permissão. Regras de negar se comportam de forma diferente dependendo se nomeiam uma ferramenta ou definem um padrão dentro de uma.
OpçãoEfeito
allowed_tools=["Read", "Grep"]Read e Grep são auto-aprovadas. Ferramentas não listadas aqui ainda existem e passam para o modo de permissão e canUseTool.
disallowed_tools=["Bash"]A definição da ferramenta Bash é removida da solicitação. Claude não vê a ferramenta e não pode tentar usá-la.
disallowed_tools=["Bash(rm *)"]Bash permanece disponível. Chamadas correspondentes a rm * são negadas em todos os modos de permissão, incluindo bypassPermissions. Outras chamadas de Bash passam para o modo de permissão.
disallowed_tools=["*"]Toda definição de ferramenta é removida da solicitação. Globs de nome de ferramenta são suportados em regras de negar: "*" corresponde a todas as ferramentas e "mcp__*" corresponde a todas as ferramentas MCP em todos os servidores.
Regras de permitir aceitam globs de nome de ferramenta apenas após um prefixo literal mcp__<server>__. O segmento do servidor deve estar livre de glob para que a regra nomeie um servidor específico que você configurou: mcp__puppeteer__* corresponde a todas as ferramentas do servidor puppeteer, e mcp__github__get_* corresponde às suas ferramentas get_. Uma entrada não ancorada como allowed_tools=["*"] ou allowed_tools=["mcp__*"] é ignorada com um aviso de inicialização e não auto-aprova nada. Para um agente bloqueado, combine allowedTools com permissionMode: "dontAsk". Ferramentas listadas são aprovadas; qualquer outra coisa é negada completamente em vez de solicitar:
const options = {
  allowedTools: ["Read", "Glob", "Grep"],
  permissionMode: "dontAsk"
};
allowed_tools não restringe bypassPermissions. allowed_tools apenas pré-aprova as ferramentas que você lista. Ferramentas não listadas não são correspondidas por nenhuma regra de permitir e passam para o modo de permissão, onde bypassPermissions as aprova. Definir allowed_tools=["Read"] junto com permission_mode="bypassPermissions" ainda aprova todas as ferramentas, incluindo Bash, Write e Edit. Se você precisar de bypassPermissions mas quiser que ferramentas específicas sejam bloqueadas, use disallowed_tools.
Você também pode configurar regras de permitir, negar e perguntar declarativamente em .claude/settings.json. Essas regras são lidas quando a fonte de configuração project está habilitada, o que é o padrão para opções query(). Se você definir setting_sources (TypeScript: settingSources) explicitamente, inclua "project" para que se apliquem. Consulte Configurações de permissão para a sintaxe das regras.

Modos de permissão

Os modos de permissão fornecem controle global sobre como Claude usa ferramentas. Você pode definir o modo de permissão ao chamar query() ou alterá-lo dinamicamente durante sessões de streaming.

Modos disponíveis

O SDK suporta estes modos de permissão:
ModoDescriçãoComportamento da ferramenta
defaultComportamento de permissão padrãoSem auto-aprovações; ferramentas não correspondidas acionam seu callback canUseTool
dontAskNegar em vez de solicitarQualquer coisa não pré-aprovada por allowed_tools ou regras é negada; canUseTool nunca é chamado
acceptEditsAuto-aceitar edições de arquivoEdições de arquivo e operações de sistema de arquivos (mkdir, rm, mv, etc.) são automaticamente aprovadas
bypassPermissionsIgnorar verificações de permissãoAs ferramentas são executadas sem solicitações de permissão, a menos que uma regra ask explícita corresponda (use com cuidado)
planModo de planejamentoClaude explora e planeja sem editar seus arquivos de origem; edições de arquivo nunca são auto-aprovadas e solicitam através de seu callback canUseTool
auto (Apenas TypeScript)Aprovações classificadas por modeloUm classificador de modelo aprova ou nega cada chamada de ferramenta. Consulte Modo Auto para disponibilidade
Herança de subagentos: Quando o pai usa bypassPermissions, acceptEdits ou auto, todos os subagentos herdam esse modo e ele não pode ser substituído por subagentos. Subagentos podem ter prompts de sistema diferentes e comportamento menos restrito do que seu agente principal, portanto herdar bypassPermissions concede a eles acesso completo e autônomo ao sistema. Uma regra ask explícita ainda força uma solicitação.

Definir modo de permissão

Você pode definir o modo de permissão uma vez ao iniciar uma consulta, ou alterá-lo dinamicamente enquanto a sessão está ativa.
Passe permission_mode (Python) ou permissionMode (TypeScript) ao criar uma consulta. Este modo se aplica para toda a sessão, a menos que seja alterado dinamicamente.
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions


async def main():
    async for message in query(
        prompt="Help me refactor this code",
        options=ClaudeAgentOptions(
            permission_mode="default",  # Set the mode here
        ),
    ):
        if hasattr(message, "result"):
            print(message.result)


asyncio.run(main())

Detalhes do modo

Modo aceitar edições (acceptEdits)

Auto-aprova operações de arquivo para que Claude possa editar código sem solicitar. Outras ferramentas (como comandos Bash que não são operações de sistema de arquivos) ainda requerem permissões normais. Operações auto-aprovadas:
  • Edições de arquivo (ferramentas Edit, Write)
  • Comandos de sistema de arquivos: mkdir, touch, rm, rmdir, mv, cp, sed
Ambos se aplicam apenas a caminhos dentro do diretório de trabalho ou additionalDirectories. Caminhos fora desse escopo e gravações em caminhos protegidos ainda solicitam. Use quando: você confia nas edições de Claude e quer iteração mais rápida, como durante prototipagem ou ao trabalhar em um diretório isolado.

Modo não perguntar (dontAsk)

Converte qualquer solicitação de permissão em uma negação. Ferramentas pré-aprovadas por allowed_tools, regras de permitir em settings.json ou um hook são executadas normalmente. Tudo mais é negado sem chamar canUseTool. Use quando: você quer uma superfície de ferramenta fixa e explícita para um agente sem cabeça e prefere uma negação dura sobre confiança silenciosa em canUseTool estar ausente.

Modo ignorar permissões (bypassPermissions)

Auto-aprova todos os usos de ferramentas sem solicitações. Hooks ainda são executados e podem bloquear operações se necessário.
Use com extrema cautela. Claude tem acesso completo ao sistema neste modo. Use apenas em ambientes controlados onde você confia em todas as operações possíveis.allowed_tools não restringe este modo. Todas as ferramentas são aprovadas, não apenas as que você listou. Regras de negação (disallowed_tools), regras explícitas de ask e hooks são avaliados antes da verificação do modo e ainda podem bloquear uma ferramenta.

Modo plano (plan)

Claude explora a base de código e produz um plano sem editar seus arquivos de origem. Ferramentas somente leitura são executadas como no modo padrão. Edições de arquivo nunca são auto-aprovadas no modo plano, mesmo quando uma regra de permitir corresponde. Elas solicitam através de seu callback canUseTool em vez disso. Claude pode usar AskUserQuestion para esclarecer requisitos antes de finalizar o plano. Consulte Lidar com aprovações e entrada do usuário para lidar com essas solicitações. Use quando: você quer que Claude proponha mudanças sem executá-las, como durante revisão de código ou quando você precisa aprovar mudanças antes que sejam feitas. Para os outros passos no fluxo de avaliação de permissões: