Claude puede analizar datos, crear visualizaciones, realizar cálculos complejos, ejecutar comandos del sistema, crear y editar archivos, y procesar archivos subidos directamente dentro de la conversación de la API. La herramienta de ejecución de código permite a Claude ejecutar comandos Bash y manipular archivos, incluyendo escribir código, en un entorno seguro y aislado.

La herramienta de ejecución de código está actualmente en beta pública.

Para usar esta función, añade el encabezado beta "code-execution-2025-08-25" a tus solicitudes de API.

Recientemente actualizamos la herramienta de ejecución de código para soportar comandos Bash y manipulación directa de archivos. Para instrucciones sobre cómo actualizar a la última versión de la herramienta, consulta Actualizar a la última versión de la herramienta.

Modelos compatibles

La herramienta de ejecución de código está disponible en:

  • Claude Opus 4.1 (claude-opus-4-1-20250805)
  • Claude Opus 4 (claude-opus-4-20250514)
  • Claude Sonnet 4 (claude-sonnet-4-20250514)
  • Claude Sonnet 3.7 (claude-3-7-sonnet-20250219)
  • Claude Haiku 3.5 (claude-3-5-haiku-latest)

Inicio rápido

Aquí tienes un ejemplo simple que le pide a Claude que realice un cálculo:

curl https://api.anthropic.com/v1/messages \
    --header "x-api-key: $ANTHROPIC_API_KEY" \
    --header "anthropic-version: 2023-06-01" \
    --header "anthropic-beta: code-execution-2025-08-25" \
    --header "content-type: application/json" \
    --data '{
        "model": "claude-opus-4-1-20250805",
        "max_tokens": 4096,
        "messages": [
            {
                "role": "user",
                "content": "Calcula la media y la desviación estándar de [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
            }
        ],
        "tools": [{
            "type": "code_execution_20250825",
            "name": "code_execution"
        }]
    }'

Cómo funciona la ejecución de código

Cuando añades la herramienta de ejecución de código a tu solicitud de API:

  1. Claude evalúa si la ejecución de código ayudaría a responder tu pregunta
  2. La herramienta proporciona automáticamente a Claude las siguientes capacidades:
    • Comandos Bash: Ejecutar comandos de shell para operaciones del sistema y gestión de paquetes
    • Operaciones de archivos: Crear, ver y editar archivos directamente, incluyendo escribir código
  3. Claude puede usar cualquier combinación de estas capacidades en una sola solicitud
  4. Todas las operaciones se ejecutan en un entorno sandbox seguro
  5. Claude proporciona resultados con cualquier gráfico generado, cálculos o análisis

Cómo usar la herramienta

Ejecutar comandos Bash

Pide a Claude que verifique información del sistema e instale paquetes:

curl https://api.anthropic.com/v1/messages \
    --header "x-api-key: $ANTHROPIC_API_KEY" \
    --header "anthropic-version: 2023-06-01" \
    --header "anthropic-beta: code-execution-2025-08-25" \
    --header "content-type: application/json" \
    --data '{
        "model": "claude-opus-4-1-20250805",
        "max_tokens": 4096,
        "messages": [{
            "role": "user",
            "content": "Verifica la versión de Python y lista los paquetes instalados"
        }],
        "tools": [{
            "type": "code_execution_20250825",
            "name": "code_execution"
        }]
    }'

Crear y editar archivos directamente

Claude puede crear, ver y editar archivos directamente en el sandbox usando las capacidades de manipulación de archivos:

curl https://api.anthropic.com/v1/messages \
    --header "x-api-key: $ANTHROPIC_API_KEY" \
    --header "anthropic-version: 2023-06-01" \
    --header "anthropic-beta: code-execution-2025-08-25" \
    --header "content-type: application/json" \
    --data '{
        "model": "claude-opus-4-1-20250805",
        "max_tokens": 4096,
        "messages": [{
            "role": "user",
            "content": "Crea un archivo config.yaml con configuraciones de base de datos, luego actualiza el puerto de 5432 a 3306"
        }],
        "tools": [{
            "type": "code_execution_20250825",
            "name": "code_execution"
        }]
    }'

