Panels and the canvas

Everything in Smalti is a panel on one canvas. Each panel has a 32-point title bar with a kind tag (TERM, WEB, GRAPH, NOTE, CI or MISSION), a number, a title, a close button and a resize grip in the bottom-right corner. Terminal panels also show the resource badge described in Resource governor.

A drawing of the window, built from the app's own colours and measurements: the Needs you list, file tree and sessions in the sidebar, and four numbered panels on the canvas. The graph is live.

Terminal

A terminal panel runs your login shell ($SHELL, or /bin/zsh) in a pseudo-terminal, using SwiftTerm for emulation. It sets TERM=xterm-256color and TERM_PROGRAM=Smalti, and inherits the app's PATH.

Once a second the panel checks the terminal's foreground process group. If the foreground process is claude, the panel:

  • shows a claude badge next to the TERM tag;
  • matches the process to a transcript: the newest session with the same working directory, modified after the process started, that no other panel has claimed (or the session it was asked to resume);
  • uses that session's title as the panel title, and marks the session as live in the sidebar and graph.

Otherwise the title is the current directory, followed by the foreground program when it is not the shell. A shell that exits with status 0 closes its panel; any other exit leaves the panel open with the exit status in the title.

Detachable terminals (off by default; Detachable Terminals On in the palette): when smaltid is running, agent launches run in a terminal that smaltid owns and the panel attaches to it. Quitting or a crash only detaches; on the next launch the panel reattaches and replays the scrollback once. Closing the panel ends the terminal.

Browser

A browser panel is a WebKit view with back, forward, reload and an address field. Text in the field is handled as follows:

  • a full URL is loaded as is;
  • localhost, 127.* and 0.0.0.0 addresses get http://;
  • anything else containing a dot gets https://;
  • anything without a dot is sent to Google search.

New browser panels open on google.com. Swipe gestures go back and forward, and the Web Inspector is enabled (right-click, Inspect Element).

Note

A note panel is a plain-text editor in the monospaced font. It saves to its file 0.6 seconds after the last change and again when the panel closes. ⇧⌘N creates a new note in ~/Library/Application Support/Smalti/notes/. Opening a file from the sidebar also creates a note, except for HTML, PDF, image and video files, which open in a browser panel.

Graph

A graph panel has two views, switched at its top right: Sessions, the force graph described in Sessions and the graph, and Decisions, the decision timeline. The expand button in its title bar switches the window to the full-window graph.

CI

A CI panel lists Commitwell runs for a repository. See Commitwell.

Mission

A Mission panel embeds the Conductor's web view when smalti-conductor serve answers on the machine, and a badge in its title bar counts the Conductor's open questions. When the service is not running, the panel explains how to start it and offers a terminal that does. ⌘I opens the Conductor bar, a single line that sends the Conductor a message and then focuses this panel. Links of the form smalti://session/<id>, from the mission view or from outside the app, focus that session's panel or resume it. See Agents.

Keyboard

Panels are numbered in reading order, and everything on this page can be done from the keyboard: ⌥⌘ with an arrow moves focus to the nearest panel in that direction, adding ⇧ carries the panel with it, and ⌘K opens a palette that searches commands, panels, sessions, files and SSH hosts. New terminals open beside the focused panel without moving anything else. The full list is in the keyboard reference.

The canvas

The canvas is drawn as a dot grid with a 24-point spacing. New panels are placed at the centre of the view, aligned to the grid, and cascade by one grid step so repeated adds do not stack exactly.

Snapping

While a panel is moved or resized, its edges snap to the edges of other panels, either flush or one grid step (24 points) apart. Snapping engages within 10 screen points at any zoom level. Dashed guides in the accent colour show which edges are aligned.

Selection

Shift-click title bars, or shift-drag a marquee across empty space, to select several panels. Selected panels have a two-point accent border. Dragging any of them moves all of them; resizing one resizes all of them by the same amount. Click empty space or press Esc to clear the selection.

Auto arrange

Auto Arrange packs every panel into left-to-right rows with one grid step between them. Panels keep their sizes and their reading order (top to bottom, then left to right). Rows wrap so the result is roughly 16:10 overall, and start at the top-left corner of the current layout.