¿Qué hace plan-orquestar?
Puente entre un documento de plan y /orchestrate custom emitiendo una invocación lista para pegar por paso. La habilidad es solo generativa — nunca ejecuta /orchestrate. El usuario pega cada línea cuando esté listo.
Cuándo activar
- El usuario tiene un documento de plan de varios pasos (PRD, RFC, plan de implementación) y quiere ejecutarlo mediante
/orchestrate. - El usuario dice "orquestar este plan", "dame prompts de orchestrate para cada paso", "compón cadenas para este plan".
- Existe un plan paso a paso pero el usuario no quiere seleccionar agentes manualmente por paso.
Saltar cuando:
- El trabajo es un paso ad-hoc → llamar
/orchestrate customdirectamente. - El plan es ilegible o está vacío. La falta de numeración explícita por sí sola no es condición de salto — ver el caso límite "Sin pasos claros" más abajo.
Entradas
<ruta-plan> [--lang=python|typescript|go|rust|cpp|java|kotlin|flutter|auto] [--scope=all|step:<n>|range:<a>-<b>] [--dry-run]
<ruta-plan>— obligatorio; ruta relativa o absoluta (se acepta@docs/...).--lang— variante de lenguaje del revisor; por defectoauto(detectado del proyecto).--scope— limita los pasos emitidos; por defectoall.--dry-run— imprime solo la descomposición y la justificación de la cadena; no emitir prompts finales.
Forma autorizada de /orchestrate (no desviarse)
{ORCH_CMD} custom "<agente1>,<agente2>,...,<agenteN>" "<descripción de la tarea>"
Donde {ORCH_CMD} se determina en la Fase 0 (ver más abajo). La cadena de comando en la salida emitida siempre usa una forma concreta — nunca ambas, nunca un marcador de posición.
customes una cadena secuencial; la TRANSFERENCIA de cada agente alimenta al siguiente.- Lista de agentes separada por comas. Sin espacios preferiblemente; se tolera un espacio.
- No existen banderas
--mode/--gate/--agents=...— nunca inventarlas. - Los nombres de agentes provienen del catálogo de esta habilidad. Las comillas dobles incrustadas en la descripción de la tarea se escapan como
\".
Forma de instalación de ECC y espacios de nombres
Dos formas de instalación determinan el prefijo tanto en el comando slash como en cada nombre de agente. Las dos DEBEN mantenerse sincronizadas — una forma por salida, nunca mezcladas:
Sea <home-claude> el directorio home de Claude Code: ~/.claude en macOS/Linux, %USERPROFILE%\.claude en Windows. Resuélvelo como la plataforma anfitriona resuelve el directorio home del usuario (no codificar ~).
| Forma | Detección | {ORCH_CMD} | Formato del nombre del agente |
|---|---|---|---|
| Instalación como plugin (2.0.0+) | <home-claude>/plugins/marketplaces/ecc/ existe | /ecc:orchestrate | ecc:<nombre> |
| Instalación básica heredada | Lo anterior ausente; archivos de agente bajo <home-claude>/agents/ | /orchestrate | <nombre> |
Por qué importa: bajo la instalación como plugin, los agentes se registran como ecc:tdd-guide. Los nombres simples fuerzan coincidencias difusas, que fallan intermitentemente bajo llamadas paralelas. Bajo el legado, las formas prefijadas no están registradas y fallan directamente.
Catálogo de agentes disponibles (debe elegir de estos)
Generales:
planner— reformulación de requisitos, descomposición de riesgos, planificación de pasosarchitect— arquitectura, diseño de sistemas, propuestas de refactorizacióntdd-guide— escribir pruebas → implementar → 80%+ coberturacode-reviewer— revisión de código genéricasecurity-reviewer— auditoría de seguridad, OWASP, fuga de secretosrefactor-cleaner— código muerto, duplicados, limpieza tipo knipdoc-updater— documentación, mapa de código, READMEdocs-lookup— consultas de API de bibliotecas de terceros (Context7)e2e-runner— orquestación de pruebas extremo a extremodatabase-reviewer— esquema PostgreSQL, migración, rendimientoharness-optimizer— configuración local del arnés de agenteloop-operator— bucles autónomos de larga duraciónchief-of-staff— triaje multicanal (rara vez adecuado para pasos de plan)
Resolvedores de errores de compilación:
build-error-resolver(genérico) /cpp-build-resolver/go-build-resolver/java-build-resolver/kotlin-build-resolver/rust-build-resolver/pytorch-build-resolver
Revisores de código:
python-reviewer/typescript-reviewer/go-reviewer/rust-reviewer/cpp-reviewer/java-reviewer/kotlin-reviewer/flutter-reviewer
Un nombre de agente mal escrito falla /orchestrate. Verificar contra esta lista antes de emitir.
Cómo funciona
Fase 0 — Detectar modo ECC + lenguaje
-
Leer
<ruta-plan>. Si falta o está vacío, informar y detenerse. -
Detectar la forma de instalación de ECC una vez y congelarla en
MODO_ECC. Algoritmo (ejecutar en orden, detenerse en la primera coincidencia):- Si
<home-claude>/plugins/marketplaces/ecc/existe →MODO_ECC=plugin. - Si no, si
<home-claude>/agents/existe y contiene al menos un archivo de agente ECC (por ejemplotdd-guide.md,code-reviewer.md) →MODO_ECC=legacy. - Si no → por defecto
MODO_ECC=legacyy emitir una advertencia de una línea al inicio de la salida:> Advertencia: no se pudo detectar la instalación de ECC; usando la forma heredada por defecto. Si usas la instalación como plugin, edita los prefijos manualmente. - Si ambos marcadores existen (instalación mixta),
plugingana — el espacio de nombres del plugin es el único que resuelve nombres de agentes sin coincidencias difusas.
A partir de este punto, cada línea emitida usa el prefijo correspondiente tanto en el comando slash como en cada nombre de agente. Nunca emitir ambas formas en la misma salida.
- Si
-
Resolver
--lang. Cuando esauto, ejecutar una detección políglota:- Probar marcadores:
pyproject.toml/uv.lock/requirements.txt→ python;package.json→ typescript;go.mod→ go;Cargo.toml→ rust;CMakeLists.txto*.cppde nivel superior → cpp;pom.xml/build.gradle(Java) → java;build.gradle.ktso Kotlin de nivel superior → kotlin;pubspec.yaml→ flutter. - Desempate políglota: si más de un marcador coincide, elegir el lenguaje cuyos archivos fuente superen en número a los demás (contar con
git ls-files, excluyendovendor/,node_modules/,dist/,build/,.venv/, archivos generados y accesorios de prueba obvios). En caso de empate o cuando ningún lenguaje supere el 60% de los archivos fuente, establecerlang=unknown. - Sin marcador coincidente → establecer
lang=unknown. lang=unknownes un centinela — no es un nombre de agente. Las reglas 4 y 5 de la Fase 2 lo convierten encode-reviewer/build-error-resolveral momento de componer la cadena.
- Probar marcadores:
-
Detectar un sub-perfil PyTorch: cuando
lang=pythony cualquiera depyproject.toml/requirements.txt/uv.lockdeclara una dependencia detorch, establecerpytorch=true. Esto solo afecta la selección de la cadenabuild(regla de Fase 2 más abajo); el revisor sigue siendopython-reviewer. -
Normalizar cualquier nombre de agente declarado en el plan: si el texto del plan referencia agentes por su forma prefijada del plugin (por ejemplo
ecc:tdd-guide), eliminar el prefijo para obtener el nombre del catálogo antes de validar o componer cadenas. El re-prefijado ocurre solo en el momento de la salida segúnMODO_ECC(Fase 4). Nunca permitir que un nombre prefijado fluya hacia la composición de la cadena — se prefijaría doblemente en modo plugin.
Fase 1 — Descomponer pasos
Identificar "unidades de paso" en orden de prioridad:
- Numeración explícita:
## Paso N/### Fase N/## N. .../ lista ordenada de nivel superior. - Una columna "Paso" en una tabla.
- Bloques separados por
---con encabezados que comienzan con verbo. - De lo contrario, tratar cada H2 como un paso.
Por paso extraer id (basado en 1), título (≤ 80 caracteres), intención (1–3 oraciones), etiquetas.
Fase 2 — Etiquetar y elegir cadena
Etiquetar por intención (multi-etiqueta permitida; la cadena se construye a partir de la primaria + secundarias apiladas):
Las palabras desencadenantes a continuación se comparan sin distinción de mayúsculas/minúsculas. Los planes multilingües se admiten haciendo coincidir las raíces de las palabras en cualquier idioma siempre que el significado se alinee con las palabras desencadenantes en inglés listadas.
| Etiqueta | Palabras desencadenantes | Cadena predeterminada |
|---|---|---|
design | architecture, design, choose, evaluate, RFC | planner,architect |
plan | plan, breakdown, milestone | planner |
impl | implement, build, add, create, port | tdd-guide,<lang>-reviewer |
test | test, coverage, e2e, integration | tdd-guide,e2e-runner |
refactor | refactor, cleanup, dedupe, split | architect,refactor-cleaner,<lang>-reviewer |
migration | migrate, upgrade, rewrite, port | architect,tdd-guide,<lang>-reviewer |
db | schema, migration, index, SQL, Postgres, alembic, sqlmodel | database-reviewer,<lang>-reviewer |
security | encrypt, auth, secret, OWASP, PII | security-reviewer,<lang>-reviewer |
build | build, compile, lint failure, CI | <lang>-build-resolver (fallback a build-error-resolver) |
docs | docs, readme, codemap, changelog | doc-updater |
lookup | lookup, reference, API usage | docs-lookup |
review | review, audit, verify | <lang>-reviewer,code-reviewer |
loop | loop, autonomous, watchdog | loop-operator |
Reglas de composición de cadenas:
- Selección de etiqueta primaria: cuando un paso coincide con múltiples etiquetas, la primera en orden de la tabla (parte superior de la tabla = mayor prioridad) es la primaria; el resto son secundarias. Las reglas de composición 2 y 3 a continuación manejan combinaciones específicas de múltiples etiquetas explícitamente; de lo contrario, agregar cadenas secundarias en orden de la tabla de etiquetas.
impl+security→tdd-guide,<lang>-reviewer,security-reviewer.impl+db→tdd-guide,database-reviewer,<lang>-reviewer.- Desduplicar la cadena resultante (conservar la primera aparición). Por ejemplo,
review+lang=unknowndaríacode-reviewer,code-reviewerdespués de la regla 5; la desduplicación lo reduce acode-reviewer. <lang>-reviewerse resuelve comocode-reviewercuandolang=unknown.<lang>-build-resolverse resuelve comobuild-error-resolvercuandolang=unknown. Caso especial: si la Fase 0 estableciópytorch=true, usarpytorch-build-resolverpara cadenasbuildindependientemente de<lang>. No existepython-build-resolver;--lang=pythonsinpytorch=truese resuelve comobuild-error-resolver.- Pasos sin etiquetas: si ninguna palabra desencadenante coincide, establecer la cadena como
code-reviewery escribirno se encontró etiqueta; cadena solo de revisión por defectobajo "Justificación de la cadena". - Longitud de la cadena ≤ 4 después de la desduplicación. Si se excede, eliminar la etiqueta más débil (
lookupydocsprimero). - No emparejar
planneryarchitecten una cadenaimpl(desperdicio de tokens). Emparejarlos solo en pasosdesign. - Los pasos etiquetados
impl,refactoromigrationterminan con un agente de clase revisor — cualquiera de<lang>-reviewer,code-reviewer,security-reviewerodatabase-reviewer. El revisor más específico del dominio gana la posición final (por ejemplo, la regla 2impl+securitytermina consecurity-reviewer; la regla 3impl+dbtermina con<lang>-reviewerporquedatabase-reviewerya controla la migración antes en la cadena). Los pasostestybuildestán controlados por sus propios validadores (e2e-runnery el resolvedor de compilación respectivamente) y no requieren un revisor adicional.
Fase 3 — Comprimir descripción de la tarea
Cada <descripción de la tarea> emitida debe:
- Ser autocontenida (el primer agente no necesita tener el documento del plan abierto).
- Comenzar con
[Plan: <ruta>#step-<id>]. - Incluir de 1 a 3 criterios de aceptación verificables.
- Incluir un guardia de alcance (
Fuera de alcance: ...) solo si el plan declara uno para este paso. Heredar textualmente. Si el plan no tiene una declaración de fuera de alcance, omitir la cláusula por completo — no inventar una. - Tener de 200 a 600 caracteres; una línea; comillas
"incrustadas escapadas como\"; sin saltos de línea literales.
Fase 4 — Salida
Emitir Markdown usando la forma determinada por MODO_ECC. La salida usa una forma en todo momento — cada {ORCH_CMD} y cada nombre de agente se renderiza con el prefijo correspondiente de la Fase 0. No emitir ambas formas; no incluir instrucciones "esta es forma de plugin" / "eliminar el prefijo" en la salida renderizada.
Reglas de renderizado concretas:
{ORCH_CMD}=/ecc:orchestratebajoplugin,/orchestratebajolegacy.{AGENTE(nombre)}=ecc:<nombre>bajoplugin,<nombre>bajolegacy.- La columna "Cadena" de la tabla de resumen usa la misma renderización
{AGENTE(nombre)}. - Los bloques bash por paso contienen solo el comando ejecutable. Sin comentarios
# forma plugino# forma legacy— la forma es implícita y uniforme en toda la salida.
Estructura de la salida:
# Resultado de Plan-Orquestar
**Plan**: `<ruta>`
**Idioma**: `<detectado-o-dado>`
**Modo ECC**: `<plugin | legacy>`
**Pasos**: <N>
**Alcance**: <all | step:n | range:a-b>
## Resumen de pasos
| # | Título | Etiquetas | Cadena |
|---|---|---|---|
| 1 | ... | impl, db | `{AGENTE(tdd-guide)},{AGENTE(database-reviewer)},{AGENTE(python-reviewer)}` |
| ... | | | |
---
## Paso 1 — <título>
**Intención**: <1–3 oraciones>
**Etiquetas**: <a, b>
**Justificación de la cadena**: <por qué esta cadena; qué agente cierra el ciclo>
```bash
{ORCH_CMD} custom "{AGENTE(tdd-guide)},{AGENTE(database-reviewer)},{AGENTE(python-reviewer)}" "[Plan: docs/foo.md#step-1] <descripción comprimida de la tarea>; Aceptación: <1–3 ítems>; Fuera de alcance: <…>"
```
La notación
{ORCH_CMD}y{AGENTE(...)}arriba describe la sustitución que esta habilidad realiza en tiempo de ejecución. El Markdown realmente emitido contiene las cadenas resueltas, nunca los marcadores de posición.
Agregar un bloque final de "Ejecución por lotes" que agregue el comando de cada paso en orden para que el usuario pueda pegarlos todos a la vez. Omitir el bloque por lotes en modo solo resumen (ver caso límite "Plan grande"): cuando solo se emite la tabla de resumen, no hay comandos por paso que agregar.
Fase 5 — Autoverificación (ejecutar antes de emitir)
- Cada agente en cada cadena proviene del catálogo (después de eliminar cualquier prefijo
ecc:que apareciera en el plan; ver Fase 0 paso 5). - El
{ORCH_CMD}resuelto y cada{AGENTE(...)}resuelto usan la misma forma (pluginolegacy) — nunca mezclados en una misma salida. - Sin anotaciones
# forma plugin/# forma legacyni instrucciones "eliminar el prefijo" en la salida renderizada. - Sin campos inventados
--mode/--gate/--agents=.... - Cada descripción de tarea es de una sola línea, entre comillas dobles, con comillas incrustadas escapadas.
- Cada descripción de tarea comienza con
[Plan: <ruta>#step-<id>]e incluye Aceptación (1–3 ítems). La cláusulaFuera de alcance:está presente solo cuando se hereda del plan. - Sin agente duplicado en ninguna cadena después de la desduplicación de la Fase 2.
- Longitud de la cadena ≤ 4.
- Los pasos etiquetados
impl/refactor/migrationterminan con un agente de clase revisor (<lang>-reviewer,code-reviewer,security-reviewerodatabase-reviewer). Los pasostest/buildterminan con su validador específico. - Cada paso tiene al menos una etiqueta (por defecto
review).
Casos límite
Sin pasos claros
El plan carece de divisiones explícitas (H2, numeración). En este caso, tratar todo el plan como un solo paso con id=1 y título "Análisis completo del plan". Elegir la cadena según las etiquetas dominantes detectadas en todo el documento.
Plan grande
15 pasos. Presentar solo la tabla de resumen y solicitar confirmación antes de emitir los bloques bash por paso. El mensaje debe decir explícitamente: "Este plan tiene N pasos. ¿Quieres que genere las invocaciones completas de
/orchestratepara cada paso (s/n)?" Si la respuesta es negativa, detenerse después de la tabla. El bloque de ejecución por lotes nunca se emite en modo solo resumen.
Plan sin extensión de archivo
El usuario pasa una ruta sin extensión o un contenido en línea. Intentar detectar el formato por el contenido (JSON → buscar claves steps, phases, milestones; Markdown → analizar como de costumbre; texto sin formato → tratar como análisis de pasos básico). Si falla, informar y pedir una ruta de archivo.
Políglota verdadero
El proyecto contiene marcadores para múltiples lenguajes pero la repartición de archivos reales está equilibrada (ningún lenguaje supera el 60%). lang=unknown como se describe arriba. Los pasos reciben revisores genéricos a menos que el usuario pase --lang explícitamente.
Registro de cambios
- v1 — implementación inicial que une plan documentado y
/orchestrate.