Files
repo_Claude/.claude/commands/project/create-skill.md
T
egutierrez ecad5f6a27 feat: agregar comando create-skill y template de skills
Nuevo comando /project:create-skill que crea skills en .claude/skills/ siguiendo
la estructura oficial de Claude Code. Incluye:

- Flujo completo: validación, creación de carpeta/SKILL.md, confirmación, git push
- Soporte para 3 tipos de invocación: ambos, solo_usuario, solo_claude
- Referencia completa de campos del frontmatter (name, description, allowed-tools, etc)
- Referencia de variables dinámicas ($ARGUMENTS, $0, ${CLAUDE_SKILL_DIR}, etc)
- Template base en .claude/templates/skill.md
- Troubleshooting incluido

Los skills son la forma moderna de extender Claude Code, evolucionando desde
el sistema de commands.
2026-03-21 20:11:14 +01:00

7.1 KiB

version, updated, tags
version updated tags
1.0.0 2026-03-21
skills
meta
automation
workflow

Command: create-skill

Crea un nuevo skill en .claude/skills/ siguiendo la estructura oficial de Claude Code. Cada skill es una carpeta con un archivo SKILL.md obligatorio.

Flujo completo:

  1. Solicita inputs del skill
  2. Crea la carpeta y archivo SKILL.md
  3. Muestra el contenido al usuario
  4. Pregunta si está bien
  5. Si el usuario confirma → ejecuta /git:push automáticamente

Para el usuario

Cuándo usar este comando

  • Cuando quieras crear un nuevo skill personalizado
  • Para automatizar tareas repetitivas con instrucciones específicas
  • Para crear comandos que Claude pueda invocar automáticamente

Sintaxis

/project:create-skill [nombre]

Ejemplos

Ejemplo 1:

/project:create-skill code-review

Crea un skill para revisión de código en .claude/skills/code-review/SKILL.md

Ejemplo 2:

/project:create-skill deploy

Crea un skill de despliegue con disable-model-invocation: true (solo usuario puede invocarlo)

Para Claude

Precondiciones

Verificar antes de ejecutar:

  • Carpeta .claude/skills/ existe
  • No existe ya un skill con el mismo nombre
  • El nombre cumple convenciones (minúsculas, guiones)

Inputs

Se necesitan los siguientes datos. Si no se proporcionan, preguntar al usuario:

  • nombre: nombre del skill (minúsculas y guiones, sin espacios)
  • descripcion: qué hace el skill y cuándo usarlo (1-2 frases)
  • tipo_invocacion: quién puede invocarlo
    • ambos (default): usuario y Claude pueden invocarlo
    • solo_usuario: solo el usuario puede invocarlo (disable-model-invocation: true)
    • solo_claude: solo Claude puede invocarlo (user-invocable: false)
  • argument_hint (opcional): pista de argumentos, ej: [archivo] [formato]
  • allowed_tools (opcional): herramientas permitidas sin confirmación
  • instrucciones: contenido markdown con las instrucciones del skill

Flujo obligatorio

1. Validar nombre del skill

  • Solo minúsculas, números y guiones (no underscores ni espacios)
  • No usar nombres reservados (help, clear, exit)
  • Máximo 64 caracteres
