La herramienta bash permite a Claude ejecutar comandos de shell en una sesión bash persistente, permitiendo operaciones del sistema, ejecución de scripts y automatización de línea de comandos.

Descripción general

La herramienta bash proporciona a Claude:
  • Sesión bash persistente que mantiene el estado
  • Capacidad de ejecutar cualquier comando de shell
  • Acceso a variables de entorno y directorio de trabajo
  • Capacidades de encadenamiento de comandos y scripting

Compatibilidad de modelos

ModeloVersión de herramienta
Modelos Claude 4 y Sonnet 3.7 (obsoleto)bash_20250124
Las versiones anteriores de la herramienta no están garantizadas para ser compatibles hacia atrás con modelos más nuevos. Siempre use la versión de herramienta que corresponda a su versión de modelo.

Casos de uso

  • Flujos de trabajo de desarrollo: Ejecutar comandos de compilación, pruebas y herramientas de desarrollo
  • Automatización del sistema: Ejecutar scripts, gestionar archivos, automatizar tareas
  • Procesamiento de datos: Procesar archivos, ejecutar scripts de análisis, gestionar conjuntos de datos
  • Configuración del entorno: Instalar paquetes, configurar entornos

Inicio rápido

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    tools=[
        {
            "type": "bash_20250124",
            "name": "bash"
        }
    ],
    messages=[
        {"role": "user", "content": "List all Python files in the current directory."}
    ]
)

Cómo funciona

La herramienta bash mantiene una sesión persistente:
  1. Claude determina qué comando ejecutar
  2. Usted ejecuta el comando en un shell bash
  3. Devuelve la salida (stdout y stderr) a Claude
  4. El estado de la sesión persiste entre comandos (variables de entorno, directorio de trabajo)

Parámetros

ParámetroRequeridoDescripción
commandSí*El comando bash a ejecutar
restartNoEstablezca en true para reiniciar la sesión bash
*Requerido a menos que use restart
// Ejecutar un comando
{
  "command": "ls -la *.py"
}

// Reiniciar la sesión
{
  "restart": true
}

Ejemplo: Automatización de múltiples pasos

Claude puede encadenar comandos para completar tareas complejas:
# Solicitud del usuario
"Install the requests library and create a simple Python script that fetches a joke from an API, then run it."

# La herramienta de Claude usa:
# 1. Instalar paquete
{"command": "pip install requests"}

# 2. Crear 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. Ejecutar 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.

Implementar la herramienta bash

La herramienta bash se implementa como una herramienta sin esquema. Al usar esta herramienta, no necesita proporcionar un esquema de entrada como con otras herramientas; el esquema está integrado en el modelo de Claude y no se puede modificar.
1

Configurar un entorno bash

Cree una sesión 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()
2

Manejar la ejecución de comandos

Cree una función para ejecutar comandos y capturar la salida:
def execute_command(self, command):
    # Enviar comando a bash
    self.process.stdin.write(command + '\n')
    self.process.stdin.flush()
    
    # Capturar salida con tiempo de espera
    output = self._read_output(timeout=10)
    return output
3

Procesar las llamadas de herramientas de Claude

Extraiga y ejecute 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)
        
        # Devolver resultado a Claude
        tool_result = {
            "type": "tool_result",
            "tool_use_id": content.id,
            "content": result
        }
4

Implementar medidas de seguridad

Agregue validación y restricciones:
def validate_command(command):
    # Bloquear comandos peligrosos
    dangerous_patterns = ['rm -rf /', 'format', ':(){:|:&};:']
    for pattern in dangerous_patterns:
        if pattern in command:
            return False, f"Command contains dangerous pattern: {pattern}"
    
    # Agregar más validación según sea necesario
    return True, None

Manejar errores

Al implementar la herramienta bash, maneje varios escenarios de error:
Si un comando tarda demasiado en ejecutarse:
{
  "role": "user",
  "content": [
    {
      "type": "tool_result",
      "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
      "content": "Error: Command timed out after 30 seconds",
      "is_error": true
    }
  ]
}
Si un comando no existe:
{
  "role": "user",
  "content": [
    {
      "type": "tool_result",
      "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
      "content": "bash: nonexistentcommand: command not found",
      "is_error": true
    }
  ]
}
Si hay problemas de permisos:
{
  "role": "user",
  "content": [
    {
      "type": "tool_result",
      "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
      "content": "bash: /root/sensitive-file: Permission denied",
      "is_error": true
    }
  ]
}

