{
  "schemaVersion": "1.0",
  "item": {
    "slug": "moltbot-ha",
    "name": "Moltbot Home Assistant",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/iamvaleriofantozzi/moltbot-ha",
    "canonicalUrl": "https://clawhub.ai/iamvaleriofantozzi/moltbot-ha",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/moltbot-ha",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=moltbot-ha",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "config.example.toml",
      "CHANGELOG.md",
      "README.md",
      "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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-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/moltbot-ha"
    },
    "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/moltbot-ha",
    "agentPageUrl": "https://openagent3.xyz/skills/moltbot-ha/agent",
    "manifestUrl": "https://openagent3.xyz/skills/moltbot-ha/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/moltbot-ha/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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Home Assistant Control",
        "body": "Control your smart home via Home Assistant API using the moltbot-ha CLI tool."
      },
      {
        "title": "1. Install moltbot-ha",
        "body": "uv tool install moltbot-ha"
      },
      {
        "title": "2. Initialize Configuration",
        "body": "moltbot-ha config init\n\nThe setup will interactively ask for:\n\nHome Assistant URL (e.g., http://192.168.1.100:8123)\nToken storage preference (environment variable recommended)"
      },
      {
        "title": "3. Set Environment Variable",
        "body": "Set your Home Assistant long-lived access token:\n\nexport HA_TOKEN=\"your_token_here\"\n\nTo create a token:\n\nOpen Home Assistant → Profile (bottom left)\nScroll to \"Long-Lived Access Tokens\"\nClick \"Create Token\"\nCopy the token and set as HA_TOKEN environment variable"
      },
      {
        "title": "4. Test Connection",
        "body": "moltbot-ha test"
      },
      {
        "title": "List All Entities",
        "body": "moltbot-ha list"
      },
      {
        "title": "List by Domain",
        "body": "moltbot-ha list light\nmoltbot-ha list switch\nmoltbot-ha list cover"
      },
      {
        "title": "Get Entity State",
        "body": "moltbot-ha state light.kitchen\nmoltbot-ha state sensor.temperature_living_room"
      },
      {
        "title": "Turn On/Off",
        "body": "# Turn on\nmoltbot-ha on light.living_room\nmoltbot-ha on switch.coffee_maker\n\n# Turn off\nmoltbot-ha off light.bedroom\nmoltbot-ha off switch.fan\n\n# Toggle\nmoltbot-ha toggle light.hallway"
      },
      {
        "title": "Set Attributes",
        "body": "# Set brightness (percentage)\nmoltbot-ha set light.bedroom brightness_pct=50\n\n# Set color temperature\nmoltbot-ha set light.office color_temp=300\n\n# Multiple attributes\nmoltbot-ha set light.kitchen brightness_pct=80 color_temp=350"
      },
      {
        "title": "Call Services",
        "body": "# Activate a scene\nmoltbot-ha call scene.turn_on entity_id=scene.movie_time\n\n# Set thermostat temperature\nmoltbot-ha call climate.set_temperature entity_id=climate.living_room temperature=21\n\n# Close cover (blinds, garage)\nmoltbot-ha call cover.close_cover entity_id=cover.garage"
      },
      {
        "title": "Generic Service Call",
        "body": "# With parameters\nmoltbot-ha call automation.trigger entity_id=automation.morning_routine\n\n# With JSON data\nmoltbot-ha call script.turn_on --json '{\"entity_id\": \"script.bedtime\", \"variables\": {\"brightness\": 10}}'"
      },
      {
        "title": "Safety & Confirmations",
        "body": "moltbot-ha implements a 3-level safety system to prevent accidental actions:"
      },
      {
        "title": "Safety Level 3 (Default - Recommended)",
        "body": "Critical operations require explicit confirmation:\n\nlock.*: Door locks\nalarm_control_panel.*: Security alarms\ncover.*: Garage doors, blinds"
      },
      {
        "title": "How Confirmation Works",
        "body": "Attempt critical action:\n\nmoltbot-ha on cover.garage\n\nTool returns error:\n\n⚠️  CRITICAL ACTION REQUIRES CONFIRMATION\n\nAction: turn_on on cover.garage\n\nThis is a critical operation that requires explicit user approval.\nAsk the user to confirm, then retry with --force flag.\n\nExample: moltbot-ha on cover.garage --force\n\nAgent sees this error and asks you:\n\n\"Opening the garage door is a critical action. Do you want to proceed?\"\n\nYou confirm:\n\n\"Yes, open it\"\n\nAgent retries with --force:\n\nmoltbot-ha on cover.garage --force\n\nAction executes successfully."
      },
      {
        "title": "Important: Never Use --force Without User Consent",
        "body": "⚠️ CRITICAL RULE FOR AGENTS:\n\nNEVER add --force flag without explicit user confirmation\nALWAYS show the user which critical action is being attempted\nWAIT for explicit \"yes\" / \"confirm\" / \"approve\" before using --force\nBE SMART about what constitutes confirmation: \"Yes\", \"OK\", \"Sure\", \"Do it\", \"Confirmed\", or any affirmative response in the context of the request is sufficient. You do NOT need the user to type a specific phrase verbatim."
      },
      {
        "title": "Blocked Entities",
        "body": "Some entities can be permanently blocked in configuration:\n\n[safety]\nblocked_entities = [\"switch.main_breaker\", \"lock.front_door\"]\n\nThese cannot be controlled even with --force."
      },
      {
        "title": "Configuration",
        "body": "Edit ~/.config/moltbot-ha/config.toml:\n\n[safety]\nlevel = 3  # 0=disabled, 1=log-only, 2=confirm all writes, 3=confirm critical\n\ncritical_domains = [\"lock\", \"alarm_control_panel\", \"cover\"]\n\nblocked_entities = []  # Add entities that should never be automated\n\nallowed_entities = []  # If set, ONLY these entities are accessible (supports wildcards)"
      },
      {
        "title": "Morning Routine",
        "body": "moltbot-ha on light.bedroom brightness_pct=30\nmoltbot-ha call cover.open_cover entity_id=cover.bedroom_blinds\nmoltbot-ha call climate.set_temperature entity_id=climate.bedroom temperature=21"
      },
      {
        "title": "Night Mode",
        "body": "moltbot-ha off light.*  # Requires wildcard support in future\nmoltbot-ha call scene.turn_on entity_id=scene.goodnight\nmoltbot-ha call cover.close_cover entity_id=cover.all_blinds"
      },
      {
        "title": "Check Sensors",
        "body": "moltbot-ha state sensor.temperature_living_room\nmoltbot-ha state sensor.humidity_bathroom\nmoltbot-ha state binary_sensor.motion_hallway"
      },
      {
        "title": "Connection Failed",
        "body": "Verify HA_URL in config matches your Home Assistant URL\nEnsure Home Assistant is reachable from the machine running moltbot-ha\nCheck firewall settings"
      },
      {
        "title": "401 Unauthorized",
        "body": "Verify HA_TOKEN is set correctly\nEnsure token is a Long-Lived Access Token (not temporary)\nCheck token hasn't been revoked in Home Assistant"
      },
      {
        "title": "Entity Not Found",
        "body": "Use moltbot-ha list to discover correct entity IDs\nEntity IDs are case-sensitive\nFormat is domain.entity_name (e.g., light.kitchen, not Light.Kitchen)"
      },
      {
        "title": "Docker Networking",
        "body": "If running in Docker and can't reach Home Assistant on homeassistant.local:\n\nUse IP address instead: http://192.168.1.100:8123\nOr use Tailscale for reliable mesh networking"
      },
      {
        "title": "Configuration Reference",
        "body": "Full config file (~/.config/moltbot-ha/config.toml):\n\n[server]\nurl = \"http://homeassistant.local:8123\"\n# token = \"optional_here_prefer_env_var\"\n\n[safety]\nlevel = 3\ncritical_domains = [\"lock\", \"alarm_control_panel\", \"cover\"]\nblocked_entities = []\nallowed_entities = []\n\n[logging]\nenabled = true\npath = \"~/.config/moltbot-ha/actions.log\"\nlevel = \"INFO\""
      },
      {
        "title": "Discovery Pattern",
        "body": "User: \"What lights do I have?\"\nAgent: moltbot-ha list light\nAgent: \"You have these lights: light.living_room, light.kitchen, light.bedroom\""
      },
      {
        "title": "Safe Action Pattern",
        "body": "User: \"Turn on the living room light\"\nAgent: moltbot-ha on light.living_room\nAgent: \"Living room light is now on\""
      },
      {
        "title": "Critical Action Pattern",
        "body": "User: \"Open the garage\"\nAgent: moltbot-ha on cover.garage\n<receives CriticalActionError>\nAgent: \"⚠️ Opening the garage door is a critical action. Do you want to proceed?\"\nUser: \"Yes, open it\"\nAgent: moltbot-ha on cover.garage --force\nAgent: \"Garage door is opening\""
      },
      {
        "title": "Notes",
        "body": "All write actions are logged to ~/.config/moltbot-ha/actions.log by default\nSafety settings are configurable per installation\nWildcards (*) are supported in allowed_entities and blocked_entities\nJSON output available with --json flag for programmatic parsing"
      }
    ],
    "body": "Home Assistant Control\n\nControl your smart home via Home Assistant API using the moltbot-ha CLI tool.\n\nSetup\n1. Install moltbot-ha\nuv tool install moltbot-ha\n\n2. Initialize Configuration\nmoltbot-ha config init\n\n\nThe setup will interactively ask for:\n\nHome Assistant URL (e.g., http://192.168.1.100:8123)\nToken storage preference (environment variable recommended)\n3. Set Environment Variable\n\nSet your Home Assistant long-lived access token:\n\nexport HA_TOKEN=\"your_token_here\"\n\n\nTo create a token:\n\nOpen Home Assistant → Profile (bottom left)\nScroll to \"Long-Lived Access Tokens\"\nClick \"Create Token\"\nCopy the token and set as HA_TOKEN environment variable\n4. Test Connection\nmoltbot-ha test\n\nDiscovery Commands\nList All Entities\nmoltbot-ha list\n\nList by Domain\nmoltbot-ha list light\nmoltbot-ha list switch\nmoltbot-ha list cover\n\nGet Entity State\nmoltbot-ha state light.kitchen\nmoltbot-ha state sensor.temperature_living_room\n\nAction Commands\nTurn On/Off\n# Turn on\nmoltbot-ha on light.living_room\nmoltbot-ha on switch.coffee_maker\n\n# Turn off\nmoltbot-ha off light.bedroom\nmoltbot-ha off switch.fan\n\n# Toggle\nmoltbot-ha toggle light.hallway\n\nSet Attributes\n# Set brightness (percentage)\nmoltbot-ha set light.bedroom brightness_pct=50\n\n# Set color temperature\nmoltbot-ha set light.office color_temp=300\n\n# Multiple attributes\nmoltbot-ha set light.kitchen brightness_pct=80 color_temp=350\n\nCall Services\n# Activate a scene\nmoltbot-ha call scene.turn_on entity_id=scene.movie_time\n\n# Set thermostat temperature\nmoltbot-ha call climate.set_temperature entity_id=climate.living_room temperature=21\n\n# Close cover (blinds, garage)\nmoltbot-ha call cover.close_cover entity_id=cover.garage\n\nGeneric Service Call\n# With parameters\nmoltbot-ha call automation.trigger entity_id=automation.morning_routine\n\n# With JSON data\nmoltbot-ha call script.turn_on --json '{\"entity_id\": \"script.bedtime\", \"variables\": {\"brightness\": 10}}'\n\nSafety & Confirmations\n\nmoltbot-ha implements a 3-level safety system to prevent accidental actions:\n\nSafety Level 3 (Default - Recommended)\n\nCritical operations require explicit confirmation:\n\nlock.*: Door locks\nalarm_control_panel.*: Security alarms\ncover.*: Garage doors, blinds\nHow Confirmation Works\nAttempt critical action:\nmoltbot-ha on cover.garage\n\nTool returns error:\n⚠️  CRITICAL ACTION REQUIRES CONFIRMATION\n\nAction: turn_on on cover.garage\n\nThis is a critical operation that requires explicit user approval.\nAsk the user to confirm, then retry with --force flag.\n\nExample: moltbot-ha on cover.garage --force\n\nAgent sees this error and asks you:\n\n\"Opening the garage door is a critical action. Do you want to proceed?\"\n\nYou confirm:\n\n\"Yes, open it\"\n\nAgent retries with --force:\nmoltbot-ha on cover.garage --force\n\nAction executes successfully.\nImportant: Never Use --force Without User Consent\n\n⚠️ CRITICAL RULE FOR AGENTS:\n\nNEVER add --force flag without explicit user confirmation\nALWAYS show the user which critical action is being attempted\nWAIT for explicit \"yes\" / \"confirm\" / \"approve\" before using --force\nBE SMART about what constitutes confirmation: \"Yes\", \"OK\", \"Sure\", \"Do it\", \"Confirmed\", or any affirmative response in the context of the request is sufficient. You do NOT need the user to type a specific phrase verbatim.\nBlocked Entities\n\nSome entities can be permanently blocked in configuration:\n\n[safety]\nblocked_entities = [\"switch.main_breaker\", \"lock.front_door\"]\n\n\nThese cannot be controlled even with --force.\n\nConfiguration\n\nEdit ~/.config/moltbot-ha/config.toml:\n\n[safety]\nlevel = 3  # 0=disabled, 1=log-only, 2=confirm all writes, 3=confirm critical\n\ncritical_domains = [\"lock\", \"alarm_control_panel\", \"cover\"]\n\nblocked_entities = []  # Add entities that should never be automated\n\nallowed_entities = []  # If set, ONLY these entities are accessible (supports wildcards)\n\nCommon Workflows\nMorning Routine\nmoltbot-ha on light.bedroom brightness_pct=30\nmoltbot-ha call cover.open_cover entity_id=cover.bedroom_blinds\nmoltbot-ha call climate.set_temperature entity_id=climate.bedroom temperature=21\n\nNight Mode\nmoltbot-ha off light.*  # Requires wildcard support in future\nmoltbot-ha call scene.turn_on entity_id=scene.goodnight\nmoltbot-ha call cover.close_cover entity_id=cover.all_blinds\n\nCheck Sensors\nmoltbot-ha state sensor.temperature_living_room\nmoltbot-ha state sensor.humidity_bathroom\nmoltbot-ha state binary_sensor.motion_hallway\n\nTroubleshooting\nConnection Failed\nVerify HA_URL in config matches your Home Assistant URL\nEnsure Home Assistant is reachable from the machine running moltbot-ha\nCheck firewall settings\n401 Unauthorized\nVerify HA_TOKEN is set correctly\nEnsure token is a Long-Lived Access Token (not temporary)\nCheck token hasn't been revoked in Home Assistant\nEntity Not Found\nUse moltbot-ha list to discover correct entity IDs\nEntity IDs are case-sensitive\nFormat is domain.entity_name (e.g., light.kitchen, not Light.Kitchen)\nDocker Networking\n\nIf running in Docker and can't reach Home Assistant on homeassistant.local:\n\nUse IP address instead: http://192.168.1.100:8123\nOr use Tailscale for reliable mesh networking\nConfiguration Reference\n\nFull config file (~/.config/moltbot-ha/config.toml):\n\n[server]\nurl = \"http://homeassistant.local:8123\"\n# token = \"optional_here_prefer_env_var\"\n\n[safety]\nlevel = 3\ncritical_domains = [\"lock\", \"alarm_control_panel\", \"cover\"]\nblocked_entities = []\nallowed_entities = []\n\n[logging]\nenabled = true\npath = \"~/.config/moltbot-ha/actions.log\"\nlevel = \"INFO\"\n\nExamples for Agents\nDiscovery Pattern\nUser: \"What lights do I have?\"\nAgent: moltbot-ha list light\nAgent: \"You have these lights: light.living_room, light.kitchen, light.bedroom\"\n\nSafe Action Pattern\nUser: \"Turn on the living room light\"\nAgent: moltbot-ha on light.living_room\nAgent: \"Living room light is now on\"\n\nCritical Action Pattern\nUser: \"Open the garage\"\nAgent: moltbot-ha on cover.garage\n<receives CriticalActionError>\nAgent: \"⚠️ Opening the garage door is a critical action. Do you want to proceed?\"\nUser: \"Yes, open it\"\nAgent: moltbot-ha on cover.garage --force\nAgent: \"Garage door is opening\"\n\nNotes\nAll write actions are logged to ~/.config/moltbot-ha/actions.log by default\nSafety settings are configurable per installation\nWildcards (*) are supported in allowed_entities and blocked_entities\nJSON output available with --json flag for programmatic parsing"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/iamvaleriofantozzi/moltbot-ha",
    "publisherUrl": "https://clawhub.ai/iamvaleriofantozzi/moltbot-ha",
    "owner": "iamvaleriofantozzi",
    "version": "0.1.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/moltbot-ha",
    "downloadUrl": "https://openagent3.xyz/downloads/moltbot-ha",
    "agentUrl": "https://openagent3.xyz/skills/moltbot-ha/agent",
    "manifestUrl": "https://openagent3.xyz/skills/moltbot-ha/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/moltbot-ha/agent.md"
  }
}