Skip to main content

Instalação

Instale o pacote em um ambiente virtual. Em instalações recentes do Debian, Ubuntu e Homebrew Python, executar pip install contra o Python do sistema falha com error: externally-managed-environment.
Para uv, Windows PowerShell e configuração de chave de API, consulte Configuração no guia de início rápido do Agent SDK.

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 um AsyncIterator[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

  1. Mapeamento de tipo simples (recomendado):
  2. Formato JSON Schema (para validação complexa):
  3. Classe TypedDict: um esquema tipado cujas chaves NotRequired são deixadas fora de required.
    • Python 3.11 e posterior: importe TypedDict e NotRequired de typing.
    • Python 3.10: typing não tem NotRequired. Importe TypedDict e NotRequired de typing_extensions, que o SDK instala no Python 3.10.
Nas formas de mapeamento simples e TypedDict, envolva um tipo em 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ância SdkMcpTool.

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 objeto McpSdkServerConfig 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 por last_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 em SDKSessionInfo.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. Passe None 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_id ou up_to_message_id não é um UUID válido
  • ValueError: a sessão não tem mensagens, ou up_to_message_id não corresponde a nenhuma mensagem na transcrição
  • FileNotFoundError: 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).
Esta é uma API interna de baixo nível. A interface pode mudar em versões futuras. Implementações personalizadas devem ser atualizadas para corresponder a qualquer mudança de interface.
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 de ClaudeAgentOptions.env:
  • API_TIMEOUT_MS: timeout por requisição no cliente Anthropic, em milissegundos. Padrão 600000. Aplica-se ao loop principal e todos os subagentes.
  • CLAUDE_CODE_MAX_RETRIES: máximo de tentativas de API. Padrão 10, limitado a 15. Cada tentativa obtém sua própria janela API_TIMEOUT_MS. Para execuções sem supervisão que precisam esperar por interrupções mais longas, defina CLAUDE_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 para 300 e 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_MS mais 5 minutos, o que resulta em 600000 a 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 sempre 600000. 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_WATCHDOG com CLAUDE_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; defina CLAUDE_ENABLE_STREAM_WATCHDOG=0 para desativá-lo. CLAUDE_STREAM_IDLE_TIMEOUT_MS padrão é 300000 e é 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 de ANTHROPIC_BASE_URL mantém aberta com pings keep-alive, um host que define include_partial_messages continua recebendo mensagens ping StreamEvent. 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

Quando setting_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.
Carregar apenas fontes de configuração específicas:
Aplicações apenas SDK:
Para carregar instruções de projeto CLAUDE.md, inclua "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):
  1. Configurações locais (.claude/settings.local.json)
  2. Configurações de projeto (.claude/settings.json)
  3. Configurações do usuário (~/.claude/settings.json)
Opções programáticas como 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.
O callback recebe:
  • tool_name: Nome da ferramenta sendo chamada
  • input_data: Os parâmetros de entrada da ferramenta
  • context: Um ToolPermissionContext com informações adicionais
