Migrating existing memory
Bringing memory from existing agents and consumer AI products into the format.
Because the format was designed as a superset of shipping memory systems, most migrations are small. This page covers the two directions: memory that already lives in files (agent harnesses), and memory that lives inside a product (consumer assistants).
Layouts that already conform
If your agent's memory is one of these, there is nothing to do — the directory is already a valid memory root:
- OpenClaw (
~/.openclaw/workspace):MEMORY.md,USER.md, andDREAMS.mdare root files;memory/YYYY-MM-DD.mddaily notes are a progressively disclosed directory. - Hermes Agent (
~/.hermes/memories):USER.mdandHUMAN.mdare root files. No directories yet; the format leaves room to grow into them. - Codex (
~/.codex/memories):MEMORY.mdandmemory_summary.mdat the root, withrollout_summaries/and other detail deferred in directories, already git-tracked. - Claude Code (
~/.claude/projects/<project>/memory):MEMORY.mdis a root index and sibling topic files are read on demand. Optional per-file frontmatter matches the spec's optional frontmatter.
For these, adopting the spec means at most adding a .memoryspec marker and, where useful, indexes for directories that lack them.
Migrating a Letta Code agent
Letta Code's earlier layout kept in-context memory in a nested system/ tree, with each file individually injected into the prompt. The new layout is a flat root: files at the top of the memory directory are in context, everything else is deferred behind directories.
The migration is a flattening:
- Promote each
system/file to a root file. Nesting insidesystem/collapses into file names:system/human/prefs.mdbecomeshuman_prefs.md. - Budget check: the old layout let the in-context tree grow without a visible cost signal. If the flattened root exceeds the recommended budget, this is the moment to demote detail — move the long tail of each topic into a directory and leave a summary at the root.
- Index: write a root
MEMORY.mddescribing the remaining directories (reference/,skills/, projects, notes) so disclosure works from the first session. - Mark: add
.memoryspecwith the version.
Because Letta Code memory is git-tracked, the whole migration is one commit, and reverting it is one revert. Letta Code agents can run the migration on their own memory using a migration skill, which is how this migration is intended to be exercised: by the agents themselves, with the user reviewing the diff.
Migration is also the right time to apply the spec's judgment rules rather than translating mechanically: content that exists because the project demands it belongs in AGENTS.md; step-by-step procedures belong in skills; what remains — experience, identity, relationships — is memory.
Migrating consumer product memory
Consumer assistants keep memory inside the product, but all of them can be exported into memory files:
- ChatGPT: Settings → Personalization → Memory shows saved memories ("Manage memories"). Copy them out (or ask ChatGPT to list all its memories about you verbatim) and save them as a root file such as
human.md, or as topical files if there are many. - Claude: ask Claude to summarize what it remembers about you from its memory, then save the result the same way.
- Gemini: Saved Info lists remembered facts; copy them into a root file.
The exported material is typically a few hundred lines of facts and preferences about one person, which is exactly what a root human.md is for. Once it lives in a memory directory, any conforming harness can pick it up, and the agent can maintain and extend it from there.
Verifying a migration
- Every file the agent needs constantly is at the root, and the root is within budget.
- Every directory the agent should know about appears in the root listing, and directories with subdirectories have indexes.
- No index entry points at a path that no longer exists.
- The agent can answer "what do you know about me?" from a fresh session at least as well as before the migration.