cat posts/2025-07-29-a-personal-knowledge-agent.md
Pointing an agent at my notes
“When did I last change the backup schedule on the home NAS, and why?” I typed that into a terminal a couple of weeks ago, in my notes folder, and about fifteen seconds later I had the answer, with the date, the reason (a disk that was filling up faster than I’d expected), and the name of the note it came from. I’d written that note in 2023 and forgotten it existed.
That’s the whole pitch, really. I’ve had my notes in an Obsidian vault for about five years now, a folder of Markdown files, and since the start of the month I’ve been running Claude Code in that folder, on my own subscription, the same way I’d run it in a repo. A vault is just files, and an agent that can search and read files doesn’t need anything special to work on it. No plugin, no embeddings, no vector database. It greps.
I expected to need more than that. In 2023 I’d have said the way to ask questions of your own notes was retrieval-augmented generation, with chunks and an index, and I’d have built one. For a few thousand notes it turns out that a model which can run grep a few times with different words, open the five files that look promising and read them is about as good, and it’s a lot easier to understand when it gets something wrong, because I can see which files it opened.
The rules
The first thing I did was write a CLAUDE.md at the top of the vault, the same idea as the one in my repos. It says what the numbered folders are for, that the reference folder holds runbooks for each system I run and that each has a dated maintenance log at the bottom, and that no note ever gets a password or a key in it. That last one was already my rule. Writing it down for the agent made me check, and I found one old note with a Wi-Fi password in it, which is now in the password manager where it belongs.
The vault has no git, which I said in 2022 I kept meaning to fix and still haven’t, so a bad edit is gone. That decided what the agent can do. It can read anything it’s allowed to read, and it can create new notes in the inbox folder, and edits to existing notes need my approval, every time. I haven’t given it a shell in there at all. Before a session where I expect edits I make a zip of the vault, which is low-tech and has been needed once.
And there’s one folder it can’t read. My meeting notes from work live in the vault too, or did. They have colleagues’ names in them, and sometimes customers’, and the subscription I’m using is a personal one, not the company account that went through vendor review. So they’re out. I started with a deny rule in the settings, then moved the work notes into a separate vault altogether, because a deny rule is a promise the tool makes, and I’d rather the files just weren’t there.
What it’s good at
Finding things, obviously. The NAS question, “what did I think of that book about staff engineers”, “what did I end up doing about C# in Neovim”. The answers come with the file names, which matters, because I check.
Keeping the runbooks current is the use I didn’t expect. After I change something, I tell it what I did, and it adds a dated line to the right note’s maintenance log and fixes any command in the note that’s now wrong. I approve the edit. Doing that by hand was the step I skipped most often, and the runbooks were drifting.
It’s also decent at connections. I asked it what I’d written about code review over the years, and it found notes from five different places, two of which I’d have missed, and pointed out that I’d said the opposite about PR size limits in 2019 and 2023. It was right.
The time it was wrong
I asked when I’d last replaced the SSH key on the Linux dev box. It gave me a confident date from a note about generating a new key, and it was the wrong machine. That note was about the Windows laptop. The real answer was a line in the dev box’s maintenance log that said “new keypair, old one removed from GitHub”, with no “SSH” anywhere in it, and it hadn’t opened that note. When I asked it to look again it found it straight away.
That’s the failure I’d expect from grep plus confidence, and it’s the same one people have. The fix on my side is to ask “which notes did you read?” whenever an answer matters, which I now do by default. It’d be better if it told me what it hadn’t looked at, and I haven’t found a way to make it do that reliably yet.