Juggler: An Open-Source GUI Coding Agent

Juggler: An Open-Source GUI Coding Agent

Juggler is an open-source AI coding agent designed for developers who want more hands-on control over how LLMs interact with their codebase. Unlike traditional AI coding tools that rely on a linear chat transcript, Juggler introduces a visual workbench where the session is treated as an editable tree, allowing developers to branch, backtrack, and inspect tool calls in real-time.

Visual Workbench and Branching Sessions

Juggler replaces the "doom-scroll" of standard AI chat interfaces with a tree-based session structure. This allows users to create sub-threads, drill down into specific tasks, and compare different implementation paths without losing the original context.

To facilitate navigation, the UI utilizes Miller columns (similar to the macOS Finder column view), where the root session is on the left and selected items expand into properties and children to the right. This design ensures that tool calls, approvals, and raw context remain visible and accessible rather than being buried in collapsible chat bubbles.

Plugin-Based Architecture

Juggler is built as a platform for orchestration, where almost every component is a JavaScript extension. This extensibility allows developers to customize the agent's behavior and UI:

  • Context Items: Every item type (e.g., read-file, replace-text, bash) defines both its interaction with the LLM and its visual representation in the UI.
  • Strategies: High-level LLM loops, such as plan or research, are implemented as plugins.
  • Commands: Slash commands (e.g., /clear, /compact) are plugins that manipulate the session document.

Multi-Client Architecture and Deployment

Juggler employs a client-server model that allows for flexible deployment. The backend is written in Go and uses Wails for windowing, avoiding Electron to keep the application footprint small (approximately 40 MB). Session documents are synchronized using Yjs, a CRDT (Conflict-free Replicated Data Type) framework, which ensures stability and collaborative capabilities.

Users can run Juggler in several configurations:

  • Native Desktop App: A bundled application for macOS, Windows, and Linux.
  • Headless Server: A command-line server that can be run on a remote dev box or server farm where the code resides, with the browser or desktop app acting as a client.
  • Multi-Client Access: Multiple clients (browser tabs or different machines) can attach to the same server session simultaneously.

Model Support and Integration

Juggler connects to a wide range of LLM providers, including Claude Code (via CLI or API), OpenAI, Gemini, Ollama, OpenRouter, Z.AI, and DeepSeek.

Community Insights and Technical Discussion

Community feedback from Hacker News highlights several key points regarding the agent's approach to UX and architecture:

"I've watched amazing communities spring up around open agents like Opencode and Pi. People are getting into those because of their extensibility and being model-independant. They're great projects, but like many people I know, I really hate being stuck in the terminal for this AI tool."

Technical discussions centered on the following:

  • UX Paradigm: Users noted the value of "natively branching" conversations, comparing it as a necessary evolution from the linear chat interface.
  • C++ vs. JS: Some users questioned the choice of JavaScript for the UI, suggesting native C++ or SwiftUI for performance, while others praised the use of Wails over Electron.
  • Stability: The use of a CRDT (Yjs) for session management was cited as a secret to stability, separating the harness from the UI.
  • Current Limitations: Some users reported issues with DeepSeek's reasoning_content in thinking mode and requested better support for code fences.

Licensing

Juggler's application code is licensed under the GNU Affero General Public License v3.0 (AGPLv3), while the extension SDK and bundled extensions are licensed under Apache-2.0, allowing for the creation of closed-source extensions without copyleft obligations.

Sources