Accueil / Fondamentaux et boucle d'agent
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.
De la commande proposée à la poursuite du raisonnement
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 fois | Invite affichée les fois suivantes |
|---|---|---|
| npm test, commande simple déjà approuvée | Oui | Non, elle s'exécute directement |
| find avec un motif global non protégé dans ses arguments | Oui | Oui, l'invite réapparaît à chaque fois |
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 que cela établit : La situation établit que si le développeur choisit l'option qui mémorise l'approbation, la commande wc -l config.yaml sur ce dépôt précis s'exécutera ensuite sans nouvelle invite.
Ce que cela n’établit pas : Elle n'établit pas qu'une autre commande, même wc -l sur un fichier différent ou portant un motif global dans ses arguments, s'exécutera elle aussi sans invite.
Les trois calibrages faux les plus courants
- Trop large Elle établit que toutes les commandes shell proposées par Claude sur ce dépôt s'exécuteront désormais sans jamais redemander de confirmation.
- Trop étroit Elle établit seulement qu'une invite de permission existe quelque part dans Claude Code, sans rien dire du dépôt ni de la commande concernés.
- À côté Elle montre que le fichier config.yaml contient plus de lignes que la moyenne des fichiers de configuration du projet.
- 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.
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.
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.