OpenKnowledge

v0.16.0

Part of the OpenKnowledge changelog.

Minor Changes

  • Add an OKF-conformant starter pack: ok seed --pack okf (also shown by ok seed --list-packs) scaffolds a small knowledge base that is conformant with Google's Open Knowledge Format (OKF) v0.1 from the first commit — every non-reserved doc carries a non-empty type, plus a frontmatter-free lowercase index.md (§6 navigation) and log.md (§7 change history). Pure pre-populated content: the native frontmatter schema stays open-shaped and nothing is enforced or linted. Ships a guidance-only OKF conventions skill like every other pack.

  • The docked terminal now supports multiple concurrent sessions as tabs. Run an agent in one tab while you run git, a build, or a second shell in another — no more waiting for one session to free up or alt-tabbing to an external terminal.

    • A tab strip in the dock header lists open sessions with a + New Terminal affordance, a per-tab close (×), and an active indicator. Each tab is its own login shell at the project root.
    • Sessions are fully isolated: a flood or a crash in one tab pauses or restarts only that tab — output stays byte-exact with no cross-tab interleave, and backpressure is accounted per session.
    • Tab lifecycle follows the VS Code / Zed model: closing the active tab activates a neighbor, closing the last tab collapses the dock and returns focus to the editor, and hiding the dock (⌘J) keeps every session alive (hide is not kill).
    • "Open in terminal" always opens a fresh tab and runs claude there once — it never interrupts a tab you're already using.
    • The Terminal menu's New/Kill Terminal and a ⌘-number tab-switch shortcut operate on tabs; the tab strip is keyboard- and screen-reader-navigable (tablist roles, arrow-key movement, focus-on-close).
    • Each session keeps 10,000 lines of scrollback.

    Under the hood, all of a window's sessions are multiplexed through one terminal host process (matching VS Code's shared-host model), so per-window memory stays flat regardless of tab count. The security posture is unchanged: terminals remain human-only and default-on, and no new IPC surface is added. Split panes and per-tab shell/cwd selection are deliberately not included yet.

