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:
- vector search over chunks (meaning) and over assertions
- FTS5 full-text search over both (exact words, names, jargon; OR-mode with prefix expansion, header text weighted 2×)
- results merge with Reciprocal Rank Fusion (k=60): agreement across lists beats a single list's enthusiasm
- a per-recording cap keeps one long meeting from crowding out everything else
- winners cross-link: an assertion brings its anchor chunk, a chunk brings its extracted assertions, so the AI always gets the structured fact and the quotable evidence together
Write discipline
- Every write carries a mandatory
source: extracted (with a transcript anchor), user-stated, or agent. Nothing enters anonymously; this is the defense against memory poisoning. - New assertions reconcile at write time: similar existing memories are found by vector distance, and an LLM rules duplicate / supersedes / separate.
- Extraction is optional and additive: without an LLM key the verbatim layer still does everything else.
The full design document, including the experiments behind each decision, lives in the repository README.