Sean’s AI Stories · разбор за 21 минуту

Loop против Graph: спор, у которого нет победителя

Пост в X собрал 3 млн просмотров и расколол сообщество: цикл устарел или нет. Шон Чэнь рисует на доске всю лестницу агентной инженерии, а потом открывает код своего Waku Agent и гоняет два графа по GitHub, календарю и вебу.

21:31 YouTube 👤 Sean’s AI Stories 👁 23 733 просмотра 👍 760 📅 1 августа 2026
Цикл и граф решают разные задачи. Цикл нужен, когда модель сама выбирает следующий вызов; граф — когда форма работы известна заранее и ветки должны идти одной волной.
▶ Смотреть на YouTube Репозиторий Waku Agent
Превью видео Loop VS Graph Engineering
Коротко

Шесть выводов из видео

Лестница, а не замена

Промпт, контекст, skills, цикл, граф — пять ступеней за три года. Каждая появилась там, где предыдущая упиралась в потолок.

Цикл открывает путь

Цель плюс набор инструментов: модель решает, что вызвать следующим, и крутится, пока не сочтёт задачу закрытой. Нарисовать конец заранее нельзя.

Граф задаёт форму

Все рёбра лежат на холсте до запуска. Четыре независимых скана уходят одной волной вместо четырёх последовательных ходов.

Сначала skill, потом граф

Правило со слайда: закрепляй workflow в граф только после того, как он перестал меняться.

Барьер стоит времени

Волна графа длится столько, сколько самая медленная ветка. В демо календарь и память ждут веб-поиск 1,9 с.

Форма старая, начинка новая

Условные параллельные DAG крутит Airflow десять лет. Ново то, что узел — вызов модели, ребро выбирается по данным, а значит нужны guards.

С чего начался спор

Один вопрос в X и две недели ругани

18 июля 2026 года Питер Штайнбергер, автор open claw, спросил в X: «are we still talking about loops or did we shift to graphs yet?». Пост собрал 3 млн просмотров. Первый комментарий под ним — «Bro, stop. I am on vacation». 00:24

Шон вспоминает, что ровно так же в своё время взлетел термин context engineering: известный человек называет слово, дальше его обсуждают все. Отсюда задача видео — разобрать, что за этими словами стоит на уровне системного дизайна, и показать рабочий код. 00:46

Ступень за ступенью

Лестница агентной инженерии: три года в одной схеме

Шон выстраивает пять ступеней подряд и объясняет, какую боль закрывала каждая следующая. Цикл и граф на схеме подсвечены — это две верхние ступени, а не конкурирующие лагеря.

Prompt времён ChatGPT 3.5 ролевая игра Context данные + промпт CRM, таблицы, история Skills процедурная память следование процедуре Loop between the calls итерация под цель Graph shape of the calls процедура задана заранее AI AGENT ENGINEERING LADDER сначала пиши skill; закрепляй его в граф только тогда, когда он перестал меняться
Схема нарисована по доске из видео 02:00

Prompt

role playing

Времена ChatGPT 3.5: «ты лучший поэт, ты Шекспир или Ли Бо — напиши стих». Управление сводилось к тому, в какой роли отвечает модель.

Context

data + prompt

Как только LLM ушла из игрушки в рабочие процессы, понадобились данные: Excel, Google Sheets, CRM. Агент поддержки или продаж говорит от имени бизнеса и должен опираться на его факты.

Skills

procedure following

В терминах харнесса это процедурная память: по какой стороне тротуара идти в США и Китае, а по какой — в Великобритании и Японии. Чтобы не повторять модели одно и то же про эмодзи в каждом сообщении.

Loop

goal-driven iteration

Есть цель, но нет готовой процедуры. Модели дают инструменты — MCP, Google Calendar, Gmail API, GitHub API — и она крутит итерации, пока цель не закрыта.

Graph

procedure pre-determined

Процедура задана заранее. Отсюда и претензия критиков: Airflow и step functions решали это ещё в 2023 году.

Доска с лестницей агентной инженерии
Доска целиком08:23 →
Пять ступеней в одну линию; Loop и Graph выделены цветом. Под схемой — то самое правило перехода от skill к графу.
почему это лестница

Skills → Loop → Graph

Skills — строгое следование процедуре. Цикл — противоположность: «агент, разберись сам». Граф Шон описывает как смесь двух подходов: часть работы жёстко зафиксирована, часть остаётся исследовательской. 06:53

