Terminal Deck 0.15.0
Terminal Deck

Help

40 questions people actually arrive with, answered in two or three sentences each — including the ones with awkward answers.

Getting started

What it is, what it costs, and what your machine needs.

What is Terminal Deck?

One window that runs your coding agents as real terminal sessions — Claude Code, Codex CLI, Gemini CLI, or an agent you add yourself by naming the command it runs.

Every session gets a tab and a live status dot, so you can see which one is working and which one is waiting on you without clicking through them. It is a desktop app for macOS and Windows, and the same sessions open on your phone or in a browser.

What does it cost?

Nothing. It is free and MIT-licensed, there is no account and no paid tier, and nothing in it is held back for a version you have to buy.

You pay whatever your agent’s own provider charges you, exactly as you would running that CLI in your own terminal.

Which computers does it run on?

macOS 12 or newer on Apple silicon, and Windows 10 or newer on x64.

There is no Intel Mac build, because macOS 27 dropped Intel Macs entirely; there is no Windows-on-ARM build either, though Windows on ARM runs the x64 one under emulation. There is no Linux window at all — see Is there a Linux version?

Do I need Claude Code, Codex or Gemini installed already?

Yes. At least one of them has to be on your machine and already signed in before Terminal Deck is of any use, and the sign-in happens in the CLI itself, in a terminal, exactly as it would without this app.

Terminal Deck installs none of them and never asks you for a login or an API key. There is no field anywhere in it to type one into.

Why does my computer warn me the first time I open it?

On macOS the app is signed with an Apple Developer ID certificate but it is not notarised, so Gatekeeper refuses it once. Click Done — not Move to Trash — then open System Settings → Privacy & Security and click Open Anyway. Right-click → Open no longer works; macOS 15 removed it.

On Windows the build is not signed at all, so SmartScreen puts up a blue panel and hides the button behind More infoRun anyway.

If you would rather not take either on trust, every release lists the SHA-256 of every file, and a build you compile yourself carries no quarantine flag at all. The whole walkthrough is on the download page.

Agents and accounts

The three agents, your own, and running more than one login at once.

Which agents can it run?

Claude Code, Codex CLI and Gemini CLI. All three are offered wherever the app asks which agent to start, and you can set a default per project or one for the whole machine.

A session is that agent’s own binary running as a subprocess on a pseudo-terminal, so anything your CLI does in your own terminal it does here.

Can I add an agent that is not one of the three?

Yes. You name the command it runs and it appears beside the others when you start a session.

It gets a tab and a status dot like anything else, because the status is read from what the session draws on its own screen rather than from anything specific to one agent.

Can I run two accounts for the same agent?

For Claude Code and Codex, yes. An account is a separate configuration directory — CLAUDE_CONFIG_DIR and CODEX_HOME — so two sessions pointed at two directories are two different logins, with separate history and separate transcripts. Choose one per session, set a default per project, or set one globally.

Gemini is listed and refused, with the reason on the row: its token lives in a single keychain slot that no configuration directory moves, so a second sign-in would overwrite the first rather than sit beside it.

Your existing login shows up as an account the app will not rename, move or delete.

Why is usage empty on my Codex or Gemini session?

Token and context usage, the session inspector and session search all read Claude Code’s own JSONL transcripts under ~/.claude/projects/.

Codex and Gemini sessions run perfectly well — they simply do not write the file those panels read, so there is nothing for them to count. The terminal, the browser, the phone and everything else work the same for all three.

Why does it never tell me what a session cost?

Because no honest number is available. An API price misleads somebody on a subscription, and a subscription price cannot be computed from anything any provider publishes.

So the app reports tokens, cache hit rate and how much of the context window is left, and no panel anywhere shows money. That was removed deliberately rather than never built.

What is the copilot?

An assistant for the app itself, pinned above the session list. It can see your sessions, read their transcripts, start new ones and change settings, and it keeps a memory of your conversation with it.

