Как довести недельную задачу: цель, чекпойнт в файле и карточка статуса

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

· 7 мин чтения

Коротко

  • Попросите агента создать цель (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 (локальные конвейеры шагов с одобрениями).
  • Задача укладывается в один вечер: цель не нужна, хватит карточки.