Subir y analizar tus propios archivos

Para analizar tus propios archivos de datos (CSV, Excel, imágenes, etc.), súbelos a través de la API de Archivos y refiérelos en tu solicitud:

Usar la API de Archivos con Ejecución de Código requiere dos encabezados beta: "anthropic-beta": "code-execution-2025-08-25,files-api-2025-04-14"

El entorno Python puede procesar varios tipos de archivos subidos a través de la API de Archivos, incluyendo:

  • CSV
  • Excel (.xlsx, .xls)
  • JSON
  • XML
  • Imágenes (JPEG, PNG, GIF, WebP)
  • Archivos de texto (.txt, .md, .py, etc)

Subir y analizar archivos

  1. Sube tu archivo usando la API de Archivos
  2. Referencia el archivo en tu mensaje usando un bloque de contenido container_upload
  3. Incluye la herramienta de ejecución de código en tu solicitud de API
# Primero, sube un archivo
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"' \

# Luego usa el file_id con ejecución de código
curl https://api.anthropic.com/v1/messages \
    --header "x-api-key: $ANTHROPIC_API_KEY" \
    --header "anthropic-version: 2023-06-01" \
    --header "anthropic-beta: code-execution-2025-08-25,files-api-2025-04-14" \
    --header "content-type: application/json" \
    --data '{
        "model": "claude-opus-4-1-20250805",
        "max_tokens": 4096,
        "messages": [{
            "role": "user",
            "content": [
                {"type": "text", "text": "Analiza estos datos CSV"},
                {"type": "container_upload", "file_id": "file_abc123"}
            ]
        }],
        "tools": [{
            "type": "code_execution_20250825",
            "name": "code_execution"
        }]
    }'

Recuperar archivos generados

Cuando Claude crea archivos durante la ejecución de código, puedes recuperar estos archivos usando la API de Archivos:

from anthropic import Anthropic

# Inicializa el cliente
client = Anthropic()

# Solicita ejecución de código que crea archivos
response = client.beta.messages.create(
    model="claude-opus-4-1-20250805",
    betas=["code-execution-2025-08-25", "files-api-2025-04-14"],
    max_tokens=4096,
    messages=[{
        "role": "user",
        "content": "Crea una visualización matplotlib y guárdala como output.png"
    }],
    tools=[{
        "type": "code_execution_20250825",
        "name": "code_execution"
    }]
)

# Extrae IDs de archivo de la respuesta
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.get('type') == 'code_execution_result':
                for file in content_item.get('content', []):
                    file_ids.append(file['file_id'])
    return file_ids

# Descarga los archivos creados
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"Descargado: {file_metadata.filename}")

Combinar operaciones

Un flujo de trabajo complejo usando todas las capacidades:

# Primero, sube un archivo
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

# Extrae file_id (usando jq)
FILE_ID=$(jq -r '.id' file_response.json)

# Luego úsalo con ejecución de código
curl https://api.anthropic.com/v1/messages \
    --header "x-api-key: $ANTHROPIC_API_KEY" \
    --header "anthropic-version: 2023-06-01" \
    --header "anthropic-beta: code-execution-2025-08-25,files-api-2025-04-14" \
    --header "content-type: application/json" \
    --data '{
        "model": "claude-opus-4-1-20250805",
        "max_tokens": 4096,
        "messages": [{
            "role": "user",
            "content": [
                {
                    "type": "text", 
                    "text": "Analiza estos datos CSV: crea un informe resumen, guarda visualizaciones y crea un README con los hallazgos"
                },
                {
                    "type": "container_upload", 
                    "file_id": "'$FILE_ID'"
                }
            ]
        }],
        "tools": [{
            "type": "code_execution_20250825",
            "name": "code_execution"
        }]
    }'

Definición de la herramienta

La herramienta de ejecución de código no requiere parámetros adicionales:

JSON
{
  "type": "code_execution_20250825",
  "name": "code_execution"
}

Cuando se proporciona esta herramienta, Claude obtiene automáticamente acceso a dos sub-herramientas:

  • bash_code_execution: Ejecutar comandos de shell
  • text_editor_code_execution: Ver, crear y editar archivos, incl

Formato de respuesta

La herramienta de ejecución de código puede devolver dos tipos de resultados dependiendo de la operación:

Respuesta de comando Bash

{
  "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
  }
}

Respuestas de operaciones de archivos

Ver archivo:

{
  "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
  }
}

Crear archivo:

{
  "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
  }
}

Editar archivo (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"]
  }
}

Resultados

Todos los resultados de ejecución incluyen:

  • stdout: Salida de la ejecución exitosa
  • stderr: Mensajes de error si la ejecución falla
  • return_code: 0 para éxito, no-cero para falla

Campos adicionales para operaciones de archivos:

  • Ver: file_type, content, numLines, startLine, totalLines
  • Crear: is_file_update (si el archivo ya existía)
  • Editar: oldStart, oldLines, newStart, newLines, lines (formato diff)

Errores

Cada tipo de herramienta puede devolver errores específicos:

Errores comunes (todas las herramientas):

{
  "type": "bash_code_execution_tool_result",
  "tool_use_id": "srvtoolu_01VfmxgZ46TiHbmXgy928hQR",
  "content": {
    "type": "bash_code_execution_tool_result_error",
    "error_code": "unavailable"
  }
}

Códigos de error por tipo de herramienta:

HerramientaCódigo de ErrorDescripción
Todas las herramientasunavailableLa herramienta está temporalmente no disponible
Todas las herramientasexecution_time_exceededLa ejecución excedió el límite máximo de tiempo
Todas las herramientascontainer_expiredEl contenedor expiró y ya no está disponible
Todas las herramientasinvalid_tool_inputParámetros inválidos proporcionados a la herramienta
Todas las herramientastoo_many_requestsLímite de tasa excedido para uso de herramienta
text_editorfile_not_foundEl archivo no existe (para operaciones ver/editar)
text_editorstring_not_foundEl old_str no se encontró en el archivo (para str_replace)

Razón de parada pause_turn

La respuesta puede incluir una razón de parada pause_turn, que indica que la API pausó un turno de larga duración. Puedes proporcionar la respuesta tal como está en una solicitud posterior para permitir que Claude continúe su turno, o modificar el contenido si deseas interrumpir la conversación.

Contenedores

La herramienta de ejecución de código se ejecuta en un entorno contenedorizado seguro diseñado específicamente para la ejecución de código, con un mayor enfoque en Python.

Entorno de ejecución

  • Versión de Python: 3.11.12
  • Sistema operativo: Contenedor basado en Linux
  • Arquitectura: x86_64 (AMD64)

Límites de recursos

  • Memoria: 1GiB RAM
  • Espacio en disco: 5GiB de almacenamiento de espacio de trabajo
  • CPU: 1 CPU

Redes y seguridad

  • Acceso a internet: Completamente deshabilitado por seguridad
  • Conexiones externas: No se permiten solicitudes de red salientes
  • Aislamiento de sandbox: Aislamiento completo del sistema host y otros contenedores
  • Acceso a archivos: Limitado solo al directorio de espacio de trabajo
  • Alcance del espacio de trabajo: Como Archivos, los contenedores están limitados al espacio de trabajo de la clave API
  • Expiración: Los contenedores expiran 1 hora después de la creación

Bibliotecas preinstaladas

El entorno Python aislado incluye estas bibliotecas comúnmente utilizadas:

  • Ciencia de Datos: pandas, numpy, scipy, scikit-learn, statsmodels
  • Visualización: matplotlib, seaborn
  • Procesamiento de Archivos: pyarrow, openpyxl, xlrd, pillow, python-pptx, python-docx, pypdf, pdfplumber, pypdfium2, pdf2image, pdfkit, tabula-py, reportlab[pycairo], Img2pdf
  • Matemáticas y Computación: sympy, mpmath
  • Utilidades: tqdm, python-dateutil, pytz, joblib, unzip, unrar, 7zip, bc, rg (ripgrep), fd, sqlite