Retorna um 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.
Use com o campo betas em ClaudeAgentOptions para ativar recursos beta.
Na Claude API, o beta context-1m-2025-08-07 foi retirado para Claude Sonnet 4.5 e Claude Sonnet 4. Se você ainda o passar com qualquer um desses modelos, requisições que excedem a janela de contexto padrão de 200K tokens retornam um erro, então remova-o de betas. Para executar uma sessão com uma janela de contexto de 1M tokens, defina model como um modelo que é executado com a janela de 1M por padrão, como claude-sonnet-5-5 ou claude-opus-5-5. Para um modelo que alcança 1M apenas por meio de sua variante [1m], anexe o sufixo ao ID do modelo, como em claude-opus-4-6[1m].

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.
Cada entrada 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:
Para informações completas sobre criação e uso de plugins, veja Plugins.

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.
O processo CLI subjacente pode emitir tipos de erro que este Literal não lista, como 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.
Subtipos que não têm uma dataclass própria chegam como 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.
O campo 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: True quando a conversa terminou em um estado de erro. Sempre True nos subtipos error_*. Em subtype="success" é True quando 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. None quando o turno terminou sem um. Preenchido apenas em subtype="success".
  • result: texto da mensagem final do assistente em subtype="success", ou None nos subtipos error_*. Quando subtype="success" e is_error=True, isso contém a string de erro da API se uma estiver disponível mas pode estar vazio, então verifique api_error_status e o conteúdo anterior de AssistantMessage para detalhes.
  • errors: strings de erro no nível do loop, como a mensagem de máximo de turnos. Preenchido apenas nos subtipos error_*.
  • 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ão interrupt() e um callback de permissão retornando PermissionResultDeny com interrupt=True. None em versões da CLI que antecedem o campo, em resultados de comandos locais como /voice ou /usage, que contornam o loop de consulta, ou em resultados de erro sintetizados emitidos quando a sessão falha fatalmente. Espelha o SDKResultMessage.terminal_reason do 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, onde origin é None ou {"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.
Quando várias tarefas em segundo plano terminam em momentos próximos, o Claude Code pode responder às notificações delas em um único turno, em vez de um turno para cada. Você ainda recebe um 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.
Quando uma 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.
Para distinguir falhas, verifique 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.
Parâmetros:
  • input: Entrada de hook fortemente tipada com uniões discriminadas baseadas em hook_event_name (veja HookInput)
  • tool_use_id: Identificador de uso de ferramenta opcional (para hooks relacionados a ferramentas)
  • context: Contexto de hook com informações adicionais
Retorna um 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 como rm -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ê de UserMessage.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:
Inicia um novo agente para lidar com tarefas complexas e multi-etapas autonomamente. Saída (status: "completed"):
Saída (status: "async_launched"):
Saída (status: "remote_launched"):
Retorna o resultado do subagente. A saída é discriminada no campo 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:
Saída:

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:
Saída:

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:
Saída:

Edit

Nome da ferramenta: Edit Entrada:
Saída:

Read

Nome da ferramenta: Read Entrada:
A saída assume uma das seguintes formas dependendo do que Claude leu. Verifique a chave type para diferenciá-las. Saída (type: "text"):
Saída (type: "image"):
Saída (type: "notebook"):
Saída (type: "pdf"):
Saída (type: "parts"):
Saída (type: "file_unchanged"):

Write

Nome da ferramenta: Write Entrada:
Saída:

Glob

Nome da ferramenta: Glob Entrada:
Saída:
totalMatches e countIsComplete requerem Claude Code v2.1.191 ou posterior.

Grep

Nome da ferramenta: Grep Entrada:
Saída:
Grep retorna essa forma de dict em cada modo de saída. Quais chaves opcionais estão presentes depende de 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:
Saída:

WebFetch

Nome da ferramenta: WebFetch Entrada:
Saída:

WebSearch

Nome da ferramenta: WebSearch Entrada:
Saída:

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:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
Onde quer que as ferramentas estejam disponíveis, Claude Code fornece as quatro ferramentas Task, ou 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.
Entrada:
Saída:

TaskCreate

Nome da ferramenta: TaskCreate Entrada:
Saída:

TaskUpdate

Nome da ferramenta: TaskUpdate Entrada:
Saída:

TaskGet

Nome da ferramenta: TaskGet Entrada:
Saída:

TaskList

Nome da ferramenta: TaskList Entrada:
Saída:

TaskOutput

Removido em Claude Code v2.1.277. Anteriormente recuperava saída de uma tarefa em segundo plano em execução ou concluída, com BashOutput 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:
Saída:

ExitPlanMode

Nome da ferramenta: ExitPlanMode Entrada:
Saída:

ListMcpResources

Nome da ferramenta: ListMcpResourcesTool Entrada:
O resultado é uma lista em vez de um dict, então tool_use_result contém uma list para essa ferramenta. Saída:

ReadMcpResource

Nome da ferramenta: ReadMcpResourceTool Entrada:
Saída:

Construir uma interface de conversa contínua

O exemplo a seguir mantém um ClaudeSDKClient 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 chamada query() 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.
Para impedir que comandos em sandbox gravem em um arquivo, liste seu caminho absoluto em 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

Segurança de socket Unix: A opção allowUnixSockets pode conceder acesso a serviços de sistema que alcançam fora do sandbox. Por exemplo, permitir /var/run/docker.sock efetivamente concede acesso completo ao sistema host através da API Docker, contornando isolamento de sandbox. Apenas permita sockets Unix que são estritamente necessários e entenda as implicações de segurança de cada um.

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

Quando allowUnsandboxedCommands 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:
Comandos executando com dangerouslyDisableSandbox: True têm acesso completo ao sistema. Certifique-se de que seu manipulador can_use_tool valida essas solicitações cuidadosamente.Se permission_mode está definido para bypassPermissions e allowUnsandboxedCommands está ativado, o modelo pode autonomamente executar comandos fora do sandbox sem prompts de aprovação, além das ações que nenhum modo auto-aprova. Esta combinação efetivamente permite que o modelo escape do isolamento de sandbox silenciosamente.

Veja também