josemoreupeso.es
03e-team-crud.md — TLOTP
# ⚔️ Módulo: Agent Teams — Ver Detalle, Editar, Eliminar, Coordinador y Coherencia

> **Operaciones CRUD sobre teams existentes**: inspección, edición, eliminación,
> forja de coordinador y análisis de coherencia.
> Invocado desde el inventario de teams.

---

## Operación: Ver Detalle de Team

### Paso VD1 — Seleccionar team

Si hay más de un team, preguntar con AskUserQuestion mostrando la lista completa
(nombre + scope) generada en la Fase 0. Si solo hay uno, seleccionarlo automáticamente.

### Paso VD2 — Leer y mostrar configuración completa

Leer el fichero del team con Read y mostrar:

```
══════════════════════════════════════════════════════════════
👁️  DETALLE: [nombre-team]
══════════════════════════════════════════════════════════════

  📍 Scope:      [global / proyecto]
  📁 Fichero:    [ruta completa]
  🧑‍🤝‍🧑 Agentes:   [N]

  Guerreros del ejército:
    [Para cada agente]:
    ⚔️  [nombre-agente]  ·  [descripción si disponible]

  📝 Descripción del team:
     [campo description del fichero si existe]

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

AskUserQuestion:
- ✏️ Editar este team
- 🗑️ Eliminar este team
- 🔙 Volver al inventario

---

## Operación: Editar Team

### Paso ED1 — Seleccionar team

Si hay más de un team, preguntar con AskUserQuestion (lista de nombres + scope).

### Paso ED2 — Seleccionar qué editar

```json
{
  "questions": [{
    "header": "Editar team",
    "question": "✏️  ¿Qué deseas modificar en '[nombre-team]'?",
    "multiSelect": false,
    "options": [
      {
        "label": "📛 Cambiar nombre",
        "description": "Renombrar el fichero del team"
      },
      {
        "label": "🧑‍🤝‍🧑 Añadir agentes",
        "description": "Incorporar nuevos guerreros al ejército"
      },
      {
        "label": "➖ Quitar agentes",
        "description": "Retirar agentes del team con confirmación"
      },
      {
        "label": "📝 Cambiar descripción",
        "description": "Actualizar el propósito del team"
      },
      {
        "label": "🔙 Cancelar",
        "description": ""
      }
    ]
  }]
}
```

### Paso ED3 — Aplicar cambios

Mostrar el cambio propuesto y pedir confirmación (AskUserQuestion: Confirmar / Cancelar):

```
══════════════════════════════════════════════════════════════
✏️  CAMBIO PROPUESTO — [nombre-team]
══════════════════════════════════════════════════════════════
  [Describir el cambio concreto a aplicar]
══════════════════════════════════════════════════════════════
```

Tras confirmar, aplicar con Edit/Write según corresponda.

Mostrar confirmación:
*"El ejército ha sido reorganizado. Que los dioses de la batalla les sean favorables."*

Volver automáticamente al inventario (Fase 0).

---

## Operación: Eliminar Team

### Paso EL1 — Seleccionar team

Si hay más de un team, preguntar con AskUserQuestion (lista de nombres + scope).

### Paso EL2 — Confirmación obligatoria

**SIEMPRE** mostrar confirmación antes de eliminar:

```json
{
  "questions": [{
    "header": "⚠️  Confirmar eliminación",
    "question": "🗑️  ¿Seguro que quieres disolver el ejército '[nombre-team]'?\n    Esta acción no se puede deshacer.",
    "multiSelect": false,
    "options": [
      {
        "label": "🗑️  Sí, disolver el ejército",
        "description": "Eliminar [nombre-team] ([scope])"
      },
      {
        "label": "🔙 Cancelar — mantener el team",
        "description": ""
      }
    ]
  }]
}
```

### Paso EL3 — Ejecutar eliminación

Si el usuario confirma:

```bash
rm [ruta-del-fichero-team]
```

Mostrar confirmación con lore épico:
*"El ejército ha sido disuelto. Sus guerreros regresan a sus tierras. Que Gondor los recuerde."*

Volver automáticamente al inventario (Fase 0).

---

## Opción F — Forjar un Coordinador de Ejércitos

### Paso F1 — Seleccionar team objetivo

Si hay más de un team, preguntar con AskUserQuestion mostrando la lista completa
generada en la Fase 0. Si solo hay uno, seleccionarlo automáticamente.

### Paso F2 — Proponer nombre del coordinador

Proponer nombre por defecto: `{team-name}-orchestrator`

Mostrar con AskUserQuestion:

```json
{
  "questions": [{
    "header": "Forjar Coordinador — Paso 1/3",
    "question": "🛡️  ¿Cómo se llamará el coordinador del team '{team}'?",
    "multiSelect": false,
    "options": [
      {
        "label": "✅ Usar '{team-name}-orchestrator'",
        "description": "Nombre sugerido por Aragorn"
      },
      {
        "label": "✍️  Escribir otro nombre",
        "description": "Solo letras minúsculas, números y guiones"
      }
    ]
  }]
}
```

Validar formato: solo letras minúsculas, números y guiones (`/^[a-z0-9-]+$/`).

### Paso F3 — Precargar instrucciones de orquestación

Leer `.claude/teams/{team}.yml` para obtener los teammates y sus tipos.

Generar instrucciones base precargadas:

```
Eres el coordinador del Agent Team `{team}`.

