Permissões do SDK
O Claude Agent SDK fornece controles de permissão poderosos que permitem gerenciar como o Claude usa ferramentas em sua aplicação. Este guia aborda como implementar sistemas de permissão usando o callbackcanUseTool
, hooks e regras de permissão do settings.json. Para documentação completa da API, consulte a referência do SDK TypeScript.
Visão Geral
O Claude Agent SDK fornece quatro maneiras complementares de controlar o uso de ferramentas:- Modos de Permissão - Configurações globais de comportamento de permissão que afetam todas as ferramentas
- callback canUseTool - Manipulador de permissão em tempo de execução para casos não cobertos por outras regras
- Hooks - Controle refinado sobre cada execução de ferramenta com lógica personalizada
- Regras de permissão (settings.json) - Regras declarativas de permitir/negar com análise integrada de comandos bash
- Modos de permissão - Definir comportamento geral de permissão (planejamento, aceitação automática de edições, contornar verificações)
canUseTool
- Aprovação dinâmica para casos não cobertos, solicita permissão do usuário- Hooks - Controle programático sobre todas as execuções de ferramentas
- Regras de permissão - Políticas estáticas com análise inteligente de comandos bash
Diagrama de Fluxo de Permissões
Ordem de Processamento: Hook PreToolUse → Regras Ask → Regras Deny → Verificação de Modo de Permissão → Regras Allow → Callback canUseTool → Hook PostToolUseModos de Permissão
Os modos de permissão fornecem controle global sobre como o Claude usa ferramentas. Você pode definir o modo de permissão ao chamarquery()
ou alterá-lo dinamicamente durante sessões de streaming.
Modos Disponíveis
O SDK suporta quatro modos de permissão, cada um com comportamento diferente:Modo | Descrição | Comportamento da Ferramenta |
---|---|---|
default | Comportamento padrão de permissão | Verificações normais de permissão se aplicam |
plan | Modo de planejamento - sem execução | Claude pode usar apenas ferramentas somente leitura; apresenta um plano antes da execução (Atualmente não suportado no SDK) |
acceptEdits | Aceitar edições de arquivo automaticamente | Edições de arquivo e operações do sistema de arquivos são aprovadas automaticamente |
bypassPermissions | Contornar todas as verificações de permissão | Todas as ferramentas executam sem prompts de permissão (use com cautela) |
Definindo Modo de Permissão
Você pode definir o modo de permissão de duas maneiras:1. Configuração Inicial
Defina o modo ao criar uma consulta:2. Mudanças Dinâmicas de Modo (Apenas Streaming)
Altere o modo durante uma sessão de streaming:Comportamentos Específicos do Modo
Modo Aceitar Edições (acceptEdits
)
No modo aceitar edições:
- Todas as edições de arquivo são aprovadas automaticamente
- Operações do sistema de arquivos (mkdir, touch, rm, etc.) são aprovadas automaticamente
- Outras ferramentas ainda requerem permissões normais
- Acelera o desenvolvimento quando você confia nas edições do Claude
- Útil para prototipagem rápida e iterações
- Edições de arquivo (ferramentas Edit, MultiEdit, Write)
- Comandos bash do sistema de arquivos (mkdir, touch, rm, mv, cp)
- Criação e exclusão de arquivos
Modo Contornar Permissões (bypassPermissions
)
No modo contornar permissões:
- TODOS os usos de ferramentas são aprovados automaticamente
- Nenhum prompt de permissão aparece
- Hooks ainda executam (ainda podem bloquear operações)
- Use com extrema cautela - Claude tem acesso total ao sistema
- Recomendado apenas para ambientes controlados
Prioridade do Modo no Fluxo de Permissões
Os modos de permissão são avaliados em um ponto específico no fluxo de permissões:- Hooks executam primeiro - Podem sobrescrever qualquer modo
- Regras de negação são verificadas - Bloqueiam ferramentas independentemente do modo
- Modo
bypassPermissions
- Se ativo, permite todas as ferramentas restantes - Regras de permissão são verificadas
- Outros modos afetam comportamentos específicos de ferramentas
- Callback
canUseTool
- Lida com casos restantes
- Hooks sempre podem bloquear o uso de ferramentas, mesmo no modo
bypassPermissions
- Regras explícitas de negação sobrescrevem todos os modos de permissão
- Modo
bypassPermissions
sobrescreve regras de permissão ecanUseTool
Melhores Práticas
- Use o modo padrão para execução controlada com verificações normais de permissão
- Use o modo acceptEdits ao trabalhar em arquivos ou diretórios isolados
- Evite bypassPermissions em produção ou em sistemas com dados sensíveis
- Combine modos com hooks para controle refinado
- Alterne modos dinamicamente baseado no progresso da tarefa e confiança
canUseTool
O callbackcanUseTool
é passado como uma opção ao chamar a função query
. Ele recebe o nome da ferramenta e parâmetros de entrada, e deve retornar uma decisão - permitir ou negar.
canUseTool dispara sempre que o Claude Code mostraria um prompt de permissão para um usuário, por exemplo, hooks e regras de permissão não cobrem isso e não está no modo de aceitação automática.
Aqui está um exemplo completo mostrando como implementar aprovação interativa de ferramentas:
Usando Hooks para Controle de Ferramentas
Hooks fornecem controle programático sobre a execução de ferramentas em vários estágios. Hooks são chamados para cada uso de ferramenta, dando a você controle completo sobre o pipeline de permissões.Implementação de Hook
Principais Diferenças do canUseTool
- Escopo: Hooks são chamados para todos os usos de ferramentas;
canUseTool
lida com casos não cobertos por regras de permissão - Controle: Hooks requerem análise e validação de entradas você mesmo
- Eventos: Hooks suportam múltiplos eventos (PreToolUse, PostToolUse, etc.) para diferentes estágios
Usando Regras de Permissão (settings.json)
Regras de permissão nosettings.json
fornecem controle declarativo com análise integrada de comandos bash. Essas regras são avaliadas antes do canUseTool
ser chamado. Para mais detalhes sobre configuração de settings, consulte a documentação de configurações do Claude Code.
Estrutura de Configuração
Sintaxe de Regras
Regras de permissão seguem o padrão:NomeDaFerramenta(padrão)
- Regras Bash: Usam correspondência de prefixo (não regex). Exemplo:
Bash(npm:*)
corresponde a qualquer comando começando com “npm” - Regras de arquivo: Suportam padrões glob. Exemplo:
Read(./src/**/*.ts)
corresponde a arquivos TypeScript em src - Regras apenas de ferramenta: Omitir parênteses para controlar ferramentas inteiras. Exemplo:
WebFetch
bloqueia todas as buscas web
Usando com SDK
Embora as regras ainda não possam ser definidas programaticamente no SDK, elas serão lidas do arquivo settings.json no caminho onde o SDK é carregado.Ordem de Avaliação de Permissões
- Regras de negação são verificadas primeiro - se corresponderem, o uso da ferramenta é bloqueado
- Regras de permissão são verificadas em seguida - se corresponderem, o uso da ferramenta é permitido
- Regras de pergunta são verificadas - se corresponderem, o usuário é solicitado
- Callback canUseTool é invocado para quaisquer casos restantes
Análise de Comandos Bash
O SDK inclui um analisador bash integrado que entende a estrutura de comandos:- Lida com pipes, redirecionamentos e substituição de comandos
- Reconhece padrões perigosos como
rm -rf
oucurl | sh
- Suporta wildcards e correspondência de prefixo
Bash(git:*)
- Corresponde a qualquer comando gitBash(npm run test)
- Corresponde ao comando exatoBash(npm run test:*)
- Corresponde a comandos Bash começando comnpm run test
comonpm run test anyFile.test.ts
Melhores Práticas
- Comece com o modo padrão para verificações padrão de permissão
- Use regras de permissão para políticas estáticas, especialmente comandos bash (consulte configurações de permissão)
- Use hooks para registrar, auditar ou transformar todos os usos de ferramentas (consulte tipos de hook)
- Use canUseTool para decisões dinâmicas em casos não cobertos (consulte tipo CanUseTool)
- Camadas de defesa combinando modos, regras, hooks e callbacks para aplicações críticas