Status: Draft for product and architecture review
Owner: Product Manager / Architect
Feature: Quick Search, search overlay, custom global shortcuts
Version: 7.5
TagLauncher 7.5 should add a fast, keyboard-first Quick Search experience that lets users launch apps through muscle memory.
The main TagLauncher interface remains the place for browsing, organizing, tagging, and managing apps. Quick Search is a second launch entry: it is optimized for users who already have an intent and want to type a few characters, select the right app, and press Enter.
The feature must feel close to macOS Spotlight and Raycast in speed and clarity, while preserving TagLauncher's identity around app tags and app notes.
TagLauncher has two complementary entry modes:
| Mode | User intent | Primary behavior |
|---|---|---|
| Main interface | Browse, organize, manage, understand app groups | Show tags, app list, notes, and management affordances |
| Quick Search | Quickly locate and launch an app | Search across all apps by app name, tag name, and app note |
Quick Search must not be implemented as a simple filter inside the current app list. It must search across all available apps, regardless of which tag or view the main interface is currently showing.
Example:
Design tag, searching chrome in Quick Search should still find Google Chrome.AI, Quick Search should return apps associated with that tag.The current main interface shortcut is:
Shift + Option + Space
⇧ ⌥ Space
This shortcut is reasonable for opening the full TagLauncher interface because it avoids the most common macOS system conflicts and avoids the increasingly crowded Option + Space shortcut used by AI tools and launchers.
However, fast app launching benefits from an even lighter interaction once TagLauncher is visible. The proposed 7.5 interaction is:
⇧ ⌥ Space
Open TagLauncher
Space
Open Quick Search overlay
Type
Search and rank apps in real time
Enter
Open selected app
Users who want TagLauncher to become their first launcher should be able to configure a direct global Quick Search shortcut in Settings, including ⌥ Space or ⌘ Space, with clear conflict detection and resolution guidance.
The product principle is:
Default: avoid conflict.
Settings: let advanced users choose a stronger shortcut.
Default behavior:
| Shortcut | Behavior | Default status |
|---|---|---|
⇧ ⌥ Space |
Open main TagLauncher interface | Enabled |
Space while TagLauncher is visible |
Open Quick Search overlay | Enabled |
| Direct global Quick Search shortcut | Open Quick Search directly | Not enabled by default |
Recommended optional shortcuts shown in Settings:
| Shortcut | Meaning | Product guidance |
|---|---|---|
⌥ Space |
Launcher-style quick entry | Fast and familiar, but may conflict with ChatGPT, Raycast, Alfred, or other tools |
⌘ Space |
Replace Spotlight | Powerful for advanced users, but conflicts with macOS Spotlight unless the system shortcut is changed |
| Custom shortcut | User-defined | Recommended when the user already has many AI or launcher tools installed |
⇧ ⌥ Space, press Space, type a few letters, and launch the selected app with Enter.Enter to open it.Esc to close Quick Search without closing the main interface.When TagLauncher is visible and no text input field is focused:
Space opens Quick Search.If the main interface is hidden:
⇧ ⌥ Space opens the main interface.Quick Search should appear as a floating overlay above the existing app list.
Visual direction:
Recommended layout:
┌──────────────────────────────────────────────┐
│ Search apps, tags, notes... │
└──────────────────────────────────────────────┘
┌──────────────────────────────────────────────┐
│ App icon App name Tags │
│ matched note snippet │
├──────────────────────────────────────────────┤
│ App icon App name Tags │
│ matched note snippet │
└──────────────────────────────────────────────┘
The result list can appear directly below the search field in the same overlay layer.
When Quick Search opens with an empty query:
This makes the overlay immediately useful even before typing.
While the user types:
Required keys:
| Key | Behavior |
|---|---|
↑ |
Move selection to previous result |
↓ |
Move selection to next result |
Enter |
Open selected result |
Esc |
Close Quick Search |
Space inside the input |
Insert a space character |
Escape behavior:
Esc closes Quick Search and returns to the main interface.Required behavior:
Quick Search searches all launchable apps known to TagLauncher.
Required searchable fields:
| Field | Requirement | Weight |
|---|---|---|
| App display name | Required | Highest |
| App localized name, if available | Required when available | Highest |
| Tag names | Required | Medium-high |
| App note / remark | Required | Medium |
| Bundle identifier | Optional, lower priority | Low |
Future searchable fields:
These future fields must not block the 7.5 release.
The word "fuzzy" has two meanings in this PRD.
First, search must cover multiple fields:
Second, character matching does not require a strict full prefix match.
Required match types:
| Match type | Example |
|---|---|
| Exact match | Figma finds Figma |
| Prefix match | fig finds Figma |
| Substring match | shop finds Photoshop |
| Acronym match | gc finds Google Chrome |
| Subsequence match | ps finds Photoshop |
| Case-insensitive match | chrome, Chrome, and CHROME can all find Google Chrome |
For Chinese text:
Search ranking should optimize for launching the intended app with as few keystrokes as possible.
Recommended scoring model:
finalScore =
textMatchScore
+ fieldWeight
+ recentOpenBoost
+ frequencyBoost
Field weights:
| Field | Ranking rule |
|---|---|
| App name | Strongest signal |
| App localized name | Strongest signal |
| Tag name | Strong signal |
| App note | Useful supporting signal |
| Bundle identifier | Weak supporting signal |
Text match priority:
exact match
prefix match
substring match
acronym match
subsequence match
Behavioral boosts:
Example:
fi should rank Figma above an app whose note merely contains file.ai may rank a frequently used AI app above a rarely used app with a weak note match.Each result row should include:
Optional but recommended:
The row must remain compact and scannable. Quick Search is not a detail view.
When the user presses Enter or clicks a result:
If app launch fails:
Settings must expose shortcut configuration for:
| Setting | Default |
|---|---|
| Main interface shortcut | ⇧ ⌥ Space |
| Direct Quick Search shortcut | Disabled / unset |
The shortcut recording UI must:
Recommended UI states:
| State | Meaning |
|---|---|
| Active | Shortcut was registered successfully |
| Conflict | Shortcut is already used by macOS or another app |
| Pending | User chose the shortcut, but it cannot currently be activated |
| Disabled | No shortcut is assigned |
When a user records or saves a shortcut, TagLauncher must attempt to register it immediately.
If registration succeeds:
If registration fails:
Known macOS conflicts that should receive special copy:
| Shortcut | Default macOS use |
|---|---|
⌘ Space |
Spotlight |
⌥ ⌘ Space |
Finder search window |
⌃ Space |
Previous input source |
⌃ ⌥ Space |
Next input source |
⌃ ⌘ Space |
Emoji and symbols |
For unknown conflicts:
This shortcut is already used by macOS or another app.
Choose another shortcut, or change the shortcut in the other app and try again.
For ⌘ Space:
⌘ Space is currently used by macOS Spotlight. TagLauncher cannot use it at the same time.
To use ⌘ Space for TagLauncher:
1. Open System Settings > Keyboard > Keyboard Shortcuts > Spotlight.
2. Turn off or change "Show Spotlight search".
3. Return to TagLauncher and click Retry.
Required actions:
Important implementation rule:
Quick Search should be implemented as a separate search capability, not as logic embedded inside the app list UI.
Recommended module boundaries:
App data / Tag data / Note data
↓
SearchIndexService
↓
SearchController
↓
QuickSearchOverlay UI
↓
Launch action
Responsibilities:
| Module | Responsibility |
|---|---|
| SearchIndexService | Build and refresh searchable documents |
| SearchController | Manage query, result ranking, selected index, keyboard navigation |
| QuickSearchOverlay UI | Render input, results, selected state, empty state |
| ShortcutSettings | Record shortcuts, persist settings, show status |
| ShortcutRegistration | Register global shortcuts and return success or conflict state |
Searchable document shape:
appId
bundleIdentifier
displayName
localizedNames
tagNames
note
aliases
lastOpenedAt
openCount
Index refresh triggers:
Quick Search must feel instant for normal local app catalogs.
Required:
Target:
Quick Search operates on local app metadata, user tags, and user notes.
Required:
Accessibility requirements:
Localization requirements:
The following are not required for 7.5:
⌥ Space by default.Quick Search overlay:
⇧ ⌥ Space opens the main TagLauncher interface.Space while the main interface is visible and no text field is focused opens Quick Search.Esc closes Quick Search.Enter opens the selected app.↑ and ↓ move through results.Search behavior:
Ranking:
Shortcut settings:
⌘ Space shows Spotlight-specific conflict guidance when registration fails.Privacy and performance:
Required manual QA scenarios:
⇧ ⌥ Space, press Space, verify Quick Search opens and input is focused.Enter.ps for Photoshop and verify the app can be found.↑ and ↓ to change selection, then press Enter.Esc, verify the main interface remains visible.⌘ Space while Spotlight still owns it, verify conflict status and guidance.7.5 should make Quick Search feel like a native, reliable second launch path:
Open.
Type.
Select.
Launch.
The feature should avoid shortcut fights by default, but give advanced users enough control to make TagLauncher their primary launcher when they choose to do so.