{
  "schemaVersion": "1.0",
  "item": {
    "slug": "starling-home-hub",
    "name": "Starling Home Hub (Nest/Google Home)",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/michaeljmoody/starling-home-hub",
    "canonicalUrl": "https://clawhub.ai/michaeljmoody/starling-home-hub",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/starling-home-hub",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=starling-home-hub",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "references/api-reference.md",
      "scripts/starling.sh",
      "SKILL.md"
    ],
    "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",
      "slug": "starling-home-hub",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-09T11:15:43.163Z",
      "expiresAt": "2026-05-16T11:15:43.163Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=starling-home-hub",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=starling-home-hub",
        "contentDisposition": "attachment; filename=\"starling-home-hub-1.0.2.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "starling-home-hub"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/starling-home-hub"
    },
    "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/starling-home-hub",
    "agentPageUrl": "https://openagent3.xyz/skills/starling-home-hub/agent",
    "manifestUrl": "https://openagent3.xyz/skills/starling-home-hub/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/starling-home-hub/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": "Starling Home Hub (Nest/Google Home)",
        "body": "Community skill — not affiliated with or endorsed by Starling LLC, Google, Nest, or Apple. Nest is a trademark of Google LLC. Starling Home Hub is a product of Starling LLC. This skill requires a Starling Home Hub with firmware 8.0+ and the Developer Connect API enabled."
      },
      {
        "title": "Overview",
        "body": "Control Nest smart home devices through the Starling Home Hub Developer Connect (SDC) local REST API using the starling.sh script."
      },
      {
        "title": "Required Environment Variables",
        "body": "VariableRequiredSecretDescriptionSTARLING_HUB_IPYesNoLocal IP address of your Starling Home Hub (e.g. 192.168.1.151)STARLING_API_KEYYesYesAPI key created in the Starling Home Hub app (Developer Connect section)"
      },
      {
        "title": "Setup",
        "body": "Set these environment variables (never hardcode keys in scripts):\n\nexport STARLING_HUB_IP=\"192.168.1.xxx\"\nexport STARLING_API_KEY=\"your-api-key\"     # From Starling Home Hub app\n\nThe script is at: scripts/starling.sh\n\nOptions: --http (downgrade to HTTP — not recommended), --raw (skip jq formatting)\n\nHTTPS is the default. The script uses port 3443 unless --http is specified."
      },
      {
        "title": "API Key Management",
        "body": "Always use the STARLING_API_KEY env var — never pass keys via --key (visible in ps output)\nNever store keys in scripts, SKILL.md, or version-controlled files\nUse a .env file with restricted permissions: chmod 600 .env\nConsider a secrets manager for production/automated setups"
      },
      {
        "title": "Least Privilege",
        "body": "Create API keys with minimum required permissions in the Starling Home Hub app\nUse read-only keys unless you need to set properties or access camera streams\nCreate separate keys for different automation tasks if possible"
      },
      {
        "title": "TLS Certificate Verification",
        "body": "HTTPS is the default, but the script uses curl -k (skip cert verification) because Starling Home Hub uses a self-signed certificate\nThis is acceptable on a trusted local network but increases MITM risk on untrusted networks\nTo pin the hub's certificate instead: starling.sh --cacert /path/to/hub-cert.pem status\nWhen --cacert is provided, -k is not used and full certificate verification applies"
      },
      {
        "title": "API Key in URL",
        "body": "The Starling Developer Connect API requires the key as a URL query parameter (?key=...) — this is the API's design, not a skill choice\nURL query parameters can appear in access logs and browser history — this is mitigated by the API being local-only (no intermediary proxies/CDNs)\nAlways use HTTPS to encrypt the key in transit on your local network"
      },
      {
        "title": "Network Security",
        "body": "The Starling API is local network only by design — no cloud exposure\nNever port-forward 3080 or 3443 to the internet\nAlways use HTTPS (default) to prevent local network sniffing of API keys and device data"
      },
      {
        "title": "Snapshot Handling",
        "body": "Camera snapshots contain sensitive imagery — don't store in world-readable locations\nThe script sets snapshot files to chmod 600 (owner-only) automatically\nClean up temporary snapshot files when no longer needed"
      },
      {
        "title": "Always Check Status First",
        "body": "Before making device calls, verify the hub is ready:\n\nscripts/starling.sh status\n\nConfirm apiReady: true and connectedToNest: true before proceeding."
      },
      {
        "title": "Respect Rate Limits",
        "body": "These limits are enforced by the Nest cloud:\n\nPOST (set properties): max once per second per device\nSnapshot: max once per 10 seconds per camera\nGET (read properties/device list): no cloud rate limit (local cache)"
      },
      {
        "title": "Idempotent Operations",
        "body": "Safe to retry without side effects:\n\nAll GET operations (status, devices, device, get, snapshot)\nSET operations with the same values (setting temp to 22 when already 22)\nstream-extend (just resets the keepalive timer)\n\nNot idempotent: stream-start (creates a new stream each time)"
      },
      {
        "title": "Error Handling",
        "body": "The script provides actionable error messages:\n\n401: Check API key and permissions — key is never exposed in error output\n404: Verify device ID and property name\n400: Check parameter values and types"
      },
      {
        "title": "List All Devices",
        "body": "scripts/starling.sh devices"
      },
      {
        "title": "Read Device Properties",
        "body": "scripts/starling.sh device <id>          # All properties\nscripts/starling.sh get <id> <property>  # Single property"
      },
      {
        "title": "Set Device Properties",
        "body": "scripts/starling.sh set <id> key=value [key=value...]"
      },
      {
        "title": "Camera Snapshots",
        "body": "scripts/starling.sh snapshot <id> --output photo.jpg --width 1280"
      },
      {
        "title": "Camera Streaming (WebRTC)",
        "body": "scripts/starling.sh stream-start <id> <base64-sdp-offer>\nscripts/starling.sh stream-extend <id> <stream-id>   # Every 60s\nscripts/starling.sh stream-stop <id> <stream-id>"
      },
      {
        "title": "Common Tasks",
        "body": "Set thermostat to 22°C:\n\nscripts/starling.sh set <thermostat-id> targetTemperature=22\n\nSet HVAC mode:\n\nscripts/starling.sh set <thermostat-id> hvacMode=heat\n\nCheck for motion on camera:\n\nscripts/starling.sh get <camera-id> motionDetected\n\nLock/unlock a door:\n\nscripts/starling.sh set <lock-id> targetState=locked\n\nGet camera snapshot:\n\nscripts/starling.sh snapshot <camera-id> --output front-door.jpg\n\nCheck smoke/CO status:\n\nscripts/starling.sh get <protect-id> smokeDetected\nscripts/starling.sh get <protect-id> coDetected\n\nSet home/away:\n\nscripts/starling.sh set <home-away-id> homeState=away"
      },
      {
        "title": "API Reference",
        "body": "See references/api-reference.md for full device property details, writable properties, error codes, and endpoint documentation."
      }
    ],
    "body": "Starling Home Hub (Nest/Google Home)\n\nCommunity skill — not affiliated with or endorsed by Starling LLC, Google, Nest, or Apple. Nest is a trademark of Google LLC. Starling Home Hub is a product of Starling LLC. This skill requires a Starling Home Hub with firmware 8.0+ and the Developer Connect API enabled.\n\nOverview\n\nControl Nest smart home devices through the Starling Home Hub Developer Connect (SDC) local REST API using the starling.sh script.\n\nRequired Environment Variables\nVariable\tRequired\tSecret\tDescription\nSTARLING_HUB_IP\tYes\tNo\tLocal IP address of your Starling Home Hub (e.g. 192.168.1.151)\nSTARLING_API_KEY\tYes\tYes\tAPI key created in the Starling Home Hub app (Developer Connect section)\nSetup\n\nSet these environment variables (never hardcode keys in scripts):\n\nexport STARLING_HUB_IP=\"192.168.1.xxx\"\nexport STARLING_API_KEY=\"your-api-key\"     # From Starling Home Hub app\n\n\nThe script is at: scripts/starling.sh\n\nOptions: --http (downgrade to HTTP — not recommended), --raw (skip jq formatting)\n\nHTTPS is the default. The script uses port 3443 unless --http is specified.\n\nSecurity\nAPI Key Management\nAlways use the STARLING_API_KEY env var — never pass keys via --key (visible in ps output)\nNever store keys in scripts, SKILL.md, or version-controlled files\nUse a .env file with restricted permissions: chmod 600 .env\nConsider a secrets manager for production/automated setups\nLeast Privilege\nCreate API keys with minimum required permissions in the Starling Home Hub app\nUse read-only keys unless you need to set properties or access camera streams\nCreate separate keys for different automation tasks if possible\nTLS Certificate Verification\nHTTPS is the default, but the script uses curl -k (skip cert verification) because Starling Home Hub uses a self-signed certificate\nThis is acceptable on a trusted local network but increases MITM risk on untrusted networks\nTo pin the hub's certificate instead: starling.sh --cacert /path/to/hub-cert.pem status\nWhen --cacert is provided, -k is not used and full certificate verification applies\nAPI Key in URL\nThe Starling Developer Connect API requires the key as a URL query parameter (?key=...) — this is the API's design, not a skill choice\nURL query parameters can appear in access logs and browser history — this is mitigated by the API being local-only (no intermediary proxies/CDNs)\nAlways use HTTPS to encrypt the key in transit on your local network\nNetwork Security\nThe Starling API is local network only by design — no cloud exposure\nNever port-forward 3080 or 3443 to the internet\nAlways use HTTPS (default) to prevent local network sniffing of API keys and device data\nSnapshot Handling\nCamera snapshots contain sensitive imagery — don't store in world-readable locations\nThe script sets snapshot files to chmod 600 (owner-only) automatically\nClean up temporary snapshot files when no longer needed\nBest Practices\nAlways Check Status First\n\nBefore making device calls, verify the hub is ready:\n\nscripts/starling.sh status\n\n\nConfirm apiReady: true and connectedToNest: true before proceeding.\n\nRespect Rate Limits\n\nThese limits are enforced by the Nest cloud:\n\nPOST (set properties): max once per second per device\nSnapshot: max once per 10 seconds per camera\nGET (read properties/device list): no cloud rate limit (local cache)\nIdempotent Operations\n\nSafe to retry without side effects:\n\nAll GET operations (status, devices, device, get, snapshot)\nSET operations with the same values (setting temp to 22 when already 22)\nstream-extend (just resets the keepalive timer)\n\nNot idempotent: stream-start (creates a new stream each time)\n\nError Handling\n\nThe script provides actionable error messages:\n\n401: Check API key and permissions — key is never exposed in error output\n404: Verify device ID and property name\n400: Check parameter values and types\nCommon Workflows\nList All Devices\nscripts/starling.sh devices\n\nRead Device Properties\nscripts/starling.sh device <id>          # All properties\nscripts/starling.sh get <id> <property>  # Single property\n\nSet Device Properties\nscripts/starling.sh set <id> key=value [key=value...]\n\nCamera Snapshots\nscripts/starling.sh snapshot <id> --output photo.jpg --width 1280\n\nCamera Streaming (WebRTC)\nscripts/starling.sh stream-start <id> <base64-sdp-offer>\nscripts/starling.sh stream-extend <id> <stream-id>   # Every 60s\nscripts/starling.sh stream-stop <id> <stream-id>\n\nCommon Tasks\n\nSet thermostat to 22°C:\n\nscripts/starling.sh set <thermostat-id> targetTemperature=22\n\n\nSet HVAC mode:\n\nscripts/starling.sh set <thermostat-id> hvacMode=heat\n\n\nCheck for motion on camera:\n\nscripts/starling.sh get <camera-id> motionDetected\n\n\nLock/unlock a door:\n\nscripts/starling.sh set <lock-id> targetState=locked\n\n\nGet camera snapshot:\n\nscripts/starling.sh snapshot <camera-id> --output front-door.jpg\n\n\nCheck smoke/CO status:\n\nscripts/starling.sh get <protect-id> smokeDetected\nscripts/starling.sh get <protect-id> coDetected\n\n\nSet home/away:\n\nscripts/starling.sh set <home-away-id> homeState=away\n\nAPI Reference\n\nSee references/api-reference.md for full device property details, writable properties, error codes, and endpoint documentation."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/michaeljmoody/starling-home-hub",
    "publisherUrl": "https://clawhub.ai/michaeljmoody/starling-home-hub",
    "owner": "michaeljmoody",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/starling-home-hub",
    "downloadUrl": "https://openagent3.xyz/downloads/starling-home-hub",
    "agentUrl": "https://openagent3.xyz/skills/starling-home-hub/agent",
    "manifestUrl": "https://openagent3.xyz/skills/starling-home-hub/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/starling-home-hub/agent.md"
  }
}