OpenClaw на Raspberry Pi: от установки до мультиагентной системы. агенты.. агенты. ии-агенты.. агенты. ии-агенты. машинное+обучение.

Бесплатные модели, телеграм-бот и суб-агенты

OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 1

Прогресс не стоит на месте, и вот уже люди догадались дать «искусственному интеллекту» доступ к своим «железкам» 😊. Весело — без сомнений, полезно — возможно, небезопасно — сто процентов. В интернете полно гайдов о том, как запустить и настроить OpenClaw. Но знаете что? Они все какие-то поверхностные, что ли. Все эти гайды можно разделить на два типа. Первый: «Я подключил LLM от Anthropic за 100 баксов в месяц, а потом просил бота настроить самого себя. Через неделю (и 100B токенов) у меня получилось добавить не лагающий полезный скилл» =)). Второй: «Для установки OpenClaw пишем команду в терминал, нажимаем сюда, выбираем сюда. Для подключения Telegram копируем код, который он прислал, и отправляем команду. Всё». На этом инструкция заканчивается. Я решительно собираюсь исправить эту ситуацию своей статьёй!

Началось всё с того, что по работе мне нужно было автоматизировать некоторые задачи. Сначала для автоматизации я хотел использовать n8n. Но когда начал разбираться, понял, что n8n очень хорошо настраивается под одну конкретную задачу. А мне хотелось, чтобы я мог автоматизировать решение сразу «класса задач». Например, проверка документов разного типа с возможностью поиска информации в интернете и сохранение отчета. Да и к тому же мне не очень хотелось разбираться во всех этих инструментах построения workflow (времени на это реально нет). И тут я наткнулся на OpenClaw.

Хайп вокруг этой штуки нешуточный. Посмотрите только на объемы потребляемых токенов на OpenRouter. Все они идут на обслуживание маленьких “клешнявых помощников”.

OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 2

Статья получилась неоправданно объемной, и пришлось разбить её на две части. Во второй части я расскажу, как настроить команду агентов и их взаимодействие между собой. Надеюсь, она появится в ближайшее время. Итак, приступим.

Оглавление:
Настройка raspberry pi
Установка OpenClaw
Настройка OpenClaw
web ui
модели
сессии
файлы.md
heartbeat
инструменты (tools)
навыки (skills)
настройка телеграм
cron
Запуск OpenClaw
Доп. Агенты
СубАгенты

Настройка Raspberry Pi

Кажется, этой статьи бы не случилось, не будь у меня под рукой (в комоде под толстым слоем пыли) всем нам хорошо знакомой малинки. Когда-то давно мне подарили её на день рождения, и с тех пор Raspberry Pi лежала без дела, имея на борту 8 ГБ оперативной памяти. Но время пришло.

Для настройки Raspberry Pi я частично пользовался вот этой статьей и видеороликами в интернете.

# установка библиотек
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
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 3

Чтобы бот работал внутри контейнера (на Raspberry Pi):

# устанавливаем lxc
sudo apt-get install zfsutils-linux -y
sudo lxd init # не паримся, просто прожимаем Enter много раз
# запускаем контейнер
sudo lxc launch ubuntu:24.04 openclawbot # где openclawbot — это название нашего контейнера
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 4

Для следующего запуска и остановки контейнера используются команды 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.)
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 5

Установка OpenClaw

Raspberry Pi настроена, далее нужно установить OpenClaw в контейнер.

Включаем VPN и в контейнере выполняем команду (если нет VPN, копируем файл install.sh, создаем локально такой же файл на Raspberry Pi и выполняем bash install.sh):

curl -fsSL https://openclaw.ai/install.sh | bash
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 6

После установки необходимых пакетов запускаем настройщик (OpenClaw в режиме онбординга):

openclaw onboard --install-daemon # флаг позволяет OpenClaw создать демона для systemd
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 7

Нажимаем 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    # открыть веб-интерфейс
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 8

На этом этапе (да и в дальнейшем) можно выйти из контейнера (exit) и создать снапшот контейнера, чтобы в любой момент можно было восстановить контейнер:

lxc snapshot openclawbot install
# подразумевается, что этот снапшот был сделан сразу после установки OpenClaw
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 9

Если в дальнейшем что-то сломается, восстановить работу контейнера openclawbot можно будет из снапшота install: lxc restore openclawbot install.

Настройка OpenClaw

