[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BV9WDJFSMEABP895JB743X":3,"skill-same:01M6BV9WDJFSMEABP895JB743X":384},{"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":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":63,"commitSha":64,"skillDirectory":65,"forksCount":66,"repositoryHtmlUrl":67,"repositoryHomepageUrl":6,"ownerHtmlUrl":68,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":69,"install":70,"resources":83},"01M6BV9WDJFSMEABP895JB743X","vercel-react-best-practices",null,"React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React\u002FNext.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.","fmal\u002Fdotfiles","fmal","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F927591?v=4","01M6BV7A4TKMSYZXJNR1JDAFJZ","Filip Malinowski","01M6BV7A8X313N9M54WS5GNFMJ",3,"MIT","https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"react","vercel react best practices","vercel","best practices","react best practices","engineering","when","data fetching","triggers","next","patterns","js","refactoring","Next.js","data","Optimization","writing","code","tasks","guidelines","react components","components","performance","2026-11-10 10:12:30",false,"---\nname: \"industrial-pursuit-tender-handover\"\ndescription: \"Use for engineered or project-based deals that run from spec-shaping through tender, bid, contract, and site handover.\"\ntriggers: [\"tender response\", \"spec-shaping\", \"bill of quantities\", \"epc pursuit\", \"bid deadline\", \"site handover\", \"distributor enablement\"]\nversion: \"1\"\n---\n\n# Industrial pursuit tender handover\n\nUse this for engineered or project-based deals. Start from the project or\ntender, the consultants or architects shaping the spec, the bid deadline and\nbond or qualification needs, the distributor or engineering, procurement and\nconstruction (EPC) partners involved, and the\nhandover site and date if known.\n\n## Shape the spec before it freezes\n\nMap which consultants and architects write the requirements, what language\nfavors your solution, and the dated steps to get it specified. Prescription\nwork is dated like any close step.\n\n## Validate the solution with the buyer\n\nConfirm the design meets the spec, prep the bill of quantities (BoQ) with\nquantities the buyer has confirmed, and price only against the validated BoQ.\n\n## Run the stage plan to handover\n\nSurvey, solution, design, tender, bid, contract, handover. Each stage has an\nowner, a date, and an exit test. A stage is done only when its exit test\npasses.\n\n## Program-manage large and EPC pursuits\n\nOne tracker across engineering, supply, distributors, and the buyer, with the\nmost-stuck item first at every check. Distributors get tasks with dates, not\nFYIs. Introduce new products through the channel: train and enable the\ndistributors who will quote and support them, and log who was trained on what\nand when.\n\n## Hand over clean\n\nConfirm install or delivery readiness, open items with owners and dates, and\nthe service contact the site calls first. Nothing is \"done\" with unnamed open\nitems.\n\n## What you hand back\n\nThe spec-shaping plan with dated steps, the validated BoQ, the stage plan\nwith exit tests, the EPC tracker with the stuck item first, the distributor\ntraining log, and a handover sheet with open items.\n\n## Fallbacks\n\nNo spec access means you draft the consultant-discovery questions and work\nfrom the published tender docs. No BoQ inputs means you list the quantities\nneeded and who confirms each.\n\n## Approval gate\n\nNothing goes to the buyer, the consultant, or the EPC and no price or\ndelivery date is promised without your explicit yes.\n","# Industrial pursuit tender handover\n\nUse this for engineered or project-based deals. Start from the project or\ntender, the consultants or architects shaping the spec, the bid deadline and\nbond or qualification needs, the distributor or engineering, procurement and\nconstruction (EPC) partners involved, and the\nhandover site and date if known.\n\n## Shape the spec before it freezes\n\nMap which consultants and architects write the requirements, what language\nfavors your solution, and the dated steps to get it specified. Prescription\nwork is dated like any close step.\n\n## Validate the solution with the buyer\n\nConfirm the design meets the spec, prep the bill of quantities (BoQ) with\nquantities the buyer has confirmed, and price only against the validated BoQ.\n\n## Run the stage plan to handover\n\nSurvey, solution, design, tender, bid, contract, handover. Each stage has an\nowner, a date, and an exit test. A stage is done only when its exit test\npasses.\n\n## Program-manage large and EPC pursuits\n\nOne tracker across engineering, supply, distributors, and the buyer, with the\nmost-stuck item first at every check. Distributors get tasks with dates, not\nFYIs. Introduce new products through the channel: train and enable the\ndistributors who will quote and support them, and log who was trained on what\nand when.\n\n## Hand over clean\n\nConfirm install or delivery readiness, open items with owners and dates, and\nthe service contact the site calls first. Nothing is \"done\" with unnamed open\nitems.\n\n## What you hand back\n\nThe spec-shaping plan with dated steps, the validated BoQ, the stage plan\nwith exit tests, the EPC tracker with the stuck item first, the distributor\ntraining log, and a handover sheet with open items.\n\n## Fallbacks\n\nNo spec access means you draft the consultant-discovery questions and work\nfrom the published tender docs. No BoQ inputs means you list the quantities\nneeded and who confirms each.\n\n## Approval gate\n\nNothing goes to the buyer, the consultant, or the EPC and no price or\ndelivery date is promised without your explicit yes.\n",{"name":52,"version":53,"triggers":54,"description":62},"industrial-pursuit-tender-handover","1",[55,56,57,58,59,60,61],"tender response","spec-shaping","bill of quantities","epc pursuit","bid deadline","site handover","distributor enablement","Use for engineered or project-based deals that run from spec-shaping through tender, bid, contract, and site handover.","main","7ed3b73314d5186120e8d4006febfd7e1c92cf08",".agents\u002Fskills\u002Fvercel-react-best-practices",0,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles","https:\u002F\u002Fgithub.com\u002Ffmal","2026-11-09 04:35:28",{"source":8,"skillName":52,"commands":71,"prompt":81,"zipAvailable":82},[72,75,78],{"tool":73,"command":74},"npx","npx skills add fmal\u002Fdotfiles --skill industrial-pursuit-tender-handover",{"tool":76,"command":77},"bunx","bunx skills add fmal\u002Fdotfiles --skill industrial-pursuit-tender-handover",{"tool":79,"command":80},"pnpm","pnpm dlx skills add fmal\u002Fdotfiles --skill industrial-pursuit-tender-handover","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002FSKILL.md",true,[84,90,94,98,102,106,110,114,118,122,126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222,226,230,233,237,241,245,249,253,257,261,265,269,273,277,281,285,289,293,297,301,305,309,313,317,321,325,329,333,337,341,345,349,353,357,361,365,368,372,376,380],{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"AGENTS.md","REFERENCE","参考文档",106510,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002FAGENTS.md",{"path":91,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":92,"sourceHtmlUrl":93},"README.md",3360,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002FREADME.md",{"path":95,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":96,"sourceHtmlUrl":97},"rules\u002F_sections.md",1554,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002F_sections.md",{"path":99,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":100,"sourceHtmlUrl":101},"rules\u002F_template.md",631,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002F_template.md",{"path":103,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":104,"sourceHtmlUrl":105},"rules\u002Fadvanced-effect-event-deps.md",1802,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fadvanced-effect-event-deps.md",{"path":107,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":108,"sourceHtmlUrl":109},"rules\u002Fadvanced-event-handler-refs.md",1483,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fadvanced-event-handler-refs.md",{"path":111,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":112,"sourceHtmlUrl":113},"rules\u002Fadvanced-init-once.md",958,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fadvanced-init-once.md",{"path":115,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":116,"sourceHtmlUrl":117},"rules\u002Fadvanced-use-latest.md",1072,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fadvanced-use-latest.md",{"path":119,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":120,"sourceHtmlUrl":121},"rules\u002Fasync-api-routes.md",1125,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fasync-api-routes.md",{"path":123,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":124,"sourceHtmlUrl":125},"rules\u002Fasync-cheap-condition-before-await.md",1220,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fasync-cheap-condition-before-await.md",{"path":127,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":128,"sourceHtmlUrl":129},"rules\u002Fasync-defer-await.md",2208,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fasync-defer-await.md",{"path":131,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":132,"sourceHtmlUrl":133},"rules\u002Fasync-dependencies.md",1293,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fasync-dependencies.md",{"path":135,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":136,"sourceHtmlUrl":137},"rules\u002Fasync-parallel.md",654,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fasync-parallel.md",{"path":139,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":140,"sourceHtmlUrl":141},"rules\u002Fasync-suspense-boundaries.md",2510,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fasync-suspense-boundaries.md",{"path":143,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":144,"sourceHtmlUrl":145},"rules\u002Fbundle-analyzable-paths.md",2382,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fbundle-analyzable-paths.md",{"path":147,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":148,"sourceHtmlUrl":149},"rules\u002Fbundle-barrel-imports.md",2795,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fbundle-barrel-imports.md",{"path":151,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":152,"sourceHtmlUrl":153},"rules\u002Fbundle-conditional.md",949,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fbundle-conditional.md",{"path":155,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":156,"sourceHtmlUrl":157},"rules\u002Fbundle-defer-third-party.md",920,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fbundle-defer-third-party.md",{"path":159,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":160,"sourceHtmlUrl":161},"rules\u002Fbundle-dynamic-imports.md",791,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fbundle-dynamic-imports.md",{"path":163,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":164,"sourceHtmlUrl":165},"rules\u002Fbundle-preload.md",1149,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fbundle-preload.md",{"path":167,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":168,"sourceHtmlUrl":169},"rules\u002Fclient-event-listeners.md",1969,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fclient-event-listeners.md",{"path":171,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":172,"sourceHtmlUrl":173},"rules\u002Fclient-localstorage-schema.md",1950,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fclient-localstorage-schema.md",{"path":175,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":176,"sourceHtmlUrl":177},"rules\u002Fclient-passive-event-listeners.md",1644,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fclient-passive-event-listeners.md",{"path":179,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":180,"sourceHtmlUrl":181},"rules\u002Fclient-swr-dedup.md",1159,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fclient-swr-dedup.md",{"path":183,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":184,"sourceHtmlUrl":185},"rules\u002Fjs-batch-dom-css.md",3266,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-batch-dom-css.md",{"path":187,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":188,"sourceHtmlUrl":189},"rules\u002Fjs-cache-function-results.md",1949,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-cache-function-results.md",{"path":191,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":192,"sourceHtmlUrl":193},"rules\u002Fjs-cache-property-access.md",532,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-cache-property-access.md",{"path":195,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":196,"sourceHtmlUrl":197},"rules\u002Fjs-cache-storage.md",1651,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-cache-storage.md",{"path":199,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":200,"sourceHtmlUrl":201},"rules\u002Fjs-combine-iterations.md",753,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-combine-iterations.md",{"path":203,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":204,"sourceHtmlUrl":205},"rules\u002Fjs-early-exit.md",1133,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-early-exit.md",{"path":207,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":208,"sourceHtmlUrl":209},"rules\u002Fjs-flatmap-filter.md",1411,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-flatmap-filter.md",{"path":211,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":212,"sourceHtmlUrl":213},"rules\u002Fjs-hoist-regexp.md",1028,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-hoist-regexp.md",{"path":215,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":216,"sourceHtmlUrl":217},"rules\u002Fjs-index-maps.md",837,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-index-maps.md",{"path":219,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":220,"sourceHtmlUrl":221},"rules\u002Fjs-length-check-first.md",1747,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-length-check-first.md",{"path":223,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":224,"sourceHtmlUrl":225},"rules\u002Fjs-min-max-loop.md",2290,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-min-max-loop.md",{"path":227,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":228,"sourceHtmlUrl":229},"rules\u002Fjs-request-idle-callback.md",2647,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-request-idle-callback.md",{"path":231,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":192,"sourceHtmlUrl":232},"rules\u002Fjs-set-map-lookups.md","https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-set-map-lookups.md",{"path":234,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":235,"sourceHtmlUrl":236},"rules\u002Fjs-tosorted-immutable.md",1782,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-tosorted-immutable.md",{"path":238,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":239,"sourceHtmlUrl":240},"rules\u002Frendering-activity.md",564,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-activity.md",{"path":242,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":243,"sourceHtmlUrl":244},"rules\u002Frendering-animate-svg-wrapper.md",1185,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-animate-svg-wrapper.md",{"path":246,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":247,"sourceHtmlUrl":248},"rules\u002Frendering-conditional-render.md",980,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-conditional-render.md",{"path":250,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":251,"sourceHtmlUrl":252},"rules\u002Frendering-content-visibility.md",815,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-content-visibility.md",{"path":254,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":255,"sourceHtmlUrl":256},"rules\u002Frendering-hoist-jsx.md",1039,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-hoist-jsx.md",{"path":258,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":259,"sourceHtmlUrl":260},"rules\u002Frendering-hydration-no-flicker.md",2308,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-hydration-no-flicker.md",{"path":262,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":263,"sourceHtmlUrl":264},"rules\u002Frendering-hydration-suppress-warning.md",872,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-hydration-suppress-warning.md",{"path":266,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":267,"sourceHtmlUrl":268},"rules\u002Frendering-resource-hints.md",2549,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-resource-hints.md",{"path":270,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":271,"sourceHtmlUrl":272},"rules\u002Frendering-script-defer-async.md",1868,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-script-defer-async.md",{"path":274,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":275,"sourceHtmlUrl":276},"rules\u002Frendering-svg-precision.md",588,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-svg-precision.md",{"path":278,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":279,"sourceHtmlUrl":280},"rules\u002Frendering-usetransition-loading.md",2074,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-usetransition-loading.md",{"path":282,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":283,"sourceHtmlUrl":284},"rules\u002Frerender-defer-reads.md",973,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-defer-reads.md",{"path":286,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":287,"sourceHtmlUrl":288},"rules\u002Frerender-dependencies.md",824,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-dependencies.md",{"path":290,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":291,"sourceHtmlUrl":292},"rules\u002Frerender-derived-state-no-effect.md",1201,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-derived-state-no-effect.md",{"path":294,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":295,"sourceHtmlUrl":296},"rules\u002Frerender-derived-state.md",728,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-derived-state.md",{"path":298,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":299,"sourceHtmlUrl":300},"rules\u002Frerender-functional-setstate.md",2968,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-functional-setstate.md",{"path":302,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":303,"sourceHtmlUrl":304},"rules\u002Frerender-lazy-state-init.md",2016,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-lazy-state-init.md",{"path":306,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":307,"sourceHtmlUrl":308},"rules\u002Frerender-memo-with-default-value.md",1173,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-memo-with-default-value.md",{"path":310,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":311,"sourceHtmlUrl":312},"rules\u002Frerender-memo.md",1148,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-memo.md",{"path":314,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":315,"sourceHtmlUrl":316},"rules\u002Frerender-move-effect-to-event.md",1268,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-move-effect-to-event.md",{"path":318,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":319,"sourceHtmlUrl":320},"rules\u002Frerender-no-inline-components.md",2135,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-no-inline-components.md",{"path":322,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":323,"sourceHtmlUrl":324},"rules\u002Frerender-simple-expression-in-memo.md",1018,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-simple-expression-in-memo.md",{"path":326,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":327,"sourceHtmlUrl":328},"rules\u002Frerender-split-combined-hooks.md",1844,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-split-combined-hooks.md",{"path":330,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":331,"sourceHtmlUrl":332},"rules\u002Frerender-transitions.md",1055,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-transitions.md",{"path":334,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":335,"sourceHtmlUrl":336},"rules\u002Frerender-use-deferred-value.md",1846,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-use-deferred-value.md",{"path":338,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":339,"sourceHtmlUrl":340},"rules\u002Frerender-use-ref-transient-values.md",1742,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-use-ref-transient-values.md",{"path":342,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":343,"sourceHtmlUrl":344},"rules\u002Fserver-after-nonblocking.md",2012,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-after-nonblocking.md",{"path":346,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":347,"sourceHtmlUrl":348},"rules\u002Fserver-auth-actions.md",2649,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-auth-actions.md",{"path":350,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":351,"sourceHtmlUrl":352},"rules\u002Fserver-cache-lru.md",1353,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-cache-lru.md",{"path":354,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":355,"sourceHtmlUrl":356},"rules\u002Fserver-cache-react.md",2228,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-cache-react.md",{"path":358,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":359,"sourceHtmlUrl":360},"rules\u002Fserver-dedup-props.md",2060,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-dedup-props.md",{"path":362,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":363,"sourceHtmlUrl":364},"rules\u002Fserver-hoist-static-io.md",4423,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-hoist-static-io.md",{"path":366,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":96,"sourceHtmlUrl":367},"rules\u002Fserver-parallel-fetching.md","https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-parallel-fetching.md",{"path":369,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":370,"sourceHtmlUrl":371},"rules\u002Fserver-parallel-nested-fetching.md",992,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-parallel-nested-fetching.md",{"path":373,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":374,"sourceHtmlUrl":375},"rules\u002Fserver-serialization.md",996,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-serialization.md",{"path":377,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":378,"sourceHtmlUrl":379},"rules\u002Fuseeffect-alternatives.md",4978,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fuseeffect-alternatives.md",{"path":381,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":382,"sourceHtmlUrl":383},"rules\u002Fuseeffect-anti-patterns.md",6195,"https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fuseeffect-anti-patterns.md",[385,410],{"skillNo":386,"name":387,"nameZh":6,"description":388,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":389,"categories":390,"keywords":392,"publishedAt":47},"01M6BV9SM2AARPG595XFKE7MKR","vercel-composition-patterns","React composition patterns that scale. Use when refactoring components with boolean prop proliferation, building flexible component libraries, or designing reusable APIs. Triggers on tasks involving compound components, render props, context providers, or component architecture. Includes React 19 API changes.","https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002FSKILL.md",[391],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[393,34,26,394,395,396,24,397,398,399,42,400,401,402,403,36,404,405,32,406,407,408,30,409,45],"composition patterns","vercel composition patterns","Composition","react composition","component","architecture","api changes","libraries","component architecture","Providers","api","use","reusable","react 19","render","react composition patterns","boolean",{"skillNo":411,"name":412,"nameZh":6,"description":413,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":414,"categories":415,"keywords":421,"publishedAt":47},"01M6BV8RVBZKAYARM60H8V1EZ3","improve","Survey any codebase as a senior advisor and produce prioritized, self-contained implementation plans for OTHER models\u002Fagents to execute. Strictly read-only on source code — never implements, fixes, or refactors anything itself. Use when asked to audit a codebase, find improvement opportunities (bugs, security, performance, test coverage, tech debt, migrations, DX), suggest features or where to take the project next (roadmap, product direction), or generate handoff plans for another agent to implement.","https:\u002F\u002Fgithub.com\u002Ffmal\u002Fdotfiles\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fimprove\u002FSKILL.md",[416],{"categoryNo":417,"categoryName":418,"taxonomyType":419,"taxonomyTypeDesc":420},"01JBSEEDCAT000000000000031","产品经理","PROFESSION","适用职业",[412,422,423,424,46,425,426,427,41,428,429,430,431,432,433,434,435,436,437,33,438,439,440,441,30,442],"senior","never","security","implement","test","generate","product","shadcn","produce","audit","coverage","survey","only","roadmap","test coverage","advisor","self","project next","project","direction","handoff"]