<?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: Jason Sosa</title>
    <description>The latest articles on DEV Community by Jason Sosa (@singularityjason).</description>
    <link>https://dev.to/singularityjason</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3772503%2Fecdb24be-eadd-4419-88dd-6af280aa334f.png</url>
      <title>DEV Community: Jason Sosa</title>
      <link>https://dev.to/singularityjason</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/singularityjason"/>
    <language>en</language>
    <item>
      <title>I Built an Agent That Trades on Bitcoin Lightning. It remembered nothing. So I built a brain.</title>
      <dc:creator>Jason Sosa</dc:creator>
      <pubDate>Thu, 05 Mar 2026 00:23:25 +0000</pubDate>
      <link>https://dev.to/singularityjason/i-built-an-agent-that-trades-on-bitcoin-lightning-it-remembered-nothing-so-i-built-a-brain-3l6j</link>
      <guid>https://dev.to/singularityjason/i-built-an-agent-that-trades-on-bitcoin-lightning-it-remembered-nothing-so-i-built-a-brain-3l6j</guid>
      <description>&lt;p&gt;L402 lets AI agents pay for API calls with Lightning. No credit cards, no OAuth, no subscription plans. An agent gets an invoice, pays it, gets access. It works. And it's growing fast.&lt;/p&gt;

&lt;p&gt;But every agent I've seen using L402 has the same problem: it forgets everything.&lt;/p&gt;

&lt;p&gt;An agent finds a transcription API that charges 2,000 sats (~$1.42) per request. Good price, fast response. The agent uses it a dozen times. Then the session ends, and the agent has no record of any of it. Next session, it's back to searching for transcription APIs from scratch. It'll probably find a worse one.&lt;/p&gt;

&lt;p&gt;Scale that up. An agent managing a real budget, spending millions of sats a week on compute, data, and API access, is flying blind between sessions. No vendor history. No spending patterns. No memory of which endpoints returned errors half the time.&lt;/p&gt;

&lt;p&gt;That's the gap I built Lightning Memory to fill.&lt;/p&gt;

&lt;p&gt;What It Does&lt;/p&gt;

&lt;p&gt;Lightning Memory is an MCP server. Nine tools. Install it, point Claude or any MCP-compatible agent at it, and the agent can store and query memories that persist across sessions.&lt;/p&gt;

&lt;p&gt;pip install lightning-memory&lt;/p&gt;

&lt;p&gt;Three layers:&lt;/p&gt;

&lt;p&gt;Memory. Agents store what happened. Transactions, vendor notes, errors, decisions, preferences. Everything goes into local SQLite with FTS5 full-text search. No cloud. Nothing leaves your machine.&lt;/p&gt;

&lt;p&gt;memory_store(&lt;br&gt;
    content="transcribe-api.com, 2000 sats for 10min audio. "&lt;br&gt;
            "Response under 3 seconds. Output was accurate.",&lt;br&gt;
    type="transaction",&lt;br&gt;
    metadata='{"vendor": "transcribe-api.com", "amount_sats": 2000}'&lt;br&gt;
  )&lt;/p&gt;

&lt;p&gt;Intelligence. Four tools that turn raw memories into judgment. Vendor&lt;br&gt;
reputation scores. Spending breakdowns. Anomaly detection that flags a vendor charging 50,000 sats when their historical average is 2,000.&lt;/p&gt;

&lt;p&gt;ln_anomaly_check(vendor="transcribe-api.com", amount_sats=50000)&lt;br&gt;
  # {verdict: "high", context: "50,000 sats is 25x the historical average of&lt;br&gt;
  2,000"}&lt;/p&gt;

&lt;p&gt;At ~$71k per BTC, 50,000 sats is about $35. Not catastrophic for a single payment, but an agent making that mistake repeatedly across dozens of vendors burns through real money.&lt;/p&gt;

&lt;p&gt;Identity. Every agent gets a Nostr keypair. BIP-340 Schnorr signatures, same crypto as the Nostr protocol. No email, no registration, no platform. Memories are signed NIP-78 events that can sync to any Nostr relay. Your agent's identity and data are portable. If a relay goes down, switch to another. Nothing is lost.&lt;/p&gt;

&lt;p&gt;The L402 Gateway&lt;/p&gt;

&lt;p&gt;This is the part I think has the most potential.&lt;/p&gt;

