Passa al contenuto principale

Code Execution Tool — Bash, file e Python sandboxati

Intermedio
What you'll learn
  • Accendere la sandbox con un singolo blocco tool e sapere cosa Claude ci fa — comandi Bash, edit di file, e (con le versioni più nuove) un REPL Python persistente
  • Scegliere la versione tool giusta — code_execution_20250825 vs 20260120 vs 20260521 — e capire esattamente cosa sblocca ognuna
  • Portare file dentro e fuori — upload con container_upload, cattura file generati via il pattern OUTPUT_DIR
  • Riusare un container attraverso richieste per tenere vivo lo stato fino a 30 giorni, e sapere quando un container fresco è più sicuro
  • Leggere il pricing correttamente — 1.550 ore gratis al mese, poi $0,05 per container-ora — e sapere l'unica combo che lo rende interamente gratuito
  • Evitare la confusione multi-environment quando fornisci code execution insieme al tuo tool Bash

Il code execution tool è la sandbox server-side di Anthropic: aggiungi un blocco JSON al tuo array tools e Claude guadagna una shell Bash, un editor di file, e un interprete Python 3.11, tutti girando dentro un container Linux che l'API provisiona per te. Non esegui mai comandi né rispedisci blocchi tool_result — l'API esegue ogni chiamata e stream l'output indietro nella stessa risposta.

Questa è la primitiva sotto molte cose che Anthropic ships in seguito: la programmatic tool calling esegue Python dentro questo stesso container; i nuovi tool web search e web fetch lo usano invisibilmente per il filtering dinamico dei risultati. Capire la sandbox paga attraverso l'intera superficie della piattaforma.

Quando raggiungerlo​

What you'll learn
  • Matematica non-triviale — numeri grandi, molti passi, risultati precision-sensitive che Claude tirerebbe a indovinare senza eseguire
  • Analisi dati su file che carichi — CSV, Excel, JSON, XML, immagini, PDF
  • Generare visualizzazioni, PDF o spreadsheet che poi un umano scarica
  • Script multi-step che devono salvare stato intermedio e iterare — un REPL Python persistente attraverso richieste
  • Qualsiasi workload che altrimenti roundtripperebbe un enorme tool result al modello — la sandbox lo filtra localmente

Claude non eseguirà codice per aritmetica semplice, fatti ben noti, richieste fattuali/conversazionali, o conversioni di unità basilari. Se la richiesta è borderline, chiedi esplicitamente: "esegui codice per verificare questo".

Tre versioni del tool — cosa aggiunge ognuna​

Ci sono attualmente tre versioni correnti del tool. Tutte e tre ritornano le stesse forme di blocco, e nessuna richiede un header anthropic-beta.

VersioneCosa aggiunge
code_execution_20250825Comandi Bash e operazioni di file (view, create, str_replace). Questo è ciò che la maggior parte degli esempi usa.
code_execution_20260120Aggiunge persistenza dello stato REPL e supporto per programmatic tool calling dall'interno della sandbox. Lo stato dell'interprete Python (variabili, import) sopravvive attraverso richieste che riusano il container.
code_execution_20260521Stesso runtime di 20260120. La descrizione del tool ora dichiara il limite wall-clock di 90 secondi per cella Python nella programmatic tool calling, così che Claude possa budgetare celle long-running invece di essere tagliato a metà computazione.

Due regole del pollice:

  • Se usi i tool web search o web fetch correnti (web_search_20260209 / web_fetch_20260209 o successivi), devi essere su code_execution_20260120 o successivi — quella è la versione code-execution richiesta per il loro filtering dinamico.
  • Claude Haiku 4.5 accetta le stringhe di tipo più nuove ma non supporta effettivamente la programmatic tool calling o la persistenza REPL; su Haiku, le versioni più nuove si comportano come code_execution_20250825.

Attiva la sandbox in una richiesta​

Guided walkthrough1 of 4
  1. Includi un'entry in tools con type impostato alla versione che vuoi e name impostato a code_execution. Non ci sono altri parametri — entrambi i campi sono fissi.

Richiesta cURL minima — media e deviazione standard

curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
  "model": "claude-opus-5",
  "max_tokens": 4096,
  "messages": [{
    "role": "user",
    "content": "Use the code execution tool to calculate the mean and standard deviation of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
  }],
  "tools": [{
    "type": "code_execution_20250825",
    "name": "code_execution"
  }]
}'

La risposta interleava blocchi server_tool_use con blocchi bash_code_execution_tool_result (o text_editor_code_execution_tool_result), poi il testo di sommario di Claude.

Sub-tool che ottieni gratis​

