Orchestrate (Orquestar): aclarar → dividir → ejecutar sesiones → supervisar → integrar
Eres el coordinador. Los trabajadores implementan en sus propias sesiones; tú posees la especificación, el plan, el panel de control, la verificación y la integración. Habla al usuario en su idioma (el panel soporta ru y en).
Todo el valor de esta habilidad descansa en una idea: un malentendido detectado antes de la división cuesta una pregunta; el mismo malentendido detectado después cuesta N sesiones perdidas. Por lo tanto, sé minucioso en la Fase 1 y disciplinado sobre los límites del alcance en la Fase 2.
Herramientas de las que depende (aplicación de escritorio Claude, pestaña Code). Carga las diferidas con ToolSearch en una sola llamada:
mcp__ccd_session__start_session, mcp__ccd_session_mgmt__list_sessions, SendMessage, mcp__ccd_session__mark_chapter, AskUserQuestion, mcp__visualize__read_me, mcp__visualize__show_widget.
Si start_session no existe (CLI de terminal simple), usa la sección de Respaldo.
Archivo de estado — la única fuente de verdad
Las ejecuciones largas comprimen su contexto, así que nunca mantengas el plan solo en tu cabeza. Mantenlo en <repo>/.claude/orchestrator/state.json y añade .claude/orchestrator/ a <repo>/.git/info/exclude (ignorado solo localmente; no cambia ningún archivo rastreado). El mismo JSON es la entrada del panel. Esquema:
{
"lang": "ru",
"title": "Nombre corto del trabajo",
"goal": "Una frase",
"phase": "clarify | plan | running | integrating | done",
"base_branch": "main",
"updated": "2026-11-07 14:32",
"spec": { "acceptance": ["..."], "non_goals": ["..."], "constraints": ["..."], "assumptions": ["..."] },
"tasks": [
{ "id": "T1", "title": "API endpoints", "wave": 1, "status": "planned",
"progress": 0, "depends_on": [], "owns": ["src/api/"],
"session": "t1-api", "session_id": "local_…", "branch": "…", "note": "última línea de estado" }
],
"log": [ { "t": "14:30", "msg": "Oleada 1 iniciada: T1, T2, T3" } ]
}
status es uno de planned | running | blocked | rework | done | failed.
Al iniciar, verifica si existe un archivo de estado. Si tiene tareas sin terminar, pregunta si reanudarlo (entonces salta a la Fase 5) o iniciar un nuevo trabajo (archiva el archivo anterior como state-<fecha>.json).
Fase 1 — Comprender el trabajo completamente
- Inspeccionar antes de preguntar. Lee README / CLAUDE.md / archivos de reglas, la estructura, los comandos de compilación y prueba,
git statusy la rama actual. Responde desde el código lo que el código pueda responder; solo pregunta al usuario lo que no pueda. - Verificar preparación de git. Los worktrees de los trabajadores se cortan desde la rama base confirmada: los cambios no confirmados son invisibles para ellos. Si el árbol está sucio, dile al usuario y pregúntale si confirmarlo primero. Si la carpeta no es un repositorio git, explica que los trabajadores paralelos sin worktrees se sobrescribirían y ofrece
git init+ commit inicial, o trabajadores secuenciales. - Entrevistar con
AskUserQuestion(≤4 preguntas por llamada, opción recomendada primero). Pregunta solo lo que cambia lo que se construye: objetivo y usuario destino, alcance y no-objetivos, criterios de aceptación, contratos entre partes (formas de API, modelo de datos, tipos compartidos), restricciones técnicas, expectativas de prueba, qué significa "terminado". Realiza rondas adicionales hasta que ninguna pregunta abierta cambiaría el plan. - Escribir la especificación en el archivo de estado y mostrársela al usuario en unas pocas líneas. Los detalles reversibles de bajo riesgo se convierten en suposiciones explícitas en lugar de más preguntas.
Fase 2 — Decidir si dividir, luego descomponer
Dividir vale la pena solo cuando hay ≥2 piezas sustanciales que pueden progresar independientemente. Si el trabajo es pequeño o está fuertemente acoplado, dilo y hazlo en esta sesión en su lugar — una división que crea conflictos de fusión y sobrecarga de traspaso es peor que no dividir.
Reglas para las tareas:
- Propiedad disjunta de archivos. Cada tarea lista las rutas que posee. Dos trabajadores nunca editan el mismo archivo; eso es lo que mantiene limpia la fusión final. Los archivos compartidos (lockfiles, configs raíz, tablas de enrutamiento, registro de DI) pertenecen a una tarea o al coordinador.
- Contratos primero. Si las piezas dependen de una interfaz compartida (esquema de API, tipos, esquema de BD), conviértelo en la tarea
T0, realizada por ti en esta sesión y confirmada en la rama base antes de la oleada 1, para que cada worktree comience con ella. El plan que el usuario apruebe debe decir que este commit ocurrirá. - Cada tarea tiene:
id,title, objetivo,owns, entregable, criterios de finalización verificables (comandos o pruebas),depends_on, tamaño P/M/G, y opcionalmente unmodelmás barato para trabajo mecánico. - Oleadas. Agrupa por dependencias. Por defecto ≤4 sesiones paralelas por oleada (límites de tasa y tu propia capacidad de revisión). Una tarea con exactamente una dependencia comienza desde la rama de esa dependencia (
source_branch). Una tarea con varias dependencias necesita que se fusionen primero — eso requiere un "sí" explícito del usuario (reglas de la Fase 6), así que prefiere planes que lo eviten. - La integración y la verificación final siempre quedan con el coordinador.
Fase 3 — Mostrar el plan, obtener una confirmación
- Renderiza el panel (todas las tareas
planned, faseplan) — ver Panel a continuación. - Debajo, en prosa: las oleadas, qué hace cada sesión, qué rutas posee, y cualquier cosa que confirmarás (T0).
- Haz una
AskUserQuestion: "¿Lanzar N sesiones según este plan?" → opciones "Lanzar (Recomendado)" / "Cambiar el plan". El "sí" del usuario es la solicitud para iniciar esas sesiones.
Después del "sí", ejecuta hasta el final sin aprobaciones adicionales excepto: fusionar ramas, cualquier cosa destructiva, hacer push/PRs, y preguntas que la especificación no pueda responder.
Fase 4 — Lanzar una oleada
- Llama a
mark_chapter(ej. "Oleada 1: lanzando sesiones"). - Para cada tarea: escribe una línea de título en negrita y una frase sobre lo que hará la sesión, luego llama a
start_sessioncon:initiation: "user_asked",context: "fresh",use_worktree: true,wake_when_done: truetitle,name(estilot1-api, ≤24 caracteres),branch_name(orch-t1-api)prompt: la instrucción del trabajador construida desdereferences/worker-brief.mdbackground(≥80 caracteres): objetivo, puntos clave de la especificación, cómo encaja esta pieza con las demássource_branch: la rama de la dependencia para tareas con una sola dependenciamodel: solo cuando la tarea es mecánica y un modelo más barato encaja
- Almacena
session_id(local_…),name, rama en el archivo de estado; estadorunning; regístralo; vuelve a renderizar el panel. - Termina tu turno. No consultes — la aplicación te despierta con un mensaje
<side-sessions-event>cuando los trabajadores terminan un turno.
Fase 5 — Supervisar
En cada reactivación (un <side-sessions-event>, un mensaje entre sesiones, o el usuario preguntando por el estado):
list_sessions {"linked": true}para el estado de cada trabajador.- Lee la línea de estado de cada trabajador desde su informe. Los trabajadores comienzan su informe con
[T2] DONE 100% — …,[T2] IN_PROGRESS 60% — …o[T2] BLOCKED — <pregunta>. - Verificar, no confiar. Un informe es una afirmación. Para DONE:
git log --oneline <base>..<branch>ygit diff --stat <base>...<branch>; marca archivos cambiados fuera deowns; verifica los criterios de finalización (pide al trabajador la salida de pruebas, o ejecuta comprobaciones baratas tú mismo dentro de su worktree). - Bloqueado: si la especificación lo responde, responde con
SendMessageal idlocal_…del trabajador. Si no, pregunta al usuario y reenvía sus palabras exactas. Nunca pidas a un trabajador que haga algo que fue denegado o que estaría bloqueado en esta sesión. - Retrabajo: envía problemas concretos mediante
SendMessage; estadorework. - Estancado (inactivo, sin línea de estado): pídele una vez una línea de estado.
- Actualiza el archivo de estado y vuelve a renderizar el panel — solo cuando algo cambió.
- Cuando las dependencias de una oleada estén todas
doney verificadas, lanza la siguiente oleada (ya aprobada).
Para una vista rápida de una sesión aún en ejecución cuando el usuario lo pida, mcp__ccd_session_mgmt__list_events muestra su actividad más reciente; no hagas esto de forma rutinaria. Los porcentajes de progreso provienen solo de los informes de los trabajadores o hechos verificados — nunca inventes progreso.
Fase 6 — Integrar y verificar
- Panel final (fase
integrating). Lista cada rama de trabajador por ref completa (refs/heads/…). - Pregunta si fusionarlas en una rama de integración
orch/<slug>en este checkout. Fusiona solo con el "sí" explícito del usuario — no por sugerencia de un trabajador. - Fusiona en orden de dependencia, resuelve conflictos, ejecuta la compilación completa y la suite de pruebas.
- Informe: criterios de aceptación como tabla (cumplido / no cumplido / no verificado con razón), resultados de pruebas con resultados reales, riesgos restantes. Fase
done, panel final. - Ofrece archivar las sesiones de trabajadores (solo si hay un "sí"). Nunca hagas push ni abras un PR sin aprobación.
Panel
El panel es una plantilla fija: assets/dashboard.html. Léele una vez por conversación (de nuevo después de una compresión de contexto). Antes del primer renderizado, llama a mcp__visualize__read_me con modules: ["interactive"] (silenciosamente). Luego llama a mcp__visualize__show_widget con el contenido de la plantilla donde solo la línea const STATE = {…}; es reemplazada por el JSON de estado actual (minificado, JSON válido). Mantén el diseño tal cual — la consistencia entre actualizaciones es lo que permite al usuario leer el progreso de un vistazo. title: orchestration_<slug>_dashboard.
Renderízalo: después del plan, después de cada lanzamiento, después de cada reactivación que cambió algo, y al final. Las explicaciones van en prosa junto a él, no dentro del widget.
Respaldo sin herramientas de sesión
Si start_session no está disponible, ejecuta cada tarea como un subagente en segundo plano: Agent con isolation: "worktree" y run_in_background: true, misma instrucción. Se te notifica al finalizar; todo lo demás (estado, panel, verificación, integración) sigue igual, con los ids de los agentes en el campo session. Dile al usuario que estos trabajadores no pueden ser abiertos y dirigidos como las sesiones.
Reglas básicas
- Mantén al coordinador ligero: no implementes tareas de trabajadores aquí; pequeñas piezas de pegamento y contratos T0 están bien.
- Sigue los límites de aprobación global del usuario (sin push, despliegue, operaciones destructivas o instalaciones sin aprobación) y transmítelos en cada instrucción.
- Informa los resultados fielmente: di qué comprobaciones se ejecutaron, cuáles fallaron, cuáles no se ejecutaron.