This feature is eligible for Zero Data Retention (ZDR). When your organization has a ZDR arrangement, data sent through this feature is not stored after the API response is returned.
Alat bash memungkinkan Claude menjalankan perintah shell dalam sesi bash yang persisten, memungkinkan operasi sistem, eksekusi skrip, dan otomasi baris perintah. Akses shell adalah kemampuan agen fundamental. Pada Terminal-Bench 2.0, tolok ukur yang mengevaluasi tugas terminal dunia nyata menggunakan validasi hanya shell, Claude menunjukkan peningkatan kinerja yang kuat dengan akses ke sesi bash yang persisten.
Alat bash menyediakan Claude dengan:
Untuk dukungan model, lihat Referensi alat.
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
tools=[{"type": "bash_20250124", "name": "bash"}],
messages=[
{"role": "user", "content": "List all Python files in the current directory."}
],
)
print(response)Alat bash mempertahankan sesi yang persisten:
| Parameter | Diperlukan | Deskripsi |
|---|---|---|
command | Ya* | Perintah bash yang akan dijalankan |
restart | Tidak | Atur ke true untuk memulai ulang sesi bash |
*Diperlukan kecuali menggunakan restart
Claude dapat merantai perintah untuk menyelesaikan tugas kompleks:
Permintaan pengguna:
"Install the requests library and create a simple Python script that
fetches a joke from an API, then run it."
Alat Claude menggunakan:
1. Instal paket
{"command": "pip install requests"}
2. Buat skrip
{"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. Jalankan skrip
{"command": "python fetch_joke.py"}Sesi mempertahankan status antara perintah, jadi file yang dibuat di langkah 2 tersedia di langkah 3.
Alat bash diimplementasikan sebagai alat tanpa skema. Saat menggunakan alat ini, Anda tidak perlu menyediakan skema input seperti alat lainnya; skema dibangun ke dalam model Claude dan tidak dapat dimodifikasi.
Siapkan lingkungan bash
Buat sesi bash persisten yang dapat berinteraksi dengan 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()Tangani eksekusi perintah
Buat fungsi untuk menjalankan perintah dan menangkap output:
def execute_command(self, command):
# Send command to bash
self.process.stdin.write(command + "\n")
self.process.stdin.flush()
# Capture output with timeout
output = self._read_output(timeout=10)
return output
Proses panggilan alat Claude
Ekstrak dan jalankan perintah dari respons 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)
# Return result to Claude
tool_result = {
"type": "tool_result",
"tool_use_id": content.id,
"content": result,
}Implementasikan langkah-langkah keamanan
Tambahkan validasi dan pembatasan. Gunakan daftar izin daripada daftar blokir, karena daftar blokir mudah dilewati. Tolak operator shell sehingga perintah berantai tidak dapat melewati daftar izin:
import shlex
ALLOWED_COMMANDS = {"ls", "cat", "echo", "pwd", "grep", "find", "wc", "head", "tail"}
SHELL_OPERATORS = {"&&", "||", "|", ";", "&", ">", "<", ">>"}
def validate_command(command):
# Allow only commands from an explicit allowlist
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"
# Reject shell operators that would chain additional commands
for token in tokens[1:]:
if token in SHELL_OPERATORS or token.startswith(("$", "`")):
return False, f"Shell operator '{token}' is not allowed"
return True, NoneSaat mengimplementasikan alat bash, tangani berbagai skenario kesalahan:
Alat bash menyediakan akses sistem langsung. Implementasikan langkah-langkah keamanan penting ini:
ulimit untuk menetapkan batasan sumber dayasudo, rm -rf, dll.)The bash tool adds 245 input tokens to your API calls.
Additional tokens are consumed by:
Lihat harga penggunaan alat untuk detail harga lengkap.
pytest && coverage reportnpm install && npm run buildgit status && git add . && git commit -m "message"Git berfungsi sebagai mekanisme pemulihan terstruktur dalam alur kerja agen jangka panjang, bukan hanya cara untuk menyimpan perubahan:
git log bersama file kemajuan untuk memahami apa yang sudah dilakukan dan apa yang akan datang selanjutnya.git checkout kembali ke komit terakhir yang baik daripada mencoba men-debug status yang rusak.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, atau prompt kata sandiAlat bash paling kuat ketika digabungkan dengan editor teks dan alat lainnya.
Jika Anda juga menggunakan alat eksekusi kode, Claude memiliki akses ke dua lingkungan eksekusi terpisah: sesi bash lokal Anda dan kontainer sandbox Anthropic. Status tidak dibagikan di antara mereka. Lihat Menggunakan eksekusi kode dengan alat eksekusi lainnya untuk panduan tentang meminta Claude membedakan antara lingkungan.
Pelajari tentang penggunaan alat dengan Claude
Lihat dan edit file teks dengan Claude
Was this page helpful?
Pemeriksaan ini adalah garis pertahanan pertama. Untuk isolasi yang lebih kuat, jalankan perintah yang divalidasi dengan shell=False dan teruskan shlex.split(command) sebagai daftar argumen, sehingga shell tidak pernah menginterpretasi string.