v0.17.0
Part of the OpenKnowledge changelog.
Minor Changes
- Launch Codex and Cursor CLIs from the docked terminal, alongside Claude. The "Open with AI" surfaces (header popover, file and empty-space right-click menus, and the empty-state create composer) now offer a Codex (
codex) and Cursor (cursor-agent) row in the Terminal section, each starting an interactive session with the same scope-specific prompt the Claude CLI launch uses. As with Claude, a CLI that isn't on your PATH suppresses the launch and shows an actionable "not installed" banner instead of a broken command.
Patch Changes
Fix the appearance theme toggle making other open project windows flicker between light and dark before settling. With more than one project open, switching
Light/Dark/Systemwould strobe every other window. The cause was an app-layer feedback loop: when a window observed another window's theme change, it re-applied its own briefly-stale saved theme and wrote that stale value back to the shared theme storage, which re-triggered every window until all windows caught up. Theme changes now propagate across windows cleanly, with no cross-window flicker. (A companion change separately reduces redundant macOS window-chrome translucency work on the same switch.)Tab rename UX: clicking an already-active tab pill opens its properties popover (Notion-style); pressing Enter inside a single-line string input in any PropPanel dismisses the popover.
UX research found users couldn't discover how to rename a tab — the pill itself had no rename affordance, and the only path was a hover-revealed chrome bar on the Tab body. Clicking the same pill twice now opens the Tab Properties popover with the Label input focused, so a user who clicks expecting to edit finds the rename surface on the very next click. The gear button gained a
data-jsx-gearattribute so Tabs.tsx can address it without coupling to its i18n'daria-label.Enter on a single-line string input now matches the form-submit contract every text input ships with — pressing Enter after typing acknowledges "I'm done" and closes the popover. PropPanel auto-saves on every keystroke, so Enter is acknowledgment, not commit; nothing about the data path changes. Both PropPanel's plain
<Input>branch and SrcAutocomplete's empty-suggestion-list branch route through a newonDismisscallback that JsxComponentView wires to its popover close. CodeMirror code editors keep Enter as newline (multiline by design); SrcAutocomplete's existing "Enter picks the highlighted suggestion" contract takes priority when a suggestion is highlighted.Fix Open Knowledge on Windows. Filesystem paths are now compared and normalized in a separator-correct way, so creating a new file or folder no longer fails with "path must not escape content directory" or silently vanishes from the tree, and the file tree, backlinks, tags, and sync no longer break on backslash-separated paths.
ok initalso installs the agent skill reliably now that thenpxsubprocess is spawned through a shell on Windows (wherenpxresolves tonpx.cmd).