&lt;p&gt;Lightning Memory includes an HTTP gateway where other agents can pay sats to query your agent's memories. The protocol is L402: the gateway returns a 402 with a Lightning invoice, the client pays, and gets access.&lt;/p&gt;

&lt;p&gt;GET /ln/vendor/transcribe-api.com&lt;br&gt;
  -&amp;gt; 402 Payment Required (invoice for 3 sats)&lt;/p&gt;

&lt;p&gt;(agent pays invoice)&lt;/p&gt;

&lt;p&gt;-&amp;gt; 200 OK&lt;br&gt;
  -&amp;gt; {total_txns: 47, success_rate: 0.94, avg_sats: 2100}&lt;/p&gt;

&lt;p&gt;Three sats for a vendor reputation check. An agent that has spent weeks interacting with L402 APIs has built up real intelligence about which vendors are reliable and what fair prices look like. That intelligence is valuable.&lt;/p&gt;

&lt;p&gt;The gateway lets it sell that knowledge.&lt;/p&gt;

&lt;p&gt;I haven't built the network layer yet. Right now each gateway is standalone. But the direction is clear: agents trading knowledge with each other, paying in sats, with no intermediary.&lt;/p&gt;

&lt;p&gt;Why Nostr for Identity&lt;/p&gt;

&lt;p&gt;I could have used API keys or JWTs or any standard auth scheme. I picked Nostr keypairs deliberately.&lt;/p&gt;

&lt;p&gt;The AI agent economy is going to be big. Agents will manage budgets,&lt;br&gt;
negotiate with vendors, build reputations over months of interactions. Whoever controls agent identity controls that economy. If agent identity lives on Google or OpenAI accounts, those platforms own your agents.&lt;/p&gt;

&lt;p&gt;Nostr keypairs are sovereign. A 32-byte private key stored on your machine. No platform can revoke it, no company needs to stay in business for it to keep working. And because the keys are the same standard used across Nostr, the entire relay infrastructure is already there for syncing and portability.&lt;/p&gt;

&lt;p&gt;Try It&lt;/p&gt;

&lt;p&gt;pip install lightning-memory&lt;/p&gt;

&lt;p&gt;Nine tools, 156 tests, MIT licensed. Works with Claude, any MCP-compatible agent. Listed on the MCP registry.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/singularityjason" rel="noopener noreferrer"&gt;
        singularityjason
      &lt;/a&gt; / &lt;a href="https://github.com/singularityjason/lightning-memory" rel="noopener noreferrer"&gt;
        lightning-memory
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Decentralized agent memory for the Lightning economy. Nostr identity, L402 payments, MCP server.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Lightning Memory&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://pypi.org/project/lightning-memory/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/678cdfa5d1c6254762fc73999e70a38534294bdb0f7c89491338c4eb1577b36c/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f6c696768746e696e672d6d656d6f72792e737667" alt="PyPI version"&gt;&lt;/a&gt;
&lt;a href="https://www.python.org/downloads/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/93a33cfc2339ec3fa9be792576576fbaafc42b0c7031285662b02f3aca1e1c59/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31302b2d626c75652e737667" alt="Python 3.10+"&gt;&lt;/a&gt;
&lt;a href="https://github.com/singularityjason/lightning-memory/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8bb50fd2278f18fc326bf71f6e88ca8f884f72f179d3e555e20ed30157190d0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e2e737667" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Persistent memory for AI agents in the Lightning economy.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;The Problem&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;AI agents spend sats over Lightning via L402 — but they can't remember what they bought. Every session starts from zero. Every vendor is a stranger. Every price is accepted at face value. An agent that paid 500 sats yesterday doesn't know if today's 5,000 sat invoice is a price spike or normal.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;The Solution&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;L1: Bitcoin      — settles
L2: Lightning    — pays
L3: Lightning Memory — remembers
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Lightning Memory gives agents persistent memory, vendor intelligence, and payment safety gates. Agents learn from their spending history, track vendor reputations, detect price anomalies, enforce budgets, and share trust signals with other agents.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.jasonsosa.com/blog/agent-lightning-memory" rel="nofollow noopener noreferrer"&gt;Interactive Demo&lt;/a&gt;&lt;/strong&gt; — watch an agent learn, get rugged, and route around bad actors.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.jasonsosa.com/blog/agent-economy-trust-marketplace-bitcoin-lightning" rel="nofollow noopener noreferrer"&gt;Building the Agent Economy&lt;/a&gt;&lt;/strong&gt; — trust, budgets, compliance, and the memory marketplace.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Who Is This For&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agents making L402 payments&lt;/strong&gt; that need…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/singularityjason/lightning-memory" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;The gateway needs Phoenixd (ACINQ's zero-config Lightning node) for invoice&lt;br&gt;
  generation. The README has the full setup. Core memory and intelligence tools&lt;br&gt;
   work without it.&lt;/p&gt;

