AIM — Agent Identity Migration
Install: pipx install aim-migrate (or pip install aim-migrate) — then aim export / aim import. 100% local, no account, no telemetry.
"Samsung Smart Switch" for AI agents: migrate a stateful agent's persona, memories, skills, cron jobs, config, and MCP bindings between harnesses (Hermes ↔ OpenClaw ↔ Claude Code ↔ Codex CLI ↔ OpenCode ↔ Goose ↔ Buzz ↔ Grok Build ↔ DeepSeek Harness ↔ Roo Code) and operating systems (Linux, WSL2, macOS, Windows).
Uses a neutral Canonical Intermediate Format (.aim zip bundle) so migration
is N adapters, not N² point-to-point converters. Design spec: see
docs/SPEC.md (v2, Opus-reviewed).
Quick start (dev, zero-install)
cd ~/projects/aim
export PYTHONPATH=src
# Export the live Hermes agent (redaction gate blocks if secrets detected)
python3 -m aim.cli export --harness hermes --home ~/.hermes -o agent.aim
# Preview what lands where before writing anything
python3 -m aim.cli plan agent.aim --harness openclaw
# Import into another harness home (transactional: backup + atomic swap)
OPENCLAW_HOME=/path/to/.openclaw python3 -m aim.cli import agent.aim \
--harness openclaw --force --map /home/hal=/Users/rory
python3 -m aim.cli list agent.aim
python3 -m aim.cli adapters list
Requires: python3 with click pydantic pyyaml cryptography pytest.
Adapters
| Harness | Persona | Memory | Skills | Config | MCP | Cron |
|---|---|---|---|---|---|---|
| Hermes | SOUL.md | memories/ | skills/ | yaml | ✓ | ✓ |
| OpenClaw | personality | memory store | skills | json | ✓ | ✓ |
| Claude Code | CLAUDE.md | projects/*/memory | skills/ | — | .claude.json | park |
| Codex CLI | AGENTS.md | — | skills/ + .agents/skills | config.toml | — | park |
| OpenCode | AGENTS.md | — | skills/ | opencode.json | — | park |
| Goose | AGENTS.md | sessions (opt-in) | skills/ | config.yaml | extensions | park |
| Buzz | personas/ | relay-side (opt-in) | skills/ | agents/*.yaml | dev-mcp | workflows |
| Grok Build | AGENTS.md | — | skills/ | settings.json | — | park |
| DeepSeek Harness | AGENTS.md | sessions (opt-in, opaque) | skills/ + .agents/skills | settings.yaml + patch layers | plugins | park |
| Roo Code | default-mode roleDefinition | rules/ | skills/ | cli-settings.json | mcp_settings.json | park |
Testing
pytest tests/— 31 unit/round-trip tests- CI matrix: ubuntu + macOS + Windows on every push
tests/e2e/container_test.sh— fully isolated Docker E2E (repo read-only, throwaway workdir,--network none): secrets leak check, wrong-passphrase rejection, cross-harness imports, full suite
Guarantees
- Integrity: every file sha256-hashed in manifest; import refuses on any mismatch
- Secrets: gitleaks-style redaction scan at export; export fails on
secret-like spans unless
--allow-unredacted. Optional--with-secretsbuilds an encrypted vault (age-style scrypt + ChaCha20-Poly1305) inside the bundle;import --passphraserestores values byte-exact - Transactionality: staged copy → validate → atomic rename; 0600 backup;
refuses if target harness process is running (override
--force) - Lossless-first: skills copy verbatim (mode bits preserved); unsupportable
items (e.g. cron jobs into Claude Code) are parked to
unsupported/, never dropped silently - Cross-OS paths:
--map src=dstrewrites path references; all rewrites logged
Status (v0.1, 2026-10-14)
- ✅ Hermes ↔ OpenClaw + Claude Code, Linux — 15/15 tests, live-agent E2E verified
- 🔜 v1.1: age-encrypted secrets vault, native Windows, real-OpenClaw layout verification
- 🔜 v2: Codex/Kilo adapters, container cross-OS test matrix
Known-history bugs (kept for the record)
def list()in cli.py shadowed builtinlist→list(maps)executed theaim listclick command (fixed, regression test in tests/test_roundtrip.py)
Metadata
Release files for aim-migrate 0.6.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 |
|---|---|---|---|---|
| aim_migrate-0.6.1.tar.gz | 2.1 MB | With provenance | Details for aim_migrate-0.6.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| aim_migrate-0.6.1-py3-none-any.whl | Python 3 | none | any | Details for aim_migrate-0.6.1-py3-none-any.whl |
Total release size: 2.1 MB
Release files / aim_migrate-0.6.1.tar.gz
| Download URL | aim_migrate-0.6.1.tar.gz |
|---|---|
| Size | 2.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
053a1e9262c6c6b27a8a2140c1ca7e8320ac9a6fa3bc442ed8eec104450bbbfd
|
|
BLAKE2b-256 checksum How to use checksums |
c1c17dc1d99973d17f2a5b59cd73f10a42e4a44b9a7f21fa6beed87fbbd6f570
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 26, 2026.
Transparency logRelease files / aim_migrate-0.6.1-py3-none-any.whl
| Download URL | aim_migrate-0.6.1-py3-none-any.whl |
|---|---|
| Size | 39.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1712ebdafd6c6e867bf1a05e5ccc13834b880f4ce9f6f4f31ea17d308c969666
|
|
BLAKE2b-256 checksum How to use checksums |
4d352b35e8b450307298c4467a4005cc446f717e7e44455155f4118aecad96f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 26, 2026.
Transparency logSecurity for aim-migrate 0.6.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.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for aim_migrate-0.6.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 26, 2026.
Transparency logA 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.