Ulpia

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.

Write to hello@ulpia.io

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 --hybridquestion: why is there no embedding model in the retrieval pathindexed:  22 entries across 1 agents, 0 aliases  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
Real output, uncut.

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.

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.

hello@ulpia.io is on your clipboard.

Would you like to be told when it opens?

Our address is on your clipboard, so you can write whenever you like. This is the other direction: leave yours and we will tell you when there is something you can install. Rarely otherwise, and never more than once a month.

hello@ulpia.io

We need an address to write to.

You are on the list.

We will write when there is something you can install. Our address is still on your clipboard, if you have something to say before then.