Multi-Agent AI Terminal Workspace
Run Claude Code, Codex CLI, Gemini CLI, Qwen, Aider, and more — side-by-side in split panes.
Think "tmux meets a project manager meets an AI agent launcher."
Dual Mode — Use as a desktop app (Tauri) or run the standalone web server and access from any browser on your local network. Same features, same UI.
| 1. Main Workspace | 2. Diff View | 3. Settings |
|---|---|---|
- 10 AI coding agents — Claude Code, Codex CLI, Gemini CLI, Aider, OpenCode, Qwen Code, Junie, Kiro, Kilo Code, Cline
- Auto-detected on PATH — only installed agents appear in launcher
- Run multiple agents side-by-side in split panes (up to 2×2 grid) within the same project
- Custom agents — add your own agent commands with custom args, env, accent color
- Terminal tabs per project — each project has independent tabs with split pane grids
- Session persistence — terminals survive restarts; layout and sessions fully restored
- True-color PTY —
xterm-256color+COLORTERM=truecolorfor proper TUI rendering - Direct writer pipeline — batched PTY → xterm.js rendering to prevent UI freeze under high output
- Copy on select, paste on right-click, configurable cursor styles
- Per-pane zoom (Ctrl+scroll), 10,000 line scrollback
- Add/remove/reorder projects with name, path, accent color, custom icon, and category
- 7 project categories: Web, App, Game, API/Backend, ML/AI, CLI Tool, Other
- Resizable collapsible sidebar (drag to reorder projects, right-click context menu)
- Project tabs — open multiple projects simultaneously, switching preserves all layouts
- Agent count badge per project in sidebar — projects auto-bump to top when agents are running
- SSH remote project support —
user@host:/pathformat, agents auto-launch over SSH - Auto-spawn default agents per project on open
- Browser mode — projects synced via HTTP API for headless server
- Built-in
◈ KANBANtab per project — always present as first tab - Four columns: Todo, In Progress, Done, Blocked
- Full CRUD: create, edit (double-click), drag-and-drop between columns, delete
- Quick status advancement — one-click move to next status
- Tasks persist across restarts via local JSON storage or HTTP API
- Full Planka API integration — connect Nexus to your self-hosted Planka instance
- 3-step connection wizard: Credentials → Select/Create Project → Select/Create Board
- Full CRUD sync: Create/delete projects, create/delete boards, create/update/delete/move cards, create/delete lists
- Drag-and-drop cards between lists — auto-syncs to Planka API in real-time
- Planka proxy — HTTP proxy through backend to avoid CORS issues
- WebSocket live sync —
kanban-refreshevents keep all connected clients in sync - Agent instructions panel — customize how AI agents interact with the kanban board
- Auto-detection — if project has Planka config, shows Planka board instead of local
- Connect/Disconnect/Change Board controls in UI
- Agency agent dropdown in toolbar — browse and select AI agency personalities
- 65+ specialist agents from the
agency-agentscatalog across 7 divisions:- Design & UX, Engineering, Marketing, Product & Project Management, Support & Operations, Testing & Quality, Specialized
- Search agents by name or slug
- Enable/disable toggle per agent with green dot indicator
- Project sync — writes
AGENCY.mdfile to project root with selected agent personality and instructions - Change AI personality for any agent — instructions flow into all agents working on that project
- Auto-re-sync on startup if agency files are missing or stale
- Shared MCP registry — configure MCP servers once in Settings, sync across all projects
- 7 MCP presets: context-mode, context7, playwright, github, filesystem, sequential-thinking, android-mcp
- Per-agent MCP file auto-generation — Nexus writes proper MCP configs for each agent:
- Claude Code (
.mcp.json), Gemini CLI (.gemini/settings.json), OpenCode (.nexus/opencode/opencode.json) - Qwen Code (
.qwen/settings.json), Kilo Code (.kilocode/mcp.json), Junie (.junie/mcp/mcp.json) - Kiro (
.kiro/settings/mcp.json), Cline (.nexus/cline/data/settings/cline_mcp_settings.json)
- Claude Code (
- Codex MCP via launch args — auto-converts MCP config to CLI arguments
- Project-scoped values —
<PROJECT_PATH>placeholder replacement in MCP server configs - Managed manifest —
.nexus/mcp-managed.jsontracks Nexus-managed entries for clean removal - Per-agent MCP install labels: Project File, Launch Config, Launch Args, or Manual
- One-click Spec Kit bootstrap per project — installs
specify-cliand initializes.specifydirectory - Per-project enable/disable with agent selection
- Supported agents: Codex, Claude Code, Gemini CLI
- Auto-detection — checks for
.specifydirectory on project load - Rust-side bootstrap — runs
uv tool install specify-clithenspecify initautomatically
- Full git diff view — side-by-side file list + diff hunks with line numbers
- Color-coded additions/removals — green/red highlighting in diff hunks table
- Per-file diff — click any changed file to load detailed diff
- Branch switching — dropdown to list all local/remote branches and checkout
- Git status badge — shows changed file count on toolbar button, polls every 5s
- Commit instruction generator — "Ask Agent to Commit" button copies commit message + instructions to clipboard
- Total additions/deletions summary at top of diff panel
- Resizable panel (360-900px), refresh button, working tree clean indicator
- Keyboard shortcut:
Ctrl+Shift+G
- Collapsible left panel showing full project file tree (160-480px resizable)
- Lazy-loading directories — expand to load children on demand
- File search — filter tree by filename
- 15+ file type icons with colored indicators
- Image preview — PNG, JPG, BMP, WebP, SVG, ICO, TIFF loaded in modal viewer
- Animated GIF preview — full support for animated GIFs in image viewer
- Text file preview — modal with monospace rendering of code/text file contents
- Comprehensive MIME detection — code, images, GIFs, video, audio, archives, PDF, executables, fonts
- Open in system editor — double-click any file to open in default editor
- Context menu: Preview Text, Preview Image, Open in Editor
- Drag-and-drop files to agents — drag any file from project tree onto terminal to paste its path
- Keyboard shortcut:
Ctrl+Shift+E
- System health header: Total CPU %, Total RAM (used/total GB) with progress bar
- Process list — PID, Name, CPU%, RAM (MB/GB), Kill button
- Sortable columns — click CPU or RAM header to sort ascending/descending
- Kill any process — sends SIGKILL directly from the UI
- Auto-refresh every 2 seconds via
sysinfocrate in Rust backend - Resizable panel (280-600px)
- Live in StatusBar — CPU/RAM always visible at bottom of workspace
- High-contrast dark mode with
#1a1a1abackgrounds, bold borders, pixel shadows - Yellow accent (
#ffcc00) throughout — buttons, focus rings, active states, badges - Space Grotesk typography with JetBrains Mono for terminals
- Material Symbols icon font — consistent iconography across all components
- Light mode support toggleable in Settings
- Custom titlebar —
decorations: falsewith macOS traffic lights, Windows/Linux min/max/close - Mobile-responsive — overlays and responsive sidebar for small screens
- Appearance: Theme (dark/light), font family picker, font size slider (11-16px)
- Terminal: Scrollback lines, cursor style (block/bar/underline), cursor blink toggle
- Session: Session restore toggle, shell override, agent default args
- Projects: Manage projects list, add/remove/edit, Spec-Kit/Caveman one-click install
- Agents & MCP: Custom agents, MCP preset installation, per-agent MCP enable/disable
- Keybindings: 15 configurable shortcuts — edit, clear, or reset any binding
- Debug system: Toggleable namespaced debug logging with runtime
window.__NEXUS_DEBUG__ - Log search:
Ctrl+Shift+Fto search across all terminal session logs, grouped by session
| Shortcut | Action |
|---|---|
Ctrl+Shift+T |
New terminal tab |
Ctrl+Shift+W |
Close terminal tab |
Ctrl+Shift+D |
Split vertical |
Ctrl+Shift+H |
Split horizontal |
Ctrl+Shift+X |
Kill focused session |
Ctrl+Shift+G |
Toggle Git Diff panel |
Ctrl+Shift+E |
Toggle Project Directory panel |
Ctrl+Shift+F |
Log search |
Ctrl+B |
Toggle sidebar |
Ctrl+, |
Toggle Settings |
Ctrl+Tab |
Next project |
Ctrl+Shift+Tab |
Previous project |
Ctrl+Q |
Quit |
Ctrl+Plus |
Zoom in terminal |
Ctrl+Minus |
Zoom out terminal |
All keybindings are user-configurable in Settings → Keybindings.
Both modes share the same frontend and Rust backend. Choose what fits your workflow:
| Feature | Desktop App | Web Server |
|---|---|---|
| Terminal | ✅ Native PTY | ✅ Via WebSocket |
| Agent spawning | ✅ Full | ✅ Full |
| Project tree & file preview | ✅ Native FS | ✅ Via HTTP API |
| Git diff/status | ✅ Full | ✅ Full |
| Kanban board (local + Planka) | ✅ Persisted to disk | ✅ Persisted to disk |
| Multi-project management | ✅ Persisted to disk | ✅ Persisted to disk |
| Resource monitor (CPU/RAM) | ✅ Full | ✅ Full |
| Settings / MCP / Skills | ✅ Full | ✅ Full |
| Agency agents | ✅ Full | ✅ Full |
| Access from phone/tablet | ❌ | ✅ Same WiFi |
| Multiple users | ❌ | ✅ Local network |
Note: In web server mode, projects and kanban tasks are saved to
nexus_web_state.jsonin the server's working directory. The desktop app uses Tauri's native file APIs. Data is not shared between the two modes unless you manually copy the state file.
x64:
tar -xzf Nexus_linux_x64.tar.gz
cp Nexus_linux_x64/nexus ~/.local/bin/nexus
chmod +x ~/.local/bin/nexus
nexusARM64:
tar -xzf Nexus_linux_arm64.tar.gz
cp Nexus_linux_arm64/nexus ~/.local/bin/nexus
chmod +x ~/.local/bin/nexus
nexusOr use the installer script:
./install.sh # Auto-detects architectureDownload Nexus_windows_x64.zip or Nexus_windows_arm64.zip, extract, and run nexus.exe.
Or use PowerShell:
./install.ps1 # Auto-detects architectureRun the standalone HTTP + WebSocket server and access from any browser on your local network.
git clone https://github.com/abhay-byte/nexus.git
cd nexus
npm install
npm run build
cd src-tauri
cargo build --bin nexus-server --release./target/release/nexus-server- HTTP API:
http://localhost:7878 - WebSocket:
ws://localhost:7879/ws - Open in browser:
http://localhost:7878
The server only accepts connections from localhost and your local network IPs. External requests are blocked with 403 Forbidden. You can allow extra IPs:
NEXUS_ALLOW_IPS=192.168.1.50 ./target/release/nexus-server| Variable | Default | Description |
|---|---|---|
NEXUS_PORT |
7878 |
HTTP server port |
NEXUS_WS_PORT |
7879 |
WebSocket server port |
NEXUS_ALLOW_IPS |
— | Comma-separated extra allowed IPs |
| Agent | Command | Notes |
|---|---|---|
| Claude Code | claude |
--dangerously-skip-permissions flag auto-added |
| Codex CLI | codex |
MCP via launch args auto-configured |
| Gemini CLI | gemini |
.gemini/settings.json auto-generated |
| Aider | aider |
--no-auto-commits flag auto-added |
| OpenCode | opencode |
.nexus/opencode/opencode.json auto-generated |
| Qwen Code | qwen |
.qwen/settings.json auto-generated |
| Junie | junie |
JetBrains, .junie/mcp/mcp.json auto-generated |
| Kiro | kiro |
.kiro/settings/mcp.json auto-generated |
| Kilo Code | kilo-code |
.kilocode/mcp.json auto-generated |
| Cline | cline |
.nexus/cline/data/settings/cline_mcp_settings.json auto-generated |
git clone https://github.com/abhay-byte/nexus.git
cd nexus
npm install
npm run tauri devFor ARM64 cross-compilation, see docs/building-arm64.md.
| Layer | Tech |
|---|---|
| Desktop shell | Tauri v2 (Rust) — optional |
| Frontend | React 18 + TypeScript + Vite |
| State | Zustand |
| Terminal | xterm.js v5 via @xterm/xterm |
| PTY backend | portable-pty (Rust) |
| HTTP server | tiny_http (Rust) |
| WebSocket | tokio-tungstenite (Rust) |
| System monitoring | sysinfo (Rust) |
| Styling | Tailwind CSS v4 + custom brutalist tokens |
nexus/
├── src/ # React frontend (works in both modes)
│ ├── components/
│ │ ├── AgentBar/ # Running session tabs + launch dropdown
│ │ ├── GitDiffPanel/ # Git diff viewer with branch switching
│ │ ├── Kanban/ # Local kanban + Planka integration
│ │ ├── PaneGrid/ # Split terminal grid (2×2 max)
│ │ ├── ProjectDirectoryPanel/ # File tree with preview
│ │ ├── ResourceMonitorPanel/ # CPU/RAM/process monitor
│ │ ├── Settings/ # Full settings workspace (6 sections)
│ │ ├── Sidebar/ # Project list with drag-to-reorder
│ │ ├── StatusBar/ # Agent count, CPU/RAM, version
│ │ ├── TerminalTabBar/ # Terminal tabs + agency dropdown
│ │ ├── Titlebar/ # Custom window chrome
│ │ └── dialogs/ # Add project, custom agent, log search
│ ├── store/ # Zustand stores (project, session, kanban)
│ ├── lib/
│ │ ├── api.ts # Unified Tauri / HTTP / WebSocket API
│ │ ├── planka.ts # Planka full CRUD API client
│ │ ├── projectMcpSync.ts # Per-agent MCP config file generation
│ │ ├── directWriter.ts # Batched PTY → xterm.js pipeline
│ │ ├── layout.ts # Split pane fraction management
│ │ └── persistence.ts # Project & session persistence
│ ├── constants/
│ │ ├── agents.ts # Agent definitions + MCP/spec-kit/caveman support
│ │ ├── keybindings.ts # 15 configurable shortcuts
│ │ └── mcpPresets.ts # 7 MCP server presets
│ └── types/ # TypeScript type definitions
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── lib.rs # Library exports (pty, server, ws)
│ │ ├── main.rs # Tauri desktop entry point
│ │ ├── bin/
│ │ │ └── server.rs # Standalone headless server entry point
│ │ ├── server.rs # HTTP REST API + static file serving
│ │ ├── ws_server.rs # WebSocket terminal streaming
│ │ └── pty.rs # PTY spawn/resize/kill, agent launch, system health, spec-kit/caveman bootstrap
│ └── capabilities/ # Tauri permissions
├── docs/ # Screenshots, building guides
├── stitch/ # Stitch tool scripts
└── install.sh # System-wide installer
MIT © 2026 Abhay