19 puntos por GN⁺ 29 일 전 | 3 comentarios | Compartir por WhatsApp
  • 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.ts existe el flag ANTI_DISTILLATION_CC; cuando está activo, incluye anti_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.ts existe 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
    • En la práctica, la defensa se parece más a una restricción legal que a una medida técnica sólida
  • Undercover mode: un modo para ocultar la identidad de la IA

    • undercover.ts elimina 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
    • 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.ts hay 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
  • Native client attestation: autenticación del cliente por debajo del runtime de JS

    • En system.ts las solicitudes a la API incluyen el marcador cch=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_ATTESTATION está apagado o
      • si CLAUDE_CODE_ATTRIBUTION_HEADER está desactivado
      • Además, el reemplazo del hash en Zig solo funciona en el binario oficial de Bun, y no tiene efecto en entornos Node
    • No está claro si el servidor rechaza hashes incorrectos,
      • y existe un comentario de que _parse_cc_header permite “unknown extra fields”
  • 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
  • KAIROS: un modo de agente autónomo no anunciado

    • En todo el código aparece KAIROS como 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
    • Aunque la implementación está incompleta, ya existe una estructura basada en agentes en segundo plano que permanecen siempre activos
  • Otros hallazgos

    • Easter egg de April Fools: en buddy/companion.ts existe 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
    • Las revisiones de seguridad (bashSecurity.ts) constan de 23 etapas
      • bloquean comandos integrados de Zsh, evitan bypasses con =curl y 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
    • 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.ts tiene 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
  • 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
    • 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”

3 comentarios

 
kaydash 27 일 전

Inteligente

 
bbulbum 29 일 전

¿Si fue un problema causado por hacer commits con IA...?!

 
GN⁺ 29 일 전
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

    • Cada vez que Claude aparece como coautor de un commit me da vergüenza ajena
      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
    • Imagino que, como yo, ya habrá gente que agregó estas instrucciones en su archivo CLAUDE.md
      En la práctica, es un problema que se resuelve con una línea trivial de configuración
    • Más que intentar hacerse pasar por humano, parece buscar que Claude no sea objeto de burlas cuando la calidad del código es baja
      Al final, la responsabilidad sigue recayendo en el desarrollador humano
    • El objetivo del código es evitar fugas de información, pero la implementación real es más amplia que eso
      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
    • Yo también he visto en PR la frase “coauthored by Claude Code”
      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

    • Me parece una preocupación exagerada
      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
    • No creo que tenga un gran impacto
      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
    • Sinceramente, el propio Claude se siente como vibe coded slop
      Hay demasiados errores pequeños tanto en la interfaz web como en CC
      El control de tmux tampoco funciona como dice la documentación y ni siquiera limpia las sesiones
      Aun 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

    • De todas formas, los honorarios legales ya deben estar corriendo, así que simplemente están usando al equipo legal
      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

    • Los comentarios son prácticamente el hack central del agent coding
      Como los leen mejor que la documentación, pueden usarse como una especie de memoria a largo plazo
    • La mayoría de las grandes bases de código privadas son parecidas
      La diferencia es que Anthropic no esperaba que se filtraran
    • Es un buen comentario que explica por qué existe esa configuración
      Desde la perspectiva de un competidor, no es información de mucho valor
    • Es práctico meter en el código toda la información posible
      Total, seguramente no esperaban una filtración
    • Poner todo el contexto dentro del código parece el punto final de un diseño amigable para agentes
      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

    • Ese blog parece mostrar rastros de haber sido escrito en parte por IA
    • Otros opinan que sí hacía falta un resumen porque el post original era desordenado
    • La cultura de HN tiende a volverse autorreferencial
  • Yo sigo creyendo que Claude Code es excelente
    No veo motivos para cambiarme a OpenAI o Gemini

    • Yo me decepcioné de Claude Code y me pasé a Codex, pero para desarrollo web y móvil funciona casi igual de bien
  • 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

    • Proteger nombres clave se entiende, pero borrar rastros de contenido generado por IA significa otra cosa
      Se siente como un cambio bastante importante
    • La frase clave es “escribe el mensaje de commit como un desarrollador humano”
    • El hecho de que en los “BAD examples” se prohíban frases relacionadas con Claude deja claro que la intención es evitar exponer el uso de IA
    • Probablemente la idea es que los desarrolladores puedan usar IA en proyectos de la empresa sin que se note
    • Parece diseñado para que Claude no revele automáticamente su identidad al contribuir a código abierto
  • 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

    • Parece que pronto van a salir versiones copiadas como zAI, Qwen, Minimax CC
      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
    • Toda esta discusión sobre distillation me parece vacía
      Al final, estas empresas también construyeron sus imperios apropiándose de datos ajenos
    • En realidad ambos lados se están destilando (copiando) mutuamente
      La calidad está estancada y la verdadera diferencia está en qué tan pulido está el tooling
      Esta filtración podría reducir esa brecha
    • Las herramientas falsas son simplemente cebos que se pueden filtrar con regex
      Hoy en día la distillation en sí misma está disminuyendo
    • Da risa esa actitud irónica de “nosotros robamos obras ajenas, pero ustedes no roben lo nuestro”
  • Comparto una guía visual que hice
    ccunpacked.dev