juggler-ai/juggler
The Juggler Code Agent
What it solves
Juggler addresses the "doom-scroll" nature of traditional AI coding agents, where conversations are linear transcripts that are difficult to navigate, edit, or resume. It provides a visual workbench for developers who want more hands-on control over how an LLM interacts with their codebase, moving away from simple chat interfaces toward a structured, inspectable environment.
How it works
Juggler operates as a client-server architecture where a Go-based backend manages a stateful session document (using Yjs) and a frontend provides a graphical user interface. Instead of a linear chat, sessions are organized as a tree of branching threads. The UI utilizes Miller columns (similar to macOS Finder) to allow users to drill down into tool calls, item properties, and nested sub-threads. The system is highly modular, using JavaScript extensions to define context items, LLM loop strategies, and slash commands.
Who it’s for
It is designed for developers who prefer a visual, non-linear way to manage AI coding sessions and those who need their agent's state (including pending approvals) to persist across app restarts or across different devices (desktop and browser).
Highlights
- Tree-based Conversations: Supports branching threads and sub-threads rather than a linear history, allowing for easier backtracking and comparison.
- Persistent State: Sessions are stored as documents on disk, meaning the agent's exact state—including waiting for user approval—is preserved after closing the app.
- Miller Column UI: A Finder-style navigation system for fast inspection of tool calls, raw context, and thread structures.
- Extensible Architecture: Context items, loop strategies, and commands are all JavaScript plugins that can be inspected or replaced.
- Multi-Client Sync: A single server session can be accessed simultaneously via a native desktop app and multiple browser tabs.