Juggler: 一款開源 GUI 編碼代理 (Coding Agent)
Juggler: 一款開源 GUI 編碼代理 (Coding Agent)
Juggler 是一款開源的 AI 編碼代理,專為希望對 LLM 與其程式碼庫互動方式擁有更多手動控制權的開發者而設計。與依賴線性聊天紀錄的傳統 AI 編碼工具不同,Juggler 引入了一個視覺化工作台,將對話階段 (session) 視為可編輯的樹狀結構,允許開發者進行分支 (branch)、回溯 (backtrack) 並即時檢查工具呼叫 (tool calls)。
視覺化工作台與分支階段 (Branching Sessions)
Juggler 使用基於樹狀結構的階段結構取代了標準 AI 聊天介面的「無盡捲動」(doom-scroll)。這讓使用者可以建立子執行緒 (sub-threads)、深入研究特定任務,並在不丟失原始上下文 (context) 的情況下比較不同的實作路徑。
為了便於導航,UI 使用了 Miller columns (類似於 macOS Finder 的欄位檢視),根階段位於左側,選定的項目會向右展開成屬性與子項目。這種設計確保了工具呼叫、核准與原始上下文保持可見且易於存取,而不會被埋藏在可摺疊的聊天氣泡中。
基於插件的架構
Juggler 被建構為一個編排平台,幾乎每個組件都是一個 JavaScript 擴充功能。這種擴充性允許開發者自定義代理的行為與 UI:
- Context Items: 每個項目類型 (例如
read-file,replace-text,bash) 都定義了其與 LLM 的互動方式以及在 UI 中的視覺呈現。 - Strategies: 高階 LLM 迴圈 (例如
plan或research) 是以插件形式實作的。 - Commands: 斜線指令 (例如
/clear,/compact) 是用來操作階段文件的插件。
多客戶端架構與部署
Juggler 採用客戶端-伺服器模型,允許靈活的部署。後端使用 Go 編寫,並使用 Wails 進行視窗化處理,避免使用 Electron 以保持應用程式體積精簡 (約 40 MB)。階段文件使用 Yjs (一種 CRDT (Conflict-free Replicated Data Type) 框架) 進行同步,確保了穩定性與協作能力。
使用者可以透過以下幾種配置運行 Juggler:
- Native Desktop App: 為 macOS, Windows, 與 Linux 提供的打包應用程式。
- Headless Server: 一個命令列伺服器,可以在程式碼所在的遠端開發機或伺服器集群中運行,並由瀏覽器或桌面應用程式作為客戶端。
- Multi-Client Access: 多個客戶端 (瀏覽器分頁或不同機器) 可以同時連接到同一個伺服服器階段。
模型支持與整合
Juggler 可連接到廣泛的 LLM 提供商,包括 Claude Code (透過 CLI 或 API), OpenAI, Gemini, Ollama, OpenRouter, Z.AI, 與 DeepSeek。
社群洞察與技術討論
來自 Hacker News 的社群回饋強調了關於該代理的 UX 與架構方法的幾個關鍵點:
"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, 我真的很討厭被困在終端機裡使用這種 AI 工具。"
技術討論集中在以下幾點:
- UX Paradigm: 使用者注意到「原生分支」對話的價值,將其視為從線性聊天介面演進的必要過程。
- C++ vs. JS: 有些使用者對 UI 使用 JavaScript 的選擇提出疑問,建議使用原生 C++ 或 SwiftUI 以提升效能,而其他人則稱讚使用 Wails 而非 Electron。
- Stability: 使用 CRDT (Yjs) 進行階段管理被認為是保持穩定性的秘訣,將框架與 UI 分隔開來。
- Current Limitations: 部分使用者回報了 DeepSeek 的
reasoning_content在思考模式下的問題,並要求更好的程式碼邊框 (code fences) 支持。
授權方式
Juggler 的應用程式程式碼採用 GNU Affero General Public License v3.0 (AGPLv3) 授權,而擴充 SDK 與打包的擴充功能則採用 Apache-2.0 授權,允許開發者建立不需承擔 copyleft 義務的閉源擴充功能。