← All posts
Build log · April 2026

I gave Claude a memory. Here's how.

The thing that annoyed me most about Claude, for months, was that it forgot me every time.

New chat, new Claude. I'd spend the first five minutes every session re-explaining the same context, what I'm working on, what tools I use, that I'm based in New Zealand, that I code mostly in Python, that I did legs yesterday and my hamstrings are wrecked. You know, the things a smart mate would just know about me.

So I built one. A personal wiki Claude can read. I called it HIKI, because it's a wiki and my surname is Hitchman. It's not clever. It's just mine.

The shape of it

Here's the whole thing as a diagram in words:

Total lines of code: a lot less than you'd think.

Why markdown, not a database

The whole thing runs on flat markdown files. Not Postgres. Not a vector database. Not even SQLite.

This felt wrong at first. Surely a real engineer would use a real database. But then I asked myself what I actually needed, and the answer was "a file I can hand to an LLM". Which is what a markdown file is. The LLM does the searching. The LLM does the filtering. The file system just has to be a file system.

If the model can read the whole file in context, you don't need a fancy retrieval layer. You just need a file.

This is a theme for me. Most "AI infrastructure" is solving problems you don't have yet. Start with a file.

The Mac mini, embarrassingly

There is a Mac mini on a shelf in my living room. It's the M2 base model. It hums quietly to itself. It hosts HIKI and will eventually host other things too. I looked at deploying to a cloud VM and the math didn't work out, my Mac mini has been paid off for years, uses almost no electricity, and doesn't care about my traffic volume (which is one user, me).

Is it "production-grade"? No. Do I care? Also no. This is a personal project. Personal projects are allowed to run on a Mac mini in your lounge.

The Cloudflare Tunnel trick

The bit I was most worried about was exposing the Mac mini to the internet. I don't want to open ports on my router. I don't want a static IP. I don't want to think about NAT.

Cloudflare Tunnel solves this. You install cloudflared on the Mac. It makes an outbound connection to Cloudflare. Cloudflare then routes inbound requests to your tunnel, which forwards them to your local Python server. From the internet's perspective, there's a hostname, hiki.matthitchman.com, that happens to live on a shelf in my house.

No port forwarding. No firewall config. No VPN. It just works. This was the moment I realised Cloudflare is secretly the coolest company in computing.

OAuth, which I didn't want to write

The tunnel made the server reachable, but I didn't want it readable by anyone on the internet who typed the URL. The Claude MCP spec wants OAuth. I do not want to write OAuth.

So I didn't. I put a Cloudflare Worker in front of the tunnel that handles OAuth using a small open-source library called MCPVault. The Worker checks the token, then forwards to the tunnel. That's the whole story. The Worker lives at mcp.matthitchman.com. It's maybe 100 lines of TypeScript.

What broke

Plenty.

None of these were hard. All of them took longer than I wanted. This is what "shipping" really looks like, 80% of it is boring plumbing that you didn't know you'd need to care about.

Does it actually work?

Yes. A typical day:

It's embarrassingly useful. It's also the most fun side project I've had in years. I keep thinking of new record types to add. Reading lists. People I meet. Books. Hot takes.

Should you build one?

Probably. If you:

I'll write up the how-to in more detail in a future post, including the exact Cloudflare Tunnel setup and the MCPVault Worker config. For now, this is the shape of the thing.

Questions welcome, matt@matthitchman.com.

Matt