josemoreupeso.es
07-module-analyze.md — TLOTP
# 🔍 Módulo: Analizar Skills Instaladas y Sugerir Mejoras

## Misión

Inspeccionar las skills instaladas del usuario, puntuar su estado actual, comparar con
la documentación oficial y guiar la aplicación de mejoras una a una. Con el Palantír
activo, el análisis se extiende a detectar colisiones y redundancias entre configuraciones
y skills.

---

## Paso 0 — Documentación oficial (on-the-fly)

**IMPORTANTE**: Comprobar primero si la documentación ya está cargada en el
contexto de esta sesión (por haber ejecutado previamente otro módulo que haya hecho WebFetch).

**Si ya está en contexto**: usar directamente esa información sin re-fetchear.

**Si no está en contexto**, hacer WebFetch:

> **WebFetch 1**: `https://code.claude.com/docs/en/skills`
> **Extraer**: Estructura oficial de SKILL.md, campos válidos de frontmatter, rutas de instalación,
> control de invocación, patrones recomendados, campos obsoletos.

> **WebFetch 2**: `https://github.com/vercel-labs/skills`
> **Extraer**: Versiones disponibles de skills en el catálogo, comandos de actualización,
> estructura esperada, campos que el CLI gestiona.

**Fallback si WebFetch falla**: Continuar con conocimiento interno marcando sugerencias con ⚠️ sin doc oficial.

---

## Paso 0.5 — ¿Traes tu Palantír?

Preguntar con `AskUserQuestion` antes de iniciar el análisis:

```json
{
  "questions": [{
    "header": "La Piedra Vidente",
    "question": "¿Traes tu Palantír contigo, viajero? Con él, la Forja puede ver mucho más lejos y detectar conflictos entre tus configuraciones y tus skills.",
    "multiSelect": false,
    "options": [
      {
        "label": "🔮 Sí — análisis completo con Palantír",
        "description": ""
      },
      {
        "label": "⚒️ No — análisis estándar de skills",
        "description": ""
      }
    ]
  }]
}
```

- **Con Palantír**: ejecutar Pasos 1–6 + Paso 7 (análisis cruzado)
- **Sin Palantír**: ejecutar solo Pasos 1–6

---

## Paso 1 — Descubrir skills instaladas y detectar updates

### 1a — Buscar en todas las rutas oficiales

```bash
# Buscar en todas las rutas oficiales en una sola llamada
{
  ls ~/.claude/skills/*/SKILL.md 2>/dev/null
  ls ~/.claude/skills/*.md 2>/dev/null | grep -v "SKILL.md"
  ls ./.claude/skills/*/SKILL.md 2>/dev/null
  ls ./.claude/skills/*.md 2>/dev/null | grep -v "SKILL.md"
  ls ~/.claude/commands/*.md 2>/dev/null
  ls ./.claude/commands/*.md 2>/dev/null
} 2>/dev/null
```

Para cada skill encontrada, leer su contenido para extraer el frontmatter.

### 1b — Detectar updates disponibles

**Reutilizar si ya está en el contexto del menú** (el menú ejecuta `npx skills check` antes de mostrar opciones).

**Si no está en contexto**, ejecutar:

```bash
source ~/.nvm/nvm.sh 2>/dev/null && nvm use 20 --silent 2>/dev/null
npx skills check 2>&1
```

Guardar la lista de skills con update disponible. Este dato se usará en el scoring del Paso 2.

---

## Paso 2 — Analizar y puntuar cada skill

Para cada skill, evaluar según los siguientes criterios. Cada skill parte de **10 puntos** y se penaliza:

### Criterios de scoring por skill

