Инструмент bash позволяет Claude выполнять команды оболочки в постоянной bash-сессии, обеспечивая системные операции, выполнение скриптов и автоматизацию командной строки.

Обзор

Инструмент bash предоставляет Claude:

  • Постоянную bash-сессию, которая сохраняет состояние
  • Возможность выполнять любые команды оболочки
  • Доступ к переменным окружения и рабочему каталогу
  • Возможности связывания команд и создания скриптов

Версии инструмента

МодельВерсия инструмента
Claude 4 & Sonnet 3.7bash_20250124
Claude Sonnet 3.5bash_20241022

Claude Sonnet 3.5 требует заголовок бета-версии computer-use-2024-10-22 при использовании инструмента bash.

Инструмент bash общедоступен в Claude 4 и Sonnet 3.7.

Случаи использования

  • Рабочие процессы разработки: Выполнение команд сборки, тестов и инструментов разработки
  • Системная автоматизация: Выполнение скриптов, управление файлами, автоматизация задач
  • Обработка данных: Обработка файлов, выполнение скриптов анализа, управление наборами данных
  • Настройка окружения: Установка пакетов, настройка окружений

Быстрый старт

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    tools=[
        {
            "type": "bash_20250124",
            "name": "bash"
        }
    ],
    messages=[
        {"role": "user", "content": "Перечисли все Python файлы в текущем каталоге."}
    ]
)

Как это работает

Инструмент bash поддерживает постоянную сессию:

  1. Claude определяет, какую команду выполнить
  2. Вы выполняете команду в bash-оболочке
  3. Возвращаете вывод (stdout и stderr) Claude
  4. Состояние сессии сохраняется между командами (переменные окружения, рабочий каталог)

Параметры

ПараметрОбязательныйОписание
commandДа*Bash-команда для выполнения
restartНетУстановите в true для перезапуска bash-сессии

*Обязательный, если не используется restart

Пример: Многошаговая автоматизация

Claude может связывать команды для выполнения сложных задач:

# Запрос пользователя
"Установи библиотеку requests и создай простой Python скрипт, который получает шутку из API, затем запусти его."

# Использование инструмента Claude:
# 1. Установить пакет
{"command": "pip install requests"}

# 2. Создать скрипт
{"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. Запустить скрипт
{"command": "python fetch_joke.py"}

Сессия сохраняет состояние между командами, поэтому файлы, созданные на шаге 2, доступны на шаге 3.


Реализация инструмента bash

Инструмент bash реализован как инструмент без схемы. При использовании этого инструмента вам не нужно предоставлять входную схему, как с другими инструментами; схема встроена в модель Claude и не может быть изменена.

1

Настройка bash-окружения

Создайте постоянную bash-сессию, с которой может взаимодействовать Claude:

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

Обработка выполнения команд

Создайте функцию для выполнения команд и захвата вывода:

def execute_command(self, command):
    # Отправить команду в bash
    self.process.stdin.write(command + '\n')
    self.process.stdin.flush()
    
    # Захватить вывод с таймаутом
    output = self._read_output(timeout=10)
    return output
3

Обработка вызовов инструментов Claude

Извлеките и выполните команды из ответов 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 сессия перезапущена"
        else:
            command = content.input.get("command")
            result = bash_session.execute_command(command)
        
        # Вернуть результат Claude
        tool_result = {
            "type": "tool_result",
            "tool_use_id": content.id,
            "content": result
        }
4

Реализация мер безопасности

Добавьте валидацию и ограничения:

def validate_command(command):
    # Блокировать опасные команды
    dangerous_patterns = ['rm -rf /', 'format', ':(){:|:&};:']
    for pattern in dangerous_patterns:
        if pattern in command:
            return False, f"Команда содержит опасный паттерн: {pattern}"
    
    # Добавить больше валидации по необходимости
    return True, None

Обработка ошибок

При реализации инструмента bash обрабатывайте различные сценарии ошибок:

Следуйте лучшим практикам реализации

Безопасность

Инструмент bash предоставляет прямой доступ к системе. Реализуйте эти основные меры безопасности:

  • Запуск в изолированных окружениях (Docker/VM)
  • Реализация фильтрации команд и списков разрешенных команд
  • Установка ограничений ресурсов (CPU, память, диск)
  • Логирование всех выполненных команд

Ключевые рекомендации

  • Используйте ulimit для установки ограничений ресурсов
  • Фильтруйте опасные команды (sudo, rm -rf, и т.д.)
  • Запускайте с минимальными правами пользователя
  • Мониторьте и логируйте все выполнение команд

Ценообразование

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

См. ценообразование использования инструментов для полных деталей ценообразования.

Общие паттерны

Рабочие процессы разработки

  • Запуск тестов: pytest && coverage report
  • Сборка проектов: npm install && npm run build
  • Git операции: git status && git add . && git commit -m "сообщение"

Файловые операции

  • Обработка данных: wc -l *.csv && ls -lh *.csv
  • Поиск файлов: find . -name "*.py" | xargs grep "паттерн"
  • Создание резервных копий: tar -czf backup.tar.gz ./data

Системные задачи

  • Проверка ресурсов: df -h && free -m
  • Управление процессами: ps aux | grep python
  • Настройка окружения: export PATH=$PATH:/new/path && echo $PATH

Ограничения

  • Нет интерактивных команд: Не может обрабатывать vim, less или запросы паролей
  • Нет GUI приложений: Только командная строка
  • Область сессии: Сохраняется в рамках разговора, теряется между вызовами API
  • Ограничения вывода: Большие выводы могут быть обрезаны
  • Нет потоковой передачи: Результаты возвращаются после завершения

Комбинирование с другими инструментами

Инструмент bash наиболее мощен при комбинировании с текстовым редактором и другими инструментами.

Следующие шаги