BioRouter v1.80.0
BioRouter v1.80.0 Release Notes
Release Date: June 2026
Repository: github.com/BaranziniLab/BioRouter
A major feature release. The headline is Knowledge — personal, LLM-maintained knowledge bases backed by markdown trees and full git history. Drop a PDF, a URL, a DOCX, or pasted notes into a base and an agent reads it, classifies its credibility (peer-reviewed vs. preprint vs. web), writes structured pages with [[cross-links]], and commits the change. You get a force-directed graph of how sources connect, a change log you can roll any page back through, and the ability to bring a base into chat as grounded context. Everything is local on disk and self-contained — no new external binaries, no network services beyond the credibility lookups.
Downloads
| Platform | File | Install |
|---|---|---|
| macOS (Apple Silicon) | BioRouter-1.80.0-arm64.dmg |
Open the DMG and drag BioRouter.app to /Applications |
| macOS (Intel) | BioRouter-1.80.0-x64.dmg |
Open the DMG and drag BioRouter.app to /Applications |
| Windows (x64) | BioRouter-win32-x64-1.80.0.zip |
Unzip and run BioRouter.exe |
| Linux Ubuntu / Pop!_OS (x64) | biorouter_1.80.0_amd64.deb |
sudo dpkg -i biorouter_1.80.0_amd64.deb |
| Linux Fedora / RHEL (x64) | BioRouter-1.80.0-1.x86_64.rpm |
sudo rpm -i BioRouter-1.80.0-1.x86_64.rpm |
What's New
Knowledge — personal, agent-maintained knowledge bases
A new top-level Knowledge section in the sidebar (between Skills and Settings). A knowledge base is a folder of markdown pages plus a hidden git repo, living at ~/.config/biorouter/knowledge/<kb-id>/. You never have to hand-edit it — an agent does the writing — but because it's plain markdown under git, you can read, diff, and restore everything yourself.
Ingest anything. The ingest panel accepts files (drag-and-drop or picker), pasted text (with URLs auto-extracted into chips), and folders. Supported source conversions:
- PDF → markdown via
pdf-extract, with an LLM-assisted fallback for hard layouts - HTML → markdown with title extraction and lossy-UTF-8-safe decoding
- DOCX → markdown with Heading 1/2/3 mapping
- CSV → markdown tables
- URLs → fetched with content-type detection, then converted by the matching path
- Plain text / notes → stored as-is, with any embedded URLs pulled out as separate sources
Credibility classification. Every source is graded through a ladder: identifier extraction (DOI / arXiv / PMID / ISBN) → Crossref → OpenAlex → host-pattern matching → a peer-reviewed publisher allow-list → an agentic fallback that reasons about the source when the deterministic steps are inconclusive. Retracted works are detected (Crossref) and flagged. You can always reclassify or manually override a source's credibility.
Agent-driven digestion. Ingest, query, and lint run as macros on top of a bounded sub-agent loop with explicit step and time budgets and a cancel button. The agent reads sources, searches the base (BM25 over pages and raw sources), writes pages with frontmatter, appends to the change log, and emits [[knowledge-link]] markers — all committed as a single atomic git transaction so a macro either lands completely or not at all.
Graph view. A force-directed graph (react-force-graph-2d + d3-force) renders the base: nodes are pages and sources colored by credibility, edges are the [[…]] cross-references the agent emits (Obsidian-style [[target|alias]] links are supported). Click a node for an inline preview of its page body; retracted sources get a distinct badge. Hovering dims unrelated nodes so you can trace a neighborhood.
Change log + time travel. A change-log drawer lists every commit with filter chips, a preview of what changed, and a one-click restore that reverts a page (or the whole base) to any prior state — backed directly by git, not a bespoke undo stack.
Use it in chat. A KB chip in the chat bottom menu binds the active base to the conversation, and a /knowledge slash command inserts a templated prompt scoped to that base. The active-KB selection is persisted across MCP-server processes and synced across sessions via GET/POST /knowledge/active, and is scoped per chat session so different windows can focus different bases.
Portable. Export a base to a single .brkb archive and import it elsewhere. Import is hardened against ZIP-slip path traversal (see What's Fixed).
The feature is exposed two ways: as a built-in knowledge MCP extension (so the agent can operate on bases through tools) and as HTTP routes under /knowledge/* on biorouterd (with SSE-streamed macro progress) that back the desktop UI.
Self-contained build — no new binaries
The Knowledge feature ships entirely inside the existing biorouter and biorouterd binaries. The biorouter-mcp crate that houses it is a library, compiled in — not a separate executable. Git operations use a statically vendored libgit2 (git2 with vendored-libgit2), so no system git is required at runtime. The packaged app therefore gains the full Knowledge capability without adding a single new bundled binary or external dependency.
What's Fixed
ZIP-slip hardening in .brkb import
.brkb import now validates every archive entry's destination path before writing, preventing a crafted archive from escaping the target directory and writing arbitrary files elsewhere on disk (a CVE-class arbitrary-file-write).
Amazon Bedrock tool-call pairing
Two fixes to how the Knowledge sub-agent's tool calls round-trip through the provider layer for Bedrock:
tool_use_idis now preserved through theCompleter → Providermessage conversion, so tool results pair with their originating tool call.- Multiple tool results produced in a single turn are bundled into one user message, matching Bedrock's expected request shape.
Legacy base migration + stale graph cache
Entering a macro now migrates a legacy schema.md to the current template and refreshes a stale graph cache, so older bases pick up the current behavior (including the [[link]]-emission rules that make graph edges appear) without a manual rebuild.
Knowledge ingest robustness
- Path/folder ingestion moved fully into the backend, with correct backend URL resolution.
- HTML conversion decodes lossily so non-UTF-8 pages no longer abort ingestion; digest-stream errors are surfaced instead of silently dropping the stream.
read_pageis allowed onraw/*paths (writes remain restricted) so the graph node preview can show original source text.- Renaming a base updates its folder ids so links and the graph stay consistent.
Desktop UI polish
IngestModelPickeris a real dropdown of your configured models and stays aligned with provider settings.- The Digest button renders correctly (no black-on-black) and fits the "Digesting…" label.
- SSE auth uses
window.electron.getSecretKey()directly, fixing intermittent HTTP 401s on the ingest stream. - A pre-flight model check and a Stop button were added to the digestion progress view.
KBSelectorPaletteguards empty slugs and surfacescreateBaseerrors; the ChangeLogDrawer close button now actually closes; PasteTextBox uses contrast-safe color tokens.
Upgrading
No manual migration needed. Replace your existing installation with the new package for your platform.
- macOS: open the new DMG and drag
BioRouter.appto/Applications, overwriting the existing copy - Linux:
sudo dpkg -i biorouter_1.80.0_amd64.deborsudo rpm -U BioRouter-1.80.0-1.x86_64.rpm - Windows: unzip and replace the existing installation folder
Existing sessions and configuration are unaffected. The first time you open the Knowledge section, no bases exist yet — create one from the KB selector palette (⌘K-style) and ingest your first source. Legacy bases created during prerelease testing are migrated automatically on first macro use.
Changes Since v1.76.1
The bulk of this release is the Knowledge feature, developed across six plans plus a hardening pass. Highlights:
Backend foundation
feat(knowledge): per-KB markdown store + git wrapper (commit/log, begin/commit-squash/abort txns, preview & restore)feat(knowledge): page CRUD with frontmatter split + safe path resolution; raw source storage with sha256 + slug idsfeat(knowledge): conversion for HTML / PDF / DOCX / CSV / URL fetch / pasted-text URL extractionfeat(knowledge): credibility ladder — DOI/arXiv/PMID/ISBN → Crossref → OpenAlex → host pattern → publisher allow-list → agentic fallback; retraction detectionfeat(knowledge): node/edge graph derivation from [[links]] with cache; rebuild after create + add_raw_source
Macros + sub-agent loop
feat(knowledge): bounded SubAgent loop with tool dispatch, step/time bounds, and cancelfeat(knowledge): kb_ingest_source / kb_query / kb_lint macros (txn-atomic commit)feat(knowledge): BM25 search, per-KB tokio Mutex for concurrent-write safety, active-KB state
HTTP routes + portability
feat(server): /knowledge router — bases, page CRUD, raw (file/url/text), history/preview/restore, graph, reclassify/overridefeat(server): SSE-streamed ingest/query/lint macro routes + GET/POST /knowledge/activefeat(knowledge): .brkb zip export/import + ProviderCompleter adapter; OpenAPI + regenerated TS clientfix(knowledge): prevent ZIP slip in brkb::import (CVE-class arbitrary file write)
Desktop UI
feat(ui): Knowledge sidebar route, KnowledgeContext, ⌘K KBSelector palette, ingest panel (dropzone / paste / staged list)feat(ui): useIngestStream SSE hook + DispatchProgress with pre-flight model check and Stop buttonfeat(ui): ForceGraph canvas (credibility colors, hover dimming, retracted badge), NodePreview, ChangeLogDrawer with restorefeat(ui): chat-side KB chip + /knowledge slash command; active-KB synced across sessions and MCP processes
Hardening
fix(knowledge): Bedrock tool_use_id pairing (preserve id through Completer→Provider; bundle multi-results)fix(knowledge): migrate legacy schema.md + refresh stale graph cache on macro entryfix(knowledge): Obsidian-style [[target|alias]] wiki-links; allow read_page on raw/*; lossy UTF-8 HTML decodefix(knowledge): move path ingestion into backend; scope active bases per chat session; rename updates folder idschore(knowledge): register knowledge in BUILTIN_EXTENSIONS; git2 vendored-libgit2 (self-contained, no system git)chore(release): bump to 1.80.0
UCSF BioRouter is developed by the Baranzini Lab at the University of California, San Francisco.