Garmin
Your Garmin data, answered in the terminal
Body Battery, HRV, resting heart rate, sleep stages and score, VO2 max, training load and readiness - asked live, or written out as a markdown day and a weekly rollup you keep. Your credentials stay on your machine and the data goes nowhere but Garmin and you.
Install Garmin
Add the DBHQ marketplace, once
/plugin marketplace add dbhq-uk/marketplaceInstall the skill
/plugin install garmin@dbhq
Both commands work in Claude Code and in Codex. The marketplace is a public repository you can read first: dbhq-uk/marketplace (external site)
What it is good at
Answering, and archiving
Most integrations do one or the other. A live query returns today's vitals into the conversation; a snapshot writes a whole day as a markdown file and a rollup aggregates a week into a summary, both into a directory you name. Those files are yours, in plain text, and they outlive both this skill and your subscription.
The whole spread, not a headline number
Resting heart rate, HRV, Body Battery, stress, steps and calories; sleep score with deep, light, REM and awake; activities with heart rate, calories and training effect; VO2 max, training load, training status and training readiness.
Telling "no data" apart from "the call failed"
A day Garmin has nothing for renders as no data and the file still writes. A fetch that actually failed raises and aborts the write. That distinction sounds pedantic until the alternative bites you: an archive quietly full of empty days, indistinguishable from days you genuinely did not wear the watch.
Being tested against the real client, not only a mock
Garmin Connect has no public API and no versioning, and the library that wraps it renames things when Garmin moves underneath it. A mock invents whatever attribute it is asked for, which is how an authentication rename went unnoticed for months. So one test imports the real library and inspects its actual surface - and still makes no network call.
What it does not do
It will not write anything back to Garmin
Every call is a read. There is no code path that creates, edits or deletes anything in your Garmin account, and there never will be. A health record you did not enter yourself is worse than no record.
It will not send your data anywhere but Garmin and you
No analytics, no aggregation service, no anonymised upload, and no DBHQ service in the middle. Credentials sit in your own home directory at mode 600 and the tokens Garmin issues are cached beside them. Run it with the network off and it fails to reach Garmin and does nothing else.
It will not give you medical advice
It reports what the watch measured, and Garmin's own figures are estimates from a wrist optical sensor. Body Battery, stress and sleep staging in particular are proprietary models rather than measurements. Treat them as trend lines, not diagnoses.
It will not run below Python 3.12
That floor comes from the library underneath, not from the skill. It also needs a Garmin Connect account - the same one you use in the app - and multi-factor authentication is supported, on first login only.
Read it before you install it
Every line is public and MIT licensed. The README is the long version of this page, including the parts that are still rough.