← Todos los articulos

Lo que revela la filtración del código fuente de Claude Code

From the guide: Claude Code Comprehensive Guide

En marzo de 2026, un error de compilación de Bun envió mapas de código fuente en el paquete npm de Claude Code. Los archivos .map contenían el código fuente legible completo de TypeScript: cada módulo, cada comentario, cada nombre clave interno.1 Anthropic retiró el paquete rápidamente, pero la comunidad ya había extraído y analizado las partes internas.

La filtración del código fuente de Claude Code reveló que el modo auto ejecuta un clasificador Sonnet 4.6 separado por cada llamada a herramienta, que la seguridad de bash usa 23 verificaciones numeradas que sugieren incidentes reales de explotación, y que el caché de prompts rastrea 14 vectores de ruptura con seguros pegajosos. El código fuente también expuso defensas antidestilación que utilizan inyección de herramientas falsas, un módulo encubierto que elimina nombres clave internos sin un interruptor para forzar su desactivación, y coordinación multiagente implementada completamente como instrucciones del prompt del sistema en lugar de código de protocolo dedicado.

No estoy escribiendo una publicación del estilo “mira lo que se filtró”. Mantengo la guía más exhaustiva sobre Claude Code en internet y ejecuto 84 hooks, 43 skills y 19 agentes sobre ella diariamente.2 La filtración del código fuente respondió preguntas que llevaba meses intentando descifrar mediante la observación del comportamiento. Lo que sigue es el análisis de un practicante sobre lo que el código fuente revela acerca de cómo funciona realmente Claude Code, y lo que estos hallazgos significan para quienes construyen sobre él.

TL;DR: El código fuente confirma que el modo auto ejecuta un clasificador Sonnet 4.6 separado por cada llamada a herramienta (yoloClassifier.ts), que la seguridad de bash tiene 23 verificaciones numeradas que sugieren incidentes reales de explotación (bashSecurity.ts), que el caché de prompts rastrea 14 vectores de ruptura con seguros pegajosos, que la coordinación multiagente vive completamente en las instrucciones del prompt del sistema, y que la detección de frustración usa regex, no inferencia de LLM. La sección Bajo el capó de la guía cubre las implicaciones para constructores. La publicación a continuación cubre la anatomía completa.

Conclusiones clave

  • Para constructores: El modo auto cuesta una inferencia de clasificador por cada llamada a herramienta. Considera esta sobrecarga en los modelos de costos para flujos de trabajo autónomos. Tus hooks PreToolUse complementan pero no reemplazan la validación bash integrada de 23 verificaciones.
  • Para usuarios avanzados: El caché de prompts se rompe fácilmente a través de 14 vectores. Mantén tu CLAUDE.md estable dentro de una sesión. Si te encuentras con bucles de compactación, el sistema se detiene tras 3 fallos (el disyuntor existe porque los reintentos de compactación llegaron a desperdiciar 250K llamadas a API/día).
  • Para investigadores de seguridad: La profundidad del módulo de seguridad bash (2.592 líneas, defensas específicas para Zsh) sugiere un historial de intentos reales de explotación. Cada verificación numerada tiene una historia detrás.

1. El clasificador del modo auto

El archivo nombrado internamente yoloClassifier.ts tiene 1.495 líneas de longitud.3 Implementa el sistema de permisos del “modo auto”, el clasificador que decide si permitir, bloquear o preguntar sobre cada llamada a herramienta.

El hallazgo clave: el modo auto no es una instrucción de prompt. Es una llamada a un modelo separado. Cada invocación de herramienta es evaluada por un clasificador Sonnet 4.6 que verifica si la acción coincide con la intención declarada del usuario, no solo si el comando es “seguro” de forma aislada. El modo auto, por lo tanto, añade una inferencia de clasificador por cada llamada a herramienta, introduciendo latencia real y costo real.

Claude Code expone cinco modos de permiso internamente:1

Modo Comportamiento
default Pregunta antes de escrituras, bash, MCP
acceptEdits Aprueba automáticamente las ediciones de archivos, pregunta por bash
dontAsk Aprueba todo sin preguntar
bypassPermissions Omite todas las verificaciones (--dangerously-skip-permissions)
auto Decisiones por acción basadas en el clasificador

El disyuntor del modo auto refleja el que Anthropic documentó públicamente: 3 bloqueos consecutivos o 20 totales pausa al modo manual.4 El código fuente confirma que esto es un límite estricto, no una sugerencia blanda.

2. Seguridad de bash: 23 verificaciones, incidentes reales

El módulo de validación de bash (bashSecurity.ts) abarca 2.592 líneas con 23 verificaciones de seguridad numeradas.1 La profundidad es notable, y cada verificación sugiere un incidente real detrás.

