Settings → Keyboard shortcuts shows the same list inside the app, searchable, for your platform.
Navigation
| Action | macOS | Windows and Linux | Where |
|---|
| Open command paletteWeb-app convention (Linear, GitHub, Vercel, Notion). Chrome focuses the omnibox with Cmd+K; preventDefault reliably cancels that. Allowed in inputs so the palette can open/close from any field. | ⌘K | Ctrl+K | Anywhere in the app |
| Open settingsmacOS app convention. Safe on all browsers. | ⌘, | Ctrl+, | Anywhere in the app |
| Search helpmacOS Help-menu convention (⌘⇧/ = ⌘?). Not a Cmd+Shift+<letter> chord, so no allowlist entry; `/` matches on `event.code` (Slash) so Shift does not turn it into `?` before the comparator sees it. No known browser/OS conflict. | ⌘⇧/ | Ctrl+Shift+/ | Anywhere in the app |
| Search projectsDashboard-local: focuses the project-search field. Bound only in the /projects page component so it never fires elsewhere. | / | / | Anywhere in the app |
Saving
| Action | macOS | Windows and Linux | Where |
|---|
| Save documentOverrides the browser's Save Page dialog. | ⌘S | Ctrl+S | In the editor |
| Save point with labelOwned exclusively by <CommandPalette> via the onNamedSave prop — do NOT also register this shortcut in the editor page or a second handler will fire. `S` is allowlisted in the Cmd+Shift+letter guardrail test. Deliberately does not set allowInInput: the old behavior of firing from inside the named-save dialog was re-entrant. | ⌘⇧S | Ctrl+Shift+S | In the editor |
Writing and elements
| Action | macOS | Windows and Linux | Where |
|---|
| Duplicate blockLegacy writer command (Highland parity). Allowlisted. | ⌘⇧D | Ctrl+Shift+D | In the editor |
| Wrap selection in quotesLegacy writer command (Highland parity). Allowlisted. | ⌘⇧Q | Ctrl+Shift+Q | In the editor |
| Stash selection at document endLegacy writer command (Highland parity). Allowlisted. | ⌘⇧M | Ctrl+Shift+M | In the editor |
| Toggle dual dialogue | ⌘D | Ctrl+D | In the editor |
| Look up in dictionary / thesaurusSingle-modifier punctuation (registry policy: prefer Cmd+<punctuation> for panels). No known browser/OS conflict. Bound via editor-core, not useHotkey. | ⌘' | Ctrl+' | In the editor |
| Open editor context menuDISPLAY-ONLY registry row — the runtime binding lives in the EditorContextMenu TipTap extension's addKeyboardShortcuts() (Shift-F10 / ContextMenu key), NOT via useHotkey, the same decoupling as referenceLookup and findInDocument. This entry exists so the command palette, tooltips, and cheat sheet render the same chord the extension binds. Shift+F10 is NOT a Cmd+Shift+<letter> chord (F10 is a function key, ContextMenu a named key), so it needs no allowlist entry in shortcuts.test.ts. macOS has no single OS-wide equivalent (§9.1) — Full Keyboard Access / VoiceOver reach the menu differently; the chosen binding is documented, not asserted for Mac parity. | ⇧F10orContextmenu | Shift+F10orContextmenu | In the editor |
| Convert to scene heading | ⌘⌥1 | Ctrl+Alt+1 | In the editor |
| Convert to action | ⌘⌥2 | Ctrl+Alt+2 | In the editor |
| Convert to character cue | ⌘⌥3 | Ctrl+Alt+3 | In the editor |
| Convert to dialogue | ⌘⌥4 | Ctrl+Alt+4 | In the editor |
| Convert to parenthetical | ⌘⌥5 | Ctrl+Alt+5 | In the editor |
| Convert to transition | ⌘⌥6 | Ctrl+Alt+6 | In the editor |
| Convert to centered | ⌘⌥7 | Ctrl+Alt+7 | In the editor |
| Convert to section | ⌘⌥8 | Ctrl+Alt+8 | In the editor |
AI
| Action | macOS | Windows and Linux | Where |
|---|
| Inline AI edit (selection required)Editor-scoped handler runs before the global command palette. Requires a non-empty editor selection; otherwise Cmd+K falls through to the command palette. | ⌘K | Ctrl+K | In the editor |
| Accept inline edit | ⌘↩ | Ctrl+Enter | In the editor |
| Cancel inline edit | ⎋ | Esc | In the editor |
| Open command menu | ⌘/ | Ctrl+/ | In the editor |
| Accept next word of ghost textTab is reserved for Fountain element cycling (ADR-0025). Right Arrow accepts the full ghost; Mod+Right accepts the next word. | ⌘→ | Ctrl+→ | In the editor |
Find
| Action | macOS | Windows and Linux | Where |
|---|
| Find in documentOverrides the browser's built-in find. Bound via editor-core, not useHotkey. | ⌘F | Ctrl+F | In the editor |
| Find & replaceMod+H is not used — it conflicts with macOS system 'Hide Application'. Ctrl+H is restricted to non-Mac platforms to avoid stealing the Emacs backward-delete binding. Mac users press Cmd+Alt+F (VS Code convention); Windows/Linux users press Ctrl+H. | ⌘⌥F | Ctrl+Alt+ForCtrl+H | In the editor |
Reading changes
| Action | macOS | Windows and Linux | Where |
|---|
| Next changeCtrl (not Mod) so macOS Chrome's Cmd+Shift+N (new incognito window) never overlaps. Ctrl+Shift is free on all platforms during an active diff review session. | ⌃⇧N | Ctrl+Shift+N | In the editor |
| Previous change | ⌃⇧P | Ctrl+Shift+P | In the editor |
Layout and panels
| Action | macOS | Windows and Linux | Where |
|---|
| Toggle outline sidebarPreviously Cmd+Shift+B, which Chrome intercepts to toggle the bookmarks bar. Cmd+\ is the VS Code convention and is safe on all browsers. | ⌘\ | Ctrl+\ | In the editor |
| Toggle AI companion sidebarPreviously Cmd+Shift+I, which browsers hard-intercept to open DevTools. Cmd+Shift+\ mirrors Cmd+\ and is not browser-reserved. | ⌘⇧\ | Ctrl+Shift+\ | In the editor |
| Toggle focus modeNew shortcut. Period suggests 'full stop, nothing else'. | ⌘⇧. | Ctrl+Shift+. | In the editor |
Everywhere
| Action | macOS | Windows and Linux | Where |
|---|
| Dismiss / cancelEscape stacking is context-driven: inline edit bar > find bar > slash palette > command palette > focus mode > AI sidebar. Each layer returns `false` from its handler to fall through to the next. | ⎋ | Esc | Anywhere in the app |