@jakkrichm/create-nexus-devflow 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +82 -0
- package/bin/create-nexus-devflow.js +275 -0
- package/lib/update.js +379 -0
- package/package.json +53 -0
- package/template/.agents/skills/00-discover/SKILL.md +170 -0
- package/template/.agents/skills/10-define/SKILL.md +170 -0
- package/template/.agents/skills/20-spec/SKILL.md +156 -0
- package/template/.agents/skills/30-plan/SKILL.md +221 -0
- package/template/.agents/skills/40-implement/SKILL.md +166 -0
- package/template/.agents/skills/50-verify/SKILL.md +188 -0
- package/template/.agents/skills/60-report/SKILL.md +183 -0
- package/template/.agents/skills/70-release/SKILL.md +155 -0
- package/template/.agents/skills/9arm-skills/README.md +51 -0
- package/template/.agents/skills/9arm-skills/debug-mantra/SKILL.md +86 -0
- package/template/.agents/skills/9arm-skills/management-talk/SKILL.md +79 -0
- package/template/.agents/skills/9arm-skills/post-mortem/SKILL.md +71 -0
- package/template/.agents/skills/9arm-skills/scrutinize/SKILL.md +72 -0
- package/template/.agents/skills/agent/SKILL.md +165 -0
- package/template/.agents/skills/api-and-interface-design/SKILL.md +294 -0
- package/template/.agents/skills/app-builder/SKILL.md +75 -0
- package/template/.agents/skills/app-builder/agent-coordination.md +71 -0
- package/template/.agents/skills/app-builder/feature-building.md +53 -0
- package/template/.agents/skills/app-builder/project-detection.md +34 -0
- package/template/.agents/skills/app-builder/scaffolding.md +118 -0
- package/template/.agents/skills/app-builder/tech-stack.md +40 -0
- package/template/.agents/skills/app-builder/templates/SKILL.md +39 -0
- package/template/.agents/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/template/.agents/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/template/.agents/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/template/.agents/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/template/.agents/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/template/.agents/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/template/.agents/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/template/.agents/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/template/.agents/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/template/.agents/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/template/.agents/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/template/.agents/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/template/.agents/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/template/.agents/skills/architecture/SKILL.md +55 -0
- package/template/.agents/skills/architecture/context-discovery.md +43 -0
- package/template/.agents/skills/architecture/examples.md +94 -0
- package/template/.agents/skills/architecture/pattern-selection.md +68 -0
- package/template/.agents/skills/architecture/patterns-reference.md +50 -0
- package/template/.agents/skills/architecture/trade-off-analysis.md +77 -0
- package/template/.agents/skills/bash-linux/SKILL.md +199 -0
- package/template/.agents/skills/behavioral-modes/SKILL.md +242 -0
- package/template/.agents/skills/brainstorm/SKILL.md +168 -0
- package/template/.agents/skills/browser-testing-with-devtools/SKILL.md +302 -0
- package/template/.agents/skills/changelog/SKILL.md +109 -0
- package/template/.agents/skills/check-for-updates/SKILL.md +117 -0
- package/template/.agents/skills/ci-cd-and-automation/SKILL.md +390 -0
- package/template/.agents/skills/code-review-and-quality/SKILL.md +392 -0
- package/template/.agents/skills/code-simplification/SKILL.md +331 -0
- package/template/.agents/skills/codebase-design/DEEPENING.md +24 -0
- package/template/.agents/skills/codebase-design/DESIGN-IT-TWICE.md +28 -0
- package/template/.agents/skills/codebase-design/SKILL.md +58 -0
- package/template/.agents/skills/commit/SKILL.md +63 -0
- package/template/.agents/skills/competitor-analysis/SKILL.md +66 -0
- package/template/.agents/skills/context-engineering/SKILL.md +290 -0
- package/template/.agents/skills/database-design/SKILL.md +52 -0
- package/template/.agents/skills/database-design/database-selection.md +43 -0
- package/template/.agents/skills/database-design/indexing.md +39 -0
- package/template/.agents/skills/database-design/migrations.md +48 -0
- package/template/.agents/skills/database-design/optimization.md +36 -0
- package/template/.agents/skills/database-design/orm-selection.md +30 -0
- package/template/.agents/skills/database-design/schema-design.md +56 -0
- package/template/.agents/skills/database-design/scripts/schema_validator.py +172 -0
- package/template/.agents/skills/debug/SKILL.md +131 -0
- package/template/.agents/skills/debugging-and-error-recovery/SKILL.md +298 -0
- package/template/.agents/skills/deploy/SKILL.md +91 -0
- package/template/.agents/skills/deployment-procedures/SKILL.md +241 -0
- package/template/.agents/skills/deprecation-and-migration/SKILL.md +206 -0
- package/template/.agents/skills/devflow/SKILL.md +89 -0
- package/template/.agents/skills/devflow-concept-intake/SKILL.md +150 -0
- package/template/.agents/skills/devflow-concept-intake/agents/openai.yaml +4 -0
- package/template/.agents/skills/devflow-concept-intake/references/adoption-proposal-template.md +60 -0
- package/template/.agents/skills/devflow-concept-intake/references/concept-report-template.md +47 -0
- package/template/.agents/skills/devflow-concept-intake/references/upstream-tracking-template.md +51 -0
- package/template/.agents/skills/devflow-wiki/SKILL.md +75 -0
- package/template/.agents/skills/diagnosing-bugs/SKILL.md +93 -0
- package/template/.agents/skills/documentation-and-adrs/SKILL.md +278 -0
- package/template/.agents/skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/template/.agents/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/template/.agents/skills/domain-modeling/SKILL.md +74 -0
- package/template/.agents/skills/english-to-thai-translator/SKILL.md +125 -0
- package/template/.agents/skills/followup/SKILL.md +83 -0
- package/template/.agents/skills/frontend-ui-engineering/SKILL.md +326 -0
- package/template/.agents/skills/frontend-ui-engineering/accessibility-checklist.md +159 -0
- package/template/.agents/skills/git-workflow-and-versioning/SKILL.md +300 -0
- package/template/.agents/skills/goal/SKILL.md +148 -0
- package/template/.agents/skills/handoff/SKILL.md +46 -0
- package/template/.agents/skills/help/SKILL.md +253 -0
- package/template/.agents/skills/human-review-decisions/SKILL.md +74 -0
- package/template/.agents/skills/i18n-localization/SKILL.md +154 -0
- package/template/.agents/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/template/.agents/skills/idea-refine/SKILL.md +178 -0
- package/template/.agents/skills/idea-refine/examples.md +238 -0
- package/template/.agents/skills/idea-refine/frameworks.md +99 -0
- package/template/.agents/skills/idea-refine/refinement-criteria.md +113 -0
- package/template/.agents/skills/idea-refine/scripts/idea-refine.sh +15 -0
- package/template/.agents/skills/incremental-implementation/SKILL.md +248 -0
- package/template/.agents/skills/insight/SKILL.md +131 -0
- package/template/.agents/skills/insight-capture/SKILL.md +84 -0
- package/template/.agents/skills/intelligent-routing/SKILL.md +176 -0
- package/template/.agents/skills/issue-triage/SKILL.md +115 -0
- package/template/.agents/skills/lint-and-validate/SKILL.md +45 -0
- package/template/.agents/skills/lint-and-validate/scripts/lint_runner.py +184 -0
- package/template/.agents/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/template/.agents/skills/mcp-builder/SKILL.md +176 -0
- package/template/.agents/skills/md2html/SKILL.md +154 -0
- package/template/.agents/skills/md2html/components.md +505 -0
- package/template/.agents/skills/md2html/template.html +1152 -0
- package/template/.agents/skills/merge/SKILL.md +76 -0
- package/template/.agents/skills/mobile-design/SKILL.md +394 -0
- package/template/.agents/skills/mobile-design/decision-trees.md +516 -0
- package/template/.agents/skills/mobile-design/mobile-backend.md +491 -0
- package/template/.agents/skills/mobile-design/mobile-color-system.md +420 -0
- package/template/.agents/skills/mobile-design/mobile-debugging.md +122 -0
- package/template/.agents/skills/mobile-design/mobile-design-thinking.md +357 -0
- package/template/.agents/skills/mobile-design/mobile-navigation.md +458 -0
- package/template/.agents/skills/mobile-design/mobile-performance.md +767 -0
- package/template/.agents/skills/mobile-design/mobile-testing.md +356 -0
- package/template/.agents/skills/mobile-design/mobile-typography.md +433 -0
- package/template/.agents/skills/mobile-design/platform-android.md +666 -0
- package/template/.agents/skills/mobile-design/platform-ios.md +561 -0
- package/template/.agents/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/template/.agents/skills/mobile-design/touch-psychology.md +537 -0
- package/template/.agents/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +312 -0
- package/template/.agents/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -0
- package/template/.agents/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -0
- package/template/.agents/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -0
- package/template/.agents/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
- package/template/.agents/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -0
- package/template/.agents/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -0
- package/template/.agents/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -0
- package/template/.agents/skills/nextjs-react-expert/SKILL.md +286 -0
- package/template/.agents/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
- package/template/.agents/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
- package/template/.agents/skills/nodejs-best-practices/SKILL.md +333 -0
- package/template/.agents/skills/obsidian-bases/SKILL.md +506 -0
- package/template/.agents/skills/obsidian-bases/references/FUNCTIONS_REFERENCE.md +173 -0
- package/template/.agents/skills/obsidian-cli/SKILL.md +115 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/SKILL.md +73 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/assets/clipping-template.json +51 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/assets/recipe-template.json +48 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/references/analysis-workflow.md +79 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/references/bases-workflow.md +44 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/references/filters.md +51 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/references/json-schema.md +77 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/references/logic.md +67 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/references/variables.md +64 -0
- package/template/.agents/skills/obsidian-markdown/SKILL.md +205 -0
- package/template/.agents/skills/obsidian-markdown/references/CALLOUTS.md +58 -0
- package/template/.agents/skills/obsidian-markdown/references/EMBEDS.md +63 -0
- package/template/.agents/skills/obsidian-markdown/references/PROPERTIES.md +61 -0
- package/template/.agents/skills/package-json-generator/SKILL.md +60 -0
- package/template/.agents/skills/package-json-generator/scripts/generate.js +120 -0
- package/template/.agents/skills/package-json-generator/scripts/run.sh +19 -0
- package/template/.agents/skills/parallel-agents/SKILL.md +144 -0
- package/template/.agents/skills/performance-optimization/SKILL.md +299 -0
- package/template/.agents/skills/performance-optimization/performance-checklist.md +113 -0
- package/template/.agents/skills/planning-and-task-breakdown/SKILL.md +239 -0
- package/template/.agents/skills/powershell-windows/SKILL.md +167 -0
- package/template/.agents/skills/pr/SKILL.md +93 -0
- package/template/.agents/skills/pr-review/SKILL.md +143 -0
- package/template/.agents/skills/pr-review-analysis/SKILL.md +89 -0
- package/template/.agents/skills/prd/SKILL.md +127 -0
- package/template/.agents/skills/preview/SKILL.md +121 -0
- package/template/.agents/skills/preview-local-check/SKILL.md +59 -0
- package/template/.agents/skills/prompt-addons/SKILL.md +99 -0
- package/template/.agents/skills/prototype/SKILL.md +44 -0
- package/template/.agents/skills/prp-dev-fastapi/SKILL.md +114 -0
- package/template/.agents/skills/prp-dev-multiplatform/SKILL.md +36 -0
- package/template/.agents/skills/prp-dev-odoo/SKILL.md +71 -0
- package/template/.agents/skills/prp-dev-php/SKILL.md +63 -0
- package/template/.agents/skills/prp-sa-ba/SKILL.md +52 -0
- package/template/.agents/skills/python-patterns/SKILL.md +441 -0
- package/template/.agents/skills/red-team-tactics/SKILL.md +199 -0
- package/template/.agents/skills/release-git-operations/SKILL.md +97 -0
- package/template/.agents/skills/research/SKILL.md +143 -0
- package/template/.agents/skills/review/SKILL.md +55 -0
- package/template/.agents/skills/review-followup-routing/SKILL.md +98 -0
- package/template/.agents/skills/roadmap-strategy/SKILL.md +97 -0
- package/template/.agents/skills/security-and-hardening/SKILL.md +349 -0
- package/template/.agents/skills/security-and-hardening/security-checklist.md +134 -0
- package/template/.agents/skills/security-review/SKILL.md +166 -0
- package/template/.agents/skills/seo-fundamentals/SKILL.md +129 -0
- package/template/.agents/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/template/.agents/skills/server-management/SKILL.md +161 -0
- package/template/.agents/skills/shipping-and-launch/SKILL.md +311 -0
- package/template/.agents/skills/silent-failure-audit/SKILL.md +73 -0
- package/template/.agents/skills/simplify/SKILL.md +79 -0
- package/template/.agents/skills/skill-development/SKILL.md +86 -0
- package/template/.agents/skills/spec-driven-development/SKILL.md +207 -0
- package/template/.agents/skills/spec-orchestration/SKILL.md +91 -0
- package/template/.agents/skills/specialist-agent-routing/SKILL.md +107 -0
- package/template/.agents/skills/tailwind-patterns/SKILL.md +269 -0
- package/template/.agents/skills/test/SKILL.md +82 -0
- package/template/.agents/skills/test-driven-development/SKILL.md +422 -0
- package/template/.agents/skills/test-driven-development/testing-patterns.md +236 -0
- package/template/.agents/skills/test-execution-and-coverage/SKILL.md +56 -0
- package/template/.agents/skills/type-design/SKILL.md +84 -0
- package/template/.agents/skills/ui-ux-pro-max/SKILL.md +75 -0
- package/template/.agents/skills/using-agent-skills/SKILL.md +171 -0
- package/template/.agents/skills/verification-orchestration/SKILL.md +68 -0
- package/template/.agents/skills/vulnerability-scanner/SKILL.md +276 -0
- package/template/.agents/skills/vulnerability-scanner/checklists.md +121 -0
- package/template/.agents/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/template/.agents/skills/wiki/SKILL.md +149 -0
- package/template/.agents/skills/workflow-documentation-sync/SKILL.md +87 -0
- package/template/.agents/skills/writing-great-skills/SKILL.md +65 -0
- package/template/.claude/skills/00-discover/SKILL.md +170 -0
- package/template/.claude/skills/10-define/SKILL.md +170 -0
- package/template/.claude/skills/20-spec/SKILL.md +156 -0
- package/template/.claude/skills/30-plan/SKILL.md +221 -0
- package/template/.claude/skills/40-implement/SKILL.md +166 -0
- package/template/.claude/skills/50-verify/SKILL.md +188 -0
- package/template/.claude/skills/60-report/SKILL.md +183 -0
- package/template/.claude/skills/70-release/SKILL.md +155 -0
- package/template/.claude/skills/9arm-skills/README.md +51 -0
- package/template/.claude/skills/9arm-skills/debug-mantra/SKILL.md +86 -0
- package/template/.claude/skills/9arm-skills/management-talk/SKILL.md +79 -0
- package/template/.claude/skills/9arm-skills/post-mortem/SKILL.md +71 -0
- package/template/.claude/skills/9arm-skills/scrutinize/SKILL.md +72 -0
- package/template/.claude/skills/agent/SKILL.md +165 -0
- package/template/.claude/skills/api-and-interface-design/SKILL.md +294 -0
- package/template/.claude/skills/app-builder/SKILL.md +75 -0
- package/template/.claude/skills/app-builder/agent-coordination.md +71 -0
- package/template/.claude/skills/app-builder/feature-building.md +53 -0
- package/template/.claude/skills/app-builder/project-detection.md +34 -0
- package/template/.claude/skills/app-builder/scaffolding.md +118 -0
- package/template/.claude/skills/app-builder/tech-stack.md +40 -0
- package/template/.claude/skills/app-builder/templates/SKILL.md +39 -0
- package/template/.claude/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/template/.claude/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/template/.claude/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/template/.claude/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/template/.claude/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/template/.claude/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/template/.claude/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/template/.claude/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/template/.claude/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/template/.claude/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/template/.claude/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/template/.claude/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/template/.claude/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/template/.claude/skills/architecture/SKILL.md +55 -0
- package/template/.claude/skills/architecture/context-discovery.md +43 -0
- package/template/.claude/skills/architecture/examples.md +94 -0
- package/template/.claude/skills/architecture/pattern-selection.md +68 -0
- package/template/.claude/skills/architecture/patterns-reference.md +50 -0
- package/template/.claude/skills/architecture/trade-off-analysis.md +77 -0
- package/template/.claude/skills/bash-linux/SKILL.md +199 -0
- package/template/.claude/skills/behavioral-modes/SKILL.md +242 -0
- package/template/.claude/skills/brainstorm/SKILL.md +168 -0
- package/template/.claude/skills/browser-testing-with-devtools/SKILL.md +302 -0
- package/template/.claude/skills/changelog/SKILL.md +109 -0
- package/template/.claude/skills/check-for-updates/SKILL.md +117 -0
- package/template/.claude/skills/ci-cd-and-automation/SKILL.md +390 -0
- package/template/.claude/skills/code-review-and-quality/SKILL.md +392 -0
- package/template/.claude/skills/code-simplification/SKILL.md +331 -0
- package/template/.claude/skills/codebase-design/DEEPENING.md +24 -0
- package/template/.claude/skills/codebase-design/DESIGN-IT-TWICE.md +28 -0
- package/template/.claude/skills/codebase-design/SKILL.md +58 -0
- package/template/.claude/skills/commit/SKILL.md +63 -0
- package/template/.claude/skills/competitor-analysis/SKILL.md +66 -0
- package/template/.claude/skills/context-engineering/SKILL.md +290 -0
- package/template/.claude/skills/database-design/SKILL.md +52 -0
- package/template/.claude/skills/database-design/database-selection.md +43 -0
- package/template/.claude/skills/database-design/indexing.md +39 -0
- package/template/.claude/skills/database-design/migrations.md +48 -0
- package/template/.claude/skills/database-design/optimization.md +36 -0
- package/template/.claude/skills/database-design/orm-selection.md +30 -0
- package/template/.claude/skills/database-design/schema-design.md +56 -0
- package/template/.claude/skills/database-design/scripts/schema_validator.py +172 -0
- package/template/.claude/skills/debug/SKILL.md +131 -0
- package/template/.claude/skills/debugging-and-error-recovery/SKILL.md +298 -0
- package/template/.claude/skills/deploy/SKILL.md +91 -0
- package/template/.claude/skills/deployment-procedures/SKILL.md +241 -0
- package/template/.claude/skills/deprecation-and-migration/SKILL.md +206 -0
- package/template/.claude/skills/devflow/SKILL.md +89 -0
- package/template/.claude/skills/devflow-concept-intake/SKILL.md +150 -0
- package/template/.claude/skills/devflow-concept-intake/agents/openai.yaml +4 -0
- package/template/.claude/skills/devflow-concept-intake/references/adoption-proposal-template.md +60 -0
- package/template/.claude/skills/devflow-concept-intake/references/concept-report-template.md +47 -0
- package/template/.claude/skills/devflow-concept-intake/references/upstream-tracking-template.md +51 -0
- package/template/.claude/skills/devflow-wiki/SKILL.md +75 -0
- package/template/.claude/skills/diagnosing-bugs/SKILL.md +93 -0
- package/template/.claude/skills/documentation-and-adrs/SKILL.md +278 -0
- package/template/.claude/skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/template/.claude/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/template/.claude/skills/domain-modeling/SKILL.md +74 -0
- package/template/.claude/skills/english-to-thai-translator/SKILL.md +125 -0
- package/template/.claude/skills/followup/SKILL.md +83 -0
- package/template/.claude/skills/frontend-ui-engineering/SKILL.md +326 -0
- package/template/.claude/skills/frontend-ui-engineering/accessibility-checklist.md +159 -0
- package/template/.claude/skills/git-workflow-and-versioning/SKILL.md +300 -0
- package/template/.claude/skills/goal/SKILL.md +148 -0
- package/template/.claude/skills/handoff/SKILL.md +46 -0
- package/template/.claude/skills/help/SKILL.md +253 -0
- package/template/.claude/skills/human-review-decisions/SKILL.md +74 -0
- package/template/.claude/skills/i18n-localization/SKILL.md +154 -0
- package/template/.claude/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/template/.claude/skills/idea-refine/SKILL.md +178 -0
- package/template/.claude/skills/idea-refine/examples.md +238 -0
- package/template/.claude/skills/idea-refine/frameworks.md +99 -0
- package/template/.claude/skills/idea-refine/refinement-criteria.md +113 -0
- package/template/.claude/skills/idea-refine/scripts/idea-refine.sh +15 -0
- package/template/.claude/skills/incremental-implementation/SKILL.md +248 -0
- package/template/.claude/skills/insight/SKILL.md +131 -0
- package/template/.claude/skills/insight-capture/SKILL.md +84 -0
- package/template/.claude/skills/intelligent-routing/SKILL.md +176 -0
- package/template/.claude/skills/issue-triage/SKILL.md +115 -0
- package/template/.claude/skills/lint-and-validate/SKILL.md +45 -0
- package/template/.claude/skills/lint-and-validate/scripts/lint_runner.py +184 -0
- package/template/.claude/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/template/.claude/skills/mcp-builder/SKILL.md +176 -0
- package/template/.claude/skills/md2html/SKILL.md +154 -0
- package/template/.claude/skills/md2html/components.md +505 -0
- package/template/.claude/skills/md2html/template.html +1152 -0
- package/template/.claude/skills/merge/SKILL.md +76 -0
- package/template/.claude/skills/mobile-design/SKILL.md +394 -0
- package/template/.claude/skills/mobile-design/decision-trees.md +516 -0
- package/template/.claude/skills/mobile-design/mobile-backend.md +491 -0
- package/template/.claude/skills/mobile-design/mobile-color-system.md +420 -0
- package/template/.claude/skills/mobile-design/mobile-debugging.md +122 -0
- package/template/.claude/skills/mobile-design/mobile-design-thinking.md +357 -0
- package/template/.claude/skills/mobile-design/mobile-navigation.md +458 -0
- package/template/.claude/skills/mobile-design/mobile-performance.md +767 -0
- package/template/.claude/skills/mobile-design/mobile-testing.md +356 -0
- package/template/.claude/skills/mobile-design/mobile-typography.md +433 -0
- package/template/.claude/skills/mobile-design/platform-android.md +666 -0
- package/template/.claude/skills/mobile-design/platform-ios.md +561 -0
- package/template/.claude/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/template/.claude/skills/mobile-design/touch-psychology.md +537 -0
- package/template/.claude/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +312 -0
- package/template/.claude/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -0
- package/template/.claude/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -0
- package/template/.claude/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -0
- package/template/.claude/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
- package/template/.claude/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -0
- package/template/.claude/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -0
- package/template/.claude/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -0
- package/template/.claude/skills/nextjs-react-expert/SKILL.md +286 -0
- package/template/.claude/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
- package/template/.claude/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
- package/template/.claude/skills/nodejs-best-practices/SKILL.md +333 -0
- package/template/.claude/skills/obsidian-bases/SKILL.md +506 -0
- package/template/.claude/skills/obsidian-bases/references/FUNCTIONS_REFERENCE.md +173 -0
- package/template/.claude/skills/obsidian-cli/SKILL.md +115 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/SKILL.md +73 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/assets/clipping-template.json +51 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/assets/recipe-template.json +48 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/references/analysis-workflow.md +79 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/references/bases-workflow.md +44 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/references/filters.md +51 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/references/json-schema.md +77 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/references/logic.md +67 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/references/variables.md +64 -0
- package/template/.claude/skills/obsidian-markdown/SKILL.md +205 -0
- package/template/.claude/skills/obsidian-markdown/references/CALLOUTS.md +58 -0
- package/template/.claude/skills/obsidian-markdown/references/EMBEDS.md +63 -0
- package/template/.claude/skills/obsidian-markdown/references/PROPERTIES.md +61 -0
- package/template/.claude/skills/package-json-generator/SKILL.md +60 -0
- package/template/.claude/skills/package-json-generator/scripts/generate.js +120 -0
- package/template/.claude/skills/package-json-generator/scripts/run.sh +19 -0
- package/template/.claude/skills/parallel-agents/SKILL.md +144 -0
- package/template/.claude/skills/performance-optimization/SKILL.md +299 -0
- package/template/.claude/skills/performance-optimization/performance-checklist.md +113 -0
- package/template/.claude/skills/planning-and-task-breakdown/SKILL.md +239 -0
- package/template/.claude/skills/powershell-windows/SKILL.md +167 -0
- package/template/.claude/skills/pr/SKILL.md +93 -0
- package/template/.claude/skills/pr-review/SKILL.md +143 -0
- package/template/.claude/skills/pr-review-analysis/SKILL.md +89 -0
- package/template/.claude/skills/prd/SKILL.md +127 -0
- package/template/.claude/skills/preview/SKILL.md +121 -0
- package/template/.claude/skills/preview-local-check/SKILL.md +59 -0
- package/template/.claude/skills/prompt-addons/SKILL.md +99 -0
- package/template/.claude/skills/prototype/SKILL.md +44 -0
- package/template/.claude/skills/prp-dev-fastapi/SKILL.md +114 -0
- package/template/.claude/skills/prp-dev-multiplatform/SKILL.md +36 -0
- package/template/.claude/skills/prp-dev-odoo/SKILL.md +71 -0
- package/template/.claude/skills/prp-dev-php/SKILL.md +63 -0
- package/template/.claude/skills/prp-sa-ba/SKILL.md +52 -0
- package/template/.claude/skills/python-patterns/SKILL.md +441 -0
- package/template/.claude/skills/red-team-tactics/SKILL.md +199 -0
- package/template/.claude/skills/release-git-operations/SKILL.md +97 -0
- package/template/.claude/skills/research/SKILL.md +143 -0
- package/template/.claude/skills/review/SKILL.md +55 -0
- package/template/.claude/skills/review-followup-routing/SKILL.md +98 -0
- package/template/.claude/skills/roadmap-strategy/SKILL.md +97 -0
- package/template/.claude/skills/security-and-hardening/SKILL.md +349 -0
- package/template/.claude/skills/security-and-hardening/security-checklist.md +134 -0
- package/template/.claude/skills/security-review/SKILL.md +166 -0
- package/template/.claude/skills/seo-fundamentals/SKILL.md +129 -0
- package/template/.claude/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/template/.claude/skills/server-management/SKILL.md +161 -0
- package/template/.claude/skills/shipping-and-launch/SKILL.md +311 -0
- package/template/.claude/skills/silent-failure-audit/SKILL.md +73 -0
- package/template/.claude/skills/simplify/SKILL.md +79 -0
- package/template/.claude/skills/skill-development/SKILL.md +86 -0
- package/template/.claude/skills/spec-driven-development/SKILL.md +207 -0
- package/template/.claude/skills/spec-orchestration/SKILL.md +91 -0
- package/template/.claude/skills/specialist-agent-routing/SKILL.md +107 -0
- package/template/.claude/skills/tailwind-patterns/SKILL.md +269 -0
- package/template/.claude/skills/test/SKILL.md +82 -0
- package/template/.claude/skills/test-driven-development/SKILL.md +422 -0
- package/template/.claude/skills/test-driven-development/testing-patterns.md +236 -0
- package/template/.claude/skills/test-execution-and-coverage/SKILL.md +56 -0
- package/template/.claude/skills/type-design/SKILL.md +84 -0
- package/template/.claude/skills/ui-ux-pro-max/SKILL.md +75 -0
- package/template/.claude/skills/using-agent-skills/SKILL.md +171 -0
- package/template/.claude/skills/verification-orchestration/SKILL.md +68 -0
- package/template/.claude/skills/vulnerability-scanner/SKILL.md +276 -0
- package/template/.claude/skills/vulnerability-scanner/checklists.md +121 -0
- package/template/.claude/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/template/.claude/skills/wiki/SKILL.md +149 -0
- package/template/.claude/skills/workflow-documentation-sync/SKILL.md +87 -0
- package/template/.claude/skills/writing-great-skills/SKILL.md +65 -0
- package/template/.nexus/nexus-devflow.json +44 -0
- package/template/AGENTS.md +58 -0
- package/template/CLAUDE.md +5 -0
- package/template/LICENSE +21 -0
- package/template/devflow/context/ai-interaction.md +34 -0
- package/template/devflow/context/coding-standards.md +19 -0
- package/template/devflow/context/current-stage.md +6 -0
- package/template/devflow/context/findings.md +13 -0
- package/template/devflow/context/project-overview.md +20 -0
- package/template/devflow/reference/running-id-contract.md +39 -0
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security-and-hardening
|
|
3
|
+
description: Hardens code against vulnerabilities. Use when handling user input, authentication, data storage, or external integrations. Use when building any feature that accepts untrusted data, manages user sessions, or interacts with third-party services.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Security and Hardening
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Security-first development practices for web applications. Treat every external input as hostile, every secret as sacred, and every authorization check as mandatory. Security isn't a phase — it's a constraint on every line of code that touches user data, authentication, or external systems.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- Building anything that accepts user input
|
|
15
|
+
- Implementing authentication or authorization
|
|
16
|
+
- Storing or transmitting sensitive data
|
|
17
|
+
- Integrating with external APIs or services
|
|
18
|
+
- Adding file uploads, webhooks, or callbacks
|
|
19
|
+
- Handling payment or PII data
|
|
20
|
+
|
|
21
|
+
## The Three-Tier Boundary System
|
|
22
|
+
|
|
23
|
+
### Always Do (No Exceptions)
|
|
24
|
+
|
|
25
|
+
- **Validate all external input** at the system boundary (API routes, form handlers)
|
|
26
|
+
- **Parameterize all database queries** — never concatenate user input into SQL
|
|
27
|
+
- **Encode output** to prevent XSS (use framework auto-escaping, don't bypass it)
|
|
28
|
+
- **Use HTTPS** for all external communication
|
|
29
|
+
- **Hash passwords** with bcrypt/scrypt/argon2 (never store plaintext)
|
|
30
|
+
- **Set security headers** (CSP, HSTS, X-Frame-Options, X-Content-Type-Options)
|
|
31
|
+
- **Use httpOnly, secure, sameSite cookies** for sessions
|
|
32
|
+
- **Run `npm audit`** (or equivalent) before every release
|
|
33
|
+
|
|
34
|
+
### Ask First (Requires Human Approval)
|
|
35
|
+
|
|
36
|
+
- Adding new authentication flows or changing auth logic
|
|
37
|
+
- Storing new categories of sensitive data (PII, payment info)
|
|
38
|
+
- Adding new external service integrations
|
|
39
|
+
- Changing CORS configuration
|
|
40
|
+
- Adding file upload handlers
|
|
41
|
+
- Modifying rate limiting or throttling
|
|
42
|
+
- Granting elevated permissions or roles
|
|
43
|
+
|
|
44
|
+
### Never Do
|
|
45
|
+
|
|
46
|
+
- **Never commit secrets** to version control (API keys, passwords, tokens)
|
|
47
|
+
- **Never log sensitive data** (passwords, tokens, full credit card numbers)
|
|
48
|
+
- **Never trust client-side validation** as a security boundary
|
|
49
|
+
- **Never disable security headers** for convenience
|
|
50
|
+
- **Never use `eval()` or `innerHTML`** with user-provided data
|
|
51
|
+
- **Never store sessions in client-accessible storage** (localStorage for auth tokens)
|
|
52
|
+
- **Never expose stack traces** or internal error details to users
|
|
53
|
+
|
|
54
|
+
## OWASP Top 10 Prevention
|
|
55
|
+
|
|
56
|
+
### 1. Injection (SQL, NoSQL, OS Command)
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
// BAD: SQL injection via string concatenation
|
|
60
|
+
const query = `SELECT * FROM users WHERE id = '${userId}'`;
|
|
61
|
+
|
|
62
|
+
// GOOD: Parameterized query
|
|
63
|
+
const user = await db.query('SELECT * FROM users WHERE id = $1', [userId]);
|
|
64
|
+
|
|
65
|
+
// GOOD: ORM with parameterized input
|
|
66
|
+
const user = await prisma.user.findUnique({ where: { id: userId } });
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 2. Broken Authentication
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
// Password hashing
|
|
73
|
+
import { hash, compare } from 'bcrypt';
|
|
74
|
+
|
|
75
|
+
const SALT_ROUNDS = 12;
|
|
76
|
+
const hashedPassword = await hash(plaintext, SALT_ROUNDS);
|
|
77
|
+
const isValid = await compare(plaintext, hashedPassword);
|
|
78
|
+
|
|
79
|
+
// Session management
|
|
80
|
+
app.use(session({
|
|
81
|
+
secret: process.env.SESSION_SECRET, // From environment, not code
|
|
82
|
+
resave: false,
|
|
83
|
+
saveUninitialized: false,
|
|
84
|
+
cookie: {
|
|
85
|
+
httpOnly: true, // Not accessible via JavaScript
|
|
86
|
+
secure: true, // HTTPS only
|
|
87
|
+
sameSite: 'lax', // CSRF protection
|
|
88
|
+
maxAge: 24 * 60 * 60 * 1000, // 24 hours
|
|
89
|
+
},
|
|
90
|
+
}));
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 3. Cross-Site Scripting (XSS)
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
// BAD: Rendering user input as HTML
|
|
97
|
+
element.innerHTML = userInput;
|
|
98
|
+
|
|
99
|
+
// GOOD: Use framework auto-escaping (React does this by default)
|
|
100
|
+
return <div>{userInput}</div>;
|
|
101
|
+
|
|
102
|
+
// If you MUST render HTML, sanitize first
|
|
103
|
+
import DOMPurify from 'dompurify';
|
|
104
|
+
const clean = DOMPurify.sanitize(userInput);
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 4. Broken Access Control
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
// Always check authorization, not just authentication
|
|
111
|
+
app.patch('/api/tasks/:id', authenticate, async (req, res) => {
|
|
112
|
+
const task = await taskService.findById(req.params.id);
|
|
113
|
+
|
|
114
|
+
// Check that the authenticated user owns this resource
|
|
115
|
+
if (task.ownerId !== req.user.id) {
|
|
116
|
+
return res.status(403).json({
|
|
117
|
+
error: { code: 'FORBIDDEN', message: 'Not authorized to modify this task' }
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Proceed with update
|
|
122
|
+
const updated = await taskService.update(req.params.id, req.body);
|
|
123
|
+
return res.json(updated);
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 5. Security Misconfiguration
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
// Security headers (use helmet for Express)
|
|
131
|
+
import helmet from 'helmet';
|
|
132
|
+
app.use(helmet());
|
|
133
|
+
|
|
134
|
+
// Content Security Policy
|
|
135
|
+
app.use(helmet.contentSecurityPolicy({
|
|
136
|
+
directives: {
|
|
137
|
+
defaultSrc: ["'self'"],
|
|
138
|
+
scriptSrc: ["'self'"],
|
|
139
|
+
styleSrc: ["'self'", "'unsafe-inline'"], // Tighten if possible
|
|
140
|
+
imgSrc: ["'self'", 'data:', 'https:'],
|
|
141
|
+
connectSrc: ["'self'"],
|
|
142
|
+
},
|
|
143
|
+
}));
|
|
144
|
+
|
|
145
|
+
// CORS — restrict to known origins
|
|
146
|
+
app.use(cors({
|
|
147
|
+
origin: process.env.ALLOWED_ORIGINS?.split(',') || 'http://localhost:3000',
|
|
148
|
+
credentials: true,
|
|
149
|
+
}));
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### 6. Sensitive Data Exposure
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
// Never return sensitive fields in API responses
|
|
156
|
+
function sanitizeUser(user: UserRecord): PublicUser {
|
|
157
|
+
const { passwordHash, resetToken, ...publicFields } = user;
|
|
158
|
+
return publicFields;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Use environment variables for secrets
|
|
162
|
+
const API_KEY = process.env.STRIPE_API_KEY;
|
|
163
|
+
if (!API_KEY) throw new Error('STRIPE_API_KEY not configured');
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Input Validation Patterns
|
|
167
|
+
|
|
168
|
+
### Schema Validation at Boundaries
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
import { z } from 'zod';
|
|
172
|
+
|
|
173
|
+
const CreateTaskSchema = z.object({
|
|
174
|
+
title: z.string().min(1).max(200).trim(),
|
|
175
|
+
description: z.string().max(2000).optional(),
|
|
176
|
+
priority: z.enum(['low', 'medium', 'high']).default('medium'),
|
|
177
|
+
dueDate: z.string().datetime().optional(),
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
// Validate at the route handler
|
|
181
|
+
app.post('/api/tasks', async (req, res) => {
|
|
182
|
+
const result = CreateTaskSchema.safeParse(req.body);
|
|
183
|
+
if (!result.success) {
|
|
184
|
+
return res.status(422).json({
|
|
185
|
+
error: {
|
|
186
|
+
code: 'VALIDATION_ERROR',
|
|
187
|
+
message: 'Invalid input',
|
|
188
|
+
details: result.error.flatten(),
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
// result.data is now typed and validated
|
|
193
|
+
const task = await taskService.create(result.data);
|
|
194
|
+
return res.status(201).json(task);
|
|
195
|
+
});
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### File Upload Safety
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
// Restrict file types and sizes
|
|
202
|
+
const ALLOWED_TYPES = ['image/jpeg', 'image/png', 'image/webp'];
|
|
203
|
+
const MAX_SIZE = 5 * 1024 * 1024; // 5MB
|
|
204
|
+
|
|
205
|
+
function validateUpload(file: UploadedFile) {
|
|
206
|
+
if (!ALLOWED_TYPES.includes(file.mimetype)) {
|
|
207
|
+
throw new ValidationError('File type not allowed');
|
|
208
|
+
}
|
|
209
|
+
if (file.size > MAX_SIZE) {
|
|
210
|
+
throw new ValidationError('File too large (max 5MB)');
|
|
211
|
+
}
|
|
212
|
+
// Don't trust the file extension — check magic bytes if critical
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## Triaging npm audit Results
|
|
217
|
+
|
|
218
|
+
Not all audit findings require immediate action. Use this decision tree:
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
npm audit reports a vulnerability
|
|
222
|
+
├── Severity: critical or high
|
|
223
|
+
│ ├── Is the vulnerable code reachable in your app?
|
|
224
|
+
│ │ ├── YES --> Fix immediately (update, patch, or replace the dependency)
|
|
225
|
+
│ │ └── NO (dev-only dep, unused code path) --> Fix soon, but not a blocker
|
|
226
|
+
│ └── Is a fix available?
|
|
227
|
+
│ ├── YES --> Update to the patched version
|
|
228
|
+
│ └── NO --> Check for workarounds, consider replacing the dependency, or add to allowlist with a review date
|
|
229
|
+
├── Severity: moderate
|
|
230
|
+
│ ├── Reachable in production? --> Fix in the next release cycle
|
|
231
|
+
│ └── Dev-only? --> Fix when convenient, track in backlog
|
|
232
|
+
└── Severity: low
|
|
233
|
+
└── Track and fix during regular dependency updates
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**Key questions:**
|
|
237
|
+
- Is the vulnerable function actually called in your code path?
|
|
238
|
+
- Is the dependency a runtime dependency or dev-only?
|
|
239
|
+
- Is the vulnerability exploitable given your deployment context (e.g., a server-side vulnerability in a client-only app)?
|
|
240
|
+
|
|
241
|
+
When you defer a fix, document the reason and set a review date.
|
|
242
|
+
|
|
243
|
+
## Rate Limiting
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
import rateLimit from 'express-rate-limit';
|
|
247
|
+
|
|
248
|
+
// General API rate limit
|
|
249
|
+
app.use('/api/', rateLimit({
|
|
250
|
+
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
251
|
+
max: 100, // 100 requests per window
|
|
252
|
+
standardHeaders: true,
|
|
253
|
+
legacyHeaders: false,
|
|
254
|
+
}));
|
|
255
|
+
|
|
256
|
+
// Stricter limit for auth endpoints
|
|
257
|
+
app.use('/api/auth/', rateLimit({
|
|
258
|
+
windowMs: 15 * 60 * 1000,
|
|
259
|
+
max: 10, // 10 attempts per 15 minutes
|
|
260
|
+
}));
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## Secrets Management
|
|
264
|
+
|
|
265
|
+
```
|
|
266
|
+
.env files:
|
|
267
|
+
├── .env.example → Committed (template with placeholder values)
|
|
268
|
+
├── .env → NOT committed (contains real secrets)
|
|
269
|
+
└── .env.local → NOT committed (local overrides)
|
|
270
|
+
|
|
271
|
+
.gitignore must include:
|
|
272
|
+
.env
|
|
273
|
+
.env.local
|
|
274
|
+
.env.*.local
|
|
275
|
+
*.pem
|
|
276
|
+
*.key
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
**Always check before committing:**
|
|
280
|
+
```bash
|
|
281
|
+
# Check for accidentally staged secrets
|
|
282
|
+
git diff --cached | grep -i "password\|secret\|api_key\|token"
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## Security Review Checklist
|
|
286
|
+
|
|
287
|
+
```markdown
|
|
288
|
+
### Authentication
|
|
289
|
+
- [ ] Passwords hashed with bcrypt/scrypt/argon2 (salt rounds ≥ 12)
|
|
290
|
+
- [ ] Session tokens are httpOnly, secure, sameSite
|
|
291
|
+
- [ ] Login has rate limiting
|
|
292
|
+
- [ ] Password reset tokens expire
|
|
293
|
+
|
|
294
|
+
### Authorization
|
|
295
|
+
- [ ] Every endpoint checks user permissions
|
|
296
|
+
- [ ] Users can only access their own resources
|
|
297
|
+
- [ ] Admin actions require admin role verification
|
|
298
|
+
|
|
299
|
+
### Input
|
|
300
|
+
- [ ] All user input validated at the boundary
|
|
301
|
+
- [ ] SQL queries are parameterized
|
|
302
|
+
- [ ] HTML output is encoded/escaped
|
|
303
|
+
|
|
304
|
+
### Data
|
|
305
|
+
- [ ] No secrets in code or version control
|
|
306
|
+
- [ ] Sensitive fields excluded from API responses
|
|
307
|
+
- [ ] PII encrypted at rest (if applicable)
|
|
308
|
+
|
|
309
|
+
### Infrastructure
|
|
310
|
+
- [ ] Security headers configured (CSP, HSTS, etc.)
|
|
311
|
+
- [ ] CORS restricted to known origins
|
|
312
|
+
- [ ] Dependencies audited for vulnerabilities
|
|
313
|
+
- [ ] Error messages don't expose internals
|
|
314
|
+
```
|
|
315
|
+
## See Also
|
|
316
|
+
|
|
317
|
+
For detailed security checklists and pre-commit verification steps, see `security-checklist.md`.
|
|
318
|
+
|
|
319
|
+
## Common Rationalizations
|
|
320
|
+
|
|
321
|
+
| Rationalization | Reality |
|
|
322
|
+
|---|---|
|
|
323
|
+
| "This is an internal tool, security doesn't matter" | Internal tools get compromised. Attackers target the weakest link. |
|
|
324
|
+
| "We'll add security later" | Security retrofitting is 10x harder than building it in. Add it now. |
|
|
325
|
+
| "No one would try to exploit this" | Automated scanners will find it. Security by obscurity is not security. |
|
|
326
|
+
| "The framework handles security" | Frameworks provide tools, not guarantees. You still need to use them correctly. |
|
|
327
|
+
| "It's just a prototype" | Prototypes become production. Security habits from day one. |
|
|
328
|
+
|
|
329
|
+
## Red Flags
|
|
330
|
+
|
|
331
|
+
- User input passed directly to database queries, shell commands, or HTML rendering
|
|
332
|
+
- Secrets in source code or commit history
|
|
333
|
+
- API endpoints without authentication or authorization checks
|
|
334
|
+
- Missing CORS configuration or wildcard (`*`) origins
|
|
335
|
+
- No rate limiting on authentication endpoints
|
|
336
|
+
- Stack traces or internal errors exposed to users
|
|
337
|
+
- Dependencies with known critical vulnerabilities
|
|
338
|
+
|
|
339
|
+
## Verification
|
|
340
|
+
|
|
341
|
+
After implementing security-relevant code:
|
|
342
|
+
|
|
343
|
+
- [ ] `npm audit` shows no critical or high vulnerabilities
|
|
344
|
+
- [ ] No secrets in source code or git history
|
|
345
|
+
- [ ] All user input validated at system boundaries
|
|
346
|
+
- [ ] Authentication and authorization checked on every protected endpoint
|
|
347
|
+
- [ ] Security headers present in response (check with browser DevTools)
|
|
348
|
+
- [ ] Error responses don't expose internal details
|
|
349
|
+
- [ ] Rate limiting active on auth endpoints
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Security Checklist
|
|
2
|
+
|
|
3
|
+
Quick reference for web application security. Use alongside the `security-and-hardening` skill.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Pre-Commit Checks](#pre-commit-checks)
|
|
8
|
+
- [Authentication](#authentication)
|
|
9
|
+
- [Authorization](#authorization)
|
|
10
|
+
- [Input Validation](#input-validation)
|
|
11
|
+
- [Security Headers](#security-headers)
|
|
12
|
+
- [CORS Configuration](#cors-configuration)
|
|
13
|
+
- [Data Protection](#data-protection)
|
|
14
|
+
- [Dependency Security](#dependency-security)
|
|
15
|
+
- [Error Handling](#error-handling)
|
|
16
|
+
- [OWASP Top 10 Quick Reference](#owasp-top-10-quick-reference)
|
|
17
|
+
|
|
18
|
+
## Pre-Commit Checks
|
|
19
|
+
|
|
20
|
+
- [ ] No secrets in code (`git diff --cached | grep -i "password\|secret\|api_key\|token"`)
|
|
21
|
+
- [ ] `.gitignore` covers: `.env`, `.env.local`, `*.pem`, `*.key`
|
|
22
|
+
- [ ] `.env.example` uses placeholder values (not real secrets)
|
|
23
|
+
|
|
24
|
+
## Authentication
|
|
25
|
+
|
|
26
|
+
- [ ] Passwords hashed with bcrypt (≥12 rounds), scrypt, or argon2
|
|
27
|
+
- [ ] Session cookies: `httpOnly`, `secure`, `sameSite: 'lax'`
|
|
28
|
+
- [ ] Session expiration configured (reasonable max-age)
|
|
29
|
+
- [ ] Rate limiting on login endpoint (≤10 attempts per 15 minutes)
|
|
30
|
+
- [ ] Password reset tokens: time-limited (≤1 hour), single-use
|
|
31
|
+
- [ ] Account lockout after repeated failures (optional, with notification)
|
|
32
|
+
- [ ] MFA supported for sensitive operations (optional but recommended)
|
|
33
|
+
|
|
34
|
+
## Authorization
|
|
35
|
+
|
|
36
|
+
- [ ] Every protected endpoint checks authentication
|
|
37
|
+
- [ ] Every resource access checks ownership/role (prevents IDOR)
|
|
38
|
+
- [ ] Admin endpoints require admin role verification
|
|
39
|
+
- [ ] API keys scoped to minimum necessary permissions
|
|
40
|
+
- [ ] JWT tokens validated (signature, expiration, issuer)
|
|
41
|
+
|
|
42
|
+
## Input Validation
|
|
43
|
+
|
|
44
|
+
- [ ] All user input validated at system boundaries (API routes, form handlers)
|
|
45
|
+
- [ ] Validation uses allowlists (not denylists)
|
|
46
|
+
- [ ] String lengths constrained (min/max)
|
|
47
|
+
- [ ] Numeric ranges validated
|
|
48
|
+
- [ ] Email, URL, and date formats validated with proper libraries
|
|
49
|
+
- [ ] File uploads: type restricted, size limited, content verified
|
|
50
|
+
- [ ] SQL queries parameterized (no string concatenation)
|
|
51
|
+
- [ ] HTML output encoded (use framework auto-escaping)
|
|
52
|
+
- [ ] URLs validated before redirect (prevent open redirect)
|
|
53
|
+
|
|
54
|
+
## Security Headers
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Content-Security-Policy: default-src 'self'; script-src 'self'
|
|
58
|
+
Strict-Transport-Security: max-age=31536000; includeSubDomains
|
|
59
|
+
X-Content-Type-Options: nosniff
|
|
60
|
+
X-Frame-Options: DENY
|
|
61
|
+
X-XSS-Protection: 0 (disabled, rely on CSP)
|
|
62
|
+
Referrer-Policy: strict-origin-when-cross-origin
|
|
63
|
+
Permissions-Policy: camera=(), microphone=(), geolocation=()
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## CORS Configuration
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
// Restrictive (recommended)
|
|
70
|
+
cors({
|
|
71
|
+
origin: ['https://yourdomain.com', 'https://app.yourdomain.com'],
|
|
72
|
+
credentials: true,
|
|
73
|
+
methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
|
|
74
|
+
allowedHeaders: ['Content-Type', 'Authorization'],
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
// NEVER use in production:
|
|
78
|
+
cors({ origin: '*' }) // Allows any origin
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Data Protection
|
|
82
|
+
|
|
83
|
+
- [ ] Sensitive fields excluded from API responses (`passwordHash`, `resetToken`, etc.)
|
|
84
|
+
- [ ] Sensitive data not logged (passwords, tokens, full CC numbers)
|
|
85
|
+
- [ ] PII encrypted at rest (if required by regulation)
|
|
86
|
+
- [ ] HTTPS for all external communication
|
|
87
|
+
- [ ] Database backups encrypted
|
|
88
|
+
|
|
89
|
+
## Dependency Security
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# Audit dependencies
|
|
93
|
+
npm audit
|
|
94
|
+
|
|
95
|
+
# Fix automatically where possible
|
|
96
|
+
npm audit fix
|
|
97
|
+
|
|
98
|
+
# Check for critical vulnerabilities
|
|
99
|
+
npm audit --audit-level=critical
|
|
100
|
+
|
|
101
|
+
# Keep dependencies updated
|
|
102
|
+
npx npm-check-updates
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Error Handling
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
// Production: generic error, no internals
|
|
109
|
+
res.status(500).json({
|
|
110
|
+
error: { code: 'INTERNAL_ERROR', message: 'Something went wrong' }
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
// NEVER in production:
|
|
114
|
+
res.status(500).json({
|
|
115
|
+
error: err.message,
|
|
116
|
+
stack: err.stack, // Exposes internals
|
|
117
|
+
query: err.sql, // Exposes database details
|
|
118
|
+
});
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## OWASP Top 10 Quick Reference
|
|
122
|
+
|
|
123
|
+
| # | Vulnerability | Prevention |
|
|
124
|
+
|---|---|---|
|
|
125
|
+
| 1 | Broken Access Control | Auth checks on every endpoint, ownership verification |
|
|
126
|
+
| 2 | Cryptographic Failures | HTTPS, strong hashing, no secrets in code |
|
|
127
|
+
| 3 | Injection | Parameterized queries, input validation |
|
|
128
|
+
| 4 | Insecure Design | Threat modeling, spec-driven development |
|
|
129
|
+
| 5 | Security Misconfiguration | Security headers, minimal permissions, audit deps |
|
|
130
|
+
| 6 | Vulnerable Components | `npm audit`, keep deps updated, minimal deps |
|
|
131
|
+
| 7 | Auth Failures | Strong passwords, rate limiting, session management |
|
|
132
|
+
| 8 | Data Integrity Failures | Verify updates/dependencies, signed artifacts |
|
|
133
|
+
| 9 | Logging Failures | Log security events, don't log secrets |
|
|
134
|
+
| 10 | SSRF | Validate/allowlist URLs, restrict outbound requests |
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
---name: security-review
|
|
2
|
+
|
|
3
|
+
description: High-severity security code review for folders, projects, files, or diffs with English Markdown output contract.
|
|
4
|
+
argument-hint: "[target folder, project path, file list, or git diff] [--lang=en]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Security Review
|
|
8
|
+
|
|
9
|
+
$ARGUMENTS
|
|
10
|
+
|
|
11
|
+
Perform a focused security-only review of a specified target (directory, project, list of files, or code diff) for **High Severity** and **Critical** security vulnerabilities.
|
|
12
|
+
|
|
13
|
+
This workflow is a companion command in DevFlow 2.0. It creates a standardized stage artifact contract inside the active workspace.
|
|
14
|
+
|
|
15
|
+
## Purpose
|
|
16
|
+
|
|
17
|
+
Use this workflow to check an entire folder, project, or changed files for major security risks. It ensures your codebase does not introduce high-severity flaws before advancing to verification or release.
|
|
18
|
+
|
|
19
|
+
## Behavior
|
|
20
|
+
|
|
21
|
+
When `Security-Review` is triggered:
|
|
22
|
+
|
|
23
|
+
1. **Resolve target and scope**:
|
|
24
|
+
- Determine the target folder, project, list of files, or git diff from the arguments.
|
|
25
|
+
- Scan all source files in the target directory recursively, or evaluate the specific list of files/diff.
|
|
26
|
+
2. **Anchor the run**:
|
|
27
|
+
- Locate the active `running_id` from the workspace.
|
|
28
|
+
- If no active running ID is found, prompt the user or create a temporary run workspace (e.g., `sec-global` under `devflow/runs/sec-global/`).
|
|
29
|
+
3. **Execute security-focused analysis**:
|
|
30
|
+
- Trace trust boundaries and inputs across the target files.
|
|
31
|
+
- Check only for **High Severity** and **Critical** security vulnerabilities (e.g., SQL/Command Injection, hardcoded secrets, authentication bypass, path traversal, RCE, data exposure).
|
|
32
|
+
- Ignore theoretical, style, low-impact, or medium/low severity findings for status blocking, but report them under Suggestions if present.
|
|
33
|
+
4. **Load Template**:
|
|
34
|
+
- Inspect `.agent/resources/schemas/security_review.template.md`.
|
|
35
|
+
- Read the `artifact_language` configuration (framework default: `"th"`).
|
|
36
|
+
- Generate the report in English.
|
|
37
|
+
5. **Write the Artifact**:
|
|
38
|
+
- Write the finalized security report to `devflow/runs/{ID}-{slug}/security-review.md`.
|
|
39
|
+
- Ensure the output strictly follows the template contract structure (Headings 1 to 11).
|
|
40
|
+
|
|
41
|
+
## Output Contract & Formats
|
|
42
|
+
|
|
43
|
+
The generated artifact must follow the English contract shape below.
|
|
44
|
+
|
|
45
|
+
### English Output Template
|
|
46
|
+
|
|
47
|
+
```markdown
|
|
48
|
+
---
|
|
49
|
+
id: "{running_id}-security-review"
|
|
50
|
+
title: "Security Review: {Work Title}"
|
|
51
|
+
doc_type: "companion"
|
|
52
|
+
stage: "security-review"
|
|
53
|
+
created: "{Date}"
|
|
54
|
+
updated: "{Date}"
|
|
55
|
+
owner: "{Owner}"
|
|
56
|
+
status: "draft"
|
|
57
|
+
artifact_language: "th"
|
|
58
|
+
related_run: "{running_id}"
|
|
59
|
+
related_files: []
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
# Security Review: {Work Title}
|
|
63
|
+
|
|
64
|
+
## 1. Objective
|
|
65
|
+
|
|
66
|
+
- Perform a focused security review on the target directory, project, or files to detect High Severity and Critical security vulnerabilities.
|
|
67
|
+
|
|
68
|
+
## 2. Source Inputs
|
|
69
|
+
|
|
70
|
+
- Review Target: {Review Target}
|
|
71
|
+
- Files Evaluated: []
|
|
72
|
+
|
|
73
|
+
## 3. Project Context To Preserve
|
|
74
|
+
|
|
75
|
+
- Global security constraints and authorization invariants.
|
|
76
|
+
- Known exceptions or legacy patterns excluded from security flags.
|
|
77
|
+
|
|
78
|
+
## 4. Stage-Specific Content
|
|
79
|
+
|
|
80
|
+
### 🛡️ Security Review Result
|
|
81
|
+
- **Status:** [pass | fail]
|
|
82
|
+
- **Reason:** [Explain in detail with file and line references if fail, or "No high-severity or Critical security vulnerabilities found" if pass]
|
|
83
|
+
|
|
84
|
+
### 💡 Suggestions for Next Agent Action / Handoff
|
|
85
|
+
[Provide concrete instructions and guidance for the subsequent Agent. If pass, list any medium/low security findings or recommendations for human consideration, directing the next verification/release Agent accordingly. If fail, list step-by-step remediation tasks for the implementer Agent to execute.]
|
|
86
|
+
|
|
87
|
+
### 🔍 Detailed Scope Analysis
|
|
88
|
+
- **Secrets & Configuration:** [Pass | Fail]
|
|
89
|
+
- **Input Validation & Injection:** [Pass | Fail]
|
|
90
|
+
- **Access Control & Auth:** [Pass | Fail]
|
|
91
|
+
- **Data Protection & Cryptography:** [Pass | Fail]
|
|
92
|
+
- **File System & Shell Safety:** [Pass | Fail]
|
|
93
|
+
|
|
94
|
+
## 5. AI Actions Performed
|
|
95
|
+
|
|
96
|
+
- Analyzed target codebase and traced untrusted inputs to critical sinks.
|
|
97
|
+
- Scanned for hardcoded secrets, API keys, and environment leaks.
|
|
98
|
+
|
|
99
|
+
## 6. Human Review Required
|
|
100
|
+
|
|
101
|
+
- Verify findings and evaluate false positives if any.
|
|
102
|
+
- Review medium/low risk suggestions for optional implementation.
|
|
103
|
+
|
|
104
|
+
## 7. Approval Status
|
|
105
|
+
|
|
106
|
+
- Pending
|
|
107
|
+
|
|
108
|
+
## 8. Next Allowed Command
|
|
109
|
+
|
|
110
|
+
- `/40-Implement {running_id}` (if fail, for code remediation)
|
|
111
|
+
- `/50-Verify {running_id}` (if pass, to verify execution correctness)
|
|
112
|
+
|
|
113
|
+
## 9. Nexus Event
|
|
114
|
+
|
|
115
|
+
- `Debug` for deep-dive diagnostics or debugging.
|
|
116
|
+
- `grill-with-docs` to clarify security guidelines.
|
|
117
|
+
|
|
118
|
+
## 10. Change Log
|
|
119
|
+
|
|
120
|
+
- {Date}: Initial English security review report created.
|
|
121
|
+
|
|
122
|
+
## 11. Additional Notes
|
|
123
|
+
|
|
124
|
+
- [Add custom sub-headings below if needed]
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Pass Response Requirements
|
|
128
|
+
|
|
129
|
+
When no High Severity or Critical vulnerability is found, the sections under **Stage-Specific Content** must be formatted as:
|
|
130
|
+
|
|
131
|
+
```markdown
|
|
132
|
+
### 🛡️ Security Review Result
|
|
133
|
+
- **Status:** pass
|
|
134
|
+
- **Reason:** No high-severity or Critical security vulnerabilities found
|
|
135
|
+
|
|
136
|
+
### 💡 Suggestions for Next Agent Action / Handoff
|
|
137
|
+
[List any medium, low security findings or recommendations for human consideration, directing the next verification/release Agent accordingly]
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Fail Response Requirements
|
|
141
|
+
|
|
142
|
+
When a High Severity or Critical vulnerability is found:
|
|
143
|
+
|
|
144
|
+
- Use status `fail`.
|
|
145
|
+
- Explain why the issue is High/Critical Severity with file and line references.
|
|
146
|
+
- In **Suggestions for Next Agent Action / Handoff**, write a clear set of step-by-step remediation tasks for the Coder/Implementer Agent to resolve the vulnerability.
|
|
147
|
+
|
|
148
|
+
## Security Scope & Rules
|
|
149
|
+
|
|
150
|
+
Evaluate high-severity risks including:
|
|
151
|
+
- **Hardcoded secrets**: passwords, API keys, private keys, database strings.
|
|
152
|
+
- **Injections**: SQL, NoSQL, OS Command, Template, or Path traversal.
|
|
153
|
+
- **Unvalidated inputs**: dynamic evaluation (`eval`), shell execution, or raw unescaped HTML rendering.
|
|
154
|
+
- **Insecure configuration**: broken authorization, sensitive exposure in public endpoints/logs.
|
|
155
|
+
|
|
156
|
+
## Relationship To DevFlow 2.0
|
|
157
|
+
|
|
158
|
+
- **Classification**: Companion command
|
|
159
|
+
- **Mainline Status**: Not part of the linear Timeline. Can be run at any stage.
|
|
160
|
+
- **Typical Entry Points**: Any stage, especially before `/50-Verify` or `/70-Release` to verify security health.
|
|
161
|
+
|
|
162
|
+
## Sources
|
|
163
|
+
|
|
164
|
+
- `AGENTS.md`
|
|
165
|
+
- `.agent/resources/schemas/security_review.template.md`
|
|
166
|
+
- `docs/workspace-artifacts.md`
|