Альтернатива 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 глазами тех, кто это эксплуатирует

Форма
Dagu

Движок воркфлоу, который вы запускаете как бинарник.

LangGraph

Библиотека, встраиваемая в приложение на Python или JavaScript.

Определение
Dagu

Декларативный YAML, версионируемый рядом с кодом, который он запускает.

LangGraph

Построение графа в коде приложения.

Эксплуатация
Dagu

Расписания, очереди, ретраи, артефакты и история запусков идут вместе с движком.

LangGraph

Checkpointer хранит состояние графа; расписание и обслуживание берут на себя ваш сервис или LangGraph Platform.

Единица работы
Dagu

Процесс: любой язык, любой CLI, при необходимости внутри контейнера.

LangGraph

Функция внутри хост-процесса.

In depth

Where each tool fits

01

Библиотеке нужно приложение. Движку — нет.

LangGraph строит граф. Но кто-то всё ещё должен ставить его в расписание и очередь, повторять при сбое, хранить состояние и показывать, что произошло. Этот кто-то — ваш сервис или LangGraph Platform. Dagu уже является этим слоем.

  • Запускается один бинарник. Не нужно писать веб-сервис и проектировать пул воркеров
  • Расписания, очереди, ретраи и история запусков — возможности движка, а не интеграции
  • Одно и то же определение работает на ноутбуке, на одной VM и в связке coordinator с воркерами
02

Шаги — это процессы, поэтому воркфлоу не привязан к языку

Узлы LangGraph — это функции на Python или JavaScript в вашем процессе. Шаг Dagu — это команда, поэтому единицей работы становится то, что уже запускается в вашей среде.

  • Вызывайте shell-скрипты, бинарники, контейнеры, SSH-команды, HTTP-эндпоинты и SQL из одного воркфлоу
  • Запускайте кодовых агентов через harness.run: Claude, Codex, Gemini, OpenCode или внутренний CLI
  • Дайте любому шагу контейнерную песочницу с явными монтированиями, тулчейном и правилами egress
03

Рисуйте граф, когда можете, и отдавайте порядок, когда не можете

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.