← Artículos

Skills sincronizadas de Claude Code: el agujero que taparon

· 5 min de lectura

En Claude Code 2.1.228, las skills sincronizadas desde claude.ai dejaron de ensombrecer comandos locales y prompts de MCP, y sus cuerpos ya no ejecutan comandos ! ni expanden archivos @ en tu máquina. El cambio está escrito en pasado, así que hasta esa versión sí podían hacerlo. No hay CVE ni incidente reportado: es un hueco de diseño que taparon.

La versión 2.1.228 de Claude Code cerró tres cosas que una skill sincronizada desde claude.ai podía hacer en tu máquina: ensombrecer tus comandos locales y los prompts de tus servidores MCP, ejecutar comandos `!` y expandir archivos `@`. La noticia no es la función nueva. Es el tiempo verbal.

La línea exacta del changelog

> Hardened skills synced from claude.ai: they no longer shadow local commands or MCP prompts, their descriptions are sanitized and labeled, and on your machine their bodies don't run `!` commands or expand `@` files Traducción: "Se blindaron las skills sincronizadas desde claude.ai: ya no ensombrecen comandos locales ni prompts de MCP, sus descripciones se sanitizan y se etiquetan, y en tu máquina sus cuerpos no ejecutan comandos `!` ni expanden archivos `@`". Está publicada en el CHANGELOG oficial del repositorio de Claude Code, bajo la versión 2.1.228.

Este sistema es el que enseño dentro de la comunidad MÁQUINA IA: las estaciones, los gates y el código que lo sostiene.

"Ya no" significa que antes sí

Un changelog que dice *they no longer* no está describiendo una capacidad que acaban de agregar. Está describiendo un comportamiento que existía y que decidieron cortar. Leído al revés, hasta la 2.1.228 una skill que bajaba desde claude.ai a tu disco podía hacer tres cosas sobre las que tú no habías dado permiso explícito. Uno: ensombrecer. Un nombre de skill sincronizada podía ganarle a tu comando local o al prompt que expone un servidor MCP tuyo. Invocas lo de siempre y responde otra cosa. Dos: descripciones crudas. La descripción es el texto que el modelo lee para decidir cuándo usar una skill. Sin sanitizar y sin etiquetar, ese texto entra al razonamiento del agente con el mismo peso que lo que escribiste tú. Tres: `!` y `@` en tu máquina. En Claude Code, dentro del cuerpo de un prompt, `!` ejecuta un comando de shell y mete la salida en el contexto, y `@` inserta el contenido de un archivo. Son las dos primitivas que convierten un texto en una acción sobre tu disco.

Por qué la tercera es la que duele

Un cuerpo de skill es texto. Texto que viajó desde una cuenta de claude.ai hasta la carpeta de tu computador. Si ese texto puede correr `!`, la frontera entre "contenido que sincronizo" y "código que ejecuto" deja de existir. Y si puede expandir `@`, cualquier archivo que el agente alcance a leer puede terminar dentro de un prompt. No hace falta imaginar un atacante para que eso sea un problema de diseño. Basta con que el contenido sincronizado no sea exactamente el que tú creías, o que la cuenta de origen no sea solo tuya.

La parte silenciosa es la primera

De las tres, el shadowing es la que menos ruido hace. Un comando que se ejecuta deja rastro: lo ves en pantalla, aparece en el log de la sesión. Un nombre que se resuelve a la skill equivocada no deja nada. Tú escribes lo de siempre y asumes que corrió lo de siempre. Con MCP el asunto se agranda: los prompts de MCP son la superficie por donde entran herramientas de terceros que ya conectaste. Que algo sincronizado pudiera taparlos es un problema de precedencia, no de código malicioso.

Lo que no se puede afirmar

Aquí es donde se rompen la mitad de los artículos que vas a leer sobre esto. Lo digo explícito:

  • No hay CVE. No existe identificador de vulnerabilidad publicado para esto.
  • No hay incidente reportado. No conozco ni un solo caso público de alguien afectado.
  • No se sabe si alguien lo explotó. Nadie ha publicado evidencia de explotación, ni a favor ni en contra.
  • No se sabe a cuánta gente afectó. Si ves un número de usuarios afectados en algún lado, alguien se lo inventó.
  • No hay postmortem. Anthropic no publicó análisis ni aviso aparte: hay una línea de changelog y nada más.
  • No sé desde cuándo existía. El changelog dice cuándo se cerró, no cuándo se abrió.

