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.

Dos revisores, un corrector, ningún depends
# 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

Finalización
Dagu

Tú declaras los criterios de finalización. La ejecución acaba cuando no queda ninguna tarea abierta.

Framework de agentes

O el modelo decide que ha terminado, o todos los caminos se dibujan antes y se mantienen a mano.

Durabilidad
Dagu

Una ejecución en espera termina su proceso y se reanuda en otro.

Framework de agentes

Las esperas largas suelen implicar un proceso vivo y un almacén de estado que operar.

Operación
Dagu

Programaciones, colas, reintentos, artefactos y auditoría vienen de la ejecución de DAG.

Framework de agentes

Se reconstruye en cada proyecto, o se delega en un control plane gestionado.

Radio de impacto
Dagu

El conjunto de pasos del archivo de workflow.

Framework de agentes

Todo lo que permitan las definiciones de herramientas.

In depth

Where each tool fits

01

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
02

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
03

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
04

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.