<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Michael Deng</title>
    <description>The latest articles on DEV Community by Michael Deng (@_24569b2abcc8f3fa4c094).</description>
    <link>https://dev.to/_24569b2abcc8f3fa4c094</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4115172%2Fa2bd1063-267e-4d57-8444-96478270b63e.png</url>
      <title>DEV Community: Michael Deng</title>
      <link>https://dev.to/_24569b2abcc8f3fa4c094</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_24569b2abcc8f3fa4c094"/>
    <language>en</language>
    <item>
      <title>The Enterprise Coming-of-Age of a Memory Engine: Multi-Tenancy, Auth, Audit, and Backup Drills</title>
      <dc:creator>Michael Deng</dc:creator>
      <pubDate>Tue, 08 Sep 2026 08:32:17 +0000</pubDate>
      <link>https://dev.to/_24569b2abcc8f3fa4c094/the-enterprise-coming-of-age-of-a-memory-engine-multi-tenancy-auth-audit-and-backup-drills-4mih</link>
      <guid>https://dev.to/_24569b2abcc8f3fa4c094/the-enterprise-coming-of-age-of-a-memory-engine-multi-tenancy-auth-audit-and-backup-drills-4mih</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Every feature described here is live in production (on our own servers). Commits: &lt;code&gt;8e9a83c&lt;/code&gt; / &lt;code&gt;138c663&lt;/code&gt; / &lt;code&gt;cbf9958&lt;/code&gt;, verifiable in the public repo.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Flag We Planted Two Weeks Ago, Delivered
&lt;/h2&gt;

&lt;p&gt;In post #8 of this series we said something harsh: most memory engines on the market are personal toys, and to cross into enterprise territory you have to pass four gates — shared-service architecture, production-grade performance, &lt;strong&gt;an org-level data model&lt;/strong&gt;, and &lt;strong&gt;freshness and governance of knowledge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At the time we had cleared the first two (single-binary gRPC service, 12,494 TPS); the last two were still predictions. Over the past two weeks we built the remaining gates: &lt;strong&gt;enforced multi-tenant isolation, three-tier API key authentication, an audit event stream, and periodic checkpoints with backup drills&lt;/strong&gt; — all shipped and deployed on our own production servers.&lt;/p&gt;

&lt;p&gt;As usual, this post is not a feature list. It covers how the four things were done, and two problems we discovered along the way that sent a chill down our spines.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxtdfzw75ym0lsktbvaby.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxtdfzw75ym0lsktbvaby.png" alt="All four gates built" width="800" height="1392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-Tenant Isolation: Starting from a Real Leak
&lt;/h2&gt;

&lt;p&gt;In enterprise settings, one memory store serves multiple departments and multiple projects. Isolation is not "stored separately in principle" — isolation must be enforced on every single retrieval path.&lt;/p&gt;

&lt;p&gt;While building L2.1 we found a real leak: &lt;strong&gt;the HNSW global vector index does not filter by tenant.&lt;/strong&gt; Vector seeds and Search RPCs queried the global index directly and only filtered by owner/tenant afterwards. Which means a query vector from tenant A was effectively running similarity computations over tenant B data. The results would be filtered after the fact, but "over-fetch 4x and filter" already exposes the retrieval space to a query that should never see it.&lt;/p&gt;

&lt;p&gt;The fix makes every seed channel (vector, lexical, task, recent-fallback) filter by tenant+owner at the source, with a second tenant guardrail on the final results. Cross-tenant &lt;code&gt;GetNode&lt;/code&gt; simply returns 404 — &lt;strong&gt;not even "does this node exist" is exposed&lt;/strong&gt;, because existence itself is information.&lt;/p&gt;

&lt;p&gt;A related piece done along the way: a zero-migration data format upgrade. The persistence format moved from NYL0 to NYL1 (nodes now carry tenant_id), and old data is backfilled with the default tenant automatically at decode time. &lt;strong&gt;70 nodes and 63 edges in production migrated on restart without losing a single one.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6yyuun3d24e8xxk1guun.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6yyuun3d24e8xxk1guun.png" alt="Multi-tenant isolation: a real leak" width="800" height="1286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Three-Tier API Keys: Security Must Not Be a Breaking Change
&lt;/h2&gt;

&lt;p&gt;The biggest enemy of an authentication system is not attackers — it is &lt;strong&gt;existing users&lt;/strong&gt;. If turning on auth requires every client to change its config, auth will never get rolled out.&lt;/p&gt;

&lt;p&gt;Our design has three tiers of keys: read / write / admin, each key bound to a tenant (admin can use the wildcard &lt;code&gt;*&lt;/code&gt;). But the most important switch is this: &lt;strong&gt;without &lt;code&gt;NYLON_API_KEYS&lt;/code&gt; configured, the engine runs in open mode, behaving exactly as before.&lt;/strong&gt; Our own Qoder and Codex clients noticed nothing after the server upgrade — the security capability was in place, and nobody was forced to change configs on a Friday night.&lt;/p&gt;

&lt;p&gt;One implementation detail worth mentioning: on the gRPC side, authentication happens in an &lt;code&gt;x-api-key&lt;/code&gt; interceptor, but &lt;strong&gt;tier checks live in the handlers&lt;/strong&gt; — because tonic Requests carry no URI, the interceptor does not know which method you are calling. It can only establish who you are; each handler then decides whether who you are qualifies you for what you are trying to do. On the HTTP side, both &lt;code&gt;x-api-key&lt;/code&gt; and Bearer are accepted. The MCP bridge and CLI pass &lt;code&gt;NYLON_API_KEY&lt;/code&gt; through, so clients add exactly one variable. We also added a &lt;code&gt;genkey&lt;/code&gt; subcommand that mints a new key in one line.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Audit Event Stream: Who Touched Which Memory, When
&lt;/h2&gt;

&lt;p&gt;Among the questions enterprise customers ask about a memory system, one of the most frequent is: "If something goes wrong, can I look it up?"&lt;/p&gt;

&lt;p&gt;L2.3 answers with &lt;code&gt;audit.jsonl&lt;/code&gt;, an append-only audit file in the data directory. Weave, WeaveSession, Resonate, Search, and DeleteNode are all instrumented — &lt;strong&gt;even auth rejections leave a trace&lt;/strong&gt;. Whoever probed what with a wrong key is one query away.&lt;/p&gt;

&lt;p&gt;Two engineering decisions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Audit writes never do disk IO on the request path.&lt;/strong&gt; Events go to a background writer thread, so RPC paths carry zero disk overhead. A 5,000-entry in-memory ring buffer serves fast queries, preloaded from the tail of the file at startup, so the audit page is not blank after a restart.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tenant isolation extends to the audit log itself.&lt;/strong&gt; A tenant-bound key calling &lt;code&gt;GET /v1/audit&lt;/code&gt; sees only its own tenant events — audit logs are not the administrator private property, and they must not become a cross-tenant information channel.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The web console gained an audit tab (bilingual, Chinese and English) with filtering by operation type and relative timestamps. &lt;code&gt;NYLON_AUDIT=off&lt;/code&gt; disables it entirely.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fofaddv5687gqv8e6wtma.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fofaddv5687gqv8e6wtma.png" alt="Three-tier auth and the audit event stream" width="800" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Backup Drills: We Found Our Production Engine Had Never Checkpointed
&lt;/h2&gt;

&lt;p&gt;This is the most important thing from the past two weeks — not because of technical difficulty, but because it nearly went undiscovered.&lt;/p&gt;

&lt;p&gt;Our persistence is WAL (write-ahead log) + snapshots (checkpoints). By design, a checkpoint freezes the in-memory graph into &lt;code&gt;graph.snp&lt;/code&gt; and truncates the WAL, so restarts replay fast and hot backups have a clean baseline. L2.4 added periodic triggering (&lt;code&gt;NYLON_CHECKPOINT_SECS&lt;/code&gt;, default 600 seconds) and manual triggering (&lt;code&gt;POST /v1/checkpoint&lt;/code&gt;, admin tier).&lt;/p&gt;

&lt;p&gt;Then we ran a drill following our newly written Backup and Restore Manual (docs/BACKUP_RESTORE.md): copy production data to a replica instance, start it, compare stats.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The drill exposed a fact: until that moment, the production engine had never triggered a single checkpoint.&lt;/strong&gt; It had been running naked on the WAL the whole time — no data loss, but the WAL growing without bound, restart replays getting slower and slower, and no baseline for hot backups. Without this drill, the problem would have stayed dormant until it exploded during a real recovery.&lt;/p&gt;

&lt;p&gt;Drill results: the replica instance came up fully consistent with production (70 nodes / 63 edges), the first checkpoint wrote &lt;code&gt;graph.snp&lt;/code&gt; to disk successfully (313 KB), and the WAL truncated to zero.&lt;/p&gt;

&lt;p&gt;This deserves a sentence of its own: &lt;strong&gt;a backup plan that has never been drilled equals no backup at all.&lt;/strong&gt; Every company operations manual has a backup procedure; the only difference is whether you have actually restored something once.&lt;/p&gt;

&lt;p&gt;For Kubernetes users we prepared a Helm chart (&lt;code&gt;helm/nylonme&lt;/code&gt;): single-writer Deployment + PVC + Service + Secret, with optional embedded ollama that pulls the embedding model automatically after install.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftevk1te2tvixcxjp1frl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftevk1te2tvixcxjp1frl.png" alt="Backup drill" width="800" height="1416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Meanwhile: One More Piece of the Ecosystem Puzzle
&lt;/h2&gt;

&lt;p&gt;In the same batch of work, the LangChain and LlamaIndex adapters were completed and published to PyPI (&lt;code&gt;nylonme-integrations&lt;/code&gt;): on the LangChain side, &lt;code&gt;invoke&lt;/code&gt; returns standard Documents; on the LlamaIndex side, &lt;code&gt;retrieve&lt;/code&gt; returns NodeWithScore. Both verified against the production engine. If your agent is built on either framework, you no longer need to configure MCP at all — &lt;code&gt;pip install&lt;/code&gt; and attach.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxt6jcocj2bzrcic1h2vm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxt6jcocj2bzrcic1h2vm.png" alt="Ecosystem: LangChain + LlamaIndex" width="800" height="1375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  In Closing
&lt;/h2&gt;

&lt;p&gt;Two weeks ago we wrote that "four gates stand between a toy and infrastructure." Now we can say it more precisely:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The difference between a toy and infrastructure is not in the feature list — it is whether you dare to entrust it with company data.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Whether you dare depends on four things: can it see other people data (multi-tenancy), do you recognize who comes in (authentication), can you look things up when something goes wrong (audit), and can you recover when the worst happens (backup). Two weeks ago the answer to these four questions was "planned." Now it is "running in production."&lt;/p&gt;

&lt;p&gt;The memory engine coming-of-age ceremony is over. Next up is the deep water of enterprise adoption: high availability, horizontal scaling, and the continuous evolution of memory quality itself.&lt;/p&gt;

&lt;p&gt;NylonME is open source at &lt;a href="https://github.com/nylon-memory/NylonME" rel="noopener noreferrer"&gt;github.com/nylon-memory/NylonME&lt;/a&gt;, Apache-2.0. All features described here are on the main branch; the backup manual is at &lt;code&gt;docs/BACKUP_RESTORE.md&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is post #10 in the NylonME technical blog series. Previous posts: 01 Phase 1 benchmark / 02 The Memory Engine Is the Core of AI Agents / 03 The Second Half of AI / 04 vs TencentDB-Agent-Memory / 05 From 47 to 84, the Full Record / 06 Choosing an Agent Memory Engine / 07 Two-Minute Agent Integration / 08 Memory Engines, the Next Database / 09 Async Reflection.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rust</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>Teaching a Memory Engine to Sleep: Async Reflection Pushes LoCoMo to 85.3%</title>
      <dc:creator>Michael Deng</dc:creator>
      <pubDate>Tue, 08 Sep 2026 08:28:58 +0000</pubDate>
      <link>https://dev.to/_24569b2abcc8f3fa4c094/teaching-a-memory-engine-to-sleep-async-reflection-pushes-locomo-to-853-3kdj</link>
      <guid>https://dev.to/_24569b2abcc8f3fa4c094/teaching-a-memory-engine-to-sleep-async-reflection-pushes-locomo-to-853-3kdj</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;All numbers in this post come from reproducible evaluation scripts. Protocol: full LoCoMo benchmark, 10 sessions, 1536 answerable QA pairs, &lt;a href="mailto:recall@10"&gt;recall@10&lt;/a&gt;. Public repo at commit &lt;code&gt;ad04fb2&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Human Brain Does Not Organize Memories While Awake
&lt;/h2&gt;

&lt;p&gt;Here is a well-known fact from neuroscience: memory consolidation happens during sleep. Events from the day are first stored in raw form in the hippocampus; once you fall asleep, the brain starts "replaying" them — connecting isolated fragments of experience and stitching them into the existing network of knowledge. When you wake up feeling that you "figured it out," it is actually your brain doing the work for you overnight.&lt;/p&gt;

&lt;p&gt;Mainstream memory engines have no such mechanism. Write is the end; retrieval is everything — from the moment a memory hits disk, it is dead, waiting to be looked up.&lt;/p&gt;

&lt;p&gt;Last week we installed this "sleep module" in NylonME. Internally it is called &lt;strong&gt;Async Reflection&lt;/strong&gt;. The result: full-benchmark LoCoMo recall@10 went from 84.6% to &lt;strong&gt;85.3%&lt;/strong&gt;, and the hardest category — commonsense reasoning (Cat3) — reached its all-time best of 60.9%.&lt;/p&gt;

