Skip to content

Import from Hermes or OpenClaw

If you are coming from Hermes or OpenClaw, you do not have to start empty. atomic-agent import reads the other agent’s state directory and copies your conversation history and scheduled jobs into Atomic Agent’s own stores.

It is a one-shot migration, not a sync. Run it once when you switch, or again later to pick up what you left behind.

Start with a dry run

Always. --dry-run runs the full reconciliation β€” reading the source, matching against your existing sessions, detecting conflicts β€” and then writes nothing. You get the exact report the real run would produce, with none of the consequences.

Terminal window
atomic-agent import hermes --dry-run
  1. Preview. Run with --dry-run and read the report: how many sessions, how many cron jobs, and how many conflicts.

  2. Resolve conflicts. If items are flagged as conflicting, decide whether you want --overwrite or would rather leave your existing data alone.

  3. Import. Re-run without --dry-run. You get an interactive confirmation unless you pass --yes.

Hermes

Terminal window
atomic-agent import hermes [--source DIR] [--preset default|full]
[--include a,b] [--exclude a,b]
[--migrate-secrets] [--limit N]
[--overwrite] [--dry-run] [--yes]
FlagDefaultDescription
--source DIR~/.hermes, or HERMES_STATE_DIRHermes state directory to read.
--preset default|fulldefaultWhat to import. default is sessions + cron.
--include a,bβ€”Add options on top of the preset (sessions, cron).
--exclude a,bβ€”Remove options from the preset.
--migrate-secretsoffAlso copy allowlisted provider keys into <stateDir>/.env. See below.
--limit Nno limitCap the number of sessions imported. Must be a non-negative integer.
--overwriteoffOverwrite destinations that differ instead of flagging them as conflicts.
--dry-runoffPreview only; never write.
--yesoffSkip the interactive confirmation.
Terminal window
atomic-agent import hermes --dry-run
atomic-agent import hermes --yes
atomic-agent import hermes --migrate-secrets --overwrite

If your include/exclude combination leaves nothing selected, the command exits 1 with nothing selected to import rather than doing a silent no-op.

OpenClaw

Terminal window
atomic-agent import openclaw [--source DIR] [--agent NAME]
[--include a,b] [--exclude a,b]
[--limit N] [--overwrite] [--dry-run] [--yes]
FlagDefaultDescription
--source DIR~/.openclaw, or OPENCLAW_STATE_DIROpenClaw state directory to read.
--agent NAMEmainWhich OpenClaw agent’s sessions to import.
--include a,bβ€”Add options (sessions, cron).
--exclude a,bβ€”Remove options.
--limit Nno limitCap the number of sessions imported.
--overwriteoffOverwrite differing destinations.
--dry-runoffPreview only.
--yesoffSkip confirmation.
Terminal window
atomic-agent import openclaw --dry-run
atomic-agent import openclaw --agent main --yes

The subcommand is required

import on its own is not a command. Running it with no source prints the help text and exits 1:

Terminal window
atomic-agent import # prints help, exits 1
atomic-agent import --help # prints help, exits 0

An unrecognised source (atomic-agent import claude) also exits 1.

Imported sessions never collide

Sessions arrive with a namespace prefix β€” hermes: or openclaw: β€” so an imported conversation can never overwrite a native Atomic Agent session that happens to share an id.

Conflicts are detected structurally, on the full transcript rather than just the identifier. Two consequences worth knowing:

  • Re-running the same import is safe. Identical items are skipped and reported as duplicates, not written twice.
  • An item flagged as a conflict genuinely differs in content. --overwrite replaces your side with the source’s; without it, your existing data wins and the difference is reported.

Migrating secrets

Hermes stores provider API keys in its own .env. --migrate-secrets copies them into <stateDir>/.env β€” but only two, and only these two:

Key
OPENROUTER_API_KEY
AIMLAPI_API_KEY

The allowlist is hard-coded. Any other variable in the source .env is ignored, as are allowlisted keys with empty values. Both names are identical across the two projects, so the copy is verbatim.

From the TUI

You do not have to use the command line. The TUI has an Import tab with the same two paths, reachable with the /import slash command:

Terminal window
atomic-agent tui
# β†’ /import

The panel offers a preview (the same reconciliation as --dry-run) and an execute action that writes sessions, tasks, and β€” when you ask for it β€” secrets.

CLI Reference

Every command and flag, with import alongside the rest.

Why local-first

Where imported sessions, tasks, and secrets land in the state directory.

Scheduling

What imported cron jobs become once they are in the task queue.

Configuration

config.json, .env, and the state directory layout.