<?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>The Agentic Memory Trap</title><link>https://withlore.ai/blog/the-agentic-memory-trap/</link><guid isPermaLink="true">https://withlore.ai/blog/the-agentic-memory-trap/</guid><description>Lore is a vendor-neutral proxy that runs on your machine. Plain Markdown and an open SQLite database, run by a fair-source engine.</description><pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In April, Harrison Chase wrote an essay called
&lt;a href=&quot;https://blog.langchain.com/your-harness-your-memory/&quot;&gt;Your harness, your memory&lt;/a&gt;.
He named what the AI tooling industry has been circling for a year.
Memory is the new lock-in. The harness owns it by default, and the
harness is what every platform is racing to be.&lt;/p&gt;
&lt;p&gt;He was right about the diagnosis. He was not entirely accurate with
the prescription. He builds LangChain, so he is primed to think in
terms of harness-first. Broaden your thinking and there is a better,
more independent way, and Lore is the proof.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“There is sometimes sentiment that memory is a standalone service,
separate from any particular harness. At this point in time, that
is not true.”
— Harrison Chase, &lt;a href=&quot;https://blog.langchain.com/your-harness-your-memory/&quot;&gt;Your harness, your memory&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The analogy is wrong on the merits too. Memory is part of your brain.
Agent harnesses are like your body, the limbs and everything. You
don’t move your memory to your limbs. You move your memory to your
brain.&lt;/p&gt;
&lt;p&gt;Our argument is equally self-serving as LangChain’s. The difference
is: you can move away from Lore and keep your organized SQLite
database to yourself. That is true open memory.&lt;/p&gt;
&lt;p&gt;The time has come. Lore is the standalone memory service, and it is
the architecture that gets you out of the trap.&lt;/p&gt;
&lt;h2 id=&quot;the-platform-owns-your-data-you-should&quot;&gt;The platform owns your data. You should.&lt;/h2&gt;
&lt;p&gt;When a closed platform builds “agent memory,” it stores your team’s
decisions in a proprietary database behind an API. Retrieval shapes
the agent, and the shape of the agent is the shape of the moat.
Switch IDEs, switch models, switch anything, and the team rebuilds
months of context from scratch. The lock-in is the product.&lt;/p&gt;
&lt;p&gt;Harrison names three levels. The mild one stores state on the
provider’s server so you cannot move threads between models. The bad
one runs a closed harness that interacts with memory in ways you
cannot see, and the artifacts are not portable. The worst one puts
everything behind an API, including long-term memory, and you own
none of it. Anthropic’s Claude Managed Agents lives in that worst
camp. Codex’s open-source harness produces an encrypted compaction
summary nothing outside OpenAI can read, so it creeps toward the
worst too. The incentive is everywhere, and it points the same way.&lt;/p&gt;
&lt;p&gt;Six months of careful work, six months of capturing a team’s taste,
and a vendor change returns the team to zero.&lt;/p&gt;
&lt;h2 id=&quot;lore-is-local-first-and-we-want-to-keep-it-that-way&quot;&gt;Lore is local-first and we want to keep it that way&lt;/h2&gt;
&lt;p&gt;Lore is a vendor-neutral proxy that sits between your harness and
your model. The whole engine runs on your machine. The memory lives
in your repo and your local machine as plain Markdown and an open
SQLite database. You can read, query, and edit it with or without
Lore.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;https://withlore.ai/_astro/ec.w36nc.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;https://withlore.ai/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;flowchart LR&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;H[&quot;&amp;lt;b&amp;gt;Harness&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;Claude Code · OpenCode · Pi · Codex&quot;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;L[&quot;&amp;lt;b&amp;gt;Lore&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;local-first, vendor-neutral&amp;lt;br/&amp;gt;.lore.md + lore.db&amp;lt;br/&amp;gt;local, sqlite &amp;amp; markdown&quot;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;A[&quot;&amp;lt;b&amp;gt;Model Provider API&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;Anthropic · OpenAI · Google · others&quot;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;H --&amp;gt; L&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;L --&amp;gt; A&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;classDef lore fill:#c4ddc7,stroke:#1a3320,stroke-width:2px,color:#1a3320&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;classDef ext fill:#ececec,stroke:#888,color:#333&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;class L lore&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;class H,A ext&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;flowchart LR    H[&amp;quot;&lt;b&gt;Harness&lt;/b&gt;&lt;br/&gt;Claude Code · OpenCode · Pi · Codex&amp;quot;]    L[&amp;quot;&lt;b&gt;Lore&lt;/b&gt;&lt;br/&gt;local-first, vendor-neutral&lt;br/&gt;.lore.md + lore.db&lt;br/&gt;local, sqlite &amp;amp; markdown&amp;quot;]    A[&amp;quot;&lt;b&gt;Model Provider API&lt;/b&gt;&lt;br/&gt;Anthropic · OpenAI · Google · others&amp;quot;]    H --&gt; L    L --&gt; A    classDef lore fill:#c4ddc7,stroke:#1a3320,stroke-width:2px,color:#1a3320    classDef ext fill:#ececec,stroke:#888,color:#333    class L lore    class H,A ext&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;The LLM is the cognition, Lore is the memory layer. They form the brain. The harness is the body, the actuator.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;.lore.md&lt;/code&gt;&lt;/strong&gt; at the root of your repo. The curated knowledge the
team has reviewed and merged. Version-controlled, PR-reviewable,
human-readable Markdown.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A local SQLite database&lt;/strong&gt; at &lt;code&gt;~/.local/share/lore/lore.db&lt;/code&gt;. The
full record: raw conversations, distillations, long-term memory,
entities. Open schema, queryable with &lt;code&gt;sqlite3&lt;/code&gt;, exportable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The engine that ties them together is fair source
(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.&lt;/p&gt;
&lt;p&gt;The SQLite file is the vector database. The vectors ride alongside
the temporal messages, the distillations, and the long-term memory
entries, in one open file. No separate vector store, no separate
process, no separate bill. When a team changes a memory entry, the
engine picks up the change on the next session and re-embeds the
affected entries. Fast and transparent, on your hardware.&lt;/p&gt;
&lt;p&gt;A few months after that initial post, Harrison himself claimed that
memory systems sit beside the harness. In
&lt;a href=&quot;https://blog.langchain.com/wiki-memory/&quot;&gt;Wiki Memory&lt;/a&gt;, he wrote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“This pattern also sits adjacent to memory systems like LangMem,
Letta, Mem0, and Zep. Those systems attack the broader agent-memory
problem, while wiki memory is notable because it often uses the
simplest possible substrate: files.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;All these systems, including Mem0, don’t really solve the immediate
context problem. Lore unifies this and, unsurprisingly, by fusing two
approaches together: locality &amp;amp; files along with long-term memory.&lt;/p&gt;
&lt;h2 id=&quot;the-vendor-route-vs-the-local-first-route&quot;&gt;The vendor route vs the local-first route&lt;/h2&gt;
&lt;p&gt;Harrison is right. You shouldn’t put your memory into a vendor’s hands.
The lock-in is real, and the way to escape it is to keep the data
on your machine, local, sqlite &amp;amp; markdown, where you can read with
&lt;code&gt;sqlite3&lt;/code&gt; and edit with any text editor. To change a memory entry,
you edit the file. To delete an entry, you delete the row. To export
the corpus, you copy the file. To move to a different vendor, you
point the new tool at the same files.&lt;/p&gt;
&lt;p&gt;The same logic applies to the harness. You wouldn’t lock yourself
into a single LLM provider, and you shouldn’t lock yourself into a
single harness either. Claude Code today, Pi tomorrow, Codex next
quarter, something new next year. The memory should outlast the
harness. The harness is the part you swap; the artifact is the part
that stays.&lt;/p&gt;
&lt;p&gt;When your team is ready to share, the sync engine works the way a
good group chat does: end-to-end encrypted, scoped to the entries
you explicitly approve, and the relay never sees plaintext. The
keys stay with the participants. Sharing is opt-in, per entry, and
reversible.&lt;/p&gt;
&lt;h2 id=&quot;why-this-matters&quot;&gt;Why this matters&lt;/h2&gt;
&lt;p&gt;We have talked before about
&lt;a href=&quot;https://withlore.ai/blog/distill-your-own-knowledge/&quot;&gt;why knowledge lives in token space, not in weights&lt;/a&gt;.
The same logic applies to where the token-space lives. A database in
someone else’s cloud is halfway there. A database or engine tied to
your harness might be better. A replaceable middle layer for memory,
all data local and owned by you, is the rest of the way.&lt;/p&gt;
&lt;p&gt;Models will keep changing. They always do. Every part of the AI
tooling stack above the model is genuinely up for grabs right now.
The part that should not be up for grabs is who owns your team’s
data. That belongs to the team, on infrastructure the team controls.&lt;/p&gt;
&lt;p&gt;Lore is local-first. We aim to keep it that way.&lt;/p&gt;
&lt;h2 id=&quot;try-it&quot;&gt;Try it&lt;/h2&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;-fsSL&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;https://withlore.ai/install&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;lore&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;run&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;curl -fsSL https://withlore.ai/install | bashlore run&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;After a few sessions, open &lt;code&gt;.lore.md&lt;/code&gt; and the database at
&lt;code&gt;~/.local/share/lore/lore.db&lt;/code&gt;. Read what your agent has written
down. Open a PR when it gets something wrong. That is the workflow.&lt;/p&gt;
</content:encoded><dc:creator>Burak Yigit Kaya</dc:creator><category>infrastructure</category><category>open standards</category><category>data</category><category>ownership</category></item><item><title>The Semantic Linter: Automating reviews without losing touch</title><link>https://withlore.ai/blog/review-with-memory/</link><guid isPermaLink="true">https://withlore.ai/blog/review-with-memory/</guid><description>You can&apos;t write down your taste. But you keep working by it, and Lore learns it the way an apprentice would, then helps enforce it in code review.</description><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;About ten years ago, when machine learning got good enough that you could train a real classifier
without a research lab, I had a specific project in mind. I wanted to train something that reviewed
code the way I did, so I could step back from reviewing every change without the codebase drifting.
I never built it. I never had enough of the right data, and I never had the time.&lt;/p&gt;
&lt;p&gt;The debate about review has finally caught up with the project I never built, and I think both
sides are half right.&lt;/p&gt;
&lt;h2 id=&quot;the-same-complaint-from-two-sides&quot;&gt;The same complaint from two sides&lt;/h2&gt;
&lt;p&gt;One camp says the whole point of writing code with agents is that a human still reads every line
before it ships. Slow down, look closely, stay in control. The other camp, often the same people
on a different day, says the job has turned into something worse: you don’t write much anymore, you
sit and read change after change the machine produced, and it is dull and a little soul-crushing.
Reviewing slop, they call it.&lt;/p&gt;
&lt;p&gt;Those are two views of one loss. Review used to be where judgment happened and where the
team learned how the codebase was meant to work. Now it has shrunk to a checkpoint you sign off on.
The “read every line” camp wants to protect what review was. The “this is soul-crushing” camp is
telling you it has already gone. Both are reacting to one loss.&lt;/p&gt;
&lt;p&gt;A colleague told me the human side of this a few months ago. When he joined the team, he said, he
learned a lot from getting detailed reviews from me, the kind where you explain not just what to
change but why the team works this way. What he picked up wasn’t a list of rules. It was a way of
working. Now we mostly work on our own, agents write and review most of the code, and he misses it.
He wasn’t complaining about speed. He was noticing that something had stopped passing between us.&lt;/p&gt;
&lt;p&gt;Armin Ronacher &lt;a href=&quot;https://lucumr.pocoo.org/2026/7/13/the-tower/&quot;&gt;wrote about this&lt;/a&gt; from the other
end. The shared understanding a team keeps of its own system used to be a byproduct of the friction
in working together, and agents have quietly removed the friction. My colleague felt that up close.&lt;/p&gt;
&lt;h2 id=&quot;what-review-was-really-passing-along&quot;&gt;What review was really passing along&lt;/h2&gt;
&lt;p&gt;A review was never only a gate. It was how one person’s standard reached everyone else. You don’t
mock the database in integration tests, and here’s the migration bug that taught us why. Deploys go
from the release branch, because of the time they didn’t. The standard arrived with its reason, at
the moment it mattered, to whoever was on the change.&lt;/p&gt;
&lt;p&gt;When that stops, the standards don’t disappear. They stop showing up when they’re needed, and six
months later a pull request quietly brings back the exact thing the team decided against. Nobody
used bad judgment. The change looks reasonable on its own. What was missing was a reviewer who knew
the standard and noticed, right then, that the change cut against it.&lt;/p&gt;
&lt;h2 id=&quot;you-are-what-you-do-not-what-you-write-down&quot;&gt;You are what you do, not what you write down&lt;/h2&gt;
&lt;p&gt;That is the hard part, and it’s why the project I never got to needed data I never had. A review
teaches the person reading it, but it’s a poor thing to learn from at scale. It’s the verdict, not
the reasoning: “don’t do this here” lands, and the thinking that led me there stays in my head. Most
of what makes a good reviewer good is taste, built from years of doing the work, and you can’t write
it down. Ask someone to put their standards in a document and you get a thin, lifeless version of
what they actually do. But you keep doing it, review after review, and the standard is real even
when the document isn’t.&lt;/p&gt;
&lt;p&gt;That’s the shift that makes this possible now. Lore watches the work the way an apprentice does. It
sits alongside your sessions, distills what you decide and why, and writes it down for you as
&lt;a href=&quot;https://withlore.ai/docs/team-memory/&quot;&gt;&lt;code&gt;.lore.md&lt;/code&gt;&lt;/a&gt;, a version-controlled file of the team’s decisions and gotchas,
reviewed in pull requests like any other file. We’ve written before about
&lt;a href=&quot;https://withlore.ai/blog/distill-your-own-knowledge/&quot;&gt;why knowledge lives in text&lt;/a&gt;. You don’t write docs that go
stale in a few weeks. You work, and it learns.&lt;/p&gt;
&lt;p&gt;An apprentice is not you, and I want to be honest about the ceiling. It won’t learn your deepest
judgment, the calls that come from taste you couldn’t explain if you tried. But it learns the
standards you set often enough, and that turns out to be a lot of them.&lt;/p&gt;
&lt;h2 id=&quot;the-apprentice-reviews-the-code&quot;&gt;The apprentice reviews the code&lt;/h2&gt;
&lt;p&gt;This is the thing I wanted ten years ago, and it turns out the achievable part was the part that
mattered. Not a machine that thinks like me. One that learned the standards and speaks up when a
change goes against one.&lt;/p&gt;
&lt;p&gt;So we built a check that reads the diff against what Lore has learned. On every pull request, the
&lt;a href=&quot;https://withlore.ai/docs/guides/semantic-linter/&quot;&gt;semantic linter&lt;/a&gt; takes the changes and the standards from
&lt;code&gt;.lore.md&lt;/code&gt; and asks, for the pairs that look related, one question: does this change go against
something the team decided? When the answer looks like yes, it says so, as an annotation next to
the line, with the reason attached. The reason is the point. It’s the part of the review that used
to pass from person to person and stopped.&lt;/p&gt;
&lt;p&gt;It’s a judge, not a rule engine. “Never mock the database in integration tests” isn’t a pattern you
can match with a regex, and any lint rule that tried would be brittle and easy to route around. It’s
a meaning, and you can only check it by understanding what the change does and what the standard
intends. The honest cost is that a judge produces suspicions, not verdicts. It can be wrong, and we
designed around that instead of pretending otherwise.&lt;/p&gt;
&lt;h2 id=&quot;the-boring-part-handled&quot;&gt;The boring part, handled&lt;/h2&gt;
&lt;p&gt;If you’re in the “read every line” camp, what you’re rightly afraid of is a noisy check that blocks
work on a bad guess. We share that fear, so the linter ships advisory only. It never fails a build.
It leaves a note and a human decides. A check that guesses and can break CI would teach everyone to
ignore it inside a week.&lt;/p&gt;
&lt;p&gt;And if you’re in the “this is soul-crushing” camp, look at what it takes off you: the dull part,
checking every change against every standard the team ever set, which is the work no human does well
or enjoys. What’s left is the judgment, the taste, whether this is even the right change. The part
worth doing.&lt;/p&gt;
&lt;p&gt;A ladder above advisory is designed in. Once a team has watched how often the check is wrong, a
rule can graduate to a gate, with an override for the author who knows better. That part is still
coming. Today everything stays advisory on purpose, because the system should earn trust before it
can block anything.&lt;/p&gt;
&lt;h2 id=&quot;wheres-the-limit&quot;&gt;Where’s the limit?&lt;/h2&gt;
&lt;p&gt;I’m not claiming the reviewer goes away. On the contrary, we’re lightening the reviewer’s load so
they can do more of what’s valuable: real judgment and taste. Here’s the line: no reviewer can hold
every standard the team ever set and apply the right one at the right moment. That one job a system
does well, and handing it over costs you none of the taste you were afraid to lose. It gives you
back the attention for the parts that need a person, and brings back, a little, what used to pass
between people when they reviewed each other’s work.&lt;/p&gt;
&lt;p&gt;That’s the version of automated review I’d ask a doubter to try. Not a bot that approves or rejects
your PRs. An apprentice that learned how you work and speaks up when a change breaks from that, and
otherwise stays quiet.&lt;/p&gt;
&lt;h2 id=&quot;try-it&quot;&gt;Try it&lt;/h2&gt;
&lt;p&gt;Install Lore and let it learn from a few sessions:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;https://withlore.ai/_astro/ec.w36nc.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;https://withlore.ai/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;-fsSL&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;https://withlore.ai/install&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#096E72&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;lore&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;run&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;curl -fsSL https://withlore.ai/install | bashlore run&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Then run the check against any range and see what it flags:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;lore&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;lint&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--base&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3B61B0&quot;&gt;--head&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#3B61B0&quot;&gt;HEAD&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;lore lint --base main --head HEAD&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;With no arguments it auto-detects the range. When you’re ready for CI, the
&lt;a href=&quot;https://withlore.ai/docs/guides/semantic-linter/&quot;&gt;semantic linter guide&lt;/a&gt; has a copy-paste GitHub Action.&lt;/p&gt;
</content:encoded><dc:creator>Burak Yigit Kaya</dc:creator><category>knowledge</category><category>code review</category><category>ci</category><category>agents</category></item><item><title>Distill the knowledge, not the model</title><link>https://withlore.ai/blog/distill-your-own-knowledge/</link><guid isPermaLink="true">https://withlore.ai/blog/distill-your-own-knowledge/</guid><description>Satya Nadella named the Reverse Information Paradox. His fix over-solves it: your learning can stay yours in token space, without training a model.</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;the-diagnosis-is-right&quot;&gt;The diagnosis is right&lt;/h2&gt;
&lt;p&gt;Satya Nadella &lt;a href=&quot;https://x.com/satyanadella/status/2076323181154230284&quot;&gt;posted this week&lt;/a&gt; about
what he calls the Reverse Information Paradox, and if you build with these models you already
feel it. You pay for intelligence in cash, and then you pay again in the proprietary knowledge
you reveal to make it useful. The harder you push the model to perform, the more of yourself
you feed it. He’s right, and it’s the cleanest framing of the problem we’ve seen.&lt;/p&gt;
&lt;p&gt;The valuable part is everything around a single prompt: how you work a problem, the fixes you
apply when the model gets it wrong, the standard you hold it to. Enough of that adds up to a
portrait of how your team actually thinks, and the portrait moves in only one direction. The
provider gets a little more of it every session. You get an answer to today’s question and
nothing about what they kept.&lt;/p&gt;
&lt;h2 id=&quot;look-closely-at-the-fix&quot;&gt;Look closely at the fix&lt;/h2&gt;
&lt;p&gt;Here’s where we part ways with him, and it’s worth being specific about how. Much of what he
prescribes we have no quarrel with, and some of it we already build. This is about one piece.&lt;/p&gt;
&lt;p&gt;Nadella’s answer is that enterprises should win “the rights to use model outputs to fine tune
and/or train their own models.” Read that twice. The remedy he’s reaching for is the right to
train on the exhaust. In the industry that has a name, distillation: using a strong model’s
outputs to teach a competing model. Anthropic and the other frontier labs restrict exactly
this, which is what he means by “restrictive terms on distillation.”&lt;/p&gt;
&lt;p&gt;It’s worth asking who that fix helps most. Training or fine-tuning a model on your own traces
is expensive, and it pays off only at a scale and with a purpose most companies don’t have. It
reads less like a fix for everyone and more like one sized for large players who want to build
or tune models of their own. Microsoft, for its part, has no frontier-class model of its own
yet, its bet on a single provider has grown complicated, and it’s now building in-house. We
can’t see anyone’s intent and won’t pretend to. But when a fix this specific arrives bundled
with the diagnosis, it’s fair to notice that the principle and the interest happen to point the
same way.&lt;/p&gt;
&lt;p&gt;It also reaches further than the problem needs. Nadella writes that the answer “requires more
than data protection,” and leans on that to justify training rights. But look at the leak he
actually describes: the provider walks away with a compounding record of how you work, and you
walk away with nothing durable. That gap closes the moment you start keeping and compounding
the learning on your own side. You do not need the right to train a model to do that. Training
rights are a separate, much larger ask, folded into the same sentence as if they were the same
need.&lt;/p&gt;
&lt;h2 id=&quot;learning-doesnt-have-to-live-in-weights&quot;&gt;Learning doesn’t have to live in weights&lt;/h2&gt;
&lt;p&gt;The move that dissolves most of the debate is noticing that “learning from your interactions”
and “training a model on your interactions” are two different things.&lt;/p&gt;
&lt;p&gt;There are two kinds of distillation. One compresses a teacher model into a student’s weights.
That’s the kind under dispute, the kind that’s expensive, and the kind the frontier labs
forbid. The other compresses your history into a compact, durable record that rides in the
context window: the decisions you reached, the conventions you set, the corrections you made.
No training run. No weights. No violated terms.&lt;/p&gt;
&lt;p&gt;When we say distillation, we mean the second kind. It’s the framing we took from Sanity’s
&lt;a href=&quot;https://www.sanity.io/blog/how-we-solved-the-agent-memory-problem&quot;&gt;Nuum&lt;/a&gt;, distillation, not
summarization, and it’s the whole reason Lore can hand you a compounding learning loop without
going anywhere near a model’s weights.&lt;/p&gt;
&lt;h2 id=&quot;what-lore-does-instead&quot;&gt;What Lore does instead&lt;/h2&gt;
&lt;p&gt;The learning accumulates in a single file on your own disk. Distillation compresses your
sessions into a dense record of what was established. The knowledge layer pulls out the
decisions, conventions, and gotchas as they happen, including the ones you only ever expressed
by correcting the model. You never have to remember to save anything, and none of it lives in
someone else’s tenant. No account, no server, and none of this learning leaves your machine
unless you choose to share it with your team.&lt;/p&gt;
&lt;p&gt;Be honest about the wire: your prompts still go to whatever model you’re using, because that’s
how you get an answer. Lore doesn’t pretend otherwise. What it changes is the other side of the
ledger. The distilled history, the extracted knowledge, the patterns, the record of every
correction, all of it gets captured and compounded on your side too, in token space, where no
distillation rule reaches. The provider still sees each turn. It just stops being the only one
that walks away with a durable record.&lt;/p&gt;
&lt;p&gt;That seat, seeing every token of every session, only makes sense if it’s yours. It’s why Lore
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.&lt;/p&gt;
&lt;h2 id=&quot;portability-without-the-weights&quot;&gt;Portability without the weights&lt;/h2&gt;
&lt;p&gt;Nadella’s sharpest point is about lock-in. If the model you rely on were taken away tomorrow,
would your veteran capability go with it, or would it stay with you?&lt;/p&gt;
&lt;p&gt;This is the part we already shipped. Lore sits between you and the model, outside any one agent.
Your memory doesn’t belong to Claude Code or Codex or OpenCode. It belongs to the file. Switch
models, switch agents, run three at once, and the same accumulated context comes along. A
generalist model becomes a veteran of your codebase, and that veteran capability is yours to
keep. Take the model away and the learning stays. You get the portability he’s asking for
without owning a single weight.&lt;/p&gt;
&lt;h2 id=&quot;you-can-skip-the-debate&quot;&gt;You can skip the debate&lt;/h2&gt;
&lt;p&gt;Whether the frontier labs should loosen their terms on distillation is a real argument, and
it’s going to play out over years between companies with far more at stake than you. You’re
welcome to watch it.&lt;/p&gt;
&lt;p&gt;You don’t have to wait for it. The learning loop Nadella says every organization needs already
exists in a form that asks no one’s permission: token-space, local, model-agnostic, running
today. In consuming intelligence, you are creating intelligence. That’s his line, and he’s
right about it. The only question is who keeps it, and you can answer that one yourself this
afternoon.&lt;/p&gt;
</content:encoded><dc:creator>Lore Team</dc:creator><category>memory</category><category>context management</category><category>agents</category></item><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>