Claude pode analisar dados, criar visualizações, realizar cálculos complexos, executar comandos do sistema, criar e editar arquivos e processar arquivos enviados diretamente dentro da conversa da API. A ferramenta de execução de código permite que Claude execute comandos Bash e manipule arquivos, incluindo escrever código, em um ambiente seguro e isolado (sandbox).
A execução de código é gratuita quando usada com busca na web ou busca de conteúdo web (web_search_20260209, web_fetch_20260209 ou posterior). Quando uma dessas ferramentas está na sua requisição, não há cobranças adicionais pela execução de código nessa requisição além dos custos padrão de tokens. Isso cobre tanto a execução de código por trás da filtragem dinâmica quanto qualquer código que Claude execute diretamente. O preço padrão de execução de código se aplica quando elas não estão incluídas.
A execução de código também alimenta a filtragem dinâmica nas ferramentas de busca na web e busca de conteúdo web: Claude filtra os resultados dentro do ambiente de execução de código antes que eles cheguem à janela de contexto. Quando a filtragem dinâmica é executada, a API provisiona automaticamente a execução de código necessária para a requisição, então você não precisa adicionar a ferramenta de execução de código à sua requisição para isso.
A ferramenta de execução de código está disponível nos seguintes modelos:
| Modelo | Versões da ferramenta |
|---|---|
| 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 |
Cada versão da ferramenta se baseia na anterior:
code_execution_20250825 suporta comandos Bash e operações de arquivo.code_execution_20260120 adiciona persistência de estado do REPL e chamada programática de ferramentas de dentro do sandbox. Claude Haiku 4.5 aceita os tipos de ferramenta code_execution_20260120 e code_execution_20260521, mas a chamada programática de ferramentas e a persistência de estado do REPL que depende dela não estão disponíveis nele, então as versões mais recentes se comportam como code_execution_20250825 nesse caso.code_execution_20260521 é o mesmo runtime que code_execution_20260120. A diferença é que a descrição da ferramenta informa Claude sobre o limite de 90 segundos de tempo real em cada célula Python na chamada programática de ferramentas, para que Claude possa planejar células de longa duração. Uma célula que excede o limite retorna um resultado normal de execução de código com um return_code diferente de zero e uma mensagem de status detection_timeout em sua saída. Isso é separado do código de erro execution_time_exceeded, que a API retorna quando uma invocação inteira da ferramenta excede o tempo máximo de execução.Todas as três versões da ferramenta estão em disponibilidade geral e não exigem um cabeçalho anthropic-beta. Os cabeçalhos beta legados de execução de código continuam sendo opt-ins válidos.
Os exemplos nesta página usam code_execution_20250825, que cobre as operações de Bash e arquivo que eles demonstram e se comporta da mesma forma em todos os modelos da tabela; use code_execution_20260120 ou posterior quando precisar de chamada programática de ferramentas ou persistência de estado do REPL. As ferramentas atuais de busca na web e busca de conteúdo web (web_search_20260209, web_fetch_20260209 e posteriores) exigem code_execution_20260120 ou posterior como sua versão de execução de código.
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 no Google Cloud.
Aqui está um exemplo que pede ao Claude para realizar um cálculo:
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())A resposta intercala blocos server_tool_use (os comandos que Claude executou) com seus blocos de resultado de ferramenta, seguidos pelo texto do Claude. O nível superior também inclui um objeto container cujo id você pode reutilizar entre requisições. Consulte Formato de resposta para as estruturas dos blocos.
Quando você adiciona a ferramenta de execução de código à sua requisição de API:
tool_result por conta própria. Uma exceção é quando Claude chama uma das suas ferramentas de cliente junto com a execução de código: a API retorna a chamada de execução de código sem seu resultado. O resultado chega em uma resposta posterior, depois que você envia de volta os blocos tool_result para suas ferramentas de clienteO contêiner tem Python pré-instalado. Claude escreve Python com a sub-ferramenta de operações de arquivo e o executa com um comando Bash. Com code_execution_20260120 ou posterior e chamada programática de ferramentas, o estado do interpretador Python (como vinculações de variáveis) também persiste entre requisições que reutilizam o contêiner.
Claude executa código quando a requisição se beneficia de computação ou manipulação de arquivos:
Claude responde diretamente sem executar código para:
Se você quiser que Claude execute código para uma solicitação limítrofe, peça explicitamente (por exemplo, "execute código para verificar isso").
Para analisar seus próprios arquivos de dados (como CSV, Excel ou imagens), envie-os através da Files API e referencie-os na sua requisição:
O ambiente Python pode processar vários tipos de arquivo enviados através da Files API, incluindo:
container_uploadclient = anthropic.Anthropic()
# Faça upload de um arquivo
file_object = client.beta.files.upload(file=Path("data.csv"))
# Use o file_id com a execução de código
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())Quando Claude cria arquivos durante a execução de código, o ID de cada arquivo criado aparece no resultado da ferramenta de execução de código, e você pode baixá-lo com a Files API:
client = Anthropic()
# Solicitar execução de código que cria arquivos
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"}],
)
# Extrair IDs de arquivos da resposta
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
# 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}")A ferramenta de execução de código não requer parâmetros adicionais:
{
"type": "code_execution_20250825",
"name": "code_execution"
}Ambos os campos são fixos: type seleciona a versão da ferramenta, e name deve ser code_execution.
Quando você fornece essa ferramenta, Claude automaticamente ganha acesso a duas sub-ferramentas:
bash_code_execution: Executar comandos de shelltext_editor_code_execution: Visualizar, criar e editar arquivos, incluindo escrever códigoQuando Claude executa código, a resposta também inclui um objeto container de nível superior com o id do contêiner e o timestamp expires_at. Passe esse ID de volta no parâmetro de requisição de nível superior container para continuar usando o mesmo contêiner. Consulte Reutilização de contêiner.
A 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,
"content": []
}
}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_view_result",
"file_type": "text",
"content": "{\n \"setting\": \"value\",\n \"debug\": true\n}",
"num_lines": 4,
"start_line": 1,
"total_lines": 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_create_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_str_replace_result",
"old_start": 3,
"old_lines": 1,
"new_start": 3,
"new_lines": 1,
"lines": ["- \"debug\": true", "+ \"debug\": false"]
}
}Os resultados de comando Bash (bash_code_execution_result) 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 falhacontent: Uma lista com uma entrada para cada arquivo que o comando criou. Cada entrada contém o file_id para recuperar o arquivo com a Files APIOs resultados de operação de arquivo têm seus próprios campos:
text_editor_code_execution_view_result): file_type, content, num_lines, start_line, total_linestext_editor_code_execution_create_result): is_file_update (se o arquivo já existia)text_editor_code_execution_str_replace_result): old_start, old_lines, new_start, new_lines, 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 invocação da ferramenta excedeu o tempo máximo de execução |
| 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 |
| bash | output_file_too_large | A saída do comando excedeu o tamanho máximo |
| text_editor | file_not_found | O arquivo não existe (para operações de visualização/edição) |
Um contêiner expirado não pode ser reutilizado: requisições que o referenciam retornam um erro em vez de restaurá-lo. Envie a requisição novamente sem o parâmetro container para obter um novo contêiner.
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 requisição subsequente para permitir que Claude continue seu turno, ou modificar o conteúdo se
quiser 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.
execution_time_exceeded. Com chamada programática de ferramentas, cada célula do REPL também tem um limite de 90 segundos de tempo realO ambiente Python isolado inclui estas bibliotecas comumente usadas:
O contêiner também inclui ferramentas de linha de comando como unzip, unrar, 7zip, bc, rg (ripgrep), fd e sqlite.
O contêiner não tem acesso à internet, então Claude não pode baixar ou instalar pacotes adicionais em tempo de execução: apenas as bibliotecas pré-instaladas estão disponíveis.
Você pode reutilizar um contêiner existente em várias requisições de API fornecendo o ID do contêiner de uma resposta anterior.
Isso permite que você mantenha arquivos criados entre requisições. Com code_execution_20260120 ou posterior e chamada programática de ferramentas, o estado do interpretador Python também persiste.
Contêineres expiram 30 dias após a criação. Após cerca de 5 minutos de inatividade, um contêiner é salvo em checkpoint, e enviar uma requisição com seu ID dentro da janela de 30 dias o restaura. O timestamp expires_at no objeto container da resposta é um valor rotativo mais curto e não reporta o limite de 30 dias. Um contêiner que expirou não pode ser reutilizado. Envie a requisição novamente sem o parâmetro container para obter um novo contêiner.
client = anthropic.Anthropic()
# Primeira requisição: criar um arquivo com um número aleatório em um novo contêiner
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"}],
)
# Segunda requisição: passar o ID do contêiner de volta para que o Claude reutilize o mesmo contêiner
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())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 multicomputador. A ferramenta de execução de código é executada no contêiner isolado 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 do 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 busca na web ou busca de conteúdo web, que habilitam a execução de código automaticamente. Se sua aplicação já fornece uma ferramenta de shell do lado do cliente, a execução de código automática cria um segundo ambiente de execução que Claude precisa distinguir.
Quando Claude chama uma das suas ferramentas de cliente junto com a execução de código, a API retorna a chamada de execução de código sem seu resultado. O resultado chega em uma resposta posterior, depois que você envia de volta os blocos tool_result para suas ferramentas de cliente.
Com streaming habilitado ("stream": true), você receberá eventos de execução de código conforme eles ocorrem. A entrada da sub-ferramenta é transmitida como eventos input_json_delta, e cada bloco de resultado chega inteiro em um único evento content_block_start:
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": []}}}Você pode incluir a ferramenta de execução de código na Messages Batches API. Chamadas da ferramenta de execução de código através da Messages Batches API têm o mesmo preço que aquelas em requisições regulares da Messages API.
A execução de código é gratuita quando usada com busca na web ou busca de páginas web (web fetch). Quando web_search_20260209 (ou posterior) ou web_fetch_20260209 (ou posterior) está incluído na sua solicitação de API, 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.
Quando usada sem essas ferramentas, a execução de código é cobrada pelo tempo de execução, rastreado separadamente do uso de tokens:
O uso da execução de código é rastreado na resposta:
{
"usage": {
"input_tokens": 105,
"output_tokens": 239,
"server_tool_use": {
"code_execution_requests": 1
}
}
}A versão mais recente da ferramenta é code_execution_20260521. Para alternar entre as três versões atuais, atualize a string type na sua requisição: todas as três retornam os blocos de resposta documentados em Formato de resposta. Consulte Compatibilidade de modelos para saber o que cada versão adiciona e quais modelos a suportam.
O restante desta seção cobre a migração da versão legada code_execution_20250522 (somente Python) para as versões atuais da ferramenta.
| Componente | Legado | Atual |
|---|---|---|
| Cabeçalho beta | code-execution-2025-05-22 | Nenhum necessário |
| Tipo de ferramenta | code_execution_20250522 | code_execution_20250825 ou posterior |
| 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, altere o tipo de ferramenta nas suas requisições de API:
- "type": "code_execution_20250522"
+ "type": "code_execution_20250825"Revise o tratamento de respostas (se estiver fazendo parsing de respostas programaticamente):
A execução de código é executada em contêineres sandbox do 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. Arquivos que a execução de código cria na Files API (recuperáveis com client.beta.files.download()) persistem até serem explicitamente excluídos.
Para elegibilidade de ZDR em todos os recursos, consulte API e retenção de dados.
Combine um modelo executor mais rápido com um modelo advisor de maior inteligência que fornece orientação estratégica durante a geração.
Chame suas próprias ferramentas a partir de código que é executado dentro do contêiner de execução de código.
Envie arquivos para análise e baixe os arquivos que a execução de código cria.
Aprenda como usar Agent Skills para estender as capacidades do Claude através da API.
Was this page helpful?