Turn your AirPods into a posture coach.
A native macOS menu bar app that reads the motion sensors in your AirPods to track your head posture in real time — no camera, no cloud, everything runs locally.
Posture apps either want your webcam pointed at your face all day, or they want you to buy
another sensor to clip to your shirt. If you already wear AirPods while you work, you are
already wearing a head tracker — macOS exposes it through CMHeadphoneMotionManager.
Poise uses that, and only that.
- 🎯 Live posture tracking via
CMHeadphoneMotionManager— forward slouch and side tilt, smoothed and calibrated against your personal baseline - 🟢 Colored menu bar status — green when you sit upright, orange when you drift, red when you slouch, with an optional live posture score
- 🧭 Guided onboarding and calibration — a three-second averaged baseline capture instead of a blind snapshot
- 🔔 Smart alerts — notifications only after bad posture persists, with grace period, cooldown, and automatic suppression while you're walking or moving
- 📊 Statistics — per-minute history, daily posture score, 14-day trend, and a live view of all AirPods sensor data (attitude, rotation rate, acceleration)
- ⚙️ Native settings — liquid-glass settings window, launch at login, Sparkle auto-updates
- macOS 14.0 or later
- AirPods Pro (any generation), AirPods Max, AirPods 3rd gen or later, or Beats with spatial audio support
Download the latest build from Releases,
unzip, and move Poise.app to /Applications.
Everything runs on-device. There is no account, no telemetry, and no network call in the posture path. Sensor samples stay in memory; only per-day aggregates are written to disk as JSON in the app's own container, and you can delete them at any time.
AirPods motion sensors
│ CMHeadphoneMotionManager (attitude · rotation rate · acceleration)
▼
HeadphoneMotionClient ──▶ PostureStore ──▶ menu bar · alerts · minute buckets
│
▼
HistoryStore ──▶ per-day JSON, 14-day trend
| File | Responsibility |
|---|---|
Sources/HeadphoneMotionClient.swift |
CoreMotion transport, fused sensor samples |
Sources/PostureStore.swift |
Observable state: calibration, slouch state machine, movement detection, alerting, minute bucketing |
Sources/HistoryStore.swift |
Per-day JSON persistence and day summaries |
Sources/MenuBarView.swift |
Menu bar panel UI |
Sources/StatsView.swift |
Charts and live sensor readout |
Sources/OnboardingView.swift |
Guided first-run flow |
The project uses Tuist:
tuist install
tuist generate --no-open
./run-menubar.shMIT — see LICENSE. © 2026 Johannes Grof.