Aller au contenu
Mastering Claude

Accueil / Fondamentaux et boucle d'agent

Fondamentaux et boucle d'agent8 minFondation

Exécuter des commandes shell

L'outil Bash exécute de vraies commandes sur votre poste, Claude lit la sortie réellement produite pour poursuivre son raisonnement, et une invite de permission s'affiche avant chaque commande nouvelle.

L'outil Bash exécute une vraie commande shell sur votre poste, pas une simulation. Claude Code lit ensuite la sortie standard et la sortie d'erreur de cette commande pour poursuivre son raisonnement à partir de ce qu'elle a réellement produit, et non de ce qui était attendu.

Une invite avant chaque commande nouvelle

Avant qu'une commande shell nouvelle ne s'exécute, une invite de permission s'affiche à l'écran. La documentation officielle décrit ce comportement pour les commandes shell comme une confirmation demandée à chaque fois, sauf pour un jeu intégré de commandes en lecture seule qui s'exécutent directement. Répondre avec l'option qui mémorise le choix rend cette commande précise approuvée de façon permanente, mais seulement pour le dépôt en cours et pour cette commande précise : ce n'est pas une autorisation générale qui s'étendrait à toute commande shell future.

Le motif global qui réactive l'invite

Une commande déjà approuvée peut malgré tout redéclencher l'invite. Quand un motif global non protégé figure dans les arguments d'une commande à drapeaux capables d'écrire ou d'exécuter, par exemple find, sort, sed ou git, l'invite réapparaît même si la commande de base figure déjà sur la liste des commandes de confiance. La raison est concrète : ce motif pourrait se développer, au moment de l'exécution, en un drapeau destructeur que personne n'avait approuvé. Ce garde-fou n'est pas un défaut, c'est une protection posée au-dessus de la liste de confiance elle-même.

Voici un exemple autonome, qui fabrique son propre fichier avant de le lire, plutôt que d'inspecter un fichier réel du projet :

mkdir -p /tmp/demo-bash
echo "erreur : connexion refusée" > /tmp/demo-bash/journal.txt
grep "erreur" /tmp/demo-bash/journal.txt

La dernière ligne rend le contenu trouvé, erreur : connexion refusée. C'est exactement ce que Claude reçoit en retour d'un appel à l'outil Bash, la sortie brute de la commande, rien de reconstitué et rien de supposé.

Cette lecture de la sortie réelle avant de poursuivre est ce qui fait tourner la boucle d'agent : réfléchir, appeler un outil, observer ce qu'il rend vraiment, recommencer. Le même principe d'approbation au cas par cas se retrouve dans la lecture d'un diff de modification de fichier, où seul le type d'action change.

Figure 1

De la commande proposée à la poursuite du raisonnement

01
Claude propose une commande
L'outil Bash reçoit la commande shell choisie pour répondre à la demande en cours.
02
Une invite de permission s'affiche
Sauf pour un jeu intégré de commandes en lecture seule, qui s'exécutent directement sans arrêt.
03
Vous approuvez ou refusez
L'option qui mémorise le choix rend la commande approuvée de façon permanente pour ce dépôt et cette commande.
04
La commande s'exécute
Le shell tourne réellement sur le poste, avec ses effets réels sur les fichiers et les processus.
05
Claude lit stdout et stderr
La sortie standard et la sortie d'erreur sont lues telles quelles, sans reconstitution.
06
Le raisonnement se poursuit
La suite de la boucle d'agent s'appuie sur ce que la commande a réellement produit.
La séquence montre les six étapes d'un appel à l'outil Bash, depuis la commande proposée par Claude jusqu'à la reprise du raisonnement sur la sortie réellement obtenue.
Figure 2

L'invite réapparaît même sur une commande déjà approuvée

Deux commandes envoyées à l'outil Bash sur un dépôt où npm test est déjà approuvéInvite affichée la première foisInvite affichée les fois suivantes
npm test, commande simple déjà approuvéeOuiNon, elle s'exécute directement
find avec un motif global non protégé dans ses argumentsOuiOui, l'invite réapparaît à chaque fois
Le tableau compare deux commandes envoyées à l'outil Bash sur un dépôt où une commande simple est déjà approuvée, selon qu'un motif global non protégé figure ou non dans les arguments d'une commande capable d'écrire.
Calibrez vous-même

Un développeur demande à Claude Code de compter les lignes d'un fichier de configuration. Claude propose la commande wc -l config.yaml. Une invite de permission s'affiche à l'écran, avec l'option qui mémorise l'approbation pour ce dépôt et cette commande.

Écrivez en une phrase ce que cette situation établit, et en une phrase ce qu'elle n'établit pas.

Ce qu’il faut retenir
  • L'outil Bash exécute une commande shell réelle sur le poste, et Claude lit sa sortie standard et sa sortie d'erreur pour poursuivre son raisonnement.
  • Une invite de permission s'affiche avant chaque commande nouvelle, sauf pour un jeu intégré de commandes en lecture seule qui s'exécutent directement.
  • Approuver une commande avec l'option qui mémorise le choix la rend permanente, mais seulement pour ce dépôt et cette commande précise.
  • Un motif global non protégé présent dans les arguments d'une commande à drapeaux capables d'écrire, comme find, sort, sed ou git, redéclenche toujours une invite même sur une commande déjà en liste de confiance.
À faire maintenant

Dans votre propre terminal, demandez à Claude Code d'exécuter une commande shell inoffensive comme date ou pwd, lisez l'invite de permission qui s'affiche avant d'approuver, puis observez la sortie que Claude lit en retour avant de poursuivre.

Vérifier à la source

Chaque affirmation datable de cette leçon renvoie ici au texte public qui la porte. Une source qui ne s’ouvre pas ne prouve rien.