Если вы предпочитаете настраивать агента через веб-интерфейс, то вот вам команда, которая его запускает. Но учтите: в этой статье нет ничего про использование Web UI.

Web Ui

Чтобы веб-интерфейс заработал, нужно запустить шлюз с дополнительным параметром — «порт»:

openclaw gateway --port 18789
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 10

Затем зайти на адрес 127.0.0.1:18789 (чтобы подключаться с рабочего хоста, должны быть проброшены порты, см. «создаём SSH-туннель»).
Адрес: http://localhost:18789/#token=b373fb33996f356519ada7c523454ae2e341fkej570c9808e
Токен можно посмотреть в openclaw.json по ключу gateway.auth.token:

cat .openclaw/openclaw.json
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 11

Есть те, кто настраивает 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
▫ и т. д.

Alias и imageModel

Открываем конфиг и указываем, какая модель будет использоваться как основная (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,
    },
  },
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 12

Как видим, в качестве основной выбрана более легковесная модель, а также добавлены ссылки (alias), которые позволяют указывать в тексте сообщения (или в команде боту), какую модель использовать. fallbacks — запасные варианты, здесь можно перечислить несколько моделей. Например, добавить ещё openrouter/tngtech/tng-r1t-chimera:free. Ссылки (alias) не обязательно должны быть связаны с названием модели. Вы можете указать роль или специализацию той или иной модели, просто отразив это в названии. Например, ссылка может быть «secretary», «coder» или «security», ну вы поняли.

Synthetic provider

Мы используем OpenRouter в качестве провайдера, максимальная, доступная (бесплатная) версия GLM на данный момент — 4.5. В документации OpenClaw говорится, что если использовать Synthetic в качестве провайдера, то можно пользоваться бесплатно GLM-4.7. Бесплатные модели “synthetic”:

OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 13

Так ли это на самом деле, я не проверял, и где взять 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. Сначала установите 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 на Raspberry Pi: от установки до мультиагентной системы - 14

.openclaw/openclaw.json:

{
  agents: {
    defaults: { model: { primary: "ollama/llama3.3" } },
  },
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 15

На этом с моделями можно закончить.

SESSION

При обращении к агенту запускается новая сессия (если период между обращениями > 15 мин). В 4 утра по местному времени создаётся новая сессия. У сессии есть своё ограничение по токенам контекста, которое OpenClaw берёт из описания модели провайдером. Когда контекст заполняется на ~90%, вызывается автоматическое сжатие контекста (Compaction).

Если вы планируете предоставить доступ к вашему OpenClaw другим пользователям и хотите, чтобы у каждого пользователя был свой файл сессии, то вам нужно указать это в настройках.

dmScope

Открываем файл ~/.openclaw/openclaw.json и меняем dmScope (по умолчанию — main):

{
  session: {
    // Secure DM mode: isolate DM context per channel + sender.
    dmScope: "per-channel-peer",
  },
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 16

Возможны четыре варианта настройки dmScope (DirectMessage Scope):

  • main (по умолчанию): все пользователи совместно используют основную сессию для обеспечения непрерывности взаимодействия с агентом.

  • per-peer: изолированные сессии по идентификатору отправителя.

  • per-channel-peer: изолировать по каналу + отправитель (рекомендуется для многопользовательских почтовых ящиков). Как я понял, если вы хотите, чтобы в Telegram и WhatsApp у вас были разные сессии, используйте этот параметр.

  • per-account-channel-peer: изолировать по учётной записи + каналу + отправителю (рекомендуется для почтовых ящиков с несколькими учётными записями). Если вы хотите, чтобы два ваших аккаунта в Telegram имели разные сессии.

  • (Если один и тот же человек связывается с вами по нескольким каналам, используйте session.identityLinks для объединения его личных сообщений в один канонический идентификатор.)

Проверить настройки личных сообщений можно с помощью команды openclaw security audit.

maintenance

Можно настроить, где и в каком количестве хранятся ваши сессии, а также через сколько дней удалять/сжимать файлы сессии.

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)

Советы по настройке этих параметров:

  • используйте 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 на Raspberry Pi: от установки до мультиагентной системы - 17

полезные команды:

openclaw status # показывает путь к хранилищу и последние сеансы
openclaw sessions --json # выводит все записи сессий
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 18

И советую почитать доку по настройке сессии — там много чего ещё есть.

Основная сессия (main) сохраняется в: ~/.openclaw/agents/main/sessions/sessions.json
Проверить текущие сессии: openclaw sessions list

AGENTS.md

системный промт

Далее редактируем 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
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 19

Эти правила я взял у одного ютубера, который утверждает, что сократил расход токенов своим агентом на 97%. Вот полный список того, что он советует изменить.

Добавляем в системный промт (файл 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
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 20

Также стоит добавить правила, ограничивающие количество и скорость запросов 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 на Raspberry Pi: от установки до мультиагентной системы - 21

редактируем openclaw.json

Для настройки Агента также отредактируем openclaw.json. Прописываем

{ agent: { skipBootstrap: true } }
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 22

Также я советую использовать блочную передачу сообщений, если вы пользуетесь Telegram для общения с агентом. Для этого:

openclaw config set agents.defaults.blockStreamingDefault "on"
openclaw config set agents.defaults.blockStreamingBreak "text_end"
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 23

Ещё можно почитать про настройку стриминга сообщений Telegram: Live stream preview (message edits). Это настройка похожа на блочную передачу сообщений, о которой говорилось ранее.

compaction

В настройках сессии мы уже говорили о том, что 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.",
        },
      },
    },
  },
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 24

