Альтернатива LangGraph
Рантайм для агентских воркфлоу, а не библиотека внутри вашего приложения.
LangGraph — хороший способ выразить агентский граф в коде. Dagu — это слой, который его исполняет: один self-hosted бинарник, где workflow описан в YAML, агенты являются обычными шагами, а расписания, очереди, ретраи, надёжная приостановка и история запусков приходят от движка, а не от приложения, которое вы пишете вокруг.
# 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]Воркфлоу описаны в YAML, а не в коде приложения
Шаг — это процесс, поэтому подходит любой язык и любой CLI
Расписания, очереди, ретраи и история идут внутри бинарника
Ожидающий запуск освобождает процесс и продолжается позже
At a glance
LangGraph и Dagu глазами тех, кто это эксплуатирует
Движок воркфлоу, который вы запускаете как бинарник.
Библиотека, встраиваемая в приложение на Python или JavaScript.
Декларативный YAML, версионируемый рядом с кодом, который он запускает.
Построение графа в коде приложения.
Расписания, очереди, ретраи, артефакты и история запусков идут вместе с движком.
Checkpointer хранит состояние графа; расписание и обслуживание берут на себя ваш сервис или LangGraph Platform.
Процесс: любой язык, любой CLI, при необходимости внутри контейнера.
Функция внутри хост-процесса.
In depth
Where each tool fits
Библиотеке нужно приложение. Движку — нет.
LangGraph строит граф. Но кто-то всё ещё должен ставить его в расписание и очередь, повторять при сбое, хранить состояние и показывать, что произошло. Этот кто-то — ваш сервис или LangGraph Platform. Dagu уже является этим слоем.
- Запускается один бинарник. Не нужно писать веб-сервис и проектировать пул воркеров
- Расписания, очереди, ретраи и история запусков — возможности движка, а не интеграции
- Одно и то же определение работает на ноутбуке, на одной VM и в связке coordinator с воркерами
Шаги — это процессы, поэтому воркфлоу не привязан к языку
Узлы LangGraph — это функции на Python или JavaScript в вашем процессе. Шаг Dagu — это команда, поэтому единицей работы становится то, что уже запускается в вашей среде.
- Вызывайте shell-скрипты, бинарники, контейнеры, SSH-команды, HTTP-эндпоинты и SQL из одного воркфлоу
- Запускайте кодовых агентов через harness.run: Claude, Codex, Gemini, OpenCode или внутренний CLI
- Дайте любому шагу контейнерную песочницу с явными монтированиями, тулчейном и правилами egress
Рисуйте граф, когда можете, и отдавайте порядок, когда не можете
LangGraph просит нарисовать каждый путь. Это верно ровно до момента, когда порядок начинает зависеть от того, что сказал ревьюер. Dagu оставляет type: graph значением по умолчанию и добавляет type: controller для работы, которая никогда не помещалась в один граф.
- Controller-воркфлоу объявляет критерии завершения, а следующее действие выбирает модель
- Модель выбирает только среди объявленных шагов, поэтому радиус поражения равен файлу
- Оба типа дают один и тот же запуск: те же логи, ретраи, артефакты и история
FAQ
Practical questions before adopting Dagu
Является ли Dagu прямой заменой LangGraph?
Нет. Это разные слои. LangGraph хорош, когда вы хотите собирать вызовы модели на Python или JavaScript с тонким контролем состояния графа. Dagu подходит лучше, когда работа — это набор команд и агентских CLI, которым нужны расписания, ретраи, approvals и аудит.
Можно ли продолжать использовать LangGraph внутри Dagu?
Да. Оставьте приложение на LangGraph скриптом или контейнером и запускайте его как шаг. Dagu добавит вокруг расписание, политику ретраев, логи, артефакты и историю запусков.
Как Dagu работает с human-in-the-loop?
Человеческие задачи и ask_user внутри controller-воркфлоу надёжно приостанавливают запуск. Процесс завершается, слот воркера освобождается, а после ответа человека запуск продолжается в новом процессе.
Нужна ли Dagu база данных?
Нет. Dagu — один бинарник, который хранит определения воркфлоу, историю запусков и логи в файлах, поэтому до первого запуска не нужно поднимать ни базу метаданных, ни брокер сообщений.
Next step
Start with one workflow.
Install Dagu, move one fragile script or agent task into YAML, and decide from a real run history.