Thurbox
A terminal UI for orchestrating multiple CLI coding agents side by side in persistent tmux panes, with a fully customizable Lua-based interface.
At a Glance
Fully free and open source under the MIT License. All features included.
Engagement
Available On
Alternatives
Listed Sep 2026
About Thurbox
Thurbox is an open-source TUI (terminal user interface) built in Rust that lets developers run multiple CLI coding agents — Claude Code, Codex, Antigravity, opencode, aider, GitHub Copilot CLI, and others — simultaneously in persistent tmux panes. It is released under the MIT License and available on GitHub. A single install command sets up both the thurbox TUI binary and the thurbox-cli headless binary, and the agents keep running even after the TUI is closed.
What It Is
Thurbox sits in the category of agentic code orchestration tools. Its core job is to manage multiple coding-agent CLI sessions in one terminal window, each backed by a real tmux session that survives crashes, restarts, and reboots. The tool is agent-neutral: it launches vendor CLIs unmodified and knows nothing about their models, prompts, or tools, so new agent features arrive the day the upstream CLI ships them. Every pane in the interface — including the session list — is a Lua file in a directory the user owns, making the layout fully editable without recompiling or restarting.
Architecture: Two-Layer Design
Thurbox separates its internals into two distinct bands:
- The engine (Rust, fixed): Handles processes, git, hosts, schedules, and the SQLite database. This layer is not user-editable by design, providing a stable surface that plugins can rely on.
- The interface (Lua, yours): Every visible pane, the arrangement file (
ui/layout.lua), and keybindings are Lua files under~/.config/thurbox/ui/. Panes can be moved, disabled, deleted, or replaced without a recompile. PressingF10reloads the interface from disk.
Both the TUI and the headless CLI share one SQLite database, so actions taken via thurbox-cli appear in the running TUI within a tick.
Key Capabilities
- Persistent sessions: Each agent runs in its own tmux pane and survives TUI restarts.
Ctrl+Qexits the TUI without killing agents. - Git worktrees: Sessions can be spawned in isolated git worktrees for branch-level isolation.
Ctrl+Srebases all worktrees fromorigin/mainwith automatic conflict resolution. - Remote and WSL hosts: Agents can run on remote machines over SSH or inside WSL distros (discovered with no config), while the interface stays local.
- Automations: Named, scheduled agent runs — one-shot or recurring cron — fire whether or not the TUI is open, via a detached tmux keeper.
- Tasks and issue sync: A todo list whose items connect to a coding agent; records carry a
sourceand external ID for integration with external trackers. - Inter-session messages: An agent-neutral mailbox lets one agent hand another a payload without scraping its terminal.
- Extensions: Opt-in, agent-agnostic add-ons declared as data manifests, installed and self-healed with a single
thurbox-clicommand. - Headless CLI:
thurbox-cliscripts everything — create, drive, capture, and tear down sessions — from the terminal or from inside an agent session. - 36 built-in themes: 28 dark and 8 light palettes, switched live with
Ctrl+Y.
Performance Model
Thurbox uses a demand-driven rendering loop. An idle screen drops to four frames per second instead of a hundred, and layout, terminal render, and panel rebuilds are skipped rather than repeated when nothing has changed. Panes that declare themselves pure can have their whole render tree reused. The F12 HUD and THURBOX_PERF_LOG=1 expose per-pane cost — total, p95, max, frame share, and cache-hit rate. Performance regressions are tracked with deterministic frame counters rather than wall-clock timers, so they fail tests consistently across machines.
Update: v2.28.0
The latest release is v2.28.0, published on 2026-09-18, according to the GitHub repository. The project was created in February 2026 and has been updated continuously, with the last push recorded on 2026-09-19. The repository shows 72 stars and 10 forks at the time of indexing. The project is actively maintained under the MIT License and built on ratatui, tui-term, vt100-rust, and tmux.
Community Discussions
Be the first to start a conversation about Thurbox
Share your experience with Thurbox, ask questions, or help others learn from your insights.
Pricing
Open Source
Fully free and open source under the MIT License. All features included.
- All session orchestration features
- Persistent tmux-backed agent sessions
- Git worktree support
- Remote SSH and WSL host support
- Headless CLI (thurbox-cli)
Capabilities
Key Features
- Run multiple CLI coding agents side by side in persistent tmux panes
- Agent-neutral: supports Claude Code, Codex, Antigravity, opencode, aider, GitHub Copilot CLI, Vibe, pi, Oh My Pi, and any custom CLI
- Fully customizable Lua-based interface — every pane is a file you can edit, move, or delete
- Git worktree support for branch-level isolation across sessions
- One-key sync (Ctrl+S) rebases all worktrees from origin/main
- Remote SSH and WSL host support with no config required for WSL discovery
- Headless CLI (thurbox-cli) for scripting session creation, prompting, and teardown
- Scheduled automations (one-shot or recurring cron) that fire without the TUI open
- Tasks list with direct agent handoff and external tracker sync support
- Inter-session agent-neutral message mailbox
- Opt-in extensions declared as data manifests, self-healed by thurbox-cli
- Demand-driven rendering: idle screen drops to 4 fps, skips unchanged work
- Per-pane performance HUD (F12) with p95, max, frame share, and cache-hit stats
- 36 built-in themes (28 dark, 8 light) switchable live with Ctrl+Y
- Global search (Ctrl+/) finds sessions by name, branch, repo, or screen text
- Session forking (Ctrl+F) with lead/worker tree nesting
- Session lifecycle hooks, OS notifications, and full mouse support
- Vim-inspired keybindings with live rebinding from the help screen
- Responsive layout via ui/layout.lua — no breakpoints compiled into the binary