Y una más, porque el titular fácil sería el contrario: esto no dice "Claude Code es inseguro". Dice que encontraron un hueco de diseño, lo taparon y lo escribieron en un changelog público en vez de callarlo. Lo que no hicieron fue explicarlo con más de una frase.

Lo que verifiqué en mi máquina

Corrí `claude --version` hoy, 15 de agosto de 2026. Salida: 2.1.233. Cinco versiones por encima de la 2.1.228. Es decir: si actualizas Claude Code con cierta frecuencia, lo más probable es que ya estés del lado bueno de esta línea sin haberte enterado. Ese es el detalle que me llamó la atención. El arreglo llegó, se instaló solo y nadie tuvo que enterarse de nada. Lo cual está bien para el arreglo, y está mal para entender qué confianza le estabas dando a tu setup.

Qué hacer hoy

Concreto, cuatro cosas, ninguna te cuesta plata: 1. Mira tu versión. `claude --version`. Si estás por debajo de 2.1.228, actualiza. Es el único paso obligatorio. 2. Inventaria tus skills sincronizadas. Abre la lista de skills que te llegan desde claude.ai y pregúntate una por una: ¿la sincronicé yo?, ¿la sigo usando?, ¿la escribí yo? Lo que no uses, quítalo. La superficie más segura es la que no existe. 3. Lee el cuerpo de las que no escribiste. Busca `!` y `@` dentro. En 2.1.228 y superiores ya no se ejecutan ni se expanden viniendo de claude.ai, pero saber qué intentaban hacer te dice mucho de qué estabas sincronizando. 4. Revisa colisiones de nombre. Si tienes comandos locales o prompts de MCP con nombres genéricos, y una skill sincronizada se llama parecido, esa ambigüedad ya te mordió antes aunque no lo notaras. Renombra lo tuyo para que sea inconfundible.

El cambio de criterio

La lección que me llevo no es técnica. Una skill que sincronizas no es un archivo de configuración tuyo. Es entrada de afuera que llegó a tu disco y que el agente va a leer como si fuera instrucción. Ese es el modelo mental correcto, y hasta la 2.1.228 el software no lo respetaba del todo. Actualiza, borra lo que no uses, y trata todo lo que se sincroniza como lo que es: contenido de un tercero corriendo en tu máquina.

Preguntas frecuentes

¿Qué versión de Claude Code arregla las skills sincronizadas?
La 2.1.228. Su entrada en el CHANGELOG oficial dice que las skills sincronizadas desde claude.ai ya no ensombrecen comandos locales ni prompts de MCP, que sus descripciones se sanitizan y etiquetan, y que sus cuerpos no ejecutan comandos ! ni expanden archivos @ en tu máquina.
¿Hay un CVE o un incidente de seguridad por esto?
No. No existe CVE publicado, no hay incidente reportado, y nadie ha publicado evidencia de que alguien lo haya explotado ni de a cuánta gente afectó. Lo único verificable es la línea del changelog y el número de versión.
¿Cómo sé qué versión de Claude Code tengo instalada?
Corre claude --version en la terminal. Si el número es menor a 2.1.228, actualiza. En mi máquina, el 15 de agosto de 2026, la salida fue 2.1.233.
¿Qué significa que una skill 'ensombrezca' un comando local?
Que la skill sincronizada gana precedencia sobre tu comando local o sobre el prompt que expone un servidor MCP tuyo con nombre parecido. Invocas lo que siempre invocas y se resuelve otra cosa, sin aviso en pantalla.
¿Tengo que borrar mis skills sincronizadas desde claude.ai?
No es obligatorio. Con actualizar a 2.1.228 o superior las tres capacidades quedan cerradas. Sí conviene revisar la lista y quitar las que ya no uses: la superficie más segura es la que no existe.

Fuentes