Moving my skills and memory between agent tools
Moving a skill library and a file-based memory store between agent tools without copying either, by pointing both at one source of truth.

This follows on from the hub post. Once every agent could reach the same hub, the tool I drove them with mattered a lot less. So I picked one, Codex, to be my main driver on this machine, and set about moving the valuable parts across.
The valuable parts were two things I had built up inside the other tool over months. A library of skills, which are small markdown playbooks: how to deploy the gym app, how to talk to Jira, the specific gotchas for the camera club site. And a file-based memory, one fact per file, the things that are not obvious from the code and that I would otherwise re-explain every session.
The skills turned out to be portable in the best way. Codex reads skills from its own directory, so rather than fork them I symlinked the same version-controlled repo into it. One source, both tools see it, and a change in the repo is live in both at once. The only edit each skill needed was an explicit name in its header, which the old tool inferred from the folder name and the new one wants stated outright.
While I was in there I rewrote the skills that drive real systems to prefer the new hub. Each one now reaches for its themed namespace first and keeps the raw API calls underneath as a fallback. The knowledge did not get thrown away, it got a faster front door and a backup route for when the hub is down.
The memory was the part I am happiest with. The obvious move was to copy my facts into the new tool’s own memory store. I did not do that. Both tools run on the same machine, so I pointed the new one at the exact same folder of fact files the old one already reads and writes, wrapped in a small skill that teaches it the rules: how to recall before assuming, and how to append a fact when it learns something durable. One source of truth. No drift. Both agents keep it current instead of slowly disagreeing.
I did the same with my global instructions, the rules for how I want tasks routed to my tracker and how the memory protocol works. Merged into the new tool’s equivalent file, keeping what was already there rather than flattening it.
The lesson is a small one but it keeps paying out. Migration is usually framed as copy everything across. The better version here was point at the same thing from both sides. Shared state beats duplicated state, at home as much as in production, because duplicated state is just a future incident with a delay on it.
On cue, the same week handed me the incident to prove it. Re-enabling one chat channel resurfaced scheduled jobs belonging to agents I had already deleted, plus an hourly check-in loop quietly messaging a family member who had not asked for it. Deleting the agent had not deleted its schedule. Two reminders, free of charge: autonomous loops need an off switch you can find in a hurry, and a tidy-up is part of the delete, not an optional extra.