Эта функция соответствует требованиям Zero Data Retention (ZDR) (нулевого хранения данных). Если у вашей организации действует соглашение ZDR, данные, отправленные через эту функцию, не сохраняются после возврата ответа API.
Инструмент bash позволяет Claude выполнять команды оболочки в постоянной bash-сессии, обеспечивая системные операции, выполнение скриптов и автоматизацию командной строки. Доступ к оболочке — это базовая возможность агента. В Terminal-Bench 2.0, бенчмарке, который оценивает реальные задачи в терминале с использованием валидации только через оболочку, Claude демонстрирует значительный прирост производительности при наличии доступа к постоянной bash-сессии.
Инструмент bash предоставляет Claude:
Информацию о поддержке моделей см. в Справочнике по инструментам.
Инструмент bash поддерживает постоянную сессию:
| Параметр | Обязательный | Описание |
|---|---|---|
command | Да* | Команда bash для выполнения |
restart | Нет | Установите значение true, чтобы перезапустить bash-сессию |
*Обязателен, если не используется restart
Claude может объединять команды в цепочки для выполнения сложных задач:
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"}Сессия сохраняет состояние между командами, поэтому файлы, созданные на шаге 2, доступны на шаге 3.
Инструмент bash реализован как инструмент без схемы. При использовании этого инструмента вам не нужно предоставлять входную схему, как для других инструментов; схема встроена в модель Claude и не может быть изменена.
При реализации инструмента bash обрабатывайте различные сценарии ошибок:
Инструмент bash предоставляет прямой доступ к системе. Реализуйте следующие основные меры безопасности:
ulimit для установки ограничений ресурсовsudo, rm -rf и т. д.)Инструмент bash добавляет 245 входных токенов к вашим вызовам API.
Дополнительные токены расходуются на:
Полную информацию о стоимости см. в разделе стоимость использования инструментов.
pytest && coverage reportnpm install && npm run buildgit status && git add . && git commit -m "message"Git служит структурированным механизмом восстановления в длительных агентных рабочих процессах, а не просто способом сохранения изменений:
git log вместе с файлом прогресса, чтобы понять, что уже сделано и что предстоит дальше.git checkout возвращает к последнему рабочему коммиту вместо попыток отладить сломанное состояние.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 или запросами пароляИнструмент bash наиболее эффективен в сочетании с текстовым редактором и другими инструментами.
Если вы также используете инструмент выполнения кода, у Claude есть доступ к двум отдельным средам выполнения: вашей локальной bash-сессии и изолированному контейнеру Anthropic. Состояние между ними не разделяется. См. раздел Использование выполнения кода с другими инструментами выполнения для рекомендаций по составлению подсказок, помогающих Claude различать окружения.
Узнайте об использовании инструментов с Claude
Просматривайте и редактируйте текстовые файлы с помощью Claude
Was this page helpful?
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)Настройте окружение 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()Обработайте выполнение команд
Создайте функцию для выполнения команд и захвата вывода:
def execute_command(self, command):
# Отправить команду в bash
self.process.stdin.write(command + "\n")
self.process.stdin.flush()
# Захватить вывод с тайм-аутом
output = self._read_output(timeout=10)
return output
Обработайте вызовы инструментов от 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 session restarted"
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,
}Реализуйте меры безопасности
Добавьте валидацию и ограничения. Используйте список разрешённых команд (allowlist), а не список запрещённых (blocklist), поскольку списки запрещённых легко обойти. Отклоняйте операторы оболочки, чтобы цепочки команд не могли проскочить мимо списка разрешённых:
import shlex
ALLOWED_COMMANDS = {"ls", "cat", "echo", "pwd", "grep", "find", "wc", "head", "tail"}
SHELL_OPERATORS = {"&&", "||", "|", ";", "&", ">", "<", ">>"}
def validate_command(command):
# Разрешать только команды из явного списка разрешённых
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"
# Отклонять операторы оболочки, которые позволили бы выполнить дополнительные команды
for token in tokens[1:]:
if token in SHELL_OPERATORS or token.startswith(("$", "`")):
return False, f"Shell operator '{token}' is not allowed"
return True, NoneЭта проверка — первая линия защиты. Для более надёжной изоляции запускайте проверенные команды с shell=False и передавайте shlex.split(command) в качестве списка аргументов, чтобы оболочка никогда не интерпретировала строку.