Aggiungere il code execution tool silenziosamente sblocca due sub-tool tra cui Claude può scegliere in qualsiasi turn:

  • bash_code_execution — esegui qualsiasi comando shell. Il risultato include stdout, stderr, return_code, e una lista content di qualsiasi file che il comando ha lasciato in $OUTPUT_DIR.
  • text_editor_code_execution — visualizza, crea ed edita file (incluso source code). Comandi supportati: view, create, str_replace. I diff tornano in forma unified-diff (old_start, new_start, lines).

L'interprete Python non è un sub-tool a sé stante — Claude scrive Python con il file editor e lo esegue con un comando Bash. Con code_execution_20260120 o successivi più programmatic tool calling, lo stato dell'interprete persiste attraverso celle che riusano il container.

Porta file dentro il container​

Carica il file con la Files API, poi referenzialo nel messaggio con un blocco di contenuto container_upload. L'environment Python può gestire CSV, Excel (.xlsx, .xls), JSON, XML, immagini (JPEG/PNG/GIF/WebP) e formati text-based.

Carica un CSV e chiedi a Claude di analizzarlo

# 1. Upload the file
FILE_ID=$(curl -sS https://api.anthropic.com/v1/files \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-F "file=@data.csv" | jq -r '.id')

# 2. Reference it with a container_upload block
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
  "model": "claude-opus-5",
  "max_tokens": 4096,
  "messages": [{
    "role": "user",
    "content": [
      {"type": "text", "text": "Analyze this CSV data"},
      {"type": "container_upload", "file_id": "'"$FILE_ID"'"}
    ]
  }],
  "tools": [{"type": "code_execution_20250825", "name": "code_execution"}]
}'

Ottieni file di ritorno — il pattern $OUTPUT_DIR​

Questa è la gotcha che nessuno documenta finché non morde: solo i file al livello top di $OUTPUT_DIR sono catturati e ritornati come entry file_id. Ogni chiamata bash_code_execution ottiene una directory vuota fresca disponibile come $OUTPUT_DIR; qualsiasi cosa Claude scriva altrove nel container resta lì e non è ritornata al tuo client.

Se la tua applicazione dipende dal ricevere un file specifico, sii esplicito nel prompt e pattern il comando così che ls confermi la cattura nello stesso tool result:

python /tmp/make_report.py && cp /tmp/report.pdf "$OUTPUT_DIR/" && ls "$OUTPUT_DIR"

Claude non vede la lista content della risposta — solo il tuo prompt e il proprio stdout — quindi la riga ls è ciò che gli dice che la copia è riuscita.

Una volta catturati, i file sono scaricabili via Files API (client.files.download(file_id)). File che il code execution crea attraverso la Files API persistono finché non li cancelli, indipendentemente dalla scadenza 30-day del container.

Il ciclo di vita del container​

  • I container vivono 30 giorni dalla creazione. Il timestamp expires_at in ogni risposta è un valore rolling più corto e non riflette il limite hard di 30 giorni.
  • Dopo ~5 minuti di inattività il container è checkpointato. Mandare una richiesta con il suo ID entro la finestra 30-day lo ripristina.
  • Un container scaduto non può essere riusato. Le richieste che lo referenziano ritornano un errore — manda la richiesta di nuovo senza il parametro container per averne uno fresco.

Spec runtime — cos'è davvero la sandbox​

ProprietàValore
Versione Python3.11
OSLinux (x86_64 / AMD64)
Memoria5 GiB RAM
Disco5 GiB workspace
CPU1
Tempo di esecuzioneCap sull'intera tool-invocation applicato dall'API; con programmatic tool calling, ogni cella REPL aggiunge un cap wall-clock di 90 secondi
InternetCompletamente disabilitato — nessuna richiesta di rete outbound
Isolamento sandboxIsolamento completo dall'host e da altri container
Scope workspaceI container sono scopati al workspace della tua API key

Le librerie pre-installate includono il solito stack data-science (pandas, numpy, scipy, scikit-learn, statsmodels), visualizzazione (matplotlib, seaborn), file processing (pyarrow, openpyxl, xlsxwriter, xlrd, pillow, python-pptx, python-docx, pypdf, pdfplumber, pypdfium2, pdf2image, pdfkit, tabula-py, reportlab, Img2pdf), matematica (sympy, mpmath), utility (tqdm, python-dateutil, pytz, joblib), più tool da command-line (unzip, unrar, 7zip, bc, rg, fd, sqlite).

Non c'è pip install. Con internet spento, Claude non può fetchare pacchetti aggiuntivi a runtime. Progetta intorno a ciò che c'è già.

Pricing — e l'unica combinazione che lo rende gratis​

Il code execution è gratis quando la tua richiesta include anche web search o web fetch (web_search_20260209 o successivi, web_fetch_20260209 o successivi). Non ci sono charge aggiuntivi per le tool call di code execution in quelle richieste oltre ai costi token standard — questo copre sia il filtering dinamico che Anthropic esegue invisibilmente sia qualsiasi codice che Claude scrive direttamente.

