posture.crafter.run

macOS 15+ · free · MIT

Your AirPods already know when you slouch.

posture reads the head tracking sensor in your AirPods and nudges you when your head drops for too long. A menu bar app with a live figure and stats, and a CLI built for scripts and AI agents. No account, nothing leaves your Mac.

Needs Xcode command line tools. Builds the app into ~/Applications and links the CLI.

The posture menu bar figure upright, then bending forward and turning orange as the head drops

live menu bar figure

A small seated figure next to your other icons bends with your head in real time and turns orange while you slouch.

nudge after 30 seconds

Hold a bad posture past the grace period and you get a notification. Sit back up and it clears with a soft tick.

guided 3D setup

A wireframe head walks you through six moves and learns which way is forward, back and sideways for your AirPods.

stats that mean something

Daily score, time slouched, nudges, best upright streak, hour by hour and the week. Plus your neck's range of motion.

built for agents

Every command takes --json, posture now exits 0 or 1, and posture watch --json streams one event per second.

local only

No account, no network, no telemetry. Settings and history live in ~/.config/posture on your Mac.

guided setup

Look down, look up, ear to each shoulder, turn each way. A ring fills as you follow the head, and each move is checked: nod during a side tilt and it asks you to redo it. Then you sit the way you like to work, and that becomes your reference. At the end the head mirrors you live.

The 3D setup head in seven poses: center, look down, look up, tilt right, tilt left, turn right, turn left

in the terminal

$ posture now
██████·············· 9° forward · 2° left  upright

$ posture watch --json
{"event":"sample","degrees":17,"direction":"forward","pitch":17,"roll":-2,"slouching":true}
posturewatch live in the terminal
posture nowone reading, exit 0 upright, 1 slouching
posture statsscore, slouch time, streak, nudges, by hour
posture configthreshold, grace period, range of motion
posture doctorAirPods, permission, sensor, calibration
posture baropen the menu bar app

questions

Which AirPods work?
Any model with spatial audio head tracking: AirPods Pro, AirPods 3 or newer, AirPods Max and Beats Fit Pro. Standard AirPods 1 and 2 have no motion sensor.
How accurate is it?
The AirPods fuse an accelerometer and gyroscope into a gravity direction about 50 times a second, precise to a degree or two and drift free. posture compares it to the way you like to sit and splits the difference into forward, back and sideways.
Does leaning back count as slouching?
No. After the guided setup only a forward drop, or a sideways tilt past your threshold plus 5 degrees, counts. Turning to look at another screen is ignored.
What can it not detect?
The sensor measures rotation, not position. Pushing your chin forward with your eyes level, or slumping your back with your head level, is not detected. Most real slouching comes with a head drop.
Does my data leave my Mac?
No. posture has no network code. Everything stays in ~/.config/posture.