## Summary A complete public CodeNomad help site in the app's ten languages, published on GitHub Pages (https://neuralnomadsai.github.io/CodeNomad/) and opened from the app. - **Content:** 25 pages in 8 sections (Start, Workflows, OpenCode setup, Remote access, Customize, Extensions, Desktop, Help), written for OpenCode power users and covering the current version only. It includes everything user-relevant from `README.md`, `packages/server/README.md` (server, network, auth, TLS, Remote Control) and the user-facing dev-docs, with flags, defaults, labels and safety boundaries checked against source. - **Languages:** en, fr, de, es, he (RTL), ja, ne, ru, tr, zh-Hans. Interface labels reuse each locale's own app strings; native desktop menu names, code, commands, flags, paths and anchors stay unchanged. - **Site:** `scripts/build-help.mjs` renders `docs/help/<locale>/<slug>.md` with translated chrome (`docs/help/i18n/`), stable `{#id}` anchors identical across locales, same-article language links with hreflang, a root language chooser, and a first-party offline per-locale search (Ctrl/⌘+K, substring matching for CJK, Devanagari and Hebrew, hidden without JS). No analytics or remote resources. - **Validation:** `npm run test:help` fails on any missing page or string, heading drift, broken link/anchor/asset or invalid search target. `.github/workflows/help-pages.yml` validates PRs and deploys only from `dev`. - **App entry points:** one `open-help` command for the palette and a new **CodeNomad Help** item at the top of the Electron and Tauri Help menus. It opens the help in the invoking window's UI language through the existing external opener, falls back to the root URL for windows without the handler, and reports failures without replay. - Documents the strict boolean environment-variable rule from #959 and the updater entry points from #960. ## Review Delivered as a CodeNomad mission with independent review loops, each to zero findings: - English content audit (5 passes, 14 fixes) and technical gatekeeper (2 passes) before translation. - After translation: QA, UX review, and a final multilingual gatekeeper (35 translation/label findings fixed, then verified), plus a visual fix for the search focus ring and a verified sync with #960. ## Validation - `npm run test:help`: 9/9 (25 pages × 10 locales, strict, including negative tests); `npm run build:help`: 250 pages. - `node scripts/test-help-browser.mjs`: 44/44; Playwright: 500 page visits at 390 and 1280 px, all locales, no overflow, no external requests. - UI help-command and desktop-updates browser tests 19/19; help URL unit tests; Electron menu tests; UI and Electron typechecks; Tauri `cargo test` 272/272.
5.7 KiB
Keyboard shortcuts
Discover commands and open help
- Open Command Palette using
Ctrl+Shift+Pon Windows/Linux orCmd+Shift+Pon macOS, or use its visible button/menu item. - Type an action name. The palette includes application actions and the current Location's custom commands; availability depends on the active view.
- Run Open help to open this guide in the current UI language in an external browser context. Native Help → CodeNomad Help opens the same guide.
Help leaves the application view and draft untouched. If opening fails, visit CodeNomad Help directly. A command being discoverable does not mean it has a customizable shortcut: the shortcut manager covers a fixed 49-command renderer catalog, not every palette or native-menu action.
Record, disable and reset
- Open Settings → Keyboard shortcuts and use Filter shortcuts to find the action.
- Choose Edit, then press the desired combination in Press a key combination. Recording saves that binding.
- Use Disable to remove that action's renderer binding, Reset to restore its default, or Reset all for all renderer bindings.
- Resolve warnings on every conflicting row; conflicts are reported, not silently disabled.
Bindings are saved in CodeNomad UI configuration and affect clients sharing that configuration. They do not edit OpenCode's CLI/TUI bindings or native menu accelerators. Recording suppresses app renderer shortcuts, but cannot suppress the operating system or native menu. Cancel, focus loss, closing the section or leaving the window ends recording. Bare modifiers and IME composition are ignored; plain Tab/Shift+Tab moves focus.
If saving fails, keep the old shortcut available and retry after checking the displayed binding. Reset is the safe recovery for an accidental assignment.
Renderer defaults
Mod means Ctrl on Windows/Linux and Cmd on macOS. These are defaults, not guarantees that the OS/native host will deliver the key. Scope matters: the same key can serve a different action on the home page, in a composer or in search.
| Action | Default |
|---|---|
| Open command palette | Mod+Shift+P |
| New instance / Browse for a folder on the home page | Mod+N |
| Close app tab | Mod+W |
| Previous / next app tab | Mod+[ / Mod+] |
| App tab 1–9 | Mod+1 through Mod+9 |
| Rename instance (tab context) | F2 |
| New session | Mod+Shift+N |
| Close session | Mod+Shift+W |
| Previous / next session | Mod+Shift+[ / Mod+Shift+] |
| Session tab 1–9 | Mod+Shift+1 through Mod+Shift+9 |
| Instance info | Mod+Shift+L |
| Search session history | Mod+F |
| Next / previous search result (search focused) | Enter / Shift+Enter |
| Focus prompt / Clear prompt | Mod+P / Mod+K |
| Open model / agent selector | Mod+Shift+M / Mod+Shift+A |
| Select model variant | Mod+Shift+T |
| Move blocking tools to background (composer) | Mod+B |
| Send prompt | Enter |
| Send with alternate follow-up behavior | Mod+Shift+Enter |
| Insert new line | Shift+Enter or Mod+Enter |
| Previous / next prompt (composer) | ArrowUp / ArrowDown |
| Unfocus prompt / Exit shell mode | Escape, according to composer context |
| Stop session | Press Escape twice; the first press displays confirmation |
Send side question (/btw window) |
Mod+Enter |
| Save file (workspace editor) | Mod+S |
For a configuration with Enter-to-submit disabled, Send prompt defaults to Mod+Enter and Insert new line to Enter or Shift+Enter. An explicit shortcut override replaces that default. Use the manager to see the effective binding. Previous/next session cycles the session list; it is not the sidebar's browser-like Back/Forward history, which has no shortcut.
Native keys and platform interception
Native keys are fixed and remain active even after you change or disable the corresponding renderer binding. In particular, native New Window uses Mod+Shift+N, the renderer's default for New session. Use a visible New Session control or rebind the renderer action if the native menu intercepts it. Likewise, native Mod+W can close the window rather than just an app tab.
| Native action | Electron | Tauri |
|---|---|---|
| New Window | Mod+Shift+N |
Mod+Shift+N |
| New Instance / Command Palette | Mod+N / Mod+Shift+P |
Mod+N / Mod+Shift+P |
| Reload / Force Reload | Mod+R / Mod+Shift+R |
Mod+R / Mod+Shift+R |
| Actual Size | Mod+0 |
Mod+0 |
| Zoom | Mod+Plus / Mod+- |
View-menu controls and platform webview zoom input |
| Full Screen | F11 on Windows/Linux; Ctrl+Cmd+F on macOS |
Ctrl+Cmd+F menu accelerator on macOS; use the menu on other platforms |
| Developer Tools | Ctrl+Shift+I on Windows/Linux; Alt+Cmd+I on macOS |
Alt+Mod+I |
Plain browser windows also retain their browser shortcuts. If a binding never reaches CodeNomad, choose another combination rather than disabling security or changing OS-wide keys.
Keyboard layouts and text entry
Digit-row and square-bracket shortcuts use physical key positions for recording, execution and conflict checks, including AZERTY/QWERTZ layouts. Other keys use their logical values. Record on the keyboard you intend to use, then check the displayed result.
During IME composition, text entry takes precedence. Prompt history and Escape actions also depend on focus, picker/shell state and the current operation; do not assume every ArrowUp or Escape is an unconditional global action. Hover tooltips and the shortcut manager show the current assignments without adding a permanent keyboard-help strip.