Instalação
Escolhendo entre query() e ClaudeSDKClient
O SDK Python fornece duas maneiras de interagir com Claude Code:
Comparação Rápida
| Recurso | query() | ClaudeSDKClient |
|---|---|---|
| Sessão | Cria nova sessão a cada vez | Reutiliza a mesma sessão |
| Conversa | Troca única | Múltiplas trocas no mesmo contexto |
| Conexão | Gerenciada automaticamente | Controle manual |
| Entrada em Streaming | ✅ Suportado | ✅ Suportado |
| Interrupções | ❌ Não suportado | ✅ Suportado |
| Hooks | ❌ Não suportado | ✅ Suportado |
| Ferramentas Personalizadas | ❌ Não suportado | ✅ Suportado |
| Continuar Chat | ❌ Nova sessão a cada vez | ✅ Mantém conversa |
| Caso de Uso | Tarefas pontuais | Conversas contínuas |
Quando Usar query() (Nova Sessão a Cada Vez)
Melhor para:
- Perguntas pontuais 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 a 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. 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.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
prompt | str | AsyncIterable[dict] | O prompt de entrada como uma string ou iterável assíncrono para modo de streaming |
options | ClaudeAgentOptions | None | Objeto de configuração opcional (padrão para ClaudeAgentOptions() se None) |
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
| Parâmetro | Tipo | Descrição |
|---|---|---|
name | str | Identificador único para a ferramenta |
description | str | Descrição legível por humanos do que a ferramenta faz |
input_schema | type | dict[str, Any] | Schema definindo os parâmetros de entrada da ferramenta (veja abaixo) |
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
create_sdk_mcp_server()
Cria um servidor MCP em processo que é executado dentro de sua aplicação Python.
Parâmetros
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
name | str | - | Identificador único para o servidor |
version | str | "1.0.0" | String de versão do servidor |
tools | list[SdkMcpTool[Any]] | None | None | Lista de funções de ferramenta criadas com decorador @tool |
Retorna
Retorna um objetoMcpSdkServerConfig que pode ser passado para ClaudeAgentOptions.mcp_servers.
Exemplo
Classes
ClaudeSDKClient
Mantém uma sessão de conversa através de 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 através de múltiplas chamadas
query() - Mesma Conversa: Claude se lembra de mensagens anteriores na sessão
- Suporte a Interrupção: Pode parar Claude no meio da execução
- 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 Personalizadas e Hooks: Suporta ferramentas personalizadas (criadas com decorador
@tool) e hooks
Métodos
| Método | Descrição |
|---|---|
__init__(options) | Inicializa o cliente com configuração opcional |
connect(prompt) | Conecta a Claude com um prompt inicial opcional ou fluxo de mensagem |
query(prompt, session_id) | Envia uma nova solicitação em modo de streaming |
receive_messages() | Recebe todas as mensagens de Claude como um iterador assíncrono |
receive_response() | Recebe mensagens até e incluindo uma ResultMessage |
interrupt() | Envia sinal de interrupção (funciona apenas em modo de streaming) |
disconnect() | Desconecta de Claude |
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 completar 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
Exemplo - Controle de permissão avançado
Tipos
SdkMcpTool
Definição para uma ferramenta SDK MCP criada com o decorador @tool.
| Propriedade | Tipo | Descrição |
|---|---|---|
name | str | Identificador único para a ferramenta |
description | str | Descrição legível por humanos |
input_schema | type[T] | dict[str, Any] | Schema para validação de entrada |
handler | Callable[[T], Awaitable[dict[str, Any]]] | Função assíncrona que manipula a execução da ferramenta |
ClaudeAgentOptions
Dataclass de configuração para consultas Claude Code.
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
allowed_tools | list[str] | [] | Lista de nomes de ferramentas permitidas |
system_prompt | str | SystemPromptPreset | None | None | Configuração de prompt do sistema. Passe uma string para prompt personalizado, ou use {"type": "preset", "preset": "claude_code"} para o prompt do sistema Claude Code. Adicione "append" para estender o preset |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | Configurações de servidor MCP ou caminho para arquivo de configuração |
permission_mode | PermissionMode | None | None | Modo de permissão para uso de ferramentas |
continue_conversation | bool | False | Continuar a conversa mais recente |
resume | str | None | None | ID de sessão para retomar |
max_turns | int | None | None | Máximo de turnos de conversa |
disallowed_tools | list[str] | [] | Lista de nomes de ferramentas não permitidas |
model | str | None | None | Modelo Claude a usar |
permission_prompt_tool_name | str | None | None | Nome da ferramenta MCP para prompts de permissão |
cwd | str | Path | None | None | Diretório de trabalho atual |
settings | str | None | None | Caminho para arquivo de configurações |
add_dirs | list[str | Path] | [] | Diretórios adicionais que Claude pode acessar |
env | dict[str, str] | {} | Variáveis de ambiente |
extra_args | dict[str, str | None] | {} | Argumentos CLI adicionais para passar diretamente para a CLI |
max_buffer_size | int | None | None | Máximo de bytes ao fazer buffer da saída stdout da CLI |
debug_stderr | Any | sys.stderr | Descontinuado - Objeto semelhante a arquivo para saída de depuração. Use callback stderr em vez disso |
stderr | Callable[[str], None] | None | None | Função de callback para saída stderr da CLI |
can_use_tool | CanUseTool | None | None | Função de callback de permissão de ferramenta |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | Configurações de hook para interceptar eventos |
user | str | None | None | Identificador de usuário |
include_partial_messages | bool | False | Incluir eventos de streaming de mensagens parciais |
fork_session | bool | False | Ao retomar com resume, fazer fork para um novo ID de sessão em vez de continuar a sessão original |
agents | dict[str, AgentDefinition] | None | None | Subagentes definidos programaticamente |
plugins | list[SdkPluginConfig] | [] | Carregar plugins personalizados de caminhos locais. Veja Plugins para detalhes |
setting_sources | list[SettingSource] | None | None (sem configurações) | Controlar quais configurações do sistema de arquivos carregar. Quando omitido, nenhuma configuração é carregada. Nota: Deve incluir "project" para carregar arquivos CLAUDE.md |
SystemPromptPreset
Configuração para usar o prompt do sistema preset Claude Code com adições opcionais.
| Campo | Obrigatório | Descrição |
|---|---|---|
type | Sim | Deve ser "preset" para usar um prompt do sistema preset |
preset | Sim | Deve ser "claude_code" para usar o prompt do sistema Claude Code |
append | Não | Instruções adicionais para anexar ao prompt do sistema preset |
SettingSource
Controla quais fontes de configuração baseadas em sistema de arquivos o SDK carrega configurações.
| Valor | Descrição | Localização |
|---|---|---|
"user" | Configurações globais do usuário | ~/.claude/settings.json |
"project" | Configurações de projeto compartilhadas (controladas por versão) | .claude/settings.json |
"local" | Configurações de projeto local (gitignored) | .claude/settings.local.json |
Comportamento padrão
Quandosetting_sources é omitido ou None, o SDK não carrega nenhuma configuração do sistema de arquivos. Isso fornece isolamento para aplicações SDK.
Por que usar setting_sources?
Carregar todas as configurações do sistema de arquivos (comportamento legado):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, allowed_tools) sempre substituem configurações do sistema de arquivos.
AgentDefinition
Configuração para um subagente definido programaticamente.
| Campo | Obrigatório | Descrição |
|---|---|---|
description | Sim | Descrição em linguagem natural de quando usar este agente |
tools | Não | Array de nomes de ferramentas permitidas. Se omitido, herda todas as ferramentas |
prompt | Sim | O prompt do sistema do agente |
model | Não | Substituição de modelo para este agente. Se omitido, usa o modelo principal |
PermissionMode
Modos de permissão para controlar a execução de ferramentas.
McpSdkServerConfig
Configuração para servidores MCP SDK criados com create_sdk_mcp_server().
McpServerConfig
Tipo de união para configurações de servidor MCP.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
SdkPluginConfig
Configuração para carregar plugins no SDK.
| Campo | Tipo | Descrição |
|---|---|---|
type | Literal["local"] | Deve ser "local" (apenas plugins locais atualmente suportados) |
path | str | Caminho absoluto ou relativo para o diretório do plugin |
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.
SystemMessage
Mensagem do sistema com metadados.
ResultMessage
Mensagem de resultado final com informações de custo e uso.
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
HookEvent
Tipos de eventos de hook suportados. Observe que devido a limitações de configuração, o SDK Python não suporta hooks SessionStart, SessionEnd e Notification.
HookCallback
Definição de tipo para funções de callback de hook.
input_data: Dados de entrada específicos do hook (veja documentação de hook)tool_use_id: Identificador de uso de ferramenta opcional (para hooks relacionados a ferramentas)context: Contexto de hook com informações adicionais
decision:"block"para bloquear a açãosystemMessage: Mensagem do sistema para adicionar à transcriçãohookSpecificOutput: 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.
Exemplo de Uso de Hook
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 estes como tipos, eles representam a estrutura de entradas e saídas de ferramentas em mensagens.Task
Nome da ferramenta:Task
Entrada:
Bash
Nome da ferramenta:Bash
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
Entrada:
BashOutput
Nome da ferramenta:BashOutput
Entrada:
KillBash
Nome da ferramenta:KillBash
Entrada:
ExitPlanMode
Nome da ferramenta:ExitPlanMode
Entrada:
ListMcpResources
Nome da ferramenta:ListMcpResources
Entrada:
ReadMcpResource
Nome da ferramenta:ReadMcpResource
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
Exemplo de Uso
Operações básicas de arquivo (usando query)
Tratamento de erros
Modo de streaming com cliente
Usando ferramentas personalizadas com ClaudeSDKClient
Veja também
- Guia do SDK Python - Tutorial e exemplos
- Visão geral do SDK - Conceitos gerais do SDK
- Referência do SDK TypeScript - Documentação do SDK TypeScript
- Referência da CLI - Interface de linha de comando
- Fluxos de trabalho comuns - Guias passo a passo