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.
"Go back to what I said before the correction." Forgetting the corrected note does this by default: the current version is removed and the earlier one becomes current again. You can instead remove just that version or the whole correction history. 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.
Any MCP client over stdio. The thin client forwards fourteen tool names and no others.
One local socket (a Unix socket, or a named pipe on Windows), checked against the OS peer identity. 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 layers never changes what a memory means: eviction is not forgetting.