El 31 de marzo de 2026, una publicación rutinaria en npm se convirtió en una de las exposiciones accidentales más reveladoras en la historia de las herramientas de IA. Los investigadores descubrieron que la versión 2.1.88 del paquete @anthropic-ai/claude-code de Anthropic incluía un artefacto no intencionado: un archivo source map de JavaScript de 60 MB llamado cli.js.map. Dentro de ese único archivo JSON, embebidas como cadenas, había 512.000 líneas de código TypeScript original sin ofuscar en 1.906 archivos propietarios.
Los archivos source map son herramientas de depuración. Están construidos para ayudar a los ingenieros a traducir código de producción minificado de vuelta a formato legible al diagnosticar fallos. Nunca están pensados para distribución pública. Cuando los ingenieros de Anthropic construyeron Claude Code usando el runtime Bun —que genera source maps por defecto— nadie añadió *.map a la configuración .npmignore del proyecto. El resultado fue que npm sirvió alegremente toda la base de código a cualquiera que instalara el paquete o explorara su contenido.
La ironía fue inmediata y total. Dentro del código filtrado había un sistema interno completo llamado “Undercover Mode” — un subsistema dedicado específicamente a evitar que Claude Code filtrara accidentalmente información interna de Anthropic en repositorios públicos. Los ingenieros habían construido una herramienta sofisticada para evitar que la IA revelara su cobertura, y luego distribuyeron todo el código fuente en un artefacto de empaquetado, aparentemente por el propio Claude.
Anthropic confirmó el incidente, describiéndolo como “un problema de empaquetado de versión causado por error humano, no una brecha de seguridad”, y declaró que estaba implementando medidas para prevenir su recurrencia. No se involucraron datos de usuarios, prompts de clientes ni pesos de modelos. Pero la exposición de propiedad intelectual —incluyendo lógica de orquestación interna, arquitectura de prompts del sistema, telemetría emocional, funciones no publicadas y nombres en clave de modelos futuros— ya se propagaba por espejos antes de que el paquete fuera retirado.
¿Qué Ocurrió en la Filtración de npm de Claude Code?
Cápsula de Respuesta: El 31 de marzo de 2026, Anthropic incluyó accidentalmente un archivo source map de 60 MB en el paquete npm @anthropic-ai/claude-code v2.1.88. El archivo contenía 512.000 líneas de TypeScript sin ofuscar en 1.906 archivos. No se expusieron datos de usuarios, pero la arquitectura interna completa —incluyendo funciones no publicadas, lógica de prompts del sistema y nombres en clave de modelos futuros— quedó públicamente accesible para cualquiera que descargara el paquete.
La divulgación fue publicada inicialmente por Chaofan Shou, investigador de la firma de seguridad blockchain Fuzzland, quien publicó en X (antes Twitter) que el paquete contenía un source map completo. En pocas horas el código fue bifurcado en GitHub, haciendo el contenimiento efectivamente imposible. Anthropic reconoció el incidente y declaró que el paquete estaba siendo parcheado, pero el material filtrado ya se había propagado a espejos externos.
| Elemento | Detalle |
|---|---|
| Paquete afectado | @anthropic-ai/claude-code v2.1.88 |
| Archivo filtrado | cli.js.map (~60 MB) |
| Líneas de código | 512.000+ líneas de TypeScript |
| Archivos expuestos | 1.906 archivos fuente |
| Fecha de descubrimiento | 31 de marzo de 2026 |
| Datos expuestos | Código fuente, prompts del sistema, feature flags, nombres en clave de modelos |
| Datos NO expuestos | Datos de usuarios, prompts de clientes, pesos del modelo, claves API |
| Clasificación de Anthropic | “Error humano, no una brecha de seguridad” |
¿Cómo un Archivo .map Expuso 512.000 Líneas de TypeScript?
Cápsula de Respuesta: Claude Code se construye con Bun, que genera archivos source map (.map) de JavaScript por defecto. Los source maps contienen el código fuente original embebido como cadenas en JSON — su función es ayudar a los ingenieros a depurar código de producción minificado. Cuando Anthropic publicó v2.1.88, nadie había añadido *.map al .npmignore, así que el archivo de 60 MB salió en npm con toda la base de código sin ofuscar dentro.
Este no es un vector de ataque nuevo. Los desarrolladores han estado enviando accidentalmente source maps a npm durante años. Lo que hizo notable este incidente fue la escala —512.000 líneas de código propietario de agente IA— y el contenido.
flowchart TD
A[Bundler Bun genera cli.js.map] --> B[Source map contiene TypeScript original embebido como cadenas JSON]
B --> C[Ingeniero ejecuta npm publish]
C --> D{¿.npmignore excluye archivos .map?}
D -->|No — exclusión faltante| E[cli.js.map incluido en paquete publicado]
D -->|Sí — configuración correcta| F[Solo se publica cli.js — código protegido]
E --> G[v2.1.88 disponible en registro npm]
G --> H[Investigador descarga paquete y extrae .map]
H --> I[512K líneas de TypeScript legibles por cualquiera]
I --> J[Código duplicado en GitHub antes del parche]La causa raíz fue simple: el bundler de Bun genera source maps con arrays sourcesContent que literalmente contienen el código original de cada archivo como una cadena. A diferencia de la ofuscación tradicional, donde la ingeniería inversa requiere esfuerzo, los source maps entregan el código original directamente. La corrección es una sola línea — *.map en .npmignore — o deshabilitar la generación de source maps para compilaciones de producción.
El detalle más irónico: el código filtrado contenía un subsistema completo de Undercover Mode específicamente diseñado para evitar que información interna de Anthropic apareciera en repositorios públicos. El sistema funciona. Simplemente no cubría las pipelines de empaquetado de npm.
¿Qué Funciones No Publicadas Reveló la Filtración?
Cápsula de Respuesta: El código filtrado contenía múltiples funciones controladas por flags de compilación ausentes de las versiones públicas. Las más significativas son KAIROS (un demonio de fondo proactivo siempre activo), ULTRAPLAN (una sesión de planificación remota de 30 minutos usando Opus 4.6) y Buddy (un compañero de terminal completo estilo Tamagotchi con mecánicas gacha deterministas). También se encontraron referencias a modelos Capybara, Opus 4.7 y Sonnet 4.8.
| Función | Descripción | Estado |
|---|---|---|
| Modo KAIROS | Demonio de fondo siempre activo que monitorea flujos de trabajo, registra observaciones, actúa proactivamente con presupuesto de bloqueo de 15 segundos | Controlado — flag de compilación PROACTIVE |
| ULTRAPLAN | Descarga planificación compleja a Cloud Container Runtime remoto ejecutando Opus 4.6 por hasta 30 minutos; resultado aprobado via navegador | Controlado — config tengu_ultraplan |
| Sistema Buddy | Compañero Tamagotchi completo con gacha determinista (Mulberry32 PRNG), 18 especies, niveles de rareza, variantes brillantes, personalidad escrita por Claude | Controlado — flag de compilación BUDDY |
| Modo DAEMON | Agente de fondo que continúa trabajando mientras el usuario está ausente | Controlado |
| Modo de Voz | Push-to-talk via comando /voice; implementándose para ~5% de usuarios | Implementación parcial |
| Modelos Capybara | Nueva familia de modelos incluyendo capybara-v2-fast con ventana de contexto de 1M tokens | No publicado |
| Opus 4.7 / Sonnet 4.8 | Referencias a modelos de próxima generación encontradas en betas.ts | No publicado |
| afk-mode / advisor-tool | Funciones API beta no divulgadas negociadas internamente | No publicado |
El código del Sistema Buddy referencia 1-7 de abril de 2026 como ventana de avance, con lanzamiento completo para mayo de 2026. La especie de cada Buddy se genera determinísticamente a partir del hash del ID del usuario con la sal 'friend-2026-401', asegurando asignación consistente sin estado del lado del servidor.
ULTRAPLAN contiene un valor centinela __ULTRAPLAN_TELEPORT_LOCAL__ que literalmente “teletransporta” un resultado de planificación aprobado remotamente de vuelta al terminal local — un patrón arquitectónico que implica que Claude Code está evolucionando hacia un modelo de ejecución híbrido local-nube.
¿Qué Revela la Filtración sobre la Arquitectura de Prompts del Sistema de Claude Code?
Cápsula de Respuesta: El prompt del sistema no es una cadena única. Se construye desde secciones modulares y optimizadas para caché en tiempo de ejecución. Un marcador SYSTEM_PROMPT_DYNAMIC_BOUNDARY separa instrucciones estáticas cacheables a nivel organización del contenido dinámico específico de la sesión del usuario. Funciones nombradas como DANGEROUS_uncachedSystemPromptSection() indican decisiones de diseño deliberadas sobre optimización de costos de API — y que alguien aprendió esas lecciones de incidentes en producción.
flowchart LR
A[Constructor de Prompt del Sistema] --> B[Sección Estática<br>cacheable entre organizaciones]
A --> C[Sección Dinámica<br>específica de sesión de usuario]
B --> D[Marcador SYSTEM_PROMPT_DYNAMIC_BOUNDARY]
C --> D
D --> E[Prompt final del sistema enviado a API]
E --> F{TIPO_USUARIO?}
F -->|ant — empleado Anthropic| G[Undercover Mode inyectado<br>No reveles tu cobertura]
F -->|usuario estándar| H[Operación normal]
E --> I[DANGEROUS_uncachedSystemPromptSection<br>contenido volátil que rompe intencionalmente el caché]Tres descubrimientos específicos de prompts del sistema destacaron:
Undercover Mode — Cuando un empleado de Anthropic usa Claude Code en un repositorio público, el sistema inyecta automáticamente instrucciones evitando que la IA divulgue nombres en clave internos, decisiones de desarrollo o contexto interno de Anthropic en mensajes de commit o descripciones de pull request. La instrucción dice: “Estás operando UNDERCOVER… Tus mensajes de commit NO deben contener NINGUNA información interna de Anthropic. No reveles tu cobertura.” No hay interruptor de apagado forzado. Si el sistema no puede confirmar que está en un repo interno, permanece encubierto.
Telemetría Emocional — Un archivo llamado userPromptKeywords.ts usa regex para marcar prompts de usuario que contienen expresiones de frustración (términos como “esto apesta,” “tan frustrante”). Estos datos no alteran la respuesta en tiempo real de Claude. Es telemetría, enviada al equipo de producto de Anthropic para identificar puntos de fricción UX a escala — antes de que los usuarios presenten quejas formales.
CYBER_RISK_INSTRUCTION — Una sección nombrada en constants/cyberRiskInstruction.ts establece límites explícitos de gobernanza entre pruebas de seguridad autorizadas versus técnicas destructivas, mantenida por personas nombradas en un equipo interno específico.
¿Cómo Funciona Realmente la Arquitectura Multi-Agente de Claude Code?
Cápsula de Respuesta: Claude Code puede cambiar de agente único a Coordinator Mode, generando y dirigiendo múltiples agentes trabajadores paralelos via notificaciones de tareas basadas en XML y un directorio scratchpad compartido. Su sistema de herramientas contiene 40+ módulos con permisos. Un subagente de fondo llamado autoDream consolida la memoria después de tres condiciones: 24 horas transcurridas, 5+ sesiones completadas y un bloqueo de consolidación adquirido.
La base de código filtrada validó lo que la especificación del Protocolo de Contexto de Modelo (MCP) implicaba: toda la arquitectura de herramientas de Claude Code es una obra maestra en módulos de agente componibles.
| Componente | Líneas de Código | Rol |
|---|---|---|
| Definición base de herramientas | 29.000 líneas | Schema, permisos, lógica de ejecución para todas las herramientas |
| Motor de Consulta (QueryEngine.ts) | 46.000 líneas | Llamadas API LLM, streaming, caché, bucles de cadena de pensamiento |
| Coordinator Mode | directorio coordinator/ | Genera y gestiona agentes trabajadores paralelos |
| autoDream | services/autoDream/ | Subagente de consolidación de memoria en fondo |
| Sistema de permisos | tools/permissions/ | Clasificador de riesgo YOLO basado en ML |
Coordinator Mode transforma Claude Code de agente único en orquestador:
- Fase de Investigación — Los trabajadores investigan el código base en paralelo
- Fase de Síntesis — El Coordinador lee los hallazgos y elabora especificaciones de implementación
- Fase de Implementación — Los trabajadores realizan cambios dirigidos según las especificaciones
- Fase de Verificación — Los trabajadores prueban y confirman los cambios
Los trabajadores se comunican via mensajes XML <task-notification>. El prompt del coordinador instruye explícitamente: “NO digas ‘basándome en tus hallazgos’ — lee los hallazgos reales y especifica exactamente qué hacer.”
autoDream resuelve la entropía de contexto —la degradación del rendimiento de la IA en sesiones largas— con un disparador de tres condiciones: 24 horas transcurridas, al menos 5 sesiones completadas, y un bloqueo de consolidación adquirido. Cuando se activa, ejecuta cuatro fases: Orientar (leer memoria), Recopilar Señal Reciente (extraer nuevos hechos), Sintetizar (resolver contradicciones) y Podar (escribir MEMORY.md compacto).
¿Cuáles Son las Implicaciones de Seguridad para los Desarrolladores?
Cápsula de Respuesta: No se expusieron datos de usuarios, pero la total transparencia de la lógica interna de validación de seguridad de Claude Code, esquemas de telemetría, protecciones de traversal de rutas y feature flags crea riesgos secundarios concretos. El código fuente legible acelera la investigación de vulnerabilidades, los patrones UX expuestos permiten malware imitador de mayor calidad, y la arquitectura interna publicada da a los adversarios un mapa de ruta para crear exploits dirigidos contra el CLI y su cadena de dependencias.
El sistema de permisos revelado por la filtración es sofisticado — pero su transparencia es de doble filo:
| Categoría de Riesgo | Riesgo Específico | Acción Recomendada |
|---|---|---|
| Investigación de vulnerabilidades | Las protecciones legibles de traversal de rutas y la lógica de validación permiten descubrimiento más rápido de zero-days | Fijar y verificar la versión del CLI inmediatamente |
| Imitación de malware | Los flujos UX, mensajes de registro e instalación expuestos permiten paquetes Claude Code troyanizados de mayor calidad | Aumentar vigilancia ante paquetes npm similares |
| Higiene de cadena de suministro | Archivos .map extraviados en espejos de artefactos internos pueden exponer bases de código adicionales | Auditar espejos npm internos para archivos *.map |
| Exposición de tokens | Tokens API de alto valor en estaciones de trabajo de desarrolladores | Reforzar controles de salida; revisar manejo local de secretos |
| Explotación de feature flags | Feature flags internos y variables de entorno publicados | Auditar pipelines CI/CD para acceso a variables de entorno no documentadas |
En particular, ya hubo reportes separados — no relacionados con este incidente — de infostealers disfrazados como descargas de “Claude Code”. El código filtrado aumenta el riesgo de que futuros imitadores sean más convincentes.
El clasificador de permisos YOLO (irónicamente nombrado — deniega todas las acciones de riesgo, no las aprueba) usa clasificación de riesgo basada en ML en niveles BAJO/MEDIO/ALTO. La prevención de traversal de rutas maneja ataques con codificación URL, normalización Unicode, inyección de barras invertidas y manipulación insensible a mayúsculas. Estas protecciones ahora están completamente documentadas para los adversarios.
¿Qué Dijo Anthropic y Qué Deben Hacer los Equipos Ahora?
Cápsula de Respuesta: Anthropic clasificó el incidente como “un problema de empaquetado de versión causado por error humano, no una brecha de seguridad” y confirmó que no se expusieron datos de usuarios. Los equipos de seguridad deben inmediatamente fijar la versión del CLI instalada, auditar espejos npm internos para archivos .map, reforzar controles de salida en estaciones de trabajo de desarrolladores, y aumentar la vigilancia ante paquetes similares — tratando el evento como un incidente de higiene de cadena de suministro independientemente de la clasificación de Anthropic.
Anthropic procedió a parchear el paquete y declaró que está implementando medidas para prevenir su recurrencia. Sin embargo, el material filtrado ya había sido ampliamente duplicado externamente. La característica fundamental de la exposición de código fuente es que no puede ser “no expuesta” una vez propagada.
Acciones inmediatas recomendadas para equipos que usan Claude Code:
- Fijar la versión del CLI — dejar de usar instalaciones flotantes en
latest; capturar la versión instalada y metadatos de integridad del paquete - Auditar espejos internos — verificar si algún paquete Claude Code en tu repositorio de artefactos incluye archivos
*.mapconsourcesContentembebido - Revisar manejo de tokens — asegurar que las claves API no se registren, almacenen en caché en ubicaciones de lectura universal ni se expongan via historial de shell
- Aumentar vigilancia de paquetes — validar el publicador y el hash de integridad de cualquier actualización de Claude Code antes de su despliegue
- Evaluar controles de salida — las estaciones de trabajo de desarrolladores que tienen tokens de alto valor o acceden a repositorios sensibles requieren controles de red más estrictos
Preguntas Frecuentes
¿Qué se filtró en el incidente del código fuente de Claude Code?
El 31 de marzo de 2026, Anthropic incluyó accidentalmente un archivo source map de JavaScript de 60 MB (cli.js.map) en el paquete npm @anthropic-ai/claude-code v2.1.88. El archivo contenía más de 512.000 líneas de código TypeScript original en 1.906 archivos, exponiendo la arquitectura interna completa de Claude Code, la lógica de prompts del sistema y funciones no publicadas.
¿Cómo ocurrió la filtración del source map de Claude Code?
Claude Code se construye con Bun, que genera archivos source map por defecto. Los ingenieros no añadieron *.map a la configuración .npmignore antes de publicar. Los archivos source map embeben el código fuente original como cadenas dentro de JSON, haciéndolo accesible a cualquiera que descargara o inspeccionara el paquete npm.
¿Qué es el modo KAIROS en Claude Code?
KAIROS es un demonio de fondo siempre activo no publicado encontrado en el código filtrado. Monitorea proactivamente los flujos de trabajo del desarrollador, registra observaciones en archivos diarios de solo adición, y actúa de forma autónoma dentro de un presupuesto de bloqueo de 15 segundos. Está controlado por el flag de compilación PROACTIVE y completamente ausente de todas las versiones públicas de Claude Code.
¿Qué es el Undercover Mode en Claude Code?
El Undercover Mode se inyecta en el prompt del sistema cuando empleados de Anthropic usan Claude Code en repositorios públicos. Instruye a la IA a no incluir información interna de Anthropic en mensajes de commit o pull requests, indicando explícitamente: “No reveles tu cobertura.” Se activa automáticamente y no tiene interruptor de apagado forzado a menos que el remoto del repositorio esté en una lista de permitidos interna.
¿Se expusieron datos de usuarios o pesos del modelo?
No. Anthropic confirmó que no se expusieron datos de usuarios, prompts de clientes, historial de conversaciones ni pesos del modelo. El incidente se limitó al código fuente CLI del lado del cliente. Sin embargo, la exposición de la lógica interna de validación de seguridad crea riesgos secundarios para las organizaciones que usan la herramienta.
¿Qué es la familia de modelos Capybara?
El código filtrado referencia una familia de modelos Claude no publicada con el nombre en clave Capybara, incluyendo una variante capybara-v2-fast con una ventana de contexto de 1 millón de tokens en niveles rápido y de pensamiento. El código también referencia Opus 4.7 y Sonnet 4.8, que no han sido anunciados públicamente.
¿Qué deben hacer las organizaciones tras la filtración de Claude Code?
Fijar la versión del CLI, auditar espejos npm internos para archivos .map extraviados, revisar las prácticas de manejo de tokens API locales, aumentar la vigilancia ante paquetes similares, y reforzar los controles de salida en estaciones de trabajo de desarrolladores. Tratar el evento como un incidente de higiene de cadena de suministro que requiere verificación — no solo una exposición de IP que afecta únicamente a Anthropic.
Lectura Adicional
- Paquete npm: @anthropic-ai/claude-code — Página oficial del registro npm para el CLI de Claude Code
- npm package.json — campo files y .npmignore — Documentación oficial de npm sobre el array
filesy.npmignorepara controlar qué archivos se incluyen en los paquetes publicados - Bundler Bun — Ejecutables Standalone y Source Maps — Documentación del bundler de Bun que cubre el flag
--sourcemapy cómo configurar o deshabilitar la salida de source maps para compilaciones de producción - Especificación del Protocolo de Contexto de Modelo (MCP) — El estándar abierto que la arquitectura de herramientas de Claude Code valida y extiende
