Esta función es elegible para Zero Data Retention (ZDR). Cuando tu organización tiene un acuerdo de ZDR, los datos enviados a través de esta función no se almacenan después de que se devuelve la respuesta de la API.
La herramienta bash permite a Claude ejecutar comandos de shell en una sesión de bash persistente, lo que posibilita operaciones del sistema, ejecución de scripts y automatización desde la línea de comandos. El acceso al shell es una capacidad fundamental de los agentes. En Terminal-Bench 2.0, un benchmark que evalúa tareas reales de terminal usando validación exclusivamente de shell, Claude muestra mejoras significativas de rendimiento cuando tiene acceso a una sesión de bash persistente.
La herramienta bash proporciona a Claude:
Para ver la compatibilidad con modelos, consulta la Referencia de herramientas.
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
tools=[{"type": "bash_20250124", "name": "bash"}],
messages=[
{"role": "user", "content": "List all Python files in the current directory."}
],
)
print(response)La herramienta bash mantiene una sesión persistente:
| Parámetro | Obligatorio | Descripción |
|---|---|---|
command | Sí* | El comando de bash a ejecutar |
restart | No | Establécelo en true para reiniciar la sesión de bash |
*Obligatorio a menos que se use restart
Claude puede encadenar comandos para completar tareas complejas:
User request:
"Install the requests library and create a simple Python script that
fetches a joke from an API, then run it."
Claude's tool uses:
1. Install package
{"command": "pip install requests"}
2. Create 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. Run script
{"command": "python fetch_joke.py"}La sesión mantiene el estado entre comandos, por lo que los archivos creados en el paso 2 están disponibles en el paso 3.
La herramienta bash se implementa como una herramienta sin esquema. Al usar esta herramienta, no necesitas proporcionar un esquema de entrada como con otras herramientas; el esquema está integrado en el modelo de Claude y no se puede modificar.
Configura un entorno de bash
Crea una sesión de bash persistente con la que Claude pueda interactuar:
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()Gestiona la ejecución de comandos
Crea una función para ejecutar comandos y capturar la salida:
def execute_command(self, command):
# Envía el comando a bash
self.process.stdin.write(command + "\n")
self.process.stdin.flush()
# Captura la salida con tiempo de espera
output = self._read_output(timeout=10)
return output
Procesa las llamadas a herramientas de Claude
Extrae y ejecuta los comandos de las respuestas 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)
# Devuelve el resultado a Claude
tool_result = {
"type": "tool_result",
"tool_use_id": content.id,
"content": result,
}Implementa medidas de seguridad
Agrega validación y restricciones. Usa una lista de permitidos (allowlist) en lugar de una lista de bloqueados (blocklist), ya que las listas de bloqueados son fáciles de eludir. Rechaza los operadores de shell para que los comandos encadenados no puedan saltarse la lista de permitidos:
import shlex
ALLOWED_COMMANDS = {"ls", "cat", "echo", "pwd", "grep", "find", "wc", "head", "tail"}
SHELL_OPERATORS = {"&&", "||", "|", ";", "&", ">", "<", ">>"}
def validate_command(command):
# Permitir solo comandos de una lista de permitidos explícita
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"
# Rechazar operadores de shell que encadenarían comandos adicionales
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 verificación es una primera línea de defensa. Para un aislamiento más fuerte, ejecuta los comandos validados con shell=False y pasa shlex.split(command) como lista de argumentos, de modo que el shell nunca interprete la cadena.
Al implementar la herramienta bash, gestiona varios escenarios de error:
La herramienta bash proporciona acceso directo al sistema. Implementa estas medidas de seguridad esenciales:
ulimit para establecer restricciones de recursossudo, rm -rf, etc.)La herramienta bash agrega 245 tokens de entrada a tus llamadas a la API.
Se consumen tokens adicionales por:
Consulta precios del uso de herramientas para obtener detalles completos sobre los precios.
pytest && coverage reportnpm install && npm run buildgit status && git add . && git commit -m "message"Git sirve como un mecanismo de recuperación estructurado en flujos de trabajo de agentes de larga duración, no solo como una forma de guardar cambios:
git log junto con un archivo de progreso para entender qué se ha hecho ya y qué viene después.git checkout revierte al último commit correcto en lugar de intentar depurar un estado roto.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 ni solicitudes de contraseñaLa herramienta bash es más potente cuando se combina con el editor de texto y otras herramientas.
Si también estás usando la herramienta de ejecución de código, Claude tiene acceso a dos entornos de ejecución separados: tu sesión de bash local y el contenedor aislado de Anthropic. El estado no se comparte entre ellos. Consulta Uso de la ejecución de código con otras herramientas de ejecución para obtener orientación sobre cómo indicarle a Claude que distinga entre entornos.
Aprende sobre el uso de herramientas con Claude
Visualiza y edita archivos de texto con Claude
Was this page helpful?