Los asistentes de código como Claude Code o Cursor no se limitan a sugerir líneas: recorren el proyecto, abren archivos, ejecutan comandos y leen sus resultados. Eso es lo que los hace útiles. Y es también la razón por la que un archivo .env, una clave API o la contraseña de una base de datos pueden acabar en su contexto y, después, transmitirse al servicio del proveedor del modelo. Esta guía describe los riesgos concretos, los ajustes que ofrecen los proveedores en su documentación oficial y lo que puede añadir una capa de control local.
Cómo llega un secreto al contexto de un asistente
No hace falta un error espectacular. Casi siempre, el secreto llega a través de un gesto corriente:
- La lectura de un archivo de configuración. Para entender por qué falla una conexión, el asistente abre el .env, appsettings.json o un archivo de configuración que contiene la cadena de conexión completa.
- Un comando del terminal. Un «cat», un «grep» sobre todo el proyecto, la visualización de las variables de entorno o de los registros de una aplicación pueden hacer aparecer valores sensibles en la salida que lee el asistente.
- Pegarlo en la conversación. El propio desarrollador pega un mensaje de error o un fragmento de configuración que contiene la clave.
- Las herramientas conectadas. Un servidor MCP o un comando de envío puede hacer salir datos hacia un servicio de terceros.
Una vez en el contexto, el secreto forma parte de lo que se envía al modelo. El asistente también puede copiarlo en un archivo, un commit o una respuesta. Los secretos expuestos siguen siendo, de hecho, un problema masivo: en su informe publicado el 17 de marzo de 2026, GitGuardian contabilizó 28,65 millones de nuevos secretos escritos directamente en commits públicos de GitHub en 2025, un 34 % más que un año antes. El mismo informe cuenta 24 008 secretos expuestos en archivos de configuración de servidores MCP.6 La OWASP, por su parte, recomienda gestionar los secretos de forma centralizada (almacenamiento, acceso, rotación) en lugar de dejarlos en claro en el código o en la configuración.5
DB_PASSWORD=Xk92!pLmQ7[SECRETO_1]
PAYMENT_API_KEY=a8F3kq0W…Zt[SECRETO_2]
SMTP_PASSWORD=mT4#vR8w[SECRETO_3]
Claude Code: permisos y hooks
La documentación de Claude Code describe un sistema de permisos configurable en archivos de ajustes. Para impedir que la herramienta lea un archivo o una carpeta, indica añadir una regla de denegación de lectura sobre su ruta, por ejemplo Read(./.env) o Read(./secrets/**).1 La página de referencia de los ajustes ofrece un ejemplo listo para copiar que excluye los archivos que contienen claves API, secretos o variables de entorno.3 La documentación precisa, de paso, que un archivo .claudeignore no tiene ningún efecto: sus entradas deben trasladarse a reglas de denegación.1
Estas reglas se aplican a las herramientas de lectura integradas, pero también a los comandos del terminal que Claude Code reconoce, como cat, head o tail. La propia documentación señala su límite: no se aplican a un comando que lee archivos sin nombrarlos, como una búsqueda recursiva lanzada desde la carpeta, ni a un script que abre archivos por sí mismo. Para una protección a nivel del sistema, remite al entorno aislado (sandbox) de Claude Code.1
Para las organizaciones, Anthropic prevé ajustes gestionados («managed settings»), desplegados por los administradores y que los ajustes de los usuarios y de los proyectos no pueden eludir, salvo algunas excepciones.1 Por último, Claude Code ofrece hooks: comandos que se ejecutan automáticamente en momentos concretos. El que se ejecuta antes de la llamada a una herramienta (PreToolUse) puede bloquearla.2 En este mecanismo oficial se apoyan los controles complementarios, entre ellos el de Tacite-IA.
Cursor: el archivo .cursorignore
Cursor permite declarar, en un archivo .cursorignore situado en la raíz del proyecto, las carpetas y los archivos a los que el editor no debe acceder para sus funciones de IA. Según su documentación, los archivos .env* ya figuran en la lista de archivos ignorados por defecto.4
La misma página indica claramente dos límites: las herramientas de terminal y de servidores MCP que utiliza el agente no pueden bloquear el acceso a los archivos cubiertos por .cursorignore y, aunque Cursor bloquea los archivos ignorados, no se garantiza una protección completa debido al carácter imprevisible de los modelos de lenguaje.4 Estas precisiones deben formar parte del análisis de riesgos de cualquier equipo que utilice la herramienta.
Lo que no cubren los ajustes nativos
Los ajustes nativos son una primera capa indispensable. Sin embargo, se basan en listas de rutas: un secreto almacenado en un archivo de nombre inocuo (config.local.json, notes.txt), copiado en un registro o mostrado por un comando escapa a una regla escrita para «.env». Además, deben configurarse proyecto por proyecto, o centralizarse en la organización; de lo contrario, cada desarrollador parte de cero.
| Criterio | Reglas de denegación | Archivo de exclusión | Control local |
|---|---|---|---|
| Impide la lectura directa de un .env | Sí | Sí | Sí |
| Cubre los comandos del terminal | En parte | No | En parte |
| Detecta un secreto en un archivo de nombre inocuo | No | No | Sí |
| Propone una copia anonimizada | No | No | Sí |
La ANSSI, la agencia nacional francesa de ciberseguridad, recomienda una actitud prudente al desplegar la IA generativa.7 Aplicada a los asistentes de código, se traduce en secretos ausentes del equipo cuando es posible, reglas de denegación donde sigan existiendo y un control que examine el propio contenido. En el repositorio, el análisis de secretos que ofrecen las plataformas, como el secret scanning de GitHub, que recorre todo el historial de Git, detecta a posteriori una parte de los errores.8
La capa de Tacite-IA: bloquear la lectura y proponer una copia
Tacite-IA se instala en el equipo y se apoya en los hooks oficiales de los asistentes de código. En Claude Code, cada acción se examina antes de producirse:
- Lectura de un archivo sensible (.env, claves SSH, credenciales de la nube, claves privadas, archivos de configuración con secretos): la lectura se suspende y se pide una confirmación, o se deniega si la organización así lo ha decidido.
- Se analiza el contenido, no solo el nombre: un archivo leído por la herramienta de lectura o por un comando como cat o grep se analiza en el equipo. Si contiene secretos o datos personales, Tacite-IA escribe una copia anonimizada e indica su ubicación: el asistente puede trabajar sobre la estructura sin ver los valores.
- Comandos de envío: el envío de un archivo hacia el exterior (curl, scp…) o un intento de desactivar la protección activa una confirmación.
- Mensajes escritos: una clave pegada en la conversación se detecta antes del envío, y se propone la versión anonimizada.
Los controles se extienden a los demás asistentes de código compatibles (Cursor, Windsurf, OpenAI Codex, Gemini CLI, Copilot CLI), en la medida en que lo permiten sus propios hooks. Como cualquier análisis de comandos, el de Tacite-IA no ve lo que un script abre por sí mismo: el entorno aislado y una buena gestión de los secretos siguen siendo necesarios. El análisis se realiza sin IA y no se envía nada a nuestros servidores: la consola solo recibe tipos de datos y decisiones, nunca el contenido.
Las buenas prácticas en el proyecto
- Sacar los secretos del repositorioArchivo .env ignorado por git, plantilla .env.example sin valores.
- Preferir un gestor de secretosUna bóveda o variables inyectadas al arrancar en lugar de un archivo en claro.
- Limitar el alcance de las clavesClaves de desarrollo, permisos mínimos, entorno de pruebas.
- Prever la rotaciónUna clave expuesta se revoca y se sustituye, sin esperar.
- Configurar el asistenteReglas de denegación o archivos de exclusión para las rutas sensibles.
- Añadir un control en el equipoPara los casos que los ajustes no cubren.
Estas reglas merecen un lugar en la política de la organización, junto a las que se refieren a los asistentes conversacionales: nuestra plantilla de política de uso de la IA menciona los códigos de acceso entre los datos que nunca deben introducirse. Para los demás tipos de datos, consulte nuestra guía para anonimizar los datos antes de usar ChatGPT.
Preguntas frecuentes
¿Puede Claude Code leer mi archivo .env?
Sí, si tiene permiso: la herramienta lee los archivos del proyecto para realizar sus tareas. La documentación de Claude Code explica cómo impedirlo con reglas de denegación de lectura, por ejemplo Read(./.env) y Read(./secrets/**), y precisa que un archivo .claudeignore no tiene ningún efecto.
¿Basta el archivo .cursorignore para proteger mis secretos?
Es una protección útil, y los archivos .env* se ignoran por defecto. Pero la documentación de Cursor precisa que las herramientas de terminal y MCP del agente no pueden bloquear el acceso a los archivos ignorados, y que no se garantiza una protección completa. Es mejor no guardar secretos en claro en el proyecto y añadir un control complementario.
¿Qué hacer si se ha enviado una clave API a un asistente de código?
Considerarla expuesta: revocarla, crear una nueva y revisar los registros de uso del servicio afectado. Si la clave daba acceso a datos personales, evaluar si se trata de una violación de la seguridad de los datos en el sentido del RGPD.
¿Pueden filtrarse los secretos a través de un comando del terminal?
Sí. Mostrar un archivo, buscar en todo el proyecto o listar las variables de entorno produce una salida que el asistente lee. Las reglas basadas en nombres de archivo no cubren todos estos casos, como reconoce la documentación de Claude Code y de Cursor; el entorno aislado y un control que analice el comando y su contenido reducen este riesgo.
Fuentes
- Configure permissions. Documentación de Claude Code, Anthropic. Consultado el 8 de octubre de 2026.
- Hooks reference. Documentación de Claude Code, Anthropic. Consultado el 8 de octubre de 2026.
- Settings reference: exclude sensitive files. Documentación de Claude Code, Anthropic. Consultado el 8 de octubre de 2026.
- Ignore file. Documentación de Cursor (Anysphere). Consultado el 8 de octubre de 2026.
- Secrets Management Cheat Sheet. OWASP Cheat Sheet Series. Consultado el 8 de octubre de 2026.
- The State of Secrets Sprawl 2026. GitGuardian, 17 de marzo de 2026. Consultado el 8 de octubre de 2026.
- Recommandations de sécurité pour un système d’IA générative. ANSSI (agencia nacional francesa de ciberseguridad), 29 de abril de 2024. En francés. Consultado el 5 de octubre de 2026.
- About secret scanning. GitHub Docs. Consultado el 8 de octubre de 2026.
ChatGPT es una marca de OpenAI, Copilot de Microsoft, Claude de Anthropic, Gemini de Google y Cursor de Anysphere. Los demás nombres de productos citados pertenecen a sus respectivos propietarios. Tacite-IA no está afiliado a ninguno de estos proveedores. Artículo informativo, que no constituye asesoramiento jurídico.