OpenKnowledge

v0.30.0

Released Jul 13, 2026. Part of the OpenKnowledge changelog.

Minor Changes

  • Links in the terminal are now clickable. URLs open in your browser (including explicit OSC 8 hyperlinks from tools like ls --hyperlink), and file paths in output — absolute, relative, or with a trailing :line:col — become clickable when they point to something inside your project: Markdown documents open in the editor, folders open to their overview, and other files open in the OS default app (revealed in Finder when the type can't be opened directly). Only in-project paths that actually exist are highlighted, so there are no dead links. A file path pointing outside your project asks first with a "this file is outside your project — reveal in Finder?" prompt. Links inside a full-screen terminal app that handles its own clicks (like the Claude TUI) are left to that app, so they open exactly once.

  • Remove the launch.json preview machinery and the pane-target arming subsystem. Claude Code Desktop's in-app Browser pane now opens the preview URL directly (preview_start({url}) + navigate({url})), so OK no longer scaffolds .claude/launch.json.

    Breaking for consumers: the @inkeep/open-knowledge package drops the scaffoldLaunchJson, LAUNCH_UI_CHAIN_*, and LaunchJsonResult exports; the preview_url MCP tool drops the armPaneTarget param; and the /api/config response drops the paneTarget field. The ok start repair sweep now removes any pre-existing open-knowledge-ui launch.json entry instead of rewriting it.

  • The file tree gains a "Show" visibility menu. The tree-options button in the sidebar toolbar (now always visible) opens a two-section popover: the existing Expand all / Collapse all commands, and a new Show group with four checkboxes: Hidden files, .ok folders, Only markdown files, and Skills. The same toggles appear in the sidebar right-click menu and the macOS View menu, and every surface stays in sync. Preferences persist per project per machine.

    • "Only markdown files" strips the tree to just your .md/.mdx documents and folders, for a focused notes view.
    • ".ok folders" reveals OpenKnowledge's own project state (skills, templates, config) in place, read-only: clicks route to the Skills editor, the template editor, or a read-only viewer, and internal worktrees/ and local/ directories are never listed. Search is unaffected by the reveal.
    • "Skills" hides or shows the sidebar Skills section.
    • Opening a doc the tree currently hides (via a link, search, or URL) now leaves the tree quiet: no stale row stays highlighted and the tree no longer scrolls to the wrong row (two pre-existing defects fixed). A subtle editor indicator names which toggles hide the current doc, with one-click flips.
    • When active filters hide everything, the tree explains itself and offers a one-click "Reset view filters".

Patch Changes

  • Configure a custom OpenAI-compatible embeddings endpoint from Settings → This project → Search instead of editing config files by hand. The semantic-search settings now expose the embeddings base URL directly, and the account copy plus ok embeddings set-key messaging now describe the key as belonging to the configured embeddings provider rather than only to OpenAI.

  • Files written into a freshly created folder no longer go missing from page listings, search, and the collaboration layer when the watcher's per-directory subscription loses the race with the write (seen on Linux under load, e.g. mkdir notes && cp draft.md notes/). The new-folder rescan that already recovered dropped subfolders now recovers the files inside them too, replaying them through the normal change pipeline.

  • Fixed a rare corruption where typing into a document with unregistered JSX components (like <Steps>/<Step>) in source mode could duplicate or re-indent a block in the saved document. Under CPU load, a background editor could issue a structural rewrite of the same block the server was rebuilding keystroke-by-keystroke, and both copies survived into the authoritative document. The editor no longer issues those background rewrites while it is hidden in source mode, and the server now detects and discards a duplicated block instead of persisting it, so the typed content stays intact.

  • Add Hermes Agent (Nous Research) as an MCP-host AI option. ok init now detects Hermes (via ~/.hermes/) and registers the OpenKnowledge server in ~/.hermes/config.yaml under mcp_servers, using the same resilient launcher every other editor gets. Hermes keeps its whole config — models, tool filters, other MCP servers — in that one YAML file, so OK edits only its own open-knowledge entry via a format-preserving surgical write (the first YAML host; comments, values, key order, and block formatting are preserved) and declines rather than clobber a config it can't safely parse. Uninstall/repair strip only OK's own entry, leaving a foreign server that shares the key untouched. Like OpenClaw, Hermes is written only when it's actually installed.

  • Two editor insertion-route fixes.

    Block components (Callout, and any block-level JSX component) can no longer be placed inside a table cell, where they previously disappeared on save: a table cell has no markdown spelling for block content, so the component serialized to zero bytes while still showing in the editor. Every insertion route now refuses it as a silent no-op — the slash menu omits block-component entries when the caret is in a cell, and pasting or dropping a block component into a cell leaves the document unchanged. Placing the same component outside a cell is unaffected, and content that already carries a component in a cell (from a collaborator or a raw file edit) is left alone rather than fought.

    Pasting copied list items at a list-item boundary now lands them as sibling items instead of mis-placing them (inkeep/open-knowledge#609). Pasting at the start of an item puts the copied items above it, at the end puts them below it, and mid-item splits the item at the caret. Task, bullet, and ordered lists behave the same way, nested lists inside the pasted items are preserved, and pasting a whole component or table still reproduces it byte-for-byte.

  • Two markdown fidelity corrections. The editor no longer writes a redundant backslash into stored source when prose contains interior punctuation like 1)x, a@x, a{x, a![x], or an unclosed a![x — those characters now round-trip as the literal text you typed. And pasting a list item so it holds a nested list as its first block (common when rearranging to-do lists) no longer emits garbled bytes: the item and its nested list now serialize to a form that re-parses to the same structure, instead of leaking a stray - [ ] marker into the item text or silently re-indenting the trailing content.

View v0.30.0 on GitHub