&lt;p&gt;This post explains three things: why Cat3 needs a new mechanism, how async reflection works, and which two paths we tried that turned out to be wrong.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F86yewkhnycd6fqrnducj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F86yewkhnycd6fqrnducj.png" alt="Human sleep consolidation vs async reflection analogy" width="800" height="1382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  First, the Medical Record: Why Cat3 Is the Last Weak Spot
&lt;/h2&gt;

&lt;p&gt;Our LoCoMo scores have climbed steadily, but Cat3 (commonsense reasoning) has always been the weakest of the four categories. In the run that hit 84.2% overall, Cat1 was 80.5, Cat2 86.6, Cat4 88.0 — and Cat3 only &lt;strong&gt;53.3&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The cause lies in the nature of Cat3 questions. A typical example:&lt;/p&gt;

&lt;p&gt;The dialogue says "she quit coffee after getting pregnant," and another segment says "she ordered a decaf americano yesterday." Question: "Why does she not drink regular coffee now?"&lt;/p&gt;

&lt;p&gt;The answer requires a piece of knowledge nobody ever said out loud: &lt;strong&gt;pregnant women should avoid caffeine&lt;/strong&gt;. That sentence is not in the dialogue. No retrieval technique — lexical, vector, or graph diffusion — can find an answer in words that were never spoken. No matter how strong the retrieval system is, it cannot retrieve a bridge that does not exist in the corpus.&lt;/p&gt;

&lt;p&gt;This is not a retrieval problem. It is a &lt;strong&gt;knowledge gap problem&lt;/strong&gt;. Either give up, or make the engine build the bridge itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5gyts42w7ppkbronvepi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5gyts42w7ppkbronvepi.png" alt="The Cat3 knowledge gap problem" width="800" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Async Reflection: Consolidating Memories During Idle Time
&lt;/h2&gt;

&lt;p&gt;We chose the second option, with one strict engineering constraint: &lt;strong&gt;bridge-building is heavy work and must never sit on the write path.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That gave us the full async reflection pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WeaveSession writes session facts
    → reflection task enters the queue (occupies no request thread)
    → engine idle for 10 minutes (NYLON_REFLECT_IDLE_SECS=600)
    → background task starts: LLM distills 1-3 neutral commonsense facts from the session
    → each fact becomes a special node, linked to every fact of that session
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A concrete example: for a dialogue, the LLM distilled bridge nodes like "pregnant women should generally avoid caffeine" or "people on business trips usually value window seats" — neutral, self-contained world knowledge that contains no private information.&lt;/p&gt;

&lt;p&gt;These nodes have three special design properties in the graph:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tagged &lt;code&gt;__world_knowledge__&lt;/code&gt;&lt;/strong&gt;: they exist as an &lt;strong&gt;intermediate layer&lt;/strong&gt; for graph diffusion and never enter the final recall results themselves — a bridge is for walking on, not for looking at.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low confidence, low tension, slow decay&lt;/strong&gt;: confidence 0.6, tension 0.6, decay rate 0.01 — they are auxiliary structure and should never overpower real memories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edges of weight 0.8 to the whole fact bundle&lt;/strong&gt;: stronger than auto-built edges (0.5), weaker than explicit inter-layer edges (1.0) — enough to conduct activation, not enough to steal the show.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At retrieval time, two previously isolated fact nodes ("quit coffee," "decaf americano") are now connected through a shared commonsense bridge node. A Cat3 question activates one of them as a seed; diffusion travels across the bridge to the other, and the context is complete.&lt;/p&gt;

&lt;p&gt;Why must it be async? Because LLM distillation is slow and expensive. Put it on the synchronous write path and write latency doubles, while handing LLM providers a hand around your throat. And reflection is not urgent by nature — &lt;strong&gt;consolidation happens offline, not at the moment of experience&lt;/strong&gt;. Let the engine think slowly when it is idle, and hang the results up when they are ready. This continues our old principle: the LLM is an enhancement, not a dependency; if the LLM goes down, the engine keeps reading and writing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff2vxdwlmmzpr5czr9sdy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff2vxdwlmmzpr5czr9sdy.png" alt="The async reflection pipeline" width="800" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data: 85.3%, and One Piece of Key Evidence
&lt;/h2&gt;

