{"skill":{"slug":"music-curator","displayName":"Music Curator","summary":"Curate personalized playlists and music recommendations with strict intent preservation. Use when the user wants a playlist, sequence, queue, recommendation...","description":"---\nname: music-curator\ndescription: Curate personalized playlists and music recommendations with strict intent preservation. Use when the user wants a playlist, sequence, queue, recommendation set, artist/track expansion, or music discovery with taste and version constraints. Designed to work above playback/control skills like music-assistant and knowledge skills like lastfm/last-fm. Especially useful when the user cares about boundaries such as official songs only, no remixes/covers/instrumentals, role/character/theme songs, or similar-song expansion from seed tracks.\nlicense: MIT\n---\n\n# Music Curator\n\nAct as the **curation layer**, not the player and not the raw search engine.\n\n## Core rules\n\n**Do not broaden the request without permission.**\n\nExamples:\n- \"VALORANT songs\" does **not** mean \"songs with a VALORANT vibe\".\n- \"official songs\" does **not** mean remixes, karaoke versions, instrumentals, or fan edits.\n- \"similar songs\" **does** allow expansion beyond direct ownership/official affiliation.\n\n**Do not let an earlier music task contaminate the current one.**\n\nExamples:\n- A previous seed-track expansion task must not narrow a later franchise playlist task.\n- A previous \"strict official songs\" task must not constrain a later \"give me similar songs\" task.\n\nTreat each new playlist/recommendation request as a fresh classification unless the user explicitly says to continue the previous one.\n\nIf the request is ambiguous, classify it before curating.\n\n## Request classification\n\nClassify each request into one of these modes:\n\n1. **Strict identity**\n   - The user wants songs that truly belong to a franchise, artist era, soundtrack, event, character, or official release family.\n   - Examples: \"无畏契约的歌\", \"周杰伦电影主题曲\", \"官方赛事曲\".\n   - In this mode, do **not** use similarity as the final selector.\n   - Use external/music-knowledge skills only to verify identity and enumerate the canonical candidates.\n\n2. **Similarity / expansion**\n   - The user wants more songs *like* a seed song/artist/mood.\n   - Examples: \"按这首歌扩 15 首\", \"类似这个 vibe\", \"更冷一点但同气质\".\n   - In this mode, use `lastfm` as the primary discovery engine by default. Only fall back to `last-fm` if `lastfm` is unavailable or insufficient.\n\n3. **Hybrid**\n   - The user wants a strict core plus controlled expansion.\n   - Example: \"先放官方曲，再混 5 首同风格\".\n\nIf unsure, ask one short clarifying question before generating a queue.\n\n## Tool roles\n\nUse tools/skills with this division of labor:\n\n- **music-assistant**: playback, queue management, device control, library/provider lookup, final enqueue.\n- **lastfm**: default music-knowledge and discovery source for similarity, related artists/tracks, popularity context, discovery support, and listening-profile support.\n- **last-fm**: fallback/reference-only companion skill when `lastfm` is unavailable or when broader API reference coverage is needed.\n- **This skill**: intent preservation, filtering, sequencing, taste logic, version hygiene, and final candidate selection.\n\nDo not let raw search results define meaning when the user asked for a strict category.\n\n## Default version hygiene\n\nUnless the user explicitly asks otherwise, filter out:\n- remix\n- remaster (if materially different and the original is available)\n- karaoke\n- piano\n- instrumental\n- 8-bit\n- slowed / reverb / sped up / nightcore\n- bootleg / mashup / fan edit\n- clearly fan-made derivatives\n\nDo **not** auto-ban `TV size` or `cover` just because of the label.\n\nInstead, evaluate them by release context:\n- Keep them when they are clearly official or formally released within the franchise/project.\n- Exclude them when they are obvious unofficial derivatives, fan uploads, or low-signal search noise.\n\nDo **not** auto-ban `live` or `acoustic` either; only exclude them when they are clearly off-brief for the user's request or when a more canonical version is available and the user did not ask for alternates.\n\nIf only non-ideal versions are available, say so explicitly before queueing them.\n\n## Curation workflow\n\n### A. Strict identity workflow\n\nUse this when semantic precision matters more than quantity.\n\n1. Identify the exact category the user means.\n2. Build a candidate list from reliable music knowledge sources or trusted skill outputs.\n3. Verify each candidate against the user's boundary.\n4. Remove version-noise by default.\n5. Use **Music Assistant search as the playback entrypoint**:\n   - search first\n   - choose the cleanest matching result\n   - then enqueue/play\n   - do not prefer blindly reusing old naked URIs when fresh search results are available\n6. If a chosen provider version errors at playback time, retry with another clean search result/provider mapping before giving up.\n7. If Music Assistant lacks some canonical tracks, report the gap instead of silently substituting unrelated songs.\n\n### B. Similarity workflow\n\nUse this when the user wants discovery/expansion.\n\n1. Take one or more seed tracks/artists.\n2. Pull related tracks/artists/tags from discovery sources.\n3. Filter by the user's hidden defaults:\n   - avoid noisy versions\n   - avoid obvious repeats\n   - keep energy/mood aligned unless asked to vary\n4. Build a set with light shape:\n   - open familiar\n   - expand outward gradually\n   - avoid five near-duplicates in a row\n5. Send the final set to Music Assistant.\n\n### C. Hybrid workflow\n\n1. Start with a strict canonical core.\n2. Mark where expansion begins.\n3. Add similarity-based tracks only after the strict core.\n4. Keep those sections mentally and verbally separate.\n\n## Queue-building rules\n\nWhen assembling a playlist/queue:\n- Avoid duplicate songs across providers unless the user asked for alternates.\n- Prefer the provider/version most likely to be the original intended release.\n- Balance tempo and energy unless the user asked for a monotone block.\n- Avoid abrupt quality drops.\n- If the user asks for a number (e.g. 20 songs), do not fill with junk merely to hit the count.\n  - Prefer: \"I found 13 clean fits; I can add 7 looser fits if you want.\"\n- For playback requests, **start playback quickly**:\n  - first push a small set of high-confidence tracks so music starts immediately\n  - then continue filling the queue toward the requested size\n  - do not wait to finish perfect curation before starting playback\n- Build a larger candidate pool than strictly needed, then filter/resolve from that pool instead of adding one song at a time with long pauses.\n\n## Communication rules\n\nBefore queueing, provide one of these depending on confidence:\n\n- **High confidence**: a concise explanation of selection logic, then queue.\n- **Medium confidence**: a candidate list first, then queue after confirmation.\n- **Low confidence**: ask one focused question.\n\nWhen the user clearly wants playback now, prefer a short acknowledgment plus immediate queue action over a long analysis dump.\n\nDuring long queue-building work, provide only concrete progress updates:\n- what is already queued\n- what was just added\n- what was excluded and why\n\nNever present a vibe-expansion set as if it were a strict official set.\n\n## User-specific defaults to preserve\n\nWhen working for this user, assume:\n- Intent preservation matters more than clever expansion.\n- If not explicitly requested, avoid remix / cover / piano / instrumental / karaoke / fan-edit variants.\n- For franchise/theme requests, official identity comes before mood similarity.\n- For recommendation requests, it is okay to use similarity/discovery tools **after** the request is clearly similarity-based.\n\n## Output style\n\nWhen listing curated results, keep it clean:\n- `Track — Artist`\n- Optionally add short reason tags like `(official)`, `(seed-adjacent)`, `(closer/looser fit)`.\n\nIf some tracks are unavailable in Music Assistant, separate:\n- **Canonical matches found in MA**\n- **Canonical matches missing in MA**\n\n## Failure modes to avoid\n\nBad behavior:\n- User: \"Play VALORANT songs\"\n- Assistant: adds unrelated cyber/EDM tracks because they feel similar.\n- User: after a `Die For You` similarity test, asks for \"VALORANT songs\"\n- Assistant: keeps using `Die For You` as a hidden seed and narrows the later task incorrectly.\n- User wants music now\n- Assistant: spends many minutes debating edge cases instead of queueing the obvious tracks first.\n\nCorrect behavior:\n- Build the strict VALORANT set first.\n- If the user wants more after that, ask whether to expand into similar tracks.\n- Reset task scope between separate music requests unless continuation is explicit.\n- Start playback with high-confidence tracks, then continue filling the queue.\n","topics":["Music"],"tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":550,"installsAllTime":20,"installsCurrent":3,"stars":1,"versions":1},"createdAt":1773247087650,"updatedAt":1778491839794},"latestVersion":{"version":"1.0.0","createdAt":1773247087650,"changelog":"Initial public release based on real-world playlist curation lessons: strict-vs-similar classification, search-first Music Assistant workflow, provider fallback, task-scope reset, and fast queue-start guidance.","license":"MIT-0"},"metadata":null,"owner":{"handle":"neqq3","userId":"s17c2gaepe0saz9snt2fyvnbkn8857mz","displayName":"neqq3","image":"https://avatars.githubusercontent.com/u/143509663?v=4"},"moderation":null}