Шесть механизмов, которые делают OpenClaw оркестратором агентов

Основы. Почему «персональный ассистент» у OpenClaw только одна из конфигураций и что ещё работает на том же сервере.

· 13 мин чтения

Коротко

  • Ассистент в мессенджере и оркестратор десятка агентов у OpenClaw запускаются одним и тем же процессом Gateway. Разница в настройках.
  • Оркестратором его делают шесть механизмов: расписания, изолированные агенты, вложенные субагенты, реестр задач, внешние кодовые агенты и полномочия для работы без присмотра.
  • Если нужен replay после сбоя, жёсткий потолок расходов или изоляция между клиентами, берите другой инструмент. Список ниже.

OpenClaw привыкли считать чат-ботом: пишешь ему в Telegram, он отвечает и что-то делает на твоём компьютере. Так его подаёт и сам проект. Слоган на главной странице документации звучит так: «Your AI assistant, on your own hardware, in every chat app you already use», то есть «ваш ИИ-ассистент, на вашем железе, в каждом мессенджере, которым вы уже пользуетесь».

Но через пару абзацев там же сказано главное: тот же Gateway работает как личный ассистент на одном ноутбуке или как общий сервер команды, и «configuration is the only difference», отличается только конфигурация. Gateway здесь означает постоянно работающий процесс OpenClaw, который держит каналы, агентов, расписания и состояние.

Наш тезис: OpenClaw — постоянно работающий рантайм для оркестрации агентов, и ассистент в нём только самая простая конфигурация. Рантайм (runtime) означает среду, в которой агенты живут и исполняются, в отличие от фреймворка, который вы импортируете в свой код. Ниже шесть механизмов, которые это доказывают, одна схема и один пайплайн. В конце честно: когда OpenClaw брать не надо.

Если слово «агент» для вас пока туманно, начните с материала «Агент — это цикл, а не магия». Про разницу между заранее заданным процессом и агентом, который сам выбирает шаги, мы писали в «Пяти схемах».

Почему это рантайм, а не фреймворк

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

Так устроены все постоянно работающие агентные системы. Исследование исходного кода одиннадцати кодовых агентов (arXiv 2609.00006, июль 2026, OpenClaw в выборке есть) отмечает: ни один из них не импортирует универсальный агентный фреймворк. Значит, само слово «рантайм» OpenClaw ещё не выделяет. Выделяет его то, что в этот рантайм встроено для оркестрации.

Документация проводит ту же линию. На странице про Swarm, режим параллельного запуска многих агентов, написано: «There is no graph DSL and no separate workflow format. The program is the orchestration». Отдельного языка графов и формата workflow нет, оркестрация задаётся самой программой.

Шесть механизмов

1. Расписания и события: агент работает, когда никто не пишет

Ассистент отвечает на сообщения. Оркестратор просыпается сам. Для этого в OpenClaw есть встроенный планировщик: команда openclaw automations (старое имя openclaw cron осталось алиасом). Планировщик сохраняет задания и сам будит агента в нужное время.

Виды расписаний по документации: разовое at, интервал every, cron-выражение с часовым поясом --cron … --tz, запуск после завершения другого процесса on-exit и поток строк из внешней команды stream. Есть условный наблюдатель trigger.script. Это маленький скрипт, который раз в интервал (не чаще чем раз в 30 секунд) решает, будить ли модель, и возвращает { fire, message?, state? }. Пока повода нет, модель не вызывается. Снаружи агента будят вебхуки: POST /hooks/wake и POST /hooks/agent, по умолчанию выключены.

Задание можно направить в постоянную сессию --session session:<id>, тогда каждый запуск видит историю прошлых. Для запусков без человека в документации есть отдельный контракт: ответ должен быть готовым результатом, а если делать нечего, агент возвращает NO_REPLY и в чат ничего не уходит.

Что это даёт в пайплайне: точку входа без человека. Пайплайн стартует по времени или по событию, а тихие прогоны не засоряют канал.

2. Изолированные агенты: команда в одном процессе

