Миграция с 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.mdAGENTS.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.modelconfig.yamlmodelМожет быть строкой или объектом {primary, fallbacks}
Кастомные провайдерыmodels.providers.*config.yamlcustom_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.timeoutSecondsagent.max_turnstimeoutSeconds / 10, максимум 200
Подробный выводagents.defaults.verboseDefaultagent.verbose”off” / “on” / “full”
Глубина рассужденийagents.defaults.thinkingDefaultagent.reasoning_effort”always”/“high”/“xhigh” → “high”, “auto”/“medium”/“adaptive” → “medium”, “off”/“low”/“none”/“minimal” → “low”
Сжатие контекстаagents.defaults.compaction.modecompression.enabled”off” → false, всё остальное → true
Модель для сжатияagents.defaults.compaction.modelcompression.summary_modelПрямое копирование строки
Задержка «человека»agents.defaults.humanDelay.modehuman_delay.mode”natural” / “custom” / “off”
Тайминг задержкиagents.defaults.humanDelay.minMs / .maxMshuman_delay.min_ms / .max_msПрямое копирование
Часовой поясagents.defaults.userTimezonetimezoneПрямое копирование строки
Таймаут выполненияtools.exec.timeoutSecterminal.timeoutПрямое копирование (поле называется timeoutSec, не timeout)
Docker-песочницаagents.defaults.sandbox.backendterminal.backend”docker” → “docker”
Docker-образagents.defaults.sandbox.docker.imageterminal.docker_imageПрямое копирование

Политики сброса сессии

Путь в конфиге OpenClawПуть в конфиге HermesПримечания
session.reset.modesession_reset.mode”daily”, “idle” или оба
session.reset.atHoursession_reset.at_hourЧас (0–23) для ежедневного сброса
session.reset.idleMinutessession_reset.idle_minutesМинуты бездействия

Замечание: в OpenClaw также есть session.resetTriggers — простой строковый массив вида ["daily", "idle"]. Если структурированный блок session.reset отсутствует, миграция выводит значения из resetTriggers.

MCP-серверы

Поле в OpenClawПоле в HermesПримечания
mcp.servers.*.commandmcp_servers.*.commandStdio-транспорт
mcp.servers.*.argsmcp_servers.*.args
mcp.servers.*.envmcp_servers.*.env
mcp.servers.*.cwdmcp_servers.*.cwd
mcp.servers.*.urlmcp_servers.*.urlHTTP/SSE-транспорт
mcp.servers.*.tools.includemcp_servers.*.tools.includeФильтрация инструментов
mcp.servers.*.tools.excludemcp_servers.*.tools.exclude

TTS (синтез речи)

Настройки TTS читаются из двух мест в конфиге OpenClaw по такому приоритету:

  1. messages.tts.providers.{provider}.* (основное место)
  2. talk.providers.{provider}.* на верхнем уровне (запасной вариант)
  3. Устаревшие плоские ключи messages.tts.{provider}.* (старейший формат)
ЧтоНазначение в Hermes
Имя провайдераconfig.yamltts.provider
ElevenLabs voice IDconfig.yamltts.elevenlabs.voice_id
ElevenLabs model IDconfig.yamltts.elevenlabs.model_id
OpenAI модельconfig.yamltts.openai.model
OpenAI голосconfig.yamltts.openai.voice
Edge TTS голосconfig.yamltts.edge.voice (OpenClaw переименовал “edge” в “microsoft” — оба варианта поддерживаются)
TTS-ассеты~/.hermes/tts/ (копирование файлов)

Платформы для обмена сообщениями

