Skip to content

Crear Habilidades Personalizadas

Lo Que Aprenderás

  • Crear un archivo de habilidad SKILL.md completo desde cero
  • Escribir YAML frontmatter que cumpla con los estándares de Anthropic
  • Diseñar una estructura de directorios de habilidades razonable (references/, scripts/, assets/)
  • Usar enlaces simbólicos para el desarrollo e iteración local
  • Instalar y verificar habilidades personalizadas mediante el comando openskills

Tu Situación Actual

Quieres que el agente de IA te ayude a resolver problemas específicos, pero no hay una solución adecuada en la biblioteca de habilidades existente. Has intentado describir repetidamente los requisitos en la conversación, pero la IA siempre olvida o no ejecuta completamente. Necesitas una forma de encapsular conocimiento profesional para que el agente de IA pueda reutilizarlo de manera estable y confiable.

Cuándo Usar Esta Técnica

  • Encapsular flujos de trabajo: Escribir pasos operativos repetitivos como habilidades para que la IA los ejecute de una vez
  • Depositar conocimiento del equipo: Empaquetar especificaciones internas del equipo, documentación de API, scripts como habilidades para compartir con todos los miembros
  • Integración de herramientas: Crear habilidades especializadas para herramientas específicas (como procesamiento de PDF, limpieza de datos, flujos de despliegue)
  • Desarrollo local: Modificar y probar habilidades en tiempo real durante el desarrollo sin necesidad de reinstalar repetidamente

🎒 Preparación Antes de Empezar

Verificación Prerrequisitos

Antes de comenzar, asegúrate de:

  • ✅ Haber instalado OpenSkills
  • ✅ Haber instalado y sincronizado al menos una habilidad (entender el flujo básico)
  • ✅ Estar familiarizado con la sintaxis básica de Markdown

Conceptos Clave

¿Qué es SKILL.md?

SKILL.md es el formato estándar del sistema de habilidades de Anthropic. Utiliza YAML frontmatter para describir los metadatos de la habilidad y el cuerpo Markdown para proporcionar instrucciones de ejecución. Tiene tres ventajas principales:

  1. Formato unificado: Todos los agentes (Claude Code, Cursor, Windsurf, etc.) utilizan el mismo descriptor de habilidades
  2. Carga progresiva: Solo carga el contenido completo cuando es necesario, manteniendo el contexto de IA conciso
  3. Recursos empaquetables: Soporta tres tipos de recursos adicionales: references/, scripts/, assets/

Estructura Mínima vs Completa

Estructura mínima (adecuada para habilidades simples):

my-skill/
└── SKILL.md          # Solo un archivo

Estructura completa (adecuada para habilidades complejas):

my-skill/
├── SKILL.md          # Instrucciones principales (< 5000 palabras)
├── references/       # Documentación detallada (carga bajo demanda)
│   └── api-docs.md
├── scripts/          # Scripts ejecutables
│   └── helper.py
└── assets/           # Plantillas y archivos de salida
    └── template.json

¿Cuándo usar la estructura completa?

  • references/: Cuando la documentación de API, esquema de base de datos, guías detalladas exceden 5000 palabras
  • scripts/: Cuando se necesita ejecutar tareas determinísticas y repetibles (como transformación de datos, formateo)
  • assets/: Cuando se necesitan plantillas de salida, imágenes, código de plantilla

Sígueme

Paso 1: Crear el Directorio de la Habilidad

Por qué: Crear un directorio independiente para organizar los archivos de la habilidad

bash
mkdir my-skill
cd my-skill

Lo que deberías ver: El directorio actual está vacío


Paso 2: Escribir la Estructura Principal de SKILL.md

Por qué: SKILL.md debe comenzar con YAML frontmatter, definiendo los metadatos de la habilidad

Crea el archivo SKILL.md:

markdown
---
name: my-skill                    # Requerido: identificador en formato kebab
description: When to use this skill.  # Requerido: 1-2 oraciones, tercera persona
---

# Título de la Habilidad

Descripción detallada de la habilidad.

Puntos de verificación:

  • ✅ La primera línea es ---
  • ✅ Contiene el campo name (formato kebab, como pdf-editor, api-client)
  • ✅ Contiene el campo description (1-2 oraciones, usa tercera persona)
  • ✅ Después de cerrar YAML usa --- nuevamente

Errores Comunes

Ejemplo de ErrorCorrección
name: My Skill (espacio)Cambiar a name: my-skill (guion)
description: You should use this for... (segunda persona)Cambiar a description: Use this skill for... (tercera persona)
description demasiado largo (más de 100 palabras)Resumir en 1-2 oraciones