Для принудительного вызова сжатия контекста сессии используйте команду /compact в Telegram.

context pruning

Кроме сжатия контекста существует ещё сокращение контекста (context pruning). Отличие в том, что:

  • Compaction: обобщает и сохраняет историю сессий в формате JSONL.

  • Context pruning: по запросу удаляет старые результаты работы с конкретным инструментом (tool) из контекста перед отправкой в LLM. Не изменяет историю сеансов на диске.

{
  agents: { defaults: { contextPruning: { mode: "cache-ttl", ttl: "5m" } } },
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 25

Включить «обрезку» с поддержкой инструмента ttl.

SOUL.md

.openclaw/workspace/SOUL.md
Файл для описания «характера» бота: его привычки, стиль общения и т. п. Расположен в директории workspace (.openclaw/workspace/SOUL.md).

IDENTITY.md

.openclaw/workspace/IDENTITY.md
Хранит имя агента, кто он по происхождению и т. д. Заполняем на своё усмотрение.

USER.md

Данные о пользователе: как зовут, чем увлекается, где работает и т. д.
.openclaw/workspace/USER.md

HEARTBEAT.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?"
  }
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 26

ПРОМЕЖУТОЧНЫЙ ИТОГ

Если говорить о MD-файлах (AGENT/SOUL/IDENTITY и т. д.), то для выполнения задач агенту не требуется знать всю эту чушь о вас и историю переписки за последнюю неделю. Ему нужны чёткие правила поведения, такие, чтобы он не запостил ваши API-ключи в интернет и не удалил чувствительные файлы ОС. Весь этот контекст требуется только чтобы ответы агента вам нравились и вам казалось, что перед вами не просто тупая LLM, а живое существо, пусть и примитивное, но наивное и доброе. Поэтому любые задачи стараемся перераспределить на суб-агентов. Которым не нужен весь этот контекст — им нужны только чёткие границы, цели и инструменты достижения успеха. Да, мне кажется, наилучший сценарий использования OpenClaw-бота — это превратить main-агента в милого и наивного секретаря (бесплатная модель на OpenRouter), который отдаёт ваши задачи опытным монстрам, прожжённым профессионалам, с сотнями миллиардов параметров под капотом и платой за их услуги.

ИНСТРУМЕНТЫ (TOOLS)

профили

По умолчанию в OpenClaw установлено порядка 20 инструментов, которые позволяют работать с файлами, работать в терминале, пользоваться браузером, записывать голосовые сообщения и т. д.

Интересно тут то, что инструменты объединены в группы. Например, есть группа инструментов для работы с файлами — «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"],
  },
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 27

Выбран профиль «messaging», который включает в себя: «group:messaging», «sessions_list», «sessions_history», «sessions_send», «session_status». Также перечислены доступные мессенджеры (“slack”, “discord”) и запрет на использование браузера.

Или другой пример (выбран профиль «кодирование», но с запретом на выполнение/запуск процессов):