Две формы

Как выглядит цикл и как выглядит граф

Разница видна на картинке: у цикла нельзя нарисовать конец, у графа все рёбра лежат на холсте ещё до первого вызова.

THE LOOP — it comes back вы LLM нужен инструмент? да выбрать и запустить и снова… и снова нет ответ нельзя нарисовать, где это кончится, потому что модель тоже не знает пример: «почини баг в этом PR» — веб-поиск, GitHub CLI, Supabase, AWS, пока не сойдётся
THE GRAPH — it fans out START github web calendar memory synthesize есть ещё задачи? нет END да draft it каждое ребро лежит на холсте ещё до того, как что-то запустилось внутри узла может крутиться свой цикл
Доска с двумя схемами: цикл и граф
Обе схемы рядом10:58 →
Подписи на доске задают контраст: «A loop DISCOVERS what to do next. A graph PRE-DETERMINES what happens next». Справа в кадр уже попала доска с таймингами — к ней Шон вернётся на 16-й минуте.
Правило перехода

Сначала skill, потом граф — и не раньше

Порядок такой: описываешь процедуру как skill, смотришь, как часто она меняется, и только когда изменения прекратились — закрепляешь её в граф. Шон приводит корпоративный пример: служба поддержки в e-commerce отвечает на вопросы про логистику, возвраты и образцы одинаково изо дня в день, такой workflow просится в граф. 07:15

Часть работы остаётся за циклом — та, где нет SOP. Ранний пример такой петли — deep research: «иди в интернет и принеси отчёт». Там ценность именно в том, что маршрут заранее неизвестен. 07:39

берите цикл

Маршрут неизвестен

Починить баг в PR, собрать исследование, разобраться в незнакомой системе. Шаги зависят от того, что нашлось на предыдущем шаге.

берите граф

Форма повторяется каждый день

Утренняя сводка, разбор входящих обращений, регламент поддержки. Источники известны, порядок известен, остаётся только запустить их вместе.

От доски к терминалу

Waku Agent: харнесс целиком и два графа в нём

Waku Agent — локальный ассистент Шона с открытым кодом, у репозитория больше 700 звёзд. Ставится клонированием репозитория или пакетом из PyPI; дальше ключи в окружение и запуск дашборда. 11:04

# установка одной командой
pip install waku-agent
# дальше — переменные окружения и запуск дашборда на localhost:7777
gateway чат, Discord, Telegram retrieval gate нужна ли память LOOP ENGINEERING LLM tools reply три вида памяти procedural · semantic episodic LLM Ops трассировка → тесты → релиз промпта → обратно в харнесс графы triage · gather граф подключается сразу после gateway и задаёт форму хода; цикл живёт внутри узлов
Схема собрана по разбору дашборда 11:49
граф №1

triage

Стартовая точка ветвится надвое: классификатор решает, нужны ли тяжёлые агентные вызовы, и параллельно уходит проверка календаря. На вопрос «what’s up today» агент прочитал календарь через list_events и Apple Calendar. 12:58

граф №2

gather

Вызывается явно: /gather плюс вопрос про PR-ы и конкурентов. Четыре скана уходят одновременно, дальше синтез и черновик сводки. 14:06

Дашборд Waku Agent: схема харнесса, граф gather и утренняя сводка
Дашборд после запуска /gather14:42 →
Слева видно, что харнесс с доски — не абстракция: те же gateway, retrieval gate, три вида памяти и LLM Ops нарисованы прямо в интерфейсе. Ниже — исполненный граф gather: scan_github, scan_web, scan_calendar, scan_memory сходятся в synthesize, дальше draft_digest и END. Справа модель отчитывается о PR-ах на ревью и о том, что вышел новый пакет.
Цена формы

Тайминги: что цикл пропустил и за что платит граф

Самая интересная доска видео — не про архитектуру, а про время. Шон разложил один и тот же запрос по двум формам и показал, чем каждая расплачивается.

THE LOOP — по одному вызову за раз decide gh gh calendar synthesize три источника: веб и память он не трогал вообще — решил, что данных достаточно THE GRAPH — форма известна, сканы идут вместе github 1506 мс web 1887 мс calendar 2 мс memory 1 мс барьер synthesize волна стоит столько, сколько её самая медленная ветка: календарь и память простаивают 1,9 с
Числа взяты с доски видео 16:15
Доска с таймингами цикла и графа
Доска с цифрами16:15 →
Длина полос пропорциональна времени: github — 1506 мс, web — 1887 мс, календарь и память отвечают почти мгновенно. Именно поэтому барьер стоит там, где заканчивается веб-поиск.
чем платит цикл

