Keyboard reference

Keyboard shortcuts for Smalti on every platform. This page is generated from docs/keymap.md in the app repository.

The keymap tracks the development version of the app. Some commands listed here, such as the command palette, Places and Navigate Mode, may not be in the current release yet.

This is the source of truth for every Smalti platform: macOS, iPadOS and iOS with a hardware keyboard, and Windows. The Mac app's command registry (Sources/Smalti/Keymap.swift) generates the menu bar, the command palette and the ? overlay, and a test checks that every command and chord in the registry appears in this file. Change both together.

Principles

  1. One palette teaches the rest. ⌘K finds every command, panel, session, file and host, and shows each command's shortcut beside it. Commands without a shortcut have a short palette alias (type cl then Return for Claude Here). You only need to learn ⌘K on day one.
  2. The terminal keeps its keys. Ctrl, Alt/Option and Esc always reach the shell, vim, tmux and Claude Code. Every Smalti chord on Apple platforms includes ⌘, which never reaches a PTY. The only bare keys Smalti reads are inside its own UI (palette, session list, Navigate Mode), never while a terminal has focus.
  3. Few modifiers, one grammar. ⌘ is Smalti. ⌘⌥ plus a direction is about panels: it moves focus. Add ⇧ to carry the panel with you. Directions are the arrows or h j k l.
  4. Nothing moves under you. A new panel lands beside the focused one, or in its project's region, and never pushes other panels. Only Arrange by Project rearranges, and only when asked.

Platform mapping

Mac / iPadWindowsNotes
⌘ + keyCtrl+Shift + keyCtrl+letter belongs to the shell on Windows; Ctrl+Shift is the Windows Terminal and VS Code convention for "app, not shell".
⌘⌥ + arrow or digitAlt + arrow or digitMatches Windows Terminal's pane focus keys. Ctrl+Alt+arrow is avoided because some drivers rotate the screen.
⌘⌥ + h j k lnoneMac and iPad only. Alt+letter is Meta in a Windows terminal. Use the arrows there.
⌘⌥ + other letterCtrl+Shift+Alt + letter
Esc in Smalti's own UIEscThe iPad Magic Keyboard has no Esc key: ⌘. works everywhere Esc does.

Avoided on purpose: ⌘Space, ⌘Tab, ⌘H, ⌘M, ⌘Q, ⌘⇧3, ⌘⇧4, ⌘⇧5 (system screenshots, which is why Places are ⌘1..9 and not ⌘⇧1..9), Globe-key combos on iPad, and anything with Win on Windows. ⌥⌘H is normally Hide Others; Smalti drops that menu item so the h of h j k l works.

The seven to learn first

ActionMac / iPadWindows
Command Palette⌘KCtrl+Shift+K
Next Item Needing You⌘JCtrl+Shift+J
Focus Panel Left / Right / Up / Down⌥⌘← ⌥⌘→ ⌥⌘↑ ⌥⌘↓Alt+Arrows
Move Panel (add Shift)⌥⇧⌘← and friendsAlt+Shift+Arrows
Zoom to Panel or Back⌘↩Ctrl+Shift+Enter
Overview (Zoom to Fit) / Go to Place 1 to 9⌘0 / ⌘1 to ⌘9Ctrl+Shift+0 / Ctrl+Shift+1..9
New Terminal / Close Panel⌘T / ⌘WCtrl+Shift+T / Ctrl+Shift+W

Full keymap

General

