Alternativa ao LangGraph

Um runtime para workflows de agentes, não uma biblioteca dentro da sua aplicação.

LangGraph é um bom jeito de expressar um grafo de agentes em código. O Dagu é a camada que executa isso: um único binário auto-hospedado onde o workflow é YAML, os agentes são etapas comuns, e agendamentos, filas, retries, pausas duráveis e histórico vêm do motor em vez da aplicação que você escreve em volta.

Um workflow de agente agendado, sem nada em volta
# triage.yaml
schedule: "*/15 * * * *"
max_active_runs: 1

steps:
  - id: fetch
    run: ./scripts/fetch-new-issues.sh
    output: ISSUES

  - id: classify
    action: harness.run
    with:
      provider: claude
      prompt: Classify each issue in ${ISSUES}. Return JSON.
    output_schema: schemas/triage.json
    retry_policy:
      limit: 3
      interval_sec: 30
    depends: [fetch]

  - id: apply_labels
    run: ./scripts/apply-labels.sh
    depends: [classify]

Workflows são YAML, não código de aplicação

Etapas são processos, então qualquer linguagem ou CLI serve

Agendamento, filas, retries e histórico já vêm no binário

Runs em espera liberam o processo e retomam depois

At a glance

LangGraph e Dagu para quem precisa operar

Formato
Dagu

Um motor de workflow que você executa como binário.

LangGraph

Uma biblioteca embutida em uma aplicação Python ou JavaScript.

Definição
Dagu

YAML declarativo, versionado ao lado do código que ele executa.

LangGraph

Construção do grafo no código da aplicação.

Operação
Dagu

Agendamentos, filas, retries, artefatos e histórico vêm com o motor.

LangGraph

Checkpointers persistem o estado do grafo; agendamento e exposição vêm do seu serviço ou do LangGraph Platform.

Unidade de trabalho
Dagu

Um processo: qualquer linguagem, qualquer CLI, em contêiner se preciso.

LangGraph

Uma função dentro do processo hospedeiro.

In depth

Where each tool fits

01

Uma biblioteca precisa de uma aplicação. Um motor não.

O LangGraph monta o grafo. Ainda assim, algo precisa agendá-lo, enfileirá-lo, repeti-lo, persistir seu estado e mostrar o que aconteceu. Esse algo é o serviço que você escreve, ou o LangGraph Platform. O Dagu já é essa camada.

  • Rode um binário. Não há serviço web para escrever nem pool de workers para projetar
  • Agendamento, filas, retries e histórico são recursos do motor, não integrações
  • A mesma definição roda em um notebook, em uma VM ou em um coordinator com workers
02

Etapas são processos, então o workflow não fica preso a uma linguagem

Nós do LangGraph são funções Python ou JavaScript rodando no seu processo. Uma etapa do Dagu é um comando, então a unidade de trabalho é o que já roda no seu ambiente.

  • Chame scripts shell, binários, contêineres, comandos SSH, endpoints HTTP e SQL de um só workflow
  • Rode agentes de código via harness.run: Claude, Codex, Gemini, OpenCode ou um CLI interno
  • Dê a qualquer etapa um sandbox de contêiner com montagens, toolchain e regras de saída explícitas
03

Desenhe o grafo quando der, entregue a ordem quando não der

O LangGraph pede que você desenhe cada caminho, o que é correto até a ordem passar a depender do que um revisor disse. O Dagu mantém type: graph como padrão e acrescenta type: controller para o trabalho que nunca coube em um grafo só.

  • Um workflow controller declara critérios de conclusão e deixa o modelo escolher a próxima ação
  • O modelo escolhe apenas entre as etapas declaradas, então o raio de impacto é o arquivo
  • Os dois tipos produzem o mesmo run, com os mesmos logs, retries, artefatos e histórico

FAQ

Practical questions before adopting Dagu

O Dagu substitui o LangGraph diretamente?

Não. Eles ficam em camadas diferentes. O LangGraph serve bem quando você quer compor chamadas de modelo em Python ou JavaScript com controle fino do estado do grafo. O Dagu serve melhor quando o trabalho é um conjunto de comandos e CLIs de agentes que precisam de agendamento, retries, aprovações e trilha de auditoria.

Dá para continuar usando LangGraph dentro do Dagu?

Dá. Mantenha a aplicação LangGraph como script ou contêiner e execute-a como uma etapa. O Dagu fornece em volta o agendamento, a política de retries, os logs, os artefatos e o histórico.

Como o Dagu trata human-in-the-loop?

Tarefas humanas, e o ask_user dentro de workflows controller, suspendem o run de forma durável. O processo termina, o slot do worker é liberado, e o run retoma em um processo novo assim que alguém responde.

O Dagu precisa de banco de dados?

Não. O Dagu é um binário único que guarda definições, histórico de runs e logs como arquivos, então não há banco de metadados nem broker de mensagens para operar antes do primeiro run.

Next step

Start with one workflow.

Install Dagu, move one fragile script or agent task into YAML, and decide from a real run history.