AGENT SKILL

figma-icons-iconify

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/insert icons in Figma designs.

适用职业设计师
License 许可
MIT
最近更新
2026-11-12
Stars
★ 1
Forks
0

01 前言 Front Matter

name
figma-icons-iconify
metadata
{ "email": "initred@dou.so", "author": "initred", "version": "1.0.0" }
description
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/insert icons in Figma designs.

03 SKILL.md 正文

Iconify Icons for Figma

Fetch real, pixel-perfect SVG icons from the Iconify API 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.

Prerequisites

  • The figma-use skill MUST be loaded before any use_figma tool call. Always invoke it first.
  • fetch() is NOT available inside use_figma code. All HTTP requests must happen before calling use_figma.
  • Use Bash(curl -s ...) instead of WebFetch to call the Iconify API. The Iconify API returns 403 for WebFetch requests but works with curl.

Core Workflow

Step 1: Fetch SVG via curl

Use the Bash tool with curl -s to retrieve the SVG from the Iconify API:

curl -s "https://api.iconify.design/{prefix}/{name}.svg"

Example:

curl -s "https://api.iconify.design/tabler/alert-circle.svg"

This returns a raw SVG string ready for Figma insertion.

Why curl? The Iconify API returns HTTP 403 for WebFetch requests. Always use Bash(curl -s ...) instead.

Step 2: Insert into Figma via use_figma

Pass the fetched SVG string into a use_figma call using figma.createNodeFromSvg():

// Paste the exact SVG string from Step 1
const svgString = `<svg xmlns="http://www.w3.org/2000/svg" ...>...</svg>`;

const node = figma.createNodeFromSvg(svgString);
// Name format: {LibraryName}/{icon-name} for easy identification
node.name = "Tabler/alert-circle";

// Resize while preserving aspect ratio.
// Most Iconify icons are square (24x24), but some are not — always check.
const originalWidth = node.width;
const originalHeight = node.height;
const targetHeight = 24; // desired height
const targetWidth = targetHeight * (originalWidth / originalHeight);
node.resize(targetWidth, targetHeight);

// Append to target frame (replace TARGET_ID with actual node ID)
const target = figma.getNodeById("TARGET_ID");
target.appendChild(node);

return { createdNodeIds: [node.id] };

Important: figma.createNodeFromSvg() returns a FrameNode containing the vector paths. You can resize, rename, reposition, and reparent it like any other frame.

URL Parameters

Customize the fetched SVG by appending query parameters:

