Skip to main content
L’Agent SDK ti fornisce gli stessi strumenti, il ciclo dell’agente e la gestione del contesto che alimentano Claude Code. È disponibile come CLI per script e CI/CD, oppure come pacchetti Python e TypeScript per il controllo programmatico completo. Per eseguire Claude Code in modalità non interattiva, passa -p con il tuo prompt e qualsiasi opzione CLI:
Questa pagina copre l’utilizzo dell’Agent SDK tramite la CLI (claude -p). Per i pacchetti SDK Python e TypeScript con output strutturati, callback di approvazione degli strumenti e oggetti messaggio nativi, consulta la documentazione completa dell’Agent SDK.

Utilizzo di base

Aggiungi il flag -p (o --print) a qualsiasi comando claude per eseguirlo in modo non interattivo. Tutte le opzioni CLI funzionano con -p, incluse: Questo esempio chiede a Claude una domanda sulla tua base di codice e stampa la risposta:

Inizia più velocemente con la modalità bare

Aggiungi --bare per ridurre il tempo di avvio saltando l’auto-discovery di hooks, skills, plugins, server MCP, memoria automatica e CLAUDE.md. Senza di esso, claude -p carica lo stesso contesto che una sessione interattiva avrebbe, incluso tutto ciò che è configurato nella directory di lavoro o in ~/.claude. La modalità bare è utile per CI e script dove hai bisogno dello stesso risultato su ogni macchina. Un hook nel ~/.claude di un collega o un server MCP nel .mcp.json del progetto non verranno eseguiti, perché la modalità bare non li legge mai. Solo i flag che passi esplicitamente hanno effetto. Questo esempio esegue un’attività di riepilogo una tantum in modalità bare e pre-approva lo strumento Read in modo che la chiamata si completi senza un prompt di autorizzazione:
In modalità bare Claude ha accesso agli strumenti Bash, lettura file e modifica file. Passa qualsiasi contesto di cui hai bisogno con un flag: La modalità bare salta le letture OAuth e keychain. L’autenticazione Anthropic deve provenire da ANTHROPIC_API_KEY o da un apiKeyHelper nel JSON passato a --settings. Amazon Bedrock, Google Cloud’s Agent Platform e Microsoft Foundry utilizzano le loro credenziali provider usuali.
--bare è la modalità consigliata per le chiamate con script e SDK, e diventerà l’impostazione predefinita per -p in una versione futura.

Attività in background all’uscita

Se Claude avvia un’attività Bash in background durante un’esecuzione di claude -p, ad esempio un server di sviluppo o una build di watch, tale attività viene terminata circa cinque secondi dopo che Claude ha restituito il suo risultato finale e stdin è stato chiuso. Il periodo di grazia consente a un’attività che termina subito dopo il risultato di consegnare comunque il suo output. Prima della v2.1.163, un processo in background che non termina mai avrebbe mantenuto l’invocazione di claude -p aperta indefinitamente. I subagenti in background e i flussi di lavoro sono esenti dal periodo di grazia di cinque secondi perché il loro risultato fa parte dell’output finale, quindi claude -p attende il loro completamento. A partire dalla v2.1.182, tale attesa è limitata a dieci minuti per impostazione predefinita in modo che un agente in background bloccato non possa mantenere il processo aperto indefinitamente. Regola il limite con CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS, oppure impostalo su 0 per attendere senza limite.

Esempi

Questi esempi evidenziano i modelli CLI comuni. Per CI e altre chiamate con script, aggiungi --bare in modo che non raccolgano qualsiasi cosa sia configurata localmente.

Inviare dati attraverso Claude

La modalità non interattiva legge stdin, quindi puoi inviare dati e reindirizzare la risposta come qualsiasi altro strumento da riga di comando. Questo esempio invia un log di compilazione a Claude e scrive la spiegazione in un file:
Con --output-format json, il payload della risposta include total_cost_usd e una suddivisione dei costi per modello, quindi i chiamanti con script possono tracciare la spesa per invocazione senza consultare il dashboard di utilizzo.
A partire da Claude Code v2.1.128, stdin inviato tramite pipe è limitato a 10MB. Se superi il limite, Claude Code esce con un errore chiaro e uno stato diverso da zero. Per lavorare con input più grandi, scrivi il contenuto in un file e fai riferimento al percorso del file nel tuo prompt invece di inviarlo tramite pipe.

Aggiungere Claude a uno script di compilazione

Puoi avvolgere una chiamata non interattiva in uno script per utilizzare Claude come linter o revisore specifico del progetto. Questo script package.json invia il diff rispetto a main a Claude e gli chiede di segnalare i refusi. Inviare il diff tramite pipe significa che Claude non ha bisogno del permesso Bash per leggerlo, e le virgolette doppie sfuggite mantengono lo script portabile su Windows:

Ottenere output strutturato

Utilizza --output-format per controllare come vengono restituite le risposte:
  • text (predefinito): output di testo semplice
  • json: JSON strutturato con risultato, ID sessione e metadati
  • stream-json: JSON delimitato da newline per lo streaming in tempo reale
Questo esempio restituisce un riepilogo del progetto come JSON con metadati della sessione, con il risultato del testo nel campo result:
Per ottenere output conforme a uno schema specifico, utilizza --output-format json con --json-schema e una definizione JSON Schema. La risposta include metadati sulla richiesta (ID sessione, utilizzo, ecc.) con l’output strutturato nel campo structured_output. Questo esempio estrae i nomi delle funzioni e li restituisce come array di stringhe:
Se il valore non è un JSON Schema valido, claude esce con Error: --json-schema is not a valid JSON Schema seguito dalla diagnostica del validatore. Claude Code accetta schemi che utilizzano la parola chiave format, come "format": "email", ma tratta format come un’annotazione e non la applica. Prima della v2.1.205, Claude Code ignorava silenziosamente uno schema non valido e restituiva testo non strutturato, e trattava qualsiasi schema contenente format come non valido.
Utilizza uno strumento come jq per analizzare la risposta ed estrarre campi specifici:

