Reading one's own watch, and calm offers of breaks¶
The question: as of October 2026, how can a desktop app (Rust and Qt 6, GPL-3.0-or-later, Linux first) read a person's own Garmin data (heart rate, stress, Body Battery, sleep, steps, HRV, training status and readiness), and how can it turn that into calm suggestions for breaks and activity?
Researched on 3 October 2026. "Built", "next", "not built" and "refused" say where Sioul stood on 4 October 2026. The feature: health.md, "Your watch".
Evidence: the technical facts come from primary sources (Garmin's documentation and terms, licence texts, source code and release notes), linked at each claim; third parties are named as such. The rules for offers rest on research whose kind is said (meta-analysis, trial, cohort, lab study). "(unverified)" marks what could not be confirmed.
What was decided¶
- One way in: Garmin's own FIT files, read on the computer. No Garmin account and no server, so nothing Garmin changes on its servers can break it, and nothing leaves the computer. Built: files from a folder (Gadgetbridge's exports, Garmin's export ZIPs, folders copied from the watch) and from the watch's
GARMINfolder when the desktop mounts it; each file read once, keyed on the watch's serial number and the file's creation time; read withfitparser(MIT), never Garmin's SDK (health.md). - Not Garmin's official programme: business-only, paused for new applicants, and built around a public server (section 1). Refused by necessity.
- Not the unofficial web login: it works only by imitating Garmin's phone app, which Garmin's terms forbid, and Garmin locks logins for days when it notices (section 2). Not built; it could be added later, opt-in and off by default.
- Reading the watch over MTP directly (
mtp-rs), without the desktop's mount: next. - Offers, never alarms, at a breakpoint only, rate-limited, with no number in a notification and no score (section 7). Built, with the limits said in section 7.3.
1. Garmin's official route: the Garmin Connect Developer Program¶
- What it is: five APIs. Health ("all-day health summary metrics such as heart rate, sleep, steps, and more"), Activity ("full activity data for over 30 activity types") and Women's Health bring data out of Garmin Connect; Training and Courses send data to the watch. https://developer.garmin.com/gc-developer-program/overview/
- The Health API covers daily summaries, heart rate, stress, pulse ox, respiration, body composition, Body Battery, HRV and "epoch summaries for all-day activities", as JSON. https://developer.garmin.com/gc-developer-program/health-api/
- Who may join: "The Garmin Connect Developer Program is available for enterprise use"; "it is only for business use". No licence fee, but "Access to some metrics may require a license fee payment or minimum device order quantity for commercial use". https://developer.garmin.com/gc-developer-program/program-faq/ . A third party that went through it: "Garmin Connect Developer Program does not support personal use. You must apply as a legal entity (company, university, hospital, research institution, etc.)". https://openwearables.io/docs/providers/garmin-api-integration.md
- Since July 2025, Garmin's brand guidelines require visible Garmin attribution beside any view of Garmin data, and the device model that recorded it. https://tryrook.io/blog/garmin-connect-api-access
- Paused in 2026: "The application form for new API access requests is currently unavailable while we complete updates to the Garmin Connect Developer Program. During this transition, new access requests are temporarily paused." Applicants from March and April 2026 were told of a "significant redesign and modernisation", with no date to resume; integrations approved earlier still work. https://forums.garmin.com/developer/connect-iq/f/discussion/434798/cannot-access-developer-program-application-form-under-construction/2027757 · https://tryterra.co/blog/garmin-connect-developer-program-pause · https://the5krunner.com/2026/09/14/garmin-developer-api-access-paused/ · https://forums.garmin.com/developer/connect-iq/f/discussion/434542/garmin-connect-developer-program---access-request-rejected-without-notification/2025653
- Built for servers: each summary type needs "a valid HTTPS URL to which Ping or Push notifications for that summary type will be sent"; "A successful ping-based integration should never need to call the Health API except as prompted by ping notifications." https://www.mintlify.com/yocxy2/open-wearables/api/webhooks/garmin . New apps use OAuth 2.0 with PKCE. https://nango.dev/docs/api-integrations/garmin-oauth2.md · https://developerportal.garmin.com/sites/default/files/OAuth2PKCE.pdf
- Why it cannot serve Sioul, four independent reasons: business-only; frozen since spring 2026; it needs a public HTTPS endpoint, so a local app would need a relay server and the data would pass through a third machine; the client secret belongs to one approved legal entity, so a GPL app could not ship it (an inference, not stated by Garmin). Aggregators (Terra, Rook, Sahha) resell access through their own integrations, as commercial cloud relays. https://sahha.ai/blog/garmin-developer-program-paused/
2. The unofficial web API (python-garminconnect, garth)¶
- It works in October 2026, but only by imitating Garmin's phone app: its client IDs and headers, and a browser's TLS fingerprint.
- History:
- July 2024: repeated logins answered
429 Too Many Requests, a block of about one hour; users advised reusing saved tokens. https://github.com/cyberjunky/python-garminconnect/issues/213 - 17–19 March 2026: logins failed overnight for everyone (
401, then429, served by Cloudflare). https://github.com/cyberjunky/python-garminconnect/issues/332 · https://github.com/cyberjunky/python-garminconnect/issues/337 · https://github.com/matin/garth/issues/217 - garth shipped twelve emergency releases in two days, then on 27–28 March declared itself "deprecated and no longer maintained. Garmin changed their auth flow, breaking the mobile auth approach that Garth depends on." It had 350k+ downloads a month. https://github.com/matin/garth · https://github.com/matin/garth/discussions/222 · https://github.com/matin/garth/releases
- 2 April 2026: python-garminconnect 0.3.0 moved to its own login using "the same mobile SSO flow as the official Garmin Connect app", with a "Cloudflare bypass" ("multiple TLS impersonation strategies") and "Random browser fingerprinting"; 18 releases followed by 0.3.17 (29 September 2026), including a security fix for a world-readable token file (GHSA-wjhr-76vg-2hvc) and the note "Garmin can also block based on client fingerprint". https://github.com/cyberjunky/python-garminconnect/releases
- Spring and summer 2026: account-level login blocks of "48+ hours and counting" and "72+ hrs", following the account across networks, unanswered by Garmin's staff. https://forums.garmin.com/developer/fit-sdk/f/discussion/435087/persistent-429-on-api-login-account-blocked-for-48-hours/2029273
- A Rust implementation now sends its login through curl-impersonate and waits 35 s, because the sign-in "answers 429 unless the client has a browser's TLS fingerprint". https://github.com/imbue-ai/datalib
- No permanent account ban is documented in the sources found; the known penalties are temporary blocks at login (bans remain possible, unverified).
- July 2024: repeated logins answered
- Terms of use (effective 1 April 2026): violations include "Using any process, whether automated or manual, that accesses, copies, or scrapes content from the Site through any means not purposely made available through the Site" and "Forging headers or otherwise manipulating identifiers to disguise the origin of any message you send to Garmin"; enforcement includes "Suspending or terminating a user account". https://www.garmin.com/en-US/legal/terms-of-use/ . Sending the phone app's client IDs and headers is close to the second clause. A person's right to their own data is better exercised through the export (section 4; GDPR art. 20, https://gdpr-info.eu/art-20-gdpr/).
- The data is all there (daily summaries, intraday heart rate, stress and Body Battery, sleep, 15-minute steps, HRV, training readiness and status, and a per-day bundle of the original FIT files), per python-garminconnect's code: https://github.com/cyberjunky/python-garminconnect/blob/master/garminconnect/init.py
- In Rust, no maintained crate speaks the current flow (
garmin-cli's pull request for it was closed unmerged: https://github.com/vicentereig/garmin-cli/pull/10); TLS impersonation would meanwreq, a BoringSSL build dependency (https://github.com/0x676e67/wreq). - Decision: not built. If it ever comes, it is opt-in, off by default, labelled "Unofficial. Uses Garmin's phone-app login. May stop working any day; Garmin may lock logins for this account for a few days", run as a sidecar that writes into the same folder, with the tokens in the system keyring, no password stored, and no automatic retry of a failed login.
3. FIT files straight from the watch¶
- Verdict: the most robust local route for the raw series: heart rate, stress, steps, Body Battery, sleep stages (on recent watches), HRV and respiration; no account, no network. The costs: the watch must be connected; recent watches speak MTP; Body Battery and readiness are undocumented; some values (sleep stages on watches without on-device sleep tracking) are computed only in Garmin's cloud.
3.1 Mass storage and MTP¶
- "All the Garmin devices with music use MTP mode and none have Mass Storage mode" (Garmin forum, about 2018); "modern watches connect via MTP, as opposed to older watches which connected via USB Mass Storage" (2025). https://forums.garmin.com/sports-fitness/healthandwellness/f/vivoactive-3-3-music/156405/mass-storage-mode-for-va3m · https://forums.garmin.com/developer/connect-iq/f/discussion/3743/can-i-test-an-app-in-my-own-device-before-submitting-it/1967819
- Confirmed MTP-only: Forerunner 255 (https://bbs.archlinux.org/viewtopic.php?id=290794), Forerunner 965 (https://sergiogimenez.com/posts/2026/upload-maps-to-garmin-linux/), fēnix 7 (https://github.com/Flinterpop/Garmin), Venu Sq (https://forums.garmin.com/sports-fitness/sports-fitness/f/venu-sq/358108/recovery-of-fit-files-using-mtp-device-connection/1722587). Mass storage remains on the first Instinct (https://forums.garmin.com/outdoor-recreation/outdoor-recreation-archive/f/instinct/214228/unable-to-connect-to-pc). Units from about 2020 on "have dropped USB mass storage mode" (https://github.com/OpenSAK-Org/OpenSAK/issues/453). No per-model table exists in Garmin's documentation; for most 2023–2026 models, MTP is assumed (unverified).
- On Linux, GNOME's
gvfsd-mtpand KDE's kio-mtp take the device on connection; a second MTP client fails until the first releases it. On macOS,ptpcameraddoes the same. https://github.com/vdavid/mtp-rs/blob/main/crates/mtp-rs-cli/README.md - In Sioul: built through the desktop's own mount (mass storage, gvfs, or KDE with kio-fuse); on KDE without kio-fuse, the folders are copied by hand (health.md).
3.2 Folders¶
GARMIN/Monitor(all-day monitoring),Sleep(one file a night),HRVStatus,Metrics(readiness, load, recovery: undocumented messages),Activity(workouts). https://github.com/Flinterpop/Garmin · https://github.com/tcgoetz/GarminDB/blob/master/garmindb/garmin_connect_config_manager.py · https://codeberg.org/Freeyourgadget/Gadgetbridge/src/branch/master/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/FitImporter.java- The watch keeps a limited window of monitoring files and deletes the oldest; Garmin does not document the rule (retention unverified; copy at least weekly). https://forums.garmin.com/apps-software/mac-windows-software/f/garmin-express-windows/344216/express-7-18-0-deletes-all-activities/1663802
- In Sioul:
Monitor,SleepandHRVStatusare read; workouts (Activity) are left aside, as their tracks are not needed here.
3.3 Which FIT message carries what¶
From Garmin's public FIT profile 21.217 (https://github.com/garmin/fit-javascript-sdk/blob/main/src/profile.js); "undocumented" means absent from it but decoded by Gadgetbridge's reverse-engineered profile (https://codeberg.org/Freeyourgadget/Gadgetbridge/src/branch/master/FitCodeGenerator/src/main/resources/fit_profile.json).
| Metric | Message (number) | Public? | Notes |
|---|---|---|---|
| Steps, intensity, intraday heart rate | monitoring (55) |
public | cycles (steps) and calories are accumulated per activity type: take the differences |
| Resting heart rate | monitoring_hr_data (211) |
public | restingHeartRate, currentDayRestingHeartRate |
| Stress | stress_level (227) |
public | negative values are status codes, not scores |
| Body Battery | stress_level (227), field 3 body_energy |
undocumented | a public hsa_body_battery_data (314) also exists; whether watches write it is unverified |
| Sleep stages | sleep_level (275) |
public | watches without a sleep widget send raw samples that only Garmin's cloud turns into stages |
| Sleep score | sleep_assessment (346) |
public | some fields undocumented |
| HRV | hrv_status_summary (370), hrv_value (371) |
public | weekly and last-night averages, baselines, status |
| Respiration, SpO₂, skin temperature | 297, 269, 398 | public | |
| Training readiness | training_readiness (369) |
undocumented | |
| Training load and status | 378, 284, 79, 140 | undocumented |
- Garmin on its FIT forum: "Right now, there are no plans to further document these file types [Monitoring and Sleep]". Several sleep and HRV messages have become public since; Body Battery and readiness are still undocumented on the watch side. https://forums.garmin.com/developer/fit-sdk/f/discussion/242794/sleep-and-monitoring-files-unknown-messages
- In Sioul: heart rate, stress, Body Battery (kept only between 0 and 100, a guard against an undocumented field changing), steps (what each interval adds), resting heart rate, sleep levels and score, and the night's HRV. Readiness and training load: not read.
3.4 The FIT SDK's licence¶
- The official SDK is under the "Flexible and Interoperable Data Transfer (FIT) Protocol License Agreement", not an open-source licence: "for Licensee's internal business purposes"; the licensee may not "distribute, publish, transfer or otherwise make available the Licensed Technology … to any third party", nor distribute it "so that any part of it becomes subject to any license that requires that the Licensed Technology … be disclosed or distributed in source code form" (no copyleft). It calls the SDK "Confidential Information of Garmin". https://github.com/garmin/fit-javascript-sdk/blob/main/LICENSE.txt
- Consequence (a reading, not legal advice): Garmin's SDK code is never vendored or translated into a GPL-3.0-or-later program; an independently written parser under a permissive licence is used. Whether a message table generated from the SDK's profile is a "derivative" is a grey zone the open FIT ecosystem lives with (GarminDB is GPL, Gadgetbridge AGPL).
3.5 Rust crates¶
| Crate | Licence | State (October 2026) | Notes |
|---|---|---|---|
fitparser |
MIT | 0.11.0, 1 May 2026; about 76k downloads | profile 21.202; unknown fields kept as unknown_field_N, so Body Battery is still readable; decoding only. https://github.com/stadelmanma/fitparse-rs |
rustyfit |
BSD-3-Clause | 0.10.3, 11 September 2026 | profile 21.217, decoding and encoding, small community. https://github.com/muktihari/rustyfit |
fit-sdk-rust |
Apache-2.0 | 0.2.1 | young |
fit_file, fit-rust |
MIT | last releases 2023 | stale |
- Chosen:
fitparser, the most used and the simplest. Built. - MTP from Rust:
mtp-rs(MIT OR Apache-2.0, 0.32.0): "Pure-Rust MTP/PTP for modern Android phones, e-readers, Garmin watches, and cameras. Nolibmtp, nolibusb, no FFI"; tested on a Forerunner 955 and Venu 2/2S; Linux needs udev rules. https://github.com/vdavid/mtp-rs . Next.
4. Garmin's own exports¶
- The full account export ("Export Your Data"): "A download link will be emailed to you. Links typically are sent in 48 hours but can take up to 30 days." FIT, JSON and CSV in ZIPs; the original FIT files the devices uploaded are under
DI_CONNECT/DI-Connect-Uploaded-Files/. https://support.garmin.com/en-US/?faq=W1TvTPW8JZ6LfJSfK512Q8 · https://takeoutday.org/guides/how-to-export-garmin-connect-data- Its JSON summaries vary: one 2026 analysis found "a sleep window for ~3,280 nights, but stages for only ~320" and "No HRV and no sleep score in the export" (https://github.com/luketmoss/thrive/issues/160); another guide claims minute-level data (https://takeoutday.org/guides/how-to-export-garmin-connect-data). They conflict: expect contents to vary by account.
- A day's wellness export, by hand on Garmin Connect's web site: "Export a day's worth of wellness FIT files. This includes data such as steps, sleep, stress, HRV and more. The data will be exported as original .fit files in a zip folder." The same FAQ.
- In Sioul: built: ZIPs dropped in the watch's folder are opened, ZIPs inside ZIPs too, and their FIT files go through the same importer.
5. Gadgetbridge (the open Android companion, AGPL-3.0)¶
- It syncs the watch's own FIT files over Bluetooth and keeps them; about 155 Garmin models listed, many "mostly supported" with pairing that needs no vendor account. Fetched: activity; monitoring (steps, heart rate, SpO₂, stress, "body energy", intensity, respiration, resting heart rate); metrics; HRV; sleep with stages "on devices that are able to display them without a phone connection". https://gadgetbridge.org/basics/topics/garmin/ · https://gadgetbridge.org/gadgets/wearables/garmin/ · https://gadgetbridge.org/blog/release-0_94_00/
- The official app must not run alongside it ("stop or uninstall it and unpair the gadget"); settings made in the official app stay as they were; weather and AGPS need credentials refreshed every 90 days. https://gadgetbridge.org/basics/pairing/
- Its exports: a SQLite database and the raw FIT files, by hand or automatically on a schedule. https://gadgetbridge.org/internals/development/data-management/ · https://gadgetbridge.org/internals/automations/auto-export/
- Chosen: read the exported FIT files, not the database, so a schema change between Gadgetbridge versions breaks nothing; the folder reaches the computer through Syncthing. Freshness: minutes to hours, never real time. Built (the watched folder).
6. What is kept¶
- Recommended: everything local, under the data directory, readable only by the person; no telemetry, no cloud copy; daily summaries kept for good, intraday series downsampled after 90 days; no GPS tracks, no password.
- Built: one small file a day (
~/.local/share/sioul/watch/<day>.json); nothing goes to a server, except sealed to the person's other computers when they share between them (health.md, database.md). Workouts are left aside.
7. Turning the readings into calm offers¶
7.1 What each signal can and cannot carry¶
- Breaking up sitting: good evidence for short walks, no agreed interval.
- 5 minutes of light walking every 30 minutes cut the glucose response after meals; every break schedule (1 or 5 min, every 30 or 60 min) lowered systolic blood pressure; even breaks "just once every hour" helped mood and fatigue. Duran et al. 2023, Med Sci Sports Exerc 55(5):847–855, randomised crossover, n = 11: https://doi.org/10.1249/mss.0000000000003109 ; https://www.cuimc.columbia.edu/node/25711
- Activity breaks in sitting "moderately attenuate post-prandial glucose, insulin, and TAG". Loh et al. 2020, Sports Med 50:295–330, meta-analysis: https://pubmed.ncbi.nlm.nih.gov/31552570/
- WHO 2020: reduce sedentary time, but "evidence was insufficient to quantify a sedentary behaviour threshold". https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7719906/
- Garmin watches already nag: "After one hour of inactivity, Move! and the red bar appear." https://www8.garmin.com/manuals/webhelp/venu/EN-GB/GUID-55E4ED28-E438-4F65-A526-690F8FD5FF31.html . Either the watch's alert or Sioul's offer, not both.
- Micro-breaks help how people feel, not their output: breaks of 10 minutes or less boost vigour (d = .36) and reduce fatigue (d = .35), with "a non-significant effect on increasing overall performance (d = .16)"; "The longer the break, the greater the boost was on performance". Albulescu et al. 2022, PLOS ONE, meta-analysis of 22 samples, N = 2,335: https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0272460
- When to interrupt: at breakpoints. Interrupting at moments of low workload "consistently produced less annoyance, frustration, and time pressure, required less mental effort" (Adamczyk & Bailey, CHI 2004: https://hci.rwth-aachen.de/materials/conferences/CHI2004/1p271.pdf). "Scheduling notifications at breakpoints reduced frustration by 20% and reaction time by 25% relative to immediate delivery", for a delay of "only about 90 seconds on average" (Iqbal & Bailey, ACM TOCHI 2010: https://www.interruptions.net/literature/Iqbal-TOCHI10.pdf). Interrupted people work faster, at the price of "more stress, higher frustration, time pressure and effort" (Mark, Gudith & Klocke, CHI 2008: https://www.interruptions.net/literature/Mark-CHI08.pdf). Sioul knows the real breakpoints (a task done, a session ended): its advantage over the watch.
- Garmin's stress score is weak as a measure of felt stress. Garmin: "Your device analyzes your heart rate variability while you are inactive"; 0–25 rest, 26–50 low, 51–75 medium, 76–100 high (https://www8.garmin.com/manuals/webhelp/venu/EN-US/GUID-9282196F-D969-404D-B678-F48A13D8D0CB.html). In the lab it tracks physiology (Rosenbach et al., bioRxiv 2025, n = 60: https://www.biorxiv.org/content/10.1101/2025.01.06.630177v1). In daily life it barely matches feelings: "basically zero" correlation with felt stress in about 780 students over 3 months, and the watch "cannot distinguish whether a person is actually stressed or excited" (Siepe, Fried et al. 2025, J Psychopathol Clin Sci: https://psycnet.apa.org/doiLanding?doi=10.1037%2Fabn0001013 ; https://www.androidauthority.com/study-smartwatch-stress-readings-inaccurate-3586409/); in another study the score went with positive emotions, not negative ones, and the authors call "Stress Score" "incorrect and misleading" (https://www.sciencedirect.com/science/article/pii/S2666915325001040; abstract only, partly unverified). Daytime wrist HRV degrades as soon as people move (https://the5krunner.com/2026/02/18/garmin-hrv-accuracy/). Reading: physiological arousal while sitting still, never an emotion; never tell the person they are stressed.
- Body Battery has no independent validation that could be found (absence unverified). Garmin: 0–25 "low reserve energy", 76–100 "very high"; from "heart rate variability, stress level, sleep quality, and activity data". https://www8.garmin.com/manuals-apac/webhelp/forerunner265series/EN-SG/GUID-A17DA7F7-A6E0-4D9C-83F4-B268F0569AE0-7729.html . A coarse hint only.
- HRV: weekly trends, never one night. Garmin's status compares a seven-day average with a baseline that needs "three weeks of consistent sleep data" (https://www8.garmin.com/manuals/webhelp/GUID-C3D54BBE-3966-4DA1-B60C-AD69DA5CC163/EN-US/GUID-9282196F-D969-404D-B678-F48A13D8D0CB.html). In elite athletes, one day's value showed "a trivial correlation" with fitness change (r = −0.06), the weekly mean "a very-large correlation" (r = 0.72) (Plews: https://openrepository.aut.ac.nz/items/d7b41d29-e92e-4acf-90ea-ed68d84d6c73).
- Training readiness is a composite built for athletes (sleep, recovery time, HRV status, load, sleep and stress history), with bands from "Poor" to "Prime". https://www8.garmin.com/manuals/webhelp/GUID-D21041B7-7A8E-4D01-9DC0-093D2DC7049A/EN-US/GUID-C21BE0C8-A08E-4DA1-B6C6-2E0E2DDDB372.html
- Sleep: its length matters, and the debt is not felt; trust length, not stages. 14 days at 4 h or 6 h in bed caused "cumulative, dose-dependent deficits in cognitive performance on all tasks", while sleepiness showed "only small further increases" (Van Dongen et al. 2003, Sleep 26(2): https://pubmed.ncbi.nlm.nih.gov/12683469/). Against polysomnography, a Garmin watch scored four-stage κ = 0.21, the poorest of six devices, wake sensitivity 27.6 %, and overestimated total sleep by about 38 min and deep sleep by about 44 min (Schyvens et al. 2025, Sleep Advances: https://academic.oup.com/sleepadvances/article/6/2/zpaf021/8090472).
- Resting heart rate is a decent "something is off" flag. Elevated resting heart rate plus more sleep improved flu-like-illness surveillance by 6–33 % (Radin et al. 2020, Lancet Digital Health: https://www.scripps.edu/news-events/news/20200116-wearable-flu/). A warning system "based on extreme elevations in resting heart rate relative to the individual baseline" could have flagged 63 % of COVID-19 cases before symptoms (Mishra et al. 2020, Nat Biomed Eng; preprint: https://www.medrxiv.org/content/10.1101/2020.07.06.20147512v1).
- Movement helps mood; it is not proven to boost attention. "Physical activity is effective to reduce burnout", but "only one of the longitudinal studies, and none of the intervention studies, was qualified as a high quality study" (Naczenski et al. 2017, J Occup Health: https://pmc.ncbi.nlm.nih.gov/articles/PMC5721270). In adults with ADHD, 30 minutes of cycling changed brain activation, but "exercise did not improve behavioral performance" (Mehren et al. 2019: https://pmc.ncbi.nlm.nih.gov/articles/PMC6934617). Movement is framed as body care and mood, not productivity.
7.2 What not to do¶
- Do not flood. Alarm fatigue: "repeated exposure to frequent or non-actionable alarms leads to sensory overload, emotional strain, and a gradual desensitization or reduced responsiveness to alarms" (scoping review 2025: https://pmc.ncbi.nlm.nih.gov/articles/PMC12181921/); in intensive care, "a large number of alarms mask other clinically significant ones" (Bridi et al. 2014: https://pmc.ncbi.nlm.nih.gov/articles/PMC4309240/). The often-quoted "72–99 % of clinical alarms are false" (Sendelbach & Funk 2013) could not be opened (unverified). An offer one cannot act on teaches to ignore the next.
- Do not break hyperfocus mid-task. Adults with more ADHD symptoms report more frequent hyperfocus (Hupfeld, Abagis & Shah 2019, n = 251 + 372: https://pubmed.ncbi.nlm.nih.gov/30267329/); interrupting costs stress (Mark 2008). Wait for a breakpoint.
- Do not turn data into worry. Wearable users with atrial fibrillation showed more "symptom monitoring and preoccupation", and 20 % "experienced anxiety and always contacted their doctors" after rhythm notifications (Rosman et al. 2024, JAHA: https://pubmed.ncbi.nlm.nih.gov/39011944/). "Orthosomnia" is the perfectionist chase of perfect tracker sleep (Baron et al. 2017, J Clin Sleep Med: https://pmc.ncbi.nlm.nih.gov/articles/PMC5263088/). So: no red alerts, no medical words, no numbers in notifications, no "your stress is high", sleep shown as length and timing, not grades.
- No streaks, badges, scores or "goal missed" (Deci, Koestner & Ryan 1999: https://depts.washington.edu/techdocs/papers/deciExtrinsicRewardsAndIntrinsicMotivation99.pdf ; Silverman & Barasch 2023: https://udspace.udel.edu/items/42ce576b-8e1f-429a-8541-e29e48dbcfbb). For people in burnout, guilt loops are the failure mode.
- Do not label emotions from the stress score.
- Do not make offers sticky: "Not now" is always one click, nothing follows up, and declining is never logged as failure.
7.3 The rules, and where they stand¶
Shared: each rule is an offer, made at a breakpoint (a task done or switched, a focus session ended), falling back on Sioul's own signals when the watch's data is missing or older than an hour. Thresholds are starting points.
| Rule | Trigger | Offer | Evidence | How sure | In Sioul |
|---|---|---|---|---|---|
| R1. Move between tasks | sat 45 min or more (by the watch: under 100 steps in each quarter hour of the last 45 min; without a watch, the session's length) | five minutes on your feet | Duran 2023; Loh 2020; Albulescu 2022; Iqbal & Bailey 2010 | moderate that short walks help body and mood; low for the 45 min (between 30 and Garmin's 60) | built; the extra cue at 75 min without a breakpoint: not built (offers come at breakpoints only) |
| R2. Long arousal while still | stress ≥ 51 for most of the last 30 min, under 50 steps | a short pause; never names stress | Garmin's definition; Rosenbach 2025; Siepe, Fried 2025 | low: it may fire on excitement, which is harmless | built |
| R3. A lighter morning after short sleep | last night under 6 h, or 2 of the last 3 under 6.5 h | one line on the Tasks page, no notification: shorter sessions, the hardest task early or tomorrow | Van Dongen 2003; Schyvens 2025 (watches overestimate sleep) | moderate for the effect; low for the cut-offs | built, with "A lighter day" setting the day's weather to haze |
| R4. A gentle day when the body flags strain | morning resting heart rate 7 beats above its 14-day median, or 5 two mornings running; or HRV status low two days; or readiness under 25 | "Your body may be fighting something. A lighter day?"; no diagnosis, no numbers | Mishra 2020; Radin 2020; Garmin's HRV status; Plews | moderate for sustained shifts; low for thresholds; never one night | built with resting heart rate only; HRV status and readiness: not used |
| R5. Low reserve late in the day | after 15:00, Body Battery ≤ 25 | "Move the rest to tomorrow and call it a day?", with "Done for today" (done-for-the-day.md) | Garmin's definition only | low: a nudge to consider stopping, never a block | built |
| R6. A walk when there is room | midday to 16:00, Body Battery ≥ 50, steps under 3,000, not on a strain day | a twenty-minute easy walk, if you like | WHO 2020; Duran 2023; Naczenski 2017; Albulescu 2022 | moderate in general; low for thresholds | built, without readiness |
| R7. Limits and quiet | always | nothing in quiet time or once the day is closed; 45 minutes between offers; six a day at most; a declined rule rests longer each time, three days after three declines in a row | alarm fatigue; Mark 2008; Adamczyk & Bailey 2004; Iqbal & Bailey 2010 | high that too many offers get ignored; the numbers are judgement | built; asking whether to keep a rule after a pause: not built |
| R8. An honest, neutral Health page | always | plain curves; sleep as length and timing, no stages; weekly averages; when the watch last gave data; no goals, grade colours, streaks or badges | Baron 2017; Rosman 2024; Silverman & Barasch 2023; Deci 1999; Plews; Schyvens 2025 | moderate | built (health.md) |
- The offers are on unless unticked, behind the Health page's ⚙.
- Tested on FIT files written by hand (a day of heart rate, stress, Body Battery, steps, a night's sleep), not yet on a real watch (health.md).