A lightweight, beautiful macOS menu bar monitor for your system's vital signs.
Disk · RAM · CPU · Network · Battery · Temperatures — at a glance, with a glassy native UI.
Auspex lives in your menu bar. Click the pulse icon for a live, glassy panel of everything your Mac is doing right now. It's native SwiftUI, uses only built-in macOS APIs (zero third-party dependencies), and idles at roughly 0.5% CPU.
In ancient Rome, an auspex read the signs to divine the state of things. This one reads your Mac's.
Tip: drop a panel screenshot at docs/panel.png and uncomment the line above to show it here.
- CPU — overall load ring, per-core bars (Performance/Efficiency labeled), and a load sparkline.
- Memory — used / wired / compressed, with live memory-pressure color (green → yellow → red).
- Storage — every mounted volume incl. external drives; free space matches Finder.
- Network — live up/down throughput with trend sparklines and session totals.
- Battery — charge, charging state, health %, and cycle count (laptops only).
- Temperatures — on-die sensors plus the system thermal state.
- Custom menu bar mark with an optional inline CPU/RAM %.
- Animated, glassy UI — Liquid Glass cards, glowing rings, rounded type; tuned for light & dark.
- Frugal — one shared timer; fast updates while open, a slow tick while closed, and it pauses entirely if you hide the inline stat.
- Open at login via
SMAppService.
- macOS 26 (Tahoe) or later — the UI uses the system Liquid Glass APIs.
- Apple Silicon (arm64).
- To build: Xcode 26+ and XcodeGen (
brew install xcodegen).
Download Auspex.zip (always the newest release) and unzip it. (Or pick a specific version from the Releases page.)
Move Auspex.app to your
/Applicationsfolder.Because the app is open-source and not signed with a paid Apple Developer ID, macOS Gatekeeper will quarantine it on first launch. Clear it with one command:
xattr -dr com.apple.quarantine /Applications/Auspex.app
Then open it normally. (Alternative: right-click the app → Open → Open; on recent macOS you may instead need System Settings → Privacy & Security → Open Anyway.)
Look for the pulse icon in your menu bar. To keep it around, enable Open at Login in the app's Settings.
Why the extra step? Notarizing apps for friction-free download requires a paid Apple Developer account. Building from source (Option B) avoids this entirely, since your Mac signs the app locally.
git clone https://github.com/breadoncee/Auspex.git
cd Auspex
brew install xcodegen # one-time, if you don't have it
make run # generates the project, builds, and launchesThat's it. make install copies an optimized build to /Applications.
- Click the menu bar pulse icon to open/close the panel.
- Settings (in the panel footer): refresh interval, which stat shows inline in the menu bar (CPU %, RAM %, or icon only), and Open at Login.
- Quit from the panel footer.
This project is generated from project.yml by XcodeGen, so the .xcodeproj is not checked
in — make regenerates it for you.
| Command | What it does |
|---|---|
make run | Build (Debug) and launch |
make build | Build the Debug .app |
make release | Build the optimized Release .app |
make dist | Package dist/Auspex-<version>.zip for a GitHub Release |
make install | Copy a Release build into /Applications |
make icon | Regenerate the app icon + menu bar glyph |
make clean | Remove build artifacts and the generated project |
Prefer Xcode? Run xcodegen generate, then open Auspex.xcodeproj.
make distThen create a new GitHub Release and upload dist/Auspex-<version>.zip. Bump the version in
project.yml (MARKETING_VERSION) and pass it through, e.g. make dist VERSION=1.1.
Everything is read with native macOS APIs — no dependencies:
| Metric | API |
|---|---|
| Disk | FileManager.mountedVolumeURLs + URLResourceValues |
| Memory | host_statistics64 + sysctl kern.memorystatus_vm_pressure_level |
| CPU | host_processor_info (tick diffing, per core) |
| Network | getifaddrs + if_data (byte-counter diffing) |
| Battery | IOKit power sources + AppleSmartBattery |
| Temperatures | private IOHIDEventSystemClient (best-effort) + ProcessInfo.thermalState |
A single @ObservableSystemMonitor owns one timer and orchestrates per-metric collectors
on a background queue, publishing snapshots to the SwiftUI views.
project.yml XcodeGen spec (target, signing, IOKit linkage, app icon)
Makefile build / package / install tasks
Sources/
AuspexApp.swift @main — MenuBarExtra(.window) + Settings
Assets.xcassets/ app icon + menu bar glyph
Bridging/ private IOHID temperature declarations
Model/ value types, thresholds, formatters, SystemMonitor
Collectors/ one collector per metric (native APIs)
Views/ panel, cards, gauges, sparklines, settings, logo
Services/ launch-at-login (SMAppService)
Tools/ icon/glyph generators + a CLI verification harness
- Unsigned distribution. The prebuilt download is ad-hoc signed, so first-launch needs the Gatekeeper step above. Building from source avoids it.
- Temperatures are best-effort. Apple Silicon has no public temperature API, so Auspex uses a private IOKit API (the same approach as similar tools). It can break on future macOS releases and rules out Mac App Store distribution; it degrades gracefully to the public thermal state. Every other metric uses stable, public APIs.
- Not sandboxed — it's a personal/local utility, not an App Store app.
See CHANGELOG.md for the version history.
Issues and PRs welcome. Run make run to build locally; Tools/main.swift is a CLI harness
that prints a snapshot for cross-checking values against df, top, pmset, etc.
MIT © breadoncee