Inicio / Fundamentos y bucle del agente
Ejecutar comandos de shell
La herramienta Bash ejecuta comandos reales en tu equipo, Claude lee la salida realmente producida para continuar su razonamiento, y aparece un aviso de permiso antes de cada comando nuevo.
La herramienta Bash ejecuta un comando de shell real en tu equipo, no una simulación. Claude Code lee después la salida estándar y la salida de error de ese comando para continuar su razonamiento a partir de lo que realmente se produjo, y no de lo que se esperaba.
Un aviso antes de cada comando nuevo
Antes de que se ejecute un comando de shell nuevo, aparece en pantalla un aviso de permiso. La documentación oficial describe este comportamiento para los comandos de shell como una confirmación solicitada cada vez, salvo para un conjunto integrado de comandos de solo lectura que se ejecutan directamente. Responder con la opción que memoriza la elección hace que ese comando preciso quede aprobado de forma permanente, pero solo para el repositorio en curso y para ese comando preciso: no es una autorización general que se extendiera a cualquier comando de shell futuro.
El patrón global que reactiva el aviso
Un comando ya aprobado puede, a pesar de todo, volver a disparar el aviso. Cuando un patrón global sin proteger figura en los argumentos de un comando con banderas capaces de escribir o ejecutar, por ejemplo find, sort, sed o git, el aviso reaparece aunque el comando base ya figure en la lista de comandos de confianza. La razón es concreta: ese patrón podría desarrollarse, en el momento de la ejecución, en una bandera destructiva que nadie había aprobado. Esta salvaguarda no es un defecto, es una protección colocada por encima de la propia lista de confianza.
Aquí tienes un ejemplo autónomo, que fabrica su propio archivo antes de leerlo, en lugar de inspeccionar un archivo real del proyecto:
mkdir -p /tmp/demo-bash
echo "erreur : connexion refusée" > /tmp/demo-bash/journal.txt
grep "erreur" /tmp/demo-bash/journal.txt
La última línea devuelve el contenido encontrado, erreur : connexion refusée. Es exactamente lo que Claude recibe de vuelta al llamar a la herramienta Bash, la salida bruta del comando, nada reconstruido y nada supuesto.
Esta lectura de la salida real antes de continuar es lo que hace funcionar el bucle de agente: pensar, llamar a una herramienta, observar lo que realmente devuelve, volver a empezar. El mismo principio de aprobación caso por caso se encuentra en la lectura de un diff de modificación de archivo, donde solo cambia el tipo de acción.
Del comando propuesto a la continuación del razonamiento
El aviso reaparece incluso en un comando ya aprobado
| Dos comandos enviados a la herramienta Bash en un repositorio donde npm test ya está aprobado | Aviso mostrado la primera vez | Aviso mostrado las veces siguientes |
|---|---|---|
| npm test, comando simple ya aprobado | Sí | No, se ejecuta directamente |
| find con un patrón global sin proteger en sus argumentos | Sí | Sí, el aviso reaparece cada vez |
Un desarrollador le pide a Claude Code que cuente las líneas de un archivo de configuración. Claude propone el comando wc -l config.yaml. Aparece en pantalla un aviso de permiso, con la opción que memoriza la aprobación para ese repositorio y ese comando.
Escribe en una frase lo que esta situación establece, y en una frase lo que no establece.
Lo que esto establece: La situación establece que si el desarrollador elige la opción que memoriza la aprobación, el comando wc -l config.yaml en ese repositorio preciso se ejecutará después sin nuevo aviso.
Lo que esto no establece: No establece que otro comando, incluso wc -l sobre un archivo diferente o con un patrón global en sus argumentos, se ejecutará también sin aviso.
Los tres calibrados falsos más frecuentes
- Demasiado amplio Establece que todos los comandos de shell propuestos por Claude en ese repositorio se ejecutarán en adelante sin volver a pedir nunca confirmación.
- Demasiado estrecho Establece solamente que existe un aviso de permiso en algún lugar de Claude Code, sin decir nada del repositorio ni del comando en cuestión.
- Fuera de tema Muestra que el archivo config.yaml contiene más líneas que el promedio de los archivos de configuración del proyecto.
- La herramienta Bash ejecuta un comando de shell real en el equipo, y Claude lee su salida estándar y su salida de error para continuar su razonamiento.
- Aparece un aviso de permiso antes de cada comando nuevo, salvo para un conjunto integrado de comandos de solo lectura que se ejecutan directamente.
- Aprobar un comando con la opción que memoriza la elección lo vuelve permanente, pero solo para ese repositorio y ese comando preciso.
- Un patrón global sin proteger presente en los argumentos de un comando con banderas capaces de escribir, como find, sort, sed o git, siempre vuelve a disparar un aviso incluso en un comando ya incluido en la lista de confianza.
En tu propia terminal, pídele a Claude Code que ejecute un comando de shell inofensivo como date o pwd, lee el aviso de permiso que aparece antes de aprobar, y luego observa la salida que Claude lee de vuelta antes de continuar.
Cada afirmación datable de esta lección remite aquí al texto público que la respalda. Una fuente que no se abre no prueba nada.