OpenKnowledge
Changelog

v0.56.0

Minor Changes

  • Picking a starter pack while creating a new project now works the same way it does inside an open project. The create-project dialog shows the pack's full description, a live list of exactly which folders, files, and skills it will add, and a choice of where they go — the project root, or a subfolder you name. Before, the same pick gave you a one-line summary and no preview, and it quietly put a pack's contents in that pack's own default subfolder (so a knowledge base landed in brain/ rather than at the top level of your new project). The project root is now the default in both places, and you can switch packs from inside the dialog instead of cancelling out to start over.

  • The OKF plugin now recommends its companion agent skill directly in Settings. You can review what the skill changes, install it explicitly into the current project, and open it afterward to edit its guidance or agent availability. Installation never overwrites a same-name project skill, and disabling OKF does not remove the skill.

  • Open a document in its own window (desktop). Right-click a document tab and choose "Open in New Window", run it from the command palette, or pick it from the Window menu to pop the current document out into a dedicated window you can park on another monitor.

    • Edits sync live between the pop-out and the main window through the project's existing collaboration server, with no extra setup.
    • Opening the same document again focuses the window you already have rather than stacking duplicates. Any number of pop-outs can coexist across and within projects.
    • Following a wiki link navigates the pop-out in place and updates its title.
    • A pop-out closes with its project's main window. If its document is deleted, it shows an explicit "document deleted" state with a close button rather than closing out from under you.
    • Your pop-out layout comes back on relaunch, each window reattached to its project and restored to its own position.

