Skip to content

nsoybean/switchboard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

462 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Switchboard

Switchboard

The open-source multi-agent workspace. Run multiple Claude Code, Codex, and Bash sessions in parallel β€” each in its own branch and worktree. Inspect diffs, commit, and push from one window.

Switchboard showing multiple Claude Code and Codex sessions in one desktop window

Switchboard is a desktop app for managing parallel coding agent sessions without the friction of terminal tabs and branch juggling. Each session gets a real interactive PTY, optional git worktree isolation, and a built-in git panel β€” all with the native terminal feel you expect.

Built for multi-agent workflows: one agent implementing, another investigating, another running commands β€” all safely isolated in the same repo.

If you like Conductor, Switchboard offers a similar workflow with an open-source, terminal-native, local-first approach.

Install

Download the latest release (macOS, Apple Silicon & Intel).

Or install from the command line:

curl -fsSL https://raw.githubusercontent.com/nsoybean/switchboard/main/scripts/install.sh | bash

You'll also need at least one of: Claude Code or Codex.

macOS Gatekeeper notice: Since the app is not yet code-signed with an Apple Developer certificate, macOS may block it from opening. To bypass this, run:

xattr -cr /Applications/Switchboard.app

Then open the app normally.

Why

Claude Code and Codex are great in the terminal. The friction starts when you want to run several sessions at once, compare approaches, or keep multiple changes in flight without stepping on your own work.

Switchboard gives you:

  • Parallel native sessions β€” every agent runs in a real PTY, so the experience matches the CLI you already use
  • One place to supervise everything β€” see active sessions, paused sessions, and sessions that need input at a glance
  • Per-session worktree isolation β€” spin up separate worktrees so agents can work in parallel without clobbering each other
  • Built-in git workflow β€” inspect diffs, stage files, commit, push, and create PRs without leaving the app
  • Local-first history and resume β€” reopen past Claude Code and Codex sessions from local history and jump back into the work
  • Keyboard-friendly control β€” switch sessions, open the git panel, and get back to the terminal fast

Status

Early alpha. The core works β€” you can spawn Claude Code and Codex sessions, interact with them, switch between them, manage git, and resume past sessions. Building in public.

What's working:

  • Interactive terminal sessions via PTY (portable-pty β†’ xterm.js)
  • Agent picker (Claude Code / Codex / Bash)
  • Session sidebar with status indicators
  • Past session loading from Claude Code's local storage
  • Session resume via claude --resume
  • Git panel with diff viewer, staging, commit, push
  • Git worktree management
  • File tree viewer
  • Token usage / cost tracking
  • Keyboard shortcuts
  • Session persistence across app restarts

Coming next:

  • Comparison mode β€” same task to different agents, side-by-side diff
  • Stream View β€” all terminals visible in a horizontal scroll
  • Background tasks β€” queue up prompts for agents to run without manual interaction

Tech Stack

Layer Technology
Desktop framework Tauri v2 (Rust)
Frontend React 19 + TypeScript + Tailwind CSS
Terminal emulation xterm.js v6 + WebGL addon
PTY management portable-pty (custom Tauri commands)
Git operations Git CLI subprocess
State management React Context + useReducer

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              FRONTEND (React + xterm.js)          β”‚
β”‚                                                  β”‚
β”‚  Sidebar ─── Terminal (xterm.js) ─── Git Panel   β”‚
β”‚                      β”‚                           β”‚
β”‚               usePty hook                        β”‚
β”‚                      β”‚ Tauri events              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚              BACKEND (Rust / Tauri v2)            β”‚
β”‚                                                  β”‚
β”‚  PTY commands ── Session commands ── Git commands β”‚
β”‚  (portable-pty)  (persistence)    (git CLI)      β”‚
β”‚                      β”‚                           β”‚
β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚
β”‚         β–Ό            β–Ό            β–Ό              β”‚
β”‚  ~/.claude/     git worktree  ~/.switchboard/    β”‚
β”‚  (read only)       CLI        sessions.json      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

The PTY pipeline is the core β€” portable-pty spawns agent processes, a background thread streams output via Tauri events to xterm.js, and user keystrokes flow back. The terminal renders identically to running the agent in your native terminal.

Contributing

Contributions welcome. This is an early-stage project β€” if you're interested in multi-agent workflows, git worktree tooling, or terminal emulation in desktop apps, there's plenty to work on.

Running Locally

Prerequisites

Development

git clone https://github.com/nsoybean/switchboard.git
cd switchboard
npm install
npm run tauri dev

Build

npm run tauri build

Produces .dmg (macOS) or .AppImage (Linux) in src-tauri/target/release/bundle/.

Tests

# Run Rust tests
cargo test --manifest-path src-tauri/Cargo.toml

# TypeScript check
npx tsc --noEmit

Design

  • Font: JetBrains Mono
  • Spacing: 4px base unit
  • Aesthetic: Terminal-native, dense, minimal chrome
  • Theme: Light and dark mode

Landing Page

The landing page lives in landing/ and is a static Next.js site deployed to GitHub Pages via GitHub Actions.

cd landing
npm install
npm run dev

Deployed at nsoybean.github.io/switchboard.

License

MIT