Releases: BaranziniLab/biorouter
BioRouter v1.85.2
Biorouter v1.85.2 Release Notes
Release Date: June 2026
Repository: github.com/BaranziniLab/biorouter
This release introduces Llama Server — zero-setup local models bundled with the desktop app — alongside an interactive knowledge graph view, background shell jobs for the developer tools, and a markdown-rendering CLI. It also removes analytics/telemetry instrumentation entirely. No breaking changes — existing installs upgrade in place.
Downloads
| Platform | File | Install |
|---|---|---|
| macOS (Apple Silicon) | BioRouter-1.85.2-arm64.dmg |
Open the DMG and drag BioRouter.app to /Applications |
| macOS (Intel) | BioRouter-1.85.2-x64.dmg |
Open the DMG and drag BioRouter.app to /Applications |
| Windows (x64) | BioRouter-win32-x64-1.85.2.zip |
Unzip and run BioRouter.exe |
| Linux Ubuntu / Pop!_OS (x64) | biorouter_1.85.2_amd64.deb |
sudo dpkg -i biorouter_1.85.2_amd64.deb |
| Linux Fedora / RHEL (x64) | BioRouter-1.85.2-1.x86_64.rpm |
sudo rpm -i BioRouter-1.85.2-1.x86_64.rpm |
| Linux — CLI only Ubuntu / Debian (x64) | biorouter-cli_1.85.2_amd64.deb |
sudo apt install ./biorouter-cli_1.85.2_amd64.deb |
| Linux — CLI only Fedora / RHEL (x64) | biorouter-cli-1.85.2-1.x86_64.rpm |
sudo dnf install ./biorouter-cli-1.85.2-1.x86_64.rpm |
The two CLI-only packages install just the headless binaries (biorouter + biorouterd) with no Electron/GUI payload — ideal for servers, HPC nodes, and containers. (Local models need glibc ≥ 2.35 — Debian 12+/Ubuntu 22.04+.)
What's New
Llama Server — zero-setup local models
A new Llama Server provider runs models entirely on your machine with nothing to install. The desktop app bundles a llama.cpp llama-server binary and manages it as a sidecar: pick a model and Biorouter downloads it from Hugging Face on first use and serves it locally.
- Curated catalog of Qwen3.5 and Gemma 4 models (4-bit, from verified GGUF repos); any other
owner/repo:QUANTHugging Face model also works. - Ranked first among providers — Local models now sort ahead of Institutional and Commercial everywhere (onboarding, the settings provider grid, and
biorouter configure). - Sensible defaults — a 32k context window with model-native sizing, thinking enabled by default, and automatic cleanup of orphaned server processes.
- Available on macOS (Metal), Windows (Vulkan with CPU fallback), and Linux (CPU; CUDA opt-in).
Interactive knowledge graph
Knowledge bases now render as an explorable force-directed graph in the desktop app — pan, zoom, and click nodes to preview pages and their [[cross-references]]. Conversations can be ingested directly into a base, and source-credibility classification (Crossref / OpenAlex) was hardened.
Background shell jobs
The developer tools can now run shell commands in the background (shell with background=true) and later wait on, read output from, or kill those jobs — so long-running builds, servers, and watchers no longer block the agent.
A markdown-rendering CLI
The interactive CLI now renders assistant replies as formatted markdown in the terminal — headings, lists, code blocks, and emphasis — instead of raw text. The Launch CLI (Terminal) button also moved into the desktop sidebar for quicker access.
Smarter, more capable agent
System prompts gained explicit agentic-behavior guidance and awareness of Biorouter's own components (skills, extensions, knowledge, and the "Soul" personality layer), so the agent makes better use of what's available in a session.
Telemetry removed
All analytics and telemetry instrumentation has been removed from the desktop app — no usage events are collected or sent.
What's Fixed
- Extensions:
uv-based extension installs are now hardened against broken or missing Rust toolchains, so a bad host environment no longer aborts the install. - Goals & loops: the goal Stop-hook judging is now truncation-aware and guarded against runaway loops, preventing goals and
/loopfrom spinning indefinitely. - Version consistency: a new build-time guard asserts the CLI, daemon, and GUI all report the same version, so a release can never ship a GUI that disagrees with its bundled daemon.
BioRouter v1.85.0
Biorouter v1.85.0 Release Notes
Release Date: June 2026
Repository: github.com/BaranziniLab/biorouter
A major release that brings the command-line interface to full parity with the desktop app, ships the biorouter CLI with every download, adds a shared cross-surface system/setup layer (dependency checks, CLI install, self-update), and introduces a brand-new headless CLI-only Linux package (CLI + daemon, no GUI). It also lands lifecycle hooks, agent goals & recurring automations, and expanded knowledge ingestion (PowerPoint, spreadsheets). No breaking changes — existing installs upgrade in place.
Downloads
| Platform | File | Install |
|---|---|---|
| macOS (Apple Silicon) | BioRouter-1.85.0-arm64.dmg |
Open the DMG and drag BioRouter.app to /Applications |
| macOS (Intel) | BioRouter-1.85.0-x64.dmg |
Open the DMG and drag BioRouter.app to /Applications |
| Windows (x64) | BioRouter-win32-x64-1.85.0.zip |
Unzip and run BioRouter.exe |
| Linux Ubuntu / Pop!_OS (x64) | biorouter_1.85.0_amd64.deb |
sudo dpkg -i biorouter_1.85.0_amd64.deb |
| Linux Fedora / RHEL (x64) | BioRouter-1.85.0-1.x86_64.rpm |
sudo rpm -i BioRouter-1.85.0-1.x86_64.rpm |
| Linux — CLI only Ubuntu / Debian (x64) | biorouter-cli_1.85.0_amd64.deb |
sudo apt install ./biorouter-cli_1.85.0_amd64.deb |
| Linux — CLI only Fedora / RHEL (x64) | biorouter-cli-1.85.0-1.x86_64.rpm |
sudo dnf install ./biorouter-cli-1.85.0-1.x86_64.rpm |
Every desktop download now bundles the biorouter CLI alongside the app — see "Install the CLI" below. The two CLI-only packages install just the headless binaries (biorouter + biorouterd) to /usr/bin with no Electron/GUI payload — ideal for servers, HPC nodes, and containers.
What's New
The CLI is now a first-class, full-featured interface
The interactive terminal experience was rebuilt from the ground up as a full-screen TUI and brought to parity with the GUI:
- Redesigned TUI — a Claude-Code-style layout: input pinned at the bottom, a top-anchored history that grows to fit, a blinking line cursor (with correct CJK width handling), distinctive tool-call badges, and a two-line status bar (model · provider / skills · extensions · knowledge bases · context window). Themed with Biorouter's warm tan accent.
- Slash-command palette — typing
/opens a floating autocomplete listing every available command, skill, extension, and knowledge base, navigable with the arrow keys — the same discoverability you get in the GUI. - Model setup & configuration — configure providers and models from the terminal, matching the desktop flow.
- Knowledge bases —
biorouter knowledgeto ingest, query, lint, and hide/unhide bases; the session reflects which bases are active. - Install extensions, skills, and workflows —
biorouter extension install <file.brxt>,biorouter skill install <file.zip>, andbiorouter workflow install <file.json>, plus scheduler setup — all from the CLI.
Install the CLI from the desktop app — and from the terminal
- The desktop app now prompts you to install the
biorouterCLI on startup if it isn't already on your PATH (just like installing a missing dependency), placing it in the first writable, on-PATH location (/usr/local/bin→~/.local/bin, or%LOCALAPPDATA%\BioRouter\binon Windows). - From a terminal,
biorouter setup-path(aliasinstall-cli) does the same.
biorouter doctor — a terminal setup & health check
A new biorouter doctor checks your prerequisites (git, uv, python, node, AWS CLI) with per-OS install commands, reports whether the CLI is on your PATH, and performs a self-update check against the latest GitHub release. The desktop dependency setup and the CLI now read the same prerequisite definitions from one place, so they never drift.
Lifecycle hooks
A configurable hooks engine fires at agent lifecycle points — SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, and SessionEnd — so you can run custom commands for logging, policy enforcement, or automation. Configure them globally in ~/.config/biorouter/config.yaml or, opt-in, per project in .biorouter/hooks.yaml. Hooks work in both the GUI and the CLI. See docs/guides/hooks.md.
Agent goals & recurring automations
Agents can now track goals across a session and run recurring/scheduled automations, with smarter session naming.
Richer knowledge ingestion
The knowledge pipeline gained PowerPoint (.pptx) and spreadsheet (.csv / .xlsx) converters alongside a hardened PDF path, so more of your source material can be digested directly into a knowledge base.
Smarter auto-update
The desktop updater now downloads the correct installer for your OS and architecture (the real versioned .dmg / .zip / .deb / .rpm), keeps the proper file extension, and quits so you can install — instead of sending you to the website.
What's Fixed
- Auto-update asset matching — the updater previously looked for stale, unversioned asset names and could fail to find a download; it now matches the actual published artifacts with a resilient fallback.
.brxtextension installs are gated onuvup front with an actionable message, instead of failing partway through.- Numerous provider/model refreshes, tool-inspection and scheduler refinements, and prompt updates.
Notes for headless / server users
The CLI-only .deb / .rpm packages install biorouter and biorouterd to /usr/bin and pull in libxcb (declared) and recommend git. After installing, run biorouter doctor to check optional tooling (uv for Python MCP extensions, node for npx-based servers). Each package is smoke-tested on a clean container during the release build, so it installs and runs out of the box.
Upgrading
No manual migration needed. Replace your existing installation with the package for your platform. To get the CLI on an existing desktop install, launch the app and accept the "Install Biorouter CLI" prompt, or run biorouter setup-path.
BioRouter v1.80.1
BioRouter v1.80.1 Release Notes
Release Date: June 2026
Repository: github.com/BaranziniLab/BioRouter
A patch release on top of v1.80.0 that makes the Knowledge feature fully usable from chat. You can now create, curate, visualize, and move knowledge bases entirely by talking to the agent — no need to switch to the Knowledge tab — and the graph view stays in sync with what the agent writes. No breaking changes.
Downloads
| Platform | File | Install |
|---|---|---|
| macOS (Apple Silicon) | BioRouter-1.80.1-arm64.dmg |
Open the DMG and drag BioRouter.app to /Applications |
| macOS (Intel) | BioRouter-1.80.1-x64.dmg |
Open the DMG and drag BioRouter.app to /Applications |
| Windows (x64) | BioRouter-win32-x64-1.80.1.zip |
Unzip and run BioRouter.exe |
| Linux Ubuntu / Pop!_OS (x64) | biorouter_1.80.1_amd64.deb |
sudo dpkg -i biorouter_1.80.1_amd64.deb |
| Linux Fedora / RHEL (x64) | BioRouter-1.80.1-1.x86_64.rpm |
sudo rpm -i BioRouter-1.80.1-1.x86_64.rpm |
What's Fixed
Knowledge bases curated from chat now visualize in the graph
When the agent authored knowledge pages from chat (via kb_write_page), the derived graph cache was never rebuilt, so the Knowledge tab showed 0 pages · 0 links even though the pages existed and cross-linked each other — and the Refresh graph button couldn't recover them because it only re-read the stale cache. kb_write_page now rebuilds the graph cache on every write (mirroring source ingestion), so pages and [[wiki-links]] the agent creates appear in the force-graph immediately.
The Knowledge tab reflects bases created from chat without a reload
The Knowledge view fetched its base list only once at app start, so a knowledge base the agent created in a chat wouldn't appear in the KB selector until a full app reload. The view now re-fetches the base list when it mounts and whenever the KB-selector palette opens, so chat-created bases show up right away.
Imported knowledge bases keep a consistent id
Importing a .brkb archive whose base id collided with an existing one assigned a deduplicated folder id (e.g. cardio-test-2) but left the archived manifest.yaml pointing at the original id — so the imported base displayed under the source's id and collided with it in the list. The importer now rewrites the manifest id to match the new folder/registry id.
What's New
First-class .brkb export / import from chat
Two new knowledge tools — kb_export and kb_import — let the agent write a knowledge base to a .brkb archive on disk and load one back in directly, instead of shelling out to zip the folder. Combined with the existing primitives, every Knowledge GUI operation (create, ingest, curate, lint, visualize, export, import) is now achievable purely by chatting with the agent.
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.1_amd64.deborsudo rpm -U BioRouter-1.80.1-1.x86_64.rpm - Windows: unzip and replace the existing installation folder
Existing knowledge bases are unaffected. A base created or curated before this release will populate its graph the next time the agent writes to it, or immediately via the Refresh graph button now that the cache is kept in sync.
Changes Since v1.80.0
fix(knowledge): kb_write_page rebuilds the derived graph cache so chat-curated pages/links visualizefix(ui): Knowledge view + KB-selector palette re-fetch the base list (chat-created bases appear without reload)fix(knowledge): brkb::import rewrites the imported manifest id to the deduplicated folder id on collisionfeat(knowledge): kb_export / kb_import MCP tools for .brkb archives
UCSF BioRouter is developed by the Baranzini Lab at the University of California, San Francisco.
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 restore- `feat(ui): chat-sid...
v1.76.1
BioRouter v1.76.1 Release Notes
Release Date: June 2026
Repository: github.com/BaranziniLab/BioRouter
A feature release focused on multimodal image input. Vision-capable models now actually receive attached images — drop a screenshot, the model sees the bytes. Patch release on top of v1.76.0, no breaking changes.
Downloads
| Platform | File | Install |
|---|---|---|
| macOS (Apple Silicon) | BioRouter-1.76.1-arm64.dmg |
Open the DMG and drag BioRouter.app to /Applications |
| macOS (Intel) | BioRouter-1.76.1-x64.dmg |
Open the DMG and drag BioRouter.app to /Applications |
| Windows (x64) | BioRouter-win32-x64-1.76.1.zip |
Unzip and run BioRouter.exe |
| Linux Ubuntu / Pop!_OS (x64) | biorouter_1.76.1_amd64.deb |
sudo dpkg -i biorouter_1.76.1_amd64.deb |
| Linux Fedora / RHEL (x64) | BioRouter-1.76.1-1.x86_64.rpm |
sudo rpm -i BioRouter-1.76.1-1.x86_64.rpm |
What's New
Multimodal image input
Vision-capable models can now actually read attached images. Drag a screenshot from Finder, paste from the clipboard, or use the paperclip button — the image bytes are sent to the model alongside your prompt instead of being silently dropped or hidden behind a file path.
Supported across 56 vision-capable models on 5 providers:
- Anthropic — all 11 Claude 4.x variants (Opus / Sonnet / Haiku)
- OpenAI — GPT-5.5, GPT-5.4, GPT-5, GPT-4.1, GPT-4o, o1, o3, o4-mini (20 models; excludes
gpt-5.1-codexando3-mini) - Google Gemini — all 19 Gemini 2.0 / 2.5 / 3 variants
- Amazon Bedrock — all 4 Claude-on-Bedrock variants
- Databricks — Claude variants only (
databricks-claude-sonnet-4-5,databricks-claude-3-7-sonnet)
Models without vision support keep the attach button hidden — drops and pastes of images are ignored, so you can't accidentally send an image to a text-only model. A subtle inline banner shows up if you'd dropped an image and then switched to a non-vision model.
Per-session capability gating
In dashboard mode, each chat window is bound to its own session — possibly with a different model than your global default. Image-input gating reflects the session's own model, not the global one, so a dashboard window pinned to a text-only Ollama model hides the attach button while another window on Claude or GPT-4o keeps it.
Bulk extension and skill toggles
The Extensions and Skills bottom-menu picker rows gain a single-tap action to enable or disable all currently-visible items in parallel — useful for quickly priming a session with a specific set, or wiping it for a fresh test. Hub mode flips overrides for new chats; session mode applies to the active session and is summarized in a single toast.
Steadier auto-compact threshold tooltip
The triangle marker on the context-window gauge no longer flickers its tooltip when you graze its edges, and it stops popping the tooltip open on its own when the popover auto-focuses the slider. The hit area is also bigger so the marker is easier to grab without making the indicator look heavier.
What's Fixed
Drag-dropped images now actually reach the model
Pre-fix, dropped images kept their OS source path (/Users/you/Desktop/foo.png) which the temp-dir IPC validator correctly rejected — so attached images never reached the model and the send silently aborted with an unhandled rejection. Drops now write a temp copy on the way in, mirroring how clipboard pastes already worked.
createUserMessage errors are surfaced
A failure reading an attached image used to disappear into an unhandled promise rejection with no UI feedback. The send path now catches the error and surfaces it through the normal "Submit error" path.
Attachments carry through brand-new chat session creation
When the very first message of a brand-new chat included an attached image, BaseChat.handleFormSubmit threaded the text into the new-session navigation state but dropped the attachments entirely. The replay on the next page only saw the text, and the model received text-only. Attachments now carry through navigation alongside the initial message.
Gemini honors MessageContent::Image
The Google formatter's match arm had _ => {} as a catch-all after the Thinking variant, which silently swallowed image content blocks for user messages. Replaced with an explicit MessageContent::Image arm that emits Gemini's { inline_data: { mime_type, data } } wire shape — matching the format already used for tool-returned images in the same file.
OpenAI Responses API formatter includes images
The /v1/responses formatter (used by gpt-5.x, gpt-5.5, and codex variants) walked message.content but only handled MessageContent::Text. Image content blocks were silently dropped, so gpt-5.5 reached the model with text only — explaining the "I don't see an image" responses on the very models multimodal input was supposed to target. The formatter now emits user-role image blocks as the responses-API input_image shape with an inline data URL, alongside the existing chat-completions image handling.
Drop filter covers the message-area drop zone too
ChatInput's allDroppedFiles useMemo previously only stripped images out of its own drop channel. The parent BaseChat installs a second drop zone on the conversation-scroll area, and that channel was concatenated unfiltered — images dropped on the messages above the input still slipped through even when the active model had no vision support. Both channels are filtered now.
Banner styling
The "current model can't see images" mismatch banner replaced its amber alert background with the same muted bg-background-medium/60 + border-border-subtle treatment used for file-box previews elsewhere in the input panel, plus a small slashed-eye icon and softened copy.
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.76.1_amd64.deborsudo rpm -U BioRouter-1.76.1-1.x86_64.rpm - Windows: unzip and replace the existing installation folder
Sessions saved before this release keep working — pre-v1.76.1 messages that embedded image paths in their text continue to render with the existing temp-path renderer, and only new messages emit structured image content blocks.
Changes Since v1.76.0
feat(providers): supports_vision on ModelInfo + per-provider seeding (Anthropic, OpenAI, Google, Bedrock, Databricks)feat(ipc): read-temp-image-as-base64 handler with temp-dir validationfeat(message): async createUserMessage with structured image content blocksfeat(chat-input): hide attach + ignore image paste/drop when active model lacks visionfeat(chat-input): send images as structured ImageContent + vision-mismatch bannerfeat(renderer): InlineImage component supporting either temp-path or base64; ImageContent rendering in user and assistant transcriptsfeat(context): expose currentModelSupportsVision (with session-scoped override)feat(ui): bulk extension/skill toggles + steadier context-window tooltipfix(google): emit inline_data for user-attached MessageContent::Imagefix(openai-responses): include user-image content blocks in /v1/responses requests (the gpt-5.x fix)fix(image-input): drag-dropped images write to temp dir so the IPC accepts themfix(image-input): catch createUserMessage errors instead of unhandled rejectionfix(image-input): carry attachments through brand-new session creationfix(image-input): per-session vision gating + filter parent drop channelchore(api): regenerate OpenAPI client for supports_visionchore(release): bump to 1.76.1
UCSF BioRouter is developed by the Baranzini Lab at the University of California, San Francisco.
BioRouter v1.76.0
BioRouter v1.76.0 Release Notes
Release Date: May 2026
Repository: github.com/BaranziniLab/BioRouter
A feature release. The headline is dashboard fold mode — windows on the dashboard can now be folded into compact cards with hover-preview, freeing up space for layouts with many tiles. Alongside that, the session insights view gains 7-day and 30-day windows, the onboarding flow has been rewritten as composable provider cards, and failed provider requests are now logged so connectivity issues with Versa, Bedrock, Azure, and other endpoints can be diagnosed from ~/.local/state/biorouter/logs/.
Downloads
| Platform | File | Install |
|---|---|---|
| macOS (Apple Silicon) | BioRouter-1.76.0-arm64.dmg |
Open the DMG and drag BioRouter.app to /Applications |
| macOS (Intel) | BioRouter-1.76.0-x64.dmg |
Open the DMG and drag BioRouter.app to /Applications |
| Windows (x64) | BioRouter-win32-x64-1.76.0.zip |
Unzip and run BioRouter.exe |
| Linux Ubuntu / Pop!_OS (x64) | biorouter_1.76.0_amd64.deb |
sudo dpkg -i biorouter_1.76.0_amd64.deb |
| Linux Fedora / RHEL (x64) | BioRouter-1.76.0-1.x86_64.rpm |
sudo rpm -i BioRouter-1.76.0-1.x86_64.rpm |
What's New
Dashboard fold mode
Every dashboard window now has a Fold button in its title bar. Folded windows collapse to a small card showing the window name, accent color, and a live busy indicator that pulses while the underlying chat is generating. Hovering a folded card brings up a preview of the full window without unfolding it; clicking outside auto-folds back. A Fold all / Unfold all toggle is available from the dashboard toolbar.
Fold state persists across reloads, so a layout you've tuned to show six side-by-side mini-cards comes back the same way next session. The accent palette has been retuned to muted hues that work better at small sizes.
Session insights — 7-day and 30-day windows
The session insights view used to show a single all-time aggregate. It now shows separate 7-day and 30-day windows for session count and token usage, so you can see whether your activity is trending up or down without exporting the data.
Onboarding — composable provider cards
The provider setup flow has been refactored from a single monolithic form into composable cards. Each provider (Versa Azure, Versa Bedrock, Anthropic, OpenAI, Azure OpenAI, Amazon Bedrock, etc.) is its own card with provider-specific help text and field layout. Adding or modifying a provider is now its own discrete action that doesn't reset the rest of the screen.
Release update notifier
When a newer BioRouter version is available, a non-intrusive banner appears with a link to the GitHub release. The IPC listener is properly disposed of when the renderer reloads, so the banner no longer fires twice after a window refresh.
Edit timeout on built-in extensions
The extension settings page now lets you edit the timeout field on built-in extensions (Computer Controller, Memory, Developer, Auto Visualiser, Tutorial). Previously this field was read-only and locked to 300 seconds, which was a problem for long-running operations.
What's Fixed
Failed provider requests are now logged
Previously, when a provider returned a 5xx (e.g., the recent UCSF Versa Go-template panic on tool-schema parsing), the request payload was lost — RequestLog was started only after a successful response arrived. Now every provider starts the log before the network call and records the error on failure, so the exact request that triggered the upstream error lands in ~/.local/state/biorouter/logs/llm_request.0.jsonl and can be replayed for diagnosis.
Fixed in versa_azure, versa_bedrock, azure, bedrock, gcpvertexai, litellm, sagemaker_tgi, cursor_agent, codex, and claude_code providers. The other providers (openai, anthropic, google, databricks, tetrate, openrouter, ollama, xai, snowflake, githubcopilot, gemini_cli) were already correct.
Token gauge stays in sync after manual /compact
The context-window indicator used to keep displaying the pre-compaction token count after a manual /compact until the next message arrived. It now refreshes immediately so the gauge reflects the post-compaction state right away.
Model picker — no more dropdown flicker
The model-picker dropdown no longer flickers between font sizes when you open it. The option list now matches the control's font weight and size.
Model config — picks first available model per provider
When switching providers, BioRouter now selects the first available model from that provider's known-models list instead of leaving the selection blank. Model lists are refreshed on provider switch so a stale list from a previous provider doesn't leak through.
Cross-screen polish
A pass of small visual fixes across the app: toast positioning and stacking behavior, modal sizing on narrow windows, menu hover states, and the threshold slider on the auto-compact configuration panel.
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: install the new
.debor.rpmover the existing installation (dpkg -iandrpm -Uhandle upgrades automatically) - Windows: unzip and replace the existing installation folder
Dashboard fold state and session insights windows are stored locally and require no migration.
Changes Since v1.75.2
feat(dashboard): fold mode — collapse windows to compact cards with hover-preview and busy indicatorfeat(dashboard): Fold all / Unfold all toggle in toolbarfeat(dashboard): persist window.folded across reloadsfeat(dashboard): muted accent palette tuned for small-tile layoutsfeat(insights): 7d and 30d session and token windowsrefactor(onboarding): split provider setup into composable cardsfeat(app): release-update notifier and IPC listener disposer patternfeat(extensions): let users edit timeout on built-in extensionsfeat(providers): persist failed-request payloads for diagnosisfix(compact): keep token gauge in sync after manual /compactfix(model-picker): stop dropdown flicker and match option font to controlfix(model-config): pick first available model per provider, refresh listsrefactor(chatrecall): rename to "Chat Recall" everywherechore(ui): cross-screen polish — toast, modals, menus, threshold sliderchore(release): bump to 1.76.0
UCSF BioRouter is developed by the Baranzini Lab at the University of California, San Francisco.
BioRouter v1.75.2
BioRouter v1.75.2 Release Notes
Release Date: May 2026
Repository: github.com/BaranziniLab/BioRouter
A small, focused patch release. Headline fix: a fresh install of Versa API Bedrock with nothing but an Access Key ID and Secret Access Key now works on the first try — the UCSF MuleSoft Bedrock proxy endpoint, region, and credentials are wired in explicitly so the AWS SDK no longer falls through to ~/.aws/credentials or env-var profiles.
Downloads
| Platform | File | Install |
|---|---|---|
| macOS (Apple Silicon) | BioRouter-1.75.2-arm64.dmg |
Open the DMG and drag BioRouter.app to /Applications |
| macOS (Intel) | BioRouter-1.75.2-x64.dmg |
Open the DMG and drag BioRouter.app to /Applications |
| Windows (x64) | BioRouter-win32-x64-1.75.2.zip |
Unzip and run BioRouter.exe |
| Linux Ubuntu / Pop!_OS (x64) | biorouter_1.75.2_amd64.deb |
sudo dpkg -i biorouter_1.75.2_amd64.deb |
| Linux Fedora / RHEL (x64) | BioRouter-1.75.2-1.x86_64.rpm |
sudo rpm -i BioRouter-1.75.2-1.x86_64.rpm |
What's Fixed
Versa API Bedrock — works out of the box on a fresh machine
Previously, a brand-new install of Versa API Bedrock would fail with a signing or 403 error even when the user had entered a valid UCSF-issued Access Key ID and Secret Access Key. Two problems:
- The UCSF MuleSoft Bedrock proxy URL (
https://unified-api.ucsf.edu/general/awsai) was not exposed as a configurable field — it only worked if the user happened to have it in theirconfig.yaml. A fresh install silently hit public AWS Bedrock instead of the UCSF proxy, where UCSF-issued keys aren't recognized. - The frontend pre-populated
AWS_PROFILE='default'. When the user had no~/.aws/credentialsfile, the AWS SDK's profile-resolution step interfered with the env-var-credential fallback in subtle ways.
Both fixed:
AWS_ENDPOINT_URL_BEDROCKis now a first-class config key on the Versa Bedrock provider, pre-populated with the UCSF proxy URL and editable from the Settings UI.- The Rust provider now constructs an explicit
Credentialsobject fromVERSA_BEDROCK_ACCESS_KEY_ID+VERSA_BEDROCK_SECRET_ACCESS_KEYand injects it directly into the AWS SDK config. The default credential chain (profile files, IMDS, env vars) is bypassed entirely. - Region and endpoint URL are always pinned on the SDK loader (
us-west-2and the UCSF proxy URL by default). - The misleading
AWS_PROFILEdefault was removed from the Versa Bedrock setup form.
Net effect: a user who has nothing but the access key + secret in BioRouter — no ~/.aws/, no env vars, no AWS CLI configuration — gets a working Versa Bedrock setup on the first try.
Provider helper text — UCSF-specific language removed from generic providers
The plain Amazon Bedrock and Azure OpenAI provider cards now describe only the generic provider behavior:
- Azure OpenAI: "Models through Azure OpenAI Service (uses Azure credential chain by default)."
- Amazon Bedrock: "Run models through Amazon Bedrock."
UCSF-specific instructions live under the Versa API Azure and Versa API Bedrock cards, which is where they belong.
Extension updater + uv sync — augmented PATH and clearer errors
uv sync calls from the extension installer and updater now run with the augmented PATH (~/.cargo/bin, ~/.local/bin, /usr/local/bin, plus the Windows uv install dir) instead of a half-built per-call PATH. When the call fails, the error message now surfaces the real failure (process error, stderr, stdout, or exit code) instead of an empty uv sync failed: line.
Upgrading
No manual migration needed. Replace your existing installation with the new package for your platform.
- macOS: open the new DMG and drag
BioRouter.appinto/Applications, replacing the existing app - Linux: install the new
.debor.rpmover the existing installation (dpkg -iandrpm -Uhandle upgrades automatically) - Windows: unzip and replace the existing installation folder
Existing Versa Bedrock users do not need to change their config — the new code reads the same AWS_ENDPOINT_URL_BEDROCK key if you already had it set, and falls back to the UCSF proxy default if you didn't.
Changes Since v1.75.1
fix(versa-bedrock): bypass AWS default credential chain, pin UCSF endpoint + regionfix(providers): drop UCSF wording from generic Azure OpenAI and Amazon Bedrock helper textfix(extension-updater): share augmented PATH with uv sync, report real error detailchore(release): bump to 1.75.2
UCSF BioRouter is developed by the Baranzini Lab at the University of California, San Francisco.
BioRouter v1.75.1
Bug fix: session renames now persist everywhere
Renaming a chat — manually via the title pill, or automatically by the LLM after the first message exchange — now propagates consistently to the history list, the chat-tab title bar, and any open dashboard window for the same session. Previously the rename would persist on the backend but the renderer's stale in-memory cache could restore the old name on navigation, producing the "snap back to New Session" symptom.
What changed
- Single source of truth — new
sessionNameSyncmodule centralizes the rename cache, default-name detection, and aBroadcastChannelthat fans renames out to every open view in the renderer. - Optimistic UI with rollback — pill and title-bar renames update locally immediately, then await the backend call. On failure, the name rolls back and an error toast appears.
- Cross-window propagation — renames originating in the chat tab, a dashboard window, or the LLM auto-renamer all reach every other open view without a refresh.
- localStorage flush on navigation — dashboard state is now flushed synchronously on route unmount, closing the 250 ms debounce window that previously dropped a rename when the user navigated away too quickly.
user_set_nameis now authoritative — the frontend no longer guesses whether a name is a placeholder via regex; it reads the backend flag. User renames are locked against later LLM auto-renames.- No more "New session 154" flash — backend default name is now plain
"New Session"for every freshly-created session.
16 new vitest cases lock in the cache, broadcast, and rename-API contracts; 72/72 dashboard + naming tests pass.
Downloads
| Platform | File |
|---|---|
| macOS (Apple Silicon) | BioRouter-1.75.1-arm64.dmg |
| macOS (Intel) | BioRouter-1.75.1-x64.dmg |
| Windows (x64) | BioRouter-win32-x64-1.75.1.zip |
| Linux (Debian/Ubuntu) | biorouter_1.75.1_amd64.deb |
| Linux (RHEL/Fedora) | BioRouter-1.75.1-1.x86_64.rpm |
macOS builds are signed and notarized by University of California at San Francisco (Team ID F3YYBXAFJ8).
Full changelog: v1.75.0...v1.75.1
BioRouter v1.75.0
Highlights
Dashboard Mode — multi-window canvas for parallel investigations
A new full-window workspace where you can spawn, arrange, and run multiple chat sessions side-by-side on an infinite, pannable canvas. Access from the sidebar (dashboard icon).
- Infinite canvas with mouse and trackpad panning
- Spawn new sessions adjacent to your active window; Organize packs them with a greedy shelf-pack layout that preserves manual arrangement
- Window controls — drag to move, resize from any corner, enlarge/shrink, single-click rename in the title bar (rename propagates everywhere)
- Default name "New Session"; after the first exchange the agent assigns a meaningful name (with collision-disambiguating suffixes)
- State persists across app restarts; legacy lab-meeting layouts migrate automatically
- Exiting the dashboard restores the original window size
Refreshed chat input bar
- Real-time context-window indicator integrated into a unified bar-style row (pricing → context → model → conversation style)
- New collapsible picker popover — one icon per row, vertical layout keeps Send button visible
- Divider between Skills and secondary controls; tighter top/bottom bar styling
- Greeting and home stats now match the rest of the app's typography
Reliability and security hardening
- Main-process error handling: uncaught exceptions and rejections are logged instead of crashing the renderer
biorouterdstderr buffer capped at 500 lines to bound memory under noisy backends- Paste image cap tightened from 10/5 MB to 4/3 MB to prevent OOM on large clipboards
shell.openExternalnow receives a normalized URL, closing a small URL-handling gap- Dropped the
catspawn fallback in the read-file IPC handler (use the FS API directly) reply()SSE retries capped at 5 attempts; session results cache is LRU-bounded at 10 entries
MCP autovisualiser
- Now emits assistant-audience text alongside the resource result so the model can reason about generated visualisations
Downloads
| Platform | File |
|---|---|
| macOS (Apple Silicon) | BioRouter-1.75.0-arm64.dmg |
| macOS (Intel) | BioRouter-1.75.0-x64.dmg |
| Windows (x64) | BioRouter-win32-x64-1.75.0.zip |
| Linux (Debian/Ubuntu) | biorouter_1.75.0_amd64.deb |
| Linux (RHEL/Fedora) | BioRouter-1.75.0-1.x86_64.rpm |
macOS builds are signed and notarized by University of California at San Francisco (Team ID F3YYBXAFJ8).
Full changelog: v1.72.1...v1.75.0
BioRouter v1.72.1
What's New
New Features
- Skills — Create and manage reusable prompt templates as skills; install from
.mdfiles or.zipbundles - Extension bundles (.brxt) — New
.brxtpackage format for distributing extensions with their skills, tools, and configuration - UI Redesign — Refreshed clinical workspace design with warm cream tones, flat surfaces, and improved information density
- AI Provider Updates — Added latest models: GPT-5.4, GPT-5.5, Claude Sonnet 4.6, Claude Opus 4.7, and more
- Institutional Providers — UCSF Versa Azure and AWS Bedrock appear in Provider Configuration for institutional users
- Workflows — Renamed from Recipes; improved YAML/JSON workflow import
Bug Fixes (v1.72.1 patch)
- Fixed GPT-5.5 400 error: reasoning_effort no longer sent to /v1/chat/completions (those models require /v1/responses)
- Fixed disabled skills still being accessible: backend now enforces skill disable state at runtime
- Fixed blinking/infinite re-render in the Switch Models settings panel
- Simplified Import Session, Import Workflow, and Add Skill modals — clean drop-zone UI
Downloads
| Platform | File |
|---|---|
| macOS (Apple Silicon M1/M2/M3/M4) | BioRouter-macOS-AppleSilicon.dmg |
| macOS (Intel) | BioRouter-macOS-Intel.dmg |
| Linux (Debian/Ubuntu) | BioRouter-Linux-Debian-Ubuntu.deb |
| Linux (Fedora/RHEL/CentOS) | BioRouter-Linux-Fedora-RHEL.rpm |
| Windows | BioRouter-Windows.zip |