<?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: Anaz S. Aji</title>
    <description>The latest articles on DEV Community by Anaz S. Aji (@ajianaz).</description>
    <link>https://dev.to/ajianaz</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%2F4049107%2Fb82cb7ea-f17e-4632-98e3-a68b7a8345d8.jpg</url>
      <title>DEV Community: Anaz S. Aji</title>
      <link>https://dev.to/ajianaz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ajianaz"/>
    <language>en</language>
    <item>
      <title>Uteke in Production: Lessons from 150 GitHub Stars</title>
      <dc:creator>Anaz S. Aji</dc:creator>
      <pubDate>Tue, 08 Sep 2026 09:16:55 +0000</pubDate>
      <link>https://dev.to/codecoradev/uteke-in-production-lessons-from-150-github-stars-17p0</link>
      <guid>https://dev.to/codecoradev/uteke-in-production-lessons-from-150-github-stars-17p0</guid>
      <description>&lt;p&gt;&lt;em&gt;Editor's note (Sep 8, 2026): the lessons below were written when Uteke passed 150 stars. It has since crossed 200.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Uteke in Production: Lessons from 150 GitHub Stars
&lt;/h2&gt;

&lt;p&gt;Uteke crossed 150 GitHub stars in under two months. That is not viral growth, but it is enough to generate real feedback from real users running Uteke in production. Here are the patterns we have observed and the lessons we have learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  How People Use Uteke
&lt;/h2&gt;

&lt;p&gt;The most common use case is adding memory to AI agent frameworks: LangChain, CrewAI, and custom agent setups. Developers want their agents to persist knowledge across sessions without setting up a full vector database.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Self-hosted AI assistants with persistent conversation memory&lt;/li&gt;
&lt;li&gt;Documentation chatbots for internal knowledge bases&lt;/li&gt;
&lt;li&gt;Multi-agent systems using rooms for coordination&lt;/li&gt;
&lt;li&gt;Research tools that accumulate findings over time&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Single Binary Advantage
&lt;/h2&gt;

&lt;p&gt;Users consistently cite the single-binary deployment as a key reason for choosing Uteke over alternatives. No Docker, no Python environment, no external services. Download, run, done. This matters especially for developers embedding Uteke into their own applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Pain Points
&lt;/h2&gt;

&lt;p&gt;The most frequent issue requests are around embedding model flexibility and backup/restore. Users want to bring their own embedding models instead of being locked into all-minilm, and they want straightforward database migration between versions.&lt;/p&gt;

&lt;p&gt;Another pattern: users running Uteke on low-resource hardware (Raspberry Pi, small VPS) hit memory limits with large HNSW indices. We added configuration options for index parameters to help tune memory usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Worked
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Small API surface&lt;/strong&gt;: Keeping the REST API to five core endpoints (remember, recall, search, list, forget) made Uteke easy to adopt. Users can integrate in under an hour.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honest documentation&lt;/strong&gt;: Being upfront about limitations (no GPU support, single-node only, no clustering) set the right expectations and reduced disappointed issue reports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fast releases&lt;/strong&gt;: Publishing fixes within hours of bug reports built trust. Users see the project as maintained and responsive.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Would Do Differently
&lt;/h2&gt;

&lt;p&gt;We would have added the Room system earlier. The flat namespace worked for single-agent use cases, but multi-agent coordination requests started appearing in the first week. Shipping rooms sooner would have reduced the 'works great, but...' feedback.&lt;/p&gt;

&lt;p&gt;We also underestimated the demand for language-specific client libraries. The REST API is straightforward, but developers want SDKs in Python, Go, and TypeScript. Building these earlier would have lowered the integration barrier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Ahead
&lt;/h2&gt;

&lt;p&gt;The next priorities are plugin-based embedding model support, improved backup tooling, and client libraries for the most requested languages. The core architecture (SQLite, HNSW, single binary) stays the same. These additions extend the surface area without changing what makes Uteke work.&lt;/p&gt;




&lt;p&gt;Star us on &lt;a href="https://github.com/codecoradev/uteke" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; if you are using Uteke in your project.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article is crossposted with &lt;a href="https://blog.codecora.dev/uteke-production-lessons-150-stars/" rel="noopener noreferrer"&gt;blog.codecora.dev&lt;/a&gt; as the canonical source.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>rust</category>
    </item>
    <item>
      <title>Your Local LLM Isn't Dumb. It's Amnesic.</title>
      <dc:creator>Anaz S. Aji</dc:creator>
      <pubDate>Tue, 08 Sep 2026 09:16:48 +0000</pubDate>
      <link>https://dev.to/codecoradev/your-local-llm-isnt-dumb-its-amnesic-be3</link>
      <guid>https://dev.to/codecoradev/your-local-llm-isnt-dumb-its-amnesic-be3</guid>
      <description>&lt;p&gt;You downloaded a model everyone praised. You ran it locally. And within ten minutes you thought: &lt;em&gt;this thing is dumb.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A detailed technical writeup that hit the Hacker News front page this week (417 points, &lt;a href="https://forum.level1techs.com/t/why-your-local-llm-feels-dumber-than-it-is/253917" rel="noopener noreferrer"&gt;"Why your local LLM feels dumber than it is"&lt;/a&gt;) makes a case that's equal parts uncomfortable and liberating: &lt;strong&gt;your local implementation sucks, but everyone else's does too.&lt;/strong&gt; Quantization, mixed GPU generations, inference stack mismatches: every local setup silently degrades the benchmark numbers the lab published.&lt;/p&gt;

&lt;p&gt;So part of the fix is honest stack-tuning. But that's only half the story.&lt;/p&gt;

&lt;h2&gt;
  
  
  The other half: your model forgets everything
&lt;/h2&gt;

&lt;p&gt;Even a perfectly configured local LLM has a disability the benchmarks never measure: &lt;strong&gt;it starts every single session from zero.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No memory of yesterday's debugging session. No recall of the architecture decision you explained last week. Every conversation begins with you re-uploading, re-pasting, re-explaining, burning tokens to reconstruct context the model already "learned" once.&lt;/p&gt;

