Migrating from Hermes to OpenClaw
What the import keeps, what stays archive-only, and the credential prompt
People who ran Hermes and want to try OpenClaw do not have to start from nothing: the bundled Hermes migration provider follows the Hermes home directory and the active profile, previews every change before applying it, redacts secrets in plans and reports, and either writes a verified backup, in the standalone command, or stages the import and publishes it only after the imported inference verifies, in onboarding. Here is what it imports, what it deliberately leaves in an archive, the credential question it asks, and the order the docs recommend.
Two ways to run it
- The onboarding wizard with the import flow detects the active Hermes home and profile and shows a preview before applying; a source can be pointed at explicitly.
- The migrate command for scripted runs: a dry run to preview, then apply with the yes flag, and a from flag to override discovery; an explicit path always wins.
- Both require a fresh OpenClaw setup; with existing state, reset config, credentials, sessions and the workspace first, or apply with the overwrite flag after reading the plan.
What gets imported
Model configuration: the default model selection, and configured providers and custom endpoints, including transport aliases and per-model metadata. MCP servers, with disabled state, timeouts, OAuth scope and tool policy; Hermes-only lifecycle and keepalive settings become manual-review items rather than invalid config, and unsupported filter patterns are omitted or leave the server disabled until you replace them. Workspace files: the soul and agents files are copied, the memory and user files are appended to OpenClaw’s rather than overwriting them. Memory configuration for file memory, with external memory providers recorded for manual review. Skills with a skill file, discovered recursively and flattened into the workspace skill directory with their support files, config and disabled state.
OpenClaw refuses to execute or trust this state automatically because formats and trust assumptions can drift between systems.
Credentials and the archive
- The interactive command asks before importing auth credentials, yes by default: current Codex OAuth entries, OpenCode and Copilot entries, and the supported environment keys; flags exist to include secrets in an unattended run or to skip credentials entirely.
- After importing an OAuth entry, do not keep Hermes and OpenClaw on the same refresh grant; reauthenticate one side before running both.
- Archive-only, copied into the report directory and never loaded: plugins, sessions, logs, cron, MCP tokens, plans, workspace, skins and kanban, pairing and platform stores, and every state database.
Hermes versus OpenClaw is the comparison to read before deciding to move at all, and OpenClaw and Claude Code is the same migration shape for Claude Code state.
The recommended flow
Preview the plan, which lists changes, conflicts, skipped and sensitive items with nested secret-looking keys redacted; apply with the backup OpenClaw creates and verifies; run the doctor, which reapplies pending config migrations and checks for issues the import introduced; restart and verify. Hermes skills explained explains what the imported skills were on the Hermes side.
On Diali
Diali runs both: a Hermes assistant and an OpenClaw assistant are two plans on the same dashboard, and moving between them is a matter of bringing the text, the persona, the memory files and the skills, into the new workspace rather than running a terminal import. Hosted Hermes on Diali and Hosted OpenClaw on Diali are the two.
- Preview, then apply with a verified backup.
- Models, MCP servers, workspace and memory files, skills and, on request, credentials move.
- Sessions, plugins, cron and every database stay in the archive.
Stop reading about it, build one
Set up an agent, pick a channel, and have it working inside the app you already keep open.
