v0.55.1
Released Aug 14, 2026.
Patch Changes
In-app agents no longer die with an unreadable error when the Node.js or uv on your machine is broken.
OK checked that
npx/uvxexisted before launching an agent, but not that it could actually run — so an interpreter that was installed yet fatally broken (on macOS, most often a Homebrewnodewhoseicu4clibrary was upgraded out from under it) launched an agent that aborted before it could say hello. All you saw wasinitialize failed: ACP connection closed, with nothing to act on. OK now checks that the interpreter runs, and a broken one gets the same offer a missing one already got: OK downloads and uses its own private copy of Node.js or uv, with your consent. If you decline, the message now says the interpreter is installed but failing rather than claiming it isn't installed.Agent failures also reach the server log now, so a bug report carries them. The last thing a dying agent wrote to its error output — the linker error, the stack trace — was previously visible only in the chat panel, which meant a diagnostic bundle filed for an agent crash contained no evidence of it. An agent that exits unexpectedly mid-session is logged too.
Ask about downloading a managed Node.js/uv runtime once per launch instead of remembering the answer.
The consent prompt used to carry a "Remember this for future agents" checkbox that defaulted to on, and the decision was persisted to
~/.ok/acp-runtime-consent.json. A remembered "Not now" removed the offer permanently with nothing in the UI to undo it — the only cure was deleting that file by hand. A remembered "Download" authorized a later download the user never saw.The prompt is now per launch: decline, and the next agent that needs the runtime asks again. An already-installed runtime is still used without asking, which is what made the remembered grant near-dead weight anyway. Any existing
acp-runtime-consent.jsonis simply ignored — nothing reads or writes it now, and leaving it costs nothing.Repair a damaged managed runtime instead of telling the user to delete a directory.
When OK's own downloaded Node.js/uv was present but couldn't run — an interrupted extraction, a clobbered launcher — the launch failed with "delete that directory and OK will download a fresh copy on the next launch". That is homework in a terminal for a copy the user never installed and can't inspect.
OK now discards the damaged copy itself and offers to download a fresh one, with the same consent card and progress the first download uses. Three outcomes stay honest about which one happened: declining says OK's copy is damaged (not that the interpreter is missing); a replacement that also won't run points at the machine (antivirus, security policy, unsupported CPU) rather than at a system Node that was never involved; and a copy that can't be moved aside — another agent still holding it open, which is how this fails on Windows — says so instead of claiming a fresh download failed.
The repair is one attempt per launch, and every download is still gated on the prompt, so nothing refetches behind the user.
Signing in to an agent now reads as a sign-in rather than an error. When a thread is waiting on authentication, the agent's mark and name take the pane with the ways in stacked beneath, one leading and the rest as alternatives, instead of an amber alert card with a row of equally loud buttons.
Device-code flows now show their code. An agent signing in has no session yet, so the code and confirmation URL it prints are the only place that information exists, and OK was discarding them; the browser would ask the user to confirm a code their device never displayed. The code now appears while the sign-in runs, one tap to copy, with the confirmation page linked below it.
A sign-in in flight has a status of its own. It used to report
installing, so clicking a method replaced the prompt with "Starting the agent" while the agent was in fact waiting on the user, and the sign-in options vanished mid-flow.A completed sign-in the running agent cannot see now relaunches the agent instead of asking again. An agent that reads its credentials at startup will still refuse a session even after
authenticatesucceeds, and the fix has always been to restart it, which is what Retry did. OK now takes that step itself.Startup failures no longer pile up on a working thread. Each failed attempt left a card behind, so a thread that eventually signed in opened on a stack of warnings about a sign-in the user had already completed. A launch that succeeds retires the failures it took to get there; failures inside a live session still stand.
Windows and Linux download buttons on the marketing and docs sites now open the download picker instead of assuming an architecture. The picker page's primary button explicitly labels the architecture its convenient default build assumes.
Clicking a commented property value now opens its thread, the way clicking a commented passage in the body always has. The body gets that from the editor — the highlight is a decoration the editor can hit-test — while a property value is a plain form control with no decorations and no positions, so the same gesture had to be assembled from the caret offset a click sets.
Each comment now carries when it was last revised, so an edited comment reads as edited instead of showing its creation time.
The passage a comment is on now renders as a quote in the agent transcript. Sending a batch composes each comment as its document, the selected text as a blockquote, and the note itself — but the transcript printed sent messages verbatim, so that structure arrived as flat text with the
>markers showing and every line run together. Sent messages render as markdown now, so the passage reads as a quote under the file it came from and the note reads beneath it.Folder links now work like links. Clicking a wiki link or markdown link that targets an existing folder opens the folder view (the same destination the Links panel already used) instead of doing nothing, and the Problems tab no longer reports links to existing folders as dead — the link audit's existence oracles learned folders on both of its planes, and folder existence stays fresh as documents beneath a folder come and go. Links to folders that do not exist still report as dead links.
Hide OpenKnowledge's own built-in skills from the fullscreen graph, and add a control for the rest.
The link index treats skill bundles as graph nodes on purpose, but a global skill can never link to a document — the index registers it node-only and resolves its refs same-scope. OK force-installs two of its own bundles into every project, so every graph carried four nodes that were structurally incapable of connecting to anything in it.
Those bundles are now excluded from the fullscreen graph unless another skill links them directly by name. A new toggle beside the external-URL control governs your own skills, project and global, and shows them by default. The docked local graph is unchanged: it still shows every skill node, so a skill's own neighborhood stays inspectable there.
Back and Forward no longer pile up tabs. With preview tabs on, single-clicking through several files in the sidebar keeps the strip at one tab, but pressing Back then added a permanent tab for each earlier file, so a few presses turned one tab into a strip you had to close by hand. History navigation now reuses the same preview slot the sidebar click used, so going back through a run of previews leaves you with one tab, italic, on whichever file you landed on. With preview tabs turned off, Back and Forward behave exactly as before and open permanent tabs.
Show property changes in the version timeline and the agent diff pane.
A version that only changed frontmatter used to render "No content changes in this version" over an unchanged document: the timeline row was there, but the pane could not say what happened in it. Property changes now appear as their own block above the prose diff, in both render modes and in both panes, so an edit to
status,tags, or any other property reads asdraft → readyrather than as silence.The comparison is structural, not textual — it parses both frontmatter regions and compares values — so reordering keys, requoting a string, or restyling a list reports no change, while a real value change always does. A region that fails to parse says so and shows both raw sides rather than reporting nothing.
Opening a plain terminal no longer shows the "Claude Code (claude) isn't installed" banner. The docked terminal probed Claude readiness on every session, so a bare tab opened with Cmd+J, the Terminal menu's "New Terminal", or the dock's + nagged about claude (or about connecting OpenKnowledge tools) even though the user never picked a CLI. Readiness feedback is now scoped to launches that actually target the Claude CLI: those still surface the install and connect-tools banners, while plain tabs, "run this command" tabs, and reload-adopted tabs stay banner-free.