ls -d .claude/skills/*/ 2>/dev/null | xargs -n1 basename | grep -E "^${nombre}$"

Si existe, STOP e informar al usuario.

2. Crear carpeta del skill

mkdir -p .claude/skills/${nombre}

3. Determinar campos del frontmatter

Según el tipo_invocacion:

Tipo disable-model-invocation user-invocable
ambos (omitir) (omitir)
solo_usuario true (omitir)
solo_claude (omitir) false

4. Generar contenido SKILL.md

Usar el template en .claude/templates/skill.md si existe, o generar:

---
name: ${nombre}
description: ${descripcion}
argument-hint: ${argument_hint}  # solo si se proporciona
disable-model-invocation: true   # solo si tipo = solo_usuario
user-invocable: false            # solo si tipo = solo_claude
allowed-tools: ${allowed_tools}  # solo si se proporciona
---

# ${nombre}

${instrucciones}

Reglas de generación:

  • Omitir campos opcionales si no se proporcionan
  • El campo name puede omitirse si coincide con el nombre de la carpeta
  • La descripción debe ser clara para que Claude sepa cuándo invocarlo

5. Escribir archivo SKILL.md

cat > .claude/skills/${nombre}/SKILL.md << 'EOF'
${contenido_generado}
EOF

6. Mostrar el skill creado y confirmar

{{include: ask-user-confirm}}

Mostrar al usuario:

Skill creado: ${nombre}

Ubicación: .claude/skills/${nombre}/SKILL.md

Contenido:
---
${contenido_completo}
---

¿Te parece bien el skill?
- Si es correcto: se hará commit y push automáticamente
- Si necesitas ajustes: edítalo manualmente antes

Esperar respuesta:

  • Si → continuar al paso 7
  • Si NO → STOP y decir: "Edita el archivo y cuando estés listo ejecuta /git:push"

7. Ejecutar git-push automáticamente

Una vez confirmado, ejecutar /git:push para:

  1. Crear rama quick/project:create-skill-${nombre}
  2. Commitear .claude/skills/${nombre}/SKILL.md
  3. Mergear a master con --no-ff
  4. Push a remoto
  5. Limpiar rama local

8. Verificar disponibilidad

Informar al usuario:

✓ Skill /${nombre} creado e integrado a master

Para usar:
  /${nombre} [argumentos]

Tipo de invocación: ${tipo_invocacion}
- ambos: tú y Claude pueden invocarlo
- solo_usuario: solo tú con /${nombre}
- solo_claude: Claude lo invoca automáticamente cuando es relevante

Convenciones

  • Nombres descriptivos: usar verbos o sustantivos claros (code-review, deploy, format-code)
  • Guiones para separar: code-review, no code_review ni codeReview
  • Descripciones claras: Claude usa la descripción para decidir cuándo invocar el skill
  • Un skill por tarea: mantener skills enfocados en una sola responsabilidad

Campos del frontmatter (referencia)

Campo Tipo Descripción
name string Nombre del skill (opcional si = carpeta)
description string Qué hace y cuándo usarlo
argument-hint string Pista: [archivo], [issue-number]
disable-model-invocation bool true = solo usuario invoca
user-invocable bool false = solo Claude invoca
allowed-tools string Tools sin pedir permiso: Read, Grep
context string fork = ejecutar en subagente
agent string Tipo subagente: Explore, Plan
model string Modelo específico a usar
effort string low, medium, high, max

Variables dinámicas (referencia)

Dentro del contenido del skill puedes usar:

Variable Descripción
$ARGUMENTS Todos los argumentos pasados
$0, $1, $2... Argumentos posicionales
${CLAUDE_SKILL_DIR} Ruta absoluta del skill
${CLAUDE_SESSION_ID} ID de la sesión actual
!`comando` Ejecutar comando ANTES de enviar a Claude

Troubleshooting

Error: "Skill ya existe"

Causa: Ya hay una carpeta con ese nombre en .claude/skills/

Solución:

ls .claude/skills/
# Elegir otro nombre o eliminar el existente

Error: "Nombre inválido"

Causa: El nombre contiene caracteres no permitidos

Solución:

  • Solo usar: letras minúsculas, números, guiones
  • No usar: espacios, underscores, mayúsculas, caracteres especiales

El skill no se invoca automáticamente

Causa: La descripción no es clara o disable-model-invocation: true

Solución:

  1. Revisar que la descripción incluya palabras clave relevantes
  2. Verificar que no tenga disable-model-invocation: true
  3. Si quieres invocación manual, usar /${nombre}

Reglas críticas

  • Validar nombre antes de crear: evitar sobrescribir skills existentes
  • SKILL.md es obligatorio: sin él, el skill no funciona
  • Descripción clara: es clave para invocación automática de Claude
  • Confirmación obligatoria: siempre mostrar el skill y esperar aprobación
  • Flujo automático: una vez aprobado, ejecutar /git:push