| Criterio | Penalización | Severidad |
|----------|-------------|-----------|
| Sin `description` en frontmatter | -4 pts | ❌ Crítico |
| `description` demasiado corta (<15 chars) | -2 pts | ⚠️ Mejorable |
| Formato legacy (archivo plano, no directorio) | -2 pts | ⚠️ Mejorable |
| Campo obsoleto en frontmatter (`paths:` u otros no oficiales) | -3 pts | ❌ Crítico |
| Update disponible en el catálogo | -2 pts | ⚠️ Mejorable |
| Configuración de invocación inconsistente con el tipo de skill | -1 pt | ℹ️ Revisable |

### Niveles de calidad por skill

| Puntos | Nivel | Descripción |
|--------|-------|-------------|
| 9–10 | ⚒️ Obra maestra | Skill perfectamente forjada |
| 7–8 | ⚔️ Bien forjada | Solo mejoras menores |
| 5–6 | 🧙 En proceso | Necesita trabajo |
| < 5 | 🐛 En el horno | Requiere refuerzo urgente |

### Score global

```
Score global = media de puntuaciones individuales (redondeado a 1 decimal)
```

---

## Paso 3 — Generar informe con scoring

```
══════════════════════════════════════════════════════════════
⚒️  CELEBRIMBOR — Análisis de Skills
══════════════════════════════════════════════════════════════

🌍 PERSONAL (~/.claude/skills/)
──────────────────────────────────────────────────────────────
  ⚒️ 10/10  playwright-pom/SKILL.md    — estructura ✅ · description ✅
  ⚔️  8/10  php-pro/SKILL.md           — update disponible ⚠️
  ⚔️  8/10  git-workflow.md            — archivo plano (legacy) ⚠️
  ❌  6/10  typescript-utils.md        — paths: obsoleto ❌ · archivo plano ⚠️

══════════════════════════════════════════════════════════════
📊 Score global: 8.0/10 ⚔️ — 4 skills · 1 ⚒️ · 2 ⚔️ · 1 ❌
══════════════════════════════════════════════════════════════
```

---

## Paso 4 — Lista de mejoras priorizadas

Construir la lista completa de mejoras, ordenadas por severidad:
1. ❌ Críticos primero
2. ⚠️ Mejorables después
3. ℹ️ Informativos al final

Para cada mejora, preparar internamente:
- Skill afectada (nombre + ruta)
- Problema (descripción clara)
- Solución propuesta (qué se aplicaría exactamente, con comandos si aplica)
- Resultado esperado

Mostrar el total: `X mejoras encontradas (Y ❌ críticas · Z ⚠️ mejorables)`

---

## Paso 5 — Opciones al usuario

Mostrar con `AskUserQuestion` (incluir opción de actualizar dinámicamente si hay updates):

```json
{
  "questions": [{
    "header": "Tras el análisis",
    "question": "¿Qué deseas hacer con los resultados?",
    "multiSelect": false,
    "options": [
      {
        "label": "🔧 Revisar y aplicar mejoras una a una",
        "description": ""
      },
      {
        "label": "🔄 Actualizar las X skills desactualizadas",
        "description": "Solo si hay updates detectados — cargar módulo 11-module-update.md"
      },
      {
        "label": "🔙 Volver al menú principal",
        "description": ""
      }
    ]
  }]
}
```

**Nota**: La opción de actualizar solo aparece si `npx skills check` detectó updates en el Paso 1b. Si no hay updates, el menú tiene 2 opciones (revisar mejoras + volver).

---

## Paso 6 — Revisor uno a uno

Iterar por cada mejora de la lista del Paso 4, **en orden de severidad** (❌ primero, ⚠️ después, ℹ️ al final).

**Mostrar para cada mejora**:

```
⚒️ MEJORA [X/N] — [❌/⚠️/ℹ️] [SEVERIDAD]
══════════════════════════════════════════════════════════════

📍 Skill afectada: [nombre / ruta completa]

❌ Problema:
   [descripción clara del problema detectado]

✅ Solución propuesta:
   [qué se aplicaría exactamente — incluir comandos o fragmentos de código si aplica]

🎯 Resultado esperado:
   [qué mejorará o se corregirá tras aplicar]

══════════════════════════════════════════════════════════════
```

