v0.23.0.md
docs/release-notes/v0.23.0.md
Tesserae v0.23.0 — the engine's sleep cycle
<!-- translations:start -->
한국어 · 中文 · 日本語 · Русский · Español · Français · Deutsch
<!-- translations:end -->
Released 2026-07-22 · PyPI · GitHub release · pip install --upgrade tesserae==0.23.0
Layered agent memory (v0.21) could distill, but only when you asked — on tesserae refresh, under memory pressure. This release gives the always-on engine a sleep cycle: it consolidates agent memory on its own, the way a brain consolidates during rest.
Consolidate during rest
Leave tesserae engine running and it now watches an activity clock. When a project goes idle — no edits or new sessions for a few minutes — it runs the distillation pass across that project's agents, reorganizing and compacting their accumulated experience while you're away. A periodic ceiling (default 6h) guarantees even a continuously busy project still consolidates.
tesserae engine # idle consolidation on by default
tesserae engine --consolidate-idle 600 --consolidate-every 43200
tesserae engine --all # every registered project, on idle
tesserae engine --no-consolidate # opt out
Idle is the brain-accurate trigger: consolidation happens when the system is at rest, not on an arbitrary wall-clock hour.
Safe by construction
The cycle wraps exactly the existing maybe_distill_on_refresh pass, so all its guarantees carry over:
- A no-op unless you opted in. Nothing runs until
TESSERAE_AGENT_DISTILL=1— the same gate distillation has always used, plus the per-agent watermark and memory-pressure checks. The flags are on by default because the pass itself refuses to do anything without the opt-in. - Never overlaps a recompile. Consolidation runs under the compile gate, so it and the pipeline are mutually exclusive — and to make that hold in single-daemon mode, an unset gate now defaults to a private semaphore.
- Never disturbs the daemon. It runs on its own thread (the daemon's existing poller idiom), never raises into the event loop, exits promptly on shutdown, and is skipped entirely for one-shot
engineruns. - Deterministic artifacts, untouched. The distilled graphs keep their byte-idempotence; the monotonic activity clock is never persisted.
Flags
| Flag | Default | Meaning |
|---|---|---|
--consolidate / --no-consolidate | on | enable the sleep cycle |
--consolidate-idle | 300 | seconds of quiet before consolidating |
--consolidate-every | 21600 | ceiling — consolidate at least this often (0 = off) |
--consolidate-check | 30 | how often the thread checks the clock |