{
  "schemaVersion": "1.0",
  "item": {
    "slug": "whoop-tracker",
    "name": "WHOOP Tracker",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/iJaack/whoop-tracker",
    "canonicalUrl": "https://clawhub.ai/iJaack/whoop-tracker",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/whoop-tracker",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=whoop-tracker",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "AUDIT.md",
      "SKILL.md",
      "references/api-reference.md",
      "references/oauth.md",
      "scripts/get_profile.py",
      "scripts/get_recovery.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/whoop-tracker"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/whoop-tracker",
    "agentPageUrl": "https://openagent3.xyz/skills/whoop-tracker/agent",
    "manifestUrl": "https://openagent3.xyz/skills/whoop-tracker/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/whoop-tracker/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "WHOOP API",
        "body": "Retrieve and analyze fitness data from WHOOP wearables via the official REST API."
      },
      {
        "title": "Usage Snippet",
        "body": "# Install (if using Clawdhub)\nclawdhub install whoop-tracker\n\n# From the skill root:\npython3 scripts/get_recovery.py --today\npython3 scripts/get_sleep.py --last\npython3 scripts/get_workouts.py --days 7\npython3 scripts/get_profile.py"
      },
      {
        "title": "Prerequisites",
        "body": "Python 3.7+\nrequests library: pip3 install requests\n(or run bash scripts/install.sh)"
      },
      {
        "title": "1. Register Application",
        "body": "Go to https://developer.whoop.com\nCreate a new app and note your client_id and client_secret\nSet redirect URI (e.g., http://localhost:8080/callback)"
      },
      {
        "title": "2. Save Credentials",
        "body": "mkdir -p ~/.whoop\ncat > ~/.whoop/credentials.json <<EOF\n{\n  \"client_id\": \"YOUR_CLIENT_ID\",\n  \"client_secret\": \"YOUR_CLIENT_SECRET\"\n}\nEOF\nchmod 600 ~/.whoop/credentials.json"
      },
      {
        "title": "3. Authorize (see references/oauth.md for full guide)",
        "body": "Open the authorization URL in browser\nUser grants permissions → redirected with code\nExchange code for tokens via WhoopClient.authenticate(code, redirect_uri)"
      },
      {
        "title": "4. Fetch Data",
        "body": "All scripts are run from the skill root directory:\n\n# Today's recovery\npython3 scripts/get_recovery.py --today\n\n# Last night's sleep\npython3 scripts/get_sleep.py --last\n\n# Recent workouts\npython3 scripts/get_workouts.py --days 7\n\n# User profile\npython3 scripts/get_profile.py"
      },
      {
        "title": "Recovery",
        "body": "Recovery Score (0-100): Readiness for strain\nHRV (RMSSD): Heart rate variability in milliseconds\nResting Heart Rate: Morning baseline HR\nSPO2: Blood oxygen percentage\nSkin Temperature: Deviation from baseline in °C"
      },
      {
        "title": "Sleep",
        "body": "Performance %: How well you slept vs. your sleep need\nDuration: Total time in bed and per stage (REM, SWS, light, awake)\nEfficiency %: Time asleep / time in bed\nConsistency %: How consistent your sleep schedule is\nRespiratory Rate: Breaths per minute\nSleep Needed/Debt: Baseline need and accumulated debt"
      },
      {
        "title": "Cycle (Daily Strain)",
        "body": "Strain Score: Cardiovascular load (0-21 scale)\nKilojoules: Energy expenditure\nAverage/Max Heart Rate: Daily HR metrics"
      },
      {
        "title": "Workout",
        "body": "Strain: Activity-specific strain score\nSport: Activity type (running, cycling, etc.)\nHeart Rate Zones: Time spent in each of 6 zones\nDistance/Altitude: GPS metrics (if available)"
      },
      {
        "title": "API Endpoints",
        "body": "Base URL: https://api.prod.whoop.com\n\nSee references/api-reference.md for full endpoint documentation with response schemas.\n\nUser Profile:\n\nGET /v1/user/profile/basic — Name, email\nGET /v1/user/body_measurement — Height, weight, max HR\n\nRecovery:\n\nGET /v1/recovery — All recovery data (paginated)\nGET /v1/cycle/{cycleId}/recovery — Recovery for specific cycle\n\nSleep:\n\nGET /v1/sleep — All sleep records (paginated)\nGET /v1/sleep/{sleepId} — Specific sleep by ID\nGET /v1/cycle/{cycleId}/sleep — Sleep for specific cycle\n\nCycle:\n\nGET /v1/cycle — All physiological cycles (paginated)\nGET /v1/cycle/{cycleId} — Specific cycle by ID\n\nWorkout:\n\nGET /v1/workout — All workouts (paginated)\nGET /v1/workout/{workoutId} — Specific workout by ID\n\nAll collection endpoints support start, end (ISO 8601), limit (max 25), and nextToken (pagination cursor)."
      },
      {
        "title": "Required OAuth Scopes",
        "body": "read:profile — User name and email\nread:body_measurement — Height, weight, max HR\nread:recovery — Recovery scores and HRV\nread:sleep — Sleep metrics and stages\nread:cycles — Daily strain data\nread:workout — Activity and workout data"
      },
      {
        "title": "scripts/whoop_client.py",
        "body": "Core API client. Features:\n\nOAuth token storage and auto-refresh\nToken expiry tracking (proactive refresh)\nRate limit handling (429 with retry)\nAutomatic pagination iterators (iter_recovery, iter_sleep, iter_cycles, iter_workouts)"
      },
      {
        "title": "scripts/get_recovery.py",
        "body": "python3 scripts/get_recovery.py --today              # Today's recovery\npython3 scripts/get_recovery.py --days 7             # Past week\npython3 scripts/get_recovery.py --start 2026-01-20   # From date\npython3 scripts/get_recovery.py --json               # Raw JSON output"
      },
      {
        "title": "scripts/get_sleep.py",
        "body": "python3 scripts/get_sleep.py --last       # Last night\npython3 scripts/get_sleep.py --days 7     # Past week\npython3 scripts/get_sleep.py --json       # Raw JSON output"
      },
      {
        "title": "scripts/get_workouts.py",
        "body": "python3 scripts/get_workouts.py --days 7             # Past week\npython3 scripts/get_workouts.py --sport running       # Filter by sport\npython3 scripts/get_workouts.py --json                # Raw JSON output"
      },
      {
        "title": "scripts/get_profile.py",
        "body": "python3 scripts/get_profile.py            # Profile + body measurements\npython3 scripts/get_profile.py --json     # Raw JSON output"
      },
      {
        "title": "scripts/install.sh",
        "body": "bash scripts/install.sh                   # Install pip dependencies + setup guide"
      },
      {
        "title": "\"ModuleNotFoundError: No module named 'requests'\"",
        "body": "Install dependencies: pip3 install requests or bash scripts/install.sh"
      },
      {
        "title": "\"Credentials not found at ~/.whoop/credentials.json\"",
        "body": "Create the file with your OAuth client_id and client_secret (see Quick Start step 2)."
      },
      {
        "title": "\"Not authenticated\"",
        "body": "Complete the OAuth authorization flow (see references/oauth.md)."
      },
      {
        "title": "\"401 Unauthorized\" after token refresh fails",
        "body": "Your refresh token has expired. Re-authorize from the authorization URL."
      },
      {
        "title": "\"429 Too Many Requests\"",
        "body": "Rate limit hit. The client automatically retries after the Retry-After period."
      },
      {
        "title": "Empty results",
        "body": "Check your date range — use --days 7 or wider range. Ensure your OAuth scopes include the data type you're requesting."
      },
      {
        "title": "References",
        "body": "references/oauth.md — OAuth setup, token management, authorization flow\nreferences/api-reference.md — Complete API endpoint documentation with response schemas"
      }
    ],
    "body": "WHOOP API\n\nRetrieve and analyze fitness data from WHOOP wearables via the official REST API.\n\nUsage Snippet\n# Install (if using Clawdhub)\nclawdhub install whoop-tracker\n\n# From the skill root:\npython3 scripts/get_recovery.py --today\npython3 scripts/get_sleep.py --last\npython3 scripts/get_workouts.py --days 7\npython3 scripts/get_profile.py\n\nPrerequisites\nPython 3.7+\nrequests library: pip3 install requests\n(or run bash scripts/install.sh)\nQuick Start\n1. Register Application\nGo to https://developer.whoop.com\nCreate a new app and note your client_id and client_secret\nSet redirect URI (e.g., http://localhost:8080/callback)\n2. Save Credentials\nmkdir -p ~/.whoop\ncat > ~/.whoop/credentials.json <<EOF\n{\n  \"client_id\": \"YOUR_CLIENT_ID\",\n  \"client_secret\": \"YOUR_CLIENT_SECRET\"\n}\nEOF\nchmod 600 ~/.whoop/credentials.json\n\n3. Authorize (see references/oauth.md for full guide)\nOpen the authorization URL in browser\nUser grants permissions → redirected with code\nExchange code for tokens via WhoopClient.authenticate(code, redirect_uri)\n4. Fetch Data\n\nAll scripts are run from the skill root directory:\n\n# Today's recovery\npython3 scripts/get_recovery.py --today\n\n# Last night's sleep\npython3 scripts/get_sleep.py --last\n\n# Recent workouts\npython3 scripts/get_workouts.py --days 7\n\n# User profile\npython3 scripts/get_profile.py\n\nCore Data Types\nRecovery\nRecovery Score (0-100): Readiness for strain\nHRV (RMSSD): Heart rate variability in milliseconds\nResting Heart Rate: Morning baseline HR\nSPO2: Blood oxygen percentage\nSkin Temperature: Deviation from baseline in °C\nSleep\nPerformance %: How well you slept vs. your sleep need\nDuration: Total time in bed and per stage (REM, SWS, light, awake)\nEfficiency %: Time asleep / time in bed\nConsistency %: How consistent your sleep schedule is\nRespiratory Rate: Breaths per minute\nSleep Needed/Debt: Baseline need and accumulated debt\nCycle (Daily Strain)\nStrain Score: Cardiovascular load (0-21 scale)\nKilojoules: Energy expenditure\nAverage/Max Heart Rate: Daily HR metrics\nWorkout\nStrain: Activity-specific strain score\nSport: Activity type (running, cycling, etc.)\nHeart Rate Zones: Time spent in each of 6 zones\nDistance/Altitude: GPS metrics (if available)\nAPI Endpoints\n\nBase URL: https://api.prod.whoop.com\n\nSee references/api-reference.md for full endpoint documentation with response schemas.\n\nUser Profile:\n\nGET /v1/user/profile/basic — Name, email\nGET /v1/user/body_measurement — Height, weight, max HR\n\nRecovery:\n\nGET /v1/recovery — All recovery data (paginated)\nGET /v1/cycle/{cycleId}/recovery — Recovery for specific cycle\n\nSleep:\n\nGET /v1/sleep — All sleep records (paginated)\nGET /v1/sleep/{sleepId} — Specific sleep by ID\nGET /v1/cycle/{cycleId}/sleep — Sleep for specific cycle\n\nCycle:\n\nGET /v1/cycle — All physiological cycles (paginated)\nGET /v1/cycle/{cycleId} — Specific cycle by ID\n\nWorkout:\n\nGET /v1/workout — All workouts (paginated)\nGET /v1/workout/{workoutId} — Specific workout by ID\n\nAll collection endpoints support start, end (ISO 8601), limit (max 25), and nextToken (pagination cursor).\n\nRequired OAuth Scopes\nread:profile — User name and email\nread:body_measurement — Height, weight, max HR\nread:recovery — Recovery scores and HRV\nread:sleep — Sleep metrics and stages\nread:cycles — Daily strain data\nread:workout — Activity and workout data\nScripts\nscripts/whoop_client.py\n\nCore API client. Features:\n\nOAuth token storage and auto-refresh\nToken expiry tracking (proactive refresh)\nRate limit handling (429 with retry)\nAutomatic pagination iterators (iter_recovery, iter_sleep, iter_cycles, iter_workouts)\nscripts/get_recovery.py\npython3 scripts/get_recovery.py --today              # Today's recovery\npython3 scripts/get_recovery.py --days 7             # Past week\npython3 scripts/get_recovery.py --start 2026-01-20   # From date\npython3 scripts/get_recovery.py --json               # Raw JSON output\n\nscripts/get_sleep.py\npython3 scripts/get_sleep.py --last       # Last night\npython3 scripts/get_sleep.py --days 7     # Past week\npython3 scripts/get_sleep.py --json       # Raw JSON output\n\nscripts/get_workouts.py\npython3 scripts/get_workouts.py --days 7             # Past week\npython3 scripts/get_workouts.py --sport running       # Filter by sport\npython3 scripts/get_workouts.py --json                # Raw JSON output\n\nscripts/get_profile.py\npython3 scripts/get_profile.py            # Profile + body measurements\npython3 scripts/get_profile.py --json     # Raw JSON output\n\nscripts/install.sh\nbash scripts/install.sh                   # Install pip dependencies + setup guide\n\nTroubleshooting\n\"ModuleNotFoundError: No module named 'requests'\"\n\nInstall dependencies: pip3 install requests or bash scripts/install.sh\n\n\"Credentials not found at ~/.whoop/credentials.json\"\n\nCreate the file with your OAuth client_id and client_secret (see Quick Start step 2).\n\n\"Not authenticated\"\n\nComplete the OAuth authorization flow (see references/oauth.md).\n\n\"401 Unauthorized\" after token refresh fails\n\nYour refresh token has expired. Re-authorize from the authorization URL.\n\n\"429 Too Many Requests\"\n\nRate limit hit. The client automatically retries after the Retry-After period.\n\nEmpty results\n\nCheck your date range — use --days 7 or wider range. Ensure your OAuth scopes include the data type you're requesting.\n\nReferences\nreferences/oauth.md — OAuth setup, token management, authorization flow\nreferences/api-reference.md — Complete API endpoint documentation with response schemas"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/iJaack/whoop-tracker",
    "publisherUrl": "https://clawhub.ai/iJaack/whoop-tracker",
    "owner": "iJaack",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/whoop-tracker",
    "downloadUrl": "https://openagent3.xyz/downloads/whoop-tracker",
    "agentUrl": "https://openagent3.xyz/skills/whoop-tracker/agent",
    "manifestUrl": "https://openagent3.xyz/skills/whoop-tracker/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/whoop-tracker/agent.md"
  }
}