Seguir las mejores prácticas de implementación

Implemente tiempos de espera para evitar comandos colgados:
def execute_with_timeout(command, timeout=30):
    try:
        result = subprocess.run(
            command, 
            shell=True, 
            capture_output=True, 
            text=True, 
            timeout=timeout
        )
        return result.stdout + result.stderr
    except subprocess.TimeoutExpired:
        return f"Command timed out after {timeout} seconds"
Mantenga la sesión bash persistente para mantener variables de entorno y directorio de trabajo:
# Los comandos ejecutados en la misma sesión mantienen el estado
commands = [
    "cd /tmp",
    "echo 'Hello' > test.txt",
    "cat test.txt"  # Esto funciona porque todavía estamos en /tmp
]
Truncar salidas muy grandes para evitar problemas de límite de tokens:
def truncate_output(output, max_lines=100):
    lines = output.split('\n')
    if len(lines) > max_lines:
        truncated = '\n'.join(lines[:max_lines])
        return f"{truncated}\n\n... Output truncated ({len(lines)} total lines) ..."
    return output
Mantenga un registro de auditoría de comandos ejecutados:
import logging

def log_command(command, output, user_id):
    logging.info(f"User {user_id} executed: {command}")
    logging.info(f"Output: {output[:200]}...")  # Registrar primeros 200 caracteres
Elimine información sensible de las salidas de comandos:
def sanitize_output(output):
    # Eliminar posibles secretos o credenciales
    import re
    # Ejemplo: Eliminar credenciales de AWS
    output = re.sub(r'aws_access_key_id\s*=\s*\S+', 'aws_access_key_id=***', output)
    output = re.sub(r'aws_secret_access_key\s*=\s*\S+', 'aws_secret_access_key=***', output)
    return output

Seguridad

La herramienta bash proporciona acceso directo al sistema. Implemente estas medidas de seguridad esenciales:
  • Ejecutar en entornos aislados (Docker/VM)
  • Implementar filtrado de comandos y listas de permitidos
  • Establecer límites de recursos (CPU, memoria, disco)
  • Registrar todos los comandos ejecutados

Recomendaciones clave

  • Use ulimit para establecer restricciones de recursos
  • Filtrar comandos peligrosos (sudo, rm -rf, etc.)
  • Ejecutar con permisos de usuario mínimos
  • Monitorear y registrar toda la ejecución de comandos

Precios

The bash tool adds 245 input tokens to your API calls. Additional tokens are consumed by:
  • Command outputs (stdout/stderr)
  • Error messages
  • Large file contents
Consulte precios de uso de herramientas para obtener detalles completos de precios.

Patrones comunes

Flujos de trabajo de desarrollo

  • Ejecutar pruebas: pytest && coverage report
  • Compilar proyectos: npm install && npm run build
  • Operaciones de Git: git status && git add . && git commit -m "message"

Operaciones de archivos

  • Procesar datos: wc -l *.csv && ls -lh *.csv
  • Buscar archivos: find . -name "*.py" | xargs grep "pattern"
  • Crear copias de seguridad: tar -czf backup.tar.gz ./data

Tareas del sistema

  • Verificar recursos: df -h && free -m
  • Gestión de procesos: ps aux | grep python
  • Configuración del entorno: export PATH=$PATH:/new/path && echo $PATH

Limitaciones

  • Sin comandos interactivos: No puede manejar vim, less o solicitudes de contraseña
  • Sin aplicaciones GUI: Solo línea de comandos
  • Alcance de sesión: Persiste dentro de la conversación, se pierde entre llamadas de API
  • Límites de salida: Las salidas grandes pueden truncarse
  • Sin streaming: Resultados devueltos después de la finalización

Combinar con otras herramientas

La herramienta bash es más poderosa cuando se combina con el editor de texto y otras herramientas.

Próximos pasos