The full tour

Seven surfaces. One dock.

BorgDock is a Tauri desktop app. Each surface is a dedicated window you can summon by keybinding, sized to fit beside your editor, not cover it.

FOCUS

Triage by urgency, not by order opened.

Every PR scored on eight signals — approvals, failing checks, review age, contributor weight, blast radius. The tab re-sorts in real time so the next thing to do is always on top.

Ready to merge
Approved + green + mergeable. Surfaces first.
Build failing
Your PR with red checks, ranked up by how long it’s been broken.
Review overdue
Requested > 2 days ago — team SLA signal on the card.
Stale draft
Your own WIP. Kept out of everyone else’s way.
BorgDock23 open2 failing
Ranked by priority — most urgent first
acme/prdockReady to merge
Add rate-limit backoff for GitHub polling
JSgh-polling-backoffslot-2approved
#1284
acme/prdockBuild failing·requested 3h ago
Migrate cache layer to SQLite WAL
mrsqlite-wal2 failing
#1279
acme/prdockReview overdue·Stale 2d
Settings: add per-repo priority weights
hsper-repo-priorityin progress
#1271
acme/prdockReview requested
Quick Review overlay keyboard shortcuts
ctquick-review-keys
#1266
acme/prdockAwaiting review · 1d
File Palette: fuzzy match on path segments
JSpalette-fuzzyslot-4changes requested
#1260
Updated 12s ago · 23 open · 2 failing
CI · CLAUDE CODE

See the failing line. Fix it without leaving the dock.

BorgDock streams check logs, extracts the first real error — not the last 2,000 noisy lines — and hands the failure to Claude Code inside a pre-spawned git worktree. You review. It codes.

log-parser.tsFinds the real error in 2,847 lines in < 50ms
worktrees/Slot-3 ready. Main checkout untouched.
handoff.mdError + diff + affected files → Claude Code prompt
CI · test-integration
failed 43s
× Parsed 1 error from 2,847 log lines
services/cache.test.ts :42:17
Expected: "sqlite:///:memory:"
Received: undefined
at Object.<anonymous> (services/cache.test.ts:42:17)
at async runTest (runner.ts:88:5)
worktree ready · slot-3
FILE PALETTE · ⌘P

One fuzzy search across every repo you've cloned.

Match paths across all clones in ~/src. Preview with syntax highlighting. Jump straight to the PR that touched the file last.

4 repos · 847 files
services/cache.tsprdock
services/cache.test.tsprdock
stores/pr-store.tsprdock
src/db/wal.rstauri-db
migrations/003_wal.sqltauri-db
docs/CACHING.mdprdock
types/cache.tsprdock
services/cache.ts · TypeScript
import { Database } from './db'

export class CacheStore {
  private db: Database

  async getCache(key: string) {
    return await this.db.query(
      'SELECT value FROM cache WHERE key = ?',
      [key],
    )
  }
}
↑↓ navigate↵ open⌘P toggleroot: ~/src
QUERY · ⌘L

A SQL window where you already are.

SQL Server, Postgres, MySQL. Run, scroll, copy. Read-only by default; saved connections; results cached for instant re-scroll.

SQL · prod-readonly
SELECT author, COUNT(*) AS prs,
AVG(EXTRACT('hours' FROM merged_at - opened_at)) AS avg_hrs
FROM pull_requests
WHERE merged_at > NOW() - INTERVAL '14 days'
GROUP BY author ORDER BY prs DESC;
authorprsavg_hrs
mira.raines289.4
hiro.sato2414.2
cal.travers195.8
jen.sanders1722.1
ayo.fela1411.5
pete.wu128.3
noa.lind931.6
7 rows · 23ms
AZURE DEVOPS

Work items, ranked alongside your PRs.

Auto-linked by branch or commit message. Sprint, state, tags, implementing PR — on one card. Edit state and assignment without leaving the dock.

BorgDock23 open2 failing
Active· User Story#10823
PR sidebar should survive display-sleep
Sprint 47Bug-bash
Committed· Bug#10817
Log parser: surface first TypeScript error not last
Sprint 47Parser
New· Task#10801
Add per-repo priority weights to Settings
Sprint 48Settings
Active· User Story#10798
Quick Review: approve / request-changes keybindings
Sprint 47Review
Resolved· Bug#10792
SQL window: results table jitter on sort
Sprint 47SQL
Azure DevOps · acme/product · synced 8s ago
FLOATING BADGE · ⌘⇧B

Hide the dock. Keep the signal.

Always-on-top capsule. Count and worst status. Click to expand, double-click to reopen the full dock.

23 open · 2 failing
last sync 12s ago
18 open · 0 failing
last sync 12s ago
11 open · 0 failing
last sync 12s ago
KEYBOARD

Every action has a key.

Review a whole queue without lifting your hand. The command palette remembers the ones you forget.

⌘⇧PToggle sidebar
⌘KCommand palette
⌘PFile palette (cross-repo)
⌘LQuery window
J / KNext / previous PR
OOpen PR on GitHub
A / RApprove / request changes
MMerge when green
WOpen in worktree
CSend context to Claude Code
And the parts you don't see

The boring stuff we got right.

Token bucket polling
Respects GitHub's per-user + per-installation rate limits. Never hammers.
Offline-first cache
SQLite WAL local cache. The sidebar works on the plane; syncs when you land.
Per-repo priorities
Weight a repo up or down globally. Quiet vendor forks. Loud prod monorepo.
Native notifications
Tray + OS notifications for reviews requested, CI flips, merges.
Auto-updates
Signed, delta updates on all three platforms. Roll back any release with one click.
No telemetry by default
Off out of the box. Opt in from Settings if you want to help us prioritize.

Dock it. Close every other tab.

Free for individuals. macOS · Windows · Linux. No cloud account, no tracking — reads your Git provider directly.

Download BorgDockSee all features