Tracked from #472 (production-widget gap analysis).
Gap
Modern productivity apps (Linear, Notion, Slack, Raycast) ship a ⌘K command palette as table-stakes. There's no AppKit/UIKit primitive — every app rebuilds it.
Scope
- Floating panel triggered by configurable hotkey (default ⌘K on macOS, none on iOS — invoked imperatively)
- Fuzzy-search across registered commands
- Commands have: id, label, optional icon, optional subtitle, optional keyboard shortcut, optional group/section header
- Recent / frequently-used commands ranked higher
- Keyboard navigation (arrows, Enter, Esc)
- Optional async command sources (e.g. search current document content)
Imperative registration:
ui.commandPalette.register({ id: 'file.save', label: 'Save', shortcut: '⌘S', onRun: () => saveDoc() })
Notes
Should integrate with the OS-native menu bar on macOS so commands show up in both places without double-registration.
Tracked from #472 (production-widget gap analysis).
Gap
Modern productivity apps (Linear, Notion, Slack, Raycast) ship a ⌘K command palette as table-stakes. There's no AppKit/UIKit primitive — every app rebuilds it.
Scope
Imperative registration:
Notes
Should integrate with the OS-native menu bar on macOS so commands show up in both places without double-registration.