Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/Tzeusy/butlers --skill scenes명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
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