[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7CZXQD278VCXNFKXTATMFZD":3,"skill-same:01M7CZXQD278VCXNFKXTATMFZD":53},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":26,"commitSha":27,"skillDirectory":28,"forksCount":13,"repositoryHtmlUrl":29,"repositoryHomepageUrl":30,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":32,"install":33,"resources":46},"01M7CZXQD278VCXNFKXTATMFZD","figma-extract",null,"Pull a Figma file's node tree, design tokens, and embedded assets into the project cwd as a structured snapshot.","qelvora1\u002Fopen-design","qelvora1","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F294549645?v=4","01M7CYQMFVAA6E5YHKCNNCBXJS","01M7CYQMGFRBPABV2BSD9VB71Z",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fqelvora1\u002Fopen-design\u002Fblob\u002Fmain\u002Fplugins\u002F_official\u002Fatoms\u002Ffigma-extract\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: figma-extract\ndescription: Pull a Figma file's node tree, design tokens, and embedded assets into the project cwd as a structured snapshot.\nod:\n  scenario: figma-migration\n  mode: extract\n---\n\n# Figma extract\n\nSpec §10 \u002F §21.3.1: the figma-migration scenario starts with a Figma\nfile URL + an OAuth token. This atom turns that pair into the\nauthoritative on-disk record subsequent stages (`token-map`,\n`generate`, `critique`) operate on.\n\n## Inputs\n\n| Source | Required | Notes |\n| --- | --- | --- |\n| Figma file URL or `node-id` | yes | Provide via the `figma-oauth` GenUI surface or `od plugin apply --input fileUrl=…` |\n| Figma OAuth token | yes | Routed through `oauth-prompt` with `oauth.route='connector'` and `connectorId='figma'`; the daemon never stores the token in SQLite |\n\n## Output\n\nThe atom writes a deterministic, JSON-shaped extract under the\nproject cwd:\n\n```text\nproject-cwd\u002F\n├── figma\u002F\n│   ├── tree.json        # canonical node tree (id \u002F type \u002F parent \u002F children \u002F box \u002F fills \u002F text)\n│   ├── tokens.json      # color + typography + spacing tokens lifted off the file\n│   ├── assets\u002F          # rasterised exports of every leaf node that the file marks for export\n│   │   └── \u003Cnode-id>.\u003Cpng|svg|webp>\n│   └── meta.json        # { fileUrl, version, lastModified, exportedAt, atomDigest }\n```\n\n`figma\u002Ftree.json` is the canonical pivot for every downstream atom.\n`figma\u002Ftokens.json` is the input to `token-map`. `assets\u002F` is the\ninput to `generate`'s media stage.\n\n## Convergence\n\nThe atom completes when `figma\u002Ftree.json` exists and is non-empty.\nThe `until` evaluator reads `figma.tree.nodes >= 1`; if the figma\nfile is empty or the OAuth token expired, the atom emits a clear\nerror event and the run aborts (the user fixes auth or picks a\ndifferent file).\n\n## Anti-patterns the prompt fragment forbids\n\n- Synthesising a tree from screenshots when the OAuth path failed —\n  always re-prompt the user; never make up node ids.\n- Dropping unsupported node types silently; record them in\n  `meta.json.unsupportedNodes[]` so the human can audit gaps.\n- Treating component instances as duplicates; record `componentRef`\n  links so `token-map` can de-duplicate at the right boundary.\n\n## Status\n\nImplemented by the daemon runner in\n`apps\u002Fdaemon\u002Fsrc\u002Fplugins\u002Fatoms\u002Ffigma-extract.ts`. It fetches and walks the\nFigma REST tree, records unsupported nodes, lifts tokens, and rasterizes\nsupported assets.\n","# Figma extract\n\nSpec §10 \u002F §21.3.1: the figma-migration scenario starts with a Figma\nfile URL + an OAuth token. This atom turns that pair into the\nauthoritative on-disk record subsequent stages (`token-map`,\n`generate`, `critique`) operate on.\n\n## Inputs\n\n| Source | Required | Notes |\n| --- | --- | --- |\n| Figma file URL or `node-id` | yes | Provide via the `figma-oauth` GenUI surface or `od plugin apply --input fileUrl=…` |\n| Figma OAuth token | yes | Routed through `oauth-prompt` with `oauth.route='connector'` and `connectorId='figma'`; the daemon never stores the token in SQLite |\n\n## Output\n\nThe atom writes a deterministic, JSON-shaped extract under the\nproject cwd:\n\n```text\nproject-cwd\u002F\n├── figma\u002F\n│   ├── tree.json        # canonical node tree (id \u002F type \u002F parent \u002F children \u002F box \u002F fills \u002F text)\n│   ├── tokens.json      # color + typography + spacing tokens lifted off the file\n│   ├── assets\u002F          # rasterised exports of every leaf node that the file marks for export\n│   │   └── \u003Cnode-id>.\u003Cpng|svg|webp>\n│   └── meta.json        # { fileUrl, version, lastModified, exportedAt, atomDigest }\n```\n\n`figma\u002Ftree.json` is the canonical pivot for every downstream atom.\n`figma\u002Ftokens.json` is the input to `token-map`. `assets\u002F` is the\ninput to `generate`'s media stage.\n\n## Convergence\n\nThe atom completes when `figma\u002Ftree.json` exists and is non-empty.\nThe `until` evaluator reads `figma.tree.nodes >= 1`; if the figma\nfile is empty or the OAuth token expired, the atom emits a clear\nerror event and the run aborts (the user fixes auth or picks a\ndifferent file).\n\n## Anti-patterns the prompt fragment forbids\n\n- Synthesising a tree from screenshots when the OAuth path failed —\n  always re-prompt the user; never make up node ids.\n- Dropping unsupported node types silently; record them in\n  `meta.json.unsupportedNodes[]` so the human can audit gaps.\n- Treating component instances as duplicates; record `componentRef`\n  links so `token-map` can de-duplicate at the right boundary.\n\n## Status\n\nImplemented by the daemon runner in\n`apps\u002Fdaemon\u002Fsrc\u002Fplugins\u002Fatoms\u002Ffigma-extract.ts`. It fetches and walks the\nFigma REST tree, records unsupported nodes, lifts tokens, and rasterizes\nsupported assets.\n",{"od":23,"name":5,"description":7},{"mode":24,"scenario":25},"extract","figma-migration","main","29240bc3ff7b5db56f8a41965213220446fcb96d","plugins\u002F_official\u002Fatoms\u002Ffigma-extract","https:\u002F\u002Fgithub.com\u002Fqelvora1\u002Fopen-design","https:\u002F\u002Fopen-design.ai","https:\u002F\u002Fgithub.com\u002Fqelvora1","2026-10-01 22:47:24",{"source":8,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add qelvora1\u002Fopen-design --skill figma-extract",{"tool":39,"command":40},"bunx","bunx skills add qelvora1\u002Fopen-design --skill figma-extract",{"tool":42,"command":43},"pnpm","pnpm dlx skills add qelvora1\u002Fopen-design --skill figma-extract","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fqelvora1\u002Fopen-design\u002Fblob\u002Fmain\u002Fplugins\u002F_official\u002Fatoms\u002Ffigma-extract\u002FSKILL.md",true,[47],{"path":48,"resourceType":49,"resourceTypeDesc":50,"sizeBytes":51,"sourceHtmlUrl":52},"open-design.json","REFERENCE","参考文档",905,"https:\u002F\u002Fgithub.com\u002Fqelvora1\u002Fopen-design\u002Fblob\u002Fmain\u002Fplugins\u002F_official\u002Fatoms\u002Ffigma-extract\u002Fopen-design.json",[54,61,68,75,82,91],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":60,"publishedAt":18},"01M7D3A2Y3ZTSPJJSCEHTWDN2P","Beta Skill","Instruction-only fixture skill.","https:\u002F\u002Fgithub.com\u002Fqelvora1\u002Fopen-design\u002Fblob\u002Fmain\u002Ftools\u002Frelease\u002Ftests\u002Ffixtures\u002Fcatalog\u002Fskills\u002Fbeta\u002FSKILL.md",[],[],{"skillNo":62,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"publishedAt":18},"01M7D3A1MHKESXV45VYXKPCDRN","Alpha Skill","First fixture skill with a runnable demo.","https:\u002F\u002Fgithub.com\u002Fqelvora1\u002Fopen-design\u002Fblob\u002Fmain\u002Ftools\u002Frelease\u002Ftests\u002Ffixtures\u002Fcatalog\u002Fskills\u002Falpha\u002FSKILL.md",[],[],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":18},"01M7D3A0HSH085FTGATVBG43YG","Deck One","A small deck template fixture.","https:\u002F\u002Fgithub.com\u002Fqelvora1\u002Fopen-design\u002Fblob\u002Fmain\u002Ftools\u002Frelease\u002Ftests\u002Ffixtures\u002Fcatalog\u002Fdesign-templates\u002Fdeck-one\u002FSKILL.md",[],[],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":18},"01M7D39Y0372ZQ6GTWFAJ7DEVJ","youtube-clipper","YouTube clip generation and editing with automated workflows — pull source video, slice highlights, add captions, and export.","https:\u002F\u002Fgithub.com\u002Fqelvora1\u002Fopen-design\u002Fblob\u002Fmain\u002Fskills\u002Fyoutube-clipper\u002FSKILL.md",[],[],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":86,"licenseFileUrl":87,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":18},"01M7D39SMB0RHRGGQY24YVD8N5","writing-guidelines","Review docs\u002Fprose for Writing Guidelines compliance. Use when asked to \"review my docs\", \"check writing style\", \"audit prose\", \"review docs voice and tone\", or \"check this page against the writing handbook\".","MIT","https:\u002F\u002Fgithub.com\u002Fqelvora1\u002Fopen-design\u002Fblob\u002Fmain\u002Fskills\u002Fwriting-guidelines\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fqelvora1\u002Fopen-design\u002Fblob\u002Fmain\u002Fskills\u002Fwriting-guidelines\u002FSKILL.md",[],[],{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":97,"publishedAt":18},"01M7D39NNKF0JDA1J6ZJJQVVCV","wpds","WordPress Design System. Apply WordPress's official design tokens, typography, and component patterns to themes and sites.","https:\u002F\u002Fgithub.com\u002Fqelvora1\u002Fopen-design\u002Fblob\u002Fmain\u002Fskills\u002Fwpds\u002FSKILL.md",[],[]]