[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CBA3NHCVYFVEGH495W66P3":3,"skill-same:01M6CBA3NHCVYFVEGH495W66P3":56},{"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":26,"linkOnly":27,"markdownContent":28,"markdownBody":29,"frontMatter":30,"refName":34,"commitSha":35,"skillDirectory":36,"forksCount":37,"repositoryHtmlUrl":38,"repositoryHomepageUrl":39,"ownerHtmlUrl":40,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":41,"install":42,"resources":55},"01M6CBA3NHCVYFVEGH495W66P3","node-express",null,"Node.js + Express best practices for services and APIs","shahboura\u002Fagents-opencode","shahboura","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F210767?v=4","01M6C6WKTBT0NH92BEPQRHQSYM","Shehab El Hadidy","01M6C6WKYXG8AE68MCGBNE5ZFR",2,"MIT","https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fnode-express\u002FSKILL.md",[],[19,20,21,22,23,24,25],"node","node express","development","best practices","services","js","opencode","2026-11-10 10:12:30",false,"---\nname: node-express\ndescription: Node.js + Express best practices for services and APIs\nlicense: MIT\ncompatibility: opencode\nmetadata:\n  author: shahboura\n  version: \"2.0.0\"\n  audience: developers\n  workflow: development\n---\n\n## What I do\n- Enforce layered architecture and async safety for Express applications\n- Apply security middleware and structured logging standards\n- Guide input validation, error handling, and data access patterns\n\n## When to use me\nUse this when building or maintaining Node.js services with Express.\n\n## Key Rules\n- Target LTS Node; enforce `engines` field in package.json\n- Use `npm ci` in CI — never `npm install`\n- Maintain strict layer separation: routes → controllers → services → data access\n- Async\u002Fawait only — no callbacks, no unhandled promise rejections\n- Validate all input at the edge using Joi, Zod, or class-validator; reject early\n- Add global error-handling middleware; return consistent JSON error shapes across all endpoints\n- Enable helmet, CORS with explicit origins, and rate limiting on sensitive endpoints\n- Use structured logging (pino or winston) with log levels and request IDs — never console.log\n- Parameterize all SQL queries — never use string interpolation\n- Set timeouts on all external calls; add retries with exponential backoff where appropriate\n- Centralize configuration — avoid sprinkling `process.env` reads throughout the codebase\n- Close resources and streams in `finally` blocks\n- Use a verify-fix-verify loop: run the validation commands below, fix any failures, and rerun until all checks pass\n\n## Validation Commands\n```bash\nnpm ci\nnpm run lint\nnpm test\nnpm run build\n```\n","## What I do\n- Enforce layered architecture and async safety for Express applications\n- Apply security middleware and structured logging standards\n- Guide input validation, error handling, and data access patterns\n\n## When to use me\nUse this when building or maintaining Node.js services with Express.\n\n## Key Rules\n- Target LTS Node; enforce `engines` field in package.json\n- Use `npm ci` in CI — never `npm install`\n- Maintain strict layer separation: routes → controllers → services → data access\n- Async\u002Fawait only — no callbacks, no unhandled promise rejections\n- Validate all input at the edge using Joi, Zod, or class-validator; reject early\n- Add global error-handling middleware; return consistent JSON error shapes across all endpoints\n- Enable helmet, CORS with explicit origins, and rate limiting on sensitive endpoints\n- Use structured logging (pino or winston) with log levels and request IDs — never console.log\n- Parameterize all SQL queries — never use string interpolation\n- Set timeouts on all external calls; add retries with exponential backoff where appropriate\n- Centralize configuration — avoid sprinkling `process.env` reads throughout the codebase\n- Close resources and streams in `finally` blocks\n- Use a verify-fix-verify loop: run the validation commands below, fix any failures, and rerun until all checks pass\n\n## Validation Commands\n```bash\nnpm ci\nnpm run lint\nnpm test\nnpm run build\n```\n",{"name":5,"license":15,"metadata":31,"description":7,"compatibility":25},{"author":9,"version":32,"audience":33,"workflow":21},"2.0.0","developers","main","9b951b5b2e5d07d427baff330db5deb2a8c67511",".opencode\u002Fskills\u002Fnode-express",0,"https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode","https:\u002F\u002Fagnts.elkodr.com\u002F","https:\u002F\u002Fgithub.com\u002Fshahboura","2026-11-05 13:30:42",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add shahboura\u002Fagents-opencode --skill node-express",{"tool":48,"command":49},"bunx","bunx skills add shahboura\u002Fagents-opencode --skill node-express",{"tool":51,"command":52},"pnpm","pnpm dlx skills add shahboura\u002Fagents-opencode --skill node-express","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fnode-express\u002FSKILL.md",true,[],[57,63,72,77,82,87],{"skillNo":58,"name":59,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":62,"publishedAt":26},"01M6CBBX1C6NV7VY8XK21DV5FW","python","https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fvalidate-agents\u002Fvalid\u002F.opencode\u002Fskills\u002Fpython\u002FSKILL.md",[],[59],{"skillNo":64,"name":65,"nameZh":6,"description":6,"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":26},"01M6CBBVB7W6ABJH8XP3Z8PPMK","docs-validation","https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fvalidate-agents\u002Fvalid\u002F.opencode\u002Fskills\u002Fdocs-validation\u002FSKILL.md",[],[69,70,71],"docs","validation","docs validation",{"skillNo":73,"name":59,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":26},"01M6CBBT2WC781609MH5RN7KM7","https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fvalidate-agents\u002Funknown-skill\u002F.opencode\u002Fskills\u002Fpython\u002FSKILL.md",[],[59],{"skillNo":78,"name":65,"nameZh":6,"description":6,"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":26},"01M6CBBRNY6TDRZ5627GC8436D","https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fvalidate-agents\u002Funknown-skill\u002F.opencode\u002Fskills\u002Fdocs-validation\u002FSKILL.md",[],[69,70,71],{"skillNo":83,"name":59,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":26},"01M6CBBQDS170GBYA1CVW3DC5D","https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fvalidate-agents\u002Finline-skill\u002F.opencode\u002Fskills\u002Fpython\u002FSKILL.md",[],[59],{"skillNo":88,"name":65,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":26},"01M6CBBP222WAW802YHY37F48A","https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fvalidate-agents\u002Finline-skill\u002F.opencode\u002Fskills\u002Fdocs-validation\u002FSKILL.md",[],[69,70,71]]