Leer basta para exponer un secreto
Una búsqueda de texto restituye el contenido de un archivo de secretos que atraviesa, y una regla de denegación Read(./.env) no se aplica a un comando de shell que lee archivos sin nombrar nunca ese.
Una búsqueda de texto lanzada sobre una carpeta entera devuelve cada línea que contiene el patrón buscado, precedida del nombre del archivo del que procede. Un archivo .env oculto que contiene ese patrón sube con los demás resultados, sin que se haya pedido ninguna lectura de ese archivo.
Lo que cubre una regla Read(./.env)
Una regla de denegación Read(./.env), puesta en los ajustes de permisos, sirve para impedir que Claude lea ese archivo. La documentación de permisos de Claude Code la aplica a las herramientas de archivo integradas de Claude, a los comandos de shell de archivo que Claude Code reconoce, como cat, head, tail, sed o tee, y a las redirecciones: el destino de una redirección de entrada < archivo depende de las reglas Read, el de una redirección de salida > archivo de las reglas Edit. La misma página fija a continuación dos exclusiones con todas las letras: un comando que lee archivos sin nombrarlos, con el ejemplo de grep -r pattern . lanzado desde la carpeta que contiene el archivo, y un subproceso que abre él mismo sus archivos, como un script de Python o de Node.
Dos herramientas de búsqueda, dos regímenes
La palabra búsqueda abarca dos cosas. El comando de shell grep -r, que Claude lanza en un terminal, queda fuera del alcance de la regla, como dice la exclusión anterior. La herramienta de búsqueda integrada de Claude, en cambio, es una herramienta de archivo: la documentación anuncia que aplica las reglas Read a las herramientas integradas que leen archivos, como Grep y Glob, en la medida de lo posible, sin enumerar los casos en que esa aplicación fallaría.
La demostración
Una carpeta desechable lleva un falso archivo .env y una regla de denegación en el archivo de ajustes del proyecto, .claude/settings.json.
mkdir -p demo-env && cd demo-env
mkdir -p .claude
printf '{"permissions":{"deny":["Read(./.env)"]}}\n' > .claude/settings.json
printf 'CLAVE_FALSA=ejemplo-no-es-una-clave-real\n' > .env
grep -r CLAVE .
./.env:CLAVE_FALSA=ejemplo-no-es-una-clave-real
Lanzada en tu propio terminal, esta búsqueda no pone a prueba ninguna regla: las reglas de permisos solo se aplican a las acciones de Claude. Muestra lo que el comando devuelve. La prueba de la regla se hace abriendo Claude Code en esa carpeta y pidiéndole que lance la misma búsqueda: según la exclusión documentada, la regla no la detiene, mientras que una petición de mostrar el archivo con cat .env se rechaza según la misma página. Un archivo de ajustes aceptado al arrancar no dice lo que la regla bloquea: lo dice esa prueba.
Para un bloqueo impuesto por el sistema operativo a todos los procesos, la documentación remite al sandbox de Claude Code: un aislamiento que restringe el acceso de los comandos de shell a los archivos y a la red, procesos hijos incluidos. Las reglas de denegación Read se fusionan en su configuración. Funciona en macOS, Linux y WSL2, no en Windows nativo. La lección sobre lo que un agente puede filtrar sin que se lo pidas muestra de dónde puede venir una petición de lectura que nadie ha escrito: una instrucción oculta en un contenido que Claude lee.
Una regla de denegación Read(./.env) impide que una búsqueda lo revele
Lo que cubre una regla Read(./.env), según la documentación
| Acceso intentado por Claude | Cubierto por la regla |
|---|---|
| Herramienta de lectura integrada que abre .env | Sí |
| Comando de shell reconocido que nombra el archivo, como cat .env | Sí |
| Herramienta de búsqueda integrada, como Grep | En la medida de lo posible, según la documentación |
| Comando grep -r que no nombra el archivo | No, exclusión explícita |
| Script de Python o de Node que abre él mismo sus archivos | No, exclusión explícita |
Una administradora añade una regla de denegación Read(./.env) en el archivo .claude/settings.json de su proyecto, para proteger el archivo que contiene las credenciales de conexión. Abre Claude Code en ese proyecto y la sesión arranca. Al día siguiente, pide a Claude que busque, en toda la carpeta del proyecto, cada línea que contenga una palabra dada, mediante un comando de shell de búsqueda recursiva.
Escribe en una frase lo que esta situación establece, y en una frase lo que no establece.
Lo que esto establece: La regla Read(./.env) figura en los ajustes del proyecto y una sesión de Claude Code arrancó en ese proyecto.
Lo que esto no establece: No establece que la regla bloquee nada, pues no se refiere ninguna prueba de lectura, ni que la búsqueda del día siguiente vaya a ser detenida, ya que una búsqueda recursiva que no nombra el archivo queda fuera del alcance documentado de la regla.
Los tres calibrados falsos más frecuentes
- Demasiado amplio La regla protege el archivo frente a la búsqueda del día siguiente igual que frente a una lectura directa, puesto que apunta a su ruta.
- Demasiado estrecho El arranque muestra que existe un archivo de ajustes, y lo que contiene sigue siendo desconocido.
- Fuera de tema La búsqueda del día siguiente pasará por la herramienta de búsqueda integrada de Claude en lugar de por el terminal.
- Una regla Read(./.env) detiene las herramientas de archivo de Claude, los comandos de shell reconocidos que nombran el archivo y una redirección de entrada que lo apunta.
- Un comando de shell que recorre una carpeta sin nombrar el archivo, como grep -r, queda fuera del alcance documentado de la regla.
- La herramienta de búsqueda integrada de Claude recibe las reglas Read en la medida de lo posible, lo que se verifica con una prueba en tu propio equipo.
- Una búsqueda lanzada en tu propio terminal muestra lo que un comando devuelve, no lo que una regla de Claude bloquea.
- El sandbox recoge las reglas de denegación Read y hace que el sistema operativo las respete, procesos hijos incluidos, salvo en Windows nativo.
Repite la demostración en una carpeta nueva y lanza luego claude en esa carpeta. Pídele primero que lance grep -r CLAVE . y anota si se muestra la línea del falso .env, pídele después que muestre .env con cat, y luego que busque CLAVE con su herramienta de búsqueda integrada, y anota en cada petición si pasa o si se rechaza.
Estos puntos dependen de una interfaz o de una regla que puede haber cambiado desde la redacción. Verifícalos en tu propia pantalla antes de fiarte de ellos.
- La documentación aplica las reglas Read a la herramienta de búsqueda integrada de Claude en la medida de lo posible, sin enumerar los casos de fallo: el gesto de esta lección lo pone a prueba en tu equipo, y es ese resultado el que vale para tu versión.
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.