All posts
2026-04-12

Complete Guide: Migrate from OpenClaw to Hermes Agent

Migration tutorial covering commands, config mapping, skill imports, and platform setup.

If you're an OpenClaw (or legacy Clawdbot / Moldbot) user, Hermes Agent offers a complete migration path. This guide walks you through moving your configs, memories, skills, and platform integrations to Hermes in one go.

Prerequisites

1. Install Hermes Agent

If you haven't installed Hermes yet, run the official one-line installer (Linux / macOS / WSL2 / Termux):

curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

Then reload your shell:

source ~/.bashrc   # or source ~/.zshrc

Windows users must install WSL2 first before running the command above.

2. Confirm OpenClaw Directory Exists

The migration tool checks for your OpenClaw installation in this order:

  1. ~/.openclaw/
  2. ~/.clawdbot/ (older version)
  3. ~/.moltbot/ (oldest version)

If installed elsewhere, use --source /your/path with the migration command.


Quick Start

Hermes provides a hermes claw migrate command to handle the entire migration. Three common patterns:

# Preview then confirm (recommended for first use)
hermes claw migrate

# Preview only, no changes
hermes claw migrate --dry-run

# Full migration including API keys, skip confirmation
hermes claw migrate --preset full --yes

We recommend running --dry-run first to see what will be migrated before committing.


Command Options

OptionDescription
--dry-runPreview only, no files modified
--preset <name>full (default, includes secrets) or user-data (excludes API keys)
--overwriteOverwrite existing Hermes files on conflicts (default: skip)
--migrate-secretsMigrate API keys (on by default with --preset full)
--source <path>Custom OpenClaw directory path
--workspace-target <path>Where to place AGENTS.md
--skill-conflict <mode>skip (default), overwrite, or rename (creates -imported copy)
--yesSkip confirmation prompt after preview

What Gets Migrated

1. Persona, Memory & Instructions

