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
1---2name: rainy-day3description: 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.4---5# Rainy Day67Trigger on "rainy day", "rainy day routine", "is it raining",8"will it rain today", "is it going to rain", "should I bring an9umbrella", "雨の日", "今日雨降る", "今日雨降る?", "雨降りそう?",10"雨の日モード". Distinct from `dog-walk` (which peeks at weather on11the way out the door) and `morning-routine` (full wake-up brief):12rainy-day is a **stand-alone check-in** the user invokes when they13are weighing plans for the day. It must never autonomously close14blinds, lock doors, or start media — it only **suggests**.1516## Default flow17181. **Look up the forecast.** Call `get_forecast` for the user's19 current location, covering the rest of today. If `get_forecast`20 is unavailable or returns no precipitation field, fall back to21 `get_weather` for the current hour. If both fail, reply with a22 single honest sentence and stop:23 - EN: "I couldn't pull the forecast just now — try again in a24 minute."25 - JA: 「今天気が取れませんでした。少ししたらもう一度聞いて26 ください。」27282. **Decide the branch from precipitation probability for today.**29 Use the highest `precipitation_probability` across the remaining30 hours of today (00:00 → 23:59 local). Treat missing values as 0.31 - `> 30 %` → **rainy branch** (go to step 3).32 - `≤ 30 %` → **dry branch** (go to step 4).33343. **Rainy branch — suggest, do not commit.** One short weather35 headline plus an optional plan. Speak at the user's **current**36 volume. Never bump. The plan is phrased as an offer the user can37 accept; do not fire the tools until they say yes.38 - Headline examples:39 - EN: "Looks like rain today — about 70 percent chance this40 afternoon."41 - JA: 「今日は雨になりそうです。午後は降水確率70%くらい。」42 - Offer template (pick one, keep it to one sentence):43 - EN: "Want me to queue an indoor playlist and remind you to44 close the blinds and windows?"45 - EN alternate: "Shall I start something cozy and nudge you46 about the windows?"47 - JA: 「室内モードのプレイリストと、窓・ブラインドを閉める48 リマインドを出しましょうか?」49 - JA alternate: 「ゆったりした音楽かけて、窓とブラインドの50 確認を促しましょうか?」51 - If the user says yes:52 1. Call `play_media_by_source` with a cozy-indoor query such53 as `{ query: "rainy day indoor playlist", source: "default" }`.54 Use whichever source is registered; do not hardcode a55 provider. If no media source is registered, say so in one56 sentence and skip this sub-step.57 2. Call `set_volume` with value `35` — low enough to sit58 under conversation, loud enough to feel present. Remember59 the prior volume so a later "rainy day over" can restore.60 3. Speak a single blinds/windows reminder — **do not** call61 `execute_command` on `cover` devices. The user may have62 laundry drying on the balcony, a cat on the sill, or a63 window they need left cracked. Suggestion only:64 - EN: "Heads up — might be worth closing the windows and65 dropping the blinds before the rain hits."66 - JA: 「雨が降る前に、窓とブラインドを閉めておくと安心67 です。」68 4. If the user explicitly confirms ("yes, close them" /69 「閉めて」), **then** call `execute_command` with70 `{ device_type: "cover", action: "close" }` for each71 registered cover. One short confirmation: "Blinds closing."72 / 「ブラインド閉めます。」 Never chain this without an73 explicit second confirmation.74 - If the user says no, declines, or stays silent for ~875 seconds: acknowledge briefly ("Got it — just the heads-up76 then." / 「わかりました、天気だけお知らせでした。」) and end77 the session. Do not bump volume, do not queue media, do not78 call `execute_command`.79804. **Dry branch — short, reassuring.** One sentence, current81 volume, no follow-up offer. This is the common path and82 shouldn't feel heavy.83 - EN: "Looks dry today — about 15 percent chance of rain."84 - EN alternate: "No rain expected today."85 - JA: 「今日は雨の心配はなさそうです。」86 - JA alternate: 「晴れ〜曇りで、雨は多分降らないです。」87 Then stop. No media, no volume change, no reminder.8889## Respect quiet-hours9091Before speaking the offer in step 3, call `recall` with key92`quiet_hours.active`.93- If `true` and the user is simply asking "is it going to rain" —94 answer the headline only, skip the offer. A rainy-day plan at95 2am is not helpful.96- If `true` and the user explicitly asked for the full routine97 ("rainy day routine"), still honor the request but keep volume98 unchanged and skip `play_media_by_source` — substitute "I'll99 queue music when quiet-hours ends" and keep the blinds/windows100 reminder as a soft whisper.101102## Stop / end session103104Trigger on "rainy day over", "stop the rainy day music",105「雨の日モード終わり」, 「音楽止めて」:1061. Stop media playback via whatever stop mechanism the current107 `play_media_by_source` surfaced (most sources expose a108 companion stop via `execute_command` with109 `{ device_type: "media_player", action: "stop" }`). If unsure,110 skip this step rather than guess.1112. Restore volume to the pre-rainy-day level via `set_volume`.1123. One short acknowledgement: "Rainy-day mode off." /113 「雨の日モード終わりました。」114115## Edge cases116117- **Rain already falling** (`get_weather` shows active118 precipitation regardless of forecast): treat as rainy branch.119 Lead with "It's already raining — " then continue with the120 offer. Do not second-guess the sensor.121- **Forecast shows rain tomorrow, not today**: stay in the dry122 branch for today's question, but add one sentence — "Tomorrow123 looks wetter though." / 「明日の方が降りそうです。」 — so the124 user can plan.125- **User is traveling** (check `recall` for126 `travel_mode.active`): use the destination's forecast if the127 location is available; otherwise answer for the home location128 and say which. Do not silently mislead.129- **Multi-room household**: this is a single-speaker check-in. Do130 not `broadcast_tts` or `broadcast_announcement`. The other131 rooms didn't ask.132133## Style134135- Tone: unhurried neighbour glancing at the sky for you. Cozy,136 not alarmist — rain is not an emergency.137- EN: contractions fine. No exclamations. Numbers as words up to138 twenty, digits beyond.139- JA: polite-casual ("〜です / 〜ます"). No kaomoji, no weather140 onomatopoeia.141- Headlines ≤ 14 words EN, ≤ 30 characters JA. The user is142 deciding whether to head out; they don't want a lecture.143- Never promise what you haven't done. "I'll queue a playlist" is144 only said after the tool call succeeds.145146## Tools used147- `get_forecast` (primary)148- `get_weather` (fallback + "already raining" check)149- `recall` (quiet-hours + travel-mode flags)150- `play_media_by_source` (only after user accepts the offer)151- `set_volume` (only on the rainy branch, only after accept)152- `execute_command` with `device_type: "cover"` — **suggest only,153 never autocommit**; requires an explicit second confirmation154 before firing155156## Tools explicitly avoided157- `broadcast_tts`, `broadcast_announcement` — single-user158 check-in, no fan-out159- Autonomous `execute_command` on lights, locks, or thermostats —160 out of scope; the user asked about rain, not the whole house161- `clear_notifications` — not a do-not-disturb routine