About

I’m lowcache. I build stateless Linux systems and the tooling that has to be trusted to run on top of them.

The short version: my workstation has no persistent root filesystem. It is a tmpfs. Every boot starts from nothing, and anything that survives a reboot survives because it was explicitly declared. That constraint turned out to be the most useful design tool I’ve had in years — it makes state visible, and visible state is state you can reason about. The architecture walkthrough is the long version.

What this site is

Field notes. Not tutorials, not hot takes. Each post is a problem that took long enough to solve that writing it down was cheaper than solving it twice.

They tend to fall into two clusters:

Impermanence. Living with a tmpfs root for a year, what breaks and what stops breaking. The bind-mount symlink trap that kills nixos-rebuild with a message that doesn’t explain itself. Trying to persist nix-env and finding out you can’t persist your way out of a symlink.

Agents with real access. MCP servers run with your full user permissions by default — that’s the whole problem, and the afternoon I noticed is the version with the adrenaline in it. On the constructive side: giving a coding agent a nervous system — persistent memory, scoped permissions, isolated tool servers — so the useful part survives the session without the dangerous part surviving anything.

Things I’ve built

  • volnixos — the NixOS configuration this site is written from. Ephemeral root, declarative persistence, MicroVM guests, secrets via sops-nix, secure boot via lanzaboote. The wiki is its reference documentation.
  • mcp-box — container isolation for MCP servers, so a tool with a bug or a bad prompt can’t reach your SSH keys and cloud credentials.
  • memd — project-scoped memory for coding agents. Solves the amnesia problem without handing the agent a write channel into its own history.
  • volinit — a statically compiled Nim system-identity banner. Not important. Under 5ms, which was the point.

How I work

Evidence over assertion. If I claim something breaks, there’s a reproduction. If I claim something is faster, there’s a number and a method. Where I’m uncertain I say so, and where I was wrong earlier in a post I correct it in place rather than quietly editing history.

That’s also how I work with clients: scoped, reviewable, with a definition of “done” agreed before anything starts. Details on the Work With Me page.

Elsewhere

If you’re running something in this territory and it’s fighting you, tell me what you’re running and what’s in the way.