TypeScript
Costruisci agenti AI personalizzati con l’SDK TypeScript di Claude Code
Prerequisiti
- Node.js 18+
Installazione
Installa @anthropic-ai/claude-code
da NPM:
Per visualizzare il codice sorgente dell’SDK TypeScript, visita la pagina @anthropic-ai/claude-code
su NPM.
Utilizzo di base
L’interfaccia principale tramite l’SDK TypeScript è la funzione query
, che restituisce un iteratore asincrono che trasmette i messaggi man mano che arrivano:
Opzioni di configurazione
Argomento | Tipo | Descrizione | Predefinito |
---|---|---|---|
abortController | AbortController | Controller di interruzione per annullare le operazioni | new AbortController() |
additionalDirectories | string[] | Directory aggiuntive da includere nella sessione | undefined |
allowedTools | string[] | Elenco di strumenti che Claude può utilizzare | Tutti gli strumenti abilitati per impostazione predefinita |
appendSystemPrompt | string | Testo da aggiungere al prompt di sistema predefinito | undefined |
canUseTool | (toolName: string, input: any) => Promise<ToolPermissionResult> | Funzione di autorizzazione personalizzata per l’uso degli strumenti | undefined |
continue | boolean | Continua la sessione più recente | false |
customSystemPrompt | string | Sostituisce completamente il prompt di sistema predefinito | undefined |
cwd | string | Directory di lavoro corrente | process.cwd() |
disallowedTools | string[] | Elenco di strumenti che Claude non può utilizzare | undefined |
env | Dict<string> | Variabili d’ambiente da impostare | undefined |
executable | 'bun' | 'deno' | 'node' | Quale runtime JavaScript utilizzare | node quando si esegue con Node.js, bun quando si esegue con Bun |
executableArgs | string[] | Argomenti da passare all’eseguibile | [] |
fallbackModel | string | Modello da utilizzare se il modello primario fallisce | undefined |
hooks | Partial<Record<HookEvent, HookCallbackMatcher[]>> | Hook del ciclo di vita per la personalizzazione | undefined |
includePartialMessages | boolean | Includi eventi di streaming parziali nel flusso dei messaggi | false |
maxThinkingTokens | number | Token massimi per il processo di pensiero di Claude | undefined |
maxTurns | number | Numero massimo di turni di conversazione | undefined |
mcpServers | Record<string, McpServerConfig> | Configurazioni del server MCP | undefined |
model | string | Modello Claude da utilizzare | Utilizza il predefinito dalla configurazione CLI |
pathToClaudeCodeExecutable | string | Percorso dell’eseguibile Claude Code | Eseguibile fornito con @anthropic-ai/claude-code |
permissionMode | PermissionMode | Modalità di autorizzazione per la sessione | "default" (opzioni: "default" , "acceptEdits" , "bypassPermissions" , "plan" ) |
resume | string | ID sessione da riprendere | undefined |
stderr | (data: string) => void | Callback per l’output stderr | undefined |
strictMcpConfig | boolean | Applica la validazione rigorosa della configurazione MCP | undefined |
Streaming di messaggi parziali
Quando includePartialMessages
è abilitato, l’SDK emetterà messaggi stream_event
che contengono eventi di streaming grezzi dall’API Claude. Questo ti consente di accedere al contenuto parziale mentre viene generato, utile per implementare aggiornamenti dell’interfaccia utente in tempo reale o indicatori di progresso.
Ogni messaggio stream_event
include:
event
: L’evento di streaming grezzo dall’APIsession_id
: L’identificatore della sessione correnteparent_tool_use_id
: L’ID dello strumento in esecuzione (se applicabile)uuid
: Un identificatore univoco per questo evento
Lo streaming di messaggi parziali è principalmente utile per casi d’uso avanzati dove hai bisogno di controllo granulare sulla risposta in streaming. Per la maggior parte delle applicazioni, il comportamento predefinito (aspettare messaggi completi) è sufficiente.
Conversazioni multi-turno
Per conversazioni multi-turno, hai due opzioni.
Puoi generare risposte e riprenderle, oppure puoi utilizzare la modalità di input in streaming che accetta un async/generator per un array di messaggi. Per ora, la modalità di input in streaming è l’unico modo per allegare immagini tramite messaggi.
Riprendi con gestione della sessione
Modalità di input in streaming
La modalità di input in streaming ti consente di fornire messaggi come un iterabile asincrono invece di una singola stringa. Questo abilita conversazioni multi-turno, allegati di immagini e generazione dinamica di messaggi:
Input in streaming con immagini
La modalità di input in streaming è l’unico modo per allegare immagini tramite messaggi:
Prompt di sistema personalizzati
I prompt di sistema definiscono il ruolo, l’expertise e il comportamento del tuo agente:
Integrazione del server MCP
Il Model Context Protocol (MCP) ti consente di dare ai tuoi agenti strumenti e capacità personalizzati:
Strumenti personalizzati con server MCP in-process
I server SDK MCP ti consentono di creare strumenti personalizzati che vengono eseguiti direttamente nel processo della tua applicazione, fornendo esecuzione di strumenti type-safe senza l’overhead di processi separati o comunicazione di rete.
Creazione di strumenti personalizzati
Utilizza le funzioni helper createSdkMcpServer
e tool
per definire strumenti personalizzati type-safe:
Type safety con Zod
L’helper tool
fornisce inferenza completa dei tipi TypeScript dai tuoi schemi Zod:
Hook
Gli hook ti consentono di personalizzare ed estendere il comportamento di Claude Code eseguendo callback personalizzati in vari punti del ciclo di vita dell’agente. A differenza degli hook CLI che eseguono comandi bash, gli hook SDK sono funzioni JavaScript/TypeScript che vengono eseguite in-process.
Definizione degli hook
Gli hook sono organizzati per tipo di evento, con matcher opzionali per filtrare quando vengono eseguiti:
Eventi hook disponibili
- PreToolUse: Viene eseguito prima dell’esecuzione dello strumento. Può bloccare strumenti o fornire feedback.
- PostToolUse: Viene eseguito dopo l’esecuzione riuscita dello strumento.
- UserPromptSubmit: Viene eseguito quando l’utente invia un prompt.
- SessionStart: Viene eseguito quando inizia una sessione.
- SessionEnd: Viene eseguito quando termina una sessione.
- Stop: Viene eseguito quando Claude sta per smettere di rispondere.
- SubagentStop: Viene eseguito quando un subagente sta per fermarsi.
- PreCompact: Viene eseguito prima della compattazione della conversazione.
- Notification: Viene eseguito quando vengono inviate notifiche.
Tipi di input degli hook
Ogni hook riceve input tipizzato basato sull’evento:
Output degli hook
Gli hook restituiscono output che controlla il flusso di esecuzione:
Esempi pratici
Logging e monitoraggio
Validazione delle operazioni sui file
Formattazione automatica del codice
Miglioramento dei prompt
Istruzioni di compattazione personalizzate
Comportamento di esecuzione degli hook
- Parallelizzazione: Tutti gli hook corrispondenti vengono eseguiti in parallelo
- Timeout: Gli hook rispettano il segnale di interruzione dalle opzioni
- Gestione degli errori: Gli errori degli hook vengono registrati ma non fermano l’esecuzione
- Matcher: Supportano pattern regex (es.
"Write|Edit"
)
Combinazione di hook con canUseTool
Mentre canUseTool
fornisce controllo delle autorizzazioni, gli hook offrono un’integrazione più ampia del ciclo di vita:
Controllo delle autorizzazioni con canUseTool
Il callback canUseTool
fornisce controllo granulare sull’esecuzione degli strumenti. Viene chiamato prima di ogni uso di strumento e può consentire, negare o modificare gli input degli strumenti:
Casi d’uso per canUseTool
- Gestione delle autorizzazioni: Controlla le autorizzazioni utente prima di consentire l’esecuzione dello strumento
- Validazione degli input: Valida o sanifica gli input degli strumenti prima dell’esecuzione
- Limitazione della frequenza: Implementa limiti di frequenza per operazioni costose
- Logging di audit: Registra l’uso degli strumenti per conformità o debug
- Autorizzazioni dinamiche: Abilita/disabilita strumenti basato su condizioni runtime
Formati di output
Output di testo (predefinito)
Output JSON
Formati di input
Esempi di integrazione di agenti
Agente di risposta agli incidenti SRE
Revisione di sicurezza automatizzata
Assistente legale multi-turno
Schema dei messaggi
I messaggi restituiti dall’API JSON sono rigorosamente tipizzati secondo il seguente schema:
Tipi di supporto aggiuntivi:
I tipi Message
, MessageParam
e Usage
sono disponibili nell’SDK TypeScript di Anthropic.
Risorse correlate
- Utilizzo e controlli CLI - Documentazione completa CLI
- Integrazione GitHub Actions - Automatizza il tuo flusso di lavoro GitHub con Claude
- Flussi di lavoro comuni - Guide passo-passo per casi d’uso comuni