&lt;p&gt;That's not a dumb model. That's an amnesic one. And amnesia &lt;em&gt;looks&lt;/em&gt; like dumbness:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It "doesn't understand your codebase" → because it re-reads it cold, every time&lt;/li&gt;
&lt;li&gt;It "forgets your conventions" → because it literally does&lt;/li&gt;
&lt;li&gt;It "gives inconsistent answers" → because each session is a stranger&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Proof the models are good enough
&lt;/h2&gt;

&lt;p&gt;The same week, another front-page story: &lt;a href="https://www.xda-developers.com/qwen-3-8-27b-reverse-engineering-job-frontier-model/" rel="noopener noreferrer"&gt;someone gave Qwen 3.8 27B a reverse-engineering job&lt;/a&gt; and it finished in 30 minutes. Work you'd normally assume needs a frontier API model.&lt;/p&gt;

&lt;p&gt;A 27B model, running locally, doing frontier-grade work. The capability is there. What's missing between "amazing in the demo" and "frustrating in daily use" is usually &lt;strong&gt;context continuity&lt;/strong&gt;, not raw intelligence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix 1: Tune the stack (the article's point)
&lt;/h2&gt;

&lt;p&gt;From the Level1Techs writeup, the parts you control:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Match quantization to hardware.&lt;/strong&gt; A heavily quantized GGUF on mismatched silicon is not the model the lab benchmarked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a sane inference runtime&lt;/strong&gt;, not whatever shipped default with a one-click installer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop judging models by two casual test prompts.&lt;/strong&gt; The gap between lab conditions and your homelab is implementation, not intelligence.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Fix 2: Give the model memory (our point)
&lt;/h2&gt;

&lt;p&gt;This is the fix almost nobody applies, and it compounds. &lt;a href="https://github.com/codecoradev/uteke" rel="noopener noreferrer"&gt;Uteke&lt;/a&gt; is an open-source, Apache-2.0 memory engine built exactly for this: a single Rust binary, fully offline, SQLite + embedded HNSW vectors + on-device embeddings, with semantic recall in ~45ms. No API key, no Docker, no cloud. It also speaks MCP, so Claude Code and other MCP agents can use it as their persistent memory server.&lt;/p&gt;

&lt;p&gt;The difference in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Without memory:&lt;/strong&gt; every session, your agent re-derives your project structure, your conventions, last week's decisions, in tokens you pay for and wait on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;With memory:&lt;/strong&gt; the agent &lt;em&gt;recalls&lt;/em&gt; that context in milliseconds and starts working.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's the difference between hiring a brilliant contractor with amnesia every morning, and one who remembers your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;If your local LLM feels dumb, you have two levers, and most people only pull one:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fix the stack&lt;/strong&gt;: quantization, runtime, realistic expectations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix the memory&lt;/strong&gt;: stop letting every session start from zero.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The models caught up. The stack is tunable. Memory is the remaining gap, and it's a solved problem.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://github.com/codecoradev/uteke" rel="noopener noreferrer"&gt;Uteke on GitHub&lt;/a&gt;, one binary, zero dependencies, ~45ms recall, works with any MCP-capable agent.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article is crossposted with &lt;a href="https://blog.codecora.dev/local-llm-isnt-dumb-its-amnesic/" rel="noopener noreferrer"&gt;blog.codecora.dev&lt;/a&gt; as the canonical source.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Uteke 0.17: memory that shows its work</title>
      <dc:creator>Anaz S. Aji</dc:creator>
      <pubDate>Mon, 07 Sep 2026 09:45:38 +0000</pubDate>
      <link>https://dev.to/codecoradev/uteke-017-memory-that-shows-its-work-3cjf</link>
      <guid>https://dev.to/codecoradev/uteke-017-memory-that-shows-its-work-3cjf</guid>
      <description>&lt;p&gt;Version 0.17 of Uteke shipped today, and the theme is explainability. Your local memory store should be able to show you why it returned what it returned, and what happened to the facts it replaced. Here is a quick tour of the release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explain mode for recall
&lt;/h2&gt;

&lt;p&gt;Recall now has an explain mode. Alongside the results you get the full scoring breakdown: the vector rank, the FTS rank, how RRF fuses the two lists, and which boosts got applied along the way. The whole breakdown adds roughly 50ms on top of a normal query. So when a search result surprises you, you can check the actual scoring path instead of guessing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supersede ledger with undo
&lt;/h2&gt;

&lt;p&gt;When a newer fact replaces an older one, 0.17 records the replacement in a supersede ledger. The history stays queryable, and mistakes stay recoverable: &lt;code&gt;uteke contradictions undo&lt;/code&gt; reverses a supersede you regret. Anyone auditing the system gets a full trail of how each fact changed over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Provenance and trust tiers
&lt;/h2&gt;

&lt;p&gt;Every entry now carries provenance metadata: a SHA-256 hash of its source plus a trust tier. Entries from shaky sources now rank differently from entries with verified origins, so the retrieval layer can weigh reliability instead of treating all memories as equal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contradiction benchmark
&lt;/h2&gt;

&lt;p&gt;We stress tested the contradiction handling on 40 topics. After conflicting updates were ingested, winner@1 accuracy went from 0.850 to 1.000, and stale@5 dropped from 1.000 to 0.000 once supersede took effect. The benchmark script lives in the repo at benchmarks/longmemeval/contradiction_segment.py, so you can reproduce the numbers on your own machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Namespace management and pagination
&lt;/h2&gt;

&lt;p&gt;Namespaces got proper management commands, and list endpoints now return pagination metadata. Building tooling on top of the API no longer means guessing how many pages are left.&lt;/p&gt;

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

