{"skill":{"slug":"openclaw-health-brief","displayName":"OpenClaw Health Brief","summary":"Generate a daily health brief from Oura, Whoop, and Withings. Unified re-auth script, local token persistence, Green/Yellow/Red morning summary.","description":"---\nname: openclaw-health-brief\ndescription: Generate a daily health brief from Oura, Whoop, and Withings. Unified re-auth script, local token persistence, Green/Yellow/Red morning summary.\n---\n\n# OpenClaw Health Brief\n\nDaily health metrics from **Oura**, **WHOOP**, and **Withings** → normalized JSON + Markdown brief.\n\n## Setup (3 steps)\n\n### Step 1: Configure secrets\n\n**Option A: 1Password (recommended)**\n```bash\nexport OP_SERVICE_ACCOUNT_TOKEN=\"your-token\"\nexport OPENCLAW_1P_VAULT=\"Assistant\"  # or your vault name\n```\n\nCreate items in your vault with these titles and fields:\n- `OpenClaw Whoop` → `client_id`, `client_secret`, `token`, `refresh_token`\n- `OpenClaw Oura` → `client_id`, `client_secret`, `token`, `refresh_token`\n- `OpenClaw Withings` → `client_id`, `client_secret`, `access_token`, `refresh_token`, `user_id`\n\nSee `./docs/1PASSWORD_CONVENTIONS.md` for full field details.\n\n**Option B: Environment variables**\n```bash\n# WHOOP\nexport WHOOP_ACCESS_TOKEN=\"...\" WHOOP_REFRESH_TOKEN=\"...\" WHOOP_CLIENT_ID=\"...\" WHOOP_CLIENT_SECRET=\"...\"\n# Oura\nexport OURA_PERSONAL_ACCESS_TOKEN=\"...\"  # or OAuth: OURA_REFRESH_TOKEN + OURA_CLIENT_ID + OURA_CLIENT_SECRET\n# Withings\nexport WITHINGS_CLIENT_ID=\"...\" WITHINGS_CLIENT_SECRET=\"...\" WITHINGS_REFRESH_TOKEN=\"...\" WITHINGS_USER_ID=\"...\"\n```\n\n### Step 2: Authorize providers\n\n```bash\npython3 ./bin/health-reauth all\n```\n\nThis opens your browser for each provider. Click authorize, and tokens are saved to both 1Password and `~/.openclaw/secrets/health_tokens.json` automatically.\n\nYou can also re-auth individually: `python3 ./bin/health-reauth whoop`\n\n### Step 3: Run your first brief\n\n```bash\n./bin/health-brief --date \"$(date +%F)\" --sources whoop,oura,withings --out \"./out/daily_health_$(date +%F).json\"\n```\n\n**That's it.** Token rotation is handled automatically — refreshed tokens persist to the local file so you don't need to re-auth again.\n\n## Add to OpenClaw cron\n\nWire it into your morning routine with an OpenClaw cron job:\n\n```bash\nopenclaw cron add \\\n  --name \"morning-health-brief\" \\\n  --schedule \"0 8 * * *\" \\\n  --tz \"America/New_York\" \\\n  --session-target isolated \\\n  --message 'Run the health brief:\nsource ~/.openclaw/secrets/gateway.env\nexport OPENCLAW_1P_VAULT=YourVault\n./bin/health-brief --date \"$(date +%F)\" --sources whoop,oura,withings --out \"/tmp/daily_health_$(date +%F).json\"\nRead the JSON output. Report only non-null metrics with a Green/Yellow/Red rating.'\n```\n\nThe cron job runs as an isolated agent session — it executes the brief, reads the output, and delivers a formatted summary to your preferred channel.\n\n## Smoke test (no creds needed)\n\n```bash\n./bin/smoke\n```\n\nRuns in sample mode, validates JSON schema. Good for checking the skill is installed correctly.\n\n## Troubleshooting\n\n### Check individual providers\n```bash\n./bin/whoop --date \"$(date +%F)\"\n./bin/oura --date \"$(date +%F)\"\n./bin/withings --date \"$(date +%F)\"\n```\n\n### Common errors\n- `has_token: false` → credentials not found. Check 1Password item names or env vars.\n- `refresh_failed` → refresh token expired. Run `python3 ./bin/health-reauth <provider>`\n- `missing_credentials` → client_id/client_secret not set.\n\n### Validate output JSON\n```bash\n./bin/validate-json --in ./out/daily_health_YYYY-MM-DD.json\n```\n\n## References\n- `./docs/1PASSWORD_CONVENTIONS.md` — field naming for 1Password items\n- `./docs/OURA.md`, `./docs/WHOOP.md`, `./docs/WITHINGS.md` — provider API notes\n- `./docs/MORNING_BRIEF.md` — morning brief intent and format\n","tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":1667,"installsAllTime":1,"installsCurrent":1,"stars":2,"versions":1},"createdAt":1770492817990,"updatedAt":1778486075083},"latestVersion":{"version":"1.0.0","createdAt":1770492817990,"changelog":"Initial release: WHOOP, Oura, Withings connectors with unified reauth, local token persistence, and OpenClaw cron integration","license":null},"metadata":null,"owner":{"handle":"nathanielweiner","userId":"s1781c8nq2cz8453t3dp7ddenn884h2q","displayName":"NathanielWeiner","image":"https://avatars.githubusercontent.com/u/1205440?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1779957585548}}