## Rol: ORQUESTAR, no implementar

Tu misión es dirigir al equipo, no escribir código directamente.
Delega cada tarea al agente especializado correcto usando el Agent tool.
NUNCA edites ficheros ni ejecutes código tú mismo.

## Equipo a tu mando

{Para cada teammate del team}:
- **{nombre-agente}**: responsable de {dominio inferido del nombre}

## Tabla de delegación

| Tipo de tarea | Agente a invocar |
|--------------|-----------------|
| {dominio-1}  | {teammate-1}    |
| {dominio-2}  | {teammate-2}    |
| ...          | ...             |

## Protocolo de coordinación

1. Leer el SDD o la tarea asignada
2. Descomponer en subtareas según especialidad
3. Delegar cada subtarea al agente correcto
4. Verificar resultados y coordinar dependencias
5. Reportar el resultado consolidado
```

> 💰 **Impacto estimado en tokens: +alto**  
> Se ha añadido un coordinador central: los agentes en paralelo más la coordinación añaden rondas de contexto adicionales.  
> _Referencia completa de costes: leer `prompts/shared/orquestacion.md` sección "Guía de Coste de Tokens"_

Mostrar preview y AskUserQuestion:

```json
{
  "questions": [{
    "header": "Forjar Coordinador — Paso 2/3",
    "question": "🛡️  ¿Las instrucciones del coordinador son correctas?",
    "multiSelect": false,
    "options": [
      {
        "label": "✅ Crear coordinador con estas instrucciones",
        "description": ""
      },
      {
        "label": "✏️  Modificar instrucciones antes de crear",
        "description": "Editar el texto manualmente"
      },
      {
        "label": "🚫 Cancelar",
        "description": ""
      }
    ]
  }]
}
```

### Paso F4 — Crear el agente coordinador

Generar el fichero `.md` del coordinador con frontmatter:

```yaml
---
name: {nombre-coordinador}
description: |
  Coordinador del Agent Team '{team}'. Orquesta, no implementa.
  Invócame para: dirigir equipos paralelos, coordinar SDDs complejos,
  delegar tareas especializadas entre agentes del team.
  Ejemplo: "@{nombre-coordinador} implementa el SDD de la feature X"
tools:
  - Agent
model: claude-sonnet-4-6
---

{instrucciones generadas en F3}
```

Crear en `~/.claude/agents/{nombre-coordinador}.md` con Write.

### Paso F5 — Ofrecer actualizar el lead del team

```json
{
  "questions": [{
    "header": "Forjar Coordinador — Paso 3/3",
    "question": "🛡️  ¿Actualizar el lead del team '{team}' para usar el nuevo coordinador?",
    "multiSelect": false,
    "options": [
      {
        "label": "✅ Sí, actualizar config.json del team",
        "description": "El coordinador se convertirá en el lead del ejército"
      },
      {
        "label": "⏭️  No por ahora",
        "description": "Mantener el lead actual del team"
      }
    ]
  }]
}
```

Si acepta: leer `.claude/teams/{team}.yml` con Read, actualizar el campo `lead`
al nombre del nuevo coordinador, y escribir con Write/Edit.

Mostrar confirmación épica:

```
══════════════════════════════════════════════════════════════
🛡️  COORDINADOR FORJADO: {nombre-coordinador}
══════════════════════════════════════════════════════════════

  "El ejército de Gondor tiene ahora un general digno de Andúril."

  📂 Fichero:  ~/.claude/agents/{nombre-coordinador}.md
  ⚔️  Team:    {team}
  👑 Lead:    {actualizado / sin cambios}

  Usa "@{nombre-coordinador} [tu misión]" para activarlo.

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

