Агент-сторож: поймать освободившийся слот и купить только после вашего «да»

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

· 8 мин чтения

Коротко

  • Войдите на сайт сами в профиле браузера агента, затем в чате с агентом: /loop 1h <что искать>. Сторож молчит (NO_REPLY), пока слота нет, и пишет вопрос, когда слот появился.
  • Сузьте задаче инструменты и запретите покупать в её тексте. Платёж делает обычный ход агента после вашего «да, 8:05».
  • Ваше «да» — это сообщение, а не замок. Жёсткий замок на деньги ставьте вне агента: не храните карту на сайте и вводите оплату сами.

Проверено по документации OpenClaw 2026.10.3, октябрь 2026; запуском конфиги не проверялись.

Откуда сценарий

В подкасте ClawCast №13 PJ Standley рассказал, как агент жены добыл завтрак в замке Золушки в Disney, распроданный на пару недель вперёд. Агент живёт на отдельном Mac без экрана. PJ один раз подключил монитор, открыл браузер агента и вошёл в аккаунт Disney. Дальше агент каждый час проверял, не отменил ли кто-то бронь, и за два дня до поездки написал жене в Telegram: освободилось 8:05 в ваш день, взять? Места купил агент, но сначала спросил.

Ниже та же схема для любого сайта с записью.

Схема потока

вы: вход на сайт в профиле openclaw (один раз, руками)
вы в чате: /loop 1h …          → задача, привязанная к этому чату
        │
каждый час: отдельный запуск, инструменты: browser
        ├── слота нет           → NO_REPLY, в чат ничего
        ├── не видит расписание → «нужен вход» в чат
        └── слот есть           → «8:05, 2 400 ₽, брать?» в историю чата и в Telegram
                                   │
вы: «да, 8:05»  → обычный ход агента в этом чате (вы на связи)
        → сверяет время и цену → оплата → отчёт
вы: /loop stop

Из чего собрано

Что Примитив Docs
Расписание в вашем чате /loop; задача сессии current Slash commands, Payloads
Вопрос попадает в чат итог запуска пишется в историю разговора и уходит в канал Delivery
Аккаунт на сайте профиль openclaw, ручной вход Browser login
Узкие права сторожа automations edit --tools Automations CLI
Проверка без модели trigger.script Schedules

Как собрать

1. Браузер и вход. У агента должен быть инструмент browser: в профиле coding его нет, нужен alsoAllow: ["browser"] (Browser setup). Профиль openclaw отделён от вашего обычного браузера. Входите руками: openclaw browser start, затем openclaw browser open https://<сайт>. Документация прямо предупреждает, что автоматический вход будит антибот-защиту и может заблокировать аккаунт.

На Linux без дисплея браузер агента запускается без окна. Тогда входите через Control UI: панель Browser показывает этот браузер вживую и передаёт ваши клики и ввод, пароль можно вставить из буфера (Control UI panels). Нужно подключение к Control UI с правами администратора.

Если у агента включена песочница, запуски по расписанию могут пойти в браузер песочницы, где вашего входа нет. Тогда разрешите агенту браузер хоста: agents.defaults.sandbox.browser.allowHostControl: true.

2. Сторож. В чате, куда хотите получать вопрос:

/loop 1h Открой в браузере, профиль openclaw, страницу записи <ссылка>.
Ищи свободное время 20–22 ноября с 8:00 до 11:00. Ничего не бронируй и не оплачивай.
Слота нет — ответь NO_REPLY. Есть — одной строкой: дата, время, цена, ссылка
и «Брать? Ответьте: да, <время>». Не видишь расписания или сайт просит вход,
код, капчу — ничего не вводи, напиши «нужен вход» и что видишь.

/loop — команда владельца: его записывает commands.ownerAllowFrom, в Telegram туда попадает первый одобренный при спаривании, если владельца ещё нет. Команда просит агента создать задачу, привязанную к этому разговору. Каждый запуск идёт отдельно, без присмотра, а итог дописывается в историю чата и уходит в канал. NO_REPLY не отправляет ничего.

Задача, которую создал агент, по умолчанию получает все инструменты разговора. Сузьте их и проверьте, что сохранилось:

openclaw automations list
openclaw automations edit <job-id> --tools browser,skills_read \
  --model "<модель>" --light-context --timeout-seconds 600
openclaw automations get <job-id> --json
openclaw automations run <job-id>

skills_read нужен, чтобы подтянулся встроенный навык работы с браузером. В выводе get проверьте текст задачи: агент мог пересказать ваш промпт, и запрет покупать должен остаться на месте. Ручной run при отсутствии слота должен пройти молча. Для проверок статуса документация советует лёгкую модель, но на сложном календаре она чаще ошибается, а ложное «слота нет» вы не увидите.