It runs inside the same sandbox as a session started from another device: it cannot read your home directory, your SSH keys, your keychain or another account’s login. Because the keychain is closed to it, it starts signed out, and says so on its own first screen.

Its routines run on something happening rather than on a clock — a session finishing, a session failing, git state changing, a file changing.

Your phone and other machines

Reaching a session from somewhere else, and what that costs you in trust.

Can I use my sessions from my phone?

Yes. A paired phone, or any browser at app.terminaldeck.dev, can attach to a session that is already running — with its scrollback replayed — or start a new one, and can hold several machines at once.

The web client needs nothing installed and is available now. It is on its own hostname because a browser keeps stored credentials apart by origin.

Is there an iPhone or an Android app?

The iPhone app is on TestFlight, internal testing only. It is not on the App Store and no submission has been made.

The Android client is a signed APK on the releases page — a real download, listed on the download page. It is not on Google Play, so Android asks you once to allow installing from your browser, and it cannot update itself.

On an iPhone today the web client is the answer: app.terminaldeck.dev in Safari needs nothing installed and can be added to the home screen.

Do I need a VPN, port forwarding or a static IP?

No, and there is nothing for you to set up. Your machine dials out to Terminal Deck’s own rendezvous relay at relay.terminaldeck.dev and holds the link open, the client dials out too, and the relay staples the two together.

Nothing is forwarded and nothing listens for an inbound connection. The switch is in the Remote panel in the sidebar, and turning it off is remembered.

Can the relay read what I type?

No. The two ends run a Noise IK handshake — the pattern WireGuard uses — and every payload is sealed under keys the relay never sees, so it cannot read a command, inject a keystroke, or sit in the middle of the handshake without failing to decrypt on the first frame.

It learns that a machine is online and how many bytes moved. It holds no account and no database: a machine’s name maps to an open socket in memory only, and nothing about that survives a restart of the relay.

To be exact about what is not claimed: the relay keeps no per-connection log, but it sits behind an ordinary reverse proxy on a rented server. The guarantee is about content, and it is structural — the keys are not there.

How do I pair a phone or another computer?

Open Remote on the machine and it shows six digits. Type them into the client, then approve the device on the machine — redeeming the code does not pair anything on its own, it creates a device waiting for your approval.

The code lives sixty seconds, is single-use, and dies after five wrong guesses. There is no QR code and no pairing link; both were deleted rather than hidden, because a link is a live secret that has to travel through a messaging app to be useful.

The same six digits pair one computer to another. That has been run end to end against the real relay with both ends in one macOS process — a Mac has never talked to a Windows PC.

Can my phone open a dev server running on my desktop?

Yes — the client lists the ports something is listening on, and you tap one.

It is a raw TCP byte pipe rather than an HTTP proxy, so WebSockets, hot reload, service workers and cookies survive untouched. Only loopback is dialable, only ports that are live right now, and only after a person taps one.

If I grant a device one folder, is it locked to that folder?

No. Read the wording literally: the machine that owns the files decides which folders each paired device may start a session in. That is organisation, not a sandbox.

A shell that starts in a granted folder can cd anywhere your user account can reach. The boundary is pairing plus your approval on the machine, not the folder list.

Servers and the headless host

Linux, a box with no screen, and what survives a restart.

Is there a Linux version?

There is no Linux window and no Linux desktop build.

The same core does run as a headless host — plain Node, no Electron in the process — which is what makes a Linux server or a WSL distribution a machine your phone and your desktop can open a session on.

What is the headless host?

Terminal Deck without a window: a background process that joins the relay and serves sessions, driven from a phone or from Terminal Deck on another computer. Eight commands, no configuration file, and no Electron.

It is what turns a box you have no screen on — a rented server, a spare machine, a WSL distribution — into one more machine in your deck. One line installs it: curl -fsSL https://terminaldeck.dev/install.sh | sh, which is on the download page with what it writes and how to undo it.

