Hermes
Move your Hermes install into memcode with one command: channels, API keys, skills, and memory.
memcode hermes migrate moves your Hermes install into memcode. Run it with no arguments
and it reads Hermes's own default location:
memcode hermes migratePoint it elsewhere only if your Hermes state lives in a non-standard directory:
memcode hermes migrate /path/to/.hermesThere is a dedicated command per source (memcode claw migrate for OpenClaw) rather than
one that guesses. If you moved between assistants the old install is still on
disk, and auto-detecting between two would quietly import the stale one.
What transfers
| From your Hermes install | Lands in |
|---|---|
| Channels, bot tokens and allow-lists | gateway.yaml + the global .env |
Provider API keys like OPENAI_API_KEY | the global .env, under the same names |
Skills, any SKILL.md directory | ~/.memcode/skills |
| Memory, your long-term memory entries | global ~/.memcode/memory.md |
Anything that cannot be carried automatically is reported as a note, never dropped silently.
Credentials
Hermes stores bot tokens under the same variable names memcode uses, so they
carry over directly, and each platform's allowed_users becomes
channels.<name>.allow_from (both authorize on stable ids, not handles). Channels
whose credentials do not map the same way (WhatsApp, Signal) are reported so you
can finish them with memcode gateway setup.
Your memory comes over
Hermes remembers things across every conversation, and so does memcode. The
migration reads your Hermes memory (its ~/.hermes/memories store) and brings it
into memcode's global memory, so the agent still knows what it knew before: your
preferences, the people and projects you told it about, the facts you built up.
It all lands in ~/.memcode/memory.md, loaded into every session. Open that file
any time to read it, edit it, or add to it. Running memcode hermes migrate again
refreshes what it imported instead of duplicating it. See Memory
for how memcode's global and per-project memory work.
Imported skills
Imported skills are third-party code. The migration copies them into
~/.memcode/skills and flags them so you can review them before trusting them,
and it never overwrites a skill you already have. A name collision keeps yours and
skips the import.
Open channels
If your Hermes config allows anyone (allow_from: ["*"]), the migration does
not bring the wildcard over. It is reported as a note instead. An open channel
hands an autonomous agent to anyone who can reach it, so memcode makes you opt into
that deliberately rather than inheriting it.
Review the result with memcode gateway setup, then run memcode gateway.
Cron jobs migrate too
Your Hermes cron jobs come with you automatically: recurring jobs keep their
cadence, paused jobs arrive paused, and pending one-shots keep their fire time.
Jobs that ran a script payload are listed in the migration notes with the
command to recreate them — nothing is silently dropped. Manage everything
afterwards with memcode gateway schedule list (the cron alias works too).
MCP servers and your agent's soul come too
Your mcp_servers carry over into memcode's user-scope MCP config, available in
every project. SOUL.md — your agent's identity — carries over as the same file, byte for
byte: ~/.memcode/agents/hermes/SOUL.md. Bind a
channel to it and you're talking to the assistant you migrated. A cron job that
pinned a model is flagged in the notes: in memcode the model (and thinking
effort) lives on the agent (agents.<name>.model, reasoning), so pin it
there once and every run that agent answers uses it.