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)
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, t, and m work in every view (Status, History, and the review view). 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, 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, 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
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

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)
Double-click a code line in the diff pane Open the in-place editor there (add a comment); excludes the marker zone and the file list
Double-click a comment box Edit it (an agent note flashes read-only instead)
Click a comment box's [x] Delete that comment, no confirmation
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

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.