&lt;p&gt;Install in one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; codecora.dev/uteke/install | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source code is at &lt;a href="https://github.com/codecoradev/uteke" rel="noopener noreferrer"&gt;github.com/codecoradev/uteke&lt;/a&gt;. The full release write-up, with more detail on everything above, is on the CodeCora blog: &lt;a href="https://blog.codecora.dev/uteke-0-17-explainable-auditable-memory/" rel="noopener noreferrer"&gt;Uteke 0.17: memory that shows its work&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>rust</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Agent memory should be a file. We built it.</title>
      <dc:creator>Anaz S. Aji</dc:creator>
      <pubDate>Sun, 06 Sep 2026 02:35:22 +0000</pubDate>
      <link>https://dev.to/codecoradev/agent-memory-should-be-a-file-we-built-it-664</link>
      <guid>https://dev.to/codecoradev/agent-memory-should-be-a-file-we-built-it-664</guid>
      <description>&lt;p&gt;Last Sunday, a Hacker News post argued that agent memory belongs in plain files. 190 points and 94 comments in two days. For a topic as unglamorous as "save notes to a text file," that is a lot of heat.&lt;/p&gt;

&lt;p&gt;We agreed with the thread, because we had already shipped the thing it asked for. Uteke is a semantic memory engine for AI agents: one Rust binary, one SQLite file on your machine, recall in about 45 milliseconds, fully offline.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the thread got right
&lt;/h2&gt;

&lt;p&gt;Cal Paterson's argument: most agent memory systems are broken. Some lock you into a vendor. Some are absurdly heavy: pgvector, a graph database, and a separate LLM whose only job is deciding what deserves to be remembered. His fix is memory as data: markdown pages in a zip, plus an optional SQLite file for search.&lt;/p&gt;

&lt;p&gt;Files are inspectable. You can &lt;code&gt;cat&lt;/code&gt; a memory, &lt;code&gt;diff&lt;/code&gt; two of them, put the directory in git. No vendor can deprecate your zip file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where plain files stop
&lt;/h2&gt;

&lt;p&gt;Store "we deploy v2.1 to staging after the payment freeze" on a Tuesday. Three weeks later you ask your agent "when are we shipping?" Grep finds nothing, because the words "ship" and "release" never appear in the file. Grep does not do meaning. At five memories that is a curiosity. At five hundred, roughly two weeks of real agent work, it is the difference between memory and an archive.&lt;/p&gt;

&lt;p&gt;So we built the file that answers questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Uteke does
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; codecora.dev/uteke/install | sh
uteke remember &lt;span class="s2"&gt;"Deploy v2.1 to staging at 3pm"&lt;/span&gt;
uteke recall &lt;span class="s2"&gt;"when do we deploy?"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That third command is the one files cannot do. Recall runs hybrid search: SQLite FTS5 for keywords, vector similarity for meaning, fused into one ranked list. A local embedding model (about 188MB) downloads once. After that, nothing leaves your machine.&lt;/p&gt;

&lt;p&gt;Numbers we publish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;98.2% recall_any@5 on LongMemEval-S (500 questions, zero-config fusion default, public harness in the repo)&lt;/li&gt;
&lt;li&gt;42ms P50 / 50ms P95 recall at 10K memories, and latency stays flat from 100 to 10K&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Uteke is Apache-2.0. The repo sits at 237 stars.&lt;/p&gt;

&lt;p&gt;If you nodded along with that thread, those three commands are the whole evaluation. Your agent's memory stays a file you own. The file just answers questions now.&lt;/p&gt;

&lt;p&gt;The full story is on the blog: &lt;a href="https://blog.codecora.dev/uteke-agent-memory-file/" rel="noopener noreferrer"&gt;Agent memory should be a file. We built it.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article is crossposted with &lt;a href="https://blog.codecora.dev/uteke-agent-memory-file/" rel="noopener noreferrer"&gt;blog.codecora.dev&lt;/a&gt; as the canonical source.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rust</category>
      <category>sqlite</category>
      <category>agents</category>
    </item>
    <item>
      <title>A Small Transformer Trained in 1.5 Hours Beat Many LLMs on ARC</title>
      <dc:creator>Anaz S. Aji</dc:creator>
      <pubDate>Wed, 02 Sep 2026 06:56:56 +0000</pubDate>
      <link>https://dev.to/codecoradev/a-small-transformer-trained-in-15-hours-beat-many-llms-on-arc-49h9</link>
      <guid>https://dev.to/codecoradev/a-small-transformer-trained-in-15-hours-beat-many-llms-on-arc-49h9</guid>
      <description>&lt;p&gt;Mithil Vakde trained a small transformer from scratch in 1.5 hours on a rented RTX 5090. The compute cost came to about 67 cents. The model scored 44% on the ARC-AGI-1 public eval, one point behind TRM's 45% and in the same band that left DeepSeek R1, o3-mini, and Gemini 2.5 Pro behind when the TRM paper ran the comparison (&lt;a href="https://arxiv.org/abs/2510.04871" rel="noopener noreferrer"&gt;arXiv 2510.04871&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;This is the third post in his ARC series. The previous result went viral and drew public scrutiny from researchers including Lucas Beyer, Jeremy Howard, and Rohan Anil. The new one raises the score, cuts the cost, and answers every objection in a long appendix.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the model does
&lt;/h2&gt;

&lt;p&gt;Each puzzle becomes a sequence of tokenized grids. The transformer trains on those sequences from scratch at test time, using both the train puzzles and the eval puzzle inputs, with the eval labels hidden. Test-time training is not a loophole here. ARC is a meta-learning benchmark built around skill acquisition, and Chollet's original paper frames the whole thing as a measure of how efficiently a system gains new skills (&lt;a href="https://arxiv.org/abs/1911.01547" rel="noopener noreferrer"&gt;arXiv 1911.01547&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The architecture got a 2026 refresh: 8 layers, SwiGLU, RMSNorm, the NorMuon optimizer, 3D RoPE, and per-task embeddings. Inference augments each test input with color and dihedral permutations, inverts the augmentations, and submits the two most common outputs.&lt;/p&gt;

&lt;p&gt;The biggest change is the loss function. Previous versions trained on input and output tokens. This one trains on output tokens only, which makes the approach supervised. Score went from 40% to 44%. Vakde admits he does not fully understand why, and the training loss got worse even as scores improved. His guess is finite model capacity. The ablations back him up on what carries the result: drop the 3D RoPE and the score falls to about 24%, drop the per-task embeddings and it falls to about 24%. Representations, not compute, are doing the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The lineage it joins
&lt;/h2&gt;