Parameter Description Example
color Set icon color (URL-encode #) ?color=%23ff0000
width Icon width in pixels ?width=32
height Icon height in pixels ?height=32
flip Flip direction ?flip=horizontal
rotate Rotation angle ?rotate=90deg

Example with parameters:

https://api.iconify.design/tabler/alert-circle.svg?width=24&height=24&color=%230f172a

Searching for Icons

When the user does not specify an exact icon name, search using the Iconify search endpoint:

curl -s "https://api.iconify.design/search?query={term}&prefixes={prefix}&limit=10"

Example:

curl -s "https://api.iconify.design/search?query=alert&prefixes=tabler&limit=10"

This returns JSON with matching icon names:

{
  "icons": [
    "tabler:alert-circle",
    "tabler:alert-triangle",
    "tabler:alert-octagon"
  ],
  "total": 15
}

Pick the best match and proceed with Step 1 and Step 2 of the core workflow.

Batch Icons (Multiple at Once)

When inserting multiple icons, use the JSON endpoint to fetch them all in one request:

curl -s "https://api.iconify.design/{prefix}.json?icons={name1},{name2},{name3}"

Example:

curl -s "https://api.iconify.design/tabler.json?icons=alert-circle,home,settings"

This returns structured data:

{
  "prefix": "tabler",
  "icons": {
    "alert-circle": {
      "body": "<path d=\"...\"/>",
      "width": 24,
      "height": 24
    }
  }
}

To use each icon, extract the data and wrap the body in an SVG element:

// Extract icon data from the JSON response
const icon = response.icons["alert-circle"];
const { body } = icon;
const width = icon.width || 24;
const height = icon.height || 24;

const svgString = `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">${body}</svg>`;
const node = figma.createNodeFromSvg(svgString);

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.

Common Icon Set Prefixes

Prefix Icon Set Style Default Attributes
tabler Tabler Icons Stroke stroke="currentColor" stroke-width="2"
lucide Lucide Stroke stroke="currentColor" stroke-width="2"
mdi Material Design Icons Fill fill="currentColor"
ph Phosphor Icons Stroke/Fill varies by weight
ri Remix Icon Fill fill="currentColor"
heroicons Heroicons Stroke stroke="currentColor" stroke-width="1.5"
solar Solar Icons Stroke/Fill varies by style
iconamoon IconaMoon Stroke stroke="currentColor"

Recoloring After Insertion

If you need to change the icon color after inserting into Figma, traverse the node's children and update fills or strokes:

const iconNode = figma.getNodeById("ICON_NODE_ID");

function recolor(node, color) {
  if ("fills" in node && node.fills.length > 0) {
    node.fills = [{ type: "SOLID", color }];
  }
  if ("strokes" in node && node.strokes.length > 0) {
    node.strokes = [{ type: "SOLID", color }];
  }
  if ("children" in node) {
    for (const child of node.children) {
      recolor(child, color);
    }
  }
}

// Color values are 0-1 range (not 0-255)
recolor(iconNode, { r: 0.09, g: 0.09, b: 0.09 });

return { mutatedNodeIds: [iconNode.id] };

Handling Errors

  • Empty search results: If the search returns no icons, try broader search terms or check the icon set prefix spelling.
  • 404 from SVG endpoint: The icon name is wrong or doesn't exist in that prefix. Verify with the search endpoint first.
  • Malformed SVG / 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.

Constraints

  1. NEVER draw icons manually with vector paths, ellipses, or rectangles when the icon is available on Iconify.
  2. 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.
  3. Always load the figma-use skill before making any use_figma tool call.
  4. Always return created node IDs from use_figma calls for subsequent operations.
  5. 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.
  6. Name icon nodes as {LibraryName}/{icon-name} (e.g., Tabler/alert-circle, Lucide/home, MDI/settings). This makes icons identifiable by their source library in the Figma layers panel.
  7. 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().

04 同仓库更多 Skills

douinc
douinc/agent-skills

template-skill

Replace with description of the skill and when the agent should use it.

Skill与智能体开发
★ 1
douinc
douinc/agent-skills

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.

设计师内容创作者写作与文案Skill与智能体开发
★ 1
douinc
douinc/agent-skills

ux-writing-korean

한국어로 UI/UX 문구를 작성하거나 검수할 때 사용합니다. 해요체, 능동형, 긍정형, 캐주얼 경어, 명사 조합 회피 등 5가지 핵심 원칙과 예외 규칙을 적용합니다.

设计师内容创作者写作与文案
★ 1
douinc
douinc/agent-skills

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/subscription costs of an agent project — phrases like "토큰 점검", "토큰 낭비 찾아줘", "토큰 최적화", "컨텍스트 최적화", "Claude Code 비용 줄여줘", "API 비용이 너무 나와", "audit token efficiency", "check my CLAUDE.md/AGENTS.md/MCP 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".

开发工程师Skill与智能体开发
★ 1
douinc
douinc/agent-skills

release-showcase

정식 릴리스의 변경을 이전·이후 스크린샷, 클릭 흐름 녹화 영상, 비교·단계·탭·흐름도 같은 HTML 컴포넌트로 보여 주는 파일 하나짜리 릴리스 문서를 만든다. 텍스트뿐인 릴리스 노트로는 어떤 UX가 바뀌었고 새 기능을 어떻게 쓰는지 감이 안 올 때 쓴다. '릴리스 노트 문서 만들어 줘', '릴리스 쇼케이스', '이번 배포 변경사항 정리해서 공유', '릴리즈 노트 HTML', '변경사항을 화면으로 보여 주는 문서', '업데이트 소개 페이지', 'what's new 페이지', 'release notes with screenshots', 'changelog page', '배포 공지 자료'처럼 버전 태그 사이의 변경을 팀·고객에게 시각적으로 알릴 때 반드시 사용한다. git 태그로 릴리스하는 저장소라면 웹·데스크톱·모바일 어느 앱이든 쓴다. 커밋 목록만 필요한 CHANGELOG.md 갱신, 릴리스 태그·배포 자체, 마케팅 영상 제작에는 쓰지 않는다.

★ 1
douinc
douinc/agent-skills

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/project specifications from the ordering agency's perspective.

设计师Skill与智能体开发
★ 1