Was this page helpful?
Claude pode analisar dados, criar visualizações, realizar cálculos complexos, executar comandos do sistema, criar e editar arquivos, e processar arquivos enviados diretamente na conversa da API. A ferramenta de execução de código permite que Claude execute comandos Bash e manipule arquivos, incluindo a escrita de código, em um ambiente seguro e isolado (sandbox).
A execução de código é gratuita quando usada com pesquisa na web ou busca na web. Quando web_search_20260209 ou web_fetch_20260209 está incluído na sua solicitação, não há cobranças adicionais para chamadas da ferramenta de execução de código além dos custos padrão de tokens de entrada e saída. As cobranças padrão de execução de código se aplicam quando essas ferramentas não estão incluídas.
A execução de código é uma primitiva central para a construção de agentes de alto desempenho. Ela permite filtragem dinâmica nas ferramentas de pesquisa na web e busca na web, permitindo que Claude processe resultados antes que eles cheguem à janela de contexto — melhorando a precisão enquanto reduz o consumo de tokens.
Entre em contato através do nosso formulário de feedback para compartilhar seu feedback sobre este recurso.
This feature is not eligible for Zero Data Retention (ZDR). Data is retained according to the feature's standard retention policy.
A ferramenta de execução de código está disponível nos seguintes modelos:
| Modelo | Versão da Ferramenta |
|---|---|
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) (descontinuado) | code_execution_20250825 |
Claude Haiku 4.5 (claude-haiku-4-5-20251001) | code_execution_20250825 |
Claude Haiku 3.5 (claude-3-5-haiku-latest) (descontinuado) | code_execution_20250825 |
A versão atual code_execution_20250825 suporta comandos Bash e operações de arquivo. Uma versão legada code_execution_20250522 (somente Python) também está disponível. Consulte Atualizar para a versão mais recente da ferramenta para detalhes de migração.
Versões mais antigas da ferramenta não têm garantia de compatibilidade retroativa com modelos mais novos. Sempre use a versão da ferramenta que corresponde à versão do seu modelo.
A execução de código está disponível em:
A execução de código não está disponível atualmente no Amazon Bedrock ou Google Vertex AI.
Aqui está um exemplo simples que pede ao Claude para realizar um cálculo:
Quando você adiciona a ferramenta de execução de código à sua solicitação de API:
Quando você fornece execução de código junto com ferramentas fornecidas pelo cliente que também executam código (como uma ferramenta bash ou REPL personalizado), Claude está operando em um ambiente multi-computador. A ferramenta de execução de código é executada no contêiner sandbox da Anthropic, enquanto suas ferramentas fornecidas pelo cliente são executadas em um ambiente separado que você controla. Claude às vezes pode confundir esses ambientes, tentando usar a ferramenta errada ou assumindo que o estado é compartilhado entre eles.
Para evitar isso, adicione instruções ao seu prompt de sistema que esclareçam a distinção:
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 stateIsso é especialmente importante ao combinar execução de código com pesquisa na web ou busca na web, que habilitam a execução de código automaticamente. Se sua aplicação já fornece uma ferramenta shell do lado do cliente, a execução de código automática cria um segundo ambiente de execução que Claude precisa distinguir.
Peça ao Claude para verificar informações do sistema e instalar pacotes:
Claude pode criar, visualizar e editar arquivos diretamente no sandbox usando as capacidades de manipulação de arquivos:
Para analisar seus próprios arquivos de dados (CSV, Excel, imagens, etc.), envie-os via Files API e referencie-os na sua solicitação:
Usar a Files API com Execução de Código requer o cabeçalho beta da Files API: "anthropic-beta": "files-api-2025-04-14"
O ambiente Python pode processar vários tipos de arquivo enviados via Files API, incluindo:
container_uploadQuando Claude cria arquivos durante a execução de código, você pode recuperar esses arquivos usando a Files API:
Um fluxo de trabalho complexo usando todas as capacidades:
A ferramenta de execução de código não requer parâmetros adicionais:
{
"type": "code_execution_20250825",
"name": "code_execution"
}Quando esta ferramenta é fornecida, Claude ganha automaticamente acesso a duas sub-ferramentas:
bash_code_execution: Executar comandos shelltext_editor_code_execution: Visualizar, criar e editar arquivos, incluindo a escrita de códigoA ferramenta de execução de código pode retornar dois tipos de resultados dependendo da operação:
{
"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
}
}Visualizar arquivo:
{
"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
}
}Criar arquivo:
{
"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 arquivo (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"]
}
}Todos os resultados de execução incluem:
stdout: Saída da execução bem-sucedidastderr: Mensagens de erro se a execução falharreturn_code: 0 para sucesso, diferente de zero para falhaCampos adicionais para operações de arquivo:
file_type, content, numLines, startLine, totalLinesis_file_update (se o arquivo já existia)oldStart, oldLines, newStart, newLines, lines (formato diff)Cada tipo de ferramenta pode retornar erros específicos:
Erros comuns (todas as ferramentas):
{
"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 erro por tipo de ferramenta:
| Ferramenta | Código de Erro | Descrição |
|---|---|---|
| Todas as ferramentas | unavailable | A ferramenta está temporariamente indisponível |
| Todas as ferramentas | execution_time_exceeded | A execução excedeu o limite máximo de tempo |
| Todas as ferramentas | container_expired | O contêiner expirou e não está mais disponível |
| Todas as ferramentas | invalid_tool_input | Parâmetros inválidos fornecidos à ferramenta |
| Todas as ferramentas | too_many_requests | Limite de taxa excedido para uso da ferramenta |
| text_editor | file_not_found |
pause_turnA resposta pode incluir um motivo de parada pause_turn, que indica que a API pausou um turno de longa duração. Você pode fornecer a resposta de volta como está em uma solicitação subsequente para permitir que Claude continue seu turno, ou modificar o conteúdo se desejar interromper a conversa.
A ferramenta de execução de código é executada em um ambiente seguro e conteinerizado projetado especificamente para execução de código, com maior foco em Python.
O ambiente Python em sandbox inclui estas bibliotecas comumente usadas:
Você pode reutilizar um contêiner existente em múltiplas solicitações de API fornecendo o ID do contêiner de uma resposta anterior. Isso permite que você mantenha os arquivos criados entre solicitações.
Com o streaming habilitado, você receberá eventos de execução de código à medida que ocorrem:
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "code_execution"}}
// Execução 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 enquanto o código é executado
// Resultados da execução 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": ""}}}Você pode incluir a ferramenta de execução de código na API de Lotes de Mensagens. As chamadas da ferramenta de execução de código através da API de Lotes de Mensagens têm o mesmo preço que aquelas em solicitações regulares da API de Mensagens.
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
}
}Ao atualizar para code-execution-2025-08-25, você obtém acesso à manipulação de arquivos e capacidades Bash, incluindo código em múltiplas linguagens. Não há diferença de preço.
| Componente | Legado | Atual |
|---|---|---|
| Cabeçalho beta | code-execution-2025-05-22 | code-execution-2025-08-25 |
| Tipo de ferramenta | code_execution_20250522 | code_execution_20250825 |
| Capacidades | Somente Python | Comandos Bash, operações de arquivo |
| Tipos de resposta | code_execution_result | bash_code_execution_result, text_editor_code_execution_result |
Para atualizar, atualize o tipo de ferramenta nas suas solicitações de API:
- "type": "code_execution_20250522"
+ "type": "code_execution_20250825"Revise o tratamento de respostas (se estiver analisando respostas programaticamente):
A ferramenta de execução de código alimenta a chamada programática de ferramentas, que permite que Claude escreva código que chama suas ferramentas personalizadas programaticamente dentro do contêiner de execução. Isso permite fluxos de trabalho eficientes com múltiplas ferramentas, filtragem de dados antes de chegar ao contexto de Claude, e lógica condicional complexa.
# Habilitar chamada programática para suas ferramentas
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"
], # Habilitar chamada programática
},
],
)Saiba mais na documentação de chamada programática de ferramentas.
A execução de código ocorre em contêineres sandbox no lado do servidor. Os dados do contêiner, incluindo artefatos de execução, arquivos enviados e saídas, são retidos por até 30 dias. Essa retenção se aplica a todos os dados processados dentro do ambiente do contêiner.
Para elegibilidade de ZDR em todos os recursos, consulte API e Retenção de Dados.
A ferramenta de execução de código permite que o Claude use Agent Skills. Skills são capacidades modulares compostas por instruções, scripts e recursos que ampliam a funcionalidade do Claude.
Saiba mais na documentação de Agent Skills e no guia de API de 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"
}]
}'# Primeiro, envie um arquivo
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"' \
# Em seguida, use o file_id com execução 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: 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
# Inicializar o cliente
client = Anthropic()
# Solicitar execução de código que cria arquivos
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"}],
)
# Extrair IDs de arquivo da resposta
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
# Baixar os arquivos criados
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}")# Primeiro, envie um arquivo
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
# Extrair file_id (usando jq)
FILE_ID=$(jq -r '.id' file_response.json)
# Em seguida, use-o com execução 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: 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"
}]
}'| O arquivo não existe (para operações de visualização/edição) |
| text_editor | string_not_found | O old_str não foi encontrado no arquivo (para str_replace) |
import os
from anthropic import Anthropic
# Inicializar o cliente
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
# Primeira solicitação: Criar um arquivo com um número aleatório
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"}],
)
# Extrair o ID do contêiner da primeira resposta
container_id = response1.container.id
# Segunda solicitação: Reutilizar o contêiner para ler o arquivo
response2 = client.messages.create(
container=container_id, # Reutilizar o mesmo contêiner
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"}],
)