&lt;p&gt;None of these systems pretrain. They learn from the benchmark's roughly thousand examples:&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;Parameters&lt;/th&gt;
&lt;th&gt;ARC-AGI-1&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CompressARC&lt;/td&gt;
&lt;td&gt;76K&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;&lt;a href="https://arxiv.org/abs/2512.06104" rel="noopener noreferrer"&gt;arXiv 2512.06104&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HRM&lt;/td&gt;
&lt;td&gt;27M&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://arxiv.org/abs/2506.21734" rel="noopener noreferrer"&gt;arXiv 2506.21734&lt;/a&gt;; score from &lt;a href="https://arxiv.org/abs/2510.04871" rel="noopener noreferrer"&gt;2510.04871&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TRM&lt;/td&gt;
&lt;td&gt;7M (see caveats)&lt;/td&gt;
&lt;td&gt;45%&lt;/td&gt;
&lt;td&gt;&lt;a href="https://arxiv.org/abs/2510.04871" rel="noopener noreferrer"&gt;arXiv 2510.04871&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vakde's model&lt;/td&gt;
&lt;td&gt;small (1.5 hrs training)&lt;/td&gt;
&lt;td&gt;44%&lt;/td&gt;
&lt;td&gt;&lt;a href="https://mvakde.github.io/blog/44-on-arc-1/" rel="noopener noreferrer"&gt;author's blog&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In about a year, from-scratch systems went from solving a fifth of the eval to nearly half of it, and the cost per result collapsed from research-cluster budgets to spare change on a rented GPU.&lt;/p&gt;

&lt;p&gt;Vakde also measured what happens when you strip his advantages. Restricting training data to ARC-1 plus ConceptARC still scores about 40%. A CompressARC-style unsupervised variant drops to about 18%. He thinks 65% is reachable within the current framework, and a union of solved tasks across his own runs already reached 55%. One request to contributors: do not add more training data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the skeptics have a point
&lt;/h2&gt;

&lt;p&gt;The 67-cent figure deserves a careful read. It counts lifetime compute: training from initialization plus inference on all tasks, which works because every task is trained at once. Dividing that total by task count would amortize it unfairly against models charged per task, and Vakde now compares only against TRM, HRM, and CompressARC for exactly this reason. LLM cost figures, on the other side, leave out pretraining entirely, so no single cost axis treats every approach the same.&lt;/p&gt;

&lt;p&gt;Parameter claims need the same scrutiny. He argues TRM's famous "7M parameters" leaves out O(100M+) trained embedding weights, and that "7M active weights" would be the honest label. Same caution for HRM.&lt;/p&gt;

&lt;p&gt;The score itself stays humble. 44% means 56% of puzzles still fail, and 7% on ARC-2 is early days. OpenAI's o1 reached 75% on ARC-1 through massive post-training (&lt;a href="https://arxiv.org/abs/2412.04604" rel="noopener noreferrer"&gt;ARC Prize 2024 report&lt;/a&gt;), and frontier systems still lead the private leaderboard. This result is about efficiency per training dollar, not about beating GPT-class models across the board. Public eval scores for LLMs are also polluted, since the answers circulate on the internet and end up in training data.&lt;/p&gt;

&lt;p&gt;And this is one researcher's unreviewed work. The previous round got picked apart in public, and while the appendix answers the objections convincingly, independent replication is still thin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Efficiency without the training bill
&lt;/h2&gt;

&lt;p&gt;The pattern matters more to us than the puzzle. Small-model efficiency used to arrive with an invoice: distillation runs, quantization-aware training pipelines, weeks of compute before the first benchmark.&lt;/p&gt;

&lt;p&gt;Vakde's result says the invoice is optional on the reasoning side: train from scratch at test time, in 1.5 hours, for 67 cents. Our own work says the same on the storage side. &lt;a href="https://github.com/codecoradev/vecq" rel="noopener noreferrer"&gt;vecq&lt;/a&gt;, our training-free vector quantization library, gets its 4-bit and 5-bit codes from Lloyd-Max centroids that are fixed constants. There is no training pass to pay for at all.&lt;/p&gt;

&lt;p&gt;In our benchmarks, &lt;a href="https://blog.codecora.dev/vecq-4-bit-vector-search/" rel="noopener noreferrer"&gt;4-bit codes hit recall@10 of 0.958 at 5.98x compression, scanning at 0.89 ms per query on ARM&lt;/a&gt;, and the current release defaults to 5-bit at 4.79x compression with 0.979 &lt;a href="mailto:recall@10"&gt;recall@10&lt;/a&gt;. &lt;a href="https://blog.codecora.dev/quantization-cpu-to-96gb-and-embeddings/" rel="noopener noreferrer"&gt;The same quantization math scales all the way up to an 87GB model on a CPU&lt;/a&gt;. Inside our memory engine, the pipeline reached &lt;a href="https://blog.codecora.dev/uteke-vs-chromadb-vs-mem0-benchmark/" rel="noopener noreferrer"&gt;98.2% recall against ChromaDB and Mem0&lt;/a&gt; without any learned quantizer. The brute-force scan does give back some speed to HNSW, and &lt;a href="https://blog.codecora.dev/why-hnsw-vector-index-uteke/" rel="noopener noreferrer"&gt;why we pick that trade&lt;/a&gt; is an architectural choice for edge hardware, not an accident.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to watch
&lt;/h2&gt;

&lt;p&gt;The interesting shift is the price of admission for credible efficiency results: no pretraining run, one GPU, under two hours, spare change. Chollet's skill-acquisition framing finally has a small-model track with real momentum behind it, and Vakde argues the organizers should go further and ban offline pretraining to make ARC a true sample-efficiency test. His own result is the existence proof that such a rule is survivable.&lt;/p&gt;

