{
  "schemaVersion": "1.0",
  "item": {
    "slug": "withings-family",
    "name": "Withings Family",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/odrobnik/withings-family",
    "canonicalUrl": "https://clawhub.ai/odrobnik/withings-family",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/withings-family",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=withings-family",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/withings.py",
      "scripts/withings_oauth_local.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/withings-family"
    },
    "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/withings-family",
    "agentPageUrl": "https://openagent3.xyz/skills/withings-family/agent",
    "manifestUrl": "https://openagent3.xyz/skills/withings-family/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/withings-family/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": "Multi-User Support",
        "body": "This skill natively supports multiple users with per-user token files:\n\ntokens-alice.json\ntokens-bob.json\ntokens-charlie.json\n\nEach family member authenticates once via OAuth. Their tokens are stored separately and refreshed automatically. No token copying or switching required — just pass the user ID as the first argument.\n\npython3 scripts/withings.py alice weight\npython3 scripts/withings.py bob sleep\npython3 scripts/withings.py charlie activity"
      },
      {
        "title": "When to Use This Skill",
        "body": "Use this skill when the user:\n\nAsks about their weight or weight history\nWants to see their body composition (fat %, muscle mass, bone mass, hydration)\nRequests their daily activity (steps, distance, calories burned)\nAsks about their sleep data (duration, quality, deep sleep, REM)\nMentions \"Withings\" or any Withings device (Body+, Sleep Analyzer, ScanWatch, etc.)\nWants to track their or their family's health progress over time"
      },
      {
        "title": "Setup: Creating a Withings Developer App",
        "body": "Before using this skill, you need to create a free Withings developer application to get your API credentials."
      },
      {
        "title": "Step 1: Create a Withings Developer Account",
        "body": "Go to Withings Developer Portal\nClick Sign Up or Log In if you already have a Withings account\nAccept the Developer Terms of Service"
      },
      {
        "title": "Step 2: Create Your Application",
        "body": "Navigate to My Apps → Create an Application\nFill in the application details:\n\nApplication Name: Choose a name (e.g., \"My Moltbot Health\")\nDescription: Brief description of your use case\nContact Email: Your email address\nCallback URL: http://localhost:18081 (required for OAuth)\nApplication Type: Select \"Personal Use\" or appropriate type\n\n\nSubmit the application"
      },
      {
        "title": "Step 3: Get Your Credentials",
        "body": "Once your application is created:\n\nGo to My Apps and select your application\nYou'll find:\n\nClient ID → Set as WITHINGS_CLIENT_ID environment variable\nClient Secret → Set as WITHINGS_CLIENT_SECRET environment variable"
      },
      {
        "title": "Step 4: Configure Environment Variables",
        "body": "Add these to your Moltbot environment:\n\nexport WITHINGS_CLIENT_ID=\"your_client_id_here\"\nexport WITHINGS_CLIENT_SECRET=\"your_client_secret_here\"\n\nOr create a .env file in ~/.openclaw/withings-family/.env (legacy: ~/.moltbot/withings-family/.env):\n\nWITHINGS_CLIENT_ID=your_client_id_here\nWITHINGS_CLIENT_SECRET=your_client_secret_here"
      },
      {
        "title": "Configuration",
        "body": "The skill provides two scripts (in scripts/):\n\nscripts/withings_oauth_local.py — Automatic OAuth with local callback server (recommended)\nscripts/withings.py — Main CLI + manual OAuth\n\nCredentials location: ~/.openclaw/withings-family/ (legacy: ~/.moltbot/withings-family/)\n\n.env — Client ID/Secret (optional, can use ENV vars instead)\ntokens-<userId>.json — OAuth tokens per user (mode 600)\n\nBefore any data retrieval, check if the user is authenticated. If an error mentions \"No token found\", guide the user through the initial authentication process for that specific user."
      },
      {
        "title": "Method A: Automatic OAuth (Recommended)",
        "body": "Uses a local callback server to capture the code automatically:\n\npython3 {baseDir}/scripts/withings_oauth_local.py <userId>\n\nExample:\n\npython3 {baseDir}/scripts/withings_oauth_local.py alice\n\nThe script will:\n\nPrint the authorization URL\nStart a local server on localhost:18081\nWait for the redirect\nAutomatically capture the code and exchange for tokens\nSave tokens to tokens-<userId>.json"
      },
      {
        "title": "Method B: Manual OAuth",
        "body": "Traditional two-step flow (see \"Authentication\" command below)."
      },
      {
        "title": "Available Commands",
        "body": "All commands follow the format:\n\npython3 {baseDir}/scripts/withings.py <userId> <command> [options]"
      },
      {
        "title": "1. Authentication",
        "body": "First-time setup for a user — generates the OAuth URL:\n\npython3 {baseDir}/scripts/withings.py alice auth\n\nAfter the user visits the URL and gets the authorization code:\n\npython3 {baseDir}/scripts/withings.py alice auth YOUR_CODE_HERE\n\nRepeat for each family member who needs access."
      },
      {
        "title": "2. Get Weight",
        "body": "Retrieve the latest weight measurements:\n\npython3 {baseDir}/scripts/withings.py alice weight\n\nReturns the 5 most recent weight entries in JSON format.\n\nExample output:\n\n[\n  { \"date\": \"2026-01-17T08:30:00.000Z\", \"weight\": \"75.40 kg\" },\n  { \"date\": \"2026-01-16T08:15:00.000Z\", \"weight\": \"75.65 kg\" }\n]"
      },
      {
        "title": "3. Get Body Composition",
        "body": "Retrieve comprehensive body metrics (fat, muscle, bone, water, BMI):\n\npython3 {baseDir}/scripts/withings.py alice body\n\nReturns the 5 most recent body composition measurements.\n\nExample output:\n\n[\n  {\n    \"date\": \"2026-01-17T08:30:00.000Z\",\n    \"weight\": \"75.40 kg\",\n    \"fat_percent\": \"18.5%\",\n    \"fat_mass\": \"13.95 kg\",\n    \"muscle_mass\": \"35.20 kg\",\n    \"bone_mass\": \"3.10 kg\",\n    \"hydration\": \"55.2%\"\n  }\n]"
      },
      {
        "title": "4. Get Activity",
        "body": "Retrieve daily activity data (steps, distance, calories):\n\npython3 {baseDir}/scripts/withings.py alice activity\n\nOptionally specify the number of days (default: 7):\n\npython3 {baseDir}/scripts/withings.py alice activity 30\n\nExample output:\n\n[\n  {\n    \"date\": \"2026-01-17\",\n    \"steps\": 8542,\n    \"distance\": \"6.23 km\",\n    \"calories\": 2150,\n    \"active_calories\": 450,\n    \"soft_activity\": \"45 min\",\n    \"moderate_activity\": \"22 min\",\n    \"intense_activity\": \"8 min\"\n  }\n]"
      },
      {
        "title": "5. Get Sleep",
        "body": "Retrieve sleep data and quality:\n\npython3 {baseDir}/scripts/withings.py alice sleep\n\nOptionally specify the number of days (default: 7):\n\npython3 {baseDir}/scripts/withings.py alice sleep 14\n\nExample output:\n\n[\n  {\n    \"date\": \"2026-01-17\",\n    \"start\": \"23:15\",\n    \"end\": \"07:30\",\n    \"duration\": \"8h 15min\",\n    \"deep_sleep\": \"1h 45min\",\n    \"light_sleep\": \"4h 30min\",\n    \"rem_sleep\": \"1h 30min\",\n    \"awake\": \"30min\",\n    \"sleep_score\": 82\n  }\n]"
      },
      {
        "title": "Error Handling",
        "body": "Common errors and how to resolve them:\n\nErrorCauseSolution\"No token found\"User not authenticatedRun python3 scripts/withings.py <userId> auth and follow the OAuth flow\"Failed to refresh token\"Token expired and refresh failedRe-authenticate with python3 scripts/withings.py <userId> auth\"API Error Status: 401\"Invalid or expired credentialsCheck your CLIENT_ID and CLIENT_SECRET, re-authenticate\"API Error Status: 503\"Withings API temporarily unavailableWait and retry laterEmpty dataNo measurements in the requested periodUser needs to sync their Withings device"
      },
      {
        "title": "Notes",
        "body": "Multi-user: Each family member has their own token file (tokens-{userId}.json)\nToken refresh: Tokens are automatically refreshed when they expire\nScopes: Withings API scopes used: user.metrics, user.activity\nDevice support: Data availability depends on which Withings devices the user owns\nBody composition: Requires a compatible smart scale (e.g., Body+, Body Comp)"
      }
    ],
    "body": "This skill allows you to interact with Withings accounts for multiple family members to retrieve comprehensive health metrics from Withings devices (smart scales, sleep analyzers, activity trackers, etc.).\n\nMulti-User Support\n\nThis skill natively supports multiple users with per-user token files:\n\ntokens-alice.json\ntokens-bob.json\ntokens-charlie.json\n\n\nEach family member authenticates once via OAuth. Their tokens are stored separately and refreshed automatically. No token copying or switching required — just pass the user ID as the first argument.\n\npython3 scripts/withings.py alice weight\npython3 scripts/withings.py bob sleep\npython3 scripts/withings.py charlie activity\n\nWhen to Use This Skill\n\nUse this skill when the user:\n\nAsks about their weight or weight history\nWants to see their body composition (fat %, muscle mass, bone mass, hydration)\nRequests their daily activity (steps, distance, calories burned)\nAsks about their sleep data (duration, quality, deep sleep, REM)\nMentions \"Withings\" or any Withings device (Body+, Sleep Analyzer, ScanWatch, etc.)\nWants to track their or their family's health progress over time\nSetup: Creating a Withings Developer App\n\nBefore using this skill, you need to create a free Withings developer application to get your API credentials.\n\nStep 1: Create a Withings Developer Account\nGo to Withings Developer Portal\nClick Sign Up or Log In if you already have a Withings account\nAccept the Developer Terms of Service\nStep 2: Create Your Application\nNavigate to My Apps → Create an Application\nFill in the application details:\nApplication Name: Choose a name (e.g., \"My Moltbot Health\")\nDescription: Brief description of your use case\nContact Email: Your email address\nCallback URL: http://localhost:18081 (required for OAuth)\nApplication Type: Select \"Personal Use\" or appropriate type\nSubmit the application\nStep 3: Get Your Credentials\n\nOnce your application is created:\n\nGo to My Apps and select your application\nYou'll find:\nClient ID → Set as WITHINGS_CLIENT_ID environment variable\nClient Secret → Set as WITHINGS_CLIENT_SECRET environment variable\nStep 4: Configure Environment Variables\n\nAdd these to your Moltbot environment:\n\nexport WITHINGS_CLIENT_ID=\"your_client_id_here\"\nexport WITHINGS_CLIENT_SECRET=\"your_client_secret_here\"\n\n\nOr create a .env file in ~/.openclaw/withings-family/.env (legacy: ~/.moltbot/withings-family/.env):\n\nWITHINGS_CLIENT_ID=your_client_id_here\nWITHINGS_CLIENT_SECRET=your_client_secret_here\n\nConfiguration\n\nThe skill provides two scripts (in scripts/):\n\nscripts/withings_oauth_local.py — Automatic OAuth with local callback server (recommended)\nscripts/withings.py — Main CLI + manual OAuth\n\nCredentials location: ~/.openclaw/withings-family/ (legacy: ~/.moltbot/withings-family/)\n\n.env — Client ID/Secret (optional, can use ENV vars instead)\ntokens-<userId>.json — OAuth tokens per user (mode 600)\n\nBefore any data retrieval, check if the user is authenticated. If an error mentions \"No token found\", guide the user through the initial authentication process for that specific user.\n\nAuthentication Methods\nMethod A: Automatic OAuth (Recommended)\n\nUses a local callback server to capture the code automatically:\n\npython3 {baseDir}/scripts/withings_oauth_local.py <userId>\n\n\nExample:\n\npython3 {baseDir}/scripts/withings_oauth_local.py alice\n\n\nThe script will:\n\nPrint the authorization URL\nStart a local server on localhost:18081\nWait for the redirect\nAutomatically capture the code and exchange for tokens\nSave tokens to tokens-<userId>.json\nMethod B: Manual OAuth\n\nTraditional two-step flow (see \"Authentication\" command below).\n\nAvailable Commands\n\nAll commands follow the format:\n\npython3 {baseDir}/scripts/withings.py <userId> <command> [options]\n\n1. Authentication\n\nFirst-time setup for a user — generates the OAuth URL:\n\npython3 {baseDir}/scripts/withings.py alice auth\n\n\nAfter the user visits the URL and gets the authorization code:\n\npython3 {baseDir}/scripts/withings.py alice auth YOUR_CODE_HERE\n\n\nRepeat for each family member who needs access.\n\n2. Get Weight\n\nRetrieve the latest weight measurements:\n\npython3 {baseDir}/scripts/withings.py alice weight\n\n\nReturns the 5 most recent weight entries in JSON format.\n\nExample output:\n\n[\n  { \"date\": \"2026-01-17T08:30:00.000Z\", \"weight\": \"75.40 kg\" },\n  { \"date\": \"2026-01-16T08:15:00.000Z\", \"weight\": \"75.65 kg\" }\n]\n\n3. Get Body Composition\n\nRetrieve comprehensive body metrics (fat, muscle, bone, water, BMI):\n\npython3 {baseDir}/scripts/withings.py alice body\n\n\nReturns the 5 most recent body composition measurements.\n\nExample output:\n\n[\n  {\n    \"date\": \"2026-01-17T08:30:00.000Z\",\n    \"weight\": \"75.40 kg\",\n    \"fat_percent\": \"18.5%\",\n    \"fat_mass\": \"13.95 kg\",\n    \"muscle_mass\": \"35.20 kg\",\n    \"bone_mass\": \"3.10 kg\",\n    \"hydration\": \"55.2%\"\n  }\n]\n\n4. Get Activity\n\nRetrieve daily activity data (steps, distance, calories):\n\npython3 {baseDir}/scripts/withings.py alice activity\n\n\nOptionally specify the number of days (default: 7):\n\npython3 {baseDir}/scripts/withings.py alice activity 30\n\n\nExample output:\n\n[\n  {\n    \"date\": \"2026-01-17\",\n    \"steps\": 8542,\n    \"distance\": \"6.23 km\",\n    \"calories\": 2150,\n    \"active_calories\": 450,\n    \"soft_activity\": \"45 min\",\n    \"moderate_activity\": \"22 min\",\n    \"intense_activity\": \"8 min\"\n  }\n]\n\n5. Get Sleep\n\nRetrieve sleep data and quality:\n\npython3 {baseDir}/scripts/withings.py alice sleep\n\n\nOptionally specify the number of days (default: 7):\n\npython3 {baseDir}/scripts/withings.py alice sleep 14\n\n\nExample output:\n\n[\n  {\n    \"date\": \"2026-01-17\",\n    \"start\": \"23:15\",\n    \"end\": \"07:30\",\n    \"duration\": \"8h 15min\",\n    \"deep_sleep\": \"1h 45min\",\n    \"light_sleep\": \"4h 30min\",\n    \"rem_sleep\": \"1h 30min\",\n    \"awake\": \"30min\",\n    \"sleep_score\": 82\n  }\n]\n\nError Handling\n\nCommon errors and how to resolve them:\n\nError\tCause\tSolution\n\"No token found\"\tUser not authenticated\tRun python3 scripts/withings.py <userId> auth and follow the OAuth flow\n\"Failed to refresh token\"\tToken expired and refresh failed\tRe-authenticate with python3 scripts/withings.py <userId> auth\n\"API Error Status: 401\"\tInvalid or expired credentials\tCheck your CLIENT_ID and CLIENT_SECRET, re-authenticate\n\"API Error Status: 503\"\tWithings API temporarily unavailable\tWait and retry later\nEmpty data\tNo measurements in the requested period\tUser needs to sync their Withings device\nNotes\nMulti-user: Each family member has their own token file (tokens-{userId}.json)\nToken refresh: Tokens are automatically refreshed when they expire\nScopes: Withings API scopes used: user.metrics, user.activity\nDevice support: Data availability depends on which Withings devices the user owns\nBody composition: Requires a compatible smart scale (e.g., Body+, Body Comp)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/odrobnik/withings-family",
    "publisherUrl": "https://clawhub.ai/odrobnik/withings-family",
    "owner": "odrobnik",
    "version": "1.1.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/withings-family",
    "downloadUrl": "https://openagent3.xyz/downloads/withings-family",
    "agentUrl": "https://openagent3.xyz/skills/withings-family/agent",
    "manifestUrl": "https://openagent3.xyz/skills/withings-family/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/withings-family/agent.md"
  }
}