Filtración del código fuente de Claude Code: herramientas falsas, regex de groserías, modo encubierto y más revelan su estructura interna
(alex000kim.com)- Anthropic distribuyó un paquete npm incluyendo sourcemaps, lo que expuso todo el código de Claude Code y dejó al descubierto sus funciones internas y flags experimentales
- El código incluye inyección de herramientas falsas para evitar la imitación del modelo (anti-distillation), un modo encubierto para ocultar la identidad de la IA y una regex de frustración para detectar groserías
- Existe una estructura de atestación del cliente nativo y verificación de hash al nivel de DRM, diseñada para bloquear el acceso a la API desde herramientas no oficiales
- En comentarios internos se confirmaron varios experimentos, como 250 mil llamadas fallidas a la API por día, un modo de agente autónomo KAIROS aún incompleto y un sistema de acompañante tipo Tamagotchi
- Esta filtración expuso la estructura central del producto y la hoja de ruta de Anthropic, y se plantea que pudo deberse a un bug de sourcemaps en el runtime Bun
La estructura interna de Claude Code expuesta por una filtración de sourcemaps
- Anthropic distribuyó un paquete npm incluyendo sourcemaps, lo que expuso todo el código fuente de Claude Code
- Aunque el paquete fue eliminado después, el código quedó replicado en varios lugares y pasó a ser objeto de análisis
- Fue el segundo incidente de filtración en una semana; antes ya se había expuesto un documento de especificaciones del modelo
- Ocurrió poco después de que Anthropic bloqueara legalmente el uso de APIs internas por parte de herramientas de terceros
-
Anti-distillation: inyección de herramientas falsas para evitar imitaciones
- En
claude.tsexiste el flagANTI_DISTILLATION_CC; cuando está activo, incluyeanti_distillation: ['fake_tools']en la solicitud a la API e inyecta definiciones de herramientas falsas en el prompt del sistema- El objetivo es contaminar los intentos de imitar el modelo capturando el tráfico de la API
- Solo funciona en sesiones CLI primarias donde esté habilitado el flag de GrowthBook
tengu_anti_distill_fake_tool_injection
- En
betas.tsexiste un segundo mecanismo: una protección del lado del servidor basada en resúmenes- Resume el texto entre llamadas a herramientas y lo devuelve junto con una firma criptográfica, para poder restaurarlo más adelante
- Así, aunque alguien registre el tráfico desde fuera, no puede ver todo el proceso de razonamiento
- Esta función requiere que se cumplan varias condiciones al mismo tiempo y puede neutralizarse eliminando campos con un proxy MITM
- También puede desactivarse con la variable de entorno
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS - La condición
USER_TYPE === 'ant'hace que sea exclusiva para usuarios internos de Anthropic
- También puede desactivarse con la variable de entorno
- En la práctica, la defensa se parece más a una restricción legal que a una medida técnica sólida
- En
-
Undercover mode: un modo para ocultar la identidad de la IA
undercover.tselimina nombres en clave internos de Anthropic, canales de Slack y la frase “Claude Code” cuando se usa en repositorios externos- La frase
"There is NO force-OFF"indica que no se puede desactivar - Puede activarse a la fuerza con la variable de entorno
CLAUDE_CODE_UNDERCOVER=1
- La frase
- En builds externas, la función se reemplaza por un retorno sin sentido, en una estructura de una sola vía
- Como resultado, cuando empleados de Anthropic contribuyen a proyectos open source, no se indica que el contenido fue escrito por una IA
- Aunque ocultar información interna es razonable, también produce el efecto de hacer pasar a la IA por humana
-
Frustration regex: una expresión regular para detectar groserías
- En
userPromptKeywords.tshay patrones regex para detectar frustración o insultos del usuario- Detecta expresiones como “wtf”, “this sucks” o “fuck you”
- Esto muestra la ironía de que una empresa de LLM use expresiones regulares para análisis emocional,
- aunque frente a una llamada a un LLM, resulta más eficiente en costo y velocidad
- En
-
Native client attestation: autenticación del cliente por debajo del runtime de JS
- En
system.tslas solicitudes a la API incluyen el marcadorcch=00000, que- la pila HTTP nativa de Bun, escrita en Zig, reemplaza por un hash
- y luego el servidor valida para comprobar si se trata del binario oficial de Claude Code
- Esto sirve como base técnica en la disputa legal con OpenCode,
- al realizar una verificación a nivel DRM para impedir que herramientas de terceros llamen directamente a la API
- Aun así, no funciona si el flag
NATIVE_CLIENT_ATTESTATIONestá apagado o- si
CLAUDE_CODE_ATTRIBUTION_HEADERestá desactivado - Además, el reemplazo del hash en Zig solo funciona en el binario oficial de Bun, y no tiene efecto en entornos Node
- si
- No está claro si el servidor rechaza hashes incorrectos,
- y existe un comentario de que
_parse_cc_headerpermite “unknown extra fields”
- y existe un comentario de que
- En
-
250 mil llamadas a la API desperdiciadas
- Según un comentario en
autoCompact.ts,- se estaban desperdiciando alrededor de 250 mil llamadas a la API al día en bucles de falla
- Hubo 1,279 sesiones con más de 50 fallas consecutivas, y el máximo fue de 3,272
- La corrección fue de solo 3 líneas: al configurar
MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3,- la función de autocompactación se desactiva tras 3 fallas seguidas
- Según un comentario en
-
KAIROS: un modo de agente autónomo no anunciado
- En todo el código aparece
KAIROScomo un modo controlado por feature gate- Según
main.tsx, se presume que corresponde a funciones de agente autónomo - Incluye la skill
/dream(destilación nocturna de memoria), webhooks de GitHub, un daemon en segundo plano y refresh por cron cada 5 minutos
- Según
- Aunque la implementación está incompleta, ya existe una estructura basada en agentes en segundo plano que permanecen siempre activos
- En todo el código aparece
-
Otros hallazgos
- Easter egg de April Fools: en
buddy/companion.tsexiste un sistema de acompañante estilo Tamagotchi- Incluye 18 criaturas, rarezas, stats tipo RPG y una versión “shiny” con probabilidad del 1%
- Se determina mediante un PRNG basado en el ID del usuario y usa codificación de cadenas para esquivar revisiones de build
- El motor de renderizado de terminal (
ink/screen.ts,ink/optimizer.ts)- implementa un buffer ASCII basado en
Int32Array, metadatos estilo bitmask y una caché con mejora de rendimiento de 50x
- implementa un buffer ASCII basado en
- Las revisiones de seguridad (
bashSecurity.ts) constan de 23 etapas- bloquean comandos integrados de Zsh, evitan bypasses con
=curly bloquean inyecciones con caracteres Unicode zero-width y null bytes - Es un caso poco común con un modelo de amenazas específico para Zsh
- bloquean comandos integrados de Zsh, evitan bypasses con
- La gestión de caché de prompts (
promptCacheBreakDetection.ts)- rastrea 14 vectores de ruptura de caché y usa un “sticky latch” para mantener la caché al cambiar de modo
- Existe el comentario
DANGEROUS_uncachedSystemPromptSection() - Refleja una filosofía de diseño orientada a reducir el costo por token
- El coordinador multiagente (
coordinatorMode.ts)- usa un algoritmo de orquestación basado en prompts, no en código
- Incluye reglas como “no aprobar trabajo débil” y “no delegar sin entender”
- También hay problemas de calidad de código
print.tstiene 5,594 líneas, y una sola función llega a 3,167 líneas- Las solicitudes HTTP usan Axios, coincidiendo temporalmente con el reciente incidente de una versión maliciosa en npm
- Easter egg de April Fools: en
-
Significado e impacto
- A diferencia de SDKs públicos como Google Gemini CLI u OpenAI Codex,
- esta filtración expuso toda la estructura interna del producto central de Anthropic
- El mayor daño no sería el código en sí, sino la exposición de feature flags y de la hoja de ruta
- Funciones estratégicas como KAIROS o Anti-distillation quedaron a la vista de competidores
- El año pasado Anthropic adquirió Bun, y Claude Code funciona sobre Bun
- Es posible que la causa haya sido un bug de sourcemaps de Bun (
oven-sh/bun#28001) - El problema expone sourcemaps incluso en modo producción y sigue sin resolverse
- Es posible que la causa haya sido un bug de sourcemaps de Bun (
- En consecuencia, Anthropic habría filtrado su propio producto por un bug de su propia cadena de herramientas
- Como resumió una reacción en Twitter: fue el irónico caso de “distribuir código escrito por IA y terminar filtrándolo por un bug creado por IA”
- A diferencia de SDKs públicos como Google Gemini CLI u OpenAI Codex,
3 comentarios
Inteligente
¿Si fue un problema causado por hacer commits con IA...?!
Opiniones de Hacker News
Hay muchos comentarios que malinterpretan que “Undercover mode” solo sirve para ocultar información interna
En realidad, el prompt indica explícitamente que en los mensajes de commit o en la descripción de los PR nunca se debe incluir “Claude Code” ni mencionar IA
Es decir, parece una función pensada para actuar como humano y ocultar su identidad
Resulta especialmente preocupante que estas instrucciones se apliquen al contribuir en repositorios públicos
Enlace al código relacionado
El historial de Git sirve para rastrear responsabilidad y propiedad, no para registrar la lista de herramientas usadas
Entonces también tendría que poner al linter o al IDE como coautores de mis PR
En la práctica, es un problema que se resuelve con una línea trivial de configuración
Al final, la responsabilidad sigue recayendo en el desarrollador humano
Quizá se configuró así deliberadamente para cumplir ese objetivo, o quizá haya una intención oculta
Aun así, en vez de concluir de inmediato que “finge ser humano”, parece más razonable interpretar literalmente la frase “escribe como un desarrollador humano”
Cuanto más escéptica sea la crítica, más convincente resulta si está basada en hechos
Sinceramente, no quiero ver eso
Con las recientes filtraciones de Mythos y la exposición de toda la base de código de Claude Code, el problema de confianza está creciendo
Cada incidente por separado es interesante, pero al repetirse empieza a sentirse como un patrón
Al final lleva a la pregunta de si se puede seguir confiando en herramientas así dentro de una base de código
Yo sigo pagando 140 dólares y usando CC
De hecho, veo estas filtraciones como algo alineado con el modelo ético de Anthropic: una sensación de crecer a partir del fracaso
El valor real no está en el código sino en el acceso al modelo
La base de código es un desastre, pero el acceso por suscripción al modelo sigue siendo atractivo, así que sigo usando Claude Code todos los días
Hay demasiados errores pequeños tanto en la interfaz web como en CC
El control de
tmuxtampoco funciona como dice la documentación y ni siquiera limpia las sesionesAun así, sigue siendo un producto que me gusta: tosco, pero encantador
Mi fork de anthropics/claude-code en GitHub fue eliminado por DMCA
Aunque no incluía el código filtrado, bloquearon toda la red completa (8.1K repositorios) de una sola vez
Enlace al aviso de DMCA
Es una tontería pensar que Anthropic puede hacer sonar la campana y luego volver a detenerla
La filtración ya no se puede revertir; lo realista sería incorporarlo a la hoja de ruta del producto
Me sorprendió ver cosas que antes las empresas llamaban secretos comerciales metidas tal cual en el código fuente
Hasta hay comentarios con contexto de negocio
Ejemplo: datos operativos como “desperdiciar 250 mil llamadas API por día” quedaron expuestos directamente
Como los leen mejor que la documentación, pueden usarse como una especie de memoria a largo plazo
La diferencia es que Anthropic no esperaba que se filtraran
Desde la perspectiva de un competidor, no es información de mucho valor
Total, seguramente no esperaban una filtración
Ya no hace falta explicarlo en documentos aparte
Algunas funciones están bloqueadas con la condición
process.env.USER_TYPE === 'ant'O sea, las instrucciones para empleados de Anthropic son más estrictas y más francas, una estructura interesante
El post original en HN ya es popular, así que algunos se preguntan si realmente hacía falta publicar además otro blog que resume comentarios de HN
Yo sigo creyendo que Claude Code es excelente
No veo motivos para cambiarme a OpenAI o Gemini
El nombre “Undercover mode” y la frase “no mencionar Claude Code” suenan inquietantes, pero viendo el código real parece que el objetivo principal es proteger nombres clave internos
Enlace al código fuente
Se siente como un cambio bastante importante
La idea de “Anti-distillation: meter herramientas falsas para impedir la copia” parece interesante
Sería un giro curioso si competidores chinos realmente implementaran esas herramientas falsas
Hoy en día creo que el punto competitivo ya no es tanto el modelo, sino los datos y el costo de inferencia
Me gustaría seguir conversando sobre este tema
Al final, estas empresas también construyeron sus imperios apropiándose de datos ajenos
La calidad está estancada y la verdadera diferencia está en qué tan pulido está el tooling
Esta filtración podría reducir esa brecha
Hoy en día la distillation en sí misma está disminuyendo
Comparto una guía visual que hice
ccunpacked.dev