Use o Agent SDK para construir um agente de IA que leia seu código, encontre bugs e os corrija, tudo sem intervenção manual.
O que você fará:
Criar uma pasta de projeto
Crie um novo diretório para este guia de início rápido:
mkdir my-agent && cd my-agentPara seus próprios projetos, você pode executar o SDK de qualquer pasta; ele terá acesso aos arquivos nesse diretório e seus subdiretórios por padrão.
Instalar o SDK
Instale o pacote Agent SDK para sua linguagem:
Defina sua chave de API
Obtenha uma chave de API no Claude Console, depois crie um arquivo .env no diretório do seu projeto:
ANTHROPIC_API_KEY=your-api-keyO SDK também suporta autenticação através de provedores de API de terceiros:
CLAUDE_CODE_USE_BEDROCK=1 e configure as credenciais da AWSCLAUDE_CODE_USE_VERTEX=1 e configure as credenciais do Google CloudCLAUDE_CODE_USE_FOUNDRY=1 e configure as credenciais do AzureVeja os guias de configuração para Bedrock, Vertex AI, ou Azure AI Foundry para detalhes.
A menos que previamente aprovado, Anthropic não permite que desenvolvedores terceirizados ofereçam login claude.ai ou limites de taxa para seus produtos, incluindo agentes construídos no Claude Agent SDK. Por favor, use os métodos de autenticação por chave de API descritos neste documento.
Este guia de início rápido o orienta na construção de um agente que pode encontrar e corrigir bugs no código. Primeiro, você precisa de um arquivo com alguns bugs intencionais para o agente corrigir. Crie utils.py no diretório my-agent e cole o seguinte código:
def calculate_average(numbers):
total = 0
for num in numbers:
total += num
return total / len(numbers)
def get_user_name(user):
return user["name"].upper()Este código tem dois bugs:
calculate_average([]) falha com divisão por zeroget_user_name(None) falha com um TypeErrorCrie agent.py se estiver usando o SDK do Python, ou agent.ts para TypeScript:
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage
async def main():
# Agentic loop: streams messages as Claude works
async for message in query(
prompt="Review utils.py for bugs that would cause crashes. Fix any issues you find.",
options=ClaudeAgentOptions(
allowed_tools=["Read", "Edit", "Glob"], # Tools Claude can use
permission_mode="acceptEdits" # Auto-approve file edits
)
):
# Print human-readable output
if isinstance(message, AssistantMessage):
for block in message.content:
if hasattr(block, "text"):
print(block.text) # Claude's reasoning
elif hasattr(block, "name"):
print(f"Tool: {block.name}") # Tool being called
elif isinstance(message, ResultMessage):
print(f"Done: {message.subtype}") # Final result
asyncio.run(main())Este código tem três partes principais:
query: o ponto de entrada principal que cria o loop agentic. Ele retorna um iterador assíncrono, então você usa async for para transmitir mensagens enquanto Claude trabalha. Veja a API completa na referência do SDK Python ou TypeScript.
prompt: o que você quer que Claude faça. Claude descobre quais ferramentas usar com base na tarefa.
options: configuração para o agente. Este exemplo usa allowedTools para restringir Claude a Read, Edit e Glob, e permissionMode: "acceptEdits" para aprovar automaticamente as alterações de arquivo. Outras opções incluem systemPrompt, mcpServers e muito mais. Veja todas as opções para Python ou TypeScript.
O loop async for continua executando enquanto Claude pensa, chama ferramentas, observa resultados e decide o que fazer a seguir. Cada iteração produz uma mensagem: o raciocínio de Claude, uma chamada de ferramenta, um resultado de ferramenta ou o resultado final. O SDK lida com a orquestração (execução de ferramentas, gerenciamento de contexto, tentativas) para que você apenas consuma o fluxo. O loop termina quando Claude conclui a tarefa ou encontra um erro.
O tratamento de mensagens dentro do loop filtra a saída legível para humanos. Sem filtragem, você veria objetos de mensagem brutos, incluindo inicialização do sistema e estado interno, o que é útil para depuração, mas barulhento de outra forma.
Este exemplo usa streaming para mostrar o progresso em tempo real. Se você não precisar de saída ao vivo (por exemplo, para trabalhos em segundo plano ou pipelines de CI), você pode coletar todas as mensagens de uma vez. Veja Streaming vs. modo de turno único para detalhes.
Seu agente está pronto. Execute-o com o seguinte comando:
Após executar, verifique utils.py. Você verá código defensivo tratando listas vazias e usuários nulos. Seu agente autonomamente:
utils.py para entender o códigoIsso é o que torna o Agent SDK diferente: Claude executa ferramentas diretamente em vez de pedir que você as implemente.
Se você vir "API key not found", certifique-se de ter definido a variável de ambiente ANTHROPIC_API_KEY no seu arquivo .env ou ambiente shell. Veja o guia completo de solução de problemas para mais ajuda.
Agora que seu agente está configurado, tente alguns prompts diferentes:
"Add docstrings to all functions in utils.py""Add type hints to all functions in utils.py""Create a README.md documenting the functions in utils.py"Você pode modificar o comportamento do seu agente alterando as opções. Aqui estão alguns exemplos:
Adicionar capacidade de busca na web:
options=ClaudeAgentOptions(
allowed_tools=["Read", "Edit", "Glob", "WebSearch"],
permission_mode="acceptEdits"
)Dar ao Claude um prompt de sistema personalizado:
options=ClaudeAgentOptions(
allowed_tools=["Read", "Edit", "Glob"],
permission_mode="acceptEdits",
system_prompt="You are a senior Python developer. Always follow PEP 8 style guidelines."
)Executar comandos no terminal:
options=ClaudeAgentOptions(
allowed_tools=["Read", "Edit", "Glob", "Bash"],
permission_mode="acceptEdits"
)Com Bash ativado, tente: "Write unit tests for utils.py, run them, and fix any failures"
Ferramentas controlam o que seu agente pode fazer:
| Ferramentas | O que o agente pode fazer |
|---|---|
Read, Glob, Grep | Análise somente leitura |
Read, Edit, Glob | Analisar e modificar código |
Read, Edit, Bash, Glob, Grep | Automação completa |
Modos de permissão controlam quanto de supervisão humana você deseja:
| Modo | Comportamento | Caso de uso |
|---|---|---|
acceptEdits | Aprova automaticamente edições de arquivo, pede outras ações | Fluxos de trabalho de desenvolvimento confiáveis |
bypassPermissions | Executa sem prompts | Pipelines de CI/CD, automação |
default | Requer um callback canUseTool para lidar com aprovação | Fluxos de aprovação personalizados |
O exemplo acima usa o modo acceptEdits, que aprova automaticamente operações de arquivo para que o agente possa ser executado sem prompts interativos. Se você quiser solicitar aprovação dos usuários, use o modo default e forneça um callback canUseTool que coleta entrada do usuário. Para mais controle, veja Permissões.
Agora que você criou seu primeiro agente, aprenda como estender suas capacidades e adaptá-lo ao seu caso de uso:
Was this page helpful?