Миграция с OpenClaw

hermes Claw Migrate импортирует вашу конфигурацию OpenClaw (или виртуальный Clawdbot/Moldbot) в Hermes. В этом руководстве описывается, что это переносится, как ключевые конституции парламента, которые необходимо проверить после внесения в силу.

Быстрый старт

# Предпросмотр, затем миграция (всегда показывает предпросмотр, затем запрашивает подтверждение)
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 <имя> full (все совместимые настройки) или user-data (исключает конфигурацию инфраструктуры). Ни один пресет не импортирует секреты по умолчанию — явно укажите --migrate-secrets.
--overwrite Перезаписывать существующие файлы Hermes при конфликтах (по умолчанию: отказ от применения, если в плане есть конфликты).
--migrate-secrets Включает API-ключи. Требуется даже при --preset full — ни один пресет не импортирует секреты молча.
--no-backup Пропустить создание zip-снимка ~/.hermes/ до миграции (по умолчанию перед применением записывается один архив точки восстановления в ~/.hermes/backups/pre-migration-*.zip; можно восстановить с помощью hermes import).
--source <путь> Пользовательская директория OpenClaw.
--workspace-target <путь> Куда поместить AGENTS.md.
--skill-conflict <режим> 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.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.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 со следующим приоритетом:

  1. messages.tts.providers.{provider}.* (каноническое расположение)
  2. talk.providers.{provider}.* верхнего уровня (запасной вариант)
  3. Устаревшие плоские ключи messages.tts.{provider}.* (самый старый формат)
Что Назначение Hermes
Имя провайдера config.yamltts.provider
ID голоса ElevenLabs config.yamltts.elevenlabs.voice_id
ID модели ElevenLabs config.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 Примечания
Telegram channels.telegram.botToken или .accounts.default.botToken TELEGRAM_BOT_TOKEN Токен может быть строкой или SecretRef. Поддерживаются как плоская, так и структура с аккаунтами.
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
WhatsApp channels.whatsapp.allowFrom или .accounts.default.allowFrom WHATSAPP_ALLOWED_USERS Аутентификация через QR-сопряжение Baileys — требуется повторное сопряжение после миграции
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.yamlapprovals.mode "auto"→"off", "always"→"manual", "smart"→"smart"
Белый список команд exec-approvals.json config.yamlcommand_allowlist Шаблоны объединяются и дедуплицируются
URL браузера CDP browser.cdpUrl config.yamlbrowser.cdp_url
Безголовый браузер browser.headless config.yamlbrowser.headless
Ключ поиска Brave tools.web.search.brave.apiKey .envBRAVE_API_KEY Требуется --migrate-secrets
Токен аутентификации шлюза gateway.auth.token .envHERMES_GATEWAY_TOKEN Требуется --migrate-secrets
Рабочая директория agents.defaults.workspace .envMESSAGING_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 Установить в секции логирования config.yaml
Список мультиагентов archive/agents-list.json Используйте профили Hermes
Привязки каналов archive/bindings.json Ручная настройка для каждой платформы
Сложные каналы archive/channels-deep-config.json Ручная настройка платформы

Разрешение API-ключей

Когда --migrate-secrets включен, API-ключи собираются из четырех источников в порядке приоритета:

  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

Значения конфига OpenClaw для токенов и API-ключей могут быть в трех форматах:

// Простая строка
"channels": { "telegram": { "botToken": "123456:ABC-DEF..." } }

// Шаблон окружения
"channels": { "telegram": { "botToken": "${TELEGRAM_BOT_TOKEN}" } }

// Объект SecretRef
"channels": { "telegram": { "botToken": { "source": "env", "id": "TELEGRAM_BOT_TOKEN" } } }

Миграция обрабатывается во всех трех формах. Для окружения шаблонов и объектов 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 get session_reset соответствует вашим ожиданиям.

  7. Повторно свяжите WhatsApp — WhatsApp использует QR-сопряжение (Baileys), а не миграцию токенов. Выполните hermes WhatsApp для связи.

  8. Очистка архива — после подтверждения того, что все работает, выполните hermes Claw Cleanup, чтобы переименовать структуру директории OpenClaw в .pre-migration/ (предотвращает путаницу изменений).

Устранение неполадок

"Директория OpenClaw не найдена"

Миграция сначала ~/.openclaw/, затем ~/.clawdbot/, затем ~/.moltbot/. Если ваша установка находится в другом месте, используйте --source /путь/к/вашему/openclaw.

"API-ключи провайдеров не найдены"

Ключи могут храниться в нескольких местах в зависимости от версии 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, чтобы выбрать новую проверку, загруженную ими.

ТТС-голос не перенесен

OpenClaw хранит настройки TTS в двух местах: messages.tts.providers.* и конфиг talk верхнего уровня. Миграция вчера оба. Если ваш идентификатор голоса был установлен через пользовательский интерфейс OpenClaw (хранится в другом пути), вы можете позже установить его вручную: hermes config set tts.elevenlabs.voice_id YOUR_VOICE_ID.