用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/Tzeusy/butlers --skill scenes命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Guide for discovering, analyzing, and pruning the Butlers test suite. Use when working on test condensation beads (Phase 1 epic bu-rhztl and Phase 2 epic bu-hg8rl both CLOSED; Phase 3 maintenance cycle underway 2026-06-21), assessing test bloat, identifying pruning targets, or rewriting tests to be contract-driven. Triggers on test reduction, test pruning, test consolidation, or condensation tasks for this project. Also use when a fresh session needs to assess test health, create new condensation beads, or resume in-progress condensation work.
Generate a weekly home energy digest with trends, top consumers, and recommendations.
Orchestrate a UX redesign of a Butlers dashboard page (or sub-page set) using /project-direction as the spec+beads engine, with redesign-specific upfront phases for vision capture, asset ingestion, impact analysis, backend-contract derivation, LLM-cost feasibility, manifesto/identity preservation, and a th-design design-bar audit. The binding design language is the Dispatch spec (openspec/specs/dashboard-design-language/spec.md); bundles live under pr/overview/ and resolve via references/bundle-registry.md. Use when asked to redesign a dashboard page, with or without a Claude Design bundle. Triggers on "redesign the X page", "plan the Y redesign", "integrate the redesign bundle", "what would it take to ship the SLUG redesign", "design language integration for AREA".
基于 SOC 职业分类
正在显示 SKILL.md
| name | scenes |
| description | Create, modify, trigger, and manage smart-home scenes. |
Enable users to create, modify, and trigger scenes — bundled automations that execute multiple device commands with a single voice/text trigger or scheduled execution. Scenes compose activities like "Movie Night" (dim lights, close blinds, adjust sound) into named, reusable automations.
Use this skill when:
When user wants to create a new scene:
Parse the scene intent: Extract scene name and desired device states
Clarify missing details via follow-up message:
Build device command list from user's specifications:
[{"device": "living-room-light", "command": "dim", "brightness": 20}, {"device": "blinds", "command": "close"}, {"device": "sound-system", "command": "on"}]Validate device availability:
Call scene_create() with:
name: Scene name (snake_case internally, e.g., "movie_night")description: User-friendly descriptiondevices: List of device commands from step 3Store scene preference as memory fact:
subject: Scene namepredicate: scene_preference or scene_createdcontent: Description of devices and statespermanence: standard (scenes are long-lived unless explicitly changed)importance: 6-7 (user explicitly defined this)tags: Scene name, included devices, purpose (e.g., ["movie-night", "lights", "blinds", "entertainment"])Confirm with user via notify() (affirm mode):
When user wants to change an existing scene:
Retrieve the scene via scene_get(scene_name)
Identify the change:
Parse the modification:
Call scene_update() with:
name: Scene namedevices: Updated device command listUpdate memory fact to reflect modification
Confirm via notify() (affirm mode):
When user triggers a scene:
Retrieve the scene via scene_get(scene_name) to confirm it exists
Call scene_execute(scene_name) to run all associated device commands
Store execution as volatile memory fact:
subject: Scene namepredicate: usage_patterncontent: "User triggered scene at [time]"permanence: volatiletags: Scene name, timestampConfirm with user via notify() (affirm mode):
When user wants to automatically trigger a scene on a schedule:
Parse the schedule: "Run movie night at 7pm every Friday" → cron 0 19 * * 5
Create automation via automation_create() with:
name: Descriptive automation name (e.g., "Friday Movie Night")trigger_type: schedule (cron-based) or manualcron: Cron expression (e.g., 0 19 * * 5)action: scene_execute with target scene nameConfirm with user:
Store automation as memory fact:
subject: Automation namepredicate: automation_schedulecontent: Scene name, trigger time, frequencypermanence: standardtags: Scene, schedule, frequencyWhen user asks "What scenes do I have?" or similar:
scene_list() to get all defined scenesscene_get(scene_name) to get detailsnotify() (answer mode) with:
When user wants to remove a scene:
Request confirmation via notify() (follow-up mode):
Call scene_delete(scene_name) only after confirmation
Confirm deletion via notify():
Clean up associated automations:
Scenes execute a fixed set of device commands. They do not contain conditional logic or decision trees:
Create or modify one scene per user message. Don't try to create multiple scenes in a single interaction.
Before creating a scene, ensure:
Always ask for confirmation (✅ reaction) before deleting a scene or removing devices from a scene.
If user creates a scene with a few devices and later wants to add more, update incrementally:
Store usage patterns in memory. If user triggers Movie Night every Friday at 7pm, notice the pattern and offer scheduling:
User: "Create a bedtime scene that cools the bedroom to 68 and dims all lights"
Actions:
scene_create(name="bedtime", devices=[{"device": "bedroom-thermostat", "command": "set_temperature", "params": {"temperature": 68}}, {"device": "living-room-light", "command": "dim", "brightness": 10}, {"device": "bedroom-light", "command": "dim", "brightness": 0}])memory_store_fact(subject="bedtime-scene", predicate="scene_created", ...)notify(channel="telegram", message="Bedtime scene created — bedroom will cool to 68°F and all lights will dim. Want me to schedule it for 10pm every night?", intent="reply", request_context=...)User: "Activate movie night"
Actions:
scene_get(scene_name="movie_night")scene_execute(scene_name="movie_night")memory_store_fact(subject="movie-night-scene", predicate="usage_pattern", ...)notify(channel="telegram", message="Scene 'Movie Night' activated — lights dimmed to 20%, blinds closed, sound system on.", intent="reply", request_context=...)User: "What scenes do I have?"
Actions:
scene_list()scene_get(scene_name)notify(channel="telegram", message="You have 3 scenes:\n• Movie Night (lights, blinds, sound) — Fridays 7pm\n• Bedtime (thermostat, lights) — Daily 10pm\n• Workout (lights, music)", intent="reply", request_context=...)User: "Delete the workout scene"
Actions:
notify(channel="telegram", message="Delete 'Workout' scene? This cannot be undone. React ✅ to confirm.", intent="reply", request_context=...)scene_delete(scene_name="workout")notify(channel="telegram", message="Workout scene deleted.", intent="reply", request_context=...)This example uses the native Home Assistant tools available to the home butler. It illustrates
how to handle an iterative, multi-turn scene-building conversation using ha_* tools directly.
Turn 1 — User: "I want to create a relaxation scene"
Actions:
notify(channel="telegram", message="What devices should the relaxation scene include? For example: lighting, temperature, blinds, music?", intent="reply", request_context=...)Turn 2 — User: "Dim the lights to 30%, play soft music, and set temperature to 72"
Actions:
ha_list_entities(domain="light") — discover all light entity IDsha_call_service(domain="light", service="turn_on", target={"area_id": "all"}, data={"brightness_pct": 30})ha_call_service(domain="media_player", service="play_media", target={"entity_id": "media_player.living_room"}, data={"media_content_id": "soft_music", "media_content_type": "music"})ha_call_service(domain="climate", service="set_temperature", data={"temperature": 72})notify(channel="telegram", message="Relaxation mode active — lights at 30%, soft music on, temperature set to 72°F. Anything else to add?", intent="reply", request_context=...)Turn 3 — User: "Actually, also close the blinds"
Actions:
ha_list_entities(domain="cover") — find blind/cover entity IDsha_call_service(domain="cover", service="close_cover", target={"area_id": "all"})ha_activate_scene(entity_id="scene.relaxation") if scene already exists, or:
ha_call_service(domain="scene", service="create", data={"scene_id": "relaxation", "entities": {"light.living_room": {"state": "on", "brightness": 77}, "media_player.living_room": {"state": "playing"}, "climate.main": {"temperature": 72}, "cover.living_room": {"state": "closed"}}})memory_store_fact(subject="relaxation-scene", predicate="scene_preference", content="relaxation scene includes: lights at 30%, soft music, 72°F temperature, closed blinds", permanence="standard", importance=6.0, tags=["scene", "relaxation", "automation"])notify(channel="telegram", message="Relaxation scene saved — lights at 30%, soft music playing, 72°F, blinds closed. Activate it anytime by saying 'activate relaxation'.", intent="reply", request_context=...)scene_create() was called; user confirmed via notify()scene_update() was called; user confirmedscene_execute() was called; user confirmedautomation_create() was called; automation registeredscene_list() and scene_get() calls completed; user received listscene_delete() was called after user confirmationmemory_store_fact() was called to persist scene definition or usage patternscene_get() and remind user