---
name: create-skill
description: Crea un nuevo skill en .claude/skills/ siguiendo la estructura oficial de Claude Code
argument-hint: [nombre]
disable-model-invocation: true
user-invocable: true
allowed-tools: Bash, Read, Write, Edit
---

# create-skill

Crea un nuevo skill en `.claude/skills/` con archivo `SKILL.md` obligatorio.

## Sintaxis

```bash
/create-skill [nombre]
/create-skill code-review
/create-skill deploy
```

## Precondiciones

- [ ] Carpeta `.claude/skills/` existe
- [ ] No existe skill con el mismo nombre
- [ ] Nombre cumple convenciones (minúsculas, guiones)

## Flujo

### 1. Validar nombre

- Solo minúsculas, números y guiones
- No nombres reservados (help, clear, exit)
- Máximo 64 caracteres

```bash
ls -d .claude/skills/*/ 2>/dev/null | xargs -n1 basename | grep -E "^${nombre}$"
```

Si existe, STOP.

### 2. Solicitar inputs

- `nombre`: minúsculas y guiones
- `descripcion`: qué hace y cuándo usarlo (1-2 frases)
- `tipo_invocacion`:
  - `ambos` (default): usuario y Claude pueden invocar
  - `solo_usuario`: solo `/nombre` (`disable-model-invocation: true`)
  - `solo_claude`: solo Claude (`user-invocable: false`)
- `argument_hint` (opcional): ej: `[archivo] [formato]`
- `allowed_tools` (opcional): herramientas sin confirmación
- `instrucciones`: contenido del skill

### 3. Crear carpeta

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

### 4. Determinar frontmatter

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

### 5. Generar SKILL.md

Usar template en `${CLAUDE_SKILL_DIR}/skill.md` como referencia:

```markdown
---
name: ${nombre}
description: ${descripcion}
argument-hint: ${argument_hint}
disable-model-invocation: true  # solo si tipo = solo_usuario
allowed-tools: ${allowed_tools}
---

# ${nombre}

${instrucciones}
```

### 6. Mostrar y confirmar

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

¿Te parece bien?
- Si correcto: commit y push automáticamente
- Si ajustes: edita manualmente antes
```

### 7. Ejecutar /git-push

Si confirma, crear rama `quick/create-skill-${nombre}` e integrar.

### 8. Verificar disponibilidad

```
Skill /${nombre} creado e integrado

Para usar:
  /${nombre} [argumentos]

Tipo: ${tipo_invocacion}
```

## Campos del frontmatter

| Campo | Descripción |
|-------|-------------|
| name | Nombre del skill |
| description | Qué hace y cuándo usarlo |
| argument-hint | Pista de argumentos |
| disable-model-invocation | true = solo usuario invoca |
| user-invocable | false = solo Claude invoca |
| allowed-tools | Tools sin pedir permiso |
| context | fork = ejecutar en subagente |
| agent | Tipo subagente: Explore, Plan |

## Variables dinámicas

| Variable | Descripción |
|----------|-------------|
| $ARGUMENTS | Todos los argumentos |
| $0, $1, $2 | Argumentos posicionales |
| ${CLAUDE_SKILL_DIR} | Ruta del skill |

## Convenciones

- Nombres descriptivos con guiones
- Descripciones claras para invocación automática
- Un skill por tarea

## Reglas

- Validar nombre antes de crear
- SKILL.md es obligatorio
- Confirmación antes de integrar