Senza quei tool, il code execution è fatturato per tempo di esecuzione:

  • Il tempo di esecuzione minimo fatturato è 5 minuti per container.
  • Ogni organizzazione ottiene 1.550 ore gratis al mese.
  • Sopra il free tier, l'utilizzo addizionale è $0,05 per ora, per container.
  • Se file sono attaccati alla richiesta, il container è preloaded — il tempo di esecuzione è fatturato anche se Claude non chiama mai il tool.

Traccia l'utilizzo nel conteggio usage.server_tool_use.code_execution_requests della risposta.

La trappola multi-environment​

Se esponi anche il tuo Bash tool o REPL custom, Claude sta ora guardando due environment di esecuzione: il container sandboxato di Anthropic e il tuo locale. Lo stato non è condiviso tra loro — Claude occasionalmente dimentica questo e raggiunge quello sbagliato.

Aggiungi guidance esplicita al tuo system prompt quando i due coesistono:

Chiarificatore system-prompt per setup multi-environment

When multiple code execution environments are available, be aware that:
- Variables, files, and state do NOT persist between different execution environments.
- Use the code_execution tool for general-purpose computation in Anthropic's sandboxed environment.
- Use client-provided execution tools (e.g., bash) when you need access to the user's local system, files, or data.
- If you need to pass results between environments, explicitly include outputs in subsequent tool calls rather than assuming shared state.

La stessa trappola scatta silenziosamente quando abiliti web search o web fetch insieme al tuo shell tool: il code execution automatico provisionato per il filtering dinamico conta come secondo environment, anche se non l'hai mai aggiunto a tools.

Errori che effettivamente vedrai​

ToolCodice di erroreSignificato
TuttiunavailableTool temporaneamente non disponibile — riprova con backoff
Tuttiexecution_time_exceededL'intera tool invocation ha superato il suo tempo max — delimita i tuoi comandi
Tuttiinvalid_tool_inputParametri malformati
Tuttitoo_many_requestsRate limit — fai backoff prima di riprovare
bashoutput_file_too_largeL'output del comando ha superato il cap — chunkalo, redirigi a un file
text_editorfile_not_foundIl target view o edit non esiste

Un riferimento a container scaduto ritorna un errore, non un container fresco — ometti il parametro container e riprova.

Risposte long-running possono includere uno stop reason pause_turn. Rimanda la risposta così com'è per lasciare che Claude riprenda, o modificala per interrompere.

Migrazione dal legacy tool Python-only​

Se sei ancora sul legacy code_execution_20250522 (Python-only, richiedeva l'header beta code-execution-2025-05-22), l'upgrade è un diff di una riga:

- "type": "code_execution_20250522"
+ "type": "code_execution_20250825"

Le nuove versioni aggiungono Bash e operazioni file sopra ciò che il legacy tool faceva — nessun header beta necessario. Se parsi le risposte programmaticamente, il block type cambia da code_execution_result a forme bash_code_execution_result e text_editor_code_execution_*_result.

Verifica te stesso​

Check yourself

0/3
  1. Fornisci code_execution_20250825 e web_search_20260209 nella stessa richiesta. Come si presenta il pricing?
  2. Claude scrive /tmp/report.pdf durante una chiamata bash_code_execution. Il tuo client estrae file ID dalla risposta — nessun PDF appare. Perché?
  3. Ti serve che lo stato REPL (binding variabili) persista tra richieste. Quale versione tool imposti?

Vocabolario​

Glossario code execution
Premi Invio o Spazio per girare la carta. Usa le frecce sinistra e destra per spostarti tra le carte.Termine mostrato.
1 / 6

Takeaway​

Key takeaways
  • Un blocco tool, un nome — code_execution_20250825 per la maggior parte dei casi, 20260120 o 20260521 quando ti serve persistenza REPL o programmatic tool calling
  • Il riuso del container è il moltiplicatore — passa container.id indietro per tenere vivi file e stato fino a 30 giorni
  • File in: container_upload con un id Files-API. File out: solo i file al livello top di $OUTPUT_DIR sono catturati
  • Accoppia con web search o web fetch per rendere il code execution gratis oltre i costi token
  • No internet, no pip install — progetta intorno al set di librerie preloaded
  • Aggiungi guidance multi-environment al tuo system prompt ogni volta che esponi anche il tuo Bash tool

Prossimi passi​

  • Programmatic tool calling — chiama i tuoi tool da Python dentro lo stesso container
  • Task budgets — capa la spesa totale di token attraverso un loop agentico così che il codice long-running non scappi
  • Prompt caching — riusa un prefix stabile per tenere le chiamate ripetute economiche
  • Advisor tool — accoppia un esecutore veloce con un advisor a più alta intelligenza