Run your fleet of coding agents from one deck

Claude Code, Codex, OpenCode and Kimi Code — each in its own pane, on its own branch, all in one window. Quit whenever: the deck comes back where you left it

curl -fsSL https://raw.githubusercontent.com/KeepDeck/KeepDeck/main/install.sh | sh

or take the zip for your Mac

What the deck does

A fleet in one window, a branch of your own per agent, sessions that outlive a quit, tools where the work is, and skills every agent picks up

Up to sixteen agents in one deck

You pick the agent per pane, and up to sixteen run at once — tiled automatically as they join, with no tabs to dig through and nothing hidden behind one

All sixteen, joining one at a time — the grid retiles itself around each one, and no two panes look alike: each is the CLI's own interface, down to its status bar

Each pane is a real terminal running the CLI itself, so what you get is that tool's own interface rather than a re-skin of it: Claude Code looks like Claude Code, Codex like Codex — and KeepDeck offers only the CLIs it finds installed on your machine. Workspaces keep separate projects side by side, and the ones you are not looking at keep running. Any pane can be forked — the same session, carried into a new pane and its own directory, so you can take a second run at something without losing the first

Each agent on its own branch

An agent can spawn straight into its own git worktree, created — or attached to an existing one — as it starts, with the branch riding along in the pane header

The worktree and its branch are settled before the agent starts — base branch included

Closing the agent offers to clean the worktree up when it is done. Agents that need no isolation share the workspace folder instead, and mixing both kinds in one workspace is fine — isolation is a choice per agent, not a mode the whole deck is in

Nothing is lost when you quit

The deck is written as you work and restored on launch — workspaces, panes, layout — and each pane resumes its own recorded session with the agent's own command

Quit, relaunch — the same panes, each resuming its own session

That command is the CLI's own: claude --resume, codex resume, opencode -s. Sessions the CLIs recorded outside KeepDeck count too — adopt one into a pane, or fork it into another directory. Mid-day, suspend an agent instead of closing it and it waits in the tray with its session intact, ready to pick up from the same place. If you would rather come back to a quiet deck, restored agents can wait stopped until you resume each one; and a pane whose folder has since gone says so plainly and offers a fresh start rather than failing at you

Four tools that know which worktree you mean

The dock rides beside the deck, and everything in it — Run, Git, Files and Voice — is scoped to the workspace and the worktree of the pane you are on

The deck makes room for it, and the dev server for that worktree runs beside the agent working in it

Run starts the app that agent is building — named once, launched in its worktree, its log streamed beside it and the port it took reported, so several versions of one project can be up at once. Git shows what each worktree changed, diff by diff, which is how you review four branches without leaving the window. Files browses that workspace's tree and previews what is in it. And Voice — experimental — lets you hold a key, talk, and let go, with the audio never leaving your machine

Write a skill once, every agent gets it

Skills live in a library the app keeps for you: write one for a single workspace or for everything you run, and every agent that starts afterwards has it

Asked for before it exists, the agent has nothing. Written once at the global scope, and the next agent to spawn runs it

The part that saves the work: each CLI expects skills in its own shape, and KeepDeck stages the library into whichever one the agent needs as it spawns — Claude Code's plugin folder, OpenCode's config directory, or the bare SKILL.md layout. One file, four agents, no three copies to keep in step. And nothing is written into the CLIs' own configuration: the staged copy lives with the workspace and goes when it goes

What you are looking at

Eight parts of that window, and what each one is for

The KeepDeck window: four agent panes tiled in one deck — Claude Code, Codex, OpenCode and Kimi Code — each with its context meter and branch in the pane header, workspaces in the left rail, and statistics, notifications and skills in the top bar.
  1. Workspaces — a folder and its own set of panes; switching keeps the rest running
  2. The agent — Claude Code, Codex, OpenCode or Kimi Code, chosen per pane
  3. Context — how much of this agent's context window is in use, live
  4. Its branch — the git worktree this agent works in, made when it spawns
  5. Minimize, maximize, close — from the pane's own header; minimized ones wait in the tray
  6. Usage statistics — tokens and cost per session and model, 90 days of local history
  7. Notifications — system banners, an in-app bell, or both
  8. Skills — written and edited in the app, for one workspace or for everything

And in the same window

Install KeepDeck

One command. It takes the right build for your Mac, installs it to /Applications, and opens without a Gatekeeper prompt

curl -fsSL https://raw.githubusercontent.com/KeepDeck/KeepDeck/main/install.sh | sh

or take the build directly

The build is unsigned, which is why the installer clears the download's quarantine flag for you. Taking the zip by hand instead? Run xattr -dr com.apple.quarantine /Applications/KeepDeck.app once. To install for yourself only, set KEEPDECK_DEST=~/Applications

Before you install

Hold stability under speed

Keep Building