pip install claude-code-sdk-pyPré-requisitos:
- Python 3.10+
- Node.js
- Claude Code:
sudo npm install -g @anthropic-ai/claude-code
- Clone o repositório e navegue até a pasta:
cd /home/codable/terminal/claude-code-sdk-python- Crie um ambiente virtual Python:
python3 -m venv venv- Ative o ambiente virtual e instale o SDK:
source venv/bin/activate
pip install -e .- Teste a instalação:
python -m src "Olá, Claude!"O SDK oferece duas interfaces de linha de comando:
Execução direta que não trava após responder. Ideal para scripts e automação.
cd wrappers_cli
chmod +x claude
./claude "Qual é a capital do Brasil?"CLI completo com modos interativo, chat e ferramentas avançadas.
# Modo interativo
python -m src
# Query única
python -m src "Sua pergunta"
# Modo chat com contexto
python -m src --chat
# Com ferramentas específicas
python -m src --tools Read,Write "Leia o arquivo config.json"Veja mais detalhes em wrappers_cli/README.md
Problema: O arquivo types.py do projeto conflitava com o módulo types padrão do Python, causando erro de importação circular.
Solução:
- Renomear
types.pyparasdk_types.py - Atualizar todas as importações no projeto:
find src -name "*.py" -exec sed -i 's/from \.types import/from .sdk_types import/g; s/from \.\.types import/from ..sdk_types import/g' {} \;Problema: pip install -e . falhava sem ambiente virtual.
Solução: Criar e usar um ambiente virtual Python isolado.
Problema: ImportError: attempted relative import with no known parent package
Solução: Executar como módulo usando python -m src em vez de python src/__main__.py
import anyio
from claude_code_sdk import query
async def main():
async for message in query(prompt="Quanto é 2 + 2?"):
print(message)
anyio.run(main)from claude_code_sdk import query, ClaudeCodeOptions, AssistantMessage, TextBlock
# Consulta simples
async for message in query(prompt="Olá Claude"):
if isinstance(message, AssistantMessage):
for block in message.content:
if isinstance(block, TextBlock):
print(block.text)
# Com opções
options = ClaudeCodeOptions(
system_prompt="Você é um assistente útil",
max_turns=1
)
async for message in query(prompt="Me conte uma piada", options=options):
print(message)options = ClaudeCodeOptions(
allowed_tools=["Read", "Write", "Bash"],
permission_mode='acceptEdits' # aceitar automaticamente edições de arquivo
)
async for message in query(
prompt="Crie um arquivo hello.py",
options=options
):
# Processar uso de ferramentas e resultados
passfrom pathlib import Path
options = ClaudeCodeOptions(
cwd="/caminho/para/projeto" # ou Path("/caminho/para/projeto")
)Função assíncrona principal para consultar o Claude.
Parâmetros:
prompt(str): O prompt para enviar ao Claudeoptions(ClaudeCodeOptions): Configuração opcional
Retorna: AsyncIterator[Message] - Stream de mensagens de resposta
Veja src/claude_code_sdk/types.py para definições completas de tipos:
ClaudeCodeOptions- Opções de configuraçãoAssistantMessage,UserMessage,SystemMessage,ResultMessage- Tipos de mensagemTextBlock,ToolUseBlock,ToolResultBlock- Blocos de conteúdo
from claude_code_sdk import (
ClaudeSDKError, # Erro base
CLINotFoundError, # Claude Code não instalado
CLIConnectionError, # Problemas de conexão
ProcessError, # Processo falhou
CLIJSONDecodeError, # Problemas ao analisar JSON
)
try:
async for message in query(prompt="Olá"):
pass
except CLINotFoundError:
print("Por favor, instale o Claude Code")
except ProcessError as e:
print(f"Processo falhou com código de saída: {e.exit_code}")
except CLIJSONDecodeError as e:
print(f"Falha ao analisar resposta: {e}")Veja src/claude_code_sdk/_errors.py para todos os tipos de erro.
Consulte a documentação do Claude Code para uma lista completa das ferramentas disponíveis.
Veja examples/quick_start.py para um exemplo completo e funcional.