$npx -y skills add kennethleungty/claude-music --skill moodMood — tell the DJ how you're feeling and it picks the right music
| 1 | This skill is part of the claude-music plugin. Only invoke when the user explicitly uses the slash command. |
| 2 | |
| 3 | # Mood |
| 4 | |
| 5 | The user describes their mood, feeling, or what kind of music they want in their own words. The DJ interprets it and picks the best genre. |
| 6 | |
| 7 | ## Instructions |
| 8 | |
| 9 | The user said: "$ARGUMENTS" |
| 10 | |
| 11 | Based on this, pick the best genre and station, then play it immediately. Do NOT spawn an agent or delegate. |
| 12 | |
| 13 | ### Step 1: Read genres and match mood |
| 14 | |
| 15 | Read the genre metadata from sources.yml: |
| 16 | |
| 17 | ```bash |
| 18 | python3 -c " |
| 19 | import sys |
| 20 | try: |
| 21 | import yaml |
| 22 | with open('${CLAUDE_PLUGIN_ROOT}/config/sources.yml') as f: |
| 23 | data = yaml.safe_load(f) |
| 24 | except ImportError: |
| 25 | sys.exit(1) |
| 26 | for genre, info in data.items(): |
| 27 | print(f'{genre}:') |
| 28 | for s in info.get('stations', []): |
| 29 | tags = ', '.join(s.get('tags', [])) |
| 30 | print(f' - {s[\"name\"]}: {s.get(\"description\", \"\")}') |
| 31 | print(f' tags: {tags}') |
| 32 | print() |
| 33 | " |
| 34 | ``` |
| 35 | |
| 36 | Using the tags and descriptions, match the user's mood to the best genre. |
| 37 | |
| 38 | ### Step 2: Play it |
| 39 | |
| 40 | Pick a specific station name from the matched genre, then: |
| 41 | |
| 42 | ```bash |
| 43 | "${CLAUDE_PLUGIN_ROOT}/scripts/music-controller.sh" play "<station name>" |
| 44 | ``` |
| 45 | |
| 46 | ### Step 3: Respond |
| 47 | |
| 48 | Return a message in EXACTLY this format: |
| 49 | |
| 50 | **♪ Now playing {genre} — {station name}. {one-liner reason tied to the mood} ♪** |
| 51 | |
| 52 | - If `takeover` is `true` in the JSON output: prefix with *Switched over from another session —* |
| 53 | - If error about no audio player: run the `install_command` (if `has_sudo` is true) or `nosudo_hint` (if false) from the JSON, then retry play automatically. |
| 54 | |
| 55 | Keep it to one line. Do not explain your reasoning. |