v0.9.0.md
docs/release-notes/v0.9.0.md
Tesserae v0.9.0 — AgentRunbook memory + an LLM backend you can actually see
<!-- translations:start -->
한국어 · 中文 · 日本語 · Русский · Español · Français · Deutsch
<!-- translations:end -->
Released 2026-06-14 · PyPI · GitHub release · pip install --upgrade tesserae==0.9.0
A feature release: a multi-granularity memory layer ported from LongMemEval-V2's AgentRunbook, and a set of fixes that make the LLM backend visible and honest instead of silently failing.
1. AgentRunbook-style multi-granularity memory
A new, opt-in distillation layer above raw session findings — three granularities, all byte-idempotent (content-derived ids, no wall-clock/RNG, deterministic fallback) and LLM-optional:
Event— per-transition records mined from a session's turns (dynamic state tracking), integrated into session-finding extraction.Runbook— distilled reusable procedures for recurring workflows (cross-session, ≥2 sessions by default).Gotcha— distilled recurring failure modes / wrong-here assumptions.
Plus multi-pool retrieval: compile_context(multi_pool=True) decomposes the query and reserves budget slots for the most relevant distilled-memory nodes. Configurable via tesserae compile --distill, tesserae context --multi-pool, distillation.enabled in config, and the MCP compile_context multi_pool argument. All default-off, so a plain compile is unchanged.
2. A visible, honest LLM backend
tesserae config status— prints the resolved provider + codex-home / claude-dirs with the source of each setting (env > project config >~/.tesserae/config.json> default), and a live ping. A rate-limited or mis-authed backend is now obvious instead of invisible.- Loud session-extraction failures — extraction now distinguishes "the model returned nothing" from "the model never answered." A failed chunk is no longer cached as empty (it re-extracts once the backend works), and compile prints an unmissable warning. Previously a throttled backend silently produced a graph with sessions but zero findings.
- Codex reasoning effort is pinned to
mediumfor Tesserae's own calls (configurable viallm_codex_reasoning_effort/TESSERAE_CODEX_REASONING_EFFORT), so a globalxhighset for interactive codex no longer makes every compile many times slower.
3. Determinism hardening
- The byte-idempotence guards now exercise the deterministic (no-LLM) compile they actually guarantee — an ambient LLM no longer makes them flaky.
- A no-LLM compile re-emits cached community summaries instead of dropping them, so recompiles stay stable across LLM-availability flux.
Upgrading from v0.8.x
Drop-in. Everything new is opt-in or additive; a plain tesserae compile behaves as before. Run tesserae config status to confirm which LLM backend you're on.