v1.2.1
A correctness + stealth pass. Every read and write tool was exercised individually against a live account — comparing each call's raw API exchange to the projected output and reading the state back — which surfaced a class of "returns HTTP 200 but the payload is empty or wrong" bugs that receipt-only testing missed.
Highlights since v1.2.0
- iOS-app identity headers on every data request. Data requests now carry the WHOOP iOS app's own header set (
user-agent: iOS, thex-whoop-*device headers, a per-install identifier, capitalBearer), captured from a live mitmproxy session, so traffic blends with the legitimate app instead of being a bare bearer token. Static values are the app's shared constants (camouflage, not a per-user signature); the installation id is a per-install random UUID persisted to.env. whoop_behavior_impactresurrected. It was effectively un-callable — it required an impact UUID that no other tool exposed. It now lists every behavior + itsimpact_uuidwhen called with no argument, then returns the full detail for a UUID.- Seven read tools fixed that returned 200 with an empty or wrong projection:
whoop_stress,whoop_trend(every time/duration metric was null),whoop_cycle(all-null despite real data; also needs the?dateparam),whoop_workout(HR curve was always empty),whoop_lift_progression(mislabeled segments),whoop_recovery(SpO2 / skin temp), andwhoop_behavior_impact. - Write fixes.
whoop_coach_askreturned a truncated streamed reply ("56"instead of the full answer) — now polls until the turn isCOMPLETE.whoop_symptom_logcrashed on menstruation-only calls. - Tool descriptions rewritten across the surface — terser and example-free for id-taking tools (sample ids led the model to hallucinate ones outside the list) — with the catalog read enforced by a hard gate.
- Docs reconciled with the codebase; descriptions clarified for
whoop_journal_log(replaces the day — read first),whoop_smart_alarm_set(wake time goes throughmode=schedule),whoop_cycle, andwhoop_workout.
212 tests (was 178). TypeScript 6, Node 24.
Full detail in CHANGELOG.md.