Skip to content

Releases: BaranziniLab/biorouter

BioRouter v1.85.2

15 Jun 03:20

Choose a tag to compare

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:QUANT Hugging 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 /loop from 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

11 Jun 00:20

Choose a tag to compare

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 basesbiorouter knowledge to ingest, query, lint, and hide/unhide bases; the session reflects which bases are active.
  • Install extensions, skills, and workflowsbiorouter extension install <file.brxt>, biorouter skill install <file.zip>, and biorouter 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 biorouter CLI 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\bin on Windows).
  • From a terminal, biorouter setup-path (alias install-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.
  • .brxt extension installs are gated on uv up 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

10 Jun 03:38

Choose a tag to compare

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.app to /Applications, overwriting the existing copy
  • Linux: sudo dpkg -i biorouter_1.80.1_amd64.deb or sudo 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 visualize
  • fix(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 collision
  • feat(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

04 Jun 18:26

Choose a tag to compare

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_id is now preserved through the Completer → Provider message 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_page is allowed on raw/* 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

  • IngestModelPicker is 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.
  • KBSelectorPalette guards empty slugs and surfaces createBase errors; 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.app to /Applications, overwriting the existing copy
  • Linux: sudo dpkg -i biorouter_1.80.0_amd64.deb or sudo 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 ids
  • feat(knowledge): conversion for HTML / PDF / DOCX / CSV / URL fetch / pasted-text URL extraction
  • feat(knowledge): credibility ladder — DOI/arXiv/PMID/ISBN → Crossref → OpenAlex → host pattern → publisher allow-list → agentic fallback; retraction detection
  • feat(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 cancel
  • feat(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/override
  • feat(server): SSE-streamed ingest/query/lint macro routes + GET/POST /knowledge/active
  • feat(knowledge): .brkb zip export/import + ProviderCompleter adapter; OpenAPI + regenerated TS client
  • fix(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 button
  • feat(ui): ForceGraph canvas (credibility colors, hover dimming, retracted badge), NodePreview, ChangeLogDrawer with restore
  • `feat(ui): chat-sid...
Read more

v1.76.1

01 Jun 23:24

Choose a tag to compare

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-codex and o3-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.app to /Applications, overwriting the existing copy
  • Linux: sudo dpkg -i biorouter_1.76.1_amd64.deb or sudo 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 validation
  • feat(message): async createUserMessage with structured image content blocks
  • feat(chat-input): hide attach + ignore image paste/drop when active model lacks vision
  • feat(chat-input): send images as structured ImageContent + vision-mismatch banner
  • feat(renderer): InlineImage component supporting either temp-path or base64; ImageContent rendering in user and assistant transcripts
  • feat(context): expose currentModelSupportsVision (with session-scoped override)
  • feat(ui): bulk extension/skill toggles + steadier context-window tooltip
  • fix(google): emit inline_data for user-attached MessageContent::Image
  • fix(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 them
  • fix(image-input): catch createUserMessage errors instead of unhandled rejection
  • fix(image-input): carry attachments through brand-new session creation
  • fix(image-input): per-session vision gating + filter parent drop channel
  • chore(api): regenerate OpenAPI client for supports_vision
  • chore(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

30 May 21:33

Choose a tag to compare

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.app to /Applications, overwriting the existing copy
  • Linux: install the new .deb or .rpm over the existing installation (dpkg -i and rpm -U handle 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 indicator
  • feat(dashboard): Fold all / Unfold all toggle in toolbar
  • feat(dashboard): persist window.folded across reloads
  • feat(dashboard): muted accent palette tuned for small-tile layouts
  • feat(insights): 7d and 30d session and token windows
  • refactor(onboarding): split provider setup into composable cards
  • feat(app): release-update notifier and IPC listener disposer pattern
  • feat(extensions): let users edit timeout on built-in extensions
  • feat(providers): persist failed-request payloads for diagnosis
  • fix(compact): keep token gauge in sync after manual /compact
  • fix(model-picker): stop dropdown flicker and match option font to control
  • fix(model-config): pick first available model per provider, refresh lists
  • refactor(chatrecall): rename to "Chat Recall" everywhere
  • chore(ui): cross-screen polish — toast, modals, menus, threshold slider
  • chore(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

13 May 05:53

Choose a tag to compare

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:

  1. 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 their config.yaml. A fresh install silently hit public AWS Bedrock instead of the UCSF proxy, where UCSF-issued keys aren't recognized.
  2. The frontend pre-populated AWS_PROFILE='default'. When the user had no ~/.aws/credentials file, the AWS SDK's profile-resolution step interfered with the env-var-credential fallback in subtle ways.

Both fixed:

  • AWS_ENDPOINT_URL_BEDROCK is 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 Credentials object from VERSA_BEDROCK_ACCESS_KEY_ID + VERSA_BEDROCK_SECRET_ACCESS_KEY and 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-2 and the UCSF proxy URL by default).
  • The misleading AWS_PROFILE default 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.app into /Applications, replacing the existing app
  • Linux: install the new .deb or .rpm over the existing installation (dpkg -i and rpm -U handle 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 + region
  • fix(providers): drop UCSF wording from generic Azure OpenAI and Amazon Bedrock helper text
  • fix(extension-updater): share augmented PATH with uv sync, report real error detail
  • chore(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

13 May 01:41

Choose a tag to compare

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 sessionNameSync module centralizes the rename cache, default-name detection, and a BroadcastChannel that 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_name is 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

12 May 06:49

Choose a tag to compare

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
  • biorouterd stderr 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.openExternal now receives a normalized URL, closing a small URL-handling gap
  • Dropped the cat spawn 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

08 May 18:56

Choose a tag to compare

What's New

New Features

  • Skills — Create and manage reusable prompt templates as skills; install from .md files or .zip bundles
  • Extension bundles (.brxt) — New .brxt package 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