Instalação
Instale o pacote em um ambiente virtual. Em instalações recentes do Debian, Ubuntu e Homebrew Python, executarpip install contra o Python do sistema falha com error: externally-managed-environment.
Escolhendo entre query() e ClaudeSDKClient
O SDK Python fornece duas maneiras de interagir com Claude Code:
Comparação rápida
Quando usar query() (tarefas únicas)
Melhor para:
- Perguntas únicas onde você não precisa do histórico de conversa
- Tarefas independentes que não requerem contexto de trocas anteriores
- Scripts de automação simples
- Quando você quer um novo começo cada vez
Quando usar ClaudeSDKClient (conversa contínua)
Melhor para:
- Continuando conversas - Quando você precisa que Claude se lembre do contexto
- Perguntas de acompanhamento - Construindo sobre respostas anteriores
- Aplicações interativas - Interfaces de chat, REPLs
- Lógica orientada por resposta - Quando a próxima ação depende da resposta de Claude
- Controle de sessão - Gerenciando o ciclo de vida da conversa explicitamente
Funções
query()
Cria uma nova sessão para cada interação com Claude Code por padrão. Retorna um iterador assíncrono que produz mensagens conforme chegam. Cada chamada para query() começa do zero sem memória de interações anteriores, a menos que você passe continue_conversation=True ou resume em ClaudeAgentOptions. Veja Sessions.
Parâmetros
Retorna
Retorna umAsyncIterator[Message] que produz mensagens da conversa.
Exemplo - Com opções
tool()
Decorador para definir ferramentas MCP com segurança de tipo.
Parâmetros
Opções de schema de entrada
-
Mapeamento de tipo simples (recomendado):
-
Formato JSON Schema (para validação complexa):
Retorna
Uma função decoradora que envolve a implementação da ferramenta e retorna uma instânciaSdkMcpTool.
Exemplo
ToolAnnotations
Re-exportado de mcp.types (também disponível como from claude_agent_sdk import ToolAnnotations). Todos os campos são dicas opcionais; clientes não devem confiar neles para decisões de segurança.
create_sdk_mcp_server()
Cria um servidor MCP em processo que é executado dentro de sua aplicação Python.
Parâmetros
Retorna
Retorna um objetoMcpSdkServerConfig que pode ser passado para ClaudeAgentOptions.mcp_servers.
Exemplo
list_sessions()
Lista sessões passadas com metadados. Filtre por diretório de projeto ou liste sessões em todos os projetos. Síncrono; retorna imediatamente.
Parâmetros
Tipo de retorno: SDKSessionInfo
Exemplo
Imprima as 10 sessões mais recentes para um projeto. Os resultados são classificados porlast_modified descendente, então o primeiro item é o mais novo. Omita directory para pesquisar em todos os projetos.
get_session_messages()
Recupera mensagens de uma sessão passada. Síncrono; retorna imediatamente.
Parâmetros
Tipo de retorno: SessionMessage
Exemplo
get_session_info()
Lê metadados para uma única sessão por ID sem verificar o diretório do projeto completo. Síncrono; retorna imediatamente.
Parâmetros
Retorna
SDKSessionInfo, ou None se a sessão não for encontrada.
Exemplo
Procure os metadados de uma única sessão sem verificar o diretório do projeto. Útil quando você já tem um ID de sessão de uma execução anterior.rename_session()
Renomeia uma sessão anexando uma entrada de título personalizado. Chamadas repetidas são seguras; o título mais recente vence. Síncrono.
Parâmetros
Lança
ValueError se session_id não for um UUID válido ou title estiver vazio; FileNotFoundError se a sessão não puder ser encontrada.
Exemplo
Renomeie a sessão mais recente para que seja mais fácil encontrá-la depois. O novo título aparece emSDKSessionInfo.custom_title em leituras subsequentes.
tag_session()
Marca uma sessão. Passe None para limpar a tag. Chamadas repetidas são seguras; a tag mais recente vence. Síncrono.
Parâmetros
Lança
ValueError se session_id não for um UUID válido ou tag estiver vazio após sanitização; FileNotFoundError se a sessão não puder ser encontrada.
Exemplo
Marque uma sessão e depois filtre por essa tag em uma leitura posterior. PasseNone para limpar uma tag existente.
Classes
ClaudeSDKClient
Mantém uma sessão de conversa em múltiplas trocas. Este é o equivalente Python de como a função query() do SDK TypeScript funciona internamente - cria um objeto cliente que pode continuar conversas.
Recursos principais
- Continuidade de sessão: Mantém contexto de conversa em múltiplas chamadas
query() - Mesma conversa: A sessão retém mensagens anteriores
- Suporte a interrupção: Pode parar a execução no meio da tarefa
- Ciclo de vida explícito: Você controla quando a sessão começa e termina
- Fluxo orientado por resposta: Pode reagir a respostas e enviar acompanhamentos
- Ferramentas e hooks personalizados: Suporta ferramentas personalizadas (criadas com decorador
@tool) e hooks
Métodos
Suporte a Gerenciador de Contexto
O cliente pode ser usado como um gerenciador de contexto assíncrono para gerenciamento automático de conexão:
Importante: Ao iterar sobre mensagens, evite usar break para sair cedo, pois isso pode causar problemas de limpeza do asyncio. Em vez disso, deixe a iteração ser concluída naturalmente ou use sinalizadores para rastrear quando você encontrou o que precisa.
Exemplo - Continuando uma conversa
Exemplo - Entrada em streaming com ClaudeSDKClient
Exemplo - Usando interrupções
Comportamento do buffer após interrupção:
interrupt() envia um sinal de parada mas não limpa o buffer de mensagens. Mensagens já produzidas pela tarefa interrompida, incluindo sua ResultMessage (com subtype="error_during_execution"), permanecem no fluxo. Você deve drená-las com receive_response() antes de ler a resposta a uma nova consulta. Se você enviar uma nova consulta imediatamente após interrupt() e chamar receive_response() apenas uma vez, você receberá as mensagens da tarefa interrompida, não a resposta da nova consulta.Exemplo - Controle avançado de permissão
Tipos
@dataclass vs TypedDict: Este SDK usa dois tipos de tipos. Classes decoradas com @dataclass (como ResultMessage, AgentDefinition, TextBlock) são instâncias de objeto em tempo de execução e suportam acesso a atributos: msg.result. Classes definidas com TypedDict (como ThinkingConfigEnabled, McpStdioServerConfig, SyncHookJSONOutput) são dicts simples em tempo de execução e requerem acesso a chave: config["budget_tokens"], não config.budget_tokens. A sintaxe de chamada ClassName(field=value) funciona para ambos, mas apenas dataclasses produzem objetos com atributos.SdkMcpTool
Definição para uma ferramenta SDK MCP criada com o decorador @tool.
Transport
Classe base abstrata para implementações de transport personalizado. Use isso para comunicar com o processo Claude sobre um canal personalizado (por exemplo, uma conexão remota em vez de um subprocess local).
Importação:
from claude_agent_sdk import Transport
ClaudeAgentOptions
Dataclass de configuração para consultas Claude Code.
Lidar com respostas de API lentas ou travadas
O subprocess CLI lê várias variáveis de ambiente que controlam timeouts de API e detecção de travamento. Passe-as através deClaudeAgentOptions.env:
API_TIMEOUT_MS: timeout por solicitação no cliente Anthropic, em milissegundos. Padrão600000. Aplica-se ao loop principal e a todos os subagentes.CLAUDE_CODE_MAX_RETRIES: máximo de tentativas de API. Padrão10, limitado a15. Cada tentativa obtém sua própria janelaAPI_TIMEOUT_MS, então o tempo de parede no pior caso é aproximadamenteAPI_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)mais backoff. Para execuções autônomas que precisam aguardar interrupções mais longas, definaCLAUDE_CODE_RETRY_WATCHDOG=1: ele tenta erros de capacidade indefinidamente, e a partir do Claude Code v2.1.199 aumenta o padrão para outros erros transitórios para300e remove o limite nesta variável.CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog de travamento para subagentes lançados comrun_in_background. Padrão600000. Redefine em cada evento de stream; em caso de travamento, aborta o subagente, marca a tarefa como falha e expõe o erro ao pai com qualquer resultado parcial. Não se aplica a subagentes síncronos.CLAUDE_ENABLE_STREAM_WATCHDOGcomCLAUDE_STREAM_IDLE_TIMEOUT_MS: aborta a solicitação quando os cabeçalhos chegaram mas o corpo da resposta para de fazer stream. O watchdog está ativado por padrão para todos os provedores; definaCLAUDE_ENABLE_STREAM_WATCHDOG=0para desabilitá-lo.CLAUDE_STREAM_IDLE_TIMEOUT_MSpadrão é300000e é fixado nesse mínimo. A solicitação abortada passa pelo caminho de tentativa normal.
OutputFormat
Configuração para validação de saída estruturada. Passe isso como um dict para o campo output_format em ClaudeAgentOptions:
SystemPromptPreset
Configuração para usar o prompt do sistema preset do Claude Code com adições opcionais.
SystemPromptFile
Configuração para carregar um prompt do sistema personalizado de um arquivo em vez de passá-lo como uma string. O SDK mapeia isso para o sinalizador CLI --system-prompt-file. Use a forma de arquivo quando o prompt é grande: o SDK passa um system_prompt string no argv do subprocess CLI, que está sujeito aos limites de comprimento de linha de comando do SO antes do SDK enviar qualquer solicitação de API. No Linux, um único argumento mais longo que aproximadamente 128 KB falha no spawn do processo com Argument list too long. No Windows, toda a linha de comando é limitada a aproximadamente 32 KB, então a forma de string falha em um limite inferior.
SettingSource
Controla quais fontes de configuração baseadas em sistema de arquivos o SDK carrega configurações.
Comportamento padrão
Quandosetting_sources é omitido ou None, query() carrega as mesmas configurações do sistema de arquivos que o CLI do Claude Code: usuário, projeto e local. Configurações de política gerenciada são carregadas em todos os casos; configurações gerenciadas pelo servidor são buscadas quando a sessão se autentica com uma credencial de organização em uma configuração elegível. Veja What settingSources does not control para entradas que são lidas independentemente desta opção, e como desabilitá-las.
Por que usar setting_sources
Desabilitar configurações do sistema de arquivos:No Python SDK 0.1.59 e anterior, uma lista vazia era tratada da mesma forma que omitir a opção, então
setting_sources=[] não desabilitava configurações do sistema de arquivos. Atualize para uma versão mais recente se você precisar que uma lista vazia tenha efeito. O SDK TypeScript não é afetado.Precedência de configurações
Quando múltiplas fontes são carregadas, as configurações são mescladas com esta precedência (maior para menor):- Configurações locais (
.claude/settings.local.json) - Configurações de projeto (
.claude/settings.json) - Configurações de usuário (
~/.claude/settings.json)
agents e allowed_tools substituem configurações do sistema de arquivos de usuário, projeto e local. Configurações de política gerenciada têm precedência sobre opções programáticas.
AgentDefinition
Configuração para um subagente definido programaticamente.
Os nomes de campo
AgentDefinition usam camelCase, como disallowedTools, permissionMode e maxTurns. Esses nomes mapeiam diretamente para o formato de fio compartilhado com o SDK TypeScript. Isso difere de ClaudeAgentOptions, que usa snake_case Python para campos de nível superior equivalentes como disallowed_tools e permission_mode. Como AgentDefinition é uma dataclass, passar uma palavra-chave snake_case levanta um TypeError no tempo de construção.PermissionMode
Modos de permissão para controlar a execução de ferramentas.
EffortLevel
Níveis de esforço para guiar a profundidade de pensamento.
CanUseTool
Alias de tipo para funções de callback de permissão de ferramenta.
tool_name: Nome da ferramenta sendo chamadainput_data: Os parâmetros de entrada da ferramentacontext: UmToolPermissionContextcom informações adicionais
PermissionResult (ou PermissionResultAllow ou PermissionResultDeny).
O callback é a substituição do SDK para o prompt de permissão interativo: é invocado apenas quando o fluxo de avaliação de permissão se resolve para um prompt. Chamadas de ferramenta já aprovadas por uma entrada allowed_tools, uma regra de permissão de configurações ou o modo de permissão, como acceptEdits ou bypassPermissions, nunca o invocam. Para controlar cada chamada de ferramenta, use um hook PreToolUse em vez disso.
AskUserQuestion, ferramentas MCP marcadas requiresUserInteraction, e ferramentas de conector sua organização definida como ask a alcançam mesmo quando uma regra de permissão corresponde. Em modo dontAsk essas chamadas são negadas em vez disso, sem invocar o callback.
ToolPermissionContext
Informações de contexto passadas para callbacks de permissão de ferramenta.
PermissionResult
Tipo de união para resultados de callback de permissão.
PermissionResultAllow
Resultado indicando que a chamada de ferramenta deve ser permitida.
PermissionResultDeny
Resultado indicando que a chamada de ferramenta deve ser negada.
PermissionUpdate
Configuração para atualizar permissões programaticamente.
PermissionRuleValue
Uma regra a adicionar, substituir ou remover em uma atualização de permissão.
ToolsPreset
Configuração de ferramentas preset para usar o conjunto de ferramentas padrão do Claude Code.
ThinkingConfig
Controla o comportamento de pensamento estendido. Uma união de três configurações:
O campo opcional
display controla se o texto de pensamento é retornado "summarized" ou "omitted". No Claude Opus 4.7 e posterior, o padrão da API é "omitted", então defina "summarized" para receber conteúdo de pensamento em saídas ThinkingBlock.
Como estas são classes TypedDict, são dicts simples em tempo de execução. Construa-as como literais de dict ou chame a classe como um construtor; ambos produzem um dict. Acesse campos com config["budget_tokens"], não config.budget_tokens:
SdkBeta
Tipo literal para recursos beta do SDK.
betas em ClaudeAgentOptions para ativar recursos beta.
McpSdkServerConfig
Configuração para servidores MCP do SDK criados com create_sdk_mcp_server().
McpServerConfig
Tipo de união para configurações de servidor MCP.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
McpServerStatusConfig
A configuração de um servidor MCP conforme relatado por get_mcp_status(). Esta é a união de todas as variantes de transporte McpServerConfig mais uma variante de saída apenas claudeai-proxy para servidores proxied através de claude.ai.
McpSdkServerConfigStatus é a forma serializável de McpSdkServerConfig com apenas campos type ("sdk") e name (str); a instance em processo é omitida. McpClaudeAIProxyServerConfig tem campos type ("claudeai-proxy"), url (str), e id (str).
McpStatusResponse
Resposta de ClaudeSDKClient.get_mcp_status(). Envolve a lista de status de servidor sob a chave mcpServers.
McpServerStatus
Status de um servidor MCP conectado, contido em McpStatusResponse.
SdkPluginConfig
Configuração para carregar plugins no SDK.
Exemplo:
Tipos de Mensagem
Message
Tipo de união de todas as mensagens possíveis.
UserMessage
Mensagem de entrada do usuário.
AssistantMessage
Mensagem de resposta do assistente com blocos de conteúdo.
AssistantMessageError
Possíveis tipos de erro para mensagens do assistente.
SystemMessage
Mensagem do sistema com metadados.
ResultMessage
Mensagem de resultado final com informações de custo e uso.
subtype determina quais outros campos são preenchidos. É um de "success", "error_during_execution", "error_max_turns", "error_max_budget_usd" ou "error_max_structured_output_retries". A dataclass Python achata todas as variantes em uma forma, portanto campos que não se aplicam ao subtipo retornado são None.
Vários campos carregam detalhes de diagnóstico quando a conversa termina em um erro:
is_error:Truequando a conversa terminou em um estado de erro. SempreTruenos subtiposerror_*. Emsubtype="success"éTruequando a solicitação final do modelo falhou, significando que o loop do agente foi concluído mas a última chamada da API retornou um erro.api_error_status: o código de status HTTP do erro de API de encerramento.Nonequando o turno terminou sem um. Preenchido apenas emsubtype="success".result: texto da mensagem final do assistente emsubtype="success", ouNonenos subtiposerror_*. Quandosubtype="success"eis_error=True, isso contém a string de erro da API se uma estiver disponível mas pode estar vazio, então verifiqueapi_error_statuse o conteúdo anterior deAssistantMessagepara detalhes.errors: strings de erro no nível do loop, como a mensagem de máximo de turnos. Preenchido apenas nos subtiposerror_*.
usage contém as seguintes chaves quando presentes:
O dict
model_usage mapeia nomes de modelo para uso por modelo. As chaves do dict interno usam camelCase porque o valor é passado sem modificação do processo CLI subjacente, correspondendo ao tipo TypeScript ModelUsage:
StreamEvent
Evento de fluxo para atualizações de mensagem parcial durante streaming. Apenas recebido quando include_partial_messages=True em ClaudeAgentOptions. Importe via from claude_agent_sdk.types import StreamEvent.
RateLimitEvent
Emitido quando o status do limite de taxa muda (por exemplo, de "allowed" para "allowed_warning"). Use isso para avisar usuários antes de atingirem um limite rígido, ou para recuar quando o status é "rejected".
RateLimitInfo
Estado de limite de taxa carregado por RateLimitEvent.
TaskStartedMessage
Emitido quando uma tarefa de fundo começa. Uma tarefa de fundo é qualquer coisa rastreada fora do turno principal: um comando Bash em fundo, um watch de Monitor, um subagente gerado via ferramenta Agent, ou um agente remoto. O campo task_type diz qual. Esta nomenclatura não está relacionada à renomeação de ferramenta Task-para-Agent.
TaskUsage
Dados de token e tempo para uma tarefa de fundo.
TaskProgressMessage
Emitido periodicamente com atualizações de progresso para uma tarefa de fundo em execução.
TaskNotificationMessage
Emitido quando uma tarefa de fundo é concluída, falha ou é parada. Tarefas de fundo incluem comandos Bash run_in_background, watches de Monitor e subagentes em fundo.
Tipos de Bloco de Conteúdo
ContentBlock
Tipo de união de todos os blocos de conteúdo.
TextBlock
Bloco de conteúdo de texto.
ThinkingBlock
Bloco de conteúdo de pensamento (para modelos com capacidade de pensamento).
ToolUseBlock
Bloco de solicitação de uso de ferramenta.
ToolResultBlock
Bloco de resultado de execução de ferramenta.
Tipos de Erro
ClaudeSDKError
Classe de exceção base para todos os erros do SDK.
CLINotFoundError
Levantado quando Claude Code CLI não está instalado ou não é encontrado.
CLIConnectionError
Levantado quando a conexão com Claude Code falha.
ProcessError
Levantado quando o processo Claude Code falha.
CLIJSONDecodeError
Levantado quando a análise JSON falha.
Tipos de Hook
Para um guia abrangente sobre o uso de hooks com exemplos e padrões comuns, veja o Guia de Hooks.HookEvent
Tipos de evento de hook suportados.
O SDK TypeScript suporta eventos de hook adicionais não disponíveis ainda em Python:
SessionStart, SessionEnd, Setup, TeammateIdle, TaskCompleted, ConfigChange, WorktreeCreate, WorktreeRemove, PostToolBatch e MessageDisplay.HookCallback
Definição de tipo para funções de callback de hook.
input: Entrada de hook fortemente tipada com uniões discriminadas baseadas emhook_event_name(vejaHookInput)tool_use_id: Identificador de uso de ferramenta opcional (para hooks relacionados a ferramentas)context: Contexto de hook com informações adicionais
HookJSONOutput que pode conter:
decision:"block"para bloquear a açãosystemMessage: Mensagem de aviso mostrada ao usuáriohookSpecificOutput: Dados de saída específicos do hook
HookContext
Informações de contexto passadas para callbacks de hook.
HookMatcher
Configuração para corresponder hooks a eventos ou ferramentas específicas.
HookInput
Tipo de união de todos os tipos de entrada de hook. O tipo real depende do campo hook_event_name.
BaseHookInput
Campos base presentes em todos os tipos de entrada de hook.
PreToolUseHookInput
Dados de entrada para eventos de hook PreToolUse.
PostToolUseHookInput
Dados de entrada para eventos de hook PostToolUse.
PostToolUseFailureHookInput
Dados de entrada para eventos de hook PostToolUseFailure. Chamado quando uma execução de ferramenta falha.
UserPromptSubmitHookInput
Dados de entrada para eventos de hook UserPromptSubmit.
StopHookInput
Dados de entrada para eventos de hook Stop.
SubagentStopHookInput
Dados de entrada para eventos de hook SubagentStop.
PreCompactHookInput
Dados de entrada para eventos de hook PreCompact.
NotificationHookInput
Dados de entrada para eventos de hook Notification.
SubagentStartHookInput
Dados de entrada para eventos de hook SubagentStart.
PermissionRequestHookInput
Dados de entrada para eventos de hook PermissionRequest. Permite que hooks manipulem decisões de permissão programaticamente.
HookJSONOutput
Tipo de união para valores de retorno de callback de hook.
SyncHookJSONOutput
Saída de hook síncrona com campos de controle e decisão.
Use
continue_ (com underscore) no código Python. É automaticamente convertido para continue quando enviado para o CLI.HookSpecificOutput
Um TypedDict contendo o nome do evento de hook e campos específicos do evento. A forma depende do valor hookEventName. Para detalhes completos sobre campos disponíveis por evento de hook, veja Controlar execução com hooks.
Uma união discriminada de tipos de saída específicos do evento. O campo hookEventName determina quais campos são válidos.
AsyncHookJSONOutput
Saída de hook assíncrona que adia a execução do hook.
Use
async_ (com underscore) no código Python. É automaticamente convertido para async quando enviado para o CLI.Exemplo de Uso de Hook
Este exemplo registra dois hooks: um que bloqueia comandos bash perigosos comorm -rf /, e outro que registra todo o uso de ferramenta para auditoria. O hook de segurança funciona apenas em comandos Bash (via matcher), enquanto o hook de registro funciona em todas as ferramentas.
Tipos de Entrada/Saída de Ferramenta
Documentação de schemas de entrada/saída para todas as ferramentas Claude Code integradas. Embora o SDK Python não exporte esses como tipos, eles representam a estrutura de entradas e saídas de ferramenta em mensagens.Agent
Nome da ferramenta:Agent (anteriormente Task, que ainda é aceito como alias)
Entrada:
AskUserQuestion
Nome da ferramenta:AskUserQuestion
Faz perguntas de esclarecimento ao usuário durante a execução. Veja Lidar com aprovações e entrada do usuário para detalhes de uso.
Entrada:
Bash
Nome da ferramenta:Bash
Entrada:
Monitor
Nome da ferramenta:Monitor
Executa uma fonte de fundo e entrega cada evento para Claude para que ele possa reagir sem polling: command executa um script e emite um evento por linha stdout, e ws abre um WebSocket e emite um evento por frame de texto. Forneça exatamente um de command ou ws.
Quando Monitor executa um comando, ele segue as mesmas regras de permissão que Bash; uma observação de WebSocket solicita aprovação separadamente. A fonte ws requer Claude Code v2.1.195 ou posterior. Veja a referência da ferramenta Monitor para comportamento e disponibilidade de provedor.
Entrada:
Edit
Nome da ferramenta:Edit
Entrada:
Read
Nome da ferramenta:Read
Entrada:
Write
Nome da ferramenta:Write
Entrada:
Glob
Nome da ferramenta:Glob
Entrada:
Grep
Nome da ferramenta:Grep
Entrada:
NotebookEdit
Nome da ferramenta:NotebookEdit
Entrada:
WebFetch
Nome da ferramenta:WebFetch
Entrada:
WebSearch
Nome da ferramenta:WebSearch
Entrada:
TodoWrite
Nome da ferramenta:TodoWrite
A partir do Claude Code v2.1.142,
TodoWrite está desabilitado por padrão. Use TaskCreate, TaskGet, TaskUpdate e TaskList em seu lugar. Veja Migrar para ferramentas Task para atualizar seu código de monitoramento, ou defina CLAUDE_CODE_ENABLE_TASKS=0 para reverter para TodoWrite.TaskCreate
Nome da ferramenta:TaskCreate
Entrada:
TaskUpdate
Nome da ferramenta:TaskUpdate
Entrada:
TaskGet
Nome da ferramenta:TaskGet
Entrada:
TaskList
Nome da ferramenta:TaskList
Entrada:
BashOutput
Nome da ferramenta:BashOutput
Entrada:
KillBash
Nome da ferramenta:KillBash
Entrada:
ExitPlanMode
Nome da ferramenta:ExitPlanMode
Entrada:
ListMcpResources
Nome da ferramenta:ListMcpResourcesTool
Entrada:
ReadMcpResource
Nome da ferramenta:ReadMcpResourceTool
Entrada:
Recursos Avançados com ClaudeSDKClient
Construindo uma Interface de Conversa Contínua
Usando Hooks para Modificação de Comportamento
Monitoramento de Progresso em Tempo Real
Uso de Exemplo
Operações básicas de arquivo (usando query)
Tratamento de erros
Modo de streaming com cliente
Usando ferramentas personalizadas com ClaudeSDKClient
Configuração de Sandbox
SandboxSettings
Configuração para comportamento de sandbox. Use isso para ativar sandboxing de comando e configurar restrições de rede programaticamente.
O sandbox depende do suporte de plataforma e, no Linux, de ferramentas como
bubblewrap e socat. Por padrão, quando enabled é True mas o sandbox não consegue iniciar, comandos executam sem sandbox com um aviso em stderr. Este padrão difere do SDK TypeScript, onde failIfUnavailable tem padrão true.Defina "failIfUnavailable": True nas suas configurações de sandbox para parar em vez disso. A chave ainda não está declarada em SandboxSettings, mas o SDK a encaminha para Claude Code, que a honra. query() então relata uma ResultMessage com subtype="error_during_execution" e a razão em errors. Observe esse subtipo em vez de esperar que query() lance antes de ceder mensagens.Exemplo de uso
SandboxNetworkConfig
Configuração específica de rede para modo sandbox. Essas configurações se aplicam a comandos Bash em sandbox quando enabled é True na SandboxSettings pai. Elas não restringem a ferramenta WebFetch, que usa regras de permissão em vez disso.
O proxy de sandbox integrado aplica a lista de permissões de rede com base no nome de host solicitado e não encerra ou inspeciona tráfego TLS, portanto técnicas como domain fronting podem potencialmente contorná-lo. Veja Limitações de segurança de Sandboxing para detalhes e Implantação segura para configurar um proxy que encerra TLS.
SandboxIgnoreViolations
Configuração para ignorar violações de sandbox específicas.
Fallback de Permissões para Comandos Sem Sandbox
QuandoallowUnsandboxedCommands está ativado, o modelo pode solicitar executar comandos fora do sandbox definindo dangerouslyDisableSandbox: True na entrada da ferramenta. Essas solicitações voltam para o sistema de permissões existente, significando que seu manipulador can_use_tool será invocado, permitindo que você implemente lógica de autorização personalizada.
excludedCommands vs allowUnsandboxedCommands:excludedCommands: Uma lista estática de comandos que sempre contornam o sandbox automaticamente (por exemplo,["docker"]). O modelo não tem controle sobre isso.allowUnsandboxedCommands: Permite que o modelo decida em tempo de execução se deve solicitar execução sem sandbox definindodangerouslyDisableSandbox: Truena entrada da ferramenta.
- Audite solicitações de modelo: Registre quando o modelo solicita execução sem sandbox
- Implemente listas de permissão: Apenas permita comandos específicos executarem sem sandbox
- Adicione fluxos de trabalho de aprovação: Exija autorização explícita para operações privilegiadas
Veja também
- SDK overview - Conceitos gerais do SDK
- TypeScript SDK reference - Documentação do SDK TypeScript
- CLI reference - Interface de linha de comando
- Common workflows - Guias passo a passo