[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PDH6B963VZ67B9RMJG8N41":3,"skill-same:01M6PDH6B963VZ67B9RMJG8N41":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":53,"ownerHtmlUrl":54,"ownerBlogUrl":55,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6PDH6B963VZ67B9RMJG8N41","figma-icons-iconify",null,"Use when working with Figma and UI icons are needed — triggers on icon names, icon libraries (Tabler, Lucide, Material Design, Phosphor, Heroicons), or requests to add\u002Finsert icons in Figma designs.","douinc\u002Fagent-skills","douinc","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F104253814?v=4","01M6PDGX2D777TNA7NETDKDHCW","dou inc.","01M6PDGX6QMFW72GNMX59GKN6P",1,"MIT","https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Ffigma-icons-iconify\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"icons","figma","figma icons iconify","design","libraries","ui","use","triggers","material","add","icon","with","material design","requests","tabler","phosphor","2026-11-10 10:12:30",false,"---\nname: figma-icons-iconify\ndescription: Use when working with Figma and UI icons are needed — triggers on icon names, icon libraries (Tabler, Lucide, Material Design, Phosphor, Heroicons), or requests to add\u002Finsert icons in Figma designs.\nmetadata:\n  author: initred\n  email: initred@dou.so\n  version: \"1.0.0\"\n---\n\n# Iconify Icons for Figma\n\nFetch real, pixel-perfect SVG icons from the [Iconify API](https:\u002F\u002Ficonify.design\u002F) and insert them into Figma designs. **Never draw icons manually with vector paths** — always use this workflow to get accurate icons from 150+ icon sets including Tabler, Lucide, Material Design, and more.\n\n## Prerequisites\n\n- The `figma-use` skill **MUST** be loaded before any `use_figma` tool call. Always invoke it first.\n- `fetch()` is **NOT available** inside `use_figma` code. All HTTP requests must happen **before** calling `use_figma`.\n- **Use `Bash(curl -s ...)` instead of `WebFetch`** to call the Iconify API. The Iconify API returns 403 for WebFetch requests but works with curl.\n\n## Core Workflow\n\n### Step 1: Fetch SVG via curl\n\nUse the `Bash` tool with `curl -s` to retrieve the SVG from the Iconify API:\n\n```bash\ncurl -s \"https:\u002F\u002Fapi.iconify.design\u002F{prefix}\u002F{name}.svg\"\n```\n\n**Example:**\n\n```bash\ncurl -s \"https:\u002F\u002Fapi.iconify.design\u002Ftabler\u002Falert-circle.svg\"\n```\n\nThis returns a raw SVG string ready for Figma insertion.\n\n> **Why curl?** The Iconify API returns HTTP 403 for `WebFetch` requests. Always use `Bash(curl -s ...)` instead.\n\n### Step 2: Insert into Figma via use_figma\n\nPass the fetched SVG string into a `use_figma` call using `figma.createNodeFromSvg()`:\n\n```js\n\u002F\u002F Paste the exact SVG string from Step 1\nconst svgString = `\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" ...>...\u003C\u002Fsvg>`;\n\nconst node = figma.createNodeFromSvg(svgString);\n\u002F\u002F Name format: {LibraryName}\u002F{icon-name} for easy identification\nnode.name = \"Tabler\u002Falert-circle\";\n\n\u002F\u002F Resize while preserving aspect ratio.\n\u002F\u002F Most Iconify icons are square (24x24), but some are not — always check.\nconst originalWidth = node.width;\nconst originalHeight = node.height;\nconst targetHeight = 24; \u002F\u002F desired height\nconst targetWidth = targetHeight * (originalWidth \u002F originalHeight);\nnode.resize(targetWidth, targetHeight);\n\n\u002F\u002F Append to target frame (replace TARGET_ID with actual node ID)\nconst target = figma.getNodeById(\"TARGET_ID\");\ntarget.appendChild(node);\n\nreturn { createdNodeIds: [node.id] };\n```\n\n**Important:** `figma.createNodeFromSvg()` returns a `FrameNode` containing the vector paths. You can resize, rename, reposition, and reparent it like any other frame.\n\n## URL Parameters\n\nCustomize the fetched SVG by appending query parameters:\n\n| Parameter | Description                     | Example            |\n| --------- | ------------------------------- | ------------------ |\n| `color`   | Set icon color (URL-encode `#`) | `?color=%23ff0000` |\n| `width`   | Icon width in pixels            | `?width=32`        |\n| `height`  | Icon height in pixels           | `?height=32`       |\n| `flip`    | Flip direction                  | `?flip=horizontal` |\n| `rotate`  | Rotation angle                  | `?rotate=90deg`    |\n\n**Example with parameters:**\n\n```\nhttps:\u002F\u002Fapi.iconify.design\u002Ftabler\u002Falert-circle.svg?width=24&height=24&color=%230f172a\n```\n\n## Searching for Icons\n\nWhen the user does not specify an exact icon name, search using the Iconify search endpoint:\n\n```bash\ncurl -s \"https:\u002F\u002Fapi.iconify.design\u002Fsearch?query={term}&prefixes={prefix}&limit=10\"\n```\n\n**Example:**\n\n```bash\ncurl -s \"https:\u002F\u002Fapi.iconify.design\u002Fsearch?query=alert&prefixes=tabler&limit=10\"\n```\n\nThis returns JSON with matching icon names:\n\n```json\n{\n  \"icons\": [\n    \"tabler:alert-circle\",\n    \"tabler:alert-triangle\",\n    \"tabler:alert-octagon\"\n  ],\n  \"total\": 15\n}\n```\n\nPick the best match and proceed with Step 1 and Step 2 of the core workflow.\n\n## Batch Icons (Multiple at Once)\n\nWhen inserting multiple icons, use the JSON endpoint to fetch them all in one request:\n\n```bash\ncurl -s \"https:\u002F\u002Fapi.iconify.design\u002F{prefix}.json?icons={name1},{name2},{name3}\"\n```\n\n**Example:**\n\n```bash\ncurl -s \"https:\u002F\u002Fapi.iconify.design\u002Ftabler.json?icons=alert-circle,home,settings\"\n```\n\nThis returns structured data:\n\n```json\n{\n  \"prefix\": \"tabler\",\n  \"icons\": {\n    \"alert-circle\": {\n      \"body\": \"\u003Cpath d=\\\"...\\\"\u002F>\",\n      \"width\": 24,\n      \"height\": 24\n    }\n  }\n}\n```\n\nTo use each icon, extract the data and wrap the `body` in an SVG element:\n\n```js\n\u002F\u002F Extract icon data from the JSON response\nconst icon = response.icons[\"alert-circle\"];\nconst { body } = icon;\nconst width = icon.width || 24;\nconst height = icon.height || 24;\n\nconst svgString = `\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"${width}\" height=\"${height}\" viewBox=\"0 0 ${width} ${height}\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${body}\u003C\u002Fsvg>`;\nconst node = figma.createNodeFromSvg(svgString);\n```\n\n**Note:** Check the icon set's default attributes. Tabler icons use `stroke=\"currentColor\" stroke-width=\"2\"`. Material Design icons use `fill=\"currentColor\"`. Match the icon set's style when wrapping the body.\n\n## Common Icon Set Prefixes\n\n| Prefix      | Icon Set              | Style       | Default Attributes                         |\n| ----------- | --------------------- | ----------- | ------------------------------------------ |\n| `tabler`    | Tabler Icons          | Stroke      | `stroke=\"currentColor\" stroke-width=\"2\"`   |\n| `lucide`    | Lucide                | Stroke      | `stroke=\"currentColor\" stroke-width=\"2\"`   |\n| `mdi`       | Material Design Icons | Fill        | `fill=\"currentColor\"`                      |\n| `ph`        | Phosphor Icons        | Stroke\u002FFill | varies by weight                           |\n| `ri`        | Remix Icon            | Fill        | `fill=\"currentColor\"`                      |\n| `heroicons` | Heroicons             | Stroke      | `stroke=\"currentColor\" stroke-width=\"1.5\"` |\n| `solar`     | Solar Icons           | Stroke\u002FFill | varies by style                            |\n| `iconamoon` | IconaMoon             | Stroke      | `stroke=\"currentColor\"`                    |\n\n## Recoloring After Insertion\n\nIf you need to change the icon color after inserting into Figma, traverse the node's children and update fills or strokes:\n\n```js\nconst iconNode = figma.getNodeById(\"ICON_NODE_ID\");\n\nfunction recolor(node, color) {\n  if (\"fills\" in node && node.fills.length > 0) {\n    node.fills = [{ type: \"SOLID\", color }];\n  }\n  if (\"strokes\" in node && node.strokes.length > 0) {\n    node.strokes = [{ type: \"SOLID\", color }];\n  }\n  if (\"children\" in node) {\n    for (const child of node.children) {\n      recolor(child, color);\n    }\n  }\n}\n\n\u002F\u002F Color values are 0-1 range (not 0-255)\nrecolor(iconNode, { r: 0.09, g: 0.09, b: 0.09 });\n\nreturn { mutatedNodeIds: [iconNode.id] };\n```\n\n## Handling Errors\n\n- **Empty search results:** If the search returns no icons, try broader search terms or check the icon set prefix spelling.\n- **404 from SVG endpoint:** The icon name is wrong or doesn't exist in that prefix. Verify with the search endpoint first.\n- **Malformed SVG \u002F `figma.createNodeFromSvg()` fails:** Some SVGs may contain unsupported features. Try fetching with explicit `?width=24&height=24` parameters, or use the JSON endpoint and wrap the `body` manually.\n\n## Constraints\n\n1. **NEVER draw icons manually** with vector paths, ellipses, or rectangles when the icon is available on Iconify.\n2. **NEVER use `fetch()` inside `use_figma`** — it does not exist in the Figma Plugin API sandbox. Always fetch SVG via `Bash(curl -s ...)` before the `use_figma` call. Do NOT use `WebFetch` — the Iconify API returns 403 for it.\n3. **Always load the `figma-use` skill** before making any `use_figma` tool call.\n4. **Always return created node IDs** from `use_figma` calls for subsequent operations.\n5. **Match icon set attributes** when wrapping JSON body in SVG — stroke-based sets (Tabler, Lucide) need stroke attributes, fill-based sets (MDI, Remix) need fill attributes.\n6. **Name icon nodes as `{LibraryName}\u002F{icon-name}`** (e.g., `Tabler\u002Falert-circle`, `Lucide\u002Fhome`, `MDI\u002Fsettings`). This makes icons identifiable by their source library in the Figma layers panel.\n7. **Preserve aspect ratio when resizing.** Most Iconify icons are square (24x24), but not all. Always calculate proportional dimensions from `node.width` and `node.height` after `createNodeFromSvg()`.\n","# Iconify Icons for Figma\n\nFetch real, pixel-perfect SVG icons from the [Iconify API](https:\u002F\u002Ficonify.design\u002F) and insert them into Figma designs. **Never draw icons manually with vector paths** — always use this workflow to get accurate icons from 150+ icon sets including Tabler, Lucide, Material Design, and more.\n\n## Prerequisites\n\n- The `figma-use` skill **MUST** be loaded before any `use_figma` tool call. Always invoke it first.\n- `fetch()` is **NOT available** inside `use_figma` code. All HTTP requests must happen **before** calling `use_figma`.\n- **Use `Bash(curl -s ...)` instead of `WebFetch`** to call the Iconify API. The Iconify API returns 403 for WebFetch requests but works with curl.\n\n## Core Workflow\n\n### Step 1: Fetch SVG via curl\n\nUse the `Bash` tool with `curl -s` to retrieve the SVG from the Iconify API:\n\n```bash\ncurl -s \"https:\u002F\u002Fapi.iconify.design\u002F{prefix}\u002F{name}.svg\"\n```\n\n**Example:**\n\n```bash\ncurl -s \"https:\u002F\u002Fapi.iconify.design\u002Ftabler\u002Falert-circle.svg\"\n```\n\nThis returns a raw SVG string ready for Figma insertion.\n\n> **Why curl?** The Iconify API returns HTTP 403 for `WebFetch` requests. Always use `Bash(curl -s ...)` instead.\n\n### Step 2: Insert into Figma via use_figma\n\nPass the fetched SVG string into a `use_figma` call using `figma.createNodeFromSvg()`:\n\n```js\n\u002F\u002F Paste the exact SVG string from Step 1\nconst svgString = `\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" ...>...\u003C\u002Fsvg>`;\n\nconst node = figma.createNodeFromSvg(svgString);\n\u002F\u002F Name format: {LibraryName}\u002F{icon-name} for easy identification\nnode.name = \"Tabler\u002Falert-circle\";\n\n\u002F\u002F Resize while preserving aspect ratio.\n\u002F\u002F Most Iconify icons are square (24x24), but some are not — always check.\nconst originalWidth = node.width;\nconst originalHeight = node.height;\nconst targetHeight = 24; \u002F\u002F desired height\nconst targetWidth = targetHeight * (originalWidth \u002F originalHeight);\nnode.resize(targetWidth, targetHeight);\n\n\u002F\u002F Append to target frame (replace TARGET_ID with actual node ID)\nconst target = figma.getNodeById(\"TARGET_ID\");\ntarget.appendChild(node);\n\nreturn { createdNodeIds: [node.id] };\n```\n\n**Important:** `figma.createNodeFromSvg()` returns a `FrameNode` containing the vector paths. You can resize, rename, reposition, and reparent it like any other frame.\n\n## URL Parameters\n\nCustomize the fetched SVG by appending query parameters:\n\n| Parameter | Description                     | Example            |\n| --------- | ------------------------------- | ------------------ |\n| `color`   | Set icon color (URL-encode `#`) | `?color=%23ff0000` |\n| `width`   | Icon width in pixels            | `?width=32`        |\n| `height`  | Icon height in pixels           | `?height=32`       |\n| `flip`    | Flip direction                  | `?flip=horizontal` |\n| `rotate`  | Rotation angle                  | `?rotate=90deg`    |\n\n**Example with parameters:**\n\n```\nhttps:\u002F\u002Fapi.iconify.design\u002Ftabler\u002Falert-circle.svg?width=24&height=24&color=%230f172a\n```\n\n## Searching for Icons\n\nWhen the user does not specify an exact icon name, search using the Iconify search endpoint:\n\n```bash\ncurl -s \"https:\u002F\u002Fapi.iconify.design\u002Fsearch?query={term}&prefixes={prefix}&limit=10\"\n```\n\n**Example:**\n\n```bash\ncurl -s \"https:\u002F\u002Fapi.iconify.design\u002Fsearch?query=alert&prefixes=tabler&limit=10\"\n```\n\nThis returns JSON with matching icon names:\n\n```json\n{\n  \"icons\": [\n    \"tabler:alert-circle\",\n    \"tabler:alert-triangle\",\n    \"tabler:alert-octagon\"\n  ],\n  \"total\": 15\n}\n```\n\nPick the best match and proceed with Step 1 and Step 2 of the core workflow.\n\n## Batch Icons (Multiple at Once)\n\nWhen inserting multiple icons, use the JSON endpoint to fetch them all in one request:\n\n```bash\ncurl -s \"https:\u002F\u002Fapi.iconify.design\u002F{prefix}.json?icons={name1},{name2},{name3}\"\n```\n\n**Example:**\n\n```bash\ncurl -s \"https:\u002F\u002Fapi.iconify.design\u002Ftabler.json?icons=alert-circle,home,settings\"\n```\n\nThis returns structured data:\n\n```json\n{\n  \"prefix\": \"tabler\",\n  \"icons\": {\n    \"alert-circle\": {\n      \"body\": \"\u003Cpath d=\\\"...\\\"\u002F>\",\n      \"width\": 24,\n      \"height\": 24\n    }\n  }\n}\n```\n\nTo use each icon, extract the data and wrap the `body` in an SVG element:\n\n```js\n\u002F\u002F Extract icon data from the JSON response\nconst icon = response.icons[\"alert-circle\"];\nconst { body } = icon;\nconst width = icon.width || 24;\nconst height = icon.height || 24;\n\nconst svgString = `\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"${width}\" height=\"${height}\" viewBox=\"0 0 ${width} ${height}\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${body}\u003C\u002Fsvg>`;\nconst node = figma.createNodeFromSvg(svgString);\n```\n\n**Note:** Check the icon set's default attributes. Tabler icons use `stroke=\"currentColor\" stroke-width=\"2\"`. Material Design icons use `fill=\"currentColor\"`. Match the icon set's style when wrapping the body.\n\n## Common Icon Set Prefixes\n\n| Prefix      | Icon Set              | Style       | Default Attributes                         |\n| ----------- | --------------------- | ----------- | ------------------------------------------ |\n| `tabler`    | Tabler Icons          | Stroke      | `stroke=\"currentColor\" stroke-width=\"2\"`   |\n| `lucide`    | Lucide                | Stroke      | `stroke=\"currentColor\" stroke-width=\"2\"`   |\n| `mdi`       | Material Design Icons | Fill        | `fill=\"currentColor\"`                      |\n| `ph`        | Phosphor Icons        | Stroke\u002FFill | varies by weight                           |\n| `ri`        | Remix Icon            | Fill        | `fill=\"currentColor\"`                      |\n| `heroicons` | Heroicons             | Stroke      | `stroke=\"currentColor\" stroke-width=\"1.5\"` |\n| `solar`     | Solar Icons           | Stroke\u002FFill | varies by style                            |\n| `iconamoon` | IconaMoon             | Stroke      | `stroke=\"currentColor\"`                    |\n\n## Recoloring After Insertion\n\nIf you need to change the icon color after inserting into Figma, traverse the node's children and update fills or strokes:\n\n```js\nconst iconNode = figma.getNodeById(\"ICON_NODE_ID\");\n\nfunction recolor(node, color) {\n  if (\"fills\" in node && node.fills.length > 0) {\n    node.fills = [{ type: \"SOLID\", color }];\n  }\n  if (\"strokes\" in node && node.strokes.length > 0) {\n    node.strokes = [{ type: \"SOLID\", color }];\n  }\n  if (\"children\" in node) {\n    for (const child of node.children) {\n      recolor(child, color);\n    }\n  }\n}\n\n\u002F\u002F Color values are 0-1 range (not 0-255)\nrecolor(iconNode, { r: 0.09, g: 0.09, b: 0.09 });\n\nreturn { mutatedNodeIds: [iconNode.id] };\n```\n\n## Handling Errors\n\n- **Empty search results:** If the search returns no icons, try broader search terms or check the icon set prefix spelling.\n- **404 from SVG endpoint:** The icon name is wrong or doesn't exist in that prefix. Verify with the search endpoint first.\n- **Malformed SVG \u002F `figma.createNodeFromSvg()` fails:** Some SVGs may contain unsupported features. Try fetching with explicit `?width=24&height=24` parameters, or use the JSON endpoint and wrap the `body` manually.\n\n## Constraints\n\n1. **NEVER draw icons manually** with vector paths, ellipses, or rectangles when the icon is available on Iconify.\n2. **NEVER use `fetch()` inside `use_figma`** — it does not exist in the Figma Plugin API sandbox. Always fetch SVG via `Bash(curl -s ...)` before the `use_figma` call. Do NOT use `WebFetch` — the Iconify API returns 403 for it.\n3. **Always load the `figma-use` skill** before making any `use_figma` tool call.\n4. **Always return created node IDs** from `use_figma` calls for subsequent operations.\n5. **Match icon set attributes** when wrapping JSON body in SVG — stroke-based sets (Tabler, Lucide) need stroke attributes, fill-based sets (MDI, Remix) need fill attributes.\n6. **Name icon nodes as `{LibraryName}\u002F{icon-name}`** (e.g., `Tabler\u002Falert-circle`, `Lucide\u002Fhome`, `MDI\u002Fsettings`). This makes icons identifiable by their source library in the Figma layers panel.\n7. **Preserve aspect ratio when resizing.** Most Iconify icons are square (24x24), but not all. Always calculate proportional dimensions from `node.width` and `node.height` after `createNodeFromSvg()`.\n",{"name":5,"metadata":45,"description":7},{"email":46,"author":47,"version":48},"initred@dou.so","initred","1.0.0","main","ee55538fc8b60bb1595f860f18cbd7baba1925aa","skills\u002Ffigma-icons-iconify",0,"https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills","https:\u002F\u002Fgithub.com\u002Fdouinc","https:\u002F\u002Fdou.so","A clinical intelligence company","2026-11-12 10:02:01",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add douinc\u002Fagent-skills --skill figma-icons-iconify",{"tool":64,"command":65},"bunx","bunx skills add douinc\u002Fagent-skills --skill figma-icons-iconify",{"tool":67,"command":68},"pnpm","pnpm dlx skills add douinc\u002Fagent-skills --skill figma-icons-iconify","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Ffigma-icons-iconify\u002FSKILL.md",true,[],[73,89,123,137,167,183],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":84,"publishedAt":40},"01M6PDKC7XDA3NYF969T945D7S","template-skill","Replace with description of the skill and when the agent should use it.","https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Ftemplate\u002FSKILL.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[85,86,87,30,88,35],"template","template skill","it","name",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":103,"publishedAt":40},"01M6PDK6MNC6EMGA8W7KD7NJQX","writing-project-readme","Use when explicitly invoked to write or fully rewrite a project README that must cover tech stack, architecture, features, and service description in a single document — readable by non-engineers (PM, design, ops, domain experts) as well as developers. Triggers on requests like \"write the README\", \"redo README.md based on the whole project\", \"make a comprehensive README everyone can understand\". Skip for one-section edits, badge tweaks, or generating a CHANGELOG.","https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fwriting-project-readme\u002FSKILL.md",[95,98,99,100],{"categoryNo":96,"categoryName":97,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":101,"categoryName":102,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000036","内容创作者",[104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,27],"README","writing project readme","project readme","writing","project","cover","for","tech","domain","as","make","alpha","write","features","experts","changelog","stack","architecture","pm",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":132,"publishedAt":40},"01M6PDK2S8KXK1NDM22C9FKE49","ux-writing-korean","한국어로 UI\u002FUX 문구를 작성하거나 검수할 때 사용합니다. 해요체, 능동형, 긍정형, 캐주얼 경어, 명사 조합 회피 등 5가지 핵심 원칙과 예외 규칙을 적용합니다.","https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fux-writing-korean\u002FSKILL.md",[129,130,131],{"categoryNo":96,"categoryName":97,"taxonomyType":82,"taxonomyTypeDesc":83},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":101,"categoryName":102,"taxonomyType":21,"taxonomyTypeDesc":22},[133,107,134,135,136,29],"ux writing","ux","korean","ux writing korean",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":147,"publishedAt":40},"01M6PDJXK3DVWFR0420XV79HZ6","token-audit","Audit a Claude Code or Codex CLI project for token waste and fix it with the user's approval. Use whenever the user wants to check, reduce, or optimize token usage, context bloat, or API\u002Fsubscription costs of an agent project — phrases like \"토큰 점검\", \"토큰 낭비 찾아줘\", \"토큰 최적화\", \"컨텍스트 최적화\", \"Claude Code 비용 줄여줘\", \"API 비용이 너무 나와\", \"audit token efficiency\", \"check my CLAUDE.md\u002FAGENTS.md\u002FMCP setup\". Also trigger when the user complains that sessions hit context limits too fast, that costs jumped unexpectedly, or asks whether their project setup is token-efficient — even if they don't say the word \"token\".","https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Ftoken-audit\u002FSKILL.md",[143,144],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},{"categoryNo":145,"categoryName":146,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师",[148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,108,166],"audit","token","token audit","token efficiency","mcp setup","usage","reduce","bloat","my","limits","cli","optimize","efficiency","api","code","context","MCP","fix","codex cli",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":173,"publishedAt":40},"01M6PDJR1Y9BAM48RDKRQHK5MQ","release-showcase","정식 릴리스의 변경을 이전·이후 스크린샷, 클릭 흐름 녹화 영상, 비교·단계·탭·흐름도 같은 HTML 컴포넌트로 보여 주는 파일 하나짜리 릴리스 문서를 만든다. 텍스트뿐인 릴리스 노트로는 어떤 UX가 바뀌었고 새 기능을 어떻게 쓰는지 감이 안 올 때 쓴다. '릴리스 노트 문서 만들어 줘', '릴리스 쇼케이스', '이번 배포 변경사항 정리해서 공유', '릴리즈 노트 HTML', '변경사항을 화면으로 보여 주는 문서', '업데이트 소개 페이지', 'what's new 페이지', 'release notes with screenshots', 'changelog page', '배포 공지 자료'처럼 버전 태그 사이의 변경을 팀·고객에게 시각적으로 알릴 때 반드시 사용한다. git 태그로 릴리스하는 저장소라면 웹·데스크톱·모바일 어느 앱이든 쓴다. 커밋 목록만 필요한 CHANGELOG.md 갱신, 릴리스 태그·배포 자체, 마케팅 영상 제작에는 쓰지 않는다.","https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Frelease-showcase\u002FSKILL.md",[],[174,175,176,35,177,178,179,180,181,182,119],"release","showcase","release showcase","release notes","page","notes","screenshots","html","git",{"skillNo":184,"name":185,"nameZh":6,"description":186,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":187,"categories":188,"keywords":191,"publishedAt":40},"01M6PDJJEQMBWWXW4TPXYNNV38","public-sector-rfp-authoring","Use when drafting or revising Korean government or local-government bid notices, requests for proposals, statements of work, or public-sector service\u002Fproject specifications from the ordering agency's perspective.","https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fpublic-sector-rfp-authoring\u002FSKILL.md",[189,190],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[192,193,194,195,196,197,198,199,200,201,37,30,110,202,203,204,108,135],"authoring","rfp","public","public sector rfp authoring","specifications","hermes agent","hermes","perspective","service","agency","proposals","work","local"]