<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://daily-nerd.github.io/daimon/blog</id>
    <title>daimon Blog</title>
    <updated>2026-08-15T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://daily-nerd.github.io/daimon/blog"/>
    <subtitle>daimon — releases, explainers, and field incidents.</subtitle>
    <icon>https://daily-nerd.github.io/daimon/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[daimon 0.31.0: rules that stand until a human ends them]]></title>
        <id>https://daily-nerd.github.io/daimon/blog/daimon-0-31</id>
        <link href="https://daily-nerd.github.io/daimon/blog/daimon-0-31"/>
        <updated>2026-08-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Some facts in a project are not beliefs. "Never deploy the payments service]]></summary>
        <content type="html"><![CDATA[<p>Some facts in a project are not beliefs. "Never deploy the payments service
on a Friday" is not something the agent should re-derive each session, weigh
against newer context, or quietly forget under budget pressure. It is a
standing constraint, and until now daimon had no home for one: a rule stated
once landed in the belief partition, did not carry, and was first in the drop
order when the briefing ran over budget. 0.31.0 adds pinned rulings.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="standing-rulings">Standing rulings<a href="https://daily-nerd.github.io/daimon/blog/daimon-0-31#standing-rulings" class="hash-link" aria-label="Direct link to Standing rulings" title="Direct link to Standing rulings" translate="no">​</a></h2>
<p>A ruling is the refutation ledger's positive polarity. A refutation records
what was ruled out; a ruling records what stands. Same ledger, same lifecycle
machinery, opposite claim, and the polarity is derived from the founding
event, never from a field a writer could set.</p>
<p><code>daimon ruling propose</code> records a candidate. An agent can propose with
<code>--by agent</code>, and a candidate is all an agent can ever produce: activation
requires <code>daimon ruling ratify</code> from a human at an interactive terminal.
This is the same authority rule the rest of daimon holds. Identity and
authority are derived, never self-asserted.</p>
<p>Once active, a ruling renders at the top of every briefing, on every
surface, as a compact section:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Standing rulings (human-ratified — honor these):</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">§ never deploy the payments service on a friday</span><br></div></code></pre></div></div>
<p>That section is skeleton furniture. It survives budget pressure that trims
every other section, it renders before the first checkpoint of a fresh
project exists, and when the opt-in LLM briefing is active the section is
prepended verbatim, never re-narrated by a generative pass.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-design-choices-worth-stating-plainly">The design choices worth stating plainly<a href="https://daily-nerd.github.io/daimon/blog/daimon-0-31#the-design-choices-worth-stating-plainly" class="hash-link" aria-label="Direct link to The design choices worth stating plainly" title="Direct link to The design choices worth stating plainly" translate="no">​</a></h2>
<p><strong>Ratification is content-bound.</strong> <code>ruling ratify</code> records a hash of the
exact text it displayed to you, and activation refuses if the stored text
changed between the prompt and your confirmation. What you approve is what
activates, byte for byte.</p>
<p><strong>An agent proposal cannot change what renders.</strong> Agents may propose a
revision or a retirement of an active ruling, but the active text stands
untouched until a human settles the proposal, and the fold enforces this
below the CLI, so even a hand-edited ledger cannot promote an agent's words
into your briefing.</p>
<p><strong>The echo loop is closed at the write boundary.</strong> A section that renders
into every session would otherwise be a copy machine: the next capture
re-extracts the ruling text as a fresh belief, which decays, drifts, and
renders twice. 0.31.0 filters exact echoes at checkpoint admission. The drop
is counted under its own reason code and visible in <code>daimon status</code>, never
silent, and the filter fails open: an unreadable ledger can never cost you a
capture.</p>
<p><strong>The section is bounded and never silently truncated.</strong> Rulings are capped
(seven by default, <code>DAIMON_RULING_CAP</code> to change it) and each ruling's text
is bounded at write time. If a ledger ever holds more active rulings than
the cap, the briefing says how many were withheld and where to see them.</p>
<p>Rulings never decay. Retirement is a human ceremony, and <code>daimon forget</code>
reaches ruling text by value like everything else on the ledger.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="also-since-029">Also since 0.29<a href="https://daily-nerd.github.io/daimon/blog/daimon-0-31#also-since-029" class="hash-link" aria-label="Direct link to Also since 0.29" title="Direct link to Also since 0.29" translate="no">​</a></h2>
<p><strong>The local viewer shipped in 0.30.0.</strong> <code>daimon serve</code> opens a read-only
localhost viewer: briefing, ledger, per-session pages, search-as-recall,
a check strip, and a print view. 0.31.0 adds the rulings lane beside the
refutations lane, each polarity under its own vocabulary.</p>
<p><strong>A typed relation ledger shipped in shadow mode</strong>, with adjudication verbs
and history rendering in the viewer.</p>
<p><strong>0.30.2 fixed a real forget defect:</strong> forget by value only matched a
refutation's subject field, leaving four of its five plaintext fields
unreachable by value. Found during this release's design review, fixed and
shipped ahead of the feature that made it matter.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-it">Getting it<a href="https://daily-nerd.github.io/daimon/blog/daimon-0-31#getting-it" class="hash-link" aria-label="Direct link to Getting it" title="Direct link to Getting it" translate="no">​</a></h2>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">uv tool install 'daimon-briefing[pretty]'</span><br></div></code></pre></div></div>
<p>Upgrading:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">uv tool upgrade daimon-briefing</span><br></div></code></pre></div></div>
<p>Plugin users: <code>/plugin</code>, update daimon, then reload.</p>]]></content>
        <author>
            <name>daimon maintainers</name>
            <uri>https://github.com/Daily-Nerd/daimon</uri>
        </author>
        <category label="release" term="release"/>
        <category label="rulings" term="rulings"/>
        <category label="refutations" term="refutations"/>
        <category label="trust" term="trust"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[daimon 0.29.0: recording what was ruled out]]></title>
        <id>https://daily-nerd.github.io/daimon/blog/daimon-0-29</id>
        <link href="https://daily-nerd.github.io/daimon/blog/daimon-0-29"/>
        <updated>2026-08-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A memory that only records what you decided is half a memory. The other half is]]></summary>
        <content type="html"><![CDATA[<p>A memory that only records what you decided is half a memory. The other half is
what you ruled out, and why, so nobody spends another afternoon rediscovering
it. 0.29.0 adds that half.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-refutation-ledger">The refutation ledger<a href="https://daily-nerd.github.io/daimon/blog/daimon-0-29#the-refutation-ledger" class="hash-link" aria-label="Direct link to The refutation ledger" title="Direct link to The refutation ledger" translate="no">​</a></h2>
<p><code>daimon refute add</code> records a scoped verdict against a subject, with evidence
cited at the point of assertion. An agent's assertion stays a candidate until a
human runs <code>daimon refute ratify</code>. <code>daimon refute guard</code> checks a proposed
action against the active ledger before you repeat something already settled,
and <code>daimon refute overturn</code> is how a verdict comes back off the books when the
evidence changes.</p>
<p>Two design choices are worth stating plainly.</p>
<p>Nothing in the ledger is reaped on a schedule. A refutation is worth more with
age, not less: the fact that an approach failed eight months ago is exactly what
you want surfaced when someone proposes it again. So <code>daimon refute search</code>
reads the complete ledger with no age decay, unlike checkpoint recall.</p>
<p>And the guard is advisory. It surfaces the prior verdict; it does not block the
action. An agent can still proceed. What changes is that the record of what it
was told exists either way, so a repeated mistake is now traceable to a decision
rather than to ignorance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-skills-a-host-could-not-see">The skills a host could not see<a href="https://daily-nerd.github.io/daimon/blog/daimon-0-29#the-skills-a-host-could-not-see" class="hash-link" aria-label="Direct link to The skills a host could not see" title="Direct link to The skills a host could not see" translate="no">​</a></h2>
<p>The plugin ships two skills, <code>daimon-briefing</code> and <code>daimon-end</code>. They sat one
directory below where the loader looks, so nothing failed and nothing warned.
They were simply absent from the session's skill list.</p>
<p>0.29.0 puts them where hosts look, confirmed on a real install rather than
inferred. The same release adds <code>daimon why</code>, the read side of an item's
evidence, to the skill an agent actually reads. It had been documented for
people and invisible to agents.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="also-in-this-release">Also in this release<a href="https://daily-nerd.github.io/daimon/blog/daimon-0-29#also-in-this-release" class="hash-link" aria-label="Direct link to Also in this release" title="Direct link to Also in this release" translate="no">​</a></h2>
<p>Codex rollout stems now resolve to the spawned session id.</p>
<p>The CLI reference is regrouped by what you are trying to do rather than by
subsystem.</p>
<p>A new claims page lists every number we publish about daimon itself, each with
the command that measures the same thing on your own install. Those commands run
locally and send nothing. Your numbers stay on your machine.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-it">Getting it<a href="https://daily-nerd.github.io/daimon/blog/daimon-0-29#getting-it" class="hash-link" aria-label="Direct link to Getting it" title="Direct link to Getting it" translate="no">​</a></h2>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">uv tool install daimon-briefing</span><br></div></code></pre></div></div>
<p>Upgrading:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">uv tool upgrade daimon-briefing</span><br></div></code></pre></div></div>
<p>Plugin users need <code>/plugin</code> and a reload. The plugin cache is pinned per
version, so the skills fix arrives with the release commit rather than with the
PyPI publish.</p>]]></content>
        <author>
            <name>daimon maintainers</name>
            <uri>https://github.com/Daily-Nerd/daimon</uri>
        </author>
        <category label="release" term="release"/>
        <category label="refutations" term="refutations"/>
        <category label="trust" term="trust"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Your agent's failures are its most valuable memory, and almost nobody stores them]]></title>
        <id>https://daily-nerd.github.io/daimon/blog/negative-knowledge</id>
        <link href="https://daily-nerd.github.io/daimon/blog/negative-knowledge"/>
        <updated>2026-07-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Everyone building agent memory is building the same thing: remember what]]></summary>
        <content type="html"><![CDATA[<p>Everyone building agent memory is building the same thing: remember what
worked, remember what was decided, remember who prefers tabs. Useful. But the
expensive amnesia is not forgetting successes. It is forgetting failures.</p>
<p>An agent that forgets a success re-derives it in a few hundred tokens. An
agent that forgets a failure re-attempts it: the refactor that broke prod, the
"obvious cleanup" that was load-bearing, the dependency upgrade that was
abandoned twice for the same reason. You pay for the same dead end every time
a fresh session walks into it confidently.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-field-just-noticed">The field just noticed<a href="https://daily-nerd.github.io/daimon/blog/negative-knowledge#the-field-just-noticed" class="hash-link" aria-label="Direct link to The field just noticed" title="Direct link to The field just noticed" translate="no">​</a></h2>
<p>Three papers landed on this in the last two months.</p>
<p>An ICML 2026 AI4Research workshop paper (<a href="https://arxiv.org/abs/2606.21024" target="_blank" rel="noopener noreferrer" class="">arXiv:2606.21024</a>)
names the object directly: <em>negative knowledge</em>. Its diagnosis of automated
research systems applies word for word to coding agents: failures "appear as
local debugging signals but rarely become durable research objects." Their
fix is a memory layer "explicitly designed for failure," with typed records
and a curator separated from the agent that failed, "to reduce
self-assessment bias." The concept paper the space needed. It also, honestly,
leaves the operational questions open: no staleness policy, no expiry model,
and its own tables show a failure record from one system misleading another
(negative transfer). The concept is established. The lifecycle is not.</p>
<p>A field report from a production team (<a href="https://arxiv.org/html/2607.13091v1" target="_blank" rel="noopener noreferrer" class="">arXiv:2607.13091</a>)
turned accepted review comments into persistent behavioral rules, with a
qualification heuristic worth stealing verbatim: <em>"Would this mistake
plausibly recur in a different context? If yes, it becomes a rule."</em> Their
candor is also worth stealing: no control group, small sample, and this
warning, which every memory system should frame and hang on the wall: "a
noisy review culture can poison the rule set faster than the validation step
can catch."</p>
<p>And <a href="https://arxiv.org/abs/2606.12329" target="_blank" rel="noopener noreferrer" class="">PROJECTMEM</a> shipped the closest thing
to our design: an append-only, git-native, plain-text event log with a
deterministic pre-action gate, "memory that does not merely answer the agent
but acts on its next action." They call the category <em>Memory-as-Governance</em>.
It is the right name. (Related, on the write side:
<a href="https://arxiv.org/abs/2607.02579" target="_blank" rel="noopener noreferrer" class="">GovMem</a> governs memory promotion with a
promote / reject / needs-review decision, which is structurally the same gate
we will describe below on the human side.)</p>
<p>So the ground is not empty, and we are not claiming a first. What we can
offer is a design that has been running in a real repo for a month, with the
scar tissue to show for it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-we-do-it-author-promote-fire">How we do it: author, promote, fire<a href="https://daily-nerd.github.io/daimon/blog/negative-knowledge#how-we-do-it-author-promote-fire" class="hash-link" aria-label="Direct link to How we do it: author, promote, fire" title="Direct link to How we do it: author, promote, fire" translate="no">​</a></h2>
<p>Our version is two tools with a human in the middle.</p>
<p><strong>Agents author during work.</strong> When a session abandons an approach, keeps
deliberate weirdness on purpose, or steps on non-obvious coupling, the agent
records it as a candidate scar right then, under an authoring contract: a
dead end needs evidence of the attempt and the abandonment, a landmine needs
both coupled sites named, and first-person transcript prose gets dropped
because a feeling is not a claim about code. Every active scar in daimon's
repo was written this way, during the session that earned it.</p>
<p><strong>About automatic harvesting, honestly.</strong> We also built a zero-LLM harvester
that mines session checkpoints for candidates, because cold-start repos have
no sessions to author from. Its field record so far is mostly noise: the
first tally was 4 candidates, 0 promotable, and the false-trigger log is
longer than the keep list. A qualification filter shipped in response,
enforcing the same structural obligations at machine-write time, and its
results are still accumulating. We tell you this because the receipts are
the point: we measured our own tooling, it missed the bar, we gated it, and
now we measure the gate too. A memory system that cannot reject its own
writes is the
poisoning vector the behavioral-rules paper warns about.</p>
<p><strong>A human promotes.</strong> Candidates land in <code>.scars/candidates/</code>, never in the
active set. Promotion is a deliberate human act. This is the same conclusion
the behavioral-rules paper reached from the other direction: their rule
quality "depends on human review quality," and bad rules amplify errors. An
auto-promoted failure memory is a poisoning vector with a workflow diagram.</p>
<p><strong>Scar fires.</strong> <a href="https://github.com/Daily-Nerd/Scar" target="_blank" rel="noopener noreferrer" class="">Scar</a> is the
enforcement half: promoted scars carry anchors, and when an agent is about to
edit anchored code, the scar is injected before the edit tool runs. Not at
commit time, when the mistake is already made and staged. Before the edit.</p>
<p>That last distinction is not ours alone; it is PROJECTMEM's own roadmap.
Their future-work section describes "moving it to the agent's tool-call
boundary (a pre-action hook)" so the gate can warn "the instant a change
begins to resemble a previously-failed one—intervening before the edit, not
at commit time." That is the gate Scar ships today. To be equally plain about
the other column: PROJECTMEM has a published paper and a couple hundred
stars; Scar has three. This is a design note, not a maturity claim.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-two-pieces-we-have-not-seen-anywhere-else">The two pieces we have not seen anywhere else<a href="https://daily-nerd.github.io/daimon/blog/negative-knowledge#the-two-pieces-we-have-not-seen-anywhere-else" class="hash-link" aria-label="Direct link to The two pieces we have not seen anywhere else" title="Direct link to The two pieces we have not seen anywhere else" translate="no">​</a></h2>
<p><strong>A falsification condition on every scar.</strong> Each scar records
<code>expires.condition</code>: the specific change that would make it obsolete, plus a
review date the linter enforces. The condition itself is authored discipline
today, not yet machine-checked; the point is that it exists at authoring
time. Negative knowledge rots differently than positive knowledge; a fact
that goes stale is wrong, but a warning that goes stale is friction that
trains everyone to ignore warnings. Neither paper above has an expiry model.
One grows its rule set monotonically and never removes anything. The
workshop paper does not treat staleness at all. Writing down the condition
under which a warning should die is, as far as we can tell, still unclaimed
ground.</p>
<p><strong>The fence.</strong> Dead ends and landmines are failure memory. The third scar
type is not: a <em>fence</em> protects code that looks wrong on purpose. The
sub-second timeout that looks too tight but bounds a real budget. The
duplicated block that two systems must not share. Failure memory tells an
agent "do not repeat this attempt." A fence tells it "do not clean this up."
No failure-record schema we have found represents that, and it fires
constantly in practice, because cleaning up intentional weirdness is exactly
what a capable agent wants to do.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-we-are-not-claiming">What we are not claiming<a href="https://daily-nerd.github.io/daimon/blog/negative-knowledge#what-we-are-not-claiming" class="hash-link" aria-label="Direct link to What we are not claiming" title="Direct link to What we are not claiming" translate="no">​</a></h2>
<p>There is no measured prevention rate. Not ours, and not anyone's: PROJECTMEM
names "failures-prevented-per-commits" as the missing benchmark of the whole
category, and the behavioral-rules paper titles a section "The Missing
Benchmark." We agree, and we are not going to fill the gap with a vibe. What
we have are receipts of individual catches: a scar that flagged a regex
denial-of-service risk that had passed both unit tests and review, and a
fence that fired mid-build and changed a wizard's timeout floor the same
afternoon. Anecdotes, labeled as anecdotes.</p>
<p>If you want the failure half of your agent's memory to exist at all:
<a href="https://github.com/Daily-Nerd/Scar" target="_blank" rel="noopener noreferrer" class="">Scar</a> ships the authoring contract as a
loadable skill and fires the promoted scars,
<a href="https://github.com/Daily-Nerd/daimon" target="_blank" rel="noopener noreferrer" class="">daimon</a> drafts cold-start candidates
from session checkpoints, and the format is
<a href="https://github.com/Daily-Nerd/Scar/blob/main/SCAR-FORMAT.md" target="_blank" rel="noopener noreferrer" class="">a page of YAML and prose</a>
you could implement yourself in an afternoon. The dead ends you have already
paid for are the cheapest knowledge you will ever ship.</p>]]></content>
        <author>
            <name>daimon maintainers</name>
            <uri>https://github.com/Daily-Nerd/daimon</uri>
        </author>
        <category label="concepts" term="concepts"/>
        <category label="scars" term="scars"/>
        <category label="negative-knowledge" term="negative-knowledge"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Agreement is not evidence: shipping origin-bound corroboration]]></title>
        <id>https://daily-nerd.github.io/daimon/blog/origin-bound-corroboration</id>
        <link href="https://daily-nerd.github.io/daimon/blog/origin-bound-corroboration"/>
        <updated>2026-07-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Here is a trap every agent memory system walks toward sooner or later: an item]]></summary>
        <content type="html"><![CDATA[<p>Here is a trap every agent memory system walks toward sooner or later: an item
that keeps showing up starts to feel true. Five sessions all "remember" the
same fact, so the fact must be solid. Promote it. Trust it more.</p>
<p>We wanted that feature. Independent re-observation <em>should</em> strengthen a
memory — that is how evidence works everywhere else. But before building it we
went looking for the ways it breaks, and what we found changed the design, the
release, and one security assumption we had been living with. All of it
shipped today in v0.22.0.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-echo-in-our-own-house">The echo in our own house<a href="https://daily-nerd.github.io/daimon/blog/origin-bound-corroboration#the-echo-in-our-own-house" class="hash-link" aria-label="Direct link to The echo in our own house" title="Direct link to The echo in our own house" translate="no">​</a></h2>
<p>Daimon injects prior memory into new sessions: a briefing at session start, a
<code>daimon recall:</code> line when a prompt matches past work. That injected text
becomes part of the new session's transcript. The serializer then reads that
transcript to extract what the session learned.</p>
<p>See the loop? An item from session A gets injected into session B's
transcript, and session B's extraction can "observe" it there — not because
the fact was re-derived from real work, but because daimon quoted itself. On
our own corpus, thirteen transcripts carry injected prior items. A naive
corroboration counter ("different session saw it again") would count daimon's
own echoes as independent witnesses, and the items recalled most often would
accumulate the most confidence. Recall frequency would become truth.</p>
<p>It got worse before it got better. While mapping the injection surfaces we
found that our quote verifier checked verbatim quotes against the <em>unstripped</em>
transcript. A quote copied from daimon's own injected line passed verification
and was stored as <code>verbatim</code>, <code>quote_verified: true</code> — a prior session's item
laundered as freshly witnessed. That hole did not wait for the corroboration
feature; it shipped as a standalone security fix the same day it was found,
and verification now refuses any quote whose only support lies inside
daimon's own output. Failed echoes get their own rejection reason
(<code>echo-only</code>), so the echo rate is now measurable instead of invisible.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-proof-that-says-the-naive-version-cannot-be-patched">The proof that says the naive version cannot be patched<a href="https://daily-nerd.github.io/daimon/blog/origin-bound-corroboration#the-proof-that-says-the-naive-version-cannot-be-patched" class="hash-link" aria-label="Direct link to The proof that says the naive version cannot be patched" title="Direct link to The proof that says the naive version cannot be patched" translate="no">​</a></h2>
<p>This is not just our bug. A recent paper — <a href="https://arxiv.org/abs/2606.24322" target="_blank" rel="noopener noreferrer" class=""><em>Securing LLM-Agent Long-Term
Memory Against Poisoning: Non-Malleable, Origin-Bound Authority with
Machine-Checked Guarantees</em></a> — proves, with
machine-checked TLA+ theorems, that defenses based on a memory item's content
or its derivation history are unsound. Attackers launder untrusted origins
through three channels: the agent's own summarization, trusted-tool echoes,
and <strong>manufactured corroboration</strong> — planting agreeing sources so that
agreement reads as verification.</p>
<p>That third channel is exactly the self-reference loop above, named as an
attack primitive with an impossibility result behind it. The paper's repair:
write-time origin binding is <em>necessary</em>, and origin-bound authority with
Sybil-resistant corroboration-gated elevation is <em>sufficient</em>. In plain
words: fix where a claim came from at the moment it is written, and only
count agreement when independence can be proven from those origins — never
assumed from the agreement itself.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-v0220-ships">What v0.22.0 ships<a href="https://daily-nerd.github.io/daimon/blog/origin-bound-corroboration#what-v0220-ships" class="hash-link" aria-label="Direct link to What v0.22.0 ships" title="Direct link to What v0.22.0 ships" translate="no">​</a></h2>
<p>Our implementation of that prescription, in a local-first CLI:</p>
<ul>
<li class=""><strong>Origin bound at write.</strong> Every item is stamped with the session and
author that first wrote it, at the admission boundary, on the same
never-rewritten rail as its identity. A model that emits its own origin
fields gets them stripped — a memory cannot issue itself a witness.</li>
<li class=""><strong>Independence proven from origins.</strong> A re-observation counts only when the
original writer is a <em>different</em> session, the new observation is locally
verbatim with a verified quote (which, after the echo fix, structurally
excludes daimon's own output), the match is strong enough to certify rather
than merely deduplicate, and the two observations do not share transcript
message bindings.</li>
<li class=""><strong>An auditable count, never a stored score.</strong> Corroborations are events in
the append-only log, one per independent witness. The count is derived at
read time. Contradiction outranks: a superseded or world-checked item loses
its badge, and reopening it does not restore counts earned before the
contradiction.</li>
<li class=""><strong>A separate axis, not a trust promotion.</strong> Items independently seen twice
render as <code>[≈ corroborated ×2]</code> beside their trust tag. The trust class
itself never moves on recurrence — that still takes re-verification
evidence or an explicit human decision.</li>
<li class=""><strong>Wired into nothing, on purpose.</strong> The badge affects no ranking and no
recall scoring, and a test enforces that scoring code cannot even import
the corroboration reader. The self-reinforcing loop — promotion raises
salience, salience raises injection, injection manufactures the next
corroboration — closes exactly where a counter feeds ranking, so that wire
stays cut until field data says otherwise. We ship the measurement before
anything acts on the measurement.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-it-does-not-do">What it does not do<a href="https://daily-nerd.github.io/daimon/blog/origin-bound-corroboration#what-it-does-not-do" class="hash-link" aria-label="Direct link to What it does not do" title="Direct link to What it does not do" translate="no">​</a></h2>
<p>Honesty section, as always. Corroboration only accrues on items written from
v0.22.0 forward — origins are never guessed retroactively, because a wrong
guess would make dependent observations look independent. A resumed session
that replays the same conversation under a new id is refused where hosts
preserve message ids, but a host that mints fresh ids can make one
conversation look like two. An attacker who controls the content of two
separate sessions can still manufacture two origins — the design raises the
cost of fake agreement from one recall line to two compromised sessions; it
does not make fake agreement impossible. And teammate checkpoints do not
corroborate in this version: a synced copy of a claim is still one witness,
and the gates that would make cross-author counting Sybil-resistant are
designed but deliberately not enabled yet.</p>
<p>The full release also carries the write-gateway hardening this work sat on
top of: value-keyed deletion end to end, a write-audit guard over every
command, and inbound team content passing the same scope, redaction, forget,
and trust gates as local writes.</p>
<p>If your agent's memory tells you something twice, ask it who told it first.
<a href="https://github.com/Daily-Nerd/daimon" target="_blank" rel="noopener noreferrer" class="">daimon</a> can now answer.</p>]]></content>
        <author>
            <name>daimon maintainers</name>
            <uri>https://github.com/Daily-Nerd/daimon</uri>
        </author>
        <category label="concepts" term="concepts"/>
        <category label="trust-classes" term="trust-classes"/>
        <category label="corroboration" term="corroboration"/>
        <category label="release" term="release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Verbatim vs. inferred: the trust class your agent's memory needs]]></title>
        <id>https://daily-nerd.github.io/daimon/blog/verbatim-vs-inferred</id>
        <link href="https://daily-nerd.github.io/daimon/blog/verbatim-vs-inferred"/>
        <updated>2026-07-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Your agent opens a session and tells you what you decided last time. Some of]]></summary>
        <content type="html"><![CDATA[<p>Your agent opens a session and tells you what you decided last time. Some of
that is a quote. Some of it is the model's summary of a quote. Some of it is a
conclusion the model drew at 2am from a session it was already losing track of.</p>
<p>All three arrive in the same font, in the same confident tone, with no way to
tell them apart. That is the actual problem with agent memory, and it is not
solved by remembering more.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="two-populations-two-failure-modes">Two populations, two failure modes<a href="https://daily-nerd.github.io/daimon/blog/verbatim-vs-inferred#two-populations-two-failure-modes" class="hash-link" aria-label="Direct link to Two populations, two failure modes" title="Direct link to Two populations, two failure modes" translate="no">​</a></h2>
<p>Daimon tags every item it carries with a trust class, visible on the line
itself:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">- [✓ verbatim] PR #60 awaiting review  — "review requested 2026-07-01"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">- [~ inferred] The retry storm was caused by a shared deadline across three calls</span><br></div></code></pre></div></div>
<p>The tag is not decoration. The two classes fail in genuinely different ways:</p>
<ul>
<li class="">A <strong>verbatim</strong> item can be <em>stale</em> — the world moved on since the quote was
said — but it cannot be <em>misremembered</em>. The quote is what was said.</li>
<li class="">An <strong>inferred</strong> item can be stale <em>and</em> wrong. The model may have misread the
session at the moment it wrote the summary down.</li>
</ul>
<p>That difference should change how you act on a line. A stale quote needs a
world check. A wrong inference needs to be thrown away. Collapsing both into
"the memory says" destroys the distinction exactly when you need it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-checker-has-to-be-dumber-than-the-thing-it-checks">The checker has to be dumber than the thing it checks<a href="https://daily-nerd.github.io/daimon/blog/verbatim-vs-inferred#the-checker-has-to-be-dumber-than-the-thing-it-checks" class="hash-link" aria-label="Direct link to The checker has to be dumber than the thing it checks" title="Direct link to The checker has to be dumber than the thing it checks" translate="no">​</a></h2>
<p>A trust class is worthless if the model assigns it to itself. A model that
hallucinates a quote will also happily label the hallucination <code>verbatim</code>.</p>
<p>So the model never gets a vote. At serialize time every candidate quote is
checked against the rendered transcript by a deterministic verifier: pure
string operations, no LLM, no judgment. A quote that matches gets the stamp. A
quote that does not match is <strong>downgraded to <code>~ inferred</code></strong> on the spot and
kept, not deleted. The claim survives; the certification does not.</p>
<p>This is the principle the whole design rests on. The checker must be dumber
than the thing it checks, because anything smart enough to be fooled by the
extractor is not a check.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-harder-problem-a-perfect-quote-can-be-perfectly-false">The harder problem: a perfect quote can be perfectly false<a href="https://daily-nerd.github.io/daimon/blog/verbatim-vs-inferred#the-harder-problem-a-perfect-quote-can-be-perfectly-false" class="hash-link" aria-label="Direct link to The harder problem: a perfect quote can be perfectly false" title="Direct link to The harder problem: a perfect quote can be perfectly false" translate="no">​</a></h2>
<p>Here is the part we got wrong for months, and the reason this post exists.</p>
<p>Verbatim matching certifies <strong>transcription, not truth</strong>.</p>
<p>The failure that taught us: an agent finished a long session and wrote
"serialization succeeded" into its own memory. It had not succeeded. The next
session read that line, believed the memory layer was healthy, and built on a
foundation that was not there.</p>
<p>Every step of that is faithful. The model did say it. The transcript records it
exactly. The quote verifier found it in the transcript and stamped it
<code>✓ verbatim</code>, correctly. The trust class did its job and the memory was still
false, because the thing being certified was that the sentence was <em>said</em>, not
that the event <em>happened</em>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="outcomes-need-a-witness-not-a-quote">Outcomes need a witness, not a quote<a href="https://daily-nerd.github.io/daimon/blog/verbatim-vs-inferred#outcomes-need-a-witness-not-a-quote" class="hash-link" aria-label="Direct link to Outcomes need a witness, not a quote" title="Direct link to Outcomes need a witness, not a quote" translate="no">​</a></h2>
<p>As of 0.20, claims that assert a completed outcome get held to a second
standard.</p>
<p>If an item's text asserts something finished — succeeded, merged, deployed,
tests green, shipped — it has to cite a concrete signal from that same session:
a tool result, an exit status. Something the session actually produced rather
than something the model concluded.</p>
<p>An outcome claim that cites a real signal stays <code>verbatim</code>. An outcome claim
with no citation, in a session that <em>did</em> surface signals, gets downgraded to
<code>~ inferred</code>. The quote and its verification stamp stay attached, because the
transcription is still honestly attested. It is the outcome that is unwitnessed.</p>
<p>An unwitnessed outcome is a report, not a fact.</p>
<p>Two deliberate limits on that rule, both in the direction of doing nothing
rather than guessing:</p>
<ul>
<li class=""><strong>Hedges are not assertions.</strong> "will be merged" is a plan. "whether the
deploy succeeded" is a question. Neither is touched.</li>
<li class=""><strong>Signal-free sessions never downgrade.</strong> Some hosts surface no parseable
tool results at all. Grounding is impossible there, and absence of evidence
about the <em>host</em> is not evidence against the <em>claim</em>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-none-of-this-fixes">What none of this fixes<a href="https://daily-nerd.github.io/daimon/blog/verbatim-vs-inferred#what-none-of-this-fixes" class="hash-link" aria-label="Direct link to What none of this fixes" title="Direct link to What none of this fixes" translate="no">​</a></h2>
<p>Trust classes tell you where a claim came from. They tell you nothing about
whether it is still true.</p>
<p>A <code>✓ verbatim</code> quote with a real tool-result behind it is fully attested and
goes stale the moment someone merges the PR it describes. Provenance is not
currency, and pretending otherwise would be the same mistake one layer up.</p>
<p>That is why every briefing opens with a <strong>VERIFY BEFORE TRUSTING</strong> block rather
than a summary, and why 0.20 adds an opt-in spot-check that re-reads external
state at briefing time and visibly flags carried claims the world has since
contradicted. We are measuring how often that fires before we say anything
about how big the problem is.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="try-it">Try it<a href="https://daily-nerd.github.io/daimon/blog/verbatim-vs-inferred#try-it" class="hash-link" aria-label="Direct link to Try it" title="Direct link to Try it" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">uv tool install 'daimon-briefing[pretty]'</span><br></div></code></pre></div></div>
<p>The full mechanics live on the <a class="" href="https://daily-nerd.github.io/daimon/docs/concepts/trust-classes">trust
classes</a> page, with
<a class="" href="https://daily-nerd.github.io/daimon/docs/concepts/carry">carry and staleness</a> for the currency half and
<a class="" href="https://daily-nerd.github.io/daimon/docs/concepts/receipts">receipts</a> for what happens if a checkpoint is edited
after it is written. Code and issue tracker:
<a href="https://github.com/Daily-Nerd/daimon" target="_blank" rel="noopener noreferrer" class="">Daily-Nerd/daimon</a>.</p>]]></content>
        <author>
            <name>daimon maintainers</name>
            <uri>https://github.com/Daily-Nerd/daimon</uri>
        </author>
        <category label="concepts" term="concepts"/>
        <category label="trust-classes" term="trust-classes"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[daimon 0.19.0: a docs site, an MCP server, and deletion you can prove]]></title>
        <id>https://daily-nerd.github.io/daimon/blog/daimon-0-19</id>
        <link href="https://daily-nerd.github.io/daimon/blog/daimon-0-19"/>
        <updated>2026-07-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[daimon 0.19.0 is on PyPI, three days after 0.18. The headline is a pair of]]></summary>
        <content type="html"><![CDATA[<p>daimon 0.19.0 is on PyPI, three days after 0.18. The headline is a pair of
doors: the documentation site you are reading — in English and Spanish from
day one — and a read-only MCP server, so hosts that speak MCP but have no
hook system can still read your agent's memory. Also in the box: <code>daimon forget</code> ships, and a chunk cache stops failed serializes from re-buying work
they already paid for.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-mcp-server-memory-for-hosts-we-cant-hook">The MCP server: memory for hosts we can't hook<a href="https://daily-nerd.github.io/daimon/blog/daimon-0-19#the-mcp-server-memory-for-hosts-we-cant-hook" class="hash-link" aria-label="Direct link to The MCP server: memory for hosts we can't hook" title="Direct link to The MCP server: memory for hosts we can't hook" translate="no">​</a></h2>
<p>Daimon's capture loop attaches to hosts through hooks. Plenty of
MCP-capable tools have no hook surface — until now they simply couldn't see
daimon's memory. <code>daimon mcp serve</code> fixes the reading half:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">daimon mcp serve   # JSON-RPC over stdio, blocks until EOF</span><br></div></code></pre></div></div>
<p>Four tools, all read-only: <code>daimon_recall</code> (search with full provenance —
trust class, author, supersession state, origin project), <code>daimon_brief</code>
(the latest briefing, trust-tagged), <code>daimon_projects</code> (everything daimon
has memory for), and <code>daimon_status</code> (capture health). Pure standard
library, zero new dependencies — same deal as the rest of daimon.</p>
<p>Read-only is a design position, not a limitation. Writes stay with the
capture pipeline, where every verbatim claim is mechanically checked
against a real transcript. An agent can <em>read</em> memory over MCP; it cannot
assert new memories into it. And the server inherits daimon's
cross-project discipline: reads are project-scoped, and a project with no
checkpoint gets told exactly that — never another project's content.</p>
<p>The <a class="" href="https://daily-nerd.github.io/daimon/docs/reference/mcp">MCP reference</a> has the registration snippets for
Claude Code, Windsurf, Cursor, and any generic stdio config.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="daimon-forget-ships-deletion-with-a-tombstone"><code>daimon forget</code> ships: deletion with a tombstone<a href="https://daily-nerd.github.io/daimon/blog/daimon-0-19#daimon-forget-ships-deletion-with-a-tombstone" class="hash-link" aria-label="Direct link to daimon-forget-ships-deletion-with-a-tombstone" title="Direct link to daimon-forget-ships-deletion-with-a-tombstone" translate="no">​</a></h2>
<p>Announced as merged in the last post — now released. <code>daimon forget</code>
removes an item from the live checkpoint, the recall index, and the audit
trail's <em>content</em>, while the event stream keeps a content-hash tombstone.
With receipts enabled, the post-removal checkpoint is re-signed. You can
prove the deletion happened without keeping what was deleted. Mechanics on
the <a class="" href="https://daily-nerd.github.io/daimon/docs/concepts/lifecycle">item lifecycle</a> page.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-chunk-cache-retries-stop-re-buying-finished-work">The chunk cache: retries stop re-buying finished work<a href="https://daily-nerd.github.io/daimon/blog/daimon-0-19#the-chunk-cache-retries-stop-re-buying-finished-work" class="hash-link" aria-label="Direct link to The chunk cache: retries stop re-buying finished work" title="Direct link to The chunk cache: retries stop re-buying finished work" translate="no">​</a></h2>
<p>Serialization extracts memory from transcripts in chunks, and until now a
failed run threw away every chunk that <em>had</em> succeeded — the retry paid for
all of it again, in time and tokens. 0.19 adds a content-addressed cache
for chunk extractions: a heal or retry reuses every chunk whose content is
unchanged and only pays for what's actually missing. First slice of a
longer incremental-serialization arc.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="and-the-docs-site-itself">And the docs site itself<a href="https://daily-nerd.github.io/daimon/blog/daimon-0-19#and-the-docs-site-itself" class="hash-link" aria-label="Direct link to And the docs site itself" title="Direct link to And the docs site itself" translate="no">​</a></h2>
<p>Quickstart (install to first briefing in one page), concept pages for the
ideas that make daimon different — <a class="" href="https://daily-nerd.github.io/daimon/docs/concepts/trust-classes">trust
classes</a>, <a class="" href="https://daily-nerd.github.io/daimon/docs/concepts/carry">carry and
staleness</a>, <a class="" href="https://daily-nerd.github.io/daimon/docs/concepts/receipts">receipts</a>,
<a class="" href="https://daily-nerd.github.io/daimon/docs/concepts/lifecycle">item lifecycle</a> — host guides, configuration,
team memory. Every page in Spanish as well as English, written for
Spanish-reading developers rather than machine-dumped. This blog (with
<a href="https://daily-nerd.github.io/daimon/blog/rss.xml" target="_blank" rel="noopener noreferrer" class="">RSS</a>) is the canonical
home for announcements; the README now just points here.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrade">Upgrade<a href="https://daily-nerd.github.io/daimon/blog/daimon-0-19#upgrade" class="hash-link" aria-label="Direct link to Upgrade" title="Direct link to Upgrade" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">uv tool install --force 'daimon-briefing[pretty]'</span><br></div></code></pre></div></div>
<p>Full details in the
<a href="https://github.com/Daily-Nerd/daimon/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer" class="">changelog</a>.
If something breaks, the
<a href="https://github.com/Daily-Nerd/daimon/issues" target="_blank" rel="noopener noreferrer" class="">issue tracker</a> reads every
report.</p>]]></content>
        <author>
            <name>daimon maintainers</name>
            <uri>https://github.com/Daily-Nerd/daimon</uri>
        </author>
        <category label="announcement" term="announcement"/>
        <category label="release" term="release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[daimon has a home: bilingual docs, and what shipped this week]]></title>
        <id>https://daily-nerd.github.io/daimon/blog/daimon-has-a-home</id>
        <link href="https://daily-nerd.github.io/daimon/blog/daimon-has-a-home"/>
        <updated>2026-07-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[daimon now has a documentation site — the one you are reading — in English]]></summary>
        <content type="html"><![CDATA[<p>daimon now has a documentation site — the one you are reading — in English
and Spanish, with a quickstart that takes you from install to your first
briefing, and concept pages for the ideas that make daimon different: trust
classes, carry, receipts, and the item lifecycle. This blog is the new
canonical home for releases, feature explainers, and field incidents; every
announcement you see from us elsewhere will link back here.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-shipped-this-week">What shipped this week<a href="https://daily-nerd.github.io/daimon/blog/daimon-has-a-home#what-shipped-this-week" class="hash-link" aria-label="Direct link to What shipped this week" title="Direct link to What shipped this week" translate="no">​</a></h2>
<p><strong>daimon 0.18.0 is on PyPI</strong> (<code>uv tool install 'daimon-briefing[pretty]'</code>).
The headline experiment: opt-in per-item <strong>scene traces</strong>, indexed for
recall. It ships behind a flag while we A/B it against our own benchmark —
if the numbers don't earn it, it doesn't go default-on. That's the deal we
make with every feature.</p>
<p><strong><code>daimon forget</code> is merged</strong> and ships in the next release: item removal
with a tombstone event. The item leaves the live checkpoint, the recall
index, and the audit trail's <em>content</em> — but the event stream keeps a
content-hash tombstone, and with receipts enabled the post-removal
checkpoint is re-signed. Deletion you can prove happened, without keeping
what was deleted. The <a class="" href="https://daily-nerd.github.io/daimon/docs/concepts/lifecycle">item lifecycle</a> page covers
the mechanics.</p>
<p><strong>The docs went bilingual.</strong> Every page — quickstart, concepts, hosts,
configuration, team memory — is available in Spanish. Not machine-dumped:
written for Spanish-reading developers, because the es-speaking agent-dev
community deserves first-class docs, not an afterthought.</p>
<p><strong>Windsurf is live-validated.</strong> The capture loop (native-transcript
serialize) has now been tested end-to-end in real Windsurf use, joining
Claude Code. Codex ships next; Gemini waits on an upstream fix.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-project-exists-in-one-paragraph">Why this project exists, in one paragraph<a href="https://daily-nerd.github.io/daimon/blog/daimon-has-a-home#why-this-project-exists-in-one-paragraph" class="hash-link" aria-label="Direct link to Why this project exists, in one paragraph" title="Direct link to Why this project exists, in one paragraph" translate="no">​</a></h2>
<p>Your agent forgets everything between sessions, and most memory systems
"fix" that by storing text a model wrote about what happened — with no way
to tell which parts are quotes and which parts are guesses. daimon marks
every remembered item as <strong>verbatim</strong> (an exact quote, mechanically verified
against the transcript by a deterministic checker — no LLM grading its own
homework) or <strong>inferred</strong> (allowed to evolve, flagged for verification). A
recent survey of agent-memory research calls claim-level provenance an open
problem; we think the answer is to make memory <em>provable</em>, and that is the
axis everything here is built on.</p>
<p>More soon — releases, war stories from the field, and deep dives into how
the verification machinery works. Subscribe via <a href="https://daily-nerd.github.io/daimon/blog/rss.xml" target="_blank" rel="noopener noreferrer" class="">RSS</a> or
follow the repo on <a href="https://github.com/Daily-Nerd/daimon" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>]]></content>
        <author>
            <name>daimon maintainers</name>
            <uri>https://github.com/Daily-Nerd/daimon</uri>
        </author>
        <category label="announcement" term="announcement"/>
        <category label="release" term="release"/>
    </entry>
</feed>