{
  tools: {
    profile: "coding",
    deny: ["group:runtime"],
  },
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 28

Всё это указывается по ключу agents. Также можно настроить политику использования инструментов для конкретного провайдера.

loopDetection

Забавно, что в OpenClaw есть инструмент, позволяющий отслеживать зацикливания (loop-detection), но по умолчанию он выключен. ?!? Включить его можно с помощью tools.loopDetection.enabled: true:

{
  tools: {
    loopDetection: {
      enabled: true,
    },
  },
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 29

НАВЫКИ (SKILLS)

При первом запуске пропускаем эту настройку.

Если говорить совсем просто, то скиллы — это файлы с описанием алгоритма действий для решения той или иной задачи: какую задачу решает, какие инструменты использовать, на каких сайтах можно прочитать документацию и т. д. Т. е. скилл — это контекст, загружаемый в 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/
установить навык:

openclaw skills add <skill name>
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 30

TUI (terminal UI)

Есть те, кто предпочитает общаться с агентом в терминале. Не могу вам этого запретить, поэтому оставлю команду вызова интерфейса:

tmux
openclaw tui
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 31

Мы же будем подключать Telegram, и всё наше взаимодействие с OpenClaw будет происходить там.

TELEGRAM

dmPolicy

После того как мы отредактировали все основные файлы, можем добавить общение в Telegram. Для этого нам нужно будет запустить gateway.

Пишем сообщение боту. На первое сообщение (когда параметр dmPolicy: pairing) он пришлёт код (Pairing code: NWDA92HN). Его нужно скопировать и выполнить команду в терминале (не в tui-сессии):

openclaw pairing approve telegram <код> # код действителен 1 час
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 32

После того как произошло сопоставление, бот начнёт отвечать и выполнять ваши команды.

Настройки 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"]
    }
  }
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 33

Проверить allowlist: openclaw config get channels.telegram.allowFrom

Мультиаккаунт в Telegram

Как уже было сказано, можно сделать так, чтобы для каждого пользователя создавалась отдельная сессия (dmScope: “per-account-channel-peer”) и контексты разных людей не влияли друг на друга. Но также можно создать дополнительного агента (и, соответственно, Telegram-бота), который будет отвечать в разных чатах. Например, агент для работы и агент для дома.

{
  channels: {
    telegram: {
      accounts: {
        default: {
          name: "Primary bot",
          botToken: "123456:ABC...",
        },
        alerts: {
          name: "Alerts bot",
          botToken: "987654:XYZ...",
        },
      },
    },
  },
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 34

Дополнительную информацию о том, как это сделать, смотри в разделе «Агенты».

Команды в телеграм-боте:

Список команд доступных в телеграм боте по умолчанию:

Команда

Значение

Команда

Значение

/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" },
      ],
    },
  },
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 35

При создании кастомных команд помните, что:

  • имена нормализованы (сначала «/», потом идут строчные буквы);

  • допустимые символы: a-z, 0-9, _, длина 1..32;

  • пользовательские команды не могут переопределять собственные команды, конфликты/дубликаты пропускаются.

политика повторных попыток

Настройка политики повторных попыток. Иногда при взаимодействии с Telegram сервера могут вернуть ошибку (429, timeout, connect/reset/closed, temporarily unavailable). «Политика повторных попыток» говорит, что делать в таком случае:

