Talaria moves a Hermes Agent installation from one computer to another. This guide walks both sides of a move, then the power surface.
- Works on Linux, macOS, native Windows, WSL, and Termux, in any direction.
- The tool must be installed on both machines (
pipx install "git+https://github.com/ClintMoody/Talaria", or carry the single-filetalaria.pyz, which needs no install at all).talaria-hermesis not on PyPI yet, and thetalarianame there belongs to an unrelated project. - You do NOT need Hermes installed on the new machine first — Talaria places the state and Hermes adopts it when installed. Installing Hermes first is also fine.
- Migration is calmest with the gateway stopped (
hermes gateway stop), but a live capture works and is clearly labeled.
Run talaria (or talaria gui for the browser). The wizard:
- Finds your Hermes — shows version, install method, profiles, size. Read-only.
- Reads everything — a few seconds; databases are not hashed or copied yet.
- Shows what travels — six plain categories, all pre-selected: personality & memories, skills & plugins, scheduled tasks, conversations & history, connections & pairings, settings & boards. Plus what won't travel (machine-specific files) and why — nothing silently vanishes.
- Asks your one real question — keys & passwords:
- Checklist (default). Keys stay out of the bundle. You get
<bundle>.checklist.htmllisting every key by NAME with where-it's-used and the provider's dashboard link. On the new machine you paste values in. - Locked vault. Keys travel inside the bundle, encrypted with a passphrase
(scrypt, AES-256-GCM). Requires
pip install cryptography. "Lock everything" additionally encrypts private content (conversations, memories).
- Checklist (default). Keys stay out of the bundle. You get
- Packs — live progress, then a boarding pass: the bundle path, its size, the checklist file, and transfer coaching.
Copy both files (bundle + checklist) to the new machine any way you like.
talaria pack # wizard defaults, 2 questions
talaria pack --yes -o /mnt/usb/move.hermespack # zero questions
talaria pack --vault # encrypted keys (prompts for passphrase)
talaria pack --preset essentials # identity+skills+tasks+credentials+boards
talaria pack --exclude "cron-output@" # drop one artifact group (couples enforced)
talaria pack --follow-symlinks # copy link TARGETS in (see below)
talaria scan / diff / deps / report # look before you packtalaria why <path> explains any file's fate. talaria report writes the System
Overview — the full picture of what your install is and touches — without packing
anything.
Hermes installs an out-of-tree skill as a symlink (skills/<name> → a repo somewhere
else). By default the bundle records the link's target string and recreates the link on
the new machine. That is exact and cheap, but if the target path does not exist there,
the link lands dangling and the skill never loads. On a real install 48 of 50 links
pointed outside Hermes home, so 37 skills would have arrived broken.
--follow-symlinks copies the target's actual files in at the link's own path instead,
so those skills work anywhere. It costs space: skills are markdown, so a real install
grows by well under a megabyte. The total is capped (--follow-cap, default 0.5 GiB);
anything past the cap stays a link record. Dangling links always stay link records,
since there is nothing to copy.
Use it whenever you are moving to a machine that does not already have your skill repos
checked out — which is most moves. talaria deps lists every out-of-tree link first.
Run talaria next to the bundle (or talaria apply <bundle>):
- Opens the bundle — provenance card: where it's from, which Hermes, when, vault
or not. A plain
hermes backupzip is recognized and redirected tohermes import. - Preflight — this machine is probed and every finding lands in one of four groups: Ready to move in, We'll fix these automatically (path rewrites, shown individually), Needs you afterwards (checklist items), Can't come along (with the honest three sentences: what, why, what happens instead). Blockers (gateway running, version downgrade, managed install) stop here — nothing touched.
- One consent — "Move everything in" covers the disclosed lists (executable content, unrecognized files, outside-home files).
- Applies transactionally — safety copy → move in → make-at-home fixes → verify. Cancel or crash mid-way? Automatic rollback; the machine is byte-identical to before.
- Finish — verified counts, the keys paste-back (values land in
.envat 0600), re-pair cards (WhatsApp/Signal are device-linked — one minute each),hermes gateway installto register services,hermes doctorlast. Turn the old machine's gateway off before starting the new one — they share accounts.
talaria verify --watch waits for the scheduler heartbeat — proof your agent is alive
on the new machine.
talaria preflight move.hermespack # verdicts only, no changes
talaria apply move.hermespack --dry-run # full report, zero writes
talaria apply move.hermespack # interactive conflicts + consent
talaria apply move.hermespack --yes --conflict overwrite # scripted
talaria apply move.hermespack --only soul-md@ --only memories-dir@ # narrow (never widens)
talaria rollback # undo the last apply
talaria verify --watch # health + heartbeatThe wizard offers replace with a safety copy (recommended — the old data is backed
up in the transaction area and restorable) or cancel. The CLI has per-conflict
policies: --conflict keep|overwrite|rename|ask. Every decision is recorded in the
Migration Report.
Named profiles (profiles/<name>/) travel automatically with all their own skills,
cron jobs, and configs; ROOT-level singletons (kanban, shared auth) are handled once.
Your agent knows what it touches outside ~/.hermes — repos it works in, tools it
calls, services it relies on. talaria deepscan generate writes a one-time observation
skill; your Hermes runs it and produces a JSON report (names, never values);
talaria deepscan ingest <file> verifies every claim. Verified paths become
suggestions you approve (talaria pack --include ...); sensitive paths (~/.ssh
etc.) are refused outright; fabrications land in an "agent said, unverified" appendix.
The capture set never changes without you.
Default intent is replace (the old machine retires). --intent clone records that
both installs will live on — the finish gate then makes you acknowledge the hazards
(shared Telegram bots answer on both machines; device-linked chats can only pair one).
talaria wizard (auto-detects direction)
talaria scan typed inventory of the install
talaria diff skills|config|checkout stock-vs-yours
talaria deps [--target-os X] [--live] dependency verdicts
talaria pack build the bundle (+ checklist HTML)
talaria inspect B provenance card | --list --cat --extract --verify
--deps --checklist --salvage
talaria preflight B check THIS machine against a bundle
talaria apply B transactional restore
talaria verify re-verify; --watch for the heartbeat
talaria rollback undo the last apply (safety copy retained)
talaria report System Overview (html/md/json, redacted by default)
talaria checklist B the keys handoff list
talaria deepscan generate | ingest
talaria why PATH what is this file, does it travel, and why
talaria gui the browser wizard
Every command takes --json; mutating commands take --dry-run and
--progress ndjson. Exit codes: 0 ok · 3 refused-nothing-modified · 4 capture failed ·
5 apply rolled back · 6 rollback needs attention · 8 version-skew block · 9 unreadable
bundle. Only 5/6 mean the target was touched.