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
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.
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)
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.
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`
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
“The cloud never sees a thing. The Bureau prefers it that way.”
— Internal memo, undated
Source materials and binaries withheld pending review.