From home-assistant-mgmt
Use when the user wants to work on Home Assistant — automations, entities, service calls, TTS, devices — via SSH or the Home Assistant REST API. Reads connection details from `$CLAUDE_USER_DATA/home-assistant-mgmt/config.json` (populated by the `onboard` skill in this plugin). Triggers on phrases like "home assistant", "HA ops", "ha automation", "check home assistant", "call HA service".
How this skill is triggered — by the user, by Claude, or both
Slash command
/home-assistant-mgmt:home-assistant-opsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Operate against a Home Assistant instance via REST API and (optionally) SSH. All host- and credential-specific values come from the plugin's config — never hard-code them.
Operate against a Home Assistant instance via REST API and (optionally) SSH. All host- and credential-specific values come from the plugin's config — never hard-code them.
Resolve the plugin data directory (${CLAUDE_USER_DATA:-${XDG_DATA_HOME:-$HOME/.local/share}/claude-plugins}/home-assistant-mgmt/) and load config.json. If it doesn't exist or is incomplete, tell the user to run the onboard skill first and stop.
Available fields after load: host, install_type, ssh.{enabled,user,port,key_path}, api_url, api_token_ref, tts_default_target, config_path.
Resolve the bearer token from api_token_ref at runtime (1Password / env / file). Don't log it.
TOKEN=<resolved from api_token_ref>
H_AUTH="Authorization: Bearer $TOKEN"
H_JSON="Content-Type: application/json"
# Health check
curl -s -H "$H_AUTH" "$API_URL/api/"
# All entity states
curl -s -H "$H_AUTH" "$API_URL/api/states" | jq '.[] | {entity_id, state}' | head -40
# Single entity
curl -s -H "$H_AUTH" "$API_URL/api/states/<entity_id>"
# Call a service
curl -s -X POST -H "$H_AUTH" -H "$H_JSON" \
-d '{"entity_id":"<entity_id>", "...": "..."}' \
"$API_URL/api/services/<domain>/<service>"
# Validate config (HAOS/Supervised only)
curl -s -X POST -H "$H_AUTH" "$API_URL/api/config/core/check_config"
# Restart HA core (DESTRUCTIVE — confirm with user first)
curl -s -X POST -H "$H_AUTH" "$API_URL/api/services/homeassistant/restart" -d '{}'
ssh.enabled)SSH_OPTS=( -p "$SSH_PORT" )
[ -n "$SSH_KEY_PATH" ] && SSH_OPTS+=( -i "$SSH_KEY_PATH" )
ssh "${SSH_OPTS[@]}" "$SSH_USER@$HOST" "<command>"
Useful commands once SSH'd in:
# HAOS / Supervised
ha core info
ha core check
ha core logs --tail 100
ha core restart # Destructive — confirm first
# All install types
cat $CONFIG_PATH/.HA_VERSION
tail -100 $CONFIG_PATH/home-assistant.log
ls $CONFIG_PATH/automations.yaml $CONFIG_PATH/scripts.yaml $CONFIG_PATH/scenes.yaml 2>/dev/null
$CONFIG_PATH/automations.yaml, edit, validate, restart on confirmation.GET /api/states/<entity_id> for live state + attributes.POST /api/services/<domain>/<service> for one-shot actions.tts.speak (or the legacy tts.<provider>_say) against tts_default_target from config. Example:
curl -s -X POST -H "$H_AUTH" -H "$H_JSON" \
-d "{\"entity_id\":\"$TTS_TARGET\",\"message\":\"test\"}" \
"$API_URL/api/services/tts/speak"
If tts_default_target is null in config, ask the user which media_player.* to use.tail -100 $CONFIG_PATH/home-assistant.log over SSH, or GET /api/error_log.cp automations.yaml automations.yaml.bak.<timestamp>.tts_default_target from config as the default. Don't assume any specific media_player.* exists.api_token_ref only when needed.ha core check on HAOS/Supervised, or POST /api/config/core/check_config over the API.npx claudepluginhub danielrosehill/claude-code-plugins --plugin home-assistant-mgmtGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.