music-suggestion

Solid

Proactive music suggestion. Routed in by user-emotion-detection/SKILL.md (the router) on emotion.detected (camera) and speech_emotion.detected (voice) events when the synthesized mood is suggestion-worthy (sad/stressed/tired/excited/happy/bored) AND audio is idle AND cooldown is clear. Reads, decision, and writes share the same parallel batch in a single turn. Does NOT fire on motion.activity / [activity] events — those route to wellbeing/SKILL.md only. NOT for user-initiated music requests (those use the music skill).

AI & Automation 147 stars 18 forks Updated today Apache-2.0

Install

View on GitHub

Quality Score: 83/100

Stars 20%
72
Recency 20%
100
Frontmatter 20%
70
Documentation 15%
100
Issue Health 10%
50
License 10%
100
Description 5%
100

Skill Content

# Music Suggestion (Proactive) > **`unknown` users count.** Always run suggestion checks when `current_user` is `"unknown"` — speak only, no DM. Never skip because the user is unknown/unconfirmed. ## Triggers Only one trigger: **Mood** — after logging a mood `decision` that is suggestion-worthy (`sad`, `stressed`, `tired`, `excited`, `happy`, `bored`). Activity events (`[activity] Activity detected: ...`, whether sedentary, drink/break, or celebrate) route to `wellbeing/SKILL.md` and never to this skill. ## User attribution `{name}` MUST come from `[context: current_user=X]` tag. If missing, use `"unknown"`. NEVER infer from memory or chat history. ## What to read (pre-fetched in `[emotion_context: ...]`) The backend injects everything you need on `emotion.detected` (face) or `speech_emotion.detected` (voice) — same block, same fields: - `audio_playing` (bool) — replaces `GET /audio/status`. - `last_suggestion_age_min` (int, `-1` if none today) — replaces `music-suggestion-history?last=1`. - `prior_decision` + `is_decision_stale` — replaces `mood-history?kind=decision&last=1`. The freshly synthesized decision from THIS turn still lives in your `thinking`. - `audio_recent` (`{track,duration_s,stopped}`) — replaces `audio/history?last=1`. - `music_pattern_for_hour` (`{preferred_genre,strength,peak_hour}` or `null`) — replaces `cat patterns.json` matching by current hour ±1. - `suggestion_worthy` (bool) — pre-applied bucket gate (true for `sad/stressed/tired/excited/happ...

Details

Author
autonomous-ai
Repository
autonomous-ai/autonomous-os
Created
2 months ago
Last Updated
today
Language
Python
License
Apache-2.0

Similar Skills

Semantically similar based on skill content — not just same category