Usa l'Agent SDK per costruire un agente AI che legge il tuo codice, trova bug e li corregge, tutto senza intervento manuale.
Quello che farai:
Installa Claude Code
L'Agent SDK utilizza Claude Code come runtime. Installalo per la tua piattaforma:
Dopo aver installato Claude Code sulla tua macchina, esegui claude nel tuo terminale e segui i prompt per autenticarti. L'SDK utilizzerà questa autenticazione automaticamente.
Per ulteriori informazioni sull'installazione di Claude Code, vedi Configurazione di Claude Code.
Crea una cartella di progetto
Crea una nuova directory per questa guida rapida:
mkdir my-agent && cd my-agentPer i tuoi progetti, puoi eseguire l'SDK da qualsiasi cartella; avrà accesso ai file in quella directory e nelle sue sottodirectory per impostazione predefinita.
Installa l'SDK
Installa il pacchetto Agent SDK per il tuo linguaggio:
Imposta la tua chiave API
Se hai già autenticato Claude Code (eseguendo claude nel tuo terminale), l'SDK utilizza quella autenticazione automaticamente.
Altrimenti, hai bisogno di una chiave API, che puoi ottenere dalla Console Anthropic.
Crea un file .env nella tua directory di progetto e archivia la chiave API lì:
ANTHROPIC_API_KEY=your-api-keyUsi Amazon Bedrock, Google Vertex AI o Microsoft Azure? Vedi le guide di configurazione per Bedrock, Vertex AI, o Azure AI Foundry.
Se non precedentemente approvato, non consentiamo agli sviluppatori di terze parti di offrire il login Claude.ai o limiti di velocità per i loro prodotti, inclusi gli agenti costruiti su Claude Agent SDK. Utilizza invece i metodi di autenticazione con chiave API descritti in questo documento.
Questa guida rapida ti guida attraverso la costruzione di un agente che può trovare e correggere i bug nel codice. Per prima cosa, hai bisogno di un file con alcuni bug intenzionali che l'agente possa correggere. Crea utils.py nella directory my-agent e incolla il seguente codice:
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()Questo codice ha due bug:
calculate_average([]) si arresta in modo anomalo con una divisione per zeroget_user_name(None) si arresta in modo anomalo con un TypeErrorCrea agent.py se stai usando l'SDK Python, o agent.ts per 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())Questo codice ha tre parti principali:
query: il punto di ingresso principale che crea il ciclo agentico. Restituisce un iteratore asincrono, quindi usi async for per trasmettere i messaggi mentre Claude lavora. Vedi l'API completa nel riferimento SDK Python o TypeScript.
prompt: quello che vuoi che Claude faccia. Claude capisce quali strumenti usare in base al compito.
options: configurazione per l'agente. Questo esempio usa allowedTools per limitare Claude a Read, Edit e Glob, e permissionMode: "acceptEdits" per approvare automaticamente i cambiamenti ai file. Altre opzioni includono systemPrompt, mcpServers e altro. Vedi tutte le opzioni per Python o TypeScript.
Il ciclo async for continua a funzionare mentre Claude pensa, chiama strumenti, osserva i risultati e decide cosa fare dopo. Ogni iterazione produce un messaggio: il ragionamento di Claude, una chiamata a uno strumento, un risultato dello strumento o il risultato finale. L'SDK gestisce l'orchestrazione (esecuzione dello strumento, gestione del contesto, tentativi) quindi consumi semplicemente il flusso. Il ciclo termina quando Claude completa il compito o incontra un errore.
La gestione dei messaggi all'interno del ciclo filtra l'output leggibile dall'uomo. Senza filtraggio, vedresti oggetti messaggio grezzi inclusa l'inizializzazione del sistema e lo stato interno, il che è utile per il debug ma rumoroso altrimenti.
Questo esempio utilizza lo streaming per mostrare l'avanzamento in tempo reale. Se non hai bisogno di output dal vivo (ad esempio per lavori in background o pipeline CI), puoi raccogliere tutti i messaggi in una volta. Vedi Streaming vs. modalità a turno singolo per i dettagli.
Il tuo agente è pronto. Eseguilo con il seguente comando:
python3 agent.pyDopo l'esecuzione, controlla utils.py. Vedrai codice difensivo che gestisce liste vuote e utenti nulli. Il tuo agente autonomamente:
utils.py per comprendere il codiceQuesto è ciò che rende diverso l'Agent SDK: Claude esegue gli strumenti direttamente invece di chiederti di implementarli.
Se vedi "Claude Code not found", installa Claude Code e riavvia il tuo terminale. Per "API key not found", imposta la tua chiave API. Vedi la guida completa alla risoluzione dei problemi per ulteriore aiuto.
Ora che il tuo agente è configurato, prova alcuni prompt diversi:
"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"Puoi modificare il comportamento del tuo agente cambiando le opzioni. Ecco alcuni esempi:
Aggiungi capacità di ricerca web:
options=ClaudeAgentOptions(
allowed_tools=["Read", "Edit", "Glob", "WebSearch"],
permission_mode="acceptEdits"
)Dai a Claude un prompt di sistema personalizzato:
options=ClaudeAgentOptions(
allowed_tools=["Read", "Edit", "Glob"],
permission_mode="acceptEdits",
system_prompt="You are a senior Python developer. Always follow PEP 8 style guidelines."
)Esegui comandi nel terminale:
options=ClaudeAgentOptions(
allowed_tools=["Read", "Edit", "Glob", "Bash"],
permission_mode="acceptEdits"
)Con Bash abilitato, prova: "Write unit tests for utils.py, run them, and fix any failures"
Strumenti controllano cosa può fare il tuo agente:
| Strumenti | Cosa può fare l'agente |
|---|---|
Read, Glob, Grep | Analisi di sola lettura |
Read, Edit, Glob | Analizzare e modificare il codice |
Read, Edit, Bash, Glob, Grep | Automazione completa |
Modalità di autorizzazione controllano quanto controllo umano desideri:
| Modalità | Comportamento | Caso d'uso |
|---|---|---|
acceptEdits | Approva automaticamente le modifiche ai file, chiede altre azioni | Flussi di lavoro di sviluppo affidabili |
bypassPermissions | Esegue senza prompt | Pipeline CI/CD, automazione |
default | Richiede un callback canUseTool per gestire l'approvazione | Flussi di approvazione personalizzati |
L'esempio sopra utilizza la modalità acceptEdits, che approva automaticamente le operazioni sui file in modo che l'agente possa funzionare senza prompt interattivi. Se vuoi richiedere agli utenti l'approvazione, usa la modalità default e fornisci un callback canUseTool che raccoglie l'input dell'utente. Per un maggiore controllo, vedi Autorizzazioni.
Ora che hai creato il tuo primo agente, impara come estendere le sue capacità e adattarlo al tuo caso d'uso: