Skip to content

Keybindings

These are the defaults. Every binding is remappable — see Configuration.

Global

Key Action
q, Ctrl-c Quit
? Toggle the help overlay
r Refresh status from disk
Tab Switch focus between panes
n Toggle line numbers in the diff gutter (persists)
w Toggle hard line wrapping in the diff pane (persists)
f Toggle cross-file scroll — continuously scroll past a diff's edge into the next / previous file (persists)
t Cycle the theme (presets, then your custom themes; persists)
m Show / hide the menu bar (persists)
b Show / hide the left panel
i Toggle the History view
1, 2 Switch to the Status / History view (or the review session / History, in a strix diff session)
Esc Close an overlay; leave History view

n, w, f, t, and m work in every view (Status, History, and the review view), though cross-file scroll (f) only scrolls continuously across file boundaries in Status and Review — the History view is excluded. While the discard-confirmation modal is open, n is consumed as "no" (dismiss the modal) rather than toggling line numbers; the global binding resumes once the modal closes.

The header shows two dropdown menus, View and Theme, whenever the menu bar is visible (m toggles it, on by default — see Configuration). View holds diff mode (unified / side-by-side), line numbers, line wrap, cross-file scroll, the changes panel, and a Status/History switcher; the current view's item is checked so the row that would just switch to itself still shows state, not a dead control. Theme lists the built-in presets and any custom themes/*.toml files, with the active one marked.

Opening a menu is mouse-first: click a title (View or Theme) to open its dropdown. There's no keyboard chord to open one — every setting a menu exposes already has its own direct key (d, n, w, f, b, t, 1, 2). Once a menu is open, it's fully keyboard-navigable:

Key Action
/, Tab/Shift+Tab Switch to the other top-level menu
/ Move the highlight (skips separators, wraps at the ends)
Enter, Space Activate the highlighted item and close the menu
Esc, m Close the menu without changing anything

Clicking an item activates it the same way; clicking a separator or anywhere in the dropdown that isn't an item is consumed but does nothing; clicking another title switches menus; clicking outside the dropdown closes it and still routes the click to whatever's underneath. While a menu is open, moving the mouse (no click needed) over another title slides the dropdown to follow it, and moving over an item in the open dropdown moves the highlight — the same effect as arrowing to it.

Changes pane

Key Action
j, Next file
k, Previous file
g, G First / last file
Enter, Space Toggle stage / unstage of the selected file
s Stage the selected file
u Unstage the selected file
x Discard changes to the file (asks to confirm)
l, Focus the Diff pane

Diff pane

