macenize.pro
Handbook · Mac Vitals 1.0

Everything the app does, and how to read it.

Written for the person who just installed it and wants to know what the circles mean. Fifteen minutes end to end; skip to whatever you need.

01

Getting started

Installing

Move it to Applications

Open the DMG and drag Mac Vitals across. The first launch may ask you to confirm — the build is notarized by Apple, so you should not see a Gatekeeper block.

Find it in the menu bar

There is no Dock icon and no main window. Mac Vitals is an accessory app: it lives entirely in the menu bar. Look for the waveform widgets near the clock.

Walk through onboarding

The first run offers permission cards and a hardware scan that detects Ollama, LM Studio, Docker and any dev servers you have running. Every step is skippable and nothing is requested silently.

Choose your widgets

Settings ▸ Menu Bar. Add a slot per module, pick its style, drag to reorder. The preview above the list is the real widget renderer, not a mockup.

02

Reading the menu bar

Five widget styles

Each slot renders one module in whichever style suits it. Hover any widget for a spoken-quality summary; VoiceOver reads the same sentence.

Sparkline
28×16 live chart. Best for CPU and network, where shape matters more than a number.
Gauge
16 pt ring. Fills clockwise. Good for anything with a natural full scale, like memory pressure.
Value
Text only, tabular figures so the width never jitters as digits change.
Icon + value
A module glyph beside the number, for when several slots look alike.
Stacked duo
Two 8 pt rows — up and down for network, read and write for disk.

Clicking a widget

Clicking opens the dropdown scoped to that module. Click the GPU widget and you get the GPU card, not eleven cards to scan. The header offers All modules to widen; ⌥⌘V always opens the full list. Clicking a different widget while the panel is open re-scopes it in place rather than closing.

On cost

Menu bar refresh rate is a setting, not a hidden constant, and it is labelled with its real cost: Live (1 s) ≈ 2% of one core, Balanced (2 s, the default) ≈ 1.3% with a live sparkline and ≈ 0.3% without, Efficient (5 s) ≈ 0.85%.

The reason is worth knowing: macOS re-snapshots a menu bar item's entire button into bitmaps on every visual change, roughly 12 ms each, regardless of how little changed. So the cost tracks how often your numbers change, not how much monitoring happens. A widget whose displayed value is unchanged is free.

03

The modules

What each card tells you

CPU
Total load, a ring per core and two minutes of history. Blue rings are performance cores, pink are efficiency cores — read from the kernel, so the split is right on your Mac rather than assumed. Hover a ring to see which core it is.
Memory
Pressure, the app/wired/compressed/free split, and swap rate rather than swap size. Pressure here means memory that cannot be reclaimed without swapping — it reads low on a healthy Mac, unlike a used/total figure which sits near 98% on any machine that has been awake a while.
GPU & ANE
GPU utilisation and, where the hardware reports it, Neural Engine activity. Degrades quietly on Macs that do not expose the counters.
Disk
Read and write throughput with the peak labelled, plus free space per volume.
Network
Up and down throughput and the top talkers. Your public IP is blurred until you hover — screen-sharing safety.
Power & Thermals
Battery percentage, health and cycles, wattage in and out, fan RPM, and a CPU temperature. The menu bar widget leads with temperature because macOS already shows you the battery.
LLM Monitor
Detects Ollama and LM Studio, shows the resident model, its size, context fill, tokens per second and time to first token, and warns before a model load that will not fit in memory.
Containers
Docker, OrbStack and Colima, grouped by compose project, with per-container CPU, RAM and network, plus restart-loop detection.
Dev Processes
Node, Bun, Python, databases and build tools, each tagged with the repository it is running from. Finishing builds notify with elapsed time and average CPU.
Port Map
Every listening port as a chip, with the process and repo behind it. Conflicts turn red; one click kills the squatter, after a confirmation.
Remote Agents
Load, memory, disk and container count for machines listed in ~/.macvitals/remotes.yaml, polled over SSH with no agent to install.
04

Alerts & insights

Rules you can read aloud

A rule is WHEN metric OP value FOR duration THEN actions. The FOR matters: a threshold crossed for one sample is noise, and a rule only counts continuous samples, so a gap resets the clock rather than quietly accumulating.

Notification
A standard macOS notification.
Shell command
Runs off the main thread with a timeout and captured output. A hung command cannot wedge the app.
Webhook
POSTs JSON — rule name, metric, value, threshold, timestamp, hostname.
Flash menu bar
Three red pulses. The tint is always restored, so a flash cannot leave the menu bar stuck.

Five templates ship with the app: LLM tok/s dropping more than 15% from baseline, container restart loops, free disk under 50 GB, a new process listening on any port, and CPU temperature above 95°C for five minutes. Test actions once fires a rule on demand so you can validate a webhook without waiting for the real condition.

Why an insight card appeared

Insights come from a per-metric baseline bucketed by hour of day, so 90% CPU at 03:00 is not judged against 90% CPU during your afternoon build. An anomaly is a sustained move beyond three times the median absolute deviation, and every card carries a cause, the evidence, and at least one action. There are no dead-end alerts by design.

A cold bucket falls back to the metric-wide baseline, which is what makes the engine useful on the day you install it rather than silent for a week.

05

Permissions

What is optional, and what it unlocks

Mac Vitals never raises a permission prompt behind your back. Everything below is requested from an onboarding card that explains what it buys, and the app works without any of it.

Accessibility
System-wide hotkeys (⌥⌘V for the dropdown, ⌥⌘D for the dashboard). Without it the hotkeys still work whenever a Mac Vitals window is focused.
Notifications
Alert rules and build-finished notices.
Full Disk Access
Per-process I/O and repository detection for processes outside your home folder. Modules degrade with a small lock icon rather than failing.
Privileged helper
Only needed to write SMC values for manual fan curves. Reading fans and temperatures needs nothing. Not installed unless you ask.
06

Your data

Where everything lives

~/Library/Application Support/MacVitals/
timeline.sqlite — the metric history, tiered so 30 days stays under about 80 MB.
baselines.json — hour-of-day baselines.
alert-rules.json — your rules.
events.json — model loads, builds, throttling, fired alerts.
~/.macvitals/remotes.yaml
Your remote hosts. A commented example is written on first run.
Uninstalling
Quit, drag the app to the Trash, and delete those two paths. Nothing is installed elsewhere and no daemon is left behind unless you explicitly installed the helper.

None of it is uploaded. See the privacy policy for the long version.

07

Keyboard

Shortcuts

⌥⌘V
Toggle the dropdown.
⌥⌘D
Open the Deep dashboard.
↑ ↓
Move between cards in the dropdown.
Expand or collapse the focused card.
Type anything
Filters processes, containers and ports across every module at once.
⌘,
Settings.

Every chart has a VoiceOver summary of the form “CPU 43 percent, rising, peaked 89 percent two minutes ago”, and Reduce Motion turns springs into crossfades throughout.