{"slug": "show-hn-spomory-graph-based-mcp-memory-with-an-rl-trained-forgetting-policy", "title": "Show HN: Spomory – graph-based MCP memory with an RL-trained forgetting policy", "summary": "A developer released Spomory, a graph-based memory server built on the Model Context Protocol (MCP) that shares one memory across 24 AI platforms, including Claude Desktop, Cursor, Codex CLI and Doubao. Spomory extracts text into (subject, predicate, object) triples, merges them into a dual-layer entity-and-relation graph, and retrieves context by matching queries against triples and running personalized PageRank for multi-hop recall; a GRPO-trained policy rather than a hardcoded rule decides whether an incoming fact is added, merged or retired. The local-first version stores the memory graph in an encrypted SQLite file on the user's own disk with no account required, and the project publishes its methodology and benchmark results on GitHub.", "body_md": "# One memory, any AI you use.\n\nNever start over — A shared memory across every AI you use. Say it once in any AI. Come back tomorrow in a different one. Your context follows you, wherever you work.\n\n24 AI Platforms verified end-to-end.\n\nWorks inside the AI tools you already use\n\n[See the full list and exact setup →](https://spomory.yliuai.com/platforms)\n\n## Every AI tool switch means starting over.\n\nSwitch AI tools, start a new chat, or just come back tomorrow, and you're explaining who you are, what you're working on, and what you already said — all over again.\n\nBrief your AI on the project\n\nRepeat it in the next chat, the next AI tool, the next model\n\nLose time every session to context you've already given\n\nThe fix isn't a smarter AI. It's structural: one memory every AI tool can reach.\n\n## Say it once. Every AI already knows.\n\nYou say it once:\n\nI'm the lead engineer on the warehouse-automation project at Acme Robotics. I report to Daniel Chen.\n\nNext session, a different app:\n\nWho do I report to on the Acme project?\n\nDaniel Chen — you mentioned this earlier, in Claude Desktop.\n\n Illustrative example, not a screenshot — but the underlying connection is real: write from one client, read from another, verified across 24 clients on the Platforms page. [See it on the Platforms page →](https://spomory.yliuai.com/platforms) \n\n## Doesn't Claude or ChatGPT already have memory?\n\nYes — and it's gotten genuinely good. But it's built to remember you inside that one app. Say something in ChatGPT, and Claude never hears about it. Switch to Cursor, Doubao, or any of the other clients Spomory connects to, and you're starting over — because built-in memory doesn't leave the app it was built into.\n\n## How it actually works\n\nThe same example, through all four stages — write, connect, recall, manage — running automatically, every time, from any client.\n\n### You tell it something. It becomes structured facts.\n\nadd_memory sends your text through an LLM that extracts it into (subject, predicate, object) triples — not a raw text blob, not just an embedding.\n\nMaria joined Acme Robotics as lead engineer. She reports to Daniel Chen.\n\nMaria —works_at→ Acme Robotics\n\nMaria —reports_to→ Daniel Chen\n\n### New facts link into what it already knows — nothing gets rebuilt.\n\nNew triples are incrementally merged into a dual-layer memory graph (entities, relations) — matching or related facts link up, nothing is ever fully rebuilt.\n\n### Ask from any client. It finds the connected facts, not just the one that sounds similar.\n\nsearch_memory matches your query directly against triples, then runs personalized PageRank over the memory graph to pull in connected, multi-hop context.\n\nWho does Maria report to?\n\nDaniel Chen\n\n### It decides on its own whether to keep, update, or retire a memory.\n\nA GRPO-trained policy — not a hardcoded rule — decides whether an incoming fact should be added, merged into an existing one, or should retire an outdated memory.\n\nNew message: \"Maria now reports to Priya Shah.\"\n\n[Full technical methodology on GitHub →](https://github.com/yliuai/spomory/blob/main/docs/methodology.md)\n\n## How is this different from a vector database / plain RAG?\n\nA pure similarity search returns whatever embedding is closest to your query and can't explain why. Spomory matches your query against extracted triples, then walks the memory graph with personalized PageRank — every result traces back to specific facts, and multi-hop connections (A relates to B relates to C) get surfaced even when nothing in the query text is similar to C.\n\n## Benchmarks\n\nRun against a live LLM, not simulated.\n\n[See the full numbers and limitations →](https://spomory.yliuai.com/verified-results)\n\n## Two ways to run it, same engine underneath\n\n### Local-first\n\nFor developers and technical users: install the MCP server, point Claude Desktop, Cursor, Codex CLI, or Doubao (豆包) at it, and your memory graph lives in a SQLite file on your own disk — encrypted at rest by default, no account required.\n\n[Get started — local & free](https://spomory.yliuai.com/get-started/local)\n\n### Cloud & cross-app\n\nFor memory that needs to follow you across more than one client: a hosted MCP endpoint backed by Postgres, reachable over HTTPS with either an API key or OAuth 2.1 — currently for MCP-capable clients (Claude Desktop, Cursor, Codex CLI, Doubao, and similar), not a web app.\n\n[Get started — cloud & cross-app](https://spomory.yliuai.com/get-started/remote)\n\n## What's actually different here\n\n### Memory sovereignty, not a compliance checkbox\n\nExport your full memory graph any time in an open JSON-LD-style format, or physically delete it — permanently, with an audit trail, and it's a free-tier feature, not something locked behind a paywall.\n\n### Real measured results, limitations included\n\nPublished LoCoMo and LongMemEval numbers, run against a live LLM — including the run where a fix traded retrieval recall for a real accuracy gain, and we explained why instead of just reporting the win.\n\n### An RL-trained policy decides what to remember\n\nADD / UPDATE / DELETE / NOOP isn't a set of hand-written if-statements — it's a GRPO-trained policy, evaluated against a rule-based baseline with the comparison published, small sample size and all.\n\n### Retrieval you can trace, not just a similarity score\n\nQueries are matched against extracted triples, then expanded across the memory graph with personalized PageRank — every answer traces back to specific facts, not an opaque embedding distance.\n\n## What \"private by default\" actually means here\n\nYou're trusting it with real context about your life and work. Here's exactly what that does and doesn't mean today.\n\n### Credentials are hashed\n\nAPI keys and OAuth tokens are stored as hashes only — a leaked database doesn't leak usable plaintext credentials.\n\n### Never sold, never used to train models\n\nYour text passes through an LLM (extraction) and Resend (login email) as named sub-processors, and nowhere else.\n\n### Nothing hidden from you\n\nget_graph shows exactly what's stored — entities, relations, source — not an opaque black box.\n\n### Export or delete it, for real\n\nexport_memory and forget_memory are a real export and a physical delete, not a status flag — free, in both local and cloud modes.\n\n This is a summary, not the whole picture. [Read the full Privacy page →](https://spomory.yliuai.com/privacy) \n\n## Frequently asked\n\n## Is Spomory open source?\n\nYes — Apache 2.0, source on GitHub. The MCP server, retrieval engine, and memory-management policy are all in the open repo.\n\n## Does it work with ChatGPT or Gemini?\n\nChatGPT: yes — via Developer Mode custom connectors (OAuth 2.1), verified end-to-end. Gemini's consumer web app doesn't support MCP connectors yet; Google's own Gemini CLI does, and that's verified separately.\n\n## Is my data used to train models, or shared with anyone?\n\nNo. Local mode never leaves your machine. Cloud mode sends extraction text to the configured LLM provider (currently DeepSeek) and nothing else — full detail on the Privacy page, including the sub-processors involved.\n\n## Can I use my own LLM instead of the default?\n\nYes — the LLM and embedding providers are pluggable, and any OpenAI-compatible Chat Completions API works (OpenAI, DeepSeek, Qwen, etc.).\n\n## What happens to my data if I stop using it?\n\nYou can export your complete memory graph or permanently delete it at any time, for free, in both local and cloud modes — this isn't a premium feature. Details on the Memory Passport page.\n\n## Pick your path and see the actual output\n\nTen minutes to a working memory graph, either way.", "url": "https://wpnews.pro/news/show-hn-spomory-graph-based-mcp-memory-with-an-rl-trained-forgetting-policy", "canonical_source": "https://spomory.yliuai.com/", "published_at": "2026-10-18 13:22:05+00:00", "updated_at": "2026-10-18 13:47:46.271554+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "ai-tools", "large-language-models", "ai-products"], "entities": ["Spomory", "Model Context Protocol", "Claude Desktop", "Cursor", "Codex CLI", "Doubao", "GitHub", "SQLite"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-spomory-graph-based-mcp-memory-with-an-rl-trained-forgetting-policy", "markdown": "https://wpnews.pro/news/show-hn-spomory-graph-based-mcp-memory-with-an-rl-trained-forgetting-policy.md", "text": "https://wpnews.pro/news/show-hn-spomory-graph-based-mcp-memory-with-an-rl-trained-forgetting-policy.txt", "jsonld": "https://wpnews.pro/news/show-hn-spomory-graph-based-mcp-memory-with-an-rl-trained-forgetting-policy.jsonld"}}