Claude Code

Skills de Claude Code: cómo crearlas y cuándo usarlas

Autorangel cruz
Actualizado
Publicado
Lectura5 min de lectura
Skills de Claude Code: cómo crearlas y cuándo usarlas

Una skill de Claude Code es un conjunto de instrucciones (un archivo SKILL.md) que Claude carga solo cuando hace falta. A diferencia del CLAUDE.md, que se carga entero en cada sesión, de una skill solo está siempre en contexto su description (para que Claude sepa que existe); el cuerpo no cuesta contexto hasta que se usa. Es perfecta para checklists y procedimientos de varios pasos que ejecutas de vez en cuando.

Cuándo crear una skill

Crea una skill cuando te descubres pegando las mismas instrucciones una y otra vez, o cuando una sección de tu CLAUDE.md dejó de ser un "dato" y se convirtió en un procedimiento: revisar un PR, hacer un release, correr una migración con sus comprobaciones. Eso no debería vivir siempre en el contexto (lo gastaría en cada sesión sin usarse casi nunca): debería cargarse solo cuando lo invocas.

La regla mental: si es algo que Claude debe saber siempre, va en el CLAUDE.md. Si es algo que Claude debe hacer a veces, es una skill.

El formato: SKILL.md

Una skill es una carpeta con un archivo SKILL.md: frontmatter YAML (con la description que le dice a Claude cuándo usarla) más el cuerpo en markdown con las instrucciones. El nombre de la carpeta (o el name del frontmatter, si lo pones) se convierte en el comando que escribes.

---
description: Resume los cambios sin commitear y marca lo riesgoso. Úsala cuando el usuario pregunte qué cambió o pida un mensaje de commit.
---
 
## Cambios actuales
 
!`git diff HEAD`
 
## Instrucciones
 
Resume los cambios de arriba en dos o tres bullets y lista los riesgos que veas (falta de manejo de errores, valores hardcodeados, tests por actualizar).

La línea !`git diff HEAD` (con backticks) usa inyección dinámica de contexto: Claude Code corre el comando y reemplaza la línea por su salida antes de que Claude lea la skill, así las instrucciones llegan con el diff ya incrustado. Y con $ARGUMENTS capturas lo que el usuario escriba después del nombre de la skill.

Un ejemplo real: revisar un PR de Laravel

Revisar un PR es un buen caso para una skill, porque el procedimiento es siempre el mismo y quieres que se ejecute igual cada vez. Una skill revisar-pr para un proyecto Laravel:

---
description: Revisa el PR actual en un proyecto Laravel. Úsala antes de aprobar o mergear.
---
 
## Estado
 
!`git diff main...HEAD --stat`
 
## Instrucciones
 
1. Corre `./vendor/bin/pint --test` y reporta si el estilo falla.
2. Corre `php artisan test` y resume los tests rojos.
3. Revisa las migraciones nuevas: ¿son reversibles (`down()`)? ¿tocan tablas grandes sin cuidado?
4. Marca cualquier `env()` fuera de un archivo de config, credenciales hardcodeadas o queries en bucle (N+1).
5. Cierra con un veredicto: listo para mergear, o lista de cambios pendientes.

Ese procedimiento, con las comprobaciones propias de Laravel, no tiene por qué ocupar contexto en cada sesión. Vive en una skill y se activa cuando lo pides.

Dónde viven y cómo se invocan

Ubicación Ruta Alcance
Empresa .claude/skills/<nombre>/SKILL.md dentro del directorio de managed settings Todos los usuarios de las máquinas donde tu organización la despliegue
Personal ~/.claude/skills/<nombre>/SKILL.md Todos tus proyectos
Proyecto .claude/skills/<nombre>/SKILL.md Solo ese proyecto (se versiona con el repo)
Plugin <plugin>/skills/<nombre>/SKILL.md Donde el plugin esté activo, como /nombre-plugin:nombre-skill

Se invocan de dos formas: automática (Claude la carga cuando tu pedido encaja con la description, por eso esa línea importa tanto) o explícita escribiendo /nombre-de-la-skill. Si una skill tiene efectos que prefieres decidir tú, como un deploy o un commit, agrega disable-model-invocation: true al frontmatter: así Claude no la dispara por su cuenta y solo corre cuando la invocas. Dato útil: los comandos personalizados se fusionaron con las skills, así que un .claude/commands/deploy.md y una skill .claude/skills/deploy/SKILL.md crean ambos el comando /deploy y funcionan igual; tus archivos de .claude/commands/ siguen sirviendo.

No hace falta escribir todas las tuyas: con npx skills, el gestor de Vercel Labs, instalas las skills de cualquier repo de GitHub en la ubicación personal o de proyecto con un solo comando.

Skill, CLAUDE.md, hook o subagente

Cuatro herramientas parecidas que conviene no confundir:

  • CLAUDE.md: datos y reglas que quieres en cada sesión.
  • Skill: un procedimiento que se carga bajo demanda.
  • Hook: un comando determinista que se dispara en un evento fijo (siempre, sin que el modelo decida).
  • Subagente: una tarea que corre en un contexto aislado.

Mover procedimientos del CLAUDE.md a skills es, además, una de las mejores formas de reducir tokens: mantienes el contexto base pequeño y cargas el detalle solo cuando se usa.

Si prefieres partir de una skill escrita antes que de una hoja en blanco, tengo seis publicadas para el trabajo que rodea al código: responder a los revisores de un PR, resolver una pila de PRs, documentar decisiones, pasar PDFs a Markdown, detectar archivos de contexto que dejaron de ser ciertos y evitar las trampas de Alpine.js.

Preguntas frecuentes

¿Qué es una skill en Claude Code?

Un archivo SKILL.md con instrucciones que Claude carga solo cuando son relevantes o cuando la invocas con /nombre. Sirve para empaquetar procedimientos repetibles.

¿En qué se diferencia del CLAUDE.md?

El CLAUDE.md se carga completo en cada sesión (gasta contexto siempre); de la skill solo está siempre cargada la description, y el cuerpo entra bajo demanda. Regla: dato siempre necesario, CLAUDE.md; procedimiento ocasional, skill.

¿Dónde se guardan las skills?

En ~/.claude/skills/<nombre>/SKILL.md (personales) o .claude/skills/<nombre>/SKILL.md (del proyecto), además de las que traen los plugins, que son la forma de repartir un paquete de skills al resto del equipo.

¿Cómo invoco una skill?

Automáticamente, cuando tu pedido coincide con su description, o a mano escribiendo /nombre-de-la-skill.

¿Puedo pasarle datos o argumentos a una skill?

Sí. Con !`comando` inyectas la salida de un comando (por ejemplo un git diff) y con $ARGUMENTS capturas el texto que escribas después del nombre de la skill.

Fuentes

¿Tienes un proyecto en mente?

Trabajo con Laravel, WordPress, SEO técnico y servidores MCP. El primer paso es una llamada de descubrimiento, sin costo ni compromiso, donde me cuentas qué necesitas y te digo con honestidad si puedo ayudarte.

Hablemos