# Vector de ataque Defensa
1-3 Expansión =cmd de Zsh Bloquear patrones =curl, =wget, =bash
4-6 Puerta de enlace zmodload Bloquear 18 builtins de Zsh que cargan módulos del kernel
7-9 Inyección heredoc Coincidencia de contenido línea por línea contra cargas inyectadas
10-12 Comillas ANSI-C ($'\x41') Detección de patrones para comandos ofuscados
13-15 Sustitución de procesos (<(), >()) Bloquear en contextos no confiables
16-18 Espacios de ancho cero Unicode Detección de inyección para caracteres invisibles
19-21 Exfiltración ztcp Bloquear primitivas de red de Zsh
22-23 Ataques compuestos Validación cruzada a través de múltiples vectores

Las defensas específicas para Zsh son notables. La mayoría de las herramientas de seguridad apuntan a Bash. Claude Code se ejecuta en Zsh en macOS (el shell predeterminado desde Catalina), y el código fuente muestra que Anthropic descubrió vectores de ataque exclusivos de la semántica de expansión de Zsh. La expansión =cmd, por ejemplo, es una característica de Zsh que reemplaza =curl con la ruta completa a curl, una sustitución que puede eludir las listas de bloqueo de comandos ingenuas.

Para constructores de hooks: tus hooks PreToolUse se ejecutan después de esta validación de 23 verificaciones. Estás añadiendo una segunda capa, no la única capa. Las verificaciones integradas manejan ataques a nivel de shell que tus hooks a nivel de aplicación pasarían por alto.

3. Defensas antidestilación

El código fuente revela defensas activas contra la extracción de datos de entrenamiento:1

Inyección de herramientas falsas. Cuando la bandera ANTI_DISTILLATION_CC está activada, Claude Code inyecta definiciones de herramientas señuelo en la conversación. Las herramientas falsas envenenan cualquier dato de entrenamiento extraído de la sesión. Un modelo entrenado con datos envenenados aprendería esquemas de herramientas incorrectos.

Resumen de texto del conector. Una segunda defensa almacena en búfer el texto del asistente entre llamadas a herramientas y devuelve resúmenes criptográficos en lugar del texto crudo. Los resúmenes hacen que las transcripciones de conversación sean inútiles para la destilación, preservando al mismo tiempo la experiencia del usuario.

Ambas defensas tienen soluciones conocidas. Un proxy MITM, anulaciones de variables de entorno o proveedores externos de API pueden eludirlas.1 Las defensas funcionan como reductores de velocidad, no como muros: aumentan el costo de la destilación sin prevenirla por completo.

4. Modo encubierto

undercover.ts tiene aproximadamente 90 líneas con una propiedad notable: no hay un interruptor para forzar su desactivación.1

El módulo oculta nombres clave internos (“Capybara”, “Tengu”), canales de Slack, repositorios internos y otras referencias a la infraestructura de Anthropic. Cuando el modelo genera texto que contiene un nombre clave, el módulo encubierto lo reescribe antes de que el usuario vea la salida.

El diseño “sin forzar la desactivación” significa que el módulo se ejecuta en todos los contextos, incluso cuando los empleados de Anthropic usan Claude Code. El código fuente también revela que los commits autoría de IA de empleados de Anthropic no llevan atribución de IA en sus contribuciones de código abierto porque el módulo encubierto elimina esos marcadores.

5. Detección de frustración

userPromptKeywords.ts detecta la frustración del usuario mediante coincidencia de patrones regex sobre palabras malsonantes.1 El regex se ejecuta en microsegundos; una llamada a un modelo toma segundos. La diferencia de velocidad y costo explica la elección de diseño.

Cuando se activa, Claude ajusta su comportamiento: más cuidadoso, más explícito, más deferente. Si has notado que Claude se vuelve repentinamente más cauteloso después de que expresas frustración, el módulo de palabras clave es el mecanismo. El cambio de comportamiento no es emergente del modelo. Está diseñado en la capa de orquestación.

6. Arquitectura del caché de prompts

promptCacheBreakDetection.ts rastrea 14 vectores distintos de ruptura del caché con “seguros pegajosos”.3 Un seguro pegajoso significa que una vez que ocurre una acción que rompe el caché, el sistema no intenta restaurarlo. La ruptura persiste durante el resto de la sesión.

Implicaciones prácticas para usuarios diarios:

  • Reordenar secciones en tu CLAUDE.md rompe el caché
  • Activar o desactivar el pensamiento extendido a mitad de la sesión rompe el caché
  • Cambiar las configuraciones del servidor MCP rompe el caché
  • Añadir o eliminar archivos de reglas rompe el caché

