Миграция с OpenClaw
hermes claw migrate импортирует ваш конфиг OpenClaw (или устаревшего Clawdbot/Moldbot) в Hermes. Руководство охватывает всё: что именно переносится, таблицы маппинга ключей и что нужно проверить после.
Если ваш OpenClaw был настроен с несколькими провайдерами, hermes setup --portal сведёт всё к единому OAuth — 300+ моделей плюс Tool Gateway в один логин. Подробнее: Nous Portal.
Быстрый старт
# Предпросмотр, затем миграция (всегда показывает список изменений и просит подтвердить)
hermes claw migrate
# Только предпросмотр, без изменений
hermes claw migrate --dry-run
# Полная миграция с API-ключами, без запроса подтверждения
hermes claw migrate --preset full --migrate-secrets --yes
Перед тем как что-либо менять, команда всегда выводит полный список того, что будет импортировано. Просмотрите его и подтвердите.
По умолчанию читает из ~/.openclaw/. Устаревшие директории ~/.clawdbot/ и ~/.moltbot/ определяются автоматически — как и устаревшие имена файлов конфига (clawdbot.json, moltbot.json).
Опции
| Опция | Описание |
|---|---|
--dry-run | Только предпросмотр — остановиться после показа того, что будет перенесено. |
--preset <name> | full (все совместимые настройки) или user-data (без инфраструктурного конфига). Ни один пресет не импортирует секреты по умолчанию — передайте --migrate-secrets явно. |
--overwrite | Перезаписывать существующие файлы Hermes при конфликтах (по умолчанию: отказывать в применении при конфликтах). |
--migrate-secrets | Включить API-ключи. Обязателен даже при --preset full — ни один пресет не импортирует секреты без явного указания. |
--no-backup | Не создавать zip-снапшот ~/.hermes/ перед миграцией (по умолчанию перед применением записывается архив в ~/.hermes/backups/pre-migration-*.zip; восстанавливается через hermes import). |
--source <path> | Произвольная директория OpenClaw. |
--workspace-target <path> | Куда поместить AGENTS.md. |
--skill-conflict <mode> | skip (по умолчанию), overwrite или rename. |
--yes | Пропустить запрос подтверждения после предпросмотра. |
Что переносится
Персона, память и инструкции
| Что | Источник в OpenClaw | Назначение в Hermes | Примечания |
|---|---|---|---|
| Персона | workspace/SOUL.md | ~/.hermes/SOUL.md | Прямое копирование |
| Инструкции рабочей области | workspace/AGENTS.md | AGENTS.md в --workspace-target | Требует флаг --workspace-target |
| Долгосрочная память | workspace/MEMORY.md | ~/.hermes/memories/MEMORY.md | Разбирается на записи, объединяется с существующими, дубли удаляются. Разделитель §. |
| Профиль пользователя | workspace/USER.md | ~/.hermes/memories/USER.md | Та же логика слияния записей, что и для памяти. |
| Ежедневные файлы памяти | workspace/memory/*.md | ~/.hermes/memories/MEMORY.md | Все дневные файлы объединяются в основную память. |
Файлы рабочей области также ищутся по запасным путям workspace.default/ и workspace-main/ (в новых версиях OpenClaw переименовал workspace/ в workspace-main/, а для мультиагентных конфигов использует workspace-{agentId}).
Навыки (4 источника)
| Источник | Расположение в OpenClaw | Назначение в Hermes |
|---|---|---|
| Навыки рабочей области | workspace/skills/ | ~/.hermes/skills/openclaw-imports/ |
| Управляемые/общие навыки | ~/.openclaw/skills/ | ~/.hermes/skills/openclaw-imports/ |
| Личные межпроектные | ~/.agents/skills/ | ~/.hermes/skills/openclaw-imports/ |
| Общие на уровне проекта | workspace/.agents/skills/ | ~/.hermes/skills/openclaw-imports/ |
Конфликты навыков обрабатываются параметром --skill-conflict: skip оставляет существующий навык Hermes, overwrite заменяет его, rename создаёт копию с суффиксом -imported.
Модель и настройки провайдеров
| Что | Путь в конфиге OpenClaw | Назначение в Hermes | Примечания |
|---|---|---|---|
| Модель по умолчанию | agents.defaults.model | config.yaml → model | Может быть строкой или объектом {primary, fallbacks} |
| Кастомные провайдеры | models.providers.* | config.yaml → custom_providers | Маппит baseUrl, apiType/api — поддерживает краткие (“openai”, “anthropic”) и дефисные (“openai-completions”, “anthropic-messages”, “google-generative-ai”) значения |
| API-ключи провайдеров | models.providers.*.apiKey | ~/.hermes/.env | Требует --migrate-secrets. См. Разрешение API-ключей ниже. |
Поведение агента
| Что | Путь в конфиге OpenClaw | Путь в конфиге Hermes | Маппинг |
|---|---|---|---|
| Макс. ходов | agents.defaults.timeoutSeconds | agent.max_turns | timeoutSeconds / 10, максимум 200 |
| Подробный вывод | agents.defaults.verboseDefault | agent.verbose | ”off” / “on” / “full” |
| Глубина рассуждений | agents.defaults.thinkingDefault | agent.reasoning_effort | ”always”/“high”/“xhigh” → “high”, “auto”/“medium”/“adaptive” → “medium”, “off”/“low”/“none”/“minimal” → “low” |
| Сжатие контекста | agents.defaults.compaction.mode | compression.enabled | ”off” → false, всё остальное → true |
| Модель для сжатия | agents.defaults.compaction.model | compression.summary_model | Прямое копирование строки |
| Задержка «человека» | agents.defaults.humanDelay.mode | human_delay.mode | ”natural” / “custom” / “off” |
| Тайминг задержки | agents.defaults.humanDelay.minMs / .maxMs | human_delay.min_ms / .max_ms | Прямое копирование |
| Часовой пояс | agents.defaults.userTimezone | timezone | Прямое копирование строки |
| Таймаут выполнения | tools.exec.timeoutSec | terminal.timeout | Прямое копирование (поле называется timeoutSec, не timeout) |
| Docker-песочница | agents.defaults.sandbox.backend | terminal.backend | ”docker” → “docker” |
| Docker-образ | agents.defaults.sandbox.docker.image | terminal.docker_image | Прямое копирование |
Политики сброса сессии
| Путь в конфиге OpenClaw | Путь в конфиге Hermes | Примечания |
|---|---|---|
session.reset.mode | session_reset.mode | ”daily”, “idle” или оба |
session.reset.atHour | session_reset.at_hour | Час (0–23) для ежедневного сброса |
session.reset.idleMinutes | session_reset.idle_minutes | Минуты бездействия |
Замечание: в OpenClaw также есть session.resetTriggers — простой строковый массив вида ["daily", "idle"]. Если структурированный блок session.reset отсутствует, миграция выводит значения из resetTriggers.
MCP-серверы
| Поле в OpenClaw | Поле в Hermes | Примечания |
|---|---|---|
mcp.servers.*.command | mcp_servers.*.command | Stdio-транспорт |
mcp.servers.*.args | mcp_servers.*.args | |
mcp.servers.*.env | mcp_servers.*.env | |
mcp.servers.*.cwd | mcp_servers.*.cwd | |
mcp.servers.*.url | mcp_servers.*.url | HTTP/SSE-транспорт |
mcp.servers.*.tools.include | mcp_servers.*.tools.include | Фильтрация инструментов |
mcp.servers.*.tools.exclude | mcp_servers.*.tools.exclude |
TTS (синтез речи)
Настройки TTS читаются из двух мест в конфиге OpenClaw по такому приоритету:
messages.tts.providers.{provider}.*(основное место)talk.providers.{provider}.*на верхнем уровне (запасной вариант)- Устаревшие плоские ключи
messages.tts.{provider}.*(старейший формат)
| Что | Назначение в Hermes |
|---|---|
| Имя провайдера | config.yaml → tts.provider |
| ElevenLabs voice ID | config.yaml → tts.elevenlabs.voice_id |
| ElevenLabs model ID | config.yaml → tts.elevenlabs.model_id |
| OpenAI модель | config.yaml → tts.openai.model |
| OpenAI голос | config.yaml → tts.openai.voice |
| Edge TTS голос | config.yaml → tts.edge.voice (OpenClaw переименовал “edge” в “microsoft” — оба варианта поддерживаются) |
| TTS-ассеты | ~/.hermes/tts/ (копирование файлов) |
Платформы для обмена сообщениями
| Платформа | Путь в конфиге OpenClaw | Переменная в .env Hermes | Примечания |
|---|---|---|---|
| Telegram | channels.telegram.botToken или .accounts.default.botToken | TELEGRAM_BOT_TOKEN | Токен может быть строкой или SecretRef. Поддерживаются плоский и accounts-формат. |
| Telegram | credentials/telegram-default-allowFrom.json | TELEGRAM_ALLOWED_USERS | Объединяется через запятую из массива allowFrom[] |
| Discord | channels.discord.token или .accounts.default.token | DISCORD_BOT_TOKEN | |
| Discord | channels.discord.allowFrom или .accounts.default.allowFrom | DISCORD_ALLOWED_USERS | |
| Slack | channels.slack.botToken или .accounts.default.botToken | SLACK_BOT_TOKEN | |
| Slack | channels.slack.appToken или .accounts.default.appToken | SLACK_APP_TOKEN | |
| Slack | channels.slack.allowFrom или .accounts.default.allowFrom | SLACK_ALLOWED_USERS | |
channels.whatsapp.allowFrom или .accounts.default.allowFrom | WHATSAPP_ALLOWED_USERS | Аутентификация через Baileys QR-спаривание — после миграции потребуется повторное спаривание | |
| Signal | channels.signal.account или .accounts.default.account | SIGNAL_ACCOUNT | |
| Signal | channels.signal.httpUrl или .accounts.default.httpUrl | SIGNAL_HTTP_URL | |
| Signal | channels.signal.allowFrom или .accounts.default.allowFrom | SIGNAL_ALLOWED_USERS | |
| Matrix | channels.matrix.accessToken или .accounts.default.accessToken | MATRIX_ACCESS_TOKEN | Использует accessToken, не botToken |
| Mattermost | channels.mattermost.botToken или .accounts.default.botToken | MATTERMOST_BOT_TOKEN |
Прочие настройки
| Что | Путь в OpenClaw | Путь в Hermes | Примечания |
|---|---|---|---|
| Режим подтверждений | approvals.exec.mode | config.yaml → approvals.mode | ”auto”→“off”, “always”→“manual”, “smart”→“smart” |
| Разрешённые команды | exec-approvals.json | config.yaml → command_allowlist | Паттерны объединяются и дедублируются |
| Browser CDP URL | browser.cdpUrl | config.yaml → browser.cdp_url | |
| Headless-режим браузера | browser.headless | config.yaml → browser.headless | |
| Ключ Brave Search | tools.web.search.brave.apiKey | .env → BRAVE_API_KEY | Требует --migrate-secrets |
| Токен авторизации шлюза | gateway.auth.token | .env → HERMES_GATEWAY_TOKEN | Требует --migrate-secrets |
| Рабочая директория | agents.defaults.workspace | config.yaml → terminal.cwd | Устаревшие миграции могут всё ещё выдавать MESSAGING_CWD как запасной вариант совместимости |
Архивированные (без прямого аналога в Hermes)
Сохраняются в ~/.hermes/migration/openclaw/<timestamp>/archive/ для ручного разбора:
| Что | Файл в архиве | Как воссоздать в Hermes |
|---|---|---|
IDENTITY.md | archive/workspace/IDENTITY.md | Объединить в SOUL.md |
TOOLS.md | archive/workspace/TOOLS.md | В Hermes встроены инструкции по инструментам |
HEARTBEAT.md | archive/workspace/HEARTBEAT.md | Используйте cron-задания для периодических задач |
BOOTSTRAP.md | archive/workspace/BOOTSTRAP.md | Используйте контекстные файлы или навыки |
| Cron-задания | archive/cron-config.json | Пересоздайте через hermes cron create |
| Плагины | archive/plugins-config.json | См. руководство по плагинам |
| Хуки/вебхуки | archive/hooks-config.json | Используйте hermes webhook или хуки шлюза |
| Бэкенд памяти | archive/memory-backend-config.json | Настройте через hermes honcho |
| Реестр навыков | archive/skills-registry-config.json | Используйте hermes skills config |
| UI/идентичность | archive/ui-identity-config.json | Используйте команду /skin |
| Логирование | archive/logging-diagnostics-config.json | Задайте в секции logging файла config.yaml |
| Список мультиагентов | archive/agents-list.json | Используйте профили Hermes |
| Привязки каналов | archive/bindings.json | Ручная настройка на каждой платформе |
| Сложные каналы | archive/channels-deep-config.json | Ручная настройка платформы |
Разрешение API-ключей
При включённом --migrate-secrets ключи собираются из четырёх источников в порядке приоритета:
- Значения в конфиге —
models.providers.*.apiKeyи ключи TTS-провайдеров вopenclaw.json - Файл окружения —
~/.openclaw/.env(ключи видаOPENROUTER_API_KEY,ANTHROPIC_API_KEYи т. д.) - Подобъект env в конфиге —
openclaw.json→"env"или"env"."vars"(некоторые конфигурации хранят ключи здесь вместо отдельного.env) - Профили аутентификации —
~/.openclaw/agents/main/agent/auth-profiles.json(учётные данные на уровне агента)
Значения из конфига имеют наивысший приоритет. Каждый последующий источник заполняет оставшиеся пробелы.
Поддерживаемые ключи
OPENROUTER_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, DEEPSEEK_API_KEY, GEMINI_API_KEY, ZAI_API_KEY, MINIMAX_API_KEY, ELEVENLABS_API_KEY, TELEGRAM_BOT_TOKEN, VOICE_TOOLS_OPENAI_KEY
Ключи, не входящие в этот список, не копируются никогда.
Обработка SecretRef
Значения токенов и API-ключей в конфиге OpenClaw могут быть в трёх форматах:
// Обычная строка
"channels": { "telegram": { "botToken": "123456:ABC-DEF..." } }
// Шаблон переменной окружения
"channels": { "telegram": { "botToken": "${TELEGRAM_BOT_TOKEN}" } }
// Объект SecretRef
"channels": { "telegram": { "botToken": { "source": "env", "id": "TELEGRAM_BOT_TOKEN" } } }
Миграция разрешает все три формата. Для шаблонов env и объектов SecretRef с source: "env" значение ищется в ~/.openclaw/.env и подобъекте env файла openclaw.json. SecretRef с source: "file" или source: "exec" разрешить автоматически невозможно — миграция предупредит об этом, и такие значения придётся добавить в Hermes вручную через hermes config set.
После миграции
-
Проверьте отчёт миграции — выводится по завершении с количеством перенесённых, пропущенных и конфликтных элементов.
-
Просмотрите архивные файлы — всё, что оказалось в
~/.hermes/migration/openclaw/<timestamp>/archive/, требует ручного разбора. -
Начните новую сессию — импортированные навыки и записи памяти вступают в силу только в новых сессиях, не в текущей.
-
Проверьте API-ключи — запустите
hermes status, чтобы убедиться в корректной аутентификации провайдеров. -
Протестируйте обмен сообщениями — если переносили токены платформ, перезапустите шлюз:
systemctl --user restart hermes-gateway -
Проверьте политики сессии — выполните
hermes config showи убедитесь, что значениеsession_resetсоответствует ожиданиям. -
Повторно спарьте WhatsApp — WhatsApp использует QR-спаривание (Baileys), а не перенос токена. Запустите
hermes whatsappдля спаривания. -
Очистите старые файлы — убедившись, что всё работает, выполните
hermes claw cleanup, чтобы переименовать оставшиеся директории OpenClaw в.pre-migration/(это предотвращает путаницу состояний).
Решение проблем
«OpenClaw directory not found»
Миграция проверяет ~/.openclaw/, затем ~/.clawdbot/, затем ~/.moltbot/. Если ваша установка находится в другом месте, укажите путь: --source /path/to/your/openclaw.
«No provider API keys found»
Ключи могут храниться в нескольких местах в зависимости от версии OpenClaw: прямо в openclaw.json под models.providers.*.apiKey, в ~/.openclaw/.env, в подобъекте "env" файла openclaw.json или в agents/main/agent/auth-profiles.json. Миграция проверяет все четыре. Если ключи используют SecretRef с source: "file" или source: "exec", автоматическое разрешение невозможно — добавьте их через hermes config set.
Навыки не появляются после миграции
Импортированные навыки попадают в ~/.hermes/skills/openclaw-imports/. Начните новую сессию, чтобы они применились, или запустите /skills, чтобы проверить загрузку.
Голос TTS не перенёсся
OpenClaw хранит настройки TTS в двух местах: messages.tts.providers.* и конфиге верхнего уровня talk. Миграция проверяет оба. Если voice ID был задан через UI OpenClaw (хранится в другом пути), возможно, придётся задать его вручную: hermes config set tts.elevenlabs.voice_id YOUR_VOICE_ID.