Patch Changes

  • The Karpathy LLM Wiki starter pack now composes cleanly with the Open Knowledge Format plugin. New research uses OKF draft status and object-shaped source provenance, consolidated articles use stable, superseded research becomes deprecated, and ingested source wrappers declare their type. Existing projects keep working: the updated skills still understand the older provisional, canonical, and string-source forms, and all published skill IDs remain unchanged for skills.sh updates.

  • Opening a standalone Markdown file or a share link while OpenKnowledge is fully closed no longer reopens your previous session's project windows alongside it. The cold launch now opens only the window the link resolves to, and does not start the servers for unrelated projects.

    Those previous windows are not held back for a later launch either. The saved session is cleared on the launch that suppresses it, so your next ordinary launch opens your most recent project and the rest stay reachable from File → Recent project (loose files from File → Recent files). Launching from the Dock or the app icon still restores your full window set exactly as before.

  • Clicking a commented passage, its margin icon, or a commented property value now shows that comment in the Comments panel on the right instead of floating a card over the document. The card used to be pinned to the text it was about, so it covered the paragraphs around the passage — the ones you need in order to judge the comment — and printed the comment twice, since the panel was showing it as well. The Comments tab now opens, scrolls to the comment, and highlights it, with the passage still marked in the document. Comments are also reachable in single-file (ok <file>) sessions, which previously offered no Comments tab at all.

  • Desktop apps you already have installed now show up in the agent pickers automatically. Claude, Codex, and Cursor were previously hidden until you opted each one in under Settings → Configure agents; OpenKnowledge now detects them per platform (LaunchServices on macOS, the registered protocol handler on Windows, xdg-mime on Linux) and lists them without any setup. The Settings toggles still win in both directions — turn one off to hide it, or turn on an app you haven't installed yet to get its download page.

    The section is now called "External apps" and each row reads "Claude Desktop" / "ChatGPT Desktop" / "Cursor Desktop" (the Codex desktop app is branded ChatGPT since OpenAI folded the two together), so it is no longer confusable with the same-named Terminal CLI row above it. When an external app is the selected target, the composer's button says "Open Claude Desktop" with an external-action arrow, since that click leaves OpenKnowledge; in-app agents and terminal CLIs now consistently read "Ask ".

  • A new lint plugin, OKF, checks your documents for things an external reader of the Open Knowledge Format would get wrong. It is off by default, every finding is an advisory warning, and nothing it reports ever blocks a write.

    Eleven rules in three groups. Document structure is four. no-wiki-links catches [[Page]] syntax: a perfectly good way to link here, flagged only because a reader outside this app renders the brackets literally and loses the connection. The other three concern the two reserved filenames. In a log, every entry heading leading with an ISO YYYY-MM-DD date, newest first — a trailing summary after the date is fine, and a log with no entries yet is not a violation. In an index, entries sit under a section heading and each carries a link, since an entry with nothing to follow is not navigation. And a reserved file spelled Index.md is flagged: OKF only recognizes the lowercase name, so on a case-sensitive filesystem that file quietly stops being your index.

    Frontmatter is six, one per family of the OKF field contract: the required type, the recommended keys, the provenance and trust families, the attested-computation fields, the rule that index documents carry no frontmatter, and the shape of okf_version on your root index. These need no setup — you do not have to turn on the frontmatter plugin, or author a schema, or map one to a folder. Enabling OKF is the whole action.

    Project is one: any .mdx file, which the format has no concept of — a reader scanning for .md never opens it. That one needs to compare files, so it appears when you run a project audit rather than while you type.

    All eleven are deliberately narrow. They enforce the four fields OKF actually marks as required and nothing beyond them, so a concept carrying only a type is fully conformant, an unverified document is a normal document, and a field you left out is never an error. Prose around your lists is fine, the heading level is yours to pick, the separator between a link and its description is yours, and so is how many titles a log carries and whether its entries are bullets or paragraphs. Log frontmatter is not checked at all — OKF constrains a log's dated entries, never its frontmatter.

    Each rule has its own switch in Settings, so you can keep the structural checks while silencing one you disagree with. The schemas behind the frontmatter rules are written to .ok/okf/ when you enable the plugin — generated and gitignored — so you and your agents can read the contract rather than infer it from warnings. The directory tracks the switches: turning a rule off removes its schema file, and disabling the plugin removes them all. Your config records only what you turned off, so a rule added later is live without you touching anything. Agents see which parts of the contract govern a document when they read it, and status becomes a dropdown in the property panel.

    Two numbers worth knowing before you turn it on, both measured against this repository's own 6,117 markdown files — a knowledge base that was never written to the format. The structure rules produce 4,148 findings over 230 documents, almost all of them wiki-links, with one outlier at 2,816 which is, fittingly, the spec about wiki-links. The frontmatter rules produce 12,706 over 5,979 documents, because almost nothing here declares a type and because this repository already uses sources for its own purpose — a list of file paths, where OKF expects a list of entries. That second one is the case the per-rule switches exist for: a project with its own meaning for an OKF key turns that one family off and keeps the rest.

  • Open Knowledge Format projects can now opt into a generated index.md in every Markdown-bearing directory. Each index lists that folder's documents and immediate child indexes, rebuilds in the background after changes, avoids rewriting identical files, preserves unowned orphan indexes, and pauses safely during live conflicts.

  • server.bind is now a per-machine setting, so a committed bind can no longer break local runs for people who clone a shared project.

    Before this change, a project that committed server.bind: 0.0.0.0 (or ::) to .ok/config.yml so one machine could serve it remotely made ok start fail for every teammate who cloned the repo and ran it locally. The exposure interlock refused to boot because a non-loopback bind requires per-machine server.allowExternal consent, and consent is never committed.

    server.bind moves from project scope to project-local, the same posture as server.allowExternal. A bind committed to the shared .ok/config.yml is now ignored, and named at startup with the fix, so local clones always bind loopback and boot. The machine that actually exposes the server sets the bind per-machine with OK_BIND, ok start --bind <address>, or .ok/local/config.yml.

    The exposure gate is unchanged: an explicit OK_BIND or --bind to a non-loopback address without consent still refuses to start.

  • Documents no longer open to "Connection dropped" after an update relaunch in projects that pin a server port. The server writes its lock file before it starts listening, and the port field in that lock is how everything else — the desktop app, the CLI's sync, audit and embeddings commands — decides the server is reachable. A project that set server.port had its configured port written into the lock immediately, so the desktop opened document windows against a port nothing was listening on yet and the editor gave up with a "Connection dropped" error you had to dismiss with Try again. Projects on an automatically assigned port were unaffected, which is why this looked intermittent. The lock now reports port 0 until the server is actually accepting connections, so windows open only once the server can serve them.

  • Starter packs can now require a plugin, and seeding one turns it on.

    The Open Knowledge Format pack is the first to use this. It now scaffolds a minimal OKF v0.2 bundle: a root index.md, one populated concepts/ folder, one typed guide, and one draft Concept template. It also installs the v0.2 companion skill. The pack leaves optional taxonomies and log.md out until the project needs them. Seeding enables the OKF plugin too, which turns "conformant when you made it" into "conformance you can see slipping".

    The initialize dialog says so before it happens. A required plugin appears in the plan preview alongside the folders and files it will create, named the way it appears in Settings, with a note that you can turn it off any time. ok seed prints the same thing after applying. This matters most in one specific case: if you had previously switched the plugin off and then seed a pack that requires it, it comes back on — and you should not have to go hunting through Settings to work out why. Turning it back off afterward is a single toggle, and nothing re-enables it later.

    Your existing configuration is left alone. Enabling a plugin sets one key; other plugins, their settings, and any comments in your config.yml survive untouched. Re-seeding a project whose required plugins are already on writes nothing at all.

  • OpenKnowledge Desktop on Windows now detects MSIX-installed agent apps — including Claude's current Windows distribution and the ChatGPT (Codex) Store app. MSIX packages register their claude:// / codex:// link handler at install time but in a way Electron's protocol query can't see (it looks for a classic executable association, which MSIX never writes), so the "External apps" picker wrongly treated those apps as not installed even though the browser-mode picker on the same machine saw them. The desktop app now falls back to the same registry check the server uses, so both hosts agree.

View v0.56.0 on GitHub