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:
Use
ClaudeSDKClient para aplicações interativas, como interfaces de chat, ou quando a próxima ação depende da resposta de Claude.
Funções
Blocos de assinatura e fragmentos
async for / async with nus nesta página são ilustrativos. Para executá-los, envolva o corpo em async def main(): ... e chame asyncio.run(main()).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):
-
Classe TypedDict: um esquema tipado cujas chaves
NotRequiredsão deixadas fora derequired.- Python 3.11 e posterior: importe
TypedDicteNotRequireddetyping. - Python 3.10:
typingnão temNotRequired. ImporteTypedDicteNotRequireddetyping_extensions, que o SDK instala no Python 3.10.
- Python 3.11 e posterior: importe
Annotated[type, "description"] para definir a descrição do campo.
Retorna
Uma função decoradora que envolve a implementação da ferramenta e retorna uma instânciaSdkMcpTool.
Exemplo
ToolAnnotations
Dicas de comportamento para uma ferramenta, passadas como o argumento annotations de tool(). ToolAnnotations estende o mcp.types.ToolAnnotations do SDK MCP com um campo maxResultSizeChars, e você pode escrever cada dica em camelCase ou snake_case: ToolAnnotations(readOnlyHint=True) e ToolAnnotations(read_only_hint=True) são equivalentes. Para ler uma dica de volta a partir do objeto, use a grafia que o seu pacote mcp instalado declara: .readOnlyHint no mcp 1.x e .read_only_hint no 2.x, enquanto .maxResultSizeChars funciona em ambos. Você também pode passar um mcp.types.ToolAnnotations simples onde o SDK aceita anotações.
Os nomes snake_case e o campo maxResultSizeChars tipado requerem Python Agent SDK 0.2.140 ou posterior. As versões 0.1.31 a 0.2.139 re-exportam mcp.types.ToolAnnotations inalterado. Nas versões 0.1.55 a 0.2.139 você ainda pode passar maxResultSizeChars como um argumento de palavra-chave: a classe MCP aceita campos extras, e o SDK encaminha o valor para Claude Code.
Todos os campos são opcionais. Os clientes não devem confiar nas dicas 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.
fork_session()
Copia a transcrição de uma sessão para uma nova sessão, para que você possa levar a conversa em outra direção enquanto a original permanece inalterada. Para ramificar a partir de um ponto anterior da conversa, passe up_to_message_id. Síncrono.
Parâmetros
Retorna um
ForkSessionResult cujo session_id é o UUID da nova sessão. Passe-o como resume para continuar o fork. O fork não inclui os checkpoints de arquivo da sessão original, portanto você não pode retrocedê-lo para um checkpoint capturado antes do fork.
fork_session() lança:
ValueError:session_idouup_to_message_idnão é um UUID válidoValueError: a sessão não tem mensagens, ouup_to_message_idnão corresponde a nenhuma mensagem na transcriçãoFileNotFoundError: a sessão não pode ser encontrada
Exemplo
Crie um fork da sessão mais recente com um novo título e depois retome o fork. A sessão original mantém seu próprio histórico.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. Veja a comparação com query().
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
query() também aceita um iterável assíncrono de dicts de mensagem de usuário, para que você possa montar o prompt no momento do envio ou incluir blocos de conteúdo como imagens. Claude Code começa a responder à primeira mensagem gerada assim que ela chega, sem esperar que o iterável termine, e receive_response() para na ResultMessage que encerra essa resposta. Coloque tudo o que Claude deve ler antes de responder em uma mensagem, como este gerador faz, e emparelhe cada chamada query() com seu próprio loop receive_response().
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, 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 classes. Classes decoradas com @dataclass (como ResultMessage, AgentDefinition, TextBlock) são instâncias de objeto em tempo de execução e suportam acesso por atributo: msg.result. Classes definidas com TypedDict (como ThinkingConfigEnabled, McpStdioServerConfig, SyncHookJSONOutput) são dicts simples em tempo de execução e requerem acesso por chave: config["budget_tokens"], não config.budget_tokens. A sintaxe de chamada ClassName(field=value) funciona para ambas, mas apenas dataclasses produzem objetos com atributos.SdkMcpTool
Definição para uma ferramenta MCP do SDK criada com o decorador @tool.
Transport
Classe base abstrata para implementações de transporte personalizadas. Use isto para se comunicar com o processo Claude através de um canal personalizado (por exemplo, uma conexão remota em vez de um subprocesso 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 subprocesso 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 requisição no cliente Anthropic, em milissegundos. Padrão600000. Aplica-se ao loop principal e 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. Para execuções sem supervisão que precisam esperar por interrupções mais longas, definaCLAUDE_CODE_RETRY_WATCHDOG=1: ele tenta novamente erros de capacidade transitória indefinidamente e, no Claude Code v2.1.199 ou posterior, 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. Enquanto o watchdog de stream está ativo, o padrão éCLAUDE_STREAM_IDLE_TIMEOUT_MSmais 5 minutos, o que resulta em600000a menos que você aumente essa variável. Com o watchdog de stream desativado, o padrão é600000. Antes de v2.1.257, o padrão era sempre600000. O temporizador é redefinido em cada evento de stream. Em um travamento, Claude Code aborta o subagente e relata o travamento ao pai. Para um subagente em segundo plano, também marca a tarefa como falhada e anexa qualquer resultado parcial. -
CLAUDE_ENABLE_STREAM_WATCHDOGcomCLAUDE_STREAM_IDLE_TIMEOUT_MS: watchdog de stream que aborta a requisição quando os headers 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 desativá-lo.CLAUDE_STREAM_IDLE_TIMEOUT_MSpadrão é300000e é limitado a esse mínimo. Após o aborto, Tentativas automáticas cobre o que Claude Code faz, baseado em quão longe a resposta havia progredido. Enquanto o watchdog aguarda uma resposta que um gateway atrás deANTHROPIC_BASE_URLmantém aberta com pings keep-alive, um host que defineinclude_partial_messagescontinua recebendo mensagenspingStreamEvent. Leia esses frames como vivacidade em vez de fazer timeout da sessão no silêncio. Antes de v2.1.257, os frames paravam 5 minutos após o último evento de stream real.
OutputFormat
Configuração para validação de saída estruturada. Passe isto como um dict para o campo output_format em ClaudeAgentOptions:
SystemPromptPreset
Configuração para usar o prompt do sistema predefinido do Claude Code com adições opcionais.
SystemPromptCustom
Um prompt do sistema personalizado em forma de objeto, equivalente a passar uma string como system_prompt, que também pode definir snapshot. Requer claude-agent-sdk v0.2.153 ou posterior.
SystemPromptFile
Configuração para carregar um prompt do sistema personalizado de um arquivo em vez de passá-lo como uma string. O SDK mapeia isto para a flag CLI --system-prompt-file. Use a forma de arquivo quando o prompt é grande: o SDK passa um system_prompt string no argv do subprocesso CLI, que está sujeito a limites de comprimento de linha de comando do SO antes do SDK enviar qualquer requisiçã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 mais baixo.
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 e skills não está definido, query() carrega as mesmas configurações do sistema de arquivos que a CLI Claude Code: usuário, projeto e local. Com skills definido, a linha setting_sources descreve o padrão atual. Política gerenciada por endpoint é carregada em todos os casos; configurações gerenciadas por servidor são buscadas quando a sessão se autentica com uma credencial de organização em uma configuração elegível. Para mais informações, veja O que settingSources não controla.
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."project" em setting_sources. Veja Modificar prompts do sistema para como o carregamento de CLAUDE.md interage com as opções de prompt do sistema.
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 do usuário (
~/.claude/settings.json)
agents, allowed_tools, e settings sobrescrevem 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 wire compartilhado com o SDK TypeScript. Isto difere de ClaudeAgentOptions, que usa snake_case Python para campos de nível superior equivalentes como disallowed_tools e permission_mode. Como AgentDefinition é um dataclass, passar uma palavra-chave snake_case levanta um TypeError no tempo de construção.PermissionMode
Modos de permissão para controlar execução de ferramentas.
EffortLevel
Níveis de esforço para guiar 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 SDK para o prompt de permissão interativo: é invocado apenas quando o fluxo de avaliação de permissão se resolve em 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.
Uma regra de permissão não pré-aprova as ações que nenhum modo aprova automaticamente; veja Como permissões são avaliadas para qual delas chega ao callback e o que acontece em modo dontAsk e auto.
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 para adicionar, substituir ou remover em uma atualização de permissão.
ToolsPreset
Configuração de ferramentas predefinidas para usar o conjunto de ferramentas padrão do Claude Code.
ThinkingConfig
Controla comportamento de pensamento estendido. Uma união de três configurações:
O campo
display opcional 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. Claude Code não repassa o seu valor de display para alguns provedores, como Amazon Bedrock e Google Cloud’s Agent Platform. Nesses provedores, Opus 4.7 e posterior retornam saídas ThinkingBlock vazias mesmo quando você define display como "summarized".
Como estas são classes TypedDict, elas 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:
TaskBudget
Orçamento de tarefa do lado da API em tokens, usado com o campo task_budget em ClaudeAgentOptions.
Como isto é um
TypedDict, passe-o como um dict simples, como ClaudeAgentOptions(task_budget={"total": 50000}).
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 única 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.
ContextUsageResponse
Resposta de ClaudeSDKClient.get_context_usage(). Este é o mesmo payload que Claude Code renderiza para o comando /context em uma sessão interativa, então ao lado das contagens de token ele carrega campos de exibição como color e gridRows que Claude Code usa para desenhar a grade de uso /context.
Claude Code constrói este payload enviando várias requisições para a API de contagem de tokens. Estas requisições não aparecem no fluxo de mensagens, então rastreamento de custo que lê o fluxo não as verá. Na API Anthropic, contagem de tokens não é cobrada.
ContextUsageCategory carrega name, tokens, color, e uma flag isDeferred opcional. totalTokens é o uso de contexto atual da sessão, e maxTokens é a janela contra a qual o uso é medido. Essa janela é a janela de contexto do modelo, ou a janela de compactação automática mais baixa quando uma se aplica, e rawMaxTokens carrega o mesmo valor que maxTokens. apiUsage contém o uso da resposta de API mais recente, não um total em execução para a sessão. Claude Code deixa as chaves opcionais deferredBuiltinTools, systemTools, e systemPromptSections não definidas, então espere que elas estejam ausentes mesmo que o tipo as declare.
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.
O SDK passa
tool_use_result através da CLI sem modificação. Para uma ferramenta em um servidor MCP externo cujo resultado contém blocos resource_link, o dict tem uma chave resourceLinks contendo uma lista de dicts com as chaves do tipo TypeScript SDKMcpResourceLink. Claude recebe cada link como uma linha de texto no resultado da ferramenta. Para renderizar os arquivos que o servidor retornou, leia resourceLinks em vez de analisar esse texto. A chave resourceLinks requer Python Agent SDK 0.2.150 ou posterior e Claude Code v2.1.257 ou posterior; a CLI agrupada com essa versão do SDK satisfaz o requisito do Claude Code.
A CLI omite a chave quando o resultado não tem links e em resultados de subagentes. A CLI mantém no máximo 50 links por resultado e para de adicionar links quando a lista atinge 64 KiB de JSON serializado. Uma ferramenta que você define em processo com tool() nunca produz a chave, porque o SDK achata seus blocos resource_link em texto antes da CLI ver o resultado.
AssistantMessage
Mensagem de resposta do assistente com blocos de conteúdo.
AssistantMessageError
Possíveis tipos de erro para mensagens do assistente.
max_output_tokens. O SDK passa o valor através sem modificação, então trate strings fora desta lista da forma que você trata unknown. O tipo TypeScript SDKAssistantMessageError lista o conjunto completo de valores que a CLI pode emitir.
SystemMessage
Mensagem do sistema com metadados.
SystemMessage. Para acompanhar a sessão entre turnos, defina CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1 e leia message.data["state"] em cada mensagem cujo subtype seja session_state_changed. SDKSessionStateChangedMessage lista os estados que ela pode carregar. Itere com receive_messages() para lê-los: receive_response() para no ResultMessage, e uma mensagem session_state_changed pode vir depois desse resultado.
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 sobre como a conversa terminou:
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_*.terminal_reason: por que o loop de consulta terminou, como"completed","max_turns","api_error","aborted_streaming"ou"aborted_tools". Um valor de"aborted_streaming"ou"aborted_tools"significa que o turno foi abortado antes de ser concluído. As causas comuns sãointerrupt()e um callback de permissão retornandoPermissionResultDenycominterrupt=True.Noneem versões da CLI que antecedem o campo, em resultados de comandos locais como/voiceou/usage, que contornam o loop de consulta, ou em resultados de erro sintetizados emitidos quando a sessão falha fatalmente. Espelha oSDKResultMessage.terminal_reasondo SDK TypeScript, que lista o conjunto completo de valores.origin: origem da mensagem do usuário que acionou este turno. Em modo de entrada de streaming, verifique isso para distinguir o resultado do seu próprio prompt, ondeoriginéNoneou{"kind": "human"}, do resultado de um turno injetado, como uma notificação de tarefa em segundo plano. Requer Python Agent SDK 0.2.137 ou posterior.
ResultMessage por notificação, em ordem, cada um com um origin cujo kind é "task-notification". Todos, exceto o último, têm num_turns definido como 0 e um result vazio, e o último carrega o turno que responde a todas elas.
O dict usage cobre apenas o loop do agente principal e exclui subagentes e outras chamadas de modelo aninhadas ou auxiliares. Em modo de entrada de streaming, os valores são por turno. Prefira model_usage para contabilidade de token e custo. O dict usage contém as seguintes chaves quando presentes:
O dict
model_usage mapeia nomes de modelo para uso por modelo. Ele cobre cada chamada de modelo feita através do pipeline de consulta: o loop principal, subagentes e chamadas internas como compactação e agentes Workflow. Chamadas auxiliares fora desse pipeline, como o classificador de permissão e solicitações de contagem de tokens, são excluídas de model_usage. Trate model_usage como uma estimativa, não como um extrato de faturamento.
Em modo de entrada de streaming, model_usage e total_cost_usd são cumulativos entre turnos, então leia o resultado mais recente em vez de somar entre resultados. Uma chamada que retoma uma sessão também conta os totais restaurados das chamadas anteriores da sessão. Veja Rastrear custos em modo de entrada de streaming para redefinições e Recuperar totais após uma falha de sessão para resultados zerados.
Cada valor em model_usage é um TypedDict ModelUsage, importado via from claude_agent_sdk.types import ModelUsage. Suas chaves usam camelCase porque o SDK passa o valor através 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.
ConversationResetMessage
Emitido quando a conversa é substituída sem encerrar a conexão, como após /clear. Veja Rastrear custos em modo de entrada de streaming para como uma redefinição afeta os totais em execução em objetos ResultMessage posteriores. Requer Python Agent SDK 0.2.137 ou posterior.
TaskStartedMessage
Emitido quando uma tarefa em segundo plano começa. Uma tarefa em segundo plano é qualquer coisa rastreada fora do turno principal: um comando Bash em segundo plano, 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 em segundo plano.
TaskProgressMessage
Emitido periodicamente com atualizações de progresso para uma tarefa em segundo plano em execução.
TaskNotificationMessage
Emitido quando uma tarefa em segundo plano é concluída, falha ou é parada. Tarefas em segundo plano incluem comandos Bash run_in_background, watches de Monitor e subagentes em segundo plano.
Quando a CLI move uma chamada de ferramenta MCP longa para segundo plano, o resultado da ferramenta para essa chamada contém apenas um espaço reservado e o resultado real da chamada chega nesta mensagem. Em uma notificação
"completed" para tal chamada, a CLI adiciona uma chave resource_links listando os arquivos que a ferramenta retornou por referência, com as mesmas entradas e limites que a chave resourceLinks em UserMessage.tool_use_result. A chave resource_links requer Python Agent SDK 0.2.150 ou posterior e Claude Code v2.1.257 ou posterior; a CLI agrupada com essa versão do SDK satisfaz o requisito do Claude Code.
A dataclass não tem campo para resource_links. Leia-o do dict data que a mensagem herda de SystemMessage: message.data.get("resource_links"). Corresponda a notificação à chamada com tool_use_id. A CLI omite a chave quando o resultado não tinha links e em notificações para tarefas que não são chamadas de ferramenta MCP.
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
Os tipos abaixo definem o que seu código captura. Para entradas com chave nas mensagens de erro que esses tipos levantam, com a causa e correção para cada um, consulte Solução de problemas.ClaudeSDKError
Classe de exceção base para todos os erros do SDK.
query() de uma única tentativa termina com um resultado de erro, por exemplo um erro de limite de turnos, o SDK levanta um ResultError.
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.
ResultError
Levantado quando o processo Claude Code sai porque a execução terminou com uma mensagem de resultado de erro, como um erro de limite de turnos ou um erro de API. ResultError é uma subclasse de ProcessError, portanto um manipulador except ProcessError existente também o captura. Seus atributos carregam os campos dessa mensagem de resultado, para que você possa fazer branch com base no motivo da falha da execução sem analisar o texto da mensagem. Requer Python Agent SDK 0.2.140 ou posterior.
terminal_reason antes de subtype. Quando a requisição final falha, como em um erro de API, Claude Code relata subtype "success" com a causa em terminal_reason, por exemplo "api_error"; quando um limite que você definiu encerra a execução, como max_turns ou max_budget_usd, ele relata um subtipo error_*.
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. Veja a tabela de disponibilidade de hooks para suporte por SDK.
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.
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
Uma união discriminada de tipos de saída específicos do evento TypedDict. O campo hookEventName determina quais campos são válidos. Para detalhes completos sobre campos disponíveis por evento de hook, veja Controlar execução com hooks.
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 esquemas de entrada/saída para 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. Cada saída mostrada é o valor que você lê deUserMessage.tool_use_result para essa ferramenta. Os nomes de chaves aparecem exatamente como Claude Code os emite. Uma chave anotada com | None com um comentário “presente quando” ou “opcional” é omitida quando não se aplica.
Agent
Nome da ferramenta:Agent. O nome anterior Task ainda é aceito como alias, e a lista tools na SystemMessage de inicialização relata essa ferramenta como Task para compatibilidade com versões anteriores.
Entrada:
"completed"):
"async_launched"):
"remote_launched"):
status: "completed" para tarefas concluídas, "async_launched" para tarefas em segundo plano, e "remote_launched" para tarefas que Claude Code despachou para uma sessão na nuvem, onde sessionUrl vincula a essa sessão e taskId a identifica. Se Claude Code manteve o worktree isolado do subagente, worktreePath na variante completed é onde encontrá-lo, e worktreeBranch é seu branch quando Claude Code criou o worktree com git.
Na variante completed, resolvedModel nomeia o modelo em que o subagente iniciou, que pode diferir do model de entrada solicitado quando availableModels ou outra substituição se aplica. Este campo requer Claude Code v2.1.174 ou posterior. Na variante async_launched, resolvedModel nomeia o modelo em uso quando o agente se moveu para o segundo plano, então uma troca que aconteceu antes do backgrounding é refletida lá. O campo modelsUsed em ambas as variantes lista os modelos usados em ordem, com repetições consecutivas colapsadas; é definido apenas quando o modelo foi trocado durante a execução. modelsUsed e o comportamento de resolvedModel no tempo de backgrounding requerem Claude Code v2.1.212 ou posterior.
Claude Code preenche usage e totalTokens da requisição final da API do subagente, não de toda a execução. Quando presente, thinking_tokens sob output_tokens_details em usage é o número de tokens de saída dessa requisição que eram tokens de pensamento. A chave output_tokens_details requer Python SDK v0.2.136 ou posterior, que agrupa Claude Code v2.1.228. A chave fallback_credit requer Python SDK v0.2.162 ou posterior, que agrupa Claude Code v2.1.285.
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
Para o que define o limite do primeiro plano, veja Limites de timeout e saída. Para o limite de tempo em segundo plano, veja Limite de tempo para comandos em segundo plano.
Entrada:
Monitor
Nome da ferramenta:Monitor
Executa uma fonte em segundo plano 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:
type para diferenciá-las.
Saída (type: "text"):
"image"):
"notebook"):
"pdf"):
"parts"):
"file_unchanged"):
Write
Nome da ferramenta:Write
Entrada:
Glob
Nome da ferramenta:Glob
Entrada:
totalMatches e countIsComplete requerem Claude Code v2.1.191 ou posterior.
Grep
Nome da ferramenta:Grep
Entrada:
output_mode.
totalFiles requer Claude Code v2.1.208 ou posterior. totalLines requer Claude Code v2.1.210 ou posterior.
NotebookEdit
Nome da ferramenta:NotebookEdit
Entrada:
WebFetch
Nome da ferramenta:WebFetch
Entrada:
WebSearch
Nome da ferramenta:WebSearch
Entrada:
TodoWrite
Nome da ferramenta:TodoWrite
As seguintes ferramentas estão disponíveis por padrão apenas em Claude Opus 4.7, Claude Sonnet 4.6, Claude Haiku 4.5 e modelos anteriores. Em todos os outros modelos, incluindo IDs de modelo que Claude Code não reconhece, elas não estão disponíveis a menos que você opte por usá-las:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
TodoWrite em vez disso quando você define CLAUDE_CODE_ENABLE_TASKS=0.Este conjunto padrão se aplica em Claude Code v2.1.268 e posterior, que o TypeScript Agent SDK agrupa a partir de v0.3.268.Veja Disponibilidade de modelo para optar por participar.TaskCreate
Nome da ferramenta:TaskCreate
Entrada:
TaskUpdate
Nome da ferramenta:TaskUpdate
Entrada:
TaskGet
Nome da ferramenta:TaskGet
Entrada:
TaskList
Nome da ferramenta:TaskList
Entrada:
TaskOutput
Removido em Claude Code v2.1.277. Anteriormente recuperava saída de uma tarefa em segundo plano em execução ou concluída, comBashOutput aceito como alias; Claude lê o arquivo de saída de uma tarefa em segundo plano com Read em seu lugar.
Uma entrada disallowed_tools ou uma regra de negação que ainda nomeia qualquer um dos nomes é ignorada sem um aviso.
TaskStop
Nome da ferramenta:TaskStop. Os nomes anteriores KillShell e KillBash ainda são aceitos como aliases.
Entrada:
ExitPlanMode
Nome da ferramenta:ExitPlanMode
Entrada:
ListMcpResources
Nome da ferramenta:ListMcpResourcesTool
Entrada:
tool_use_result contém uma list para essa ferramenta.
Saída:
ReadMcpResource
Nome da ferramenta:ReadMcpResourceTool
Entrada:
Construir uma interface de conversa contínua
O exemplo a seguir mantém umClaudeSDKClient conectado entre turnos, para que Claude se lembre das mensagens anteriores. Digite new para desconectar e reconectar para uma nova sessão, ou exit para encerrar a conversa.
Tratamento de erros
O exemplo a seguir envolve uma chamadaquery() em manipuladores para quatro dos tipos de erro que o SDK levanta.
Este exemplo captura ResultError, que requer Python Agent SDK 0.2.140 ou posterior.
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. O SDK encaminha failIfUnavailable para o Claude Code junto com os campos declarados de SandboxSettings. query() então relata uma ResultMessage com subtype="error_during_execution" e a razão em errors. Como esta é uma chamada query() de um único disparo, o SDK lança após ceder esse resultado de erro, então envolva o loop em um bloco try para continuar além dele. Veja Lidar com o resultado para o contrato de erro.denyWrite nas suas configurações de sandbox, como "filesystem": {"denyWrite": ["/home/user/project/.env"]}. O SDK encaminha filesystem para o Claude Code junto com os campos declarados de SandboxSettings. Depois que o sandbox inicia, ele bloqueia gravações em cada caminho absoluto que você listou.
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.
Suas entradas excludedCommands em vez disso contornam o sandbox com nenhum envolvimento do modelo; sandbox.excludedCommands cobre quando uma entrada se aplica.
O exemplo a seguir registra cada solicitação sem sandbox e a nega a menos que sua própria lógica de autorização a permita:
Veja também
- SDK overview - Conceitos gerais do SDK
- TypeScript SDK reference - Documentação do SDK TypeScript
- Custom tools - Defina ferramentas MCP em processo para Claude chamar
- CLI reference - Interface de linha de comando
- Common workflows - Guias passo a passo