Launch a personalized AI wellness coach video session (Baymax persona) using Tavus CVI + Claude. Fetches real wearable health data (sleep, HRV, recovery) and Google Calendar events, builds a personalized system prompt, creates a live Tavus conversational video session, and delivers a morning briefing link via Telegram. Use when the user wants a daily wellness briefing, wants to talk to an AI wellness coach, wants guided breathing/meditation based on their health data, or asks to start their morning routine. Requires TAVUS_API_KEY, TAVUS_REPLICA_ID, TAVUS_PERSONA_ID, and ANTHROPIC_API_KEY in .env.
Spin up a personalized Baymax wellness coach video session from health + calendar data.
git clone https://github.com/AndreChuabio/wellness-coach
cd wellness-coach
pip install -r backend/requirements.txt
cp .env.example .env # fill in API keys
ANTHROPIC_API_KEY= # Claude context generation
TAVUS_API_KEY= # Tavus CVI sessions
TAVUS_REPLICA_ID= # Avatar replica (platform.tavus.io → Replicas)
TAVUS_PERSONA_ID= # Baymax persona (platform.tavus.io → Personas)
cd backend
uvicorn main:app --reload
# Swagger UI: http://localhost:8000/docs
cd frontend
python3 -m http.server 3000
# Open: http://localhost:3000
| Method | Path | What it does |
|---|---|---|
GET | /health-data | Today's wearable metrics |
GET | /calendar | Today's calendar events |
POST | /start-session | Full pipeline → Tavus CVI URL + recs |
GET | /debug-env | Check all API keys are loaded |
Run both scripts back-to-back — always together so the Tavus link is fresh:
python3 cron/morning_context.py && python3 cron/send_briefing.py
This builds context, pre-warms a Tavus session, and sends a Telegram message with:
Register a 7AM daily cron via OpenClaw to automate the morning briefing.
See references/openclaw-cron.md for the exact setup.
See references/wearables.md for Oura, Fitbit, and Apple Health integration guides.
See references/gcal-setup.md for OAuth setup to get real calendar events.
Recommendations are generated in backend/context_builder.py based on:
| Signal | Trigger | Suggestion |
|---|---|---|
| HRV < 50ms | below avg | Box breathing, recovery day |
| Sleep score < 75 | poor sleep | Nap window, caffeine cutoff |
| High-stakes meeting | keyword match | 4-7-8 breathing beforehand |
| 4+ meetings | packed day | Micro-meditations between meetings |
| Recovery ≥ 80 + HRV ≥ avg | great day | Push harder, workout, cold exposure |
Upload wellness content directly to the Tavus Persona via:
platform.tavus.io → Personas → Your Persona → Knowledge Base → Add Files
Format files as structured scripts:
# [Exercise Name]
## When to use
## Script (word-for-word guide)
## Duration
Avatar nods but doesn't speak → Mic permission not granted. Click lock icon in browser → allow microphone → rejoin.
Mock mode despite keys set → .env not loading. Run /debug-env to verify. Ensure .env is in project root, not backend/.
Tavus link expired → Sessions last ~10 min. Always run morning_context.py and send_briefing.py together right before use.
GCal shows mock data → Set GOOGLE_CREDENTIALS_PATH and GOOGLE_TOKEN_PATH in .env. Run python3 setup_gcal.py once to authorize.