Один Gateway держит несколько агентов. У каждого свой рабочий каталог (workspace), свой каталог состояния agentDir и своя история сессий в SQLite. Привязки (bindings) решают, какой агент отвечает в каком канале или аккаунте. Документация подчёркивает, что они детерминированы: побеждает самое точное совпадение, модель в выборе не участвует.

Команды: openclaw agents add work --workspace … --model … --bind telegram:work, проверка через openclaw agents list --bindings. Готовый каркас команды из четырёх ролей (coordinator, researcher, writer, reviewer) создаёт openclaw agents team create. Писать друг другу агенты могут по умолчанию, это регулирует tools.agentToAgent.

Одна оговорка из документации: workspace — каталог по умолчанию, а не песочница. Изоляция здесь про контекст и память, а не про безопасность.

Что это даёт в пайплайне: роли с разной моделью, разной памятью и своим каналом, у каждого свой ограниченный контекст. Как нарезать агентов по областям, мы разбирали в статье «Один агент на одну область».

3. Вложенные субагенты с каскадной остановкой

Субагентом называют дочернего агента, которого родитель запускает на подзадачу инструментом sessions_spawn. Вызов не блокирует родителя: он сразу получает {status: "accepted", runId, childSessionKey}, а результат ребёнка приходит позже событием завершения (announce). Документация прямо советует ждать этих событий, а не опрашивать детей в цикле.

Дерево ограничено параметрами. maxSpawnDepth задаёт глубину, по умолчанию 5, это и максимум. maxChildrenPerAgent ограничивает число детей у одного родителя: по умолчанию 5, можно до 20. maxConcurrent держит общий параллелизм, по умолчанию 8. Результаты поднимаются по дереву на один уровень за раз. У листа на последнем уровне нет инструментов, чтобы запустить своих детей.

Остановка каскадная: явная отмена оркестратора гасит всё дерево его потомков, /stop в чате делает то же для того, кто его отправил. Если очередь недоставленных результатов дорастёт до 25, OpenClaw предупредит, при 50 перестанет запускать новых детей.

Что это даёт в пайплайне: веерный разбор задачи. Координатор раздаёт куски исполнителям на дешёвой модели, собирает ответы и может остановить всю ветку одной командой.

4. Реестр задач, который переживает рестарт

Каждый отсоединённый запуск (субагент, внешний агент, задание по расписанию) попадает в реестр задач. Документация называет его журналом активности, а не планировщиком. Путь задачи: в очереди, выполняется и один из пяти исходов — успех, ошибка, таймаут, отмена или потеря. Команды: openclaw tasks list, show, cancel, retry, audit.

Над задачами есть Task Flow, «durable record», долговечная запись процесса: статус, состояние в stateJson, счётчик ревизий revision. Для каждого отсоединённого субагента или ACP-запуска flow создаётся автоматически. Записи лежат в SQLite и переживают рестарт Gateway. Смотреть их можно через openclaw tasks flow list и show.

Субагенты после рестарта продолжают работу со своего транскрипта. Если ребёнок падает снова и снова, его останавливает защитная отметка (recovery tombstone), и бесконечного цикла восстановления не будет.

Что это даёт в пайплайне: видно, что сейчас крутится, что упало и что можно перезапустить. Перезагрузка сервера не обнуляет работу.

Предел этой долговечности документация называет сама, и мы вернёмся к нему в разделе про ограничения.

5. Внешние кодовые агенты в роли подчинённых

Через протокол ACP (Agent Client Protocol, общий протокол подключения кодовых агентов к внешней «обвязке») OpenClaw запускает чужих агентов как своих детей. По документации это Claude Code, Cursor, Copilot, Gemini CLI, OpenCode и другие. Вызов тот же: sessions_spawn с runtime: "acp" или /acp spawn из чата. Каждый такой запуск тоже фоновая задача в реестре. Codex по умолчанию подключается через собственный плагин, ACP для него запасной путь.

Чтобы параллельные агенты не топтались в одном каталоге, есть управляемые git-worktree, отдельные рабочие копии репозитория: openclaw worktrees create <repo> --name <name> создаёт ветку openclaw/<name>. ACP-сессии этот каталог передаётся параметром cwd.