&lt;p&gt;The author believes 65% is reachable and that hand-written GPU kernels could cut his costs another 10x. Either would have sounded like trolling a year ago.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Mithil Vakde, &lt;a href="https://mvakde.github.io/blog/44-on-arc-1/" rel="noopener noreferrer"&gt;"44% on ARC-AGI-1 in 67 cents"&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2510.04871" rel="noopener noreferrer"&gt;"Less is More: Recursive Reasoning with Tiny Networks"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2506.21734" rel="noopener noreferrer"&gt;"Hierarchical Reasoning Model"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2512.06104" rel="noopener noreferrer"&gt;"ARC-AGI Without Pretraining"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Francois Chollet, &lt;a href="https://arxiv.org/abs/1911.01547" rel="noopener noreferrer"&gt;"On the Measure of Intelligence"&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2412.04604" rel="noopener noreferrer"&gt;"ARC Prize 2024: Technical Report"&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;This article is crossposted with &lt;a href="https://blog.codecora.dev/small-transformer-1-5-hours-arc/" rel="noopener noreferrer"&gt;blog.codecora.dev&lt;/a&gt; as the canonical source.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>vectorsearch</category>
      <category>quantization</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>Why bigger context windows won't kill memory systems</title>
      <dc:creator>Anaz S. Aji</dc:creator>
      <pubDate>Wed, 02 Sep 2026 03:57:24 +0000</pubDate>
      <link>https://dev.to/codecoradev/why-bigger-context-windows-wont-kill-memory-systems-1fmh</link>
      <guid>https://dev.to/codecoradev/why-bigger-context-windows-wont-kill-memory-systems-1fmh</guid>
      <description>&lt;p&gt;A claim keeps making the rounds: context windows are at a million tokens and climbing, so external memory is a stopgap that better models will make obsolete. If that's true, we picked a strange moment to publish a memory benchmark. We weren't worried, but we did want to know what the evidence says. So we read the papers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a million tokens does to information
&lt;/h2&gt;

&lt;p&gt;The seminal result is Liu et al's "Lost in the Middle" (&lt;a href="https://arxiv.org/abs/2307.03172" rel="noopener noreferrer"&gt;arXiv 2307.03172&lt;/a&gt;). Tested on multi-document QA and key-value retrieval, models performed best when relevant information sat at the beginning or end of the context, and degraded hard when it sat in the middle.&lt;/p&gt;

&lt;p&gt;For a while you could hope that was an engineering wart. Then a 2026 paper derived the same U-shaped retrieval profile from a theoretical model of attention dynamics (&lt;a href="https://arxiv.org/abs/2605.09213" rel="noopener noreferrer"&gt;arXiv 2605.09213&lt;/a&gt;). The position bias falls out of the math. Bigger windows inherit it. They don't remove it.&lt;/p&gt;

&lt;p&gt;Practice matches theory. In a white-box study of coding agents, pass rate fell from 8 of 10 runs in a clean 10,991-character context to 3 of 10 runs at 299,140 characters, and padding the context with irrelevant material hurt as much as relevant code (&lt;a href="https://arxiv.org/abs/2607.17937" rel="noopener noreferrer"&gt;arXiv 2607.17937&lt;/a&gt;). Half the drop had nothing to do with relevance.&lt;/p&gt;

