[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C0ZGD3J2WVVE8499GW4Y47":3,"skill-same:01M6C0ZGD3J2WVVE8499GW4Y47":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},"01M6C0ZGD3J2WVVE8499GW4Y47","pluot-layer-implementation",null,"Use when implementing layers for Pluot in Rust.","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-layer-implementation\u002FSKILL.md",[],[19,20],"pluot layer implementation","rust","2026-11-10 10:12:30",false,"---\nname: pluot-layer-implementation\ndescription: Use when implementing layers for Pluot in Rust.\n---\n\n- Avoid iterating over data arrays when plotting via the GPU. Upload as textures and perform logic such as filtering, coloring, sizing via WGSL on the GPU. Minimize GPU passes when possible.\n- Avoid casting data arrays that have been loaded via zarr - preserve the original dtype by using NumericData unless you need to do a full pass over the data to transform it in some way. Implementing or using accessors which index into a large array and cast individual elements is a form of casting and therefore such workarounds should also be avoided.\n","- Avoid iterating over data arrays when plotting via the GPU. Upload as textures and perform logic such as filtering, coloring, sizing via WGSL on the GPU. Minimize GPU passes when possible.\n- Avoid casting data arrays that have been loaded via zarr - preserve the original dtype by using NumericData unless you need to do a full pass over the data to transform it in some way. Implementing or using accessors which index into a large array and cast individual elements is a form of casting and therefore such workarounds should also be avoided.\n",{"name":5,"description":7},"main","183ad01c1deac0379e3fa98720cf49c990b2a0d3",".claude\u002Fskills\u002Fpluot-layer-implementation",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-layer-implementation",{"tool":41,"command":42},"bunx","bunx skills add keller-mark\u002Fpluot --skill pluot-layer-implementation",{"tool":44,"command":45},"pnpm","pnpm dlx skills add keller-mark\u002Fpluot --skill pluot-layer-implementation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkeller-mark\u002Fpluot\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpluot-layer-implementation\u002FSKILL.md",true,[],[50,62,71,83,96,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,20],"pluot snappy troubleshooting","troubleshooting","execute","command","src",{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":21},"01M6C0ZQWAKEWB2HC934DFBPP2","pluot-shader-modules","Use when you need to write or modify a WGSL shader.","https:\u002F\u002Fgithub.com\u002Fkeller-mark\u002Fpluot\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpluot-shader-modules\u002FSKILL.md",[],[69,70],"pluot shader modules","write",{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"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",[],[78,79,80,81,82],"pluot reference materials","user","Tools","code","documentation",{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"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",[],[90,91,92,93,94,95],"pluot memoization","results","data","cache","prepare","writing",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"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",[],[103,104,105,106,107],"pluot layer parameter principles","principles","layer","use","properties",{"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"]