- BrainTools - https://www.braintools.ru -
Бесплатные модели, телеграм-бот и суб-агенты

Прогресс не стоит на месте, и вот уже люди догадались дать «искусственному интеллекту» доступ к своим «железкам» 😊. Весело — без сомнений, полезно — возможно, небезопасно — сто процентов. В интернете полно гайдов о том, как запустить и настроить OpenClaw. Но знаете что? Они все какие-то поверхностные, что ли. Все эти гайды можно разделить на два типа. Первый: «Я подключил LLM от Anthropic за 100 баксов в месяц, а потом просил бота настроить самого себя. Через неделю (и 100B токенов) у меня получилось добавить не лагающий полезный скилл» =)). Второй: «Для установки OpenClaw пишем команду в терминал, нажимаем сюда, выбираем сюда. Для подключения Telegram копируем код, который он прислал, и отправляем команду. Всё». На этом инструкция заканчивается. Я решительно собираюсь исправить эту ситуацию своей статьёй!
Началось всё с того, что по работе мне нужно было автоматизировать некоторые задачи. Сначала для автоматизации я хотел использовать n8n [1]. Но когда начал разбираться, понял, что n8n очень хорошо настраивается под одну конкретную задачу. А мне хотелось, чтобы я мог автоматизировать решение сразу «класса задач». Например, проверка документов разного типа с возможностью поиска информации в интернете и сохранение отчета. Да и к тому же мне не очень хотелось разбираться во всех этих инструментах построения workflow (времени на это реально нет). И тут я наткнулся на OpenClaw [2].
Хайп вокруг этой штуки нешуточный. Посмотрите только на объемы потребляемых токенов на OpenRouter. Все они идут на обслуживание маленьких “клешнявых помощников”.