Can I manage a server that has no screen?

Yes, from its own page — on your phone or on the desktop. Restart, stop or start the host over the relay, and connect GitHub there, so an address that has gone offline is not a dead end.

The copilot runs on a server too, with your phone as its screen, because the server has none of its own.

Do my sessions survive closing the app?

Nothing keeps running while the app is closed — a session is a real CLI process, and closing the app ends it.

What survives is the conversation. Claude Code writes every turn to its own transcript, so a restored session is handed its resume flag and comes back continued rather than fresh, with the last part of the conversation painted back above its own output.

That replay is a read, never a re-run: nothing is sent to the CLI, no command re-executes, and nothing is summarised.

Commons and publishing

The community catalogue, how to read a listing, and how to put one up.

What is Commons?

The community catalogue at terminaldeck.dev/store: skills, instructions, hooks, MCP servers, browser extensions, routines and open-source tools that other people published, each under their own name at terminaldeck.dev/@handle.

Reading it needs no account and no JavaScript — the whole catalogue is on one plain page. Publishing and posting need an account, and sign-in is GitHub or Google.

Does Terminal Deck sell any of this?

No, and no money passes through this site. Terminal Deck lists these things; it does not endorse them and it never handles payment.

A paid listing shows the price its publisher stated and one link to the publisher’s own page. You buy it there, from them, under their terms.

A person does read every first version before it appears — that is a safety check on what it would do to somebody’s machine, not a recommendation.

How do I judge a listing before I install it?

Start with the tier, which is the short answer to how much of your machine it can touch. Tier 1 is text only and nothing runs; tier 2 ships scripts your agent may run; tier 3 runs a program on this machine.

The needs line under it says whether it also wants Node, Python, an account somewhere, a key you supply, or another app installed.

Every listing is pinned to one commit and a sha256, never a branch, so what a person reviewed is exactly what you install — and the shelf does not move when a new version ships upstream until that version has been read too.

Why does a listing show no rating or install count?

Because there is not enough behind it yet to mean anything. An install count appears only once a listing passes ten, and a rating average only once it passes five votes.

Below that the page shows nothing at all rather than a number that would mislead you. A store printing five stars off a single vote is lying.

How do I publish something?

Paste the address of your public repository on the publish page. It is read and you are shown exactly what would be listed before anything is created.

The repository can be on GitHub, GitLab or Codeberg, but signing in to publish is GitHub, because only GitHub can confirm you can write to the repository you are listing.

Your publisher name goes into every address your work is published at and cannot be changed afterwards, so choose it deliberately.

What happens after I press Publish?

The listing is created as a draft and its first version goes into a queue. A person reads the files, the manifest and what it would do to somebody’s machine, then approves it, refuses it with a reason you will see, or bans the account.

Nothing appears in the store until that has happened. Afterwards, updates that do not change the risky parts publish themselves.

Nothing is emailed to you — Commons has no mailer. Your account page is where it says what happened.

Can I delete my Commons account?

Yes, from your account page, and it cannot be undone. Your listings come off the store, your name, picture, bio and links are erased, and your sign-in is deleted.

Your handle stays reserved so nobody else can publish under it. What you wrote in discussions stays, so other people’s threads still make sense, and copies of your work that people already installed stay on their own machines — nothing here can reach those.

Privacy and security

What is collected, what is written down, and what is deliberately not defended.

What does the app collect about me?

Nothing. There is no account, no analytics, no telemetry and no crash reporting, and the source contains no analytics SDK of any kind.

It makes one network request of its own: it fetches the public release feed on GitHub to see whether a newer version exists. No identifier, no version history and no machine fingerprint goes with it, and nothing downloads or installs unless you press the button.

It also holds a link open to the relay, so a phone you have already paired has something to attach to. That link says only that the machine is online, and the switch for it is in the Remote panel.

