[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ERTVVRPKZVWK6M8EXPB5QE":3,"skill-same:01M6ERTVVRPKZVWK6M8EXPB5QE":62},{"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":28,"linkOnly":29,"markdownContent":30,"markdownBody":31,"frontMatter":32,"refName":33,"commitSha":34,"skillDirectory":35,"forksCount":36,"repositoryHtmlUrl":37,"repositoryHomepageUrl":6,"ownerHtmlUrl":38,"ownerBlogUrl":39,"ownerDescription":40,"updatedAt":41,"install":42,"resources":55},"01M6ERTVVRPKZVWK6M8EXPB5QE","write-review-elixir",null,"Review Elixir code. ALWAYS use this skill before or after you added code written in elixir to ensure high code quality. Also use use this when asked to review existing elixir code.","nocksock\u002Fsuperpowers","nocksock","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F22164?v=4","01M6ERQWRTZARGFM7AX8HB89GZ","Nils Riedemann","01M6ERQWXFH5876Z6HEDH9TWYS",1,"MIT","https:\u002F\u002Fgithub.com\u002Fnocksock\u002Fsuperpowers\u002Fblob\u002Fmain\u002Fskills\u002Fwrite-or-review-elixir\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27],"review","elixir","write","write review elixir","code quality","code","quality","use","elixir code","2026-11-10 10:12:30",false,"---\nname: write-review-elixir\ndescription: Review Elixir code. ALWAYS use this skill before or after you added code written in elixir to ensure high code quality. Also use use this when asked to review existing elixir code.\n---\n\nReview Elixir code and make sure it does not violate these anti patterns.\n\n# Elixir Anti-Patterns Reference\n\nQuick reference guide for Elixir anti-patterns with practical do\u002Fdon't examples.\n\n## Quick Reference Checklist\n\n### Code Quality\n- [ ] Avoid redundant comments; use clear names and module attributes\n- [ ] Keep `with` else clauses simple; normalize errors in helpers\n- [ ] Extract pattern\u002Fguard vars in signatures, body vars in body\n- [ ] Never create atoms dynamically from user input\n- [ ] Group related parameters; keep parameter lists short\n- [ ] Use your package namespace, not others'\n- [ ] Use static access (`.`) for required fields, dynamic (`[]`) for optional\n- [ ] Fail fast with pattern matching; avoid defensive nil propagation\n- [ ] Use strict boolean operators (`and`\u002F`or`\u002F`not`) for booleans\n- [ ] Keep structs under 32 fields\n\n### Design\n- [ ] Create separate functions instead of options changing return types\n- [ ] Use atoms for state instead of multiple booleans\n- [ ] Use case\u002Fpattern matching, not try\u002Frescue for control flow\n- [ ] Use structs\u002Fmaps for domain concepts, not primitives\n- [ ] Separate unrelated functionality into distinct functions\n- [ ] Use function parameters, not application config for libraries\n\n### Processes\n- [ ] Use processes for concurrency\u002Fstate, not code organization\n- [ ] Centralize all process interaction in one module\n- [ ] Extract data before sending to processes\n- [ ] Always start processes within supervision trees\n\n### Macros\n- [ ] Use `Macro.expand_literals\u002F2` to reduce compile-time deps\n- [ ] Delegate bulk validation to functions, not expanded code\n- [ ] Only use macros when truly necessary\n- [ ] Prefer explicit `import` over `use`\n- [ ] Use module literals, not dynamic construction\n- [ ] Debug with `mix xref trace`\n\n---\n\nMore concreate DO's and DONT's are available in [.\u002FREFERENCE.md](REFERENCE.md)\nMake sure to read that.\n\n## Resources\n\n- [Official Elixir Anti-Patterns Guide](https:\u002F\u002Fhexdocs.pm\u002Felixir\u002Fcode-anti-patterns.html)\n- [Design Anti-Patterns](https:\u002F\u002Fhexdocs.pm\u002Felixir\u002Fdesign-anti-patterns.html)\n- [Process Anti-Patterns](https:\u002F\u002Fhexdocs.pm\u002Felixir\u002Fprocess-anti-patterns.html)\n- [Macro Anti-Patterns](https:\u002F\u002Fhexdocs.pm\u002Felixir\u002Fmacro-anti-patterns.html)\n\n\n## Additional Instructions\n\nUse `mix xref trace path\u002Fto\u002Ffile.ex` to verify tracking.\nUse `mix credo` to get more quality issues.\n\nFirst Create a list of all the issues you find.\nStore them in PATTERN-VIOLATIONS.md\n\nThen group all issues by complexity and similarity and create a bundled plan to tackle the issues you found. Store the plan in PATTERN-PLAN.md in the root.\n\nSuggest which fixes could be easily done by an LLM like claude code.\nAsk the user whether to fix the issues, if the users aggrees:\n\nGroup Tasks into groups that are related\u002Fdependent of each other and dispatch parallel agents for each group.\n","Review Elixir code and make sure it does not violate these anti patterns.\n\n# Elixir Anti-Patterns Reference\n\nQuick reference guide for Elixir anti-patterns with practical do\u002Fdon't examples.\n\n## Quick Reference Checklist\n\n### Code Quality\n- [ ] Avoid redundant comments; use clear names and module attributes\n- [ ] Keep `with` else clauses simple; normalize errors in helpers\n- [ ] Extract pattern\u002Fguard vars in signatures, body vars in body\n- [ ] Never create atoms dynamically from user input\n- [ ] Group related parameters; keep parameter lists short\n- [ ] Use your package namespace, not others'\n- [ ] Use static access (`.`) for required fields, dynamic (`[]`) for optional\n- [ ] Fail fast with pattern matching; avoid defensive nil propagation\n- [ ] Use strict boolean operators (`and`\u002F`or`\u002F`not`) for booleans\n- [ ] Keep structs under 32 fields\n\n### Design\n- [ ] Create separate functions instead of options changing return types\n- [ ] Use atoms for state instead of multiple booleans\n- [ ] Use case\u002Fpattern matching, not try\u002Frescue for control flow\n- [ ] Use structs\u002Fmaps for domain concepts, not primitives\n- [ ] Separate unrelated functionality into distinct functions\n- [ ] Use function parameters, not application config for libraries\n\n### Processes\n- [ ] Use processes for concurrency\u002Fstate, not code organization\n- [ ] Centralize all process interaction in one module\n- [ ] Extract data before sending to processes\n- [ ] Always start processes within supervision trees\n\n### Macros\n- [ ] Use `Macro.expand_literals\u002F2` to reduce compile-time deps\n- [ ] Delegate bulk validation to functions, not expanded code\n- [ ] Only use macros when truly necessary\n- [ ] Prefer explicit `import` over `use`\n- [ ] Use module literals, not dynamic construction\n- [ ] Debug with `mix xref trace`\n\n---\n\nMore concreate DO's and DONT's are available in [.\u002FREFERENCE.md](REFERENCE.md)\nMake sure to read that.\n\n## Resources\n\n- [Official Elixir Anti-Patterns Guide](https:\u002F\u002Fhexdocs.pm\u002Felixir\u002Fcode-anti-patterns.html)\n- [Design Anti-Patterns](https:\u002F\u002Fhexdocs.pm\u002Felixir\u002Fdesign-anti-patterns.html)\n- [Process Anti-Patterns](https:\u002F\u002Fhexdocs.pm\u002Felixir\u002Fprocess-anti-patterns.html)\n- [Macro Anti-Patterns](https:\u002F\u002Fhexdocs.pm\u002Felixir\u002Fmacro-anti-patterns.html)\n\n\n## Additional Instructions\n\nUse `mix xref trace path\u002Fto\u002Ffile.ex` to verify tracking.\nUse `mix credo` to get more quality issues.\n\nFirst Create a list of all the issues you find.\nStore them in PATTERN-VIOLATIONS.md\n\nThen group all issues by complexity and similarity and create a bundled plan to tackle the issues you found. Store the plan in PATTERN-PLAN.md in the root.\n\nSuggest which fixes could be easily done by an LLM like claude code.\nAsk the user whether to fix the issues, if the users aggrees:\n\nGroup Tasks into groups that are related\u002Fdependent of each other and dispatch parallel agents for each group.\n",{"name":5,"description":7},"main","52d2d5a29297631b5e3ff61fbc8ca3c6505a26e2","skills\u002Fwrite-or-review-elixir",0,"https:\u002F\u002Fgithub.com\u002Fnocksock\u002Fsuperpowers","https:\u002F\u002Fgithub.com\u002Fnocksock","http:\u002F\u002Fbleepbloop.studio\u002F","Hi, I'm Nils. I build interfaces for the web.","2026-03-19 04:55:50",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add nocksock\u002Fsuperpowers --skill write-review-elixir",{"tool":48,"command":49},"bunx","bunx skills add nocksock\u002Fsuperpowers --skill write-review-elixir",{"tool":51,"command":52},"pnpm","pnpm dlx skills add nocksock\u002Fsuperpowers --skill write-review-elixir","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fnocksock\u002Fsuperpowers\u002Fblob\u002Fmain\u002Fskills\u002Fwrite-or-review-elixir\u002FSKILL.md",true,[56],{"path":57,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":60,"sourceHtmlUrl":61},"REFERENCE.md","REFERENCE","参考文档",17406,"https:\u002F\u002Fgithub.com\u002Fnocksock\u002Fsuperpowers\u002Fblob\u002Fmain\u002Fskills\u002Fwrite-or-review-elixir\u002FREFERENCE.md",[63,88,103,119,130,145],{"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":82,"publishedAt":28},"01M6ERV5R58PKM81EH15XEYPMF","writing-skills","Use when creating new skills, editing existing skills, or verifying skills work before deployment","https:\u002F\u002Fgithub.com\u002Fnocksock\u002Fsuperpowers\u002Fblob\u002Fmain\u002Fskills\u002Fwriting-skills\u002FSKILL.md",[69,74,77],{"categoryNo":70,"categoryName":71,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":75,"categoryName":76,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[83,84,26,85,86,87],"writing","writing skills","deployment","work","editing",{"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":96,"publishedAt":28},"01M6ERV2JX5DJV2EHSC6FXHEHN","writing-plans","Use when you have a spec or requirements for a multi-step task, before touching code","https:\u002F\u002Fgithub.com\u002Fnocksock\u002Fsuperpowers\u002Fblob\u002Fmain\u002Fskills\u002Fwriting-plans\u002FSKILL.md",[94,95],{"categoryNo":75,"categoryName":76,"taxonomyType":72,"taxonomyTypeDesc":73},{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},[83,97,98,99,24,26,100,101,102],"writing plans","plans","spec","task","requirements","multi",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":114,"publishedAt":28},"01M6ERTZS70NCVS375DTD8HGKE","writing good code","use this skill whenever you write code. it provides a process for creating good, composable apis.","https:\u002F\u002Fgithub.com\u002Fnocksock\u002Fsuperpowers\u002Fblob\u002Fmain\u002Fskills\u002Fwriting-good-code\u002FSKILL.md",[109,110,113],{"categoryNo":75,"categoryName":76,"taxonomyType":72,"taxonomyTypeDesc":73},{"categoryNo":111,"categoryName":112,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000030","开发工程师",{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},[105,83,115,24,26,116,117,118,21],"good","it","process","composable",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":28},"01M6ERTRAM8PSJ9JTAW5J4ABFD","whats-next","Answers what to do next, what to work on next, where we're at","https:\u002F\u002Fgithub.com\u002Fnocksock\u002Fsuperpowers\u002Fblob\u002Fmain\u002Fskills\u002Fwhats-next\u002FSKILL.md",[],[126,127,128,86,129],"next","whats next","work on","do",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":28},"01M6ERTNG9NT8SQH5FHN91JRTS","verification-before-completion","Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always","https:\u002F\u002Fgithub.com\u002Fnocksock\u002Fsuperpowers\u002Fblob\u002Fmain\u002Fskills\u002Fverification-before-completion\u002FSKILL.md",[],[137,138,139,86,26,140,141,142,143,144],"verification before completion","verification","claim","evidence","commands","complete","output","about",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":151,"publishedAt":28},"01M6ERTJAXFN4Y2ZSKX8CV1DJX","using-superpowers","Use when starting any conversation - establishes how to find and use skills, requiring Skill tool invocation before ANY response including clarifying questions","https:\u002F\u002Fgithub.com\u002Fnocksock\u002Fsuperpowers\u002Fblob\u002Fmain\u002Fskills\u002Fusing-superpowers\u002FSKILL.md",[],[152,153,154,155,156,26,157,158],"superpowers","using superpowers","how","tool","find","conversation","how to"]