Reutilización de contenedores

Puedes reutilizar un contenedor existente a través de múltiples solicitudes de API proporcionando el ID del contenedor de una respuesta anterior. Esto te permite mantener archivos creados entre solicitudes.

Ejemplo

import os
from anthropic import Anthropic

# Inicializa el cliente
client = Anthropic(
    api_key=os.getenv("ANTHROPIC_API_KEY")
)

# Primera solicitud: Crear un archivo con un número aleatorio
response1 = client.beta.messages.create(
    model="claude-opus-4-1-20250805",
    betas=["code-execution-2025-08-25"],
    max_tokens=4096,
    messages=[{
        "role": "user",
        "content": "Escribe un archivo con un número aleatorio y guárdalo en '/tmp/number.txt'"
    }],
    tools=[{
        "type": "code_execution_20250825",
        "name": "code_execution"
    }]
)

# Extrae el ID del contenedor de la primera respuesta
container_id = response1.container.id

# Segunda solicitud: Reutilizar el contenedor para leer el archivo
response2 = client.beta.messages.create(
    container=container_id,  # Reutilizar el mismo contenedor
    model="claude-opus-4-1-20250805",
    betas=["code-execution-2025-08-25"],
    max_tokens=4096,
    messages=[{
        "role": "user",
        "content": "Lee el número de '/tmp/number.txt' y calcula su cuadrado"
    }],
    tools=[{
        "type": "code_execution_20250825",
        "name": "code_execution"
    }]
)

Streaming

Con streaming habilitado, recibirás eventos de ejecución de código a medida que ocurren:

event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "code_execution"}}

// Ejecución de código transmitida
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())\"}"}}

// Pausa mientras se ejecuta el código

// Resultados de ejecución transmitidos
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": ""}}}

Solicitudes por lotes

Puedes incluir la herramienta de ejecución de código en la API de Lotes de Mensajes. Las llamadas de herramienta de ejecución de código a través de la API de Lotes de Mensajes tienen el mismo precio que las de las solicitudes regulares de la API de Mensajes.

Uso y precios

The code execution tool usage is tracked separately from token usage. Execution time is a minimum of 5 minutes. If files are included in the request, execution time is billed even if the tool is not used due to files being preloaded onto the container.

Pricing: $0.05 per session-hour.

Actualizar a la última versión de la herramienta

Al actualizar a code-execution-2025-08-25, obtienes acceso a manipulación de archivos y capacidades Bash, incluyendo código en múltiples lenguajes. No hay diferencia de precio.

Qué ha cambiado

ComponenteHeredadoActual
Encabezado betacode-execution-2025-05-22code-execution-2025-08-25
Tipo de herramientacode_execution_20250522code_execution_20250825
CapacidadesSolo PythonComandos Bash, operaciones de archivos
Tipos de respuestacode_execution_resultbash_code_execution_result, text_editor_code_execution_result

Compatibilidad hacia atrás

  • Toda la ejecución de código Python existente continúa funcionando exactamente como antes
  • No se requieren cambios en los flujos de trabajo existentes solo de Python

Pasos de actualización

Para actualizar, necesitas hacer los siguientes cambios en tus solicitudes de API:

  1. Actualizar el encabezado beta:

    - "anthropic-beta": "code-execution-2025-05-22"
    + "anthropic-beta": "code-execution-2025-08-25"
    
  2. Actualizar el tipo de herramienta:

    - "type": "code_execution_20250522"
    + "type": "code_execution_20250825"
    
  3. Revisar el manejo de respuestas (si analizas respuestas programáticamente):

    • Los bloques anteriores para respuestas de ejecución Python ya no se enviarán
    • En su lugar, se enviarán nuevos tipos de respuesta para operaciones Bash y de archivos (ver sección Formato de Respuesta)