From kjgarza-base
This skill should be used when the user wants to control smart home devices — lights, speakers, music playback, or scenes. Triggers on phrases like 'turn on the lights', 'play some jazz', 'dim the lights', 'stop the music', 'goodnight', 'movie mode', 'what's playing', or any reference to Yeelight bulbs, Google Cast speakers, or SomaFM radio.
npx claudepluginhub kjgarza/marketplace-claude --plugin kjgarza-baseThis skill is limited to using the following tools:
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Implements structured self-debugging workflow for AI agent failures: capture errors, diagnose patterns like loops or context overflow, apply contained recoveries, and generate introspection reports.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Control Yeelight bulbs and Google Cast speakers on the local network using the scripts/home.py script bundled with this skill.
All commands output JSON. Always run from the skill's scripts directory (the base directory is provided above as "Base directory for this skill"):
cd <base-directory>/scripts
python3 home.py discover [--timeout 5]
python3 home.py status [--cached]
python3 home.py lights --device NAME --action {on,off,toggle,brightness,ct} [--value N]
--device: fuzzy name match or all-lightsbrightness: value 1-100ct: color temperature 1700-6500K (lower=warm, higher=cool)python3 home.py cast --device NAME --action {play,stop,pause,volume,status} [--url URL] [--stream GENRE] [--volume N]
--device: fuzzy name match, all-speakers, or a specific group/speaker name--stream: genre keyword (jazz, ambient, metal, electronic, etc.) — maps to SomaFM AAC streams--url: direct audio URL (overrides --stream). Must be HTTP (not HTTPS) for Cast compatibility.--volume: 0-100| Name | Type | Notes |
|---|---|---|
| Kitchen speaker | Google Home Mini | Individual speaker |
| Living Room speaker | Google Nest Mini | Individual speaker |
| Master Room speaker old | Google Home Mini | Individual speaker |
| Living Room TV 2 | Chromecast | TV, may not play audio-only |
| Motz | Cast Group | Multi-room group — preferred for "play everywhere" |
| SoundedX | Cast Group | Multi-room group |
For "play on all speakers" or "play everywhere", use --device all-speakers. This targets speaker groups (Motz, SoundedX) rather than individual devices. Playing on individual Cast speakers sequentially is unreliable; groups handle sync natively.
For single-room playback, target the specific speaker by name (e.g., --device kitchen).
references/somafm-channels.md, pick the closest matching channel, and play it immediately. Mention which channel was chosen. Fallback priority: match by subgenre, then by mood/energy, then by era.python3 home.py ... and read JSON output.When the user says one of these, execute the corresponding commands:
"goodnight" / "bedtime":
lights --device all-lights --action offcast --device all-speakers --action stop"movie mode" / "movie time":
lights --device all-lights --action brightness --value 15lights --device all-lights --action ct --value 2700"reading mode":
lights --device all-lights --action brightness --value 80lights --device all-lights --action ct --value 4000"focus" / "work mode":
lights --device all-lights --action brightness --value 100lights --device all-lights --action ct --value 5000cast --device all-speakers --action stop"relax" / "chill":
lights --device all-lights --action brightness --value 40lights --device all-lights --action ct --value 2700cast --device all-speakers --action play --stream ambientSee references/somafm-channels.md for the full list. Common mappings:
| Genre keyword | Channel |
|---|---|
| jazz, spy, lounge | Secret Agent |
| ambient, chill | Groove Salad |
| metal, heavy | Metal |
| electronic, electronica | cliqhop |
| folk | Folk Forward |
| 80s | Underground 80s |
| country, americana | Boot Liquor |
| space | Space Station |
| drone | Drone Zone |
If a genre is not directly mapped, autonomously pick the closest channel from references/somafm-channels.md and play it. Never ask the user to choose — just pick the best fit and mention what was selected.
discover to re-scan.bash <base-directory>/scripts/setup.sh--timeout 10discover to force a fresh scan (bypasses the 30-min cache).