/homekit
Control HomeKit smart home accessories and view home events via homeclaw-cli. Use when the user asks to control lights, locks, thermostats, fans, blinds, scenes, check device/sensor status, or view recent home activity/events. Examples: "turn off the stairs lights", "lock the
$ npx -y skills add omarshahine/HomeClaw --skill homekit --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/homekit
Context preview
The summary Claude sees to decide when to auto-load this skill.
Control HomeKit smart home accessories and view home events via homeclaw-cli. Use when the user asks to control lights, locks, thermostats, fans, blinds, scenes, check device/sensor status, or view recent home activity/events. Examples: "turn off the stairs lights", "lock the
SKILL.md
homekit.SKILL.mdname: homekit
description: |
Control HomeKit smart home accessories and view home events via homeclaw-cli.
Use when the user asks to control lights, locks, thermostats, fans, blinds,
scenes, check device/sensor status, or view recent home activity/events.
Examples: "turn off the stairs lights", "lock the front door", "what's the temperature",
"run the movie scene", "close the blinds", "is the garage door open",
"what happened at home today", "when was the front door last unlocked"
metadata:
openclaw:
emoji: house
os: ["darwin"]
homepage: https://github.com/omarshahine/HomeClaw
requires:
bins: ["homeclaw-cli"]
install:
- kind: download
id: homeclaw
label: "Install HomeClaw.app from TestFlight or build from source"
url: https://github.com/omarshahine/HomeClaw
bins: ["homeclaw-cli"]HomeKit Control
Golden Rule: Device Map First
**Before your first HomeKit action in a session, read `memory/homekit-device-map.json`.**
This compact device map has every device as a flat list with `display_name`, `id` (UUID), `room`, `type` (semantic category), `controls` (writable characteristics), and `state`. It's optimized for fast LLM scanning and disambiguation.
**Refresh the cache** periodically or when devices may have changed:
homeclaw-cli device-map --format agent -o memory/homekit-device-map.json
Resolving What the User Means
1. Match user's words against `display_name` and `room` from the cached map 2. **Use `type` to disambiguate** — `lighting` devices support brightness; `power` devices are on/off only. A "Closet Light" with `type: power` cannot dim. 3. If ambiguous, prefer the device in the most likely room (main living areas > bedrooms > outdoor) 4. If still ambiguous, ask 5. **Always use UUIDs for write operations** — many devices share names (9 "Overhead" lights, multiple "Blinds"). Use `display_name` for reading, `id` (UUID) for `set`, `import-scene`, and `automations create` commands 6. **Check `controls` before sending a command** — if `brightness` isn't in `controls`, don't try to set it 7. **If no match found, refresh the cache first** — devices may have been added/renamed:
homeclaw-cli device-map --format agent -o memory/homekit-device-map.json
Then retry the match. Only tell the user "device not found" if it's still missing after refresh.
Commands
# Discovery
homeclaw-cli device-map --format agent # LLM-optimized flat list (default cache format)
homeclaw-cli device-map --format json # Full detail with aliases, manufacturer
homeclaw-cli device-map --format md # Markdown tables by room
homeclaw-cli search "<query>" --json # Search by name/room/category
homeclaw-cli get "<name-or-uuid>" --json # Full detail on one device
homeclaw-cli list --room "Kitchen" --json # All devices in a room
# Control — always use UUID for reliability
homeclaw-cli set "<uuid>" power true # On/off
homeclaw-cli set "<uuid>" brightness 50 # Lights (0-100)
homeclaw-cli set "<uuid>" target_temperature 72 # Thermostat
homeclaw-cli set "<uuid>" target_heating_cooling auto # HVAC: off/heat/cool/auto
homeclaw-cli set "<uuid>" lock_target_state locked # Locks: locked/unlocked
homeclaw-cli set "<uuid>" target_position 100 # Blinds (0=closed, 100=open)
# Scenes
homeclaw-cli scenes --json # List all scenes
homeclaw-cli get-scene "<name>" --json # Full detail: all actions (accessory, room, characteristic, value)
homeclaw-cli trigger "<scene-name>" # Run a scene
homeclaw-cli import-scene scene.json --dry-run # Preview scene import
homeclaw-cli import-scene scene.json # Create scene from JSON
echo '{"name": "...", "actions": [...]}' | homeclaw-cli import-scene - # Read JSON from stdin (works from any directory, sandbox-safe)
homeclaw-cli delete-scene "<name-or-uuid>" --dry-run # Preview deletion
homeclaw-cli delete-scene "<name-or-uuid>" # Delete a scene
# Room assignment — supports UUID for duplicate names
homeclaw-cli assign-rooms rooms.json --dry-run # Preview room assignments
homeclaw-cli assign-rooms rooms.json # Assign accessories to rooms
echo '[{"accessory": "...", "room": "..."}]' | homeclaw-cli assign-rooms - # stdin also works here
# JSON format: bare array [{"uuid": "...", "room": "..."} or {"accessory": "...", "room": "..."}]
# (or the same array wrapped as {"assignments": [...]})
# Use "uuid" when multiple accessories share the same name (e.g., ceiling fan + light)
# Management — rename, rooms, zones
homeclaw-cli rename "<name-or-uuid>" "<new-name>" # Rename accessory
homeclaw-cli rename "<name-or-uuid>" "<new-name>" --dry-run # Preview rename
homeclaw-cli rename-room "<name-or-uuid>" "<new-name>" # Rename room
homeclaw-cli create-room "<name>" # Create room
homeclaw-cli remove-room "<name-or-uuid>" # Remove room
homeclaw-cli remove-accessory "<name-or-uuid>" # Remove accessory
homeclaw-cli create-zone "<name>" # Create zone
homeclaw-cli remove-zone "<name-or-uuid>" # Remove zone
homeclaw-cli add-room-to-zone "<room>" "<zone>" # Add room to zone
homeclaw-cli remove-room-from-zone "<room>" "<zone>" # Remove room from zone
# Automations (button programming)
homeclaw-cli automations list --json # List all automations
homeclaw-cli automations get "<name-or-uuid>" --json # Detail view
homeclaw-cli automations delete "<name-or-uuid>" [--dry-run]
homeclaw-cli automations enable "<name-or-uuid>"
homeclaw-cli automations disable "<name-or-uuid>"
# Create with inline actions (creates a scene named after the automation)
# ALWAYS use UUIDs for target accessories to avoid name collisions
homeclaw-cli automations create --name "Sarah's Room Open" \Read more
name: homekit
description: |
Control HomeKit smart home accessories and view home events via homeclaw-cli.
Use when the user asks to control lights, locks, thermostats, fans, blinds,
scenes, check device/sensor status, or view recent home activity/events.
Examples: "turn off the stairs lights", "lock the front door", "what's the temperature",
"run the movie scene", "close the blinds", "is the garage door open",
"what happened at home today", "when was the front door last unlocked"
metadata:
openclaw:
emoji: house
os: ["darwin"]
homepage: https://github.com/omarshahine/HomeClaw
requires:
bins: ["homeclaw-cli"]
install:
- kind: download
id: homeclaw
label: "Install HomeClaw.app from TestFlight or build from source"
url: https://github.com/omarshahine/HomeClaw
bins: ["homeclaw-cli"]HomeKit Control
Golden Rule: Device Map First
**Before your first HomeKit action in a session, read `memory/homekit-device-map.json`.**
This compact device map has every device as a flat list with `display_name`, `id` (UUID), `room`, `type` (semantic category), `controls` (writable characteristics), and `state`. It's optimized for fast LLM scanning and disambiguation.
**Refresh the cache** periodically or when devices may have changed:
homeclaw-cli device-map --format agent -o memory/homekit-device-map.json
Resolving What the User Means
1. Match user's words against `display_name` and `room` from the cached map 2. **Use `type` to disambiguate** — `lighting` devices support brightness; `power` devices are on/off only. A "Closet Light" with `type: power` cannot dim. 3. If ambiguous, prefer the device in the most likely room (main living areas > bedrooms > outdoor) 4. If still ambiguous, ask 5. **Always use UUIDs for write operations** — many devices share names (9 "Overhead" lights, multiple "Blinds"). Use `display_name` for reading, `id` (UUID) for `set`, `import-scene`, and `automations create` commands 6. **Check `controls` before sending a command** — if `brightness` isn't in `controls`, don't try to set it 7. **If no match found, refresh the cache first** — devices may have been added/renamed:
homeclaw-cli device-map --format agent -o memory/homekit-device-map.json
Then retry the match. Only tell the user "device not found" if it's still missing after refresh.
Commands
# Discovery
homeclaw-cli device-map --format agent # LLM-optimized flat list (default cache format)
homeclaw-cli device-map --format json # Full detail with aliases, manufacturer
homeclaw-cli device-map --format md # Markdown tables by room
homeclaw-cli search "<query>" --json # Search by name/room/category
homeclaw-cli get "<name-or-uuid>" --json # Full detail on one device
homeclaw-cli list --room "Kitchen" --json # All devices in a room
# Control — always use UUID for reliability
homeclaw-cli set "<uuid>" power true # On/off
homeclaw-cli set "<uuid>" brightness 50 # Lights (0-100)
homeclaw-cli set "<uuid>" target_temperature 72 # Thermostat
homeclaw-cli set "<uuid>" target_heating_cooling auto # HVAC: off/heat/cool/auto
homeclaw-cli set "<uuid>" lock_target_state locked # Locks: locked/unlocked
homeclaw-cli set "<uuid>" target_position 100 # Blinds (0=closed, 100=open)
# Scenes
homeclaw-cli scenes --json # List all scenes
homeclaw-cli get-scene "<name>" --json # Full detail: all actions (accessory, room, characteristic, value)
homeclaw-cli trigger "<scene-name>" # Run a scene
homeclaw-cli import-scene scene.json --dry-run # Preview scene import
homeclaw-cli import-scene scene.json # Create scene from JSON
echo '{"name": "...", "actions": [...]}' | homeclaw-cli import-scene - # Read JSON from stdin (works from any directory, sandbox-safe)
homeclaw-cli delete-scene "<name-or-uuid>" --dry-run # Preview deletion
homeclaw-cli delete-scene "<name-or-uuid>" # Delete a scene
# Room assignment — supports UUID for duplicate names
homeclaw-cli assign-rooms rooms.json --dry-run # Preview room assignments
homeclaw-cli assign-rooms rooms.json # Assign accessories to rooms
echo '[{"accessory": "...", "room": "..."}]' | homeclaw-cli assign-rooms - # stdin also works here
# JSON format: bare array [{"uuid": "...", "room": "..."} or {"accessory": "...", "room": "..."}]
# (or the same array wrapped as {"assignments": [...]})
# Use "uuid" when multiple accessories share the same name (e.g., ceiling fan + light)
# Management — rename, rooms, zones
homeclaw-cli rename "<name-or-uuid>" "<new-name>" # Rename accessory
homeclaw-cli rename "<name-or-uuid>" "<new-name>" --dry-run # Preview rename
homeclaw-cli rename-room "<name-or-uuid>" "<new-name>" # Rename room
homeclaw-cli create-room "<name>" # Create room
homeclaw-cli remove-room "<name-or-uuid>" # Remove room
homeclaw-cli remove-accessory "<name-or-uuid>" # Remove accessory
homeclaw-cli create-zone "<name>" # Create zone
homeclaw-cli remove-zone "<name-or-uuid>" # Remove zone
homeclaw-cli add-room-to-zone "<room>" "<zone>" # Add room to zone
homeclaw-cli remove-room-from-zone "<room>" "<zone>" # Remove room from zone
# Automations (button programming)
homeclaw-cli automations list --json # List all automations
homeclaw-cli automations get "<name-or-uuid>" --json # Detail view
homeclaw-cli automations delete "<name-or-uuid>" [--dry-run]
homeclaw-cli automations enable "<name-or-uuid>"
homeclaw-cli automations disable "<name-or-uuid>"
# Create with inline actions (creates a scene named after the automation)
# ALWAYS use UUIDs for target accessories to avoid name collisions
homeclaw-cli automations create --name "Sarah's Room Open" \HomeKit smart home control via MCP — lights, locks, thermostats, and scenes for Claude Desktop, Claude Code, and OpenClaw
Repo: omarshahine/HomeClaw
Other skills on homeclaw.
- /ios-app-intents
Design and implement App Intents, app entities, and App Shortcuts for iOS apps so useful actions and content are available to Shortcuts, Siri, Spotlight, widgets, controls, and other intent-driven system surfaces. Use when exposing app actions outside the UI, adding `AppEntity`
Open skill - /ios-debugger-agent
Use XcodeBuildMCP to build, run, launch, and debug the current iOS project on a booted simulator. Trigger when asked to run an iOS app, interact with the simulator UI, inspect on-screen state, capture logs/console output, or diagnose runtime behavior using XcodeBuildMCP tools.
Open skill - /ios-ettrace-performance
Capture and interpret ETTrace profiles for iOS simulator apps, including symbolicated launch and runtime flamegraphs. Use when asked to profile an iOS app flow, gather simulator performance traces, identify CPU-heavy stacks, compare before/after traces, or produce flamegraph
Open skill - /ios-memgraph-leaks
Capture, inspect, compare, and root-cause iOS memory graph leaks using Apple's leaks and memgraph tools. Use when debugging leaked iOS objects, simulator memgraphs, retain-cycle suspicions, memory growth after navigation/logout/account changes, or when asked to prove an iOS leak
Open skill - /spm-build-analysis
Analyze Swift Package Manager dependencies, package plugins, module variants, and CI-oriented build overhead that slow Xcode builds. Use when a developer suspects packages, plugins, or dependency graph shape are hurting clean or incremental build performance, mentions SPM
Open skill - /swiftui-expert-skill
Use when writing, reviewing, or refactoring SwiftUI code for iOS or macOS, including state management, view composition, performance, Liquid Glass adoption, or Instruments `.trace` capture/analysis for hangs, hitches, CPU hotspots, or
Open skill

