L Loach Docs
Ctrl K

Search

Loach has two complementary search surfaces: a global palette for jumping anywhere in the app - including inside message content - and a browser-style finder for the chat you are currently looking at.

The global palette

Press Ctrl + K (or click the search pill in the title bar) to open the palette. It cross-searches:

An empty query shows suggestions: the chats you opened most recently first, then a few Spaces, Snippets and recent Library datasets and items. Typing filters as you go, case-insensitively, and the list shows up to 20 results. When many kinds match, those places are shared out between them, so a query matching dozens of chat titles can’t push Spaces, Snippets or Library hits off the list. Use the arrow keys to move and Enter to commit; the highlight stays on the row you’ve moved to when message hits arrive a moment later. Picking a chat opens it; picking a message opens its chat and jumps to that turn; picking a Space opens its detail view; picking a Library item opens its preview where you are, and a dataset its page in the Library. Picking a Snippet first asks for any variables it needs, then starts a fresh chat with the Snippet’s prompt primed in the composer - cancel the variables and no chat is created.

Esc clears a non-empty query first, then closes the palette; clicking outside it closes it too. Archived chats aren’t listed. The palette is unavailable while the lock screen, the onboarding wizard or Private Chat owns the window, and while another dialog, such as Settings or a confirmation, is open.

Message search

Message search looks inside transcripts, not just titles. Hits carry a MESSAGE badge, the chat’s title and a one-line excerpt that opens just before the match, newest first. They sort below title matches - a chat whose title matches is the stronger signal - but transcript hits keep a reserved block at the bottom of the list so a common word cannot squeeze them out. It starts at two characters, is debounced while you type, and returns up to 8 hits (20 when the search is scoped to messages).

What it deliberately does not reach:

Case-insensitivity in message search is ASCII-only: a query with accented or non-Latin characters matches transcript text at its own case but not across cases. Title matching ignores case fully.

Scoping with in:

A dropdown beside the input narrows the search to one kind: everywhere (the default), chats, messages, spaces, snippets or library. It works by writing an in:<scope> token into the query itself - the token is the scope, so you can type in:messages borrow by hand, or notes in:spaces with the token last, and the dropdown label follows either way. The token is boxed in the input so you can see it is a filter. Clearing it from the text returns to everywhere. A narrowed scope with an empty query shows more suggestions of that one kind.

Find within a chat

Press Ctrl + F in a chat, pick Search in chat from the chat header’s … menu, or type /find (/find <text> fills in the search) to open the Find in this chat… bar at the top right. It works like browser find: type to search (case-insensitive), every occurrence is highlighted inline, and the current match is scrolled into view with a stronger highlight.

Switching to another chat closes the finder.

Tip

When you remember a phrase but not which chat it was in, hit Ctrl + K and type in:messages followed by the phrase - scoped to messages, transcript hits get the whole list instead of a reserved block at the bottom.