Статья получилась неоправданно объемной, и пришлось разбить её на две части. Во второй части я расскажу, как настроить команду агентов и их взаимодействие между собой. Надеюсь, она появится в ближайшее время. Итак, приступим.
Оглавление:
– Настройка raspberry pi [3]
– Установка OpenClaw [4]
– Настройка OpenClaw [5]
— web ui [6]
— модели [7]
— сессии [8]
— файлы.md [9]
— heartbeat [10]
— инструменты (tools) [11]
— навыки (skills) [12]
— настройка телеграм [13]
— cron [14]
– Запуск OpenClaw [15]
– Доп. Агенты [16]
– СубАгенты [17]
Кажется, этой статьи бы не случилось, не будь у меня под рукой (в комоде под толстым слоем пыли) всем нам хорошо знакомой малинки. Когда-то давно мне подарили её на день рождения, и с тех пор Raspberry Pi лежала без дела, имея на борту 8 ГБ оперативной памяти [18]. Но время пришло.
Для настройки Raspberry Pi я частично пользовался вот этой [19] статьей и видеороликами в интернете.
# установка библиотек
apt install -y curl gnupg lsb-release jq tmux lxd
# меняем права доступа для ключей
chmod 700 /home/claw/.ssh
# назначаем правильные права на файл и передаем владение папкой пользователю claw:
chmod 600 /home/claw/.ssh/authorized_keys
chown -R claw:claw /home/claw/.ssh
# защита SSH
sudo sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart ssh
# ограничение размера логов
sudo sed -i 's/^#SystemMaxUse=.*/SystemMaxUse=100M/' /etc/systemd/journald.conf
sudo sed -i 's/^SystemMaxUse=.*/SystemMaxUse=100M/' /etc/systemd/journald.conf
systemctl restart systemd-journald
journalctl --vacuum-size=100M
# скачиваем и устанавливаем nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# вместо перезапуска оболочки применяем изменения в текущей сессии:
. "$HOME/.nvm/nvm.sh"
# скачиваем и устанавливаем Node.js
#(можно не делать, установится автоматически командой для установки бота - OpenClaw):
nvm install 22
# проверить версию Node.js:
node -v # должно вывести "v22.22.0"
# в соседнем окне терминала создаем SSH-туннель для проброса портов (понадобится позже)
ssh -N -L 18789:127.0.0.1:18789 claw@192.168.2.236
Чтобы бот работал внутри контейнера (на Raspberry Pi):
# устанавливаем lxc
sudo apt-get install zfsutils-linux -y
sudo lxd init # не паримся, просто прожимаем Enter много раз
# запускаем контейнер
sudo lxc launch ubuntu:24.04 openclawbot # где openclawbot — это название нашего контейнера
Для следующего запуска и остановки контейнера используются команды lxc start <container’s name> и lxc stop <container’s name>. Посмотреть все контейнеры: sudo lxc list --columns=n,s. Удалить контейнер: sudo lxc rm <container’s name>
# заходим в контейнер (чтобы установить бота)
sudo lxc exec openclawbot -- bash
#(Лучше перед установкой нашего бота в контейнер обновить пакеты:
apt-get update, apt-get dist-upgrade -y, apt-get autoremove --purge -y.)
Raspberry Pi настроена, далее нужно установить OpenClaw в контейнер.
Включаем VPN и в контейнере выполняем команду (если нет VPN, копируем файл install.sh [21], создаем локально такой же файл на Raspberry Pi и выполняем bash install.sh [21]):
curl -fsSL https://openclaw.ai/install.sh | bash
После установки необходимых пакетов запускаем настройщик (OpenClaw в режиме онбординга):
openclaw onboard --install-daemon # флаг позволяет OpenClaw создать демона для systemd
Нажимаем ModelAuth provider
Выбираем °OpenRouter
Выбираем модель. Если модели нет в списке, выбираем «Enter model manually» и добавляем её вручную. На данном этапе мы можем выбрать только одну модель, но чуть позже мы добавим ещё несколько. Советую: openrouter/z-ai/glm-4.5-air:free.
Жмём °Channels
Выбираем Telegram, после чего OpenClaw попросит передать ему API-токен, полученный при создании Telegram-бота в чате “BotFather”. Подключением Telegram мы займемся позже, после того как отредактируем конфигурационные файлы OpenClaw.
Поскольку OpenClaw запущен в контейнере, systemd gateway daemon не сможет стартовать. Вы увидите такое сообщение: «systemd user services are unavailable; install/enable systemd or run the gateway under your supervisor.» Это не проблема, потому что мы запустим OpenClaw gateway вручную.
После установки можно проверить работу системы:
openclaw doctor # проверка конфигурации
openclaw status # статус gateway
# openclaw dashboard # открыть веб-интерфейс
На этом этапе (да и в дальнейшем) можно выйти из контейнера (exit) и создать снапшот контейнера, чтобы в любой момент можно было восстановить контейнер:
lxc snapshot openclawbot install
# подразумевается, что этот снапшот был сделан сразу после установки OpenClaw
Если в дальнейшем что-то сломается, восстановить работу контейнера openclawbot можно будет из снапшота install: lxc restore openclawbot install.
Если вы предпочитаете настраивать агента через веб-интерфейс, то вот вам команда, которая его запускает. Но учтите: в этой статье нет ничего про использование Web UI.
Чтобы веб-интерфейс заработал, нужно запустить шлюз с дополнительным параметром — «порт»:
openclaw gateway --port 18789
Затем зайти на адрес 127.0.0.1:18789 (чтобы подключаться с рабочего хоста, должны быть проброшены порты, см. «создаём SSH-туннель»).
Адрес: http://localhost:18789/#token=b373fb33996f356519ada7c523454ae2e341fkej570c9808e
[22]Токен можно посмотреть в openclaw.json по ключу gateway.auth.token:
cat .openclaw/openclaw.json
Есть те, кто настраивает OpenClaw с помощью самого OpenClaw. Просто пишут запрос агенту в Telegram, чтобы он исправил сам себя. Для того чтобы это сработало, нужна хорошая («умная») модель типа Claude-Sonnet ≥ 4.5. Во-первых, не у всех она есть. А во-вторых, даже после такой настройки не лишним будет проверить, что же конкретно изменилось в конфигах. Если вы понимаете, как это работает, хуже от этого не будет.
Таким образом, мы пойдём по третьему пути и будем редактировать конфиги вручную.
.openclaw/openclaw.json — основной конфигурационный файл, находится в директории .openclaw. Чтобы открыть и отредактировать файл, используем nano или любой другой редактор:
nano openclaw.json
Для начала давайте добавим ещё моделей в наш конфиг. Мы будем использовать бесплатные модели от OpenRouter (проверяйте список актуальных моделей самостоятельно):
▫ openrouter/arcee-ai/trinity-large-preview:free
▫ openrouter/tngtech/tng-r1t-chimera:free
▫ openrouter/qwen/qwen3-coder:free
▫ openrouter/qwen/qwen3-next-80b-a3b-instruct:free
▫ openrouter/z-ai/glm-4.5-air:free
▫ и т. д.
Открываем конфиг и указываем, какая модель будет использоваться как основная (primary). Общий совет: не использовать дорогую и тяжеловесную модель в качестве основной. Дело в том, что агент может выполнять работу в параллельном режиме. Т. е. агент с его настройками клонируется, задача разбивается на несколько подзадач, и каждый клон решает свой кусочек большой задачи (декомпозиция). При этом клоны (как и основной main-агент) могут пользоваться разными моделями, указанными в конфиге, для решения своей подзадачи. Сценарий работы примерно такой: основная модель (primary) получает задачу, выбирает, какими силами её решать, запускает клонов агента с разными моделями под капотом, получает результат и отправляет пользователю.
Поэтому указываем несколько доступных моделей в конфиге main-агента и для сложных задач выбираем модель побольше. Добавляем сокращённые имена моделей (alias). Также добавляем модель для обработки изображений.
nano .openclaw/openclaw.json
{
agents: {
defaults: {
model: {
primary: "openrouter/z-ai/glm-4.5-air:free",
fallbacks: ["openrouter/arcee-ai/trinity-large-preview:free"],
},
models: {
"openrouter/arcee-ai/trinity-large-preview:free": { alias: "trinity" },
"openrouter/z-ai/glm-4.5-air:free": { alias: "air" },
},
imageModel: {
primary: "openrouter/qwen/qwen-2.5-vl-72b-instruct:free",
fallbacks: ["openrouter/google/gemini-2.0-flash-vision:free"],
},
thinkingDefault: "low",
verboseDefault: "off",
elevatedDefault: "on",
timeoutSeconds: 600,
mediaMaxMb: 5,
contextTokens: 200000,
maxConcurrent: 3,
},
},
}
Как видим, в качестве основной выбрана более легковесная модель, а также добавлены ссылки (alias), которые позволяют указывать в тексте сообщения (или в команде боту), какую модель использовать. fallbacks — запасные варианты, здесь можно перечислить несколько моделей. Например, добавить ещё openrouter/tngtech/tng-r1t-chimera:free. Ссылки (alias) не обязательно должны быть связаны с названием модели. Вы можете указать роль или специализацию той или иной модели, просто отразив это в названии. Например, ссылка может быть «secretary», «coder» или «security», ну вы поняли.
Мы используем OpenRouter в качестве провайдера, максимальная, доступная (бесплатная) версия GLM на данный момент — 4.5. В документации [23] OpenClaw говорится, что если использовать Synthetic в качестве провайдера, то можно пользоваться бесплатно GLM-4.7. Бесплатные модели “synthetic”:

Так ли это на самом деле, я не проверял, и где взять API-ключ Synthetic, я не знаю.
Также из плюшек есть OpenCode с opus-4.6 (opencode/claude-opus-4-6) — дешевле, чем от Anthropic. Но для этого нужно иметь Zen-API-key (openclaw onboard –opencode-zen-api-key “$OPENCODE_API_KEY”).
Чтобы добавить локальную модель, используется Ollama [24]. Сначала установите Ollama и скачайте модель. Потом добавьте в конфигурацию apiKey: «ollama-local» и перепишите конфиг шлюза.
Install Ollama, then pull a model:
ollama pull llama3.3
# or
ollama pull gpt-oss:20b
# or
ollama pull qwen2.5-coder:32b
# or
ollama pull deepseek-r1:32b
# Configure in your config file
openclaw config set models.providers.ollama.apiKey "ollama-local"
.openclaw/openclaw.json:
{
agents: {
defaults: { model: { primary: "ollama/llama3.3" } },
},
}
На этом с моделями можно закончить.
При обращении к агенту запускается новая сессия (если период между обращениями > 15 мин). В 4 утра по местному времени создаётся новая сессия. У сессии есть своё ограничение по токенам контекста, которое OpenClaw берёт из описания модели провайдером. Когда контекст заполняется на ~90%, вызывается автоматическое сжатие контекста (Compaction [25]).
Если вы планируете предоставить доступ к вашему OpenClaw другим пользователям и хотите, чтобы у каждого пользователя был свой файл сессии, то вам нужно указать это в настройках.
Открываем файл ~/.openclaw/openclaw.json и меняем dmScope (по умолчанию — main):
{
session: {
// Secure DM mode: isolate DM context per channel + sender.
dmScope: "per-channel-peer",
},
}
Возможны четыре варианта настройки dmScope (DirectMessage Scope):
main (по умолчанию): все пользователи совместно используют основную сессию для обеспечения непрерывности взаимодействия с агентом.
per-peer: изолированные сессии по идентификатору отправителя.
per-channel-peer: изолировать по каналу + отправитель (рекомендуется для многопользовательских почтовых ящиков). Как я понял, если вы хотите, чтобы в Telegram и WhatsApp у вас были разные сессии, используйте этот параметр.
per-account-channel-peer: изолировать по учётной записи + каналу + отправителю (рекомендуется для почтовых ящиков с несколькими учётными записями). Если вы хотите, чтобы два ваших аккаунта в Telegram имели разные сессии.
(Если один и тот же человек связывается с вами по нескольким каналам, используйте session.identityLinks для объединения его личных сообщений в один канонический идентификатор.)
Проверить настройки личных сообщений можно с помощью команды openclaw security audit.
Можно настроить, где и в каком количестве хранятся ваши сессии, а также через сколько дней удалять/сжимать файлы сессии.
session.maintenance.mode: warn
Доступны два режима: «warn» и «enforce». В режиме «warn» шлюз сообщает, что будет удалено, но не изменяет записи сессий (т. е. не переписывает существующие файлы). В режиме «enforce» происходит удаление и архивация записей.
session.maintenance.pruneAfter: 30d # Записи старше этого периода будут удалены
session.maintenance.maxEntries: 500 # Максимальное количество записей
session.maintenance.rotateBytes: 10mb # заменять session.json, когда размер файла превысит указанное количество дискового пространства
session.maintenance.resetArchiveRetention: по умолчанию используется значение pruneAfter (30d)
Советы по настройке этих параметров [26]:
используйте mode: “enforce” в продакшене, чтобы рост ограничивался автоматически;
устанавливайте ограничения по времени и количеству (pruneAfter + maxEntries), а не только по одному из этих параметров;
запускайте openclaw sessions cleanup –dry-run –json после изменения конфигурации;
и т. д.
Пример openclaw.json с настройками сессий:
{
session: {
maintenance: {
mode: "enforce",
pruneAfter: "45d",
maxEntries: 800,
rotateBytes: "20mb",
resetArchiveRetention: "14d",
},
},
}
openclaw status # показывает путь к хранилищу и последние сеансы
openclaw sessions --json # выводит все записи сессий
И советую почитать доку [27] по настройке сессии — там много чего ещё есть.
Основная сессия (main) сохраняется в: ~/.openclaw/agents/main/sessions/sessions.json
Проверить текущие сессии: openclaw sessions list
Далее редактируем AGENTS.md. Этот файл содержит описание того, как агент должен себя вести, например в групповых чатах, или что делать при старте сессии и т. п. Самый первый и самый важный файл контекста, который поступает в LLM. Находится по адресу .openclaw/workspace/AGENTS.md.
На самом деле изначально он заполнен какой-то непонятной чушью. И если вы пользуетесь дешёвой LLM или, как я, бесплатной, с небольшим (128K) окном контекста, то в исходном виде он будет скорее ухудшать ответы, чем помогать с ними. Поэтому смело удаляйте содержимое файла и добавляйте в него примерно такие строки:
SESSION INITIALIZATION RULE:
On every session start:
1. Load ONLY these files:
- SOUL.md
- USER.md
- IDENTITY.md
- memory/YYYY-MM-DD.md (if it exists)
2. DO NOT auto-load:
- MEMORY.md
- Session history
- Prior messages
- Previous tool outputs
3. When user asks about prior context:
- Use memory_search() on demand
- Pull only the relevant snippet with memory_get()
- Don't load the whole file
4. Update memory/YYYY-MM-DD.md at end of session with:
- What you worked on
- Decisions made
- Leads generated
- Blockers
- Next steps
Эти правила я взял у одного ютубера, который утверждает, что сократил расход токенов своим агентом на 97%. Вот полный список [28] того, что он советует изменить.
Добавляем в системный промт (файл AGENTS.md) правила по использованию моделей. Например, такие:
MODEL SELECTION RULE:
Default: Always use Haiku
Switch to Sonnet ONLY when:
- Architecture decisions
- Production code review
- Security analysis
- Complex debugging/reasoning
- Strategic multi-project decisions
When in doubt: Try Haiku first
Также стоит добавить правила, ограничивающие количество и скорость запросов LLM-ок:
RATE LIMITS:
- 5 seconds minimum between API calls
- 10 seconds between web searches
- Max 5 searches per batch, then 2-minute break
- Batch similar work (one request for 10 leads, not 10 requests)
- If you hit 429 error: STOP, wait 5 minutes, retry
Для настройки Агента также отредактируем openclaw.json. Прописываем
{ agent: { skipBootstrap: true } }
Также я советую использовать блочную [29] передачу сообщений, если вы пользуетесь Telegram для общения с агентом. Для этого:
openclaw config set agents.defaults.blockStreamingDefault "on"
openclaw config set agents.defaults.blockStreamingBreak "text_end"
Ещё можно почитать про настройку стриминга сообщений Telegram: Live stream preview [30] (message edits). Это настройка похожа на блочную передачу сообщений, о которой говорилось ранее.
В настройках сессии мы уже говорили о том, что OpenClaw производит автоматическое сжатие контекста сессии (compaction). Сжатие объединяет старые диалоги в компактную сводную запись, при этом последние сообщения сохраняются без изменений. Параметрами сжатия также можно управлять:
{
agents: {
defaults: {
compaction: {
mode: "safeguard", // default | safeguard
reserveTokensFloor: 24000, // резервный уровень токенов
memoryFlush: { // сброс данных из памяти
enabled: true,
softThresholdTokens: 6000, // мягкие пороговые значения токенов
systemPrompt: "Session nearing compaction. Store durable memories now.",
prompt: "Write any lasting notes to memory/YYYY-MM-DD.md; reply with NO_REPLY if nothing to store.",
},
},
},
},
}
Для принудительного вызова сжатия контекста сессии используйте команду /compact в Telegram.
Кроме сжатия контекста существует ещё сокращение контекста (context pruning). Отличие в том, что:
Compaction: обобщает и сохраняет историю сессий в формате JSONL.
Context pruning: по запросу удаляет старые результаты работы с конкретным инструментом (tool) из контекста перед отправкой в LLM. Не изменяет историю сеансов на диске.
{
agents: { defaults: { contextPruning: { mode: "cache-ttl", ttl: "5m" } } },
}
Включить «обрезку» с поддержкой инструмента ttl.
.openclaw/workspace/SOUL [31].md
Файл для описания «характера» бота: его привычки, стиль общения и т. п. Расположен в директории workspace (.openclaw/workspace/SOUL.md).
.openclaw/workspace/IDENTITY.md
Хранит имя агента, кто он по происхождению и т. д. Заполняем на своё усмотрение.
Данные о пользователе: как зовут, чем увлекается, где работает и т. д.
.openclaw/workspace/USER.md
«Биения сердца». Действия, которые бот выполняет раз в 30 минут (и жрёт токены). Подумайте, нужно ли оно вам, прежде чем что-то сюда прописывать.
В конфиг-файле также можно указать, какую модель использовать для выполнения heartbeat («сердцебиений»), и задать время (поставьте “every”: “0m”, чтобы отключить heartbeat):
"heartbeat": {
"every": "2h",
"model": "openrouter/meta-llama/llama-3.3-70b-instruct:free",
"session": "main",
"target": "slack",
"prompt": "Check: Any blockers, opportunities, or progress updates needed?"
}
Если говорить о MD-файлах (AGENT/SOUL/IDENTITY и т. д.), то для выполнения задач агенту не требуется знать всю эту чушь о вас и историю переписки за последнюю неделю. Ему нужны чёткие правила поведения [32], такие, чтобы он не запостил ваши API-ключи в интернет и не удалил чувствительные файлы ОС. Весь этот контекст требуется только чтобы ответы агента вам нравились и вам казалось, что перед вами не просто тупая LLM, а живое существо, пусть и примитивное, но наивное и доброе. Поэтому любые задачи стараемся перераспределить на суб-агентов. Которым не нужен весь этот контекст — им нужны только чёткие границы, цели и инструменты достижения успеха. Да, мне кажется, наилучший сценарий использования OpenClaw-бота — это превратить main-агента в милого и наивного секретаря (бесплатная модель на OpenRouter), который отдаёт ваши задачи опытным монстрам, прожжённым профессионалам, с сотнями миллиардов параметров под капотом и платой за их услуги.
По умолчанию в OpenClaw установлено порядка 20 инструментов, которые позволяют работать с файлами, работать в терминале, пользоваться браузером, записывать голосовые сообщения и т. д.
Интересно тут то, что инструменты объединены в группы [33]. Например, есть группа инструментов для работы с файлами — «fs», в которую входят: «read», «write», «edit», «apply_patch». Есть группа «web» с инструментами «web_search», «web_fetch» («web_fetch» — анализ URL-ссылки). И так далее. Также есть готовые профили инструментов, которые включают в себя как отдельные tool, так и группы tool-ов.
Пользователю предлагается задать те или иные инструменты для работы агента. Можно указать агенту, какие инструменты использовать (allow), а какие находятся под запретом (deny). Выглядеть это может примерно так:
{
tools: {
profile: "messaging",
allow: ["slack", "discord"],
deny: ["browser"],
},
}
Выбран профиль «messaging», который включает в себя: «group:messaging», «sessions_list», «sessions_history», «sessions_send», «session_status». Также перечислены доступные мессенджеры (“slack”, “discord”) и запрет на использование браузера.
Или другой пример (выбран профиль «кодирование», но с запретом на выполнение/запуск процессов):
{
tools: {
profile: "coding",
deny: ["group:runtime"],
},
}
Всё это указывается по ключу agents. Также можно настроить политику использования инструментов для конкретного провайдера [34].
Забавно, что в OpenClaw есть инструмент, позволяющий отслеживать зацикливания (loop-detection), но по умолчанию он выключен. ?!? Включить его можно с помощью tools.loopDetection.enabled: true:
{
tools: {
loopDetection: {
enabled: true,
},
},
}
При первом запуске пропускаем эту настройку.
Если говорить совсем просто, то скиллы — это файлы с описанием алгоритма действий для решения той или иной задачи: какую задачу решает, какие инструменты использовать, на каких сайтах можно прочитать документацию и т. д. Т. е. скилл — это контекст, загружаемый в LLM, чтобы ей легче было решить ту или иную задачу, чтобы не объяснять несколько раз одно и то же. Файлы скиллов, а вернее текст в них, оформляются в специальном заданном формате. Также в скиллах можно указать скрипты, которые могут пригодиться, например img_reader.py, который хранится в той же директории. У каждого навыка есть два файла: SKILL.md и YAML-заголовок (front matter).
По умолчанию есть несколько скиллов: healthcheck — аудит безопасности, skill-creator — создание скиллов, video-frames — обработка видео, weather — погода. Есть два типа навыков — общие для всех агентов и личные навыки каждого агента. Общие навыки хранятся в директории .openclaw/skills/<skill_name>/. Личные навыки агента хранятся в директории .openclaw/workspace-<agentId>/skills/<skill_name>/
Навыки можно добавлять вручную, можно скачивать готовые (но только после проверки информации, которую содержат файлы скиллов). По умолчанию в OpenClaw имеется навык по созданию навыков =)). Советую пользоваться им, но аккуратно.
хаб скиллов: https://clawhub.ai/
[35]установить навык:
openclaw skills add <skill name>
Есть те, кто предпочитает общаться с агентом в терминале. Не могу вам этого запретить, поэтому оставлю команду вызова интерфейса:
tmux
openclaw tui
Мы же будем подключать Telegram, и всё наше взаимодействие с OpenClaw будет происходить там.
После того как мы отредактировали все основные файлы, можем добавить общение в Telegram. Для этого нам нужно будет запустить gateway.
Пишем сообщение боту. На первое сообщение (когда параметр dmPolicy: pairing) он пришлёт код (Pairing code: NWDA92HN). Его нужно скопировать и выполнить команду в терминале (не в tui-сессии):
openclaw pairing approve telegram <код> # код действителен 1 час
После того как произошло сопоставление, бот начнёт отвечать и выполнять ваши команды.
Настройки OpenClaw, в том числе и Telegram, хранятся в .openclaw/openclaw.json.
Чтобы добавить других пользователей, которые смогут общаться с вашим ботом, ищем в openclaw.json «channels.telegram.dmPolicy». channels.telegram.dmPolicy контролирует правила доступа к сообщениям, возможны четыре варианта: [pairing, allowlist, open, disabled].
Меняем состояние “pairing” на “allowlist” и указываем ID пользователей:
{
channels: {
telegram: {
dmPolicy: "allowlist",
allowFrom: ["123456789", "987654321"]
}
}
}
Проверить allowlist: openclaw config get channels.telegram.allowFrom
Как уже было сказано, можно сделать так, чтобы для каждого пользователя создавалась отдельная сессия [27] (dmScope: “per-account-channel-peer”) и контексты разных людей не влияли друг на друга. Но также можно создать дополнительного агента (и, соответственно, Telegram-бота), который будет отвечать в разных чатах. Например, агент для работы и агент для дома.
{
channels: {
telegram: {
accounts: {
default: {
name: "Primary bot",
botToken: "123456:ABC...",
},
alerts: {
name: "Alerts bot",
botToken: "987654:XYZ...",
},
},
},
},
}
Дополнительную информацию о том, как это сделать, смотри в разделе «Агенты [16]».
Список команд доступных в телеграм боте по умолчанию:
|
Команда |
Значение |
Команда |
Значение |
|
/help |
Показать доступные команды |
/compact |
Сжать файлы контекста |
|
/commands |
Перечислить все команды |
/think |
Установить уровень модели |
|
/skill |
Запустить навык (по названию) |
/verbose |
Переключить в подробный режим |
|
/status |
Текущее состояние |
/reasoning |
Переключить видимость рассуждений |
|
/approve |
Утвердить/отклонить запросы на выполнение (exec) |
/elevated |
Переключить повышенный режим |
|
/context |
Объяснить как использовать контекст |
/exec |
Установить значение «exec» по умолчанию |
|
/export_session |
Экспортировать текущую сессию |
/model |
Текущая модель или задать модель |
|
/tts |
Управление функцией текст в речь |
/models |
Доступные модели |
|
/whoami |
Указать свой ID |
/queue |
Изменить параметры очереди |
|
/subagents |
Запустить субагента (имя) |
/dock_telegram |
Перекючиться на телеграм |
|
/kill |
Остановить субагента |
/dock_discord |
Перекючиться на дискорд |
|
/steer |
Отправить команду субагенту |
/dock_slack |
Перекючиться на слак |
|
/usage |
Информация об затратах |
/healthcheck |
Проверка состояния здоровья |
|
/stop |
Остановить выполнение |
/skill_creator |
Создатель навыков |
|
/restart |
Перезапустить openclaw |
/tmux |
Удаленное управление сеансами |
|
/activation |
Режим групповой активации |
/weather |
Текущая погода |
|
/send |
Задать политику отправки сообщений |
/pair |
Установить код для сопряжения устройства |
|
/reset |
Сбросить текущий сеанс |
/phone |
Включение/выключения телефонного узла |
|
/new |
Начать новый сеанс |
/voice |
Задать голос аудиосообщений |
Добавление кастомных команд. Чтобы добавить свою собственную команду, нужно опять изменить конфиг-файл:
{
channels: {
telegram: {
customCommands: [
{ command: "backup", description: "Git backup" },
{ command: "generate", description: "Create an image" },
],
},
},
}
При создании кастомных команд помните, что:
имена нормализованы (сначала «/», потом идут строчные буквы);
допустимые символы: a-z, 0-9, _, длина 1..32;
пользовательские команды не могут переопределять собственные команды, конфликты/дубликаты пропускаются.
Настройка политики повторных попыток [36]. Иногда при взаимодействии с Telegram сервера могут вернуть ошибку [37] (429, timeout, connect/reset/closed, temporarily unavailable). «Политика повторных попыток» говорит, что делать в таком случае:
{
channels: {
telegram: {
retry: {
attempts: 3, // попытки (сколько раз будем повторять запрос)
minDelayMs: 400, // минимальная задержка отправки сообщения
maxDelayMs: 30000, // максимальная задержка
jitter: 0.1, // дрожание (?), задаётся в процентах (от 0 до 1)
},
},
},
}
Входящие сообщения могут управлять текущим обращением к агенту, как если бы вы хотели уточнить ваш запрос по мере его выполнения. Сообщения могут ожидать следующего вызова агента (накапливаться в очереди) или выполнять обе функции [38]:
steer: немедленно внедряется в текущий запрос (отменяет ожидающие выполнения вызовы инструментов после перехода к следующему инструменту). Если потоковая передача не используется, приступает к выполнению.
followup: ставится в очередь для следующего шага агента после завершения текущего этапа.
collect: объединяет все сообщения в очереди в одну следующую команду (по умолчанию). Если сообщения предназначены для разных каналов/потоков, они обрабатываются по отдельности для сохранения маршрутизации.
steer-backlog (также steer+backlog): выполняется в момент отправки сообщения и сохраняется для последующего шага.
{
messages: {
queue: {
mode: "collect",
debounceMs: 1000,
cap: 20, // максимальное количество сообщений в очереди за сеанс
drop: "summarize", // политика переполнения, можно установить [old, new, summarize]
byChannel: { discord: "collect" },
},
},
}
drop: “summarize” — сохраняет краткий список удалённых сообщений и вводит его в виде синтетического промпта при следующем обращении.
Быстрые последовательные сообщения от одного и того же отправителя могут быть объединены в один ответ агента с помощью messages.inbound [39]:
{
messages: {
inbound: {
debounceMs: 2000,
byChannel: {
whatsapp: 5000,
telegram: 2500,
discord: 1500,
},
},
},
}
Cron позволяет настраивать выполнение задач по расписанию. Например:
# Утренняя личная подборка, каждый день в 9:00
openclaw cron add --name "Утро" --cron "0 9 * * *"
--message "Погода, календарь, важные письма, результат Лиги Чемпионов"
Вообще (забудем на секунду про openclaw), cron — это утилита, для выполнения регулярных задач в UNIX-подобных опрационных системах, предназначенная для автоматического выполнения команд или скриптов по заданному расписанию. Регулярные действия, описываются инструкциями, помещенными в файл /etc/crontab. Структура записи cron:
* * * * * <user> <comand>
* * * * * - минута, час, день, месяц, день недели (* - значит любой)
<user> - от имени кого выполнить
<comand> - команда
Примеры записей в cron:
* * * * * touch file - каждую минуту выполнять команду touch file
0 * * * * touch file2 - раз в каждый час, в нулевую минуту, выполнять команду touch file2
0 0 * * * touch file3 - раз в день, в 00:00 выполнять команду touch file3
3 5 15 * * touch file4 - 15-го числа любого месяца в 05:03 выполнять команду touch file4
10 15 20 5 * touch file5 - каждого 20-го мая в 15:10
*/5 * * * * touch file6 - раз в 5 минут
0 9,18 * * * touch fil7 - в 09:00 и 18:00
0 0 * * 1-5 touch file8 - каждую полночь с понедельника по пятницу
Надеюсь, вы поняли).
Предполагаю, openclaw cron придерживается такой же логики в обозначениях для управления расписанием задач.
Наконец-то можно стартовать:
Запускаем tmux-сессию. Это делается для того, чтобы openclaw gateway у нас постоянно работал, даже после закрытия терминала.
(Работа в tmux: <(CTRL + b) + c> — новое окно, <(CTRL + b) + w> — список окон, <(CTRL + b) + n> — следующее окно, <(CTRL + b) + x> — закрыть окно, <(CTRL + b) + d> — отключиться от сессии, <tmux attach> — подключиться к сессии.)
tmux # Для переключения между окнами сессии используйте (ctrl+b) + n
Заходим в контейнер и запускаем шлюз:
openclaw gateway
# Restart the Gateway: openclaw gateway restart
С помощью tmux создаём новое окно:
(CTRL + b) + c
Если хотим общаться в терминале:
openclaw tui
Мы можем добавить дополнительного агента [40]. Например, один будет помогать нам с рабочими задачами, а второй — «по дому». Для этого сначала командой добавим нового агента, а потом в конфиг-файле пропишем каналы для общения с агентами.
#Смотрим на имеющихся агентов:
display help
openclaw agents -h
#Вывести список агентов:
openclaw agents list
Добавление агента:openclaw agents add <agent’s name> # напр., openclaw agents add alerts
Выбираем каталог для сохранения настроек и файлов агента.
Выбираем модель, которую агент будет использовать.
При этом создаётся дополнительное рабочее пространство .openclaw/workspace-<agentId>. В котором хранятся файлы AGENTS.md, SOUL.md и т. д. Настраивать каждого агента нужно отдельно.
Перезапускаем наш шлюз и проверяем, что всё нормально:
openclaw gateway restart
openclaw agents list --bindings
openclaw channels status --probe
Файл конфигурации должен измениться:
{
agents: {
list: [
{ id: "main", workspace: "~/.openclaw/workspace-main" },
{ id: "alerts", workspace: "~/.openclaw/workspace-alerts" },
],
},
bindings: [
{ agentId: "main", match: { channel: "telegram", accountId: "default" } },
{ agentId: "alerts", match: { channel: "telegram", accountId: "alerts" } },
],
channels: {
telegram: {
accounts: {
default: {
botToken: "123456:ABC...",
dmPolicy: "pairing",
},
alerts: {
botToken: "987654:XYZ...",
dmPolicy: "allowlist",
allowFrom: ["tg:123456789"],
},
},
},
},
}
Обратите внимание [41], что в данном примере агенты подключены к разным телеграм-ботам. Вы же можете использовать не только телеграм но и другие площадки.
Субагенты это клоны основного агента, запущенные фоном с параллельностью до 8 штук. Они спавнятся когда нужно решить сложную задачу. Цель использования субагентов — это распараллеливание работы над «исследованием / длительной задачей / медленным инструментом», не блокируя основной процесс. Субагенты на создают отдельный файл сессии и не имеют доступа к некоторым инструментам (sessions_spawn и др.). Если не указано явно (в конфиге agents.defaults.subagents.model (или agents.list[].subagents.model для каждого агента)), а также не прописано в системном промте, то субагент по умолчанию использует ту же модель что и основной агент.
Хотел ещё написать более подробно про cron и про skills, но статья и так уже получилась слишком большой (про навыки и крон, немного написано здесь [42]). В дальнейшем планирую создать команду из агентов и прогнать их по каким-нибудь бенчмаркам. Сдаётся мне, что если не захламлять контекст модели одной большой задачей, а, наоборот, декомпозировать её и раздать группе агентов-помощников, то результаты будут хорошими. Это я и собираюсь проверить. Пишите, если было интересно. Оставляйте свои лайфхаки в комментариях. Как вы думаете реально OpenClaw так хорош или это очередной проект который просто хайпится? Cпасибо, что дочитали до конца. Удачи! Всем жму краба!