&lt;p&gt;Full benchmark: 10 sessions, 1536 questions, official results:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cat1 multi-hop reasoning&lt;/td&gt;
&lt;td&gt;84.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cat2 temporal&lt;/td&gt;
&lt;td&gt;86.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cat3 commonsense reasoning&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;60.9%&lt;/strong&gt; (previous best 59.8%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cat4 single-hop detail&lt;/td&gt;
&lt;td&gt;87.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall recall@10&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;85.3% (1310/1536)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Beyond the numbers, there is a more interesting piece of evidence. In this experiment the &lt;strong&gt;seed recall&lt;/strong&gt; for Cat3 was 64.1% — &lt;em&gt;lower&lt;/em&gt; than the keyword-expansion scheme we had tried (66.3%) — yet the final recall ended up higher.&lt;/p&gt;

&lt;p&gt;This shows the gain does not come from "finding more seeds." It comes from &lt;strong&gt;the graph structure itself after bridging&lt;/strong&gt;: the seeds are the same seeds, but there are more places you can reach from a seed. Mechanism and data line up, which is why we dared to lock in this result.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fta2caq4fky6h2mc5pg0e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fta2caq4fky6h2mc5pg0e.png" alt="Full LoCoMo benchmark results" width="800" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(A pitfall worth recording: always probe the API once before running an LLM evaluation. When the DeepSeek account balance runs out it returns HTTP 402, session fact writes silently become +0, the whole benchmark score is void, and an hour of compute is wasted.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Failed Paths, Worth Publishing Just the Same
&lt;/h2&gt;

&lt;p&gt;The tradition of this series: the failure list is as long as the success list. After locking in 85.3%, we tried two "obviously better" directions. Both died:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Failure one: precise linking.&lt;/strong&gt; Intuitively, a bridge should not link to every fact in a session — only the few it truly supports. We had the LLM output &lt;code&gt;source_fact_indices&lt;/code&gt; for precise linking. Result: 85.1% overall, -0.2 total, Cat3 -2.2. &lt;strong&gt;Rejected.&lt;/strong&gt; The lesson is counterintuitive: the value of a bridge comes from its connectivity. Narrowing the links narrows the bridge. Coarse linking is noisy, but it contributes more to reasoning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Failure two: confidence-weighted edges.&lt;/strong&gt; Weighting bridge edges by the confidence the LLM reports should, in theory, make "reliable bridges" louder. Quick 2-session test: 78.8%, no positive gain. &lt;strong&gt;Withdrawn.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After two rounds of failure, our judgment is: stop piling up prompt tricks and linking tricks. The next optimization surface is &lt;strong&gt;the quality of the bridge text itself&lt;/strong&gt; (dedup, filtering out vacuous bridges — a "people have preferences" bridge is nonsense and must be blocked) and &lt;strong&gt;the trigger policy&lt;/strong&gt; (switch from "reflect on every session" to "only reflect on sessions with high perplexity and low recall," saving LLM calls). These are already queued on the engine optimization branch.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Full Picture Now
&lt;/h2&gt;

&lt;p&gt;With async reflection, the NylonME memory lifecycle is complete:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;At write time&lt;/strong&gt;: LLM weaving and decomposition, six-thread structuring, dual-layer graph writes (raw text + abstracted facts)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;At idle time&lt;/strong&gt;: async reflection, LLM-built commonsense bridges, isolated facts stitched into a network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;At retrieval time&lt;/strong&gt;: dual seed channels → adaptive-depth diffusion (bridge nodes as intermediate layer) → tension scoring → vector reranking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Throughout&lt;/strong&gt;: natural tension decay, conflict detection on write, automatic fallback if the LLM is absent from any step&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From the 47.1% lexical baseline to 85.3% — every point of the 38-point gain has a controlled experiment and a public script behind it. All evaluation switches are environment-variable-driven (&lt;code&gt;NYLON_WORLD_BRIDGES_ASYNC=1&lt;/code&gt; reproduces this result), the code is at &lt;code&gt;ad04fb2&lt;/code&gt;, and we welcome being proven wrong.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvpe7w9orpt60giudsxyb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvpe7w9orpt60giudsxyb.png" alt="NylonME memory lifecycle panorama" width="800" height="1360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cat3 at 60.9% is still a weak spot, and we do not intend to hide it. But the account of the direction is settled: &lt;strong&gt;what a memory system is missing is not stronger retrieval — it is the knowledge that retrieval cannot reach. And the way to fill it is to let the engine do the thinking for you while it sleeps.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The human brain spent hundreds of millions of years evolving sleep. The memory engine learned this lesson in one week.&lt;/p&gt;




&lt;p&gt;NylonME is open source at &lt;a href="https://github.com/nylon-memory/NylonME" rel="noopener noreferrer"&gt;github.com/nylon-memory/NylonME&lt;/a&gt;, Apache-2.0. &lt;code&gt;pip install nylon-sdk&lt;/code&gt; is also live on PyPI.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is post #9 in the NylonME technical blog series. Previous posts: 01 Phase 1 benchmark / 02 The Memory Engine Is the Core of AI Agents / 03 The Second Half of AI / 04 vs TencentDB-Agent-Memory / 05 From 47 to 84, the Full Record / 06 Choosing an Agent Memory Engine / 07 Two-Minute Agent Integration / 08 Memory Engines, the Next Database. Performance numbers are self-measured by the author (2026-08); evaluation scripts are open-sourced with the repo and reproducible.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>machinelearning</category>
      <category>rust</category>
    </item>
    <item>
      <title>The Memory Engine Will Become the Enterprise's Next Database</title>
      <dc:creator>Michael Deng</dc:creator>
      <pubDate>Tue, 08 Sep 2026 08:15:15 +0000</pubDate>
      <link>https://dev.to/_24569b2abcc8f3fa4c094/the-memory-engine-will-become-the-enterprises-next-database-395l</link>
      <guid>https://dev.to/_24569b2abcc8f3fa4c094/the-memory-engine-will-become-the-enterprises-next-database-395l</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Disclosure: we are the authors of NylonME. This is a piece of opinionated vendor content — but the judgment comes first, the product second, and every number is reproducible.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  A Bet: Every Company Will Soon Have a Shared Memory Store
&lt;/h2&gt;

&lt;p&gt;First, the bet we're placing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memory engines will retread the path of databases.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the 1970s, data lived in departmental filing cabinets and personal computers, and everyone thought that was good enough. Then relational databases arrived, and enterprises discovered that data must be centrally managed, uniformly retrieved, and shared across the organization — today, no company says "we don't need a database."&lt;/p&gt;

&lt;p&gt;In 2026, the memory engine is where the database was in 1975.&lt;/p&gt;

&lt;p&gt;Why? Because AI is seeping into every job function. Customer service answers with AI, sales follows up with AI, programmers write code with AI, operators draft copy with AI. &lt;strong&gt;Every job function's collaboration with AI produces a steady stream of experience, knowledge, and data&lt;/strong&gt;: what this customer truly cares about, why that proposal was rejected last time, who fell into this pit three months ago.&lt;/p&gt;

&lt;p&gt;Where does all of this go today? Scattered across chat logs, personal notes, and the heads of employees who have already left. The know-how a company pays a fortune to accumulate every year is leaking away daily.&lt;/p&gt;

&lt;p&gt;When every job function depends on AI, there is only one enterprise-grade answer: &lt;strong&gt;a shared, centralized memory store&lt;/strong&gt; — every job function's AI assistant connects to it, experience deposits into it, and knowledge flows out of it. Just as today every business system connects to the same database cluster.&lt;/p&gt;

&lt;p&gt;This is not a question of whether it will happen. It is a question of when.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm1cakwrnq8u9n0z24zrs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm1cakwrnq8u9n0z24zrs.png" alt="Memory engines will retread the database path" width="800" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  But Here's the Reality: Almost Every Memory Engine Today Is a Personal Toy
&lt;/h2&gt;

&lt;p&gt;We've surveyed nearly every public memory solution, and we've built one ourselves. So here's an impolite observation: &lt;strong&gt;the current memory-engine market is a "personal toy" market.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That doesn't mean the products are bad — as bolt-on memory for personal assistants, many are beautifully made. But put them in an enterprise scenario, and they're riddled with fatal gaps:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance gap.&lt;/strong&gt; Most solutions are a Python stack gluing together general-purpose databases. Nobody dares publish write throughput; nobody dares stress-test latency. For a personal scenario, a few hundred writes a day is fine. For an enterprise scenario — hundreds of Agents across the company reading and writing concurrently — TPS and P99 latency are matters of life and death. Ask a vendor for benchmarks, and most will show you demo screenshots.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture gap.&lt;/strong&gt; The mainstream architecture assumes a single user: one pip package, one local SQLite file, one person's memory. No shared-service model, no multi-tenant isolation, no concurrent-write design. Two people writing memory at the same time can already break things — let alone two departments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dependency gap.&lt;/strong&gt; Many solutions weld the LLM onto the critical path — LLM extraction for writes, LLM rewriting for reads. A hobbyist doesn't care; an enterprise does the math: every memory read/write across the company passes through an LLM, doubling latency and letting costs run away. And when the LLM provider hiccups, the entire company's memory system hiccups with it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data-sovereignty gap.&lt;/strong&gt; The managed-cloud school is even more direct: your customer conversations and business experience flow to someone else's servers. For finance, healthcare, government, and legal industries, this is not a drawback — it's an instant veto.&lt;/p&gt;

&lt;p&gt;One sentence to sum up the status quo: &lt;strong&gt;today's memory engines solve "let my AI assistant remember me"; enterprises need "let the whole organization's AI remember the organization."&lt;/strong&gt; The difficulty of these two problems differs by an order of magnitude.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F23unrhcz2qen9g5tihw9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F23unrhcz2qen9g5tihw9.png" alt="Personal toy vs enterprise needs" width="800" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What an Enterprise-Grade Memory Engine Looks Like
&lt;/h2&gt;

&lt;p&gt;Getting from "personal toy" to "enterprise infrastructure" means crossing four gates:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gate 1: shared-service architecture.&lt;/strong&gt; The memory engine must be an independent, networked service, connected by every business system the way a database is — not embedded in someone's Python process. API protocols (gRPC/REST), multi-language clients, and concurrent reads and writes from many people and many Agents are table stakes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gate 2: production-grade performance.&lt;/strong&gt; Write throughput must carry the concurrent deposits of the whole company's Agents; query latency must be worthy of real-time conversation. A vendor should dare to publish both numbers — and dare to ship the reproduction scripts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gate 3: an org-level data model.&lt;/strong&gt; Personal memory has only "me"; enterprise memory has "who": which employee, which project, which department does this experience belong to? How are permissions isolated? How does cross-department knowledge flow under authorization? How does Zhang San's lesson become a heads-up for Li Si's AI assistant at the start of a project? This requires native multi-tenant, multi-principal design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gate 4: knowledge freshness and hygiene.&lt;/strong&gt; An enterprise memory store keeps growing; stale knowledge must sink naturally (a forgetting mechanism), and mutually contradictory experiences must be surfaced instead of silently coexisting (conflict detection). Otherwise, three years from now, your shared memory store is a giant landfill, and the AI gets more confused the more it queries.&lt;/p&gt;

&lt;p&gt;Hold these four gates up against the products on the market, and most fall at the first one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feenyxs9y1rj5l6huwief.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feenyxs9y1rj5l6huwief.png" alt="Four gates" width="800" height="1372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  NylonME: An Engine Built for This Bet
&lt;/h2&gt;

&lt;p&gt;Scene set — now for our product. NylonME was designed from day one under the assumption of "enterprise shared memory store." It's not a scaled-up personal toy; the architectural starting point is different:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Single binary, deployed as a service.&lt;/strong&gt; A Rust kernel compiled into one executable; &lt;code&gt;serve&lt;/code&gt; mode starts a gRPC service, and every Agent tool in the company (Claude Code, Codex, Cursor, Qoder — any client that speaks MCP or gRPC) connects directly. No Neo4j to babysit, no Qdrant to configure, zero external dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance we dare to publish.&lt;/strong&gt; 12,494 TPS writes (WAL group commit, 32-way concurrency, fsync on); 3-hop graph query P50 = 3.6ms; vector retrieval Top-100 P50 = 0.67ms; 1M nodes + 10M edges steady-state at 720 MB. Every number ships with a benchmark script, open-sourced with the repo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Org-level data model, natively.&lt;/strong&gt; &lt;code&gt;owner&lt;/code&gt; + &lt;code&gt;tenant&lt;/code&gt; two-level isolation: namespaces by person, by project, by department — each stores its own, interoperating under authorization. The six-silk memory model (fact, relation, temporal, emotion, frequency, provenance) natively carries the metadata of "who, when, in what context."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Freshness and hygiene built in.&lt;/strong&gt; Tension decays exponentially with time — experience nobody has touched for three months sinks naturally; experience referenced repeatedly rises to the front. Every new memory write runs automatic conflict detection: if sales just writes "Customer A's budget is unlimited," the system digs up the three-month-old "Customer A's budget is tightening" and puts the contradiction on the table, instead of letting the two memories fight silently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Retrieval quality, measured at full scale.&lt;/strong&gt; LoCoMo long-conversation benchmark recall@10 = 84.6%, on the full 10 sessions and 1,536 questions, evaluation scripts open-sourced. The dual-layer write architecture (raw-text layer + LLM abstract layer coexisting) gives precise recall and cross-session reasoning each their due — and we've fully published the experimental basis for this design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The LLM is an enhancement, not a dependency.&lt;/strong&gt; With an LLM endpoint configured, you get fact distillation, conflict detection, and session-level abstraction. Unplug the LLM, and the core read/write path keeps working. Your memory infrastructure should not grind to a halt because any single model vendor has an outage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full data sovereignty.&lt;/strong&gt; Apache-2.0 open source, self-hosted, data written and stored entirely inside your own data center. Snapshot format, protocol, and evaluation scripts are all public — even if you stop using NylonME someday, your memory exports intact, and nobody can hold your organizational knowledge hostage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpkpwt2x2dbyftt39mi5e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpkpwt2x2dbyftt39mi5e.png" alt="NylonME enterprise capabilities" width="800" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  We're Already Using It This Way Ourselves
&lt;/h2&gt;

&lt;p&gt;Vendor content, so here's the receipts: we are the first user of this "shared memory store" pattern.&lt;/p&gt;

&lt;p&gt;Our engine runs on an Ubuntu server in the LAN, and every dev tool in the team — Codex on Windows, VS Code, various scripts — connects to the same engine. Architecture decisions, benchmark data, and pitfall records are continuously woven in. Before a newcomer (new session, new tool) starts work, one resonate call hits historical records directly for questions like "what are the pitfalls of DeepSeek's reasoning model" or "why doesn't this project use RocksDB."&lt;/p&gt;

&lt;p&gt;The pattern is proven: &lt;strong&gt;memory follows the organization — not any individual, not any tool, not any session.&lt;/strong&gt; Switch IDEs, keep memory. Switch people, keep memory. Span months, keep memory.&lt;/p&gt;

&lt;p&gt;This is what we believe every company will have three years from now.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffbcrpdanurwc5gde0md7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffbcrpdanurwc5gde0md7.png" alt="Memory follows the organization" width="800" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Words
&lt;/h2&gt;

&lt;p&gt;Databases solved the centralized management of enterprise data; memory engines will solve the centralized management of enterprise experience. The former took twenty years to become standard; with AI's acceleration, the latter may take only three.&lt;/p&gt;

&lt;p&gt;On that day, every company will have two core assets: the data in its databases, and the experience in its memory store. The former tells you what happened; the latter tells you what to do next.&lt;/p&gt;

&lt;p&gt;NylonME is the engine we built for that future, open-sourced at &lt;a href="https://github.com/nylon-memory/NylonME" rel="noopener noreferrer"&gt;github.com/nylon-memory/NylonME&lt;/a&gt;, Apache-2.0. You can run it today — starting with letting your team share its first memory.&lt;/p&gt;

&lt;p&gt;The standard part of three years from now can be installed today.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is Part 8 of the NylonME technical blog series. Earlier parts: 01 Phase 1 benchmarks / 02 The memory engine is the core of the Agent / 03 The second half of AI / 04 vs TencentDB-Agent-Memory / 05 From 47 to 84, the full record / 06 Memory engine selection guide / 07 Two-minute integration with Agent tools. All performance figures are the authors' own measurements (Aug 2026); benchmarks and evaluation scripts are open-sourced with the repo.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>database</category>
      <category>llm</category>
      <category>rust</category>
    </item>
    <item>
      <title>Choosing an Agent Memory Engine: A Six-Dimension Evaluation Framework</title>
      <dc:creator>Michael Deng</dc:creator>
      <pubDate>Tue, 08 Sep 2026 08:04:29 +0000</pubDate>
      <link>https://dev.to/_24569b2abcc8f3fa4c094/choosing-an-agent-memory-engine-a-six-dimension-evaluation-framework-2db</link>
      <guid>https://dev.to/_24569b2abcc8f3fa4c094/choosing-an-agent-memory-engine-a-six-dimension-evaluation-framework-2db</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffdjoo3m47dek1amu3mwe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffdjoo3m47dek1amu3mwe.png" alt="A six-dimension evaluation framework" width="800" height="1335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclosure: we are the authors of NylonME. This is naturally a bit of "the seller praising their own melons" — but we will lay the evaluation framework, the measured data, and &lt;strong&gt;when you should NOT choose us&lt;/strong&gt; all out on the table. The choice is yours; our job is to give you all the facts.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Think First: What Are You Paying For?
&lt;/h2&gt;

&lt;p&gt;In 2026, building an Agent, the memory layer is no longer a "whether or not" question — it's a "which one" question. But most teams' selection process is a mess: read three vendor blogs, run one demo, and decide. Six months later, when memory volume grows and query types get complex, they discover the ceiling of their choice was right above their heads the whole time.&lt;/p&gt;

&lt;p&gt;So before talking products, let's talk about the &lt;strong&gt;evaluation framework&lt;/strong&gt;. Whether a memory engine is worth choosing comes down to six dimensions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Memory model&lt;/strong&gt; — how does it organize information? A flat list, tiered compression, or a graph network? This caps retrieval quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval quality&lt;/strong&gt; — are there measured numbers on public benchmarks? Full-run basis? Reproducible?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM dependency&lt;/strong&gt; — if the LLM goes down, times out, or raises prices, does your memory system still work?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production performance&lt;/strong&gt; — write throughput, query latency, resource footprint: can it carry real load?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment and data sovereignty&lt;/strong&gt; — can you self-host? Does data leave your data center?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-term risk&lt;/strong&gt; — license, vendor lock-in, project sustainability.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Below, we walk through the mainstream options along these six dimensions, then state clearly where NylonME stands on each — including our weaknesses.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Five Types of Solutions on the Market
&lt;/h2&gt;

&lt;p&gt;As of August 2026, Agent memory solutions fall into roughly five schools:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type 1: DIY RAG assembly.&lt;/strong&gt; A vector database + prompt templates — shippable in two weeks. The problem is the ceiling arrives just as fast: no concept of time, no conflict detection, no forgetting mechanism. "The user said last week they don't eat spicy food; this week they can't live without it" — in such a system, those two memories fight forever. Fine for validation; not for production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type 2: Managed memory cloud services (Mem0, Zep, etc.).&lt;/strong&gt; Fastest to integrate, friendly SDKs. The price is data leaving your domain — your users' conversations flow to someone else's servers, which is an instant veto for finance, healthcare, government, and legal scenarios. And under the high-frequency read/write patterns of Agent architectures, the metered pricing model deserves a careful look at the cost curve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type 3: Framework-builtin memory (Letta/MemGPT family).&lt;/strong&gt; Memory is deeply bound to the framework — works out of the box. But choosing the framework means choosing the whole stack: if you ever want to switch LLM orchestration frameworks, the memory layer gets kidnapped along with it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type 4: The tiered-compression school (TencentDB-Agent-Memory as the representative).&lt;/strong&gt; L0–L3 progressive compression; the token-saving is real, and pip install with zero dependencies is genuinely convenient. We analyzed the structural problems in detail in Part 4 of this series: compression is lossy, and letting the abstract layer replace the raw layer in retrieval loses details — in our own ablation, keeping only the abstract layer cost 3.4 recall points.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type 5: The heavy academic stack (MemOS as the representative).&lt;/strong&gt; Neo4j + Qdrant combo, theoretically complete — but deploying it means maintaining a graph database cluster plus a vector database cluster. Small teams, beware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where NylonME sits: the graph-network school — single binary, self-hosted, with all benchmark numbers published.&lt;/strong&gt; Let's go dimension by dimension.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd8ebkxf0vhrvu1omcrwj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd8ebkxf0vhrvu1omcrwj.png" alt="Five types of memory solutions" width="800" height="1196"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Dimension 1: Memory Model — the Cap Is Set by Structure
&lt;/h2&gt;

&lt;p&gt;The ceiling of a flat structure is "find what looks similar." The ceiling of tiered compression is "find what the summaries kept." The ceiling of a graph network is "find what is related."&lt;/p&gt;

&lt;p&gt;NylonME weaves its graph with the six-silk model: every memory carries six silks — fact, relation, temporal, emotion, frequency, provenance — and memories are explicitly linked to each other through relation silks. Retrieval is "contextual resonance": diffuse from seed nodes along the graph, ranked by tension.&lt;/p&gt;

&lt;p&gt;This structure delivers three capabilities no other model provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Associative recall&lt;/strong&gt;: "my internet is lagging" can activate a broadband-outage work order from three months ago, because they're connected by an edge in the graph — no keyword hit required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conflict detection&lt;/strong&gt;: when a new memory is written, it's automatically checked against existing memories for contradictions, and contradictions are returned with the response instead of silently overwriting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Natural forgetting&lt;/strong&gt;: tension decays exponentially with time; frequently mentioned memories resist forgetting — no manual database cleanup needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plus one architecture upgrade that landed in August: &lt;strong&gt;dual-layer writes.&lt;/strong&gt; The leaf layer stores verbatim turns; the abstract layer stores LLM-distilled session-level facts; both coexist and both participate in retrieval. This design came directly from experimental lessons (see Part 5): the abstract layer cannot replace raw text — compressed artifacts are an increment, not a replacement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1oznjd6h3wbq6odcdzpi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1oznjd6h3wbq6odcdzpi.png" alt="Memory model: three structures compared + the six-silk model" width="800" height="1315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Dimension 2: Retrieval Quality — Full-Run Basis, Open Scripts
&lt;/h2&gt;

&lt;p&gt;This is the dimension we most welcome being scrutinized on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LoCoMo long-conversation memory benchmark: recall@10 = 84.6%, on the full 10 sessions, 1,536 answerable questions.&lt;/strong&gt; The evaluation scripts are open-sourced with the repo; the embedding model is bge-m3 (1024 dimensions, runnable on a LAN Ollama) — anyone can reproduce it.&lt;/p&gt;

&lt;p&gt;We deliberately refuse to speak on small-sample bases. This field has too much "90% on 2 sessions" marketing — with a small sample, the variance of 11 questions can lie to you at will; the full run is the mirror that reveals the demon. Our own 2-session figure was 80.1%; pushing to the full run actually rose to 84.2% — but even that "actually" contains noise: the HNSW index fluctuates ±1.5 points, and we label this honestly in the blog.&lt;/p&gt;

&lt;p&gt;From the 47.1% lexical baseline to 84.6%, every step has a controlled experiment on record, including four failed designs (LLM query expansion, explicit inter-layer edges, tension floor, reserved seed quotas). The failure list is as long as the success list — that's what real research looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dimension 3: LLM Dependency — an Enhancement, Not a Dependency
&lt;/h2&gt;

&lt;p&gt;Many memory systems put the LLM on the critical path: LLM extraction for writes, LLM rewriting for reads. That means LLM jitter = memory-system jitter, LLM bill = memory-system bill.&lt;/p&gt;

&lt;p&gt;NylonME's principle is &lt;strong&gt;pluggable, fallible LLM&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With an LLM endpoint configured (any OpenAI-compatible API; we tested with DeepSeek): you get three enhanced capabilities — weaving decomposition, conflict detection, and session-level abstraction.&lt;/li&gt;
&lt;li&gt;Without one, or when the endpoint fails: automatic fallback to heuristic decomposition and rule-based detection; the core read/write path is unharmed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your memory engine should not go down because your LLM provider went down. That sounds like a truism — but go check the solution you're using now and see if it dares to run with the LLM unplugged.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvdved96r2jk4htluvrbu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvdved96r2jk4htluvrbu.png" alt="LLM dependency comparison" width="800" height="1232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Dimension 4: Production Performance — Hard Numbers from a Rust Kernel
&lt;/h2&gt;

&lt;p&gt;All figures measured on a development machine (release build; numbers reproducible via the repo's benchmarks):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Measured&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Write throughput&lt;/td&gt;
&lt;td&gt;12,494 TPS&lt;/td&gt;
&lt;td&gt;WAL group commit, 32-way concurrency, fsync on&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3-hop graph query&lt;/td&gt;
&lt;td&gt;P50 = 3.6ms / P99 = 7.2ms&lt;/td&gt;
&lt;td&gt;100K-node scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vector retrieval&lt;/td&gt;
&lt;td&gt;Top-100 P50 = 0.67ms&lt;/td&gt;
&lt;td&gt;Self-built HNSW, recall@10 ≥ 0.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory footprint&lt;/td&gt;
&lt;td&gt;720 MB (real text) / 432 MB (minimal)&lt;/td&gt;
&lt;td&gt;1M nodes + 10M edges&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment form&lt;/td&gt;
&lt;td&gt;Single binary&lt;/td&gt;
&lt;td&gt;Zero external dependencies; embeddable or as a service&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The cost of a Rust kernel is ours to bear (slower development); the benefits are yours (single binary, no GC jitter, predictable memory). Compared with the "install Neo4j, then install Qdrant" school, the operational complexity is not on the same order of magnitude.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvnlgxh5utbkwmc87yffs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvnlgxh5utbkwmc87yffs.png" alt="Production performance, measured" width="800" height="1394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Dimension 5: Deployment and Data Sovereignty
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosting&lt;/strong&gt;: a single binary, served via gRPC + REST gateway, or embedded as a library in your process. Data never leaves your data center.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embedding-model freedom&lt;/strong&gt;: swap any OpenAI-compatible endpoint at will — official API, Azure, or bge-m3 on a LAN Ollama. Our production setup runs Ollama on an Ubuntu box in the LAN: zero API cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-client access&lt;/strong&gt;: the gRPC protocol is public; clients can be generated in any language. We've already wired it into our own Codex workflow — resonate for historical decisions at the start of each task, weave to deposit new facts at the end. 29 project memories in service. Using your own system to dig up your own memories is the harshest test of whether it works.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dimension 6: Long-Term Risk
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;License&lt;/strong&gt;: Apache-2.0 — an enterprise-friendly permissive license, no restrictions on commercial use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLA&lt;/strong&gt;: CLA Assistant is configured; the IP chain of community contributions is clean. Your legal team will like this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lock-in risk&lt;/strong&gt;: the data format (.nylon snapshots), the gRPC protocol, and the evaluation scripts are all open-sourced. Even if you abandon NylonME tomorrow, your memory data exports intact — no hostage situation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sustainability&lt;/strong&gt;: this is the most honest item — we are a new project; our star count and ecosystem richness can't compare with big-vendor projects. Choosing us means choosing to grow alongside a project. What we can commit to: development activity, data transparency, and the fact that we ourselves use this path every single day.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  When You Should &lt;strong&gt;NOT&lt;/strong&gt; Choose NylonME
&lt;/h2&gt;

&lt;p&gt;The melon-selling is over; here comes the dissuasion. In the following situations, we'd suggest looking elsewhere:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;You're a Python full-stack team shipping in two weeks.&lt;/strong&gt; Choose TencentDB-Agent-Memory or Mem0 — pip install really is fast. Our Python SDK is still on the way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want a managed service and don't want to operate any process.&lt;/strong&gt; Choose the cloud-services school. NylonME's cloud version is still on the roadmap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need team-shared memory (multi-user sharing, permission isolation).&lt;/strong&gt; We don't have that yet; Tencent's Team Memory is production-ready.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your scenario is purely "save tokens for the LLM," and you don't care about the retrieval-quality ceiling.&lt;/strong&gt; The tiered-compression school fits better — their 61% token compression is real.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You can't afford to bet on a new project.&lt;/strong&gt; Understandable. Take our evaluation scripts and run them — until the numbers convince you, no commitment is needed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There is no silver bullet — only fit. We write out our weaknesses because trust in the selection process is worth more than conversion.&lt;/p&gt;




&lt;h2&gt;
  
  
  Decision Cheat Sheet
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your situation&lt;/th&gt;
&lt;th&gt;Recommendation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hard self-hosting requirement; data must not leave your domain&lt;/td&gt;
&lt;td&gt;NylonME (or build your own)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pursuing the retrieval-quality ceiling with complex query types&lt;/td&gt;
&lt;td&gt;NylonME (84.6% full-run, reproducible)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production load with high-concurrency writes and low-latency queries&lt;/td&gt;
&lt;td&gt;NylonME (12K TPS / millisecond queries)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python team, quick validation&lt;/td&gt;
&lt;td&gt;TencentDB-Agent-Memory / Mem0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Want a managed service with zero ops&lt;/td&gt;
&lt;td&gt;Mem0 / Zep Cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team-shared memory&lt;/td&gt;
&lt;td&gt;TencentDB (Team Memory)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Academic-grade completeness, dedicated ops staff&lt;/td&gt;
&lt;td&gt;MemOS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1a8xo0w5wj7eobnn4q1i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1a8xo0w5wj7eobnn4q1i.png" alt="Decision cheat sheet" width="800" height="1289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A POC Path: Verify Our Claims in Half a Day
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run it&lt;/strong&gt; (10 minutes): clone the repo, cargo build, start the single binary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reproduce the numbers&lt;/strong&gt; (1 hour): run the open-sourced LoCoMo evaluation scripts and see with your own eyes how 84.6% comes about.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pour in your data&lt;/strong&gt; (2 hours): connect a slice of real conversation logs via gRPC or REST, and watch how resonance retrieval performs on your own distribution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The unplug test&lt;/strong&gt; (5 minutes): cut both the LLM endpoint and the embedding endpoint, and confirm the core path is still alive.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After these four steps, you'll know whether to choose it more clearly than after reading ten blog posts (including this one).&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Words
&lt;/h2&gt;

&lt;p&gt;A memory engine is the foundation of an Agent, and a foundation chosen wrong will reveal itself in the most expensive way, six months later. Our advice is not "choose NylonME blindly" — it's: &lt;strong&gt;choose with a framework, verify with data, decide with a POC.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you try it and find something wrong, open an issue on GitHub and tell us — that feedback, like the 84.6%, is a real part of this project.&lt;/p&gt;

&lt;p&gt;NylonME is open-sourced at &lt;a href="https://github.com/nylon-memory/NylonME" rel="noopener noreferrer"&gt;github.com/nylon-memory/NylonME&lt;/a&gt;, Apache-2.0.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is Part 6 of the NylonME technical blog series. Earlier parts: 01 Phase 1 benchmarks / 02 The memory engine is the core of the Agent / 03 The second half of AI / 04 vs TencentDB-Agent-Memory / 05 From 47 to 84, the full record. All performance figures are the authors' own measurements (Aug 2026, development machine); evaluation scripts are open-sourced and reproducible. Competitor descriptions are based on public information as of Aug 2026; where discrepancies exist, each vendor's official statements prevail.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>rust</category>
      <category>opensource</category>
    </item>
    <item>
      <title>From 47 to 84: The Full LoCoMo Benchmark Record of the NylonME Memory Engine</title>
      <dc:creator>Michael Deng</dc:creator>
      <pubDate>Tue, 08 Sep 2026 08:02:01 +0000</pubDate>
      <link>https://dev.to/_24569b2abcc8f3fa4c094/from-47-to-84-the-full-locomo-benchmark-record-of-the-nylonme-memory-engine-1nb6</link>
      <guid>https://dev.to/_24569b2abcc8f3fa4c094/from-47-to-84-the-full-locomo-benchmark-record-of-the-nylonme-memory-engine-1nb6</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foh2hdw358rx0wq1u6lks.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foh2hdw358rx0wq1u6lks.png" alt="From 47 to 84" width="800" height="990"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Every number in this article comes from reproducible evaluation scripts. Measurement basis: LoCoMo evidence-recall recall@10, lexical+vector fused retrieval, 1,536 answerable QA pairs.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Starting Point: An Honest 47.1%
&lt;/h2&gt;

&lt;p&gt;In our previous benchmark post, we published a number that wasn't pretty: LoCoMo evidence-recall recall@10 = &lt;strong&gt;47.1%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That was a pure lexical-matching baseline — ask "when did the user book the flight?", and the system only looks for literal overlaps in the memory text. What it finds is whatever happens to contain the exact words of the question; what it misses is the same fact phrased differently.&lt;/p&gt;

&lt;p&gt;Two weeks later, that number became &lt;strong&gt;84.6%&lt;/strong&gt; (1294/1536 → 1299/1536 across two full runs). And if you look one stage earlier — at the retrieval stage, the seed-layer recall — we're already at &lt;strong&gt;90%+&lt;/strong&gt;. Among open-source memory engines that publish full-run LoCoMo results, these two numbers put us firmly in the first tier.&lt;/p&gt;

&lt;p&gt;This article makes no attempt to sugarcoat anything. It is a complete record of every gain and every failed experiment along the way. Far too few people in the memory-systems field publish real data. We'd like to be the exception.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Big Picture: Five Steps
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Seed-layer recall&lt;/th&gt;
&lt;th&gt;Final recall@10&lt;/th&gt;
&lt;th&gt;Key move&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lexical baseline&lt;/td&gt;
&lt;td&gt;~47%&lt;/td&gt;
&lt;td&gt;47.1%&lt;/td&gt;
&lt;td&gt;Pure lexical matching (at Phase 1 completion)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+Vector+graph&lt;/td&gt;
&lt;td&gt;~75%&lt;/td&gt;
&lt;td&gt;70.6%&lt;/td&gt;
&lt;td&gt;bge-m3 embeddings in; lexical/vector dual-channel seed fusion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+Dual-layer write&lt;/td&gt;
&lt;td&gt;~85%&lt;/td&gt;
&lt;td&gt;79.2%&lt;/td&gt;
&lt;td&gt;Leaf-layer raw text + abstract-layer LLM-distilled facts coexist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+Adaptive depth&lt;/td&gt;
&lt;td&gt;~88%&lt;/td&gt;
&lt;td&gt;80.1%&lt;/td&gt;
&lt;td&gt;Simple queries skip graph diffusion (Cat4 max_hops=0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full validation&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;90%+&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;84.2%&lt;/td&gt;
&lt;td&gt;2 sessions → 10 sessions, squeezing out small-sample inflation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+Vector rerank&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;90%+&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;84.6%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Query vector scores the activated set directly, blended into ranking&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcrdom1a3xnbm5bxbzemf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcrdom1a3xnbm5bxbzemf.png" alt="Five steps at a glance" width="800" height="1286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Embeddings In, 47 → 70.6
&lt;/h2&gt;

&lt;p&gt;In Phase 1, the embedding channel was a reserved interface; seeds came purely from lexical matching. After plugging in bge-m3 (1024 dimensions, running on Ollama on an Ubuntu box in our LAN), retrieval became dual-channel: the lexical channel handles exact entities (names, places, numbers), and the vector channel handles semantic approximations ("booked a flight" and "bought a plane ticket to Shanghai").&lt;/p&gt;

&lt;p&gt;Each channel produces its own seeds, with the vector channel holding reserved quota (8 slots) so it doesn't get squeezed out by lexical seeds. After fusion, recall jumped from 47.1% to 70.6%.&lt;/p&gt;

&lt;p&gt;That was an expected gain, not a surprise. &lt;strong&gt;The real fight starts above 70.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Dual-Layer Writes, 70.6 → 79.2
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgrrh7bgxcpz7wrey6cvv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgrrh7bgxcpz7wrey6cvv.png" alt="Why did " width="800" height="1297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the single most important architectural decision of Phase 2, and it deserves a full explanation.&lt;/p&gt;

&lt;p&gt;Our initial approach was intuitive: a conversation comes in, the LLM decomposes each session into structured facts, and the facts go into the graph. It sounded great — until the ablation experiment delivered a blow to the head: &lt;strong&gt;using only the abstract-layer facts, the score actually fell from 79.2% to 67.3%.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The reason is simple: LLM distillation is necessarily lossy. The user says "the hotel I stayed in last time had poor soundproofing, but the breakfast was decent" — distilled into "user unhappy with hotel soundproofing." The breakfast detail is gone, and so is the temporal anchor "last time." A query asking "how was the breakfast?" can never find its answer in the abstract layer.&lt;/p&gt;

&lt;p&gt;So the final architecture is &lt;strong&gt;dual-layer writes&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Leaf layer&lt;/strong&gt;: each conversation turn's raw text is stored verbatim, not a character changed — this preserves precise recall (the foundation for Cat2 temporal and Cat4 single-hop questions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Abstract layer&lt;/strong&gt;: when a session ends, the LLM distills structured facts and attaches relation tags — this preserves reasoning power (the foundation for Cat1 multi-hop and Cat3 commonsense questions)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both layers coexist, each serving its own question types. Along the way, this established a design principle: &lt;strong&gt;the understanding layer lives on the write side, not the read side.&lt;/strong&gt; The LLM is the "compiler" of memory — at write time it compiles raw events into retrievable structures; at query time, no LLM is involved. We also tried query-side LLM query expansion (rewriting the question into keywords before retrieval) — the measured gain was net zero, because the write-side understanding had already done the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: No Diffusion for Simple Queries, 79.2 → 80.1
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyosqcpgdd0mkjuw6mxy3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyosqcpgdd0mkjuw6mxy3.png" alt="Adaptive associative depth" width="800" height="1164"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our core retrieval mechanism is called &lt;strong&gt;contextual resonance&lt;/strong&gt;: start from seed nodes, diffuse multi-hop along the relation graph, and decay by tension as you spread. For multi-hop reasoning ("how is what A mentioned related to what B did later?"), this mechanism is essential.&lt;/p&gt;

&lt;p&gt;But the data told us it is a &lt;strong&gt;negative optimization&lt;/strong&gt; for single-hop queries: for a question like "what phone number did the user mention in the third conversation?", the answer is already in the seed node — diffusion just drags irrelevant neighbors into the Top-10 and squeezes the correct answer out. Cat4 (single-hop) was stuck around 60 points for a while.&lt;/p&gt;

&lt;p&gt;The fix was neither to cut diffusion nor to build a separate query engine. It was to &lt;strong&gt;add routing inside the resonance engine&lt;/strong&gt;: adaptively adjust associative depth by query type — Cat4-style queries get max_hops=0 (return seeds only, precise recall), Cat1-style queries get max_hops=4 (full association). Same engine, same interface; diffusion depth becomes a tunable parameter.&lt;/p&gt;

&lt;p&gt;The outward story stays unified: contextual resonance adaptively adjusts associative depth to query complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Full Validation — Squeezing Out the Small-Sample Bubble
&lt;/h2&gt;

&lt;p&gt;All previous iterations ran on 2 sessions (231 questions) because it was fast. After hitting 80.1%, we ran the full 10 sessions (1,536 questions, about an hour). The result: &lt;strong&gt;84.2%&lt;/strong&gt; — the total score rose, but the per-category data underwent a dramatic redistribution:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;2 sessions&lt;/th&gt;
&lt;th&gt;Full 10 sessions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cat1 multi-hop&lt;/td&gt;
&lt;td&gt;67.4%&lt;/td&gt;
&lt;td&gt;80.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cat2 temporal&lt;/td&gt;
&lt;td&gt;93.7%&lt;/td&gt;
&lt;td&gt;86.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cat3 commonsense&lt;/td&gt;
&lt;td&gt;72.7%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;53.3%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cat4 single-hop&lt;/td&gt;
&lt;td&gt;78.1%&lt;/td&gt;
&lt;td&gt;88.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cat3 fell from 72.7% to 53.3% — it has only 92 questions, and with a small sample, the variance of 11 questions is big enough to lie to you at will. This is why we insist on "full-run" as the only trustworthy basis: &lt;strong&gt;anyone can produce pretty numbers on a small sample; the full run is the mirror that reveals the demon.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: From Seed Layer to Final Answer, 90%+ → 84.6%
&lt;/h2&gt;

&lt;p&gt;The full-run data exposed a key fact: &lt;strong&gt;seed-layer recall has reached 90%+, while final-answer recall sits at 84.6%.&lt;/strong&gt; This means the vast majority of correct answers already make it into the candidate set — the problem is no longer "can we find them" but "can we rank them at the front."&lt;/p&gt;

&lt;p&gt;Consider one comparison: for Cat4 single-hop queries, seed-layer recall is &lt;strong&gt;93.2%&lt;/strong&gt;, final recall &lt;strong&gt;88.0%&lt;/strong&gt; — a 5.2-percentage-point gap that is purely ranking-stage loss. The answer is already in the candidate set, yet ranking squeezes it out of the Top-10.&lt;/p&gt;

&lt;p&gt;This gap gives us a very clear signal: &lt;strong&gt;NylonME's retrieval capability has entered the first tier of open-source memory engines&lt;/strong&gt; — a 90%+ seed-layer recall is among the top of systems with public full-run LoCoMo results. The next battlefield is ranking.&lt;/p&gt;

&lt;p&gt;We first tried two "obviously correct" ranking optimizations. &lt;strong&gt;Both failed&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tension floor&lt;/strong&gt; (stop old memories from being squeezed out by decay): zero effect. Because every node in the benchmark is freshly written, its tension is ≈ 1 to begin with — the premise was wrong.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reserved seed quotas&lt;/strong&gt; (hold top-N slots for seeds): zero effect. The 28 seeds nearly fill the activation budget of 32; diffusion nodes barely get in anyway — mechanically a no-op.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What finally worked was &lt;strong&gt;vector reranking&lt;/strong&gt;: after resonance completes, compute cosine similarity between the query vector and every node in the activated set, and re-rank with a 0.5-weight blend with the resonance score. Cat1 multi-hop +2.5 points (80.5 → 83.0); total +0.4.&lt;/p&gt;

&lt;p&gt;Why is the gain limited? Because Cat4's remaining ranking gap is the &lt;strong&gt;ceiling of bge-m3 embedding quality&lt;/strong&gt;: distractor conversations and the evidence share large numbers of entities (both are about travel, both are about fitness), which can't be separated at the embedding level. No ranking algorithm can fix this; it needs a cross-encoder-style reranker or a stronger embedding model.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Failed-Experiments List (Just as Important)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7anma43in4lhnjdcw6dl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7anma43in4lhnjdcw6dl.png" alt="The failed-experiments list" width="800" height="731"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Honesty is a tradition of this blog series. The designs rejected this round:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;LLM query expansion&lt;/strong&gt;: rewriting the question into keywords before retrieval. Net-zero gain — cut.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explicit inter-layer derived edges&lt;/strong&gt; (abstract fact → raw leaf, weight 1.0): measured negative on Cat2/Cat3 — off by default; implicit automatic edges (weight 0.5) are sufficient.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tension-floor ranking&lt;/strong&gt;: premise failed (no old memories in the benchmark).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reserved seed quotas&lt;/strong&gt;: mechanically a no-op.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every failure tightened our understanding of "what this system actually wins on": &lt;strong&gt;write-side understanding depth + dual-channel seed quality + adaptive associative depth.&lt;/strong&gt; Just these three things.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Milestone on the Side: It Started Working for Us
&lt;/h2&gt;

&lt;p&gt;Beyond benchmarking, NylonME has been deployed to a LAN server (192.168.1.5, gRPC :50051, RocksDB on disk) and wired into our own development workflow: Codex resonates for historical decisions at the start of every task via a plugin, and weaves new facts at the end. 29 project-history memories (architecture conclusions, benchmark data, pitfall records) have been woven in — a query like "what are the pitfalls of the DeepSeek model" precisely hits the bug record from that time.&lt;/p&gt;

&lt;p&gt;Using your own system to dig up your own memories is the harshest test of whether it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Industry Coordinates: Where We Stand
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flpiigj0ox1wejcj28b7l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flpiigj0ox1wejcj28b7l.png" alt="Two scores: 90%+ seed layer vs 84.6% final" width="800" height="986"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Among open-source memory engines that publish full-run LoCoMo results, &lt;strong&gt;NylonME's 90%+ seed-layer recall and 84.6% final-answer recall&lt;/strong&gt; place us in the first tier. These are 10-session, 1,536-question, fully reproducible numbers — not a "best result" cherry-picked from small samples.&lt;/p&gt;

&lt;p&gt;The 90%+ seed-layer recall shows the retrieval architecture itself already covers the vast majority of query scenarios; the 84.6% final score shows the ranking stage still has room to improve — but that is a concrete next step, not a vague "lots more work needed."&lt;/p&gt;

&lt;p&gt;The engine and protocol are fully open-sourced (Apache-2.0): &lt;a href="https://github.com/nylon-memory/NylonME" rel="noopener noreferrer"&gt;github.com/nylon-memory/NylonME&lt;/a&gt;. Whether the numbers look good or bad, they will keep being updated on this blog.&lt;/p&gt;

&lt;p&gt;Memory is the last foundation of an Agent. The second layer is done, too.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>rust</category>
      <category>opensource</category>
    </item>
    <item>
      <title>NylonME vs TencentDB-Agent-Memory: A Collision of Two Memory Philosophies</title>
      <dc:creator>Michael Deng</dc:creator>
      <pubDate>Tue, 08 Sep 2026 07:58:19 +0000</pubDate>
      <link>https://dev.to/_24569b2abcc8f3fa4c094/nylonme-vs-tencentdb-agent-memory-a-collision-of-two-memory-philosophies-1ekc</link>
      <guid>https://dev.to/_24569b2abcc8f3fa4c094/nylonme-vs-tencentdb-agent-memory-a-collision-of-two-memory-philosophies-1ekc</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffxc3p0l768tqguzr086m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffxc3p0l768tqguzr086m.png" alt="A collision of two memory philosophies" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;On the same day v2 was finalized, we finished the full 10-session validation run and stacked vector reranking on top: NylonME's official LoCoMo recall@10 moved from 60.2% to &lt;strong&gt;84.6%&lt;/strong&gt;. This article has been rewritten with the latest data and the complete experiment chain.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Opening: Why Compare These Two?
&lt;/h2&gt;

&lt;p&gt;In China's AI Agent memory track, three forces are most worth watching right now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MemOS&lt;/strong&gt; (memory tensors): advised by CAS academicians, nearly ¥100M in angel funding, a Neo4j + Qdrant heavy-stack system, academia-first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TencentDB-Agent-Memory&lt;/strong&gt; (Tencent Cloud): built by a big-tech team, an L0–L3 four-tier progressive architecture + zero-dependency local deployment on SQLite, 9,300+ GitHub stars — the signature work of engineering pragmatism.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NylonME&lt;/strong&gt; (Nylon Memory Engine): what we're building — Rust-native, six-silk memory model, contextual resonance retrieval — an engine that treats memory as the core of the architecture, not a bolt-on for the LLM.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We've already compared the first two in an internal report. This article goes straight to the point: &lt;strong&gt;what is the essential difference between NylonME and TencentDB-Agent-Memory? This time, we bring experimental data.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Architectural Philosophy: What Sits at the Center?
&lt;/h2&gt;

&lt;p&gt;This is the most fundamental divergence.&lt;/p&gt;

&lt;p&gt;The TencentDB-Agent-Memory architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LLM reasoning → context offload → tiered memory storage (L0–L3) → inject before next reasoning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Memory works on the periphery of the LLM. Its core value is "&lt;strong&gt;saving tokens for the LLM&lt;/strong&gt;" — compressing conversation history into L1 Atom facts, L2 Scenario blocks, and L3 Persona profiles, so that only the relevant compressed versions get injected on the next LLM call. A 61%+ token saving (vendor's own measurement) — that capability is real.&lt;/p&gt;

&lt;p&gt;The NylonME architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Input → memory engine (contextual resonance) → LLM reasoning → results written back to memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Memory sits in front of the LLM. The LLM is an inference peripheral of the memory engine — not the other way around.&lt;/p&gt;

&lt;p&gt;One example makes the difference clear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Tencent approach&lt;/strong&gt;: the user asks "what was the outcome of my broadband outage last time?" → the LLM receives the prompt → the LLM calls a memory-retrieval tool → gets back a few L1 Atoms → the LLM summarizes an answer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The NylonME approach&lt;/strong&gt;: user input arrives → the memory engine identifies the user ID → resonates out the complete context network along the relation graph (work order + modem model + technician visit time + emotional intensity + related preferences) → hands the contextual bundle to the LLM → the LLM reasons → the conclusions are written back to memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In one sentence: &lt;strong&gt;in the Tencent architecture, memory is a tool invoked by the LLM; in the NylonME architecture, memory is the context engine that drives reasoning.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6mc5yuw5wqwddhd93ui3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6mc5yuw5wqwddhd93ui3.png" alt="Architecture philosophy comparison" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The Key Experiment: Can the Abstract Layer Replace Raw Memories?
&lt;/h2&gt;

&lt;p&gt;Tencent's L0→L3 model carries an implicit assumption: &lt;strong&gt;information can be compressed tier by tier, and the compressed high-tier representations can replace low-tier details in reasoning.&lt;/strong&gt; The L0 raw conversation is kept mainly for retrospective drill-down; what actually feeds the LLM is the compressed Atom / Scenario / Persona. This is the natural corollary of the "save tokens" goal, and it is the mainstream practice in tiered memory design today.&lt;/p&gt;

&lt;p&gt;We were preparing to do exactly the same. On 2026-08-11, we integrated DeepSeek for LLM weaving and ran a set of ablation experiments on the LoCoMo long-conversation memory benchmark (bge-m3 embeddings, one-session controlled comparison on the same QA set):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Experiment&lt;/th&gt;
&lt;th&gt;Write strategy&lt;/th&gt;
&lt;th&gt;recall@10&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;E1&lt;/td&gt;
&lt;td&gt;Heuristic baseline (single-layer raw memories)&lt;/td&gt;
&lt;td&gt;70.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E2&lt;/td&gt;
&lt;td&gt;LLM per-turn decomposition, replacing heuristics&lt;/td&gt;
&lt;td&gt;70.7% (net zero)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E3&lt;/td&gt;
&lt;td&gt;LLM session-level abstraction, &lt;strong&gt;abstract layer only&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;67.3%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E4&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Dual-layer coexistence&lt;/strong&gt;: leaf layer = verbatim turns + abstract layer = session facts&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;78.7%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;E3 is the most informative. The abstract layer did lift multi-hop reasoning questions (Cat1/Cat3) noticeably — but detail-precision questions (Cat2/Cat4) fell in lockstep, and the overall score dropped 3.4 points. The reason is not complicated: &lt;strong&gt;compression is lossy, and somewhere in the discarded details there is always a piece that happens to be the answer to some question.&lt;/strong&gt; When the user asks "which floor was that restaurant we talked about on?", a session-level summary most likely retains only "the user discussed a restaurant."&lt;/p&gt;

&lt;p&gt;E4 gives the correct solution: &lt;strong&gt;the abstract layer does not replace the leaf layer; both coexist and both participate in retrieval.&lt;/strong&gt; The leaf layer preserves detail precision, the abstract layer supports cross-turn reasoning, and all four QA categories beat the baseline.&lt;/p&gt;

&lt;p&gt;We then pushed this configuration to the full benchmark and added one final ranking optimization — &lt;strong&gt;vector reranking&lt;/strong&gt; (candidates activated by resonance get a second cosine-hybrid scoring pass against the query vector). The complete experiment chain (LoCoMo recall@10):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Starting point&lt;/td&gt;
&lt;td&gt;Lexical retrieval baseline&lt;/td&gt;
&lt;td&gt;47.1% (full 10 sessions)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semantic&lt;/td&gt;
&lt;td&gt;bge-m3 embeddings + lexical/vector dual-seed channels&lt;/td&gt;
&lt;td&gt;60.2% (full 10 sessions)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Retrieval tuning&lt;/td&gt;
&lt;td&gt;Seed fusion + weighted scoring&lt;/td&gt;
&lt;td&gt;70.6% (2-session basis)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dual-layer write&lt;/td&gt;
&lt;td&gt;Leaf layer + abstract layer coexistence&lt;/td&gt;
&lt;td&gt;78.7% (1-session ablation)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adaptive depth&lt;/td&gt;
&lt;td&gt;0 hops for detail questions / 4 hops for reasoning questions&lt;/td&gt;
&lt;td&gt;80.1% (2-session basis)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Same config, full run&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;84.2% (full 10 sessions)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vector rerank&lt;/td&gt;
&lt;td&gt;Query-vector cosine hybrid scoring (weight 0.5)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;84.6% (full 10 sessions — current official figure)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;From 47.1% to 84.6% — every one of the 37.5 points gained has a controlled experiment behind it. The last vector-rerank step looks worth only 0.4 points, but its structure is beautiful: multi-hop reasoning questions (Cat1) rose from 80.5% to 83.0% — graph diffusion recalls more candidates, and vector reranking moves the most on-point ones to the front.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fowbgp3sv8ymlkd7cbo3w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fowbgp3sv8ymlkd7cbo3w.png" alt="The full experiment chain" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This set of experiments also rules out two wrong hypotheses, worth recording:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A tension floor does nothing.&lt;/strong&gt; We had assumed old memories would need a tension floor to guard against decay over-penalizing them — measurements showed the benchmark's nodes are all freshly written, with tension ≈ 1 to begin with. The premise didn't hold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guaranteed seed quotas are a no-op.&lt;/strong&gt; We had assumed vector seeds would need reserved quota slots — measurements showed the 28 seeds nearly fill the diffusion budget of 32, leaving almost no room for diffusion nodes to claim a quota anyway.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And one honest admission about the ceiling: detail-distraction questions (Cat4) remain about 5 points from the theoretical upper bound. Our judgment is that this is the limit of bge-m3 — distractor conversations and the evidence share entities, so they can't be separated at the embedding level. Moving this will take a cross-encoder reranker (e.g., bge-reranker-v2-m3).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Measurement note: 84.6% is recall@10 on the full LoCoMo benchmark of 10 sessions and 1,536 answerable questions; the HNSW index carries ±1.5 points of noise. All evaluation scripts and switches are open-sourced and reproducible. Tencent has not published LoCoMo results, so a direct side-by-side comparison isn't possible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The lesson for tiered memory design: &lt;strong&gt;it's not the tiers that are wrong — it's "tier replacement" that's wrong.&lt;/strong&gt; Raw text must not live only in a retrospective corner; it must stay on the retrieval path. Compressed artifacts are an increment, not a replacement.&lt;/p&gt;

&lt;p&gt;To be fair, Tencent keeps the L0 raw text for drill-down — more prudent than pure replacement. But at the critical step of "what gets fed to the LLM," its retrieval path still centers on the compressed tiers — precisely the pit we fell into with E3.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Memory Representation: Tiered Tree vs Graph Network
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9khy109tcrg8zptti24b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9khy109tcrg8zptti24b.png" alt="Dual-layer write: leaf layer + abstract layer coexistence" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tencent's four-tier model (L0 Conversation → L1 Atom → L2 Scenario → L3 Persona) is currently the most meticulous tiered design in the industry, and its strengths are obvious:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each tier is independently replaceable (swapping L2 doesn't affect L3)&lt;/li&gt;
&lt;li&gt;Data is traceable (an L3 profile can be drilled all the way back to the L0 raw conversation)&lt;/li&gt;
&lt;li&gt;White-box and readable (Markdown / JSONL, human-friendly)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But a structural cost remains: &lt;strong&gt;the tiers are vertical; there are no horizontal associations.&lt;/strong&gt; "The user prefers window seats" and "the user went to Tokyo last month" are two isolated Atoms — the connection between them can only be inferred by the LLM at retrieval time, not built at write time.&lt;/p&gt;

&lt;p&gt;NylonME's six-silk graph model takes a different path. Every memory is woven from six silks (fact, relation, temporal, emotion, frequency, provenance), and memories are &lt;strong&gt;explicitly linked&lt;/strong&gt; to each other through relation silks — not a tiered tree, but a directed, weighted graph:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Broadband outage work order #1024]
    |-- relation silk --&amp;gt; [Modem model: Huawei HG8245]
    |-- relation silk --&amp;gt; [Customer emotion: anxious, 0.8]
    |-- relation silk --&amp;gt; [Preference: latency-sensitive]
    |-- temporal decay --&amp;gt; tension naturally drops after 30 days
    |-- frequency silk --&amp;gt; mentioned 3 times, +0.3 forgetting resistance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This week's architecture upgrade added a second level to this graph: &lt;strong&gt;dual-layer writes.&lt;/strong&gt; Leaf-layer nodes store verbatim turns; abstract-layer nodes store LLM-distilled session-level facts. Both coexist in the same graph and both participate in recall — this is exactly the productization of the Section 2 experiment conclusion. The engine has a built-in &lt;code&gt;WeaveSession&lt;/code&gt; RPC: when a session ends, it automatically completes the full flow of "write each turn to the leaf layer → LLM abstraction into the abstract layer → conflict detection."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In one sentence: the Tencent approach uses the LLM's reasoning to compensate for the storage layer's missing relations; the NylonME approach builds relations into the storage layer and lets raw text and abstractions coexist there. The LLM receives an already-organized, dual-granularity context network.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Where the LLM Sits: Compression Pipeline vs In-Engine Understanding
&lt;/h2&gt;

&lt;p&gt;Both systems use LLMs to process memory, but the LLM stands in a completely different place.&lt;/p&gt;

&lt;p&gt;Tencent's LLM is inside a &lt;strong&gt;compression pipeline&lt;/strong&gt;: it symbolically compresses conversations into Atom / Scenario / Persona (including compressing process descriptions into Mermaid syntax), with the goal of reducing token consumption.&lt;/p&gt;

&lt;p&gt;NylonME's LLM does three things &lt;strong&gt;inside the engine&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Weaving decomposition&lt;/strong&gt;: at write time, it extracts structured six-silk elements from raw events (fact, relations, emotional valence and intensity, confidence), replacing the early heuristic rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conflict detection&lt;/strong&gt;: when a new memory is written, the engine first uses HNSW under a lock to find the top-4 candidates with the same subject, then lets the LLM judge — outside the lock — whether they contradict; contradicting nodes are returned with the response — "the user said last week they don't eat spicy food, this week they can't live without it" won't be silently overwritten.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session-level abstraction&lt;/strong&gt;: the abstract layer of dual-layer writes, distilled by the LLM when a session ends.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The key design constraint: &lt;strong&gt;the LLM is an enhancement, not a dependency.&lt;/strong&gt; When the LLM endpoint is unavailable, the engine automatically falls back to heuristic decomposition and rule-based detection; the core read/write path is unaffected. We don't believe a memory engine should go down because an LLM went down.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Retrieval: Hybrid Recall vs Contextual Resonance
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzk3fsxiky90u5qk42ap0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzk3fsxiky90u5qk42ap0.png" alt="Retrieval mechanism comparison" width="799" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;TencentDB-Agent-Memory&lt;/th&gt;
&lt;th&gt;NylonME&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Retrieval entry&lt;/td&gt;
&lt;td&gt;Keyword / vector / hybrid (RRF fusion)&lt;/td&gt;
&lt;td&gt;Lexical + vector dual-seed channels&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recall strategy&lt;/td&gt;
&lt;td&gt;BM25 + embedding → Top-K&lt;/td&gt;
&lt;td&gt;Seed nodes → graph diffusion → tension ranking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diffusion depth&lt;/td&gt;
&lt;td&gt;No graph structure, N/A&lt;/td&gt;
&lt;td&gt;Adaptive by question type (0–4 hops)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Candidate reranking&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Query-vector cosine rerank (optional, weight tunable)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Association&lt;/td&gt;
&lt;td&gt;Inferred by the LLM after retrieval&lt;/td&gt;
&lt;td&gt;Pre-built into the graph at write time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forgetting&lt;/td&gt;
&lt;td&gt;None (or manual deletion)&lt;/td&gt;
&lt;td&gt;Exponential decay T(t) = T0·e^(−λt)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Emotional weighting&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Emotion-silk intensity weighting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frequency promotion&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;High-frequency memories gain forgetting resistance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Tencent's BM25 + vector + RRF is the industry-standard approach — mature and reliable. But two old questions remain unanswered:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;How do you recall memories "associated with the current context but whose keys don't match"?&lt;/strong&gt; The user asks "my internet has been lagging lately" — if no L1 Atom contains the keywords "internet" or "lag", and vector similarity misses too, that valuable outage memory sinks without a trace. NylonME's graph diffusion can: the earlier work order is linked via relation silks to a "latency-sensitive" tag; "laggy internet" lexically hits "latency", activates the tag, and diffuses along the graph to the work order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How do you rank "which of the ten relevant memories matters most"?&lt;/strong&gt; Tencent relies on the fused BM25 + cosine similarity score. NylonME ranks in three stages: tension scoring (encoding temporal decay, emotional intensity, frequency bonus) → adaptive diffusion by question type → query-vector cosine rerank. That last stage was added this week, specifically to fix "graph diffusion recalls plenty but the most on-point result isn't ranked first" — a measured +2.5 points on Cat1 multi-hop reasoning questions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Adaptive associative depth&lt;/strong&gt; comes from a hard-learned lesson: running multi-hop diffusion on every question hurts detail-precision questions (diffusion introduces noise). Detail questions now get depth 0 (only direct seed associations), reasoning questions up to 4 hops. Retrieval strategy should vary with question type — something we haven't yet seen in any comparable open-source project.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Tech Stack and Deployment: Python vs Rust
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;TencentDB-Agent-Memory&lt;/th&gt;
&lt;th&gt;NylonME&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Core language&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;Rust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local storage&lt;/td&gt;
&lt;td&gt;SQLite + sqlite-vec (zero-dependency default)&lt;/td&gt;
&lt;td&gt;Embedded CSR + HNSW + WAL (in-process)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vector index&lt;/td&gt;
&lt;td&gt;sqlite-vec / Tencent Cloud VectorDB&lt;/td&gt;
&lt;td&gt;Self-built HNSW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graph storage&lt;/td&gt;
&lt;td&gt;None (pure tiered index)&lt;/td&gt;
&lt;td&gt;Self-built CSR compressed graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;pip install (lightweight)&lt;/td&gt;
&lt;td&gt;Single binary (even lighter)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Write TPS&lt;/td&gt;
&lt;td&gt;Not disclosed&lt;/td&gt;
&lt;td&gt;12,494 (WAL group commit, measured at 32-way concurrency)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory (1M nodes + 10M edges)&lt;/td&gt;
&lt;td&gt;N/A (no graph structure)&lt;/td&gt;
&lt;td&gt;720 MB real text / 432 MB minimal basis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud service&lt;/td&gt;
&lt;td&gt;Tencent Cloud VectorDB (optional)&lt;/td&gt;
&lt;td&gt;On the roadmap&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Tencent's zero-dependency design is very clever — one pip install and it runs; SQLite is bundled, no database to install. This is a big reason its GitHub stars shot past 9,300.&lt;/p&gt;

&lt;p&gt;NylonME went to the other extreme: a Rust kernel, CSR graph structure + HNSW vector index all embedded in-process, compiled into a single binary — even lighter than pip install. The trade-off is development speed and ecosystem richness far below Python's.&lt;/p&gt;

&lt;p&gt;There's no absolute "better" here — only what fits your stack: Python full-stack teams integrating quickly should pick the Tencent option; teams with hard requirements on memory, latency, and throughput who are willing to tangle with Rust will find NylonME the better substrate.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Current State and Differences at a Glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;TencentDB-Agent-Memory&lt;/th&gt;
&lt;th&gt;NylonME&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Core language&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;Rust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory model&lt;/td&gt;
&lt;td&gt;L0–L3 four-tier progressive&lt;/td&gt;
&lt;td&gt;Six-silk graph network + dual-layer writes + tension decay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Relation storage&lt;/td&gt;
&lt;td&gt;None (tiered index)&lt;/td&gt;
&lt;td&gt;CSR directed weighted graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLM's role&lt;/td&gt;
&lt;td&gt;Compression pipeline (save tokens)&lt;/td&gt;
&lt;td&gt;Weaving decomposition + conflict detection + session abstraction (with fallback)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Retrieval&lt;/td&gt;
&lt;td&gt;BM25 + Vector + RRF&lt;/td&gt;
&lt;td&gt;Contextual resonance (dual seeds + graph diffusion + tension ranking + vector rerank)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Associative depth&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Adaptive 0–4 hops by question type&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forgetting&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Adaptive exponential decay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Emotion modeling&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Emotion silks + intensity weighting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team memory&lt;/td&gt;
&lt;td&gt;Yes (Team Memory)&lt;/td&gt;
&lt;td&gt;On the roadmap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;pip install (zero-dependency SQLite)&lt;/td&gt;
&lt;td&gt;Single binary (zero-dependency)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Write TPS&lt;/td&gt;
&lt;td&gt;Not disclosed&lt;/td&gt;
&lt;td&gt;12,494&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoCoMo recall@10&lt;/td&gt;
&lt;td&gt;Not disclosed&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;84.6% (full 10 sessions: dual-layer writes + adaptive depth + vector rerank)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub stars&lt;/td&gt;
&lt;td&gt;~9,300+ (Aug 2026 snapshot)&lt;/td&gt;
&lt;td&gt;New project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud service&lt;/td&gt;
&lt;td&gt;Tencent Cloud VectorDB (optional)&lt;/td&gt;
&lt;td&gt;On the roadmap&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Final Words
&lt;/h2&gt;

&lt;p&gt;Putting the two side by side is not about declaring a winner. Frankly, the Tencent team is still far more mature in engineering execution than we are — the four-tier model, symbolic compression, white-box traceability, Team Memory: every one of these is a battle-tested design. The 9,300 stars didn't come from nowhere.&lt;/p&gt;

&lt;p&gt;But this week's experiments turned the closing line of our first version into data. Back then we said: "there are always things compression loses, and what gets lost happens to be critical information in some context." At the time, that was intuition. Now it's an experiment: &lt;strong&gt;keep only the abstract layer, and recall drops 3.4 points; let both layers coexist, and all four QA categories rise; add adaptive depth and vector reranking, and the full benchmark reaches 84.6%.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Memory should not be a mere accessory to the LLM. A compression pipeline lets the LLM read summaries ever more cheaply, but what an agent truly needs is a memory system that associates, forgets, detects contradictions, and moves freely between raw text and abstraction.&lt;/p&gt;

&lt;p&gt;The two paths will ultimately lead to two different product shapes. Which one is right — time and the market will tell.&lt;/p&gt;

&lt;p&gt;NylonME is open-sourced at &lt;a href="https://github.com/nylon-memory/NylonME" rel="noopener noreferrer"&gt;github.com/nylon-memory/NylonME&lt;/a&gt;, Apache-2.0, evaluation scripts included in the repo. Criticism is welcome — and reproductions even more so.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is Part 4 (v3, 2026-08-12) of the NylonME technical blog series. TencentDB-Agent-Memory data in this article comes from its public GitHub repository and official articles (Aug 2026 snapshot); performance figures are vendor self-tests, not independently reproduced. All NylonME experiment configurations and measurement bases are itemized in the article.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>database</category>
      <category>llm</category>
      <category>rust</category>
    </item>
    <item>
      <title>The Second Half of AI: Memory Engines Matter as Much as Large Models</title>
      <dc:creator>Michael Deng</dc:creator>
      <pubDate>Tue, 08 Sep 2026 07:55:49 +0000</pubDate>
      <link>https://dev.to/_24569b2abcc8f3fa4c094/the-second-half-of-ai-memory-engines-matter-as-much-as-large-models-2h1j</link>
      <guid>https://dev.to/_24569b2abcc8f3fa4c094/the-second-half-of-ai-memory-engines-matter-as-much-as-large-models-2h1j</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F69ac2hbr1osxilc04lti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F69ac2hbr1osxilc04lti.png" alt="The second half of AI: dual-wheel drive" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Everyone Talks About LLMs — But AI Is Not Just LLMs
&lt;/h2&gt;

&lt;p&gt;There's a funny phenomenon in the AI world of 2026: when people talk about AI, they're actually talking about large language models. And when they talk about large language models, they're actually talking about OpenAI, Kimi, DeepSeek — as if the history of AI were nothing more than the product release notes of a handful of companies.&lt;/p&gt;

&lt;p&gt;Frankly, that framing is far too narrow.&lt;/p&gt;

&lt;p&gt;AI is not equal to LLMs, and certainly not equal to OpenAI, Kimi, or DeepSeek. A large language model is one pillar of the AI edifice — an important one, but neither the only one nor the foundation. Treating "LLM" as a synonym for "AI" is like treating an engine as the whole car, a GPU as the whole computer, or the heart as the whole human body. This cognitive bias is inflicting enormous industry costs: legions of teams try to deliver AI Agents with "model selection + prompt engineering + tool-chain tuning," only to discover that what they deliver —&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can't remember who the user is&lt;/li&gt;
&lt;li&gt;Can't remember where the last conversation left off&lt;/li&gt;
&lt;li&gt;Can't remember the preferences the user stated&lt;/li&gt;
&lt;li&gt;Treats every turn like a first meeting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkgq6ciq2dyelhuhdglaa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkgq6ciq2dyelhuhdglaa.png" alt="AI is not just LLMs" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is not because the model isn't big enough. GPT-5 wouldn't fix it either. Because this is not a model problem — it's an architecture problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Bottleneck of AGI: Not Reasoning, but Long-Term Memory
&lt;/h2&gt;

&lt;p&gt;Let's look at a simple comparison.&lt;/p&gt;

&lt;p&gt;Today's strongest reasoning models — Claude, GPT-5, DeepSeek-V3 — already outperform most humans at math competitions, code generation, and logical reasoning. Judged on "reasoning" alone, large models have touched the threshold of AGI.&lt;/p&gt;

&lt;p&gt;But have you noticed something odd? These models behave like geniuses in a chat box, yet the moment you place them in a real-world scenario that requires sustained interaction — customer service, personal assistants, tutoring, medical follow-ups — they immediately degrade into a forgetful intern.&lt;/p&gt;

&lt;p&gt;Where's the gap?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Long-term memory.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Human intelligence has never been an "island of reasoning." You wake up remembering yesterday's conversation with a colleague, the conclusion of last Friday's meeting, that your child is allergic to peanuts, that one client of yours prefers phone calls after 3 p.m. These memories aren't temporarily "retrieved" from a hard drive each time they're needed — they stay continuously active in the background, automatically building associations, automatically weighting their salience, automatically surfacing when you need them.&lt;/p&gt;

&lt;p&gt;Large models have no such layer. Every round of LLM reasoning is the dawn of a brand-new epoch. The context window is its only temporary sticky note — and when the conversation closes, the note is torn up.&lt;/p&gt;

&lt;p&gt;So the true path to AGI is not blocked by reasoning — we're already very good at reasoning. It's blocked by &lt;strong&gt;how to make AI remember like humans do&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Memory needs &lt;strong&gt;structure&lt;/strong&gt; — not a loose pile of text blocks, but a network with strands, graphs, and associations.&lt;/li&gt;
&lt;li&gt;Memory needs &lt;strong&gt;evolution&lt;/strong&gt; — not "write once, never change," but decaying with time, weighted by emotion, promoted by frequency.&lt;/li&gt;
&lt;li&gt;Memory needs &lt;strong&gt;resonance&lt;/strong&gt; — not one-sided retrieval by query, but automatic surfacing triggered by context.&lt;/li&gt;
&lt;li&gt;Memory needs &lt;strong&gt;forgetting&lt;/strong&gt; — not remembering everything, but forgetting what should be forgotten, letting the important float up.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Of these, the LLM itself can do exactly none.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Dividing Line of the Second Half: Memory Engines Will Decide Which AI Applications Live or Die
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhzrpaymslsao8b2gu2z4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhzrpaymslsao8b2gu2z4.png" alt="First half vs. second half" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'll make a prediction: &lt;strong&gt;before the end of 2026, the entire industry will collectively realize this problem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Why now? Because the low-hanging fruit of the first half has been picked.&lt;/p&gt;

&lt;p&gt;What was the first half? It was the paradigm of "give me a prompt, I'll give you an answer." Chatbots, AI search, code completion, document summarization — none of these scenarios need memory. Every interaction is independent, stateless, and parallelizable. Large models thrive in this paradigm, because their capability boundary happens to cover exactly these scenarios.&lt;/p&gt;

&lt;p&gt;But the second half is Agents. The defining feature of an Agent is not stronger reasoning — it's &lt;strong&gt;continuity and personalization&lt;/strong&gt;: it can remember you, accumulate experience, and grow through repeated interaction. After an Agent has worked with you for a week, a month, a year, it should understand you better than on day one — not be dumber than on day one (because the context window is stuffed with stale garbage).&lt;/p&gt;

&lt;p&gt;The dividing line of this second half is the memory engine. Whoever builds the memory layer first will see their Agents actually ship. Whoever keeps their Agents at "in-session reasoning" will keep watching their deliveries blow up.&lt;/p&gt;

&lt;p&gt;By the end of this year, when the first wave of Agent products propped up by memory engines begins to deliver — while the vast majority of teams are still grinding on prompt tuning — this conclusion will be brutally validated by the market.&lt;/p&gt;




&lt;h2&gt;
  
  
  NylonME: We're Building the Infrastructure for AI's Second Half
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F00eta70lep2uciuanhph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F00eta70lep2uciuanhph.png" alt="NylonME infrastructure" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is NylonME's positioning.&lt;/p&gt;

&lt;p&gt;We don't build large models. We don't build chatbots. We don't build prompt-optimization tools.&lt;/p&gt;

&lt;p&gt;What we build is a &lt;strong&gt;memory engine&lt;/strong&gt; — the memory-layer infrastructure for AI Agents.&lt;/p&gt;

&lt;p&gt;Specifically, NylonME provides a complete implementation of a human-like memory system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Six-Silk Memory Model&lt;/strong&gt;: every memory is woven from six silks — fact, emotion, temporal, relation, confidence, frequency. Not a text block, not a vector — a structured information unit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contextual Resonance Retrieval&lt;/strong&gt;: retrieval is not "query -&amp;gt; embedding -&amp;gt; Top-K." It's multi-hop diffusion from seed nodes along the relation graph, ranked by tension decay. Tension is jointly determined by the Ebbinghaus forgetting curve, emotional intensity, and mention frequency — mimicking the brain's associative circuits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic weaving and evolution&lt;/strong&gt;: LLM reasoning results are automatically decomposed into six-silk fields and written into the memory network. Decay, index updates, and conflict detection run continuously in the background. Memory is growing — not merely being queried.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open source + protocol first&lt;/strong&gt;: the Rust engine is open-sourced under Apache-2.0, the proto3 interface contract is public, and the evaluation pipeline is fully open.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So far, we have completed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSR graph engine + self-built HNSW vector index; a single node holds a million nodes in under 300 MB of memory&lt;/li&gt;
&lt;li&gt;WAL group commit: write TPS from 452 to &lt;strong&gt;12,494&lt;/strong&gt; (27.6x)&lt;/li&gt;
&lt;li&gt;Embedded semantic channel (bge-m3): LoCoMo semantic recall@10 = &lt;strong&gt;60.2%&lt;/strong&gt; (lexical baseline 47.1%)&lt;/li&gt;
&lt;li&gt;Relation-silk inverted index: edge weaving dropped from O(N) full-graph scans to index-based candidate lookup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All code is at &lt;a href="https://github.com/nylon-memory/NylonME" rel="noopener noreferrer"&gt;github.com/nylon-memory/NylonME&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Words
&lt;/h2&gt;

&lt;p&gt;In the second half of AI, memory engines matter as much as large models. That statement may sound a bit ahead of the curve today, but I believe it will be common consensus by year-end.&lt;/p&gt;

&lt;p&gt;AGI is not a bigger LLM. AGI is a system that understands you, remembers you, and happens to recall exactly what you need when you need it. The large model handles "reasoning"; the memory engine handles "remembering." Both wheels must turn together for the car to move.&lt;/p&gt;

&lt;p&gt;We chose to start with the memory wheel.&lt;/p&gt;

&lt;p&gt;Come take a look: &lt;a href="https://github.com/nylon-memory/NylonME" rel="noopener noreferrer"&gt;github.com/nylon-memory/NylonME&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is Part 3 of the NylonME technical blog series. Part 1, "Building a 'Nylon' for AI Agents: Memory System Phase 1 Complete, with Real Benchmarks," and Part 2, "Why Your AI Agent Can't Deliver — The Architecture Was Wrong from Day One," are in the same directory.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>machinelearning</category>
      <category>rust</category>
    </item>
    <item>
      <title>NylonME AI Memory Engine: Why Your AI Agent Can't Deliver — The Architecture Was Wrong from Day One</title>
      <dc:creator>Michael Deng</dc:creator>
      <pubDate>Tue, 08 Sep 2026 07:52:49 +0000</pubDate>
      <link>https://dev.to/_24569b2abcc8f3fa4c094/nylonme-ai-memory-engine-why-your-ai-agent-cant-deliver-the-architecture-was-wrong-from-day-one-hca</link>
      <guid>https://dev.to/_24569b2abcc8f3fa4c094/nylonme-ai-memory-engine-why-your-ai-agent-cant-deliver-the-architecture-was-wrong-from-day-one-hca</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz3eoe1sg22i1tjr2w3gh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz3eoe1sg22i1tjr2w3gh.png" alt="NylonME Memory Engine concept" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  An Awkward Reality
&lt;/h2&gt;

&lt;p&gt;In 2025, nearly every tech company was building AI Agents. In 2026, nearly every one of them is struggling.&lt;/p&gt;

&lt;p&gt;Not because the demos don't work — the demos are all beautiful. It's because they &lt;strong&gt;can't deliver&lt;/strong&gt;. When the customer runs acceptance tests, the Agent either answers the wrong question, asks the same question over and over, or completely forgets what the customer said five minutes ago. The most deadly part: the customer can't articulate what's wrong — they just feel "this thing isn't usable."&lt;/p&gt;

&lt;p&gt;Take AI customer service as an example. A customer calls in: "I reported a broadband outage last month, a technician came and replaced the optical modem, and now it's down again." A competent AI agent should immediately pull up last month's work order, confirm the modem model, and make a diagnosis based on the current symptoms. But what most AI customer service agents actually say is — "Hello, how may I help you?"&lt;/p&gt;

&lt;p&gt;It simply doesn't remember anything from last month.&lt;/p&gt;

&lt;p&gt;This is not a capability problem of any particular model. This is an &lt;strong&gt;architecture problem&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Nature of Intelligence Has Been Misunderstood
&lt;/h2&gt;

&lt;p&gt;Over the past two years, the entire industry has fallen into a collective cognitive bias: &lt;strong&gt;equating large language models with AI, and AI with intelligence.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That equation is dead wrong.&lt;/p&gt;

&lt;p&gt;What is a large language model? It's an &lt;strong&gt;inference engine&lt;/strong&gt;. It takes tokens in and puts tokens out, doing probabilistic reasoning in parameter space. It doesn't store, doesn't remember, doesn't accumulate. Every call is a brand-new computation; the context window is expensive scratch paper that gets thrown away the moment the conversation ends.&lt;/p&gt;

&lt;p&gt;But intelligence is far more than inference. Let's briefly break down human intelligence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reasoning&lt;/strong&gt;: logical operations, causal inference, planning — this is the layer LLMs are best at.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory&lt;/strong&gt;: the storage, organization, and retrieval of experience — a layer LLMs simply do not have.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intuitive emergence&lt;/strong&gt;: pattern recognition formed automatically from vast experience in high-dimensional space — it requires memory as its substrate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emotional context&lt;/strong&gt;: valence judgment, emotional tagging, social-context awareness — it requires memory as its frame of reference.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzap5cqjg3kydccoxwqhl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzap5cqjg3kydccoxwqhl.png" alt="The four layers of intelligence" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See the problem? The LLM-centric architecture treats reasoning as the entirety of intelligence, and outsources the other three layers to "stuffing history into the context window" and "attaching a vector database for semantic search." These two substitutes are, in essence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stuffing the context&lt;/strong&gt;: cost grows linearly with conversation turns, and the information is merely "stuffed in" — not organized, not connected, not forgotten.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector search&lt;/strong&gt;: it can only answer "which memories look similar to the current query," not "which memories are relevant to the current context," let alone handle temporal decay and emotional weighting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is like a person who has logical reasoning but no memory — he can solve calculus, but he can't remember his own name, can't remember who he met yesterday, can't remember what made him happy or what made him wary. Would you put such a person on a customer service desk?&lt;/p&gt;

&lt;p&gt;Yet that is exactly what the entire industry is doing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why the LLM-Centric Architecture Is Doomed to Fail
&lt;/h2&gt;

&lt;p&gt;Let's review the mainstream AI Agent stack today:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Input -&amp;gt; Preprocessing -&amp;gt; LLM (Reasoning) -&amp;gt; Tool Calls -&amp;gt; Postprocessing -&amp;gt; Output
                                    |
                            Vector DB (Semantic Search)
                                    |
                            Chat History (Context Injection)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1bad7i2sh4xm9qbx99qi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1bad7i2sh4xm9qbx99qi.png" alt="Architecture comparison" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This architecture has a fundamental flaw: &lt;strong&gt;the LLM is the center, and memory is a bolt-on accessory.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What does "bolt-on" mean? It means the memory module and the reasoning module are loosely coupled. When the LLM calls on memory, it "queries" an external system, gets a few results, stuffs them into the prompt, and goes back to reasoning. Between calls, memory is static — it doesn't update automatically because of this conversation, doesn't decay with time, doesn't reorganize itself when new information arrives. It's a passive retrieval vault.&lt;/p&gt;

&lt;p&gt;This produces the chronic diseases shared by all AI Agent products:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Forgets people&lt;/strong&gt;: the conversation ends, user information resets to zero. Every meeting starts from scratch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forgets events&lt;/strong&gt;: work order history, preference records, interaction trails — all "sink to the bottom" of the vector store, never to be retrieved again unless the query happens to hit the right keywords.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never grows&lt;/strong&gt;: the Agent is exactly as dumb on its ten-thousandth use as on its first, because its memory isn't growing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never reflects&lt;/strong&gt;: a memory is wrong, outdated, or contradicts another one — the Agent doesn't know, and has no ability to fix it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A customer pays a hefty price for a system that can't even match a human intern (an intern at least remembers what the boss asked for last week). Why would they sign off on that?&lt;/p&gt;




&lt;h2&gt;
  
  
  Memory Should Be the Core of the Architecture
&lt;/h2&gt;

&lt;p&gt;The correct architecture should be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Input -&amp;gt; Memory Engine (Contextual Resonance) -&amp;gt; LLM (Reasoning) -&amp;gt; Tool Calls -&amp;gt; Output
                    |                                |
            Memory Weaving + Update            Results written back to memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The memory engine is the center; the LLM is an inference peripheral of the memory engine.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This inversion is fundamental:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;User input passes through the memory engine first&lt;/strong&gt;: instead of calling the LLM right away, the system first searches memory for "who is this user, where did we leave off last time, which historical memories are connected to the current context." What the LLM receives is not raw input, but &lt;strong&gt;input wrapped in memory context&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reasoning results are written back to memory&lt;/strong&gt;: the LLM's output is not the end. Important conclusions, user preferences, and key facts from this interaction are automatically woven by the memory engine into structured memory strands and stored in the memory network.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory keeps evolving in the background&lt;/strong&gt;: temporal decay, emotional weighting, relation index updates, conflict detection — all of these run automatically in the background, without the LLM's involvement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;By the next interaction, memory is already different&lt;/strong&gt;: the Agent is genuinely "accumulating experience."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Back to the AI customer service example: the customer calls a second time, and within 3 ms the memory engine has done all of the following — recognized the customer ID, pulled up the complete memory network of last month's broadband outage (work order contents + modem model + technician visit time + the customer's emotional intensity at the time), diffused along the relation graph and discovered a preference memory that "this customer is sensitive to network latency," and handed this contextual bundle to the LLM. The LLM's first sentence is: "Hello Mr. Wang — the optical modem we replaced in March is down again? Let me check the current status of the base station covering your neighborhood first."&lt;/p&gt;

&lt;p&gt;That is what customers will pay big money for.&lt;/p&gt;




&lt;h2&gt;
  
  
  NylonME: A Memory Engine Born for Agents
&lt;/h2&gt;

&lt;p&gt;This is exactly what we're building.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NylonME&lt;/strong&gt; (Nylon Memory Engine) is an open-source, Rust-native memory engine that provides AI Agents with a human-like memory layer.&lt;/p&gt;

&lt;p&gt;Its core design philosophy is exactly what we said above — memory should not be bolted on; memory should be the core of the architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Six-Silk Memory Model
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr94svgnjn7m7qxtydk4y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr94svgnjn7m7qxtydk4y.png" alt="The Six-Silk Memory Model" width="800" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In NylonME, every memory is not a text block, not a vector, but &lt;strong&gt;a strand twisted from six "silks"&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Silk&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;What it's for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fact Silk&lt;/td&gt;
&lt;td&gt;The content of the memory itself&lt;/td&gt;
&lt;td&gt;Storage and display&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Emotion Silk&lt;/td&gt;
&lt;td&gt;Valence (positive/negative) and intensity&lt;/td&gt;
&lt;td&gt;Emotion-weighted retrieval; high-emotion memories resist forgetting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Temporal Silk&lt;/td&gt;
&lt;td&gt;Creation time and decay rate λ&lt;/td&gt;
&lt;td&gt;Ebbinghaus exponential decay; old memories sink naturally&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Relation Silk&lt;/td&gt;
&lt;td&gt;Entity tags and cross-memory links&lt;/td&gt;
&lt;td&gt;Graph diffusion — one memory hooks a chain of related ones&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confidence Silk&lt;/td&gt;
&lt;td&gt;Reliability&lt;/td&gt;
&lt;td&gt;Low-confidence memories weigh less in resonance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frequency Silk&lt;/td&gt;
&lt;td&gt;Mention count&lt;/td&gt;
&lt;td&gt;High-frequency memories get promoted, resisting decay&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Contextual Resonance Retrieval
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff9c2w4dl1xyfvqf1ndh6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff9c2w4dl1xyfvqf1ndh6.png" alt="Contextual Resonance Retrieval" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Retrieval doesn't follow "query -&amp;gt; embedding -&amp;gt; Top-K." It follows &lt;strong&gt;Contextual Resonance&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start from a set of seed nodes (dual-channel: lexical match + vector match)&lt;/li&gt;
&lt;li&gt;Multi-hop diffusion along the relation graph&lt;/li&gt;
&lt;li&gt;At each step, decay by the &lt;strong&gt;tension formula&lt;/strong&gt;: T(t) = T0 * e^(-λt) * (1 + alpha * freq) * emotional intensity&lt;/li&gt;
&lt;li&gt;Branches whose tension drops below the threshold are pruned automatically&lt;/li&gt;
&lt;li&gt;Return results ranked by accumulated tension&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This mimics human associative recall: a cue doesn't trigger the memories that "look most similar" — it triggers the chain with the &lt;strong&gt;highest tension in the current context&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Engineering Choices
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rust engine&lt;/strong&gt; (open source under Apache-2.0): CSR-compressed graph structure + self-built HNSW vector index + WAL persistence; a single node handles millions of nodes in under 300 MB of memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embedded semantic channel&lt;/strong&gt;: works with any OpenAI-compatible embedding endpoint (local Ollama bge-m3 / cloud), fusing lexical and vector dual-channel seed recall.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM weaving&lt;/strong&gt;: DeepSeek-driven automatic silk-splitting and conflict detection — from raw event to structured six-silk fields, fully automatic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol first&lt;/strong&gt;: proto3 defines the interface contract; engine and gateway are decoupled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open evaluation&lt;/strong&gt;: fully benchmarked on the public LoCoMo benchmark — semantic channel recall@10 = &lt;strong&gt;60.2%&lt;/strong&gt; (lexical baseline 47.1%, +13.1pp), with the entire data pipeline open-sourced.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What We've Done (Phase 1 &amp;amp; 2 Complete)
&lt;/h2&gt;

&lt;p&gt;As of August 2026, the public NylonME repository already includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A complete Rust workspace: graph storage engine + HNSW vector index + embedding module + WAL group commit&lt;/li&gt;
&lt;li&gt;Semantic retrieval channel: Ollama bge-m3 / any OpenAI-compatible endpoint&lt;/li&gt;
&lt;li&gt;Full LoCoMo evaluation pipeline: 10 sessions, 1536 QA pairs, lexical 47.1% -&amp;gt; semantic 60.2%&lt;/li&gt;
&lt;li&gt;Write TPS: 452 -&amp;gt; &lt;strong&gt;12,494&lt;/strong&gt; (WAL group commit + inverted index optimization, 27.6x)&lt;/li&gt;
&lt;li&gt;Relation-silk inverted index: edge weaving dropped from O(N) full-graph scans to index-based candidate lookup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All code is open-sourced at &lt;a href="https://github.com/nylon-memory/NylonME" rel="noopener noreferrer"&gt;github.com/nylon-memory/NylonME&lt;/a&gt; under Apache-2.0.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing: Think in a Different Direction
&lt;/h2&gt;

&lt;p&gt;If your AI Agent project is stuck in delivery hell, stop and ask yourself one question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In your system, is memory the first-class citizen — or is the LLM?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the answer is the LLM — you may need to re-examine the foundation of your architecture. A large model is the engine of this AI wave, but an engine is not the whole car. A race car without a steering wheel, no matter how fast, will never reach its destination.&lt;/p&gt;

&lt;p&gt;Memory is the steering wheel of AI Agents.&lt;/p&gt;

&lt;p&gt;NylonME has just gotten started — the foundation is poured. Come take a look: &lt;a href="https://github.com/nylon-memory/NylonME" rel="noopener noreferrer"&gt;github.com/nylon-memory/NylonME&lt;/a&gt;. Criticism, issues, and code contributions are all welcome.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is Part 2 of the NylonME technical blog series. Part 1, "Building a 'Nylon' for AI Agents: Memory System Phase 1 Complete, with Real Benchmarks," is in the same directory.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>llm</category>
      <category>rust</category>
    </item>
  </channel>
</rss>
