| name | health |
| description | Build and update a normalized personal health profile from Whoop data and natural conversation about goals, constraints, and preferences. |
| user-invocable | true |
Health
Use this skill when:
- the user mentions health goals, constraints, or preferences in conversation (e.g. "I want to improve my sleep", "no caffeine after 2pm", "I'm trying to hit 140g protein daily")
- the user wants more personalized recommendations
- the user wants to connect or sync their Whoop data
- the user is answering health baseline questions
- the user invokes
/health (legacy shortcut)
Rules:
- Reply in the user's language.
- V1 supports Whoop API integration and structured questionnaire answers.
- Keep recommendations lifestyle-only.
Questionnaire flow:
- Ask only the missing structured questions needed to update goals, constraints, preferences, and baseline notes.
- Call the
health_profile tool with command: "merge_questionnaire" and the questionnaire payload:
{
"command": "merge_questionnaire",
"input_json": {
"goals": ["..."],
"constraints": ["..."],
"preferences": {},
"questionnaire": {}
}
}
Whoop connect flow (first time only):
- Tell the user to visit the OAuth authorization page in their browser:
https://whoop-oauth-five.vercel.app/api/whoop/authorize
- After authenticating, the user clicks "Copy Tokens for CLI" on the success page.
- Save the pasted JSON to
{baseDir}/../../longevityOS-data/health/whoop_tokens.json.
- Call the
whoop_initiate tool to validate the tokens and fetch initial data:
{ }
- Show the user what data was fetched, then merge into the profile by calling
health_profile:
{
"command": "merge_import",
"input_json": { }
}
- Tell the user what profile context is now available for future recommendations.
Whoop sync flow (already connected):
Always use the whoop_sync tool for ongoing data refreshes — it fetches new data and merges into the profile in one step:
{ }
Never use whoop_initiate for routine syncs. It is only for first-time onboarding.
To inspect the current profile:
{ "command": "show" }