Добавлены разделы: - "Something went wrong" после удаления модели из models.providers.zai.models - Kiro 402 credits_exhausted — месячный кредит AWS, reset 1 числа - cx/gpt-5.4 free plan rolling 3h window, не подходит для primary - Как добавить Kiro-учётку через OmniRoute UI (нужен SSH-туннель или or.dttb.ru в NPM) Обновлена memory feedback_openclaw_models.md: - В 2026.4.15 в config нужен префикс zai/, но sessions.json оставлять как есть - После очистки каталога — /new в Telegram, sed по sessions.json ломает Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
434 lines
27 KiB
Markdown
434 lines
27 KiB
Markdown
# OpenClaw — основной AI-бот (LXC 137)
|
||
|
||
Справочник по установке, настройке и починке OpenClaw. Обновлён 2026-04-17.
|
||
|
||
## Что это
|
||
|
||
**OpenClaw** (в Telegram/Nextcloud — "Максимка") — основной AI-бот Олега. Multi-channel AI gateway: принимает сообщения из Telegram и Nextcloud Talk, отвечает через OmniRoute (бесплатные модели) и умеет делегировать сложные задачи на code-server (Opus 4.7 через Max подписку).
|
||
|
||
- **NPM пакет:** [`openclaw`](https://www.npmjs.com/package/openclaw)
|
||
- **GitHub:** https://github.com/openclaw/openclaw
|
||
- **Автор конфига:** установлен и ведётся Олегом под персонажа "Максимка" 🤖
|
||
|
||
## Где живёт
|
||
|
||
| Параметр | Значение |
|
||
|----------|----------|
|
||
| Proxmox LXC | **137** (hostname `openclaw`) |
|
||
| IP | 10.0.0.239 (LAN) / 100.70.167.54 (NetBird) |
|
||
| CPU / RAM | 2 vCPU / 6 GB |
|
||
| Node.js | v24.x |
|
||
| Доступ | `sshpass -p '1qaz!QAZ' ssh root@10.0.0.250 "pct exec 137 -- bash"` |
|
||
|
||
## Установка (из чистого LXC)
|
||
|
||
```bash
|
||
# Ubuntu LXC с Node ≥ 20
|
||
apt update && apt install -y nodejs npm
|
||
npm install -g openclaw
|
||
openclaw setup # интерактивный онбординг
|
||
openclaw configure # настройка каналов, моделей, креденшалов
|
||
```
|
||
|
||
Бинарь попадает в `/usr/bin/openclaw` (shim), код в `/usr/lib/node_modules/openclaw/`.
|
||
|
||
## Структура на диске
|
||
|
||
```
|
||
/root/.openclaw/ ← state dir (OPENCLAW_STATE_DIR)
|
||
├── openclaw.json ← главный config
|
||
├── openclaw.json.bak ← автобэкап (последний)
|
||
├── openclaw.json.bak-YYYY-MM-DD-... ← ручные бэкапы (сам делай перед правками)
|
||
├── agents/
|
||
│ ├── main/
|
||
│ │ ├── sessions/
|
||
│ │ │ ├── sessions.json ← индекс сессий (key → id, model, tokens)
|
||
│ │ │ ├── <uuid>.jsonl ← полная переписка сессии (messages, tool calls)
|
||
│ │ │ └── <uuid>.jsonl.reset.* ← архив после /reset
|
||
│ │ └── agent/models.json ← модели доступные агенту (в кэше)
|
||
│ ├── codex/
|
||
│ └── claude-code/
|
||
├── nextcloud-talk/ ← state Nextcloud Talk канала
|
||
├── credentials/
|
||
├── memory/ ← векторная память (если включена)
|
||
├── canvas/ ← Canvas host контент
|
||
├── delivery-queue/
|
||
├── flows/
|
||
├── exec-approvals.json ← whitelist команд для exec tool
|
||
└── storage.sqlite? (нет в openclaw, только у omniroute)
|
||
|
||
/root/clawd/ ← рабочая папка бота (workspace)
|
||
├── IDENTITY.md ← личность бота (имя, язык, аватар)
|
||
├── INFRASTRUCTURE.md ← карта инфраструктуры для бота
|
||
├── TOOLS.md ← креды, порты, ссылки (важно держать актуальным)
|
||
├── DELEGATION.md ← инструкция как делегировать на Opus/code-server
|
||
├── MEMORY.md ← что помнить постоянно
|
||
├── SOUL.md ← характер, вайб
|
||
├── USER.md ← что знать про пользователя (Олега)
|
||
├── AGENTS.md ← про суб-агентов
|
||
├── HEARTBEAT.md ← статус-флаг для self-check
|
||
├── HAPP-VPN.md ← текущие VPN настройки пользователя
|
||
├── tasks.md ← TODO бота
|
||
├── scripts/ ← рабочие скрипты (wrapper, monitor, cron)
|
||
│ ├── claude-code-wrapper.sh ← **делегирование на Opus 4.7**
|
||
│ ├── email_monitor.py ← cron */10, Авито уведомления
|
||
│ ├── znam-pairing-check.sh ← cron */3
|
||
│ └── nextcloud-talk-bot.py ← legacy (старый бот, не используется)
|
||
├── knowledge-base/ ← база знаний бота
|
||
├── memory/ ← его заметки
|
||
├── projects/ ← проекты
|
||
├── prompts/ ← системные промпты
|
||
└── claude-code-sessions/ ← сессии claude CLI на этой машине (не на code-server)
|
||
|
||
/root/.config/systemd/user/
|
||
└── openclaw-gateway.service ← **systemd --user** service (не /etc/systemd/system!)
|
||
```
|
||
|
||
## Сервис (systemd user)
|
||
|
||
OpenClaw gateway — systemd **user**-level unit, не system. Все команды с `--user`.
|
||
|
||
```bash
|
||
systemctl --user status openclaw-gateway.service
|
||
systemctl --user restart openclaw-gateway.service
|
||
systemctl --user reset-failed openclaw-gateway.service # при restart loop
|
||
journalctl --user -u openclaw-gateway.service -n 50 --no-pager
|
||
```
|
||
|
||
Unit запускает:
|
||
```
|
||
ExecStart=/usr/bin/node /usr/lib/node_modules/openclaw/dist/index.js gateway --port 18789
|
||
```
|
||
|
||
Порты:
|
||
- **18789** — gateway (WebSocket + HTTP), в `.env` `OPENCLAW_GATEWAY_PORT`
|
||
- **18789/__openclaw__/canvas/** — Canvas host (UI)
|
||
- Если запущен в `--dev`: gateway 19001
|
||
|
||
## Конфигурация: `openclaw.json`
|
||
|
||
Единый JSON, валидируется zod-схемой с `additionalProperties: false` на большинстве секций. **Любой лишний ключ ломает старт** с `Config invalid`.
|
||
|
||
### Просмотр и правка
|
||
|
||
```bash
|
||
openclaw config file # путь к активному конфигу
|
||
openclaw config get gateway.port # значение по dot-path
|
||
openclaw config set gateway.port 18789 # изменить
|
||
openclaw config unset acp.agents # удалить ключ
|
||
openclaw config schema # полная JSON schema — узнать какие поля допустимы
|
||
openclaw config validate # проверить без рестарта
|
||
openclaw doctor # диагностика
|
||
openclaw doctor --fix # автофикс (не всесильный, делай бэкап)
|
||
```
|
||
|
||
### Секции конфига (по schema)
|
||
|
||
- `env` — переменные окружения gateway
|
||
- `update` — auto-update настройки, канал релизов
|
||
- `agents` — defaults (модель, workspace, concurrency) + **list** (массив агентов, не объект!)
|
||
- `acp` — Agent Control Protocol. Допустимые ключи: `enabled, dispatch, backend, defaultAgent, allowedAgents, maxConcurrentSessions, stream, runtime`. **`agents` запрещён!**
|
||
- `auth` — API ключи профилей
|
||
- `channels` — telegram, nextcloud-talk, discord и т.д.
|
||
- `messages` — маршрутизация сообщений
|
||
- `commands` — кастомные slash-команды
|
||
- `hooks` — webhook и event-хуки
|
||
- `skills` — skill-паки
|
||
- `tools` — browser, search, file, runtime и пр.
|
||
- `gateway` — настройки WS-сервера (порт, auth, binding)
|
||
- `wizard` — состояние setup wizard
|
||
- `meta` — версия/метаданные
|
||
- `logging` — уровни и вывод логов
|
||
- `browser` — headless browser настройки
|
||
- `ui` — UI preferences
|
||
- `models` — провайдеры + каталог моделей
|
||
- `bindings` — key bindings
|
||
- `broadcast` — broadcast/notification
|
||
- `audio` — входы/выходы аудио
|
||
- `session` — управление сессиями и persistence
|
||
- `cron` — scheduled tasks через gateway
|
||
- `web` — web server / API
|
||
- `discovery` — service discovery (Tailscale + CoreDNS)
|
||
- `canvasHost` — Canvas
|
||
- `talk` — голос/речь
|
||
- `plugins` — плагины
|
||
- `diagnostics` — OpenTelemetry, cache-trace
|
||
- `cli` — CLI баннер, startup
|
||
- `secrets` — secret providers
|
||
- `mcp` — MCP-сервера
|
||
|
||
### Провайдеры моделей (наш стек)
|
||
|
||
В `openclaw.json → models.providers` у Олега настроены:
|
||
- `openrouter`
|
||
- `anthropic`
|
||
- `zai` — OmniRoute через ZenAI адаптер
|
||
- `omniroute` — прямой OmniRoute (localhost:20128 на code-server)
|
||
- `zai-orig` — оригинальный zai endpoint
|
||
|
||
### Модели в сессиях — **НЕ ТРОГАЙ**
|
||
|
||
В `agents/main/sessions/sessions.json` и `agent/models.json` модели хранятся в формате:
|
||
- `kr/claude-sonnet-4.5` — Kiro провайдер
|
||
- `cx/gpt-5.4` — Codex (OpenAI)
|
||
- `gh/claude-sonnet-4.5` — GitHub Models
|
||
- `glm/glm-5.1` — Z.AI GLM
|
||
- `gemini-cli/gemini-2.5-pro` — Google Gemini CLI
|
||
|
||
**Не добавляй префикс `zai/`!** Это прямая адресация Kiro/Codex/GH/GLM провайдеров. Работает.
|
||
|
||
`openclaw models list` показывает только `zai/*` — это view того что openclaw регистрирует локально, но провайдеры резолвят и `kr/...` напрямую.
|
||
|
||
Лог вида:
|
||
```
|
||
[diagnostic] FailoverError: Unknown model: kr/claude-sonnet-4.5 ... next=zai/kr/claude-sonnet-4.5
|
||
```
|
||
— **безвредный warning** с автофоллбеком. Игнорируй. Это НЕ причина того что бот не отвечает.
|
||
|
||
## Делегирование на code-server (Opus 4.7)
|
||
|
||
Для сложных задач (большой рефакторинг, генерация кода) бот делегирует на LXC 132 (code-server) где установлен Claude Code CLI с Max подпиской.
|
||
|
||
**Wrapper:** `/root/clawd/scripts/claude-code-wrapper.sh`
|
||
|
||
Текущая (рабочая, 2026-04-17) реализация — non-interactive print-режим:
|
||
```bash
|
||
#!/bin/bash
|
||
# Wrapper: делегирует задачу на code-server (LXC 132), Opus 4.7.
|
||
# Использование:
|
||
# claude-code-wrapper.sh "текст задачи"
|
||
# echo "задача" | claude-code-wrapper.sh
|
||
set -e
|
||
if [ -t 0 ] && [ $# -eq 0 ]; then
|
||
echo "ERROR: нужен prompt в аргументе или на stdin" >&2
|
||
exit 2
|
||
fi
|
||
PROMPT="${*:-$(cat)}"
|
||
PROMPT_B64=$(printf %s "$PROMPT" | base64 -w0)
|
||
ssh -o StrictHostKeyChecking=no root@10.0.0.250 \
|
||
"pct exec 132 -- bash -c \"cd /root && echo $PROMPT_B64 | base64 -d | claude -p --output-format text\""
|
||
```
|
||
|
||
Ключевое: **`claude -p`** (print-режим). Без `-p` запускается REPL и виснет.
|
||
|
||
Инструкция для самого бота — в `/root/clawd/DELEGATION.md`.
|
||
|
||
## Каналы
|
||
|
||
### Telegram
|
||
- Bot token хранится в `channels.telegram.token` (через `ref:env` или напрямую)
|
||
- `dmPolicy` и `groupPolicy` — доступ. **Open policy небезопасно** (security audit ругается), используй `allowlist` + `allowFrom`
|
||
- Bot username указан в openclaw status
|
||
|
||
### Nextcloud Talk
|
||
- URL `http://10.0.0.230:11001` (Nextcloud AIO)
|
||
- Пользователь `maximka` / `MaximkaBot2026`
|
||
- Основная беседа token: `aecax6yg`
|
||
- Админ: `admin` / `1qaz!QAZ`
|
||
|
||
## Частые проблемы и их решения
|
||
|
||
### Проблема: `Config invalid ... Unrecognized key`
|
||
Новая версия openclaw ужесточила schema. Старые поля больше не принимаются.
|
||
1. `cp /root/.openclaw/openclaw.json /root/.openclaw/openclaw.json.bak-$(date +%F-%H%M)`
|
||
2. `openclaw doctor --fix` — мигрирует что может
|
||
3. Если не помогло — получить expected schema: `openclaw config schema` (JSON), сравнить со своим config
|
||
4. Частые исправления:
|
||
- `acp.agents` → перенести содержимое в `agents.list` (**массив**!), удалить из acp
|
||
- `agents.list` как `{"name": {...}}` → переделать в `[{"id":"name", ...}]`
|
||
- Удалить неизвестные top-level ключи
|
||
|
||
### Проблема: Gateway падает с `Cannot find module 'dist/index.js'`
|
||
Временная ошибка во время `npm install` (файлы распаковываются). Подождать, сервис сам поднимется через Restart=always.
|
||
|
||
### Проблема: Bot "залип" — не отвечает в Telegram/Talk
|
||
Порядок проверки:
|
||
1. `pct status 137` — LXC запущен?
|
||
2. `pct exec 137 -- systemctl --user is-active openclaw-gateway.service` — gateway активен?
|
||
3. `pct exec 137 -- openclaw status` — каналы ON? сессии есть?
|
||
4. `journalctl --user -u openclaw-gateway.service --since "10 min ago" | grep -iE "error|fail"` — последние ошибки
|
||
5. Если gateway в restart-loop: `systemctl --user reset-failed openclaw-gateway.service` перед рестартом
|
||
|
||
### Проблема: Бот застревает при делегировании на Opus
|
||
Wrapper запускал `claude` без `-p` → интерактивный REPL → висел. Решение уже в wrapper (2026-04-17). Если опять: проверить что `/root/clawd/scripts/claude-code-wrapper.sh` использует `claude -p --output-format text`, а не голый `claude`.
|
||
|
||
### Проблема: периодические сбои `sendChatAction failed: Network request failed` и "Something went wrong" (причина — IPv6)
|
||
|
||
**Корень (обнаружено 2026-04-17):** в LXC 137 IPv6 настроен, но наружу не маршрутизируется. `curl -4 https://api.telegram.org/` → 302 OK; `curl -6 https://api.telegram.org/` → connection failed. Node.js по умолчанию может резолвить AAAA первым и застревать на IPv6. Это даёт случайные `Network request failed` в Telegram API → у бота не отправляется typing-индикатор и ответ, пользователь видит "Something went wrong".
|
||
|
||
**Починка:** форсировать IPv4 через `NODE_OPTIONS=--dns-result-order=ipv4first` в systemd unit.
|
||
|
||
```bash
|
||
UNIT=/root/.config/systemd/user/openclaw-gateway.service
|
||
cp $UNIT $UNIT.bak-$(date +%F-%H%M)
|
||
sed -i "/^Environment=OPENCLAW_GATEWAY_PORT=/a Environment=NODE_OPTIONS=--dns-result-order=ipv4first" $UNIT
|
||
systemctl --user daemon-reload
|
||
systemctl --user restart openclaw-gateway.service
|
||
```
|
||
|
||
Проверка: после рестарта в логах gateway не должно быть `sendChatAction failed: Network request failed` при нормальной работе.
|
||
|
||
### Проблема: `FailoverError: Unknown model: kr/...`
|
||
|
||
Ошибка пользователю "⚠️ Something went wrong while processing your request. Please try again, or use /new to start a fresh session." отправляется OpenClaw когда *external run* не вернул осмысленную ошибку (не OAuth, не API key, не session mismatch — см. `buildExternalRunFailureText` в `agent-runner.runtime-*.js`). То есть это fallback-сообщение для **неклассифицированных** ошибок.
|
||
|
||
**Корень на нашей инсталляции (2026-04-17):**
|
||
В `openclaw.json → models.providers` **дублированы** два провайдера, указывающие на один и тот же OmniRoute (`10.0.0.179:20128`):
|
||
- `zai` — модели `kr/claude-sonnet-4.5`, `gh/claude-sonnet-4.5`, `glm/glm-5.1`, `cx/gpt-5.4`
|
||
- `omniroute` — те же модели
|
||
|
||
В 2026.4.15 openclaw регистрирует модели **с префиксом провайдера** (`zai/kr/...`). Запрос без префикса (`kr/claude-sonnet-4.5`, как хранится в старых сессиях) не резолвится → FailoverError → fallback на `zai/kr/claude-sonnet-4.5` через `agents.defaults.model.fallbacks`. Fallback обычно успешен (+3-8 сек к ответу), но иногда падает → пользователь видит "Something went wrong".
|
||
|
||
**Как починить окончательно (рекомендуется):**
|
||
|
||
```bash
|
||
# Бэкап
|
||
cp /root/.openclaw/openclaw.json /root/.openclaw/openclaw.json.bak-dedup-$(date +%F)
|
||
|
||
# Вариант A: удалить дубликат-провайдер omniroute (оставить zai)
|
||
openclaw config unset models.providers.omniroute
|
||
|
||
# Вариант B: обновить model в индексе сессий (НЕ в .jsonl файлах!)
|
||
python3 <<'PY'
|
||
import json
|
||
p = '/root/.openclaw/agents/main/sessions/sessions.json'
|
||
d = json.load(open(p))
|
||
for k, v in d.items():
|
||
m = v.get('model')
|
||
if m and not m.startswith('zai/') and not m.startswith('openai/'):
|
||
v['model'] = 'zai/' + m
|
||
json.dump(d, open(p, 'w'), indent=2)
|
||
PY
|
||
|
||
# После любого варианта:
|
||
systemctl --user restart openclaw-gateway.service
|
||
```
|
||
|
||
**ВАЖНО — что НЕ делать (уроки 2026-04-17):**
|
||
- НЕ трогай `agent/models.json` — там `id` моделей из registry провайдеров; замена id на `zai/...` сломает Kiro провайдер (бот "перестаёт отвечать").
|
||
- НЕ трогай `.jsonl` файлы в `sessions/` — это неизменяемая история сообщений.
|
||
- **Даже точечное изменение поля `model` в sessions.json для одной сессии — ломает бота** (проверено: обновил только `agent:main:telegram:group:@heartbeat` с `kr/...` на `zai/kr/...`, бот перестал отвечать, откат из бэкапа вернул работу). Причина не совсем ясна, возможно конфликт между session.model и зарегистрированными в runtime моделями.
|
||
- НЕ удалять провайдер `zai` или `omniroute` — оба пробовали, ломает.
|
||
|
||
**Реальная причина периодических "Something went wrong" — IPv6**, не провайдеры моделей. См. раздел выше про `NODE_OPTIONS=--dns-result-order=ipv4first`. FailoverError `kr/...` → `zai/kr/...` — это автофоллбек который работает, не трогай.
|
||
|
||
### Проблема: "Something went wrong" после очистки каталога моделей (2026-04-18)
|
||
|
||
Если в `openclaw.json → models.providers.zai.models` удалить какую-то модель (например `cx/gpt-5.4`), **существующие сессии** в `sessions.json` с захардкоженной удалённой моделью начинают падать:
|
||
```
|
||
FailoverError: Unknown model: cx/gpt-5.4 (model_not_found)
|
||
All models failed: ... | Unknown model: cx/gpt-5.4
|
||
```
|
||
Бот возвращает "Something went wrong". Дефолт `agents.defaults.model` **не влияет на существующие сессии** — они хранят `model` внутри `sessions.json` при создании.
|
||
|
||
**Лечение:** попросить пользователя в Максимке нажать `/new` — новая сессия возьмёт актуальную default модель. Sessions.json руками не править — это ломает бота (проверено 2026-04-17).
|
||
|
||
### Проблема: Kiro массово возвращает 402 "You have reached the limit" (исчерпан месячный кредит AWS)
|
||
|
||
**Симптомы:**
|
||
- В `call_logs` дневная нагрузка сегодня меньше обычной, но внезапно 402
|
||
- `provider_connections.test_status = credits_exhausted` на обеих Kiro-учётках одновременно
|
||
- OmniRoute на `/v1/chat/completions` для `kr/*` возвращает `No credentials for provider: kiro` (после backoff)
|
||
|
||
**Причина:** Kiro использует CodeWhisperer через AWS Free Tier с **месячным кредитным лимитом**, не суточным. За неделю обычно ~120M tok_in / 2 учётки = ~60M/учётку → за 3-4 недели квота выбирается.
|
||
|
||
**Сброс:** месячный reset AWS — **1-е число месяца 00:00 UTC**. До этого дня учётка не работает.
|
||
|
||
**Диагностика капасити через storage.sqlite:**
|
||
```sql
|
||
SELECT date(timestamp) AS day, COUNT(*) AS calls, SUM(tokens_in) AS tok
|
||
FROM call_logs WHERE provider='kiro' AND status=200
|
||
GROUP BY date(timestamp) ORDER BY day DESC LIMIT 14;
|
||
```
|
||
|
||
**Ручной сброс флага `credits_exhausted` НЕ помогает** — OmniRoute снимает его, делает первый запрос, получает 402 и сразу возвращает в backoff. Это не визуальный глюк, это реальный отказ от upstream Kiro.
|
||
|
||
**Решение:** добавить новые Kiro OAuth-учётки через OmniRoute UI. Нужна свежая Google-учётка для каждой (Kiro логинится только через Google SSO); OR создаст новую запись в `provider_connections`, существующие gmail перезаписывает. Одна Kiro-учётка даёт ~250-300M токенов в месяц — этого хватает на ~277 вызовов/день текущей нагрузки бота почти в одиночку.
|
||
|
||
### Проблема: cx/gpt-5.4 учётки быстро упираются в 429
|
||
|
||
**Codex free plan** (`workspacePlanType":"free"` в `provider_specific_data`) — **rolling ~3-часовое окно** на учётку, ~10-15 успешных запросов за окно. Не ChatGPT Plus!
|
||
|
||
7 учёток в ротации дают ~120 успехов/сутки суммарно при равномерной нагрузке (из исторических call_logs 2026-04-11..12). Этого не хватает чтобы нести основной трафик бота (~450 вызовов/день).
|
||
|
||
**Вывод:** cx — только как резерв, primary оставлять на Kiro.
|
||
|
||
### Как добавить новую Kiro/OpenClaw-учётку через OmniRoute UI
|
||
|
||
1. OmniRoute **не проксирован через NPM** (проверено 2026-04-18) — только прямой доступ по `http://10.0.0.179:20128` из LAN/NetBird, или SSH-туннель:
|
||
```bash
|
||
sshpass -p '1qaz!QAZ' ssh -L 20128:10.0.0.179:20128 root@10.0.0.250 -N
|
||
# открывать http://localhost:20128
|
||
```
|
||
Для долгосрочного использования — добавить `or.dttb.ru` в NPM (WS support ON для OAuth device-code).
|
||
2. В OR UI → Providers → Kiro → **+ Add connection**.
|
||
3. Получить OAuth device-code, открыть ссылку в **приватной вкладке / отдельном Chrome-профиле** (чтобы Google не подставил основной аккаунт), залогиниться новой Google-учёткой, Allow.
|
||
4. Проверка: `sqlite3 /root/.omniroute/storage.sqlite "SELECT COUNT(*) FROM provider_connections WHERE provider='kiro';"` — должен увеличиться.
|
||
|
||
### Проблема: CPU/load высокий
|
||
В LXC 137 `/proc/loadavg` показывает **нагрузку хоста Proxmox**, не контейнера. Смотри реальную нагрузку через `top`/`ps aux --sort=-%cpu` внутри контейнера.
|
||
|
||
## Обновление
|
||
|
||
```bash
|
||
# Версия установленная vs актуальная
|
||
cat /usr/lib/node_modules/openclaw/package.json | grep version
|
||
npm view openclaw version
|
||
|
||
# Обновить
|
||
npm install -g openclaw@latest
|
||
|
||
# Перезапустить gateway
|
||
systemctl --user restart openclaw-gateway.service
|
||
systemctl --user status openclaw-gateway.service
|
||
|
||
# После обновления часто нужно:
|
||
openclaw doctor --fix
|
||
```
|
||
|
||
**Перед обновлением делай бэкап** `/root/.openclaw/openclaw.json` — схема меняется.
|
||
|
||
## Полезные команды
|
||
|
||
```bash
|
||
openclaw status # общий статус + сессии + каналы
|
||
openclaw status --all # расширенный
|
||
openclaw logs --follow # live tail gateway
|
||
openclaw gateway probe # диагностика reachability
|
||
openclaw models list # модели (только zai/*)
|
||
openclaw sessions list # все сессии
|
||
openclaw doctor # health-check
|
||
openclaw security audit # аудит безопасности (ACP/каналы)
|
||
openclaw security audit --deep # подробный
|
||
openclaw memory status --deep # состояние векторной памяти
|
||
openclaw --version # версия
|
||
openclaw config file # путь к config
|
||
openclaw config schema # JSON schema
|
||
```
|
||
|
||
## Что связано с OpenClaw (не путать)
|
||
|
||
- **LXC 129** — `clawdbot-1` (старый бот, @maxim_dttb_bot). **Удалён 2026-04-14**. Данные перенесены в `/root/clawd/` на LXC 137.
|
||
- **LXC 132** — `code-server` (VS Code IDE + OmniRoute + CLIProxy). Не бот, а dev-среда + backend для ресёрча.
|
||
- **LXC 134** — `ZnamSecurityBot`. Отдельный Telegram-бот безопасности, не OpenClaw.
|
||
|
||
## Бэкап и восстановление
|
||
|
||
```bash
|
||
openclaw backup create # архив state (/root/.openclaw/backups/)
|
||
openclaw backup verify <archive> # проверка
|
||
# Или ручной:
|
||
tar czf /root/openclaw-state-$(date +%F).tar.gz /root/.openclaw /root/clawd
|
||
```
|
||
|
||
Ключевые файлы для ручного бэкапа:
|
||
- `/root/.openclaw/openclaw.json` — конфиг
|
||
- `/root/.openclaw/agents/main/sessions/` — история сессий
|
||
- `/root/clawd/*.md` — personality и инструкции
|
||
- `/root/.config/systemd/user/openclaw-gateway.service` — systemd unit
|
||
|
||
## История изменений (релевантное)
|
||
|
||
- **2026-04-14** — LXC 129 (старый Clawdbot) удалён, данные в `/root/clawd/` на LXC 137. Решение: [decisions/2026-04-14-openclaw-claude-code-pipeline.md](../../decisions/2026-04-14-openclaw-claude-code-pipeline.md).
|
||
- **2026-04-17** — обновление 2026.4.10 → 2026.4.15, починка config (удалён `acp.agents`, `agents.list` object → удалён), починка wrapper (`claude` → `claude -p`), создан DELEGATION.md. Решение: [decisions/2026-04-17-code-server-upgrade.md](../../decisions/2026-04-17-code-server-upgrade.md).
|