Una sessione è un'istanza di agente all'interno di un ambiente. Ogni sessione fa riferimento a un agente e a un ambiente (entrambi creati separatamente) e mantiene la cronologia della conversazione attraverso più interazioni. Le sessioni seguono un ciclo di vita in due fasi: prima crea la sessione, poi invia un evento utente per avviare il lavoro. Puoi anche unire entrambi i passaggi in un'unica chiamata con initial_events.
Una sessione richiede un ID agent e un ID environment. Gli agenti sono risorse versionate; passando l'ID agent come stringa, la sessione viene creata con l'ultima versione dell'agente.
ant beta:sessions create \
--agent "$AGENT_ID" \
--environment-id "$ENVIRONMENT_ID"Per vincolare una sessione a una versione specifica dell'agente, passa un oggetto. Questo ti permette di controllare esattamente quale versione viene eseguita e di pianificare il rilascio graduale di nuove versioni in modo indipendente.
ant beta:sessions create <<YAML
agent:
type: agent
id: $AGENT_ID
version: 1
environment_id: $ENVIRONMENT_ID
YAMLPuoi creare una sessione e avviarne il lavoro in un'unica chiamata. initial_events è un array opzionale di eventi iniziali da inviare alla sessione al momento della creazione, elaborati in ordine. Supporta gli eventi user.message e user.define_outcome e accetta un massimo di 50 eventi. Un elenco non vuoto avvia il ciclo dell'agente nella stessa chiamata: la sessione viene creata direttamente nello stato running, senza ulteriori richieste.
L'esempio seguente crea una sessione con un singolo user.message in initial_events:
SEEDED_SESSION_ID=$(ant beta:sessions create \
--transform id --raw-output <<YAML
agent: $AGENT_ID
environment_id: $ENVIRONMENT_ID
initial_events:
- type: user.message
content:
- type: text
text: List the files in the working directory.
YAML
)
# initial_events non compaiono nella risposta di creazione; elenca gli eventi
# della sessione per vedere il messaggio iniziale.
echo "Seeded event: $(ant beta:sessions:events list \
--session-id "$SEEDED_SESSION_ID" \
--format raw \
--transform 'data.#(type=="user.message").content.0.text' --raw-output)"Nessun altro tipo di evento è accettato. Gli eventi che rispondono a un turno dell'agente (user.tool_confirmation, user.tool_result e user.custom_tool_result) non sono accettati perché non esiste ancora alcun turno dell'agente, e user.interrupt non è accettato perché non c'è alcun turno da interrompere. A differenza di initial_events in un deployment pianificato, gli initial_events di una sessione non accettano system.message.
Ogni evento in initial_events viene validato e reso persistente prima che la risposta di creazione venga restituita, nell'ordine dell'elenco, con un ID assegnato dal server, esattamente come se lo avessi inviato all'endpoint di invio eventi immediatamente dopo la creazione. Anche le regole sul contenuto per singolo evento sono le stesse di quell'endpoint. Un elenco vuoto equivale a omettere il campo. La validazione è tutto-o-niente: se un qualsiasi evento non supera la validazione, l'intera richiesta viene rifiutata e nessuna sessione viene creata.
La richiesta di creazione viene rifiutata nei seguenti casi:
| Condizione | Stato |
|---|---|
Più di un evento user.define_outcome | 400 |
Un evento user.define_outcome senza rubric | 400 |
Più di 100 blocchi di contenuto document provenienti da file nell'intero elenco | 400 |
| Un corpo della richiesta superiore a 32 MB | 413 |
Un evento user.define_outcome in initial_events è accettato alle stesse condizioni dell'invio a una sessione esistente; consulta Definire i risultati.
Puoi passare agent in tre forme: una stringa con l'ID dell'agente, un oggetto con versione vincolata (type: "agent") o un oggetto di override. La forma con override modifica parti della configurazione dell'agente per una singola sessione. Usala per provare un modello diverso o concedere uno strumento aggiuntivo in una sessione senza creare una nuova versione dell'agente. Per la forma con override, imposta type su agent_with_overrides e passa l'id dell'agente e facoltativamente una version (ometti version per usare l'ultima versione dell'agente). Quindi includi uno qualsiasi tra model, system, tools, mcp_servers o skills con i valori che la sessione deve usare.
Ogni campo sovrascrivibile segue le stesse tre regole:
null, o su un array vuoto per i campi di tipo elenco: la sessione viene eseguita con quel campo azzerato. Questa regola si applica integralmente a system e skills. Ci sono tre eccezioni:
model non è mai azzerabile. Una sessione ha sempre bisogno di un modello, quindi model: null restituisce un errore 400 agent_model_required.tools restituisce un errore 400 quando gli skills effettivi della sessione non sono vuoti, perché le skill richiedono lo strumento read. Altrimenti, tools: null e tools: [] azzerano il campo.mcp_servers restituisce un errore 400 quando i tools effettivi della sessione contengono ancora un mcp_toolset che fa riferimento a uno dei server dell'agente. Sovrascrivi tools nella stessa richiesta per rimuovere quelle voci mcp_toolset, quindi azzera mcp_servers.tools deve elencare ogni strumento che la sessione deve avere. C'è un'eccezione:
effort all'interno di un override model per sessione non viene applicato e, poiché l'override sostituisce integralmente l'oggetto model dell'agente, nemmeno l'effort dell'agente stesso viene mantenuto: una sessione creata con un override model viene eseguita al livello di effort predefinito del modello. Per eseguire a un livello di effort specifico, imposta effort sull'agente e non sovrascrivere model per quella sessione.Gli override si applicano solo alla sessione che crei. Non modificano la risorsa agente né creano una nuova versione dell'agente, quindi le altre sessioni che fanno riferimento allo stesso agente non ne sono influenzate.
Nella risposta, l'oggetto agent riflette la configurazione con cui la sessione viene eseguita dopo l'applicazione degli override. I suoi id e version identificano comunque l'agente e la versione a cui gli override sono applicati. Questo ti permette di ricondurre una sessione al suo agente di base.
L'esempio seguente avvia una sessione che sovrascrive il modello e azzera il "system prompt" (prompt di sistema):
# L'`agent` nella risposta è lo snapshot risolto: ogni override sostituisce quel
# campo solo per questa sessione, e la risorsa agente conserva id e versione.
ant beta:sessions create \
--transform 'agent.{id,version,model,system}' \
--format json <<YAML
agent:
type: agent_with_overrides
id: $AGENT_ID
model:
id: claude-sonnet-5
system: null
environment_id: $ENVIRONMENT_ID
YAMLPoiché un override model sostituisce integralmente l'oggetto model dell'agente, imposta o azzera anche il vincolo inference_geo del modello per la sessione: un override che include inference_geo vincola l'area geografica che serve le richieste al modello della sessione, mentre uno che lo omette azzera il vincolo dell'agente, così che la sessione segua il default_inference_geo del workspace. Il valore sovrascritto viene validato rispetto agli allowed_inference_geos del workspace al momento della creazione della sessione.
L'esempio seguente avvia una sessione da un agente il cui modello non ha alcun vincolo geografico, vincola le richieste al modello della sessione all'inferenza negli Stati Uniti includendo inference_geo nell'override model, e stampa il valore restituito in agent.model nella risposta:
# Sostituisce interamente il `model` dell'agente: ridichiara `id`, aggiungi `inference_geo` per fissare.
session=$(ant beta:sessions create <<YAML
agent:
type: agent_with_overrides
id: $AGENT_ID
model:
id: claude-opus-5
inference_geo: us
environment_id: $ENVIRONMENT_ID
YAML
)
echo "Inference geo: $(jq -r '.agent.model.inference_geo' <<< "$session")"Per limitare quanto una sessione può spendere, passa l'oggetto opzionale budget quando la crei. Un budget è un tetto rigido sul costo di listino della sessione: la piattaforma valuta tutto ciò che la sessione consuma alle tariffe di listino pubbliche, e la sessione smette di emettere nuove richieste al modello una volta che il totale progressivo raggiunge max_list_cost. Imposta type su limit e assegna a max_list_cost un amount e una currency. amount è un numero intero di centesimi di dollaro USA scritto come stringa, ad esempio "2500" per $25,00; l'API accetta una stringa anziché un numero in modo che non venga mai applicato alcun arrotondamento in virgola mobile. USD è l'unica valuta attualmente supportata. Quando la sessione raggiunge il tetto, si mette in pausa e diventa inattiva con lo stop reason budget_reached. Il tetto viene applicato tra una richiesta al modello e l'altra, quindi la richiesta che lo supera viene prima completata e il costo di listino finale della sessione può risultare leggermente oltre il tetto. Un budget può essere associato solo al momento della creazione: puoi modificarlo o rimuoverlo in seguito, ma non puoi aggiungerne uno a una sessione creata senza.
L'esempio seguente crea una sessione con un budget di $25,00; la risposta restituisce il budget nella risorsa della sessione:
curl -fsSL https://api.anthropic.com/v1/sessions \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01" \
-H "content-type: application/json" \
-d @- <<EOF
{
"agent": "$AGENT_ID",
"environment_id": "$ENVIRONMENT_ID",
"budget": {
"type": "limit",
"max_list_cost": {"amount": "2500", "currency": "USD"}
}
}
EOFConsulta Budget delle sessioni per sapere come funziona l'applicazione del limite, cosa viene conteggiato nel costo di listino e come si comportano i budget nelle sessioni multiagente.
Se il tuo agente usa strumenti MCP che richiedono autenticazione, passa vault_ids alla creazione della sessione per fare riferimento a un vault contenente credenziali OAuth memorizzate. Anthropic gestisce il rinnovo dei token per tuo conto. Consulta Autenticarsi con i vault per sapere come creare vault e registrare credenziali.
ant beta:sessions create <<YAML
agent: $AGENT_ID
environment_id: $ENVIRONMENT_ID
vault_ids:
- $VAULT_ID
YAMLCreare una sessione senza initial_events registra la sessione ma non avvia alcun lavoro; il provisioning della sandbox dell'ambiente inizia non appena la sessione viene creata, quindi la prima chiamata a uno strumento non deve attenderlo. Per delegare un'attività, invia eventi alla sessione usando un evento utente. Per fornire invece il primo evento nella richiesta di creazione, consulta Inizializzare la sessione con eventi iniziali. La sessione agisce come una macchina a stati che tiene traccia dell'avanzamento, mentre gli eventi guidano l'esecuzione effettiva.
ant beta:sessions:events send \
--session-id "$SESSION_ID" <<'YAML'
events:
- type: user.message
content:
- type: text
text: List the files in the working directory.
YAMLConsulta Flusso di eventi della sessione per sapere come ricevere in streaming le risposte dell'agente e gestire le conferme degli strumenti.
Consulta Stati della sessione per gli stati attraverso cui passa una sessione.
Recupera, elenca, aggiorna, archivia ed elimina le sessioni di Claude Managed Agents.
Invia eventi, ricevi risposte in streaming e interrompi o reindirizza la tua sessione durante l'esecuzione.
Crea e gestisci deployment con la Claude API: esegui un agente secondo una pianificazione cron ricorrente e ispeziona la cronologia delle sue esecuzioni.
Was this page helpful?