How RadiantHealth works
RadiantHealth isn't another wearable scorecard. It's an agent that reads your Garmin, Oura, Whoop, Apple Watch or Health Connect data every morning, decides what today should look like, and hands you a concrete plan you can say yes or no to. This page is a plain-English walk-through of the loop.
The daily loop, end to end
Every time you open the app — or every morning on a scheduled cron if you've enabled Morning Briefings — the agent runs five steps in order. The whole thing takes 2–6 seconds.
| Step | What it does | Where the data comes from |
|---|---|---|
| 1. Perceive | Pulls your latest readiness, training load (TSB), sleep, HRV, and recent episodic memory in parallel. | Garmin · Oura · Whoop · Apple Health · Android Health Connect |
| 2. Reason | LLM grounds the reply in today's data + the last ~5 episodes of memory. No data → no advice. | OpenAI GPT-4o-mini (default tier) · your prior conversation turns |
| 3. Plan | Narrows down to 1–3 concrete actions (shift a workout, add a recovery block, move a meal). | Guardrails + your current training block |
| 4. Act | Writes proposed actions back to your plan. You confirm; nothing auto-executes. | Your agreement · optional Google Calendar write |
| 5. Reflect | Stores what you did, what worked, and what didn't as a searchable memory. | pgvector embeddings · 30-day rolling memory window |
What "agentic" actually means
Most "AI coaches" are a chat box stapled to a health API. You ask a question, an LLM guesses an answer. RadiantHealth is different in three concrete ways:
- It uses tools, not just tokens. The agent calls
get_readiness,get_training_load,list_plan_items,query_historyandsearch_memoryas real functions against your database — with a capped tool budget per turn so it can't spiral. - It proposes, you confirm. Every concrete change ("shift your Thursday ride by one day", "add a 20-min recovery block at 3pm") is a proposed action. It lands in a review queue until you tap Confirm. Proposals expire after 24h so nothing stale survives.
- It has memory. What you agreed to, what you skipped, and what the coach told you last week are stored as embeddings. The next morning's brief knows you skipped the long run on Sunday without you re-telling it.
What the morning briefing actually looks like
Here's the shape of a real morning brief (redacted), condensed from a 3-minute read to an ~80-word summary:
Readiness 68/100 — TSB –12 (functional overload). HRV is 8% below your 7-day baseline and sleep efficiency dropped to 81% last night, likely from Thursday's hard intervals. Recommend:
- Swap today's planned Z4 intervals for a 60-min Zone 2 ride.
- Add a 20-minute nap / recovery block between 14:30–15:30.
- Push your strength session from today to Saturday.
All three are one-tap confirm. If you confirm the Z2 ride I'll write it to Google Calendar and mark your original Z4 session cancelled.
Streaming, not waiting
Briefings stream in token-by-token via Server-Sent Events on /api/v2/coach/brief_stream. First token typically lands in 400–900 ms, so the mobile UI feels conversational instead of loading-spinner. You can stop a stream mid-flight at any time.
For developers and agents
RadiantHealth is Level 5 Agent-Native — agents, indexers, and MCP clients can discover and call into the product programmatically:
- /.well-known/api-catalog — API linkset (RFC 9727)
- /.well-known/mcp/server-card.json — MCP server card (SEP-1649)
- /.well-known/agent-skills/index.json — machine-readable skills
- /.well-known/oauth-protected-resource — auth metadata (RFC 9728)
POST /mcp— remote MCP server withget_coach_context,request_coach_brief,list_plan_items,connect_wearabletools
Want to see the loop on your own data?
The Android app is free. Link a wearable in under a minute and you'll get your first coach briefing on next-morning's data.
Get RadiantHealth for Android