需要授予完全磁盘访问权限,否则扫描结果不完整;清理和优化需要管理员权限时,每次都会弹出 macOS 授权对话框;MCP/HTTP 服务只绑定 127.0.0.1 回环地址,外部机器无法直接连接;0.10.5 及更早版本使用 ad-hoc 签名且未公证,需要右键选择“打开”才能启动。
burrow
caeziumMIT活跃维护一款原生 Mac 清理与系统维护应用,集磁盘分析、应用管理和实时状态监控于一体,并内置 MCP 支持,让 AI Agent 能直接调用这些系统能力。
🐹 Cleanup, app management, maintenance, disk analysis, and live status in one free, open-source, native Mac app + extensive support for AI agents.
brew install --cask caezium/tap/burrowREADME 未说明显存或 GPU 要求;这是 macOS 14+ 的原生应用,另有 Windows 10/11 beta 预览版,不涉及 GPU 型号。
一款免费开源的 Mac 原生系统管家,集清理、卸载、磁盘分析和实时监控于一体,并内置 MCP 服务供 AI Agent 调用
一款原生 Mac 清理与系统维护应用,集磁盘分析、应用管理和实时状态监控于一体,并内置 MCP 支持,让 AI Agent 能直接调用这些系统能力。
核心能力
- 内置 burrow-engine 单二进制,无需额外安装引擎
- 清理缓存、开发构建产物和残留安装包,并显示可回收空间
- 卸载应用并清除残留文件,支持多选批量卸载
- 用矩形树图分析整块磁盘的占用分布
- 内置 MCP 服务器,让 Claude Code、Codex、Cursor 等 Agent 查询并操作 Mac
容易踩的坑
- v0.14.0Burrow 0.14.0最新正式版2026-08-10 · 2026-08-10 19:04 UTC
Burrow 0.14.0
The Touch ID helper now offers itself, and the reviewed clean says what it removed instead of finishing silently.
Added
- Burrow offers the privileged helper. The helper that lets admin operations authenticate with Touch ID shipped in 0.13.0 behind a single button in Settings ▸ Advanced, and nothing pointed anyone at it — upgraders learned about it from the release notes, fresh installs not at all. It is now offered the way Full Disk Access is: one banner over the window, informing rather than blocking. At most one notice shows at a time, and dismissing the helper notice is permanent, because the helper is a convenience rather than something Burrow needs to work.
Fixed
- The reviewed clean reports what it removed. It deleted exactly what was
ticked and then looked like it had done nothing. That path doesn't run the
engine's cleaner — it deletes each reviewed path with
find, which succeeds silently, so the result screen had no output to show: no items, no freed total, no done banner. It now reports the paths it was authorized to remove, grouped by category with their sizes summed, which is a statement of fact rather than optimism — the run only succeeds after confirming every planned path is gone.
Nothing changed about what the reviewed clean deletes, or about the checks it passes before deleting: this release makes it visible, not different.
- v0.13.0Burrow 0.13.02026-08-10 · 2026-08-10 17:41 UTC
查看更新说明
Burrow 0.13.0
Headings that rendered as empty boxes now render as text, and Burrow's MCP server speaks the 2026-07-28 spec — without dropping any older client.
This release is mostly repair. The visible half fixes three things that were easy to hit; the larger half is security and reliability work on the paths that delete files and run as root, which you should never notice.
Added
- The scan tells you when it's done. A cache scan can run for minutes and used to end by just sitting there with a number. It now posts a completion notification saying what it found, honouring Settings ▸ Notify when long operations finish.
- Two more agent tools.
burrow_anomaliesandburrow_agent_auditjoin the MCP surface.
Changed
- MCP now speaks the 2026-07-28 revision, including its task and
cancellation semantics. Older clients are unaffected: 2025-11-25 through
2024-11-05 are still served, and a client that skips
initializeentirely still works.
Fixed
- Headings rendered as empty boxes. Geist and Geist Mono shipped as single variable fonts with only Regular registered, so every bold and semibold heading asked macOS to derive a weight at render time — and sometimes it produced no glyphs at all. Burrow now ships real static faces for every weight it uses.
- One bad exit no longer disables the menu bar until macOS updates.
- The window can be made smaller again — its minimum height is derived from the sidebar rather than hardcoded.
- "Stop after current" now responds. The stop was always queued, but nothing on screen said so until the in-flight update finished.
- The clean review no longer promises what closing an app can't deliver. An entry the scan refused was counted in "Close X to clean another N" even though no app was holding it — with no app named at all when it was the only locked entry.
- A cancelled app update no longer blocks later update checks for the rest of the session.
- Root operations can't interleave their output. stdout and stderr shared one line buffer, which could splice half a line from one stream onto the other.
- Update archives are size-capped before they're kept or expanded.
- Diagnostics reject more credential shapes before anything is uploaded.
- v0.12.0Burrow 0.12.02026-08-08 · 2026-08-08 08:34 UTC
查看更新说明
Burrow 0.12.0
Burrow's admin operations can now authenticate with Touch ID.
Until now every elevated action went through macOS's classic authorization dialog, which is password-only by construction — it never offers Touch ID, and it can't be cancelled safely. This release adds an optional signed helper that replaces that path.
Added
- Touch ID for admin operations. Install the helper in Settings ▸ Advanced ▸ Privileged helper and Clean, Optimize, the admin scan previews, Flush DNS, Renew DHCP, and the Login Items list all authenticate through the system's normal prompt — which offers Touch ID where the hardware has it, and falls back to your password everywhere else.
- The Login Items list is now complete. Reading it needs root, so previously macOS raised its own unexplained "sfltool wants to make changes" prompt and still returned only a partial list. Through the helper it's one prompt you recognise, and the full list.
What the helper can and cannot do
It is strictly opt-in, takes its own one-time macOS approval, and grants no standing access — you authenticate for each operation you start.
It accepts seven fixed operations and builds every command line itself. There is no field in its API for a path, a shell string, or an executable, so it cannot be asked to run anything else. It runs the engine sealed inside the signed app plus four Apple tools by absolute path, each as a separate process with no shell involved. Only Burrow can talk to it: callers are pinned to the app's bundle identifier and signing team by the system.
One honest caveat: the credential from your authentication stays valid for ten seconds, because it has to survive the hop from the app to the helper. A second operation begun inside that window won't prompt again. Full detail in SECURITY.md.
Not installing it changes nothing — every operation keeps working exactly as it does today, through the existing password prompt. You can remove the helper at any time from Settings, or from System Settings ▸ General ▸ Login Items & Extensions.
Changed
- Flush DNS no longer runs a root shell. It previously elevated
/bin/sh -c "dscacheutil -flushcache; killall -HUP mDNSResponder", handing a command string to a shell running as root. It's now two separate processes with fixed arguments. - Removed the "Touch ID for sudo" setting. It configured
pam_tidfor terminalsudoand never affected Burrow's own admin prompts, which is what people expected it to do. Those prompts are what the privileged helper now covers. Nothing already configured on your Mac is changed by removing it; to undo it yourself, runmo touchid disable.
Fixed
- A failed elevated run could report "Done — caches cleared" when nothing had actually run. Failures now say so.
- v0.11.2Burrow 0.11.22026-08-04 · 2026-08-04 17:34 UTC
查看更新说明
Burrow 0.11.2
A system-metrics, updater, and launch-reliability patch. This release corrects CPU sampling, stops expected Sparkle conditions from looking like product defects, gives AppKit a settled launch turn before creating the menu-bar item, and makes sampled app hangs reliably reach the issue tracker.
Affected macOS 27 beta users: please install 0.11.2 and report the result in #319. The exact Beta 4 compatibility guard remains in place, and the issue stays open until a notarized build is verified on a Mac that reproduced the freeze.
Fixed
- CPU usage now reflects a representative sampling interval. The bundled engine keeps a tick baseline across refreshes, samples before the other collectors fan out, and derives total usage from summed tick deltas. This removes the roughly doubled readings and coarse per-core fractions reported in #335. A cold one-shot status command can take about 600 ms longer; ongoing GUI sampling reuses its existing refresh interval and adds no wait. (#340)
- Updater failures now mean what they say. Running from a disk image or a translocated location, ordinary network failures, and user cancellation remain measurable in PostHog without opening Sentry issues. Sparkle keeps ownership of its native move-to-Applications and scheduled-retry UI. Configuration, signature, installation, and unknown failures still create exactly one scrubbed Sentry diagnostic per cycle. (#339)
- The normal menu-bar path no longer races the first AppKit launch turn.
Burrow waits one second before creating its status item, then retains the
existing 30-second stability window. The safeguard for macOS 27 Beta 4 build
26A5388gremains exact-build-only; a later macOS build returns to the normal guarded path automatically. (#339)
Improved
- App-hang evidence can no longer disappear at the Sentry bridge. Sampled hangs are collected into bounded weekly GitHub digests instead of being silently skipped. Cursor pagination reaches older unseen groups, full digests roll into numbered parts, and deferred groups remain eligible for the next run. (#339)
- Launch and updater health now have explicit lifecycle outcomes. Fixed-name scheduled, stabilizing, and stable milestones include bounded app release, macOS build, launch phase, and status-item state, so future failures can be separated without collecting free text or user data.
Privacy
- Telemetry remains optional, unlinked, and non-tracking. One Settings switch disables both PostHog analytics and Sentry diagnostics. Updater diagnostics contain fixed categories and bounded error domains/codes—never descriptions, URLs, response bodies, network names, paths, screen content, or files. The privacy manifest remains unchanged and accurate.
Security
- Publishing still fails closed, including the external Homebrew tap. Before any release build begins, CI requires every signing, notarization, Sparkle, and tap credential, then proves the tap token with a reversible Git write. The tap credential is isolated from the engine checkout so a successful notarized release cannot fail at the final cask push because the wrong token was left in Git configuration.
- v0.11.1Burrow 0.11.12026-08-02 · 2026-08-02 19:38 UTC
查看更新说明
Burrow 0.11.1
A guarded-startup and diagnostics patch for the system-wide input freeze reported on macOS 27 Beta 4. This release reduces the risky launch surface on the affected build and records enough redacted state to isolate any remaining failure without collecting screen contents or user files.
Affected macOS 27 beta users: please install 0.11.1 and report the result in #319. The issue remains open until the notarized release is verified on a Mac that reproduced the freeze.
Fixed
- The affected macOS 27 beta gets a safer launch path. On Beta 4 build
26A5388g, Burrow starts with a Dock icon instead of creating its menu-bar status item. The fallback is deliberately limited to that exact build and is retried after either Burrow or macOS changes. Manual update checks remain available even when automatic Sparkle startup is paused. - Interrupted launches recover one component at a time. A durable launch journal gives the status item and Sparkle separate 30-second stability windows. If launch is interrupted, the next run suppresses only the component whose window was active, shows a recovery alert, and offers a one-click redacted diagnostic report. (#321)
Improved
- Sentry can now explain hangs that never become crashes. Release-health sessions, hang tracking, low-memory context, fixed-name sampled performance spans, and coarse launch/updater state cover the failure modes that a normal crash report misses. Outbound data is scrubbed fail closed, with no screenshots, view hierarchies, user paths, URLs, request bodies, or automatic UI, file, database, and network tracing.
- PostHog analytics no longer bring an AppKit-facing SDK into startup. Burrow
still sends the same opt-out semantic product, screen, and operation events to
PostHog, but a small background HTTPS transport replaces
posthog-ios. It has a bounded serialized retry queue and no session replay, autocapture, remote feature flags, AppKit timer, or main-thread disk I/O. Existing 0.11.0 anonymous identities are migrated once so release-to-release funnels remain accurate. - The first signed Sparkle successor passed a real update. An installed Developer ID-signed 0.11.0 copy found, downloaded, installed, and relaunched 0.11.1 through Sparkle's native UI without Terminal or Homebrew. The updated app then passed strict signing, stapler, and Gatekeeper checks, completing #281.
Privacy
- Telemetry remains optional, unlinked, and non-tracking. One Settings switch disables both PostHog analytics and Sentry diagnostics. The privacy manifest continues to declare Product Interaction, Other Usage, Crash, Performance, and Other Diagnostic data; this release adds no signing-specific telemetry and records no screen content.
Security
- The release chain remains fail closed. The tag cannot publish unless the app is Developer ID signed, notarized, stapled, accepted by Gatekeeper, and both the update archive and appcast pass Sparkle signature verification.
- The affected macOS 27 beta gets a safer launch path. On Beta 4 build
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Burrow is an independent open-source (MIT) app. It bundles its own engine —
burrow-engine, a single source-available binary under the Functional Source License (FSL-1.1-ALv2) whose command surface is modelled on the Mole (mo) CLI by tw93 — and is not affiliated with or endorsed by mole.fit (the official Mole for Mac app bymo's author); its own name, mark, palette, and copy are original.If you like Mole and want to fund
mo's development — buy mole.fit ($19).
Burrow puts everything your Mac needs in one free, native app: junk cleanup, dev-artifact purge, app uninstall with leftover removal, duplicate finding, safe maintenance, disk maps, and live system status — powered by one bundled engine binary (burrow-engine, FSL-1.1 — see Attribution) whose commands mirror Mole's mo, so there's nothing else to install. It keeps months of local metric history and runs a built-in MCP server, so AI agents like Claude Code, Codex, and Cursor can watch, query, and care for your Mac — actions are consent-gated and audited, and Trash-based removals remain recoverable until the Trash is emptied. Permanent deletion requires separate consent and cannot be undone. Native on macOS, with a Windows preview under windows/.
Mac:
brew install --cask caezium/tap/burrow
Windows: download from releases
Contents
- Screenshots
- The tools
- Platforms
- Roadmap
- How Burrow compares to other tools
- Settings
- Permissions & Full Disk Access
- Requirements
- Install
- Security & trust
- Use it with your AI agent
- Develop & test
- Architecture
- Attribution & license
Screenshots
macOS
Windows preview
Windows TypeScript rewrite: An initial Electron + React implementation that follows the current macOS UI is available in
windows/typescript/. It includes live telemetry, local history, reviewed artifact/installer recycling, disk analysis, and read-only duplicate detection. The existing WinUI preview remains alongside it. See the migration status for capability gaps and Windows validation requirements.
The tools
Burrow wraps its bundled burrow-engine binary in a native desktop app: clean
junk, purge dev artifacts, sweep leftover installers, uninstall apps, run safe
maintenance, map your disk, and watch live system status — in one window. On top
of that it adds things the CLI doesn't have: a long-running history of your
machine's metrics in a local store and an MCP server so any AI agent (Claude
Code, Cursor, Codex…) can ask "what's been happening on this machine."
macOS is the mature flagship. Windows currently has a native WinUI 3 / .NET 8 preview app, Windows telemetry/history, tray HUD, loopback HTTP, MCP stdio bridge, CI, tests, and unsigned release packaging.
| Tool | What it does | mo command |
|---|---|---|
| Status | Live dashboard with per-metric sparklines and a sortable/pinnable process table. | mo status --json |
| Clean | Preview what's reclaimable, then clean for real — categorized cache/log/leftover removal. | mo clean |
| Purge | Reclaim space from dev projects: node_modules, build dirs, target/, __pycache__, and more — preview streams in, one confirmation, everything found goes to the Trash. | mo purge |
| Installers | Find and remove leftover .dmg/.pkg installer files in bulk. | mo installer |
| Optimize | One-tap safe maintenance: rebuild caches, repair metadata, flush DNS, restart Dock/Finder. | mo optimize |
| Software | Installed-app list with search/sort (size, name, recent, source) and multi-select uninstall; an Updates tab with a Mac apps / Homebrew picker, each half with its own check and update-all. | mo uninstall --list, brew outdated |
| Analyze | Squarified treemap of your disk; drill into any folder, reveal in Finder. | mo analyze --json |
Every scan offers a no-risk preview (--dry-run) first, a clear
reclaimed-space summary when it finishes, and a Stop button to abort a
running job.
What's on the Status dashboard
A live, glanceable read of your Mac's vitals, refreshed continuously:
- CPU — usage, load averages (1/5/15), core count, temperature
- Memory — used %, pressure (normal/warning/critical), swap
- GPU — name and utilisation (Apple Silicon via IOAccelerator)
- Disk — capacity and live read/write I/O rates
- Network — up/down throughput per interface
- Battery — percentage, health, cycle count, time remaining
- Health score — Mole's overall 0–100 rating, with a one-line reason
- Top processes — by CPU or memory, sortable and pinnable
Burrow's own extras
- History — long-range charts (5 m → 90 d) over a local SQLite history of every metric, plus peak-per-process tables. Nothing the CLI keeps.
- Activity — a running log of what Burrow has done (cleans, optimizes, scans) and the live status of anything in flight.
- Menu-bar HUD — health hero, metric tiles, top processes, and live job status, all from the menu bar (you can also run as a Dock app instead).
- MCP server — a stdio JSON-RPC server (
burrow mcp/Burrow --mcp) plus an optional localhost HTTP API, so any AI agent can query your Mac's recent state. See Use it with your AI agent. - Signed native updates — Sparkle checks a signed feed and presents its native update UI; archives and the feed are both Ed25519-signed, and nothing downloads or installs automatically. A real 0.11.0-to-0.11.1 update completed without Terminal or Homebrew and relaunched the notarized app successfully. (#281)
Platforms
| macOS | Windows | |
|---|---|---|
| Status | Stable — flagship | Preview — checked in under windows/ |
| Engine | bundled Rust burrow-engine (FSL-1.1-ALv2), with a Mole-compatible command surface; source builds can use an external mo for nonprivileged operations | bundled Mole/PowerShell engine plus Windows fallbacks where needed |
| UI | SwiftUI, translucent menu-bar app | WinUI 3 / .NET 8 |
| Install | brew install --cask caezium/tap/burrow | build from source; unsigned preview artifacts via windows/scripts/build-release.ps1 |
| Source | macos/ | windows/ |
Both apps live in this one repo, side by side, sharing this README, the landing site, and release documentation. The Windows preview currently includes a native shell, tool pages, local telemetry/history, loopback HTTP/MCP surfaces, tests, CI, and unsigned local packaging. See the Windows architecture notes and release notes.
Windows preview
The checked-in Windows app currently includes:
- A native WinUI 3 / .NET 8 shell with Dashboard, History, Activity, Analyze, Clean, Purge, Installers, Apps, Optimize, and Settings routes.
- Local Windows telemetry sampling for Dashboard, History, tray status, HTTP, and MCP.
- Local JSONL-backed history/activity storage.
- Optimize preview/confirm flows through Mole where available; the Windows Clean route is present but still a guarded pending stub until Mole Windows exposes a stable non-interactive cleanup contract for the GUI.
- Native Windows fallback flows for Analyze, Purge, installer cleanup, and app inventory where the Windows Mole branch is still interactive or lacks JSON.
- A tray icon, live tooltip, tray HUD, status menu, and quick navigation.
- A loopback-only HTTP API (
/health,/info,/snapshot,/metrics) and a stdio MCP bridge with the read-only Burrow tools. - Unit tests, Windows CI, local smoke-test helpers, and an unsigned release script that produces a setup executable, portable ZIP, hashes, and WinGet manifests.
Roadmap
The full board, with status and voting, lives at burrow.computer/roadmap. Vote by upvoting an issue, or open a request.
Building
- A single interface for machine care and agent work, Burrow grew tool by tool. The next pass designs it as one product: one navigation model, one task hierarchy, and a clear place for the agent surfaces that arrived late.
Planned
- Windows preview → first stable, Data-loss and supply-chain hardening, parity, and test coverage before it loses the “preview” label. (#93)
- Uninstall that never quietly does nothing, A handful of Homebrew apps use a cask token that differs from the display name, so a name-based lookup resolves most apps and misses the exceptions. Uninstall gets exact resolution and a visible result either way.
Considering
- Persistent one-tap “run all” Tune-Up, A saved Smart-Care routine you trigger in one tap from the dashboard. (#77)
- Faster, deeper Analyze, Better navigation through very large trees, quicker re-render on drill-down, and caching so a second scan of the same volume is close to instant.
Recently shipped: Developer ID signed & Apple-notarized macOS releases, Signed Sparkle feed + updater foundation, Stable Full Disk Access identity across updates, Bundled MIT engine, no separate mo install, Process inspector + CPU watchdog, see the changelog.
How Burrow compares to other tools
A factual feature/scope comparison. The competitor columns are the macOS
landscape; the Windows column reflects only the checked-in preview.
mole.fit is from the original author of mo — buy it ($19) if you want that
and to fund mo.
| Burrow (macOS) | Burrow (Windows preview) | mole.fit | CleanMyMac | Pearcleaner | mo / ncdu | |
|---|---|---|---|---|---|---|
| Price | Free | Free | $19 once | Subscription | Free | Free |
| Open source | MIT | MIT | – | – | ✅ | ✅ (mo) |
| Signed / notarized | ✅ Developer ID + Apple notarization (0.11.0+; earlier archives lack both) | No — unsigned preview | ✅ | ✅ | ✅ | n/a |
| Junk cleanup | ✅ | partial - Clean route pending | ✅ | ✅ | – | ✅ (mo) |
| Dev-artifact purge | ✅ | ✅ | ✅ | partial | – | ✅ (mo) |
| Leftover-installer sweep | ✅ | ✅ | ✅ | ✅ | – | ✅ (mo) |
| Uninstall + leftovers | ✅ | ✅ | ✅ | ✅ | ✅ (focus) | ✅ (mo) |
| Disk treemap | ✅ | ✅ | ✅ | ✅ | – | ncdu (TUI) |
| Live system monitor | ✅ | ✅ | ✅ | partial | – | – |
| Long-term metric history | ✅ | ✅ (JSON) | – | – | – | – |
| MCP / agent API | ✅ | ✅ | – | – | – | – |
| GUI | ✅ | ✅ | ✅ | ✅ | ✅ | – (terminal) |
Settings
Everything is local and takes effect immediately unless noted:
| Setting | What it controls |
|---|---|
| History retention | How long metric history is kept (1 day → 1 year); older rows are pruned hourly. |
| Vacuum after large prunes | Reclaim DB file space after a big prune (off by default). |
| Sampling rate | How often Burrow runs mo status --json (5 s → 5 min). |
| App language | Follow the system, or force English / 简体中文 / 繁體中文 / Русский / 日本語 / Deutsch / Français / Español / 한국어 / Português (Brasil) (relaunch). See docs/localization.md. |
| Menu-bar icon | Show the menu-bar item, or run as a regular Dock app instead. |
| MCP / agent access | Copyable stdio config + the tool list for Claude Code, Cursor, Codex, Cline, and any MCP client. |
| Local HTTP query server | Optional loopback REST endpoints + port for dashboards/curl. On Windows, disabling this keeps the local /mcp bridge available for stdio MCP. |
| Engine | Shows the resolved engine's product name and version (burrow-engine in official builds, or an external mo in source builds). The bundled engine updates with signed Burrow releases; source builds using an external engine retain its updater. |
Permissions & Full Disk Access
Cleaning system and app caches means reading TCC-protected folders, so macOS will prompt — once per folder — unless the app has Full Disk Access. Burrow handles this honestly:
- Before a flood-prone scan it shows a gate explaining the trade-off, with a one-click link to System Settings → Full Disk Access (grant once, no more prompts).
- Don't want to grant it? Scan with admin runs the same scan as root — root bypasses TCC, so it's a single password prompt instead of a flood.
- Burrow only ever reads sizes; it never opens that data itself, and the real cleanup always goes through macOS's own admin dialog.
Requirements
macOS
- macOS 14+
- No separate engine install. Burrow bundles its own engine
(
burrow-engine, one FSL-1.1 binary) and runs it directly. (Building from source? The engine is staged from the publicmacos/vendor/burrow-enginesubmodule, with no GitHub read token required. Without an initialized engine submodule, Burrow falls back to a systemmo—brew install mole— with mo's own argv conventions.)
Windows preview
- Windows 10/11
- .NET 8 SDK for local build/test.
- Inno Setup only when running the unsigned release packaging script.
Install
Burrow 0.11.0 is the first Developer ID-signed and Apple-notarized release. New official macOS tags must pass signing, notarization, ticket stapling, and Gatekeeper assessment before they can publish. Version 0.10.5 used an ad-hoc signature rather than Developer ID and was not notarized; older archives also predate the current distribution guarantee. The full security/trust write-up is in SECURITY.md.
Homebrew (recommended)
brew install --cask caezium/tap/burrow # the app + bundled engine
The live cask installs the signed and notarized build, preserves quarantine so
Gatekeeper can validate Apple's ticket, and contains no postflight bypass or
unsigned-build warning. It is marked auto_updates true because Sparkle owns
in-app updates.
Direct download
Download Burrow-x.y.z.zip from
Releases, unzip into
/Applications, then:
open /Applications/Burrow.app
Keep the downloaded app's quarantine metadata intact: Gatekeeper uses it to verify the stapled notarization ticket. If you're intentionally installing an archived 0.10.5-or-earlier build, right-click the app and choose Open; those builds predate the notarization ticket.
macOS build from source
brew install xcodegen
git clone https://github.com/caezium/Burrow.git && cd Burrow
bash scripts/release.sh
cp -R build_dist/Build/Products/Release/Burrow.app /Applications/
open /Applications/Burrow.app
The local script applies a coherent ad-hoc signature to the app and every bundled executable so Full Disk Access works during development. Only official tag builds use the private Developer ID identity and Apple notarization.
Burrow lives in the menu bar (it's a menu-bar agent). Click the icon → Open Burrow — or turn the menu-bar icon off in Settings to run it as a Dock app. If a macOS build freezes while Burrow creates that status item, the next launch stays in Dock-based compatibility mode on the same OS build and offers a one-click redacted diagnostic report. Automatic Sparkle startup waits until the initial AppKit launch turn has settled and the status item is stable; if the updater then fails its own stability window, later automatic checks pause for that app/OS build while manual checks remain available. A new macOS build retries a guarded status item; a new Burrow or macOS build retries an updater that previously failed its stability window.
Windows preview build
git clone https://github.com/caezium/Burrow.git
cd Burrow\windows
dotnet restore .\BurrowWin.sln
dotnet build .\BurrowWin.csproj -c Release -p:Platform=x64 -nr:false -v:minimal
dotnet test .\Tests\BurrowWin.Tests\BurrowWin.Tests.csproj -c Release -v:minimal
To create the checked-in unsigned preview artifacts locally:
.\scripts\build-release.ps1
That script builds the app, runs tests, publishes the WinUI payload, creates an
unsigned Inno Setup installer, creates a portable ZIP fallback, writes
SHA256SUMS.txt, and writes WinGet manifests. See
windows/docs/release.md.
Security & trust
Burrow drives one bundled engine binary, burrow-engine (FSL-1.1-ALv2; its
source is publicly available and the signed binary ships inside the app — see
Attribution), plus an MIT fclones sidecar for
duplicate finding. The honest privacy picture:
- No accounts, no ads. Your metrics, history, and file contents stay on your machine. The macOS app sends opt-out anonymous usage plus crash, hang, startup, update, and sampled performance diagnostics. It sends no screen recordings, user files, user paths, metrics, or stored IP; turn it off in Settings. PostHog delivery and its bounded sanitized retry outbox run entirely off AppKit's main thread. Full list in TELEMETRY.md.
- No background root helper by default. When Clean/Optimize — or an
uninstall whose app bundle needs an administrator — need admin rights, macOS's
own dialog asks you and Burrow runs that one engine command as root, then
exits — you approve every elevation. Every elevated run gets a fixed
environment:
BURROW_HOMEpoints the engine back at your home (so an elevated uninstall removes your leftovers, not root's) andBURROW_PRIVILEGED=1makes it refuse user-writable sidecar overrides. You can opt in to a small signed helper so those prompts accept Touch ID; it grants no standing privilege (every root operation still authenticates, every time), performs only scan, clean, and optimize, and can be removed from Settings. Details in SECURITY.md. - Local-only surfaces: the MCP/HTTP surfaces bind to loopback only
(
127.0.0.1) and history is stored locally. On Windows, the HTTP REST toggle disables REST endpoints but keeps the local/mcpbridge route available for stdio MCP clients. The macOS Updates tab reads Homebrew's local index when it opens and runsbrew updateonly when you click Refresh, the same fetchbrewdoes for itself. - Distribution signatures: new official macOS tags fail unless Developer ID signing, notarization, and the signed Sparkle ZIP/feed checks pass; local macOS builds use an ad-hoc development identity. Windows preview artifacts remain unsigned, so direct-download users should expect SmartScreen or stricter Application Control policy prompts.
- The full honest write-up, including macOS admin trade-offs and the "Scan with admin" option, is in SECURITY.md.
Use it with your AI agent
Burrow doubles as an MCP server over stdio,
so any MCP-capable agent — Claude Code, Cursor, Codex, Cline, Zed, and
others — can read your machine's recent state. Same server, same {command, args}
shape everywhere.
Let your agent set it up
For macOS, paste this to your coding agent and it'll wire itself in:
Add the Burrow MCP server to my config so you can read my Mac's system history. It's a local stdio MCP server — run it as
burrow mcpif the Homebrew shim is on my PATH, otherwise/Applications/Burrow.app/Contents/MacOS/Burrowwith args["--mcp"]. Add it under my MCP servers, reload, and confirm the toolsburrow_snapshot,burrow_history,burrow_top_processes,burrow_process_usage, andburrow_infoare available. Then tell me my Mac's current CPU and memory.
Or configure it manually
The config is the same JSON for every agent — only the file differs:
{
"mcpServers": {
"burrow": {
"command": "/Applications/Burrow.app/Contents/MacOS/Burrow",
"args": ["--mcp"]
}
}
}
| Agent | Where it goes |
|---|---|
| Claude Code | ~/.claude/settings.json — or claude mcp add burrow -- /Applications/Burrow.app/Contents/MacOS/Burrow --mcp |
| Cursor | ~/.cursor/mcp.json (global) or .cursor/mcp.json (per project) |
| Codex | add a [mcp_servers.burrow] entry in ~/.codex/config.toml |
| Cline / Zed / other | the client's "MCP servers" / mcpServers config |
If you installed via Homebrew, a burrow shim is on your PATH, so you can use
command: "burrow", args: ["mcp"] instead of the bundle path. Reload the agent
and ask in plain language.
Windows preview builds include the stdio bridge in source under
windows/Tools/McpStdioBridge/ and in release artifacts as
Assets\Mcp\burrow-mcp-stdio.exe.
Tools — 19 over MCP, read-only by default. The full reference, with when an agent should reach for each, is in docs/agent-tools.md. The essentials:
- Status & history —
burrow_snapshot,burrow_history,burrow_top_processes,burrow_process_usage(rank bycpu_time/peak_cpu/avg_cpu/peak_mem),burrow_diff,burrow_disk_forecast,burrow_report - Diagnose —
burrow_doctor(Full Disk Access, memory pressure, disk headroom, SIP/Gatekeeper/FileVault/firewall, battery, high-CPU, display/volume/network),burrow_ports,burrow_info - Disk & apps —
burrow_analyze,burrow_list_apps,burrow_cleanup_history,burrow_deleted_files - Maintain (gated) —
burrow_clean,burrow_optimize,burrow_uninstall,burrow_purge,burrow_installer
Actuating tools preview (--dry-run) unless confirm:true and the matching
Settings opt-in is enabled — an agent can always look, but only acts with your say-so.
Windows also keeps burrow_uninstall(action=...) as a compatibility tool for
list, leftover-preview, and confirmed vendor-uninstaller launch workflows.
There's also an optional localhost REST API (127.0.0.1:9277 — /health,
/info, /snapshot, /metrics) for dashboards or curl. Loopback is a network
boundary, not authentication: every request needs the random per-install bearer
credential, an exact localhost Host, no browser Origin, and stays inside the
request-size/rate limits. On macOS, read the credential locally with
defaults read dev.caezium.Burrow query_auth_token; on Windows it lives in the
current user's %LOCALAPPDATA%\BurrowWin\settings.json, and the stdio bridge
adds it automatically. Disabling Windows REST does not close the listener
because the authenticated stdio bridge still posts to /mcp.
BURROW_HTTP_TOKEN="$(defaults read dev.caezium.Burrow query_auth_token)"
curl -H "Authorization: Bearer $BURROW_HTTP_TOKEN" http://127.0.0.1:9277/health
Develop & test
macOS
cd macos # the macOS app lives here (monorepo: macos/ + windows/)
bash ../scripts/fetch-sentry.sh # vendor Sentry.xcframework (it's a local framework, not an SPM dep)
bash ../scripts/fetch-sparkle.sh # vendor the checksum-pinned official Sparkle.framework
xcodegen generate
xcodebuild -project Burrow.xcodeproj -scheme Burrow \
-configuration Debug -destination 'platform=macOS' test
The suite covers the parts that matter through public interfaces: DB roundtrip
- range + stride sampler + prune + corruption recovery, Store clamping/defaults,
Maintenance prune, MCP tool routing + the semantic usage ranking, squarified
treemap invariants, the Full Disk Access decision, and
mooutput parsing.
Windows preview
cd windows
dotnet restore .\BurrowWin.sln
dotnet build .\BurrowWin.csproj -c Release -p:Platform=x64 -nr:false -v:minimal
dotnet build .\Tests\BurrowWin.Tests\BurrowWin.Tests.csproj -c Release -nr:false -v:minimal
dotnet test .\Tests\BurrowWin.Tests\BurrowWin.Tests.csproj -c Release --no-build -v:minimal
For local GUI smoke checks:
.\run-local.ps1 -NoBuild -SmokeTest -Restart -RequireHealth -Route settings -TimeoutSeconds 60
Architecture
macOS
Contents/Resources/burrow (burrow-engine, one binary; one {ok, data|error} envelope per command,
NDJSON when streamed)
burrow status --watch ──> SnapshotProducer (one long-lived stream, one line per tick;
polls `status --json` only if the stream drops)
──> SQLite (WAL) ──┬─> Status / History (charts)
├─> HTTP QueryServer (:9277)
└─> Burrow --mcp (stdio) ─> Claude Code / Cursor / Codex
burrow analyze --progress <p> ──> live file/dir/byte ticks, then the full payload
──> DiskScanner + squarified Treemap ─> Analyze
(one `analyze` per child directory is the fallback)
burrow clean|optimize|purge --stream ─> OperationFlow (NDJSON, live on both elevation routes:
the helper relays stdout over XPC, osascript tails the
root shell's log) ─> Clean / Optimize / Purge
burrow clean --apply --permanent --plan <file> --stream
──> the reviewed clean: Confirm writes the ticked paths to a plan
file and the engine removes only those — no re-scan — and
reports each one back (removed / failed / protected + reason)
burrow installer, uninstall [--apply] ─> Installers / Software (buffered envelope; uninstall is
elevated only when the bundle needs an administrator)
burrow dupes|orphans|photos|net --json ─> Duplicates / Leftovers / Photos / Network (+ fclones sidecar)
The Swift side names the seams after what they are: BurrowEngine resolves
and spawns the bundled binary and parses its envelope, EngineRunner is the
one capture/stream/PTY facade, EngineCLI is discovery plus the elevated
do shell script builder, and MoActions is the single gate that mints every
destructive run for the GUI and the MCP server alike. A source build without
an initialized engine submodule falls back to a system mo, whose argv is the
inverse of the engine's (mo runs live by default; the engine previews by
default and needs --apply) — BurrowEngine.engineArgv is the one
translation, applied only when the resolved binary is the bundled engine.
One app binary, two modes: default is the menu-bar GUI; Burrow --mcp is the
stdio MCP server (it forks before SwiftUI claims the process).
The whole UI is one translucent window with a top-pill nav (Brand/Tool
design system); Settings, History, and Activity are panes in that same window.
Windows preview
The Windows app is a WinUI 3 / .NET 8 project in windows/ using
MVVM view models, service-layer Windows/Mole integration, local JSONL history,
loopback HTTP, and a stdio MCP bridge. Mole remains the preferred engine path
where it is safe and non-interactive; Windows-native fallbacks cover current
gaps in the Windows Mole branch. See
windows/docs/windows-architecture.md.
Attribution & license
Burrow (this repository) is MIT. The app bundle ships two separately licensed binaries — the full notices are in NOTICE:
burrow-engine(Contents/Resources/burrow) is © 2026 caezium, licensed under the Functional Source License 1.1, ALv2 future license (FSL-1.1-ALv2). Its source lives in the public caezium/burrow-engine repository, vendored as a submodule and built into a single universal binary at release time; the binary ships with its license and dependency notices underContents/Resources/licenses/burrow-engine/. Its command surface (clean,optimize,uninstall,analyze,status, …) is modelled on Mole CLI (mo), which is © tw93, MIT — Burrow no longer bundles a fork of Mole's code.fclones(Contents/Resources/fclones) is © Piotr Kołaczkowski, MIT — the duplicate-file engine behind the Duplicates pane.- Inspired by the mole.fit Mac app (same author as
mo). Burrow is an independent reimplementation with its own brand — no assets, icons, copy, or trade dress are taken from mole.fit. - The history-DB + MCP pattern shares lineage with the same author's
Stats fork (
caezium/stats@henry/history-mcp). - Treemap layout: Bruls, Huijsen & van Wijk (2000), "Squarified Treemaps," re-implemented from scratch in Swift.
Contributing
Burrow is community-driven. The repo currently contains the macOS app in
macos/ and the Windows preview in windows/. We welcome
bug fixes, tests, documentation improvements, and focused improvements to the
checked-in platform implementations.