Reads your wearable exports, watches recovery, training, and sleep together. Talks only to the model. No cloud sync, no broker, no third party. Asks better questions than 'how do you feel?'
health-stack
07:02
morning brief
07:02
π€ourasleep 5h 48m Β· 3 wakes Β· efficiency 78%
β€οΈwhoopHRV 42 (7d avg 51) Β· recovery 38%
πgarmintraining load 3d Β· +18% over baseline
Third morning your HRV has trailed your strain. Last time this pattern ran four days was after your March viral thing.
Flagging recovery debt. Scale back today, or push and reassess Wednesday?
network to the model only. nothing syncs out.
The situation
You track everything: Whoop, Oura, Garmin, CGM. You have a year of data and roughly zero insight. Health Stack reads what you let it read, sees the cross-signals between sleep, training, and recovery, and notices when something's drifting before your body does. One agent, one security surface, and it never dials out anywhere but the model.
How it behaves
A morning brief, a weekly trend, and the questions you should be asking.
Reads your wearable exports β Whoop, Oura, Garmin, CGM, sitting in a folder you point it at
Morning brief at 7am β yesterday's strain vs. recovery, what the cross-signals are saying, what to watch today
Weekly trend on Sunday β what's drifting, what's improving, what changed when
Network locked to the model β The only host it can reach is the model that reads your data. There's no route to anything else.
It reads one folder and dials out to one place, the model and nothing else. 'No third party touches this data' isn't a promise here. The wiring can't reach one.
How you'd build it
Getting your data in
health-stack
I have Whoop, Oura, and Garmin exports β months of files in a folder on my Mac. I'd like a 7am brief on recovery and training and sleep, plus a weekly trend on Sundays. The data has to stay on my machine.
design
All local. Here's the shape:
Β· I'd point it at one folder of your choosing β that's the only place it can read
Β· Whoop's CSV, Oura's JSON, Garmin's FIT β each format gets a parser the assistant runs when its schedule fires
Β· network locked to the model β no cloud sync, no broker, no third party in the loop
Β· 7am morning brief, Sunday weekly trend
If you start dropping new exports in monthly, it'll pick them up automatically β the schedule re-reads the folder.
Two confirmations:
Β· The folder is on this machine, not on a NAS or a cloud-synced folder, right?
Β· Want me to handle CGM exports too if you have those?
Local folder, yes. Skip CGM for now β I'll add it later. Two quirks worth knowing: my Whoop exports come weekly but I sometimes go a few weeks without exporting, so don't panic about gaps. And Garmin shows zero strain on days I leave the watch off β treat that as 'unknown,' not 'rest.'
design
Got it:
Β· Whoop / Oura / Garmin only; no CGM
Β· export gaps treated as 'no data for this period' in the brief, not as zeros or stale data
Β· Garmin strain of zero with no other Garmin signals β 'watch off, unknown,' not 'rest day'
When we add CGM later it'll be the same shape β I'd point it at the export, parser handles the format. Anything else about the data I should bake in upfront?
Health Stack reads files. No upload, no sync, no API. That makes the design surface small: which folder, which formats, when it should look. The first design conversation is mostly about pointing at the data and confirming the schedule β most of the work is shaping how the assistant reads, not how it gets reached.
What the morning brief actually looks like
health-stack
Walk me through a normal 7am. What's actually in the brief β and what's not?
design
It opens with the cross-signal observation, not a stat dump. Like:
> Third morning your HRV has trailed your strain. Last time this pattern ran four days was after your March viral thing. Flagging recovery debt β scale back today, or push and reassess Wednesday?
Underneath, the numbers it's reading from (sleep efficiency, HRV vs. baseline, training load drift) so you can sanity-check.
What it doesn't do: pretend yesterday's poor sleep is the headline if your week's pattern is more interesting; show every metric whether it matters or not; recommend specific workouts (it surfaces what you're trending into and asks).
The voice and the threshold for 'this is worth flagging' are tunable in the design β I'd start opinionated and we'd dial it in together over the first week.
Less coachy than what you showed β drop the 'or push and reassess Wednesday?' framing. I want the observation and the call, that's it. And only ping me on something flag-worthy. If yesterday was unremarkable, no brief at all β silence is fine.
design
Adjusted:
Β· brief shape: observation, then the call, no decision tree
Β· silent days when nothing crosses the flag threshold β no 'all good!' filler
Β· flag threshold: meaningful HRV deviation (>15% off baseline), training-load drift (>10% week-over-week), or sleep efficiency shift (>8 points). Below that, no brief
One risk to flag: on stressful weeks the silence might feel like the system is broken. Want a Sunday 'baseline confirmed' check that fires only if the daily was silent all week, just for confidence? Otherwise we trust the silence.
A morning brief is only as useful as the question it asks you. The design conversation is where you shape what gets surfaced, in what voice, at what threshold for flagging. You'd refine those over the first week or two until the brief feels like a coach rather than a dashboard.
What the weekly trend catches
health-stack
What does the Sunday trend tell me that the daily briefs don't?
design
The slow stuff. Daily catches acute β last night's sleep, today's recovery. Sunday catches drift β that your strain has crept up 12% over four weeks while sleep efficiency has dropped 6%, and the two are probably related. Or that your CGM glucose is trending higher in the post-7pm window for a month, even though no single night looked alarming.
The Sunday brief reads the last 28 days at once and surfaces three or four threads β what changed when, what cross-signals correlate, what to watch this coming week.
The specific patterns it looks for β recovery debt, glucose drift, training plateau β are something we'd shape in the design, and I'd extend over time as you notice things you want it watching.
Three I want from day one: training-load drift over four weeks, HRV trended against my last 90 days (not just last week), and the post-7pm metrics window β sleep + HR for now, I'll add CGM later. Send the Sunday brief at 9am, not earlier. I want to read it with coffee.
design
Locked:
Β· Sunday brief fires at 9am
Β· three patterns watched every week: 4-week training-load drift, HRV trended over 90 days, post-7pm metrics window (sleep + HR for now, expandable)
Β· Sunday brief always surfaces the top three threads β not silenced like the daily, since the whole point is the longitudinal read
When CGM lands we'll add post-7pm glucose to that window pattern automatically. Anything else for Sunday before we wrap?
The daily brief catches the acute; the weekly catches the slow drift. The design conversation is where you tell Cast what kinds of patterns the weekly looks for β what's worth tracking month-over-month, what's just noise. It's the part of the assistant that thinks across time on your behalf.
What stays separate
You wrote down what the assistant can reach, twice. Once when you described it ('it expects a folder of wearable exports, read-only'), once when you set it up on your machine ('this folder, here, is the one'). The description is portable. The path is yours. The assistant never sees a wider scope than what you bound, because there's no third place where access is granted. And the network is locked to the model only. No other host on the internet is reachable from this assistant.
morning brief: yesterday's strain vs recovery, and a weekly trend report
Blueprint highlight
One assistant: reads one folder, network locked to the model, parses Whoop / Oura / Garmin formats at runtime
Build it yourself
Install Cast, then describe this in the admin chat. The Design agent writes the agents, conversations, and ACL for you. The extensions you'd need are listed above.