この機能はZero Data Retention(ZDR)の対象です。組織がZDR契約を締結している場合、この機能を通じて送信されたデータは、APIレスポンスが返された後に保存されることはありません。
bashツールを使用すると、Claudeは永続的なbashセッションでシェルコマンドを実行でき、システム操作、スクリプト実行、コマンドライン自動化が可能になります。シェルアクセスはエージェントの基盤となる機能です。シェルのみの検証を使用して実際のターミナルタスクを評価するベンチマークであるTerminal-Bench 2.0において、Claudeは永続的なbashセッションへのアクセスにより大幅なパフォーマンス向上を示しています。
bashツールはClaudeに以下を提供します。
モデルのサポートについては、ツールリファレンスを参照してください。
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ツールは永続的なセッションを維持します。
| パラメータ | 必須 | 説明 |
|---|---|---|
command | はい* | 実行するbashコマンド |
restart | いいえ | bashセッションを再起動するにはtrueに設定します |
*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環境のセットアップ
Claudeが対話できる永続的なbashセッションを作成します。
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,
}安全対策の実装
検証と制限を追加します。ブロックリストは簡単に回避されるため、ブロックリストではなく許可リストを使用してください。チェーンされたコマンドが許可リストをすり抜けないように、シェル演算子を拒否します。
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)を渡すことで、シェルが文字列を解釈しないようにします。
bashツールを実装する際は、さまざまなエラーシナリオを処理してください。
bashツールはシステムへの直接アクセスを提供します。以下の必須の安全対策を実装してください。
ulimitを使用してリソース制約を設定するsudo、rm -rfなど)をフィルタリングするbashツールは、API呼び出しに245入力トークンを追加します。
以下によって追加のトークンが消費されます:
料金の詳細については、ツール使用の料金を参照してください。
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は2つの別々の実行環境(ローカルのbashセッションとAnthropicのサンドボックス化されたコンテナ)にアクセスできます。これらの間で状態は共有されません。Claudeに環境を区別させるためのプロンプトのガイダンスについては、他の実行ツールとのコード実行の使用を参照してください。
Was this page helpful?