[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CHWW2ZCCWN9B13NVF3J31W":3,"skill-same:01M6CHWW2ZCCWN9B13NVF3J31W":123},{"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":31,"publishedAt":52,"linkOnly":53,"markdownContent":54,"markdownBody":55,"frontMatter":56,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":14,"repositoryHtmlUrl":60,"repositoryHomepageUrl":61,"ownerHtmlUrl":62,"ownerBlogUrl":63,"ownerDescription":64,"updatedAt":65,"install":66,"resources":79},"01M6CHWW2ZCCWN9B13NVF3J31W","leafer-js",null,"Generate, explain, and debug LeaferJS (Leafer) Canvas graphics code — a high-performance 2D Canvas engine for graphic editors, infinite canvases, design tools, data visualization, interactive apps, and 2D games. Use when writing or fixing Canvas UI with the leafer-ui \u002F leafer \u002F @leafer-in\u002F* packages — creating shapes (Rect, Ellipse, Path, Text, Image), styling (fill, gradient, stroke, shadow, mask), events and dragging, animation, the App and editor architecture, infinite-canvas zoom and pan, or Vue\u002FReact\u002FNext\u002FNuxt\u002FNode\u002Fminiapp integration. Triggers include LeaferJS, Leafer, leafer-ui, leafer-editor, canvas editor, infinite canvas, design tool, 画布引擎, 画布编辑器, 无限画布, 设计工具, 图形编辑器.","Yukiniro\u002Fskills","Yukiniro","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F21242087?v=4","01M6CHWDY0NKQKGFCYMGSCTQ2X","Zhanghao","01M6CHWE1Z4CEH54PB0XJESZ0Z",0,"MIT","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fleafer-js\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],"leafer js","js","code","use","interactive","nuxt","explain","tool","Animation","2d games","design","visualization","data visualization","debug","architecture","react","performance","canvas","image","writing","2026-11-10 10:12:30",false,"---\nname: leafer-js\ndescription: Generate, explain, and debug LeaferJS (Leafer) Canvas graphics code — a high-performance 2D Canvas engine for graphic editors, infinite canvases, design tools, data visualization, interactive apps, and 2D games. Use when writing or fixing Canvas UI with the leafer-ui \u002F leafer \u002F @leafer-in\u002F* packages — creating shapes (Rect, Ellipse, Path, Text, Image), styling (fill, gradient, stroke, shadow, mask), events and dragging, animation, the App and editor architecture, infinite-canvas zoom and pan, or Vue\u002FReact\u002FNext\u002FNuxt\u002FNode\u002Fminiapp integration. Triggers include LeaferJS, Leafer, leafer-ui, leafer-editor, canvas editor, infinite canvas, design tool, 画布引擎, 画布编辑器, 无限画布, 设计工具, 图形编辑器.\n---\n\n# LeaferJS\n\nLeaferJS (often shortened to **Leafer**) is a modern, high-performance 2D Canvas engine for graphic\nediting and interaction. It renders large scenes efficiently (≈1M interactive rects in ~1.3s), runs\non Web \u002F Web Worker \u002F Node.js \u002F WeChat miniapp with one unified API, and ships professional editor\nfeatures (multi-select, transform, snapping). Prefer it over Fabric\u002FKonva\u002FPixi when the task is a\n**graphic editor, infinite canvas, design tool, or large-scale visualization**.\n\nEverything below is self-contained. For long-tail API detail, use the **Online resources** section —\ndo not assume a local docs repo is present.\n\n## Step 1 — Pick the package\n\nAll shapes\u002Fcontainers come from the core package. Plugin features (editor, animation, export, …) live\nin separate `@leafer-in\u002F*` packages and **must be imported to take effect**. Pick one install:\n\n| Goal | Install | Import from |\n| --- | --- | --- |\n| General use (default, ~70KB) | `npm i leafer-ui` | `leafer-ui` + add `@leafer-in\u002F*` as needed |\n| Graphic editor | `npm i leafer-editor` | `leafer-editor` (bundles editor + viewport + …) |\n| Game | `npm i leafer-game` | `leafer-game` (bundles animate + state + motion-path + robot) |\n| Lightweight drawing (~58KB) | `npm i leafer-draw` | `leafer-draw` |\n| Everything, simplest imports | `npm i leafer` | `leafer` (re-exports ui + all plugins) |\n\nWhen using `leafer-ui`, enabling a plugin = installing its package **and** importing it:\n\n```ts\nimport { App, Rect } from 'leafer-ui'\nimport '@leafer-in\u002Feditor'   \u002F\u002F side-effect import: registers editor features\nimport '@leafer-in\u002Fviewport' \u002F\u002F enables zoom\u002Fpan\n\u002F\u002F named import only when you instantiate the class:\nimport { Editor } from '@leafer-in\u002Feditor'\nimport { Arrow } from '@leafer-in\u002Farrow'\n```\n\nThe whole catalog of `@leafer-in\u002F*` packages, what each enables, and the script-tag\u002FCDN form are in\n[references\u002Fplugins.md](references\u002Fplugins.md).\n\n## Step 2 — Pick the architecture: `Leafer` vs `App`\n\n- **`Leafer`** — a single rendering tree. Use for most things: drawing, charts, simple interaction,\n  one-canvas apps. Simplest path.\n- **`App`** — hosts multiple `Leafer` engine layers (`ground` \u002F `tree` \u002F `sky`) that render at\n  different frequencies. Use **only** when you need a graphic **editor** or layered performance\n  (the editor plugin renders selection handles on the `sky` layer). See\n  [references\u002Fapp-editor-viewport.md](references\u002Fapp-editor-viewport.md).\n\n## Canonical minimal setup\n\n```ts\nimport { Leafer, Rect } from 'leafer-ui'\n\nconst leafer = new Leafer({ view: window }) \u002F\u002F window = full-window auto-layout\n\nconst rect = new Rect({\n  x: 100, y: 100, width: 200, height: 200,\n  fill: '#32cd79',\n  cornerRadius: [50, 80, 0, 80],\n  draggable: true,\n})\n\nleafer.add(rect)\n```\n\n`view` accepts: `window`, a DOM element, a `\u003Ccanvas>`, or an element **id string (no `#`)**.\n\n- **Auto-layout** (default): omit `width`\u002F`height` → fills the `view` container, auto-resizes.\n- **Fixed size**: set `width` + `height`. ⚠️ Never set `width: 0` — `0` is treated as auto-layout.\n- **Auto-grow**: `grow: true` makes the canvas grow to fit its content (Leafer only, not App).\n\n## Element creation — four equivalent idioms\n\n```ts\n\u002F\u002F 1. Class instance (most explicit)\nconst r = new Rect({ x: 100, y: 100, width: 100, height: 100, fill: '#32cd79' })\n\n\u002F\u002F 2. Shorthand: Element.one(data, x?, y?, width?, height?)\nconst r2 = Rect.one({ fill: '#32cd79' }, 100, 100, 100, 100)\n\n\u002F\u002F 3. Plain object with `tag` (no import of the class needed)\nleafer.add({ tag: 'Rect', x: 100, y: 100, width: 100, height: 100, fill: '#32cd79' })\n\n\u002F\u002F 4. JSON tree (round-trips with toJSON) — great for save\u002Fload\nleafer.add({ tag: 'Group', x: 20, y: 20, children: [{ tag: 'Rect', width: 100, height: 100, fill: '#32cd79' }] })\n```\n\nContainers nest the tree: **`Group`** (transform-only, no fill), **`Box`** (Group + Rect styling, like\na `\u003Cdiv>`), **`Frame`** (Box that clips overflow + white bg, like an artboard). Add with\n`parent.add(child)` \u002F `add([a, b])`; full element list and per-element props in\n[references\u002Felements.md](references\u002Felements.md).\n\n## Mutating elements (gotcha-aware)\n\n```ts\nrect.fill = 'blue'                       \u002F\u002F direct prop set re-renders automatically\nrect.set({ fill: 'blue', x: 50 })        \u002F\u002F batch set\nrect.set({ x: 200 }, { duration: 0.4 })  \u002F\u002F animated set (needs @leafer-in\u002Fanimate)\n```\n\n⚠️ **Only first-level setter changes are detected.** `rect.fill.url = '...'` will NOT re-render —\nreassign the whole object: `rect.fill = { type: 'image', url: '...' }`.\n\n## Critical gotchas (read before generating code)\n\n- **Plugins are opt-in.** Features like `editable`, `animation`, `export()`, `state`, `Flow`, `Arrow`,\n  `find()`, `resize` silently do nothing unless the matching `@leafer-in\u002F*` package is imported. When\n  code uses one of these, add the import. Map is in [references\u002Fplugins.md](references\u002Fplugins.md).\n- **Framework lifecycle.** In React\u002FVue, create Leafer inside `useEffect`\u002F`onMounted` and call\n  `leafer.destroy()` on cleanup (React Strict Mode mounts twice). Never store Leafer nodes in reactive\n  state (`ref`\u002F`reactive`\u002F`useState`) — the proxy wrapping cripples performance; use `proxyData` for\n  reactivity instead. See [references\u002Fintegration.md](references\u002Fintegration.md).\n- **Script-tag (CDN) name conflicts.** From the `LeaferUI` global, `Image` \u002F `PointerEvent` \u002F\n  `DragEvent` collide with browser globals — use the `My`-prefixed aliases (`MyImage`,\n  `MyPointerEvent`, `MyDragEvent`).\n- **Export needs a plugin.** `element.export('x.png')` requires `import '@leafer-in\u002Fexport'` (already\n  bundled in `leafer-editor` and Node builds).\n- **`leafer-ui` is browser-first.** For Node.js \u002F Worker \u002F miniapp use the platform builds — see\n  [references\u002Fintegration.md](references\u002Fintegration.md).\n\n## Where to look next\n\n| Task | Reference |\n| --- | --- |\n| Shapes, containers, per-element props (Rect, Ellipse, Path, Pen, Text, Image, SVG, Canvas, Group\u002FBox\u002FFrame) | [references\u002Felements.md](references\u002Felements.md) |\n| Appearance: fill, gradients, image\u002Fpattern fill, stroke, shadow, innerShadow, mask, eraser, opacity, blendMode, corner, origin\u002Faround | [references\u002Fstyling.md](references\u002Fstyling.md) |\n| Events, dragging, hit testing, pointer\u002Fdrag\u002Fzoom\u002Fmove events, capture\u002Fbubble | [references\u002Fevents.md](references\u002Fevents.md) |\n| Animation: `animation`\u002F`transition`\u002F`animate()`, keyframes, swing\u002Floop, states, motion path | [references\u002Fanimation.md](references\u002Fanimation.md) |\n| App architecture, graphic editor, infinite-canvas zoom\u002Fpan (viewport types), Flow auto-layout | [references\u002Fapp-editor-viewport.md](references\u002Fapp-editor-viewport.md) |\n| Plugin catalog + `@leafer-in\u002F*` import rules, export, CDN\u002Fscript tag | [references\u002Fplugins.md](references\u002Fplugins.md) |\n| Vue\u002FReact\u002FNext\u002FNuxt, Node\u002FWorker\u002Fminiapp, JSON save-load, coordinate systems & bounds | [references\u002Fintegration.md](references\u002Fintegration.md) |\n\n## Online resources (use for API detail not covered here)\n\n- Official docs: https:\u002F\u002Fwww.leaferjs.com — guide, examples, full API reference\n- Playground (run code online): https:\u002F\u002Fwww.leaferjs.com\u002Fplayground\u002F\n- Live examples: https:\u002F\u002Fwww.leaferjs.com\u002Fexamples\u002F\n- Source \u002F issues: https:\u002F\u002Fgithub.com\u002Fleaferjs\u002Fleafer-ui\n- For up-to-date API lookups, query context7 (library `leafer-ui`) or DeepWiki (`leaferjs\u002Fleafer-ui`).\n","# LeaferJS\n\nLeaferJS (often shortened to **Leafer**) is a modern, high-performance 2D Canvas engine for graphic\nediting and interaction. It renders large scenes efficiently (≈1M interactive rects in ~1.3s), runs\non Web \u002F Web Worker \u002F Node.js \u002F WeChat miniapp with one unified API, and ships professional editor\nfeatures (multi-select, transform, snapping). Prefer it over Fabric\u002FKonva\u002FPixi when the task is a\n**graphic editor, infinite canvas, design tool, or large-scale visualization**.\n\nEverything below is self-contained. For long-tail API detail, use the **Online resources** section —\ndo not assume a local docs repo is present.\n\n## Step 1 — Pick the package\n\nAll shapes\u002Fcontainers come from the core package. Plugin features (editor, animation, export, …) live\nin separate `@leafer-in\u002F*` packages and **must be imported to take effect**. Pick one install:\n\n| Goal | Install | Import from |\n| --- | --- | --- |\n| General use (default, ~70KB) | `npm i leafer-ui` | `leafer-ui` + add `@leafer-in\u002F*` as needed |\n| Graphic editor | `npm i leafer-editor` | `leafer-editor` (bundles editor + viewport + …) |\n| Game | `npm i leafer-game` | `leafer-game` (bundles animate + state + motion-path + robot) |\n| Lightweight drawing (~58KB) | `npm i leafer-draw` | `leafer-draw` |\n| Everything, simplest imports | `npm i leafer` | `leafer` (re-exports ui + all plugins) |\n\nWhen using `leafer-ui`, enabling a plugin = installing its package **and** importing it:\n\n```ts\nimport { App, Rect } from 'leafer-ui'\nimport '@leafer-in\u002Feditor'   \u002F\u002F side-effect import: registers editor features\nimport '@leafer-in\u002Fviewport' \u002F\u002F enables zoom\u002Fpan\n\u002F\u002F named import only when you instantiate the class:\nimport { Editor } from '@leafer-in\u002Feditor'\nimport { Arrow } from '@leafer-in\u002Farrow'\n```\n\nThe whole catalog of `@leafer-in\u002F*` packages, what each enables, and the script-tag\u002FCDN form are in\n[references\u002Fplugins.md](references\u002Fplugins.md).\n\n## Step 2 — Pick the architecture: `Leafer` vs `App`\n\n- **`Leafer`** — a single rendering tree. Use for most things: drawing, charts, simple interaction,\n  one-canvas apps. Simplest path.\n- **`App`** — hosts multiple `Leafer` engine layers (`ground` \u002F `tree` \u002F `sky`) that render at\n  different frequencies. Use **only** when you need a graphic **editor** or layered performance\n  (the editor plugin renders selection handles on the `sky` layer). See\n  [references\u002Fapp-editor-viewport.md](references\u002Fapp-editor-viewport.md).\n\n## Canonical minimal setup\n\n```ts\nimport { Leafer, Rect } from 'leafer-ui'\n\nconst leafer = new Leafer({ view: window }) \u002F\u002F window = full-window auto-layout\n\nconst rect = new Rect({\n  x: 100, y: 100, width: 200, height: 200,\n  fill: '#32cd79',\n  cornerRadius: [50, 80, 0, 80],\n  draggable: true,\n})\n\nleafer.add(rect)\n```\n\n`view` accepts: `window`, a DOM element, a `\u003Ccanvas>`, or an element **id string (no `#`)**.\n\n- **Auto-layout** (default): omit `width`\u002F`height` → fills the `view` container, auto-resizes.\n- **Fixed size**: set `width` + `height`. ⚠️ Never set `width: 0` — `0` is treated as auto-layout.\n- **Auto-grow**: `grow: true` makes the canvas grow to fit its content (Leafer only, not App).\n\n## Element creation — four equivalent idioms\n\n```ts\n\u002F\u002F 1. Class instance (most explicit)\nconst r = new Rect({ x: 100, y: 100, width: 100, height: 100, fill: '#32cd79' })\n\n\u002F\u002F 2. Shorthand: Element.one(data, x?, y?, width?, height?)\nconst r2 = Rect.one({ fill: '#32cd79' }, 100, 100, 100, 100)\n\n\u002F\u002F 3. Plain object with `tag` (no import of the class needed)\nleafer.add({ tag: 'Rect', x: 100, y: 100, width: 100, height: 100, fill: '#32cd79' })\n\n\u002F\u002F 4. JSON tree (round-trips with toJSON) — great for save\u002Fload\nleafer.add({ tag: 'Group', x: 20, y: 20, children: [{ tag: 'Rect', width: 100, height: 100, fill: '#32cd79' }] })\n```\n\nContainers nest the tree: **`Group`** (transform-only, no fill), **`Box`** (Group + Rect styling, like\na `\u003Cdiv>`), **`Frame`** (Box that clips overflow + white bg, like an artboard). Add with\n`parent.add(child)` \u002F `add([a, b])`; full element list and per-element props in\n[references\u002Felements.md](references\u002Felements.md).\n\n## Mutating elements (gotcha-aware)\n\n```ts\nrect.fill = 'blue'                       \u002F\u002F direct prop set re-renders automatically\nrect.set({ fill: 'blue', x: 50 })        \u002F\u002F batch set\nrect.set({ x: 200 }, { duration: 0.4 })  \u002F\u002F animated set (needs @leafer-in\u002Fanimate)\n```\n\n⚠️ **Only first-level setter changes are detected.** `rect.fill.url = '...'` will NOT re-render —\nreassign the whole object: `rect.fill = { type: 'image', url: '...' }`.\n\n## Critical gotchas (read before generating code)\n\n- **Plugins are opt-in.** Features like `editable`, `animation`, `export()`, `state`, `Flow`, `Arrow`,\n  `find()`, `resize` silently do nothing unless the matching `@leafer-in\u002F*` package is imported. When\n  code uses one of these, add the import. Map is in [references\u002Fplugins.md](references\u002Fplugins.md).\n- **Framework lifecycle.** In React\u002FVue, create Leafer inside `useEffect`\u002F`onMounted` and call\n  `leafer.destroy()` on cleanup (React Strict Mode mounts twice). Never store Leafer nodes in reactive\n  state (`ref`\u002F`reactive`\u002F`useState`) — the proxy wrapping cripples performance; use `proxyData` for\n  reactivity instead. See [references\u002Fintegration.md](references\u002Fintegration.md).\n- **Script-tag (CDN) name conflicts.** From the `LeaferUI` global, `Image` \u002F `PointerEvent` \u002F\n  `DragEvent` collide with browser globals — use the `My`-prefixed aliases (`MyImage`,\n  `MyPointerEvent`, `MyDragEvent`).\n- **Export needs a plugin.** `element.export('x.png')` requires `import '@leafer-in\u002Fexport'` (already\n  bundled in `leafer-editor` and Node builds).\n- **`leafer-ui` is browser-first.** For Node.js \u002F Worker \u002F miniapp use the platform builds — see\n  [references\u002Fintegration.md](references\u002Fintegration.md).\n\n## Where to look next\n\n| Task | Reference |\n| --- | --- |\n| Shapes, containers, per-element props (Rect, Ellipse, Path, Pen, Text, Image, SVG, Canvas, Group\u002FBox\u002FFrame) | [references\u002Felements.md](references\u002Felements.md) |\n| Appearance: fill, gradients, image\u002Fpattern fill, stroke, shadow, innerShadow, mask, eraser, opacity, blendMode, corner, origin\u002Faround | [references\u002Fstyling.md](references\u002Fstyling.md) |\n| Events, dragging, hit testing, pointer\u002Fdrag\u002Fzoom\u002Fmove events, capture\u002Fbubble | [references\u002Fevents.md](references\u002Fevents.md) |\n| Animation: `animation`\u002F`transition`\u002F`animate()`, keyframes, swing\u002Floop, states, motion path | [references\u002Fanimation.md](references\u002Fanimation.md) |\n| App architecture, graphic editor, infinite-canvas zoom\u002Fpan (viewport types), Flow auto-layout | [references\u002Fapp-editor-viewport.md](references\u002Fapp-editor-viewport.md) |\n| Plugin catalog + `@leafer-in\u002F*` import rules, export, CDN\u002Fscript tag | [references\u002Fplugins.md](references\u002Fplugins.md) |\n| Vue\u002FReact\u002FNext\u002FNuxt, Node\u002FWorker\u002Fminiapp, JSON save-load, coordinate systems & bounds | [references\u002Fintegration.md](references\u002Fintegration.md) |\n\n## Online resources (use for API detail not covered here)\n\n- Official docs: https:\u002F\u002Fwww.leaferjs.com — guide, examples, full API reference\n- Playground (run code online): https:\u002F\u002Fwww.leaferjs.com\u002Fplayground\u002F\n- Live examples: https:\u002F\u002Fwww.leaferjs.com\u002Fexamples\u002F\n- Source \u002F issues: https:\u002F\u002Fgithub.com\u002Fleaferjs\u002Fleafer-ui\n- For up-to-date API lookups, query context7 (library `leafer-ui`) or DeepWiki (`leaferjs\u002Fleafer-ui`).\n",{"name":5,"description":7},"main","bdc113818552fc6973af63a3890b61d9777b677d","skills\u002Fleafer-js","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills","https:\u002F\u002Fskills.sh\u002Fyukiniro\u002Fskills","https:\u002F\u002Fgithub.com\u002FYukiniro","zhanghao.zone","Done is better than perfect.","2026-10-17 22:26:31",{"source":8,"skillName":5,"commands":67,"prompt":77,"zipAvailable":78},[68,71,74],{"tool":69,"command":70},"npx","npx skills add Yukiniro\u002Fskills --skill leafer-js",{"tool":72,"command":73},"bunx","bunx skills add Yukiniro\u002Fskills --skill leafer-js",{"tool":75,"command":76},"pnpm","pnpm dlx skills add Yukiniro\u002Fskills --skill leafer-js","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fleafer-js\u002FSKILL.md",true,[80,85,91,95,99,103,107,111,115,119],{"path":81,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"LICENSE","许可证",1070,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fmcp-servers\u002Fedward-arinin-web-dev-dexe-otc\u002FLICENSE",{"path":86,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Fanimation.md","REFERENCE","参考文档",4683,"https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fleafer-js\u002Freferences\u002Fanimation.md",{"path":92,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":93,"sourceHtmlUrl":94},"references\u002Fapp-editor-viewport.md",4815,"https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fleafer-js\u002Freferences\u002Fapp-editor-viewport.md",{"path":96,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":97,"sourceHtmlUrl":98},"references\u002Felements.md",6740,"https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fleafer-js\u002Freferences\u002Felements.md",{"path":100,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":101,"sourceHtmlUrl":102},"references\u002Fevents.md",4306,"https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fleafer-js\u002Freferences\u002Fevents.md",{"path":104,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":105,"sourceHtmlUrl":106},"references\u002Fintegration.md",4610,"https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fleafer-js\u002Freferences\u002Fintegration.md",{"path":108,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":109,"sourceHtmlUrl":110},"references\u002Fplugins.md",5060,"https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fleafer-js\u002Freferences\u002Fplugins.md",{"path":112,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":113,"sourceHtmlUrl":114},"references\u002Fstyling.md",4809,"https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fleafer-js\u002Freferences\u002Fstyling.md",{"path":116,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":117,"sourceHtmlUrl":118},"SOURCE.md",381,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fmcp-servers\u002Fedward-arinin-web-dev-dexe-otc\u002FSOURCE.md",{"path":120,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":121,"sourceHtmlUrl":122},"TRUST.auto.yaml",2191,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fmcp-servers\u002Fedward-arinin-web-dev-dexe-otc\u002FTRUST.auto.yaml",[124,136,157,176,192,204],{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":133,"publishedAt":52},"01M6CHXN4VA42C1N988S7BWCMG","template-skill","Replace with description of the skill and when to use it.","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Ftemplate\u002FSKILL.md",[130],{"categoryNo":131,"categoryName":132,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[134,135,35],"template skill","template",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":145,"publishedAt":52},"01M6CHXJMHXG22G9TQPPN498ZV","work-weekly-report","Generate structured weekly work summaries from daily work logs. Use when: user provides daily work logs\u002Fnotes and asks to create a weekly report\u002Fsummary (周报\u002F周工作总结), or when user pastes fragmented daily entries and wants them consolidated into a categorized summary. Triggers on keywords: 周报, 周工作总结, weekly summary, weekly report, 工作日志整理, 每日日志汇总.","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fwork-weekly-report\u002FSKILL.md",[142],{"categoryNo":143,"categoryName":144,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000034","行政与办公人员",[146,147,148,149,150,151,152,153,154,35,155,156],"report","work","Weekly Report","work weekly report","create","notes","generate","logs","user","daily","summary",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":164,"publishedAt":52},"01M6CHXFF4NJ91DZ197XD462N8","squash-commits","Squash all commits on the current branch (relative to the main branch) into a single commit while preserving the branch name. Use when: user wants to squash commits, clean up branch history, compress multiple commits into one, or tidy up before merging. Triggers on: squash commits, 压缩提交, 合并提交, clean up commits, compress commits, squash branch, 整理提交记录, 合并为一个提交. Make sure to use this skill whenever the user mentions squashing, compressing, or cleaning up commit history on a branch, even if they don't use the exact term \"squash\".","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fsquash-commits\u002FSKILL.md",[163],{"categoryNo":131,"categoryName":132,"taxonomyType":21,"taxonomyTypeDesc":22},[165,166,167,168,169,170,171,154,35,172,173,57,174,175],"commits","squash commits","squash","history","branch","compress","压缩","up","clean","tidy","commit",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":182,"publishedAt":52},"01M6CHXCM56VNQFDYXZ8NQT3A9","smart-commit","Automated Git commit with Conventional Commits format. Analyzes staged changes, determines commit type and scope, detects description language from commit history (defaults to English), and generates a complete commit message. Use when the user says \"commit\", \"smart commit\", \"提交代码\", \"帮我提交\", or any variation of requesting a git commit with an auto-generated message.","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fsmart-commit\u002FSKILL.md",[],[183,175,184,185,186,187,165,188,168,154,189,35,190,191],"smart commit","auto","git commit","git","commit message","format","generated","conventional commits","language",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":196,"categories":197,"keywords":198,"publishedAt":52},"01M6CHXAZNH6HMY4DW6663QJ25","setup-agents-md","创建、初始化或更新 AGENTS.md 通用工程原则文档时使用。触发词包括“创建 AGENTS.md”、“更新 AGENTS.md”、“初始化 AGENTS.md”、“setup AGENTS.md”、“create AGENTS.md”、“update AGENTS.md”。","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fsetup-agents-md\u002FSKILL.md",[],[199,200,201,202,150,203],"setup agents md","agents md","setup","文档","update",{"skillNo":205,"name":206,"nameZh":6,"description":207,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":208,"categories":209,"keywords":216,"publishedAt":52},"01M6CHX7J863WH94J35ZVN8EMZ","resume-screener","Evaluate and grade resumes against job requirements using a 10-level grading system (C, B-, B, B+, A-, A, A+, S, SS, SSS). Provides multi-dimensional scoring with evidence-based reasoning and hiring recommendations. Use when screening candidates, comparing applicants, assessing resume-job fit, or filtering resumes. Supports Chinese and English resumes in any format (PDF, DOCX, text, image).","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fresume-screener\u002FSKILL.md",[210,213],{"categoryNo":211,"categoryName":212,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",{"categoryNo":214,"categoryName":215,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000038","人力资源",[217,218,219,50,220,221,222,188,223,224,35,225,226,227],"resume screener","resume","PDF","reasoning","Hiring","system","text","filtering","evidence","chinese","docx"]