Две оговорки. Флаг worktree: true в sessions_spawn работает только для обычных субагентов с visible: true, для ACP он не подходит. И песочница OpenClaw ACP-агента не оборачивает, так сказано в документации дословно.

Что это даёт в пайплайне: тяжёлые правки кода делает специализированный агент, а OpenClaw ставит задачу, следит за статусом и доставляет результат.

6. Полномочия для работы без присмотра

Когда человек рядом, он жмёт «разрешить». В 7 утра в понедельник рядом никого нет. Для этого в OpenClaw несколько слоёв.

Режимы разрешений Gateway: read-only, guarded (решает человек), workspace (решает LLM-ревьюер: разрешить, запретить или спросить; после трёх отказов подряд вопрос уходит человеку) и full. Если ничего не настроить и не включить песочницу, по умолчанию действует полный доступ.

Для заданий по расписанию есть постоянные разрешения (standing grants). Запросы на выполнение команд из automation получают только подключённые клиенты одобрений: Control UI (веб-панель управления Gateway) и приложения. В чат-каналы, по документации, такие запросы не приходят никогда. Если клиента нет, запрос сразу отклоняется. Кнопка «Always allow» создаёт грант, привязанный к конкретному агенту, заданию, команде и каталогу. Список и отзыв: openclaw approvals grants list и openclaw approvals grants revoke <id>.

У ACP свои настройки. По умолчанию permissionMode = approve-reads: чтение разрешено, запись и запуск команд требуют подтверждения. А nonInteractivePermissions = fail, и без интерактивного терминала сессия падает с PermissionPromptUnavailableError. Мягкий вариант deny тихо отказывает и работает дальше.

Правила поведения агента в автономном режиме пишутся прямо в AGENTS.md как постоянные распоряжения (standing orders): область, триггеры, где нужно одобрение, кому эскалировать.

Что это даёт в пайплайне: заранее решаете, что агент делает сам, а что ждёт человека. Решение живёт в конфигурации, а не в надежде, что модель спросит. Подробнее, что выносить в обвязку, а что оставлять модели, в статье «Что выносить в обвязку агента».

Схема: ассистент и оркестратор на одном Gateway

                     ┌──────────────────── Gateway (один процесс) ────────────────────┐
                     │                                                                │
 Сообщение в чате ──►│  binding ──► агент main ──► ответ в чат        (ассистент)     │
                     │                                                                │
 Расписание / хук ──►│  automation ──► session:<id> координатора      (оркестратор)   │
                     │                   │                                            │
                     │                   ├─► субагенты (глубина до 5, стоп каскадом)  │
                     │                   ├─► ACP: Claude Code / Codex в worktree      │
                     │                   │                                            │
                     │  реестр задач + Task Flow (SQLite, переживает рестарт)         │
                     │  полномочия: permission mode, grants, ACP permissionMode       │
                     └────────────────────────────────────────────────────────────────┘
                                  │ итог: --announce в канал, одобрения в Control UI
Ассистент Оркестратор
Кто запускает Человек сообщением Расписание, вебхук, наблюдатель
Сколько агентов Один main Несколько через agents add и субагенты
Где контекст Одна сессия в чате Постоянная session:<id> плюс изолированные дети
Кто пишет код Сам агент ACP-агент в отдельном worktree
Как видно состояние Переписка openclaw tasks list, tasks flow show
Кто одобряет Человек в чате, сразу Заранее: режим, гранты; остальное в Control UI

Процесс, база и каналы у обеих колонок одни и те же.

