Orchestrate (Orquestar)

Coordina un trabajo grande dividiéndolo en tareas paralelas que se ejecutan en sesiones independientes de Claude Code Desktop, supervisando el progreso, lanzando oleadas dependientes e integrando los resultados.

¿Qué es Orchestrate (Orquestar)?

Esta habilidad convierte a la sesión actual de Claude Code en un **coordinador** que gestiona trabajos complejos dividiéndolos en tareas independientes, cada una ejecutada en su propia sesión de Claude Code Desktop (con su propio *worktree* de git y rama). Primero entrevista al usuario hasta comprender completamente los requisitos, luego diseña un plan con tareas que tienen propiedad exclusiva de archivos para evitar conflictos de fusión. Lanza las sesiones en oleadas según las dependencias, supervisa su progreso (verificando resultados, no solo confiando en informes), lanza oleadas posteriores y finalmente integra y verifica todo. Incluye un panel de control visual en vivo que muestra el estado de cada tarea. Es ideal para microservicios, refactorizaciones grandes o cualquier proyecto que pueda descomponerse en piezas paralelas y débilmente acopladas. Se apoya en las herramientas de sesión de Claude Code Desktop (`start_session`, `list_sessions`, `SendMessage`) y en `mcp__visualize__show_widget` para el panel. Incluye un plan de respaldo si las herramientas de sesión no están disponibles (usando `Agent` con `isolation: worktree` y `run_in_background: true`).

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/NicatAv/orchestrate-skill/tree/HEAD/skills/orchestrate

Installed? Explore more Productividad y colaboración skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

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

  1. Inspeccionar antes de preguntar. Lee README / CLAUDE.md / archivos de reglas, la estructura, los comandos de compilación y prueba, git status y la rama actual. Responde desde el código lo que el código pueda responder; solo pregunta al usuario lo que no pueda.
  2. 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.
  3. 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.
  4. 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 un model má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

  1. Renderiza el panel (todas las tareas planned, fase plan) — ver Panel a continuación.
  2. Debajo, en prosa: las oleadas, qué hace cada sesión, qué rutas posee, y cualquier cosa que confirmarás (T0).
  3. 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

  1. Llama a mark_chapter (ej. "Oleada 1: lanzando sesiones").
  2. 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_session con:
    • initiation: "user_asked", context: "fresh", use_worktree: true, wake_when_done: true
    • title, name (estilo t1-api, ≤24 caracteres), branch_name (orch-t1-api)
    • prompt: la instrucción del trabajador construida desde references/worker-brief.md
    • background (≥80 caracteres): objetivo, puntos clave de la especificación, cómo encaja esta pieza con las demás
    • source_branch: la rama de la dependencia para tareas con una sola dependencia
    • model: solo cuando la tarea es mecánica y un modelo más barato encaja
  3. Almacena session_id (local_…), name, rama en el archivo de estado; estado running; regístralo; vuelve a renderizar el panel.
  4. 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):

  1. list_sessions {"linked": true} para el estado de cada trabajador.
  2. 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>.
  3. Verificar, no confiar. Un informe es una afirmación. Para DONE: git log --oneline <base>..<branch> y git diff --stat <base>...<branch>; marca archivos cambiados fuera de owns; verifica los criterios de finalización (pide al trabajador la salida de pruebas, o ejecuta comprobaciones baratas tú mismo dentro de su worktree).
  4. Bloqueado: si la especificación lo responde, responde con SendMessage al id local_… 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.
  5. Retrabajo: envía problemas concretos mediante SendMessage; estado rework.
  6. Estancado (inactivo, sin línea de estado): pídele una vez una línea de estado.
  7. Actualiza el archivo de estado y vuelve a renderizar el panel — solo cuando algo cambió.
  8. Cuando las dependencias de una oleada estén todas done y 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

  1. Panel final (fase integrating). Lista cada rama de trabajador por ref completa (refs/heads/…).
  2. 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.
  3. Fusiona en orden de dependencia, resuelve conflictos, ejecuta la compilación completa y la suite de pruebas.
  4. 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.
  5. 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.

Skills relacionados