Was this page helpful?
Claude peut analyser des données, créer des visualisations, effectuer des calculs complexes, exécuter des commandes système, créer et modifier des fichiers, et traiter des fichiers téléchargés directement dans la conversation API. L'outil d'exécution de code permet à Claude d'exécuter des commandes Bash et de manipuler des fichiers, y compris l'écriture de code, dans un environnement sandbox sécurisé.
L'exécution de code est gratuite lorsqu'elle est utilisée avec la recherche web ou la récupération web. Lorsque web_search_20260209 ou web_fetch_20260209 est inclus dans votre requête, il n'y a pas de frais supplémentaires pour les appels à l'outil d'exécution de code au-delà des coûts standard des tokens d'entrée et de sortie. Les frais standard d'exécution de code s'appliquent lorsque ces outils ne sont pas inclus.
L'exécution de code est une primitive fondamentale pour la construction d'agents haute performance. Elle permet un filtrage dynamique dans les outils de recherche web et de récupération web, permettant à Claude de traiter les résultats avant qu'ils n'atteignent la fenêtre de contexte — améliorant la précision tout en réduisant la consommation de tokens.
Veuillez nous contacter via notre formulaire de retour pour partager vos commentaires sur cette fonctionnalité.
This feature is not eligible for Zero Data Retention (ZDR). Data is retained according to the feature's standard retention policy.
L'outil d'exécution de code est disponible sur les modèles suivants :
| Modèle | Version de l'outil |
|---|---|
Claude Opus 4.6 (claude-opus-4-6) | code_execution_20250825 |
Claude Sonnet 4.6 (claude-sonnet-4-6) | code_execution_20250825 |
Claude Sonnet 4.5 (claude-sonnet-4-5-20250929) | code_execution_20250825 |
Claude Opus 4.5 (claude-opus-4-5-20251101) | code_execution_20250825 |
Claude Opus 4.1 (claude-opus-4-1-20250805) | code_execution_20250825 |
Claude Opus 4 (claude-opus-4-20250514) | code_execution_20250825 |
Claude Sonnet 4 (claude-sonnet-4-20250514) | code_execution_20250825 |
Claude Sonnet 3.7 (claude-3-7-sonnet-20250219) (déprécié) | code_execution_20250825 |
Claude Haiku 4.5 (claude-haiku-4-5-20251001) | code_execution_20250825 |
Claude Haiku 3.5 (claude-3-5-haiku-latest) (déprécié) | code_execution_20250825 |
La version actuelle code_execution_20250825 prend en charge les commandes Bash et les opérations sur les fichiers. Une version héritée code_execution_20250522 (Python uniquement) est également disponible. Voir Mise à niveau vers la dernière version de l'outil pour les détails de migration.
Les versions plus anciennes de l'outil ne sont pas garanties d'être rétrocompatibles avec les modèles plus récents. Utilisez toujours la version de l'outil qui correspond à la version de votre modèle.
L'exécution de code est disponible sur :
L'exécution de code n'est actuellement pas disponible sur Amazon Bedrock ou Google Vertex AI.
Voici un exemple simple qui demande à Claude d'effectuer un calcul :
Lorsque vous ajoutez l'outil d'exécution de code à votre requête API :
Lorsque vous fournissez l'exécution de code aux côtés d'outils fournis par le client qui exécutent également du code (comme un outil bash ou un REPL personnalisé), Claude opère dans un environnement multi-ordinateurs. L'outil d'exécution de code s'exécute dans le conteneur sandbox d'Anthropic, tandis que vos outils fournis par le client s'exécutent dans un environnement séparé que vous contrôlez. Claude peut parfois confondre ces environnements, tentant d'utiliser le mauvais outil ou supposant que l'état est partagé entre eux.
Pour éviter cela, ajoutez des instructions à votre prompt système qui clarifient la distinction :
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 stateCeci est particulièrement important lors de la combinaison de l'exécution de code avec la recherche web ou la récupération web, qui activent l'exécution de code automatiquement. Si votre application fournit déjà un outil shell côté client, l'exécution de code automatique crée un second environnement d'exécution que Claude doit distinguer.
Demandez à Claude de vérifier les informations système et d'installer des packages :
Claude peut créer, afficher et modifier des fichiers directement dans le sandbox en utilisant les capacités de manipulation de fichiers :
Pour analyser vos propres fichiers de données (CSV, Excel, images, etc.), téléchargez-les via l'API Files et référencez-les dans votre requête :
L'utilisation de l'API Files avec l'exécution de code nécessite l'en-tête bêta de l'API Files : "anthropic-beta": "files-api-2025-04-14"
L'environnement Python peut traiter divers types de fichiers téléchargés via l'API Files, notamment :
container_uploadLorsque Claude crée des fichiers lors de l'exécution de code, vous pouvez récupérer ces fichiers en utilisant l'API Files :
Un flux de travail complexe utilisant toutes les capacités :
L'outil d'exécution de code ne nécessite aucun paramètre supplémentaire :
{
"type": "code_execution_20250825",
"name": "code_execution"
}Lorsque cet outil est fourni, Claude obtient automatiquement accès à deux sous-outils :
bash_code_execution : Exécuter des commandes shelltext_editor_code_execution : Afficher, créer et modifier des fichiers, y compris l'écriture de codeL'outil d'exécution de code peut retourner deux types de résultats selon l'opération :
{
"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
}
}Afficher un fichier :
{
"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_result",
"file_type": "text",
"content": "{\n \"setting\": \"value\",\n \"debug\": true\n}",
"numLines": 4,
"startLine": 1,
"totalLines": 4
}
}Créer un fichier :
{
"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_result",
"is_file_update": false
}
}Modifier un fichier (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_result",
"oldStart": 3,
"oldLines": 1,
"newStart": 3,
"newLines": 1,
"lines": ["- \"debug\": true", "+ \"debug\": false"]
}
}Tous les résultats d'exécution incluent :
stdout : Sortie de l'exécution réussiestderr : Messages d'erreur si l'exécution échouereturn_code : 0 pour le succès, non nul pour l'échecChamps supplémentaires pour les opérations sur les fichiers :
file_type, content, numLines, startLine, totalLinesis_file_update (si le fichier existait déjà)oldStart, oldLines, newStart, newLines, lines (format diff)Chaque type d'outil peut retourner des erreurs spécifiques :
Erreurs communes (tous les outils) :
{
"type": "bash_code_execution_tool_result",
"tool_use_id": "srvtoolu_01VfmxgZ46TiHbmXgy928hQR",
"content": {
"type": "bash_code_execution_tool_result_error",
"error_code": "unavailable"
}
}Codes d'erreur par type d'outil :
| Outil | Code d'erreur | Description |
|---|---|---|
| Tous les outils | unavailable | L'outil est temporairement indisponible |
| Tous les outils | execution_time_exceeded | L'exécution a dépassé la limite de temps maximale |
| Tous les outils | container_expired | Le conteneur a expiré et n'est plus disponible |
| Tous les outils | invalid_tool_input | Paramètres invalides fournis à l'outil |
| Tous les outils | too_many_requests | Limite de débit dépassée pour l'utilisation de l'outil |
| text_editor | file_not_found |
pause_turnLa réponse peut inclure une raison d'arrêt pause_turn, ce qui indique que l'API a mis en pause un tour de longue durée. Vous pouvez fournir la réponse telle quelle dans une requête ultérieure pour laisser Claude continuer son tour, ou modifier le contenu si vous souhaitez interrompre la conversation.
L'outil d'exécution de code s'exécute dans un environnement conteneurisé sécurisé conçu spécifiquement pour l'exécution de code, avec un accent plus important sur Python.
L'environnement Python sandbox inclut ces bibliothèques couramment utilisées :
Vous pouvez réutiliser un conteneur existant sur plusieurs requêtes API en fournissant l'ID du conteneur d'une réponse précédente. Cela vous permet de maintenir les fichiers créés entre les requêtes.
Avec le streaming activé, vous recevrez les événements d'exécution de code au fur et à mesure qu'ils se produisent :
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "code_execution"}}
// Code execution streamed
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"code\":\"import pandas as pd\\ndf = pd.read_csv('data.csv')\\nprint(df.head())\"}"}}
// Pause while code executes
// Execution results streamed
event: content_block_start
data: {"type": "content_block_start", "index": 2, "content_block": {"type": "code_execution_tool_result", "tool_use_id": "srvtoolu_xyz789", "content": {"stdout": " A B C\n0 1 2 3\n1 4 5 6", "stderr": ""}}}Vous pouvez inclure l'outil d'exécution de code dans l'API Messages Batches. Les appels à l'outil d'exécution de code via l'API Messages Batches sont tarifés de la même manière que ceux des requêtes API Messages régulières.
Code execution is free when used with web search or web fetch. When web_search_20260209 or web_fetch_20260209 is included in your API request, there are no additional charges for code execution tool calls beyond the standard input and output token costs.
When used without these tools, code execution is billed by execution time, tracked separately from token usage:
Code execution usage is tracked in the response:
"usage": {
"input_tokens": 105,
"output_tokens": 239,
"server_tool_use": {
"code_execution_requests": 1
}
}En passant à code-execution-2025-08-25, vous accédez à la manipulation de fichiers et aux capacités Bash, y compris le code dans plusieurs langages. Il n'y a pas de différence de prix.
| Composant | Héritage | Actuel |
|---|---|---|
| En-tête bêta | code-execution-2025-05-22 | code-execution-2025-08-25 |
| Type d'outil | code_execution_20250522 | code_execution_20250825 |
| Capacités | Python uniquement | Commandes Bash, opérations sur les fichiers |
| Types de réponse | code_execution_result | bash_code_execution_result, text_editor_code_execution_result |
Pour mettre à niveau, mettez à jour le type d'outil dans vos requêtes API :
- "type": "code_execution_20250522"
+ "type": "code_execution_20250825"Vérifiez la gestion des réponses (si vous analysez les réponses par programmation) :
L'outil d'exécution de code alimente l'appel d'outils par programmation, qui permet à Claude d'écrire du code qui appelle vos outils personnalisés par programmation dans le conteneur d'exécution. Cela permet des flux de travail multi-outils efficaces, le filtrage des données avant qu'elles n'atteignent le contexte de Claude, et une logique conditionnelle complexe.
# Enable programmatic calling for your tools
response = client.messages.create(
model="claude-opus-4-6",
max_tokens=4096,
messages=[
{"role": "user", "content": "Get weather for 5 cities and find the warmest"}
],
tools=[
{"type": "code_execution_20250825", "name": "code_execution"},
{
"name": "get_weather",
"description": "Get weather for a city",
"input_schema": {...},
"allowed_callers": [
"code_execution_20250825"
], # Enable programmatic calling
},
],
)En savoir plus dans la documentation sur l'appel d'outils par programmation.
L'exécution de code s'effectue dans des conteneurs sandbox côté serveur. Les données des conteneurs, y compris les artefacts d'exécution, les fichiers téléchargés et les sorties, sont conservées pendant 30 jours maximum. Cette conservation s'applique à toutes les données traitées dans l'environnement du conteneur.
Pour l'éligibilité ZDR sur toutes les fonctionnalités, consultez API et conservation des données.
L'outil d'exécution de code permet à Claude d'utiliser les Agent Skills. Les Skills sont des capacités modulaires composées d'instructions, de scripts et de ressources qui étendent les fonctionnalités de Claude.
Pour en savoir plus, consultez la documentation des Agent Skills et le guide de l'API des Agent Skills.
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--data '{
"model": "claude-opus-4-6",
"max_tokens": 4096,
"messages": [
{
"role": "user",
"content": "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"
}]
}'curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--data '{
"model": "claude-opus-4-6",
"max_tokens": 4096,
"messages": [{
"role": "user",
"content": "Check the Python version and list installed packages"
}],
"tools": [{
"type": "code_execution_20250825",
"name": "code_execution"
}]
}'curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--data '{
"model": "claude-opus-4-6",
"max_tokens": 4096,
"messages": [{
"role": "user",
"content": "Create a config.yaml file with database settings, then update the port from 5432 to 3306"
}],
"tools": [{
"type": "code_execution_20250825",
"name": "code_execution"
}]
}'# First, upload a file
curl https://api.anthropic.com/v1/files \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "anthropic-beta: files-api-2025-04-14" \
--form 'file=@"data.csv"' \
# Then use the file_id with code execution
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "anthropic-beta: files-api-2025-04-14" \
--header "content-type: application/json" \
--data '{
"model": "claude-opus-4-6",
"max_tokens": 4096,
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "Analyze this CSV data"},
{"type": "container_upload", "file_id": "file_abc123"}
]
}],
"tools": [{
"type": "code_execution_20250825",
"name": "code_execution"
}]
}'from anthropic import Anthropic
# Initialize the client
client = Anthropic()
# Request code execution that creates files
response = client.beta.messages.create(
model="claude-opus-4-6",
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"}],
)
# Extract file IDs from the response
def extract_file_ids(response):
file_ids = []
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 file in content_item.content:
if hasattr(file, "file_id"):
file_ids.append(file.file_id)
return file_ids
# Download the created files
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}")# First, upload a file
curl https://api.anthropic.com/v1/files \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "anthropic-beta: files-api-2025-04-14" \
--form 'file=@"data.csv"' \
> file_response.json
# Extract file_id (using jq)
FILE_ID=$(jq -r '.id' file_response.json)
# Then use it with code execution
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "anthropic-beta: files-api-2025-04-14" \
--header "content-type: application/json" \
--data '{
"model": "claude-opus-4-6",
"max_tokens": 4096,
"messages": [{
"role": "user",
"content": [
{
"type": "text",
"text": "Analyze this CSV data: create a summary report, save visualizations, and create a README with the findings"
},
{
"type": "container_upload",
"file_id": "'$FILE_ID'"
}
]
}],
"tools": [{
"type": "code_execution_20250825",
"name": "code_execution"
}]
}'| Le fichier n'existe pas (pour les opérations view/edit) |
| text_editor | string_not_found | La valeur old_str n'a pas été trouvée dans le fichier (pour str_replace) |
import os
from anthropic import Anthropic
# Initialize the client
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
# First request: Create a file with a random number
response1 = client.messages.create(
model="claude-opus-4-6",
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"}],
)
# Extract the container ID from the first response
container_id = response1.container.id
# Second request: Reuse the container to read the file
response2 = client.messages.create(
container=container_id, # Reuse the same container
model="claude-opus-4-6",
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"}],
)