**AskUserQuestion por cada mejora**:

```json
{
  "questions": [{
    "header": "Mejora [X/N]",
    "question": "¿Qué hacemos con esta pieza de la Forja?",
    "multiSelect": false,
    "options": [
      {
        "label": "✅ Aplicar",
        "description": "Celebrimbor aplicará esta mejora ahora"
      },
      {
        "label": "✏️ Modificar propuesta",
        "description": "Ajustar la solución antes de aplicar"
      },
      {
        "label": "⏭️ Saltar",
        "description": "Dejar esta mejora sin cambios y pasar a la siguiente"
      },
      {
        "label": "🚫 Cancelar todo",
        "description": "Abortar el revisor y ver resumen parcial"
      }
    ]
  }]
}
```

**Comportamiento por opción**:

- **✅ Aplicar**: Ejecutar el cambio usando las herramientas disponibles (Edit/Write/Bash). Confirmar éxito con una frase de lore de Eregion, variada según la mejora:
  - *"⚒️ La pieza ha sido reforjada. Los Gwaith-i-Mírdain aprueban."*
  - *"⚒️ Bien. Así debe lucir una skill en la Forja de Eregion."*
  - *"⚒️ El metal estaba frío — ahora arde como debe."*
  - *"⚒️ Eregion recuerda cada arma que mejora entre sus manos."*
  - *(Variar la frase — breve, con el tono inconfundible de la Forja)*
  - Luego pasar a la siguiente mejora.
- **✏️ Modificar propuesta**: Preguntar qué cambiar. Mostrar propuesta actualizada y confirmar antes de aplicar.
- **⏭️ Saltar**: Mostrar `⚒️ "Esta pieza puede esperar su momento..."` y pasar a la siguiente.
- **🚫 Cancelar todo**: Detener el revisor y saltar al resumen final (Paso 6b).

**IMPORTANTE**: Antes de aplicar cualquier cambio, indicar siempre la ruta exacta del archivo que se modificará.

### Paso 6b — Resumen final del revisor

```
📋 RESUMEN DE LA FORJA
══════════════════════════════════════════════════════════════
  ✅ Aplicadas:   [X]
  ✏️  Modificadas: [X]
  ⏭️  Saltadas:    [X]
══════════════════════════════════════════════════════════════
⚒️  "Eregion recuerda cada arma que pasa por sus manos."
```

AskUserQuestion con opciones de continuación:
- `🔙 Volver al menú de Celebrimbor`
- `🔙 Volver a La Comunidad del Código`

---

## Paso 7 — Análisis cruzado con Palantír (solo si usuario aceptó en Paso 0.5)

### Paso 7.1 — Documentación de Palantír (on-the-fly)

**IMPORTANTE**: Comprobar si la documentación de memoria/configuración ya está en contexto.

**Si ya está en contexto**: usar directamente sin re-fetchear.

**Si no está en contexto**, hacer WebFetch:

> **WebFetch**: `https://code.claude.com/docs/en/memory`
> **Extraer**: Jerarquía de memoria (7 niveles), tipos de archivos de configuración,
> precedencia, cómo interactúan las rules y las skills.

### Paso 7.2 — Leer configuraciones del usuario

```bash
# Configuración global
cat ~/.claude/CLAUDE.md 2>/dev/null
ls ~/.claude/rules/*.md 2>/dev/null
ls ~/.claude/memory/*.md 2>/dev/null

# Configuración del proyecto actual
cat ./.claude/CLAUDE.md 2>/dev/null || cat ./CLAUDE.md 2>/dev/null
ls ./.claude/rules/*.md 2>/dev/null
```

### Paso 7.3 — Análisis cruzado

Con las configuraciones y skills cargadas, detectar:

#### 🔴 Colisiones — instrucciones que se contradicen
Instrucciones en CLAUDE.md o rules que contradicen o solapan instrucciones de una skill activa.