Patch Changes

  • Redesign the preview pane for files with no built-in viewer (.gitignore, .zip, dotfiles, and the long tail of formats). The "Open with built-in text editor" button is now "View as text" and leads as the primary action, with a refreshed extension chip and filename treatment.

  • Opening an existing Open Knowledge project now guarantees the project-local Open Knowledge skill is installed — not just on fresh project setup. Previously, projects onboarded before the project-skill installer existed had Open Knowledge MCP wiring but no skill, and reopening them never healed the gap (the project-open reclaim was refresh-only). Now, when a managed project is opened (OK Desktop) or ok start runs, any editor whose project MCP config carries the Open Knowledge marker (# ok-mcp-v1) gets its SKILL.md created if missing — so a restored session loads the skill, with no manual folder moves. Non–Open Knowledge folders and editors that aren't wired for this project are left untouched, and the project-skill write now runs behind the same symlink-escape guard as ok init.

  • Tuck the config-sharing choice into "Advanced settings" in the Create-new-project dialog. Greenfield projects already default to Shared, so the dialog now leads with just the project name and location; the Shared / Local only cards move under Advanced alongside the AI-tool connections. The open-folder setup dialog is unchanged. It still surfaces the sharing choice at the top level, where the decision is more consequential for an existing folder.

  • The empty-state create composer's starter-brief suggestion chips now sit in a centered row below the input card instead of crowding the footer next to the Create button. The footer keeps only the Create split button (pinned right), giving the textarea and its primary action a cleaner, less cluttered layout. Clicking a chip still prefills the brief (no auto-create), unchanged.

  • The empty-state create surface can now launch the claude CLI in a docked terminal. Alongside the existing app agents, the agent-picker dropdown now offers a Terminal → Claude option. Selecting it switches the primary button to Create with Claude CLI; clicking Create then opens the docked terminal with the same create-scope prompt built from your typed brief — bringing the new-file empty state to parity with the editor's "Open with AI" menu (desktop only; absent on the web host).

    The Open-in-Agent menus ("Open/Edit with AI", the file-tree right-click submenu, and the sidebar empty-space submenu) and the empty-state agent picker are now organized into labeled Desktop (app launches) and Terminal (CLI launch) sections, so the two launch modes are visually distinct. The CLI row's visible label is now "Claude" (its accessible name remains "Claude CLI"). Section labels render only for non-empty sections, and existing launch behavior is unchanged.

  • Desktop: detect and surface a failed auto-update install. When a "Relaunch now" (or quit-to-install) update is committed but the app boots back on the old version — e.g. macOS Squirrel's post-quit install never ran — the next launch now shows a clear "Update to vX didn't install" notice with Retry and Download manually actions, instead of failing silently. Previously this clean-quit failure left no signal: the in-session error and no-quit watchdog only fire while the process is alive, and the pending-install record was cleared before quit. Detection uses a prerelease-aware version compare so same-version beta bumps (e.g. beta.1 → beta.3) are no longer misread as a successful install.

  • Slightly roomier file-tree rows. Row height goes from 24px to 26px and the per-level and inter-row gaps are evened out (4px each), giving the sidebar a bit more breathing room while keeping the compact, VS Code-style density.

  • Fix directory symlinks (aliased folders) silently disappearing from the file tree. When a content directory contained a symlinked directory pointing at an already-indexed subtree, the boot-time index walk dropped it — the folder showed empty (its children were filed under the canonical path) or vanished entirely (a second symlink to the same inode). Symlinked directories now surface their full contents in the sidebar, mirroring the canonical folder. The index stores one lightweight edge per symlinked directory (alias prefix → canonical prefix) instead of materializing every descendant, so a content directory with many cross-linked mirrors (e.g. skill farms) stays memory-bounded; the subtree is projected under each alias prefix at /api/documents time. Alias rows carry the canonical document identity, so opening one reads and writes the canonical file rather than a second CRDT document over the same inode.

  • Fix the macOS desktop toolbar controls (collapse, search) sliding under the window traffic lights. Dragging the sidebar rail to collapse no longer leaves the editor-header reserve lagging behind the now-vanished sidebar, and the sidebar action cluster now keeps clear of the traffic lights structurally regardless of how many buttons it holds.

  • Fix a round-trip fidelity bug for documents that use indented MDX-JSX container components (<Steps>, <Tabs>, and similar nested components). Editing one of these documents no longer risks silent indentation rewrites, content reordering, or duplication: the editor's bridge now recognizes the serializer's container formatting as equivalent to the authored source, so the document settles to a stable state in a single pass and what you typed is what gets stored.

  • Expose an explicit extension field on the MCP write tool's document target, so agents can reliably author .mdx (Markdown + JSX) docs instead of relying on an undocumented path suffix. The tool's path description previously said "no extension," contradicting the skill guidance and hiding a capability that already worked end to end. Precedence is extension field > .md/.mdx suffix in path > default .md; an existing doc keeps its on-disk extension. The supported-extension list is now single-sourced from one canonical constant shared by the HTTP schema, the MCP tool schema, and the on-disk path probes, so the accepted set can no longer drift between layers.

  • Every ok seed starter pack now stamps a semantic type into the frontmatter of the documents its templates create, so a project scaffolded from any pack is conformant with Google's Open Knowledge Format (OKF v0.1) from the first document. The knowledge-base, software-lifecycle, plain-notes, and writing-pipeline packs gain context-appropriate types (for example source, proposal, note, idea); the worldbuilding and entity-vault packs already carried them. A conformance test now guards every pack's templates against the OKF non-empty-type rule.

  • Improve Cmd+K/omnibar search findability. Markdown files are now matchable by their full displayed name including the extension (typing STORY.md finds the page named STORY, matching how non-markdown files and the file tree already work). And a query that matches many same-named folders or files (e.g. evidence, index) no longer fills the entire result list with one kind — folders and files are each capped (default 3) so content pages get the remaining slots; full-text search is uncapped.

  • Rank the Cmd+K omnibar name-first. An exact filename match now leads the results even when many files share that basename and have stronger body-text scores — the file you typed is no longer buried below same-named siblings or pushed past the fetch limit. The omnibar still searches content, but a strong content match only reorders within a name-match tier rather than outranking the name itself; the deliberate "by meaning" search keeps content-relevance ranking. A query that matches many folders or name-only files (evidence, index) no longer fills the whole list with one kind — folders and files are bounded so content pages fill the rest.

  • Add an instruction prompt box to the toolbar "Open with AI" menu. The menu is now a popover with a "What should the AI do? (optional)" field above the installed-agent list; the typed instruction rides along into the launched agent's first-turn prompt (both the deep-link dispatch and the docked-terminal "Claude CLI" launch), mirroring the editor's "Edit with AI" affordance. Leaving the box empty preserves the previous one-click behavior.

  • Tightened the toolbar "Open with AI" popover styling. The popover now uses compact padding, the instruction field sits in its own padded header, and the Desktop/Terminal section labels and agent rows are restyled into a denser, more menu-like list. Behavior is unchanged.

  • Make the appearance theme toggle in Settings → Preferences flip instantly. Clicking Light, Dark, or System now applies the new appearance optimistically on the client you clicked in, instead of waiting for the change to round-trip through the config write and re-render. The setting still saves to your user config and still propagates to other open projects and windows, and "System" keeps tracking your OS appearance live.

  • Fix write doubling frontmatter when content already has a --- block and a frontmatter param is also supplied. The two are now merged into a single block (the frontmatter param wins per key, embedded-only keys survive) instead of stacking a second block on disk. A malformed embedded block is rejected with a clear error rather than silently doubled.

  • Open Knowledge skill guidance now covers direct business questions over the corpus, not just "research"/"report" phrasing. A plain question routes to search/exec plus a cited answer with no magic keyword needed. When the answer synthesizes multiple docs and is durably reusable, the agent offers to persist it as a page — never auto-creating content and staying in chat when in doubt.

  • Stop the command palette from showing a false "Search failed." right after a project opens.

    When you opened a project and searched immediately, the body-text search could fire before the workspace had finished loading and lose the race with the palette's request timeout, surfacing "Search failed." even though nothing was wrong. The palette now waits for the page list to finish its initial load before running the server search, and shows a "Preparing search" status in that window instead. Once the page list is ready the search runs automatically, and file- and folder-name matching is available as soon as the list has loaded.

  • Give share-link recipients on Linux and Intel Macs a working way in, and make ok clone fail helpfully on private repos.

    The share-link splash now always shows a copyable CLI block — npm install -g @inkeep/open-knowledge followed by ok clone <owner/repo> -b <branch> — alongside the macOS desktop options. After the page loads it adapts to the visitor's OS: Linux promotes the CLI and hides the desktop-only buttons, Windows shows a clear "Open Knowledge isn't supported on Windows yet" notice (keeping the View on GitHub link), and macOS keeps the desktop app primary with the CLI tucked behind a "Have an Intel Mac? Open with the CLI" disclosure. The clone command always pins the shared branch with -b, and a post-clone breadcrumb tells the recipient which file or folder to open once the clone lands them at the repo root.

    ok clone now explains how to recover from an authentication failure instead of printing a raw git error. When you're not signed in, it prints ok auth login and the exact ok clone command to re-run afterward. A 403 names the signed-in account that may lack access, and a scope problem points at the missing repo OAuth scope.

  • Open Knowledge skill guidance now mandates incremental checkpointing: agents write completed work into the knowledge base as they go — per section, per source, per doc — instead of holding finished findings in context for one final write. A new "Persist incrementally — the knowledge base IS your checkpoint" rule lands in the project skill's Writing section, and the research and consolidate workflow guides now instruct agents to create the article skeleton early and fill it section-by-section as each source is analyzed. This prevents the worst-case "got rate limited and discarded its findings" outcome, where completed (paid-for) research work is lost to a mid-session rate limit, crash, or context compaction.

  • Fix docked-terminal behavior in OK Desktop and add Shift+Enter newline support.

    • The docked terminal is available in every view and survives navigation. It now opens from folder, asset, and large-file views (previously it only mounted on the document editor and empty state, so "Open with AI → Claude" or ⌘J did nothing there). A single terminal is docked in the editor column — beside the doc/properties panel, which keeps its full height — and the session stays alive across tab switches, view-kind changes, and tab closes, instead of resetting each time.
    • The terminal can be resized much taller. Drag it up to 95% of the dock height for long CLI sessions (it was capped at 50%).
    • Shift+Tab stays in the terminal. It previously moved focus out of the terminal instead of reaching the running CLI (e.g. the Claude TUI's mode toggle); the keystroke now reaches the PTY.
    • Shift+Enter inserts a newline instead of submitting, matching how Ghostty and Cursor map the chord.

View v0.16.0 on GitHub