&lt;p&gt;Long-horizon search shows the same shape. Across four flagship models and three benchmarks, researchers documented "premature termination": models give up or answer with falling confidence long before they approach the window limit (&lt;a href="https://arxiv.org/abs/2606.29718" rel="noopener noreferrer"&gt;arXiv 2606.29718&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  The economics nobody mentions
&lt;/h2&gt;

&lt;p&gt;Everything inside the window is re-paid on every call, in every session. A fact from last March costs the same as something the user said ten seconds ago, every single time you send it.&lt;/p&gt;

&lt;p&gt;Retrieval inverts that curve. Store once, then pay for a small set of relevant records when they're needed.&lt;/p&gt;

&lt;p&gt;There's a real trade-off inside memory design itself. Keep raw records and you preserve detail but burn budget. Consolidate and you cover more ground per token but risk dropping a query-critical fact (&lt;a href="https://arxiv.org/abs/2607.17545" rel="noopener noreferrer"&gt;arXiv 2607.17545&lt;/a&gt;). Both strategies argue for the same thing: a small, deliberately chosen working set, not a firehose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory is not a small context window
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://arxiv.org/abs/2410.10813" rel="noopener noreferrer"&gt;LongMemEval&lt;/a&gt; (arXiv 2410.10813) breaks long-term memory into five measurable abilities: information extraction, multi-session reasoning, temporal reasoning, knowledge updates, and abstention. Look at that list. None of them mean "hold more tokens at once."&lt;/p&gt;

&lt;p&gt;Knowledge updates are the cleanest example. When a user changes deploy targets, the old value has to be overwritten. In a million-token window, the stale fact and the current one both sit there, and the model has to guess which wins. A memory system that tracks updates resolves it by design.&lt;/p&gt;

&lt;p&gt;The field is still moving. &lt;a href="https://arxiv.org/abs/2605.12493" rel="noopener noreferrer"&gt;LongMemEval-V2&lt;/a&gt; landed in May 2026 and pushes evaluation toward whether an agent becomes an experienced colleague in its environment. Nobody builds benchmarks for problems they consider solved.&lt;/p&gt;

&lt;h2&gt;
  
  
  When big context wins
&lt;/h2&gt;

&lt;p&gt;Credit where it's due. Reasoning over one large document you already have, one-shot analysis that needs the whole thing in view at once, needle-style lookups inside a single snapshot: if the world fits in the window and everything in it is current, fill it. Memory systems earn their keep when history is long and facts change across many sessions, which describes most real assistants after their first week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Our numbers, reproducible
&lt;/h2&gt;

&lt;p&gt;We build a memory engine (&lt;a href="https://github.com/codecoradev/uteke" rel="noopener noreferrer"&gt;Uteke&lt;/a&gt;) and we test it the boring way. On LongMemEval-S with 500 questions, it scores &lt;a href="https://blog.codecora.dev/uteke-vs-chromadb-vs-mem0-benchmark/" rel="noopener noreferrer"&gt;98.2% recall_any@5&lt;/a&gt;. Then we &lt;a href="https://blog.codecora.dev/we-published-our-benchmark-then-we-tried-to-break-it/" rel="noopener noreferrer"&gt;re-ran the entire suite on a different CPU architecture&lt;/a&gt;: 107 of 108 questions produced identical rankings, and the one that moved was an adjacent-rank near-tie we traced to float summation order.&lt;/p&gt;

&lt;p&gt;The harness is in the repo. Run your own, and treat numbers you cannot reproduce, including ours, as marketing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;Bigger windows raise the ceiling on working memory. Persistence, salience, and overwrite stay separate jobs, and the field is now measuring them directly. Context and memory do different jobs. The agents people keep coming back to are the ones that stopped starting from zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://arxiv.org/abs/2307.03172" rel="noopener noreferrer"&gt;Lost in the Middle: How Language Models Use Long Contexts&lt;/a&gt; (arXiv 2307.03172)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://arxiv.org/abs/2605.09213" rel="noopener noreferrer"&gt;Kinetic theory for Transformers and the lost-in-the-middle phenomenon&lt;/a&gt; (arXiv 2605.09213)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://arxiv.org/abs/2607.17937" rel="noopener noreferrer"&gt;When and How Context Rot Appears in Coding Agents&lt;/a&gt; (arXiv 2607.17937)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://arxiv.org/abs/2606.29718" rel="noopener noreferrer"&gt;Diagnosing and Mitigating Context Rot in Long-horizon Search&lt;/a&gt; (arXiv 2606.29718)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://arxiv.org/abs/2607.17545" rel="noopener noreferrer"&gt;Retain or Consolidate? Budget-Dependent Operator Selection for Language Agent Memory&lt;/a&gt; (arXiv 2607.17545)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://arxiv.org/abs/2410.10813" rel="noopener noreferrer"&gt;LongMemEval: Benchmarking Chat Assistants on Long-Term Interactive Memory&lt;/a&gt; (arXiv 2410.10813)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://arxiv.org/abs/2605.12493" rel="noopener noreferrer"&gt;LongMemEval-V2: Evaluating Long-Term Agent Memory Toward Experienced Colleagues&lt;/a&gt; (arXiv 2605.12493)&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Full write-up lives on &lt;a href="https://blog.codecora.dev/context-vs-memory/" rel="noopener noreferrer"&gt;our blog&lt;/a&gt;, canonical source for this post.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>memory</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>We re-ran our benchmark on a different CPU architecture. 107 of 108 matched.</title>
      <dc:creator>Anaz S. Aji</dc:creator>
      <pubDate>Tue, 01 Sep 2026 14:06:41 +0000</pubDate>
      <link>https://dev.to/codecoradev/we-re-ran-our-benchmark-on-a-different-cpu-architecture-107-of-108-matched-2n6a</link>
      <guid>https://dev.to/codecoradev/we-re-ran-our-benchmark-on-a-different-cpu-architecture-107-of-108-matched-2n6a</guid>
      <description>&lt;p&gt;We publish benchmarks for Uteke, our open-source memory engine. The headline this week: 98.2% recall on LongMemEval-S. 500 questions, zero config, no LLM in the retrieval path.&lt;/p&gt;

&lt;p&gt;Then we asked the question every benchmark should answer: does the number survive on different hardware?&lt;/p&gt;

&lt;p&gt;The published run came from cloud x86 infrastructure. The re-run happened on a 4-core ARM desktop. Same v0.16.0 binary, same public harness, 108-question subset.&lt;/p&gt;

&lt;p&gt;We compared per question, ranking against ranking.&lt;/p&gt;

&lt;p&gt;107 of 108 identical.&lt;/p&gt;

&lt;p&gt;The one difference is the interesting part. Both runs retrieved the same top-10 sessions. One session sat at rank 5 in the published run and rank 6 in the re-run. Our retrieval fuses two rankings with Reciprocal Rank Fusion, which is floating-point math all the way down. Cross a CPU architecture boundary and near-ties can round differently. That is the whole story: one adjacent-rank flip, and the subset aggregate moved from 100.0% to 99.4%.&lt;/p&gt;

&lt;p&gt;If you compare memory systems for a living, the field guide we wrote alongside this matters more than our numbers. Check what the figure is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;recall_any@K means at least one gold session lands in the top K. recall_all@K means all of them. Vendors mostly publish the first family. Our own run scores 98.2% on the first and 88.0% on the second, from the same data. Ten honest points apart.&lt;/li&gt;
&lt;li&gt;The cutoff matters. Recall@15 is easier than &lt;a href="mailto:Recall@5"&gt;Recall@5&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Sample size matters. 100 questions is a smoke test, 500 is a validation run.&lt;/li&gt;
&lt;li&gt;Version and date matter. Benchmarks are snapshots of moving software.&lt;/li&gt;
&lt;li&gt;The harness being public matters most. A table is marketing. A harness you can clone is a benchmark.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full post has the comparison chart with per-metric disclosures, the full field table (Mnemosyne, MemPalace, agentmemory, Supermemory, each with its metric labeled), and what we deliberately do not claim:&lt;/p&gt;

&lt;p&gt;Read the full breakdown: &lt;a href="https://blog.codecora.dev/we-published-our-benchmark-then-we-tried-to-break-it/" rel="noopener noreferrer"&gt;https://blog.codecora.dev/we-published-our-benchmark-then-we-tried-to-break-it/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don't trust our benchmark. Run your own. The harness and reproduction results are in the repo.&lt;/p&gt;

&lt;p&gt;Cross-posted from the CodeCora blog, where we write about local-first AI infrastructure.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>benchmark</category>
      <category>rust</category>
      <category>llm</category>
    </item>
    <item>
      <title>An 87GB model ran on a CPU at 8 tok/s. Quantization did that.</title>
      <dc:creator>Anaz S. Aji</dc:creator>
      <pubDate>Tue, 01 Sep 2026 06:44:17 +0000</pubDate>
      <link>https://dev.to/codecoradev/an-87gb-model-ran-on-a-cpu-at-8-toks-quantization-did-that-57km</link>
      <guid>https://dev.to/codecoradev/an-87gb-model-ran-on-a-cpu-at-8-toks-quantization-did-that-57km</guid>
      <description>&lt;p&gt;Someone on r/LocalLLaMA benchmarked Qwen3.8-Flash-Next in llama.cpp from CPU-only all the way to 96GB of VRAM. The model file is 87.2 GiB. On a plain CPU it decodes at 8.34 tok/s. With the full 96GB, 109 tok/s.&lt;/p&gt;

&lt;p&gt;The number that looks like a party trick is the CPU one. It is a compression story. The weights are 4-bit. At 16-bit the file would be around 4x bigger, north of 300GB, and no consumer setup loads that, GPU or not.&lt;/p&gt;

&lt;p&gt;Two more findings from the benchmark worth stealing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At 245K context, the 96GB advantage over 24GB shrinks from 2.80x to 1.45x. Long context flattens everything.&lt;/li&gt;
&lt;li&gt;Dropping the model's 27.2 GiB embedding table onto the GPU cut decode from 108.5 to 1.95 tok/s. RAM placement was 55.6x faster. Where a tensor lives matters as much as how much VRAM you have.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why this matters here: embeddings hit the same wall at smaller scale. Every f32 embedding at 768 dims costs 3,072 bytes. A 100k-vector agent memory is about 300MB. Fine on a server, real money on a phone.&lt;/p&gt;

&lt;p&gt;We built vecq for that. Training-free vector quantization in Rust (Apache-2.0, crate: vecq-core). No calibration data, deterministic results across platforms. On real EmbeddingGemma vectors: 4.78x smaller at default width (642 bytes/vector) with recall@10 of 0.979, and the index builds 14x faster than HNSW.&lt;/p&gt;

&lt;p&gt;Honest trade: search is brute force, about 14x slower than HNSW at default width. Made for on-device indexes in the thousands of vectors, not million-vector servers. The file format is versioned and readers accept older versions, so indexes keep loading across releases.&lt;/p&gt;

&lt;p&gt;Full breakdown with the benchmark tables is on the blog:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://blog.codecora.dev/quantization-cpu-to-96gb-and-embeddings/" rel="noopener noreferrer"&gt;https://blog.codecora.dev/quantization-cpu-to-96gb-and-embeddings/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/codecoradev/vecq" rel="noopener noreferrer"&gt;https://github.com/codecoradev/vecq&lt;/a&gt;&lt;br&gt;
Crate: &lt;a href="https://crates.io/crates/vecq-core" rel="noopener noreferrer"&gt;https://crates.io/crates/vecq-core&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>llm</category>
      <category>vectors</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>Everyone Is Building Agent Memory Now: What the Wave Proves</title>
      <dc:creator>Anaz S. Aji</dc:creator>
      <pubDate>Mon, 31 Aug 2026 10:28:14 +0000</pubDate>
      <link>https://dev.to/ajianaz/everyone-is-building-agent-memory-now-what-the-wave-proves-46de</link>
      <guid>https://dev.to/ajianaz/everyone-is-building-agent-memory-now-what-the-wave-proves-46de</guid>
      <description>&lt;p&gt;Three agent memory tools landed in my research feed this week: Agent Recall (Python knowledge graph), Sediment (Rust single binary), and Mimirs (an MCP server for codebase memory). Earlier this month: Zero-Mem and an SQLite-FTS5 MCP server, both front-paged on Hacker News.&lt;/p&gt;

&lt;p&gt;When three independent builders ship in the same category in one week, the market is telling you something. A wave like this reveals two things: what has been settled, and what everyone is still avoiding.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's settled
&lt;/h2&gt;

&lt;p&gt;Strip away the different READMEs and every serious entrant this month made the same three calls:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;SQLite as storage.&lt;/strong&gt; One file, zero ops. No Postgres, no managed cloud.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local-first by default.&lt;/strong&gt; Your memories live on your machine, not behind someone's API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP for distribution.&lt;/strong&gt; The tool plugs into the agent you already run.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Six months ago that stack was a contrarian bet. Today it's the category default. We built &lt;a href="https://github.com/codecoradev/uteke" rel="noopener noreferrer"&gt;Uteke&lt;/a&gt; on exactly this (SQLite, local ONNX embeddings, embedded vectors, MCP), and the early objection "why a local file when cloud vector DBs exist?" has basically disappeared.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's still open
&lt;/h2&gt;

&lt;p&gt;Local, SQLite, and MCP are table stakes now. They get you into the category; they don't differentiate you inside it. Most new entrants punt on the hard parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Provenance.&lt;/strong&gt; Where did a recalled fact come from? Most layers store content and lose the receipt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consolidation.&lt;/strong&gt; Without dedup and merge, memory degrades into a junk drawer of near-duplicates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-agent.&lt;/strong&gt; Flat &lt;code&gt;user_id&lt;/code&gt; schemas make every fact single-player. Real workflows aren't.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search.&lt;/strong&gt; Keyword-only misses meaning. Vector-only misses exact terms. You need both, fused.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The honest bit
&lt;/h2&gt;

&lt;p&gt;Sediment publishes its own benchmarks, which is great for the whole category. Agent Recall's scope hierarchies solve a real problem for agencies. What the wave hasn't shipped yet is the combination I actually want: one simple binary with provenance, consolidation, multi-agent rooms, and fused search in one package.&lt;/p&gt;

&lt;p&gt;That combination is what we've been building. Uteke is our Apache-2.0 take: source citations on every memory, near-duplicate consolidation, rooms for multi-agent writes, hybrid fusion search, ~45ms recall, fully offline, MCP-ready.&lt;/p&gt;

&lt;p&gt;If you're evaluating this wave, score tools on the boring parts: citations, consolidation, multi-agent, fused search. The wave settled the thesis. Operations is the next six months.&lt;/p&gt;

&lt;p&gt;The full breakdown (competitor scorecard + the HN launch trail) is on our blog:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://blog.codecora.dev/agent-memory-wave/" rel="noopener noreferrer"&gt;Everyone Is Building Agent Memory Now&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/codecoradev/uteke" rel="noopener noreferrer"&gt;codecoradev/uteke&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>llm</category>
      <category>database</category>
    </item>
    <item>
      <title>Your Agent Keeps Forgetting Because You Keep Switching Models</title>
      <dc:creator>Anaz S. Aji</dc:creator>
      <pubDate>Mon, 31 Aug 2026 07:27:59 +0000</pubDate>
      <link>https://dev.to/ajianaz/your-agent-keeps-forgetting-because-you-keep-switching-models-oig</link>
      <guid>https://dev.to/ajianaz/your-agent-keeps-forgetting-because-you-keep-switching-models-oig</guid>
      <description>&lt;p&gt;Three weeks ago, the fastest-growing model on r/LocalLLaMA had no name. The community called it &lt;strong&gt;ox-alpha&lt;/strong&gt;, a stealth release nobody officially claimed. People benchmarked it blind and argued about who built it, then added it to their agent stacks anyway. On August 26 the mask came off: ox-alpha is &lt;strong&gt;GLM-5.3-Flash&lt;/strong&gt; (320B params, 18B active, MIT).&lt;/p&gt;

&lt;p&gt;That same month, Qwen shipped &lt;strong&gt;five releases in 36 days&lt;/strong&gt;. If you run AI agents, that's a maintenance problem your roadmap didn't budget for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The churn tax
&lt;/h2&gt;

&lt;p&gt;Every model swap makes an agent that "remembers" via context pay again: prompts need retuning, tool calls need retesting, and the context you curated evaporates. If memory lives in the model, model churn is memory loss. Weekly releases make it a weekly tax.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory that outlives the model
&lt;/h2&gt;

&lt;p&gt;We built &lt;a href="https://github.com/codecoradev/uteke" rel="noopener noreferrer"&gt;Uteke&lt;/a&gt; on the opposite bet: models are commodities, memory is the asset. One local binary, SQLite plus a vector index, no server. Any model reads the same memory via MCP or CLI, so your agent's brain survives every swap. The README numbers: 42ms P50 recall at 10K memories, Recall@5 0.946 on LongMemEval.&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;curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; codecora.dev/uteke/install | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full breakdown (release timeline, the churn tax, architecture notes) is on the blog: &lt;a href="https://blog.codecora.dev/your-agent-keeps-forgetting-model-churn/" rel="noopener noreferrer"&gt;Your Agent Keeps Forgetting Because You Keep Switching Models&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What survives a model swap in your stack today?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>agents</category>
      <category>mcp</category>
    </item>
    <item>
      <title>I built a memory engine for AI agents. No cloud required.</title>
      <dc:creator>Anaz S. Aji</dc:creator>
      <pubDate>Mon, 27 Jul 2026 14:17:21 +0000</pubDate>
      <link>https://dev.to/ajianaz/i-built-a-memory-engine-for-ai-agents-no-cloud-required-47mo</link>
      <guid>https://dev.to/ajianaz/i-built-a-memory-engine-for-ai-agents-no-cloud-required-47mo</guid>
      <description>&lt;p&gt;---cover_image: &lt;a href="https://cdn.codecora.dev/2026/07/uteke_thumbnail_compressed.png---Every" rel="noopener noreferrer"&gt;https://cdn.codecora.dev/2026/07/uteke_thumbnail_compressed.png---Every&lt;/a&gt; AI agent I've used has the same problem: it forgets everything between sessions.You explain your architecture, your trade-offs, your team conventions. Next conversation? Blank slate. You're re-explaining the same things to a model that has zero memory.This isn't a prompt engineering problem. It's an infrastructure gap.## So I built one&lt;a href="https://github.com/codecoradev/uteke" rel="noopener noreferrer"&gt;Uteke&lt;/a&gt; is a local-first semantic memory engine written in Rust. Single binary, no Docker required (optional if you want it), no API keys, no cloud account.Install it, store memories, retrieve them in ~45ms. That's the whole loop.## How it works (the short version)When you store a memory, two things happen in parallel:- &lt;strong&gt;Vector search&lt;/strong&gt; using a local embedding model (188MB, downloads once, no API calls)- &lt;strong&gt;Full-text search&lt;/strong&gt; via SQLite FTS5 for exact keyword matchesAt query time, both indexes fire simultaneously and &lt;a href="https://en.wikipedia.org/wiki/Reciprocal_rank_fusion" rel="noopener noreferrer"&gt;Reciprocal Rank Fusion&lt;/a&gt; merges the results. You get semantic matches (ask "authentication" → finds "login flow") and exact hits in one ranked list.Your data stays at &lt;code&gt;~/.codecora/uteke/&lt;/code&gt;. Nothing leaves your machine.## The numbers- 58 days since first commit- v0.10.1, 40+ releases- &lt;a href="https://github.com/codecoradev/uteke" rel="noopener noreferrer"&gt;148 stars&lt;/a&gt;, 16 forks on GitHub- ~5ms vector recall at 10K entries, ~45ms full pipeline- Apache 2.0 licensed## Install&lt;br&gt;
&lt;br&gt;
&lt;code&gt;bash# fastestcurl -sSL codecora.dev/install | sh# homebrewbrew install codecoradev/tap/uteke# from sourcecargo install uteke-cli&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
First run downloads the embedding model (~188MB). After that, everything is local.## Why local-first matters for AI memoryCloud memory solutions work until they don't. Your API key gets rotated, the service goes down, your data lives in someone else's database, and you're paying per query for something that should be fast and private.Uteke runs the same on your laptop, a CI runner, or a server. No network latency. No vendor lock-in. No per-query pricing.---&lt;strong&gt;I wrote a deep-dive on the architecture, embedding pipeline, and benchmark details on our blog.&lt;/strong&gt; If you want the technical breakdown, &lt;a href="https://blog.codecora.dev/uteke-local-first-memory-engine" rel="noopener noreferrer"&gt;read it here&lt;/a&gt;.&lt;/p&gt;

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