Juggler is a desktop workbench for AI coding agents. Tool calls, approvals, thread structure and raw context are laid out in Finder-style columns. Conversations branch into sub-threads. Every tool is a JavaScript plugin. Free, open-source, one Go binary.
Hello PH
I've been a C++ developer for 30+ years, and the best things I've built all started the same way: I got annoyed at a tool I had to use and wrote my own. That's how I ended up creating a DAW (Tracktion), a C++ framework (JUCE) and a DSP language (Cmajor).
I had the same moment with AI agents. It's pretty clear the rest of my coding career will involve staring at some kind of code-agent tool all day, and I couldn't get comfortable with any of them. Editing big multi-line chunks of text and absorbing a firehose of information — in a terminal? So I had a stab at one that feels right to me.
What makes it different:
- You can see everything. Tool calls, approvals, thread structure, item properties, even the raw context JSON — all laid out in a Finder-style column view. It's all part of the document, and all of it is editable.
- Conversations are trees, not log files. Any point can branch into a sub-thread, recursively. Navigate, drill down, backtrack, duplicate, undo, re-open. No more scrolling back through 400 messages looking for where it went wrong.
- Sessions survive quits, crashes and reconnects. A session lives in a database, not in memory. If the agent was paused mid-run waiting for you to approve its next step, it'll still be waiting after a relaunch, even if you connect from a different device.
- Local, remote, or both at once. One session, any number of live client views. Run it headless on the machine where your code lives and attach from the desktop app on your laptop and a browser on your phone, simultaneously.
- Plugins all the way down. Every tool the model can call — including read, write and bash — is a JavaScript extension you can inspect, fork or replace. So are the loop strategies, slash commands and file viewers. MCP servers and skills plug into the same document. juggler ext init scaffolds a working one in a command.
- No node, no Electron. A small, dependency-free Go binary. Bring the LLM subscription you already pay for (Claude Code, Codex, Copilot, Gemini, Z.ai, Ollama, OpenRouter, DeepSeek…) or your own API keys.
It's free and open-source — Apache-2.0 for the extension SDK, AGPLv3 for the app. No signup. Download and run.
This isn't a huge team at a trillion-dollar AI company, it's a one-man side-project. But it's progressing at a great pace, and I'd genuinely love to hear what people think. Especially the nitpicks. Come say hello on the Discord.
Juggler