A local AI assistant on macOS means two separate things and most tools only do one of them. The first is where your data sits: Grux OS reads your mail, calendar, contacts and files directly from the accounts already on your Mac rather than from a hosted copy, and it has no server to copy them to. The second is where inference happens: point Grux at Ollama and the model runs on your own hardware, so no token leaves the machine and the running cost is $0. Use a hosted model instead and the first half still holds, but that provider sees what you send it. Meeting audio is the strict case. It is transcribed on device with WhisperKit and the recording never leaves the Mac at all, whichever model you chose.
| What runs locally | With a hosted model | With Ollama |
|---|---|---|
| Your mail, calendar, contacts, notes, files | Local | Local |
| Meeting recording and transcription | Local, on device | Local, on device |
| Speaker separation | Local, on device | Local, on device |
| Focus log of your window titles | Local | Local |
| Shell commands and their snapshots | Local | Local |
| The model turn itself | Sent to your provider | Local |
That table is the honest answer to the question. Most of Grux OS is local under either configuration, because there is no backend for it to be anything else. The row that changes is the model turn, and it is the one row people mean when they ask.
Install Ollama, pull a model, and the Local Models surface picks it up automatically. Chat accepts either an Anthropic key or a local endpoint, so a clean install with Ollama running is a complete setup that has never had a key typed into it.
brew install ollama
ollama pull qwen3-coder:30b
open -a Grux # Local Models finds the endpoint on its own
The tree is public and there is no analytics SDK, no crash reporter and no telemetry package in it. Everything the model reads from your disk is appended to a plain text audit log, refusals included, and you can read it at any time.
~/Library/Application Support/Grux/fs-audit.log