[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CDH3R3WQ6TJ7VYSQZB0203":3,"skill-same:01M6CDH3R3WQ6TJ7VYSQZB0203":66},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":23,"linkOnly":24,"markdownContent":25,"markdownBody":26,"frontMatter":27,"refName":28,"commitSha":29,"skillDirectory":30,"forksCount":31,"repositoryHtmlUrl":32,"repositoryHomepageUrl":33,"ownerHtmlUrl":34,"ownerBlogUrl":35,"ownerDescription":36,"updatedAt":37,"install":38,"resources":51},"01M6CDH3R3WQ6TJ7VYSQZB0203","spotify",null,"codewhale-hq\u002FCodewhale","codewhale-hq","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F326694313?v=4","01M6CDD9D70AD3631SMRJ7REW4","Codewhale","01M6CDD9H0VAXYCB2NGGPZC16K",41173,"MIT","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fcrates\u002Fskills\u002Fassets\u002Fskills\u002Fspotify\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[5],"2026-11-10 10:12:30",false,"---\nname: spotify\ndescription: Control Spotify playback and search the library and playlists. Use when: spotify, music, playlist, play, pause, or what's playing.\ninvocation: model+user\n---\n\n# Spotify\n\n## When to use\nPlaying, pausing, skipping, identifying the current track, searching for\nmusic, and reading playlists.\n\n## Setup\nTwo paths:\n\n1. **Local control (macOS, no setup).** The Spotify desktop app must be\n   running, or say so:\n   `osascript -e 'tell application \"Spotify\" to playpause'`\n2. **Web API (search, playlists, other platforms).** Requires an authorized Spotify\n   connection with suitable scopes; report missing access without asking the\n   user to paste a token into chat:\n   `GET api.spotify.com\u002Fv1\u002Fsearch`, `\u002Fv1\u002Fme\u002Fplaylists`, `\u002Fv1\u002Fplaylists\u002F{id}`.\n\n## Workflow\n1. Prefer local control for transport (play\u002Fpause\u002Fnext\u002Fprevious\u002Fcurrent track).\n   Use the requested `play` or `pause` verb; `playpause` is a toggle and cannot\n   safely be retried after an uncertain result. Verify player state afterward.\n2. Use available Web API endpoints for search and playlist contents. Check\n   current app-access restrictions; do not promise the restricted Recommendations\n   API. Handle 403\u002F429 responses without bypassing access or rate limits.\n3. Report artist, track, album, and playlist names verbatim.\n\n## Non-goals\n- Do not change playlists (add\u002Fremove\u002Freorder) unless asked.\n- Do not download or rip audio.\n- Do not handle the user's Spotify password.\n\nReference: [Spotify API changes](https:\u002F\u002Fdeveloper.spotify.com\u002Fblog\u002F2024-11-27-changes-to-the-web-api).\n","# Spotify\n\n## When to use\nPlaying, pausing, skipping, identifying the current track, searching for\nmusic, and reading playlists.\n\n## Setup\nTwo paths:\n\n1. **Local control (macOS, no setup).** The Spotify desktop app must be\n   running, or say so:\n   `osascript -e 'tell application \"Spotify\" to playpause'`\n2. **Web API (search, playlists, other platforms).** Requires an authorized Spotify\n   connection with suitable scopes; report missing access without asking the\n   user to paste a token into chat:\n   `GET api.spotify.com\u002Fv1\u002Fsearch`, `\u002Fv1\u002Fme\u002Fplaylists`, `\u002Fv1\u002Fplaylists\u002F{id}`.\n\n## Workflow\n1. Prefer local control for transport (play\u002Fpause\u002Fnext\u002Fprevious\u002Fcurrent track).\n   Use the requested `play` or `pause` verb; `playpause` is a toggle and cannot\n   safely be retried after an uncertain result. Verify player state afterward.\n2. Use available Web API endpoints for search and playlist contents. Check\n   current app-access restrictions; do not promise the restricted Recommendations\n   API. Handle 403\u002F429 responses without bypassing access or rate limits.\n3. Report artist, track, album, and playlist names verbatim.\n\n## Non-goals\n- Do not change playlists (add\u002Fremove\u002Freorder) unless asked.\n- Do not download or rip audio.\n- Do not handle the user's Spotify password.\n\nReference: [Spotify API changes](https:\u002F\u002Fdeveloper.spotify.com\u002Fblog\u002F2024-11-27-changes-to-the-web-api).\n",{},"main","654aa776d6bcb98292d4c7c5841fed871e1ba5bd","crates\u002Fskills\u002Fassets\u002Fskills\u002Fspotify",3571,"https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale","https:\u002F\u002Fcodewhale.net\u002F","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq","https:\u002F\u002Fcodewhale.net","Open-source coding agent for your terminal. Works with the model provider you choose.","2026-11-14 02:55:52",{"source":7,"skillName":5,"commands":39,"prompt":49,"zipAvailable":50},[40,43,46],{"tool":41,"command":42},"npx","npx skills add codewhale-hq\u002FCodewhale --skill spotify",{"tool":44,"command":45},"bunx","bunx skills add codewhale-hq\u002FCodewhale --skill spotify",{"tool":47,"command":48},"pnpm","pnpm dlx skills add codewhale-hq\u002FCodewhale --skill spotify","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fcrates\u002Fskills\u002Fassets\u002Fskills\u002Fspotify\u002FSKILL.md",true,[52,58,62],{"path":53,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":56,"sourceHtmlUrl":57},"references\u002Fagile-field-reference.md","REFERENCE","参考文档",2164,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fjira-agile\u002Freferences\u002Fagile-field-reference.md",{"path":59,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":60,"sourceHtmlUrl":61},"references\u002Fsprint-operations.md",1928,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fjira-agile\u002Freferences\u002Fsprint-operations.md",{"path":63,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":64,"sourceHtmlUrl":65},"SKILL.generation-13.md",1081,"https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fcrates\u002Fskills\u002Fassets\u002Fskills\u002Fspotify\u002FSKILL.generation-13.md",[67,95,120,140,153,160],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":23},"01M6CDJRMPR8FX1WVFP94PGDMD","gh-find-prs","Survey the open Codewhale PR and issue queue read-only: fetch each item, check it against current code, and produce one coverage and disposition matrix with cited evidence and credit owed.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fgh-find-prs\u002FSKILL.md",[],[74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94],"find","gh find prs","gh","prs","produce","with","read-only","matrix","codewhale","queue","issue","read","check","code","only","open","survey","pr","evidence","fetch","coverage",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":102,"publishedAt":23},"01M6CDJP0ZYMQNA6AN028X7A96","gh-file-issue","Use when filing a new Codewhale GitHub issue: turn a bug or idea into a well-formed, actionable issue with repro, acceptance criteria, labels, and milestone.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fgh-file-issue\u002FSKILL.md",[101],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[103,76,104,105,84,106,107,108,109,110,111,112,113,82,114,115,116,79,117,118,119],"file issue","file","gh file issue","milestone","idea","filing","when","new","labels","acceptance","actionable","bug","github issue","github","acceptance criteria","repro","use",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":127,"publishedAt":23},"01M6CDJJZB0G4XHWWBD12S990C","gh-close-issues","Close resolved Codewhale issues only after verifying the landed behavior: Refs #N per landing, Fixes #N only when the reporter's scenario was reproduced, closure at the release step or on the reporter's confirmation, always with a crediting comment.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fgh-close-issues\u002FSKILL.md",[126],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[128,129,130,76,131,132,133,134,79,109,135,136,82,137,138,88,139],"gh close issues","close","issues","at","release","reporter","scenario","closure","fixes","behavior","confirmation","landing",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":147,"publishedAt":23},"01M6CDJGR688JJVTG0A1ETBJGQ","gh-assign-issues","Use to assign GitHub issues to a milestone and\u002For owners in bulk, verifying each.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fgh-assign-issues\u002FSKILL.md",[146],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[148,76,130,149,119,116,106,150,151,152],"gh assign issues","assign","bulk","github issues","owners",{"skillNo":154,"name":155,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":159,"publishedAt":23},"01M6CDJEBMKBAGTBG18N5YJNSE","feedback","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Ffeedback\u002FSKILL.md",[158],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[155],{"skillNo":161,"name":162,"nameZh":6,"description":163,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":167,"publishedAt":23},"01M6CDJBRQ86PP9XNXQMRB1CGX","cw-slice","Use before writing code for any Codewhale feature, upgrade, or refactor: find the existing owner of the behavior, bound the change to one reviewable slice, and fix the evidence bar before you start.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fcw-slice\u002FSKILL.md",[166],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[168,169,170,171,172,173,174,175,176,82,177,137,74,178,87,119,179,180,92],"slice","cw slice","start","bar","you","Existing","upgrade","for","feature","refactor","change","writing","fix"]