Watch2Whoop
Health Uyari
- License — License: AGPL-3.0
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Gecti
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Gecti
- Permissions — No dangerous permissions requested
Bu listing icin henuz AI raporu yok.
WHOOP-style recovery, strain and sleep analysis from the Apple Watch you already wear. Self-hosted, any AI via MCP. Not affiliated with WHOOP or Apple.
Watch2Whoop
WHOOP-style recovery, strain and sleep analysis from the Apple Watch you already wear.
No subscription, no extra band. Your data lives on your own server, and any AI can read and write it through MCP.
Quick Start · Docs · User handbook · Roadmap · Releases · Changelog · Contributing · 简体中文

[!IMPORTANT]
Not affiliated with WHOOP, Inc. or Apple Inc.; their names are trademarks, used only to say what this works with or resembles.
Not a medical device and not medical advice. Status: alpha, Apple Watch first. All screenshots use synthetic data.
Why
Your Apple Watch already records heart rate, HRV, sleep stages, SpO₂ and workouts, but turns little of it into daily
guidance. Subscription bands do, but the analysis stays in their app. Watch2Whoop is the missing part, and it is yours:
- WHOOP-style numbers from raw watch data — recovery, strain, sleep need and debt, stress, body age, each against
your own baseline. Formulas are built from published research literature, and every parameter is documented. - Any AI, through MCP — Claude, ChatGPT / Codex, Gemini, DeepSeek, a local Ollama … connect over MCP or an API key.
Tools, memory and history live in your database, so switching models loses nothing. - No forms — you log food, workouts, weight, labs or how you slept by telling your AI, in text, a photo or by voice.
- Self-hosted and multi-user — one server for your family, an account per person, sharing only when someone opts in.
Quick Start
Try it in about 5 minutes with 60 days of synthetic data, no watch or account needed. You need Docker (Compose v2)
and python3 ≥ 3.9.
git clone https://github.com/SongyuQi-Francisco/Watch2Whoop.git
cd Watch2Whoop
./quickstart.sh # prints a login link for the Today page
It starts Body Engine and Open Wearables on 127.0.0.1 (SparkyFitness only with --sparkyfitness), imports the synthetic data through the real Apple
Health importer and computes every score. Ports, options and status / logs / down / reset: quickstart/README.md.
There is no hosted demo.
Features
| Recovery | Daily 0–100 score from overnight HRV, sleeping heart rate, sleep performance and respiratory rate vs. your 60-day baseline; illness flags |
| Strain | Day strain 0–21 (Edwards TRIMP from raw heart rate), training load (CTL / ATL / TSB) and a daily target from the Strain Coach |
| Sleep | Sleep score, stages, need and debt, consistency, efficiency; a Sleep Coach and a gradual bedtime-goal planner |
| Health monitor & stress | Resting HR, HRV, respiratory rate, SpO₂ and wrist temperature vs. your normal range; daytime stress score |
| Body age | Body age and pace of aging from 8 markers (steps, active minutes, strength training, VO₂max, resting HR, body composition, sleep duration and regularity) |
| Training | Calendar that merges watch workouts (HR zones, calories) with strength sets; exercise library, 3 / 4 / 5-day splits and weekly plans adjusted by recovery; muscle-load map |
| Nutrition & records | Meal templates, recipes with per-serving nutrition, lab results with reference ranges and trends, supplements, symptoms, a behaviour journal with next-day impact |
| Reports | Weekly and monthly reports; rule-based reminders (load progression, calorie adjustment from the weight trend, pre-workout fueling) |
| Family | Accounts per person, per-user tokens, opt-in sharing, friend circles |
How every score is computed, with references and known limits: scoring methodology.
The scoring code is also split out as a standalone library, packages/openbodyscore (Apache-2.0).
The UI is in Chinese and English. Newer features ship behind feature flags that are off on a fresh install
(body-engine flags list, see docs/rollout.md).
AI and MCP
Watch2Whoop is a data layer for your AI, not another chatbot. The AI is swappable; the data stays.
- Remote MCP at
/mcp(Streamable HTTP, a per-user AI token) for Claude, ChatGPT / Codex, Gemini / Antigravity and any
other MCP client, plus a stdio MCP server for local use. Setup commands: body_engine/README.md. - 100+ tools to read scores, sleep, training, nutrition, labs and memory, and to log food, workouts, weight and more.
Every tool call is authorized per user and audited. A compactget_briefing(~1.5k tokens) opens each conversation. - Prompts for common jobs:
butler(the coach persona),weekly_review,plan_training_week,plan_shopping,log_meal_from_photo. - In-app chat with your own API key: Anthropic, OpenAI, Gemini or any OpenAI-compatible endpoint (DeepSeek, Qwen,
Ollama). Keys are encrypted per user; deletes ask first; photos, video and push-to-talk (speech recognition runs on your server). - Long-term memory in your own database: profile, observations, a status card the AI keeps up to date.

