Health and body
Apple Health ingest, per-metric baseline bands, food photos, and why readiness is measured against you rather than a population.
Live.Food photo estimates and the health store both run in the channel.
Food photos
A food photo with no question attached gets a terse macro estimate: calories plus protein, carbs and fat as ranges, one line, formatted to punch straight into Bevel. No nutrition lecture, no unsolicited advice.
The body store
Health Auto Export posts to the webhook, and the payload lands in a rolling metrics store: sleep stages, HRV, resting heart rate, weight, steps, workouts.
Garmin data reaches this the same way. Garmin Connect writes into Apple Health, and Bevel reads from Apple Health rather than exposing an API of its own, so the path is Garmin to Apple Health to Health Auto Export to Otto. There is no Garmin integration to maintain and no second credential to hold.
Baselines, not thresholds
Every metric carries a time-weighted moving average and a baseline band computed from its own history, using median and absolute deviation so that one terrible night does not move the band.
That matters because population thresholds are useless here. An HRV of 40 is alarming for one person and normal for another; the only useful question is whether today is outside your normal, and how far.
A baseline is not computed at all until there are enough points for it to mean something. Before that, Otto has no opinion, which is the correct opinion.
Not built yet
These do not exist. The substrate each one reads is live, so every item below is a self-contained piece of work rather than a rewrite. The button copies a prompt that builds it in your own checkout.
"Squats five by five at a hundred, then incline bench three of eight at sixty, felt heavy" parses into structured sets stored as a `lift` record, and Otto replies with only the thing worth knowing — "e1RM 118, first time over 115" or "third session stalled at 100 — deload?"; logging by voice on the walk home is the only gym interface that survives contact with a gym.
When HRV drops and resting HR rises together beyond their own baseline band, one morning line with the training implication rather than the numbers ("body's flat today — technique work or take it off"), silent on every normal day, and flagging the 2–3 day pre-illness signature so they can cancel before losing a week.
On mornings with nothing logged, scan the calendar for a real gap that fits their session plus travel, check readiness, and offer one [block it] that writes the event and records the undo; it answers "when am I actually training today" while the answer still exists.
Track actual sleep onset and warn only on genuine drift — three nights sliding past their anchor, or a Brazil schedule that will collide with an Italy-timed call already on next week's calendar — pairing the drift with the specific meeting it will wreck, the only framing that makes a sleep nudge non-annoying.
Record each pack with dose and count so Otto computes the run-out date and reminds at a lead time that reflects where they are — a week ahead in Brazil where the brand name and prescription rules differ, two days in Italy — with the local equivalent name in the message, and "took it" reconciling a missed dose.
24h before any medical event, one message: current meds and doses, symptoms they're mentioned since the last visit, out-of-range markers, the questions they said they wanted to ask, and the address with travel time — arriving once, never re-sent.
Forward a blood-panel PDF and Otto extracts each marker into a longitudinal series, reports only what moved or left range with direction versus last draw, files the summary as a `saved` note and arms a retest trigger; results are scattered across two countries' portals with nobody holding the trendline.
The deliberate omission
The morning health check is intentionally left unwired. It is the feature most likely to turn into a daily bulletin, and a daily bulletin is exactly what the interruption bar exists to prevent. It ships when there is a rule for when it should stay quiet.