{
  channels: {
    telegram: {
      retry: {
        attempts: 3, // попытки (сколько раз будем повторять запрос)
        minDelayMs: 400, //  минимальная задержка отправки сообщения
        maxDelayMs: 30000, // максимальная задержка
        jitter: 0.1, // дрожание (?), задаётся в процентах (от 0 до 1)
      },
    },
  },
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 36

Очередь сообщений

Входящие сообщения могут управлять текущим обращением к агенту, как если бы вы хотели уточнить ваш запрос по мере его выполнения. Сообщения могут ожидать следующего вызова агента (накапливаться в очереди) или выполнять обе функции:

  • steer: немедленно внедряется в текущий запрос (отменяет ожидающие выполнения вызовы инструментов после перехода к следующему инструменту). Если потоковая передача не используется, приступает к выполнению.

  • followup: ставится в очередь для следующего шага агента после завершения текущего этапа.

  • collect: объединяет все сообщения в очереди в одну следующую команду (по умолчанию). Если сообщения предназначены для разных каналов/потоков, они обрабатываются по отдельности для сохранения маршрутизации.

  • steer-backlog (также steer+backlog): выполняется в момент отправки сообщения и сохраняется для последующего шага.

{
  messages: {
    queue: {
      mode: "collect",
      debounceMs: 1000,
      cap: 20, // максимальное количество сообщений в очереди за сеанс
      drop: "summarize", // политика переполнения, можно установить [old, new, summarize]
      byChannel: { discord: "collect" },
    },
  },
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 37

drop: “summarize” — сохраняет краткий список удалённых сообщений и вводит его в виде синтетического промпта при следующем обращении.

inbound messages

Быстрые последовательные сообщения от одного и того же отправителя могут быть объединены в один ответ агента с помощью messages.inbound:

{
  messages: {
    inbound: {
      debounceMs: 2000,
      byChannel: {
        whatsapp: 5000,
        telegram: 2500,
        discord: 1500,
      },
    },
  },
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 38

CRON (проактивный бот)

Cron позволяет настраивать выполнение задач по расписанию. Например:

# Утренняя личная подборка, каждый день в 9:00
openclaw cron add --name "Утро" --cron "0 9 * * *"  
 --message "Погода, календарь, важные письма, результат Лиги Чемпионов"
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 39

Вообще (забудем на секунду про openclaw), cron — это утилита, для выполнения регулярных задач в UNIX-подобных опрационных системах, предназначенная для автоматического выполнения команд или скриптов по заданному расписанию. Регулярные действия, описываются инструкциями, помещенными в файл /etc/crontab. Структура записи cron:

* * * * * <user> <comand>
* * * * * - минута, час, день, месяц, день недели (* - значит любой)
<user> - от имени кого выполнить
<comand> - команда
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 40

Примеры записей в 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 на Raspberry Pi: от установки до мультиагентной системы - 41

Надеюсь, вы поняли).

Предполагаю, openclaw cron придерживается такой же логики в обозначениях для управления расписанием задач.

Запуск OpenClaw

Наконец-то можно стартовать:

Запускаем 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 на Raspberry Pi: от установки до мультиагентной системы - 42

Заходим в контейнер и запускаем шлюз:

openclaw gateway
# Restart the Gateway: openclaw gateway restart
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 43

С помощью tmux создаём новое окно:

(CTRL + b) + c
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 44

Если хотим общаться в терминале:

openclaw tui
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 45

ДОПОЛНИТЕЛЬНЫЕ АГЕНТЫ

Мы можем добавить дополнительного агента. Например, один будет помогать нам с рабочими задачами, а второй — «по дому». Для этого сначала командой добавим нового агента, а потом в конфиг-файле пропишем каналы для общения с агентами.

#Смотрим на имеющихся агентов:
display help
openclaw agents -h
#Вывести список агентов:
openclaw agents list
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 46

Добавление агента:
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
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 47

Файл конфигурации должен измениться:

{
  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"],
        },
      },
    },
  },
}
OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 48

Обратите внимание, что в данном примере агенты подключены к разным телеграм-ботам. Вы же можете использовать не только телеграм но и другие площадки.

СУБАГЕНТЫ

Субагенты это клоны основного агента, запущенные фоном с параллельностью до 8 штук. Они спавнятся когда нужно решить сложную задачу. Цель использования субагентов — это распараллеливание работы над «исследованием / длительной задачей / медленным инструментом», не блокируя основной процесс. Субагенты на создают отдельный файл сессии и не имеют доступа к некоторым инструментам (sessions_spawn и др.). Если не указано явно (в конфиге agents.defaults.subagents.model (или agents.list[].subagents.model для каждого агента)), а также не прописано в системном промте, то субагент по умолчанию использует ту же модель что и основной агент.

Конец (вместо выводов и заключения)

Хотел ещё написать более подробно про cron и про skills, но статья и так уже получилась слишком большой (про навыки и крон, немного написано здесь). В дальнейшем планирую создать команду из агентов и прогнать их по каким-нибудь бенчмаркам. Сдаётся мне, что если не захламлять контекст модели одной большой задачей, а, наоборот, декомпозировать её и раздать группе агентов-помощников, то результаты будут хорошими. Это я и собираюсь проверить. Пишите, если было интересно. Оставляйте свои лайфхаки в комментариях. Как вы думаете реально OpenClaw так хорош или это очередной проект который просто хайпится? Cпасибо, что дочитали до конца. Удачи! Всем жму краба!

OpenClaw на Raspberry Pi: от установки до мультиагентной системы - 49

Автор: ValeriyAB

Источник

Rambler's Top100