Does Terminal Deck see my prompts or my code?

No. A session is the real claude, codex or gemini binary running as a subprocess — there is no proxy, no wrapper and no interception, so when it contacts its provider it does exactly what it would do if you had typed the command yourself.

Your prompts, your code and your files are handled under that provider’s policy, not ours.

What does it write to my disk?

One folder of its own: your settings, the projects you have opened, your agent accounts, dashboard layouts, the copilot’s files and its action log, your routines, the devices you paired and their keys, and a rotating application log capped at about 1.5 MB.

The only thing outside that folder is a backup of an agent CLI’s own settings file, taken before hooks are first written into it. None of it is synchronised or uploaded, and deleting the folder deletes all of it.

Settings → Advanced lists the real paths on your machine and opens them, which is more reliable than a path printed on a web page.

Is the agent sandboxed from my files?

No, and that is a decision rather than an oversight. Terminal Deck runs the agents with your permissions and does not confine, filter or review what they do — the same as running them in your own terminal.

What is defended is everything around them: a hostile page loaded in the browser tab, the local endpoint agent hooks report to, secrets leaking through a log or a support bundle, and the relay that carries a remote session.

Does this website track me?

No. There is no analytics, no tag manager, no comment widget and no font CDN — the typefaces are served from this domain — so there is nothing here to consent to and you were not asked.

If you sign in to Commons you get a session cookie, sealed and readable only by the server, and one plain flag cookie beside it whose only job is to decide which header the page draws. Signing out clears both.

Trouble

The four things that go wrong most, and where to go when it is a fifth.

It says it cannot find my agent CLI.

A GUI app on macOS inherits a minimal PATH and cannot see a claude installed by nvm, Homebrew or into ~/.local/bin. Terminal Deck asks your login shell for its real PATH once and spawns every session with it, so if a CLI works in your terminal it works here.

If it still does not, Settings → Coding AI re-runs the check and prints the literal command it ran alongside what it concluded — so you get the command as well as the verdict.

The GitHub panel says something is wrong.

It runs your own gh CLI, so the fix is nearly always a gh command. The failures are kept apart rather than collapsed into “something went wrong” — not installed, not authenticated, an expired token, a missing scope, no remote, no access, rate limited — and each one names the command that fixes it, with the raw output behind a disclosure.

There is no notification count in it, and there will not be: the endpoints that carry one accept only a classic personal access token, which no permission can be added to change.

My MCP server is listed but will not connect.

Only stdio servers can be dialled from here. An HTTP or SSE server is listed with a note saying so rather than hidden, so seeing it there does not mean your configuration is wrong.

The panel reads the servers you already configured — user scope from ~/.claude.json, plus your per-project ones — so a server added with claude mcp add appears without being re-entered.

On Windows, some shortcuts do nothing while I am typing in a session.

That is on purpose. Ctrl W, Ctrl K and Ctrl P are readline and tmux keys, and a terminal that lost them would be a broken terminal — so while a session has focus the app claims only the chords carrying Shift or Alt. The command palette is Ctrl Shift P there.

Click away from the terminal and every chord works. On a Mac the question does not arise: belongs to the app and Control belongs to the terminal.

Where do I get help, or report a bug?

Ask in the community — four topics: help, show and tell, ideas and problems. Reading it needs no account; posting needs one.

For a bug, the issue tracker. Settings → Advanced makes a support bundle to paste into it: generated only when you ask for it, copied to your clipboard, and sent nowhere.

Everything in a bundle is passed through redaction first and it reports how many substitutions it made — but redaction is software, so read one before you post it.

Not here?

Four places that go further than a paragraph can.

  • Docs — what every panel does, and the shortcuts the app really dispatches.
  • Features — everything in the app today, and a list of what is not.
  • Community — help, show and tell, ideas and problems. No account needed to read.
  • Issue tracker — for a bug, with a support bundle from Settings → Advanced.