This feature is eligible for Zero Data Retention (ZDR). When your organization has a ZDR arrangement, data sent through this feature is not stored after the API response is returned.
A ferramenta bash permite que Claude execute comandos shell em uma sessão bash persistente, possibilitando operações do sistema, execução de scripts e automação de linha de comando. O acesso ao shell é uma capacidade fundamental de agentes. No Terminal-Bench 2.0, um benchmark que avalia tarefas reais de terminal usando validação apenas com shell, Claude mostra ganhos de desempenho significativos com acesso a uma sessão bash persistente.
A ferramenta bash fornece a Claude:
Para suporte de modelo, consulte a Referência de ferramentas.
A ferramenta bash mantém uma sessão persistente:
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
command | Sim* | O comando bash a executar |
restart | Não | Defina como true para reiniciar a sessão bash |
*Obrigatório a menos que esteja usando restart
Claude pode encadear comandos para completar tarefas complexas:
Solicitação do usuário:
"Instale a biblioteca requests e crie um script Python simples que
busca uma piada de uma API, depois execute-o."
A ferramenta de Claude usa:
1. Instale o pacote
{"command": "pip install requests"}
2. Crie o script
{"command": "cat > fetch_joke.py << 'EOF'\nimport requests\nresponse = requests.get('https://official-joke-api.appspot.com/random_joke')\njoke = response.json()\nprint(f\"Setup: {joke['setup']}\")\nprint(f\"Punchline: {joke['punchline']}\")\nEOF"}
3. Execute o script
{"command": "python fetch_joke.py"}A sessão mantém estado entre comandos, então arquivos criados na etapa 2 estão disponíveis na etapa 3.
A ferramenta bash é implementada como uma ferramenta sem schema. Ao usar esta ferramenta, você não precisa fornecer um schema de entrada como com outras ferramentas; o schema é incorporado ao modelo de Claude e não pode ser modificado.
Ao implementar a ferramenta bash, manipule vários cenários de erro:
A ferramenta bash fornece acesso direto ao sistema. Implemente estas medidas de segurança essenciais:
ulimit para definir restrições de recursossudo, rm -rf, etc.)The bash tool adds 245 input tokens to your API calls.
Additional tokens are consumed by:
Consulte preços de uso de ferramentas para detalhes completos de preços.
pytest && coverage reportnpm install && npm run buildgit status && git add . && git commit -m "message"Git serve como um mecanismo de recuperação estruturado em fluxos de trabalho de agentes de longa duração, não apenas uma forma de salvar alterações:
git log junto com um arquivo de progresso para entender o que já foi feito e o que vem a seguir.git checkout reverte para o último commit bom em vez de tentar depurar um estado quebrado.wc -l *.csv && ls -lh *.csvfind . -name "*.py" | xargs grep "pattern"tar -czf backup.tar.gz ./datadf -h && free -mps aux | grep pythonexport PATH=$PATH:/new/path && echo $PATHvim, less ou prompts de senhaA ferramenta bash é mais poderosa quando combinada com o editor de texto e outras ferramentas.
Se você também estiver usando a ferramenta de execução de código, Claude tem acesso a dois ambientes de execução separados: sua sessão bash local e o contêiner em sandbox da Anthropic. O estado não é compartilhado entre eles. Consulte Usando execução de código com outras ferramentas de execução para orientação sobre como instruir Claude a distinguir entre ambientes.
Saiba mais sobre uso de ferramentas com Claude
Was this page helpful?
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
tools=[{"type": "bash_20250124", "name": "bash"}],
messages=[
{"role": "user", "content": "List all Python files in the current directory."}
],
)
print(response)Configure um ambiente bash
Crie uma sessão bash persistente com a qual Claude possa interagir:
import subprocess
import threading
import queue
class BashSession:
def __init__(self):
self.process = subprocess.Popen(
["/bin/bash"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
bufsize=0,
)
self.output_queue = queue.Queue()
self.error_queue = queue.Queue()
self._start_readers()Manipule a execução de comandos
Crie uma função para executar comandos e capturar saída:
def execute_command(self, command):
# Send command to bash
self.process.stdin.write(command + "\n")
self.process.stdin.flush()
# Capture output with timeout
output = self._read_output(timeout=10)
return output
Processe as chamadas de ferramenta de Claude
Extraia e execute comandos das respostas de Claude:
for content in response.content:
if content.type == "tool_use" and content.name == "bash":
if content.input.get("restart"):
bash_session.restart()
result = "Bash session restarted"
else:
command = content.input.get("command")
result = bash_session.execute_command(command)
# Return result to Claude
tool_result = {
"type": "tool_result",
"tool_use_id": content.id,
"content": result,
}Implemente medidas de segurança
Adicione validação e restrições. Use uma lista de permissões em vez de uma lista de bloqueio, já que listas de bloqueio são fáceis de contornar. Rejeite operadores shell para que comandos encadeados não possam passar pela lista de permissões:
import shlex
ALLOWED_COMMANDS = {"ls", "cat", "echo", "pwd", "grep", "find", "wc", "head", "tail"}
SHELL_OPERATORS = {"&&", "||", "|", ";", "&", ">", "<", ">>"}
def validate_command(command):
# Allow only commands from an explicit allowlist
try:
tokens = shlex.split(command)
except ValueError:
return False, "Could not parse command"
if not tokens:
return False, "Empty command"
executable = tokens[0]
if executable not in ALLOWED_COMMANDS:
return False, f"Command '{executable}' is not in the allowlist"
# Reject shell operators that would chain additional commands
for token in tokens[1:]:
if token in SHELL_OPERATORS or token.startswith(("$", "`")):
return False, f"Shell operator '{token}' is not allowed"
return True, NoneEsta verificação é uma primeira linha de defesa. Para isolamento mais forte, execute comandos validados com shell=False e passe shlex.split(command) como a lista de argumentos, para que o shell nunca interprete a string.
Visualize e edite arquivos de texto com Claude