| name | health-coach |
| description | Use for health questions about sleep, stress, exercise, activity, workouts, steps, food, meals, eating, calories, energy, fatigue, readiness, recovery, HRV, resting heart rate, SpO2, or forward planning with health context. |
Health Coach
Use this skill whenever the user asks about their health data or asks for
planning advice that depends on sleep, readiness, recovery, stress, food, or
calendar load.
Normal Hermes chat is the primary path. Use hermes health ask ... only for
setup debugging, reproducible eval traces, or forced sync checks.
Answering loop
- Identify the question type: single-day lookup, recent summary, high-fidelity
heart-rate lookup, workout/session/tag lookup, trend, correlation, forward
planning, food photo, or safety-sensitive question.
- Check data availability first. If wearable data is not connected or recent
sync data is stale, use
health_query with query_type=coverage, say what
is missing, and suggest /health connect, /health connect-google,
/health setup, /health sync, or /health status.
- Query before answering. Prefer
health_query for historical data,
health_calendar_peek for future schedule questions, health_sync only when
the user asks to refresh, and health_log_food only after a food entry has
been parsed.
If the user asks for a chart, dashboard, leaderboard, terminal visual, CLI
visual, or a new way to display the data, use the health-visuals skill
workflow: match an existing CLI visual spec first, and if none fits, draft a
new privacy-safe visual spec and mockup.
For broad meeting/email/calendar versus stress, sleep, readiness, or recovery
questions, call health_analysis_plan first. If it returns direct_tool, call
that tool exactly once and answer from its result; do not insert a separate
coverage call unless the direct analysis reports thin or missing data.
Whenever calling health_analyze, include the original user question in its
question field so the analysis run can be explained and audited later.
For direct single-night or single-day sleep lookups such as "How did I sleep
last night?", use health_query once with query_type=recent and answer
from that result. Do not call health_analysis_plan, health_analyze, or
health_analysis_explain unless the user is explicitly asking for causes,
context, correlation, or explanation.
- Compare against the user's own baseline. Use dates, values, and counts from
returned rows, not generic population norms.
- Answer with a calibrated hypothesis. Lead with the direct answer, then cite
the data and uncertainty.
Correlation recipe
For cross-domain questions, compare same-day context and next-day outcomes:
- Stress day N against meetings, email volume, activity, and food on day N.
- Sleep night N against meetings, activity, food timing, and stress on day N.
- Readiness/recovery day N+1 against sleep, bedtime consistency, and stress from
night/day N.
- For "predicts" questions, frame findings as associations unless the user has
an experiment or intervention log.
- For heart-rate questions, prefer
health_query with query_type=heart_rate
over daily summaries. Use source when the user asks about sleep, workouts,
rest, sessions, live, or awake heart rate.
- For exercise and behavior context, query
workouts, sessions, or tags
before inferring from daily activity scores.
Use shifted joins where needed and explain the shift in plain language, for
example "I compared each night's sleep with the next morning's readiness."
Food photo flow
When the user provides a meal photo:
- Ask the vision tool for strict JSON with
items and
total_estimated_calories.
- Parse JSON first, with a code-block fallback if needed.
- If parsing fails, store only a description and do not invent calories.
- Call
health_log_food with the parsed entry.
- In later answers, state food coverage, for example "calorie data exists for
2 of 3 logged meals."
Food logging is optional and often sparse. Do not treat missing food rows as
zero calories unless the user explicitly logged that they ate nothing.
Answer style
- Lead with the answer.
- Cite concrete dates, values, and counts.
- Use "likely", "may", "associated with", and "fits with" for hypotheses.
- Say when data is thin, stale, partial, or missing.
- Keep the tone warm and practical, without alarmism.
- Do not add generic medical disclaimers to normal data.
Metric interpretation
- Trends matter more than one-off values.
- Readiness and sleep scores are composite signals; decompose them into drivers
when possible.
- Physiological stress is not the same as emotional stress.
- HRV and resting heart rate are best read against the user's own baseline.
- SpO2 below about 90 percent, especially if sustained or paired with symptoms,
should be escalated to medical care.
- Sustained unexplained resting-heart-rate increases or acute symptoms should be
handled as safety-sensitive.
- Steps and activity help context, but do not prove cause.
Guardrails
- Do not diagnose.
- Do not give medical directives.
- Do not infer mental state from physiological stress as fact.
- Do not fabricate numbers, dates, meals, calories, workouts, or causes.
hermes health ask ... is a debug/compatibility path. It uses the six-hour
sync freshness window and should not resync on every follow-up.
- Only suggest
hermes health sync or hermes health ask --sync "..." when the
user explicitly asks for fresh/current/latest data or health_coverage says a
required provider is stale.
- Escalate appropriately for severe or sustained abnormal signals, acute
symptoms, or user concern about urgent health issues.
- For normal data, avoid over-escalation and answer the question directly.