Claude kann Daten analysieren, Visualisierungen erstellen, komplexe Berechnungen durchführen, Systembefehle ausführen, Dateien erstellen und bearbeiten sowie hochgeladene Dateien direkt innerhalb der API-Konversation verarbeiten. Das Code-Execution-Tool ermöglicht es Claude, Bash-Befehle auszuführen und Dateien zu manipulieren, einschließlich des Schreibens von Code, in einer sicheren Sandbox-Umgebung.
Code-Ausführung ist kostenlos, wenn sie zusammen mit Web-Suche oder Web-Fetch (web_search_20260209, web_fetch_20260209 oder neuer) verwendet wird. Wenn eines dieser Tools in deiner Anfrage enthalten ist, fallen für die Code-Ausführung in dieser Anfrage keine zusätzlichen Kosten über die Standard-Token-Kosten hinaus an. Dies umfasst sowohl die Code-Ausführung hinter dem dynamischen Filtern als auch jeden Code, den Claude direkt ausführt. Die Standardpreise für Code-Ausführung gelten, wenn diese Tools nicht enthalten sind.
Code-Ausführung ermöglicht auch das dynamische Filtern in den Tools Web-Suche und Web-Fetch: Claude filtert Ergebnisse innerhalb der Code-Ausführungsumgebung, bevor sie das Kontextfenster erreichen. Wenn dynamisches Filtern ausgeführt wird, stellt die API die dafür benötigte Code-Ausführung automatisch bereit, sodass du das Code-Execution-Tool dafür nicht zu deiner Anfrage hinzufügen musst.
Das Code-Execution-Tool ist für die folgenden Modelle verfügbar:
| Modell | Tool-Versionen |
|---|---|
| Claude Opus 5 () | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Fable 5 () | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Mythos 5 () | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Sonnet 5 () | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Opus 4.8 () | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Opus 4.7 () | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Opus 4.6 () | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Sonnet 4.6 () | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Opus 4.5 () | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Sonnet 4.5 () | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Haiku 4.5 () | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
Jede Tool-Version baut auf der vorherigen auf:
code_execution_20250825 unterstützt Bash-Befehle und Dateioperationen.code_execution_20260120 fügt REPL-Zustandspersistenz und programmatisches Tool-Calling innerhalb der Sandbox hinzu. Claude Haiku 4.5 akzeptiert die Tool-Typen code_execution_20260120 und code_execution_20260521, aber programmatisches Tool-Calling und die davon abhängige REPL-Zustandspersistenz sind dort nicht verfügbar, sodass sich die neueren Versionen dort wie code_execution_20250825 verhalten.code_execution_20260521 ist dieselbe Laufzeitumgebung wie code_execution_20260120. Der Unterschied besteht darin, dass die Tool-Beschreibung Claude über das 90-Sekunden-Wall-Clock-Limit für jede Python-Zelle beim programmatischen Tool-Calling informiert, sodass Claude lang laufende Zellen einplanen kann. Eine Zelle, die das Limit überschreitet, gibt ein normales Code-Ausführungsergebnis mit einem return_code ungleich null und einer detection_timeout-Statusmeldung in ihrer Ausgabe zurück. Dies ist getrennt vom Fehlercode execution_time_exceeded, den die API zurückgibt, wenn ein gesamter Tool-Aufruf die maximale Ausführungszeit überschreitet.Alle drei Tool-Versionen sind allgemein verfügbar und erfordern keinen anthropic-beta-Header. Die Legacy-Beta-Header für Code-Ausführung bleiben als gültige Opt-ins bestehen.
Die Beispiele auf dieser Seite verwenden code_execution_20250825, das die hier gezeigten Bash- und Dateioperationen abdeckt und sich bei jedem Modell in der Tabelle gleich verhält; verwende code_execution_20260120 oder neuer, wenn du programmatisches Tool-Calling oder REPL-Zustandspersistenz benötigst. Die aktuellen Tools Web-Suche und Web-Fetch (web_search_20260209, web_fetch_20260209 und neuer) erfordern code_execution_20260120 oder neuer als ihre Code-Ausführungsversion.
Code-Ausführung ist verfügbar auf:
Code-Ausführung ist derzeit nicht auf Amazon Bedrock oder Google Cloud verfügbar.
Hier ist ein Beispiel, das Claude bittet, eine Berechnung durchzuführen:
client = anthropic.Anthropic()
response = client.messages.create(
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"}],
)
print(response.to_json())Die Antwort wechselt zwischen server_tool_use-Blöcken (den Befehlen, die Claude ausgeführt hat) und ihren Tool-Ergebnisblöcken, gefolgt von Claudes Text. Die oberste Ebene enthält außerdem ein container-Objekt, dessen id du über mehrere Anfragen hinweg wiederverwenden kannst. Siehe Antwortformat für die Blockstrukturen.
Wenn du das Code-Execution-Tool zu deiner API-Anfrage hinzufügst:
tool_result-Blöcke zurücksendest. Eine Ausnahme besteht, wenn Claude eines deiner Client-Tools neben der Code-Ausführung aufruft: Die API gibt den Code-Ausführungsaufruf ohne sein Ergebnis zurück. Das Ergebnis kommt in einer späteren Antwort, nachdem du die tool_result-Blöcke für deine Client-Tools zurückgesendet hastIm Container ist Python vorinstalliert. Claude schreibt Python mit dem Dateioperationen-Sub-Tool und führt es mit einem Bash-Befehl aus. Mit code_execution_20260120 oder neuer und programmatischem Tool-Calling bleibt auch der Zustand des Python-Interpreters (wie Variablenbindungen) über Anfragen hinweg erhalten, die den Container wiederverwenden.
Claude führt Code aus, wenn die Anfrage von Berechnungen oder Dateiverarbeitung profitiert:
Claude antwortet direkt ohne Code-Ausführung bei:
Wenn du möchtest, dass Claude bei einer Grenzfall-Anfrage Code ausführt, bitte explizit darum (zum Beispiel: „Führe Code aus, um das zu überprüfen").
Um deine eigenen Datendateien (wie CSV, Excel oder Bilder) zu analysieren, lade sie über die Files API hoch und referenziere sie in deiner Anfrage:
Die Python-Umgebung kann verschiedene über die Files API hochgeladene Dateitypen verarbeiten, darunter:
container_upload-Content-Blockclient = anthropic.Anthropic()
# Lade eine Datei hoch
file_object = client.beta.files.upload(file=Path("data.csv"))
# Verwende die file_id mit der Code-Ausführung
response = client.beta.messages.create(
model="claude-opus-5",
betas=["files-api-2025-04-14"],
max_tokens=4096,
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Analyze this CSV data"},
{"type": "container_upload", "file_id": file_object.id},
],
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
print(response.to_json())Wenn Claude während der Code-Ausführung Dateien erstellt, erscheint die ID jeder erstellten Datei im Ergebnis des Code-Execution-Tools, und du kannst sie mit der Files API herunterladen:
client = Anthropic()
# Fordere Code-Ausführung an, die Dateien erstellt
response = client.beta.messages.create(
model="claude-opus-5",
betas=["files-api-2025-04-14"],
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Create a matplotlib visualization and save it as output.png",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Extrahiere Datei-IDs aus der Antwort
def extract_file_ids(response: BetaMessage) -> list[str]:
file_ids: list[str] = []
for item in response.content:
if item.type == "bash_code_execution_tool_result":
content_item = item.content
if content_item.type == "bash_code_execution_result":
for output_block in content_item.content:
file_ids.append(output_block.file_id)
return file_ids
# Lade die erstellten Dateien herunter
for file_id in extract_file_ids(response):
file_metadata = client.beta.files.retrieve_metadata(file_id)
file_content = client.beta.files.download(file_id)
file_content.write_to_file(file_metadata.filename)
print(f"Downloaded: {file_metadata.filename}")Das Code-Execution-Tool erfordert keine zusätzlichen Parameter:
{
"type": "code_execution_20250825",
"name": "code_execution"
}Beide Felder sind festgelegt: type wählt die Tool-Version aus, und name muss code_execution sein.
Wenn du dieses Tool bereitstellst, erhält Claude automatisch Zugriff auf zwei Sub-Tools:
bash_code_execution: Shell-Befehle ausführentext_editor_code_execution: Dateien anzeigen, erstellen und bearbeiten, einschließlich des Schreibens von CodeWenn Claude Code ausführt, enthält die Antwort auch ein container-Objekt auf oberster Ebene mit der id des Containers und dem expires_at-Zeitstempel. Übergib diese ID im container-Anfrageparameter auf oberster Ebene zurück, um denselben Container weiterzuverwenden. Siehe Container-Wiederverwendung.
Das Code-Execution-Tool kann je nach Operation zwei Arten von Ergebnissen zurückgeben:
{
"type": "server_tool_use",
"id": "srvtoolu_01B3C4D5E6F7G8H9I0J1K2L3",
"name": "bash_code_execution",
"input": {
"command": "ls -la | head -5"
}
},
{
"type": "bash_code_execution_tool_result",
"tool_use_id": "srvtoolu_01B3C4D5E6F7G8H9I0J1K2L3",
"content": {
"type": "bash_code_execution_result",
"stdout": "total 24\ndrwxr-xr-x 2 user user 4096 Jan 1 12:00 .\ndrwxr-xr-x 3 user user 4096 Jan 1 11:00 ..\n-rw-r--r-- 1 user user 220 Jan 1 12:00 data.csv\n-rw-r--r-- 1 user user 180 Jan 1 12:00 config.json",
"stderr": "",
"return_code": 0,
"content": []
}
}Datei anzeigen:
{
"type": "server_tool_use",
"id": "srvtoolu_01C4D5E6F7G8H9I0J1K2L3M4",
"name": "text_editor_code_execution",
"input": {
"command": "view",
"path": "config.json"
}
},
{
"type": "text_editor_code_execution_tool_result",
"tool_use_id": "srvtoolu_01C4D5E6F7G8H9I0J1K2L3M4",
"content": {
"type": "text_editor_code_execution_view_result",
"file_type": "text",
"content": "{\n \"setting\": \"value\",\n \"debug\": true\n}",
"num_lines": 4,
"start_line": 1,
"total_lines": 4
}
}Datei erstellen:
{
"type": "server_tool_use",
"id": "srvtoolu_01D5E6F7G8H9I0J1K2L3M4N5",
"name": "text_editor_code_execution",
"input": {
"command": "create",
"path": "new_file.txt",
"file_text": "Hello, World!"
}
},
{
"type": "text_editor_code_execution_tool_result",
"tool_use_id": "srvtoolu_01D5E6F7G8H9I0J1K2L3M4N5",
"content": {
"type": "text_editor_code_execution_create_result",
"is_file_update": false
}
}Datei bearbeiten (str_replace):
{
"type": "server_tool_use",
"id": "srvtoolu_01E6F7G8H9I0J1K2L3M4N5O6",
"name": "text_editor_code_execution",
"input": {
"command": "str_replace",
"path": "config.json",
"old_str": "\"debug\": true",
"new_str": "\"debug\": false"
}
},
{
"type": "text_editor_code_execution_tool_result",
"tool_use_id": "srvtoolu_01E6F7G8H9I0J1K2L3M4N5O6",
"content": {
"type": "text_editor_code_execution_str_replace_result",
"old_start": 3,
"old_lines": 1,
"new_start": 3,
"new_lines": 1,
"lines": ["- \"debug\": true", "+ \"debug\": false"]
}
}Bash-Befehlsergebnisse (bash_code_execution_result) enthalten:
stdout: Ausgabe bei erfolgreicher Ausführungstderr: Fehlermeldungen, wenn die Ausführung fehlschlägtreturn_code: 0 bei Erfolg, ungleich null bei Fehlercontent: Eine Liste mit einem Eintrag für jede Datei, die der Befehl erstellt hat. Jeder Eintrag enthält die file_id, um die Datei mit der Files API abzurufenDateioperationsergebnisse haben ihre eigenen Felder:
text_editor_code_execution_view_result): file_type, content, num_lines, start_line, total_linestext_editor_code_execution_create_result): is_file_update (ob die Datei bereits existierte)text_editor_code_execution_str_replace_result): old_start, old_lines, new_start, new_lines, lines (Diff-Format)Jeder Tool-Typ kann spezifische Fehler zurückgeben:
Allgemeine Fehler (alle Tools):
{
"type": "bash_code_execution_tool_result",
"tool_use_id": "srvtoolu_01VfmxgZ46TiHbmXgy928hQR",
"content": {
"type": "bash_code_execution_tool_result_error",
"error_code": "unavailable"
}
}Fehlercodes nach Tool-Typ:
| Tool | Fehlercode | Beschreibung |
|---|---|---|
| Alle Tools | unavailable | Das Tool ist vorübergehend nicht verfügbar |
| Alle Tools | execution_time_exceeded | Der Tool-Aufruf hat die maximale Ausführungszeit überschritten |
| Alle Tools | invalid_tool_input | Ungültige Parameter an das Tool übergeben |
| Alle Tools | too_many_requests | Ratenlimit für die Tool-Nutzung überschritten |
| bash | output_file_too_large | Befehlsausgabe hat die maximale Größe überschritten |
| text_editor | file_not_found | Datei existiert nicht (bei View-/Edit-Operationen) |
Ein abgelaufener Container kann nicht wiederverwendet werden: Anfragen, die ihn referenzieren, geben einen Fehler zurück, anstatt ihn wiederherzustellen. Sende die Anfrage erneut ohne den container-Parameter, um einen neuen Container zu erhalten.
pause_turn-Stop-ReasonDie Antwort kann einen pause_turn-Stop-Reason enthalten, der anzeigt, dass die API einen lang laufenden Turn pausiert hat. Du kannst die Antwort unverändert in einer nachfolgenden Anfrage zurückgeben, damit Claude seinen Turn fortsetzt, oder den Inhalt ändern, wenn du die Konversation unterbrechen möchtest.
Das Code-Execution-Tool läuft in einer sicheren, containerisierten Umgebung, die speziell für die Code-Ausführung entwickelt wurde, mit einem stärkeren Fokus auf Python.
execution_time_exceeded-Fehler zurück. Mit programmatischem Tool-Calling hat jede REPL-Zelle zusätzlich ein 90-Sekunden-Wall-Clock-LimitDie Sandbox-Python-Umgebung enthält diese häufig verwendeten Bibliotheken:
Der Container enthält auch Kommandozeilen-Tools wie unzip, unrar, 7zip, bc, rg (ripgrep), fd und sqlite.
Der Container hat keinen Internetzugang, sodass Claude zur Laufzeit keine zusätzlichen Pakete herunterladen oder installieren kann: Nur die vorinstallierten Bibliotheken sind verfügbar.
Du kannst einen bestehenden Container über mehrere API-Anfragen hinweg wiederverwenden, indem du die Container-ID aus einer vorherigen Antwort übergibst.
Dadurch kannst du erstellte Dateien zwischen Anfragen beibehalten. Mit code_execution_20260120 oder neuer und programmatischem Tool-Calling bleibt auch der Zustand des Python-Interpreters erhalten.
Container laufen 30 Tage nach der Erstellung ab. Nach etwa 5 Minuten Inaktivität wird ein Container als Checkpoint gespeichert, und das Senden einer Anfrage mit seiner ID innerhalb des 30-Tage-Fensters stellt ihn wieder her. Der expires_at-Zeitstempel im container-Objekt der Antwort ist ein kürzerer rollierender Wert und gibt nicht das 30-Tage-Limit an. Ein abgelaufener Container kann nicht wiederverwendet werden. Sende die Anfrage erneut ohne den container-Parameter, um einen neuen Container zu erhalten.
client = anthropic.Anthropic()
# Erste Anfrage: Erstelle eine Datei mit einer Zufallszahl in einem neuen Container
response1 = client.messages.create(
model="claude-opus-5",
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Write a file with a random number and save it to '/tmp/number.txt'",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Zweite Anfrage: Übergib die Container-ID zurück, damit Claude denselben Container wiederverwendet
response2 = client.messages.create(
container=response1.container.id,
model="claude-opus-5",
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Read the number from '/tmp/number.txt' and calculate its square",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
print(response2.to_json())Wenn du Code-Ausführung zusammen mit clientseitig bereitgestellten Tools verwendest, die ebenfalls Code ausführen (wie ein Bash-Tool oder eine benutzerdefinierte REPL), arbeitet Claude in einer Multicomputer-Umgebung. Das Code-Execution-Tool läuft in Anthropics Sandbox-Container, während deine clientseitig bereitgestellten Tools in einer separaten Umgebung laufen, die du kontrollierst. Claude kann diese Umgebungen manchmal verwechseln und versuchen, das falsche Tool zu verwenden oder anzunehmen, dass der Zustand zwischen ihnen geteilt wird.
Um dies zu vermeiden, füge deinem System-Prompt Anweisungen hinzu, die den Unterschied klarstellen:
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 stateDies ist besonders wichtig, wenn du Code-Ausführung mit Web-Suche oder Web-Fetch kombinierst, die Code-Ausführung automatisch aktivieren. Wenn deine Anwendung bereits ein clientseitiges Shell-Tool bereitstellt, erzeugt die automatische Code-Ausführung eine zweite Ausführungsumgebung, zwischen denen Claude unterscheiden muss.
Wenn Claude eines deiner Client-Tools neben der Code-Ausführung aufruft, gibt die API den Code-Ausführungsaufruf ohne sein Ergebnis zurück. Das Ergebnis kommt in einer späteren Antwort, nachdem du die tool_result-Blöcke für deine Client-Tools zurückgesendet hast.
Mit aktiviertem Streaming ("stream": true) erhältst du Code-Ausführungs-Events, sobald sie auftreten. Die Sub-Tool-Eingabe wird als input_json_delta-Events gestreamt, und jeder Ergebnisblock kommt vollständig in einem einzelnen content_block_start-Event an:
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "bash_code_execution"}}
// Tool input streamed as partial JSON
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"command\": \"python analyze.py\"}"}}
// Pause while the command runs
// Execution result delivered as a complete block
event: content_block_start
data: {"type": "content_block_start", "index": 2, "content_block": {"type": "bash_code_execution_tool_result", "tool_use_id": "srvtoolu_xyz789", "content": {"type": "bash_code_execution_result", "stdout": " A B C\n0 1 2 3\n1 4 5 6", "stderr": "", "return_code": 0, "content": []}}}Du kannst das Code-Execution-Tool in der Messages Batches API verwenden. Code-Execution-Tool-Aufrufe über die Messages Batches API werden genauso berechnet wie in regulären Messages-API-Anfragen.
Code-Ausführung ist kostenlos, wenn sie mit Websuche oder Web-Fetch verwendet wird. Wenn web_search_20260209 (oder neuer) oder web_fetch_20260209 (oder neuer) in deiner API-Anfrage enthalten ist, fallen für Code-Ausführungs-Tool-Aufrufe keine zusätzlichen Kosten über die standardmäßigen Input- und Output-Token-Kosten hinaus an.
Bei Verwendung ohne diese Tools wird die Code-Ausführung nach Ausführungszeit abgerechnet, die getrennt von der Token-Nutzung erfasst wird:
Die Nutzung der Code-Ausführung wird in der Antwort erfasst:
{
"usage": {
"input_tokens": 105,
"output_tokens": 239,
"server_tool_use": {
"code_execution_requests": 1
}
}
}Die neueste Tool-Version ist code_execution_20260521. Um zwischen den drei aktuellen Versionen zu wechseln, aktualisiere den type-String in deiner Anfrage: Alle drei geben die in Antwortformat dokumentierten Antwortblöcke zurück. Siehe Modellkompatibilität für Details dazu, was jede Version hinzufügt und welche Modelle sie unterstützen.
Der Rest dieses Abschnitts behandelt die Migration vom Legacy-Tool code_execution_20250522 (nur Python) zu den aktuellen Tool-Versionen.
| Komponente | Legacy | Aktuell |
|---|---|---|
| Beta-Header | code-execution-2025-05-22 | Keiner erforderlich |
| Tool-Typ | code_execution_20250522 | code_execution_20250825 oder neuer |
| Fähigkeiten | Nur Python | Bash-Befehle, Dateioperationen |
| Antworttypen | code_execution_result | bash_code_execution_result, text_editor_code_execution_*_result |
Um zu aktualisieren, ändere den Tool-Typ in deinen API-Anfragen:
- "type": "code_execution_20250522"
+ "type": "code_execution_20250825"Überprüfe die Antwortverarbeitung (wenn du Antworten programmatisch parst):
Code-Ausführung läuft in serverseitigen Sandbox-Containern. Container-Daten, einschließlich Ausführungsartefakten, hochgeladener Dateien und Ausgaben, werden bis zu 30 Tage aufbewahrt. Diese Aufbewahrung gilt für alle Daten, die innerhalb der Container-Umgebung verarbeitet werden. Dateien, die die Code-Ausführung in der Files API erstellt (abrufbar mit client.beta.files.download()), bleiben bestehen, bis sie explizit gelöscht werden.
Für die ZDR-Eignung über alle Funktionen hinweg siehe API und Datenaufbewahrung.
Kombiniere ein schnelleres Executor-Modell mit einem intelligenteren Advisor-Modell, das während der Generierung strategische Anleitung gibt.
Rufe deine eigenen Tools aus Code auf, der innerhalb des Code-Ausführungs-Containers läuft.
Lade Dateien zur Analyse hoch und lade die Dateien herunter, die die Code-Ausführung erstellt.
Erfahre, wie du Agent Skills verwendest, um Claudes Fähigkeiten über die API zu erweitern.
Was this page helpful?