Terminal Deck 0.15.0

Sessions

Every session is a real process in a real terminal. Nothing is emulated, wrapped or proxied.

The tab strip

Sessions and browser tabs share one strip in the window header. The dot is the whole point of it: at a glance, one session is mid-thought, one has finished and is sitting at its prompt, and one is blocked on a question you have not answered.

api-server web docs infra Browser Working At its prompt Needs you Idle
Four colours, four states, and the orange one is the only one waiting on you. Grey means the session has finished or been closed.

The dot reads the screen, the way you would

Agents redraw their whole screen as they work, so the last thing one printed often has nothing to do with what is showing. Guessing from the last thing printed gets the answer wrong. So the app keeps its own copy of what each session’s screen looks like right now, and reads the dot off that — the same thing you would read if you were looking at the tab.

It works for tabs you are not looking at, and it survives the agent redrawing itself. Claude Code’s prompt is matched as the it actually draws, across a window of lines rather than at the very end, because the prompt is never the last line on screen.

Tabs keep their scrollback

Switching away from a session does not tear it down. The main process holds the scrollback and replays it, so coming back to a tab shows the conversation you left, not an empty screen.

You choose what a session is before it starts

The new-session dialog picks the agent, the profile it runs as, and whether it continues the last conversation in that folder. What is shown as selected is what will actually be spawned, including when it was chosen by a remembered default — the dialog resolves the decision rather than displaying a guess.

The list of agents is not four names compiled into the app. Name a command and it runs, with the caveat drawn on its own row rather than left for you to discover: an agent nobody here has characterised gets a terminal and not a model picker. The command is resolved against your login shell’s PATH before it is saved, so a name that cannot be found is refused at the form rather than becoming a row that dies when you pick it.

The controls are in the chrome, beside the session

Model, effort, connectors and usage sit beside the account, above the session. Clicking a model changes the session that is running — and refuses, saying why, when you have something typed in the prompt, because the way a CLI is told to change model is a line typed at it and the next Return would have been yours.

It finds your CLI the way your shell does

An app you open from the Dock on macOS is given a much shorter list of places to look for programs than your terminal is, and genuinely cannot find a claude you installed the usual ways. So Terminal Deck asks your own terminal, once, where it looks — and every session it starts looks in exactly the same places.

Accounts: separate logins that cannot mix

An agent CLI keeps who-you-are inside one configuration directory, and an environment variable moves that directory. Point two sessions at two directories and they are two different logins, with separate history and separate transcripts. Pick an account per session, per project, or as your default. An account belongs to an agent, so adding one asks which.

Which agents that works for was measured against the real CLIs rather than assumed, because the variable that moves an agent’s configuration is not always the one that moves its login. Claude Code and Codex CLI both isolate, and are offered. Gemini CLI is listed and refused with the reason on the row: its token sits in one keychain slot no directory moves, so a second sign-in would overwrite the first rather than sit beside it. Your existing login is shown as an account the app will not rename, move or delete.

Every session on screen at once

\ puts every running session on screen at once, in a grid — the app calls it swarm view. No cell is ever squeezed narrower than about forty characters of text: a tidy grid of unreadable slivers is worth less than one tall column you can actually read, so the layout gives up on being square before it gives up on being legible.

Split panes

D puts two sessions side by side in the same window, with and to move between panes, a draggable divider, and a button in the toolbar for anybody who would rather not learn the keys.

Settings that save as you change them

There is no OK button anywhere in Settings, and no Apply. What is on the screen is what is saved — change a switch and it is already changed. If a setting cannot be written for some reason, the bottom of the window says so, rather than quietly sliding the control back under your finger.

Download it The panels beside a session