| name | rainy-day |
| description | Rainy-day check-in โ inspect the forecast, and if rain is likely today, suggest a cozy indoor plan (playlist, close blinds/windows reminder) without taking destructive action. |
Rainy Day
Trigger on "rainy day", "rainy day routine", "is it raining",
"will it rain today", "is it going to rain", "should I bring an
umbrella", "้จใฎๆฅ", "ไปๆฅ้จ้ใ", "ไปๆฅ้จ้ใ?", "้จ้ใใใ?",
"้จใฎๆฅใขใผใ". Distinct from dog-walk (which peeks at weather on
the way out the door) and morning-routine (full wake-up brief):
rainy-day is a stand-alone check-in the user invokes when they
are weighing plans for the day. It must never autonomously close
blinds, lock doors, or start media โ it only suggests.
Default flow
-
Look up the forecast. Call get_forecast for the user's
current location, covering the rest of today. If get_forecast
is unavailable or returns no precipitation field, fall back to
get_weather for the current hour. If both fail, reply with a
single honest sentence and stop:
- EN: "I couldn't pull the forecast just now โ try again in a
minute."
- JA: ใไปๅคฉๆฐใๅใใพใใใงใใใๅฐใใใใใใไธๅบฆ่ใใฆ
ใใ ใใใใ
-
Decide the branch from precipitation probability for today.
Use the highest precipitation_probability across the remaining
hours of today (00:00 โ 23:59 local). Treat missing values as 0.
> 30 % โ rainy branch (go to step 3).
โค 30 % โ dry branch (go to step 4).
-
Rainy branch โ suggest, do not commit. One short weather
headline plus an optional plan. Speak at the user's current
volume. Never bump. The plan is phrased as an offer the user can
accept; do not fire the tools until they say yes.
- Headline examples:
- EN: "Looks like rain today โ about 70 percent chance this
afternoon."
- JA: ใไปๆฅใฏ้จใซใชใใใใงใใๅๅพใฏ้ๆฐด็ขบ็70%ใใใใใ
- Offer template (pick one, keep it to one sentence):
- EN: "Want me to queue an indoor playlist and remind you to
close the blinds and windows?"
- EN alternate: "Shall I start something cozy and nudge you
about the windows?"
- JA: ใๅฎคๅ
ใขใผใใฎใใฌใคใชในใใจใ็ชใปใใฉใคใณใใ้ใใ
ใชใใคใณใใๅบใใพใใใใ๏ผใ
- JA alternate: ใใใฃใใใใ้ณๆฅฝใใใฆใ็ชใจใใฉใคใณใใฎ
็ขบ่ชใไฟใใพใใใใ๏ผใ
- If the user says yes:
- Call
play_media_by_source with a cozy-indoor query such
as { query: "rainy day indoor playlist", source: "default" }.
Use whichever source is registered; do not hardcode a
provider. If no media source is registered, say so in one
sentence and skip this sub-step.
- Call
set_volume with value 35 โ low enough to sit
under conversation, loud enough to feel present. Remember
the prior volume so a later "rainy day over" can restore.
- Speak a single blinds/windows reminder โ do not call
execute_command on cover devices. The user may have
laundry drying on the balcony, a cat on the sill, or a
window they need left cracked. Suggestion only:
- EN: "Heads up โ might be worth closing the windows and
dropping the blinds before the rain hits."
- JA: ใ้จใ้ใๅใซใ็ชใจใใฉใคใณใใ้ใใฆใใใจๅฎๅฟ
ใงใใใ
- If the user explicitly confirms ("yes, close them" /
ใ้ใใฆใ), then call
execute_command with
{ device_type: "cover", action: "close" } for each
registered cover. One short confirmation: "Blinds closing."
/ ใใใฉใคใณใ้ใใพใใใ Never chain this without an
explicit second confirmation.
- If the user says no, declines, or stays silent for ~8
seconds: acknowledge briefly ("Got it โ just the heads-up
then." / ใใใใใพใใใๅคฉๆฐใ ใใ็ฅใใใงใใใใ) and end
the session. Do not bump volume, do not queue media, do not
call
execute_command.
-
Dry branch โ short, reassuring. One sentence, current
volume, no follow-up offer. This is the common path and
shouldn't feel heavy.
- EN: "Looks dry today โ about 15 percent chance of rain."
- EN alternate: "No rain expected today."
- JA: ใไปๆฅใฏ้จใฎๅฟ้
ใฏใชใใใใงใใใ
- JA alternate: ใๆดใใๆใใงใ้จใฏๅคๅ้ใใชใใงใใใ
Then stop. No media, no volume change, no reminder.
Respect quiet-hours
Before speaking the offer in step 3, call recall with key
quiet_hours.active.
- If
true and the user is simply asking "is it going to rain" โ
answer the headline only, skip the offer. A rainy-day plan at
2am is not helpful.
- If
true and the user explicitly asked for the full routine
("rainy day routine"), still honor the request but keep volume
unchanged and skip play_media_by_source โ substitute "I'll
queue music when quiet-hours ends" and keep the blinds/windows
reminder as a soft whisper.
Stop / end session
Trigger on "rainy day over", "stop the rainy day music",
ใ้จใฎๆฅใขใผใ็ตใใใ, ใ้ณๆฅฝๆญขใใฆใ:
- Stop media playback via whatever stop mechanism the current
play_media_by_source surfaced (most sources expose a
companion stop via execute_command with
{ device_type: "media_player", action: "stop" }). If unsure,
skip this step rather than guess.
- Restore volume to the pre-rainy-day level via
set_volume.
- One short acknowledgement: "Rainy-day mode off." /
ใ้จใฎๆฅใขใผใ็ตใใใพใใใใ
Edge cases
- Rain already falling (
get_weather shows active
precipitation regardless of forecast): treat as rainy branch.
Lead with "It's already raining โ " then continue with the
offer. Do not second-guess the sensor.
- Forecast shows rain tomorrow, not today: stay in the dry
branch for today's question, but add one sentence โ "Tomorrow
looks wetter though." / ใๆๆฅใฎๆนใ้ใใใใงใใใ โ so the
user can plan.
- User is traveling (check
recall for
travel_mode.active): use the destination's forecast if the
location is available; otherwise answer for the home location
and say which. Do not silently mislead.
- Multi-room household: this is a single-speaker check-in. Do
not
broadcast_tts or broadcast_announcement. The other
rooms didn't ask.
Style
- Tone: unhurried neighbour glancing at the sky for you. Cozy,
not alarmist โ rain is not an emergency.
- EN: contractions fine. No exclamations. Numbers as words up to
twenty, digits beyond.
- JA: polite-casual ("ใใงใ / ใใพใ"). No kaomoji, no weather
onomatopoeia.
- Headlines โค 14 words EN, โค 30 characters JA. The user is
deciding whether to head out; they don't want a lecture.
- Never promise what you haven't done. "I'll queue a playlist" is
only said after the tool call succeeds.
Tools used
get_forecast (primary)
get_weather (fallback + "already raining" check)
recall (quiet-hours + travel-mode flags)
play_media_by_source (only after user accepts the offer)
set_volume (only on the rainy branch, only after accept)
execute_command with device_type: "cover" โ suggest only,
never autocommit; requires an explicit second confirmation
before firing
Tools explicitly avoided
broadcast_tts, broadcast_announcement โ single-user
check-in, no fan-out
- Autonomous
execute_command on lights, locks, or thermostats โ
out of scope; the user asked about rain, not the whole house
clear_notifications โ not a do-not-disturb routine