Пара недель с OpenClaw
Я, конечно, поддался модному веянию и завел себе OpenClaw — фреймворк, состоящий из персонального агента и большого количества обвязок вокруг. Не могу сказать, что использую его на полную мощность, но все же наблюдения уже можно оформлять.
У меня есть достаточное количество не очень активной техники Apple, куда можно было бы поставить OpenClaw — ну, знаете, как народ вдруг повально начал покупать базовую версию mac mini специально для бота. Но я все же не стал этого делать — я не вижу особых проблем с безопасностью, но и особых причин разворачивать бота именно так тоже не заметно. Разве что немалое количество скиллов, которые идут в комплекте с ботом, рекомендуется ставить через Homebrew, ну так совершенно необязательно следовать этим рекомендациям, бинарники везде бинарники.
За две недели использования я нашел только одну проблему, которая бы решилась использованием macos — если хочется, чтобы бот работал с хранилищем Obsidian, то это хранилище не должно находиться в iCloud, как у меня было. Впрочем, я перенес пока хранилище на Cloudflare R2 с достаточно щедрым бесплатным планом — посмотрим, что будет.
Бот у меня работает на отдельном VPS — ему вполне достаточно пары гигабайт памяти, но я выделил 4 VCPU и 8 Gb памяти. Разработчики озадачились сейчас проблемами безопасности, поэтому он немного ругается на то, что сервер слушает общую сеть (lan), но это безопасно — он закрыт от внешнего мира Cloudflare Access, а за ним стоит Cloudflare Zero Trust, так что пробиться к нему совсем непросто. Пришлось немного повозиться с такой конфигурацией — по умолчанию предусматривается либо ssh-тоннель к хосту, либо использование tailscale, но мое решение мне нравится гораздо больше минимумом локальных настроек.
Технически бот не очень отличается от Claude Code или любого другого бота, тем более, что разработчики рекомендуют использовать Claude Opus как основную модель. Да, у него есть дополнительные файлы, типа SOUL.md, где описывается его поведение, но это скорее антропоцентризм — Custom Instructions в веб-интерфейсе чатбота или CLAUDE.md работают точно так же. Принципиальное отличие только одно — бот обладает всеми правами на эти самые файлы и настроен эти права использовать. Поэтому вы можете ничего особо не конфигурировать — просто сказать боту, что вы от него хотите, сказать, что для этого использовать, и он сам себе напишет скилл или инструкции для этого и запишет, как и когда их надо вызывать.
Скажу страшное — можно ему даже API ключи прямо в чате сообщить, он их запишет и начнет использовать. В этом месте где-то должны заплакать параноики, которые уверены, что эту секретную информацию никогда нельзя сообщать агенту. Пусть плачут, а если вам важно обеспечить чистоту и прозрачность, сгенерируйте отдельные ключи к нужным API специально для агента — сможете контролировать и отозвать ключ, если вдруг что.
Так вот, эта легкость — когда бот не спрашивает разрешений и в идеале вы видите только его ответы в мессенджере, — и порождает ощущение магии. Вы формулируете ему задачу, он что-то делает какое-то время — и задача выполнена. Причем вы не знаете, как именно.
Я несколько раз рассказывал самый удивительный пример. У меня довольно обширная статистика в Apple Health. И мне давно хотелось ее объединить с другими данными о здоровье и чтобы всё это мог анализировать AI. Но у Apple Health нет открытого API (ругать Apple тут не стоит — в health tech это практически стандартное поведение вендора, у того же Garmin всё еще хуже), есть только экспорт данных. У меня не было особой надежды, но я сформулировал задачу — как бы мне сообщить боту такие данные. Примерно за следующие 10 минут бот выяснил, что есть способ наладить экспорт — с помощью платной программы для смартфона, но 5 долларов я как-то смог потратить, — сообщил, что сейчас подготовит, что надо, и сказал “Я тут написал небольшой сервер, настрой эту программу вот так и настрой регулярный экспорт на телефоне”.

Меня поразила не скорость, а то, что никаких инструкций и деталей типа “давай напишем сервер для приема данных” я ему не давал, все решение разработано ботом. Я только потом пошел посмотреть, как это вообще выглядит физически — оказался скрипт на Typescript, который слушает себе порт и сохраняет данные в базу. Впрочем, вот про базу уже я ему сказал на следующий день, чтобы не плодить кучу файлов.
И так постепенно я начал переносить в этот бот какие-то рутинные операции. Например, я регулярно читаю научные статьи и исследования и храню их в специальной программе. Но статьи, как правило, объемные и, чтобы быстро понять их содержание, я предпочитаю закинуть PDF в LLM и попросить изложение. Это значит, что мне надо PDF носить руками, задавать один и тот же промпт — очевидно, что требуется автоматизация.
Сначала я хотел построить сценарий в n8n — у меня есть собственный инстанс для этого и это выглядит логично, поскольку у n8n есть масса готовых автоматизаций, не надо ничего писать. К сожалению, практически всегда эти жесткие рамки готовых операций не дают добиться нужного результата. Я сначала долго ругался с AI — что Claude, что Gemini, — которые упорно делали workflow, состоящие из двух типов узлов (HTTP request и Code), после чего просто дал задачу боту. Мы в итоге больше времени решали проблему доступа к сетевому хранилищу статей (оказалось, что я в незапамятные времена сам забанил автономную систему всего хостинга на аккаунте Cloudflare), чем он писал всю логику и тестировал обработку. В результате, каждое утро он проверяет, нет ли свежих статей для обработки и кладет мне саммари в папку Obsidian.
В итоге в бота переехала вся мелкая автоматизация, даже та, которая, вероятно, легко делается сценариями на n8n — я дольше буду открывать интерфейс и придумывать схему (или даже чатиться с Claude/Gemini в вебинтерфейсе), чем давать команду боту в Telegram.
Нет, это не идеальное решение и не обманывайтесь восторгами. В боте не решена проблема памяти — теоретически, там есть сразу несколько механизмов её организации и X пестрит статьями “Мы решили проблему памяти в OpenClaw”, но это вранье — вот только несколько часов назад бот сказал “Мне надо перезапустить gateway, чтобы применить новый навык” и через минуту продолжил “Так, я проверил, что мы сегодня сделали, чем дальше хочешь заняться?”. То есть о том, чем он занимался непосредственно перед рестартом по собственной инициативе, у него вообще никакой информации не осталось.
Можно сказать ему “Запиши и запомни”, конечно. Он даже по своей инициативе предложит сделать отдельный файл — и сделает, и начнет туда записывать какие-то пункты. После следующего сбоя выяснится, что файл существует, но о том, что в него надо смотреть, не сказано в AGENTS.md. А потом я заинтересовался, а что же он постоянно что-то забывает — и оказалось, что есть прекрасный memory search, то есть шикарный гибридный поиск по всей истории всех чатов (именно после одной из статей с рекомендациями и настроенный), но инструкции искать там у его тоже нет.
В конечном счете, вы понимаете, что надо сесть и вручную разобраться с тем, что он помнит и почему не помнит, и не факт, что это тоже поможет полностью — недетерминированность моделей тоже никто не отменял. Но заняться все же надо будет.
Именно по этой причине я не несу в этот бот большие задачи и с удивлением смотрю на людей, которые там разворачивают сложные системы разработки. Я все же не настолько без комплексов и точно не хочу терять контроль над процессом.
Невзирая на это, на роль персонального помощника такой бот вполне подходит. Посмотрим, куда это дальше пойдет.