4.2 KB · updated 2026-07-31 · md

v0.21.0.md

docs/release-notes/v0.21.0.md

Tesserae v0.21.0 — layered agent memory

<!-- translations:start -->

한국어 · 中文 · 日本語 · Русский · Español · Français · Deutsch

<!-- translations:end -->

Released 2026-07-20 · PyPI · GitHub release · pip install --upgrade tesserae==0.21.0

No human remembers everything, and no agent's context window fits everything. This release gives Tesserae a layered, per-agent knowledge base — the biggest feature since the engine spine. Every agent grows its own memory, that memory is periodically distilled into a bounded higher-level layer, and managers see only the distilled layer of their reports, recursively up an org tree. Entirely opt-in and additive.

The idea

Expertise isn't a partition of facts — it's a weighting over shared facts, deepening where an agent actually works. So instead of one giant graph or N fragmented ones, Tesserae keeps three layers over one substrate:

  • L0 — the project graph you already have, unchanged and byte-idempotent. The compile now mints one Agent node per observed agent plus performed_by edges — raw attribution, zero LLM cost.
  • L1 — one distilled artifact per agent (.tesserae/agents/<key>/distilled.graph.json), bounded to a single 48k read so an agent can load its whole memory in one call.
  • L2' — manager rollups: distilling an agent that has reports carries the best of its reports' notes verbatim (LLM re-summarization depth capped at 1 — never a paraphrase of a paraphrase), recursing to any depth.

What you can do

tesserae agents init                    # discover agents, propose the org registry
tesserae agents set-parent <child> <manager>
export TESSERAE_AGENT_DISTILL=1
tesserae distill                        # every agent, leaves first, managers last

Then every graph-reading MCP tool takes an agent= argument: a worker key (own raw experience plus own distilled notes), a manager key (a federation of the reports' distilled layers only — raw never leaks up), or org (the whole team, zero config). New tools agent_view_explain (who knows what, and how stale) and drill_down (resolve a distilled note back to raw evidence, audit-logged) round it out.

Forgetting that never deletes

The user's "forget" decomposes into absorb (fold a decayed finding into a distillate that cites it) and demote (drop to a title+ref line in the agent's index) — age alone never makes knowledge invisible, and everything stays reachable via drill_down / include_superseded. Every promotion, demotion, and absorption is written to a ledger and surfaced by tesserae lint, so shrinkage is visible before it costs a decision, never discovered after.

The growth loop

Per-agent harness dirs with a generated purpose.md; per-agent extraction-guidance streams (steer one agent without touching others); opt-in cross-agent semantic bridges; per-agent topic maps; and subagent promotion, so a reviewer subagent's runs accumulate into the reviewer agent's own expertise. When TESSERAE_AGENT_DISTILL is set, tesserae refresh consolidates automatically — but only for agents under memory pressure (raw recall no longer fitting one read), the MemGPT-style trigger.

Determinism held throughout

The project graph stays byte-idempotent; distilled artifacts are deterministic given their declared inputs. Time is always the corpus clock — the newest instant in the sessions themselves — never wall-clock; node identity never depends on LLM wording; and a lint probe rejects the timestamp/counter-shaped metadata that has broken byte-idempotence before.

Full design: MD0 and the spec at docs/superpowers/specs/2026-07-19-layered-agent-kg.md. pip install --upgrade tesserae==0.21.0 (or npm i -g @jokerized/tesserae@0.21.0).