v0.6.0 — Memory with a lifecycle & Artifacts
Memory in 0.5.x could store a fact and find it again. It could not tell you when
the fact applied as opposed to when it was written down, which entry replaced
which, or whether anyone had ever checked it. This release gives an entry a
lifecycle, and gives you the surface to govern it.
Memory with a lifecycle
- Observed vs. stored. An entry keeps the date the fact applied apart from
the date it was written. "Since March" is no longer the same as "noted today",
and the context block says which it is showing. - Supersession instead of deletion. A correction records that it replaces an
earlier wording. The old entry stays readable and drops out of search, so the
correction is kept rather than the contradiction erased — and the cosine no
longer decides which of two versions of the same fact wins. - Confirmation by click. Under an answer, the entries it rested on can be
confirmed — or the confirmation taken back. Before acting on a stored fact in a
way that cannot be undone (sending, booking, ordering, delegating), the agent
names the fact and its date and waits; for an entry you have confirmed, it does
not ask again. That is the one place a click of yours changes what the agent
does next. - Memory classes. Every entry carries one of episodic, semantic,
procedural, working or document, defaulted per namespace and overridable
per entry. It is what separates a corpus from a memory, which a namespace name
cannot do. - Deletion follows through. When an answer that quoted a memory entry was
itself stored, deleting the original now reaches the copy — across generations.
The memory admin surface
The console shows what an agent cannot see: deleted, expired and superseded
entries, each with a way back. Minimum relevance and relative cutoff are editable
per agent and per task policy. The namespace view is a hierarchy with per-level
totals, a filter and plain-text names in place of user and agent UUIDs.
Artifacts
A file an agent reads or writes arrives as a card rather than a wall of text. One
click opens it in a side panel with edit and preview, conflict-safe saving and a
built-in PDF viewer. Every code block in an answer carries a pencil, so a draft in
chat becomes a file without leaving the conversation.
Also
- Undo for task prompts. Every save keeps the wording it replaced; the history
under the context field shows, loads or restores an earlier version. - Namespace patterns are validated, not repaired. A structurally broken
pattern is refused on save and named, instead of being silently rewritten into
something that matches nothing. - Longer chats hold together. The rolling summary follows a compaction
contract: decisions, open commitments and uncertainties carry over unchanged
instead of fading a little with every round.
Breaking changes
- Tool search reads
tool_read_namespacesonly. The memory-search tool no
longer falls back onread_namespaces, which now feeds automatic injection and
nothing else. An agent whose namespaces are listed only under "Read" finds
nothing by tool until they are added under "Tool-only read" — and nothing
anywhere reports an error, so this is the one to check after updating. hit.scoreis gone. Search results, run events and the memory-search tool
result carrysimilarity(what the vector search measured) andrelevance
(what it became after weighting). The single field destroyed the raw similarity
and could exceed 1 while still being called a score.ranking.prioritiesremoved from the embedding config. Namespace weighting
comes from the namespace rules alone. Both sources used to add into the same
multiplier, with nothing indicating that two had contributed.- Namespace segments are no longer rewritten. A character that would merge two
distinct ids, or add a namespace level, is refused rather than replaced.
Trimming and lower-casing remain, since neither can merge anything distinct.
⚠️ Install 0.6.2, not this release
The namespace rules that drive memory classes, ranking bonuses and instruction
templates were seeded from bootstrap.ts here, which update.sh skips by design.
An installation updating to 0.6.0 receives the schema of the new memory model
without any of its configuration.
0.6.2 moves them to a
migration that runs on both paths, and fixes a follow-up defect in 0.6.1. Take it
directly.