[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6G782QKG83G99DDMQWPS86Z":3,"skill-same:01M6G782QKG83G99DDMQWPS86Z":91},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":6,"ownerHtmlUrl":61,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":62,"install":63,"resources":76},"01M6G782QKG83G99DDMQWPS86Z","my-play-music-from-yt",null,"Play music on YouTube via browser automation with playwright-cli.\nUse when the user wants to: \n(1) play a specific song (e.g. 'play Money Money Money by ABBA') \n(2) play songs by an artist as a playlist or mix (e.g. 'play Jay Chou's songs') \n(3) play genre or mood-based music (e.g. 'play relaxing spa music', 'play 60s Chinese oldies') \n(4) control playback — next, pause, resume, stop, skip ad, change song, close the player. \nAlso handles song\u002Fartist name corrections from voice transcription errors.","kbarbel640-del\u002Fskills","kbarbel640-del","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F255315490?v=4","01M6CJPPQGCCESXMG3K7BBGQ5J","01M6CJPPX2PB2BCZERFVM2C2B3",1,"MIT","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fwhodidthese\u002Fmy-play-music-from-yt\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"my play music from yt","yt","play","music","next","song","player","mix","errors","close","as","spa","cli","chinese","youtube","stop","Bash","browser","change","browser automation","2026-11-10 10:12:30",false,"---\r\nname: my-play-music-from-yt\r\ndescription: |\r\n  Play music on YouTube via browser automation with playwright-cli.\r\n  Use when the user wants to: \r\n  (1) play a specific song (e.g. 'play Money Money Money by ABBA') \r\n  (2) play songs by an artist as a playlist or mix (e.g. 'play Jay Chou's songs') \r\n  (3) play genre or mood-based music (e.g. 'play relaxing spa music', 'play 60s Chinese oldies') \r\n  (4) control playback — next, pause, resume, stop, skip ad, change song, close the player. \r\n  Also handles song\u002Fartist name corrections from voice transcription errors.\r\nallowed-tools: Bash(playwright-cli:*)\r\nmetadata: {\"openclaw\": {\"requires\": {\"bins\": [\"playwright-cli\"]}, \"emoji\": \"?\"}}\r\n---\r\n\r\n# Play Music from YouTube — Clear, Stable, High SNR Instruction Set\r\n\r\nThis skill controls a **visible browser** using `playwright-cli` to search and play YouTube music.\r\nAll actions follow **snapshot → ref → action** pattern. Never guess. Never assume.\r\n\r\n---\r\n# CORE PRINCIPLES\r\n\r\n### **1. Always use a named session**\r\n```\r\n-s=music_player\r\n```\r\nEvery command must include it.\r\n\r\n### **2. Always snapshot before interacting**\r\n```\r\nplaywright-cli -s=music_player snapshot\r\n```\r\nNever click\u002Ffill without fresh refs.\r\n\r\n### **3. Only use ref-based actions**\r\n```\r\nclick e123\r\nfill e45 \"text\"\r\n```\r\nNever use CSS, XPaths, or assumptions.\r\n\r\n### **4. Browser must be visible**\r\n```\r\n--headed\r\n```\r\nUse headed **by default** unless the user explicitly requests headless.\r\n\r\n### **5. Session continues in background**\r\nAfter playback begins, do not block waiting. Continue responding normally.\r\n\r\n### **6. Use persistent browser profile**\r\n```\r\n--persistent\r\n```\r\nAlways include `--persistent` when opening a new session. This saves the browser profile (cookies, localStorage, IndexedDB, cache) to disk, so **login state survives session restarts**.\r\n\r\n---\r\n# SNAPSHOT STORAGE\r\n\r\nSnapshots generated by `playwright-cli` may exist in two possible locations:\r\n\r\n1. `$WORKSPACE\u002F.playwright-cli\u002F` ← **primary (search here first)**\r\n2. `~\u002F.playwright-cli\u002F` ← **fallback when the workspace folder is empty**\r\n\r\nUse **only these two folders** unless the user explicitly authorizes a broader search.\r\n\r\nIf no .yml snapshots appear here, it is almost always **MacOS permission-related**.\r\nAsk the user to run:\r\n```\r\nplaywright-cli open https:\u002F\u002Fwww.youtube.com --headed\r\n```\r\nThis will trigger macOS system dialogs for:\r\n- Screen Recording\r\n- Automation\r\n- Accessibility\r\n\r\nApprove all to enable snapshot generation.\r\n\r\n> **Note:** On Windows and Linux, these permission dialogs do not apply. If snapshots are missing on those platforms, check that the browser launched correctly.\r\n\r\n---\r\n# SESSION MANAGEMENT\r\n\r\n### Check whether the session exists\r\n```\r\nplaywright-cli list\r\n```\r\n- Exists → continue\r\n- Missing → recreate:\r\n```\r\nplaywright-cli -s=music_player open https:\u002F\u002Fwww.youtube.com --headed --persistent\r\n```\r\n\r\n**On any unexpected error**, run `playwright-cli list` first to diagnose before retrying.\r\n\r\n### If the session is frozen or blank\r\n```\r\nplaywright-cli -s=music_player goto https:\u002F\u002Fwww.youtube.com\r\n```\r\nThis reliably resets the page without closing the session.\r\n\r\n---\r\n# SEARCH QUERY CONSTRUCTION\r\n\r\nBuild the search query based on user intent:\r\n\r\n| Intent | Query pattern | Example |\r\n|---|---|---|\r\n| Specific song | `[Artist] [Song Title]` | `ABBA Money Money Money` |\r\n| Artist playlist | `[Artist]` | `周杰倫` |\r\n| Genre \u002F mood | `[descriptor] music playlist` | `relaxing spa music playlist` |\r\n| Era-based | `[era] [language\u002Fgenre] playlist` | `華語 60年代 老歌 playlist` |\r\n\r\n**Search tips:**\r\n- For artist requests, a simple artist name search usually surfaces \"Mix\" and playlist results at the top — prefer these for continuous playback.\r\n- Use the original language for non-English songs (e.g. Chinese characters for Chinese songs).\r\n\r\n**Voice transcription (ASR) and typo handling:**\r\n- **Do NOT ask the user to confirm** potentially misheard names. YouTube has robust auto-correction and will show results for the intended query even with typos or homophones (e.g. searching \"楊成林\" will auto-correct to \"楊丞琳\").\r\n- Always search directly with whatever text you have. After the search, check the results snapshot — if YouTube shows a \"Did you mean: ...\" or \"顯示以下搜尋結果: ...\" banner with corrected results, the correction is already applied.\r\n- Only fall back to **web search** or asking the user if the YouTube search results are clearly unrelated or empty.\r\n\r\n---\r\n# SEARCH WORKFLOW (HIGH SIGNAL, LOW AMBIGUITY)\r\n\r\n## **Step 1 — Reset search state**\r\nA clean search state avoids dropdown obstruction.\r\n\r\nPerform the following every time before a new search:\r\n\r\n1. Snapshot.\r\n2. If button `\"Clear search query\"` \u002F `\"清除搜尋查詢\"` is present → click it.\r\n3. Else press:\r\n```\r\nplaywright-cli -s=music_player press Escape\r\n```\r\n4. If suggestions or overlays still block results → reset page:\r\n```\r\nplaywright-cli -s=music_player goto https:\u002F\u002Fwww.youtube.com\r\n```\r\nThen snapshot again.\r\n\r\n---\r\n## **Step 2 — Locate search bar**\r\nSnapshot → find:\r\n- `combobox \"搜尋\"` or\r\n- `combobox \"Search\"`\r\n\r\nRecord its ref (e.g., `e34`).\r\n\r\n---\r\n## **Step 3 — Perform search**\r\n```\r\nplaywright-cli -s=music_player fill \u003CsearchRef> \"SEARCH TERM\"\r\nplaywright-cli -s=music_player press Enter\r\n```\r\nThen snapshot immediately to avoid suggestion-panel obstruction.\r\n\r\n---\r\n## **Step 4 — Choose best result**\r\n\r\nSelect result based on **user intent**:\r\n\r\n- **Specific song** → click the `link` whose heading matches the song title.\r\n- **Artist** → prefer `\"Mix - [Artist]\"` links or playlist links for continuous playback.\r\n- **Genre \u002F mood** → prefer long-duration compilations or playlists (>20 mins).\r\n- **Fallback** if no clear match → prefer: Mix > Long playlist > Official channel upload > Single MV.\r\n\r\nFor guidance on identifying YouTube result types, see [.\u002Freferences\u002Fyoutube-guide.md](.\u002Freferences\u002Fyoutube-guide.md).\r\n\r\n**Important:** Do NOT click channel cards (e.g. `link \"Artist Name ... @handle•NNNK subscribers ...\"` \u002F `\"Artist Name ... @handle•NNN萬位訂閱者 ...\"`). They navigate to the channel page, not music. Look for Mix or playlist results below them.\r\n\r\nClick using its ref:\r\n```\r\nplaywright-cli -s=music_player click eXYZ\r\n```\r\n\r\nIf click is blocked:\r\n1. `press Escape`\r\n2. Retry click once.\r\n3. If still blocked → `goto https:\u002F\u002Fwww.youtube.com` and restart from Step 1.\r\n\r\n---\r\n# AD HANDLING LOOP\r\n\r\nAfter clicking a result:\r\n```\r\nplaywright-cli -s=music_player snapshot\r\n```\r\nLoop up to 4 iterations:\r\n\r\n### **1. Playback detected**\r\nIf you see:\r\n- `button \"Pause (k)\"` or\r\n- `button \"Play (k)\"` (but video advancing)\r\n\r\nAND no ad indicators → playback is active → report song title to the user.\r\n\r\n### **2. Skip button detected**\r\nAny element whose label contains:\r\n- skip \u002F Skip \u002F 略過\r\n- Skip Ad \u002F Skip Ads \u002F 略過廣告\r\n\r\n→ click it immediately.\r\n\r\n**Note:** If the skip button is `[disabled]` (countdown not yet elapsed), do NOT click it — wait ~5 seconds instead (see step 3).\r\n\r\nThen snapshot again. YouTube often plays **two consecutive ads** — always check for a second ad after skipping.\r\n\r\n### **3. Non-skippable ad \u002F countdown**\r\nWait 5 seconds:\r\n```\r\nplaywright-cli -s=music_player eval \"await new Promise(r=>setTimeout(r,5000))\"\r\n```\r\nThen snapshot again and repeat from step 1.\r\n\r\n### If ads persist >20 seconds\r\n- press Escape\r\n- or reload page\r\n\r\n---\r\n# PLAYBACK CONTROLS\r\nAlways snapshot first.\r\n\r\n| Command | Action |\r\n|--------|--------|\r\n| Pause | click `button \"Pause (k)\"` |\r\n| Resume \u002F Play | click `button \"Play (k)\"` |\r\n| Next | `press Shift+n` |\r\n| Previous | `press Shift+p` |\r\n| Change song | Start new search from Step 1 |\r\n| Stop | `playwright-cli -s=music_player close` |\r\n\r\n**Keyboard shortcuts** (reliable alternative when button refs are hard to locate):\r\n\r\n```\r\nk        → play \u002F pause\r\nShift+n  → next track\r\nShift+p  → previous track\r\nm        → mute \u002F unmute\r\nf        → fullscreen toggle\r\nj        → rewind 10s\r\nl        → forward 10s\r\n```\r\n\r\nUsage: `playwright-cli -s=music_player press \u003Ckey>`\r\n\r\n---\r\n# ERROR RECOVERY & EDGE CASES\r\n\r\n### If snapshot empty or missing critical refs\r\n```\r\nplaywright-cli -s=music_player goto https:\u002F\u002Fwww.youtube.com\r\n```\r\n→ restart from Step 1.\r\n\r\n### If browser crashes or session disappears\r\n`playwright-cli list` shows no `music_player`.\r\nInform the user the browser was closed, then recreate session:\r\n```\r\nplaywright-cli -s=music_player open https:\u002F\u002Fwww.youtube.com --headed --persistent\r\n```\r\nBecause `--persistent` is used, the browser profile (including login state) is restored automatically. No need to log in again.\r\n\r\n### YouTube cookie consent \u002F sign-in dialogs\r\nSnapshot → locate dismiss actions:\r\n- \"Accept all\" \u002F \"全部接受\"\r\n- \"Reject all\"\r\n- \"No thanks\" \u002F \"不用了，謝謝\"\r\n- Close (X)\r\n\r\nClick dismiss.\r\n\r\n### YouTube Premium trial popup\r\nSnapshot → look for `\"No thanks\"`, `\"不用了，謝謝\"`, or a dismiss\u002Fclose button → click to dismiss.\r\n\r\n### Video unavailable\r\nSnapshot shows \"Video unavailable\" or similar error.\r\n- `playwright-cli -s=music_player go-back` → snapshot → try the next result link.\r\n\r\n### Cannot find elements in search results\r\n- Scroll down: `playwright-cli -s=music_player press PageDown` → snapshot again.\r\n\r\n### Page frozen or blank\r\n- `playwright-cli -s=music_player reload` → snapshot.\r\n- If still broken: `playwright-cli -s=music_player close` → reopen and retry from Step 1.\r\n\r\n### Persistent profile corrupted or login expired\r\nIf the browser opens but login state is lost, or YouTube forces re-authentication:\r\n1. Inform the user they need to log in again in the browser.\r\n2. After login, the persistent profile will be updated automatically.\r\n\r\nTo completely reset the profile (last resort):\r\n```\r\nplaywright-cli -s=music_player close\r\nplaywright-cli -s=music_player delete-data\r\nplaywright-cli -s=music_player open https:\u002F\u002Fwww.youtube.com --headed --persistent\r\n```\r\n\r\n---\r\n# REFERENCES\r\n- [Playwright CLI reference](.\u002Freferences\u002Fplaywright-ref.md)\r\n- [YouTube result identification](.\u002Freferences\u002Fyoutube-guide.md)\r\n","# Play Music from YouTube — Clear, Stable, High SNR Instruction Set\r\n\r\nThis skill controls a **visible browser** using `playwright-cli` to search and play YouTube music.\r\nAll actions follow **snapshot → ref → action** pattern. Never guess. Never assume.\r\n\r\n---\r\n# CORE PRINCIPLES\r\n\r\n### **1. Always use a named session**\r\n```\r\n-s=music_player\r\n```\r\nEvery command must include it.\r\n\r\n### **2. Always snapshot before interacting**\r\n```\r\nplaywright-cli -s=music_player snapshot\r\n```\r\nNever click\u002Ffill without fresh refs.\r\n\r\n### **3. Only use ref-based actions**\r\n```\r\nclick e123\r\nfill e45 \"text\"\r\n```\r\nNever use CSS, XPaths, or assumptions.\r\n\r\n### **4. Browser must be visible**\r\n```\r\n--headed\r\n```\r\nUse headed **by default** unless the user explicitly requests headless.\r\n\r\n### **5. Session continues in background**\r\nAfter playback begins, do not block waiting. Continue responding normally.\r\n\r\n### **6. Use persistent browser profile**\r\n```\r\n--persistent\r\n```\r\nAlways include `--persistent` when opening a new session. This saves the browser profile (cookies, localStorage, IndexedDB, cache) to disk, so **login state survives session restarts**.\r\n\r\n---\r\n# SNAPSHOT STORAGE\r\n\r\nSnapshots generated by `playwright-cli` may exist in two possible locations:\r\n\r\n1. `$WORKSPACE\u002F.playwright-cli\u002F` ← **primary (search here first)**\r\n2. `~\u002F.playwright-cli\u002F` ← **fallback when the workspace folder is empty**\r\n\r\nUse **only these two folders** unless the user explicitly authorizes a broader search.\r\n\r\nIf no .yml snapshots appear here, it is almost always **MacOS permission-related**.\r\nAsk the user to run:\r\n```\r\nplaywright-cli open https:\u002F\u002Fwww.youtube.com --headed\r\n```\r\nThis will trigger macOS system dialogs for:\r\n- Screen Recording\r\n- Automation\r\n- Accessibility\r\n\r\nApprove all to enable snapshot generation.\r\n\r\n> **Note:** On Windows and Linux, these permission dialogs do not apply. If snapshots are missing on those platforms, check that the browser launched correctly.\r\n\r\n---\r\n# SESSION MANAGEMENT\r\n\r\n### Check whether the session exists\r\n```\r\nplaywright-cli list\r\n```\r\n- Exists → continue\r\n- Missing → recreate:\r\n```\r\nplaywright-cli -s=music_player open https:\u002F\u002Fwww.youtube.com --headed --persistent\r\n```\r\n\r\n**On any unexpected error**, run `playwright-cli list` first to diagnose before retrying.\r\n\r\n### If the session is frozen or blank\r\n```\r\nplaywright-cli -s=music_player goto https:\u002F\u002Fwww.youtube.com\r\n```\r\nThis reliably resets the page without closing the session.\r\n\r\n---\r\n# SEARCH QUERY CONSTRUCTION\r\n\r\nBuild the search query based on user intent:\r\n\r\n| Intent | Query pattern | Example |\r\n|---|---|---|\r\n| Specific song | `[Artist] [Song Title]` | `ABBA Money Money Money` |\r\n| Artist playlist | `[Artist]` | `周杰倫` |\r\n| Genre \u002F mood | `[descriptor] music playlist` | `relaxing spa music playlist` |\r\n| Era-based | `[era] [language\u002Fgenre] playlist` | `華語 60年代 老歌 playlist` |\r\n\r\n**Search tips:**\r\n- For artist requests, a simple artist name search usually surfaces \"Mix\" and playlist results at the top — prefer these for continuous playback.\r\n- Use the original language for non-English songs (e.g. Chinese characters for Chinese songs).\r\n\r\n**Voice transcription (ASR) and typo handling:**\r\n- **Do NOT ask the user to confirm** potentially misheard names. YouTube has robust auto-correction and will show results for the intended query even with typos or homophones (e.g. searching \"楊成林\" will auto-correct to \"楊丞琳\").\r\n- Always search directly with whatever text you have. After the search, check the results snapshot — if YouTube shows a \"Did you mean: ...\" or \"顯示以下搜尋結果: ...\" banner with corrected results, the correction is already applied.\r\n- Only fall back to **web search** or asking the user if the YouTube search results are clearly unrelated or empty.\r\n\r\n---\r\n# SEARCH WORKFLOW (HIGH SIGNAL, LOW AMBIGUITY)\r\n\r\n## **Step 1 — Reset search state**\r\nA clean search state avoids dropdown obstruction.\r\n\r\nPerform the following every time before a new search:\r\n\r\n1. Snapshot.\r\n2. If button `\"Clear search query\"` \u002F `\"清除搜尋查詢\"` is present → click it.\r\n3. Else press:\r\n```\r\nplaywright-cli -s=music_player press Escape\r\n```\r\n4. If suggestions or overlays still block results → reset page:\r\n```\r\nplaywright-cli -s=music_player goto https:\u002F\u002Fwww.youtube.com\r\n```\r\nThen snapshot again.\r\n\r\n---\r\n## **Step 2 — Locate search bar**\r\nSnapshot → find:\r\n- `combobox \"搜尋\"` or\r\n- `combobox \"Search\"`\r\n\r\nRecord its ref (e.g., `e34`).\r\n\r\n---\r\n## **Step 3 — Perform search**\r\n```\r\nplaywright-cli -s=music_player fill \u003CsearchRef> \"SEARCH TERM\"\r\nplaywright-cli -s=music_player press Enter\r\n```\r\nThen snapshot immediately to avoid suggestion-panel obstruction.\r\n\r\n---\r\n## **Step 4 — Choose best result**\r\n\r\nSelect result based on **user intent**:\r\n\r\n- **Specific song** → click the `link` whose heading matches the song title.\r\n- **Artist** → prefer `\"Mix - [Artist]\"` links or playlist links for continuous playback.\r\n- **Genre \u002F mood** → prefer long-duration compilations or playlists (>20 mins).\r\n- **Fallback** if no clear match → prefer: Mix > Long playlist > Official channel upload > Single MV.\r\n\r\nFor guidance on identifying YouTube result types, see [.\u002Freferences\u002Fyoutube-guide.md](.\u002Freferences\u002Fyoutube-guide.md).\r\n\r\n**Important:** Do NOT click channel cards (e.g. `link \"Artist Name ... @handle•NNNK subscribers ...\"` \u002F `\"Artist Name ... @handle•NNN萬位訂閱者 ...\"`). They navigate to the channel page, not music. Look for Mix or playlist results below them.\r\n\r\nClick using its ref:\r\n```\r\nplaywright-cli -s=music_player click eXYZ\r\n```\r\n\r\nIf click is blocked:\r\n1. `press Escape`\r\n2. Retry click once.\r\n3. If still blocked → `goto https:\u002F\u002Fwww.youtube.com` and restart from Step 1.\r\n\r\n---\r\n# AD HANDLING LOOP\r\n\r\nAfter clicking a result:\r\n```\r\nplaywright-cli -s=music_player snapshot\r\n```\r\nLoop up to 4 iterations:\r\n\r\n### **1. Playback detected**\r\nIf you see:\r\n- `button \"Pause (k)\"` or\r\n- `button \"Play (k)\"` (but video advancing)\r\n\r\nAND no ad indicators → playback is active → report song title to the user.\r\n\r\n### **2. Skip button detected**\r\nAny element whose label contains:\r\n- skip \u002F Skip \u002F 略過\r\n- Skip Ad \u002F Skip Ads \u002F 略過廣告\r\n\r\n→ click it immediately.\r\n\r\n**Note:** If the skip button is `[disabled]` (countdown not yet elapsed), do NOT click it — wait ~5 seconds instead (see step 3).\r\n\r\nThen snapshot again. YouTube often plays **two consecutive ads** — always check for a second ad after skipping.\r\n\r\n### **3. Non-skippable ad \u002F countdown**\r\nWait 5 seconds:\r\n```\r\nplaywright-cli -s=music_player eval \"await new Promise(r=>setTimeout(r,5000))\"\r\n```\r\nThen snapshot again and repeat from step 1.\r\n\r\n### If ads persist >20 seconds\r\n- press Escape\r\n- or reload page\r\n\r\n---\r\n# PLAYBACK CONTROLS\r\nAlways snapshot first.\r\n\r\n| Command | Action |\r\n|--------|--------|\r\n| Pause | click `button \"Pause (k)\"` |\r\n| Resume \u002F Play | click `button \"Play (k)\"` |\r\n| Next | `press Shift+n` |\r\n| Previous | `press Shift+p` |\r\n| Change song | Start new search from Step 1 |\r\n| Stop | `playwright-cli -s=music_player close` |\r\n\r\n**Keyboard shortcuts** (reliable alternative when button refs are hard to locate):\r\n\r\n```\r\nk        → play \u002F pause\r\nShift+n  → next track\r\nShift+p  → previous track\r\nm        → mute \u002F unmute\r\nf        → fullscreen toggle\r\nj        → rewind 10s\r\nl        → forward 10s\r\n```\r\n\r\nUsage: `playwright-cli -s=music_player press \u003Ckey>`\r\n\r\n---\r\n# ERROR RECOVERY & EDGE CASES\r\n\r\n### If snapshot empty or missing critical refs\r\n```\r\nplaywright-cli -s=music_player goto https:\u002F\u002Fwww.youtube.com\r\n```\r\n→ restart from Step 1.\r\n\r\n### If browser crashes or session disappears\r\n`playwright-cli list` shows no `music_player`.\r\nInform the user the browser was closed, then recreate session:\r\n```\r\nplaywright-cli -s=music_player open https:\u002F\u002Fwww.youtube.com --headed --persistent\r\n```\r\nBecause `--persistent` is used, the browser profile (including login state) is restored automatically. No need to log in again.\r\n\r\n### YouTube cookie consent \u002F sign-in dialogs\r\nSnapshot → locate dismiss actions:\r\n- \"Accept all\" \u002F \"全部接受\"\r\n- \"Reject all\"\r\n- \"No thanks\" \u002F \"不用了，謝謝\"\r\n- Close (X)\r\n\r\nClick dismiss.\r\n\r\n### YouTube Premium trial popup\r\nSnapshot → look for `\"No thanks\"`, `\"不用了，謝謝\"`, or a dismiss\u002Fclose button → click to dismiss.\r\n\r\n### Video unavailable\r\nSnapshot shows \"Video unavailable\" or similar error.\r\n- `playwright-cli -s=music_player go-back` → snapshot → try the next result link.\r\n\r\n### Cannot find elements in search results\r\n- Scroll down: `playwright-cli -s=music_player press PageDown` → snapshot again.\r\n\r\n### Page frozen or blank\r\n- `playwright-cli -s=music_player reload` → snapshot.\r\n- If still broken: `playwright-cli -s=music_player close` → reopen and retry from Step 1.\r\n\r\n### Persistent profile corrupted or login expired\r\nIf the browser opens but login state is lost, or YouTube forces re-authentication:\r\n1. Inform the user they need to log in again in the browser.\r\n2. After login, the persistent profile will be updated automatically.\r\n\r\nTo completely reset the profile (last resort):\r\n```\r\nplaywright-cli -s=music_player close\r\nplaywright-cli -s=music_player delete-data\r\nplaywright-cli -s=music_player open https:\u002F\u002Fwww.youtube.com --headed --persistent\r\n```\r\n\r\n---\r\n# REFERENCES\r\n- [Playwright CLI reference](.\u002Freferences\u002Fplaywright-ref.md)\r\n- [YouTube result identification](.\u002Freferences\u002Fyoutube-guide.md)\r\n",{"name":5,"metadata":48,"description":54,"allowed-tools":55},{"openclaw":49},{"emoji":50,"requires":51},"?",{"bins":52},[53],"playwright-cli","Play music on YouTube via browser automation with playwright-cli.\nUse when the user wants to: \n(1) play a specific song (e.g. 'play Money Money Money by ABBA') \n(2) play songs by an artist as a playlist or mix (e.g. 'play Jay Chou's songs') \n(3) play genre or mood-based music (e.g. 'play relaxing spa music', 'play 60s Chinese oldies') \n(4) control playback — next, pause, resume, stop, skip ad, change song, close the player. \nAlso handles song\u002Fartist name corrections from voice transcription errors.\n","Bash(playwright-cli:*)","main","e7e336ac628c3e3bd771aff1aaa469c93778f94a","skills\u002Fwhodidthese\u002Fmy-play-music-from-yt",0,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del","2026-08-23 22:39:37",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add kbarbel640-del\u002Fskills --skill my-play-music-from-yt",{"tool":69,"command":70},"bunx","bunx skills add kbarbel640-del\u002Fskills --skill my-play-music-from-yt",{"tool":72,"command":73},"pnpm","pnpm dlx skills add kbarbel640-del\u002Fskills --skill my-play-music-from-yt","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fwhodidthese\u002Fmy-play-music-from-yt\u002FSKILL.md",true,[77,83,87],{"path":78,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},"_meta.json","REFERENCE","参考文档",479,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fwhodidthese\u002Fmy-play-music-from-yt\u002F_meta.json",{"path":84,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":85,"sourceHtmlUrl":86},"references\u002Fplaywright-ref.md",3992,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fwhodidthese\u002Fmy-play-music-from-yt\u002Freferences\u002Fplaywright-ref.md",{"path":88,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Fyoutube-guide.md",5796,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fwhodidthese\u002Fmy-play-music-from-yt\u002Freferences\u002Fyoutube-guide.md",[92,123,148,169,175,195],{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":103,"publishedAt":43},"01M6G8J55967D6281ACMKAKTEQ","crowd-prompting","A marketplace where AI agents improve prompts, system instructions, tool descriptions, and other text-based content with domain expertise from real-world operations — and earn tokens for valuable contributions.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzzadrian\u002Fcrowd-prompting\u002FSKILL.md",[98],{"categoryNo":99,"categoryName":100,"taxonomyType":101,"taxonomyTypeDesc":102},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122],"crowd prompting","prompting","api","with","tokens","domain","world","prompts","operations","instructions","text","tool","system","improve","productivity","marketplace","https","content","ai agents",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":132,"publishedAt":43},"01M6G8J0PKPAYVET6BWE8W4C26","dilemm-ai","Compete in DilemmAI, the prisoner's dilemma AI arena at dilemm.ai. Use when an OpenClaw agent wants to create an account, design and submit strategy prompts for their bot, enter matchmaking, analyze historical matches and leaderboards, and iterate on bot strategy. Requires headless browser automation (no API available yet).","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzyori\u002Fdilemm-ai\u002FSKILL.md",[129],{"categoryNo":130,"categoryName":131,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[133,106,134,135,40,136,137,138,42,139,140,141,142,143,144,145,146,111,147],"dilemm ai","arena","analyze","openclaw agent","create","automation","bot","openclaw","design","strategy","headless","compete","submit","matchmaking","use",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":157,"publishedAt":43},"01M6G8HWAF3K9SW7NP3Z83CPJ6","arxiv-paper-reviews","Interact with arXiv Crawler API to fetch papers, read reviews, and submit comments. Use when working with arXiv papers, fetching paper lists by date\u002Fcategory\u002Finterest, viewing paper details with comments, or submitting paper reviews via API at http:\u002F\u002F150.158.152.82:8000.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Fweak-accept\u002FSKILL.md",[154],{"categoryNo":155,"categoryName":156,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000021","资料检索与研究",[158,159,160,161,162,163,164,107,165,145,147,166,106,167,168],"arxiv paper reviews","reviews","arxiv","paper","crawler","papers","comments","fetch","read","http","via",{"skillNo":170,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":174,"publishedAt":43},"01M6G8HQJ7N7WMY6YV7D7SSJ16","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Farxiv-paper-reviews\u002FSKILL.md",[173],{"categoryNo":155,"categoryName":156,"taxonomyType":20,"taxonomyTypeDesc":21},[161,160,159,158,168,163,164,107,162,145,147,165,166,106,167],{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":181,"publishedAt":43},"01M6G8HM95Y64JNVFC2HN4E2BG","git-summary","Get a quick summary of the current Git repository including status, recent commits, branches, and contributors.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzweack\u002Fgit-summary\u002FSKILL.md",[],[182,183,184,185,186,187,188,189,190,191,192,193,194],"git","summary","git summary","commits","repository","win32","status","linux","contributors","true","quick","get","branches",{"skillNo":196,"name":197,"nameZh":6,"description":198,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":199,"categories":200,"keywords":205,"publishedAt":43},"01M6G8HGEGF05CNEJCGVYFSC4R","agent-constitution","Interact with AgentConstitution governance contracts on Base Sepolia. Check compliance, read rules, log actions, query governance state.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fztsalexey\u002Fagent-constitution\u002FSKILL.md",[201,202],{"categoryNo":130,"categoryName":131,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":203,"categoryName":204,"taxonomyType":101,"taxonomyTypeDesc":102},"01JBSEEDCAT000000000000037","律师与法务",[206,207,208,209,107,210,211,56,212,166,213,214,215,216,217,120,218,219,220],"agent constitution","constitution","contracts","tree","query","base","log","check","Rules","projects","compliance","actions","state","governance","github"]