An assistant that can see your screen and act on your machine needs more macOS permissions than a normal application, and the useful question is not how many it asks for but what refusing each one costs. Grux OS declares nine, and only five are required by any feature at all. The other four are asked for by features that still work without them, just with less in them. Every permission is requested the first time you open the feature that needs it rather than in a wall at first launch, and refusing one disables exactly that feature and nothing else. Full Disk Access, the one most worth refusing by default, is required by nothing anywhere in the app and unlocks a single BETA surface.
| Permission | Required by | What refusing costs you |
|---|---|---|
| Microphone | Meetings | Voice input in Chat and Reactor |
| System audio capture | Meetings | The other half of the call, not your mic |
| Screen Recording | Focus log, Terminal Focus | Screen context in Chat |
| Calendar | Calendar | The agenda on Home, calendar tools in Chat |
| Contacts | Contacts | Contact lookup in Chat |
| Automation | Nothing | Commands, Terminal Focus, app control from Chat |
| Accessibility | Nothing | Window and selection awareness, detail in Focus log |
| Notifications | Nothing | Alerts from Schedules, Workflows and Focus log |
| Full Disk Access | Nothing | One BETA surface, and nothing else anywhere |
One key and no permissions. Chat needs an Anthropic key or a local Ollama endpoint and nothing else. Pick no features during setup and the app asks for nothing beyond a model to answer with.
ScreenCaptureKit, AppleEvents and cross-app microphone access do not exist inside the App Sandbox, so an app that captures your screen and drives other applications cannot be sandboxed and still do those things. That means the operating system's own path allowlist is not available either, and the filesystem boundary is enforced in Swift instead, in a single file.
All nine are declared and shown during setup, but the app does not yet check every one immediately before the system call that needs it. macOS still enforces them either way. What you may get is nothing back, rather than an explanation of which permission was missing.