Skip to main content

cwb

Control music via coding-with-beat. Activate when the user asks to play, pause, skip, or search for music; asks what's playing; mentions a song/artist/genre; or types "cwb" or "/cwb" followed by a command.

Zur Installation springen

Quellinformationen

Repository
jaychempan/coding-with-beat
Letzte Quellaktivität
27. Mai 2026 um 14:49
Erkannte Sprache von SKILL.md
Mehrsprachig
Sterne
114
Forks
2

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
cwb
description
Control music via coding-with-beat. Activate when the user asks to play, pause, skip, or search for music; asks what's playing; mentions a song/artist/genre; or types "cwb" or "/cwb" followed by a command.
metadata
{"short-description":"Music control for coding sessions"}
# coding-with-beat — Music Control You have a coding-with-beat MCP server running locally. Use its tools to control music without leaving the coding session. ## When to activate - User says: "play", "pause", "skip", "next", "what's playing", "volume", "lyrics" - User names a song, artist, or genre: "play some lofi", "put on 周杰伦" - User types `cwb <command>` or `/cwb <command>` - User asks about DJ Buddy or music status ## Available MCP tools Call these tools directly — do not shell out to `cwb` unless MCP is unavailable. | Tool | Purpose | |------|---------| | `play` | Resume playback | | `resume` | Resume (alias for play) | | `toggle` | Toggle play / pause | | `play_song(query)` | Search and play by name/artist/genre | | `play_number(number)` | Play track #n from last search or list | | `play_playlist(name)` | Play a named playlist | | `smart_search(queries)` | Mood/vibe/scene search — pass 2–3 angle queries | | `pause` | Pause | | `next_track` | Skip to next | | `prev_track` | Go to previous | | `now_playing` | Get current track info | | `set_volume(percent)` | Volume 0–100 | | `seek(seconds)` | Seek to position (seconds or mm:ss) | | `set_play_mode(mode)` | `shuffle` \| `sequential` \| `repeat` \| `repeat_one` | | `like_current` | Like / favourite current track | | `search(query)` | Search library + Apple Music catalog | | `list_library(limit)` | List all library tracks | | `list_loved(limit)` | List all loved/hearted tracks `[♥ 喜欢]` | | `search_loved(query)` | Search only within loved tracks | | `list_playlists` | List all playlists | | `list_history(limit)` | Recently played tracks | | `history_search(query)` | Search within play history | | `set_source(name)` | Switch source: `apple_music` \| `local` \| `qq_music` | | `generate_profile(period)` | Generate listening report + open HTML in browser — `daily` \| `weekly` \| `monthly` \| `yearly` | | `focus_start(work, break_, cycles)` | Start Pomodoro focus session | | `focus_status` | Current focus phase and time remaining | | `focus_stop` | Stop focus session | | `show_player` | Render pixel player UI | | `show_cover` | Render current track cover art as pixel art | | `show_lyrics` | Show karaoke / synced lyrics | | `dj_say(message)` | Have DJ Buddy say something | | `vibe_set(vibe)` | Set session vibe / mood | | `status` | Full player state | | `tips` | Show a card of natural-language phrases the user can say | ## Natural language examples | User says | Action | |-----------|--------| | "play some lofi" | `play_song("lofi")` | | "skip this" | `next_track` | | "what's playing?" | `now_playing` | | "turn it up" | `set_volume(80)` (increase by ~15) | | "pause the music" | `pause` | | "shuffle mode" | `set_play_mode("shuffle")` | | "like this song" | `like_current` | | "search for Jay Chou" | `search("Jay Chou")` | | "play #3" | `play_number(3)` | | "switch to QQ Music" | `set_source("qq_music")` | ## Scene dispatch — mood / vibe / scene requests Do NOT generate keywords. For any request that isn't a specific song/artist/command, match to a scene below and call `smart_search` **once** with `queries=[angle1, angle2, angle3]`. Do NOT call `smart_search` three separate times — each call overwrites the queue, corrupting play_number() indices. | Scene | Trigger words | Angle 1 | Angle 2 | Angle 3 | |---|---|---|---|---| | 🎧 Lofi | lofi / 深夜 / 写代码 / 低保真 / chillhop | `lofi hip hop late night coding chill` | `lofi jazz rain study instrumental` | `chillhop beats lo-fi bedroom producer` | | 🧠 Focus | 专注 / 心流 / ambient / 无人声 / flow state | `deep focus ambient instrumental no vocals` | `flow state drone minimal electronic` | `study music concentration piano quiet` | | 🔥 Hype | 充能 / 运动 / 高能 / 早晨 / workout / hype | `morning energy upbeat pop indie fresh` | `workout motivation electronic dance` | `hype rap trap energetic beats pump` | | ☕ Jazz | 爵士 / jazz / 咖啡馆 / smooth / bossa nova | `smooth jazz cafe background mellow` | `jazz trio acoustic bossa nova guitar` | `late night jazz piano bar cool relaxed` | | 🌆 Synthwave | 赛博 / synthwave / 电子 / 夜驾 / neon | `synthwave retrowave night drive neon` | `cyberpunk electronic dark ambient synth` | `80s retro synth outrun vapor` | | 🌅 Relax | 放松 / 解压 / 下班 / 傍晚 / unwind | `relaxing downtempo chill evening unwind` | `acoustic folk gentle calm soft` | `nature ambient breeze afternoon easy listening` | | 🎹 Classical | 古典 / 钢琴 / 弦乐 / 交响 / classical | `classical piano solo nocturne gentle` | `string quartet orchestral cinematic calm` | `bach mozart ambient classical study` | | 💙 Sad | 伤感 / 失落 / 难过 / melancholy / heartbreak | `melancholy emotional piano sad indie` | `heartbreak slow ballad rnb rainy` | `sorrowful strings cinematic emotional` | | 🎉 Party | 派对 / 聚会 / party / dance / 蹦迪 / edm | `party dance pop upbeat celebratory` | `edm festival club electronic banger` | `latin pop reggaeton dance floor` | | 🏮 Chinese | 国风 / 中国风 / 华语 / 民谣 / 古风 | `中国风 古风 古琴 传统乐器` | `华语流行 国语歌 indie 民谣` | `chinese traditional folk guzheng erhu instrumental` | | 🌙 Sleep | 助眠 / 睡前 / 失眠 / sleep / white noise | `sleep music white noise ambient drone` | `lullaby soft piano rain sleep calm` | `meditation deep sleep binaural delta waves` | Display results grouped by angle with emoji labels (returned by the tool), number globally across groups (1, 2, 3…), end with: 喜欢哪首?说编号我来播。 Do NOT auto-play. ## Loved / 喜欢列表 When user says: 从喜欢里 / 收藏里找 / 我喜欢的 / loved only / play from liked / 心动歌单 → call `search_loved(query)` instead of `smart_search()` When user says: 列出收藏 / 我的喜欢 / show liked / list loved / 喜欢列表 → call `list_loved()` Normal `smart_search()` already includes loved tracks (ranked first, tagged `[♥ 喜欢]`). ## Tips / 帮助 When user says: DJ 能做什么 / DJ Buddy 能做什么 / DJ 有什么指令 / DJ 怎么用 / ask DJ / DJ help / what can DJ do → call `tips()` ## Library-only search When the user explicitly restricts the search to their local library — trigger phrases include: - 中文: "从资料库找"、"资料库里有没有"、"我已经有这首"、"本地库里" - English: "in my library", "library only", "do I have", "from my library" **Do this:** 1. Call `search(query)` as normal. 2. From the results, **only show entries where `source == "library"`**. 3. If none are found, tell the user: "资料库里没找到,要不要搜一下线上?" — do NOT auto-expand to catalog. Do NOT call `list_library` for this — `search()` is more targeted. `list_library` is only useful when the user wants to **browse all** tracks without a specific query. ## play_number — number parsing Always parse the user's number expression before calling `play_number(N)`: | User says | Call | |---|---| | "3" / "#3" / "第3首" / "第三首" / "第三个" / "三" | `play_number(3)` | | "第一" / "1" / "one" / "the first one" | `play_number(1)` | | "第二" / "2" / "second" / "下一个" (when result list is shown) | `play_number(2)` | | "最后一首" / "last one" | use the highest number shown in the results | Chinese ordinals 第一/第二/第三/第四/第五 map to 1/2/3/4/5. Always resolve before calling. ## play_number recovery — index out of bounds When `play_number(N)` returns an error containing "only", "had", "items", or "out of range": 1. **If the scene queries are visible in the current conversation**: immediately call `smart_search(queries=[...])` again with the same queries, then call `play_number(N)`. 2. **If the scene is not visible**: ask once — "队列已被刷新,你想播哪个场景的第 N 首?" — then re-search and play. Do NOT tell the user to re-search manually. Always recover automatically when context is available. ## Setup check — first-time installation Do **not** run a shell `curl` preflight against `/mcp`. Streamable HTTP MCP endpoints are not plain health-check URLs, and Codex shell sandboxing may block local sockets even when the MCP tools are available. Use the MCP tools as the source of truth: 1. If `mcp__coding_with_beat__` tools are available, call the requested tool directly. 2. If MCP tools are unavailable or the MCP call itself reports the server is unreachable, fall back to the `cwb` CLI commands below. 3. If both MCP and CLI are unavailable, tell the user and offer the one-liner: ``` coding-with-beat 还没安装。运行下面这行来一键安装: curl -LsSf https://raw.githubusercontent.com/jaychempan/coding-with-beat/main/bootstrap_codex.sh | sh 安装完重开一个 shell 和 Codex session,状态栏出现 (•_•) 就好了。 ``` ## CLI fallback If MCP tools are unavailable, fall back to the `cwb` CLI: ```bash cwb play "query" # search and play cwb play <n> # play track #n from last search (NOT cwb play-number) cwb pause # pause cwb next # skip cwb np # now playing cwb volume 70 # volume cwb like # like current cwb search "query" # search without playing cwb loved # list all loved/hearted tracks cwb search_loved "q" # search within loved tracks only ``` ## Response style After any music action, give a **one-line** confirmation: `▶ Now playing: Midnight City — M83`. No extra commentary unless the user asks.
Auf GitHub ansehen