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.
# 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
Um motor de workflow que você executa como binário.
Uma biblioteca embutida em uma aplicação Python ou JavaScript.
YAML declarativo, versionado ao lado do código que ele executa.
Construção do grafo no código da aplicação.
Agendamentos, filas, retries, artefatos e histórico vêm com o motor.
Checkpointers persistem o estado do grafo; agendamento e exposição vêm do seu serviço ou do LangGraph Platform.
Um processo: qualquer linguagem, qualquer CLI, em contêiner se preciso.
Uma função dentro do processo hospedeiro.
In depth
Where each tool fits
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
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
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.