&lt;p&gt;I'm looking for feedback from anyone building agents on Lightning. What would you store? What queries would be useful? Open an issue or find me on X&lt;br&gt;
  (@jasonsosa).&lt;/p&gt;

</description>
      <category>bitcoin</category>
      <category>ai</category>
      <category>opensource</category>
      <category>lightning</category>
    </item>
    <item>
      <title>Why Flat Files Break as AI Agent Memory (And What We Built Instead)</title>
      <dc:creator>Jason Sosa</dc:creator>
      <pubDate>Fri, 27 Feb 2026 03:58:47 +0000</pubDate>
      <link>https://dev.to/singularityjason/why-flat-files-break-as-ai-agent-memory-and-what-we-built-instead-24gj</link>
      <guid>https://dev.to/singularityjason/why-flat-files-break-as-ai-agent-memory-and-what-we-built-instead-24gj</guid>
      <description>&lt;p&gt;Your AI coding agent has amnesia.&lt;/p&gt;

&lt;p&gt;Every Claude Code session, every Cursor chat, every Windsurf interaction starts from zero. The architectural decision you explained on Monday? Gone. The debugging lesson from Friday? Never happened. The style preferences you've stated twelve times? Say them again.&lt;/p&gt;

&lt;p&gt;The common fix is a flat file. Claude Code has &lt;code&gt;CLAUDE.md&lt;/code&gt;. Cursor has &lt;code&gt;.cursorrules&lt;/code&gt;. They work — for a while.&lt;/p&gt;

&lt;p&gt;Then they don't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where flat files break
&lt;/h2&gt;

&lt;p&gt;I kept hitting the same five failures as my &lt;code&gt;CLAUDE.md&lt;/code&gt; grew past 200 lines:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Search is impossible.&lt;/strong&gt; You're grepping for context that may or may not be there. The phrase you used three weeks ago doesn't match how you'd describe it today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Nothing is auto-captured.&lt;/strong&gt; Every lesson has to be manually written. You debug a Docker volume mount issue for 30 minutes, and unless you type "remember this," it's gone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. It grows forever.&lt;/strong&gt; No deduplication. No decay. No contradiction detection. "We use REST" from January sits next to "We migrated to WebSockets" from February. The agent picks whichever it attends to first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. It's one file per project.&lt;/strong&gt; That debugging pattern you learned in project A? Invisible in project B. No cross-project learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. No checkpoint/resume.&lt;/strong&gt; Stop mid-refactor, and there's no structured way to pick up where you left off.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; is fine for "always use tabs." It breaks when your agent needs to actually learn.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a real memory pipeline looks like
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://github.com/omega-memory/omega-memory" rel="noopener noreferrer"&gt;OMEGA&lt;/a&gt; to solve this. It runs as an MCP server with 12 tools, and it handles the full memory lifecycle:&lt;/p&gt;

&lt;h3&gt;
  
  
  Store pipeline (12 sub-phases)
&lt;/h3&gt;

&lt;p&gt;When a memory comes in, it doesn't just get appended:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;input → validate → dedup check → evolution check → conflict detection
  → store → entity extraction → auto-relate → contradiction supersession
  → fact splitting → reminder check → feedback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Dedup&lt;/strong&gt; runs three layers: SHA256 hash (exact match), content hash (near-exact), and embedding cosine similarity with per-type Jaccard thresholds (decisions at 0.80, lessons at 0.85). This catches the agent restating the same decision six times in six paraphrases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evolution&lt;/strong&gt; detects when new content overlaps 55-95% with an existing memory. Instead of creating a duplicate, it appends the new insights to the existing entry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conflict detection&lt;/strong&gt; catches contradictions automatically. "We use JWT" followed by "We switched to session cookies" — the old decision gets superseded, not silently ignored.&lt;/p&gt;