AskUserQuestion:
- 🔙 Volver al inventario de teams
- ✨ Crear otro agente asistido

---

## Operación: Análisis de Coherencia de Teams

### Paso AC1 — Cargar inventario completo

Ejecutar el mismo escaneo que la Fase 0 para obtener la lista actualizada de todos los
teams en ambos scopes. Leer cada fichero con Read para obtener nombre, agentes y scope.

### Paso AC2 — Ejecutar análisis

Evaluar los siguientes criterios sobre todos los teams detectados:

**Criterio 1 — Duplicados exactos entre scopes**
Detectar teams con el **mismo nombre** tanto en `~/.claude/agents/` como en `.claude/agents/`.
Acción sugerida: fusionar o eliminar el duplicado con indicación de cuál mantener.

**Criterio 2 — Nombres muy similares**
Detectar teams cuyo nombre tenga una distancia de edición ≤ 2 con otro team
(independientemente del scope). Por ejemplo: `code-review` vs `code-reviewer`.
Acción sugerida: renombrar el más reciente o fusionar si tienen propósito similar.

**Criterio 3 — Agentes solapados entre teams**
Detectar teams que comparten más del 50% de sus agentes con otro team.
Acción sugerida: especializar roles o fusionar los teams si tienen propósito similar.

### Paso AC3 — Mostrar informe

**Si se detectan problemas**, mostrar:

```
══════════════════════════════════════════════════════════════
🔍 ANÁLISIS DE COHERENCIA — EJÉRCITOS DE GONDOR
══════════════════════════════════════════════════════════════

  [Para cada problema detectado]:

  ⚠️  PROBLEMA [N]: [tipo — Duplicado / Nombre similar / Solapamiento]
  ────────────────────────────────────────────────────────────
  📋 Detectado:  [descripción concreta del problema]
  💡 Sugerencia: [acción propuesta]
  🎯 Motivo:     [justificación breve]

══════════════════════════════════════════════════════════════
📊 Total: [N] problemas detectados
══════════════════════════════════════════════════════════════
```

**Si no se detectan problemas**, mostrar:

```
══════════════════════════════════════════════════════════════
🔍 ANÁLISIS DE COHERENCIA
══════════════════════════════════════════════════════════════

  Los teams están en perfecta armonía 🧙‍♂️

  No se detectaron duplicados, nombres similares ni
  solapamientos significativos entre ejércitos.

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

### Paso AC4 — Aplicar sugerencias (si hay problemas)

Para cada problema detectado, ofrecer acciones con AskUserQuestion:

```json
{
  "questions": [{
    "header": "Coherencia — Problema [N]/[TOTAL]",
    "question": "⚔️  [descripción del problema]\n    Sugerencia: [acción propuesta]",
    "multiSelect": false,
    "options": [
      {
        "label": "✅ Aplicar sugerencia",
        "description": "[qué se hará concretamente]"
      },
      {
        "label": "⏭️  Saltar este problema",
        "description": "Ignorar y pasar al siguiente"
      },
      {
        "label": "🚫 Terminar análisis",
        "description": "Salir del análisis y volver al inventario"
      }
    ]
  }]
}
```

Aplicar la acción elegida (fusionar = copiar config + eliminar original, renombrar = mv del fichero).
Mostrar confirmación con frase épica antes de ejecutar cada acción.

Tras procesar todos los problemas (o al terminar), volver automáticamente al inventario (Fase 0).

---

## 🔗 Fuentes

Ver índice completo en https://josemoreupeso.es/tlotp/docs-sources.html:
- Agent Teams: `https://code.claude.com/docs/en/agent-teams`
- Sub-agents:  `https://code.claude.com/docs/en/sub-agents`

---

**Módulo**: `03e-team-crud.md`
**Invocado desde**: `03a-team-inventory.md` (opciones Ver detalle, Editar, Eliminar, Coordinador, Coherencia)
**Reemplaza**: parte de `03-module-team-builder.md`
**Requiere**: WebFetch on-demand, Read, Bash, Write, Edit