Keyboard and mouse
cornercase is driven with the mouse. Out of the box it has no keyboard shortcuts of its own: outside of its dialogs, the changes panel’s filter field, the files panel’s search bar and the TODO panel’s text field (and Esc while you drag a row, a border or a divider, or while the changes, files, TODO or Flow panel is open), every key you press goes to the program in the active pane. That’s a deliberate choice, so that nothing you type is ever taken away from your shell, your editor or your agent: Ctrl+B, Ctrl+A, Alt and Option combinations all reach them untouched.
If your hands would rather stay on the keyboard, or your terminal can’t send clicks, you can turn on a prefix key that opens a menu of keyboard shortcuts. It takes that one key, and only once you choose it.
The mouse
Section titled “The mouse”Columns and rows
Section titled “Columns and rows”| Gesture | Where | Does |
|---|---|---|
| Click | A project, workspace or tab | Makes it active. |
| Click | + New under the projects |
Opens a menu: open project (a folder) or new group. |
| Click | + New under the workspaces |
Opens a menu for that project: new workspace, or start a flow… (see Flows). In the tree, each project’s own + New. |
| Click | A workspace’s pull request number, such as #485✗ |
Shows its pull request and checks, without switching to the workspace. |
| Click | + Tab |
Opens a shell. |
| Click | A group header | Collapses or expands the group. |
| Drag | A project, group, workspace or tab | Moves it within its list; a project also into or out of a group. Esc cancels. See Reorder. |
Hover, then click × |
Any project, workspace or tab row | Closes it. A project, and a workspace with its own worktree, ask first. In the compact layout the × always shows, and a tab or workspace asks first too. |
Hover, then click × |
A group header | Asks, then deletes the group: keep projects leaves them open, ungrouped; close projects closes them too. |
Right-click, or hover and click ⋯ |
A project, workspace or tab | Opens its menu, to rename it; a project’s menu can also move to group and, for a repository, project settings (the setup and teardown of its worktrees), a worktree workspace with a setup shows run setup, a workspace with a pull request shows pull request #n, its checks, and a workspace running a flow shows show flow, its Flow panel. A project and a workspace also end with open in… (or copy path where the window can open nothing), see Open in another app. In the compact layout the ⋯ always shows. |
Right-click, or hover and click ⋯ |
A group header | Opens its menu: add project, rename group, icon and colour, delete group (which asks first). |
| Click | ▸ / ▾ beside a workspace, or in the tree |
Collapses or expands a workspace (or, in the tree, a project). A click on the rest of its row opens it and expands it. |
| Wheel | The projects, workspaces or tree list | Scrolls the list. |
| Drag | The border at the right of a column | Resizes the column. Esc ends the drag where it is. |
| Double-click | A column border | Resets that column’s width. |
| Drag | The line between projects and workspaces, in a stacked sidebar | Shares the height between the two lists. |
| Double-click | That line | Splits the height in half again. |
| Click | A tab in the bar above the pane | Shows it. Hover it, then click ⋯ to open its menu (rename) or × to close it; right-click it to open the menu too. |
| Click | +, ‹, › in that bar |
Opens a shell; scrolls the tabs when they don’t fit. |
| Drag | A tab in that bar | Moves it among its workspace’s tabs. |
| Wheel | That bar | Scrolls the tabs. |
| Click | An agent in the agents section | Shows that agent’s project, workspace and tab, and focuses its pane. |
| Click | ▸ / ▾ beside an agent in the agents section |
Collapses or expands the agents it started. A click on the rest of its row shows the agent. |
| Wheel | The agents section | Scrolls it. |
| Drag | The line above the agents section | Makes it taller or shorter. |
| Double-click | That line | Gives it a third of the room again. |
| Click | Agents › in the compact projects menu |
Shows the agents. |
| Click | Settings, Usage, Quit, Issues |
Opens the settings, shows your Usage and stats, detaches, opens the issue browser. |
| Click | Remote |
Opens a menu to open cornercase in your phone’s browser or to have agents message you on Telegram or on Discord, or to stop. It shows once one of them is set up, with a green ● while a browser is attached or you are away. |
| Click | Changes (or ± in the compact bar) |
Opens or closes the changes panel. Only in git workspaces. |
| Click | Files (or ▤ in the compact bar) |
Opens or closes the files panel. |
| Click | TODO (or ☐ in the compact bar) |
Opens or closes the TODO panel. |
| Click | ↑ 0.2.0 or ↻ restart at the end of the Settings row |
Opens the update dialog. Only there when a new version is out. |
| Click | The search bar | Starts a search. |
| Click | ❯ at the right end of the open search bar |
Switches the search between names and what was said in sessions. |
| Gesture | Where | Does |
|---|---|---|
| Click | An inactive pane | Makes it active. The click isn’t passed to the program. |
| Right-click | Any pane | Opens the pane menu on release: split right, split down, right-clicks, open in…, close. |
| Right-button drag | From a pane onto another pane | Near an edge, moves the pane to that side of the other one; in the middle, swaps them. See Move and swap panes. |
| Drag | A divider between panes | Resizes the panes. Esc ends the drag where it is. |
| Double-click | A divider | Splits the space in half again. |
| Press, drag, release | Text, when the program doesn’t use the mouse | Selects the text and copies it to your clipboard. |
| Wheel | Any pane, when its program doesn’t use the mouse | Scrolls back through what it printed, without making it active; in less, man and other full-screen programs, sends the arrows. See Scroll back. |
| Click | ↓ n more at the bottom right of a scrolled pane |
Goes back to the bottom. So does typing or pasting in it. |
| Hover, then click | A path to a regular file, inside or outside the workspace, in the active pane (including ~/…) |
Underlines it, then opens the file in the files panel, at its line when the path has one. |
| Anything | A program that uses the mouse | Passed to the program, relative to its pane. |
Programs that use the mouse get clicks, releases, drags, movement and the wheel, depending on what they asked for, in the encoding they asked for (SGR, UTF-8 or the original X10 one). Right-clicks still open the pane menu, and right-button drags still move panes, unless you chose send right-clicks to the pane for that pane. See Panes and splits.
Changes panel
Section titled “Changes panel”| Gesture | Where | Does |
|---|---|---|
| Click | Project name, Every project |
Chooses the active workspace or uncommitted changes across projects. |
| Click | Project or workspace header in Every project |
Collapses or expands its files without changing the active project. |
| Click | Uncommitted, Commits, All (project scope) |
Changes what is compared. |
| Click | vs main ▾ |
Opens the list of branches to compare with. |
| Click | A file row | Expands or collapses the file. |
Hover, then click ✓ |
A file row | Marks the file as viewed, or not. |
| Click | ↕ n unchanged lines |
Shows the code between two hunks. |
| Hover, then click | open, ask agent, copy on a hunk |
Opens it in your editor, types its reference into the workspace’s agent, copies it as a patch. |
| Click | expand all / collapse all, × |
Expands or collapses every file, closes the panel. |
| Click | ⌕ |
Opens the field to filter the files, or gives it the keys back. |
| Click | × in the filter field |
Closes it and shows every file again. |
| Wheel | The panel | Scrolls the diff. |
| Drag, double-click | The panel’s left border | Resizes it, gives it back its automatic width. |
See Changes panel.
Files panel
Section titled “Files panel”| Gesture | Where | Does |
|---|---|---|
| Click | A folder, a file | Opens or closes the folder, reads the file. |
| Click | ‹ |
Goes back to the tree, or to the search results. |
| Click, or press and drag | The lines of a file | Selects a line, or several. Held on the first or last line shown, or past it, the file scrolls with the selection. |
| Click | A change mark (▎, ▁, ▔) |
Shows or hides the lines it replaced or deleted. |
| Click | open, open in…, ask agent, copy |
Opens the file in your editor, opens it in an app you pick (an editor at the first selected line, or the default app), types its path and selected lines into the workspace’s agent, copies the selected lines, or the whole file when none is selected. |
| Click | The search bar | Gives it the keys. |
| Click | ▤ |
Searches file names instead of the text, or the text again. |
| Click | × in the search bar |
Clears the search. |
| Click | A result | Opens the file, at the line of a text match. |
| Right-click | A file or folder in the tree | Opens the open in… menu for it: your file manager, editors and, for a file, the default app. |
| Click | ▢, then ❐ |
Shows the open file full screen, then puts it back in the panel. |
| Click | × |
Closes the panel. |
| Wheel | The panel | Scrolls the tree, the results or the file. |
| Drag, double-click | The panel’s left border | Resizes it, gives it back its automatic width. |
See Files panel.
TODO panel
Section titled “TODO panel”| Gesture | Where | Does |
|---|---|---|
| Click | + New TODO |
Opens a field at the bottom of the list to add items. |
| Click | An item’s text | Edits it, with the cursor where you clicked. |
| Click | ○ / ✓ |
Checks or unchecks the item. |
| Hover, then click | × on an item |
Deletes it. The item you are editing always shows its ×, and keeps what you typed if you undo. |
| Click | clear done |
Deletes the done items. |
| Click | undo in the message |
Puts back what was just deleted. |
| Drag | An item | Moves it up or down the list. Esc cancels. |
| Wheel | The list | Scrolls it. |
See TODO list.
Flow panel
Section titled “Flow panel”| Gesture | Where | Does |
|---|---|---|
| Click | A role’s box | Shows its tab and focuses its pane. |
| Click | An arrow, or a loop’s label | Shows the last message sent along it, with copy; a branch into a parallel stage shows the one its role got. Only the arrows that carried a message light up under the mouse. |
| Click | × |
Closes the panel. |
| Wheel | The diagram | Scrolls it, when it is taller than the panel. |
| Drag, double-click | The panel’s left border | Resizes it, gives it back its automatic width. |
See Flows.
Dialogs and lists
Section titled “Dialogs and lists”Click buttons and rows to use them. In lists (the folder picker, the issue browser, the settings, search results) and in an update’s release notes, the wheel scrolls. A right-click menu closes when you click anywhere else, and so do the search and every dialog, as its cancel button would, so whatever you typed in it is dropped. A dialog that is busy (creating a worktree, installing an update, checking a token, starting an issue) stays open until it is done.
The resize pointer
Section titled “The resize pointer”Every border that drags (the borders between columns, the line between stacked lists, the line above the agents section, the panel’s left border and the dividers between panes) lights up cyan under the mouse. Where the terminal can change the mouse pointer, cornercase also asks for a resize arrow there: ↔ on a border between columns or a divider between panes side by side, ↕ on a line between rows. The arrow stays while you drag, even when the mouse leaves the border, and the usual pointer comes back once the mouse leaves it, when you release the button, when you press Esc (which ends the drag where it is), when a dialog opens and when the window quits or detaches.
It works in Ghostty, kitty 0.31 or later and foot 1.12 or later, which cornercase recognises from their answer to its startup question. Other terminals keep their usual pointer: WezTerm, Konsole, Alacritty and GNOME Terminal (VTE) have no way to change it, and iTerm2 and xterm understand other names for the shapes. Inside tmux, screen or Zellij the pointer is never changed: the multiplexer shares the window between panes and would leave the arrow in them.
Keyboard shortcuts
Section titled “Keyboard shortcuts”Off by default. To turn them on, open Settings → UI, select prefix key and press the combination you want, such as Ctrl+], Alt+K or F12. It must use Ctrl or Alt with a key, or be a function key; Ctrl+C, Ctrl+D and Ctrl+Z are refused, and the row warns you when the key you picked already means something, like Ctrl+B for tmux or Ctrl+A for the start of the line. Backspace there turns the shortcuts off again. The key is saved as prefix_key.
Press the prefix and a menu opens at the bottom of the screen with what each next key does. Press one: it runs, and the menu closes. Keys followed by … open a group, such as f for find, whose menu takes its place, so f then f finds a file by name. There is nothing to memorise, the menu is always on screen; you can click an entry too.
| Keys after the prefix | Does |
|---|---|
n / p |
Shows the next / previous tab of the workspace, going round. |
1 … 9 |
Shows that tab. |
] / [ |
Shows the next / previous workspace of the project. |
} / { |
Shows the next / previous project, in the sidebar’s order. |
← ↑ ↓ → |
Moves to the pane on that side, in a split tab. |
a |
Jumps to the next agent that needs you (!, ● or ✓), in any project. |
m |
Marks the agent in the pane as pending review, or as reviewed when it already is. |
/ |
Opens the search. |
c |
Opens a new tab. |
| / - |
Splits the pane right / down. |
x |
Closes the pane, after asking. On a tab’s last pane it asks to close the tab. |
r |
Renames the tab. |
f f / f w |
Opens the files panel searching file names / the text in the files, ready to type. |
f e |
Opens or closes the files panel. |
f p |
Opens the search, like /. |
f s |
Opens the search in sessions, looking in what was said in agents and panes. |
g d |
Opens or closes the changes panel, with its filter ready to type. |
g b |
Opens the changes panel and the list of branches to compare with. |
g p |
Shows the pull request of the workspace and its checks, or says why there is none. |
w n / w r / w x |
New workspace / renames the workspace / closes it, after asking (a worktree asks to remove it). |
w s |
Starts a flow in the project on screen. |
w f |
Opens or closes the Flow panel of the workspace’s run, or says it runs no flow. |
i, t, ,, u |
Opens the issues, the TODO list (on a new item), the settings, Usage and stats. |
o |
Away on chat apps: turns the away mode of Telegram and Discord on or off, on every one that is set up, as Remote does for each. With none paired, it opens the settings to set one up. |
q |
Quits the window. Everything keeps running, as with Quit. |
Esc, or a key the menu doesn’t list, closes it without doing anything, and that key doesn’t reach your program. Press the prefix twice to send the prefix itself to the program in the pane. The prefix works while the pane, the files search, the changes filter or a TODO field has the keys, but not inside a dialog, which has its own keys below.
Keys inside cornercase’s dialogs
Section titled “Keys inside cornercase’s dialogs”While a dialog, the search, the settings, the issue browser, the changes panel’s filter field, the files panel’s search bar or a TODO field is open, the keys below drive it instead of your program.
| Where | Keys |
|---|---|
| Any dialog with a text field | Type, Backspace, paste. Enter confirms, Esc cancels. |
| New workspace | Tab toggles with its own worktree. |
| Right-click menus | Esc closes the menu. Other keys still go to the active pane. |
| While dragging a row or a pane | Esc cancels the drag. Other keys still go to the active pane. |
| While dragging a border or a divider | Esc ends the drag where it is. Other keys still go to the active pane. |
| Folder picker | Type to filter. ↑ ↓ select. → or Tab go into the selected folder, ← goes up. Enter goes into the selected folder, or opens the folder you are in. ~ goes home and / to the root when the filter is empty. Backspace on an empty filter goes up. |
| Search | Type to search. Tab switches between names and what was said in sessions. ↑ ↓ select. Enter goes to the result. Esc closes. |
| Issue list | Type to filter. ↑ ↓ PgUp PgDn select. Enter reads the issue. Tab / Shift+Tab switch sources. Esc closes. |
| Issue | Enter starts it. ↑ ↓ PgUp PgDn Space Home End scroll. Esc or ← go back. |
| Agent, place and person pickers | Type to filter. ↑ ↓ select. Enter picks. Esc goes back. |
| Changes panel filter | Type a piece of a path or a pattern: *.test.js keeps only those files, !*.snap leaves them out. Enter keeps the filter and gives the keys back to your program, Esc clears it, or closes the panel when the field is empty. A click in a pane gives the keys back too. |
| Files panel search | Type to search. ↑ ↓ pick a result. Enter opens it. Esc clears the search and gives the keys back to your program, or closes the panel when the bar is empty. A click in a pane gives them back too and keeps the search. |
| TODO field | Type, paste. ← → move the cursor, ↑ ↓ move across the lines of a long item, Home End go to its start and end, Backspace Delete delete. Enter saves (a new item keeps the field open for the next one), Esc cancels, or closes the panel when the field is empty. A click outside the field saves it and gives the keys back. |
| Changes, files, TODO or Flow panel | Esc closes it, as its × does, unless one of its fields above has text; a file shown full screen goes back to its panel first. That Esc does not reach your program; the next one does. |
| Settings › Flows | ↑ ↓ select a flow (its diagram is drawn beside the list; the wheel over the diagram scrolls it), Tab → / Shift+Tab ← switch settings tabs (in the page that edit opens from a start dialog, which has no tabs, Tab moves between flows), Enter opens it (on deleted built-ins it expands them, on one of them it restores it), Delete deletes it after asking (a built-in flow is hidden). On a flow: ↑ ↓ select a row, Enter or Space change it or open a stage, Tab → / Shift+Tab ← switch tabs, Shift+↑ Shift+↓ move a stage, Delete removes it. Esc goes back to the list, then closes; with unsaved changes it asks first. A paste on the list opens the import page (share a flow). |
| The import page, in Settings › Flows | Type or paste a flow’s text. Enter starts a new line, the arrows, Home and End move. import opens it in the editor to check and save, Esc goes back. |
| A prompt or the notes, in Settings › Flows | Type, paste. Enter starts a new line, the arrows, Home and End move, Backspace Delete delete. save keeps the text, Esc drops it. |
| Start a flow | Tab / Shift+Tab move between the list, the prompt and the branch. In the list ↑ ↓ pick a flow and Enter moves to the prompt; in the prompt Enter starts a new line; in the branch it starts the flow. Esc closes it, back to the issue when it came from one. |
| Branch to compare with | Type to filter. ↑ ↓ select. Enter picks the selected branch. Esc closes. |
| Settings | Enter or Space change the selected row. ↑ ↓ select. Tab → / Shift+Tab ← switch tabs. Shift+↑ Shift+↓ reorder sources. Delete removes a saved token. Esc closes. |
| Update | ↑ ↓ scroll the release notes. Enter presses the dialog’s first button: update, try again, restart now or copy command. Esc closes it, except while downloading, like cancel or, once the update is installed, later. |
| Compact menu | Esc closes it. |
| Keys menu | The key next to an entry runs it, or opens its group. Esc closes it. The prefix again types it in the pane. |
Keys in your panes
Section titled “Keys in your panes”Everything else goes to the program in the active pane, encoded like a modern terminal would:
- When a program enables the kitty keyboard protocol, cornercase encodes every key with it, using Ghostty’s encoder.
- Otherwise special keys go through Ghostty’s encoder and ordinary characters through the classic encoding, so old programs keep working.
- cornercase asks your own terminal to report keys unambiguously, so combinations such as
Shift+EnterandCtrl+Enterkeep their modifiers, as long as your terminal supports it. - Pastes are wrapped in bracketed-paste markers when the program asked for them.
In Usage, Limits and Stats switch by click, Tab, Shift+Tab, ← or →. It opens on Stats and remembers the last tab for the server run. Enter, Esc, done or a click outside closes it.