Пропущенные источники

Модель сама решила, что трёх обращений хватит, и не пошла ни в веб, ни в память. Полнота ответа зависит от её суждения на каждом шаге.

чем платит граф

Быстрые ветки ждут

Все четыре источника опрошены, но волна не закончится раньше самой медленной ветки. Быстрые узлы ждут; это цена гарантированного покрытия.

вывод

Они сосуществуют

Шон формулирует прямо: граф не заменяет цикл, и спорить, что лучше, бессмысленно — они закрывают разные ситуации. 16:27

В коде

Движок графа: узлы, рёбра, роутеры

В репозитории всё лежит в папке waku/graph: движок, описание узлов и отдельная папка workflows с готовыми графами. Узлом может быть вызов инструмента, вызов модели, агентный вызов или роутер. 17:37

Код engine.py: класс Graph
engine.py17:16 →
Весь движок — это dataclass с тремя словарями и тремя методами. Имена START и END зарезервированы, добавить узел с таким именем нельзя.
@dataclass
class Graph:
    name: str
    nodes: dict[str, Node]
    edges: list[tuple[str, str]]
    routers: dict[str, tuple[RouteFn, dict[str, str]]]

    def add_node(self, node: Node) -> None: ...
    def add_edge(self, src: str, dst: str) -> None: ...
    def add_router(self, src, route, targets) -> None: ...

Два правила из докстрингов

Безусловное ребро означает: когда закончился src, dst становится на шаг ближе к готовности. Условный переход — это роутер: функция route(state) возвращает метку, и выполнение прыгает в targets[label]. Формулировка в коде однозначная: «Routers are code, never models».

Код gather.py с ASCII-схемой графа
workflows/gather.py19:03 →
Файл открывается схемой прямо в докстринге и аргументом в пользу графа: четыре вопроса задаются каждое утро, список известен до пробуждения, поэтому пускать модель по одному вызову за раз — четыре лишних круга и риск, что один источник забудется. Дальше идёт контраст с циклом на задаче «work this PR», где форму заранее не нарисуешь. Первое из двух правил файла: он только предлагает и никогда не действует — ни agent_node, ни run_loop, ни реестра инструментов внутри нет.

Добавить свой workflow можно новым .py-файлом в той же папке. После мержа он появляется в списке команды /graphs рядом с gather и triage — Шон зовёт присылать PR-ы. 19:08

Главное возражение

«Это же обычный DAG из 2023 года»

Шон отвечает на него сам и соглашается: по большей части да, условные параллельные DAG крутит Airflow уже десять лет. Новизна узкая и состоит из трёх пунктов. 20:26

1

Узлы недетерминированы

Узел может быть вызовом модели, а значит его результат не повторяется от прогона к прогону.

2

Ребро выбирает модель

Маршрутизация зависит от данных: LLM как судья решает, хватит ли простой модели или нужна тяжёлая.

3

Нужны guards

Планировщикам направленных графов прошлого поколения такие ограничители не требовались — решения принимал не агент.

Итоговая формула со слайда: «Old shape. New contents.» Это по-прежнему модные слова. Виральными они становятся по двум причинам: их произносит известный человек либо за ними стоит что-то полезное. 21:02

Навигация

Таймлайн видео

Каждое время — ссылка на этот момент. Кадры кликаются и открываются крупно.

00:20

Пост, с которого всё началось

Вопрос Питера Штайнбергера про циклы и графы, 3 млн просмотров и комментарий «Bro, stop. I am on vacation».

02:00

Лестница за три года

Промпт, контекст, skills, цикл, граф. Каждая ступень выросла из ограничения предыдущей.

03:58

Skills как процедурная память

Пример про сторону тротуара в разных странах и про эмодзи, которые не хочется запрещать в каждом сообщении заново.

05:23

Цикл: цель плюс инструменты

MCP, Google Calendar, Gmail API, GitHub API. Модель крутит итерации, пока не посчитает цель достигнутой.

06:14

Граф и претензия критиков

Процедура задана заранее. Отсюда возражение про Airflow и step functions образца 2023 года.

Лестница на доске
08:23

Лестница целиком перед разбором схем

