Pavilio: My Mission Control for Parallel AI Coding Agents

Published on 09.05.2026

Pavilio: My Mission Control for Parallel AI Coding Agents

VS Code still has its place in my workflow, but it stopped being the central tool. Day to day, I work with Claude Code and OpenCode CLI, which means I spend most of my time in the terminal. It's often faster and more comfortable for me to review generated changes directly in Neovim, without ever leaving the console.

Like a lot of folks in this space, I've built up my own workflow, and I've published it as open source. I extend it gradually, one brick at a time, in the gaps between tasks, and lately even on weekends, because it has turned into a deeply addictive pet project. The moment I had the idea to build an admin panel for browsing the markdown files my agents generate, work on Pavilio, the name I gave the project, really started to pick up steam.

The problem: too many agents to track

Once you reach the point where you have four or more terminal sessions open, each pushing an agent toward its next task, it gets easy to lose track of where things actually stand, and which agent is waiting on a decision from you. Switching between tabs starts to feel cognitively expensive. That's exactly the problem I wanted Pavilio to solve.

So I moved my terminals into the browser, and using one neat trick I can now see at a glance which agent in which terminal needs my attention. Tools like Claude Code and OpenCode show some kind of spinner while the agent is working; the same is true for tasks like a build, the terminal output keeps changing while it runs. That makes it easy to detect activity and track each terminal's state.

I settled on three states:

  • Busy - a red pulsinglight, signaling that the terminal is doing something (usually agent work).
  • Done - green, meaning the red light was on for a while and has since stopped, but I haven't focused that terminal yet. My attention is now required, either to answer the agent's question or to review the output.
  • Idle - nothing is happening and the terminal has already been viewed.

Pavilio panel showing the Motyl project with multiple terminal tabs (motyl-1, motyl-2, motyl-dev-1) and the active motyl-dev-1 terminal displaying notes about a newsletter-ai branch and an .mcp.json restore

This system, simple as it is, turned out to be remarkably effective and dramatically improved my control over the workflow. On top of that, I can launch terminals grouped by project, and I added an aggregated status at the project level: the project's light is red if at least one agent is busy, and turns green if no agent is currently working but at least one is waiting for me. With one glance I can see the state of every running agent and tell which one needs me.

Project organization

Pavilio's Memo tab showing a markdown note (Prisma migrations on Vercel) inside the Motyl project, with project tree on the left and tab navigation across the top

Folders with progress notes, written by the agents and by me from meetings, are grouped per project, because alongside my work projects I also have personal ones like motyl.dev and Pavilio itself. A project can be tied to one or more repositories; they're simply listed in project.md, and the panel can spawn a terminal directly inside a repo's directory. The workflow itself centers on starting Claude Code or OpenCode in the shared project folder and beginning each session with /resume-session, e.g.:

/resume-session pavilio

At the end of a session, when I know I'm stepping away from the computer for a while, I run an end-session command, which writes the current context to a .md file. That makes resuming smooth on the next run and keeps a history of completed work. That history has been useful, on work projects you sometimes have to report progress, and I can also derive my own statistics from it later.

A living system, tweaked daily

Odds are, by the time you're reading this, parts of the system have already changed, because I tweak it constantly while I'm using it. The moment something feels uncomfortable or I get an idea for an improvement, I just put it in.

For example, OpenCode doesn't have a built-in "read aloud" feature, which I rely on heavily in Microsoft Edge (you can't easily select text inside the terminal). So I added a "View" feature on Ctrl+U (Cmd+U on macOS) that opens a modal with a copy of the terminal text rendered as plain HTML in the browser, where the page can read it the normal way, including text-to-speech.

Working this way is much more efficient for me. With SuperWhisper I can dictate prompts, which is far faster than typing. And when the agent replies with longer chunks of text I want to actually read, I can have it read back to me in a natural TTS voice with the feature above.

By design, I don't work with agents in pure "vibe coding" mode, it's more of an engineering process. I start with a brainstorming session and pick the best solution to the problem at hand, using the LLM as a discussion partner. Two skills I lean on heavily here are /brainstorm from Superpowers and Matt Pocock's grill-with-docs.

Code review without leaving the panel

Pavilio's Repos tab for the ai-server-agent project showing a branch with uncommitted changes, a file tree of changed files, and a syntax-highlighted diff for Settings.tsx with a commit message field above

In any agent-driven coding session, you eventually hit the moment when the result needs your code review. Pavilio handles this on its Repos tab. I can see all branches and uncommitted changes, and I can view a diff for every changed file the same way you'd see it on GitLab or GitHub. I recently added support for git worktrees, because I sometimes run agents in parallel against different worktrees and want a clean view of the changes per tree.

Pavilio's Cmd+O modal floating over the panel, showing the ai-server-agent terminal in auto mode with an OpenCode session answering a question about running OpenCode agents in cron

When I spot something in a file that needs a fix or an explanation from the agent, I can hit Cmd+O to open a modal pinned to the most recently used terminal, where Claude Code or OpenCode is running, and ask the question or send a follow-up prompt about that exact piece of code. That tight feedback loop makes corrections fast.

Remote access from anywhere

The last feature I want to mention is remote access to the panel, whether from a mobile device or another PC. It's set up over Tailscale VPN. The panel displays a QR code; scanning it on your phone opens the panel directly with a hash that acts as the auth key (which I can rotate easily). The browser stores the key, so from then on it's no longer part of the URL.

Pavilio's Mobile Access dialog showing a paired-and-reachable status with a QR code (blurred) and Tailscale pairing instructions (QR code blurred for security ;) )

I also added a LAN access option that works similarly, but it isn't encrypted yet, I just haven't had a strong need for it, since I rarely use it on LAN. Still, it has come in handy when I want to work on two heavy tasks in parallel, say, an agent driving a browser plus a memory-hungry project, so I run the second one on the desktop or a beefy laptop next to me and access its panel over the local network. To keep me from confusing the two panels, a remote session shows a clear pill with the URL at the top of the screen. The project also works well on mobile, the interface is fully responsive, with a layout adapted to the device.

Open source, built for you to fork

These aren't all the things the system can do, the rest is in the documentation, which I try to keep up to date. This isn't a commercial tool. I have no plans to monetize it; I share it as open source for everyone. We live in an age where each of us can build our own tailored tools, and that's the beauty of this moment: we can have software cut to fit, instead of mass-produced products that never match a tailored suit.

If you want to try my workflow, clone the project, fork it, have fun.

Tame Multi-Agent Chaos

Get more battle-tested workflows for running parallel AI coding agents without losing your mind.