ПлатформаПуть в конфиге OpenClawПеременная в .env HermesПримечания
Telegramchannels.telegram.botToken или .accounts.default.botTokenTELEGRAM_BOT_TOKENТокен может быть строкой или SecretRef. Поддерживаются плоский и accounts-формат.
Telegramcredentials/telegram-default-allowFrom.jsonTELEGRAM_ALLOWED_USERSОбъединяется через запятую из массива allowFrom[]
Discordchannels.discord.token или .accounts.default.tokenDISCORD_BOT_TOKEN
Discordchannels.discord.allowFrom или .accounts.default.allowFromDISCORD_ALLOWED_USERS
Slackchannels.slack.botToken или .accounts.default.botTokenSLACK_BOT_TOKEN
Slackchannels.slack.appToken или .accounts.default.appTokenSLACK_APP_TOKEN
Slackchannels.slack.allowFrom или .accounts.default.allowFromSLACK_ALLOWED_USERS
WhatsAppchannels.whatsapp.allowFrom или .accounts.default.allowFromWHATSAPP_ALLOWED_USERSАутентификация через Baileys QR-спаривание — после миграции потребуется повторное спаривание
Signalchannels.signal.account или .accounts.default.accountSIGNAL_ACCOUNT
Signalchannels.signal.httpUrl или .accounts.default.httpUrlSIGNAL_HTTP_URL
Signalchannels.signal.allowFrom или .accounts.default.allowFromSIGNAL_ALLOWED_USERS
Matrixchannels.matrix.accessToken или .accounts.default.accessTokenMATRIX_ACCESS_TOKENИспользует accessToken, не botToken
Mattermostchannels.mattermost.botToken или .accounts.default.botTokenMATTERMOST_BOT_TOKEN

Прочие настройки

ЧтоПуть в OpenClawПуть в HermesПримечания
Режим подтвержденийapprovals.exec.modeconfig.yamlapprovals.mode”auto”→“off”, “always”→“manual”, “smart”→“smart”
Разрешённые командыexec-approvals.jsonconfig.yamlcommand_allowlistПаттерны объединяются и дедублируются
Browser CDP URLbrowser.cdpUrlconfig.yamlbrowser.cdp_url
Headless-режим браузераbrowser.headlessconfig.yamlbrowser.headless
Ключ Brave Searchtools.web.search.brave.apiKey.envBRAVE_API_KEYТребует --migrate-secrets
Токен авторизации шлюзаgateway.auth.token.envHERMES_GATEWAY_TOKENТребует --migrate-secrets
Рабочая директорияagents.defaults.workspaceconfig.yamlterminal.cwdУстаревшие миграции могут всё ещё выдавать MESSAGING_CWD как запасной вариант совместимости

Архивированные (без прямого аналога в Hermes)

Сохраняются в ~/.hermes/migration/openclaw/<timestamp>/archive/ для ручного разбора:

ЧтоФайл в архивеКак воссоздать в Hermes
IDENTITY.mdarchive/workspace/IDENTITY.mdОбъединить в SOUL.md
TOOLS.mdarchive/workspace/TOOLS.mdВ Hermes встроены инструкции по инструментам
HEARTBEAT.mdarchive/workspace/HEARTBEAT.mdИспользуйте cron-задания для периодических задач
BOOTSTRAP.mdarchive/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 ключи собираются из четырёх источников в порядке приоритета:

  1. Значения в конфигеmodels.providers.*.apiKey и ключи TTS-провайдеров в openclaw.json
  2. Файл окружения~/.openclaw/.env (ключи вида OPENROUTER_API_KEY, ANTHROPIC_API_KEY и т. д.)
  3. Подобъект env в конфигеopenclaw.json"env" или "env"."vars" (некоторые конфигурации хранят ключи здесь вместо отдельного .env)
  4. Профили аутентификации~/.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.

После миграции

  1. Проверьте отчёт миграции — выводится по завершении с количеством перенесённых, пропущенных и конфликтных элементов.

  2. Просмотрите архивные файлы — всё, что оказалось в ~/.hermes/migration/openclaw/<timestamp>/archive/, требует ручного разбора.

  3. Начните новую сессию — импортированные навыки и записи памяти вступают в силу только в новых сессиях, не в текущей.

  4. Проверьте API-ключи — запустите hermes status, чтобы убедиться в корректной аутентификации провайдеров.

  5. Протестируйте обмен сообщениями — если переносили токены платформ, перезапустите шлюз: systemctl --user restart hermes-gateway

  6. Проверьте политики сессии — выполните hermes config show и убедитесь, что значение session_reset соответствует ожиданиям.

  7. Повторно спарьте WhatsApp — WhatsApp использует QR-спаривание (Baileys), а не перенос токена. Запустите hermes whatsapp для спаривания.

  8. Очистите старые файлы — убедившись, что всё работает, выполните 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.

ESC