ContentOpenClaw PathHermes DestinationNotes
Personaworkspace/SOUL.md~/.hermes/SOUL.mdDirect copy
Workspace instructionsworkspace/AGENTS.mdAGENTS.md at --workspace-targetRequires flag
Long-term memoryworkspace/MEMORY.md~/.hermes/memories/MEMORY.mdParsed, merged, deduped with § delimiter
User profileworkspace/USER.md~/.hermes/memories/USER.mdEntry-merge logic
Daily memory filesworkspace/memory/*.md~/.hermes/memories/MEMORY.mdAll daily files merged into main

Fallback paths: If workspace/ doesn't exist, the tool checks workspace.default/ and workspace-main/.

2. Skills (4 Sources)

All skills are imported to ~/.hermes/skills/openclaw-imports/:

SourceOpenClaw LocationHermes Destination
Workspace skillsworkspace/skills/~/.hermes/skills/openclaw-imports/
Managed/shared~/.openclaw/skills/~/.hermes/skills/openclaw-imports/
Personal cross-project~/.agents/skills/~/.hermes/skills/openclaw-imports/
Project-level sharedworkspace/.agents/skills/~/.hermes/skills/openclaw-imports/

Conflict handling via --skill-conflict:

  • skip (default) — keep existing Hermes skill
  • overwrite — replace with OpenClaw skill
  • rename — create -imported copy

3. Model & Provider Configuration

ContentOpenClaw Config PathHermes DestinationNotes
Default modelagents.defaults.modelconfig.yamlmodelString or {primary, fallbacks} object
Custom providersmodels.providers.*config.yamlcustom_providersMaps baseUrl, apiType/api
Provider API keysmodels.providers.*.apiKey~/.hermes/.envRequires --migrate-secrets

4. Agent Behavior

ContentOpenClaw PathHermes PathMapping
Max turnsagents.defaults.timeoutSecondsagent.max_turnstimeoutSeconds / 10, capped at 200
Verbose modeagents.defaults.verboseDefaultagent.verboseoff / on / full
Reasoning effortagents.defaults.thinkingDefaultagent.reasoning_effortalways/high/xhighhigh; auto/medium/adaptivemedium; off/low/none/minimallow
Compressionagents.defaults.compaction.modecompression.enabledofffalse, else true
Compression modelagents.defaults.compaction.modelcompression.summary_modelDirect copy
Human delayagents.defaults.humanDelay.modehuman_delay.modenatural / custom / off
Delay timingagents.defaults.humanDelay.minMs / .maxMshuman_delay.min_ms / .max_msDirect copy
Timezoneagents.defaults.userTimezonetimezoneDirect copy
Exec timeouttools.exec.timeoutSecterminal.timeoutDirect copy
Docker sandboxagents.defaults.sandbox.backendterminal.backenddockerdocker
Docker imageagents.defaults.sandbox.docker.imageterminal.docker_imageDirect copy

5. Session Reset Policies

OpenClaw PathHermes PathNotes
session.reset.modesession_reset.modedaily, idle, or both
session.reset.atHoursession_reset.at_hourHour (0–23) for daily reset
session.reset.idleMinutessession_reset.idle_minutesMinutes of inactivity

Legacy fallback: If session.reset is missing, the tool infers from session.resetTriggers array.

6. Messaging Platforms

Telegram

OpenClaw PathHermes Env VariableNotes
channels.telegram.botTokenTELEGRAM_BOT_TOKENSupports string, env template, and SecretRef formats
credentials/telegram-default-allowFrom.jsonTELEGRAM_ALLOWED_USERSComma-joined from allowFrom[]

Discord

OpenClaw PathHermes Env Variable
channels.discord.tokenDISCORD_BOT_TOKEN
channels.discord.allowFromDISCORD_ALLOWED_USERS

Slack

OpenClaw PathHermes Env Variable
channels.slack.botTokenSLACK_BOT_TOKEN
channels.slack.appTokenSLACK_APP_TOKEN
channels.slack.allowFromSLACK_ALLOWED_USERS

WhatsApp

OpenClaw PathHermes Env VariableNotes
channels.whatsapp.allowFromWHATSAPP_ALLOWED_USERSUses Baileys QR pairing — must re-pair after migration

Signal

OpenClaw PathHermes Env Variable
channels.signal.accountSIGNAL_ACCOUNT
channels.signal.httpUrlSIGNAL_HTTP_URL
channels.signal.allowFromSIGNAL_ALLOWED_USERS

Matrix

OpenClaw PathHermes Env VariableNotes
channels.matrix.accessTokenMATRIX_ACCESS_TOKENUses accessToken, not botToken

Mattermost

OpenClaw PathHermes Env Variable
channels.mattermost.botTokenMATTERMOST_BOT_TOKEN

7. MCP Servers

OpenClaw FieldHermes FieldNotes
mcp.servers.*.commandmcp_servers.*.commandStdio transport
mcp.servers.*.argsmcp_servers.*.argsArguments
mcp.servers.*.envmcp_servers.*.envEnvironment variables
mcp.servers.*.cwdmcp_servers.*.cwdWorking directory
mcp.servers.*.urlmcp_servers.*.urlHTTP/SSE transport
mcp.servers.*.tools.includemcp_servers.*.tools.includeTool allowlist
mcp.servers.*.tools.excludemcp_servers.*.tools.excludeTool blocklist

8. TTS Configuration

The migration tool reads TTS config from three locations in priority order:

  1. messages.tts.providers.{provider}.* (canonical)
  2. talk.providers.{provider}.* (fallback)
  3. messages.tts.{provider}.* (oldest format)

Supports ElevenLabs (voice_id, model_id), OpenAI (model, voice), and Edge TTS (voice).

9. Other Config

ContentOpenClaw PathHermes PathNotes
Approval modeapprovals.exec.modeapprovals.modeautooff, alwaysmanual, smartsmart
Command allowlistexec-approvals.jsoncommand_allowlistMerged and deduped
Browser CDPbrowser.cdpUrlbrowser.cdp_urlDirect copy
Brave search keytools.web.search.brave.apiKeyBRAVE_API_KEYRequires --migrate-secrets
Gateway tokengateway.auth.tokenHERMES_GATEWAY_TOKENRequires --migrate-secrets
Working directoryagents.defaults.workspaceMESSAGING_CWDDirect copy

API Key Handling

When --migrate-secrets is enabled, keys are collected from four sources in priority order:

  1. Config valuesmodels.providers.*.apiKey and TTS keys in openclaw.json
  2. Environment file~/.openclaw/.env
  3. Config env sub-objectopenclaw.json"env" or "env"."vars"
  4. Auth profiles~/.openclaw/agents/main/agent/auth-profiles.json

Supported Keys

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

Security: Keys not in this allowlist are never copied.

SecretRef Format Handling

OpenClaw tokens and API keys can appear in three formats — all are handled:

// 1. Plain string
{ "botToken": "123456:ABC-DEF..." }

// 2. Environment template
{ "botToken": "${TELEGRAM_BOT_TOKEN}" }

// 3. SecretRef object
{ "botToken": { "source": "env", "id": "TELEGRAM_BOT_TOKEN" } }

For source: "file" or source: "exec" SecretRef types, automatic resolution is not possible — the tool warns about these. Add values manually via hermes config set.


What Cannot Be Auto-Migrated

These items are archived to ~/.hermes/migration/openclaw/<timestamp>/archive/:

FileArchive LocationHow to Recreate in Hermes
IDENTITY.mdarchive/workspace/IDENTITY.mdMerge into SOUL.md
TOOLS.mdarchive/workspace/TOOLS.mdHermes has built-in tool instructions
HEARTBEAT.mdarchive/workspace/HEARTBEAT.mdUse cron jobs
BOOTSTRAP.mdarchive/workspace/BOOTSTRAP.mdUse context files or skills
Cron jobsarchive/cron-config.jsonRecreate with hermes cron create
Pluginsarchive/plugins-config.jsonSee Hermes plugins guide
Hooks/webhooksarchive/hooks-config.jsonUse hermes webhook or gateway hooks
Memory backendarchive/memory-backend-config.jsonConfigure via hermes honcho
Skills registryarchive/skills-registry-config.jsonUse hermes skills config
UI/identityarchive/ui-identity-config.jsonUse /skin command
Loggingarchive/logging-diagnostics-config.jsonSet in config.yaml logging section
Multi-agent listarchive/agents-list.jsonUse Hermes profiles
Channel bindingsarchive/bindings.jsonManual platform config
Complex channelsarchive/channels-deep-config.jsonManual platform config

Post-Migration Checklist

1. Review Migration Report

The summary printed on completion shows counts of migrated, skipped, and conflicting items.

2. Check Archived Files

Review ~/.hermes/migration/openclaw/<timestamp>/archive/ for items needing manual attention.

3. Start a New Session

Imported skills and memory entries take effect in new sessions only.

4. Verify API Keys

hermes status

5. Test Messaging Platforms

If you migrated platform tokens, restart the gateway:

systemctl --user restart hermes-gateway

6. Verify Session Policies

hermes config get session_reset

7. Re-pair WhatsApp

WhatsApp uses Baileys QR code pairing and cannot be migrated via token:

hermes whatsapp

8. Clean Up

After confirming everything works:

hermes claw cleanup

This renames leftover OpenClaw directories to .pre-migration/.


Troubleshooting

"OpenClaw directory not found"

The tool checks ~/.openclaw/, ~/.clawdbot/, and ~/.moltbot/. If installed elsewhere:

hermes claw migrate --source /path/to/your/openclaw

"No provider API keys found"

Keys may be stored in different locations depending on your OpenClaw version. The migration checks all four sources. For source: "file" or source: "exec" SecretRefs, add manually:

hermes config set providers.openrouter.api_key YOUR_KEY

Skills Not Appearing After Migration

Imported skills land in ~/.hermes/skills/openclaw-imports/. Start a new session, or run /skills to verify they're loaded.

TTS Voice Not Migrated

If voice ID was set via the OpenClaw UI (stored in a different path), set it manually:

hermes config set tts.elevenlabs.voice_id YOUR_VOICE_ID

Summary

The entire migration boils down to three steps:

  1. hermes claw migrate --dry-run — preview first
  2. hermes claw migrate --preset full — run the migration
  3. Walk through the checklist — verify each module

The migration tool covers the vast majority of configurations automatically. Items it can't handle are archived with clear guidance on manual recreation — no data is lost.