CommandMac / iPadWindowsPalette alias
Command Palette⌘KCtrl+Shift+K
Next Item Needing You⌘JCtrl+Shift+Jnx
Show Keymap⌘/ (or ? when no text field or terminal has focus)Ctrl+Shift+/?
Navigate Mode⇧⌘spaceCtrl+Shift+Spacenv
Tell the Conductor⌘I (one line to the Conductor; opens the Mission panel)Ctrl+Shift+Itc
New Factorypalette (opens the Mission panel on the page's New factory form; docs/factories.md)Mac onlynf
Switch Factorypalette (a menu of the Conductor's factories; the ⌘I bar and voice talk to the one shown)Mac onlysf
Talk to the Factorypalette, or the mic in the ⌘I bar (hands-free voice with the factory shown; say "stop" to stop it)Mac onlytf
Open Folder⌘OCtrl+Shift+Oof
Getting Started Tourpalette (a short tour of the app, shown once on first run; docs/tour.md)palettegs
Detachable Terminals On or Offpalette (off by default; with smaltid, agents run in its terminals and survive a quit)palettedt
Run in the Backgroundpalette (smaltid and the Conductor as login agents from the app bundle)Mac onlybg
Install Claude Code Hookspalette (shows the settings.json change before applying it)Mac onlyhk
Pair a Phonepalette (QR code for the iPhone and iPad app; also offered on first run)Mac onlypp
Add a Machinepalette, or + under Machines (a join code for a shard, docs/shard.md)Mac onlyam
Sounds On or Offpalette (on by default; also silent when macOS interface sounds are off)palettesnd
Menu Bar Icon On or Offpalette (on by default; the Smalti mark with the Needs you count and a menu)Mac onlymb
Hold New Agent Launchespalettepalettehl
Release Held Launchespalettepaletterl

Panels

CommandMac / iPadWindowsPalette alias
New Terminal⌘T (beside the focused panel, first free side of right, below, left, above)Ctrl+Shift+Tnt
New Terminal Right⌘DCtrl+Shift+Dsr
New Terminal Below⌥⌘DCtrl+Shift+Alt+Dsb
New Terminal Leftpalettepalettesl
New Terminal Abovepalettepalettesa
Claude Here⌘L (a terminal running claude in the focused panel's directory)Ctrl+Shift+Lcl
Resume Selected Session⌘RCtrl+Shift+Rrs
New Browser⌘BCtrl+Shift+Bnb
New Note⇧⌘NCtrl+Shift+Nnn
New Graph Panelpalettepaletteng
New CI Panelpalettepaletteci
Show Missionpalette (the Conductor's mission view; opens one if none)palettems
Show Changespalette (cwv2 merge queue, changesets and reviews; listed only when CW2_URL is set)palettech
Show Decisionspalette (a decision timeline for the focused panel's project)palettedg
Close Panel⌘WCtrl+Shift+Wx

Focus

CommandMac / iPadWindows
Focus Panel Left⌥⌘← or ⌥⌘HAlt+Left
Focus Panel Right⌥⌘→ or ⌥⌘LAlt+Right
Focus Panel Up⌥⌘↑ or ⌥⌘KAlt+Up
Focus Panel Down⌥⌘↓ or ⌥⌘JAlt+Down
Focus Panel 1 to 9⌥⌘1 to ⌥⌘9Alt+1..9

Focus picks the nearest panel in that direction. A panel counts only if it lies past the focused panel's centre and edge on that side. Distance along the direction costs 1, sideways offset costs 2, and a panel that overlaps sideways has no sideways cost, so the panel directly beside you wins over a nearer diagonal one. Panels are numbered in reading order (rows top to bottom, then left to right) and the number shows in each title bar.

Move and resize

CommandMac / iPadWindows
Move Panel Left⌥⇧⌘← or ⌥⇧⌘HAlt+Shift+Left
Move Panel Right⌥⇧⌘→ or ⌥⇧⌘LAlt+Shift+Right
Move Panel Up⌥⇧⌘↑ or ⌥⇧⌘KAlt+Shift+Up
Move Panel Down⌥⇧⌘↓ or ⌥⇧⌘JAlt+Shift+Down
Make Panel WiderNavigate Mode ⌥→same
Make Panel NarrowerNavigate Mode ⌥←same
Make Panel TallerNavigate Mode ⌥↓same
Make Panel ShorterNavigate Mode ⌥↑same

A move or resize step is one grid cell (24 points), then the magnets pull the moving edge onto a neighbour's edge or one gap away from it, if that is within half a step. A magnet never undoes the step.

View

CommandMac / iPadWindows
Zoom to Panel or Back⌘↩Ctrl+Shift+Enter
Overview (Zoom to Fit)⌘0Ctrl+Shift+0
Zoom In⌘=Ctrl+Shift+=
Zoom Out⌘-Ctrl+Shift+-
Toggle Graph View⇧⌘G (Esc also leaves the full-window graph while it has focus)Ctrl+Shift+G
CommandMac / iPadWindows
Focus Files⇧⌘ECtrl+Shift+E
Focus Sessions⇧⌘SCtrl+Shift+S
Filter Sessions⌘FCtrl+Shift+F

In the session list: j / k or the arrows move, Return resumes (or focuses the panel already running it), / jumps to the filter, and Esc returns focus to the canvas.

Places

CommandMac / iPadWindows
Arrange by Project⇧⌘ACtrl+Shift+A
Arrange as Gridpalettepalette
Arrange in a Rowpalettepalette
Arrange in a Columnpalettepalette
Go to Place 1 to 9⌘1 to ⌘9Ctrl+Shift+1..9
Save Place 1 to 9⌥⇧⌘1 to ⌥⇧⌘9Alt+Shift+1..9

A Place is a saved camera plus the frame of every panel at the time. Going to a Place moves the camera back, puts saved panels back where they were, and reopens saved panels that were closed since. Panels opened later stay where they are.

Arrange by Project groups panels by project (the repository or folder of their working directory), packs each group into a block, and lays the blocks out in rows, so each project keeps one region. Arrange as Grid gives every panel the same size (the average panel) in a grid shaped like the window. Arrange in a Row or in a Column keeps sizes. On the Mac all four also sit beside Fit in the zoom controls, shown when the pointer is over them. Like Arrange by Project, they act on the selection when two or more panels are selected, else on every panel.

⇧⌘space enters a sticky key table, shown by an accent border around the canvas. Bare keys act while it is on, and terminals do not receive them.

KeyAction
Arrows or h j k lfocus
⇧ + directionmove the panel
⌥ + directionresize the panel (right and down grow, left and up shrink)
zZoom to Panel or Back
aArrange by Project
tNew Terminal
xClose Panel
Return, Esc, ⌘. or ⇧⌘spaceleave
any other ⌘ chordleave, then run that chord

Session graph

With the graph focused (click it, or open the full-window graph): arrows or h j k l pan, = and - zoom, f fits, Tab and ⇧Tab step through sessions newest first, Return opens the selected session, and Esc leaves the full-window graph.

Decision timeline

A graph panel switches between the session graph and Decisions. Decisions shows one project's human steering events (goal, redirect, interrupt, denial, answer, plan approval) left to right in time, one lane per session, with superseded decisions dimmed and dashed arcs from a decision to the one that replaced it. With the timeline focused:

KeyAction
j / k (or right / left)next or previous decision in time
h / l (or up / down)nearest decision in the lane above or below
g / Gfirst or last decision
Return or oopen the conversation around it as a note
rresume that session
Escclear the selection

Palette

⌘K searches everything at once. A prefix narrows it:

PrefixSearches
>commands
#panels on the canvas
@Claude sessions
/files under the open folder
!SSH hosts from ~/.ssh/config (opens a terminal running ssh host)

Matching is fuzzy: the letters must appear in order, and matches at the start of the text, at word starts and in runs score higher. A typed alias that exactly matches a command's alias always ranks that command first. With an empty query the palette lists commands, then panels, then recent sessions. Up and Down (or ⌃N / ⌃P) move, Return runs, Esc closes.

Mouse and trackpad: canvas

InputAction
Drag empty space, or scrollPan
Middle-button dragPan from anywhere, including over a panel
Pinch, or ⌘/⌃ scrollZoom, between 10% and 300%
Double-click empty spaceZoom to fit
Double-click a title barZoom to that panel
Drag a title barMove the panel, or every selected panel
Drag the bottom-right cornerResize the panel, or every selected panel by the same amount
⇧ click a title barAdd the panel to the selection, or remove it
⇧ drag empty spaceSelect panels with a marquee

Mouse and trackpad: graph

InputAction
Hover a nodeHighlight it and its neighbours; details appear in the status line
Click a sessionSelect it here and in the sidebar
Double-click a sessionOpen it in a terminal
Drag a nodeMove it; the layout reheats around it
Drag empty space, scroll, or middle-button dragPan
Pinch, or ⌘/⌃ scrollZoom
Double-click empty spaceReturn to the automatic fit