The interface in a terminal
Run isc with nothing after it and insensical draws in the terminal you're in, with no window. It's handy when you'd rather stay in a terminal, on a machine with no desktop, and on one you reach over ssh:
ssh build-host -t isc
isc --host buildThe first runs the interface on the other machine and sends its screen through ssh. The second runs it here, on the other machine's daemon: see Other machines, over ssh.
It's another client of the same daemon: what you do in it shows in a window at once, and the other way round. Press Ctrl+Space then D to leave; nothing ends.
isc tuiis the same thing in full. It takes the optionsisctakes before a command:--host,--socketand--rights.isc --helplists the commands. So doesiscalone where there's no terminal to draw in (a script, a pipe) and inside one of insensical's own panes.
What it needs:
- A terminal to draw in. It works from 20 columns by 6 rows. Under 76 columns the list of projects is left out.
- A Nerd Font, since every icon is one. Ghostty, kitty, WezTerm and insensical's own panes carry the icons themselves; in another terminal, set its font to a Nerd Font or the icons show as empty boxes. If icons are cut off at the right, use the "Mono" variant (
JetBrainsMono Nerd Font Mono, say). - Colours.
colours = "auto"works them out fromCOLORTERMandTERM. Overssh,COLORTERMis often not passed on, so if colours look coarse setcolours = "truecolor"under[tui].
What's on the screen:
- The top row has the tabs of the project in front, and a
+to open a tab. At the right are the counts of what finished and what needs you, and the leader's key. Press the counts to go to the next pane that needs you. - The list at the left is your projects, one to a row, each with the state of what runs in it.
- Each pane is in a box, with its name and its state at the top, and how long it has needed you. The focused pane's box is in the accent colour, and a waiting one in its waiting colour.
- The line at the foot says what your keys are doing (
PANE,MENUafter the leader,LIST,LOCKED), where the focused pane is, and the keys you'll want most. - The dock, under the panes, has a pill for each pane you've minimized in the tab.
Show only activity. Press Ctrl+Space then Y (activity) to turn the list at the left into the panes that are at work or need you, under their projects' names. The same key turns it back. It follows the rules in "Showing only activity" under The sidebar. Click a row to go to its pane.
Ctrl+Space then } and { walk the rows (next-activity, previous-activity), whether the list is on or not. While it's on, Ctrl+Space then A goes to the next pane that needs you or has finished.
Keys. Commands follow the leader, Ctrl+Space, and the keys after it are those of the leader keymap: T opens a tab, Shift+S and S split right and down, H J K L move between panes. While the leader waits, a panel at the foot lists every key that can follow.
| Keys | Does |
|---|---|
Ctrl+Space then Space | The palette |
Ctrl+Space then Shift+/ | Lists every key |
Ctrl+Space then C | Copy |
Ctrl+Space then Shift+V | Paste |
Ctrl+Space then Ctrl+F | Find text |
Ctrl+Space then Ctrl+A | Select everything |
Ctrl+Space then Shift+Up / Shift+Down | Go to the command before and after |
Ctrl+Space then PageUp / PageDown | Scroll (scroll-up, scroll-down) |
Shift+PageUp / Shift+PageDown | Scroll without the leader |
Ctrl+Space then Shift+X | Give every key to the program |
Ctrl+Space then Shift+A | Ask to set up the agents |
Ctrl+Space then Shift+U | The restart question: restarts the server onto the installed version, or says what to run |
Ctrl+Z | Goes to the program in the pane |
- The keys are the window's. Your
keymap,leader,[keys],[keys.leader]and[keys.direct]are read as the window reads them. - The leader always works here, whichever keymap you use, because your terminal may keep a chord for itself. Your own chords work too where the terminal tells keys apart (Ghostty, kitty, WezTerm, foot and others that speak the Kitty keyboard protocol) and doesn't take the chord first. To free a chord, unbind it in that terminal.
- To get the keys back when locked, press the leader then
Shift+X, clickLOCKEDat the foot, or press the chord that locks (Ctrl+Alt+Shift+Lby default). - To stop the interface itself, send it
SIGTSTP(kill -TSTP) and bring it back withfg. - If you unbind the key that leaves,
Ctrl+SpacethenShift+D,Shift+QorCtrl+Dleaves, or elseD. - Closing a tab, closing a project and putting a project to sleep ask first. A project that's asleep says so where its panes would be;
Enterwakes it.
The palette lists what the window's lists, in the same order: see The palette. Here it also has the terminal theme (see Themes below), copy, paste, select-all and find, and Recent, the last five commands you chose. These commands exist only here and have no default key; give one a key under [keys.leader] if you use it often.
| Palette entry | Command | What it does |
|---|---|---|
| Rename this project | rename-project | |
| Close this project and everything in it | close-project | |
| Move this project up / down the list | move-project-up, move-project-down | Moves it in the list, as dragging its row does. |
| Move this pane to another tab | move-to-tab | Lists every other tab; Enter puts the pane at the right of that tab's panes and takes you there. |
| Choose this project's icon | project-icon | See below. |
| Go to a machine; the Remote Hosts and Hub pages | go-to-machine, settings-hosts, settings-server | See below. |
Choose a project's icon:
- Open the palette and choose "Choose this project's icon". Colours are across the top and marks below.
- Type to narrow the marks (
git,rust,docker).UpandDownmove through the marks,LeftandRightthrough the colours. The first colour, "by name", is the one that comes of the project's name. - Press
Enterto set it, asisc project iconwould.Escapeleaves it as it was.
The first mark is the folder. A project with a drawing of yours (an SVG) shows "Keep your drawing" first. Only marks a Nerd Font has a sign for are listed.
A new project asks for a directory to work in, or only a name. A directory is written from / or from ~, and Tab goes into the one marked. One that isn't there is made after one more Enter.
Lists and sheets open over the panes and take your keys until they close; the line at the foot says LIST. Esc closes any of them.
| List | Keys | Does |
|---|---|---|
| The palette | Up, Down, Tab; PageUp, PageDown; Enter | Moves and chooses. |
Every tab (overview), Ctrl+Space then W | Arrows or H J K L; Enter; Tab | A card for each tab of every project. Enter goes to the tab; Tab narrows to tabs with a pane that needs you, and back. |
Find a file (pick-path), Ctrl+Space then / | Up, Down; Enter; Tab; Backspace | Type a few letters of a file or directory under the pane's directory. Enter types the path into the pane, Tab goes into the directory marked, Backspace on an empty field comes out of it. |
Find text, Ctrl+Space then Ctrl+F | Enter or Up; Shift+Enter or Down; Esc | The match is selected, so C copies it. Enter or Up goes to the one before, Shift+Enter or Down to the one after. |
| Every key | Up, Down, PageUp, PageDown; Esc or Enter | Type to narrow it. |
| Go to a machine | Up, Down, K, J, Tab; Enter | Lists this computer and each machine under [hosts], each tried as the list opens: reached, not reached, ssh asks. The machines you leave carry on. |
The settings sheet is Ctrl+Space then ,. It has three pages: Settings, Remote Hosts and Hub. 1, 2 and 3 go to a page, as does a click on its name. The bottom line says what the keys do on the row you're on, and Esc closes the sheet. The palette opens the other two pages directly: "Remote hosts: add, rename or forget a machine" and "Hub: browsers, phones and devices".
Settings lists every setting in sections, and a change is written to your file at once. A dot after a name means your file changes it.
| Setting type | Keys |
|---|---|
| Any | Up and Down (or K and J) move; Tab goes to the next heading; Backspace puts the setting back to its default. |
| On or off | Right on, Left off, Space or Enter turns it over. |
| Two values | Left takes the first, Right the second, Space or Enter the other. |
| More values | Space, Enter or Right opens the list; Up, Down, Home, End or a letter move; Enter or Space chooses; Esc closes without choosing. |
| A number | − and +, or Left and Right. |
The mouse works too: click a value to choose it or open its list.
Remote Hosts lists the machines under [hosts], each tried when you open the page: reached, not reached or ssh asks.
| Key | Does |
|---|---|
Enter | Tries the machine again |
N, or Enter on "Add a remote host" | Adds one. Type what you'd give ssh, or pick from the machines of your tailnet or the names in your ssh configuration (Tab changes between the lists). |
R | Renames the machine |
Backspace | Forgets it, after asking |
A | Answers what ssh asks, in a new tab on this computer |
Hub is how this computer is reached from a browser or a phone, as the window's Hub page has it: see In a browser. With another machine shown, it only says "This is set on that computer itself."
- Open in a browser or on your phone runs
isc hub startandisc hub stop, and says the address. - Restart the hub, while it runs, runs
isc hub restart. If the hub runs an older version than the one installed, it says so. - This computer's browser opens insensical in the browser here, signed in.
- Tailscale says how it stands.
Enterturns it on or off, or signs in. Under it are the two ways in that need no switch: anssh -Lline and a proxy of your own. - Each paired device is a row with its name, what it may do, when it was last used and when it ends.
Backspaceremoves a device, after asking. - Add a device asks for a name, what it may do (Everything, Look and type, or Only look), whether it reaches your other machines, how long it stays paired, how many devices the code pairs and how long the code works. You then get the code to scan, the address to open, and the code as twelve groups to type instead.
- Send a test notification says what each device answered.
- On a hub, Joined machines lists each joined computer.
Backspaceremoves one, after asking. Invite a machine gives the line to paste on that computer, andCcopies it. See Joining another machine to your hub. - On a computer that joined no hub, Join a hub takes the line from another hub's Invite a machine and runs
isc hub join. - On a computer joined to a hub, the switch turns
isc hubon and off, Joined to names the hub and whether it's connected, and Leave the hub leaves it, after asking. Your devices are managed on the hub, so only guests are listed, and there's no test notification.
The code is drawn black on white whatever your theme, because cameras read nothing else. It needs about 49 columns and 25 rows for an address on your tailnet; in a smaller terminal you get the address alone and the size it needs.
If the server stops while you're in it, a card says "The server has gone away". The panes are empty and what you type reaches nothing, but you don't have to leave: when a server runs on that socket again, the card goes and the panes come back, as they were if the server kept them: see What survives what. Start one with any isc command or isc daemon; nothing is started for you, since the server may have been stopped on purpose. If the server becomes another version (after an update and a restart), it says so: leave, and run isc again.
The mouse goes to the pane you press, selects text, scrolls, and drags the edge where two panes meet.
- Press a tab, a project or a dock pill to go there, and the
+after the tabs to open a tab. - Press a notice to go to its pane, or its cross to drop it.
- When a new release is out, a notice says so. Press it to update, read what changed or skip that version, which isn't offered again. In the settings,
con "Check for new versions" looks now, and says when it last looked. - Drag a project's row over another's to move it in the list.
- Drag a floating pane by the top of its box, and its bottom, right side or corner to resize it.
- Press the cross on the tab under the pointer, or use the middle button on the tab, to close it.
- The middle button in a pane pastes what you last selected here.
- Hold
Shiftand the mouse is your terminal's own again, to select across the whole screen. - A web address in a pane is passed to your terminal as a link, and your terminal opens it. Only
http://andhttps://addresses are passed on. Paths aren't opened here.
A pane that a window also shows is the size that fits whichever you used last, as with two windows. When that's the window, the pane says "sized by another window" at the bottom of its box. To take the size back, press a key or a mouse button here, press those words, or run "Size the panes for this window, over any other that shows them" in the palette (lead).
Copying and pasting use your terminal's clipboard, so they work across ssh.
- The leader and then
vselects with the keyboard, with the window's keys: see Selecting with the keyboard. - The copy command is sent as OSC 52, which a terminal can be set to refuse and which Terminal on a Mac doesn't take at all.
- Selecting alone sends your terminal nothing. What you selected is kept here for the middle button.
- Pasting with your terminal's own key always works. The paste command asks the terminal for its clipboard, which many refuse; if yours doesn't answer, a notice says so, and you use the terminal's own key.
- A paste is held and asked about as in the window: see Pasting.
- A program can put text on your terminal's clipboard only while you're known to be here: while your terminal says it has the keyboard, or for a minute after you last pressed a key or a mouse button here.
Pictures a program draws with the Kitty graphics protocol are shown where your terminal shows them itself: Ghostty, kitty, WezTerm and others that answer when asked. See Pictures. A terminal that doesn't answer gets no picture, and inside tmux or screen there are none. A picture is shown whole or not at all: while a list, a question, a notice or a floating pane lies over it, it's taken away.
Notifications. A pane that needs you says so in a notice at the foot of the list of projects, or at the top right of the panes when that list isn't shown. On a machine with no desktop, the notification is also sent to your terminal, which shows it as its own if it knows how (OSC 777), with a bell. A pane that waits or failed keeps its notice until you've gone to it. When a program in any pane of the tab in front rings its bell, your terminal rings, unless you've silenced the pane or project. Titles and text are cut and bursts are held back, as [Notifications](/notifications) says of the application.
Themes. It uses your insensical theme, the same as the window: the light or dark one of a pair, by your terminal's own background. One more theme exists only here, terminal, which is your terminal's own background, text colour and sixteen colours, so it looks like everything else you run there. Choose one in the palette: type theme. A theme chosen here is the window's too, and the other way round. Only terminal, and any theme once [tui] already names one, are written under [tui] for a terminal alone.
[tui]
theme = "terminal"- Under
terminalyour terminal's background is never painted over, so a transparent or pictured background stays. - Under any other theme your terminal's background is set to the theme's while it runs, and put back when you leave.
- Put
theme = "terminal"under[tui], not at the top of the file: the window has no terminal to take colours from.
Settings. It reads the window's own settings for the theme, the keys and motion; there is no second set. Notifications, sounds, scrollback and the rest of what the daemon does are the daemon's. A [tui] table in config.toml can say otherwise for a terminal alone about theme, activity-idle, interface-style, motion, attention-glow, type-ahead, clipboard, keymap and leader, and holds the two settings only a terminal has:
[tui]
theme = "terminal" # or any of those seven, to differ here
colours = "auto" # "truecolor", "256" or "16"
mouse = true- The window never reads
[tui]. - Only the eleven settings named above are read from
[tui]; another name there changes nothing.[keys]and its tables are read from the top of the file only. coloursandmouseare read from[tui]only.- Every one applies within a second of saving.
- A line this interface can't use is said in a notice headed Settings, and only that setting falls back to its default. Broken TOML leaves every setting at its default here.
The settings sheet lists every setting that takes effect here and is set without typing: activity-idle, interface-style, motion, attention-glow, keymap, notifications and the three notify- switches, long-command, sound, notify-command-when, notify-url-when, notify-url-body, tray, scrollback, term, type-ahead, clipboard, keep-scrollback, tmux-shim, check-for-updates, agents-at-once, agents-deep, agents-from-other-machines, and under "This terminal", colours and mouse. leader, shell, notify-command, notify-url and your own keys are set in the file.
Limits:
- One machine is shown at a time; "Go to a machine" changes which.
- A pane has no buttons: closing, zooming, floating and putting away are commands, and a double-click on a pane's name fills the tab with it. A pane isn't dragged with the mouse; the move commands,
move-to-tabandisc putdo it. - Sharing, opening and saving a project file, and "Add a machine" are the window's.
isc host addand the Remote Hosts page add a machine, andisc host setchanges its colour, icon, address andcarefulmark. isc hub open --print,isc hub publicandisc clientsgive what the Hub page doesn't: a link for this computer's browser, a public link, and who is connected.- On a small screen, lists and questions are cut to fit; under 20 columns or 6 rows it says "Needs more room".
- A key written as a sign (
?,<) works wherever that sign is on your keyboard. One written withCtrlorAltand a sign (ctrl-}) is found by where the key is on a US keyboard. - A curly, dotted, dashed or double underline is a plain one unless your terminal is known to show every colour or
colours = "truecolor"says it does. - It can't be run inside one of insensical's own panes on the same daemon.