music
Skill535 starsChanged 7 months agoApache-2.0View on GitHub
Play and stop music from YouTube through the device's speaker on user request.
We split this skill into the rules it gives an agent
8 rules. 0 are common, 3 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 10 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 19
If music_patterns exists and current hour is within peak_hour ± 1 → use preferred_genre to pick a song, no need to ask.
- Very specific: line 35
Do NOT use track, artist, title, song — those return 422.
- Distinctive: line 73
The marker is passive text, NOT a command to run: Write it directly in your reply and stop — the OS runs it for you.
- Very specific: line 84
Never put [HW:...] inside echo, exec, bash, printf, or any tool argument.
- Distinctive: line 90
No results → tell user and suggest a different query.
- Very specific: line 94
Emotion marker is mandatory: after every /audio/play.
- Very specific: line 96
Don't recite lyrics or "sing" via TTS — call /audio/play and let real music play.
- Distinctive: line 98
If user specifies genre or mood (*"play something relaxing"*), pick a well-known song — no need to ask further.
“Common” is measured: kept by at least 6 in 10 of the 10 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Music
Play music through the device's speaker by searching YouTube. Use this when the user asks to play, sing, or listen to music.
Spoken output: Everything outside HW markers in your reply is read aloud. For a play/stop request, start with the HW markers, then give one short confirmation and end the reply. Keep song-selection reasoning, transcript interpretation, and speaker attribution in the provider's native thinking channel (omit analysis if unavailable), without a text summary before/after tools or in the final answer; do not add a preamble, a draft confirmation, or a second confirmation.
Workflow
- Specific song / artist → play directly. When
[voice-instruction]is present, use that request; a conflicting noisy[transcript]does not replace the song title. No habit or identity lookup is needed. Use a known speaker forperson; otherwise omit the field silently. - Vague request ("play music", "sing something") → check habit patterns first:
Ifcat /root/local/users/{name}/habit/patterns.json 2>/dev/nullmusic_patternsexists and current hour is withinpeak_hour ± 1→ usepreferred_genreto pick a song, no need to ask. Otherwise → ask: "What are you in the mood for?". The file is bootstrapped lazily by wellbeing on its first threshold nudge; do not invoke habit Flow A from here. - Reply format:
[HW:/audio/play:{"query":"Bohemian Rhapsody Queen","person":"{name}"}][HW:/emotion:{"emotion":"excited","intensity":0.8}] Playing Bohemian Rhapsody!{name}is the speaker identified in the injected context. If nobody is identified, drop the field entirely —[HW:/audio/play:{"query":"Bohemian Rhapsody Queen"}]. Never invent a name or reuse one from an example. - Stop:
[HW:/audio/stop:{}] Music stopped.
API schema (/audio/play)
| Field | Required | Description |
query | YES | YouTube search string (include artist for better match) |
person | no | The identified speaker's label, lowercase ({name} from the injected context) — omit the field when nobody is identified. Unmatched names are logged under the shared unknown bucket, so a made-up name buys nothing. |
Do NOT use track, artist, title, song — those return 422.
Genre → Emotion (pair with every /audio/play)
| Genre keywords | Emotion |
| jazz, blues, soul, funk, swing | happy |
| classical, orchestra, piano, violin | curious |
| hip hop, rap, trap, r&b, rock, metal | excited |
| anything else | happy |
Examples
| Input | Output |
| "Play Bohemian Rhapsody" | [HW:/audio/play:{"query":"Bohemian Rhapsody Queen","person":"{name}"}][HW:/emotion:{"emotion":"excited","intensity":0.8}] Playing Bohemian Rhapsody! |
| "Sing me a song" | [HW:/emotion:{"emotion":"curious","intensity":0.6}] What kind of vibe — chill, upbeat, or something specific? |
| "Something chill" | [HW:/audio/play:{"query":"chill acoustic playlist","person":"{name}"}][HW:/emotion:{"emotion":"happy","intensity":0.8}] Here's some chill vibes! |
| "Something chill" (no identified speaker) | [HW:/audio/play:{"query":"chill acoustic playlist"}][HW:/emotion:{"emotion":"happy","intensity":0.8}] Here's some chill vibes! |
| "Stop the music" | [HW:/audio/stop:{}] Music stopped. |
Delegated request with an unknown speaker and noisy transcript:
Input:
[voice-instruction] Play Eternal Flame
[transcript] Uh, my favorite song, uh, Ethan of Lamb.Reply:
[HW:/audio/play:{"query":"Eternal Flame The Bangles"}][HW:/emotion:{"emotion":"happy","intensity":0.8}] Playing Eternal Flame by The Bangles.How HW markers work
The Go server intercepts [HW:/audio/play:...] / [HW:/audio/stop:...] in your reply text and forwards to HAL. This is the ONLY way to play music — never use exec, mpv, vlc, yt-dlp, or curl /audio/play.
The marker is passive text, NOT a command to run. Write it directly in your reply and stop — the OS runs it for you. Do NOT try to "execute" or "invoke" it.
- ❌ WRONG — echoing/wrapping the marker in a shell tool.
echoonly prints to stdout inside your sandbox; the OS never sees it, so no music plays:echo '[HW:/audio/play:{"query":"Gymnopedie No 1 Satie"}]' - ✅ RIGHT — the marker IS your reply text (no tool call at all):
[HW:/audio/play:{"query":"Gymnopedie No 1 Satie"}][HW:/emotion:{"emotion":"curious","intensity":0.6}] Here's some Satie. 🎹
Never put [HW:...] inside echo, exec, bash, printf, or any tool argument. If you find yourself reaching for a tool to play music, stop — just emit the marker as text.
Error handling
503→ "Music playback is not available right now."409→ music already playing; stop first, then play new song.- No results → tell user and suggest a different query.
Rules
- Emotion marker is mandatory after every
/audio/play. personMUST be lowercase.- Don't recite lyrics or "sing" via TTS — call
/audio/playand let real music play. - Volume control belongs to the Audio skill, not this one.
- If user specifies genre or mood ("play something relaxing"), pick a well-known song — no need to ask further.
Other versions17 projects use a version of this.
Word for word · 2
- autonomous-ai/autonomous-os★ 535100% same
- autonomous-ai/Physical-AI-Operating-System★ 535100% same
Edited · 0
None found.
Wrote their own version · 15
- calesthio/OpenMontage★ 74ksame name
- elevenlabs/skills★ 527same name
- guaardvark/guaardvark★ 296same name
- tadaspetra/loop★ 296same name
- bozhouDev/video-skills-toolkit★ 147same name
- marswaveai/skills★ 79same name
- anthonymaley/MusicTUI★ 14same name
- LinHao-city/StoryMind★ 10same name
- uid13/skills★ 7same name
- Runware/runware-skills★ 6same name
5 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository34 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- .cursor/rules/architecture.mdcCursor rule
- .cursor/rules/docs-on-code-change.mdcCursor rule
- .cursor/rules/multi-ide.mdcCursor rule
- .cursor/rules/testing.mdcCursor rule
- agent-managementSkill
- audioSkill
- cameraSkill
- claude-buddySkill
- computer-useSkill
- connectorsSkill
- displaySkill
- emotionSkill
- environmentSkill
- face-enrollSkill
- faqSkill
- guardSkill
- habitSkill
- harness-useSkill
- input-branchingSkill
- led-controlSkill
- moodSkill
- music-suggestionSkill
- sceneSkill
- sensingSkill
- sensing-trackSkill
- servo-controlSkill
- servo-trackingSkill
- skill-creatorSkill
- speaker-recognizerSkill
- user-emotion-detectionSkill
- voiceSkill
- wellbeingSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

