Wiki · Features in depth
Import from other agents
Moving over is not copying a folder — it is deciding what to keep. What comes over, what does not and how to check it.
🔁
Moving over is not copying a folder — it is deciding what to keep.
Hermes takes what makes sense from Claude Code, Codex CLI and OpenClaw (rules, memory, skills, MCP
servers) and deliberately leaves credentials behind. It always shows you the plan
first and only then asks whether to apply it.
From Claude Code and Codex CLI
hermes import-agent # auto-detects ~/.claude or ~/.codex
hermes import-agent claude-code # Claude Code only
hermes import-agent codex # Codex CLI only
hermes import-agent claude-code --dry-run # preview only, writes nothing
hermes import-agent codex --source /path/.codex # custom location
hermes import-agent claude-code --overwrite --yes # replace conflicts, no prompts
What gets imported
| In Claude Code | In Hermes |
|---|---|
CLAUDE.md (global instructions) | Entries in ~/.hermes/memories/MEMORY.md |
permissions.allow (Bash(...)) | command_allowlist in config.yaml |
permissions.deny | approvals.deny in config.yaml |
mcpServers | mcp_servers in config.yaml |
skills/<name>/ (with SKILL.md) | ~/.hermes/skills/claude-code-imports/<name>/ |
commands/*.md (slash commands) | Not imported — listed for manual conversion into skills |
| In Codex CLI | In Hermes |
|---|---|
AGENTS.md (global instructions) | Entries in MEMORY.md |
config.toml → [mcp_servers.*] | mcp_servers |
memories/*.md | Entries in MEMORY.md |
skills/<name>/ | ~/.hermes/skills/codex-imports/<name>/ |
Rules such as Bash(npm run test:*) become globs (npm run test*).
Rules for Claude-specific tools (e.g. Read(...)) are reported as unmapped — there is
nothing to map them onto.
What is never imported
| Item | Why |
|---|---|
Credential files (~/.claude/.credentials.json, ~/.codex/auth.json) | The import never reads them |
| Secret-looking values in MCP servers | Variables such as *_TOKEN, *_API_KEY and Authorization headers are stripped and listed so you can re-add them deliberately |
Sign in to providers with hermes setup and add keys to ~/.hermes/.env.
It is a chore, but it is the only way an import cannot dump your keys somewhere they do not belong.
How it behaves
| Property | Meaning |
|---|---|
| Preview first | The command always prints a per-item plan; in non-interactive sessions it stops at the preview unless you pass --yes |
| Merges, not replaces | Memory entries are deduplicated against yours; allow/deny patterns merge with the existing config |
| Conflicts are skipped | An MCP server or skill that already exists is reported as a conflict and left alone (only --overwrite replaces) |
From OpenClaw
hermes claw migrate # preview, then confirm
hermes claw migrate --dry-run # preview only
hermes claw migrate --preset full --migrate-secrets --yes # with keys, no prompts
| Item | Destination |
|---|---|
Persona (workspace/SOUL.md) | ~/.hermes/SOUL.md |
Workspace instructions (AGENTS.md) | AGENTS.md at --workspace-target |
| Long-term memory and profile | memories/MEMORY.md and USER.md (merged, deduplicated) |
| Daily notes | Merged into main memory |
| Skills, MCP servers, model settings | Matching parts of config.yaml and skills/ |
| Option | Purpose |
|---|---|
--preset full / user-data | Everything, or user data without infrastructure config |
--migrate-secrets | Include API keys. Even full does not take them by default — it must be explicit |
--skill-conflict skip|overwrite|rename | What to do with a skill of the same name (skip by default) |
--no-backup | Skip the ~/.hermes/ snapshot that is otherwise taken before writing (~/.hermes/backups/pre-migration-*.zip) |
That pre-migration backup is your safety net and restores with hermes import.
Do not disable it until you are sure the migration worked.
Things to watch
| Situation | What to do |
|---|---|
| The agent does not “know” your rules after the import | Instructions from another tool landed in memory, not in the project's AGENTS.md — project rules belong in the project file |
| The agent can do more than you want | A Claude Code allowlist can be broad; review command_allowlist and trim it |
| An MCP server did not connect | It was a conflict, or it is missing the secret the import deliberately stripped |
| Scheduled jobs are missing | Cron does not migrate — recreate scheduled jobs in Hermes |
| The two setups drifted apart a month later | The import is one-shot. Either run it again, or (better) stop using two agents for the same thing |
Recommended procedure
1) hermes import-agent --dry-run # what would be taken
2) review the plan and disable what you do not want
3) hermes import-agent # apply
4) hermes setup # sign in to providers
5) add keys to ~/.hermes/.env
6) run a real task and compare with the old agent