Пример: еженедельное обновление документации проекта

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

  1. Триггер. Задание по расписанию будит координатора в пятницу утром в его постоянной сессии:
    openclaw automations add --name docs-weekly \
      --cron "0 8 * * 5" --tz Europe/Moscow \
      --session session:docs-weekly \
      --message "Собери изменения за неделю и обнови документацию" \
      --announce --channel telegram --to "<id чата>"
    Если за неделю ничего не изменилось, координатор отвечает NO_REPLY и в чат ничего не приходит.
  2. Сбор. Координатор запускает двух-трёх субагентов через sessions_spawn, каждого со своей частью источников и, если нужно, более дешёвой моделью (model). Ждёт событий завершения, а не опрашивает.
  3. Правка. Координатор отдаёт сводку ACP-агенту: sessions_spawn с runtime: "acp" и cwd, указывающим на worktree. Worktree заранее создан командой openclaw worktrees create <repo> --name docs-weekly, правки уходят в ветку openclaw/docs-weekly. Чтобы агент мог писать файлы без человека, для ACP сознательно выставляется подходящий permissionMode. Иначе сессия упадёт на первой записи.
  4. Контроль. Каждый запуск виден в openclaw tasks list, для ACP-запуска автоматически есть flow в openclaw tasks flow list. Если Gateway перезапустился посреди работы, субагенты продолжат со своего транскрипта.
  5. Человек. Итог уходит в канал через --announce. Ветку сливает человек. Если по дороге понадобится команда вне выданных грантов, запрос придёт в Control UI, а не в мессенджер.

Человек стоит в двух местах: заранее, когда выдаёт полномочия, и в конце, на слиянии.

Когда брать не OpenClaw

Нужно Что брать Почему
Долгий процесс, который после сбоя продолжится ровно с того места Temporal, LangGraph Temporal восстанавливает ход выполнения повтором истории событий (replay). LangGraph сохраняет снимок состояния графа на каждом шаге (checkpointer)
Заранее известный граф шагов, одинаковый каждый раз n8n, LangGraph Граф рисуется или описывается явно. У OpenClaw графового DSL нет по замыслу
Жёсткий потолок расходов Внешний лимит, например ключи LiteLLM с лимитами трат (spend limits) token_budget у цели — ограничитель сессии, «not a billing cap»
Изоляция между клиентами на одном сервере Отдельный Gateway на каждого Один Gateway — одна граница доверия

Теперь подробнее.

Durable execution с replay. Durable execution, долговечным выполнением, называют выполнение, которое переживает сбой без потери места. Temporal исполняет код воркфлоу «effectively once and to completion» и восстанавливает состояние повтором истории событий. У Task Flow документация сама проводит черту: долговечны записи, но не стек вызовов и не автоматическое расписание. Метаданные ожидания не регистрируют таймер, а побочные эффекты нельзя повторять вслепую. У хуков нет долговечной очереди, автоматического повтора и гарантии exactly-once. Если сбой посреди платёжной операции для вас недопустим, это работа для Temporal.

Детерминированные графы. Если процесс известен заранее и каждый раз одинаков, модель-оркестратор его только замедлит и удорожит. Для таких процессов есть LangGraph с явным графом. Для интеграций и бизнес-процессов с десятками коннекторов проще n8n.

Бюджет. В документации нет механизма, который жёстко остановит расходы на отметке в N долларов. Ограничивать нужно снаружи, на уровне ключа провайдера или прокси.

Несколько клиентов. Документация прямо пишет: один Gateway рассчитан на одну границу доверенного оператора, «not hostile multi-tenant isolation». Песочница по умолчанию выключена, команды выполняются на хосте. Для нескольких арендаторов нужен отдельный экземпляр на каждого.

Зрелость. Проект оценивает себя сам в maturity/scorecard.md. Общая оценка 68%, стадия Alpha по шкале, где Alpha — 50–70, Beta — 70–80, Stable — 80–95. Качество 65%, полнота 71%, покрытие пока не оценено. Agent Runtime и «Automation and durable work» стоят на Beta. В историческом прогоне QA от 8 сентября 2026 года (в текущую оценку не входит) фоновые задачи и хуки прошли все проверки, задания по расписанию — 12 из 22, внешние рантаймы и субагенты — 3 из 10, приём внешних событий — 0 из 15. Практический вывод: реестр задач проверен хорошо, а пайплайн на вебхуках сначала гоняйте на тестовых данных.

Куда дальше

Дальше мы будем разбирать такие пайплайны по одному: схема, механизмы, место человека, цена и где ломается. Первыми — редакция по расписанию и Claude Code с Codex в роли подчинённых. Как выглядит живая команда агентов, смотрите в «Команде из 15 агентов».