Everything on nimory lives in plain files. Events, subscriptions, inventory, birthdays, notes, finance. One Obsidian vault, synced with Syncthing, opened by hand whenever I want.
At some point I noticed something. My AI (Omnimo, the Telegram bot) reads the same files I do. And when I tell it something new, it writes it back to the same files.
So that's its memory. A folder of markdown. Nothing more.
This note is about why I think that's enough, and how I keep it from turning into a mess.
Why Markdown? 📝
Every "AI memory" product I looked at wants a database, embeddings, a sync service, and an account. I wanted something I can cat.
Markdown gives me that:
- I can read it. Open any file, understand exactly what the AI knows.
- The AI can read it. LLMs are very good at plain text. No special format needed.
- I can fix it. If the AI remembers something wrong, I open vim and delete the line. Done.
- grep works. Searching a few hundred files takes no time at all.
- It outlives the tools. If Obsidian disappears tomorrow, the files stay. If I swap Ollama for something else, the files stay.
The memory belongs to me, not to the app.
What It Looks Like 📂
Nothing fancy. Same vault I already use:
notes/
├── event.md
├── subscriptions.md
├── birthdays.md
├── inventory.md
├── inbox.md
├── people/
├── topics/
└── outbox/
Each file starts with a small frontmatter block. The important part is the description line:
---
name: running
description: race calendar, shoes, weekly mileage
updated: 2026-10-20
---
- registered for the 10k in november
- shoe size goes up half a size for long runs
That one line does most of the work. Before answering, the AI looks at the descriptions first and only opens the files that matter. On a small CPU-only box with a small model, context is precious. Loading the whole vault every time is not an option.
Rules I Follow 📏
Writing notes for yourself is easy. Writing notes that both you and an AI can use needs a bit of discipline. These are the few rules I settled on:
- One subject per file. Running stuff goes in running. Not wherever the AI happened to have open.
- Short lines. One fact per line. No essays. The AI loves to write paragraphs, I don't let it.
- Only what I said. The AI doesn't get to store its own guesses about me. If I mention a run once, it doesn't become "fitness enthusiast".
- Keep history. When something changes, the line says so:
works on infra (previously search). Useful context, cheap to keep. - Nothing secret. No passwords, no account numbers, no ID numbers. Memory is not a vault for secrets.
The third rule matters most. Without it, the memory slowly fills up with things that sound right but I never actually said.
Why Not a Vector Database? 🤔
Postgres on nimory has had pgvector installed for a long time. Still unused. I even mentioned it in the nimory note as something to either build or stop pretending about.
Honestly? For one person's notes, I don't need it.
Embeddings shine when you have millions of documents and fuzzy questions. I have a few hundred files with good names and a description on top. A filename, a grep and a well-written first line beat a similarity search most of the time, and I can debug them by just looking.
If the vault ever grows past what grep can handle, I'll revisit. Not today.
Not Perfect 🚧
- Files grow. Some logs need rolling up every few weeks, or they eat the context.
- Stale facts. Things that were true in June aren't always true in October. The AI can't always tell.
- Two writers, one file. Me in Obsidian and the AI writing at the same time is a real risk.
event.mdalready needed a lock for this. Other files still don't have one.
None of these are reasons to move to a database. They're just housekeeping.
The best memory system I've found is the one I was already using for myself.
Plain files. Readable by me, readable by the AI, and entirely mine.
# Last updated on .