Chair y workers
Un Chair por proyecto, elegido por llegada. Un segundo Chair interactivo se rechaza, y los workers no pueden lanzar workers.
Qué es#
Dos roles, y solo dos.
| Rol | Cómo se define | ¿Puede lanzar workers? |
|---|---|---|
chair |
El primer asiento interactivo orch <agent> de un proyecto, abierto sin tarea |
Sí — dispatch_worker, task_add, task_run |
worker |
Creado por task_run o dispatch_worker, o cualquier proceso con ORCH_ROLE=worker |
No — el intento da error |
tú, escribiendo en la interfaz del agente
|
Chair (uno por proyecto git)
/ | \
worker worker worker (un worktree orch/<session> cada uno)
\ | /
msg_send / ask / verify_report
|
Chair
La elección es por llegada, no por configuración. Abres orch claude en un proyecto y ese asiento es el Chair. Abres un segundo asiento interactivo en el mismo proyecto y orch lo rechaza:
project already has Chair session <id> (<name>) — one Chair per project; spawn workers with orch task run, or pass --force-chair
--force-chair existe para el caso que nombra el mensaje: de verdad quieres dos Chairs vivos. Los asientos fantasma que deja una terminal muerta se limpian solos, así que rara vez debería hacer falta.
El fan-out desde un worker se deniega en ambos transportes, con la misma cadena:
dispatch_worker denied: ORCH_ROLE=worker — only the Chair may spawn (use orch msg to the Chair)
Por qué existe#
Un worker que puede lanzar workers es una bomba de bifurcación con tarjeta de crédito. Más silencioso todavía: también es un hueco de responsabilidad, porque nadie queda sosteniendo el hilo que decide cuándo la tarea está lista. Un Chair por proyecto deja un solo lugar donde se reparte el trabajo, una sola bandeja para las preguntas y un solo veredicto al final.
Reportar no es fan-out, y la regla es explícita: un worker sí puede llamar a verify_report, porque decir lo que hiciste no es lo mismo que repartir más trabajo.
Cómo se relaciona con el resto#
- Un worker que necesita una decisión levanta un ask bloqueante en vez de adivinar o de lanzar a alguien que decida por él.
- Cada worker lanzado recibe por defecto un worktree git
orch/<session>;orch worktree status,orch worktree promote <session>yorch worktree pruneson su ciclo de vida.promotecierra en falso ante conflictos y nunca hace push. - Una tarea puede llevar
contextde fondo y una lista deacceptance_criteria; cada criterio se renderiza en el prompt del worker como una casilla sin marcar y tiene que volver porverify_reportmarcado como cumplido o no. Un worker que nunca reporta los deja a todos como incumplidos en el board, a propósito. - Cuando
clarify_before_spawnestá activo, lanzar queda supeditado a queorch ledger checkpase, salvo que la llamada useforce.
Aquí no hay nada que ejecutar#
Eliges un Chair abriendo un asiento, y lanzas un worker pidiéndoselo al Chair en el chat. orch dispatch --prompt "…" existe para scripts y CI, no para el uso diario.