Концептуальная часть закончена, дальше Шон рисует, как цикл и граф выглядят в виде схем.

Две схемы на доске
10:58

Цикл и граф на одном холсте

Ключевой контраст видео: цикл выясняет следующий шаг по ходу, граф фиксирует все шаги до запуска.

11:49

Харнесс целиком

Gateway, retrieval gate, три вида памяти, агентный цикл с инструментами, ответ и контур LLM Ops поверх всего.

12:58

Тест triage: «what’s up today»

Классификация и проверка календаря идут параллельно, дальше цикл дочитывает события через list_events.

Дашборд Waku Agent
14:42

/gather: четыре источника одной волной

GitHub, веб, календарь и память опрашиваются одновременно, потом синтез. На выходе — утренняя сводка с PR-ами на ревью.

Доска с таймингами
16:15

Барьер и простой быстрых веток

github — 1506 мс, web — 1887 мс, календарь и память — единицы миллисекунд, после чего они ждут 1,9 с.

Код engine.py
17:16

Движок графа в коде

Класс Graph, добавление узлов и рёбер, отдельный метод для роутеров. Роутер — обычная функция, не модель.

Код gather.py
19:03

Свой workflow — новый .py-файл

Разбор gather.py и приглашение присылать PR-ы: принятый workflow появляется в списке /graphs.

20:26

Финальный вопрос про DAG

Недетерминированные узлы, выбор ребра моделью и необходимость guards — три отличия от планировщиков 2023 года.

Цитаты

Формулировки, которые стоит забрать целиком

«A loop is something you need when the model decides what to call one step at a time. A graph is something like when you know the shape and you just want them to move together.»
Цикл нужен, когда модель сама решает, что вызвать на очередном шаге. Граф — когда форма известна и нужно, чтобы ветки шли вместе.
16:50 →
«so: write the skill first. harden it into a graph only once it stops changing.»
Сначала пиши skill; закрепляй его в граф только тогда, когда он перестал меняться. Надпись под лестницей на доске.
08:23 →
«you cannot draw where this ends, because it does not know either.»
Нельзя нарисовать, где это кончится, потому что модель тоже не знает. Подпись под схемой цикла.
10:58 →
«every edge is on the page before anything runs.»
Каждое ребро на холсте ещё до того, как что-то запустилось. Подпись под схемой графа.
10:58 →
«the barrier — a wave costs its SLOWEST branch, so calendar and memory idle here for 1.9s.»
Барьер: волна стоит столько, сколько её самая медленная ветка, поэтому календарь и память простаивают 1,9 с.
16:15 →
«Old shape. New contents.»
Форма старая, содержимое новое. Ответ на вопрос, чем граф отличается от детерминированного workflow 2023 года.
20:26 →
Цифры из видео

Что легко проверить

3 млн
просмотров у поста Штайнбергера от 18 июля 2026 года
700+
звёзд у репозитория Waku Agent на момент съёмки
1887 мс
самая медленная ветка волны — веб-поиск
1,9 с
столько календарь и память ждут на барьере
4
параллельных скана в графе gather: github, web, calendar, memory
3
источника у цикла в том же сценарии: веб и память он не трогал
2
готовых графа в дашборде: triage и gather
7777
порт локального дашборда по умолчанию
Что сделать

Чек-лист после просмотра

Отмечайте пункты кликом — состояние держится до перезагрузки страницы.

  • Поставить Waku Agent и открыть дашбордpip install waku-agent, прописать ключи в окружение, запустить на порту 7777.
  • Выписать один повторяющийся рабочий процесс как skillИ только после того, как он перестанет меняться, переводить его в граф.
  • Найти в своём пайплайне независимые шагиЕсли между ними нет зависимостей — они кандидаты в одну волну графа вместо последовательных вызовов.
  • Замерить самую медленную веткуВолна стоит столько, сколько она. Дальше решать: терпеть простой или выносить ветку из волны.
  • Оставить циклу исследовательскую частьПочинка бага, разбор незнакомого кода, deep research — всё, где маршрут заранее не нарисовать.
  • Добавить свой workflow в waku/graph/workflows и прислать PRПринятый файл появляется в списке команды /graphs у всех пользователей.

Ссылки автора: github.com/ShenSeanChen/waku-agent · seanchen.io (сообщество, живые сессии дважды в месяц и исходные .excalidraw-файлы всех досок из серии).

▶ Смотреть этот момент