Conversation Search
AI Supreme Council includes a built-in search feature that lets you find messages across all your conversations, not just the current one. Search through your entire chat history to find that important answer or discussion.
Opening Search
There are two ways to open the search panel:
- Keyboard shortcut: Press Ctrl+F (or Cmd+F on Mac)
- Sidebar button: Click the search icon in the left sidebar
When search opens, the chat area is replaced by a search input and results panel. The message input area is hidden to give the search results full space.
Searching
Type your query in the search input. Results appear as you type with a 250ms debounce delay for performance. The search requires at least 2 characters to begin.
Search checks two things:
- Bot names -- matches against conversation/bot titles
- Message content -- matches against all user and assistant messages across every conversation
The search is case-insensitive. Typing "python" will match "Python", "PYTHON", and "python".
How Search Works
Search runs entirely in the browser against your local IndexedDB storage:
- The
AIS.Chat.searchAll()function enumerates all IndexedDB keys starting withais-chat- - Each conversation's messages are loaded and scanned for the query string (case-insensitive)
- Bot names from
AIS.Session.list()are also checked for matches - Results are streamed to the UI progressively as each conversation is scanned -- you see results appear as they are found
Since search runs locally, it works offline and does not send any data to a server.
For large chat histories (thousands of messages across many conversations), search may take a moment to complete. Results appear progressively as conversations are scanned, so you can start clicking results before the full scan finishes.
Search Results
Results are grouped by conversation (bot). Each result group is rendered as a collapsible <details> element showing:
- Bot icon (if set) and bot name with the matching text highlighted using
<mark>tags - Match count -- e.g., "3 matches" or "title match" (when only the bot name matched)
- Creation date of the conversation
- Expandable list of matching messages with context snippets
Message Snippets
Each message snippet shows:
- The message role (user or assistant) displayed above the text
- The matching text highlighted with surrounding context -- approximately 40 characters before and 60 characters after the match
- Ellipsis (
...) added when the snippet is truncated from a longer message
For example, searching for "FastAPI" might show:
assistant ...building a REST API with FastAPI and SQLAlchemy. Here is the project structure...
Navigating Results
- Click on a bot name (for title-only matches where no message content matched) to switch to that conversation
- Click on any message snippet to switch to the conversation containing that message
- Clicking a result automatically closes the search panel and loads the selected conversation
Closing Search
There are three ways to close the search panel and return to the chat view:
- Press Escape while in the search view
- Click the search button again in the sidebar (toggles search off)
- Click any search result (automatically closes search and navigates)
The chat area is restored to its previous state when you close search. The previous chat content and message input area are both restored.
Performance
Search is designed to handle large histories efficiently:
| Factor | Implementation |
|---|---|
| Debounce | 250ms delay after typing stops before executing search |
| Minimum query | 2 characters required to avoid overly broad matches |
| Progressive rendering | Results stream to the UI as conversations are scanned |
| Case-insensitive | Uses toLowerCase() comparison (no regex overhead) |
| Local only | No network requests -- all data is in IndexedDB |
Search is case-insensitive. Typing "python" will match "Python", "PYTHON", and "python". Use specific terms to narrow results when you have many conversations.
Limitations
- Minimum query length: 2 characters required
- Current browser only: Search covers conversations stored in your current browser. It does not search across devices or synced data.
- Text only: Image content, generated images, and tool call outputs are not searchable -- only text messages
- No regex support: Search uses simple string matching, not regular expressions
- No date filtering: You cannot restrict search to a date range
- Full scan: Every conversation is scanned on each search -- there is no pre-built index. This is fast for typical usage but may slow down with thousands of conversations.