Paso 3: Escribir el Contenido de Instrucciones

Por qué: Las instrucciones le dicen al agente de IA cómo ejecutar la tarea, deben usar forma imperativa/infinitiva

Continúa editando SKILL.md:

markdown
---
name: my-skill
description: Use this skill to demonstrate how to write proper instructions.
---

# My Skill

## Cuándo Usar

Cargar esta habilidad cuando:
- Demostrar patrones de escritura de instrucciones
- Entender la forma imperativa/infinitiva
- Aprender el formato SKILL.md

## Instrucciones

Para ejecutar esta habilidad:

1. Leer la entrada del usuario
2. Procesar los datos
3. Devolver el resultado

Para información detallada, consulta references/guide.md

Convenciones de Escritura:

✅ Forma Correcta (imperativa/infinitiva)❌ Forma Incorrecta (segunda persona)
"Para lograr X, ejecuta Y""Deberías hacer X"
"Cargar esta habilidad cuando Z""Si necesitas Y"
"Consulta references/guide.md""Cuando quieras Z"

Mantra

Tres Principios para Escribir Instrucciones:

  1. Comenzar con verbo: "Crear" → "Usar" → "Devolver"
  2. Omitir "You": No decir "Deberías"
  3. Rutas claras: Referenciar recursos con prefijo references/

Paso 4: Agregar Recursos Agrupados (Opcional)

Por qué: Cuando la habilidad requiere mucha documentación detallada o scripts ejecutables, usa recursos agrupados para mantener SKILL.md limpio

4.1 Agregar references/

bash
mkdir references

Crea references/api-docs.md:

markdown
# Documentación de API

## Descripción General

Esta sección proporciona información detallada de la API...

## Endpoints

### GET /api/data

Devuelve datos procesados.

Respuesta:
```json
{
  "status": "success",
  "data": [...]
}

En `SKILL.md`, referencia:

```markdown
## Instrucciones

Para obtener datos:

1. Llamar al endpoint de API
2. Consultar `references/api-docs.md` para el formato detallado de respuesta
3. Procesar el resultado

4.2 Agregar scripts/

bash
mkdir scripts

Crea scripts/process.py:

python
#!/usr/bin/env python3
import sys

def main():
    # Lógica de procesamiento
    print("Procesamiento completado")

if __name__ == "__main__":
    main()

En SKILL.md, referencia:

markdown
## Instrucciones

Para procesar datos:

1. Ejecutar el script:
   ```bash
   python scripts/process.py
  1. Revisar la salida

::: info Ventajas de scripts/

- **No cargar en contexto**: Ahorra tokens, adecuado para archivos grandes
- **Ejecutable independientemente**: El agente de IA puede llamar directamente sin cargar contenido primero
- **Adecuado para tareas determinísticas**: Transformación de datos, formateo, generación, etc.

:::

#### 4.3 Agregar assets/

```bash
mkdir assets

Agrega archivo de plantilla assets/template.json:

json
{
  "title": "{{ title }}",
  "content": "{{ content }}"
}

En SKILL.md, referencia:

markdown
## Instrucciones

Para generar salida:

1. Cargar la plantilla: `assets/template.json`
2. Reemplazar marcadores de posición con datos reales
3. Escribir en archivo de salida

Paso 5: Verificar el Formato de SKILL.md

Por qué: Verificar el formato antes de la instalación para evitar errores durante la instalación

bash
npx openskills install ./my-skill

Lo que deberías ver:

✔ Found skill: my-skill
  Description: Use this skill to demonstrate how to write proper instructions.
  Size: 1.2 KB

? Select skills to install: (Use arrow keys)
❯ ☑ my-skill

Selecciona la habilidad y presiona Enter, deberías ver:

✔ Installing my-skill...
✔ Skill installed successfully to .claude/skills/my-skill

Next steps:
  Run: npx openskills sync
  Then: Ask your AI agent to use the skill

Lista de Verificación

Antes de la instalación, verifica los siguientes elementos:

  • [ ] SKILL.md comienza con ---
  • [ ] Contiene campos name y description
  • [ ] name usa formato kebab (my-skill no my_skill)
  • [ ] description es un resumen de 1-2 oraciones
  • [ ] Las instrucciones usan forma imperativa/infinitiva
  • [ ] Todas las referencias a references/, scripts/, assets/ tienen rutas correctas

