Better Agent Terminal 研究筆記¶
資料來源¶
| 項目 | 連結 |
|---|---|
| GitHub repo | https://github.com/tony1223/better-agent-terminal |
| Releases | https://github.com/tony1223/better-agent-terminal/releases/latest |
| Homebrew Tap | tonyq-org/tap/better-agent-terminal |
| 作者 | tony1223 |
專案概述¶
Better Agent Terminal(BAT) 是一個跨平台(Windows / macOS / Linux)的 Electron 桌面應用,把「多專案終端機聚合器」和「內建 Claude Code Agent 面板」融合在同一個視窗裡。作者把終端機使用者平常同時開 iTerm、VSCode、Claude Code CLI、GitHub 網頁的工作流收攏成一個 App,每個 workspace 綁定一個專案目錄,內建 xterm.js 終端、檔案瀏覽器、Git 檢視器、Snippet 管理、PR/Issue 瀏覽。
專案 2025-12-17 建立,在 2026-04-22 當天即有 339 stars、83 forks、版本已到 v2.1.41,更新頻率極高(README 記錄 topics 有 ai-agent、claude-code、electron、multi-terminal)。定位介於「iTerm 替代品」和「Claude Code 宿主」之間,核心差異點是把 Claude Code SDK 直接嵌進 App,不再需要另開 CLI 終端跑 agent。
適合場景:同時維護多個專案、重度使用 Claude Code、希望把 agent cost / cache / usage 都看得見、或想要用手機遠端遙控桌面 Claude Code 的開發者。
核心功能¶
三大支柱¶
┌─────────────────────────────────────────────────────────┐
│ Better Agent Terminal │
├───────────────┬─────────────────┬───────────────────────┤
│ Workspace │ Claude Agent │ Remote Access │
│ Management │ Panel │ (WebSocket) │
│ │ │ │
│ 多專案切換 │ 內嵌 Claude SDK │ Host/Client 模式 │
│ Groups / Tags │ Cache 成本追蹤 │ QR Code 配對 │
│ Profiles │ Session Resume │ Tailscale 建議 │
│ 分離視窗 │ Subagent 追蹤 │ Mobile 可連線 │
└───────────────┴─────────────────┴───────────────────────┘
Workspace Management¶
| 功能 | 說明 |
|---|---|
| Multi-Workspace | 每個 workspace 綁一個資料夾,側欄拖拉排序 |
| Groups | 把 workspaces 分組,配篩選 dropdown |
| Profiles | 儲存多組設定(本地或遠端),快速切換 |
| Detachable Windows | 把 workspace 分離成獨立視窗,重啟自動 reattach |
| Per-Workspace Env Vars | 每個 workspace 獨立環境變數 |
| Agent Presets | 預設終端角色:Claude Code / Claude Code (worktree) / Codex Agent / plain terminal |
Claude Agent 面板(專案最大賣點)¶
- 內嵌 SDK:透過
@anthropic-ai/claude-agent-sdk在 App 內直接跑 agent,不需另開終端 - 四種權限模式:Default(逐一批准)、Accept Edits(自動通過編輯)、Plan mode(先提計畫再執行)、Bypass(全自動)
- Session Resume / Fork / Rest/Wake:對話可持久化、分叉,或暫停釋放資源
- Subagent 追蹤:顯示子任務進度、已花時間、stall detection
- Auto-compact:token 超過門檻自動壓縮 context
- Git worktree 隔離:透過
worktree-manager.ts把 agent 跑在 worktree 裡,避免動到主工作區
Statusline(15 個可配置項目)¶
橫跨 left / center / right 三區,可拖拉排序、上色、開關:
| Item | 資訊 |
|---|---|
| Session ID | SDK session 前 8 碼(點擊 resume) |
| Git Branch | 當前 branch |
| Tokens / Turns / Duration / Context % | Session 即時狀態 |
| Cost | 本次 session 累計美金成本 |
| 5h / 7d Usage & Reset | Anthropic rate limit 視覺化倒數 |
| Cache Eff. | Cache read 效率%(點擊看每輪 cost breakdown) |
| Max Output | 當前模型 max output tokens |
Cache 成本意識(其他 Claude Code host 少見的功能)¶
- Cache history:每一輪對話的 cache read/write 明細,依 Opus / Sonnet / Haiku 分別計價
- Cache TTL countdown:右上角浮動徽章顯示 5 分鐘 / 1 小時 cache 剩餘時間,每 30 秒更新
- Cache expiry warning:送出前若偵測到 >150k cached tokens 已過期(>1 小時),彈窗防止全價重送
/auto-continue Slash Command¶
解決 Claude Code 常見「agent 卡在中途、或等你說『繼續』」的痛點:
/auto-continue # 預設 max 3,prompt="繼續"
/auto-continue 5 # max 5,prompt="繼續"
/auto-continue 10 keep going # max 10,自訂 prompt
/ac off # 關閉
狀態存在 host 端,所以遠端 client / 其他視窗看到同一個 counter。只在上一輪 subtype=success 時才觸發,遇到 error / abort / rate-limit 會中斷。每次 auto-send 會在訊息列標 [auto N/max],避免誤以為是你自己打的。
Remote Access(實驗功能)¶
BAT 內建 WebSocket server(預設 port 9876):
- Host 開啟 server,產生 32 字元 hex Connection Token
- Client(另一台 BAT 或手機)用 Remote Profile 或掃 QR Code 配對
- 連上後 client 可操作 host 的所有終端、Claude Agent session、workspaces
- 跨網路情境建議搭配 Tailscale 免費方案做 peer-to-peer VPN
其他值得一提¶
- Worker Panel(Procfile):在單一 tab 內跑多個 process,合併 log、可單獨 start/stop/restart,靈感來自 Overmind
- Ctrl+P File Picker:fuzzy-search 專案檔案,直接附加到 agent context
- Snippet Manager:SQLite-backed,支援分類、favorites、搜尋
- Markdown Preview:獨立側欄 + live file watching
- Multi-account Switching:
/switch在多個 Claude 帳號間切換,對付 rate limit - i18n:英文、繁中、簡中
技術架構¶
Electron Main (Node.js) Renderer (React 18 + TypeScript)
├─ main.ts ├─ App.tsx
├─ pty-manager.ts ├─ ClaudeAgentPanel.tsx
├─ claude-agent-manager.ts ←→ ├─ TerminalPanel.tsx (xterm.js)
├─ codex-agent-manager.ts ├─ Sidebar / WorkspaceView
├─ worktree-manager.ts ├─ GitPanel / GitHubPanel
├─ account-manager.ts ├─ FileTree / MarkdownPreview
├─ snippet-db.ts (SQLite) ├─ SnippetPanel / WorkerPanel
└─ remote/ └─ stores/ (pub-sub)
├─ remote-server.ts (ws)
├─ remote-client.ts
└─ tunnel-manager.ts (QR / Tailscale)
Tech Stack
| 層 | 技術 |
|---|---|
| Framework | Electron 28.3.3 |
| Frontend | React 18 + TypeScript + i18next |
| Terminal | xterm.js + node-pty |
| AI | @anthropic-ai/claude-agent-sdk |
| Storage | better-sqlite3(snippets / session) |
| Remote | ws + qrcode |
| Build | Vite 5 + electron-builder |
快速開始¶
# macOS Homebrew
brew install --cask tonyq-org/tap/better-agent-terminal
# 一鍵安裝腳本(macOS / Linux / Windows Git Bash)
curl -fsSL https://raw.githubusercontent.com/tony1223/better-agent-terminal/main/install.sh | bash
# 從源碼建置
git clone https://github.com/tony1223/better-agent-terminal.git
cd better-agent-terminal && npm install
npm run dev # 開發
npm run build # 產出 .dmg / .AppImage / .exe
前置:Node.js 18+、Claude Code CLI(npm install -g @anthropic-ai/claude-code)已登入。
目前限制 / 注意事項¶
- Remote Access 標記為實驗性:WebSocket 協議、token 機制可能還會變動
- Chocolatey 套件待審核:Windows 目前只能走 NSIS installer / zip / 腳本
- macOS 首次啟動需解鎖:要到「系統設定 → 隱私與安全」按 Open Anyway
- Native 相依需要 Xcode CLT(
node-pty、better-sqlite3) - 依賴 Claude Code CLI:沒裝 CLI 或沒登入,agent 面板啟動不了
- Bypass 權限模式:README 明確警告「use with caution」——全自動會讓 agent 在沒確認下執行任何工具
研究價值與啟示¶
關鍵洞察¶
-
把「host 身分」做好,差異化就出來了 Claude Code 生態裡,做 skill / sub-agent 的人很多,做「更好的 host」的人反而少。BAT 把 cache TTL 倒數、cache expiry 警告、per-turn cost breakdown、5h/7d rate limit 視覺化這些官方 CLI 沒做的「使用者痛點」直接攤在 statusline 上,立刻就讓同一個 SDK 跑起來的體驗變得不一樣。值得對照 cc-statusline、Claude HUD 這類純 statusline 工具——BAT 等於把這些功能內建進宿主。
-
/auto-continue是「token 經濟」下的產物 這個 slash command 解決的是 Claude Code 常見的「中途停下等確認」,但設計細節透露出作者踩過的坑:counter 只在subtype=success時遞增、手動輸入就重置、/abort會清狀態、每次 auto-send 標[auto N/max]。這些護欄都是避免「半夜自動燒掉 rate limit」的實務經驗,比單純 while-loop 成熟很多。可對照 Copilot Ralph、ralph-loop 這類迭代 loop 工具——BAT 的做法是保守派,只在成功且未 streaming 時續跑。 -
Git worktree 隔離 = 防止 agent 炸主分支
worktree-manager.ts專門處理 Claude agent 的 worktree lifecycle,配合Claude Code (worktree)預設角色,讓每個 agent session 跑在獨立 worktree 裡。這是把「agent 會亂改檔案」當作必然前提、從目錄層級隔離的設計,比只做權限提示更徹底。 -
WebSocket Remote + QR Code 把 Claude Code 推向行動端 把桌面 Claude Code 變成 server,手機掃 QR 就能遙控——對於「通勤時也想看 agent 跑到哪」的場景非常實用。協議仍在實驗階段,但
protocol.ts+broadcast-hub.ts+handler-registry.ts這套「unified IPC + remote handler registry」的架構值得參考,想做任何「桌面 agent + 手機 client」的人都可以借鑒。 -
「多帳號切換」是合規 + 成本的現實解
/switch搭配 5h / 7d usage 顯示,讓使用者可以在多個 Anthropic 帳號間輪換,避開單帳號 rate limit。這個功能在官方 CLI 沒有、但真正重度使用者需要——作者顯然是自己痛過。
與其他研究筆記的關聯¶
| 主題 | 關聯性 |
|---|---|
| Claude HUD / cc-statusline | BAT 把類似的 statusline 功能內建進宿主,對照觀察「外掛 vs 內建」取捨 |
| Claude Code SDK (cloclo) / Claude Agent SDK | BAT 是 SDK 宿主的完整實作範例 |
| Copilot Ralph / ralph-loop 系列 | /auto-continue 是另一種 iterative loop 思路,護欄設計更保守 |
| gstack / Everything Claude Code | 同樣聚焦「Claude Code 工作流」,但 BAT 是桌面 GUI、非 CLI 套件 |
| Claude Code Showcase | 一個「把 Claude Code 變成產品」的實作樣本 |
簡言之,BAT 回答了一個很實際的問題——「如果我每天 8 小時都在跟 Claude Code 互動,我需要的是什麼?」答案不是更多 skills 或 sub-agents,而是一個能把成本看清楚、把 session 管好、能從手機遙控、能隔離破壞的宿主。