<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Lore Blog</title><description>Product notes, engineering updates, and memory architecture deep dives from Lore.</description><link>https://withlore.ai/</link><language>en-us</language><atom:link href="https://withlore.ai/rss.xml" rel="self" type="application/rss+xml"/><item><title>How Lore remembers, forgets, and changes its mind</title><link>https://withlore.ai/blog/how-lore-remembers-and-forgets/</link><guid isPermaLink="true">https://withlore.ai/blog/how-lore-remembers-and-forgets/</guid><description>Most memory tools now ship a set of principles for how an agent should manage its context. Lore&apos;s principles work differently, because the layer enforces them instead of asking the agent to. Here are the rules Lore runs on.</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Everywhere you look, agents are being taught to fix themselves. Self-healing loops,
self-improving memory, a model that reads back its own transcript, rewrites its own
instructions, and prunes whatever it decides has gone stale. There is real energy here, and
some of it genuinely works.&lt;/p&gt;
&lt;p&gt;Here is the catch, and it is an old one. Self-correction is the hardest kind. Whatever made a
mistake is usually the worst-placed thing to catch it, because from the inside the mistake
still looks like a reasonable call. People hit this constantly, which is why we lean on
outside help: an editor for the draft you have read too many times, a reviewer for the code
you are sure is fine, a colleague who remembers you already tried that back in March. The
whole value is that they are not you. A model sits in the same spot. Once it has written a
shaky assumption into its own memory, it is not the thing you can count on to go back and
find the error.&lt;/p&gt;
&lt;p&gt;Lore takes a different road to the same destination. You never have to manage memory, and
neither does the agent. A fixed set of rules, enforced by the layer that sits in the request
path, makes the call on every turn instead. That distinction matters more than it sounds. A
set of principles written &lt;em&gt;for&lt;/em&gt; an agent is guidance, and it holds only when the agent is
paying attention. The same principles built &lt;em&gt;into&lt;/em&gt; the layer are guarantees. They hold
whether or not anyone is paying attention that turn.&lt;/p&gt;
&lt;p&gt;And because that layer sits outside the model, a model swap does not take your memory with
it. A newer model arrives brilliant and completely unfamiliar with your work, the way a new
hire does; the layer is the institutional memory already in the room, so the model is useful
on the first turn instead of the fiftieth. Change the engine as often as you like. The
assistant, and everything it has learned, stays.&lt;/p&gt;
&lt;p&gt;So here are the rules Lore runs on. Not aspirations we hope a cooperative model follows: the
actual behavior of the layer that touches every token.&lt;/p&gt;
&lt;h2 id=&quot;you-never-have-to-remember-to-remember&quot;&gt;You never have to remember to remember&lt;/h2&gt;
&lt;p&gt;Capture is automatic. Lore sits between your agent and the model, and it distills your work
as it happens. You do not tag a message, save a decision, or file anything away for later.&lt;/p&gt;
&lt;p&gt;This is the whole reason capture lives in the layer. Memory you have to reach for is memory
you will forget to reach for, right at the moment you are heads-down on the actual problem.
The filing was never the hard part, and it should never be your job. If a rule for managing
memory depends on you (or the agent) remembering to invoke it, it is already broken.&lt;/p&gt;
&lt;p&gt;Getting it back works the same way. When memory only returns because the agent thought to
call a search tool, the knowledge can be sitting right there and never reach the model,
because nobody went looking. Lore surfaces what is relevant on its own, and keeps a recall
tool for when the agent wants to dig deeper, so recall does not hang on the agent’s
discipline on any given turn either.&lt;/p&gt;
&lt;h2 id=&quot;being-surfaced-is-not-being-right&quot;&gt;Being surfaced is not being right&lt;/h2&gt;
&lt;p&gt;When Lore pulls a memory into your context, that is a bet about what might be relevant this
turn. It is not a vote on whether the memory is true. Selecting an entry never raises its
confidence.&lt;/p&gt;
&lt;p&gt;That separation keeps the store honest. A note that keeps getting surfaced but never actually
helps does not get more entrenched just for being loud. Confidence is earned somewhere else,
by whether the knowledge holds up in practice, and the act of showing it to the model is kept
strictly out of that accounting.&lt;/p&gt;
&lt;h2 id=&quot;confidence-is-earned-and-it-decays&quot;&gt;Confidence is earned, and it decays&lt;/h2&gt;
&lt;p&gt;Every entry carries a confidence score. It rises when the knowledge proves useful across
sessions and drifts down when it sits untouched. Fall below the floor and the entry is
evicted. The store stays bounded by usefulness rather than by a fixed timer that forgets
things on a schedule, whether or not you still need them.&lt;/p&gt;
&lt;p&gt;There is one deliberate exception. The preferences you state outright, the ones that follow
you across every project, are protected from that decay. Those are not guesses Lore made
about you, so they are not subject to the same erosion as things Lore inferred.&lt;/p&gt;
&lt;h2 id=&quot;when-two-things-disagree-you-get-told-not-overruled&quot;&gt;When two things disagree, you get told, not overruled&lt;/h2&gt;
&lt;p&gt;Opposing rules are never quietly merged. “Always use tabs” and “always use spaces” are not
two versions of one fact, and collapsing them would be Lore deciding for you. Both are kept
and ranked by confidence.&lt;/p&gt;
&lt;p&gt;Genuine contradictions still need settling, so Lore looks for them in the background and flags
each pair for you: on the knowledge dashboard, or from &lt;code&gt;lore data contradictions&lt;/code&gt;. You pick the
rule that still holds, or you keep both. Lore never merges them and never deletes the losing
side on its own. The layer’s job here is narrow on purpose: notice the conflict and hand it to
you. Picking a winner silently is exactly the kind of decision a memory system should not be
making.&lt;/p&gt;
&lt;h2 id=&quot;nothing-is-really-deleted&quot;&gt;Nothing is really deleted&lt;/h2&gt;
&lt;p&gt;Knowledge is append-only. An edit writes a new version and keeps the old one; a delete leaves
a marker rather than erasing the trail. Because the history is intact, you can diff what your
agent has learned and roll it back, the same way you already do with code.&lt;/p&gt;
&lt;p&gt;That is not an abstract property. Curated knowledge lands in a plain
&lt;a href=&quot;https://withlore.ai/different/&quot;&gt;&lt;code&gt;.lore.md&lt;/code&gt;&lt;/a&gt; file in your repo, so a change to your agent’s memory shows up in a
pull request and gets reviewed by the same people and the same process that review your code.
Memory that changes without a diff is memory nobody can audit.&lt;/p&gt;
&lt;h2 id=&quot;the-live-edge-stays-whole&quot;&gt;The live edge stays whole&lt;/h2&gt;
&lt;p&gt;The most recent turns are always protected. Whatever gets distilled or dropped as older
context is compressed, the active end of the conversation, where the work is actually
happening right now, is never touched. Everything else is negotiable under pressure; the edge
you are working on is not.&lt;/p&gt;
&lt;h2 id=&quot;whats-learned-lives-in-tokens-not-weights&quot;&gt;What’s learned lives in tokens, not weights&lt;/h2&gt;
&lt;p&gt;Lore learns by writing durable text, not by fine-tuning the model. That is a deliberate
choice. Text is something you can read, carry across providers and across model generations,
and undo a line at a time. Knowledge baked into weights is none of those things: you cannot
inspect it, it does not move to the next model, and you lose it on the upgrade. The model is
the part you replace. The knowledge is the part you keep.&lt;/p&gt;
&lt;h2 id=&quot;boring-on-purpose&quot;&gt;Boring on purpose&lt;/h2&gt;
&lt;p&gt;Making a model better at checking itself is worth doing, and we hope it keeps improving. But
the corrections you can lean on are the ones that do not wait for the model to notice, this
turn, that it was wrong. Those come from outside it.&lt;/p&gt;
&lt;p&gt;Lore’s bet is narrower, and honestly a little boring in the way infrastructure should be: the
rules that decide what stays, what fades, and what gets surfaced ought to hold on every single
turn, not only when the agent happens to be attending to them. A principle the layer enforces
is one you never have to hope about.&lt;/p&gt;
&lt;p&gt;And because a layer that sees every token is a lot to ask you to trust, the rules above are
not a description you take on faith. Lore is &lt;a href=&quot;https://fair.io&quot;&gt;Fair Source&lt;/a&gt;
(FSL-1.1-Apache-2.0), so the code that decides what your agent remembers and forgets is right
there for you to read, and it turns into Apache 2.0 on a timer. Principles you can enforce are
better than principles you have to believe.&lt;/p&gt;</content:encoded><dc:creator>Lore Team</dc:creator><category>memory</category><category>principles</category><category>agents</category></item><item><title>Why memory is not enough</title><link>https://withlore.ai/blog/why-memory-is-not-enough/</link><guid isPermaLink="true">https://withlore.ai/blog/why-memory-is-not-enough/</guid><description>A long-term memory store remembers what you said last week. It can&apos;t manage the context window that&apos;s overflowing right now. Those are two different problems, and only one of them is getting solved.</description><pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ask anyone building agents what “memory” means and you’ll get the same answer: a place to
store facts and decisions so the agent can pull them back later. A vector DB, a knowledge
graph, a folder of notes, take your pick. It remembers what you discussed last week, and
there are good tools that do this well now.&lt;/p&gt;
&lt;p&gt;Now ask the harder question. What happens when the session you’re in &lt;em&gt;right now&lt;/em&gt; crosses
180K tokens and the agent starts forgetting how it began?&lt;/p&gt;
&lt;p&gt;The usual answer is a list of chores. Spin up a background agent. Write the plan to a file,
then a second, then a third. Open a trail of GitHub issues. Leave notes in scratch markdown.
Keep a tidy &lt;code&gt;AGENTS.md&lt;/code&gt; and prompt more carefully while you’re at it. Every one of these is
the same move: manually push state out of the window and hope it finds its way back. That’s
you doing the filing. Maybe your tools file it for you now, straight from the conversation,
so you never lift a finger. Better, but capture was never the hard part. The question is what
stays in the window &lt;em&gt;this turn&lt;/em&gt;, and saving something to a store, by hand or automatically,
doesn’t decide that.&lt;/p&gt;
&lt;p&gt;When the filing isn’t enough and the window fills mid-task, the one automatic mechanism every
major agent ships kicks in: compaction. The client crushes the older turns into a lossy blob,
drops the originals, and hands you back an agent that was a genius a minute ago and now can’t
quite remember its own name. We all quietly accepted this for something that happens every
session, often more than once: the most predictable failure in agentic coding, answered by a
guillotine. So why has nobody built the thing that keeps up?&lt;/p&gt;
&lt;h2 id=&quot;two-problems-hiding-behind-one-word&quot;&gt;Two problems hiding behind one word&lt;/h2&gt;

















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;What you say&lt;/th&gt;&lt;th&gt;What it actually needs&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;”What did we decide about auth last week?”&lt;/td&gt;&lt;td&gt;A long-term memory store.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;”Wait, what was the other thing you said we should do after this?”&lt;/td&gt;&lt;td&gt;Active context-window management.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;These are not the same layer. A long-term store sits &lt;em&gt;beside&lt;/em&gt; your conversation, like a
notebook you keep open on the desk. It only holds what you bothered to write down, and it
only helps when you reach for it. That’s exactly right for what carries across sessions: a
decision, a preference, a constraint from days ago. This part has had real product
attention, and it shows.&lt;/p&gt;
&lt;p&gt;The live window is the other half, and it’s the one you’re left to manage by hand, mid-task.
People do this well, but it’s a tax: every note you set down pulls your focus off the actual
problem, and you have to remember to pick it back up later. And every tool for it is the
same shape: static (a markdown file the model may or may not read), offline (an indexer you
run between sessions), or just advice (“prompt better”). None of it is in the loop at the one
moment that matters, when the window is overflowing &lt;em&gt;while you work&lt;/em&gt;. The one mechanism that
does fire on its own is compaction.&lt;/p&gt;
&lt;h2 id=&quot;a-store-on-the-sidelines-cant-intervene&quot;&gt;A store on the sidelines can’t intervene&lt;/h2&gt;
&lt;p&gt;That compaction step is triage with a blunt instrument: it runs whether or not it’s about to
drop something you still need, with no idea what’s worth keeping. Now bolt the best long-term
memory store on the planet onto the same session. What changes? Nothing. The store can answer
a question &lt;em&gt;if you ask it&lt;/em&gt;, but compaction doesn’t ask questions. It just runs. The store
never gets a vote on what survives. So you can have flawless recall of last week and still
watch the agent get amnesia at 200K tokens.&lt;/p&gt;
&lt;p&gt;Some tools go further than a hand-fed store: they keep the entire conversation and let you
search over it. That’s genuinely better, and it’s worth saying so. But searching is
something &lt;em&gt;you&lt;/em&gt; have to do, after you’ve already noticed something went missing, and
whatever you pull back lands in the same window that was overflowing in the first place.
You found the needle, and the haystack is still on fire. And automating the search doesn’t
save it: async, agent-native RAG still drops what it finds into the same window, and
still never decides what &lt;em&gt;leaves&lt;/em&gt; it.&lt;/p&gt;
&lt;p&gt;There’s a deeper reason the window wins. A model uses what’s already in front of it far more
reliably than what it has to fetch: hand it the relevant text in context and it beats RAG on
the same text (&lt;a href=&quot;https://arxiv.org/abs/2407.16833&quot;&gt;Li et al.&lt;/a&gt;), and what
it does hold, it reads best at the edges, not buried in the middle
(&lt;a href=&quot;https://arxiv.org/abs/2307.03172&quot;&gt;&lt;em&gt;Lost in the Middle&lt;/em&gt;&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;RAG has one honest advantage: it’s cheaper to pull a few snippets than to carry the whole
history. But that only pays off when a small slice can substitute for everything else, and an
agent session is the opposite case. RAG can only add to the window, never stand in for it.&lt;/p&gt;
&lt;h2 id=&quot;what-managing-the-window-actually-looks-like&quot;&gt;What managing the window actually looks like&lt;/h2&gt;
&lt;p&gt;Two hundred turns deep, that means keeping the auth decision and the path of the file you’re
editing while dropping the stale 4,000-token test dump, without anyone having to ask. To make
that call on every turn, instead of letting a blunt summarizer maul the whole thing at the
boundary, a few things have to be true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Keep a distilled prefix at the front.&lt;/strong&gt; Compress the early conversation into a dense,
structured record of what was established: the decisions, the shape of the work, the
constraints. That record stays pinned to the &lt;em&gt;front&lt;/em&gt; of the window where the model can
always see it, carrying the load-bearing facts the rest of the work leans on.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compress gradually, in layers.&lt;/strong&gt; Full passthrough while there’s room. As pressure
builds, compress the raw turns behind the distilled prefix. Under more pressure, strip what
ages worst first: stale tool output, redundant dumps. Emergency compression stays the last
resort.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calibrate from the real token counts.&lt;/strong&gt; The window is a hard budget. What gets cut
should follow the actual token counts the API reports back, and what each model’s real
context and pricing are. A character cap hardcoded once and forgotten tracks none of that.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Protect the live edge.&lt;/strong&gt; The most recent turns stay intact, always. Whatever happens
upstream, the active end of the conversation is where the work is happening, so it stays
whole.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What matters here is the loop: &lt;em&gt;something is actively deciding what stays in the window on
every turn&lt;/em&gt;, instead of a one-shot summarizer flattening the session the moment it overflows.&lt;/p&gt;
&lt;h2 id=&quot;two-layers-one-stack&quot;&gt;Two layers, one stack&lt;/h2&gt;
&lt;p&gt;This isn’t memory &lt;em&gt;versus&lt;/em&gt; context management. You need both, and they stack:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Temporal storage.&lt;/strong&gt; Everything that’s said, captured and indexed, so nothing is truly
lost even after it leaves the window.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distillation.&lt;/strong&gt; That history compressed into a dense prefix, so the established facts
survive context pressure and stay in front of the model.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Long-term knowledge.&lt;/strong&gt; The durable decisions, patterns, and preferences pulled out and
carried across sessions, retrievable on demand.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That store, layer 3, is what people mean today when they say “memory”. It’s the top of the
stack, not the whole stack. Without the two layers under it, it’s a filing cabinet next to
a conversation that’s quietly falling apart.&lt;/p&gt;
&lt;h2 id=&quot;the-work-this-is-built-on&quot;&gt;The work this is built on&lt;/h2&gt;
&lt;p&gt;We didn’t invent this architecture, and we want to be clear about that. Two teams got here
first and proved it works. Sanity’s
&lt;a href=&quot;https://www.sanity.io/blog/how-we-solved-the-agent-memory-problem&quot;&gt;Nuum&lt;/a&gt; gave us the
framing we still use, “distillation, not summarization”, and showed a three-tier memory
staying coherent across thousands of messages. (Simen Svale’s description of compaction as
“JPEG compression of memory management” is hard to forget once you’ve read it.) Mastra’s
&lt;a href=&quot;https://mastra.ai/research/observational-memory&quot;&gt;Observational Memory&lt;/a&gt; worked out the
observer/reflector loop and the move from rigid JSON to plain, timestamped observation
logs. Lore is built on both, and it’s better for it. Their write-ups are worth your time.&lt;/p&gt;
&lt;p&gt;There’s a catch, though. Both teams shipped this architecture &lt;em&gt;inside their own agent&lt;/em&gt;.
Nuum is a standalone REPL (Anthropic-only, yolo-mode, built to power Sanity’s Miriad).
Observational Memory lives inside the Mastra framework. The memory is excellent. The
packaging is the constraint. Almost no one is going to replace the coding agent they
already rely on just to get a context-management layer.&lt;/p&gt;
&lt;h2 id=&quot;unhook-it-from-the-harness&quot;&gt;Unhook it from the harness&lt;/h2&gt;
&lt;p&gt;So that’s the gap: take the same ideas and unhook them from the harness. Deliver them as a
layer that works with whatever agent you’re already using, on whatever provider you’re
already paying for.&lt;/p&gt;
&lt;p&gt;Here’s the distinction that actually matters, and it’s easy to miss now that everything
calls itself memory. A store is a tool the agent reaches for: it sits off to the side and
answers when it’s asked, however clever the asking has gotten. A layer sits &lt;em&gt;in the request
path&lt;/em&gt;. Every turn flows through it, and it can reshape that turn before the model ever sees
it. That position is the only one from which you can manage the live window at all.&lt;/p&gt;
&lt;p&gt;It’s also the most invasive seat in the system, and that’s worth being honest about. A
thing that sees every token of every session only earns that seat if it’s &lt;em&gt;yours&lt;/em&gt;: a single
file on your own disk, no account to create, no database to run, nothing leaving your
machine unless you choose to share it. It’s also why this is
&lt;a href=&quot;https://fair.io&quot;&gt;Fair Source&lt;/a&gt; (FSL-1.1-Apache-2.0): the code that touches your tokens is
right there to read, and it turns into Apache 2.0 on a timer. That last part is hard for a
cloud service to follow you into. Routing every token through someone else’s box is a lot to
ask, and a lot for that box to be responsible for. The seat really only makes sense when
you’re the one sitting in it.&lt;/p&gt;
&lt;p&gt;That same vantage point, seeing every request as it happens, is also the right home for a
lot more than distillation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Warm the cache automatically&lt;/strong&gt;, so you’re not paying full price for a cold context at
the start of every session.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extract long-term knowledge on its own&lt;/strong&gt;: decisions, conventions, gotchas, without you
remembering to save anything.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recognize patterns&lt;/strong&gt; in how you and your agent actually work, and act on them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Track token spend&lt;/strong&gt; day to day, across every agent you run.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That last one is quietly becoming the point. As model and token costs climb, the layer that
sees every request is exactly where cost control belongs, and because it runs on your own
machine, there’s no infrastructure bill and no per-request meter to feed. A store on the
sidelines can’t do any of this. Plenty of them run the other way: a server you’re renting,
an extra model call to extract and index every exchange, and a metered fee on top of the
requests you were already paying for.&lt;/p&gt;
&lt;p&gt;And once memory lives in that layer instead of inside one agent, it stops belonging to any
single agent. Your context follows you. Move from Claude Code to Codex to OpenCode, or reach
for a different agent on a different task, and the same memory comes along. A team running a
mix shares one knowledge base instead of three separate silos. Portability comes free once
the memory no longer lives inside the harness.&lt;/p&gt;
&lt;p&gt;Memory is the wedge. The layer is the platform.&lt;/p&gt;
&lt;h2 id=&quot;the-one-question-worth-asking&quot;&gt;The one question worth asking&lt;/h2&gt;
&lt;p&gt;Next time something is pitched to you as agent “memory”, ask one question:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What happens at 200K tokens?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If the answer is some version of “you can search what we stored”, or worse, “write a better
context file”, then it’s a storage tool, and the part that actually breaks mid-session is
still yours to handle. That’s fine, and a good store is genuinely worth having. But it has
no answer for the session that’s overflowing right now, which is the problem you’ll hit
today, not next week.&lt;/p&gt;
&lt;p&gt;Memory is table stakes. Managing the window, in the loop, while it fills, is the part
nobody wants to build. Make sure you know which one you’re being sold.&lt;/p&gt;</content:encoded><dc:creator>Lore Team</dc:creator><category>memory</category><category>context management</category><category>agents</category></item><item><title>Introducing the Lore Blog</title><link>https://withlore.ai/blog/hello-lore/</link><guid isPermaLink="true">https://withlore.ai/blog/hello-lore/</guid><description>A home for product notes, memory architecture deep dives, and engineering updates from Lore.</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Lore blog is ready for longer-form writing: release notes, implementation notes, architecture posts, and the practical lessons that show up when AI coding agents work inside real codebases for days at a time.&lt;/p&gt;
&lt;p&gt;Future posts will cover LLM memory architecture, distillation techniques, context management strategies, and engineering updates from the Lore team.&lt;/p&gt;</content:encoded><dc:creator>Lore Team</dc:creator><category>memory</category><category>agents</category></item></channel></rss>