[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CADMBVNJSTN67YM36AA7WW":3,"skill-same:01M6CADMBVNJSTN67YM36AA7WW":93},{"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":17,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":60,"repositoryHtmlUrl":61,"repositoryHomepageUrl":6,"ownerHtmlUrl":62,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":63,"install":64,"resources":77},"01M6CADMBVNJSTN67YM36AA7WW","spotify",null,"Spotify: play, search, queue, manage playlists and devices.","jleechanorg\u002Fjleechan-skills","jleechanorg","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F221404966?v=4","01M6C1VJ99XG950X1DWPEBCBGX","01M6C1VJDK5YVDNT3362RT5WSB",6,"MIT","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002Fhermes\u002Fskills\u002Fmedia\u002Fspotify\u002FSKILL.md",[],[5,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],"macos","linux","windows","play","search","library","devices","Media","music","hermes","hermes agent","queue","manage","gif","playlists","2026-11-10 10:12:30",false,"---\nname: spotify\ndescription: \"Spotify: play, search, queue, manage playlists and devices.\"\nversion: 1.0.0\nauthor: Hermes Agent\nlicense: MIT\nplatforms: [linux, macos, windows]\nprerequisites:\n  tools: [spotify_playback, spotify_devices, spotify_queue, spotify_search, spotify_playlists, spotify_albums, spotify_library]\nmetadata:\n  hermes:\n    tags: [spotify, music, playback, playlists, media]\n    related_skills: [gif-search]\n---\n\n# Spotify\n\nControl the user's Spotify account via the Hermes Spotify toolset (7 tools). Setup guide: https:\u002F\u002Fhermes-agent.nousresearch.com\u002Fdocs\u002Fuser-guide\u002Ffeatures\u002Fspotify\n\n## When to use this skill\n\nThe user says something like \"play X\", \"pause\", \"skip\", \"queue up X\", \"what's playing\", \"search for X\", \"add to my X playlist\", \"make a playlist\", \"save this to my library\", etc.\n\n## The 7 tools\n\n- `spotify_playback` — play, pause, next, previous, seek, set_repeat, set_shuffle, set_volume, get_state, get_currently_playing, recently_played\n- `spotify_devices` — list, transfer\n- `spotify_queue` — get, add\n- `spotify_search` — search the catalog\n- `spotify_playlists` — list, get, create, add_items, remove_items, update_details\n- `spotify_albums` — get, tracks\n- `spotify_library` — list\u002Fsave\u002Fremove with `kind: \"tracks\"|\"albums\"`\n\nPlayback-mutating actions require Spotify Premium; search\u002Flibrary\u002Fplaylist ops work on Free.\n\n## Canonical patterns (minimize tool calls)\n\n### \"Play \u003Cartist\u002Ftrack\u002Falbum>\"\nOne search, then play by URI. Do NOT loop through search results describing them unless the user asked for options.\n\n```\nspotify_search({\"query\": \"miles davis kind of blue\", \"types\": [\"album\"], \"limit\": 1})\n→ got album URI spotify:album:1weenld61qoidwYuZ1GESA\nspotify_playback({\"action\": \"play\", \"context_uri\": \"spotify:album:1weenld61qoidwYuZ1GESA\"})\n```\n\nFor \"play some \u003Cartist>\" (no specific song), prefer `types: [\"artist\"]` and play the artist context URI — Spotify handles smart shuffle. If the user says \"the song\" or \"that track\", search `types: [\"track\"]` and pass `uris: [track_uri]` to play.\n\n### \"What's playing?\" \u002F \"What am I listening to?\"\nSingle call — don't chain get_state after get_currently_playing.\n\n```\nspotify_playback({\"action\": \"get_currently_playing\"})\n```\n\nIf it returns 204\u002Fempty (`is_playing: false`), tell the user nothing is playing. Don't retry.\n\n### \"Pause\" \u002F \"Skip\" \u002F \"Volume 50\"\nDirect action, no preflight inspection needed.\n\n```\nspotify_playback({\"action\": \"pause\"})\nspotify_playback({\"action\": \"next\"})\nspotify_playback({\"action\": \"set_volume\", \"volume_percent\": 50})\n```\n\n### \"Add to my \u003Cplaylist name> playlist\"\n1. `spotify_playlists list` to find the playlist ID by name\n2. Get the track URI (from currently playing, or search)\n3. `spotify_playlists add_items` with the playlist_id and URIs\n\n```\nspotify_playlists({\"action\": \"list\"})\n→ found \"Late Night Jazz\" = 37i9dQZF1DX4wta20PHgwo\nspotify_playback({\"action\": \"get_currently_playing\"})\n→ current track uri = spotify:track:0DiWol3AO6WpXZgp0goxAV\nspotify_playlists({\"action\": \"add_items\",\n                   \"playlist_id\": \"37i9dQZF1DX4wta20PHgwo\",\n                   \"uris\": [\"spotify:track:0DiWol3AO6WpXZgp0goxAV\"]})\n```\n\n### \"Create a playlist called X and add the last 3 songs I played\"\n```\nspotify_playback({\"action\": \"recently_played\", \"limit\": 3})\nspotify_playlists({\"action\": \"create\", \"name\": \"Focus 2026\"})\n→ got playlist_id back in response\nspotify_playlists({\"action\": \"add_items\", \"playlist_id\": \u003Cid>, \"uris\": [\u003C3 uris>]})\n```\n\n### \"Save \u002F unsave \u002F is this saved?\"\nUse `spotify_library` with the right `kind`.\n\n```\nspotify_library({\"kind\": \"tracks\", \"action\": \"save\", \"uris\": [\"spotify:track:...\"]})\nspotify_library({\"kind\": \"albums\", \"action\": \"list\", \"limit\": 50})\n```\n\n### \"Transfer playback to my \u003Cdevice>\"\n```\nspotify_devices({\"action\": \"list\"})\n→ pick the device_id by matching name\u002Ftype\nspotify_devices({\"action\": \"transfer\", \"device_id\": \"\u003Cid>\", \"play\": true})\n```\n\n## Critical failure modes\n\n**`403 Forbidden — No active device found`** on any playback action means Spotify isn't running anywhere. Tell the user: \"Open Spotify on your phone\u002Fdesktop\u002Fweb player first, start any track for a second, then retry.\" Don't retry the tool call blindly — it will fail the same way. You can call `spotify_devices list` to confirm; an empty list means no active device.\n\n**`403 Forbidden — Premium required`** means the user is on Free and tried to mutate playback. Don't retry; tell them this action needs Premium. Reads still work (search, playlists, library, get_state).\n\n**`204 No Content` on `get_currently_playing`** is NOT an error — it means nothing is playing. The tool returns `is_playing: false`. Just report that to the user.\n\n**`429 Too Many Requests`** = rate limit. Wait and retry once. If it keeps happening, you're looping — stop.\n\n**`401 Unauthorized` after a retry** — refresh token revoked. Tell the user to run `hermes auth spotify` again.\n\n## URI and ID formats\n\nSpotify uses three interchangeable ID formats. The tools accept all three and normalize:\n\n- URI: `spotify:track:0DiWol3AO6WpXZgp0goxAV` (preferred)\n- URL: `https:\u002F\u002Fopen.spotify.com\u002Ftrack\u002F0DiWol3AO6WpXZgp0goxAV`\n- Bare ID: `0DiWol3AO6WpXZgp0goxAV`\n\nWhen in doubt, use full URIs. Search results return URIs in the `uri` field — pass those directly.\n\nEntity types: `track`, `album`, `artist`, `playlist`, `show`, `episode`. Use the right type for the action — `spotify_playback.play` with a `context_uri` expects album\u002Fplaylist\u002Fartist; `uris` expects an array of track URIs.\n\n## What NOT to do\n\n- **Don't call `get_state` before every action.** Spotify accepts play\u002Fpause\u002Fskip without preflight. Only inspect state when the user asked \"what's playing\" or you need to reason about device\u002Ftrack.\n- **Don't describe search results unless asked.** If the user said \"play X\", search, grab the top URI, play it. They'll hear it's wrong if it's wrong.\n- **Don't retry on `403 Premium required` or `403 No active device`.** Those are permanent until user action.\n- **Don't use `spotify_search` to find a playlist by name** — that searches the public Spotify catalog. User playlists come from `spotify_playlists list`.\n- **Don't mix `kind: \"tracks\"` with album URIs** in `spotify_library` (or vice versa). The tool normalizes IDs but the API endpoint differs.\n","# Spotify\n\nControl the user's Spotify account via the Hermes Spotify toolset (7 tools). Setup guide: https:\u002F\u002Fhermes-agent.nousresearch.com\u002Fdocs\u002Fuser-guide\u002Ffeatures\u002Fspotify\n\n## When to use this skill\n\nThe user says something like \"play X\", \"pause\", \"skip\", \"queue up X\", \"what's playing\", \"search for X\", \"add to my X playlist\", \"make a playlist\", \"save this to my library\", etc.\n\n## The 7 tools\n\n- `spotify_playback` — play, pause, next, previous, seek, set_repeat, set_shuffle, set_volume, get_state, get_currently_playing, recently_played\n- `spotify_devices` — list, transfer\n- `spotify_queue` — get, add\n- `spotify_search` — search the catalog\n- `spotify_playlists` — list, get, create, add_items, remove_items, update_details\n- `spotify_albums` — get, tracks\n- `spotify_library` — list\u002Fsave\u002Fremove with `kind: \"tracks\"|\"albums\"`\n\nPlayback-mutating actions require Spotify Premium; search\u002Flibrary\u002Fplaylist ops work on Free.\n\n## Canonical patterns (minimize tool calls)\n\n### \"Play \u003Cartist\u002Ftrack\u002Falbum>\"\nOne search, then play by URI. Do NOT loop through search results describing them unless the user asked for options.\n\n```\nspotify_search({\"query\": \"miles davis kind of blue\", \"types\": [\"album\"], \"limit\": 1})\n→ got album URI spotify:album:1weenld61qoidwYuZ1GESA\nspotify_playback({\"action\": \"play\", \"context_uri\": \"spotify:album:1weenld61qoidwYuZ1GESA\"})\n```\n\nFor \"play some \u003Cartist>\" (no specific song), prefer `types: [\"artist\"]` and play the artist context URI — Spotify handles smart shuffle. If the user says \"the song\" or \"that track\", search `types: [\"track\"]` and pass `uris: [track_uri]` to play.\n\n### \"What's playing?\" \u002F \"What am I listening to?\"\nSingle call — don't chain get_state after get_currently_playing.\n\n```\nspotify_playback({\"action\": \"get_currently_playing\"})\n```\n\nIf it returns 204\u002Fempty (`is_playing: false`), tell the user nothing is playing. Don't retry.\n\n### \"Pause\" \u002F \"Skip\" \u002F \"Volume 50\"\nDirect action, no preflight inspection needed.\n\n```\nspotify_playback({\"action\": \"pause\"})\nspotify_playback({\"action\": \"next\"})\nspotify_playback({\"action\": \"set_volume\", \"volume_percent\": 50})\n```\n\n### \"Add to my \u003Cplaylist name> playlist\"\n1. `spotify_playlists list` to find the playlist ID by name\n2. Get the track URI (from currently playing, or search)\n3. `spotify_playlists add_items` with the playlist_id and URIs\n\n```\nspotify_playlists({\"action\": \"list\"})\n→ found \"Late Night Jazz\" = 37i9dQZF1DX4wta20PHgwo\nspotify_playback({\"action\": \"get_currently_playing\"})\n→ current track uri = spotify:track:0DiWol3AO6WpXZgp0goxAV\nspotify_playlists({\"action\": \"add_items\",\n                   \"playlist_id\": \"37i9dQZF1DX4wta20PHgwo\",\n                   \"uris\": [\"spotify:track:0DiWol3AO6WpXZgp0goxAV\"]})\n```\n\n### \"Create a playlist called X and add the last 3 songs I played\"\n```\nspotify_playback({\"action\": \"recently_played\", \"limit\": 3})\nspotify_playlists({\"action\": \"create\", \"name\": \"Focus 2026\"})\n→ got playlist_id back in response\nspotify_playlists({\"action\": \"add_items\", \"playlist_id\": \u003Cid>, \"uris\": [\u003C3 uris>]})\n```\n\n### \"Save \u002F unsave \u002F is this saved?\"\nUse `spotify_library` with the right `kind`.\n\n```\nspotify_library({\"kind\": \"tracks\", \"action\": \"save\", \"uris\": [\"spotify:track:...\"]})\nspotify_library({\"kind\": \"albums\", \"action\": \"list\", \"limit\": 50})\n```\n\n### \"Transfer playback to my \u003Cdevice>\"\n```\nspotify_devices({\"action\": \"list\"})\n→ pick the device_id by matching name\u002Ftype\nspotify_devices({\"action\": \"transfer\", \"device_id\": \"\u003Cid>\", \"play\": true})\n```\n\n## Critical failure modes\n\n**`403 Forbidden — No active device found`** on any playback action means Spotify isn't running anywhere. Tell the user: \"Open Spotify on your phone\u002Fdesktop\u002Fweb player first, start any track for a second, then retry.\" Don't retry the tool call blindly — it will fail the same way. You can call `spotify_devices list` to confirm; an empty list means no active device.\n\n**`403 Forbidden — Premium required`** means the user is on Free and tried to mutate playback. Don't retry; tell them this action needs Premium. Reads still work (search, playlists, library, get_state).\n\n**`204 No Content` on `get_currently_playing`** is NOT an error — it means nothing is playing. The tool returns `is_playing: false`. Just report that to the user.\n\n**`429 Too Many Requests`** = rate limit. Wait and retry once. If it keeps happening, you're looping — stop.\n\n**`401 Unauthorized` after a retry** — refresh token revoked. Tell the user to run `hermes auth spotify` again.\n\n## URI and ID formats\n\nSpotify uses three interchangeable ID formats. The tools accept all three and normalize:\n\n- URI: `spotify:track:0DiWol3AO6WpXZgp0goxAV` (preferred)\n- URL: `https:\u002F\u002Fopen.spotify.com\u002Ftrack\u002F0DiWol3AO6WpXZgp0goxAV`\n- Bare ID: `0DiWol3AO6WpXZgp0goxAV`\n\nWhen in doubt, use full URIs. Search results return URIs in the `uri` field — pass those directly.\n\nEntity types: `track`, `album`, `artist`, `playlist`, `show`, `episode`. Use the right type for the action — `spotify_playback.play` with a `context_uri` expects album\u002Fplaylist\u002Fartist; `uris` expects an array of track URIs.\n\n## What NOT to do\n\n- **Don't call `get_state` before every action.** Spotify accepts play\u002Fpause\u002Fskip without preflight. Only inspect state when the user asked \"what's playing\" or you need to reason about device\u002Ftrack.\n- **Don't describe search results unless asked.** If the user said \"play X\", search, grab the top URI, play it. They'll hear it's wrong if it's wrong.\n- **Don't retry on `403 Premium required` or `403 No active device`.** Those are permanent until user action.\n- **Don't use `spotify_search` to find a playlist by name** — that searches the public Spotify catalog. User playlists come from `spotify_playlists list`.\n- **Don't mix `kind: \"tracks\"` with album URIs** in `spotify_library` (or vice versa). The tool normalizes IDs but the API endpoint differs.\n",{"name":5,"author":38,"license":14,"version":39,"metadata":40,"platforms":47,"description":7,"prerequisites":48},"Hermes Agent","1.0.0",{"hermes":41},{"tags":42,"related_skills":45},[5,26,43,32,44],"playback","media",[46],"gif-search",[19,18,20],{"tools":49},[50,51,52,53,54,55,56],"spotify_playback","spotify_devices","spotify_queue","spotify_search","spotify_playlists","spotify_albums","spotify_library","main","05df7380981a2c4af868ce0fa57962ae0eea62a9","hermes\u002Fskills\u002Fmedia\u002Fspotify",0,"https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills","https:\u002F\u002Fgithub.com\u002Fjleechanorg","2026-11-11 09:18:40",{"source":8,"skillName":5,"commands":65,"prompt":75,"zipAvailable":76},[66,69,72],{"tool":67,"command":68},"npx","npx skills add jleechanorg\u002Fjleechan-skills --skill spotify",{"tool":70,"command":71},"bunx","bunx skills add jleechanorg\u002Fjleechan-skills --skill spotify",{"tool":73,"command":74},"pnpm","pnpm dlx skills add jleechanorg\u002Fjleechan-skills --skill spotify","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002Fhermes\u002Fskills\u002Fmedia\u002Fspotify\u002FSKILL.md",true,[78,83,89],{"path":79,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},"LICENSE","许可证",1067,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fashrafiucse-llm-security\u002FLICENSE",{"path":84,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":87,"sourceHtmlUrl":88},"SOURCE.md","REFERENCE","参考文档",369,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fashrafiucse-llm-security\u002FSOURCE.md",{"path":90,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":91,"sourceHtmlUrl":92},"TRUST.auto.yaml",2197,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fashrafiucse-llm-security\u002FTRUST.auto.yaml",[94,112,134,148,162,178],{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":33},"01M716Y5MTJ6GYJZ2ATXCJK8G4","instinct","Use when the user invokes \u002Finstinct or \u002Fin, or asks to \"message Instinct\", \"ask Instinct\", \"tell Instinct\", \"check Instinct\", or read replies from the configured peer assistant. iMessage first, WhatsApp Web as fallback.","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Finstinct\u002FSKILL.md",[],[96,101,102,103,104,105,106,107,108,109,110,111],"user","when","replies","check","use","identity","whatsapp","gmail","read","message","ask",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":123,"publishedAt":33},"01M716Y4HF7FVVMJSA2CCVN5VF","hr","Compatibility alias for history-resume; produce the same fresh-state, provenance-aware resume briefing.","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fhr\u002FSKILL.md",[118],{"categoryNo":119,"categoryName":120,"taxonomyType":121,"taxonomyTypeDesc":122},"01JBSEEDCAT000000000000038","人力资源","PROFESSION","适用职业",[114,124,125,126,127,128,129,130,131,132,133],"resume","compatibility","provenance","for","history","produce","alias","briefing","state","fresh",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":141,"publishedAt":33},"01M716Y1FFNFKFJYYKF8HQA6T8","history-resume","Resume briefing for the current repository branch or worktree using fresh state and admitted history sources.","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fhistory-resume\u002FSKILL.md",[140],{"categoryNo":119,"categoryName":120,"taxonomyType":121,"taxonomyTypeDesc":122},[128,124,142,143,101,144,131,145,127,146,147,132,133],"history resume","branch","analysis","repository","worktree","sources",{"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":154,"publishedAt":33},"01M716XWXJ8EPHK4RH9T14TR85","grok","Alias for the canonical grokbot browser conversation workflow; \u002Fgrok talks to the Grok bot the same way \u002Fdot talks to Dot.","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fgrok\u002FSKILL.md",[],[150,155,156,157,127,158,130,159,160,161],"dot","bot","workflow","canonical","conversation","browser","grokbot",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":168,"publishedAt":33},"01M70N9Q07DTE0EW5KFXMMMSJ0","codexa-bench","Compare `codexa` and normal `codex` on a fair split of comparable work by default; use `--strict` for duplicate runs of the exact same task.","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fcodexa-bench\u002FSKILL.md",[],[169,170,171,105,172,127,173,174,175,176,177],"codexa bench","work","split","default","duplicate","task","compare","normal","codex",{"skillNo":179,"name":180,"nameZh":6,"description":181,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":182,"licenseFileUrl":183,"sourceHtmlUrl":184,"categories":185,"keywords":197,"publishedAt":33},"01M6C24S2X60SP8BBFGAEKPEGW","frontend-design","Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML\u002FCSS layouts, or when styling\u002Fbeautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ffrontend-design\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ffrontend-design\u002FSKILL.md",[186,191,194],{"categoryNo":187,"categoryName":188,"taxonomyType":189,"taxonomyTypeDesc":190},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":192,"categoryName":193,"taxonomyType":189,"taxonomyTypeDesc":190},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":195,"categoryName":196,"taxonomyType":121,"taxonomyTypeDesc":122},"01JBSEEDCAT000000000000032","设计师",[198,199,200,105,201,202,203,101,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,102,222],"frontend","design","frontend design","generic","ui design","react","html","components","code","artifacts","ui","aesthetics","Production","web components","landing","applications","quality","web","css","create","examples","with","react components","web ui","pages"]