hermes-migrate
One-click migration from OpenClaw to Hermes.
Stop OpenClaw, migrate everything, start Hermes — your channels keep working.
Install
pip install hermes-migrate
Or with pipx:
pipx install hermes-migrate
From source (no pip/venv needed)
For locked-down systems (Debian/Ubuntu with externally-managed Python):
git clone https://github.com/raulvidis/hermes-migrate.git
cd hermes-migrate
./install.sh
hermes-migrate --dry-run -v # preview
hermes-migrate -v # full migration
Only requires Python 3.9+ and PyYAML (usually pre-installed).
Quick Start
# Full end-to-end migration
hermes-migrate
# Preview what would happen (no changes)
hermes-migrate --dry-run
# Migrate a specific agent from a multi-agent setup
hermes-migrate --agent cleo
# Verbose output
hermes-migrate -v
That's it. The tool will:
- Stop OpenClaw processes
- Auto-install Hermes if not present
- Migrate your persona, memories, and workspace files
- Write working credentials to
~/.hermes/.env - Generate
config.yamlwith model and channel settings - Start Hermes in the background
After it finishes, your existing channels (Telegram, Slack, Discord, WhatsApp) should just work.
What Gets Migrated
Files
| OpenClaw | Hermes |
|---|---|
workspace/SOUL.md |
~/.hermes/SOUL.md |
workspace/MEMORY.md |
~/.hermes/memories/MEMORY.md |
workspace/USER.md |
~/.hermes/memories/USER.md |
workspace/HEARTBEAT.md |
~/.hermes/memories/HEARTBEAT.md |
workspace/IDENTITY.md |
~/.hermes/memories/identity.md |
workspace/AGENTS.md |
~/.hermes/memories/agents_config.md |
workspace/TOOLS.md |
~/.hermes/memories/tools_config.md |
workspace/memory/*.md |
~/.hermes/memories/openclaw_archive/ |
Configuration
| OpenClaw | Hermes |
|---|---|
| Agent model (primary + fallbacks) | config.yaml model settings |
| Channel bindings | config.yaml platform_toolsets |
| Compaction mode | compression settings |
| maxConcurrent | code_execution.max_tool_calls |
| subagents.maxConcurrent | delegation.max_iterations |
| Session retention / cron | session_reset settings |
Credentials
Bot tokens, API keys, and auth tokens are copied to ~/.hermes/.env (chmod 600):
- Telegram bot tokens (per-agent in multi-agent setups)
- Slack bot/app tokens
- Discord bot tokens
- WhatsApp config
- Embedding/memory search API keys (e.g., Gemini)
- Gateway auth tokens
- Custom model provider API keys and base URLs
- Allowed user lists (Telegram, Slack)
Documentation
The tool also generates reference docs in ~/.hermes/memories/:
openclaw_agents.md— multi-agent setup documentationopenclaw_channels.md— per-channel account details (tokens redacted)openclaw_infrastructure.md— gateway, hooks, plugins, custom providers
Multi-Agent Setups
OpenClaw supports multiple agents with different models and channel bindings. When you run the migration:
- The tool lists all agents with their models and channels
- You pick which one to migrate to this Hermes instance
- Only that agent's config, channels, and credentials are migrated
Available OpenClaw agents:
[1] nora
Model: openai/gpt-5
Channels: slack:nora
[2] cleo
Model: anthropic/claude-haiku-4-5
Channels: telegram:cleo
[3] hank
Model: zai/glm-5
Channels: telegram:hank
Select agent to migrate [1-3]:
To migrate multiple agents, use separate Hermes instances:
hermes-migrate --agent cleo
HERMES_HOME=~/.hermes-hank hermes-migrate --agent hank
CLI Reference
usage: hermes-migrate [-h] [--dry-run] [-v] [-a AGENT_ID] [--no-install]
[--no-start] [--version]
options:
--dry-run Preview changes without writing files
-v, --verbose Enable verbose output
-a, --agent ID Specify agent to migrate (skips interactive prompt)
--no-install Skip automatic Hermes installation
--no-start Don't start Hermes after migration
--version Show version
Post-Migration
If everything went smoothly, Hermes is already running and your channels are live. To verify:
- Send a message through your old channel (Telegram, Slack, etc.)
- Check
~/.hermes/.envhas the right credentials - Check
~/.hermes/config.yamlfor model and channel settings - Review
~/.hermes/SOUL.mdto adjust your persona - Browse
~/.hermes/memories/for migrated memories and reference docs
If Hermes didn't auto-start (e.g., CLI not in PATH after fresh install):
source ~/.bashrc
hermes
Development
git clone https://github.com/raulvidis/hermes-migrate
cd hermes-migrate
pip install -e ".[dev]"
# Run tests
pytest
# Run tests with verbose output
pytest -v
# Format
black hermes_migrate/ tests/
# Lint
ruff check .
Project Structure
hermes_migrate/
__init__.py # Package version
cli.py # CLI entry point
migrate.py # All migration logic
tests/
conftest.py # Shared fixtures
test_cli.py # CLI argument parsing tests
test_migrate.py # Migration logic tests (90+ tests)
test_security.py # Redaction and security tests
Requirements
- Python 3.9+
- PyYAML (installed automatically)
- Works on Linux, macOS, and Windows
License
MIT
Metadata
Release files for hermes-migrate 1.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| hermes_migrate-1.2.1.tar.gz | 39.4 kB | Without provenance | Details for hermes_migrate-1.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| hermes_migrate-1.2.1-py3-none-any.whl | Python 3 | none | any | Details for hermes_migrate-1.2.1-py3-none-any.whl |
Total release size: 79.1 kB
Release files / hermes_migrate-1.2.1.tar.gz
| Download URL | hermes_migrate-1.2.1.tar.gz |
|---|---|
| Size | 39.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1ed2906f07b43e0fb908f43e20eff07c164325144357e5fed8435260699feb3b
|
|
BLAKE2b-256 checksum How to use checksums |
c27d88de8fa67fce029b48764a59e9f9a3a05a968e4282fbff739a1d5fb53c5d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / hermes_migrate-1.2.1-py3-none-any.whl
| Download URL | hermes_migrate-1.2.1-py3-none-any.whl |
|---|---|
| Size | 39.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f9d0e1b134bccc5b65a1b7507f54163286fda7b0f2a1f27ba4b8e1c084291e1a
|
|
BLAKE2b-256 checksum How to use checksums |
dfc65ec53aa77dd5bcae7be9031d1e4b2f783e115418f55d92095d4e1573712e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Security for hermes-migrate 1.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.