{"slug": "your-agent-memory-probably-isn-t-portable-here-s-the-test-that-proves-it", "title": "Your agent memory probably isn't portable. Here's the test that proves it.", "summary": "A developer argues that agent memory is not portable, identifying five key decisions—salience, supersession, consolidation, provenance, and forgetting—that make memory a writing problem rather than a retrieval one. The post cites Satvik Singh's benchmark showing that question type, not tooling ideology, determines retrieval success, and notes that the Open Knowledge Format from Google Cloud has spurred debate on memory portability.", "body_md": "There's a question every developer building with agent memory eventually asks, usually around month three, usually at an inconvenient hour:\n\n**Where do my memories actually live, and what happens if I need them somewhere else?**\n\nIt never arrives as a design review. It arrives as an incident. A framework ships a breaking change. Your embedding model gets deprecated. A second agent needs the ninety days of context the first one accumulated. Someone asks for a list of everything the system currently believes about a named user.\n\nYou go looking. You find a table of vectors keyed to a model version you already moved off, a JSON dump of raw turns, and extraction rules that lived inside a prompt.\n\nThis post is the test I'd run before you get there, and the reasoning behind it.\n\nSince Google Cloud published the Open Knowledge Format in June, everything has been OKF vs RAG. Curated markdown for authoritative facts, retrieval for the sprawling archive.\n\nThere's real work in there. Satvik Singh benchmarked curated docs against a knowledge graph, BM25 retrieval, and plain agentic grep across twelve on-call questions on two production services, and found that question type picked the winner rather than tooling ideology — grep took every code-detail question, curated docs took every architecture question, and every retrieval win was the retriever surfacing chunks of the curated docs.\n\nBut every entry in this debate starts from a corpus that already exists and asks how to find the right part of it.\n\nThat's a reading problem. Memory is a **writing** problem that later becomes a reading problem, and nearly all the difficulty is upstream of retrieval.\n\nA document is authored once and read many times. A memory is never authored at all — it accretes sideways, out of interactions that were about something else.\n\nThat produces five decisions no index makes for you.\n\n**1. Salience.** Of 400 turns this week, which mattered? Most implementations answer with a heuristic:\n\n```\n# the shape almost everyone starts with\nif turn_count % 10 == 0:\n    summary = llm.summarize(recent_turns)\n    store.write(summary)\n```\n\nThat heuristic is your quality ceiling. Keep too much and you've rebuilt the transcript with extra steps. Keep too little and the agent is confidently amnesiac about the one thing that mattered.\n\n**2. Supersession.** In March the user lives in Toronto. In June they mention Berlin. That's not two facts — it's one fact with a history:\n\n```\n# what you usually get\n[\n  {\"fact\": \"user lives in Toronto\", \"ts\": \"2026-03-04\"},\n  {\"fact\": \"user lives in Berlin\",  \"ts\": \"2026-06-19\"},\n]\n# both retrievable, both scored, nothing encoding that one replaced the other\n```\n\nNow do it for a fact asserted by three agents across three sessions, two of which were wrong.\n\n**3. Consolidation.** `\"frustrated by the export flow on Tuesday\"`\n\nis an event. `\"cares about export fidelity\"`\n\nis a memory. The promotion between them is a judgment call, made continuously, on evidence that arrives in pieces.\n\n**4. Provenance and time.** Who asserted it, when, on what basis, whether it expires. Without those fields you can't reconcile, can't audit, can't honor a deletion request, and can't distinguish staleness from disagreement.\n\n**5. Forgetting.** Least discussed, most legally consequential. A memory system that can't forget cleanly is a compliance problem wearing a feature's clothes.\n\nEvery one is a *decision*, not a lookup and not a similarity score. That's why memory is an agentic problem rather than a retrieval one — and why the answer keeps looking like infrastructure when it's actually behavior.\n\nAsk any memory product for an export and you'll get something. The useful question is which of three things.\n\n| Tier | What you get | What it costs you |\n|---|---|---|\nBytes |\nTarball of raw turns, vendor-shaped | Re-run your whole extraction pipeline. That's a rebuild, not a migration. |\nSchema |\nStructured records with mappable fields | You can write an importer, but you can't recover why a record exists |\nSemantics |\nMemories as memories: provenance, time bounds, supersession chain | Nothing — this is the tier where \"portable\" means what it sounds like |\n\nAlmost everything on the market ships tier one and markets tier three.\n\nWorth calling out on its own, because it's subtle and expensive.\n\nIf the durable form of your memory is an embedding, your memory is bound to an embedding model.\n\n```\n# this is not a format conversion\n$ ./migrate.sh --re-embed --model text-embedding-v3\n✓ 148,291 memories re-embedded\n✓ 0 errors\n```\n\nZero errors, and retrieval quality has silently changed. Re-embedding is a **lossy re-derivation** whose failures are invisible — nothing throws, recall just degrades in ways that show up as vibes three weeks later.\n\nVectors are a cache. Treating a cache as your system of record is exactly how you end up unable to leave.\n\nThe single-agent version is annoying. The fleet version is the one that costs money.\n\nReal deployments end up with several agents against the same memory estate — one in the IDE, one on support tickets, one doing analysis, one running scheduled work nobody has reviewed in a month. Each learns things, into its own store, in its own shape, under its own rules.\n\nSo you get divergence with no reconciliation mechanism, because reconciliation was never a cross-agent operation to begin with. The user corrects the support agent; the coding agent believes the old thing indefinitely.\n\nSingh's framing lands hard here: **derived layers are caches without a TTL.** His knowledge graph, built five days earlier, scored 0/3 on a two-week-old feature sitting in the working tree it was derived from. The curated docs had zero coverage of the same feature. Neither artifact signals that it's behind.\n\nMultiply that by every agent you run, each derived independently, each lagging on its own schedule.\n\nWorth being precise, because the format is less than the hype and considerably more useful than the skepticism.\n\nOKF v0.1 was published by Google Cloud's Data Cloud team on June 12, 2026. A bundle is a directory of markdown files with YAML frontmatter, one concept per file, cross-linked. Exactly one field is required (`type`\n\n). No runtime, no SDK, no registry, no account. It renders on GitHub, ships as a tarball, mounts on any filesystem.\n\nA memory expressed in that shape looks roughly like this — `type`\n\nis the spec requirement, the rest are conventional or extension fields:\n\n```\n---\ntype: preference\ntitle: \"Export fidelity\"\ndescription: \"User consistently prioritizes lossless export over speed.\"\ntimestamp: 2026-07-14T09:22:00Z\ntags: [product, ux]\n# extension fields carrying the memory semantics\nasserted_by: support-agent\nevidence: [session:8813#turn42, session:9002#turn17]\nsupersedes: null\nconfidence: 0.86\nexpires: null\n---\n\n# Export fidelity\n\nRaised in three separate sessions between May and July. In each case the user\ndeclined a faster path that would have dropped metadata.\n\n## Related\n- [Export flow friction](export-flow-friction.md)\n- [Account: workspace tier](workspace-tier.md)\n```\n\nFor the ownership problem, the properties are exactly right:\n\nHere's the honest limitation, and skipping it would be dishonest given what the measurements show.\n\nSingh found three confidently wrong facts in the curated docs he benchmarked, each contradicted by code that had been settled for **over two years before the docs were written**. Not stale — born wrong, in an AI generation pass, into the layer agents are told to trust. Then retrieval amplified one of them: top results repeated the wrong answer 26 times against 2 mentions of the correct one.\n\nA bundle is a snapshot. Memory is a process. Adopt OKF and stop there and you've built a beautifully portable cache with no TTL.\n\nHe also names why nobody solves this with discipline: nobody hand-writes and hand-maintains bundles for forty repos. Substitute \"forty agents.\" Manual curation doesn't survive contact with scale — which means curation has to be done by something that doesn't get tired, held to a verification standard, because automated curation's failure mode is precisely the one he measured.\n\n**The false dichotomy:** it isn't curated knowledge *versus* active retrieval. Active accumulating memory is how you take in the world — fast, lossy, where new things arrive. Curated committed knowledge is what you've decided is true — slow, durable, auditable. Every functioning system has both.\n\nThe real question: *what promotes a fact from one to the other, how often, on what evidence — and what demotes it when it stops being true?*\n\nThat's a job. Formats don't curate. Retrievers don't decide.\n\nThis is the one to run this week. It takes an afternoon and it's the single test that separates a portability claim from a portability guarantee.\n\n``` bash\n# 1. export from your current system\n$ your-memory-tool export --out ./snapshot-a\n\n# 2. import into a clean instance — no prior state\n$ your-memory-tool init --fresh ./clean\n$ your-memory-tool import --in ./snapshot-a --target ./clean\n\n# 3. export again from the clean instance\n$ your-memory-tool export --from ./clean --out ./snapshot-b\n\n# 4. diff\n$ diff -r ./snapshot-a ./snapshot-b\n```\n\nWhat you're looking for isn't byte equality — timestamps and ids will move. You're looking for **semantic loss**:\n\n`asserted_by`\n\nnow null on everything?Most systems fail at least three of those. Almost nobody checks until the migration, at which point it's a rewrite with a deadline attached.\n\nYou shouldn't have to choose between memory that's alive and memory that's yours. The accumulating side and the committed side are two tempos of the same process. The thing worth building isn't another place to put memories — it's the thing that decides what moves between them.\n\nThis is what I work on, so weight it accordingly.\n\n[ Memanto](https://github.com/moorcheh-ai/memanto) is an open-source companion memory agent that helps other agents manage their memories. As of\n\n``` bash\n$ pip install memanto\n$ memanto migrate --from <source> --out ./memory-bundle\n$ memanto export --format okf --out ./okf-bundle\n```\n\nAs far as I know it's the only Memory Agent shipping both. MIT licensed, which is the only license under which a claim about portability is worth making.\n\nRecall: 89.8% on [LongMemEval](https://arxiv.org/abs/2604.22085), 87.1% on [LoCoMo](https://arxiv.org/abs/2601.11557).\n\nRun the round-trip test against it before you believe me. Run it against whatever you're using now either way.\n\n**Your agents focus. Memanto remembers.**", "url": "https://wpnews.pro/news/your-agent-memory-probably-isn-t-portable-here-s-the-test-that-proves-it", "canonical_source": "https://dev.to/mjfekri/your-agent-memory-probably-isnt-portable-heres-the-test-that-proves-it-7lj", "published_at": "2026-07-27 17:05:10+00:00", "updated_at": "2026-07-27 17:32:42.697441+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-agents", "ai-infrastructure", "ai-research", "developer-tools"], "entities": ["Google Cloud", "Satvik Singh", "Open Knowledge Format"], "alternates": {"html": "https://wpnews.pro/news/your-agent-memory-probably-isn-t-portable-here-s-the-test-that-proves-it", "markdown": "https://wpnews.pro/news/your-agent-memory-probably-isn-t-portable-here-s-the-test-that-proves-it.md", "text": "https://wpnews.pro/news/your-agent-memory-probably-isn-t-portable-here-s-the-test-that-proves-it.txt", "jsonld": "https://wpnews.pro/news/your-agent-memory-probably-isn-t-portable-here-s-the-test-that-proves-it.jsonld"}}