Skip to content

v0.6.0 — Memory with a lifecycle & Artifacts

Choose a tag to compare

@Ontheia Ontheia released this 04 Aug 11:15
· 32 commits to main since this release

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_namespaces only. The memory-search tool no
    longer falls back on read_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.score is gone. Search results, run events and the memory-search tool
    result carry similarity (what the vector search measured) and relevance
    (what it became after weighting). The single field destroyed the raw similarity
    and could exceed 1 while still being called a score.
  • ranking.priorities removed 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.