Skip to content

Repository files navigation

🧍 Poise

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.

CI Release Platform Swift Updates: Sparkle License: MIT


Why

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.

Features

  • 🎯 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

Requirements

  • macOS 14.0 or later
  • AirPods Pro (any generation), AirPods Max, AirPods 3rd gen or later, or Beats with spatial audio support

Install

Download the latest build from Releases, unzip, and move Poise.app to /Applications.

Privacy

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.

Architecture

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

Building

The project uses Tuist:

tuist install
tuist generate --no-open
./run-menubar.sh

License

MIT — see LICENSE. © 2026 Johannes Grof.

About

Turn your AirPods into a posture coach — native macOS menu bar app

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages