OpenKnowledge

v0.37.0

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

Minor Changes

  • Add in-app AI agent threads via the Agent Client Protocol (ACP). "Open with AI" now includes a "Start an agent" option that runs a coding agent (Claude, Codex, Gemini, Cursor, Copilot, OpenCode, and the rest of the ACP registry) inside OpenKnowledge itself, in both the desktop app and the browser.

    "Start an agent" is available from every launch surface: the sparkles popover, the file-tree and empty-space right-click menus, and as a selectable default in the Ask AI and create-project composers. Every agent gets OpenKnowledge's MCP tools: agents that support HTTP MCP connect to the running server directly, and all others are handed a stdio bridge, so tools like search, write, and edit work regardless of the agent's transport support. When the agent's own harness already has OpenKnowledge's managed MCP entry installed (a project or user config written by ok init or the desktop consent flow), the thread skips injecting a second copy — the agent connects through the installed entry instead of two same-named servers fighting over which one loads. The check matches on what the entry launches (OpenKnowledge's own server command), so a harness's own per-tool approval settings layered onto that entry don't defeat it.

    Threads show the agent's messages, its plan, tool calls with diffs, and permission prompts, and you approve or decline each sensitive action. Agent replies render as markdown — headings, lists, tables, links, and code blocks with a copy button — live while the text streams, closing half-finished formatting cleanly mid-stream instead of flashing raw ** and backticks. Agents edit your notes through OpenKnowledge's own write path, so their changes are attributed to the agent and appear live in the editor. Each agent uses its own account and billing; nothing proprietary is bundled. Registry adapters install on first use and run as separate processes. For adapters that rely on an existing harness, OpenKnowledge detects locally installed Claude, Codex, Cursor, and OpenCode CLIs and offers those agents across the session dock, prompt composers, and Open with AI menus without overriding explicit choices or terminal defaults.

    Follow the file: while an agent works, the editor follows along, opening each document the agent creates, reads, or edits so you can watch the work happen live — including documents referenced through OpenKnowledge's own MCP tools (write, edit, move, and paths inside exec commands). Toggle it from the thread header (on by default).

    Switch agents any time: the thread dock's "+" lists every agent you've registered plus "Choose another agent…" to browse the catalog, so the first pick is never locked in. Reopening an empty sessions dock repeats that same preferred agent, CLI, or terminal choice, and the selected tab stays scrolled into view as the strip fills up. When an agent offers session settings — model, reasoning effort, fast mode, approval policy, or sandbox mode — they appear together in one labeled settings menu in the thread header (Agent Client Protocol session config options).

    Lifecycle and cost guarantees: closing a thread (or shutting down the server) kills the agent's entire process tree and waits for it to actually die, so a stuck agent can't keep running — and billing its account — invisibly after you close it. A turn still running with no window attached is asked to stop after 10 minutes and force-closed after 20. Stop shows "Stopping…" and, if the agent ignores the request, offers Force stop; a message that can't be delivered surfaces as a toast instead of vanishing; hiding the thread dock actually hides it. Long transcripts also render much more smoothly — events arrive in batches and the transcript updates incrementally instead of re-rendering the whole history on every streamed chunk.

  • Agents that need npx or uvx now work even when those tools aren't installed. When you start an agent whose launcher requires Node.js (most agents — Claude, Codex, Gemini, and the rest of the npm-distributed catalog) or uv, and it isn't on your PATH, OpenKnowledge offers to download a private, pinned, checksum-verified copy for you and launches the agent through it — the same "just works" experience Zed provides, but nothing downloads without your explicit consent. The prompt appears inline in the thread with a size and source disclosure ("~45 MB from nodejs.org"), a progress bar while it installs, and a "Remember" option so you're asked at most once per machine. The runtime installs into ~/.ok/runtimes/ with its own private package cache, so it never touches the rest of your system, and declining still leaves you the manual-install path. This closes the gap where the desktop app — which bundles its own Node runtime but not npm — couldn't launch npm-distributed agents on a machine without a separate Node install.

  • Agent conversations are now saved and resumable. Every agent thread's transcript is persisted on disk as it streams (under the project's machine-local .ok/local/threads/ — never committed, never shared), so closing a tab, an idle cleanup, or a server restart no longer destroys the conversation.

    A history menu in the thread dock lists past conversations (newest first); opening one shows the full transcript — messages, tool calls with diffs, permission decisions — with no agent process running. Closing a tab now always archives (the X is never destructive); permanent delete lives in the history menu behind a confirm.

    Type to resume: sending a message into an archived conversation respawns the agent and continues the same session where the agent supports it — via ACP session/resume when available (no history replay needed, since OpenKnowledge keeps its own transcript), falling back to session/load with the protocol's replay de-duplicated. Agents that can't resume (or whose session has expired on their side — Claude, for example, cleans its own sessions up after 30 days) keep the transcript intact and offer a one-click "New thread with this agent" instead. Document-edit attribution, write-flash, and per-session undo stay continuous across a resume.

  • Agent thread tabs now get useful titles. The title comes from what you actually typed to start the thread — not the boilerplate lead-in a launch adds — so a tab reads "Fix the login redirect" rather than the shared "You're an agent working inside OpenKnowledge…" preamble every launch opens with. Auto-titles also skip the filler most prompts open with ("please", "can you", "hey, could you take a look at…"), so the words that actually distinguish a conversation land in the tab instead of a shared prefix; when stripping would leave nothing meaningful, the raw prompt line is kept as before (non-English prompts always pass through untouched). Long titles now truncate at a word boundary, and hovering a tab shows the full title.

    Tabs are also renamable: double-click a tab to type a new name (Enter commits, Escape cancels). Manual titles stick — they survive archive and server restarts, win over auto-titling, and apply to archived conversations in the history menu too.

  • Follow mode now scrolls to where the agent is writing and flashes the exact text it changed. When you're following an agent (the thread's Follow toggle, on by default) and it writes the document you're viewing, the editor scrolls the changed region into view and briefly highlights it — so a section the agent appends to the bottom of a long document pulls the viewport down to it and lights up, instead of the change happening off-screen. The highlight targets only the bytes that actually changed (diffed from before/after), so a full-document rewrite that only appends a section flashes just that section, not the whole page. In-app agent-thread writes now drive the same write-flash the MCP agent writes always have.

  • Fold agent threads into one unified sessions dock. Terminals and in-app AI agents now live as tabs in a single dock instead of two competing right-edge columns — one tab strip, one reveal tab, one ⌘J toggle, one mental model. A shell and an agent are just tabs of a different kind: each carries a kind icon (a shell glyph, or the agent's avatar with a live status dot), and reorder, activate, rename, and close work the same across both, with behavior dispatched by kind (closing a terminal kills its shell; closing an agent archives the conversation, recoverable from history).

    The dock is now host-agnostic: it renders in the browser too (agent tabs only there), so web users get the same docked, resizable, right-or-bottom placement the desktop terminal already had. The "New" split button merges every launch into one menu — your registered agents, "Choose another agent" to browse the catalog, and (on desktop) every CLI plus a bare terminal — and its primary button repeats your last pick across all three families. Launching an agent from an "Open with AI" menu opens a tab in this one dock and reveals it automatically. Conversation history moves with it: a history menu next to "New" (and a chooser on an empty dock) reopens or permanently deletes past conversations, so closing a thread archives it rather than losing it.

    A full renderer reload now restores the dock's interleaved tab order and which tab was active, alongside the terminals and agent threads it already recovered. The standalone macOS terminal window is unchanged (terminals only). No settings, shortcuts, or stored preferences change.

Patch Changes

  • In-app agents ship as a beta. Every agent picker carries a "Beta" tag on its "In this app" section, and the agent catalog dialog is likewise marked. The sessions dock no longer defaults its "New" button to "Start an agent" before you've picked an agent — with none chosen it stays a neutral "New" that opens the picker, so starting an in-app agent is always an explicit choice.
  • Agent threads now render what the agent actually does. OK implements the ACP terminal surface, so agents can run commands through it and the transcript shows each command with its live output and exit code. Tool-call diffs are genuine line diffs (unchanged lines collapse) instead of full before/after dumps. A permission prompt that parks a turn now surfaces as an "awaiting approval" thread status in the tab strip, every prompt has an explicit Deny, and resolved prompts summarize as approved or denied by what was actually chosen. The composer footer shows the agent's reported context usage, and tool calls display their raw input.
  • Fixed the empty-state "Create" composer so pressing Enter launches whatever the Create button shows. Previously, when the composer was set to start an in-app agent ("Start an agent" / a registered agent), pressing Enter fell through to a different action instead of launching that agent — only a mouse click on the button worked. Enter now performs the same action as the button in every mode (in-app agent, terminal CLI, or desktop app agent), so the keyboard and pointer paths never diverge. Desktop builds also gain an opt-in OK_FORCE_A11Y=1 launch flag that exposes the full web UI to the macOS accessibility tree, for VoiceOver and GUI-automation tooling.
  • Follow mode now flashes and scrolls to the agent's change even when it navigates you to the document after the write already landed — the common case that was silently doing nothing. Previously the scroll-and-flash only fired if the write arrived while you were already on that document; when following an agent across files, the tab would switch to each document and the edits would just "pop in" fully applied, with no highlight and no scroll. Agent writes now record which blocks they changed on the write-flash entry, so when follow mode brings a document into view the editor can still light up the changed section and scroll it into view. Writes you're already watching are unaffected (and never double-flash).
  • The docked Graph tab assembles live while an agent builds a knowledge base: when pages land in a burst with the graph open, the whole project graph frames itself and grows in — new pages scale and fade in with a brief halo, new edges fade in, and nodes are colored by their cluster: frontmatter. Follow mode also now understands batch writes (documents: [...]), which previously produced no navigation at all — the editor sat still through entire builds; it now follows the agent to the most recent page in each batch. The graph's view choreography is entirely signal-driven, so the graph_view MCP tool is retired (one less tool in every agent's context) along with its view-command plumbing; the knowledge-base pack skill sheds its view-choreography instructions in favor of plain authoring guidance: link every page at creation and give related pages a shared cluster.
  • Fix a stale server's idle shutdown killing the live one. When a leftover ok start process from an earlier session went idle, its cleanup blindly stopped whatever process was advertised in ui.lock — which, with the desktop app, is the live server itself (it serves the editor UI and advertises its own port there). The result was the whole workspace abruptly disconnecting mid-session — agent threads, unsaved cursors, everything — often looking like a random server crash. Idle shutdown now only stops the UI helper process it actually started, never an unrelated lock holder.

View v0.37.0 on GitHub