```
🔴 COLISIÓN detectada:
  Config:  CLAUDE.md línea 12 → "Usa siempre TypeScript strict"
  Skill:   typescript-utils/SKILL.md → "Permite JS cuando el proyecto no tiene tsconfig"
  Impacto: Comportamiento inconsistente según qué instrucción prevalezca
  Jerarquía: La skill tiene precedencia sobre CLAUDE.md global (doc oficial)
```

#### 🟡 Redundancias — instrucciones duplicadas
Instrucciones en las configs que ya están cubiertas completamente por una skill activa.

```
🟡 REDUNDANCIA detectada:
  Config:  ~/.claude/CLAUDE.md → bloque de convenciones de commits
  Skill:   git-workflow/SKILL.md → cubre exactamente las mismas convenciones
  Acción:  Puedes eliminar el bloque de CLAUDE.md y dejar que la skill lo gestione
```

#### 🔵 Pertinencia — skills vs scope del proyecto
Comparar las skills instaladas contra el stack y propósito del proyecto actual.

```
🔵 ANÁLISIS DE PERTINENCIA:
  Proyecto detectado: PHP/Symfony (por CLAUDE.md y estructura de archivos)

  ✅ Skills relevantes para este proyecto:
     • php-pro — directamente aplicable
     • git-workflow — universal, siempre útil

  ⚠️ Skills globales sin uso aparente en este proyecto:
     • react-patterns — no hay archivos .tsx ni .jsx detectados
     💡 Nota: Skills globales son normales aunque no se usen en este proyecto.

  💡 Skills recomendadas para este stack (no instaladas):
     • (basado en catálogo oficial, WebFetch ya cargado)
```

#### 🟢 Calidad de instalación
```
🟢 CALIDAD DE INSTALACIÓN:
  ✅ playwright-pom — estructura correcta, path correcto
  ⚠️ git-workflow — archivo plano, considera migrar (ya señalado en análisis base)
```

### Paso 7.4 — Informe cruzado

```
══════════════════════════════════════════════════════════════
🔮 ANÁLISIS CRUZADO — Forja + Palantír
══════════════════════════════════════════════════════════════

🔴 Colisiones:    X encontradas
🟡 Redundancias:  X encontradas
🔵 Pertinencia:   X skills sin uso aparente · X recomendadas
🟢 Instalación:   X correctas · X mejorables

══════════════════════════════════════════════════════════════
```

Las mejoras detectadas aquí se añaden al revisor del Paso 6 (se procesan después de las del análisis base).

---

## Casos especiales

### Sin skills instaladas
```
No se encontraron skills instaladas en las rutas oficiales.

Rutas verificadas:
  • ~/.claude/skills/
  • ./.claude/skills/
  • ~/.claude/commands/
  • ./.claude/commands/

💡 Usa "Buscar e instalar skills" para añadir skills desde skills.sh
   o "Crear una skill" para crear la tuya propia.
```

### Todas las skills están perfectas y actualizadas
```
⚒️ Los Gwaith-i-Mírdain inspeccionan el arsenal...

✅ Todas las skills están correctas, bien configuradas y actualizadas.
   Eregion aprueba tu colección, viajero.

Score global: 10/10 ⚒️ — X skills · todas obras maestras
```

---

## 🔗 Fuentes

Ver índice completo en @prompts/docs-sources.md:
- Skills nativas: `https://code.claude.com/docs/en/skills`
- CLI skills.sh: `https://github.com/vercel-labs/skills`
- Memoria/configuración (Palantír): `https://code.claude.com/docs/en/memory`

---

**Módulo**: `07-module-analyze.md`
**Invocado desde**: `02-menu-principal.md` (opción "Examinar las forjas de Eregion")
**Requiere**: WebFetch on-demand, Read, Edit (para aplicar sugerencias), Bash (npx skills check)
**Opcional**: Read (configs de Palantír)