Коротко
- Заведите второго агента со своим Telegram-ботом:
openclaw agents add, затемopenclaw agents bind. Основной бот перед этим явно закрепите заmain, иначе он останется без хозяина. - Расписание делается одной командой
openclaw automations createс--session "session:<имя>", то есть с постоянной сессией, которая помнит прошлые запуски. Когда новостей нет, агент отвечаетNO_REPLY, и в чат ничего не приходит. - Включите вопрос перед командами:
tools.exec.mode: "ask"для нового агента. В живом чате карточка с кнопками придёт в Telegram. Запрос из запуска по расписанию до мессенджера не дойдёт: его показывают только Control UI и приложения.
Ваш OpenClaw неделю отвечает в Telegram, и всё держится на одном агенте. Хочется, чтобы он сам что-то проверял по утрам и не трогал ничего опасного без спроса, но страшно сломать то, что уже работает. Ниже путь, который ничего не ломает: основной агент остаётся как был, всё новое живёт у второго агента, и у каждого шага есть команда отката.
Шаги сверены с документацией OpenClaw 2026.10.10 в ноябре 2026 года. На живой установке мы их не прогоняли. Если у вас вывод отличается, напишите нам.
Что получится
Вы в Telegram
├─ бот №1 ──► агент main (как было)
└─ бот №2 ──► агент scout, свой workspace
├─ 09:00 каждый день: проверка в сессии session:morning-watch
│ есть новое → сообщение от бота №2; нет → NO_REPLY, тишина
├─ тяжёлый разбор → субагент на дешёвой модели → отчёт scout
└─ команда на хосте → карточка одобрения → решаете вы
Привязка (binding) решает, какому агенту достанется сообщение из канала. Зачем вообще разводить работу по агентам, расписаниям и субагентам, мы разбирали в статье «Шесть механизмов».
Что нужно заранее
- OpenClaw 2026.10.10, Gateway (основной процесс OpenClaw) запущен, Telegram подключён и отвечает.
- Вы подтверждали себя у первого бота через pairing, то есть через код в личке. Если владельца на тот момент не было, OpenClaw записал вас в
commands.ownerAllowFrom. Этот список понадобится в шаге 4: из него Telegram берёт тех, кто может одобрять команды. - Терминал на машине с Gateway.
Перед началом сделайте резервную копию состояния и конфига:
openclaw backup create --verify
Шаг 1. Второй агент со своим ботом
1.1. Закрепите основной бот за main. Пока агент один, все сообщения достаются ему. Когда агентов станет два, каждому Telegram-аккаунту нужен хозяин. Аккаунт без хозяина блокируется, а статус канала подсказывает, какую привязку добавить. Закрепим заранее:
openclaw agents bind --agent main --bind telegram:default
default — id единственного аккаунта в обычной установке. Когда вы добавите второй аккаунт, OpenClaw перенесёт прежние настройки бота в channels.telegram.accounts.default, если своего именованного аккаунта у вас не было. Если был, подставьте его id, он виден в openclaw channels status --probe.
1.2. Создайте второго бота в @BotFather командой /newbot и подключите его отдельным аккаунтом:
openclaw channels add --channel telegram --account scout --token <токен от BotFather>
С настройками по умолчанию Gateway подхватит изменение сам, перезапускать ничего не нужно.
1.3. Создайте агента с отдельным workspace:
openclaw agents add scout --workspace ~/.openclaw/workspace-scout --non-interactive
В таком виде команда работает при запущенном Gateway. Флаг --bind в той же команде потребовал бы остановить Gateway, поэтому привязку делаем отдельно. В новом workspace появятся AGENTS.md и SOUL.md. Откройте AGENTS.md и в двух-трёх строках опишите роль: «ты проверяешь список из watch.md и пишешь коротко».
1.4. Привяжите бота к агенту и пустите себя в личку:
openclaw agents bind --agent scout --bind telegram:scout
Напишите второму боту любое сообщение. В ответе будет код pairing и ваш числовой Telegram ID, сохраните его для шага 2. Затем:
openclaw pairing list --channel telegram --account scout
openclaw pairing approve --channel telegram --account scout <КОД>
Код действует час.
Как проверить. openclaw agents list --bindings показывает обе привязки: аккаунт default у main, аккаунт scout у scout. openclaw channels status --probe показывает оба аккаунта живыми. Первый бот отвечает как раньше, второй следует новому AGENTS.md. В Control UI на странице Agents (/agents) видны оба агента.
Откат. Сначала уберите аккаунт бота, назвав агента, который остаётся, потом удалите самого агента:
openclaw channels remove --agent main --channel telegram --account scout --delete
openclaw agents delete scout
Workspace и история агента уходят в корзину, а не стираются насовсем. Привязки удалённого агента исчезают вместе с ним.
Шаг 2. Проверка по расписанию, которая молчит без новостей
Пусть scout каждое утро проходит по списку и пишет, только если что-то изменилось. Положите в его workspace файл watch.md: что смотреть и что считать изменением.
Постоянная сессия нужна, чтобы помнить вчерашний отчёт. Режим isolated каждый раз начинает с чистого листа, а session:<id> — именованная сессия, которая хранит контекст между запусками. Документация приводит такой пример: ежедневная летучка, которая опирается на прошлые сводки.
openclaw automations create "0 9 * * *" \
"Следуй watch.md. Сравни с тем, что ты сообщал в прошлые запуски в этой сессии. Если нового нет, ответь только NO_REPLY. Если есть, перечисли изменения коротко, со ссылками. Ничего не запускай командами: если нужно действие, опиши его в отчёте." \
--name "Утренняя проверка" \
--agent scout \
--session "session:morning-watch" \
--tz "Europe/Moscow" \
--announce \
--channel telegram \
--account scout \
--to "<ваш Telegram ID>"
На что обратить внимание:
- без
--agent scoutзадача достанется агенту по умолчанию,main, и CLI об этом предупредит; - без
--tzрасписание считается по часовому поясу машины с Gateway, отсюда частое «почему в шесть утра, а не в девять»; --toнужен обязательно: подтверждение через pairing не делает вас адресатом рассылок, для личных сообщений по расписанию документация требует явного получателя;- слово
NO_REPLYвнутри фразы ничего не глушит: подавление срабатывает, только когда ответ агента состоит из этого слова или заканчивается им. Если в чат всё же пришло само слово, см. «Что может не сработать».
Подробные указания держите в watch.md, а не в тексте задачи. Тогда поведение правится редактированием файла, без пересоздания задачи. Так советует и документация.
Как проверить. Не ждите утра, запустите задачу вручную и дождитесь итога:
openclaw automations list
openclaw automations run <job-id> --wait --wait-timeout 10m
openclaw automations runs <job-id> --limit 5
openclaw automations show <job-id>
Если новости есть, сообщение придёт от второго бота. Если нет, automations show пометит запуск как ok (suppressed), а в строке last delivery suppression будет silent. Это намеренная тишина, а не сбой. Ручной запуск не сбивает расписание. Задача видна и на странице Automations в Control UI.
Откат. openclaw automations disable <job-id> ставит задачу на паузу, openclaw automations remove <job-id> удаляет её. История запусков хранится 7 дней.
Большой конвейер на расписании с проверкой перед публикацией мы разбирали в «Редакции по расписанию».
Шаг 3. Субагент для тяжёлого шага
Субагент — фоновый запуск в отдельной сессии, который агент создаёт инструментом sessions_spawn. Закончив, субагент возвращает отчёт запросившему агенту на проверку. Длинный разбор при этом не засоряет контекст scout, и его можно отдать модели подешевле.
Задайте модель для субагентов scout:
openclaw config set agents.entries.scout.subagents.model "<провайдер/модель>"
Без этой настройки субагент берёт модель родителя. У каждого субагента свой контекст и свой расход токенов.
Из файлов workspace субагент получает только AGENTS.md, без SOUL.md, IDENTITY.md, USER.md и MEMORY.md. Поэтому правило пишите туда: «Если нужно прочитать больше пяти страниц, отдай чтение субагенту и проверь его отчёт сам». Писать вам напрямую субагент не может, инструмента message у него нет. Отвечает вам всегда scout.
Попросите в чате со вторым ботом: «Разбери эти десять ссылок через субагента и дай итог в пять строк».
Как проверить. В том же чате отправьте /subagents list, в списке появится запуск. /subagents info <номер> показывает статус и время, /subagents log <номер> — последние реплики. Опрашивать список в цикле не нужно: результат приходит родителю сам. Если агент говорит, что не может запустить субагента, проверьте /tools: sessions_spawn есть в профилях coding, messaging и full, а в minimal его нет.
Откат. /stop в чате останавливает работу сессии вместе с её субагентами. Настройку модели снимает openclaw config unset agents.entries.scout.subagents.model.
Шаг 4. Ваше «да» перед рискованной командой
По умолчанию команды на машине с Gateway выполняются без вопросов: это режим tools.exec.mode = full. Для scout это поменяем. Режим ask пропускает команды из списка разрешённых (allowlist), а про остальные спрашивает человека.
openclaw config set agents.entries.scout.tools.exec.mode ask
openclaw exec-policy show --agent scout
Изменения в agents и tools применяются без перезапуска Gateway. Вторая команда показывает итоговую политику.
В живом чате кнопки приходят в Telegram. Попросите второго бота: «Посмотри командой df -h, сколько свободного места». Команды нет в allowlist, поэтому запуск остановится и попросит одобрения. Встроенные одобрения в Telegram включены по умолчанию в режиме "auto": они работают, как только есть хотя бы один одобряющий. Одобряющих Telegram берёт из commands.ownerAllowFrom, то есть это вы, а карточка по умолчанию приходит в личку. Решений три: разрешить один раз, разрешить всегда, отказать. Если вместо кнопок пришёл текст с командой вида /approve <id> allow-once, ответьте этой командой. Кнопкам нужно, чтобы channels.telegram.capabilities.inlineButtons разрешал личные чаты: значение dm или all. Без решения запрос истекает через 30 минут.
Из расписания кнопки в мессенджер не приходят. В 2026.10.10 документация пишет прямо: одобрения из запусков по расписанию получают только подключённые клиенты одобрений, то есть Control UI и приложения для macOS, iOS и Android. Чат-каналы их не получают никогда. Пока такой клиент подключён, запуск ждёт решения. Если не подключён никто, команда сразу получает отказ, а в ошибке запуска сказано, что поправить в политике.
Поэтому в шаге 2 мы запретили задаче запускать команды. «Агент спрашивает человека» устроено так:
- Утренний запуск находит, что нужно действие, и описывает его в отчёте.
- Отчёт приходит от второго бота и записывается в историю этого чата: чат принадлежит тому же агенту.
- Вы отвечаете боту: «Сделай пункт 2».
- Это уже живой запуск. Если ему нужна команда, карточка одобрения придёт в Telegram.
Если хотите, чтобы задача по расписанию сама ждала решения, держите открытым Control UI или подключите официальное приложение на телефоне. Решение «разрешить всегда» для изолированного запуска по расписанию создаёт постоянное разрешение ровно на эту команду в этой задаче. Список таких разрешений с кнопкой отзыва — в Control UI, Settings → Approvals, а в терминале — openclaw approvals grants list.
Как проверить. После просьбы про df -h в Telegram пришла карточка, после одобрения — ответ с цифрами. При отказе команда не выполняется, агент получает отказ вместо результата.
Откат. openclaw config unset agents.entries.scout.tools.exec.mode возвращает политику по умолчанию.
Как разделить, что агент делает сам, что проверяет LLM-ревьюер и что только с человеком, мы разобрали в «Автономии с поводком».
Что может не сработать
- Первый бот замолчал после шага 1. У его аккаунта нет хозяина. Посмотрите id аккаунта в
openclaw channels status --probeи выполнитеopenclaw agents bind --agent main --bind telegram:<id>. ОшибкаAGENT_SELECTION_REQUIREDзначит, что для сообщения не нашлось ни привязки, ни агента по умолчанию. channels addпросит--agent. Когда агентов несколько, а системный агент не назначен, команде с флагами нужно явно сказать, в чьём workspace искать плагин канала. Добавьте--agent main.- Задача сработала, а сообщения нет. В
openclaw automations runs <job-id>видно, была ли это намеренная тишина, неверный адресат или ошибка доставки. Заодно проверьте, чтоcron.enabledне выключен. - В чат пришло само слово
NO_REPLY. Подавление документация подробно описывает для изолированных запусков. Для доставки любых задач правило то же:NO_REPLYгасит текстовое сообщение и не роняет запуск. Если у вас вышло иначе, переведите задачу в изолированный режим командойopenclaw automations edit <job-id> --session isolated, а память между запусками держите в файле workspace. - Утренний запуск упал с отказом в команде. Агент всё-таки вызвал команду, а одобрить было некому. Усильте запрет в тексте задачи или в
watch.md. - Задача отключилась сама. После 10 сбоев подряд повторяющаяся задача выключается. Исправьте причину и выполните
openclaw automations enable <job-id>. Выключенные задачи показываетopenclaw automations list --all. - Расписание встало после архивации сессии. Архивация отключает все задачи, привязанные к сессии, а восстановление сессии их не включает. Включите задачу через
automations enable.
Когда этот путь не нужен
- Нужна граница между людьми. Второй агент — отдельная персона, а не песочница. Workspace — рабочая папка по умолчанию, а не стена: абсолютные пути ведут за её пределы, пока не включена песочница (sandbox). Доступ агентов к сессиям друг друга по умолчанию включён, им управляет
tools.agentToAgent. Для строгого разделения документация советует отдельные Gateway. - Проверку можно написать скриптом. Если «есть новое или нет» решает код, модель звать незачем: у расписаний есть задачи-команды и задачи-скрипты без модели. Подробнее в «Наблюдателе без токенов».
- Работа длится днями, и её нельзя начать заново. Расписание с субагентами не продолжит прерванный шаг с места сбоя. Где эта граница и что брать вместо, мы разбирали в «Оркестраторе без графа».
Куда дальше
- Дайте scout кодовую работу: как подключить Claude Code или Codex подчинёнными, описано в «Claude Code в подчинении».
- Научите проверку не будить модель впустую: «Наблюдатель без токенов».
- Прежде чем давать агентам больше свободы, посмотрите, что в OpenClaw пока в бете: «Зрелость без иллюзий».