Un archivo de configuración que vive dentro del proyecto acabó en repositorios públicos con credenciales dentro. La culpa no es de Claude Code: es de la costumbre de subirlo todo con un solo comando.
Qué encontró Ars Technica en los repositorios de Claude Code
La búsqueda era rutinaria y el resultado no. Ars Technica revisó repositorios públicos de GitHub el 9 de noviembre y encontró credenciales guardadas dentro de archivos de configuración de Claude Code. Cybernews publicó el mismo hallazgo ese día con un titular más directo: agentes de IA que filtran secretos en GitHub.
La cifra que sostiene la cobertura es «miles». No hay un recuento exacto publicado, y conviene quedarse con esa palabra en vez de inventar un número redondo. La etiqueta Claude Code secrets leak circula desde entonces en hilos de desarrolladores, y describe bien el caso: no es un fallo del modelo, es un archivo mal compartido.
El matiz que cambia la lectura: no hubo brecha en Anthropic. Nadie entró en sus servidores. Los archivos los subieron los propios usuarios, a veces con un script y a veces a mano.
Eso lo convierte en un problema de hábitos, no en un incidente ajeno. Y se puede arreglar esta tarde.
Por qué Claude Code settings.local.json termina en un repo público
Claude Code guarda su configuración de proyecto en una carpeta llamada .claude, dentro del propio repositorio. Ahí conviven dos archivos con propósitos distintos. settings.json se comparte con el equipo. settings.local.json es el personal, y es el que GitGuardian señaló como origen de las filtraciones.
¿Qué hay dentro? La lista de comandos que el agente puede ejecutar sin preguntar, variables de entorno y la definición de servidores MCP, esos conectores que le dan acceso a otras herramientas. Para que el agente no vuelva a pedir permiso cada dos minutos, el archivo guarda la autorización. A veces guarda también la clave que esa herramienta necesita.
El resto es geografía. Un archivo que vive dentro del proyecto es un archivo que git add . recoge sin preguntar. Casi nadie lo añade a propósito: entra en el primer commit grande, o en el que se hace con prisa un viernes por la tarde.
Después el repositorio cambia de visibilidad. Un proyecto interno se abre para compartir una demo, o para una revisión con un cliente. El historial viaja con él, y el archivo también.
Cómo saber si tu Claude Code settings.local.json está expuesto
Tres comprobaciones, en orden de rapidez. La primera: busca el nombre del archivo en el código de tus repos públicos desde la búsqueda de GitHub. Si aparece, ya tienes la respuesta.
La segunda es local. Ejecuta git log --all -- .claude/settings.local.json dentro del proyecto: si devuelve commits, el archivo estuvo versionado en algún momento, aunque hoy no esté.
La tercera revisa la prevención. Abre el .gitignore y confirma que la línea .claude/settings.local.json existe. Si no está, añádela antes de tu próximo commit.
Un detalle que se pasa por alto: que hoy no aparezca en el árbol de trabajo no significa que no esté en el historial, y eso es lo que se clona.
El orden correcto: rotar antes de borrar el commit
Aquí se comete el error caro. Borrar el archivo y reescribir el historial deja el repositorio limpio y la credencial intacta, y una credencial pública sigue siendo pública aunque el commit desaparezca.
Primero se revoca. Un token de Docker Hub, una clave de AWS, la clave de API de un proveedor de pagos: se anulan en el panel del proveedor y se emite una nueva. Ese paso no depende de git ni de GitHub, y es el único que corta el acceso de verdad.
Después se limpia. Herramientas como git filter-repo o BFG eliminan el archivo del historial completo, y luego hace falta un push forzado. GitHub conserva commits alcanzables por SHA y cachés de vistas, así que conviene pedir la purga del repositorio.
En paralelo, revisa los registros de uso del proveedor. Si alguien gastó cuota con tu clave durante las semanas expuestas, el problema ya no es un archivo mal ubicado.
Para un equipo de dos personas en Ciudad de México que paga AWS en dólares, ese detalle aparece en la factura. Un token con permisos de administrador convierte un descuido de configuración en un susto de varios cientos de dólares.
Docker Hub y el resto del AI agent secret leak
GitGuardian puso el foco en credenciales de Docker Hub, y la elección no es casual. Un token de esa plataforma permite descargar imágenes privadas y, si tiene permiso de escritura, publicar una versión distinta de la que tu equipo cree estar usando.
Piensa en un pipeline que despliega desde Docker Hub. Si alguien sustituye la imagen etiquetada como latest, el siguiente despliegue instala otra cosa. No hace falta tocar tu repositorio ni tus servidores: basta con el registro.
Los tokens de Docker Hub se crean una vez y se olvidan. Muchos equipos los generan con lectura y escritura porque es la opción por defecto, y así se quedan durante años.
El patrón se repite en otros servicios: claves de Stripe que se crearon para pruebas y siguen apuntando a producción, o tokens de Slack que nadie rota. Cada uno es una puerta distinta, y juntos forman el AI agent secret leak que describió Cybernews.
Lo que todavía no se sabe sobre Claude Code GitHub security
Tres preguntas siguen abiertas, y ninguna tiene respuesta publicada.
La primera es cuántas de esas credenciales estaban activas cuando se encontraron. «Miles de secretos expuestos» no equivale a miles de accesos posibles: muchas claves pueden estar caducadas o pertenecer a proyectos abandonados.
La segunda es si Anthropic va a incluir el archivo en la plantilla de ignorados que crea al iniciar un proyecto. Sería la corrección más barata, y hasta ahora no se ha anunciado.
La tercera afecta al diseño: si el archivo guarda permisos y variables de entorno, por qué vive dentro del repositorio y no en una carpeta de usuario. Cambiar esa ruta rompería proyectos existentes.
Qué hacer esta semana con Claude Code
La tarea más urgente no requiere leer el informe completo: abre tu .gitignore, añade la línea del archivo local y revisa el historial de los repos donde hayas usado Claude Code. Si aparece una credencial, revócala hoy y emite otra.
Después, ordena lo demás. Crea tokens de Docker Hub con permisos mínimos y fecha de caducidad, y revisa qué variables de entorno necesita cada servidor MCP. Un archivo de configuración debería describir cómo trabaja el agente, no guardar las llaves de todo lo que toca.






