IDE-agnostic agent orchestrator — dashboard + VS Code extension. A desktop app for managing AI coding agents across multiple workspaces and projects, with a built-in code editor, terminal, chat, LSP support, and a CLI for programmatic control.
┌──────────────────────────────────────────┐
│ Dashboard (Tauri v2 + React 19) │
│ - Project & workspace management │
│ - Code editor (CodeMirror 6 + LSP) │
│ - Integrated terminal & chat │
│ - Agent status overview │
│ - Window management (focus, positioning)│
└──────────────┬───────────────────────────┘
│
Web Server (Node.js)
(data, state, git, LSP, agents)
http://localhost:3456
│
┌───────┴───────┐
▼ ▼
┌─────────┐ ┌─────────┐
│ VS Code │ │ Band │
│ Ext. │ │ CLI │
└────┬────┘ └─────────┘
▼
AI Agent (claude, cursor, etc.)
apps/
dashboard/ Tauri v2 desktop app (Rust backend + React frontend)
web/ Node.js web server (tRPC, git ops, LSP, coding agents)
cli/ Band CLI (Rust) — programmatic workspace management
website/ Marketing website (Astro)
extensions/
vscode/ VS Code extension
packages/
dashboard-core/ Shared dashboard UI (CodeMirror, components)
coding-agent/ Coding agent integration
logger/ Shared logging (pino)
ui/ Shared UI components
- Node.js v22+
- pnpm v10+
- Rust (for Tauri dashboard and CLI)
- macOS (dashboard uses native window management)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh# Clone and install dependencies
git clone <repo-url>
cd band
pnpm install# From the repo root:
pnpm dev:dashboard
# Or from the dashboard directory:
cd apps/dashboard
pnpm tauri devThis builds the CLI and web server, then starts the Tauri app. Hot-reloading is enabled for the React frontend and Rust backend.
pnpm build:dashboardThis produces a .dmg installer at apps/dashboard/src-tauri/target/release/bundle/dmg/.
The web server (apps/web) is the backend for the dashboard. It handles:
- Git operations — diff, commit, branch management via tRPC
- LSP — spawns and proxies language servers (TypeScript, etc.) over WebSocket
- Coding agents — manages agent sessions and task execution
- File serving — serves the dashboard frontend
# Development:
pnpm dev:web
# Build:
pnpm build:webThe server runs on http://localhost:3456 by default (configurable via PORT env var). It is started automatically by the Tauri dashboard in production.
The CLI is a thin client for the web server, used for programmatic workspace management:
band projects list # List registered projects
band workspaces list # List workspaces
band workspaces create # Create a new workspace (git worktree)
band tasks list # List coding agent tasks
band tunnels start # Start a tunnel
band settings # View settingsAll state and operations happen server-side. The CLI connects to the running Band server.
pnpm build:extension
# Or from the extension directory:
cd extensions/vscode
pnpm build- Build the extension
- Open VS Code
- Run
Extensions: Install from VSIX...from the command palette (if packaged) or for development:
cd extensions/vscode
code --extensionDevelopmentPath="$(pwd)"The extension activates when it detects a .band/config.yaml in the workspace. It then:
- Sets up the editor layout (splits) based on config
- Creates terminals and runs configured commands (dev server, AI agent)
- Opens Simple Browser for preview URLs
- Monitors terminal output for agent status changes
- Writes status to
~/.band/status/{workspaceId}.json
# Check
pnpm check
# Fix
pnpm lint:fix
pnpm format:fixpnpm testThis project uses integration tests as the primary testing approach — see CLAUDE.md for the testing strategy.
cd apps/dashboard
# Full Tauri dev (frontend + Rust backend + native window):
pnpm tauri dev
# Check Rust compilation:
cd src-tauri && cargo checkcd extensions/vscode
# Build once:
pnpm build
# Watch mode (rebuilds on file change):
pnpm watch
# Test in VS Code:
code --extensionDevelopmentPath="$(pwd)"To add support for another IDE (IntelliJ, Xcode, etc.):
- Create a new directory under
extensions/ - On workspace open, read
.band/config.yaml - Monitor agent terminal output using the patterns from config
- Write status JSON to
~/.band/status/{workspaceId}.json - Clean up the status file when the workspace closes
The dashboard will automatically pick up status from any IDE that writes to ~/.band/status/.