Getting your data in
| Source | How |
|---|---|
| iOS app | Background HealthKit sync from iPhone + Apple Watch, with the Today page inside the app (apps/watch2whoop, Flutter). Build it yourself; a TestFlight beta runs for invited testers |
| Apple Health export | Upload export.zip from the Health app in the app (chunked, resumable) to import years of history; admins can also run body-engine import-apple-zip |
| Hevy | Upload Hevy's workout CSV export; exercise names are matched to the exercise library and muscle load is recomputed |
| iOS Shortcut | No app needed: a Shortcut uploads Health samples on a schedule (shortcuts/, format spec docs/shortcut-sync-spec.md) |
| Your AI | Everything you tell it: meals, workouts, weight, labs, supplements, symptoms, journal |
How it works
flowchart LR
W["Apple Watch + iPhone<br/>(iOS app or Shortcut)"] --> OW["Open Wearables<br/>raw wearable data"]
W --> BE
OW --> BE["Body Engine<br/>FastAPI + PostgreSQL<br/>scores · food / strength / weight logs · rules"]
BE --> T["Today page<br/>(inside the iOS app)"]
BE <-->|"MCP · API key"| AI["Your AI<br/>Claude · ChatGPT · Gemini · DeepSeek …"]
Built on open source: Open Wearables for wearable sync,
PostgreSQL, FastAPI, Flutter, and optionally Grafana. Food, strength and weight
logs live in Body Engine's own tables; SparkyFitness, which held them
before, is optional and no longer needed (only to migrate an older deployment: docs/own-food-weight-storage.md).
Services bind to 127.0.0.1 and are reached through Tailscale by default.
Self-hosting on a Mac mini or a Linux VPS: docs/README.md#self-hosting · Admin guide (Chinese): docs/admin-guide.md
Roadmap
Planned work and discussions live in issues; app builds and notes in releases and the app changelog.
- Apple Watch: recovery, strain, sleep, body age, stress, coaches, reports
- One-command local Quick Start with synthetic data
- Remote MCP + API-key chat for any AI, per-user AI isolation
- Training module v2: exercise library, splits, weekly plans, recovery-based adjustments (design)
- Hevy CSV import, Apple Health history import
- Self-service sign-up with invite codes (design)
- Chinese and English UI (remaining gaps: #64)
- In progress: friends page and circles (design)
- In progress: own Apple Health sync engine to replace Open Wearables on iOS (#219)
- RMSSD-based recovery (#117)
- Coles / Woolworths prices and weekly specials: the sites block scraping and we do not work around that; prices come from the user's own receipts / shelf labels / AI, the opt-in
grocery-synccomponent stays off, compliant sources are being surveyed (#292, plan and terms analysis) - Publish the scoring library
openbodyscore - One-command Linux VPS installer
- Other watches: Garmin, Oura, Polar, Android Health Connect … (help wanted)
Contributing
Contributions are welcome. Every change is a pull request from your own branch or fork; CI must pass and a maintainer
reviews. Read CONTRIBUTING.md first (new UI text is always bilingual, Chinese + English).
Good places to start:
- Bring your watch — Garmin, Oura, Polar or Health Connect data into the same scores (roadmap).
- Scoring — review the methodology and the validation plan.
- Docs — most design documents in
docs/are Chinese; English versions help a lot. - Issues labelled
good first issueandhelp wanted.
Try changes locally with ./quickstart.sh; tests: cd body_engine && uv run pytest, cd apps/watch2whoop && flutter test.
Repository
| Path | What |
|---|---|
body_engine/ |
Server: scores, records, rules, AI tools, MCP, Today page |
apps/watch2whoop/ |
iOS app (Flutter) |
packages/openbodyscore/ |
Standalone scoring library |
packages/openbodyscore-js/ |
The same algorithms as one JS file the iOS app runs locally (JavaScriptCore) |
examples/reading-notes/ |
The server's MCP framework (datalayer) on non-health data: reading notes on SQLite |
shortcuts/ |
iOS Shortcut sync (no app needed) |
quickstart/ |
One-command local demo |
deploy/, assistant/ |
Deployment, ops, AI coach workspace |
docs/ |
Design documents (mostly Chinese) |
License
| Part | Licence |
|---|---|
| Server and everything else | AGPL-3.0 |
iOS app apps/watch2whoop/ |
MIT |
iOS Shortcut shortcuts/ |
MIT |
Scoring library packages/openbodyscore/ |
Apache-2.0 |
Third-party services (Open Wearables, Grafana, the optional SparkyFitness) keep their own licences: docs/LICENSES.md.
Watch2Whoop is not affiliated with, endorsed by or connected to WHOOP, Inc. or Apple Inc. "WHOOP-style" only describes
the kind of analysis; the scores are independent implementations. The numbers are for personal insight and do not
constitute medical advice, diagnosis or treatment.
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi