CASE №0001 · Classification: Approved — Genuinely Useful

Project Root

A local voice assistant for Mac · Built from the metal up

Local-first voice assistant. Voice in, voice out, full macOS control, no cloud.

Filing Metadata

Type
Software
Status
Active
Stack
6 components
Filed
MMXXVI
The Premise

Filed by the Agent · For Internal Distribution

Every assistant on the market is brilliant at conversation and clumsy at action. They will write you a poem, but ask one to read your inbox, draft a reply to your manager, and put a meeting on your calendar — and you are suddenly handing over your email, your calendar, your tone of voice, and your relationships to a service whose business model is “we improve the product with your conversations.” The trade is invisible until it isn’t.

Root started with a different question. What if the assistant lived where your data already lives? On your Mac. With access to the same files, the same mailbox, the same calendar you already trust the machine with. No round-trip to someone else’s server. No telemetry. No “we kept your conversation for quality review.” The model runs in a process you started yourself. The keychain holds the tokens. When the lid closes, the conversation ends.

The premise is simple to state and stubborn to build: a personal assistant should be genuinely useful without being a surveillance product. Root is the working proof — three apps, one local brain, every integration you actually use, and a network it never leaves.

The Bureau notes: opinion divided on whether this is a software project or a small act of resistance. Filed as both.

The Three Surfaces · A Tour

Chapter A · Root Mission Control

When the answer is one keystroke away.

Most of what you ask an assistant doesn't need a window. It needs an answer and a way back to whatever you were doing. Mission Control lives in the menu bar and answers to Option+Space — the same hotkey muscle memory that opens Spotlight. Speak or type; get a reply by voice or as a quick note; carry on. No app to bring forward, no tab to find. The whole exchange happens in an NSPanel overlay that knows when to disappear.

Exhibit A · Mission Control · Idle State

Menu-bar overlay · Option+Space

  • Siri-style NSPanel overlay, summoned anywhere
  • Voice or text in, voice or text out
  • macOS `say` for TTS · Web Speech API for STT
  • No window to manage; closes when you're done

Chapter B · Root Desktop

When the conversation deepens.

Not every task is a single question. Some are conversations — reviewing your inbox, drafting a reply, scheduling around a tentative meeting, asking Root to dig through a folder and tell you what's in it. The desktop app holds the long thread. It streams Root's reasoning as it works, shows which tools it called, and lets you flip between voice and text without losing the room. Light mode, dark mode, audio mode that visualises the conversation as waveforms — same backend, three different ways to be present in it.

Exhibit B · Desktop · Idle (Light)

Native macOS app · React + Tauri

  • Full agentic loop UI — see Root think, tool by tool
  • Streaming responses (newline-delimited JSON)
  • Voice mode and chat mode against the same context
  • Ships to /Applications/Root.app via Tauri

Chapter C · Root Mobile

When you walk away from the desk.

Root doesn't live on your phone — your Mac does the thinking. The iOS app is a thin client that reaches back to your Mac over Tailscale, so your model and your data never leave your network. Ask Root from the kitchen what your next meeting is. Tell it to draft a reply on the walk home. The conversation that started at your desk is waiting where you left it.

Exhibit C · iOS Companion

iOS companion · Expo

  • Same backend API as desktop and menu bar
  • Remote access over Tailscale — encrypted, peer-to-peer
  • Voice and text from anywhere in your tailnet
  • Built with Expo (React Native)
Under the Hood · The Brain

How Root Thinks · A Brief Explanation

A loop, a local model, and a small library of levers.

When you ask Root to do something, your words don’t leave your Mac. They go to Ollama, a process running locally that hosts the language model. The model reads the prompt, decides whether it needs to do something or just answer, and — if it needs to act — picks a tool from the library Root has wired up.

The tool runs. The result comes back to the model. The model reads it, decides what to do next: respond, call another tool, or call the same tool again with different arguments. This is the agentic loop — Root will go around up to five times before it has to come up for air. Every step streams back to you so you can watch it work.

The library of levers is what makes the loop interesting. Root can reach into:

Gmail · Outlook · Mail.app

reads, triages, drafts replies

Google Calendar · Outlook Calendar

creates, summarises, finds conflicts

Obsidian

memory palace — persistent notes, journals, project context

GitHub

reviews PRs, summarises issues, opens drafts

Filesystem

reads, organises, searches local files

macOS controls

volume, battery, app launching, system state

Daily briefing

10am roll-up · morning · midday · EOD check-ins

New levers are added as the use case demands. The list grows; the brain stays where it is.

Technical Specification

Parts Inventory · Annotated by the Agent

Runtime
Bun 1.3+
Backend
Hono 4.6 (port 3001)
Inference
Ollama · Gemma 4
Desktop
React 18 + Tauri 2.0 + Vite 5.4
Menu Bar
Swift / SwiftUI (NSPanel)
Mobile
Expo (React Native iOS)
Mail Bridge
Swift CLI → ~/Library/Mail SQLite
Auth
OAuth 2.0 → macOS Keychain
Integration
AppleScript · Web Speech · `say`
The Roadmap · What's Shipped, What's Next

Form BSUT-04 · Capabilities Assessment

Shipped, sealed, and stamped. Plus what’s on the drafting table.

✓ Shipped

  • Email triage across Gmail, Outlook, and Mail.app
  • Calendar operations on Google + Outlook (create, read, summarise)
  • Multi-device orchestration via Tailscale
  • Obsidian as memory palace — persistent notes, project context, journals
  • GitHub integration — PRs, issues, draft summaries
  • File operations across the local filesystem
  • System controls (volume, battery, app launching)
  • Markdown journaling with hourly summarisation
  • Scheduled daily briefing at 10am
  • Morning · midday · EOD check-ins

◇ On the Drafting Table

Filed under future filings · subject to revision

  • Linear + Notion integrations (in progress)
  • Slack — read channels, draft replies, summarise threads
  • Spotify control + ambient audio routing
  • Browser automation via headless Playwright
  • Local fine-tuning on the agent's own writing
  • Background watchers — proactive triggers, not just request/response
Field Notes

The cloud never sees a thing. The Bureau prefers it that way.

— Internal memo, undated

Source materials and binaries withheld pending review.