Auto-switch music scenes by workday time slot, and send a greeting email with a matching GIF — all in one command or cron job.
text
🌅 ──► ☕ ──► 💻 ──► 😌 ──► 🌙
morning focus working chill off
Time SlotMusic SceneGreeting ThemeExample GIF🌅 Morning (6–9)morningRise & shine☀️ sunrise GIF☕ Focus (9–12)focusDeep work time🔥 laser-focus GIF💻 Working (12–14)workingKeep going!💪 hustle GIF😌 Chill (14–18)chillWind down🍵 tea-time GIF🌙 Off (18+)offGood night🌙 moon GIF
bash
# Run the current time-slot scene + send greeting email
node scripts/workday-greeting.js
That's it. The script:
home-music)Copy .env.example to .env and fill in:
bash
# Email (SMTP) — required for sending greetings
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=you@gmail.com
SMTP_PASS=your_app_password
GREETING_TO=recipient@example.com
GREETING_FROM=you@gmail.com
# Music scene command (default: home-music)
MUSIC_CMD=home-music
GIF URLs are defined in scripts/gifs.json. Replace with your own:
json
{
"morning": "https://media.giphy.com/media/l0MYt5jPR6QX5APm0/giphy.gif",
"focus": "https://media.giphy.com/media/3o7btNa0RUYa5E7iiQ/giphy.gif",
"working": "https://media.giphy.com/media/3o7qDEq2bMbcbPRQ2c/giphy.gif",
"chill": "https://media.giphy.com/media/l2JIdnF6aCnBRSgQU/giphy.gif",
"off": "https://media.giphy.com/media/l1J9u3TZfp1DLh2Wk/giphy.gif"
}
Edit scripts/slots.json to customize time boundaries:
json
{
"morning": { "start": 6, "end": 9 },
"focus": { "start": 9, "end": 12 },
"working": { "start": 12, "end": 14 },
"chill": { "start": 14, "end": 18 },
"off": { "start": 18, "end": 6 }
}
bash
# Auto-detect slot and run
node scripts/workday-greeting.js
# Force a specific slot
node scripts/workday-greeting.js --slot morning
# Music only (no email)
node scripts/workday-greeting.js --music-only
# Email only (no music scene switch)
node scripts/workday-greeting.js --email-only
# Dry run (show what would happen)
node scripts/workday-greeting.js --dry-run
Set up as an OpenClaw cron job for fully automatic daily operation:
text
# Every weekday at 8:00 AM — morning scene + greeting
0 8 * * 1-5 node scripts/workday-greeting.js --slot morning
# Every weekday at 9:00 AM — focus scene
0 9 * * 1-5 node scripts/workday-greeting.js --slot focus
# Every weekday at 6:00 PM — wind down + good evening
0 18 * * 1-5 node scripts/workday-greeting.js --slot off
Or use OpenClaw's cron tool:
json
{
"schedule": { "kind": "cron", "expr": "0 8 * * 1-5", "tz": "Asia/Shanghai" },
"payload": { "kind": "agentTurn", "message": "Run workday-music-greeting for morning slot" }
}
The email is sent as HTML with an inline GIF:
text
Subject: 🌅 Good Morning! Time to rise and shine
Body:
<h2>☀️ Good Morning!</h2>
<p>Switching to <strong>morning</strong> music scene.</p>
<p>Have a wonderful day! 🎶</p>
<img src="[morning GIF URL]" alt="Good morning!" width="400">
<p><em>— Sent by Workday Music Greeting 🎶</em></p>
text
workday-music-greeting/
├── SKILL.md # This file
├── scripts/
│ ├── workday-greeting.js # Main orchestration script
│ ├── send-greeting.js # Email sending logic
│ ├── gifs.json # GIF URL config per slot
│ └── slots.json # Time slot definitions
├── assets/
│ └── (optional local GIFs)
├── .env.example # Environment template
└── package.json
nodemailer)bash
cd skills/workday-music-greeting
npm install
IssueFixMusic not switchingVerify home-music is installed and MUSIC_CMD is correctEmail not sendingCheck .env SMTP credentials; test with node scripts/send-greeting.js --testWrong time slotCheck slots.json boundaries; use --slot to overrideGIF not loadingReplace URLs in gifs.json; some Giphy links expire
MIT