Sleep stage detail
get_sleep_detailRetrieve detailed per-night sleep stages with heart rate and respiratory rate for one or two specific nights, including stage intervals and vitals, to analyze sleep quality in depth.
Instructions
Per-night sleep stages with per-stage HR/RR — depth on a few nights.
Which sleep tool to use:
· THIS one for going deep on one or two specific nights (stage bands,
per-stage vitals). It defaults to 2 nights because each is ~1-2k
characters; see the SIZE note below.
· vaultbeat_sync_sleep for anything spanning time — "how did I sleep
this week/month", trends, averages. Its default of 50 covers ~2-3
weeks. Reach for it whenever the question is about a period rather
than a night, and do not conclude from THIS tool's two rows that only
two nights exist.
(This used to call itself "the primary tool for detailed sleep analysis", which read as "use this one for sleep" and handed back two days to anyone who asked how their week went.)
Returns stage_intervals (contiguous stage bands with start/end),
stage_minutes, and stage_vitals (per-stage HR/RR min/mean/max). Use
owner prefix to filter by person — the first characters of a user id.
vaultbeat_doctor lists them under capabilities.owner_prefixes; there
is no other way to discover one, and omitting owner on a paired
account blends both people into one result.
⚠️ SIZE: each night is ~1-2k characters as returned. Setting
include_timeline=True adds the raw per-sample array (hr, rr, stage,
time) — about 13k characters PER NIGHT, which will overflow a typical
25k-token client budget after 2-3 nights. Ask for it only when you need
sample-level vitals (e.g. "when exactly did HR spike"); stage_vitals
already answers per-stage questions. Raise limit for trends, but keep
it low whenever include_timeline=True.
⚠️ is_in_bed_only: true means sleep was NEVER MEASURED that night (the
Watch wasn't worn) — NOT that the person slept zero. duration_label
reads "no sleep data" and in_bed_minutes holds the time actually
recorded in bed. Report it as "no sleep data (in bed ~Xh)", never as
"slept 0 hours".
Carries a coverage block: quote coverage.days_covered (distinct days, not
the row count) and coverage.span_days beside any average or trend, and read
coverage.window_satisfied: false as a shorter history than asked, not as a
missing kind. 🔴 Before saying how far back someone's data goes, read
coverage.more_available: true means this server can decrypt days OLDER
than first_day that your limit left behind — re-read with a larger
limit, or quote coverage.oldest_available as the real start of their
history. Never report a limit-shaped window as the extent of their data.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| fresh | No | ||
| limit | No | ||
| owner | No | ||
| include_timeline | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||