| 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-cli can 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-cli or 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
stream mode or cache mode.
- 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-video processes 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
enclosure audio 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-video processes 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-cli or 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
stream and cache are workflow modes, not media-rights permissions.