Keyboard shortcuts
Loach is keyboard-friendly. Press Ctrl + / to open an in-app cheat sheet of the nine app-wide shortcuts below; the dialog and the handler read the same table, so the keys listed there are the keys the app actually listens for. The composer, palette and finder keys further down aren’t in it. On macOS, ⌘ stands in for Ctrl throughout, and the cheat sheet shows ⇧ for Shift. Ctrl itself doesn’t trigger shortcuts there: it is left to text fields’ own editing keys, such as Ctrl + K to delete to the end of the line.
On a keyboard layout without Latin letters, such as Cyrillic or Greek, a shortcut follows the key’s position: Ctrl + K is the key where a US layout has K.
Navigation
- Ctrl + K - open the search palette across chats, messages, Spaces, Snippets and the Library.
- Ctrl + N - start a new chat outside any Space.
Chat
- Ctrl + F - find within the current chat transcript, with browser-style match highlighting and a match counter. Does nothing unless a chat with at least one message is on screen.
- Ctrl + U - attach files to the current chat (opens the file picker).
- Ctrl + Shift + Backspace (or Delete) - delete the current chat, after a confirmation. Only while the chat is on screen: it does nothing while a Space’s page, a model’s page or another sidebar tab, such as the Library, covers it.
Layout
- Ctrl + Shift + S - show or hide the left sidebar.
- Ctrl + Shift + P - show or hide the parameters panel beside an open chat. It does nothing on other pages, where the panel can’t show.
Security
- Ctrl + Shift + L - lock Loach now, when an app lock is configured. It works in Private Chat, during onboarding and with a dialog open too.
Help
- Ctrl + / - open the keyboard-shortcuts cheat sheet; Esc closes it. On layouts where / itself needs Shift (Shift + 7 on German and Nordic keyboards), hold Ctrl with that combination.
In the composer
- Enter - send the message, or run the typed slash command. An Enter that confirms a candidate in an input method (Chinese, Japanese or Korean typing) never sends.
- Shift + Enter - insert a newline without sending. Use this for multi-paragraph prompts.
- / - typed as the first character, opens the slash-command palette. Text that goes on with a space or a second slash (
// note,/ aside) is ordinary text and doesn’t open it. - # - typed at the start of the message or after a space, lists your Library sources to attach, newest first; letters typed after it narrow the list.
In the slash-command palette
- ↑ / ↓ - move through the filtered command list. The selection wraps around at either end.
- Tab - complete the highlighted command. After
/model,/spaceor/snippetand a space, the palette lists your models, Spaces or Snippets by name, matching anywhere in the name. - Enter - run a fully-typed command, or complete a partial one.
- Esc - dismiss the palette for the current draft. Anything that isn’t a recognised command is sent as an ordinary message.
In the # Library list
- Tab - attach the highlighted item or dataset. The
#text you typed is removed, and a chip above the message box shows what was added. - ↑ / ↓ - move through the matches. The selection wraps around at either end.
- Enter - attach the highlighted entry, but only once you’ve moved with the arrow keys; otherwise Enter sends the message, so one ending in a
#tagisn’t swallowed. - Esc - dismiss the list.
In the search palette
- ↑ / ↓ - move between results.
- Enter - open the highlighted result. A chat opens the conversation; a message opens its chat and jumps to that turn; a Space opens its detail view; a Snippet starts a fresh chat with the snippet’s prompt primed in the composer, once any fill-in blanks are filled (cancel them and no chat is made); a Library item opens its preview where you are, and a dataset opens its page in the Library.
- Tab - move between the palette’s controls. Focus stays inside the palette until you close it.
- Esc - clear the query, then close the palette on a second press.
In the in-chat finder
- Enter or ↓ - jump to the next match.
- Shift + Enter or ↑ - jump to the previous match. Both directions wrap around.
- Esc - close the finder and clear the highlights.
In fields and dialogs
- Enter - save a rename (a chat in the sidebar, the chat header or a Space’s chat list); Esc cancels it.
- Enter - in the memory editor, add or save a fact (Shift + Enter for a newline while editing); Esc cancels an edit.
- Enter - in a Snippet’s fill-in dialog, move to the next blank; on the last one, put the filled-in prompt in the composer.
- Enter or Space - open a focused chat row, folder, Space, Snippet or model tile, Library item or dataset, or attachment chip.
- Enter / Esc - in a confirmation dialog, confirm or cancel. The confirm button has focus when the dialog opens - including for deletions.
- Enter - in a create or edit dialog (a Snippet, a snippet variable, a Space, a Library text or dataset), Enter in a one-line field, or Ctrl + Enter in a multi-line one, saves once everything required is filled in; until then it moves you to the next field to fill.
As in the composer, renames, prompts, the search palette, the in-chat finder and these dialogs leave an Enter that confirms an input-method candidate to the input method.
Where shortcuts do not apply
The app lock screen blocks every shortcut and the search palette, and so does the moment at launch while Loach checks whether a lock is set. While the onboarding wizard or Private Chat owns the window, or a dialog is open - Settings, a confirmation, the search palette itself - the app-wide shortcuts and the search palette are off too, except Ctrl + Shift + L, which locks Loach from anywhere. Esc still dismisses menus and dialogs, and exits onboarding (with a confirm on the provider step). It does not close Private Chat: only the × in its header does, so a stray key can’t wipe the conversation. The web view’s own find bar (Ctrl + G, F3) is switched off - use Ctrl + F.