Cette fonctionnalité est éligible à la Zero Data Retention (ZDR). Lorsque votre organisation dispose d'un accord ZDR, les données envoyées via cette fonctionnalité ne sont pas stockées après le retour de la réponse de l'API.
L'outil bash permet à Claude d'exécuter des commandes shell dans une session bash persistante, permettant ainsi des opérations système, l'exécution de scripts et l'automatisation en ligne de commande. L'accès au shell est une capacité fondamentale pour un agent. Sur Terminal-Bench 2.0, un benchmark qui évalue des tâches de terminal réelles en utilisant une validation uniquement basée sur le shell, Claude affiche de solides gains de performance lorsqu'il a accès à une session bash persistante.
L'outil bash fournit à Claude :
Pour la prise en charge des modèles, consultez la Référence des outils.
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)L'outil bash maintient une session persistante :
| Paramètre | Requis | Description |
|---|---|---|
command | Oui* | La commande bash à exécuter |
restart | Non | Définir à true pour redémarrer la session bash |
*Requis sauf si vous utilisez restart
Claude peut chaîner des commandes pour accomplir des tâches complexes :
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"}La session maintient l'état entre les commandes, de sorte que les fichiers créés à l'étape 2 sont disponibles à l'étape 3.
L'outil bash est implémenté comme un outil sans schéma. Lorsque vous utilisez cet outil, vous n'avez pas besoin de fournir un schéma d'entrée comme avec les autres outils ; le schéma est intégré au modèle de Claude et ne peut pas être modifié.
Configurer un environnement bash
Créez une session bash persistante avec laquelle Claude peut interagir :
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()Gérer l'exécution des commandes
Créez une fonction pour exécuter les commandes et capturer la sortie :
def execute_command(self, command):
# Envoyer la commande à bash
self.process.stdin.write(command + "\n")
self.process.stdin.flush()
# Capturer la sortie avec un délai d'expiration
output = self._read_output(timeout=10)
return output
Traiter les appels d'outils de Claude
Extrayez et exécutez les commandes à partir des réponses 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)
# Renvoyer le résultat à Claude
tool_result = {
"type": "tool_result",
"tool_use_id": content.id,
"content": result,
}Implémenter des mesures de sécurité
Ajoutez une validation et des restrictions. Utilisez une liste d'autorisation (allowlist) plutôt qu'une liste de blocage (blocklist), car les listes de blocage sont faciles à contourner. Rejetez les opérateurs shell afin que les commandes chaînées ne puissent pas passer outre la liste d'autorisation :
import shlex
ALLOWED_COMMANDS = {"ls", "cat", "echo", "pwd", "grep", "find", "wc", "head", "tail"}
SHELL_OPERATORS = {"&&", "||", "|", ";", "&", ">", "<", ">>"}
def validate_command(command):
# Autoriser uniquement les commandes d'une liste d'autorisation explicite
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"
# Rejeter les opérateurs shell qui enchaîneraient des commandes supplémentaires
for token in tokens[1:]:
if token in SHELL_OPERATORS or token.startswith(("$", "`")):
return False, f"Shell operator '{token}' is not allowed"
return True, NoneCette vérification constitue une première ligne de défense. Pour une isolation plus forte, exécutez les commandes validées avec shell=False et passez shlex.split(command) comme liste d'arguments, afin que le shell n'interprète jamais la chaîne.
Lors de l'implémentation de l'outil bash, gérez divers scénarios d'erreur :
L'outil bash fournit un accès direct au système. Implémentez ces mesures de sécurité essentielles :
ulimit pour définir des contraintes de ressourcessudo, rm -rf, etc.)L'outil bash ajoute 245 tokens d'entrée à vos appels API.
Des tokens supplémentaires sont consommés par :
Consultez la tarification de l'utilisation d'outils pour les détails complets sur la tarification.
pytest && coverage reportnpm install && npm run buildgit status && git add . && git commit -m "message"Git sert de mécanisme de récupération structuré dans les workflows d'agent de longue durée, et pas seulement de moyen de sauvegarder des modifications :
git log en parallèle d'un fichier de progression pour comprendre ce qui a déjà été fait et ce qui vient ensuite.git checkout revient au dernier commit valide au lieu d'essayer de déboguer un état défectueux.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 ou les invites de mot de passeL'outil bash est le plus puissant lorsqu'il est combiné avec l'éditeur de texte et d'autres outils.
Si vous utilisez également l'outil d'exécution de code, Claude a accès à deux environnements d'exécution distincts : votre session bash locale et le conteneur sandboxé d'Anthropic. L'état n'est pas partagé entre eux. Consultez Utiliser l'exécution de code avec d'autres outils d'exécution pour obtenir des conseils sur la manière d'inciter Claude à distinguer les environnements.
En savoir plus sur l'utilisation d'outils avec Claude
Afficher et modifier des fichiers texte avec Claude
Was this page helpful?