PulseCoach - Garmin AI coach add-on, local-first fitness dashboards, and a very fun stress board!

Hi all :waving_hand:

I’ve been building PulseCoach, a local-first Home Assistant add-on that turns Garmin data into an AI fitness/coaching dashboard.

What does this do:

PulseCoach also includes:

  • daily readiness scoring from HRV, sleep, load, and stress.
  • training load metrics like CTL, ATL, TSB, and ACWR.
  • AI coach agents through HA Conversation, local Ollama, or rules-based mode.
  • race predictions, sleep coaching, and long-term trend overlays.
  • a local-first setup with embedded PostgreSQL, ingress-only UI, and AppArmor.

Install

One-click install: Add Repository

Or add this repository manually: https://github.com/askb/ha-garmin-fitness-coach-addon

Requirements:

  • amd64 or aarch64
  • around 2-4 GB free RAM
  • about 5 GB storage
  • RPi 4 class hardware is fine for the add-on itself

I wouldn’t run Ollama on a Pi; HA Conversation or rules-based mode is the better fit there.

Notes

Garmin sync uses the same unofficial credential approach as the popular Cyberjunky integration. Credentials stay on your box, but Garmin auth changes can break sync until patched.

Full docs, implementation details, and privacy notes are in the repo.

Repo: ha-garmin-fitness-coach-addon

The newest feature is the fun one, so I’m leading with that:

:police_car_light: Stress Board

You may have seen the viral Whoop + calendar post where someone ranked interactions by stress.

I wanted the same thing, but with Garmin. It turns out Garmin makes this a lot easier: all-day heart rate is already there, so there’s no reverse engineering needed.

PulseCoach takes meetings and compares them against a local ±90 minute heart-rate baseline, then scores the deviation. Under the hood it uses a ridge regression across the meetings × attendees matrix to estimate each person’s marginal bpm effect, so people aren’t unfairly blamed just because they’re in every meeting.

The output is a ranked list from calming to stress-inducing.

A couple of notes:

  • correlation is not causation.
  • heart rate can also spike because you’re doing all the talking.
  • this is a conversation piece, not evidence.
  • everything is computed locally.
  • if you share results, please mask names.

Calendar inputs can come from:

  • Google Calendar via read-only OAuth
  • ICS export using a bundled script
  • HA-logged interactions like dashboard buttons, voice, or NFC, which write JSONL events such as {"person":"Mum","minutes":30,"end":...}

So yes, coffee with your mum can rank on the same board as your standup.

Feedback, installs, and weird leaderboard screenshots are very welcome - especially if your names are properly masked.

Hmm. I may have to install this, as I have been wearing a Garmin Instinct 2 Solar for a while and have been wanting to do something with the information it’s collected.

Nice, the Instinct 2 Solar works great with this - it pulls HR, HRV, sleep, Body Battery, stress and steps straight from Garmin Connect, so you’ll have data from day one. If you hit any snags with the initial token setup, ping me here and I’ll help. Would love to hear what the Stress Board turns up for you :grinning_face_with_smiling_eyes: