[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C0ZQWAKEWB2HC934DFBPP2":3,"skill-same:01M6C0ZQWAKEWB2HC934DFBPP2":49},{"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":18,"publishedAt":21,"linkOnly":22,"markdownContent":23,"markdownBody":24,"frontMatter":25,"refName":26,"commitSha":27,"skillDirectory":28,"forksCount":29,"repositoryHtmlUrl":30,"repositoryHomepageUrl":31,"ownerHtmlUrl":32,"ownerBlogUrl":33,"ownerDescription":6,"updatedAt":34,"install":35,"resources":48},"01M6C0ZQWAKEWB2HC934DFBPP2","pluot-shader-modules",null,"Use when you need to write or modify a WGSL shader.","keller-mark\u002Fpluot","keller-mark","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F7525285?v=4","01M6C0Z7QY1MB45XYSA751H279","Mark Keller","01M6C0Z7WT9FM6H2ZFHT28C43C",31,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fkeller-mark\u002Fpluot\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpluot-shader-modules\u002FSKILL.md",[],[19,20],"pluot shader modules","write","2026-11-10 10:12:30",false,"---\nname: pluot-shader-modules\ndescription: Use when you need to write or modify a WGSL shader.\n---\n\nIn Pluot, we use a lightweight shader module system (ShaderBuilder) defined in `crates\u002Fpluot_core\u002Fsrc\u002Fshader_modules.rs`.\nPrefer using or extending ShaderBuilder, rather than performing direct string manipulation (e.g., concatenation or replacement).\nUsing ShaderBuilder is cleaner, and facilitates snapshot-based unit testing of the final generated WGSL strings.\n","In Pluot, we use a lightweight shader module system (ShaderBuilder) defined in `crates\u002Fpluot_core\u002Fsrc\u002Fshader_modules.rs`.\nPrefer using or extending ShaderBuilder, rather than performing direct string manipulation (e.g., concatenation or replacement).\nUsing ShaderBuilder is cleaner, and facilitates snapshot-based unit testing of the final generated WGSL strings.\n",{"name":5,"description":7},"main","183ad01c1deac0379e3fa98720cf49c990b2a0d3",".claude\u002Fskills\u002Fpluot-shader-modules",3,"https:\u002F\u002Fgithub.com\u002Fkeller-mark\u002Fpluot","https:\u002F\u002Fpluot.dev","https:\u002F\u002Fgithub.com\u002Fkeller-mark","markk.co","2026-11-04 02:32:42",{"source":8,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add keller-mark\u002Fpluot --skill pluot-shader-modules",{"tool":41,"command":42},"bunx","bunx skills add keller-mark\u002Fpluot --skill pluot-shader-modules",{"tool":44,"command":45},"pnpm","pnpm dlx skills add keller-mark\u002Fpluot --skill pluot-shader-modules","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkeller-mark\u002Fpluot\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpluot-shader-modules\u002FSKILL.md",true,[],[50,63,75,88,100,108],{"skillNo":51,"name":52,"nameZh":6,"description":53,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":54,"categories":55,"keywords":56,"publishedAt":21},"01M6C0ZSB3MV7FRFBAEMNDSKC7","pluot-snappy-troubleshooting","Use when rust build fails due to command did not execute successfully, involving snappy or snappy_src or snappy\u002Fsnappy.cc","https:\u002F\u002Fgithub.com\u002Fkeller-mark\u002Fpluot\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpluot-snappy-troubleshooting\u002FSKILL.md",[],[57,58,59,60,61,62],"pluot snappy troubleshooting","troubleshooting","execute","command","src","rust",{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":21},"01M6C0ZP26G5TJTFNFEK035R6Z","pluot-reference-materials","Use when the user asks you to reference specific code, documentation files, or source repositories of dependencies or related tools.","https:\u002F\u002Fgithub.com\u002Fkeller-mark\u002Fpluot\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpluot-reference-materials\u002FSKILL.md",[],[70,71,72,73,74],"pluot reference materials","code","user","Tools","documentation",{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":21},"01M6C0ZKJ5DXMB57SG53GAPM4M","pluot-memoization","Use when writing layer prepare functions which load data asynchronously or otherwise need to cache or memoize results.","https:\u002F\u002Fgithub.com\u002Fkeller-mark\u002Fpluot\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpluot-memoization\u002FSKILL.md",[],[82,83,84,85,86,87],"pluot memoization","results","data","cache","prepare","writing",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":21},"01M6C0ZJ279C848HRCTA1YZ454","pluot-layer-parameter-principles","Use when adding fields\u002Fproperties\u002Fmembers to layer parameter structs.","https:\u002F\u002Fgithub.com\u002Fkeller-mark\u002Fpluot\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpluot-layer-parameter-principles\u002FSKILL.md",[],[95,96,97,98,99],"layer","principles","pluot layer parameter principles","properties","use",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":21},"01M6C0ZGD3J2WVVE8499GW4Y47","pluot-layer-implementation","Use when implementing layers for Pluot in Rust.","https:\u002F\u002Fgithub.com\u002Fkeller-mark\u002Fpluot\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpluot-layer-implementation\u002FSKILL.md",[],[107,62],"pluot layer implementation",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"publishedAt":21},"01M6C0ZEKV8Y8N8230180FSPVH","pluot-filter-select-highlight","Use when modifying the filtering, selection, or highlighting logic in Pluot.","https:\u002F\u002Fgithub.com\u002Fkeller-mark\u002Fpluot\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpluot-filter-select-highlight\u002FSKILL.md",[],[115,116],"pluot filter select highlight","select"]