Home

Update for the week ending on Friday, Jan 9, 2026

mtlynch.io

Refactoring English

Popularity Contest

LLM Sandbox

I created a sandboxing solution for LLM agents.

I’ve mostly been using Cline, and I like that it’s transparent in what the agent does and gives you fine-grain control over approvals. But a friend showed me his more vibe-code style of just firing off a task and letting the agent do it unsupervised, and it looked better than my workflow.

I thought I’d try it for a few narrow use cases where Cline wasn’t a fit, but I liked it so much that I’m migrating away from Cline.

My initial sandbox was just me provisioning a new Ubuntu VM on my system and installing the LLM as an unprivileged user. But it got tedious copying files back and forth because I didn’t want to expose my SSH keys / agent inside the VM. I decided to just risk running my SSH agent as a different user, but it was still a huge hassle because my user and the LLM user would keep clashing over file permissions in the repo, especially the .git repo, even though they were in the same user group.

Next, I tried creating a NixOS-managed VM with an auto-provisioned user, but it quickly grew too complicated.

The thing I made today that I really like is a solution around rootless podman containers (and I’ve never used podman before, just Docker). But I like it a lot. I can run sb-llm and it:

  1. Automatically spins up the podman container and mounts my local directory
  2. Errors out if the directory contains secrets (which in my case is always .env files)
  3. Mounts my LLM agent settings from my host’s home directory (all the container agents share a single home directory with the agent’s settings)
  4. Loads the NixOS dev shell if one is available in a flake.nix
  5. Loads the LLM agent

I can also run sb-llm bash to start a bash shell to explore and verify the sandbox works.

I ran into issues because git worktrees hardcode my local filesystem paths. I started down a path of trying to mirror part of my local filesystem structure inside the container, but I realized it was easier to just not support git worktrees and require the client (me) to create independent clones.

MeshCore

Howdy, Neighbor

Howdy, Neighbor is an open-source MeshCore client I created because there weren’t any aside from the CLI.

meshcore-protocol

MeshCore protocol is an idea I had that came out of working on Howdy, Neighbor. I realized so many clients are reimplementing the protocol, often with bugs, so it would be nice to have a single, well-tested implementation with language bindings for C, Python, JavaScript, etc.

Little Moments

Little Moments is an open-source web app I’m working on to replace the current family photo sharing app (TinyBeans) I used (which I strongly dislike).

ScreenJournal

ScreenJournal is basically Goodreads, but for TV and movies. Or letterboxd, but focused on small communities.

PicoShare

PicoShare is a minimalist web-based file sharing tool I’m working on. I’m often frustrated that I can’t just send someone a link directly to a file because every file-sharing service tries to re-encode images/video or wrap their own viewer around other files, so I’m making a simple self-hostable tool that lets you upload files and share them with other people.

Michael’s weekly updates

Misc