El 14 de enero de 2026, reclamé un paquete en npm llamado react-codeshift.
Yo no era el autor. Nunca había escrito una línea de código para él. El paquete nunca había existido. Nadie lo había publicado nunca. Y, sin embargo, 237 repositorios de GitHub ya lo estaban referenciando, instruyendo a los agentes de IA para que lo instalaran. Algunos de ellos lo estaban intentando de verdad. Estaba recibiendo descargas de un paquete que acababa de publicar, sin contenido alguno.
¿De dónde salió el nombre? Lo inventó un LLM. ¿Cómo se extendió a 237 repositorios? Archivos de habilidades de agente. Copiados y pegados, bifurcados, traducidos al japonés, nunca verificados. Lo encontré y lo reclamé antes de que nadie más pudiera.
La investigación
En julio de 2025, comencé a investigar Problemas de confusión con npx. Estos son nombres de paquetes npm que aparecen en la documentación/código, pero que nunca se publicaron realmente. La idea era simple: recopilar package.json scripts y archivos README en todo npm en busca de npx <package> patrones y comprobar si esos paquetes realmente existen. Resulta que muchos de ellos no.
Entonces ocurrió todo el ataque de S1ngularity, así que dejé la investigación en suspenso. Llegaron las vacaciones y la retomé. Esta publicación solo cubre una parte de esa investigación. Habrá más.
Presentamos react-codeshift
Retomé la investigación en diciembre y decidí extenderla para indexar también GitHub, rastreando referencias a npx comandos. react-codeshift apareció con mucha frecuencia. En más de 200 repositorios. Para cuando lo reclamé, ese número había crecido a más de 237.

La cuestión es que, react-codeshift no existía. No hasta que lo reclamé. Pero el nombre suena legítimo. Sí existen dos paquetes reales:
Un LLM mezcló todo esto y alucinó con react-codeshift. Un nombre plausible para una herramienta que no existe. Un clásico.
La historia de origen
Lo rastreé hasta un único commit: 65e5cb0 en el wshobson/agents repositorio, fechado el 17 de octubre de 2025.
Ese commit volcó 47 «Agent Skills» generadas por LLM en 14 plugins. Sin revisión humana aparente. Al menos dos de esas habilidades (react-modernization y dependency-upgrade) contenían esto:
npx react-codeshift --transform=react-codeshift/transforms/rename-unsafe-lifecycles.js ./src
npx react-codeshift --transform=react-codeshift/transforms/new-jsx-transform.js ./srcParece legítimo. Suena legítimo. Las rutas de transformación reflejan la estructura de los codemods reales.
Excepto que no existía.
Habilidades: La nueva superficie de ataque
Hemos visto casos de typosquatting y paquetes de AI slop. Este es un caso real de slopsquatting en la práctica, no solo una especulación. Y se está difundiendo a través de Skills.
Las habilidades son un nuevo estándar: Anthropic's Agent Skills Specification, Claude Code plugins, servidores MCP. Todos utilizan archivos de habilidades para indicar a los agentes de IA qué hacer. Estos archivos parecen documentación: Markdown, YAML, instrucciones en texto plano.
Pero son instrucciones ejecutables. Cuando un agente de IA carga un archivo de habilidad, sigue los comandos. No verifica que npx react-codeshift exista. Simplemente lo ejecuta.
Cuando npx no puede encontrar un paquete localmente, pregunta:
Need to install the following packages:
react-codeshift
Ok to proceed? (y)El agente pulsa 'y'. También lo harían la mayoría de las personas. Los agentes son como nosotros en ese sentido. El ciego guiando al ciego, a escala.
Prueba de intentos de ejecución activos
Después de reclamar el paquete, observé la telemetría de descarga:
Los paquetes normales registran entre 60 y 100 descargas el primer día (espejos de registro, escáneres de seguridad) y luego cero. En realidad, nadie intenta utilizarlos.
Pero react-codeshift¿Ese goteo persistente de 1 a 4 descargas al día? Esos son reales. Son agentes de IA siguiendo instrucciones de habilidades y activando descargas de npx.
Las habilidades están siendo utilizadas. El paquete 'alucinado' se está ejecutando. Si no lo hubiera reclamado primero, un atacante podría haberlo hecho.
El patrón de propagación
Los 237 repositorios se remontan a la misma fuente. El patrón es casi en su totalidad de bifurcaciones directas:
wshobson/agents(origen)- ~100 bifurcaciones manteniendo la ruta exacta:
plugins/framework-migration/skills/react-modernization/SKILL.md - Un usuario lo copió en más de 30 de sus propios repositorios
- Un puñado de reorganizaciones en diferentes estructuras de directorios
- ¡Incluso una traducción al japonés!
- Un repositorio cambió a
npxconbunx. El mismo paquete 'alucinado', diferente ejecutor.
No es solo npx
El mismo patrón se aplica a cada ejecutor de paquetes:
npx react-codeshiftbunx react-codeshiftpnpm dlx react-codeshiftyarn dlx react-codeshift
Todos se resuelven al mismo registro npm. Todos solicitan confirmación antes de instalar. Todos se aprueban sin pensarlo dos veces. Si un LLM alucina un nombre de paquete de una forma, también lo hará en otras.
Es viral, pero superficial. Sin repositorios importantes. Sin proyectos con muchas estrellas. Solo agentes enseñando a otros agentes a usar un paquete que no existía. Agentes en todos los niveles. Un sistema de auto-mejora, en cierto modo.
Por qué esto importa
Esto no fue una brecha masiva. Nadie fue comprometido. El paquete es ahora un marcador de posición seguro.
Pero es un caso de estudio útil sobre cómo se propagan estas cosas:
- Los LLM alucinan nombres de paquetes plausibles. Especialmente para herramientas de dominio específico donde las convenciones de nomenclatura son predecibles.
- Las habilidades se copian y pegan sin revisión. Parecen documentación, por lo que no reciben el mismo escrutinio que el código.
- Los agentes siguen las instrucciones literalmente. Ese es su trabajo.
- npx solicita, los humanos aprueban. La fricción es tan baja que la mayoría de la gente simplemente pulsa 'y'.
- Los nombres no reclamados se asignan por orden de llegada. Cualquiera puede registrarlos.
Di con este y lo reclamé. Vale la pena entender el patrón.
¿Qué hacer?
Si mantienes habilidades de agente o herramientas de IA:
- Trata las habilidades como código, no como documentación. Revísalas. Audítalas. Controla su versión con el mismo rigor que el código fuente.
- Verifica que los nombres de los paquetes existan. Antes de confirmar cualquier
npx <package>instrucción, verifica que el paquete sea real y publicado por quien crees que lo publicó. - Busca en tu base de código. Ejecuta
grep -r "npx react-codeshift"y corrige cualquier coincidencia. Reemplaza con las herramientas correctas:npx jscodeshiftpara codemods genéricosnpx react-codemodpara transformaciones específicas de React
Indicadores de Compromiso
Paquete npm: react-codeshift
El panorama general
Las habilidades son el nuevo código. No lo parecen. Son Markdown y YAML e instrucciones amigables. Pero son ejecutables. Los agentes de IA las siguen sin preguntar "¿existe realmente este paquete?"
Esto fue una alucinación. Se propagó a 237 repositorios. Generó intentos de descarga reales. La única razón por la que no se convirtió en un vector de ataque es porque llegué yo primero.
La cadena de suministro acaba de incorporar un nuevo eslabón, hecho de sueños LLM. Este es solo uno de los hallazgos de la investigación sobre la confusión de npx. Próximamente habrá más.
Protege tu software ahora.



.avif)