Streaming delle risposte

Utilizza --output-format stream-json con --verbose e --include-partial-messages per ricevere i token mentre vengono generati. Ogni riga è un oggetto JSON che rappresenta un evento:
L’ultima riga del flusso è un messaggio result con il testo della risposta finale, il costo e i metadati della sessione. Prima della v2.1.208, l’invio tramite pipe di una risposta di grandi dimensioni potrebbe troncare l’ultima riga e omettere il messaggio result. L’esempio seguente utilizza jq per filtrare i delta di testo e visualizzare solo il testo in streaming. Il flag -r restituisce stringhe non elaborate (senza virgolette) e -j si unisce senza newline in modo che i token fluiscano continuamente:
Quando una richiesta API non riesce con un errore ritentabile, Claude Code emette un evento system/api_retry prima di ritentare. Puoi utilizzarlo per visualizzare il progresso del tentativo o implementare una logica di backoff personalizzata. L’evento system/init segnala i metadati della sessione inclusi il modello, gli strumenti, i server MCP e i plugin caricati. È il primo evento nel flusso a meno che gli eventi di avvio lo precedano: L’evento contiene anche un array capabilities opzionale di stringhe che denominano i comportamenti del protocollo che questa versione di Claude Code implementa, come interrupt_receipt_v1. Controllalo per rilevare le funzionalità invece di confrontare le stringhe di versione, e ignora i valori che non riconosci. Il campo richiede Claude Code v2.1.205 o successivo ed è assente dalle versioni precedenti. Consulta SDKSystemMessage per l’elenco delle capacità. Utilizza i campi plugin per far fallire CI quando un plugin non è stato caricato: Quando CLAUDE_CODE_SYNC_PLUGIN_INSTALL è impostato, Claude Code emette eventi system/plugin_install mentre i plugin del marketplace si installano prima del primo turno. Utilizza questi per visualizzare il progresso dell’installazione nella tua interfaccia utente. Per lo streaming programmatico con callback e oggetti messaggio, consulta Stream responses in real-time nella documentazione dell’Agent SDK.

Approvare automaticamente gli strumenti

Utilizza --allowedTools per consentire a Claude di utilizzare determinati strumenti senza chiedere. Questo esempio esegue una suite di test e corregge i guasti, consentendo a Claude di eseguire comandi Bash e leggere/modificare file senza chiedere il permesso:
Per impostare una linea di base per l’intera sessione invece di elencare i singoli strumenti, passa una modalità di autorizzazione. dontAsk nega qualsiasi cosa non sia nelle tue regole permissions.allow o nel set di comandi di sola lettura, utile per esecuzioni CI bloccate. AskUserQuestion, strumenti connettore che la tua organizzazione ha impostato su ask, e strumenti MCP contrassegnati requiresUserInteraction vengono negati anche quando una regola di autorizzazione corrisponde. acceptEdits consente a Claude di scrivere file senza chiedere e approva automaticamente anche i comandi del filesystem comuni come mkdir, touch, mv e cp. Gli altri comandi shell e le richieste di rete hanno ancora bisogno di una voce --allowedTools o di una regola permissions.allow, altrimenti l’esecuzione si interrompe quando uno viene tentato:

Creare un commit

Questo esempio esamina le modifiche in staging e crea un commit con un messaggio appropriato:
Il flag --allowedTools utilizza la sintassi delle regole di autorizzazione. Lo spazio finale * abilita la corrispondenza dei prefissi, quindi Bash(git diff *) consente qualsiasi comando che inizia con git diff. Lo spazio prima di * è importante: senza di esso, Bash(git diff*) corrisponderebbe anche a git diff-index.
Le skills richiamate dall’utente e i comandi personalizzati funzionano in modalità -p: includi /skill-name nella stringa del prompt e Claude Code lo espande prima di eseguire. I comandi incorporati che solo eseguono nell’interfaccia del terminale, come /login, non sono disponibili in modalità -p. /model, /effort, /fast, /color e /rename accettano il valore come argomento, ad esempio /model sonnet, e /mcp senza argomento stampa un riepilogo di testo dello stato del server; questi moduli richiedono Claude Code v2.1.205 o successivo e seguono le note di disponibilità di ogni comando. Per modificare un’impostazione da un’invocazione -p, passa key=value a /config, ad esempio /config thinking=false.

Personalizzare il prompt di sistema

Utilizza --append-system-prompt per aggiungere istruzioni mantenendo il comportamento predefinito di Claude Code. Questo esempio invia un diff PR a Claude e gli istruisce di esaminarlo per vulnerabilità di sicurezza:
Consulta i flag del prompt di sistema per ulteriori opzioni incluso --system-prompt per sostituire completamente il prompt predefinito.

Continuare le conversazioni

Utilizza --continue per continuare la conversazione più recente, oppure --resume con un ID sessione per continuare una conversazione specifica. Questo esempio esegue una revisione, quindi invia prompt di follow-up:
Se stai eseguendo più conversazioni, acquisisci l’ID sessione per riprendere una specifica:
Esegui entrambi i comandi dalla stessa directory: la ricerca dell’ID sessione è limitata alla directory del progetto corrente e ai suoi git worktrees. Consulta Resume a session per le regole di ambito complete.

Passaggi successivi