Lavox docs
GitHub Get Lavox

The memory

The memory is the product's core: a two-layer, bitemporal store built from everything you say, designed around measured results rather than fashion.

Two layers

The verbatim layer is canonical. Transcripts are split at speaker turns into ~1400-character chunks, each prefixed with a context header: [date | kind | title | participants | speaker @ ts]. Contextual headers cut retrieval failures by 35–49% in Anthropic's measurements, and recording metadata provides them for free.

The assertion layer is an index, never a replacement. An LLM extracts typed assertions on top: decision, fact, commitment, preference, task. Verbatim chunks beat lossy fact-extraction on recall in controlled comparisons, so search always fuses both layers, and every assertion links back to the exact chunk it came from.

Decisions are first-class: {chosen, alternatives[], reasoning}. The rejected alternative is what every other system throws away, and the reason the question "why didn't we do B?" stays answerable months later.

Bitemporal history

Corrections supersede, they never delete. Three columns do all the work, with no graph database and no framework:

occurred_at      -- when it was said (event time)
invalidated_at   -- when we stopped believing it
superseded_by    -- what replaced it

Ask "what is the current decision?" and superseded rows are filtered out. Ask "what did we believe in July?" and they are still there, with the chain that replaced them.

Fusion search

Every query runs four searches in parallel, then fuses them:

Recency is an additive, conditional bonus, never a multiplier. Multiplicative age-decay collapsed recall from 19/20 to 4/20 in our tests. The recency term is bounded, additive, and applied only when the query is explicitly time-sensitive.

Write discipline

The full design document, including the experiments behind each decision, lives in the repository README.