Keyboard controls
Keyboard Controls
| Action | Key | Description |
|---|---|---|
| Navigate | j / k or ↑ / ↓ | Move through session list |
| Jump to first/last | gg / G | Go to top / bottom |
| Jump to session | 1–9 | Switch directly to session N |
| Switch to session | Enter | Switch tmux to the selected pane |
| Row menu | m | Open the selected row’s (or group header’s) context menu; j/k to move, Enter to run |
| Copy last response | y | Open the Copy dialog for the selected row: last response, or up to 20 turns |
| New session | n | Open the new-session dialog (agent, placement, prompt, worktree + name; directory derived from the selected row) |
| Search | / | Enter fuzzy search mode |
| Toggle preview | P | Show/hide the preview panel |
| Scroll preview | Ctrl+D / Ctrl+U | Half-page scroll in preview |
| Resize preview | Alt+H / Alt+L | Increase/decrease preview width |
| Focus preview | Tab | Send keys directly to tmux pane |
| Restart session | r | Kill and resume the selected session |
| Reconnect | R | Reconnect to the daemon SSE stream |
| Kill session | x | Kill the selected session’s process |
| Kill all | X | Kill all tracked sessions |
| Fork session | F | Branch the conversation into a pane of its own, leaving the original running |
| Worktrees | W | Open the Worktrees panel: jump, start an agent, copy a path, review, or prune (multi-select, confirmation) |
| Start from PR/issue | N | Open the source picker: every open PR and issue of the repos in scope, filtered, Enter starts work on one |
| Review and hand back | d / D | Review with hunk, then offer to send notes to the agent (requires hunk on PATH) |
| Collapse/expand | h / l or Space | Toggle group collapsed state |
| Move group | J / K | Reorder group down / up (persisted) |
| Move group top/bottom | < / > | Pin group to top / bottom |
| Collapse/expand all | zM / zR or - / = | Collapse or expand all groups |
| Hide idle | f | Toggle hiding idle sessions |
| Cycle prompt | p | Prompt display for the summary/prompt cell: inline → own row → off |
| Cycle group-by | b | Cycle through group-by modes |
| Help | ? | Show keyboard shortcuts overlay |
| Quit | q / Esc | Exit the picker |
New session dialog keys
Opened with n, or from the row menu (m, or right-click) on a session row or a group header. Every field has a default, so n Enter spawns straight away.
| Action | Key |
|---|---|
| Next / prev field | Tab / Shift+Tab |
| Move within a field | j / k or ↑ / ↓ |
| Pick by number | 1–9 |
| Where it runs | 1 This checkout / 2 New worktree |
| Name the worktree | Type on the Name row (worktree destinations only) |
| Spawn | Enter |
| Cancel | Esc |
Movement and number keys apply to the focused field, so 2 picks the second agent on the Agent field and the second placement on the Placement field. In the Prompt and Name fields every key is text, so ↑ / ↓ (or Ctrl+P / Ctrl+N) move between fields there instead.
Where picks between this checkout and a new git worktree, whose branch is cut from the main checkout’s current branch. Choosing a different base ref is CLI-only (ccmux spawn --worktree --base <ref>). Moving changes is the one exception: its worktree is cut from the HEAD of the checkout the changes came out of, so the work lands on the history it was written against rather than on whatever the main checkout happens to be on.
Choosing the worktree adds a Name row showing the name it would create, derived from the prompt and updated as you type. Type over it to name the worktree yourself; clear the field to hand the name back to the prompt. The two are not the same request: a derived name that collides with an existing worktree is numbered (-2), which is what the row’s auto · -2 if taken note means, while a name you typed opens that worktree if it is already there. Names are slugified the way ccmux spawn --worktree <name> slugifies them, so Fix Sidebar Flicker becomes fix-sidebar-flicker, and a name is enough on its own — a worktree no longer needs a prompt to be spawnable. A name with nothing to slugify (punctuation, a non-Latin script) is refused when you confirm rather than quietly replaced by the derived one.
Opened from Move changes, the same dialog runs in move mode: the title says so, Where is locked to the new worktree (there is nowhere else the changes can go), the same editable Name row is there, and an Untracked field appears — 1 move, 2 copy to both, 3 leave here. Tab skips the locked field. See Moving Uncommitted Changes.
Opened with F or from Fork it runs in fork mode: the title says so, a Source row names the conversation being continued, and the Agent and Prompt rows are gone — a fork continues the source’s agent and its history, so there is nothing to pick and no first message to write. Where starts on this checkout and Placement on a split, so F Enter forks straight into a pane beside the original. Choose the new worktree instead and the Name row appears, previewing <branch>-fork; where no name can be derived (the source is on a detached HEAD, or on a branch with nothing in it to slugify) the row asks you to type one rather than promising an automatic name. A source outside a git repository has the choice locked to its own checkout. See Forking Sessions.
In a pane too short for every row, the dialog drops what it can spare before anything you act on — the mode note (a move’s, or a fork’s Source row), then the blank line, then the option lists become scrolling windows, and the directory row last; below the height its fields need, it says how many rows it wants instead of drawing over itself, and the number keys go quiet while it does.
The working directory is derived, not typed: a session row uses that session’s directory, a group header uses the group’s, and no selection falls back to where the picker was launched. The picker jumps to the new pane, and a one-shot picker then closes while a --persistent board stays open; the sidebar spawns into the window’s main area without stealing focus.
Search mode keys
| Action | Key |
|---|---|
| Navigate results | ↑ / ↓ or Ctrl+N / Ctrl+P |
| Select | Enter |
| Cancel | Esc |
Preview focus mode
When preview is focused (Tab), keystrokes are forwarded to the tmux pane. These keys still work:
| Action | Key |
|---|---|
| Navigate sessions | Ctrl+N / Ctrl+P |
| Resize preview | Alt+H / Alt+L |
| Scroll preview | Ctrl+D / Ctrl+U |
| Exit focus | Tab / Esc |