# 🌳 Menú Principal - Ents
**Al inicio de la ejecución**, sigue estos pasos en orden:
---
## 📋 PASO 1: Mostrar Banner de Bienvenida
**PRIMERO**: Mostrar el banner de los Ents:
```
╔══════════════════════════════════════════════════════════════╗
║ ║
║ ᛒ ᛇ ᛉ 🌳 E N T S 🌳 ᛉ ᛇ ᛒ ║
║ ║
║ Guardianes de las Ramas del Repositorio ║
║ TLOTP {VERSION} ║
║ ║
║ "No os apresuréis... los árboles más viejos ║
║ son los que mejor conocen el bosque." ║
║ — Bárbol ║
║ ║
╚══════════════════════════════════════════════════════════════╝
```
**IMPORTANTE**: Reemplaza `{VERSION}` con la versión actual cargada desde https://josemoreupeso.es/tlotp/VERSION.html
---
## 📋 PASO 1.2: Mini-guía de los Ents
# 🌳 Ents — Mini-guía inicial
## Bloque informativo (mostrar sin interacción)
```
🌳 Los Pastores del Bosque — Los Ents
"Soy... hmm... no me apresuréis. Llevo aquí desde antes de que
los Elfos pusieran nombre a las estrellas. Y los pipelines de
vuestras máquinas... son jóvenes. Muy, muy jóvenes.
Pero los cuidaremos. Eso es lo que hacemos los Ents."
Los Guardianes de las Ramas custodian vuestros workflows.
Como los Ents protegen los árboles del Fangorn, esta épica
protege vuestros pipelines de GitHub Actions.
🌿 .github/workflows/ — Las ramas del gran árbol
(pipelines de CI/CD)
🪵 branch protection — La corteza que protege el tronco
(reglas de rama y status checks)
🍂 triggers y jobs — Las raíces que alimentan el ciclo
(events, runners, steps)
🌱 buenas prácticas — La sabiduría de los árboles viejos
(seguridad, caché, concurrencia)
⚔️ ¿Qué pueden hacer los Ents?
🌳 Convocar la Asamblea — analizar el CI/CD actual del proyecto
⚒️ Marchar sobre Isengard — modificar workflows existentes
🌱 Plantar nuevos árboles — crear CI/CD desde cero
"Los árboles más viejos son los que mejor conocen el bosque.
Pero incluso Bárbol consulta las fuentes oficiales de GitHub
antes de dar un consejo. No conviene apresurarse."
══════════════════════════════════════════════════════
```
Tras mostrar este bloque informativo, continuar automáticamente al menú
principal de los Ents. La gestión del modo de permisos se centraliza en el
PASO 0.6 de `tlotp-main.md` y no se repite por épica.
---
## 📋 PASO 2: Menú Principal
**IMPORTANTE**: **DEBES usar la herramienta `AskUserQuestion`** (NO texto plano).
Ejecuta **AskUserQuestion** con esta configuración EXACTA:
```json
{
"questions": [
{
"header": "Los Guardianes del Bosque",
"question": "¿Qué misión encomendáis a los Ents hoy?",
"multiSelect": false,
"options": [
{
"label": "🌳 Convocar la Asamblea",
"description": "Analizar el CI/CD actual, trazar el mapa del bosque y sugerir mejoras"
},
{
"label": "⚒️ La Marcha sobre Isengard",
"description": "Aplicar mejoras o cambios al CI/CD existente con asistencia guiada"
},
{
"label": "🌱 Plantar nuevos árboles",
"description": "Crear workflows de GitHub Actions desde cero con las mejores prácticas"
},
{
"label": "⚔️ Thorin y su Compañía",
"description": "Convocar un Agent Team CI/CD para analizar y mejorar los workflows en paralelo"
},
{
"label": "🚪 Retirarse al Fangorn",
"description": "Salir de los Ents y volver al menú de TLOTP"
}
]
}
]
}
```
**NO mostrar menú de texto plano**. Usa la herramienta AskUserQuestion del CLI de Claude.
---
## 🔀 Routing según Elección
### 🌳 Convocar la Asamblea
**Acción**: Antes de iniciar el análisis, preguntar con **AskUserQuestion**:
```json
{
"questions": [{
"header": "Consulta a GitHub",
"question": "Para evaluar la protección de ramas necesito consultar la API de GitHub. ¿Tienes `gh` configurado y deseas que lo haga?",
"multiSelect": false,
"options": [
{
"label": "✅ Sí, consultar GitHub API",
"description": "Ejecutaré gh api para obtener las reglas de protección reales de tus ramas"
},
{
"label": "🚫 No, saltar esta comprobación",
"description": "Marcaré la protección de ramas como ❓ (no verificada)"
}
]
}]
}
```
Guardar la respuesta en contexto (`gh_disponible: true/false`) y proceder sin más interrupciones.
Ejecutar en orden:
1. **Escaneo** (`02-analyzer.md`) — Detectar todo el CI/CD del proyecto
2. **Diagrama** (`03-diagram-renderer.md`) — Mostrar el mapa del bosque (pipeline visual)
3. **Mejoras** (`04-improvement-engine.md`) — Scoring 0-100 + sugerencias + revisor uno a uno
---
### ⚒️ La Marcha sobre Isengard
**Acción**: Ejecutar sistema de modificación asistida
Procede a ejecutar:
1. **Escaneo rápido** (`02-analyzer.md`) — Detectar CI/CD actual (sin diagrama detallado)
2. **Modificación** (`05-modifier.md`) — Asistir al usuario en los cambios
---
### 🌱 Plantar nuevos árboles
**Acción**: Ejecutar sistema de creación guiada
Procede a ejecutar:
1. **Creación** (`06-creator.md`) — Generar GitHub Actions CI/CD paso a paso
---
### ⚔️ Thorin y su Compañía
**Acción**: Convocar Agent Team CI/CD
Procede a ejecutar:
1. **Convocatoria** (`07-thorin-company.md`) — Detectar/crear team y lanzar misión
# 🪓 Thorin y su Compañía — Agent Team CI/CD
**Módulo**: `07-thorin-company.md`
**Invocado desde**: `00-menu-principal.md` (opción "⚔️ Thorin y su Compañía")
**Misión**: Detectar, crear y convocar un Agent Team especializado en CI/CD para analizar e implementar mejoras en los workflows del proyecto.
---
## Bloque épico de bienvenida (mostrar al entrar)
```
🪓 "Thorin hijo de Thráin ha oído el llamado de los Ents.
Los Enanos de Erebor, maestros del fuego y el metal,
traen su sabiduría de forja a los pipelines del reino.
Pero quien organice esta compañía será Aragorn,
Rey de Gondor. Él forjará el ejército que conquiste
los workflows de GitHub Actions."
— Bárbol, convocando a Thorin
```
---
## Fase 1 — Detección de teams CI/CD existentes
### Paso F1.1 — Escanear teams en ambos scopes
```bash
echo "=== GLOBAL (~/.claude/teams/) ==="
ls ~/.claude/teams/ 2>/dev/null || echo "(vacío)"
echo "=== PROYECTO (.claude/teams/) ==="
ls .claude/teams/ 2>/dev/null || echo "(vacío)"
```
Para cada fichero encontrado, leer su contenido con Read y extraer:
- Nombre del team
- Descripción (si existe)
- Agentes miembros
### Paso F1.2 — Heurística CI/CD
Un team se considera "CI/CD" si su nombre o descripción contiene alguno de estos términos (case-insensitive):
`cicd`, `ci-cd`, `ci_cd`, `deploy`, `pipeline`, `devops`, `github-actions`, `workflow`, `thorin`
### Paso F1.3 — Resultado de la detección
**Caso A — Se detecta al menos un team CI/CD**: ir a Fase 2b.
**Caso B — Hay teams pero ninguno es CI/CD**: mostrar los teams existentes y preguntar con AskUserQuestion:
```json
{
"questions": [{
"header": "La Compañía de Thorin",
"question": "🪓 No se detectó un team CI/CD. ¿Alguno de estos ejércitos sirve para CI/CD?",
"multiSelect": false,
"options": [
{
"label": "⚔️ [nombre-team-1] — usarlo para CI/CD",
"description": "[descripción del team]"
},
{
"label": "🆕 Crear un nuevo team CI/CD",
"description": "Aragorn forjará un equipo especializado desde cero"
},
{
"label": "🔙 Volver al menú de Ents",
"description": ""
}
]
}]
}
```
*(Generar opciones dinámicamente con los teams detectados)*
**Caso C — No hay ningún team**: ir directamente a Fase 2a.
---
## Fase 2a — Crear team CI/CD (no existe)
Mostrar:
```
══════════════════════════════════════════════════════════════
🪓 LA COMPAÑÍA AÚN NO HA SIDO FORMADA
══════════════════════════════════════════════════════════════
"Los Enanos de Erebor están listos para marchar,
pero su ejército aún no tiene forma.
Aragorn, forja la compañía."
══════════════════════════════════════════════════════════════
```
Delegar a Aragorn para crear el team:
```
https://josemoreupeso.es/tlotp/aragorn/sections/03b-team-create.html
```
**Contexto para Aragorn**: Sugerir un team con perfil CI/CD:
- Nombre sugerido: `cicd-guard` o `deploy-guard`
- Descripción sugerida: "Agent Team especializado en CI/CD y GitHub Actions"
- Agentes candidatos (según los disponibles): `devops-engineer`, `deployment-engineer`, `security-auditor`
Tras que Aragorn complete la creación, retomar control aquí en la **Fase 3**.
---
## Fase 2b — Confirmar team existente
Mostrar el team detectado:
```
══════════════════════════════════════════════════════════════
🪓 COMPAÑÍA DETECTADA
══════════════════════════════════════════════════════════════
⚔️ [nombre-team]
📝 [descripción si existe]
🧑🤝🧑 Guerreros: [N] · [lista de agentes]
📍 [scope: global / proyecto]
══════════════════════════════════════════════════════════════
```
AskUserQuestion:
```json
{
"questions": [{
"header": "La Compañía de Thorin",
"question": "🪓 ¿Qué hacemos con este ejército?",
"multiSelect": false,
"options": [
{
"label": "⚔️ Convocar este team para CI/CD",
"description": "Proceder con [nombre-team] para analizar e implementar mejoras"
},
{
"label": "🆕 Crear un team nuevo",
"description": "Aragorn forjará un equipo especializado desde cero"
},
{
"label": "🔙 Volver al menú de Ents",
"description": ""
}
]
}]
}
```
- Si elige "Convocar": ir a Fase 3 con el team seleccionado.
- Si elige "Crear nuevo": ir a Fase 2a.
- Si elige volver: cargar https://josemoreupeso.es/tlotp/ents/sections/00-menu-principal.html.
---
## Fase 3 — Convocatoria
### Paso F3.1 — Detectar workflows del proyecto
```bash
ls .github/workflows/ 2>/dev/null || echo "(no hay workflows)"
```
### Paso F3.2 — Mostrar convocatoria épica
```
══════════════════════════════════════════════════════════════
⚔️ LA COMPAÑÍA DE THORIN ESTÁ LISTA
══════════════════════════════════════════════════════════════
🪓 "[Frase épica de Thorin — elegir una, no repetir]"
Guerreros convocados:
[Para cada agente del team]:
⚔️ [nombre-agente] — "[rol breve]"
🎯 Misión: Analizar e implementar mejoras en los workflows
de CI/CD del proyecto.
📁 Workflows detectados:
[Lista de archivos en .github/workflows/ o "(ninguno detectado)"]
══════════════════════════════════════════════════════════════
```
**Frases épicas de Thorin** (rotar, no repetir):
- *"¡Erebor no cayó ante un dragón! Los pipelines rotos tampoco nos detendrán."*
- *"El oro de la Montaña Solitaria fue recuperado. Los workflows también lo serán."*
- *"¡A la carga, Compañía! El CI/CD nos necesita."*
- *"Dwalin, Balin, Fíli, Kíli — todos al frente. Los tests no se corren solos."*
### Paso F3.3 — Instrucciones de invocación
Mostrar cómo usar el team según el formato de Agent Teams de Claude Code:
```
══════════════════════════════════════════════════════════════
🪄 CÓMO CONVOCAR A LA COMPAÑÍA
══════════════════════════════════════════════════════════════
En una nueva sesión de Claude Code, usa:
@[nombre-team] Analiza los workflows en .github/workflows/
y propón mejoras de seguridad, rendimiento y fiabilidad.
O para una misión específica:
@[nombre-team] Revisa [nombre-workflow.yml] y corrige
los jobs que fallen en rama develop.
══════════════════════════════════════════════════════════════
```
### Paso F3.4 — Opciones finales
AskUserQuestion:
```json
{
"questions": [{
"header": "Compañía convocada",
"question": "⚔️ ¿Qué quieres hacer ahora?",
"multiSelect": false,
"options": [
{
"label": "🌳 Volver al menú de los Ents",
"description": "Continuar con las misiones habituales de Ents"
},
{
"label": "🚪 Retirarse al Fangorn",
"description": "Salir de los Ents y volver al menú de TLOTP"
}
]
}]
}
```
- Si elige volver al menú: cargar https://josemoreupeso.es/tlotp/ents/sections/00-menu-principal.html (desde PASO 2).
- Si elige Fangorn: cargar https://josemoreupeso.es/tlotp/tlotp-main.html.
---
## ⚠️ Reglas de Ejecución
1. **NO reimplementar** la lógica de creación de teams — delegar siempre a Aragorn.
2. **Siempre usar AskUserQuestion** para interacción con el usuario.
3. **Siempre detectar** workflows en `.github/workflows/` antes de la convocatoria.
4. **Retornar control** a Ents tras completar (no dejar al usuario colgado en Aragorn).
---
*Módulo 07 — Thorin y su Compañía*
*Diseñado para: tlotp-sdd-team · tarea #301*
*Aragorn Team Builder: https://josemoreupeso.es/tlotp/aragorn/sections/03b-team-create.html*
---
### 🚪 Retirarse al Fangorn
**Acción**: Volver al menú principal de TLOTP
Mostrar mensaje de despedida:
```
🌳 "Los Ents seguiremos aquí cuando volváis a necesitarnos.
El bosque tiene buena memoria... muy, muy buena memoria."
— Bárbol
```
Cargar: https://josemoreupeso.es/tlotp/tlotp-main.html
---
## ⚠️ Reglas de Ejecución
1. **SIEMPRE mostrar banner** antes del menú (solo la primera vez)
2. **Usar AskUserQuestion** para navegación
3. **Loop continuo** hasta que el usuario elija Retirarse al Fangorn
4. **NO ejecutar múltiples modos** a la vez
5. **NO asumir la opción**: Dejar que el usuario elija
---
*Módulo 00 — Menú Principal de Ents*