3. Ответ и покупка. Отвечайте с названием слота: «да, 8:05». Сторож будет присылать тот же слот каждый час, пока тот висит. Запуск видит только хвост чата на момент создания задачи, то есть ваших ответов не видит, и голое «да» под тремя одинаковыми вопросами двусмысленно.

Документация говорит, что итог запуска записывается в историю чата. Что ваш ответ после этого подхватит обычный ход агента с вопросом в контексте, — наш вывод, прямого примера в docs нет. Проверьте на первом вопросе: ответьте «нет, 8:05 не надо» и посмотрите, отвечает ли агент по существу.

В правила агента (AGENTS.md) запишите: покупать только после «да» с названным слотом; перед оплатой сверить время и цену с вопросом; если отличаются или слот ушёл, сказать и спросить снова, соседний не брать. Отказались от слота — попросите агента дописать в задачу «8:05 не предлагать».

4. Остановка. После покупки: /loop stop. Владелец может и попросить агента удалить задачу (Manage automations). Самоудаление задачи документация допускает, но ради него сторожу пришлось бы дать управление задачами. Остановите руками и проверьте, что в openclaw automations list сторожа нет.

Дешёвая проверка. Если свободные места видны без входа, отдельным JSON или в HTML, модель на каждый час не нужна: trigger.script сравнивает список с прошлым и будит модель только при новом слоте. Как его написать, разобрано в материале «Наблюдатель без токенов». Если места видны только после входа или страницу рисует JavaScript, без браузера и модели не обойтись.

Где человек

Человек нужен в трёх местах: вход на сайт, «да» перед оплатой, /loop stop.

Почему вопрос — обычное сообщение, а не встроенный механизм одобрений:

  • ask_user (вопрос с кнопками, в Telegram нативными) есть только в основной сессии, у запусков по расписанию его нет. Ждёт он не дольше часа и без ответа продолжает «по своему усмотрению», а для денег это плохой исход.
  • Одобрения exec из запусков по расписанию в чат не приходят, только в Control UI и приложения. Да и клик «Оплатить» в браузере не exec.

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

Строгий замок внутри OpenClaw — свой плагин с хуком before_tool_call, который требует одобрения (Tool policy hooks). Это уже разработка, и куда придёт такой запрос из запуска по расписанию, docs не описывают. Надёжнее замок снаружи: не храните карту в аккаунте сайта и вводите оплату сами, а агент доводит до корзины. Если без сохранённой карты никак, подойдёт карта с лимитом и подтверждение платежа в приложении банка.

Сколько стоит

Своих замеров нет, считаем по формуле. N — проверок в сутки, D — дней, T — токенов на запуск с браузером. Расход: N × D × T. Каждый час две недели — 336 запусков, при условных 20 тысячах токенов на запуск около 6,7 млн. Реальное T замерьте на ручном прогоне: сравните /usage cost до и после, если в это время ничего другого не шло. Деньги — токены, умноженные на тариф провайдера.

С trigger.script модель работает столько раз, сколько появлялись слоты. Покупка — один ход с браузером в любом случае.

Где ломается

  • Капча, код из SMS, разлогин. Не решайте их агентом: сторож пишет «нужен вход», вы входите сами. Это обычное сообщение, оно будет приходить каждый час, пока не войдёте.
  • Запуск упал (браузер не стартовал, ошибка модели). После двух сбоев подряд разговор получит запрос на починку, после десяти задача выключится. Вернуть: openclaw automations enable <job-id>.
  • Тишина — не доказательство. Молчат и «слотов нет», и выключенный Gateway: расписания работают внутри его процесса. Раз в день смотрите openclaw automations runs <job-id>.
  • Частота и правила сайта. Раз в час — темп PJ. Чем чаще проверки, тем больше риск блокировки аккаунта. Браузер в песочнице, по документации, чаще ловит антибот-защиту. Прочитайте правила сайта до запуска: если они запрещают автоматизацию, сторож не нужен.
  • Слот ушёл или цена изменилась, пока вы думали. Для этого в правилах агента сверка перед оплатой.

Когда брать другое

  • У сайта есть свой лист ожидания или уведомления об отменах: включите их.
  • Места разбирают за секунды после открытия продаж. Ежечасный сторож не успеет, а частый опрос — прямой путь к блокировке.
  • Сайт перешёл на лотерею. В подкасте, в разговоре о кемпингах на recreation.gov, прозвучало предположение, что с агентами такие системы, вероятно, туда и перейдут: ранний подъём к кнопке больше не показывает, кому это нужнее.