Core concepts
The interface
Everything in the dashboard hangs off four surfaces: the sidebar that lists your work, the board that shows its state, the transcript you read, and the composer you drive it from.
Try the interactive demo
The homepage films show Terminals and a day with Termdeck. Select Watch the film to start, use the timeline to seek, or expand to fullscreen. The films start muted and need no sound. With the player focused, press K to play or pause, M to toggle sound, F for fullscreen, or the left and right arrow keys to skip five seconds. Closing the demo pauses playback.
The demo workspace includes conversations about debugging duplicate charges, reviewing pagination, profiling search, keyboard accessibility, webhook regression tests, and designing an export API. Each has several exchanges with findings, tool output, and verification details. Live examples continue through follow-up work, alongside the approval, plan, question, sub-agent, and terminal chats.
Responses arrive in smaller bursts with pauses between sentences and tool calls. New chats stream their first reply too. Send a prompt about one of those topics to see a longer scripted example, or stop a response with the composer controls. All demo commands, measurements, and replies are local fixtures: no coding CLI runs and no external model is called. Refreshing restores the example workspace.
The demo's Settings works on a sample account with three machines. You can add, rename, update and remove machines, sign in to and switch between Claude and Codex accounts, run health checks, pick a plan, turn on push, and edit approval rules. It is all simulated in your browser: a new machine connects by itself, checkout skips the payment page, nothing is charged, and no notification is sent. Your changes last until you close the tab.
The sidebar
The sidebar is the primary navigation at every screen size. On a phone it becomes a drawer rather than disappearing.
The top rail holds the pages: Home, Approvals, Terminals, Usage, Archive, and New chat. Below it is the chat list, grouped by project folder. At the bottom sits the live rate limit panel and your account.
The rate limit panel shows its last reading the moment the page opens, then checks for fresh numbers. While a check is running, the refresh arrow in the panel turns and the compact readout in the top bar dims. If a check fails or the provider is busy, the last reading stays on screen. A window whose reset time has already passed shows 0% until the fresh reading arrives. Signing out removes the saved reading from the browser.
Chats appear in the sidebar only for folders you have added. That is deliberate: a machine may hold hundreds of project folders and you probably care about six. Add and remove them in Settings, then Projects. Starting a chat in a folder adds it too, so with a machine connected and no projects yet, the sidebar offers New chat, where you pick the folder for your first chat. Chats running in a git worktree are folded into the base repository rather than showing up as a separate project you never added, and starting a chat inside a worktree adds that repository to your list rather than the worktree.
Starter has 2 projects and Pro has as many as you like. On Starter, adding a third opens an upgrade prompt; remove one in Settings, then Projects to make room. Starting a chat in a folder you have not added adds it, so on Starter that chat stays out of the sidebar until you have room.
Your projects lists every folder you have added, whether or not its chats can be shown right now. A folder whose machine is offline, whose machine is no longer on your account, or that has no chats on that machine any more still gets a row, with a short line saying which of those it is, so you can rename it or remove it instead of wondering where it went. The list is your account's, not one machine's, so it looks the same on your phone and your laptop.
Ctrl B collapses the sidebar on desktop and opens the drawer on a phone. While the sidebar is collapsed a toggle appears at the left of the app bar to bring it back, so the shortcut is a convenience rather than the only way. Drag the right edge to resize it, or double click that edge to reset.
Reading a chat row
Each row carries a status badge derived from what the transcript and the live stream say: running, needs you, reading, done, or failed. The same derivation drives the board, the tab title count, and the notification list, so those three can never disagree with each other.
The order chats are in
Chats are listed by when you last sent a message, and that is the same rule on Claude, Codex and Grok. An agent writing files for an hour does not pull its chat back to the top, and a chat you replied to a minute ago does not sink below one you have not touched since breakfast. The time printed on the row is that same moment, so where a row sits and what it says always agree.
Some transcripts grow too large for Termdeck to find your last message in, which is common for a Codex chat full of images. Those rows fall back to when the transcript last grew, which places them close to where they belong rather than at the end of the list. A row with no usable time at all reads Time unknown.
Nothing overrides that order, and running is not an exception. A forty minute agent run does not lift its chat above one you spoke to a minute ago. Which chats are working is shown by the coloured dot on the row and grouped properly on the fleet board, which exists for that question.
Three groups sit above the list. Pinned is your own choice of what stays at the top. Needs you is a turn stopped on an approval only you can give, so its position is the notification. Active is a window over the same clock the list is sorted by: at its default of 15 minutes it holds every chat you have sent to in the last 15 minutes, with a heading above it and a line under it marking where the window ends. Change the width, or switch it off, under Settings, then Chats.
Because Active reads the same time as the sort, it groups the top of the list and can never reorder it. Widening it, narrowing it or switching it off moves the line, never a chat.
A row marked with a terminal glyph is being driven from outside Termdeck, and the mark means the same thing on every engine: a Claude CLI holding the transcript, or a Codex rollout another client is writing. Its composer stays locked while the mark is there, because two writers on one transcript fork it.
Right click a row for its actions: pin, rename, archive, hide, copy a link to the chat, copy the session id, or open the folder it runs in.
The folder name at the end of a row carries a warning mark when that folder is no longer on the machine, which is what you see after a project has been moved or deleted. Hovering it gives the path and the machine's own reason. A folder Termdeck could not check, because the machine is asleep or the check timed out, is left unmarked rather than accused.
When the list holds chats from more than one machine, each row ends with that machine's mark: the icon and colour you gave the machine under Settings, then Machines and accounts. Hover the mark for the machine's name, or rest on the row itself for a card that names the machine, the folder, the branch and the model in full. A single machine gets no mark, since there is nothing to tell apart.
The fleet board
Clicking Home with no chat open lands on the board. It is one card per chat, grouped by run state rather than by project, across every machine and every engine. This is the view for the question "what is happening right now", when the answer spans a laptop, a desktop, and a build VM.
The line under the Home title counts what needs you, what is working, and how many chats and machines there are. The filter box beside the title matches on prompt text, project, and machine at once. Select, next to it, lets you act on several chats together, which is the fastest way to archive a week of finished work.
When no machine you have can run a turn, a card above the list says which of three things is missing and prints the command that fixes it: no CLI installed, a CLI that was never signed in, or a saved login the provider has since refused. A machine is only counted out when it says so itself, so a check that merely timed out is never reported as a machine that cannot work.
A card's status dot shows what the chat is doing now and is separate from the time under it, which is when you last sent a message. Hover the dot for details. Pinned chats keep their pinned placement whatever they are doing. Open the chat for its current run status: visible response or tool progress advances Starting to Responding even if the provider's start signal arrives late.
The Sub-agents panel keeps its current rows and count visible while it checks for updates. Its loading state is reserved for the first answer. If a later check fails, the last result remains visible with an update warning; if the first check fails, the panel reports that it is unavailable instead of claiming there are no agents. On an idle Codex chat, the Sub-agents tab shows no count while the dock is on Files. Codex keeps no list of a chat's sub-agents, so finding them means checking every Codex chat on the machine. That check runs when you open the tab, when a turn runs, or when the chat starts a sub-agent.
Each sub-agent card says how the agent ended: complete, failed, or stopped. An agent you stopped, from its card or with the turn's Stop, reads stopped in the same grey as a finished one, never in the failure red, and its row in the transcript does the same. The time on a card is how long the agent has actually been working, counting up while it runs. When the chat sends a message to an agent that already finished, the agent picks up on its original card: it goes back to running, gets its Stop again, and its time adds the new run to the old one. The message row in the transcript names the agent the way the panel does.
Pinned tabs
The strip along the top holds pinned chats. Pinning is how a chat stays one click away while you work through several at once. Alt 1 to Alt 9 jump straight to the first nine, and a draft you were typing survives the jump.
The transcript
The transcript is the chat itself, rendered from the engine's own records with the live stream layered on top.
- Tool calls fold up into one line each with a summary of what they did, and open on click. A command shows the command it ran, colored like a terminal, and only once: when the row already shows it in full, opening the row goes straight to its output. A file edit shows its diff with how many lines it added and removed, on every engine, with line numbers once the edit has landed and a new file tag on a file it created. A Codex patch takes its line numbers from the change Codex records for each file, so a file with no such record, or one that does not match the patch, shows its lines unnumbered. The card's own added and removed totals add up the rows inside it. An edit that replaced every occurrence of a string says how many places it changed. A file read says which lines it read in its row, for example lines 10-17 of 29, and shows them numbered and colored; an image it read shows large, with its name and an Open full size button. A search through
greporrglists its matches under each file with their line numbers. A Codex patch that touches several files names each one above its lines. Long output, long diffs and long files show their first lines and a Show all N lines button that opens the rest in place, so the chat is the only thing you scroll. A web search shows what it searched for and how many pages it found; open it for each page's title and site as a link, then the agent's summary of what it read. A page the agent fetched names the site on its line and opens on what it asked of the page and what came back. The one line summary counts files read and searches separately from other commands, including on Codex, which reads and searches through its shell. - Plans read as Proposed a plan with the plan's title and what you decided: Approved, Kept planning, Changes requested with your words under it, or Not answered when the request was withdrawn before you answered. Open the row to read the plan. The file the agent saved the plan to is named there rather than shown as a separate edit.
- A sub agent's row gives its task, its type, how many tool calls it made and the first line of its answer. Open it for the whole answer, the prompt it was given behind Prompt, and Open in Sub-agents for its card and its own transcript. One running in the background says so until its answer arrives. On Codex the rows that start an agent and wait for one name it, and open on the same Open in Sub-agents button.
- Background commands are named by their command when the agent checks on one or stops it: Read output of npm run dev, Stopped npm run dev.
- Skills and tools: a skill's row names the skill with its description under it. A tool from an MCP server opens on its arguments as a table, with long values cut short behind Show all, and its result as a table, text or an image. Bookkeeping the engine does for itself, such as loading a tool before using it, is one quiet line.
- Permission requests render as cards with Allow and Deny, a risk level, and the exact command or path in question.
- Plans and questions get their own cards, because they need a decision rather than an approval.
- Sub agents appear in the right hand dock: what is running, what finished, and what it is currently doing. Open a row to read the delegated task and the agent's own transcript.
- Retries are named. A turn that stalls because the provider returned a retryable error says "retrying" rather than sitting silent, which is the difference between a slow run and a stuck one.
Beside the chat's title the header lists its project, model, branch, pull request, account and sub agent count. When the header is too narrow for all of them it drops whole facts rather than cutting each one short: sub agents and account go first, then model and branch, then the rest. Whatever the header dropped is listed at the top of the ⋯ menu.
At the right of the chat header sits the context strip: how much of the model's window the conversation is using. Open it for the breakdown of what is filling the window, and for the Compact button when it is getting full. Until a chat has finished a turn there is no count to show, and the strip says "no reading yet" rather than disappearing.
The composer
The composer is where you send prompts and where every per chat control lives.
| Control | What it does |
|---|---|
| Model | Picks the model for this chat, from the catalog the CLI itself reports. Each row shows the exact model name it will run, the usable context window, the model's available thinking range, and any optional speed tier the catalog advertises. Rows name their engine only under the ★ favourites tab, the one list that can mix engines. Claude models that can run on a 1M window are listed and run on it only; see Claude's 1M context window. An empty list means the CLI could not answer, which is a login problem rather than a picker problem. The menu prints the machine’s own reason and a Fix this in Machines & accounts button that opens that machine’s card with its sign ins already expanded. |
| Permission mode | How much the agent may do without asking. See Approvals and permissions. |
| Thinking level | The reasoning effort dial, on models that have one. Lower levels favor speed and lower token use; higher levels spend more time and tokens on depth and checking. The menu explains each level, and the open chat's options card explains the selected one. Models without a dial say so rather than inheriting stale choices from another model. |
| Show thinking | Claude only. Whether the agent's reasoning is recorded into each turn, one click down from it. See Showing the agent's reasoning. |
| Attach | The paperclip. Images and files; you can also paste a screenshot straight into the box. |
| Dictate | The microphone. Voice input using the browser's own speech recognition. Nothing is uploaded for transcription. |
| Send and Stop | The white round button. An arrow sends; while a turn is running and the box is empty it shows a square, which is Stop. Send dims while the box is empty and while an approval is waiting on you, so Allow is the one bright button; Stop stays lit. |
| Steer or Queue | Appears beside Send when you type during a running turn. Its label says what will happen: Steer delivers the message into the running turn, Queue holds it for the next one. |
Above the message box sits the tray, one row for each thing the chat has to tell you: what it is doing right now (a dot and a word, such as Idle, Responding, Awaiting approval or Waiting for your answer), the agent's to-do list, a message waiting in the queue, a lock notice with its Take over button, a suggested next prompt, and your attachments. A row only appears when it has something to say, and the tray disappears when none do. The to-do row shows how far along the list is and the step the agent is on now; click it to see the whole list, and click again to fold it. On a phone an idle chat shows no status row, and with the keyboard up the tray shows only its first row.
Drafts persist per chat, so switching away and back does not lose what you were typing, and neither does a reload.
Drag the composer's top edge to make the message box taller, or use the arrow keys once it has focus. Double click that edge to reset it. The height is the only thing that moves: the controls under the box stay where they are, at the size they were, however tall you make it. Termdeck remembers the height you chose.
Slash commands
Typing / opens a command palette. Each row shows what the command does, what arguments it takes, and a badge when it comes from this project or a plugin rather than from your own machine. The descriptions are read off disk, so your own commands and skills are described the same way the built ins are, and searching matches descriptions as well as names, which helps when you remember what a skill does but not what it is called. Keep typing past the command name and the row stays up as a reminder of its arguments.
The list covers built ins such as /compact, /clear, /context and /model, whatever your engine's CLI advertises, and any commands or skills defined for this project. Codex is the exception in one way: it has no slash commands of its own, so picking one there sends the text to the model rather than running a command outright. Only /compact sent on its own runs as a command there: it compacts the chat, the same as the Compact button.
Starting a message with # is handled by Termdeck rather than the engine: it appends that line to the project instruction file. See MCP and project context.
Prompt history
The up arrow walks back through what you have sent in this chat. For anything older, Ctrl R with the composer focused turns the box itself into a search over your prompt history: type, see every prompt containing it, take one. Esc restores what you had.
Files & agents (the dock)
The right hand dock, named Files & agents in the app, holds the project file browser and the diff view. The button at the right hand end of the chat title bar opens and closes it; so does Ctrl Shift F, and the same entry sits in the chat's More actions menu. Ctrl F searches inside the open file. It shows both the tree of the project folder and the set of files this chat has changed. Full detail is on Reviewing changes.
The dock follows your Ink or Slate theme. A filled row marks the selected file; the new, edited, and deleted labels and their colours identify Git changes. Keyboard focus has a mint outline.
The dock has three tabs. Files is the one above. Sub agents lists the agents this chat delegated to and opens each with its own transcript. Shells lists what this chat has left running. Both of the last two carry a count, and a live dot while something is still going.
Claude and Codex sub agents appear under the chat that spawned them, including when you reopen an older chat. Codex rows refresh while the dock is open and show the worker's recorded running, completed, or interrupted state. If the available records do not establish a state, the row says so. Opening a Codex row shows its own transcript without inherited parent history when Codex records that boundary. Codex workers remain view only; send follow-up instructions through their parent chat.
The Files tab is two stacked sections: the Explorer at the top, listing the project folder, and the file reader under it. Each carries its own maximise and close button, and closing both closes the whole dock. Close the Explorer on its own and the reader takes the full height, with a folder button at the left of its title bar to bring the tree back. Pressing the Files tab brings it back too. Whichever you choose sticks in that browser, across every chat, until you change it.
Drag the divider between the two to give one of them more room. On a phone it is a grab handle you can drag with a finger; with a mouse or a keyboard it is the thin strip between the panes, and the arrow keys move it once it has focus. Double click or double tap it to hand the split back to its starting proportion.
On a phone the dock opens as a full screen sheet over the chat. The same button opens it, in the top right corner of the chat header, opposite the menu button that opens the sessions drawer on the left, Esc or the phone's Back button closes it, and while it is open the chat behind it is out of reach until you close it. The sessions drawer works the same way: Back or Esc closes it, and choosing a chat closes it for you.
Background shells
A background shell is a command the agent started and left running: a dev server, a watcher, a tail -f. It outlives the turn that started it, which is the point of it and also the reason it needs somewhere to be seen. That includes one a sub-agent started for its own work: the chat keeps it running and the sub-agent reports on it when it finishes. This is Claude only. Codex and Grok do not report background commands, so on their chats the tab stays empty.
The dock's Shells tab lists them for the open chat, the sidebar marks any chat with one running, and a chat open in a Terminals pane lists its running shells above the prompt. Open a shell to read its log, tailed live while it runs. The browser keeps the last 256 KB of it as scrollback; the whole file stays on the machine.
A shell's Stop ends the command and everything it started, and the row reads stopped only once the machine confirms the process is gone. The stop goes through Claude itself, so the agent is told you stopped the command rather than seeing it die and reporting a failure. A command that ignores the polite signal is force killed. If it still survives, the row stays running and says so.
Stop all stops every running shell the same way, including one started moments ago whose process is not yet identified. A shell Claude does not stop is ended by closing the idle Claude process it runs under, and if Claude is replying in that chat at the time, the reply stops too and is recorded as stopped. A shell started in the reply that is still running is stopped on its own, and the reply carries on. As with Stop, a row reads stopped only once the machine confirms it; one that cannot be reached stays running.
The list is rebuilt from the chat's own transcript rather than held in memory, so it survives a reload and a Termdeck release. A shell that ended while nobody was watching reports how it ended rather than saying it stopped being tracked.
A shell someone ended on purpose reads stopped, in grey: stopped when you stopped it, stopped by the agent when the agent did, including when it killed the process with a command of its own. Failed, in red, is kept for a command that exited with an error by itself.
When a background command finishes, the chat picks it up by itself. You do not have to type anything. The agent is told the command ended, reads its output and carries on from where it left off, and the chat goes from idle back to running on its own. If the next thing it wants to do needs your approval, that approval arrives the way any other does: in the chat, in Approvals, and on your phone if you have push turned on. So a build you kick off before closing the tab can be finished and already acted on by the time you come back.
You can also keep talking to the chat while the command runs. Ask it for a status, send it somewhere else, change the model: the reply comes from the same agent that started the shell, so it can read the running command's output and tell you what it is actually doing. Changing the reasoning effort or the per turn spend limit is the exception. Those are fixed when a turn starts and cannot be changed under a running command, so that message begins a fresh turn instead. Your background commands keep running either way.
The other pages
Approvals
One inbox for every waiting permission across every chat and machine. Triage from the keyboard and answer in bulk when a run keeps asking the same kind of question.
Terminals
Several chats side by side, laid out like tmux with Claude Code running in each pane. Start new chats or bring running ones in, all with the mouse. See Terminals below.
Usage
Tokens and cost by project, model, and day, over a range you choose. See Usage and cost.
Archive
Chats you have archived, or that the idle rule archived for you. Nothing is deleted, and anything here can come back.
Terminals
Terminals shows several chats at once, laid out the way tmux lays out a session: panes tiled edge to edge with a status bar along the bottom. Each pane opens on a card naming the agent, model and folder. Your prompts sit on a grey band after ❯, replies and tool calls get a ● bullet, and a tool's result hangs under it after ⎿. Each pane's header shows its number, the chat's title, its project as you named it in Settings, and the machine. Codex and Grok chats use the same layout. Nothing on this page needs a shortcut; every action is a click.
Adding chats
- A running or recent chat: choose ⇄ Attach a chat on a pane, or Attach a running chat in an empty pane. The list puts chats that are working right now first. Pick where the chat opens: in this pane, split right, split down, or in a new window.
- From the sidebar: click a chat to add it, or drag it onto a pane. Drop it near an edge to split that pane on that side, or in the middle to replace what the pane shows. Chats already in a pane carry a check mark in the sidebar, and clicking one takes you to its pane.
- A new chat: click + on the status bar, or + on any pane. The new pane opens on the welcome banner with the machine, folder, agent, model and effort as buttons; click any of them to change it. Type your first message and press Enter or click ↵. The pane becomes that chat and it appears in the sidebar.
- A fresh start in the same place: type
/clearin a chat pane and press Enter. The pane turns into a new chat with the same machine, folder, agent, model, effort and permission mode already picked; change any of them before your first message. The old chat is stopped if it was working and archived, so it leaves the sidebar; unarchive it to bring it back.
Working in a pane
Click anywhere in a pane to type into it; the cursor jumps to the prompt at the bottom, so you never have to aim for it. Dragging to select text still selects it for copying. Type and press Enter or click ↵. A message sent while a Claude or Codex chat is working goes into the running turn, as it does in the chat's own message box: Claude breaks off to answer it, Codex picks it up and keeps going. It shows dimmed under the spinner until the agent takes it up, and if you stop the turn first it goes back into the prompt. On Grok, or while Claude has sub agents running, the message is queued instead and sent when the turn ends; it shows dimmed under the spinner with discard to drop it before it runs. While a turn runs, the spinner line shows how long it has been going. Under the spinner, each sub agent the chat has working gets a line: its type and task, then the tool it is using, how long it has been running, its tool calls and its tokens. They stay listed until the turn ends, and a sub agent still working in the background stays until it finishes. Next come the chat's running background shells under Shells, each with its command and how long it has been running. They stay listed after the turn ends, until the command stops. Click stop on one to end it without touching the chat, or click Shells to fold the list to one line. To read a shell's log, open the chat and use its Shells tab. Below them is the chat's to-do list, with how many items are done; the current item is in bold and finished ones are struck through. Click To-dos to fold the list to one line showing the current item, and again to open it. The list goes away once every item is done, or when you send a new message and the agent stops updating it. To interrupt it, click ■ beside ↵, click stop on the spinner line, or press Ctrl C in the pane. With text selected, Ctrl C copies it instead. Send a message to carry on from where it stopped. Click a tool's +N lines to read its whole output, and Thinking to open the reasoning. Pictures show in the pane: images you attached, images a tool returned, and any picture in the chat's folder the agent names by its path, such as a screenshot it just saved. Click one to see it full size. Video and audio files are not previewed. Web addresses starting with http:// or https:// are underlined links, in replies, in your prompts and in tool output; click one to open the site in a new tab. Under the prompt, the first line says where the chat runs: ◆ the project, ⎇ the git branch, ⌥ the worktree when the chat runs in one, and ⌂ the machine. The second line says what it is using: the model, the effort, how full the context is, an estimate of what the chat has cost at API list prices, its sub agents included, each at its own model's price (≈; on a subscription you are not billed per token), and the tokens in and out. Hover any of them for what it means. The line below that starts with the chat's state: idle, working, or needs you, then how many approvals are waiting (click it to jump to the prompt) and view-only when another program is writing to the chat. When an idle Claude or Codex chat's prompt cache has expired, the line also says cache expired, next message costs more; a fresh chat is usually cheaper, as it is in the chat's own message box. Click the mode on that line, such as accept edits on, to choose the permission mode. When a chat asks for approval, a question or a plan, its choices appear in the pane as numbered buttons; click one to answer. Choices that let you tell the agent what to do instead open a text box with a Send button; press Enter or click Send. A window with one waiting gets a ! beside its name on the tab that flashes yellow until you answer, even when it is the window you are in. A chat that finishes its turn while you are on another pane or window gets the same ! until you click its pane or switch to it. A chat that another program is writing to is view only here too.
Arranging panes
- Hover a pane for the buttons on the right of its header: + new chat, ⇄ attach a chat, ◫ split right, ⊟ split down, ⤢ zoom, ↗ open as a full chat, and × close.
- Drag the line between two panes to resize them. Double click it to make them even again. ⊞ on the status bar evens out every pane in the window.
- Drag a pane by its title onto another pane to move it there; drop it in the middle to swap the two.
- Zoom fills the window with one pane, and its tab shows
Z. Zoom again, or double click the title, to put it back.
Windows
Each tab on the status bar, such as 0:claude*, is a window with its own panes. Click a tab to switch, double click it to rename it, click the × beside it to close it (a window with chats in it asks first; the chats keep running and stay in the sidebar), and click + after the tabs to open a new one. The window you are looking at is highlighted. The marks are tmux's: * is the window you are looking at, - the one before it, # a window with new output, and a flashing yellow ! one with a chat waiting for an approval or a finished turn you have not looked at yet. Click the termdeck logo at the left of the bar to go back to Home. Your windows and panes are remembered in this browser.
On Starter a window holds up to 4 panes, a 2x2 grid. Adding a fifth to a full window opens an upgrade prompt; you can still replace what a pane shows or open another window. Pro holds up to 9 in a window.
Notifications in Terminals
The bell sits at the right end of the status bar here, with the same count it shows in the top right corner elsewhere. Popups still drop in at the top right, but they lead to panes: Go to pane switches to the window holding that chat and highlights its pane, or opens the chat in a new pane. A request for a pane already on screen shows in that pane only, with no popup. See In app alerts.
Customizing
Click ⚙ on the status bar. Every change shows at once and is kept in this browser:
- Theme: Termdeck (the default), Claude dark, Claude light, tmux classic, Solarized, or Dracula. Also the status bar colour, graphite by default, and whether the bar sits at the bottom or the top.
- Text: the font and its size, from 12 to 24 pixels. It starts at 16.
- Panes: border style, and whether each pane shows its title line. With titles off, the title and its buttons appear when you hover the pane.
- Transcript: how many lines of tool output show before +N lines, whether thinking is folded, open or hidden, the welcome banner, timestamps, and the two info lines under the prompt.
- Status bar: a 24 or 12 hour clock, and whether to show usage limits.
Reset to defaults puts all of it back. Each pane keeps your place: switch windows, leave the page or reload, and a pane you had scrolled up in is still on the same line. Only the panes in the window you are looking at are live. Panes in other windows load nothing and stay quiet until you switch to that window, then catch up at once; their tabs still show # and ! while you are away. Leave the page and every pane pauses, and coming back catches the window you are on up. Terminals needs a wide screen: on a phone the page says so and offers the way back to Home.
Settings
Settings uses a compact parent and detail pattern. On a desktop, a grouped rail stays beside the section you are editing and /settings opens Account. On a phone, /settings is the grouped index; choosing a section opens its detail page with a way back to all settings.
| Group | Section | Holds |
|---|---|---|
| Account | Account | Your profile, subscription, and any creator code you want to redeem. |
| Usage and billing | Tokens and cost by project, model, and day. | |
| Preferences | General | Machine-specific defaults for new chats: engine, model, thinking level, and permission mode. Existing chats keep their own. It also holds the account-wide reasoning switch. |
| Appearance | Choose Ink's focused midnight palette or Slate's brighter blue graphite, plus file dock startup and pane layout, line wrapping, the sidebar footer, and transcript tool colours. | |
| Notifications | Push subscription and which events are worth a notification. | |
| Chats | Auto archive after an idle period, plus what the chat list shows and hides. | |
| Workspace | Projects | Which folders appear in the sidebar and board, per machine. |
| Machines and accounts | Your machines, the CLIs on them, their sign ins, and diagnostics. | |
| Approvals | Auto allow rules and the hard deny switches. | |
| Data | Archived chats | Chats moved out of the active sidebar, with controls to restore them. |
| Data and reset | Restore layout defaults without erasing preferences, or clear all of this browser's Termdeck data. |
Every section is deep linkable, for example /settings/approvals, so a bookmark or support link lands on the right panel. Switches and menus save automatically and show a short confirmation only after the save succeeds. Approvals keeps its explicit Save changes action because its rules are reviewed as a set.
To find a setting without knowing its section, type in Search settings at the top of the rail. It lists every setting whose name or description holds your words, grouped by section, and common synonyms work too: budget finds the spend cap and log out finds Sign out. Pick a result to open its section with that setting scrolled into view and ready to change. Press Escape or clear the box to go back to browsing.
Quick settings
Click your profile picture, at the right of the top bar, for the handful of settings worth changing mid-flow:
- Theme, which applies as you pick it, so you can see both before choosing.
- Play a sound, the mute for the alert a focused tab makes.
- Show chats, one switch per engine: Claude Code, Codex, Grok Build.
- Hide empty chats, for chats with no message yet.
- Show last prompt, the prompt of the turn you are reading, pinned over the top of the transcript once that prompt has scrolled out of view.
These change the same settings the Appearance, Notifications, and Chats sections hold, and the menu stays open while you flip them, so turning off two engines is two clicks rather than a trip to Settings and back. Settings and Log out sit at the bottom of the same menu, and the gear beside your picture still goes straight to Settings in one click.
Keyboard shortcuts
| Keys | Action |
|---|---|
| Ctrl B | Collapse the sidebar, or open the drawer on a phone |
| Ctrl Shift F | Open the project file explorer in the dock |
| Ctrl F | Find inside the file open in the dock |
| Ctrl R | Search prompt history, with the composer focused |
| Alt 1 to Alt 9 | Jump to a pinned tab, or go to that pane on the Terminals page |
| Ctrl C | Stop the running turn in the focused Terminals pane, when no text is selected |
| Esc | Close the open menu, sheet, or dialog |
Layout is per browser, not per account, so the sidebar width you like on the desktop does not follow you onto the phone. Settings, then Data and reset restores layout defaults without changing preferences.