[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6RW455VY6CPHG3XR7ZVY3XP":3,"skill-same:01M6RW455VY6CPHG3XR7ZVY3XP":75},{"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":25,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":13,"repositoryHtmlUrl":59,"repositoryHomepageUrl":6,"ownerHtmlUrl":60,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":61,"install":62,"resources":74},"01M6RW455VY6CPHG3XR7ZVY3XP","react-testing",null,"React component testing with React Testing Library, Vitest\u002FJest, MSW for network mocking, accessibility assertions with axe, and the decision boundary between component tests and Playwright\u002FCypress end-to-end runs. Use when writing or fixing tests for React components, hooks, or pages.","sakamoto-family-smile\u002Fagent_monorepo","sakamoto-family-smile","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F132812403?v=4","01M6RTAT3H8PMWX5SJ65KP3VYF","01M6RTAV321WB5RAHCWTZMX5CV",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Freact-testing\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"react","react testing","testing","decision","when","for","react testing library","msw","cypress","end","jest","hooks","vitest","network","library","testing library","component","react components","components","writing","2026-11-10 10:12:30",false,"---\nname: fo-figma\ndescription: Record a screen's Figma frames (state × viewport node ids) in docs\u002Ffigma-manifest.json through the Figma MCP and export them to PNG with bin\u002Ffo-figma-export when FIGMA_TOKEN is set, so fo-plan can cite them and fo-visual can compare against them. Use before fo-plan on screens that have a design.\nargument-hint: \"--app \u003Cname> --screen \u003Cid> [--page \u003Cfigma page>|--node \u003Cid>] [--file-key \u003Ckey>]\"\nuser-invocable: true\nallowed-tools: Read, Write, Glob, Grep, Bash, Agent\n---\n\n# fo-figma — the view's answer key\n\nConventions: `${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Ffo-shared\u002FSKILL.md`.\n\n## Step 0 — Preconditions\n\nConfig with `answerKeys.figma.manifest`; the manifest exists (`fo-init` creates `{ \"fileKey\": null, \"screens\": {} }`).\n`fileKey`: from the manifest, `--file-key`, or ask once and store it in the manifest. The Figma\nMCP must be connected in this session (a tool named `mcp__figma*__get_metadata` is available);\nwithout it, say so and stop — there is no non-MCP discovery path. `FIGMA_TOKEN` in the environment\nenables the PNG export; without it the frames are recorded without files (say so; the token is\nnever asked for in chat and never written to a file). Lock `figma.lock`.\n\n`--page`\u002F`--node`: the Figma page (e.g. `UI_Main`) or node the designer named for this screen; ask\nwhen neither is given and the manifest has no `page` for the screen.\n\n## Step 1 — Run and wait\n\nStart one `Agent` with `subagent_type: frontend-ohmyhotel-plugin:figma-extractor` and its inputs\n(`app`, `screen`, `config`, `planFile` when a plan exists, `manifest`, `fileKey`, `pageOrNode`,\n`outDir: \u003CevidenceDir>\u002F\u003Capp>\u002F\u003Cscreen>\u002Ffigma`, `mcpToolPrefix`). Wait for the completion notification.\n\n## Step 2 — Record, report, next\n\nTracker: `fo-progress-set --app \u003Capp> --screen \u003Cscreen> --set figma --json '{\"recordedAt\":…,\"frames\":n,\"exported\":n,\"missing\":[…]}'`. Release the lock. Report the coverage table (states × viewports: frame \u002F exported \u002F missing), unmatched frames,\nthe naming rule inferred, and the suggested commit (`figma(\u003Cscreen>): \u003Cn> frames`). Missing frames\nare a request to the designer — list them in a form that can be pasted into the design ticket. Next:\n\n- plan not yet written → `\u002Ffrontend-ohmyhotel-plugin:fo-plan --app \u003Capp> --screen \u003Cscreen>`\n- plan exists → `fo-plan` again only if the frame set changed what the plan cites; otherwise\n  `\u002Ffrontend-ohmyhotel-plugin:fo-visual …` when the screen is generated\n\nDone when the manifest is written, the tracker is updated, the lock is released and the next command\nis named.\n","# fo-figma — the view's answer key\n\nConventions: `${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Ffo-shared\u002FSKILL.md`.\n\n## Step 0 — Preconditions\n\nConfig with `answerKeys.figma.manifest`; the manifest exists (`fo-init` creates `{ \"fileKey\": null, \"screens\": {} }`).\n`fileKey`: from the manifest, `--file-key`, or ask once and store it in the manifest. The Figma\nMCP must be connected in this session (a tool named `mcp__figma*__get_metadata` is available);\nwithout it, say so and stop — there is no non-MCP discovery path. `FIGMA_TOKEN` in the environment\nenables the PNG export; without it the frames are recorded without files (say so; the token is\nnever asked for in chat and never written to a file). Lock `figma.lock`.\n\n`--page`\u002F`--node`: the Figma page (e.g. `UI_Main`) or node the designer named for this screen; ask\nwhen neither is given and the manifest has no `page` for the screen.\n\n## Step 1 — Run and wait\n\nStart one `Agent` with `subagent_type: frontend-ohmyhotel-plugin:figma-extractor` and its inputs\n(`app`, `screen`, `config`, `planFile` when a plan exists, `manifest`, `fileKey`, `pageOrNode`,\n`outDir: \u003CevidenceDir>\u002F\u003Capp>\u002F\u003Cscreen>\u002Ffigma`, `mcpToolPrefix`). Wait for the completion notification.\n\n## Step 2 — Record, report, next\n\nTracker: `fo-progress-set --app \u003Capp> --screen \u003Cscreen> --set figma --json '{\"recordedAt\":…,\"frames\":n,\"exported\":n,\"missing\":[…]}'`. Release the lock. Report the coverage table (states × viewports: frame \u002F exported \u002F missing), unmatched frames,\nthe naming rule inferred, and the suggested commit (`figma(\u003Cscreen>): \u003Cn> frames`). Missing frames\nare a request to the designer — list them in a form that can be pasted into the design ticket. Next:\n\n- plan not yet written → `\u002Ffrontend-ohmyhotel-plugin:fo-plan --app \u003Capp> --screen \u003Cscreen>`\n- plan exists → `fo-plan` again only if the frame set changed what the plan cites; otherwise\n  `\u002Ffrontend-ohmyhotel-plugin:fo-visual …` when the screen is generated\n\nDone when the manifest is written, the tracker is updated, the lock is released and the next command\nis named.\n",{"name":51,"description":52,"allowed-tools":53,"argument-hint":54,"user-invocable":55},"fo-figma","Record a screen's Figma frames (state × viewport node ids) in docs\u002Ffigma-manifest.json through the Figma MCP and export them to PNG with bin\u002Ffo-figma-export when FIGMA_TOKEN is set, so fo-plan can cite them and fo-visual can compare against them. Use before fo-plan on screens that have a design.","Read, Write, Glob, Grep, Bash, Agent","--app \u003Cname> --screen \u003Cid> [--page \u003Cfigma page>|--node \u003Cid>] [--file-key \u003Ckey>]",true,"main","99f07e592261c66756a2927d0440fc5fef950507",".claude\u002Fskills\u002Fecc\u002Freact-testing","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile","2026-11-08 20:29:14",{"source":8,"skillName":51,"commands":63,"prompt":73,"zipAvailable":55},[64,67,70],{"tool":65,"command":66},"npx","npx skills add sakamoto-family-smile\u002Fagent_monorepo --skill fo-figma",{"tool":68,"command":69},"bunx","bunx skills add sakamoto-family-smile\u002Fagent_monorepo --skill fo-figma",{"tool":71,"command":72},"pnpm","pnpm dlx skills add sakamoto-family-smile\u002Fagent_monorepo --skill fo-figma","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Freact-testing\u002FSKILL.md",[],[76,106,114,134,157,185],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":86,"publishedAt":46},"01M6RW50THEFSKK42YNR8XFZA1","remotion-video-creation","Best practices for Remotion - Video creation in React. 29 domain-specific rules covering 3D, animations, audio, captions, charts, transitions, and more.","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fremotion-video-creation\u002FSKILL.md",[82,83],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":84,"categoryName":85,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",[87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,31],"Video","remotion video","remotion video creation","creation","Remotion","Charts","Captions","Audio","3D","Composition","Animation","best practices","more","animations","domain-specific","domain","three","Rules","Lottie",{"skillNo":107,"name":108,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":111,"publishedAt":46},"01M6VCJ23NPECPSZJKGY691F75","hotcook-recipes","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002Fhotcook-agent\u002Fdata\u002Fskills\u002Fhotcook-recipes\u002FSKILL.md",[],[112,113],"hotcook recipes","recipes",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":128,"publishedAt":46},"01M6VCHHE00X5XHSDRD1KH1BW2","code-helper","Code review and assistance skill","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002Fagent-system-2\u002Fskills\u002Fcode-helper\u002Fskill.md",[120,123],{"categoryNo":121,"categoryName":122,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":124,"categoryName":125,"taxonomyType":126,"taxonomyTypeDesc":127},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[129,130,131,132,133],"code helper","helper","code","code review","review",{"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":146,"publishedAt":46},"01M6VCH3Q31A20H6SQ1H0J7JB2","research-assistant","Web research assistant skill using Brave Search MCP","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002Fagent-system-1\u002Fskills\u002Fresearch-assistant\u002Fskill.md",[140,143],{"categoryNo":141,"categoryName":142,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":144,"categoryName":145,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[147,148,149,150,151,152,153,154,155,156],"research assistant","research","assistant","MCP","web","search","brave search","web research","brave","web research assistant",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":167,"publishedAt":46},"01M6VCGZZGPNVJSCZ1JTMNZAHY","x-api","X\u002FTwitter API integration for posting tweets, threads, reading timelines, search, and analytics. Covers OAuth auth patterns, rate limits, and platform-native content posting. Use when the user wants to interact with X programmatically.","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fx-api\u002FSKILL.md",[163,166],{"categoryNo":164,"categoryName":165,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":124,"categoryName":125,"taxonomyType":126,"taxonomyTypeDesc":127},[168,169,170,30,171,172,31,173,174,175,176,177,178,179,180,181,182,183,152,184],"x api","api","with","limits","rate","threads","reading","native","posting","platform","patterns","api integration","twitter","use","auth","analytics","OAuth",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":192,"publishedAt":46},"01M6VCGVX6DGB1FKTA53QBBCQB","workspace-surface-audit","Audit the active repo, MCP servers, plugins, connectors, env surfaces, and harness setup, then recommend the highest-value ECC-native skills, hooks, agents, and operator workflows. Use when the user wants help setting up Claude Code or understanding what capabilities are actually available in their environment.","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fworkspace-surface-audit\u002FSKILL.md",[191],{"categoryNo":144,"categoryName":145,"taxonomyType":20,"taxonomyTypeDesc":21},[193,194,195,37,150,196,197,131,198,199,200,201,181,202,203,204,205,175,206,30],"workspace surface audit","workspace","audit","workflows","connectors","capabilities","harness","repo","environment","up","harness setup","active","env","value"]