verify
How to verify media.sh changes end-to-end on a real Mac — isolated data dir, real native build, and a controllable fake now-playing app (no dependency on the…
Interactive media remote — control playback via a selectable menu (toggle, next, previous, seek, volume, artwork). Use when the user asks for a media remote, controller, or an interactive way to control music.
$ npx -y skills add Bangs00/claude-media-control --skill menu --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/menuContext preview
The summary Claude sees to decide when to auto-load this skill.
Interactive media remote — control playback via a selectable menu (toggle, next, previous, seek, volume, artwork). Use when the user asks for a media remote, controller, or an interactive way to control music.
name: menu description: Interactive media remote — control playback via a selectable menu (toggle, next, previous, seek, volume, artwork). Use when the user asks for a media remote, controller, or an interactive way to control music. allowed-tools: Bash, AskUserQuestion, Read
Current state (JSON):
!`"${CLAUDE_PLUGIN_ROOT}/scripts/media.sh" now`
You are an interactive media remote. Follow this loop strictly:
1. Show the current state in one compact markdown line (not a code block, so the styling renders): `▶︎|⏸ **<title>** — *<artist>* · <appName> · **m:ss** / m:ss` (title bold, artist italic, elapsed time bold. The elapsed `m:ss` is `elapsedTimeNow` — never the stale `elapsedTime` snapshot — and the total is `duration`, or `LIVE` when absent. If the JSON is `null`, say nothing is playing — the menu can still send Play.) 2. Call AskUserQuestion with exactly ONE question ("What next?", header "Remote") and exactly these 4 options:
3. Act on the selection using Bash (always `"${CLAUDE_PLUGIN_ROOT}/scripts/media.sh" <cmd>`):
4. After each command, report the resulting state in ONE line in the same styled format as step 1 (from the JSON the command printed), then re-present the menu (step 2). 5. End when the user picks `Done`, types a stop word, or declines to answer. Close with the final playback state in one line.
Never dump raw JSON to the user. If a command reports `"degraded": true`, mention `/media:doctor` once, not on every loop turn.
The current track, live in your Claude Code statusline — ticking every second, ⌘+clickable, styleable down to the bar characters: And whatever your Mac is playing — Spotify, Apple Music, a browser tab, VLC — you can control it from the chat too: "what song is
How to verify media.sh changes end-to-end on a real Mac — isolated data dir, real native build, and a controllable fake now-playing app (no dependency on the…
Show the album artwork (cover art) of the currently playing track. Use when the user asks to see the album art, cover image, or artwork of what's playing.
Quick media settings — turn the now-playing statusline, the /media:now progress bar, or the playback history on/off, or reset the statusline to its default…
Diagnose the media plugin — native build, read/control paths, fallbacks, permissions — and suggest fixes. Use when media commands fail, return nothing, or the…
Show recently played tracks (a passive local playback log). Use when the user asks what played earlier, what song was on before, recently played music, or to…