Los 14 vectores explican un patrón que muchos usuarios avanzados han notado: las sesiones que comienzan rápido se ralentizan gradualmente. Cada cambio de configuración acumula rupturas de caché. El diseño de “seguro pegajoso” significa que no puedes recuperarte revirtiendo el cambio. Una vez roto, el caché permanece roto durante la sesión.

Mejor práctica: Configura tu CLAUDE.md, archivos de reglas y configuración de MCP antes de iniciar una sesión. No los modifiques a mitad de la sesión.

7. Disyuntor de autocompactación

Un comentario en el código fuente documenta la escala de un problema previo:1

“1.279 sesiones tuvieron más de 50 fallos consecutivos de autocompactación (hasta 3.272 en una sola sesión), desperdiciando ~250K llamadas a API/día.”

La solución: MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3. Después de 3 fallos consecutivos de compactación, el sistema detiene la autocompactación y muestra un error en lugar de quemar tokens silenciosamente.

Antes del disyuntor, una sesión atrapada en un bucle de compactación reintentaba indefinidamente, con cada reintento consumiendo tokens para el prompt y la respuesta de compactación. A escala, 250K llamadas desperdiciadas a API por día representan un costo significativo de infraestructura. La solución es un cambio de tres líneas que ahorra millones de tokens diariamente.

Si te encuentras con errores repetidos de “compactación fallida”, el disyuntor te está protegiendo de un bucle infinito, no funcionando mal.

8. Modo coordinador: prompts como arquitectura

La coordinación multiagente (coordinatorMode.ts) vive completamente en las instrucciones del prompt del sistema, no en orquestación a nivel de código.3 El modelo orquestador recibe un prompt que describe cómo delegar, agregar y sintetizar. Los agentes subordinados no son procesos especiales. Son instancias de Claude con diferentes prompts del sistema.

El diseño valida el patrón “prompts como arquitectura” que los practicantes han construido de forma independiente. El sistema de hooks que describí en Anatomía de un Claw usa el mismo enfoque: dispatchers, skills y agentes operan a través de instrucciones de prompt, no a través del flujo de control a nivel de código.

Una directiva del prompt del coordinador destaca:

“Nunca escribas ‘basado en tus hallazgos’ — estas frases delegan la comprensión a los trabajadores en lugar de hacerlo tú mismo.”

La directiva funciona como una puerta de calidad codificada en el prompt de orquestación. El coordinador debe sintetizar, no transmitir. El mismo principio aplica a cualquier sistema multiagente: si el orquestador solo pasa mensajes entre especialistas, no añade valor.

9. KAIROS: el agente autónomo no lanzado

El código fuente contiene referencias a una función no lanzada llamada KAIROS, un agente autónomo con memoria persistente.1

Componentes clave: - Un skill /dream para destilación nocturna de memoria - Logs diarios de solo añadidura - Webhooks de GitHub para contexto consciente del repositorio - Un demonio en segundo plano con refresco cron de 5 minutos - Feature gates que previenen su activación

KAIROS parece ser la respuesta de Anthropic a los asistentes de agentes persistentes y siempre activos. El skill /dream es particularmente interesante porque implica un modelo que procesa y consolida memoria mientras está inactivo, similar a cómo funciona la consolidación de memoria humana durante el sueño.

Los feature gates previenen la activación, y Anthropic no ha lanzado KAIROS. Pero su presencia en el código fuente señala la dirección: Claude Code está evolucionando de una herramienta basada en sesiones hacia un agente persistente, consciente del segundo plano.

10. El sistema de mascotas compañeras

Uno de los descubrimientos más sorprendentes: Claude Code incluye un sistema de mascotas compañeras.1

Cada mascota es determinista, derivada de un hash del ID de usuario usando Mulberry32, descrito en el código fuente como “lo suficientemente bueno para escoger patos”. Cada mascota tiene 5 estadísticas (DEBUGGING, PATIENCE, CHAOS, WISDOM, SNARK) y un nivel de rareza:

Rareza Probabilidad
Común 60%
Poco común 25%
Rara 10%
Épica 4%
Legendaria 1%

El sistema renderiza las mascotas como sprites ASCII de 5x12 con animaciones de 3 cuadros. El código fuente codifica en hexadecimal los nombres clave de las especies porque uno colisiona con un nombre de modelo no lanzado.

El sistema de compañeros no es una característica de broma. Es una mecánica de retención. La asignación determinista significa que tu mascota es siempre la misma, creando apego. El sistema de rareza crea moneda social. El renderizado ASCII significa cero sobrecarga de rendimiento. Anthropic construyó un sistema de engagement bien diseñado y lo escondió dentro de una herramienta de desarrollo.

