name: fireworks-radio description: Reliable coding-session audio fallback skill. Use when the user wants music or long-form audio during coding, when ncm-cli or Spotify CLI fails because of rights, auth, Premium, callback, or source availability issues, or when the user wants a quick YouTube + mpv mix with minimal friction.
fireworks-radio
Use this skill when the user wants music or long-form audio while coding and the normal media stack is unreliable.
Why This Exists
In practice, terminal music automation fails for boring real-world reasons:
ncm-clican search tracks but still fail at playback because the song has no playable source.- Spotify CLI can fail on OAuth callbacks, stale auth state, or Premium-only API restrictions.
- Background player processes can stack and cause double playback.
- The user does not care about audio-stack purity. The user cares about hearing music now.
This skill treats yt-dlp + mpv as the reliable fallback path.
Default Strategy
- Check whether a current player is already running.
- If the requested stack is
ncm-clior Spotify CLI, try it briefly only when there is a good reason. - If playback fails because of source availability, auth, Premium, callback, or rights restrictions, stop wasting time.
- Switch to
yt-dlp + mpv. - Build a short, concrete playlist from artist/title queries.
- Decide whether the user needs
streammode orcachemode. - Use listening-preference memory when choosing a preset or fallback style.
- Start playback in a real Terminal session or a stable background process.
- Avoid duplicate processes. If there is already a test track and a playlist track, kill the test track.
- Before switching sources, clear all existing
mpv --no-videoprocesses owned by this workflow, not just the last saved PID.
Source Policy For All Audio Playback
This rule applies to all audio playback in this skill, not only AI news.
Hard Constraints
- Use only publicly accessible, already-published, directly playable sources.
- Do not synthesize a local spoken track unless the user explicitly asks for generation.
- Do not open a webpage if direct terminal playback is possible.
- Play inside the current terminal audio path only, typically
mpv --no-video. - Prefer one concrete source that already exists over stitched or invented content.
- After one source works, identify at least one alternative source class as backup.
Allowed Source Types
- public YouTube videos where only audio is played
- public podcast RSS feeds with direct
enclosureaudio URLs - public direct MP3 episode links from a podcast host
- free and public music catalogs where the track is already published and directly accessible
Disallowed by Default
- local TTS generated from a web summary
- opening a browser page just so the user can press play there
- stitching unrelated articles into a fake “podcast episode”
- silently drifting from playback into article reading, newsletter summarization, or other non-playback forms
Music Source Guidance
When the user wants music, prefer free and public source classes first, such as:
- Creative Commons catalogs like
ccMixter - open-licensed catalogs like
Free Music Archive - public-domain or royalty-free classical catalogs like
Musopen - public-domain recording archives like
Open Music Archive
Per-track rights still matter. “Free” or “public” at the catalog level is not a blanket license claim for every downstream use.
AI News Mode
When the user asks for AI news, apply the global source policy above and narrow it further.
Preferred Order
- public YouTube AI news video playable through
mpv --no-video - public podcast RSS / MP3 enclosure playable directly in terminal
- only if both fail, explain the failure clearly and ask before switching formats
Commands
Build a playlist
./scripts/build_playlist.sh /private/tmp/fireworks-radio.m3u \
"萧亚轩 爱的主打歌 official" \
"Ed Sheeran Shape of You official lyric video" \
"Lady Gaga Bad Romance official"
Play a playlist
./scripts/play_mix.sh /private/tmp/fireworks-radio.m3u
Play in cache mode
./scripts/play_mix.sh --mode cache /private/tmp/fireworks-radio.m3u
Stop the current mix
./scripts/stop_mix.sh
One-shot preset
./scripts/play_mix.sh --preset three-artists
./scripts/play_mix.sh --auto
Preference memory
python3 ./scripts/radio_memory.py reinforce --preset three-artists --feedback like
python3 ./scripts/radio_memory.py reinforce --artist "Lady Gaga" --feedback like
python3 ./scripts/radio_memory.py show
Common User Requests
用 fireworks-radio 播一个适合编码的混播别折腾 ncm-cli 了,直接走 YouTube + mpv给我做一条 萧亚轩 / Ed Sheeran / Lady Gaga 的混播直接播今天的 AI 新闻,不要自己合成不要打开页面,直接在当前窗口播现成的 AI 新闻按我的历史偏好自动挑一个 preset停止当前混播如果 Spotify CLI 失败就自动降级
Operational Rules
- Prefer short playlists first: 9-15 tracks.
- Prefer official audio, lyric video, or official MV queries.
- For all audio playback, prefer an existing public source over any locally generated narration.
- For all audio playback, keep playback format narrow: direct terminal playback only, no browser detour.
- For all audio playback, always leave behind at least one backup source class after the first successful source.
- On source switches, assume the saved PID may be stale; clean residual
mpv --no-videoprocesses before starting the next source. - In AI news mode, prefer one finished public news source instead of assembling a synthetic recap.
- Do not promise
ncm-clior Spotify will work if the root problem is rights or Premium. - Do not leave a foreground test track running after validating playback.
- Always tell the user why the fallback happened.
- Explain clearly that
streamandcacheare workflow modes, not media-rights permissions.