v0.25.0
0.25.0
Stable promotion of beta v0.25.0-beta.27.
Aggregated changes since previous stable:
0.25.0-beta.0
Minor Changes
- Add first-class OpenClaw support to
ok init. OpenClaw is now a detected editor: when~/.openclaw/exists,ok init(and OK Desktop's first-launch consent dialog) register the OpenKnowledge MCP server in~/.openclaw/openclaw.jsonundermcp.servers, using the same resilient launcher every other editor gets — it findsokwhether you installed the desktop app or the npm CLI, so there's no PATH to hand-configure. OpenClaw is only ever configured when it's actually installed: the detection gate holds even in the desktop consent flow, so~/.openclaw/openclaw.jsonis never written on a machine without OpenClaw. The format-preserving JSON writer now handles editors whose server map nests one level deeper (mcp.servers.<name>), preserving comments, key order, and unrelated entries byte-for-byte.
Patch Changes
- Mermaid diagrams now expose explicit zoom, pan, and reset controls while filling the available preview area. Mouse-wheel zooming and drag panning are disabled so diagram blocks stay stable unless the user chooses an action button.
- @inkeep/open-knowledge-core@0.25.0-beta.0
- @inkeep/open-knowledge-server@0.25.0-beta.0
0.25.0-beta.1
Patch Changes
- Fixed extra left indentation under the project name and in the Skills section of the file sidebar, introduced when the Skills viewer was added — both sections now align with the file tree's rows.
0.25.0-beta.2
Patch Changes
- Fix toasts becoming un-dismissable and covering controls while a modal dialog or
sheet is open. Sonner renders its toaster in a portal on<body>, and a modal
Radix layer setsbody { pointer-events: none }, which the toast inherited, so
it painted on top of the dialog but its close/action buttons were click-dead
(the "Added ok to your PATH" onboarding toast was the visible case). Toasts are
now kept interactive under a modal layer, and dismissing a toast no longer closes
the dialog or sheet beneath it.
0.25.0-beta.3
Patch Changes
- Fix the server being unreachable on Windows when your coding agent auto-starts
it over MCP. The server used to bind thelocalhosthostname, which Windows
resolves to IPv6 (::1) only, while the tools connecting to it use IPv4
(127.0.0.1) — soedit/execcalls failed with "Server unreachable: fetch
failed". The server now binds numeric127.0.0.1directly (still loopback-only),
and the MCP shim and theok uiproxy connect to the same address, so there is
no longer any IPv4/IPv6 mismatch on any platform. You no longer need the
--host 127.0.0.1/HOST=127.0.0.1workaround. macOS and Linux behavior is
unchanged.
0.25.0-beta.4
Patch Changes
- Keep the toast stack below an open modal dialog or sheet. The previous toast fix made toasts clickable while a modal Radix layer is open, but sonner's toaster renders above the dialog, so a toast overlapping the modal (like the first-launch "Added ok to your PATH" notice over the MCP consent dialog) intercepted clicks aimed at the modal's own buttons. While a Dialog or Sheet overlay is mounted the toaster now sits under the overlay: the modal stays fully clickable, the toast shows dimmed without pretending to be interactive, and it becomes clickable again as soon as the modal closes.
0.25.0-beta.5
Patch Changes
-
Fix the right-docked terminal and the doc panel fighting over space. Six confusing interactions are gone:
- Dragging the terminal narrower no longer pops the closed doc panel open — the space returns to the editor.
- With the doc panel closed, the two resize handles no longer overlap at the same pixel seam — a drag aimed at the terminal edge can't land on the (now inert) doc-panel handle and expand the doc panel instead.
- Closing the doc panel while the terminal is open no longer inflates the terminal; the editor absorbs the width, and the terminal keeps its own size.
- The terminal column can now be dragged shut: dragging it below half its minimum width snaps it closed and hides it on release, matching the doc panel's drag-to-close affordance. (The hide button still works.)
- Hiding the terminal no longer resurrects a doc panel you had closed while it was open (and showing the terminal no longer restores a stale doc-panel state either) — the doc panel keeps whatever state it was in.
- Collapsing the left file sidebar no longer widens the terminal column (measured 480px → 673px before the fix) — the editor absorbs the freed space while the doc panel and terminal hold their pinned widths.
Closed panels are now consistently button-only to reopen: a collapsed doc panel no longer exposes a draggable rail handle (use the toolbar toggle or ⌥⌘B), matching the terminal, whose handle disappears when it is hidden.
0.25.0-beta.6
Patch Changes
- Fix the merge-conflict controls (Exit merge / Undo / Save resolution) being
covered by the floating Ask AI composer, which made conflicts impossible to
confirm without first collapsing the composer. The conflict footer now
publishes its height and the composer anchors above it, so the controls stay
visible and clickable with Ask AI stacked on top of them. The conflict diff
also reserves scroll room under the composer, so the last hunks' Accept and
Reject buttons can always scroll clear.
0.25.0-beta.7
Patch Changes
- Generate a Windows-launchable MCP server config instead of the macOS-only
/bin/shchain. On Windows,ok init,ok start, and MCP autostart now registerpowershell -NoProfile -NonInteractive -Command <chain>(resolving the npm-globalok.cmdshim first, thennpx). The reclaim sweep now recognizes both platforms' canonical entries everywhere, so a config written on one OS is never clobbered back and forth by the other, and hand-fixes on Windows stop being overwritten with an unlaunchable entry.
0.25.0-beta.8
Patch Changes
- The create composer's "Open the OK editor in web view." directive now rides
its own paragraph. It was appended to the last line of the prompt body, which
glued it onto the final line of your blockquoted brief (or the last
@-mention), so it read as part of your own quoted words — effectively
invisible as an instruction to the receiving agent. Bare create prompts (no
brief, no mentions) keep the same single-line shape as the other handoff
prompts, and turningappearance.preview.autoOpenoff still drops the
directive entirely.
0.25.0-beta.9
Minor Changes
-
Add
ok uninstallandok deinit— one command each to reverse OpenKnowledge's footprint.ok uninstallremoves OpenKnowledge from your whole machine: it stops running servers, clears credentials (the GitHub keychain token,auth.yml, and the embeddings key), reverts the PATH shim (strips the managed block from your shell rc files and removes the recorded~/.ok/binsymlinks), surgically removes only OpenKnowledge's own entry from each editor's MCP config (keeping your other servers, comments, and formatting), tears down the installed skill bundles, deletes the app-data directories, and finally removes~/.ok. It offers to also clean recent projects, and detects how the app was installed to print the exact removal command — it never deletes its own binary. Your markdown content and your authored skills (~/.ok/skills) are kept unless you pass--purge-content.ok deinitremoves OpenKnowledge from a single project — its.ok/, editor MCP entries,.claude/launch.jsonentry,.git/info/excludelines, and shadow repo — while leaving your markdown untouched, so re-runningok startre-scaffolds cleanly.Both commands are safe by default: a
--dry-runpreview, a confirmation that defaults to No,--jsonoutput, and surgical edits that never clobber your non-OpenKnowledge config.
0.25.0-beta.10
Patch Changes
- The macOS app now asks before editing your shell startup files. Putting
okon yourPATHused to happen silently on first launch — a managed block appended to~/.zshrc/~/.bash_profile/ fish'sconf.d. That write is now a pre-checked "Add theokcommand to your terminal" toggle in the first-launch dialog, and nothing touches your shell config if you uncheck it. Declining only affectsoktyped in an external terminal: the app's built-in terminal now hasokavailable regardless, and MCP wiring and "Open with AI" launches never depended on it. Decisions are recorded inpath-install.json; machines that already have the managed block are treated as consented (no re-prompt, block left in place), deleting the block still opts out permanently, and a declined install can be re-run any time from File → Set up OpenKnowledge integrations… (the renamed "Configure AI tool integrations…" item).
0.25.0-beta.11
Patch Changes
-
Fix spurious bridge warnings and re-derive churn on documents containing CommonMark lazy continuations.
Documents whose markdown carries a lazy continuation — an unindented wrapped line inside a list item, a paragraph glued directly under a list's last bullet, or a blockquote continuation without the
>prefix — previously emitted recurringbridge-invariant-violation(tolerance-classuntracked) andbridge-split-brain-rederivewarnings, re-derived the editor fragment on every settlement, and re-ran fragment reconciliation on every save, even though the document parsed correctly and no data was ever at risk.The bridge health checks now recognize parse-equivalence: when the stored bytes and the canonical serialization parse to the same document, the resting byte difference is reported through the
bridge-tolerance-appliedchannel (classparse-equivalence) instead of alerting, and no re-derive or reconciliation churn runs. Genuine divergences — where the editor state does not match what the stored markdown parses to — keep alerting exactly as before. Stored bytes are never rewritten; your authored lazy-continuation form stays on disk verbatim.
0.25.0-beta.12
0.25.0-beta.13
Patch Changes
- Fix the Git auto-sync and semantic-search toggles silently having no effect until
the server restarts. Config changes made in the editor are now applied to the
running server immediately, without depending on the filesystem watcher echo
(which could drop the event on some platforms, notably Windows). The server now
re-applies a validated config change to its live consumers directly at persist
time, so toggling auto-sync or semantic search on or off takes effect right away.
0.25.0-beta.14
Patch Changes
- Add browser-style keyboard shortcuts for editor tabs, including new/reopen tab, tab cycling, and numeric tab jumps.
0.25.0-beta.15
Patch Changes
-
Fix the Settings dialog's hidden title wiring so Radix can associate
DialogContentwith itsDialogTitlefor screen reader users.Coalesce overlapping GitHub auth-status checks in the HTTP transport so opening multiple auth-aware surfaces at once does not trip the local operation concurrency guard.
- @inkeep/open-knowledge-core@0.24.1-beta.0
- @inkeep/open-knowledge-server@0.24.1-beta.0
0.25.0-beta.16
Patch Changes
- Typing into a document that carries organic markdown forms (like a list whose next paragraph starts without a blank line) no longer emits spurious
bridge-split-brain-rederivetelemetry on space keystrokes. The bridge health check now treats trailing line whitespace — a byte shape the serializer already declares insignificant — as the documented normalization it is, while genuine divergence keeps failing loud. Keystroke-granularity coverage (per-character transactions, zero-gap bursts, two-peer concurrent typing) is now part of the integration and fuzz suites.
0.25.0-beta.17
Minor Changes
- Share links now tell you at share time when the link won't show what you see. When you copy a share link for a doc or folder that isn't on GitHub yet, or that has unpushed changes, the share popover shows a non-blocking warning — for example "This doc isn't on GitHub yet. The link won't work until it's pushed." or "This doc has unpushed changes. Recipients will see the last pushed version." The warning stays out of the way when the target is already up to date (and when auto-sync will publish the change on its own). The
share_linkMCP tool relays the same signal so agents don't hand over a dead link as if it were good. The freshness check is local-only — it never reaches the network, and it never blocks or fails the share.
0.25.0-beta.18
Minor Changes
-
A new Terminal → New Terminal Window command opens a terminal in its own dedicated window, so you can keep a full-height shell alongside the editor instead of sharing the docked panel's vertical space.
- The window reuses the docked terminal's multi-session tabs: open more shells with the
+affordance, switch with ⌘-number, and each tab is its own login shell. The ⌘-number chord is always active here since the whole window is the terminal. - Launched from a project, the window inherits that project's cwd and config (its shells start at the project root); launched with no project focused, it opens a shell at your home directory.
- Open it as many times as you like — each invocation is an independent window with its own terminal host, including multiple windows for the same project.
- Closing the last tab closes the window, and closing a window reaps all of its shells (no orphaned processes).
The command matches VS Code's "New Terminal Window" and ships without a keyboard shortcut; ⌘J stays the docked Show/Hide Terminal toggle. The docked terminal is unchanged, and the security posture is the same: terminals remain human-only and default-on, with no new IPC surface.
- The window reuses the docked terminal's multi-session tabs: open more shells with the
0.25.0-beta.19
Patch Changes
- Nudge agents toward folder templates on write. When a document is created in a
folder that ships templates but the write passed notemplate, thewrite
tool now lists the folder's available templates in its result and suggests
passing one next time. The write still lands unchanged — the hint is advisory,
so folders that pre-selected a shape stop getting free-form docs just because
the agent wrote from memory without listing the folder first.
0.25.0-beta.20
Patch Changes
-
Make the right-docked terminal consistent with the bottom dock on the "new tab"
(empty editor) screen: opening a terminal in either position now collapses the
empty state to its header, dropping the chat composer bubble and starter-pack
list — the open terminal is its own AI entry point, so the bubble no longer
competes with it. The header bottom-anchors above a bottom dock and centers
beside a right-docked terminal.The right-docked terminal can also be resized much wider now: the fixed 900px
cap is gone, and the column can grow to near-full width while the editor always
keeps a minimum visible sliver — mirroring how tall the bottom dock can already
be dragged. A wide width persists across reloads instead of snapping back.
0.25.0-beta.21
Patch Changes
- Refine the empty-state starter-pack picker. Secondary packs now collapse behind a "Show more" toggle with an animated reveal, an info tooltip explains what a starter pack is, and each pack's folders show short plain-language summaries instead of the agent-facing descriptions. The "what gets created" preview uses clearer folder / file / skill cards (the skill card shows the pack name with a "Skill" tag) and a simpler card-shaped loading state.
0.25.0-beta.22
Patch Changes
- Point the in-app social links at the new X (Twitter) handle
@OpenKnowledge
(x.com/OpenKnowledge), replacing the former@OpenKnowledgeAI. Affects the
Resources popover and the subscribe card's "Follow us on X" link.
0.25.0-beta.23
Patch Changes
bun installon a fresh clone no longer fails on machines without a C build toolchain. The desktop app'snode-ptynative dependency is now optional (its build is only needed for the macOS desktop terminal), and puppeteer's Chrome-for-Testing download (~600 MB on disk) — used only by an engineer-local memory probe — is skipped at install time (bunx puppeteer browsers install chromefetches it on demand).
0.25.0-beta.24
Minor Changes
- Add per-skill opt-in for the two user-global OpenKnowledge skills (
open-knowledge-discoveryandopen-knowledge-write-skill). The first-launch desktop consent dialog now shows a checkbox per skill (pre-checked), andok initaccepts--skills <ids>/--no-skills. The decision is recorded in~/.ok/skill-state.ymland honored by every install path — desktop launch reclaim,ok start,ok repair-skills, andok init— so a declined skill is never re-installed, and unchecking one that is already installed removes it. Existing installs are grandfathered (treated as opted in, nothing removed).ok initnow installs both user-global skills when enabled instead of onlydiscovery.
0.25.0-beta.25
Patch Changes
-
Opening a share link with the app fully closed now reliably lands on the shared target. Previously, if macOS delivered the link a beat after launch, the app restored your last-open project first and the clone dialog for a repo you don't have locally was immediately buried behind that restored window.
The desktop boot path now waits for cold-start link delivery to settle (a short grace window that ends early the moment a link claims the launch) before deciding whether to restore the previous project. A launch without any link still restores your last project as before; the wait overlaps startup work, so it adds no noticeable delay.
0.25.0-beta.26
Patch Changes
-
Fix git sync mishandling files whose names contain non-ASCII characters (e.g.
ä,ö,å, accents, CJK). Git quotes such names in its output ("hyv\303\244\303\244 y\303\266t\303\244.md"), and the sync engine reused that escaped string as a literal path, so:- Deleting a non-ASCII-named file was never committed — the deletion silently failed to sync on every cycle, forever, until the file was removed manually with
git rm. - A merge conflict on a non-ASCII-named file was misclassified and could abort the merge and pause sync instead of surfacing the conflict for resolution.
- Auto-save commit messages and the conflict list showed the escaped gibberish instead of the real filename.
Git path output is now read NUL-separated (
-z), so filenames round-trip as real UTF-8 everywhere the server parses paths: the sync push/delete cycle, conflict detection and resolution, dirty-file overlap checks before branch switches, and skill version restore. - Deleting a non-ASCII-named file was never committed — the deletion silently failed to sync on every cycle, forever, until the file was removed manually with
0.25.0-beta.27
Patch Changes
- The share-receive "changed locally" panel no longer offers to enable auto-sync when it is already on. With sync enabled it now offers Sync now instead: the push publishes your local move/rename/delete, and the panel re-checks the branch and pivots to the honest outcome — including the "moved to — open it there?" redirect when the doc was renamed. With sync off, the Enable auto-sync flow is unchanged, and when the sync engine is unavailable or failing the panel defers to the sync badge rather than offering a dead button.