Автор: ValeriyAB
Источник [43]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/26264
URLs in this post:
[1] n8n: https://n8n.io/
[2] OpenClaw: https://openclaw.ai/
[3] Настройка raspberry pi: #%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%20Raspberry%20Pi
[4] Установка OpenClaw: #%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0%20OpenClaw
[5] Настройка OpenClaw: #%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%20OpenClaw
[6] web ui: #Web%20Ui
[7] модели: #%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8
[8] сессии: #SESSION
[9] файлы.md: #AGENTS
[10] heartbeat: #HEARTBEAT
[11] инструменты (tools): #TOOLS
[12] навыки (skills): #SKILLS
[13] настройка телеграм: #TELEGRAM
[14] cron: #CRON
[15] Запуск OpenClaw: #%D0%A1%D0%A2%D0%90%D0%A0%D0%A2
[16] Доп. Агенты: #%D0%94%D0%9E%D0%9F%D0%9E%D0%9B%D0%9D%D0%98%D0%A2%D0%95%D0%9B%D0%AC%D0%9D%D0%AB%D0%95
[17] СубАгенты: #%D0%A1%D0%A3%D0%91%D0%90%D0%93%D0%95%D0%9D%D0%A2%D0%AB
[18] памяти: http://www.braintools.ru/article/4140
[19] этой: https://habr.com/ru/articles/990786/
[20] Image: https://sourcecraft.dev/
[21] install.sh: http://install.sh
[22] http://localhost:18789/#token=b373fb33996f356519ada7c523454ae2e341fkej570c9808e
: http://localhost:18789/#token=b373fb33996f356519ada7c523454ae2e341fkej570c9808e%EF%BF%BC
[23] документации: https://docs.openclaw.ai/providers/synthetic
[24] Ollama: https://docs.openclaw.ai/concepts/model-providers#ollama
[25] Compaction: https://docs.openclaw.ai/concepts/compaction#auto-compaction-default-on
[26] параметров: https://docs.openclaw.ai/concepts/session#performance-caveat-for-large-stores
[27] доку: https://docs.openclaw.ai/concepts/session
[28] список: https://docs.google.com/document/d/1ffmZEfT7aenfAz2lkjyHsQIlYRWFpGcM/edit
[29] блочную: https://docs.openclaw.ai/concepts/streaming
[30] Live stream preview: https://docs.openclaw.ai/channels/telegram#live-stream-preview-message-edits
[31] SOUL: https://docs.openclaw.ai/reference/templates/SOUL
[32] поведения: http://www.braintools.ru/article/9372
[33] группы: https://docs.openclaw.ai/tools#tool-groups-shorthands
[34] провайдера: https://docs.openclaw.ai/tools#provider-specific-tool-policy
[35] https://clawhub.ai/
: https://clawhub.ai/%EF%BF%BC
[36] повторных попыток: https://docs.openclaw.ai/concepts/retry
[37] ошибку: http://www.braintools.ru/article/4192
[38] обе функции: https://docs.openclaw.ai/concepts/queue
[39] messages.inbound: https://docs.openclaw.ai/concepts/messages#inbound-debouncing
[40] дополнительного агента: https://docs.openclaw.ai/concepts/multi-agent
[41] внимание: http://www.braintools.ru/article/7595
[42] здесь: https://habr.com/ru/articles/991264/?ysclid=mlozlvva62417712360
[43] Источник: https://habr.com/ru/articles/1004110/?utm_campaign=1004110&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.