Orquestación multiagente
Ejecuta muchos agentes. Que el orden lo decida un controller.
Hay trabajo cuyo orden no se puede escribir de antemano. Pon type: controller, declara qué debe ser cierto al terminar la ejecución y Dagu deja que un modelo elija el siguiente paso de agente a medida que llegan los hallazgos. Cada acción sigue siendo un paso de workflow corriente, con logs, reintentos, aprobaciones e historial de auditoría.
# code-review.yaml
type: controller
llm:
provider: anthropic
model: claude-opus-5
system: |
Get top_n.py past both reviews. When a review fails, pass its finding
to revise, then ask that same reviewer again. A revision made for one
reviewer can break the other.
steps:
- name: review_simplicity
description: Judge simplicity. Prints PASS, or FAIL with what to change.
action: harness.run
with:
provider: opencode
prompt: Read top_n.py. Print "PASS" or "FAIL: <what to change>".
- name: review_correctness
description: Judge correctness. Prints PASS, or FAIL with the bug.
action: harness.run
with:
provider: codex
prompt: Read top_n.py. Print "PASS" or "FAIL: <the bug>".
- name: revise
description: Edit top_n.py to resolve one review finding.
action: dag.run
with: { dag: revise }
tasks:
- name: simplicity_passed
description: The latest simplicity review returned PASS on the current file.
- name: correctness_passed
description: The latest correctness review returned PASS on the current file.Declara criterios de finalización, no el orden de los pasos
Cada acción es una CLI de agente real: Claude, Codex, Gemini, OpenCode
Cada tarea se cierra como completed, skipped o failed
Las pausas a la espera de una respuesta humana no dejan ningún proceso vivo
At a glance
Workflows controller frente a frameworks de agentes
Tú declaras los criterios de finalización. La ejecución acaba cuando no queda ninguna tarea abierta.
O el modelo decide que ha terminado, o todos los caminos se dibujan antes y se mantienen a mano.
Una ejecución en espera termina su proceso y se reanuda en otro.
Las esperas largas suelen implicar un proceso vivo y un almacén de estado que operar.
Programaciones, colas, reintentos, artefactos y auditoría vienen de la ejecución de DAG.
Se reconstruye en cada proyecto, o se delega en un control plane gestionado.
El conjunto de pasos del archivo de workflow.
Todo lo que permitan las definiciones de herramientas.
In depth
Where each tool fits
El orden es justo la parte que no se puede escribir
Un grafo puede ramificar según un código de salida. No puede ramificar según lo que una revisión dijo realmente. Un workflow controller mantiene fijas las acciones y solo cede la ordenación.
- Los pasos pasan a ser un catálogo de acciones, así que no queda ningún depends que mantener
- Una lista tasks declara qué debe ser cierto cuando la ejecución termine
- El controller lleva el hallazgo de un agente a los parámetros del siguiente
El modelo elige el orden, nunca la capacidad
El controller elige solo entre los pasos que declaraste. No puede inventar un paso, escribir su propio comando de shell ni alcanzar nada que el archivo no nombre, así que el radio de impacto es la definición del workflow.
- Ejecuta cada agente en el host o en un sandbox de contenedor con montajes y reglas de salida explícitas
- Da a cada rol su proveedor y su modelo, para que ningún modelo califique su propio trabajo
- Lo que acabas confiando pasa a un subworkflow y deja de ser una decisión
Los controles de producción vienen de la ejecución, no de un framework
Una ejecución de controller es una ejecución de DAG. Programaciones, colas, reintentos, artefactos e historial de auditoría se aplican igual, y los límites de gasto del agente son ajustes del motor en lugar de instrucciones en el prompt.
- ask_user suspende la ejecución de forma duradera: el proceso termina y se libera la ranura del worker
- Alguien responde horas después y la ejecución se reanuda en un proceso nuevo
- Los límites de turnos, intentos y preguntas hacen fallar la ejecución en vez de gastar sin frontera
Reconstruir cualquier ejecución después
Un controller no tiene aristas de dependencia, así que la ejecución se presenta como la secuencia de decisiones que realmente tomó y no como un grafo.
- Una línea de tiempo de decisiones: una fila por turno, con intentos, duraciones y enlace a la ejecución hija
- Una vista de tareas que muestra por qué el controller cerró cada objetivo
- La transcripción completa, incluido cada resultado de herramienta que vio el modelo
FAQ
Practical questions before adopting Dagu
¿En qué se diferencia un workflow controller de un bucle de agente?
Un bucle desnudo deja que el modelo decida cuándo ha terminado. Un controller conserva el bucle pero recupera la condición de parada: tú declaras las tareas y qué significa terminado, y la ejecución acaba cuando no queda ninguna tarea abierta.
¿Qué pasa si una tarea resulta innecesaria?
El controller la marca como skipped y registra el motivo, y la ejecución sigue siendo un éxito. Skipped y failed son estados distintos porque «no había nada que hacer» y «no se pudo hacer» son resultados diferentes en un registro de auditoría.
¿Pueden usar modelos distintos los distintos pasos?
Sí. Cada paso de Agent Harness nombra su propio proveedor y modelo, y el modelo del propio controller se configura aparte, de modo que un modelo barato puede dirigir especialistas caros o dos proveedores pueden revisarse entre sí.
¿Cómo evito que una ejecución gaste sin límite?
Los límites los aplica el motor. Una acción se ejecuta como mucho cinco veces por ejecución, se hacen como mucho cinco preguntas, y el límite de turnos es cincuenta por defecto y se puede bajar. Alcanzar un límite hace fallar la ejecución y nombra lo que quedó abierto.
¿Cuándo conviene seguir usando un grafo normal?
Si puedes dibujar el grafo, dibújalo. type: graph sigue siendo el valor por defecto porque es más rápido, más barato y reproducible. Recurre al controller solo cuando el orden dependa de verdad de lo que produjeron los pasos anteriores.
Next step
Start with one workflow.
Install Dagu, move one fragile script or agent task into YAML, and decide from a real run history.