Working in the terminal
Last updated: 2026-11-01
A window holds terminal tabs, and each tab can be split into panes, side by side or stacked, each pane with a shell of its own. A shell runs on a host you connect to, or, on a Mac, on the Mac itself.
Desks, panes and tabs#
A window holds desks, named in the strip along its top: each desk is a place to work on one thing, as CDE's desktops were. A desk holds panes, side by side or stacked, and a pane can hold several tabs, shells and pages, one shown at a time. Every pane has a thin bar above it with its tabs, and at its right the pane's own buttons: New Tab (+), the globe (Open a Page as a Tab), and, where panes can be split, Split Left and Right and Split Top and Bottom. A button of a pane's bar acts on that pane, whichever pane you were working in.
The Mac's Shell menu opens more. An iPad with a keyboard has the same keys, but for New Window and Close Window.
- New Window (Command-N), on the Mac, opens another window with a shell on the Mac, in your home folder.
- New Desk (Shift-Command-T), or the + button in the strip, opens a new desk with a shell on the host of the pane you are working in. On the Mac, beside a shell on the Mac, the new one is on the Mac too, in the same folder; from a page such as Hosts, it is a shell on the Mac in your home folder. On the iPad, with no pane to follow, it shows Hosts, to choose one.
- New Tab (Command-T), or the + in a pane's bar, opens a shell as a new tab of that pane, on the same host.
- Split Left and Right (Command-D) puts a new pane beside the one you are working in; Split Top and Bottom (Shift-Command-D) puts one under it. The two split buttons in a pane's bar do the same for that pane. The new pane opens on the same host — or, beside a shell on the Mac, a shell on the Mac in the same folder. Split again to make more panes. The iPhone shows one pane at a time and has no splits (see On the iPad and iPhone).
- A page opened from a shell — a port it listens on, a link it prints — opens as a tab of that shell's pane on the iPad and iPhone, so each has the whole width in turn; on the Mac it opens in a pane beside the shell. The globe in a pane's bar opens one as a tab of that pane on every device: a port its shell listens on, or Web Page.
- Drag the line between two panes to change their sizes. Double-click it (double-tap it on the iPad) to give the two panes beside it the same size.
- Equalize Splits (Control-Command-=), also in the ⋯ menu, gives every pane of the desk its even share, split by split.
- Zoom Pane (Shift-Command-Return) shows the pane you are working in alone, over the whole desk; do it again (Show All Panes) to see the desk's panes as they were. The arrows at the right of a pane's bar do the same, and so does a double-click (a double tap on the iPad) on the bar's empty part. The other panes keep running behind it, and the desk's pill shows the arrows while one is zoomed. Working in another pane — from Running, a notice, or a split — shows them all again. Zooming changes only what you see: the desk stays split, on your other devices too.
- Select Next Desk (Shift-Command-]) and Select Previous Desk (Shift-Command-[), in the Window menu, move along the strip; the page at its start, such as Hosts, counts as its first. Command-1 to Command-9 show the desk of that number.
- Select Next Tab (Control-Tab) and Select Previous Tab (Control-Shift-Tab) go round the tabs of the pane you are working in. Click or tap a tab to show it.
Click in a pane to type in it; it is then the pane you are working in, the one the menus act on. A tab that waits for you shows an amber dot in its pane's bar, and its desk and Running are marked as for any shell.
Moving tabs and desks#
There are two things to drag: a tab, to take that tab somewhere, and a pane, to move it with all its tabs. Drag a tab by its name in its pane's bar; drag a pane by the grip (☰) at the start of its bar, or by the bar's empty part. On the iPad, touch and hold, then drag. The pane under the drag is marked with what a drop there would do — New Split, Add as Tab, Move Here, Swap or Add as Tabs.
A tab:
- On a pane's bar: it becomes a tab of that pane, before the tab you drop it on, or last on the bar's empty end. Drop it on its own bar to change the order of the tabs.
- On a pane, near a side: the pane splits, and the tab takes that side — left, right, top or bottom. Near the middle of the pane, it becomes one of its tabs.
- On a desk in the strip: it becomes a tab of the pane you were working in on that desk. On the strip's empty end, it becomes a desk of its own.
A pane, with its tabs:
- On another pane's middle: the two change places (Swap). No pane is made or lost. From another desk, its tabs join that pane instead (Add as Tabs).
- On another pane, near a side: it moves there (Move Here).
- On a pane's bar, or a desk in the strip: its tabs join that pane. On the strip's empty end, it becomes a desk of its own.
Without dragging:
- Move to New Desk — the rectangle at the right of a pane's bar, or in the pane's menu — puts the tab you see into a desk of its own, next to this one.
- Swap with Previous Pane and Swap with Next Pane, in the ⋯ menu, change the places of the pane you are working in and the one before or after it — left and right in a desk split side by side.
- Merge Into, in a desk's menu, puts that desk's panes to the right of another desk's. The desks on the same host are listed first. On the iPad, panes that would be narrower than 40 columns become tabs of the pane beside them.
Drag a desk in the strip to move it: drop it on another desk to put it before that one, or on the strip's empty end to put it last. On the Mac, you can drop it on another window's strip; on the iPad, on the strip of another of the app's windows. On the iPhone, touch and hold a desk among your desks, then drag it before another.
Moving ends nothing: the shell keeps running as it was, with its connection. A desk you take its last shell from closes, with any pages left in it.
How desks and tabs are named#
A desk is named after its first shell, so its name stays as you move between its panes:
- A shell on a host by the host, as you named it in your hosts, and the folder it is in (
GPU Box · webapp; justGPU Boxin its home folder). - A shell on the Mac by its folder's name.
When several desks would have the same name, each says more, after a ·: what runs in it, and where even that is the same, a number from the second on.
A tab in a pane is named after what it shows: a shell by the program in front (claude, vim), or at its prompt by its folder's name; a page by its title, else its address. Tabs of one pane on different hosts say the host first.
Rename Desk… (Shift-Command-R), also in the ⋯ menu and in a desk's own menu (a right click, or touch and hold on the iPad), gives the desk a name of your own, kept whatever runs on it. A tab's own menu, in its pane's bar, has Rename Tab…. Clear Name gives either its automatic name again. Names stay on this device.
Closing tabs, panes, desks and windows#
Closing a tab, a pane, a desk or a window ends the shells in it that this device started, and the programs running there — on a host too, even when it keeps shells running. A shell another device started — one you opened from Running — keeps running when you close it here, so that device can take it back. To end it, choose End Shell in the tab's menu or the pane's menu (on the Mac, in the Shell menu too), or End Shells in the desk's menu.
- Close Tab (Command-W) closes the tab you are working in; its pane shows its next tab, and a pane closes with its last tab, the pane before it getting the keyboard. On the Mac, on a page with no desk open, Command-W closes the window. A tab's own menu has Close Tab too.
- Close Desk (Option-Command-W) closes the desk in front, with all its panes. A desk's own menu also has Close Other Desks, and Close Ended Desks when other desks hold only shells that have ended. On the Mac, a desk's close button (on the desk in front, or the one under the pointer) closes it too.
- Close Window (Shift-Command-W), on the Mac, closes the window and every desk in it. When it holds a desk, it asks first: "Close this window?"
Quitting SpectaShell is different: it ends nothing. Shells in keepers — every shell on the Mac, and those on hosts that keep shells running — go on, and come back in their windows, desks, panes and tabs the next time SpectaShell opens. On the iPad, a window you close with the system's controls leaves its shells running in the same way (see Shells that keep running).
When you leave a shell with exit, its tab closes by itself. If a program ends with an error, the tab stays with its last screen and a line under it that says why, such as "Process exited with code 1"; a shell on a host offers Reconnect there. Close it with Close Tab.
Shells on the Mac and on hosts#
A pane holds a shell on a host you connected to (see Hosts and connections), or, on the Mac, a shell on the Mac itself: your login shell, in its own keeper on the Mac. The iPad and iPhone have no shells of their own; every pane there is on a host.
The status line under each pane says which: "this Mac", "keeper on GPU Box" for a shell a host keeps running, or "plain SSH on GPU Box · ends with the connection" for one that ends when the connection does. A tab's tile shows its host, and a shell on the Mac has the Mac's.
Working in the terminal#
- Typing. What you type goes to the pane you are working in. Option-Left Arrow and Option-Right Arrow move the cursor by a word. Otherwise Option types the keyboard's other characters, such as é and ©; for Emacs and the shell's Option-B and Option-F, turn on Settings ▸ Keyboard ▸ Use Option as Meta: Option with a key then sends Escape and the key.
- Korean, Japanese and Chinese. Type with your device's input method as usual. The text is composed at the cursor, underlined, and reaches the program when you finish each character or word.
- A command typed with the Korean input on. When the shell cannot find a command such as
ㅣㄴ, a line under the pane says "ㅣㄴ was typed with the Korean input on. Run ls?" — the keys you meant, read from where they sit on the keyboard. Run runs it; × dismisses the line. This needs shell integration. - The cursor is a block, a bar or an underline, as the program asks, and blinks when it asks. In a pane that does not have the keyboard, a block cursor is drawn hollow.
- Scrolling back. Scroll with the mouse wheel or the trackpad, drag with a finger on the iPad and iPhone, or press Page Up and Page Down. The terminal keeps the last 10,000 lines. While you are scrolled back, new output does not move what you read; typing takes you back to the bottom. In a full-screen program (an editor,
top, Claude Code's full-screen mode), Page Up, Page Down and the wheel go to the program; Shift-Page Up and Shift-Page Down always do. - The scroll bar shows at the terminal's right edge while you scroll or are scrolled back. Drag it, or press in its track to move a page, and hold to keep going. Settings ▸ Shell ▸ Scroll Bar chooses While Scrolling, Always, a bar at the right that keeps its place, or Off. A full-screen program keeps its own history, so the bar has nothing to show there.
- The bell. When a program rings the bell, the terminal plays a sound, flashes, or does nothing, as Settings ▸ Shell ▸ Bell says: Sound, Flash or Off on the Mac, Flash or Off on the iPad and iPhone. A bell in a pane you are not looking at also marks it (see When a program wants you).
On the iPad and iPhone, the key row above the on-screen keyboard has the keys it lacks: esc, tab, ctrl, the arrows and more (see On the iPad and iPhone).
Selecting, copying and pasting#
- Drag across text to select it. Double-click selects a word, triple-click a line, and Shift-click extends the selection.
- Copy (Command-C), Paste (Command-V) and Select All (Command-A) are in the Edit menu. A right click on the terminal offers Copy, Paste and Select All too.
- A long line that the terminal wrapped onto several rows is copied as one line.
- Paste from History… (Shift-Command-H), in the Mac's Edit menu, opens a menu at the cursor of the last 20 texts you copied from or pasted into a terminal on this device, newest first; choose one to paste it again. A text over 1 MB is not kept. The list lives only while SpectaShell is open, and is never saved, since it may hold passwords; Clear History at its end empties it.
- When a program uses the mouse (
htop, an editor with mouse support), clicks go to the program. Hold Shift while you drag to select text instead — with a Mac's mouse or trackpad, or an iPad's. - On the iPad and iPhone, touch and hold to select a word, then drag to extend the selection; a menu offers Copy, Paste and Select All.
- A program in the terminal may put text on your clipboard, such as a "copy" key in a command-line tool. Programs can never read what is on your clipboard.
Finding text#
Choose Find… (Command-F) in the Mac's Edit menu, or Find… in the ⋯ menu on the iPad and iPhone. A find bar opens over the terminal; on the iPhone, the system's find bar.
- As you type, the most recent match is selected, and every match is marked. The bar shows where you are, such as "3 of 12", or "No matches".
- Press Return or Command-G to go to the match before (further back in the history), and Shift-Return or Shift-Command-G to the one after. The Edit menu has the same as Find Next (Command-G) and Find Previous (Shift-Command-G).
- Upper and lower case do not matter, and in plain text accents do not either. A long line that the terminal wrapped onto several rows is searched as one line.
- Click .* to search with a regular expression, such as
loss[=:] ?nanor^Epoch \d+. If the expression has a mistake, the bar says "Not a regular expression". - Click All Tabs to search every shell of the window, in every tab, not only the one you are in: going past the last match of one moves on to the next, and shows its tab.
- Press Escape, or click Done, to close the bar.
The search covers the whole history of the terminal, not only what is on the screen.
Opening links#
Addresses that programs print are links.
- On the Mac, hold Command: the link under the pointer is underlined. Command-click it to open it. On the iPad, Command-tap it with a keyboard, or Command-click it with a trackpad.
- Right-click a link (touch and hold on the iPad and iPhone) to choose Open Link or Copy Link.
- An address on the shell's own machine, such as
http://localhost:8188, opens in a page beside the pane: on a host, it is that host's port, reached through the connection, so a notebook or a development server there opens as it would on the host. - Another web address opens in your default browser — or, with Settings ▸ Shell ▸ Open Web Links Beside the Shell on, in a page beside the pane. That setting starts off on the Mac, and on on the iPad and iPhone. Pages beside a shell are in Files, ports and pages.
A long address that the terminal wrapped onto several rows is still one link and opens whole.
Files a path names#
Paths that programs print are links too: a traceback's File "train.py", line 42, a compiler's src/main.c:3:5, grep -n's notes.md:7:, or a file name with an extension in ls output.
- Hold Command: a path that names a file or folder is underlined. Words that only look like paths, such as
numpy.ndarray, are not. - Command-click it, or choose Open File in its menu, to open it. A file on the Mac opens in its app. A file on a host is read from the host: a text file opens in the text viewer, anything else is downloaded and shown in Quick Look (see Files, ports and pages). Copy Path in the menu copies its full path.
- A relative path is read from the folder the command ran in, even after a later
cd. Paths printed on another machine (in ansshsession inside the shell) are not underlined: those files are not on this host.
Dropping files#
Drag files onto a terminal to type their paths, ready for a command or a coding assistant.
- On a shell on the Mac, each file's path is typed, quoted for the shell where it needs it.
- On a shell on a host, the files are first copied to your Downloads folder on the host, and those paths are typed once every copy has ended. A line under the pane shows each one's progress, with Cancel; one that fails says why, with Dismiss. Send File to Host… in the ⋯ menu picks files to send the same way, and on the iPad and iPhone Send Photo to Host… picks photos.
Text and colours#
The font, its ligatures and line spacing, the Chinese font, the themes and Minimum Contrast go to your other devices through iCloud, with the fonts and themes you add; a device that never chose a font keeps its own usual one. The text size stays each device's own. Every terminal follows a change at once.
- Bigger Text (Command-+), Smaller Text (Command-−) and Actual Size (Command-0), in the Mac's View menu, change the text size, from 9 to 36 points. The usual size is 13 points on a Mac, 14 on an iPad and 12 on an iPhone. On the iPad and iPhone, set it in Settings ▸ Text ▸ Size.
- Settings ▸ Text ▸ Font: JetBrains Mono, Fira Code, Cascadia Code, D2Coding, UDEV Gothic, VT323, SF Mono, the fonts you add, and on the Mac every monospaced font installed. JetBrains Mono is the usual font; D2Coding on a device that has Korean among its languages, whose Korean is exactly two columns wide; UDEV Gothic on one with Japanese. Whatever the font, Korean, Japanese and Chinese fill their two columns, the icons of prompts such as Starship and Powerlevel10k (Nerd Font icons) are drawn, and box lines, blocks and braille join from cell to cell. A preview shows the font at its size.
- Add Font… takes font files —
.ttf,.otfor.ttc, several at once, so a font's regular, bold and italic are one font — and they go to your other devices. On the Mac, a font installed there stays on the Mac; Use on All Devices beside it takes it to your iPad and iPhone, for a font you may use on all of them (the Mac's own fonts, and fonts whose licence forbids it, are not offered). Remove takes a font you added off every device. - Ligatures joins
->,!=and the like into one sign, in a font that has them (Fira Code, JetBrains Mono, Cascadia Code). Off unless you turn it on; under the cursor the characters show apart. - Line Spacing, 0.9 to 1.2, makes the rows closer or farther apart; 0.9 fits more rows.
- Chinese: the font Chinese characters are drawn in when Chinese is your device's first East Asian language — System, the system's Chinese font, or one you added (see below).
- Settings ▸ Colours ▸ Theme: Automatic, or one theme. Automatic draws the terminal in When Light's theme while SpectaShell is light and When Dark's while it is dark, which Appearance above sets: Automatic, as the system is, Light or Dark. Each opens a list of themes to search — Catppuccin, Dracula, Tokyo Night, Solarized, Gruvbox, Nord and more, CDE and two phosphor screens of the terminals before colour, Green and Amber Phosphor. Choosing one side of a family, such as Catppuccin Mocha for dark, offers its other side for light; choosing a Phosphor theme offers VT323, the font of those terminals, which you may keep or not.
- Import Theme… reads an iTerm2 colour file (
.itermcolors) or a Ghostty theme file, and says what in it was not used; on the Mac a file can be dropped on Colours too. An imported theme is listed under Colours, with Remove, and goes to your other devices. - Minimum Contrast, from Off to 7:1 and 1.5:1 unless changed, draws text that is too close to its background a little lighter or darker, so nothing is invisible — such as a suggestion zsh writes in a colour some themes make the same as the background. Pictures drawn with blocks keep their colours.
- Restore Defaults under Text and under Colours sets that part back.
- Settings ▸ About ▸ Licences shows the licences of the fonts, themes and libraries SpectaShell includes.
A Chinese font#
SpectaShell does not include a Chinese font: one that fits a terminal is about 14 MB a weight. The one to use is Sarasa Fixed (free, SIL Open Font License), whose characters are exactly two columns wide:
- On a Mac, open the releases of Sarasa Gothic (github.com/be5invis/Sarasa-Gothic) and download
SarasaFixedSC-TTF-Unhinted— orSarasaFixedTCfor Traditional characters. It comes as a.7zarchive, which the Mac opens. - In Settings ▸ Text, choose Add Font… and pick its Regular and Bold files.
- Choose it under Chinese. It goes to your iPad and iPhone with the rest of your fonts, which cannot open the archive themselves.
When a program wants you#
A program in a terminal can tell you when it needs you — a coding agent asking for your permission or your answer, or a long command that finished — while you work elsewhere.
- The pane is ringed in amber, and its status line says "waiting".
- Its tab shows an amber dot. Otherwise a tab can show a small spinner while a program in it is at work, or how far along it is ("40%"); with none of these, its dot is green while a shell in it runs in a keeper, faint otherwise. On the Mac, the window's title in the Window menu starts with ●.
- A pane that needs you to act — it could not connect, its connection ended, its host has not been reached for a minute, or its program crashed — marks its tab and desk with a red ! instead, as Running does, and its ring and status dot are red.
- A notification says what happened ("Claude Code — Needs your permission", "build done"). Click it to go straight to that pane: its window comes forward, its tab is chosen and you can type there. You get none about the pane you are looking at. SpectaShell asks to send notifications the first time it has one to show.
- The bell at the right of the tab strip keeps them, newest first, with how many you have not seen; choose one to open its pane, or Mark All Read or Clear them. On the iPhone it is at the top of Hosts and in the terminal's header. What your hosts sent while you were away is there too, so you can read it after opening SpectaShell. A wait that has passed — answered elsewhere, or its program ended — stays there faded, as "No longer waiting".
- The app's icon — the Dock's on the Mac — counts the panes waiting.
- A bell rung in a pane you are not looking at marks it the same way, without a notification.
- Go to Next Waiting (Shift-Command-U), in the Mac's View menu, takes you to the pane that most recently began waiting, in any window.
- Looking at the pane — clicking in it — clears its marks.
A program that reports what it is doing, as coding agents such as Claude Code and Codex can, marks its tab as working, and notifies you when it is blocked ("Needs your permission", "Has a question for you", "Needs you to sign in") or done ("Finished"). Other programs and scripts can notify you too, for example printf '\e]9;Training finished\a'; most tools that notify iTerm2, kitty or Ghostty work here.
When a command ends after running long, while you are looking elsewhere, you get a notification with the command and how it ended: "Finished — 2 h 13 min", or "Failed — exit 1 — 25 s". Settings ▸ Notifications ▸ A Command Ends chooses after how long: After 10 Seconds, After 20 Seconds, After 1 Minute, which it starts with, After 5 Minutes or Never. This needs shell integration.
Settings ▸ Notifications also chooses what else notifies you: Needs You (a program asking for your permission, an answer or a sign-in), Finished and From Programs. What you turn off still marks the pane and its tab. These choices are the same on all your devices.
When you are away#
On an iPhone or iPad, SpectaShell hears nothing once it leaves the screen, and a Mac may be locked or off. A shell kept on a host can still reach you: turn on Settings ▸ Notifications ▸ Notify This Device on each device you want to hear on — iPhone, iPad and Mac alike. That is all: every host whose shells are kept notifies every device that has it on, as a messenger does, once one of your devices has opened a shell there. Your own Mac is one of them once it is in your hosts, as the iPad and iPhone reach it, and they have connected to it (see No local shell).
While none of your devices is in front — the iPhone in your pocket, the Mac locked, asleep or untouched for as long as The Mac Is Away says (15 minutes unless you change it) — a host's keeper tells you when a program needs you, is done or sends a notification, and when a command ends after the time you chose, as the rules above say.
- One notification, not two. While a device of yours is in front, the app tells you as it always does and the host sends nothing; once you are away, the host does and the app stays quiet.
- What comes while you are at a device is kept. An agent that began waiting while you were at the Mac reaches your phone when you leave, if it is still waiting. While I'm Using SpectaShell ▸ Notify Anyway sends everything as it happens instead.
- The Mac counts as in front while its screen is unlocked and awake, whichever app is in front or with SpectaShell's windows minimized.
- Shells started by a keeper from before notifications existed do not notify; start them again.
- A bell, a trigger's match and a connection that ended are never sent by a host: SpectaShell notices them itself, so they reach you only while it runs.
- Tap a notification to open that shell: watched if another of your devices holds it. What it said stays under the bell.
- Turn it off for a device in Settings on that device.
What the relay between your hosts and Apple can and cannot see is in Security and privacy.
Prompts and commands#
SpectaShell knows where each prompt, command and output is in your shell — bash (4.4 or later), zsh or fish — without you changing your shell's files: shell integration is loaded as the shell starts. It works in shells on the Mac and in shells a host keeps running in a keeper; a shell over plain SSH has none. With it:
- Previous Prompt (Shift-Command-Up Arrow) and Next Prompt (Shift-Command-Down Arrow), in the Mac's Edit menu, move the view from one command to the next through the history; the command you are at is marked in the left margin. Next Prompt past the last one takes you back to the bottom.
- Select Output (Shift-Command-A) selects the output of that command — or, when you have not moved, of the last command — and Copy Output copies it. Right-click (touch and hold on the iPad and iPhone) anywhere in a command to select or copy its own output.
- A mark in the left margin beside each prompt shows how its command ended: grey when it succeeded, red when it failed. On the Mac, hold the pointer over the mark to see the command, its exit status and how long it ran.
- The command's end can notify you (see When a program wants you), and is kept in History.
Settings ▸ Shell ▸ Shell Integration turns it off or on for the shells you open from then on; it is on at first. A shell you reach with ssh from a terminal is one command of the shell you typed it in: its own prompts are not marked. The bash that comes with macOS is too old for marks; zsh, the Mac's usual shell, has them. Other shells (sh, dash) start as they always did.
Snippets#
Snippets are commands you use often, saved once and run in any pane. They sync to your other devices through iCloud.
- The Snippets page, in the sidebar (a tab on the iPhone), lists them in groups, with a search field. New Snippet makes one: its Name, which the first line gives it when you leave it empty, its Text, and Press Return after it. Under Where it shows, All Hosts shows it in every pane; Chosen Hosts only in panes on the hosts you choose. A Group sorts it. On the Mac and the iPad, drag a snippet to put it elsewhere, into another group too. Edit changes it, with Delete Snippet, which deletes it on all your devices.
- Running one. The Snippets menu — on the Mac's menu bar, and on an iPad with a keyboard — lists the snippets for the pane you are working in: those for every host, and those chosen for its host. Choose one to run it there. The first nine are also Control-Option-1 to 9, numbered as the menu you see. Edit Snippets… at the menu's end opens the Snippets page.
- The side panel's Snippets shows them beside the terminal, to read before you run one: choose one to see its text, then ▶ Run, Paste or Edit.
- On the iPad and iPhone, the key row's { } key lists them (see On the iPad and iPhone).
Run sends the text and then Return, when the snippet says to press Return; Paste sends only the text. A snippet of several lines arrives as one paste, so a shell does not run each line as you would type it.
Triggers#
SpectaShell watches what programs print for lines that usually mean trouble, and highlights them:
- CUDA out of memory, PyTorch's
OutOfMemoryErrortoo - Python traceback — the first line of one
- Killed — the system stopped a program that used too much memory
- Segmentation fault
When such a line appears in a pane you are not looking at, you are told as when a program asks for you (see When a program wants you): a notification named after the trigger, with the line, and the pane and its tab marked.
Triggers are in Settings ▸ Triggers. Each has Highlight the Line and Notify, to turn either off. New Trigger adds your own: a Name and a Pattern, a regular expression (RE2, as Go reads it), which SpectaShell checks before it keeps it. Edit… changes one of the four above, which can be changed and turned off but not deleted; Edit or Delete… changes one of your own, or deletes it. Triggers sync to your other devices, and a change reaches every pane at once.
Lines of full-screen programs (an editor, Claude Code) are not watched, nor a command you type at the prompt.
History#
The History page (in the sidebar; under Settings on the iPhone) lists the commands run in every shell open on this device, newest first, by day — each with how it ended, its host and folder, how long it ran and when.
- Search them, or keep one host's commands, or only those that Failed, with the chips at the top.
- Run Again types a command into the pane you are working in, with Return, and brings that pane forward. Copy copies it.
- Clear History… forgets every command recorded on this device.
History comes from shell integration, so a shell without it records none. It stays on this device, for 30 days, and never syncs, since a command line can hold a password or a token; your other devices keep their own.
The status line and the side panel#
A line under each pane says what runs there: the program in front, where it runs ("this Mac", "keeper on GPU Box", "plain SSH on GPU Box · ends with the connection"), its folder and its git branch, the ports its programs listen on, such as :8188, and at the right the terminal's size in columns and rows (120 × 40). The dot at its start is green for a shell in a keeper, amber while the pane waits for you, and red while it needs you to act.
- Click a port to open it: on the Mac, a port of a shell on the Mac opens in your browser; a port on a host is reached from this device through Port Forwarding. Right-click it for Open Page Beside.
- View ▸ Show Status Line, on the Mac, hides or shows the line in every window.
- While a pane is not simply running — connecting, reconnecting, taken over by another device, ended — a line in its place says so, with what you can do (see Shells that keep running and When something goes wrong).
The side panel, at the right of the terminal, is about the pane you are working in. Open it with the last button in the tab strip, or on the Mac Show Side Panel (Option-Command-I) in the View menu. It fits on the Mac and on the iPad in landscape. Its three parts:
- Snippets: the snippets for this pane's host, to search, run, paste or edit.
- History: the commands run in this pane's shell, with Run Again and Copy.
- Info: the Program, Folder, Branch, Keeper, Held by — this device, while it holds the shell — and Resume, the command that resumes a coding agent's conversation; then the Listening ports, each with Forward on a host or Open on the Mac.
Good to know#
- Closing a pane, a tab or a window ends its shells, on a host too; quitting SpectaShell does not.
- A new tab or split on a host starts in your home folder there, not in the folder of the pane beside it; only a shell on the Mac starts in the folder of the pane you were in.
- Find matches within one line a program printed, not across lines (a line the terminal wrapped counts as one). All Tabs searches the shells of the window you are in, not other windows.
- Dropping text (rather than files) on a terminal does nothing; copy and paste it instead.
- On the iPad and iPhone, Find, Paste from History, the prompt and output commands and the text size have the Mac's keys with a hardware keyboard. Without one, use Find… in the ⋯ menu, touch and hold in a command for its output, and Settings ▸ Text for the size.
- The terminal keeps the last 10,000 lines of each shell; History keeps commands for 30 days.
- The text size, the key row and the other terminal settings are this device's; the font, the colours, snippets and triggers sync to your other devices.