The memory is yours. The model is a guest.
A fleet of AI agents, each with its own knowledge base, and one memory layer under all of them. On your machine, in plain files, with no model in the retrieval path.
Pre-launch. Built daily.
A library that lives with you.
Ulpia is a library. Your notes, your decisions, your protocols: markdown files, in folders, in git, on your disk. Move the folder and everything moves with it.
Vesta is its librarian. Ask her a question and she answers with the files that should open, without a model in the loop. When she is wrong, she says why, in words you can act on.
Then you hand those files to whatever model you like. Yours, running locally. Claude, through MCP. Something else next year. The memory outlives the model.
Watch her work.
$ kb route "why is there no embedding model in the retrieval path" decisions --hybrid 0.033 decisions 0018-no-model-in-the-retrieval-path.md keywords #1 + text #1 0.031 decisions 0017-no-dense-scorer-yet.md keywords #2 + text #9 0.029 decisions 0004-local-first-inference.md keywords #3 + text #14
Two independent scorers read every question: a keyword index built from your own map, and full text search over the content. The signal is not the score, it is the agreement. A file both scorers found is a hit. A file only one found is a guess, and Vesta says so.
When nothing matches, the base answers with its own vocabulary, so a miss teaches you what the library covers instead of teaching you to stop asking.
The other trade.
Most memory layers put an embedding model between you and your own notes. That buys semantic matching, and it costs four things: you cannot run it offline, you cannot explain a bad result, you cannot reproduce yesterday's answer, and your notes have been somewhere you did not choose.
Ulpia takes the other trade.
- Offline, because no network sits in the retrieval path.
- Explainable, because every answer names the reason it was chosen.
- Reproducible, because plain software gives the same answer to the same question, today and in a year.
- Private, because what git does not track, Vesta will not serve.
Where it stands.
Early, used daily, and honest about which is which. The core is tested. The tray app is young. Local model routing is not built yet. The licence is not chosen yet, and choosing well matters more to us than announcing fast.
If that paragraph made you more curious instead of less, this is being built for you.
The doors are not open yet. The mail is.
Our address is hello@ulpia.io, and the button at the top puts it on your clipboard. Write whenever you like, or leave us yours and we will write when there is something you can install.