&lt;h3&gt;
  
  
  Retrieval pipeline
&lt;/h3&gt;

&lt;p&gt;Search isn't keyword matching. It's a five-stage pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Simplified from omega/sqlite_store.py
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# 1. Vector similarity (bge-small-en-v1.5, 384-dim via sqlite-vec)
&lt;/span&gt;    &lt;span class="n"&gt;vec_results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;cosine_search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;embed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 2. Full-text search via FTS5
&lt;/span&gt;    &lt;span class="n"&gt;fts_results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fts5_search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 3. Reciprocal rank fusion
&lt;/span&gt;    &lt;span class="n"&gt;merged&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rrf_merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vec_results&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fts_results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 4. Type-weighted scoring (decisions/lessons weighted 2x)
&lt;/span&gt;    &lt;span class="n"&gt;scored&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;apply_type_weights&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;merged&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 5. Time-decay (old unaccessed memories rank lower)
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;apply_decay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scored&lt;/span&gt;&lt;span class="p"&gt;)[:&lt;/span&gt;&lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;10 relevant memories out of 500, under 50ms. All local — SQLite + ONNX embeddings, no API keys, no cloud.&lt;/p&gt;

&lt;h3&gt;
  
  
  Forgetting
&lt;/h3&gt;

&lt;p&gt;This is the feature nobody talks about. Memories that aren't accessed lose ranking weight over time. The floor is 0.35 — nothing disappears completely — but stale context stops dominating retrieval.&lt;/p&gt;

&lt;p&gt;Preferences and error patterns are exempt from decay. Your "always use early returns" preference never fades. But that one-off debugging note about a dependency version from six months ago? It quietly drops out of relevance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Auto-capture: the part that actually matters
&lt;/h2&gt;

&lt;p&gt;The explicit &lt;code&gt;omega_store&lt;/code&gt; tool is useful, but the real value is what happens without being asked.&lt;/p&gt;

&lt;p&gt;OMEGA hooks into your editor's session lifecycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SessionStart&lt;/strong&gt;: Surfaces relevant memories from past sessions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UserPromptSubmit&lt;/strong&gt;: Detects decisions and lessons in the conversation and stores them automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostToolUse&lt;/strong&gt;: Surfaces memories relevant to files you're editing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop&lt;/strong&gt;: Generates a session summary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you spend 30 minutes debugging and Claude says &lt;em&gt;"The node_modules volume mount was shadowing the container's node_modules. Fixed by adding an anonymous volume"&lt;/em&gt; — OMEGA auto-captures that as a lesson. Next time anyone hits the same Docker issue, it's already there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checkpoint/resume
&lt;/h2&gt;

&lt;p&gt;This is what convinced me flat files would never work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You: "Checkpoint this — I'm halfway through migrating the auth middleware."

# OMEGA saves: task description, files modified, current state,
# remaining steps, and links to all related memories

# ...next day, new session...

You: "Resume the auth middleware task."

# OMEGA restores full context. Claude picks up exactly where you left off.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Task state survives session boundaries. No copy-pasting "here's where I was."&lt;/p&gt;

&lt;h2&gt;
  
  
  The benchmark
&lt;/h2&gt;

&lt;p&gt;OMEGA scores &lt;strong&gt;95.4% on LongMemEval&lt;/strong&gt; (ICLR 2025) — a 500-question benchmark testing extraction, multi-session reasoning, temporal understanding, knowledge updates, and preference tracking.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;System&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;&lt;strong&gt;OMEGA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;95.4%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mastra&lt;/td&gt;
&lt;td&gt;94.87%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Emergence&lt;/td&gt;
&lt;td&gt;86.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zep/Graphiti&lt;/td&gt;
&lt;td&gt;71.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The full methodology is at &lt;a href="https://omegamax.co/benchmarks" rel="noopener noreferrer"&gt;omegamax.co/benchmarks&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip3 &lt;span class="nb"&gt;install &lt;/span&gt;omega-memory[server]
omega setup
omega doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. &lt;code&gt;omega setup&lt;/code&gt; downloads the embedding model, registers the MCP server, and installs hooks. Start a Claude Code session and say "Remember that we always use early returns." Close the session. Open a new one. Ask "What are my code style preferences?"&lt;/p&gt;

&lt;p&gt;It's there.&lt;/p&gt;

&lt;p&gt;Works with Claude Code, Cursor, Windsurf, Zed, and any MCP client. Apache-2.0 licensed. No API keys. Everything runs on your machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/omega-memory/omega-memory" rel="noopener noreferrer"&gt;omega-memory/omega-memory&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Website&lt;/strong&gt;: &lt;a href="https://omegamax.co" rel="noopener noreferrer"&gt;omegamax.co&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;PyPI&lt;/strong&gt;: &lt;a href="https://pypi.org/project/omega-memory/" rel="noopener noreferrer"&gt;omega-memory&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I built OMEGA because I was tired of re-explaining the same architectural decisions to an agent that forgot everything between sessions. If you're hitting the same problem, give it a try. And if you find bugs, the issue tracker is open.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>mcp</category>
      <category>devtools</category>
    </item>
    <item>
      <title>How I Built a Memory System That Scores 95.4% on LongMemEval (#1 on the Leaderboard)</title>
      <dc:creator>Jason Sosa</dc:creator>
      <pubDate>Sun, 15 Feb 2026 02:28:07 +0000</pubDate>
      <link>https://dev.to/singularityjason/how-i-built-a-memory-system-that-scores-954-on-longmemeval-1-on-the-leaderboard-2md3</link>
      <guid>https://dev.to/singularityjason/how-i-built-a-memory-system-that-scores-954-on-longmemeval-1-on-the-leaderboard-2md3</guid>
      <description>&lt;h1&gt;
  
  
  How I Built a Memory System That Scores 95.4% on LongMemEval (#1 on the Leaderboard)
&lt;/h1&gt;

&lt;p&gt;Every AI coding agent has the same problem: amnesia.&lt;/p&gt;

&lt;p&gt;You spend an hour with Claude Code debugging a Docker volume mount issue. You find the fix, explain your architectural reasoning, set coding preferences. Then you close the session. Next time you open it, the agent has no idea any of that happened. You start from zero.&lt;/p&gt;

&lt;p&gt;I got tired of spending the first 10-15 minutes of every session re-explaining context that was already established. So I built OMEGA — a persistent memory system that gives AI coding agents long-term memory across sessions. It runs entirely on your machine, scores 95.4% on the LongMemEval academic benchmark (#1 on the leaderboard), and you can install it with &lt;code&gt;pip install omega-memory&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This post is a technical walkthrough of what I built, how it works, and where it falls short.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem, Concretely
&lt;/h2&gt;

&lt;p&gt;AI coding agents today are stateless by design. The conversation context is the only "memory" they have, and it evaporates when the session ends.&lt;/p&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Decisions vanish.&lt;/strong&gt; "We chose PostgreSQL over MongoDB because we need ACID transactions for payment processing" — gone. Next session, the agent might suggest MongoDB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mistakes repeat.&lt;/strong&gt; You debug the same &lt;code&gt;ECONNRESET&lt;/code&gt; error three sessions in a row because the agent doesn't remember it was caused by connection pool exhaustion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preferences reset.&lt;/strong&gt; "Always use early returns, never nest conditionals more than 2 levels deep" — you have to say this every single time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The root cause is that MCP (Model Context Protocol) gives agents access to tools, but no persistent state between sessions. There's no standard way for an agent to store and recall what it learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture: SQLite All the Way Down
&lt;/h2&gt;

&lt;p&gt;I went through a few iterations. The first version used an in-memory graph (NetworkX). At around 3,700 nodes it consumed 372 MB of RAM. That was unacceptable for something that runs in the background.&lt;/p&gt;

&lt;p&gt;The current architecture is much simpler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────┐
│    Claude Code / Cursor  │
│    (any MCP host)        │
└───────────┬─────────────┘
            │ stdio/MCP protocol
┌───────────▼─────────────┐
│   OMEGA MCP Server       │
│   27 memory tools        │
│                          │
│  ┌─────────────────────┐ │
│  │  Hook Daemon (UDS)  │ │    ← Unix Domain Socket for
│  │  auto-capture +     │ │      &amp;lt;750ms hook dispatch
│  │  auto-surface       │ │
│  └─────────────────────┘ │
└───────────┬─────────────┘
            │
┌───────────▼─────────────┐
│  omega.db (SQLite + WAL) │
│                          │
│  ┌──────┐ ┌───────────┐ │
│  │nodes │ │ vec_nodes  │ │    ← sqlite-vec: 384-dim
│  │      │ │ (vectors)  │ │      cosine similarity
│  └──────┘ └───────────┘ │
│  ┌──────┐ ┌───────────┐ │
│  │edges │ │ nodes_fts  │ │    ← FTS5: full-text
│  │      │ │ (keywords) │ │      keyword search
│  └──────┘ └───────────┘ │
└─────────────────────────┘
            │
┌───────────▼─────────────┐
│  bge-small-en-v1.5       │
│  ONNX Runtime (CPU)      │
│  384-dim embeddings      │
│  ~90 MB model on disk    │
└─────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything is a single SQLite database (&lt;code&gt;~/.omega/omega.db&lt;/code&gt;) running in WAL mode with &lt;code&gt;sqlite-vec&lt;/code&gt; for vector search and FTS5 for keyword matching. The embedding model is bge-small-en-v1.5 running via ONNX Runtime on CPU — no GPU required, no cloud API calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why SQLite?&lt;/strong&gt; Because the access pattern is perfect for it. One machine, one user, mostly reads with occasional writes, and the entire database fits in a few megabytes. At ~250 memories, the database is about 10 MB. SQLite's WAL mode handles concurrent reads from multiple MCP server processes, and I added retry-with-backoff for the rare write contention under heavy multi-process usage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why not a vector database?&lt;/strong&gt; I considered Chroma and Qdrant. But adding a separate database process for a system that stores hundreds (not millions) of vectors felt like overengineering. &lt;code&gt;sqlite-vec&lt;/code&gt; gives me cosine similarity search in the same process, with zero external dependencies.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Search Pipeline
&lt;/h2&gt;

&lt;p&gt;Retrieval accuracy is everything for a memory system. If you can't find the right memory when it matters, the whole system is useless. I landed on a six-stage pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Query: "Docker volume mount issue"
           │
           ▼
┌─────────────────────────┐
│ 1. Vector Similarity    │  cosine distance on 384-dim
│    (sqlite-vec)         │  embeddings, top-K candidates
└───────────┬─────────────┘
            ▼
┌─────────────────────────┐
│ 2. Full-Text Search     │  FTS5 keyword matching for
│    (FTS5)               │  terms the embeddings miss
└───────────┬─────────────┘
            ▼
┌─────────────────────────┐
│ 3. Type-Weighted Score  │  decisions and lessons get 2x
│                         │  weight (they're higher value)
└───────────┬─────────────┘
            ▼
┌─────────────────────────┐
│ 4. Contextual Re-rank   │  boost by tag match, project
│                         │  scope, and content overlap
└───────────┬─────────────┘
            ▼
┌─────────────────────────┐
│ 5. Time-Decay           │  old unaccessed memories rank
│                         │  lower (floor 0.35, exemptions
│                         │  for prefs + error patterns)
└───────────┬─────────────┘
            ▼
┌─────────────────────────┐
│ 6. Dedup                │  remove near-duplicates from
│                         │  the result set
└───────────┬─────────────┘
            ▼
        Results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The two-source approach (vectors + FTS5) is key. Embeddings handle semantic similarity ("container networking issue" matches "Docker bridge network problem"), while FTS5 catches exact terms that embeddings sometimes miss (specific error codes, package names, config keys). Combining both gives better recall than either alone.&lt;/p&gt;

&lt;p&gt;Type-weighted scoring was a deliberate design choice. When you ask "what should I know about the orders service?", a prior architectural decision ("we chose PostgreSQL for ACID compliance") is almost always more relevant than a session summary from three weeks ago. Weighting decisions and lessons 2x in the scoring reflects this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory Lifecycle: Why Forgetting Matters
&lt;/h2&gt;

&lt;p&gt;Most memory systems just accumulate. Store everything, search through everything, forever. This works at 50 memories. At 500, you start getting noise in every query. At 5,000, the system is actively harmful — surfacing outdated context that leads the agent astray.&lt;/p&gt;

&lt;p&gt;OMEGA has an explicit forgetting system with five mechanisms:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dedup on write.&lt;/strong&gt; SHA-256 hash for exact duplicates, plus embedding similarity (threshold 0.85) for semantic duplicates. If you store "use PostgreSQL for the orders DB" twice with different wording, OMEGA catches it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Evolution.&lt;/strong&gt; When new content is 55-95% similar to an existing memory, instead of creating a new entry, OMEGA appends the new information to the existing one. The memory evolves rather than duplicates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;TTL expiry.&lt;/strong&gt; Session summaries expire after 1 day — they're useful for immediate context but stale quickly. Lessons and preferences are permanent. Everything else gets a configurable TTL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compaction.&lt;/strong&gt; Periodically, OMEGA clusters related memories (Jaccard similarity) and summarizes them into consolidated nodes, marking the originals as superseded. This is like garbage collection for knowledge.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conflict detection.&lt;/strong&gt; When a new decision contradicts an existing one, OMEGA detects it automatically. Decisions auto-resolve (newer wins), while lessons are flagged for review. The old memory gets a &lt;code&gt;contradicts&lt;/code&gt; edge to the new one.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every deletion is audited. You can run &lt;code&gt;omega_forgetting_log&lt;/code&gt; and see exactly why each memory was removed — TTL expired, consolidation pruned, compaction superseded, LRU evicted, user deleted, or flagged via feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  Auto-Capture: The Part That Actually Matters
&lt;/h2&gt;

&lt;p&gt;The 27 MCP tools are nice, but the real value is in the hook system. In Claude Code, OMEGA installs four hooks:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Hook Event&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SessionStart&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Surfaces relevant memories as a welcome briefing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PostToolUse&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;After file edits, surfaces memories related to the file being changed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UserPromptSubmit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Analyzes the conversation and auto-captures decisions/lessons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stop&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Generates a session summary&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The hooks dispatch through a Unix Domain Socket daemon running inside the MCP server process. This is important — the first version spawned a new Python process per hook invocation, which added ~750ms of cold-start overhead. The UDS daemon eliminates that by reusing the warm MCP server with its already-loaded ONNX model and database connection.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;UserPromptSubmit&lt;/code&gt; hook is the most interesting. It classifies the conversation context and extracts decisions ("we chose X because Y"), lessons ("the fix for X is Y"), and error patterns — all without the user explicitly saying "remember this." You just code normally, and OMEGA captures what matters in the background.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmarking Against LongMemEval
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/xiaowu0162/LongMemEval" rel="noopener noreferrer"&gt;LongMemEval&lt;/a&gt; is an academic benchmark from ICLR 2025 that tests long-term memory systems with 500 questions across five categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Information Extraction (IE):&lt;/strong&gt; Can you recall specific facts from past conversations?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Session Reasoning (MS):&lt;/strong&gt; Can you synthesize information across multiple sessions?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temporal Reasoning (TR):&lt;/strong&gt; Can you reason about when things happened and in what order?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge Update (KU):&lt;/strong&gt; When information changes, do you return the current state?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preference Tracking (SP):&lt;/strong&gt; Do you remember and apply user preferences?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's how OMEGA stacks up:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;System&lt;/th&gt;
&lt;th&gt;Overall&lt;/th&gt;
&lt;th&gt;IE&lt;/th&gt;
&lt;th&gt;MS&lt;/th&gt;
&lt;th&gt;TR&lt;/th&gt;
&lt;th&gt;KU&lt;/th&gt;
&lt;th&gt;SP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OMEGA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;95.4%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;83.5%&lt;/td&gt;
&lt;td&gt;94.0%&lt;/td&gt;
&lt;td&gt;96.2%&lt;/td&gt;
&lt;td&gt;98.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mastra&lt;/td&gt;
&lt;td&gt;94.87%&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Emergence&lt;/td&gt;
&lt;td&gt;86.0%&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zep/Graphiti&lt;/td&gt;
&lt;td&gt;71.2%&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A few notes on methodology and honesty:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the benchmark does well:&lt;/strong&gt; It tests real conversational memory patterns — things like "what restaurant did I mention in our 3rd conversation?" or "I changed my coffee preference from latte to americano, what's my current preference?" These are practical tests of what a memory system needs to handle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it doesn't test:&lt;/strong&gt; It doesn't test auto-capture quality, retrieval latency under load, or how well the system handles adversarial/contradictory inputs over time. It also doesn't test multi-agent coordination, which is a significant part of OMEGA's feature set.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where OMEGA struggles:&lt;/strong&gt; Multi-session reasoning (83.5%) is the weakest category. These questions require counting or aggregating across many sessions ("how many times did I mention going to the gym?"), which is fundamentally harder for a retrieval-based system. My best result came from a simple "list all matches, then count" approach — more aggressive dedup strategies actually caused regressions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scoring methodology:&lt;/strong&gt; The 95.4% is task-averaged — the mean of per-category accuracies. This is the same methodology used by other systems on the leaderboard (including Mastra at 94.87%). The raw score is 466/500 (93.2%).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost of benchmarking:&lt;/strong&gt; Each full run costs real money in LLM API calls (the benchmark uses GPT-4 for evaluation). I ran about 8 iterations to get from 85% to 95.4%, each time targeting specific failure modes. The improvements were incremental: better temporal prompting (+5 questions), knowledge-update current-state prompting (+4), query augmentation (+2), preference personalization (+2).&lt;/p&gt;

&lt;h2&gt;
  
  
  The Competition
&lt;/h2&gt;

&lt;p&gt;I want to be fair here, because these are all legitimate projects solving the same problem from different angles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mem0&lt;/strong&gt; (47K GitHub stars): Cloud-first approach. More polished product, larger team, established user base. Requires an API key for the cloud version. Their local mode exists but is more limited. They haven't published LongMemEval scores.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zep/Graphiti&lt;/strong&gt; (22.8K stars): Neo4j-backed knowledge graph approach. Sophisticated architecture but requires running Neo4j. Published 71.2% on LongMemEval in their paper, which I respect — most systems don't publish benchmark numbers at all.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Letta&lt;/strong&gt; (21.1K stars): Agent framework with memory as a component. Different scope — they're building a full agent platform, not just memory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Claude's built-in memory&lt;/strong&gt; (CLAUDE.md files): Works without any setup, but it's a flat markdown file with no semantic search, no auto-capture, and no cross-session learning.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OMEGA's differentiator is being local-first with zero external services while still scoring competitively on benchmarks. Whether that tradeoff matters to you depends on your threat model and workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest Tradeoffs and Limitations
&lt;/h2&gt;

&lt;p&gt;I'd rather you know the sharp edges before you try it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Auto-capture hooks only work with Claude Code.&lt;/strong&gt; Other MCP clients (Cursor, Windsurf, Zed) get the 27 tools but not the automatic memory capture. You have to explicitly tell the agent to remember things.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory footprint.&lt;/strong&gt; ~31 MB at startup, ~337 MB after the ONNX model loads on first query. The model unloads after 10 minutes of inactivity, but if you're memory-constrained, this matters.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;English only.&lt;/strong&gt; The bge-small-en-v1.5 embedding model is trained on English text. It will work poorly for other languages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Solo maintainer.&lt;/strong&gt; This is a passion project, not a VC-backed company. I maintain it because I use it every day, but I can't promise the same velocity as a funded team.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Not stress-tested at scale.&lt;/strong&gt; I've been running it at ~600 memories with no issues. I haven't tested at 10K+ memories. SQLite can handle it, but the search pipeline might need tuning at that scale.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.11+ only.&lt;/strong&gt; No support for older Python versions. macOS and Linux are supported; Windows works through WSL.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;omega-memory
omega setup          &lt;span class="c"&gt;# auto-detects Claude Code&lt;/span&gt;
omega doctor         &lt;span class="c"&gt;# verify everything works&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Cursor or Windsurf:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;omega setup &lt;span class="nt"&gt;--client&lt;/span&gt; cursor
omega setup &lt;span class="nt"&gt;--client&lt;/span&gt; windsurf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three commands, no API keys, no cloud accounts, no Docker containers. Everything runs locally.&lt;/p&gt;

&lt;p&gt;The source is at &lt;a href="https://github.com/omega-memory/core" rel="noopener noreferrer"&gt;github.com/omega-memory/core&lt;/a&gt; under Apache-2.0. Stars are appreciated — the project has about 5 right now. Contributions, bug reports, and questions are welcome.&lt;/p&gt;

&lt;p&gt;If you want to see the benchmark methodology in detail or how OMEGA compares to alternatives with sources, check &lt;a href="https://omegamax.co" rel="noopener noreferrer"&gt;omegamax.co&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I build OMEGA because I use it every day. The best test of a developer tool is whether the developer actually uses it — and I haven't opened a Claude Code session without OMEGA in months. If you're spending time re-explaining context to your AI coding agent, give it a try.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>python</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
