Las skills son, para mí, la forma más rápida y efectiva de pedirle a un agente AI que realice un número predecible de pasos. Con la ventaja de que el proceso sigue siendo conversacional: puedes intervenir, corregir y redirigir mientras ocurre.
Parece complicado. No lo es. Una skill es un archivo markdown con instrucciones. Lo guardas en una carpeta y lo invocas con un slash command. Eso es todo.
El artículo que estás leyendo ahora mismo se ha generado con una skill. Literalmente. Un /claude-code-article que ejecuta investigación SEO, consulta la documentación oficial, lee ejemplos de estilo, genera el borrador en dos idiomas, lo sube a Notion y lo publica en producción. Es un flujo de varios pasos, repetible, con puntos de intervención humana. Y funciona.
Si llevas un tiempo usando Claude Code y sigues copiando y pegando los mismos prompts, o inflando tu CLAUDE.md con instrucciones que solo aplican a tareas concretas, las skills son tu siguiente paso.
Anatomía de una skill
Cada skill vive en su propio directorio con un archivo SKILL.md como punto de entrada:
mi-skill/
├── SKILL.md # Instrucciones principales (obligatorio)
├── template.md # Plantilla para que Claude rellene
├── examples/
│ └── sample.md # Ejemplo de output esperado
└── scripts/
└── validate.sh # Script que Claude puede ejecutar
El SKILL.md tiene dos partes: un frontmatter YAML que configura el comportamiento, y contenido markdown con las instrucciones que Claude sigue.
---
name: mi-skill
description: Qué hace esta skill y cuándo usarla
disable-model-invocation: true
---
Instrucciones que Claude ejecutará al invocar la skill...
Dónde guardar las skills
La ubicación determina su alcance:
| Ubicación | Ruta | Aplica a |
|---|---|---|
| Personal | ~/.claude/skills/<nombre>/SKILL.md |
Todos tus proyectos |
| Proyecto | .claude/skills/<nombre>/SKILL.md |
Solo este proyecto |
| Enterprise | Managed settings | Toda la organización |
| Plugin | <plugin>/skills/<nombre>/SKILL.md |
Donde el plugin esté activo |
Cuando hay skills con el mismo nombre en distintos niveles, gana la de mayor prioridad: enterprise > personal > proyecto.
Para la mayoría de casos, las skills personales (~/.claude/skills/) son las más prácticas. Las usas en cualquier proyecto sin configuración adicional.
Tu primera skill: paso a paso
Vamos a crear una skill que revise componentes frontend siguiendo criterios específicos. Es un caso de uso real: tienes un estándar de calidad y quieres que Claude lo aplique de forma consistente.
1. Crea el directorio
mkdir -p ~/.claude/skills/review-component
2. Escribe el SKILL.md
---
name: review-component
description: Revisa un componente frontend. Usa cuando se pida revisar, auditar o mejorar un componente Vue o React.
argument-hint: [ruta-al-componente]
---
Revisa el componente en $ARGUMENTS siguiendo estos criterios:
1. **Estructura**: ¿Separación clara de lógica, template y estilos?
2. **Props**: ¿Tipadas correctamente? ¿Valores por defecto donde aplique?
3. **Reactividad**: ¿Se usan computed/watchers de forma eficiente?
4. **Accesibilidad**: ¿Roles ARIA, labels, navegación por teclado?
5. **Rendimiento**: ¿Hay renders innecesarios o dependencias pesadas?
Presenta los hallazgos en una tabla con columna de severidad (alta/media/baja) y propón el fix para cada uno.
3. Pruébalo
Invócalo directamente:
/review-component src/components/SearchBar.vue
Claude leerá el componente y aplicará exactamente los 5 criterios que definiste. Siempre los mismos, en el mismo orden, con el mismo formato de output.
También puede activarse automáticamente. Si le pides "revisa este componente", Claude leerá la descripción de la skill y decidirá usarla si encaja. Si prefieres que solo se active cuando tú lo invoques, añade disable-model-invocation: true al frontmatter.
Frontmatter: todas las opciones
| Campo | Obligatorio | Qué hace |
|---|---|---|
name |
No | Nombre del slash command. Si se omite, usa el nombre del directorio. Solo minúsculas, números y guiones (máx. 64 caracteres) |
description |
Recomendado | Qué hace la skill y cuándo usarla. Claude usa esto para decidir si cargarla automáticamente |
argument-hint |
No | Pista que aparece en el autocompletado. Ej: [issue-number] |
disable-model-invocation |
No | true para que solo tú puedas invocarla. Impide que Claude la active por su cuenta |
user-invocable |
No | false para ocultarla del menú /. Útil para contexto de fondo que Claude usa pero no es un comando accionable |
allowed-tools |
No | Herramientas que Claude puede usar sin pedir permiso cuando la skill está activa |
model |
No | Modelo a usar cuando la skill está activa |
context |
No | fork para ejecutar en un subagente aislado |
agent |
No | Tipo de subagente cuando context: fork está activo. Opciones: Explore, Plan, general-purpose, o un agente custom |
hooks |
No | Hooks vinculados al ciclo de vida de la skill |
Quién puede invocar qué
La combinación de disable-model-invocation y user-invocable controla el acceso:
| Configuración | Tú invocas | Claude invoca | Cuándo usarlo |
|---|---|---|---|
| (por defecto) | Sí | Sí | Skills de uso general |
disable-model-invocation: true |
Sí | No | Acciones con side effects: deploy, commit, enviar mensajes |
user-invocable: false |
No | Sí | Contexto de fondo: convenciones, info de sistemas legacy |
Arguments: pasar datos a la skill
Cuando invocas /mi-skill algo, ese "algo" está disponible como $ARGUMENTS dentro del SKILL.md. También puedes acceder a argumentos por posición:
---
name: migrate-component
description: Migra un componente de un framework a otro
---
Migra el componente $0 de $1 a $2.
Preserva todo el comportamiento existente y los tests.
Al ejecutar /migrate-component SearchBar React Vue, $0 se reemplaza por SearchBar, $1 por React, y $2 por Vue.
Si la skill no incluye $ARGUMENTS en su contenido, Claude Code lo añade automáticamente al final como ARGUMENTS: <valor>.
Patrones avanzados
Inyectar contexto dinámico
La sintaxis !`comando` ejecuta comandos shell antes de enviar el contenido a Claude. El output del comando reemplaza el placeholder:
---
name: pr-summary
description: Resume los cambios de un pull request
context: fork
agent: Explore
allowed-tools: Bash(gh *)
---
## Contexto del pull request
- Diff del PR: !`gh pr diff`
- Comentarios: !`gh pr view --comments`
- Archivos modificados: !`gh pr diff --name-only`
## Tu tarea
Resume este pull request...
Esto es preprocesado. Los comandos se ejecutan antes de que Claude vea nada, y el contenido que recibe ya tiene los datos reales insertados.
Fork a subagente
Añade context: fork al frontmatter cuando quieras que la skill se ejecute en un contexto aislado. La skill se convierte en el prompt del subagente, sin acceso al historial de tu conversación.
---
name: deep-research
description: Investiga un tema a fondo en el codebase
context: fork
agent: Explore
---
Investiga $ARGUMENTS a fondo:
1. Encuentra archivos relevantes con Glob y Grep
2. Lee y analiza el código
3. Resume los hallazgos con referencias específicas a archivos
Cuando esta skill se ejecuta:
- Se crea un contexto nuevo y aislado
- El subagente recibe el contenido de la skill como su prompt
- El campo
agentdetermina el entorno de ejecución (modelo, herramientas, permisos) - Los resultados se resumen y vuelven a tu conversación principal
Esto es especialmente útil para tareas pesadas de investigación o procesamiento que llenarían tu ventana de contexto principal. El subagente trabaja en su propio espacio y te devuelve solo el resumen.
Archivos de soporte
Para skills complejas, no metas todo en el SKILL.md. Usa archivos adicionales:
content-generator/
├── SKILL.md # Flujo principal: pasos 1-9
├── templates/
│ └── tip-template.md
└── examples/
├── tip-en.md
└── tip-es.md
Referencia estos archivos desde tu SKILL.md para que Claude sepa qué contienen y cuándo cargarlos. Mantén el SKILL.md por debajo de 500 líneas y mueve el material de referencia detallado a archivos separados.
Skills vs hooks vs MCP vs subagentes
Claude Code tiene varios mecanismos de extensión. Cada uno resuelve un problema distinto:
| Mecanismo | Qué resuelve | Ejemplo |
|---|---|---|
| Skills | Flujos de trabajo repetibles con instrucciones específicas | /review-component, /deploy, /generate-tip |
| Hooks | Automatizar acciones antes/después de eventos de herramientas | Formatear código después de cada edición, validar antes de commit |
| MCP | Conectar con servicios externos | Notion, Playwright, bases de datos |
| Subagentes | Delegar tareas a agentes especializados con su propio contexto | Investigación de codebase, tareas paralelas |
Las skills pueden combinar todos los demás: una skill con context: fork usa subagentes, una skill con !`comando` puede invocar herramientas MCP, y una skill puede tener hooks vinculados a su ciclo de vida.
Consejos desde el uso diario
La descripción importa más de lo que crees. Claude usa la descripción del frontmatter para decidir si cargar automáticamente una skill. Si tu skill no se activa cuando esperas, revisa la descripción antes que nada.
Usa disable-model-invocation: true para todo lo que tenga side effects. Deploy, commits, enviar mensajes, publicar contenido. No quieres que Claude decida hacerlo por su cuenta porque "parece que es momento".
Las descripciones de skills consumen contexto. Claude carga las descripciones de todas las skills disponibles al inicio de cada sesión. Si tienes muchas, pueden exceder el budget de caracteres (2% de la ventana de contexto, con fallback de 16,000 caracteres). Usa /context para verificar si alguna skill está siendo excluida.
Empieza simple, itera. Tu primera skill puede ser 10 líneas. No necesitas frontmatter complejo, ni archivos de soporte, ni fork a subagentes. Empieza con las instrucciones que copiarías y pegarías manualmente, ponlas en un SKILL.md, y evoluciona desde ahí.
Conclusión
Las skills son el building block para flujos de trabajo repetibles con AI. No son complicadas. Son un archivo markdown con instrucciones, guardado en una carpeta, invocable con un slash command. Lo que las hace potentes es que permiten repetir con cierta predictabilidad un número determinado de pasos, pudiendo intervenir cuando sea necesario, siendo todo lo sencillo o complejo que tú quieras.
Si te encuentras haciendo lo mismo una y otra vez en Claude Code — revisar componentes, generar contenido, preparar deploys, crear PRs con un formato específico — eso es una skill esperando a ser escrita.
Documentación oficial: Extend Claude with skills