Key Action
j, Move the cursor down (scrolls to follow it)
k, Move the cursor up
Ctrl-d, Ctrl-u Move the cursor a half page down / up
g, G Jump to top / bottom of the diff
d Toggle unified / side-by-side mode
w Toggle hard line wrapping (long lines wrap instead of truncating)
f Toggle cross-file scroll (continuously scroll past a diff's edge into the next / previous file)
c Add a comment on the cursor's line, or edit the comment under it
X Delete the comment under the cursor (no confirmation)
], [ Jump to the next / previous comment
h, Focus the Changes pane

Crossing files (cross-file scroll on)

With f on, j/k and Ctrl-d/u walk the cursor across file boundaries instead of stopping at the current file's edge. j past the last row steps the cursor into the next file — through however many short files a single press's residual reaches — while the file list's selection and the border title stay put until the view actually scrolls past the boundary; a comment box is still one step regardless. k is asymmetric: stepping back past the first row of the selected file immediately switches to the previous file (selection, title, and cursor all move together) rather than walking through it, since a previous file can never render below the one you started on. Any action you take (c, X, stage/unstage, discard, …) while the cursor has walked into another file acts on that file — the selection catches up to the cursor automatically. Anything that moves the view or the focus out from under a mid-walk cursor snaps it back to the selected file: a wheel scroll that crosses a boundary, a refresh, a resize, g/G, a file-list click, switching panes or views, or toggling w/n/d/f.

Comments (working tree)

The diff pane's cursor above also addresses comments — worktree notes on the selected file's net HEAD-vs-worktree change (the pending · HEAD→worktree pane; see Usage). c and X follow act-and-reveal: an offscreen cursor's first press only scrolls it into view, the second acts. c on the file list, a hunk-header row, or a conflicted/binary/submodule file does nothing but flash a hint; double-clicking a code line or an existing comment box works the same as pressing c. See Comments for the box, the multi-line editor, and the lifecycle (stale, swept on commit).

History view

Open with i (or 2); leave with Esc, i, or 1. The left column splits into Committed Changes (the selected commit's row + its files) on top and Graph (the commit log with a colored branch/merge rail) on the bottom, separated by a draggable horizontal divider. The right pane shows commit details when the row is selected, or the file's diff (vs the commit's first parent) when a file is selected.

Key Action
Tab Cycle focus: Graph → Committed Changes → Diff
h, l, , Step focus left / right across the three panes
j, k, , Move in the focused pane (commit / file / diff scroll)
g, G Jump to the first / last item in the focused pane
Ctrl-d, Ctrl-u Scroll the diff (or details) a half page
d Toggle unified / side-by-side for file diffs
b Show / hide the left column (Graph + Committed Changes)

The view is read-only: staging keys (space, s, u, x) do nothing. The graph is walked from HEAD ancestry (including merges) up to 500 commits per page; scrolling past the end loads the next page.

Review view

Opened with strix diff <RANGE> (see Usage); there is no in-app way to enter it from the staging view. The left column is a flat file list (no Staged/Changes sections) beside the shared diff pane.

Key Action
Tab Switch focus: file list ↔ diff
h, l, , Focus the file list / the diff
j, k, , Move in the focused pane: file selection, or the diff cursor
g, G Jump to the first / last item in the focused pane
Ctrl-d, Ctrl-u Move the diff cursor a half page
d Toggle unified / side-by-side
c Add a comment on the code row under the cursor, or edit the comment on a comment row (multi-line editor, Enter saves, Esc cancels — see below)
X Delete the comment under the cursor (no confirmation)
], [ Jump to the next / previous comment (listed files only, wraps)
b Show / hide the file list
i Open the History view
1 Return to the review session (from History)
2 Open the History view

The view is read-only for staging: space, Enter, s, u, x, and clicking a file's status marker do nothing — no modal, no index change. x does not delete a comment here either — that's X (Action::DeleteComment, its own action) — x is a silent no-op on a comment/orphan row and inert everywhere else in this read-only view. Esc does not exit the session (unlike History); quit with q.

Review comments

The diff pane's cursor (j/k/g/G/Ctrl-d/Ctrl-u above) can rest on a comment row, not just a code line; it only renders (with the selection colour) while the diff pane has focus. c and X act on whatever row the cursor is on, and both follow act-and-reveal: if the cursor is currently scrolled offscreen, the key only scrolls it into view — a second press is needed to actually act, so nothing is ever added to or deleted from a row you can't see. c on the file list, a hunk-header row, or an agent-authored comment does nothing but flash a hint instead of opening the editor; double-clicking a code line or an existing comment box opens the editor the same way c does, and clicking a box's [x] deletes it directly (see Mouse). ]/[ only cycle comments on files still in the review's file list; comments on files that dropped out of the range are orphaned and only reachable via strix comment list (see CLI).

Adding or editing a comment additionally requires that the range you're reviewing has your checked-out branch as its head (the common strix diff main case) — otherwise c flashes instead of opening the editor. See Usage for the full comment model (orphans, persistence, the agent-facing CLI).

c, X, ], and [ share their default chords with no other action, and each is independently remappable — see Configuration. Unlike milestone 6, x/discard and comment deletion are fully separate actions now, so remapping one never affects the other.

Mouse

Gesture Action
Click a menu title (View/Theme) Open its dropdown, or switch to it if another is already open (see Menu bar)
Click a file Select it (and show its diff)
Click a file's status marker Toggle stage / unstage (staging view only; a no-op in the read-only Review view)
Click a pane Focus that pane
Click a commit in the graph Select it (and show its details)
Click a row in the diff pane (Status or Review) Focus the diff and move the cursor there (a comment box is selected, not opened — double-click or press c to edit it)
Click a neighboring file's row in the diff pane (cross-file scroll on) Place the cursor there — nothing else moves. No flip, no reveal, no selection or title change; the file is only selected once you act (stage, comment, etc.) on it
Double-click a code line in the diff pane Open the in-place editor there (add a comment); on a neighboring file's row, selects that file first, then opens the editor; excludes the marker zone and the file list
Double-click a comment box Edit it (an agent note flashes read-only instead — a read-only flash on a neighboring file's box doesn't select that file either)
Click a comment box's [x] Delete that comment, no confirmation (a neighboring file's box deletes without selecting that file)
Drag the vertical split bar Resize the left column vs the diff
Drag the horizontal split bar Resize Committed Changes vs Graph (History view)
Scroll wheel Scroll the pane under the cursor; in the diff pane this moves the viewport only — the cursor stays put
Trackpad horizontal scroll Shift the diff's code content sideways to read long lines (gutters, sign column, hunk headers, and comment boxes stay put); works in every view's diff pane, and only when line wrap is off

Horizontal scrolling is a trackpad gesture only — there is no keybinding and nothing is persisted. It relies on the terminal emitting horizontal scroll events; some terminals (including macOS Terminal.app) never do, so the gesture does nothing there. It is inert while line wrap (w) is on, since wrapped lines have nothing to scroll to.

Double-click detection is semantic, not pixel-based: two clicks resolving to the same target (same file, same code line or comment box) within 500 ms count as a double-click. A drag, a scroll, or a layout change (resize, mode toggle, a comment added/edited/deleted) resets the tracker, so a stray click afterward is never mistaken for the second half of a double-click.

In-place comment editor

While the editor is open (after c or a double-click — see Usage), keys go to the editor first — these are fixed, not part of the remappable [keys] keymap, so they apply regardless of any keybinding overrides:

Key Action
Enter Save
Esc Discard (revert an edit, or cancel a new comment)
Shift+Enter, Ctrl-J, Alt+Enter Insert a newline (three equivalent chords — see below)
, Home, End, Backspace, Delete Move / edit within the buffer
any other character Inserted literally, including c, x, ], [, and any other action's normal key

Shift+Enter alone is unreliable on terminals without a keyboard-enhancement protocol, so Ctrl-J and Alt+Enter are equally-supported fallbacks — use whichever your terminal delivers. A bracketed paste containing newlines inserts them as real line breaks rather than one Enter per line. Ctrl/Alt combinations other than the newline chords above are ignored; Ctrl-C still quits immediately, even while editing.