Коротко
- Попросите агента создать цель (
create_goal) сtoken_budget. Бюджет считает токены только сессии с целью. Расход субагентов, по нашему выводу, идёт мимо него, так что это потолок для родителя, а не для всей работы. - Источник правды о ходе работ — файл в рабочем пространстве. Цель и карточка показывают направление и статус, но не заменяют его.
- Утренний прогон automation читает файл, сверяется с
get_goalи вслух говорит, если цели не видит или она неactive.
Проверено по документации OpenClaw 2026.10.3, октябрь 2026; запуском конфиги не проверялись.
Пример
Монорепозиторий из 40 пакетов переводят на Node 24. Каждому пакету нужны правки, зелёный CI и иногда решение человека, так что работа займёт неделю. Задачу легко посчитать: 40 штук, сделано столько-то.
Схема
человек в чате: «создай цель… бюджет 3 млн токенов»
→ create_goal → цель на этой сессии, active
днём, в чате по утрам, automation
читает NODE24.md session:<ключ>, --timeout-seconds
sessions_spawn × до 5 get_goal: видна ли цель, какой статус
sessions_yield → ход закрыт читает NODE24.md, spawn × до 5
реестр будит родителя после детей прогон открыт, пока дети работают
└──────────── итоги детей ───────────┘
node24/<пакет>.md → сверка в NODE24.md → progress_card (12/40)
Из чего собрано
| Задача | Примитив |
|---|---|
| Держать цель и остановку | Goal + token_budget |
| Отдать шаг и ждать | sessions_spawn + sessions_yield |
| Продолжить завтра | automation с --session session:<id> |
| Показать статус | progress card |
Сама цель ничего не запускает: она не становится фоновой задачей, напоминанием или cron и не планирует работу. Ход приходит от вас, от расписания или от завершения детей.
Как собрать
1. Цель. В отдельной сессии напишите агенту: «Создай цель „40 пакетов на Node 24, CI зелёный у каждого“ с бюджетом 3 000 000 токенов». /goal start бюджет не принимает, его ставит только инструмент модели create_goal, и только по явной просьбе. Пока цель активна, каждый пользовательский ход получает строку Active goal: …. В ней же правило: blocked ставить только после трёх ходов подряд с одним блокером.
2. Чекпойнт. Если вы помните Task Flow: его API удалён («The shared Tasks ledger, TaskFlow orchestration API, and TaskFlow Webhooks plugin have been removed»). Поэтому чекпойнт — обычный файл NODE24.md: таблица пакетов со статусами и строка «что дальше». Это наше соглашение, а не механизм OpenClaw. Зато файл читается из любой сессии и переживает /reset.
3. Пачки. Агент берёт до пяти пакетов (maxChildrenPerAgent по умолчанию 5) и на каждый запускает sessions_spawn. Каждый ребёнок пишет итог в свой файл node24/<пакет>.md, чтобы не драться за общий. Если долгий CI нужно обрывать, задайте ребёнку runTimeoutSeconds: без настройки таймаута нет. Дальше в чате агент вызывает sessions_yield, а не опрашивает subagents или sleep. Ход закрывается, и когда дети закончат, реестр субагентов (внутренний учёт запущенных детей) сам запустит следующий ход родителя. Завершение ребёнка не значит, что задача выполнена: родитель сверяет итог с тем, что просили. complete у цели ставит только update_goal.
4. Карточка. Её ведёт родитель, субагенты progress_card не получают. Для счётной работы нужна полоса с наблюдаемым счётом:
{
"markdown": "<progress aria-label=\"Пакетов с зелёным CI · 12/40\" value=\"12\" max=\"40\"></progress>\n\nПачка 3 в работе. billing ждёт решения по удалённому API."
}
Каждый вызов заменяет карточку целиком. Если работа встала на чужом решении, оставьте только заметку: что не сделано, на чём встало, кто решает. Шаги выполненными не отмечайте.
5. Утренний прогон.
openclaw automations add \
--name "node24 morning" \
--cron "0 9 * * 1-5" --tz "Europe/Moscow" \
--session "session:<ключ>" \
--timeout-seconds 10800 \
--no-deliver \
--message "NODE24.md — источник правды о работе. Сверь его с файлами node24/. Вызови get_goal. Если цели не видишь, первой строкой напиши: «цели в этой сессии не вижу, работаю по NODE24.md». Если цель есть и её статус не active, ответь одной строкой «цель <статус>, ход пропущен» и остановись. Иначе возьми до 5 следующих пакетов, раздай субагентам и обнови NODE24.md и progress_card."
session:<ключ>привязывает прогон к постоянному ключу сессии. Ключ вашего чата можно взять изopenclaw sessions list --json. Окажется ли цель из чата видна в прогоне, docs прямо не говорят. Новый ключ просто создаёт новую сессию. Поэтому работа держится на файле, а не на цели. Если цели не видно, прогон работает по файлу и говорит об этом вслух. Тихо он не замолкает.--timeout-seconds. Изолированный прогон не закрывается, пока работают запущенные им дети: планировщик ждёт их в пределах срока прогона. Дляsession:<id>закладываемся на то же. Без флага изолированные и отсоединённые прогоны обрывает 60-минутный сторож. Ставьте срок по самой долгой пачке. Если таймаут случится в сессии с целью, цель встанет на паузу.--no-deliverотключает доставку итога в чат силами планировщика. Как--announceиNO_REPLYведут себя уsession:<id>, docs не описывают, поэтому статус смотрим в карточке и в истории прогонов.
6. Проверка и откат. Перед первым утром запустите openclaw automations run <job-id> --wait --wait-timeout 10m, затем openclaw automations runs <job-id>. Первая строка ответа покажет, видит ли прогон цель. Полный разговор прогона открывается в Control UI кнопкой View transcript. Остановить расписание: openclaw automations disable <job-id> или remove. Остановить цель: /goal pause или /goal clear.
Где человек
- Ставит цель и бюджет: без явной просьбы модель их не создаёт.
- Ставит на паузу и продолжает. Модель не может молча поставить цель на паузу, снять паузу, очистить или заменить её. Это
/goal pause|resume|clearили кнопки на плашке цели в Control UI. Модель сама ставит толькоcompleteилиblocked, а на паузу цель встаёт ещё и сама, если ход упал с ошибкой или таймаутом. Обычное сообщение такую паузу не снимает. - Решает при
budget_limited:/goal resumeдаёт новое окно бюджета. - Смотрит статус: карточка видна в чате Control UI и в подсказке при наведении на сессию.
- Одобряет exec: одобрения из прогонов по расписанию приходят только в Control UI и приложения, в чат никогда. Если ни один клиент не подключён, запрос отклоняется сразу.
Сколько стоит
Своих замеров нет. По нашему расчёту на условных числах: 8 пачек за 5 дней, около 3 ходов родителя в день по 60 тыс. токенов и 150 тыс. на пакет. Получается 5 × 3 × 60 тыс. + 40 × 150 тыс. = 0,9 млн + 6 млн ≈ 6,9 млн токенов. Бюджет цели в 3 млн из такого расчёта покрывает только первое слагаемое. Свой расход хода родителя найдёте так: «Tokens used» из /goal в конце первого дня разделите на число ходов. Детей удешевляет отдельная модель для субагентов (agents.defaults.subagents.model). Деньги считайте по тарифу модели, отдельно для входа и выхода. Сам бюджет — «guardrail, not a billing cap»: квоты и учёт расходов живут в обычных настройках.
Где ломается
- Goal is not a task queue. Цель держит направление, порядок шагов живёт в файле.
- Рестарт не перезапускает детей. Прерванный субагент закрывается с пометкой, что действия могли пройти частично, и решать, что переделать, остаётся родителю.
- Тишина не значит, что работа идёт.
/newи/resetстирают цель, полный/resetещё и карточку. Пауза после ошибки сама не снимается. Держите в карточке дату последнего хода. - Профиль инструментов.
get_goal,create_goal,update_goalиprogress_cardесть в профилеcoding, а вmessagingих нет. - Codex-харнесс (сессия идёт через Codex, а не через встроенный рантайм OpenClaw): цель там своя (
/codex goal), и сам OpenClaw продолжающих ходов не запускает.
Когда брать другое
- Внешние действия вроде
npm publishдолжны выполниться ровно один раз. OpenClaw этого не обещает: «do not promise exactly-once external tool or provider effects». Либо делайте шаги проверяемыми (сначала посмотреть, потом действовать), либо берите durable-движок вроде Temporal. Расписание и история прогонов в automations при этом есть. - Шаги детерминированы и рассуждать между ними не надо: хватит CI-пайплайна или Lobster (локальные конвейеры шагов с одобрениями).
- Задача укладывается в один вечер: цель не нужна, хватит карточки.