A small program runs quietly on your computer and looks after a folder of memories. When your assistant needs to remember or recall something, it asks that program. The assistant never gets your whole vault — only the few notes that answer the question it's working on, with the date and source attached.
If you point it at a folder of your own documents, it asks for your confirmation in person, on that computer, before it reads anything. A change proposed from anywhere else doesn't take effect on its own.
"Actually, we moved the launch to March." The new note replaces the old one for future answers, and the old one is kept as history.
"Forget that, I was wrong." The correction is removed and what you said before becomes current again. Nothing is invented in between.
"Forget that document." All of it goes, including every piece of it the system had broken out, not just the paragraph you mentioned.
One honest caveat: in the first release, recall treats every note equally rather than automatically preferring your latest correction. Preferring the newest version is the next piece of work after the first release, not something we're claiming now.
Any MCP client over stdio. The thin client forwards five tool names and no others.
One Unix domain socket, checked against the OS peer UID. Nothing administrative is reachable from a model.
Single writer over append-only segments. Embeddings via llama.cpp, in-process. Full-text and vector indexes over the same objects.
Objects, tags and edges, searched by full text and vector similarity together rather than vector-only. visibility is a real field in the record header that the model can never set; connector provenance is written at ingestion and is not model-writable either.
id ULID, 16 raw bytes
body type, text, block_type,
heading_path, table_data,
source_uri, sync_connector_id
visibility header enum — never model-set
parent_id chunk → document grouping
tags inline list per object
edges inline adjacency (supersedes)
Private and local-only blocks are removed from the server-eligible set before placement runs. Privacy is a hard filter, never a cost term. And moving a block between tiers never changes what a memory means — eviction is not forgetting.