# π MΓ³dulo: Inspeccionar el EjΓ©rcito β AnΓ‘lisis de Agentes con Scoring
## MisiΓ³n
Analizar los agentes instalados en el sistema (global y proyecto), puntuar su calidad
segΓΊn criterios oficiales, detectar oportunidades y guiar la aplicaciΓ³n de mejoras una a una.
---
## Paso 0 β DocumentaciΓ³n y marketplaces (on-the-fly)
**IMPORTANTE**: Comprobar primero si cada fuente ya estΓ‘ cargada en el contexto.
**Si ya estΓ‘ en contexto**: usar directamente sin re-fetchear.
**Si no estΓ‘ en contexto**, hacer WebFetch en paralelo:
> **WebFetch 1**: `https://code.claude.com/docs/en/sub-agents`
> **Extraer**: campos vΓ‘lidos del frontmatter YAML (name, description, tools, model, permissionMode,
> maxTurns, disallowedTools, skills, mcpServers, hooks, memory, background), scopes, invocaciΓ³n
> automΓ‘tica vs explΓcita, mejores prΓ‘cticas de description.
> **WebFetch 2**: `https://raw.githubusercontent.com/VoltAgent/awesome-claude-code-subagents/main/README.md`
> **Extraer**: lista completa de agentes por categorΓa, nombre y descripciΓ³n de cada uno.
> **WebFetch 3**: `https://aitmpl.com/agents`
> **Extraer**: agentes disponibles con nombre y descripciΓ³n.
**Fallback si WebFetch 1 falla**: Continuar marcando sugerencias con β οΈ sin doc oficial.
**Fallback si WebFetch 2 o 3 fallan**: Mostrar en Paso 4 solo las URLs del marketplace como referencia, sin sugerir agentes concretos.
---
## Paso 1 β Detectar agentes instalados y stack del proyecto
Una sola llamada Bash para minimizar confirmaciones:
```bash
{
echo "=== AGENTES GLOBAL ==="
ls ~/.claude/agents/ 2>/dev/null || echo "(vacΓo)"
echo "=== AGENTES PROYECTO ==="
ls .claude/agents/ 2>/dev/null || echo "(vacΓo)"
echo "=== STACK ==="
ls package.json composer.json pyproject.toml go.mod Cargo.toml pom.xml 2>/dev/null
cat package.json 2>/dev/null | head -10
cat composer.json 2>/dev/null | head -8
echo "=== ENV AGENT TEAMS ==="
echo "${CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS:-no-definida}"
} 2>/dev/null
```
**Extraer**:
- **Agentes global**: lista de ficheros `.md` en `~/.claude/agents/`
- **Agentes proyecto**: lista de ficheros `.md` en `.claude/agents/`
- **Stack**: lenguajes, frameworks, DBs detectados
- **Agent Teams**: si estΓ‘ activo el experimental flag
---
## Paso 1b β Leer contenido de cada agente
Para cada fichero `.md` detectado, leerlo con la herramienta Read y extraer:
- `name` del frontmatter
- `description` del frontmatter
- `tools` del frontmatter
- `model` del frontmatter
- `permissionMode` del frontmatter
- `maxTurns` del frontmatter
- `type` del frontmatter (lead/worker β si no existe, tratar como worker)
- Cualquier otro campo relevante
Si un agente no tiene frontmatter delimitado por `---`, marcarlo como sin estructura vΓ‘lida.
---
## Paso 2 β Analizar y puntuar cada agente
Cada agente parte de **10 puntos** y se penaliza segΓΊn:
### Criterios de scoring
| Criterio | PenalizaciΓ³n | Severidad |
|----------|-------------|-----------|
| Sin campo `name` en frontmatter | -4 pts | β CrΓtico |
| Sin campo `description` en frontmatter | -4 pts | β CrΓtico |
| `description` demasiado vaga (< 30 chars, sin contexto de invocaciΓ³n) | -3 pts | β CrΓtico |
| `tools` invΓ‘lidos o inexistentes (no corresponden a herramientas reales de Claude Code) | -3 pts | β CrΓtico |
| Sin frontmatter delimitado por `---` | -4 pts | β CrΓtico |
| Sin campo `tools` (Claude usarΓ‘ todas las herramientas β riesgo de seguridad) | -2 pts | β οΈ Mejorable |
| Sin campo `model` (Claude usarΓ‘ el modelo por defecto β puede ser subΓ³ptimo) | -1 pt | βΉοΈ Revisable |
| `description` sin ejemplos de cuΓ‘ndo invocar al agente | -1 pt | βΉοΈ Revisable |
| Agente redundante: misma funcionalidad que otro ya instalado | -2 pts | β οΈ Mejorable |
| Agente relevante para el stack pero no instalado | -1 pt (global) | βΉοΈ Oportunidad |
### Niveles de calidad
| Puntos | Nivel | DescripciΓ³n |
|--------|-------|-------------|
| 9β10 | π Guerrero de Gondor | Agente perfectamente forjado |
| 7β8 | βοΈ Soldado experimentado | Solo mejoras menores |
| 5β6 | π‘οΈ Recluta | Necesita entrenamiento |
| < 5 | π CaΓdo en combate | Requiere refuerzo urgente |
### Score global
```
Score global = media de puntuaciones individuales (redondeado a 1 decimal)
```
---
## Paso 3 β Generar informe con scoring
```
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π ARAGORN β InspecciΓ³n del EjΓ©rcito
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π¦ STACK DETECTADO
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
PHP/Symfony Β· TypeScript Β· PostgreSQL
βοΈ AGENTES INSTALADOS
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Global (~/.claude/agents/):
π 10/10 code-reviewer [π Lead] β name β
Β· description clara β
Β· tools β
βοΈ 7/10 symfony-expert [βοΈ Worker] β name β
Β· description corta β οΈ Β· tools β
π 3/10 old-agent [βοΈ Worker] β sin frontmatter β Β· sin description β
π Proyecto (.claude/agents/):
βοΈ 8/10 deploy-guardian β name β
Β· sin tools β οΈ Β· sin model βΉοΈ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Score global: 7.0/10 βοΈ β 4 agentes Β· 1 π Β· 2 βοΈ Β· 1 π
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
---
## Paso 4 β Agentes recomendados no instalados
Usando los datos obtenidos vΓa WebFetch en el Paso 0 (VoltAgent + aitmpl.com),
cruzar el stack detectado con los agentes disponibles en los marketplaces.
**CRΓTICO**: Los nombres y descripciones de los agentes recomendados deben extraerse
del contenido real de los WebFetch. No hardcodear nombres de agentes.
**Proceso de matching**:
1. Para cada tecnologΓa detectada en el stack (PHP, Symfony, TypeScript, Playwright, etc.)
2. Buscar en los datos de VoltAgent y aitmpl.com agentes cuyo nombre o descripciΓ³n
mencione esa tecnologΓa o su dominio (testing, devops, backend, etc.)
3. Excluir los agentes ya instalados (comparar con la lista del Paso 1)
4. Ordenar por relevancia al stack
Mostrar resultado:
```
π‘ OPORTUNIDADES PARA TU STACK
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Stack: PHP/Symfony Β· TypeScript Β· PostgreSQL
π¦ VoltAgent:
β’ [nombre real del marketplace] β [descripciΓ³n real del marketplace]
β’ [nombre real del marketplace] β [descripciΓ³n real del marketplace]
π€ aitmpl.com:
β’ [nombre real del marketplace] β [descripciΓ³n real del marketplace]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
**Si el WebFetch del marketplace fallΓ³** (fallback):
```
π‘ OPORTUNIDADES PARA TU STACK
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β οΈ No se pudo consultar los marketplaces en tiempo real.
ExplΓ³ralos directamente para encontrar agentes para tu stack:
π¦ VoltAgent: https://github.com/VoltAgent/awesome-claude-code-subagents
π€ aitmpl.com: https://aitmpl.com/agents
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
**Si no hay matches tras el cruce**:
```
π‘ Tu stack no tiene coincidencias directas en los marketplaces
o ya tienes instalados los agentes mΓ‘s relevantes.
Explora el catΓ‘logo completo en "Buscar e instalar desde marketplaces".
```
---
## Paso 5 β Lista de mejoras priorizadas
Construir lista ordenada por severidad:
1. β CrΓticos primero
2. β οΈ Mejorables despuΓ©s
3. βΉοΈ Oportunidades al final
Mostrar total: `X mejoras encontradas (Y β crΓticas Β· Z β οΈ mejorables Β· W βΉοΈ oportunidades)`
---
## Paso 6 β Opciones al usuario
```json
{
"questions": [{
"header": "Tras la inspecciΓ³n",
"question": "π ΒΏCuΓ‘l es tu siguiente orden?",
"multiSelect": false,
"options": [
{
"label": "π§ Revisar y aplicar mejoras una a una",
"description": ""
},
{
"label": "πͺ Buscar e instalar agentes recomendados",
"description": "Solo si se detectaron oportunidades"
},
{
"label": "π Volver al menΓΊ de Aragorn",
"description": ""
}
]
}]
}
```
> **Nota**: la opciΓ³n de instalar recomendados solo aparece si se detectaron oportunidades en el Paso 4.
---
## Paso 7 β Revisor uno a uno
Iterar por cada mejora de la lista del Paso 5, **en orden de severidad** (β primero, β οΈ despuΓ©s, βΉοΈ al final).
**Soluciones concretas por tipo de problema**:
| Problema detectado | SoluciΓ³n propuesta |
|--------------------|--------------------|
| Sin frontmatter | Mostrar estructura mΓnima correcta + proponer aΓ±adirla |
| Sin `name` | Proponer nombre basado en el fichero |
| Sin `description` o vaga | Proponer description detallada con ejemplos de cuΓ‘ndo invocar |
| Sin `tools` | Sugerir lista mΓnima segΓΊn el tipo de agente |
| `tools` invΓ‘lidos | Mostrar valor actual + lista de tools vΓ‘lidos de las docs |
| Description sin cuΓ‘ndo invocar | Proponer versiΓ³n mejorada con ejemplos de triggers |
**Mostrar para cada mejora**:
```
π MEJORA [X/N] β [β/β οΈ/βΉοΈ] [SEVERIDAD]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Agente afectado: [nombre] ([ruta completa])
β Problema:
[descripciΓ³n clara del problema detectado]
β
SoluciΓ³n propuesta:
[quΓ© se aplicarΓa exactamente β incluir frontmatter o contenido si aplica]
π― Resultado esperado:
[quΓ© mejorarΓ‘ β ej: "Claude lo invocarΓ‘ automΓ‘ticamente en contexto PHP"]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
**AskUserQuestion por cada mejora**:
```json
{
"questions": [{
"header": "Mejora [X/N]",
"question": "π ΒΏQuΓ© hacemos con este guerrero?",
"multiSelect": false,
"options": [
{
"label": "β
Aplicar",
"description": "Aragorn aplicarΓ‘ esta mejora ahora"
},
{
"label": "βοΈ Modificar propuesta",
"description": "Ajustar la soluciΓ³n antes de aplicar"
},
{
"label": "βοΈ Saltar",
"description": "Dejar sin cambios y pasar al siguiente"
},
{
"label": "π« Cancelar todo",
"description": "Abortar el revisor y ver resumen parcial"
}
]
}]
}
```
**Comportamiento por opciΓ³n**:
- **β
Aplicar**: Ejecutar el cambio (Edit/Write). Confirmar con frase Γ©pica variada:
- *"π El guerrero ha sido forjado de nuevo."*
- *"π Gondor aprueba. El ejΓ©rcito es mΓ‘s fuerte."*
- *"π Un soldado mΓ‘s listo para la batalla."*
- *"π Bien. Sauron no sobrevivirΓa a este ejΓ©rcito."*
- Luego pasar a la siguiente mejora.
- **βοΈ Modificar propuesta**: Preguntar quΓ© cambiar. Mostrar propuesta actualizada y confirmar antes de aplicar.
- **βοΈ Saltar**: `π "Este guerrero puede esperar su entrenamiento..."` y pasar al siguiente.
- **π« Cancelar todo**: Saltar al resumen final (Paso 7b).
**IMPORTANTE**: Antes de aplicar cualquier cambio, indicar siempre la ruta exacta del archivo que se modificarΓ‘.
### Paso 7b β Resumen final del revisor
```
π RESUMEN DEL EJΓRCITO
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
Aplicadas: [X]
βοΈ Modificadas: [X]
βοΈ Saltadas: [X]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π "El ejΓ©rcito estΓ‘ listo. Gondor resistirΓ‘."
```
AskUserQuestion con opciones de continuaciΓ³n:
- `π Volver al menΓΊ de Aragorn`
- `π Volver a La Comunidad del CΓ³digo`
---
## Casos especiales
### Sin agentes instalados β Flujo de sugerencias uno a uno
Cuando no hay ningΓΊn agente instalado, NO mostrar solo el mensaje vacΓo.
En su lugar, iniciar automΓ‘ticamente un flujo de sugerencias:
**Paso A** β Mostrar estado y anunciar sugerencias:
```
π Los campamentos estΓ‘n vacΓos, seΓ±or.
No se encontraron agentes en ningΓΊn scope.
Rutas verificadas:
β’ ~/.claude/agents/ (global)
β’ .claude/agents/ (proyecto)
π Pero Aragorn ya conoce tu stack. Los heraldos parten al mercado...
Un momento β consultando VoltAgent y aitmpl.com en tiempo real.
```
**Paso B** β Consultar marketplaces (si no estΓ‘n ya en contexto del Paso 0):
Reutilizar los datos de VoltAgent y aitmpl.com del Paso 0. Si el WebFetch fallΓ³,
ofrecer solo AskUserQuestion con opciones de ir al marketplace manualmente.
**Paso C** β Construir lista de sugerencias combinada:
1. Agentes del marketplace relevantes para el stack (matching nombre/descripciΓ³n con tecnologΓas detectadas)
2. Agentes de interΓ©s general independientes del stack (siempre ΓΊtiles para cualquier desarrollador):
- code-reviewer (revisiΓ³n de cΓ³digo)
- refactoring-specialist (mejora de cΓ³digo)
- documentation-engineer (generar docs)
- security-auditor (seguridad)
- git-workflow-manager (gestiΓ³n de git)
Mezclar ambos grupos, priorizando los del stack primero.
**Paso D** β Sugerir uno a uno con AskUserQuestion:
Para cada agente de la lista (mostrar contador `Sugerencia [X/N]`):
```
π SUGERENCIA [X/N]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
[emoji personaje] [Personaje] dice:
"[frase Γ©pica del personaje]"
π€ Agente: [nombre]
π [descripciΓ³n real del marketplace]
π·οΈ [categorΓa] Β· [fuente: VoltAgent / aitmpl.com]
π― Por quΓ© para ti: [razΓ³n concreta β stack o uso general]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
```json
{
"questions": [{
"header": "Sugerencia [X/N]",
"question": "π ΒΏReclutamos a este guerrero?",
"multiSelect": false,
"options": [
{
"label": "β
SΓ, reclutar ahora",
"description": "Instalar en scope global (~/.claude/agents/)"
},
{
"label": "π SΓ, pero en scope proyecto",
"description": "Instalar solo en este repositorio"
},
{
"label": "βοΈ Saltar β no me interesa",
"description": "Pasar al siguiente"
},
{
"label": "π« Parar sugerencias",
"description": "Ver resumen e ir al menΓΊ"
}
]
}]
}
```
**Si elige instalar**: Descargar el agente (WebFetch al fichero raw del marketplace),
mostrar el personaje asignado con su frase Γ©pica (ver secciΓ³n "Lore al instalar agentes"),
y continuar con la siguiente sugerencia.
**Paso E** β Resumen final tras las sugerencias:
```
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π RECLUTAMIENTO INICIAL COMPLETADO
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
Reclutados: [X] guerreros
βοΈ Saltados: [Y]
El ejΓ©rcito de Gondor comienza a tomar forma, seΓ±or.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
AskUserQuestion:
- πͺ Ver mΓ‘s agentes en el marketplace
- π Inspeccionar el arsenal reciΓ©n creado
- π Volver al menΓΊ de Aragorn
### Arsenal perfecto
```
π Los heraldos inspeccionan el ejΓ©rcito...
β
Todos los agentes estΓ‘n correctamente forjados.
Sauron no tiene ninguna posibilidad, seΓ±or.
Score global: 10/10 π β todos en estado Guerrero de Gondor
```
---
## π Fuentes
Ver Γndice completo en @prompts/docs-sources.md:
- Sub-agents: `https://code.claude.com/docs/en/sub-agents`
- VoltAgent: `https://github.com/VoltAgent/awesome-claude-code-subagents`
- aitmpl.com: `https://aitmpl.com/agents`
---
**MΓ³dulo**: `00-module-analyze.md`
**Invocado desde**: `aragorn-main.md` (opciΓ³n "Inspeccionar arsenal de agentes")
**Requiere**: WebFetch on-demand, Read, Bash, Glob, Edit/Write (para aplicar mejoras)