A desktop deck for your WSL coding agents.
Launch, watch, and orchestrate Claude Code, Codex, Aider, and four more agents from a single window — split terminals, visual workflows, and live cost tracking, all running through your own WSL environment.
I work across half a dozen AI coding agents, and each one is its own CLI in its own terminal tab. Switching between Claude Code, Codex, Aider, and the rest meant juggling windows, re-typing project paths, and losing track of which session was doing what.
So I built AgentDeck for myself: open a project, pick an agent, and you're in a terminal. Split the screen to run two agents side by side. Chain them into visual workflows with conditions, loops, and variables. Keep prompt templates, project configs, and session history in one place instead of scattered across shells.
It's a desktop app, not a web service — your code stays local, API keys are encrypted at rest, and everything runs through your own WSL environment with no telemetry. It's a personal tool under Elastic-2.0: you're welcome to clone and build it, but there's no adoption goal and no support guarantees.
Actively developed personal tool, currently at v6.8.0. The app is mature and in daily use — a large Vitest suite under a zero-warning lint + typecheck gate — but it's shaped around exactly one setup (Windows 11 + WSL2), so your mileage outside that will vary.
Implemented:
- 7 agents: Claude Code, Codex, Aider, Goose, Gemini CLI, Amazon Q, OpenCode
- Split terminal sessions (up to 3 panes) with caching, search, and live activity parsing
- Visual workflow engine — agent / shell / checkpoint / condition nodes,
branching, loops,
{{VAR}}variables, and per-run history - Per-session git worktree isolation with a Keep / Discard review flow
- Live cost + token tracking (Claude Code and Codex)
- Home dashboard — daily digest, live session grid, 7-day cost, project cards
- Prompt templates, command palette, three themes
Rough edges / not done:
- Windows + WSL2 only — it spawns
wsl.exe, so there's no native Linux/macOS build - Cost / token parsing exists for Claude Code and Codex only; the other five agents run fine but report no cost
- Ships as a portable
.exe— no installer, no auto-update
Explicitly declined (not on the roadmap):
- Cloud sync • multi-user / team mode • telemetry or analytics • a hosted web version • plugin marketplace
- Up to 3 panes side by side with draggable dividers; bare WSL shells (
Ctrl+T) - Sessions cached across tab switches — no re-render on return
- In-terminal search (
Ctrl+Shift+F) with regex and case-sensitive modes - Real-time activity parsing of agent tool use (reads, writes, commands)
- Per-session right panel: Files, Diff (Keep / Discard), Prompts, Env, Config
- New-session composer: pick an agent, drop in a prompt, set branch mode, launch
- Daily digest — session count, cost, exit rate, top agent
- Live session grid with activity pulse and token gauge
- Cost dashboard with per-agent breakdown and a 7-day sparkline
- Project cards with git status; proactive suggestions; quick actions
- Drag-and-drop node graph: agent, shell, checkpoint, and condition nodes
- Edge-activation scheduler — ready queue, branching, skip propagation, loops
- Conditional routing on exit code or output match; per-node retry with delay
{{VAR}}substitution via a typed pre-run dialog; 8 seed roles for personas- Import / export as
.agentdeck-workflow.json; per-run history with timings
- 5-step new-project wizard, multiple agents per project, auto stack detection
- 16 seed prompt templates across 8 categories, with a live-preview editor
- Pin favourites to the home grid
- A single registry drives CLI flags, colour, and capabilities for all 7 agents
- Startup update check + one-click npm update with rollback
- Auto-detection via the WSL
PATH
| Theme | Vibe |
|---|---|
| Tungsten (default) | Sodium amber on warm charcoal |
| Phosphor | Retro CRT green on ink |
| Dusk | Violet + coral on plum-black |
All values come from CSS custom properties in tokens.css; per-agent accent
tokens keep each agent's colour consistent across every theme.
| Shortcut | Action | Shortcut | Action | |
|---|---|---|---|---|
Ctrl+K |
Command palette | Ctrl+1/2/3 |
Pane layout | |
Ctrl+N |
New project | Ctrl++/- |
Zoom in / out | |
Ctrl+T |
New terminal | Ctrl+0 |
Reset zoom | |
Ctrl+\ |
Toggle right panel | Ctrl+Shift+F |
Search in terminal | |
Ctrl+/ |
Shortcut reference | Alt+1..8 |
Jump to tab |
Requires Windows 10/11 with WSL2 (Ubuntu recommended), Node.js 22.22.1+ (see
.nvmrc), and at least one agent CLI installed inside WSL.
# Install (--no-bin-links is required on Windows-mounted drives)
npm install --no-bin-links
# Dev with hot reload
npm run dev
# Checks
npm run lint # ESLint, zero warnings
npm run typecheck # tsc on the node + web configs
npm test # Vitest
# Build a portable .exe (gated: lint + typecheck + tests, then build + verify)
npm run release-portableOutput: dist/AgentDeck-{version}-portable.exe (~93 MB).
| Layer | Choice | Notes |
|---|---|---|
| Shell | Electron 42 | ConPTY; node-pty in the main process only |
| UI | React 19 + TypeScript 6 | Strict mode, all .ts / .tsx |
| Build | electron-vite 5 | Vite for the renderer, esbuild for main/preload |
| Terminal | xterm.js 5 + node-pty | WebGL renderer over WSL PTYs |
| State | Zustand | One flat store composed from 7 slices |
| Workflows | React Flow | Visual DAG editor |
| Storage | electron-store | JSON on disk; safeStorage for secrets |
| Test / lint | Vitest 4 + ESLint 9 | Dual workspace, zero-warning |
src/
├── main/ # Electron main: PTY, IPC, workflow engine, WSL + git, persistence
├── preload/ # contextBridge → window.agentDeck (~65 channels)
├── renderer/ # React app: terminals, workflow editor, dashboard, command palette
└── shared/ # Agent registry, domain types, workflow + id validation (no Node/DOM)
WorkflowNode is a discriminated union — AgentNode | ShellNode | CheckpointNode | ConditionNode — so engine dispatch and validation stay exhaustive at compile
time. Every IPC handler that takes a caller-supplied id validates through
shared/validation. New themes, agents, and node types are added by extending a
single registry; the type system flags any consumer that missed the update.
- Local-first. No web service, no account, no telemetry. Code stays on your machine, API keys are encrypted at rest, and fonts are bundled, not fetched.
- One process model, done right. node-pty lives in the main process only;
the renderer runs with
contextIsolationon andnodeIntegrationoff. - Single source of truth. Agents, themes, and node types each come from one registry; the type system surfaces anything a new entry forgot to update.
- No magic numbers. Every colour, space, font size, and duration is a
design token in
tokens.css— a theme is just a set of tokens. - WSL-native. Paths, git, and agent CLIs all route through your WSL distro.
- User Guide — detailed usage
- Changelog — version history
- Contributing — how to contribute
- Security — reporting vulnerabilities
Elastic License 2.0 — free to use, modify, and share. You may not offer it as a hosted or managed service.
AgentDeck is a personal tool — built for my own daily use across Windows + WSL2, with no telemetry, analytics, or growth metrics. Not chasing adoption, but if it looks useful you're welcome to try it.
