Patterm ∙ Programming ∙ Software ∙ AI

I built an agent harness

The age of personal software is here!

Patterm runs the coding agents you already have installed (Claude Code, Codex, OpenCode) in one place that lets them talk to each other and you work from anywhere. It’s out now for Linux and Windows. Right now the Linux version is in beta and the Windows version is in even more beta.

I didn’t set out to make this software. I started by building a really shitty terminal multiplexer that would let me use some of the agent co-ordination features that are present in Aaron Francis’ Solo. It’s clear Aaron had spent a lot of time working with agents and he came up with a really great way of letting them co-ordinate.

Everything since has followed the same pattern: I hit a wall in my own work, and Patterm grew a feature to get past it.

Ask Claude

May 2026: the original Go TUI, inspired by Solo.

Outgrowing the Terminal

The terminal was great until I wanted more than terminals could offer. The agents could talk to each other and I could switch between them nicely. Then I started adding more features. Scratchpads, timers, todos. There are absolutely ways to make these nice in the terminal but I didn’t want to spend the time tweaking it to make it as good as I wanted it to be.

So I moved to Electron. I chose Electron because I wanted the consistent Chromium that ships with it rather than relying on whatever the user has on their computer. It’s also a very stable framework with good documentation and doesn’t have to be slow.

I brought in the Alacritty core to render the harnesses (the agent CLIs themselves: Claude Code, Codex and OpenCode), built a custom WebGPU renderer and things were finally starting to take shape.

At this point, the app started to look very different to Solo. I was starting to shape it to my workflow.

TUI, May

The glue

Agents in separate terminals can’t see each other, so the backbone of Patterm is an MCP server that every agent connects to. Through it, agents can message each other (even across harnesses, so Claude Code can hand work to Codex), set timers, share scratchpads and todos, and spawn other agents to work for them.

One agent

Worktree management and diffs came next, followed by getting Patterm to index all of my conversation history so that I could search through it later. I started with a task structure, allowing you to assign agents to tasks and have them work solely in that area. That was later removed, I found it was basically just a worse version of a conversation with some todos.

Tasks, June–September

Talking to agents from my phone

I started off with solely TUI rendering, which was great until I needed to talk to my agents from my phone. It was no good for any kind of real work while on the go and typing into a terminal with a phone keyboard is a pain in the arse. So I added integrations with Codex’s app server, OpenCode 2’s API and Claude Code’s stream-JSON mode. Anthropic could stop letting Max subscriptions be used this way at any point, which is partly why I went TUI-only in the first place. If that happens, Claude Code still works in TUI mode.

You can now fully read text conversations on your phone, other machines, wherever. It enables rich mentions, so you can hand off to an agent preset for review just by saying Get Smartypants to review this or talk to a running agent (here, the one working on ticket PAT-423) by saying co-ordinate the rollout with PAT-423. It’s so good that I’m considering taking TUI mode out altogether, or at least burying it in the settings, saving it for a rainy day.

TUI on a phone

Remote Access

I went on holiday, but still had to work. I only had my laptop which has a tendency to overheat and/or crash when running the tests for my day job. So I rented a Hetzner machine from their server auction and wanted Patterm on there. Patterm now has fully remote access over Tailscale Serve as a first-class option. This involved decoupling the UI from Electron and making it accessible over a webserver. Light work.

Laptop only

The Assistant

I had a busy day. I needed to do some household chores while still getting work done. So I had a thought. “What if I integrated Codex’s voice mode into the application as a meta-assistant? I could talk to that agent and it could interact with my main worker threads.”

So I did it.

You can type at it too, and this has ended up being really useful as a proactive relay between agents. Sometimes the assistant will pick up on overlapping tasks being performed by two agents and actively facilitate their co-ordination, making sure they don’t step on each other’s toes.

Listening

Scheduled Work

Every Monday, Wednesday and Friday I have a meeting with my team. A lot of my work is backend, so it isn’t particularly visual. I added Routines to the application to allow me to kick off a scheduled task 30 minutes before the meeting asking Claude to make a slide deck for the last couple of days’ work.

New routine

Multiple Machines

I started working on a little game as a side project. I was having some performance issues and wanted to troubleshoot it, the problem is my Hetzner box doesn’t have a GPU. So now Patterm can connect to other instances and agents can collaborate across machines out of the box. This still relies on a direct network connection, but eventually I may come out with Patterm Cloud, an end-to-end encrypted way for your agents to communicate without any hassle.

No GPU here

Try it

Patterm is free and open source under the MIT licence. Grab it for Linux or Windows from patterm.com, install and sign into whichever agent CLIs you already use, add a project folder, and launch an agent.

It’s a beta, so expect rough edges. Agents don’t resume on their own after a reboot yet, for one. Bugs and ideas go in GitHub issues, or find me on X at @indexCS. I use it every day and wouldn’t want to work without it now, so I’d love to know what you make of it.