Paso 6: Sincronizar a AGENTS.md

Por qué: Hacer que el agente de IA sepa que esta habilidad está disponible

bash
npx openskills sync

Lo que deberías ver:

✔ Found 1 skill:
  ☑ my-skill

✔ Syncing to AGENTS.md...
✔ Updated AGENTS.md successfully

Verifica el AGENTS.md generado:

markdown
<!-- SKILLS_SYSTEM_START -->
...
<available_skills>
  <skill name="my-skill">Use this skill to demonstrate how to write proper instructions.</skill>
</available_skills>
...
<!-- SKILLS_SYSTEM_END -->

Paso 7: Probar la Carga de la Habilidad

Por qué: Verificar que la habilidad puede cargarse correctamente en el contexto de IA

bash
npx openskills read my-skill

Lo que deberías ver:

Loading skill: my-skill
Base directory: /path/to/project/.claude/skills/my-skill

---
name: my-skill
description: Use this skill to demonstrate how to write proper instructions.
---

# My Skill
... (contenido completo de SKILL.md)

Puntos de Verificación ✅

Después de completar los pasos anteriores, deberías:

  • ✅ Haber creado un directorio de habilidad que contenga SKILL.md
  • ✅ SKILL.md contenga el YAML frontmatter correcto y contenido Markdown
  • ✅ La habilidad se haya instalado exitosamente en .claude/skills/
  • ✅ La habilidad se haya sincronizado a AGENTS.md
  • ✅ Usar openskills read pueda cargar el contenido de la habilidad

Advertencias de Errores Comunes

Problema 1: Error de Instalación "Invalid SKILL.md (missing YAML frontmatter)"

Causa: SKILL.md no comienza con ---

Solución: Verifica si la primera línea del archivo es ---, no # My Skill u otro contenido


Problema 2: El Agente de IA No Puede Reconocer la Habilidad

Causa: No se ejecutó openskills sync o AGENTS.md no se actualizó

Solución: Ejecuta npx openskills sync y verifica si AGENTS.md contiene la entrada de la habilidad


Problema 3: Error de Resolución de Rutas de Recursos

Causa: Se usaron rutas absolutas o rutas relativas incorrectas en SKILL.md

Solución:

  • ✅ Correcto: references/api-docs.md (ruta relativa)
  • ❌ Incorrecto: /path/to/skill/references/api-docs.md (ruta absoluta)
  • ❌ Incorrecto: ../other-skill/references/api-docs.md (referencia cruzada)

Problema 4: SKILL.md Demasiado Largo Causa Exceso de Tokens

Causa: SKILL.md excede 5000 palabras o contiene mucha documentación detallada

Solución: Mover el contenido detallado al directorio references/, referenciar en SKILL.md

Resumen de la Lección

Los pasos principales para crear habilidades personalizadas:

  1. Crear estructura de directorios: Estructura mínima (solo SKILL.md) o estructura completa (contiene references/, scripts/, assets/)
  2. Escribir YAML frontmatter: Campos requeridos name (formato kebab) y description (1-2 oraciones)
  3. Escribir contenido de instrucciones: Usar forma imperativa/infinitiva, evitar segunda persona
  4. Agregar recursos (opcional): references/, scripts/, assets/
  5. Verificar formato: Usar openskills install ./my-skill para verificar
  6. Sincronizar a AGENTS.md: Ejecutar openskills sync para que el agente de IA lo sepa
  7. Probar carga: Usar openskills read my-skill para verificar la carga

Avance de la Próxima Lección

En la próxima lección aprenderemos Estructura Detallada de Habilidades.

Aprenderás:

  • Descripción completa de campos de SKILL.md
  • Mejores prácticas para references/, scripts/, assets/
  • Cómo optimizar la legibilidad y mantenibilidad de las habilidades

Apéndice: Referencia de Código Fuente

Haz clic para ver la ubicación del código fuente

Última actualización: 2026-01-24

FuncionalidadRuta del ArchivoLínea
Validación de YAML frontmattersrc/utils/yaml.ts12-14
Extracción de campos YAMLsrc/utils/yaml.ts4-7
Validación de formato durante instalaciónsrc/commands/install.ts242, 291, 340
Extracción de nombre de habilidadsrc/commands/install.ts344-345

Archivos de ejemplo de habilidades:

Funciones clave:

  • hasValidFrontmatter(content: string): boolean - Verifica si SKILL.md comienza con ---
  • extractYamlField(content: string, field: string): string - Extrae valores de campos YAML (coincidencia no greedy)