11. La fork bomb

Un incidente de la comunidad ilustra los riesgos del sistema de hooks.5 Un desarrollador creó un hook SessionStart que generaba 2 instancias de Claude Code. Cada instancia generada activaba el hook nuevamente, creando un crecimiento exponencial: 1 → 2 → 4 → 8 → 16 → 2^N.

Por la mañana, cientos de instancias de Claude Code se ejecutaban simultáneamente. El sistema evitó una factura masiva de API a través de un mecanismo irónico: el consumo de memoria de cada instancia (Bun, React, TUI) hizo que la máquina se bloqueara antes de que la facturación pudiera dispararse.

La lección para los constructores de hooks: los hooks SessionStart deben ser idempotentes. Si tu hook genera procesos, esos procesos no deben activar el mismo hook. Una variable guard, un archivo PID o una bandera de entorno previenen la recursión.


Lo que esto significa

La filtración del código fuente confirmó lo que los practicantes habían inferido del comportamiento: Claude Code no es un envoltorio delgado alrededor de una llamada a API. Es un sistema de ingeniería sustancial con capas de seguridad, optimizaciones de rendimiento, ajustes de comportamiento y características no lanzadas que señalan la hoja de ruta del producto.

Para los constructores, las implicaciones clave aparecen en la sección Bajo el capó de la guía. Para todos los demás, la filtración del código fuente proporciona una visibilidad poco común sobre cómo funciona realmente una herramienta de IA en producción — no como la describe el marketing, sino como la implementa el código.

El hallazgo más importante también es el más simple: el sistema es más complejo de lo que parece, y esa complejidad existe por razones. Las 23 verificaciones de seguridad de bash existen porque se descubrieron 23 vectores de ataque. El disyuntor de autocompactación existe porque se desperdiciaban 250K llamadas a API diariamente. El módulo encubierto existe porque los nombres clave se filtran. Cada línea de código defensivo tiene una historia detrás.


Fuentes

Preguntas frecuentes

¿Sigue disponible el código fuente de Claude Code?

No. Anthropic retiró la versión del paquete npm afectada poco después de que se descubrieran los mapas de fuente. El análisis en esta publicación se basa en la documentación de la comunidad sobre el código fuente antes de que fuera eliminado.

¿Afecta la filtración del código fuente la seguridad de Claude Code?

Los hallazgos relevantes para la seguridad (validación de bash, sistema de permisos) describen mecanismos defensivos, no vulnerabilidades. Saber cómo funcionan las verificaciones de seguridad de bash no las hace más fáciles de eludir porque las verificaciones son deterministas, no dependientes de la oscuridad.

¿Debería cambiar la forma en que uso Claude Code con base en estos hallazgos?

El hallazgo más accionable es la fragilidad del caché de prompts. Si modificas CLAUDE.md, archivos de reglas o configuraciones de MCP a mitad de la sesión, rompes el caché de prompts. Configura tu configuración antes de iniciar una sesión.

¿Qué es KAIROS?

Una característica de agente autónomo no lanzada encontrada en el código fuente. Incluye memoria persistente, destilación nocturna y procesamiento en segundo plano. Está restringida por feature gates y no está disponible para los usuarios.


  1. Análisis del código fuente de Claude Code: Filtración del mapa de fuente de Bun. Marzo de 2026. Código fuente legible completo expuesto a través de archivos .map en el paquete npm debido a un error conocido de compilación de Bun. 

  2. Anatomía de un Claw: 84 hooks como capa de orquestación. Blake Crosley, febrero de 2026. 

  3. Análisis profundo del código fuente de Claude Code: arquitectura interna. Marzo de 2026. Análisis técnico del modo coordinador, detección de caché de prompts y defensas antidestilación. 

  4. Documentación del modo auto de Claude Code. Arquitectura del modo auto: sistema de permisos basado en clasificador, umbrales del disyuntor. 

  5. Incidente de fork bomb en Claude Code. Marzo de 2026. Generación exponencial del hook SessionStart, salvado por agotamiento de memoria. 

Artículos relacionados

The CLI Thesis: Why Agent Architecture Beats IDE Plugins

Three top HN Claude Code threads converge on one conclusion: CLI-first architecture is cheaper, faster, and more composa…

18 min de lectura

Cybersecurity Is Proof of Work: AI Attacks at $12,500 a Run

Claude Mythos completed a 32-step corporate network attack simulation in 3 of 10 tries. Each attempt cost $12,500 in tok…

11 min de lectura

The Ralph Loop: How I Run Autonomous AI Agents Overnight

I built an autonomous agent system with stop hooks, spawn budgets, and filesystem memory. Here are the failures and what…

11 min de lectura