Ir al contenido
Mastering Claude

Inicio / Fundamentos y bucle del agente

Fundamentos y bucle del agente8 minFondation

Ejecutar comandos de shell

La herramienta Bash ejecuta un comando de shell real en tu equipo, no una simulación, y Claude Code lee la salida estándar y la salida de error para continuar a partir de lo que realmente se produjo. Aparece un aviso de permiso antes de cada comando nuevo, salvo para un conjunto integrado de comandos de solo lectura.

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 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.

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.

Las comillas saltan de un shell a otro

Un script pasado como argumento a otro programa llega a veces deformado, sin un mensaje de error claro. En el ejemplo siguiente, los acentos graves dentro de una cadena entre comillas dobles los ejecuta el shell antes de que Node vea el texto:

node -e "console.log('carpeta `echo SUSTITUIDO` lista')"
carpeta SUSTITUIDO lista

El texto escrito era «echo SUSTITUIDO» entre acentos graves, y Node recibió el resultado del comando. El remedio cabe en dos líneas: escribe el script en un archivo con un delimitador entre comillas simples y pasa luego su ruta.

cat > note.js << 'EOF'
console.log('carpeta `echo SUSTITUIDO` lista')
EOF
node note.js
carpeta `echo SUSTITUIDO` lista

El mismo riesgo existe entre PowerShell, cmd, ssh y Git Bash, que se disputan cada uno las comillas. En cuanto un comando contiene comillas anidadas, ponlo en un archivo, o verifica el eco de lo que sale antes de lanzar.

Figure 1

Del comando propuesto a la continuación del razonamiento

01
Claude propone un comando
La herramienta Bash recibe el comando de shell elegido para responder a la solicitud en curso.
02
Aparece un aviso de permiso
Salvo para un conjunto integrado de comandos de solo lectura, que se ejecutan directamente sin detenerse.
03
Tú apruebas o rechazas
La opción que memoriza la elección deja el comando aprobado de forma permanente para ese repositorio y ese comando.
04
El comando se ejecuta
El shell corre realmente en el equipo, con sus efectos reales sobre los archivos y los procesos.
05
Claude lee stdout y stderr
La salida estándar y la salida de error se leen tal cual, sin reconstrucción.
06
El razonamiento continúa
El resto del bucle de agente se apoya en lo que el comando realmente produjo.
La secuencia muestra los seis pasos de una llamada a la herramienta Bash, desde el comando propuesto por Claude hasta la reanudación del razonamiento sobre la salida realmente obtenida.
Figure 2

El aviso reaparece incluso en un comando ya aprobado

Dos comandos enviados a la herramienta Bash en un repositorio donde npm test ya está aprobadoAviso mostrado la primera vezAviso mostrado las veces siguientes
npm test, comando simple ya aprobadoSíNo, se ejecuta directamente
find con un patrón global sin proteger en sus argumentosSíSí, el aviso reaparece cada vez
La tabla compara dos comandos enviados a la herramienta Bash en un repositorio donde un comando simple ya está aprobado, según si un patrón global sin proteger figura o no en los argumentos de un comando capaz de escribir.
Calíbralo tú mismo

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 hay que recordar
  • 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.
  • Un script pasado como argumento entre shells llega deformado sin error claro: escribir el script en un archivo y pasar su ruta evita el problema.
Hazlo ahora

En tu propia terminal, pide 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.

Verificar en la fuente

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.