cfsa-antigravity 1.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.
Files changed (378) hide show
  1. package/bin/cli.mjs +324 -0
  2. package/package.json +34 -0
  3. package/template/.agent/instructions/commands.md +48 -0
  4. package/template/.agent/instructions/patterns.md +61 -0
  5. package/template/.agent/instructions/structure.md +29 -0
  6. package/template/.agent/instructions/tech-stack.md +43 -0
  7. package/template/.agent/instructions/workflow.md +41 -0
  8. package/template/.agent/kit-sync.md +15 -0
  9. package/template/.agent/rules/boundary-not-placeholder.md +146 -0
  10. package/template/.agent/rules/completion-checklist.md +48 -0
  11. package/template/.agent/rules/decision-classification.md +103 -0
  12. package/template/.agent/rules/extensibility.md +47 -0
  13. package/template/.agent/rules/question-vs-command.md +81 -0
  14. package/template/.agent/rules/security-first.md +43 -0
  15. package/template/.agent/rules/specificity-standards.md +54 -0
  16. package/template/.agent/rules/tdd-contract-first.md +57 -0
  17. package/template/.agent/rules/vertical-slices.md +42 -0
  18. package/template/.agent/skill-library/MANIFEST.md +480 -0
  19. package/template/.agent/skill-library/README.md +38 -0
  20. package/template/.agent/skill-library/meta/brand-guidelines/SKILL.md +73 -0
  21. package/template/.agent/skill-library/meta/claude-code/README.md +9 -0
  22. package/template/.agent/skill-library/meta/claude-code/agent-development/SKILL.md +415 -0
  23. package/template/.agent/skill-library/meta/claude-code/hook-development/SKILL.md +712 -0
  24. package/template/.agent/skill-library/meta/claude-code/plugin-structure/SKILL.md +476 -0
  25. package/template/.agent/skill-library/meta/git-advanced/SKILL.md +972 -0
  26. package/template/.agent/skill-library/meta/mcp-builder/SKILL.md +236 -0
  27. package/template/.agent/skill-library/meta/product-marketing-context/SKILL.md +241 -0
  28. package/template/.agent/skill-library/meta/regex-patterns/SKILL.md +751 -0
  29. package/template/.agent/skill-library/meta/tmux-processes/SKILL.md +210 -0
  30. package/template/.agent/skill-library/meta/using-tmux-for-interactive-commands/SKILL.md +178 -0
  31. package/template/.agent/skill-library/stack/3d/threejs-pro/SKILL.md +300 -0
  32. package/template/.agent/skill-library/stack/ai/ai-sdk/SKILL.md +77 -0
  33. package/template/.agent/skill-library/stack/ai/langchain/SKILL.md +530 -0
  34. package/template/.agent/skill-library/stack/ai/ollama/SKILL.md +321 -0
  35. package/template/.agent/skill-library/stack/ai/openai-sdk/SKILL.md +549 -0
  36. package/template/.agent/skill-library/stack/analytics/google-analytics/SKILL.md +153 -0
  37. package/template/.agent/skill-library/stack/api/graphql/SKILL.md +1061 -0
  38. package/template/.agent/skill-library/stack/api/trpc/SKILL.md +576 -0
  39. package/template/.agent/skill-library/stack/auth/authjs/SKILL.md +569 -0
  40. package/template/.agent/skill-library/stack/auth/clerk/SKILL.md +590 -0
  41. package/template/.agent/skill-library/stack/auth/firebase-auth/SKILL.md +734 -0
  42. package/template/.agent/skill-library/stack/cms/payload-cms/SKILL.md +573 -0
  43. package/template/.agent/skill-library/stack/cms/shopify/SKILL.md +1193 -0
  44. package/template/.agent/skill-library/stack/cms/wordpress/SKILL.md +1104 -0
  45. package/template/.agent/skill-library/stack/css/sass-scss/SKILL.md +1121 -0
  46. package/template/.agent/skill-library/stack/css/tailwind-css-patterns/SKILL.md +863 -0
  47. package/template/.agent/skill-library/stack/css/tailwind-design-system/SKILL.md +490 -0
  48. package/template/.agent/skill-library/stack/css/vanilla-css/SKILL.md +1078 -0
  49. package/template/.agent/skill-library/stack/databases/clickhouse/SKILL.md +311 -0
  50. package/template/.agent/skill-library/stack/databases/influxdb/SKILL.md +280 -0
  51. package/template/.agent/skill-library/stack/databases/lancedb/SKILL.md +415 -0
  52. package/template/.agent/skill-library/stack/databases/mongodb/SKILL.md +1169 -0
  53. package/template/.agent/skill-library/stack/databases/neo4j/SKILL.md +839 -0
  54. package/template/.agent/skill-library/stack/databases/pgvector/SKILL.md +241 -0
  55. package/template/.agent/skill-library/stack/databases/pinecone/SKILL.md +212 -0
  56. package/template/.agent/skill-library/stack/databases/postgresql/SKILL.md +658 -0
  57. package/template/.agent/skill-library/stack/databases/qdrant/SKILL.md +312 -0
  58. package/template/.agent/skill-library/stack/databases/redis/SKILL.md +1079 -0
  59. package/template/.agent/skill-library/stack/databases/spacetimedb/SKILL.md +532 -0
  60. package/template/.agent/skill-library/stack/databases/sqlite/SKILL.md +1132 -0
  61. package/template/.agent/skill-library/stack/databases/supabase/SKILL.md +640 -0
  62. package/template/.agent/skill-library/stack/databases/surrealdb-expert/SKILL.md +945 -0
  63. package/template/.agent/skill-library/stack/databases/timescaledb/SKILL.md +745 -0
  64. package/template/.agent/skill-library/stack/databases/weaviate/SKILL.md +218 -0
  65. package/template/.agent/skill-library/stack/devops/github-actions/SKILL.md +554 -0
  66. package/template/.agent/skill-library/stack/devops/kubernetes/SKILL.md +950 -0
  67. package/template/.agent/skill-library/stack/devops/nginx/SKILL.md +841 -0
  68. package/template/.agent/skill-library/stack/devops/terraform/SKILL.md +860 -0
  69. package/template/.agent/skill-library/stack/email/resend/SKILL.md +391 -0
  70. package/template/.agent/skill-library/stack/engines/godot/SKILL.md +488 -0
  71. package/template/.agent/skill-library/stack/extensions/chrome-extension/SKILL.md +375 -0
  72. package/template/.agent/skill-library/stack/extensions/vscode-extension/SKILL.md +453 -0
  73. package/template/.agent/skill-library/stack/frameworks/astro-framework/SKILL.md +162 -0
  74. package/template/.agent/skill-library/stack/frameworks/electron/SKILL.md +1286 -0
  75. package/template/.agent/skill-library/stack/frameworks/fastapi/SKILL.md +650 -0
  76. package/template/.agent/skill-library/stack/frameworks/hono/SKILL.md +90 -0
  77. package/template/.agent/skill-library/stack/frameworks/nestjs/SKILL.md +878 -0
  78. package/template/.agent/skill-library/stack/frameworks/nextjs/SKILL.md +635 -0
  79. package/template/.agent/skill-library/stack/frameworks/nuxt/SKILL.md +564 -0
  80. package/template/.agent/skill-library/stack/frameworks/sveltekit/SKILL.md +614 -0
  81. package/template/.agent/skill-library/stack/frameworks/tauri/SKILL.md +920 -0
  82. package/template/.agent/skill-library/stack/gamedev/godot/SKILL.md +1032 -0
  83. package/template/.agent/skill-library/stack/gamedev/unity/SKILL.md +1175 -0
  84. package/template/.agent/skill-library/stack/hosting/aws/SKILL.md +467 -0
  85. package/template/.agent/skill-library/stack/hosting/cloudflare/SKILL.md +201 -0
  86. package/template/.agent/skill-library/stack/hosting/docker-expert/SKILL.md +409 -0
  87. package/template/.agent/skill-library/stack/hosting/vercel/SKILL.md +484 -0
  88. package/template/.agent/skill-library/stack/languages/bash-scripting/SKILL.md +773 -0
  89. package/template/.agent/skill-library/stack/languages/c-cpp/SKILL.md +712 -0
  90. package/template/.agent/skill-library/stack/languages/gdscript/SKILL.md +789 -0
  91. package/template/.agent/skill-library/stack/languages/go/SKILL.md +664 -0
  92. package/template/.agent/skill-library/stack/languages/java/SKILL.md +778 -0
  93. package/template/.agent/skill-library/stack/languages/kotlin/SKILL.md +665 -0
  94. package/template/.agent/skill-library/stack/languages/python/SKILL.md +678 -0
  95. package/template/.agent/skill-library/stack/languages/rust/SKILL.md +673 -0
  96. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/SKILL.md +141 -0
  97. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/advanced-generics.md +90 -0
  98. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/branded-types.md +57 -0
  99. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/builder-pattern.md +71 -0
  100. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/common-pitfalls.md +135 -0
  101. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/conditional-types.md +27 -0
  102. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/decorators.md +98 -0
  103. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/discriminated-unions.md +62 -0
  104. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/mapped-types.md +53 -0
  105. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/performance-best-practices.md +104 -0
  106. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/template-literal-types.md +49 -0
  107. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/testing-types.md +112 -0
  108. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-guards.md +70 -0
  109. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-inference.md +101 -0
  110. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/utility-types.md +98 -0
  111. package/template/.agent/skill-library/stack/languages/vanilla-javascript/SKILL.md +803 -0
  112. package/template/.agent/skill-library/stack/messaging/kafka/SKILL.md +235 -0
  113. package/template/.agent/skill-library/stack/mobile/expo-react-native/SKILL.md +665 -0
  114. package/template/.agent/skill-library/stack/mobile/flutter/SKILL.md +316 -0
  115. package/template/.agent/skill-library/stack/mobile/react-native/SKILL.md +337 -0
  116. package/template/.agent/skill-library/stack/monitoring/posthog/SKILL.md +396 -0
  117. package/template/.agent/skill-library/stack/monitoring/sentry/SKILL.md +509 -0
  118. package/template/.agent/skill-library/stack/observability/datadog/SKILL.md +179 -0
  119. package/template/.agent/skill-library/stack/observability/distributed-tracing/SKILL.md +140 -0
  120. package/template/.agent/skill-library/stack/observability/logging-best-practices/SKILL.md +168 -0
  121. package/template/.agent/skill-library/stack/observability/opentelemetry/SKILL.md +164 -0
  122. package/template/.agent/skill-library/stack/observability/prometheus-grafana/SKILL.md +246 -0
  123. package/template/.agent/skill-library/stack/observability/python-observability/SKILL.md +158 -0
  124. package/template/.agent/skill-library/stack/orm/drizzle-orm/SKILL.md +613 -0
  125. package/template/.agent/skill-library/stack/orm/prisma/SKILL.md +744 -0
  126. package/template/.agent/skill-library/stack/payments/lemonsqueezy/SKILL.md +393 -0
  127. package/template/.agent/skill-library/stack/payments/stripe-integration/SKILL.md +457 -0
  128. package/template/.agent/skill-library/stack/queue/bullmq/SKILL.md +385 -0
  129. package/template/.agent/skill-library/stack/queue/inngest/SKILL.md +438 -0
  130. package/template/.agent/skill-library/stack/realtime/socketio/SKILL.md +595 -0
  131. package/template/.agent/skill-library/stack/search/elasticsearch/SKILL.md +248 -0
  132. package/template/.agent/skill-library/stack/search/meilisearch/SKILL.md +385 -0
  133. package/template/.agent/skill-library/stack/security/crypto-patterns/SKILL.md +437 -0
  134. package/template/.agent/skill-library/stack/security/csp-cors-headers/SKILL.md +588 -0
  135. package/template/.agent/skill-library/stack/security/dependency-auditing/SKILL.md +560 -0
  136. package/template/.agent/skill-library/stack/security/input-sanitization/SKILL.md +430 -0
  137. package/template/.agent/skill-library/stack/security/owasp-web-security/SKILL.md +421 -0
  138. package/template/.agent/skill-library/stack/state/tanstack-query/SKILL.md +637 -0
  139. package/template/.agent/skill-library/stack/state/zustand/SKILL.md +483 -0
  140. package/template/.agent/skill-library/stack/storage/aws-s3/SKILL.md +415 -0
  141. package/template/.agent/skill-library/stack/testing/playwright/SKILL.md +641 -0
  142. package/template/.agent/skill-library/stack/testing/storybook/SKILL.md +923 -0
  143. package/template/.agent/skill-library/stack/testing/testing-library/SKILL.md +872 -0
  144. package/template/.agent/skill-library/stack/testing/vitest/SKILL.md +714 -0
  145. package/template/.agent/skill-library/stack/ui/react-best-practices/SKILL.md +877 -0
  146. package/template/.agent/skill-library/stack/ui/react-composition-patterns/SKILL.md +1107 -0
  147. package/template/.agent/skill-library/stack/ui/react-flow/SKILL.md +425 -0
  148. package/template/.agent/skill-library/stack/ui/shadcn-ui/SKILL.md +703 -0
  149. package/template/.agent/skill-library/surface/api/api-caching/SKILL.md +458 -0
  150. package/template/.agent/skill-library/surface/api/api-documentation-openapi/SKILL.md +697 -0
  151. package/template/.agent/skill-library/surface/api/api-error-handling/SKILL.md +478 -0
  152. package/template/.agent/skill-library/surface/api/api-security-checklist/SKILL.md +147 -0
  153. package/template/.agent/skill-library/surface/api/api-versioning/SKILL.md +420 -0
  154. package/template/.agent/skill-library/surface/api/email-best-practices/SKILL.md +59 -0
  155. package/template/.agent/skill-library/surface/api/rate-limiting-abuse-protection/SKILL.md +147 -0
  156. package/template/.agent/skill-library/surface/api/rest-api-design/SKILL.md +478 -0
  157. package/template/.agent/skill-library/surface/api/webhook-design/SKILL.md +752 -0
  158. package/template/.agent/skill-library/surface/cli/cli-configuration-management/SKILL.md +445 -0
  159. package/template/.agent/skill-library/surface/cli/cli-error-diagnostics/SKILL.md +515 -0
  160. package/template/.agent/skill-library/surface/cli/cli-shell-integration/SKILL.md +479 -0
  161. package/template/.agent/skill-library/surface/cli/cli-ux-design/SKILL.md +477 -0
  162. package/template/.agent/skill-library/surface/desktop/desktop-app-distribution/SKILL.md +416 -0
  163. package/template/.agent/skill-library/surface/desktop/desktop-security-sandboxing/SKILL.md +407 -0
  164. package/template/.agent/skill-library/surface/desktop/desktop-ux-conventions/SKILL.md +361 -0
  165. package/template/.agent/skill-library/surface/desktop/native-os-integration/SKILL.md +563 -0
  166. package/template/.agent/skill-library/surface/extension/browser-extension-patterns/SKILL.md +482 -0
  167. package/template/.agent/skill-library/surface/extension/plugin-architecture-design/SKILL.md +632 -0
  168. package/template/.agent/skill-library/surface/extension/vscode-extension-development/SKILL.md +728 -0
  169. package/template/.agent/skill-library/surface/mobile/app-store-submission/SKILL.md +304 -0
  170. package/template/.agent/skill-library/surface/mobile/mobile-offline-sync/SKILL.md +443 -0
  171. package/template/.agent/skill-library/surface/mobile/mobile-responsive-patterns/SKILL.md +432 -0
  172. package/template/.agent/skill-library/surface/mobile/push-notifications/SKILL.md +495 -0
  173. package/template/.agent/skill-library/surface/web/accessibility-compliance/SKILL.md +827 -0
  174. package/template/.agent/skill-library/surface/web/ai-seo/SKILL.md +398 -0
  175. package/template/.agent/skill-library/surface/web/ai-seo/references/content-patterns.md +285 -0
  176. package/template/.agent/skill-library/surface/web/ai-seo/references/platform-ranking-factors.md +152 -0
  177. package/template/.agent/skill-library/surface/web/analytics-tracking/SKILL.md +309 -0
  178. package/template/.agent/skill-library/surface/web/analytics-tracking/references/event-library.md +260 -0
  179. package/template/.agent/skill-library/surface/web/analytics-tracking/references/ga4-implementation.md +300 -0
  180. package/template/.agent/skill-library/surface/web/analytics-tracking/references/gtm-implementation.md +390 -0
  181. package/template/.agent/skill-library/surface/web/authentication-ui-flows/SKILL.md +530 -0
  182. package/template/.agent/skill-library/surface/web/dark-mode-theming/SKILL.md +516 -0
  183. package/template/.agent/skill-library/surface/web/design-reference-data/SKILL.md +105 -0
  184. package/template/.agent/skill-library/surface/web/design-reference-data/data/charts.csv +26 -0
  185. package/template/.agent/skill-library/surface/web/design-reference-data/data/colors.csv +97 -0
  186. package/template/.agent/skill-library/surface/web/design-reference-data/data/landing.csv +31 -0
  187. package/template/.agent/skill-library/surface/web/design-reference-data/data/styles.csv +59 -0
  188. package/template/.agent/skill-library/surface/web/design-reference-data/data/typography.csv +58 -0
  189. package/template/.agent/skill-library/surface/web/design-reference-data/data/ux-guidelines.csv +100 -0
  190. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/core.py +258 -0
  191. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/design_system.py +1067 -0
  192. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/search.py +106 -0
  193. package/template/.agent/skill-library/surface/web/form-handling-validation/SKILL.md +675 -0
  194. package/template/.agent/skill-library/surface/web/frontend-design/SKILL.md +1393 -0
  195. package/template/.agent/skill-library/surface/web/frontend-design/templates/cppn-hero.tsx +299 -0
  196. package/template/.agent/skill-library/surface/web/frontend-design/templates/wave-hero.tsx +875 -0
  197. package/template/.agent/skill-library/surface/web/frontend-verification/SKILL.md +111 -0
  198. package/template/.agent/skill-library/surface/web/frontend-verification/scripts/ux_audit.py +739 -0
  199. package/template/.agent/skill-library/surface/web/i18n-localization/SKILL.md +154 -0
  200. package/template/.agent/skill-library/surface/web/offline-first-pwa/SKILL.md +657 -0
  201. package/template/.agent/skill-library/surface/web/page-cro/SKILL.md +182 -0
  202. package/template/.agent/skill-library/surface/web/page-cro/references/experiments.md +248 -0
  203. package/template/.agent/skill-library/surface/web/programmatic-seo/SKILL.md +238 -0
  204. package/template/.agent/skill-library/surface/web/programmatic-seo/references/playbooks.md +308 -0
  205. package/template/.agent/skill-library/surface/web/schema-markup/SKILL.md +179 -0
  206. package/template/.agent/skill-library/surface/web/schema-markup/references/schema-examples.md +398 -0
  207. package/template/.agent/skill-library/surface/web/seo-audit/SKILL.md +394 -0
  208. package/template/.agent/skill-library/surface/web/seo-audit/references/ai-writing-detection.md +200 -0
  209. package/template/.agent/skill-library/surface/web/web-performance-optimization/SKILL.md +646 -0
  210. package/template/.agent/skill-library/surface/web/web-scraping/SKILL.md +58 -0
  211. package/template/.agent/skills/accessibility/SKILL.md +522 -0
  212. package/template/.agent/skills/accessibility/references/WCAG.md +162 -0
  213. package/template/.agent/skills/adversarial-review/SKILL.md +90 -0
  214. package/template/.agent/skills/antigravity-workflows/SKILL.md +81 -0
  215. package/template/.agent/skills/antigravity-workflows/resources/implementation-playbook.md +36 -0
  216. package/template/.agent/skills/api-design-principles/SKILL.md +37 -0
  217. package/template/.agent/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  218. package/template/.agent/skills/api-design-principles/assets/rest-api-template.py +182 -0
  219. package/template/.agent/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  220. package/template/.agent/skills/api-design-principles/references/rest-best-practices.md +408 -0
  221. package/template/.agent/skills/api-design-principles/resources/implementation-playbook.md +513 -0
  222. package/template/.agent/skills/api-versioning/SKILL.md +420 -0
  223. package/template/.agent/skills/architecture-mapping/SKILL.md +219 -0
  224. package/template/.agent/skills/bootstrap-agents/SKILL.md +259 -0
  225. package/template/.agent/skills/brainstorming/SKILL.md +236 -0
  226. package/template/.agent/skills/brand-guidelines/SKILL.md +44 -0
  227. package/template/.agent/skills/clean-code/SKILL.md +94 -0
  228. package/template/.agent/skills/code-review-pro/SKILL.md +152 -0
  229. package/template/.agent/skills/concise-planning/SKILL.md +68 -0
  230. package/template/.agent/skills/cross-layer-consistency/SKILL.md +117 -0
  231. package/template/.agent/skills/database-schema-design/SKILL.md +429 -0
  232. package/template/.agent/skills/deployment-procedures/SKILL.md +241 -0
  233. package/template/.agent/skills/design-anti-cliche/SKILL.md +159 -0
  234. package/template/.agent/skills/design-direction/SKILL.md +45 -0
  235. package/template/.agent/skills/error-handling-patterns/SKILL.md +721 -0
  236. package/template/.agent/skills/find-skills/SKILL.md +145 -0
  237. package/template/.agent/skills/git-advanced/SKILL.md +972 -0
  238. package/template/.agent/skills/git-workflow/SKILL.md +420 -0
  239. package/template/.agent/skills/idea-extraction/SKILL.md +271 -0
  240. package/template/.agent/skills/logging-best-practices/SKILL.md +851 -0
  241. package/template/.agent/skills/migration-management/SKILL.md +384 -0
  242. package/template/.agent/skills/minimalist-surgical-development/SKILL.md +69 -0
  243. package/template/.agent/skills/parallel-agents/SKILL.md +165 -0
  244. package/template/.agent/skills/parallel-debugging/SKILL.md +135 -0
  245. package/template/.agent/skills/parallel-feature-development/SKILL.md +166 -0
  246. package/template/.agent/skills/performance-budgeting/SKILL.md +144 -0
  247. package/template/.agent/skills/pipeline-rubrics/SKILL.md +51 -0
  248. package/template/.agent/skills/pipeline-rubrics/references/architecture-rubric.md +19 -0
  249. package/template/.agent/skills/pipeline-rubrics/references/be-rubric.md +21 -0
  250. package/template/.agent/skills/pipeline-rubrics/references/fe-rubric.md +20 -0
  251. package/template/.agent/skills/pipeline-rubrics/references/ia-rubric.md +19 -0
  252. package/template/.agent/skills/pipeline-rubrics/references/scoring.md +28 -0
  253. package/template/.agent/skills/pipeline-rubrics/references/vision-rubric.md +11 -0
  254. package/template/.agent/skills/prd-templates/SKILL.md +88 -0
  255. package/template/.agent/skills/prd-templates/references/architecture-design-template.md +88 -0
  256. package/template/.agent/skills/prd-templates/references/be-spec-template.md +101 -0
  257. package/template/.agent/skills/prd-templates/references/data-placement-template.md +74 -0
  258. package/template/.agent/skills/prd-templates/references/decomposition-templates.md +211 -0
  259. package/template/.agent/skills/prd-templates/references/design-system-decisions.md +198 -0
  260. package/template/.agent/skills/prd-templates/references/engineering-standards-template.md +124 -0
  261. package/template/.agent/skills/prd-templates/references/fe-classification-procedures.md +47 -0
  262. package/template/.agent/skills/prd-templates/references/fe-spec-template.md +84 -0
  263. package/template/.agent/skills/prd-templates/references/infrastructure-report-template.md +71 -0
  264. package/template/.agent/skills/prd-templates/references/operational-templates.md +116 -0
  265. package/template/.agent/skills/prd-templates/references/placeholder-guard-template.md +21 -0
  266. package/template/.agent/skills/prd-templates/references/surface-model.md +61 -0
  267. package/template/.agent/skills/prd-templates/references/vision-template.md +66 -0
  268. package/template/.agent/skills/prompt-engineer/README.md +659 -0
  269. package/template/.agent/skills/prompt-engineer/SKILL.md +249 -0
  270. package/template/.agent/skills/regex-patterns/SKILL.md +751 -0
  271. package/template/.agent/skills/resolve-ambiguity/SKILL.md +278 -0
  272. package/template/.agent/skills/rest-api-design/SKILL.md +478 -0
  273. package/template/.agent/skills/security-scanning-security-hardening/SKILL.md +231 -0
  274. package/template/.agent/skills/session-continuity/SKILL.md +730 -0
  275. package/template/.agent/skills/session-continuity/protocols/01-session-resumption.md +38 -0
  276. package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +85 -0
  277. package/template/.agent/skills/session-continuity/protocols/03-progress-update.md +70 -0
  278. package/template/.agent/skills/session-continuity/protocols/04-pattern-extraction.md +60 -0
  279. package/template/.agent/skills/session-continuity/protocols/05-session-close.md +37 -0
  280. package/template/.agent/skills/session-continuity/protocols/06-decision-analysis.md +84 -0
  281. package/template/.agent/skills/session-continuity/protocols/07-spec-pipeline-generation.md +48 -0
  282. package/template/.agent/skills/session-continuity/protocols/08-spec-pipeline-update.md +43 -0
  283. package/template/.agent/skills/session-continuity/protocols/09-parallel-claim.md +122 -0
  284. package/template/.agent/skills/session-continuity/protocols/10-placeholder-verification-gate.md +104 -0
  285. package/template/.agent/skills/session-continuity/protocols/ambiguity-gates.md +48 -0
  286. package/template/.agent/skills/skill-creator/LICENSE.txt +202 -0
  287. package/template/.agent/skills/skill-creator/README.md +270 -0
  288. package/template/.agent/skills/skill-creator/SKILL.md +590 -0
  289. package/template/.agent/skills/skill-creator/references/output-patterns.md +82 -0
  290. package/template/.agent/skills/skill-creator/references/workflows.md +28 -0
  291. package/template/.agent/skills/skill-creator/scripts/init_skill.py +303 -0
  292. package/template/.agent/skills/skill-creator/scripts/package_skill.py +110 -0
  293. package/template/.agent/skills/skill-creator/scripts/quick_validate.py +95 -0
  294. package/template/.agent/skills/spec-writing/SKILL.md +110 -0
  295. package/template/.agent/skills/systematic-debugging/CREATION-LOG.md +119 -0
  296. package/template/.agent/skills/systematic-debugging/SKILL.md +297 -0
  297. package/template/.agent/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  298. package/template/.agent/skills/systematic-debugging/condition-based-waiting.md +115 -0
  299. package/template/.agent/skills/systematic-debugging/defense-in-depth.md +122 -0
  300. package/template/.agent/skills/systematic-debugging/find-polluter.sh +63 -0
  301. package/template/.agent/skills/systematic-debugging/root-cause-tracing.md +169 -0
  302. package/template/.agent/skills/systematic-debugging/test-academic.md +14 -0
  303. package/template/.agent/skills/systematic-debugging/test-pressure-1.md +58 -0
  304. package/template/.agent/skills/systematic-debugging/test-pressure-2.md +68 -0
  305. package/template/.agent/skills/systematic-debugging/test-pressure-3.md +69 -0
  306. package/template/.agent/skills/tdd-workflow/SKILL.md +409 -0
  307. package/template/.agent/skills/tech-stack-catalog/SKILL.md +49 -0
  308. package/template/.agent/skills/tech-stack-catalog/references/constraint-questions.md +21 -0
  309. package/template/.agent/skills/tech-stack-catalog/references/dev-tooling-decisions.md +37 -0
  310. package/template/.agent/skills/tech-stack-catalog/references/surface-decision-tables.md +69 -0
  311. package/template/.agent/skills/technical-writer/SKILL.md +242 -0
  312. package/template/.agent/skills/testing-strategist/SKILL.md +932 -0
  313. package/template/.agent/skills/verification-before-completion/SKILL.md +145 -0
  314. package/template/.agent/skills/workflow-automation/SKILL.md +73 -0
  315. package/template/.agent/workflows/audit-ambiguity-execute.md +165 -0
  316. package/template/.agent/workflows/audit-ambiguity-rubrics.md +83 -0
  317. package/template/.agent/workflows/audit-ambiguity.md +64 -0
  318. package/template/.agent/workflows/bootstrap-agents-fill.md +201 -0
  319. package/template/.agent/workflows/bootstrap-agents-provision.md +197 -0
  320. package/template/.agent/workflows/bootstrap-agents.md +66 -0
  321. package/template/.agent/workflows/create-prd-architecture.md +119 -0
  322. package/template/.agent/workflows/create-prd-compile.md +138 -0
  323. package/template/.agent/workflows/create-prd-design-system.md +135 -0
  324. package/template/.agent/workflows/create-prd-security.md +113 -0
  325. package/template/.agent/workflows/create-prd-stack.md +91 -0
  326. package/template/.agent/workflows/create-prd.md +168 -0
  327. package/template/.agent/workflows/decompose-architecture-structure.md +82 -0
  328. package/template/.agent/workflows/decompose-architecture-validate.md +119 -0
  329. package/template/.agent/workflows/decompose-architecture.md +111 -0
  330. package/template/.agent/workflows/evolve-contract.md +98 -0
  331. package/template/.agent/workflows/evolve-feature-cascade.md +140 -0
  332. package/template/.agent/workflows/evolve-feature-classify.md +116 -0
  333. package/template/.agent/workflows/evolve-feature.md +56 -0
  334. package/template/.agent/workflows/ideate-discover.md +144 -0
  335. package/template/.agent/workflows/ideate-extract.md +129 -0
  336. package/template/.agent/workflows/ideate-validate.md +117 -0
  337. package/template/.agent/workflows/ideate.md +113 -0
  338. package/template/.agent/workflows/implement-slice-setup.md +113 -0
  339. package/template/.agent/workflows/implement-slice-tdd.md +198 -0
  340. package/template/.agent/workflows/implement-slice.md +50 -0
  341. package/template/.agent/workflows/plan-phase.md +202 -0
  342. package/template/.agent/workflows/propagate-decision-apply.md +135 -0
  343. package/template/.agent/workflows/propagate-decision-scan.md +147 -0
  344. package/template/.agent/workflows/propagate-decision.md +56 -0
  345. package/template/.agent/workflows/remediate-pipeline-assess.md +138 -0
  346. package/template/.agent/workflows/remediate-pipeline-execute.md +135 -0
  347. package/template/.agent/workflows/remediate-pipeline.md +55 -0
  348. package/template/.agent/workflows/resolve-ambiguity.md +82 -0
  349. package/template/.agent/workflows/sync-kit.md +209 -0
  350. package/template/.agent/workflows/update-architecture-map.md +74 -0
  351. package/template/.agent/workflows/validate-phase.md +219 -0
  352. package/template/.agent/workflows/verify-infrastructure.md +207 -0
  353. package/template/.agent/workflows/write-architecture-spec-deepen.md +139 -0
  354. package/template/.agent/workflows/write-architecture-spec-design.md +202 -0
  355. package/template/.agent/workflows/write-architecture-spec.md +63 -0
  356. package/template/.agent/workflows/write-be-spec-classify.md +165 -0
  357. package/template/.agent/workflows/write-be-spec-write.md +98 -0
  358. package/template/.agent/workflows/write-be-spec.md +76 -0
  359. package/template/.agent/workflows/write-fe-spec-classify.md +170 -0
  360. package/template/.agent/workflows/write-fe-spec-write.md +94 -0
  361. package/template/.agent/workflows/write-fe-spec.md +71 -0
  362. package/template/AGENTS.md +176 -0
  363. package/template/GEMINI.md +177 -0
  364. package/template/docs/README.md +187 -0
  365. package/template/docs/audits/.gitkeep +0 -0
  366. package/template/docs/audits/README.md +10 -0
  367. package/template/docs/plans/.gitkeep +0 -0
  368. package/template/docs/plans/README.md +21 -0
  369. package/template/docs/plans/be/.gitkeep +0 -0
  370. package/template/docs/plans/be/README.md +11 -0
  371. package/template/docs/plans/fe/.gitkeep +0 -0
  372. package/template/docs/plans/fe/README.md +11 -0
  373. package/template/docs/plans/ia/.gitkeep +0 -0
  374. package/template/docs/plans/ia/README.md +17 -0
  375. package/template/docs/plans/ia/deep-dives/.gitkeep +0 -0
  376. package/template/docs/plans/ia/deep-dives/README.md +5 -0
  377. package/template/docs/plans/phases/.gitkeep +0 -0
  378. package/template/docs/plans/phases/README.md +11 -0
@@ -0,0 +1,437 @@
1
+ ---
2
+ name: crypto-patterns
3
+ description: "Cryptography patterns for developers: password hashing, encryption, key management, JWT, HMAC, TLS configuration, and secure random generation. Use when implementing authentication, data encryption, webhook verification, token-based auth, or any feature requiring cryptographic operations."
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # Cryptography Patterns for Developers
8
+
9
+ **Status**: Production Ready
10
+ **Last Updated**: 2026-02-17
11
+ **Dependencies**: None (standalone skill)
12
+
13
+ ---
14
+
15
+ ## Use This Skill When
16
+
17
+ - Implementing password hashing and verification
18
+ - Encrypting sensitive data at rest or in transit
19
+ - Designing JWT-based authentication systems
20
+ - Verifying webhook signatures with HMAC
21
+ - Managing encryption keys and secrets
22
+ - Generating secure random values (tokens, IDs, nonces)
23
+
24
+ ## Do Not Use This Skill When
25
+
26
+ - You need to implement a custom cryptographic algorithm (never do this)
27
+ - You need CSP/CORS header configuration (use csp-cors-headers skill)
28
+ - You need general OWASP vulnerability guidance (use owasp-web-security skill)
29
+
30
+ ---
31
+
32
+ ## Password Hashing
33
+
34
+ Never use general-purpose hash functions (MD5, SHA-256) for passwords.
35
+
36
+ ### bcrypt (Recommended Default)
37
+
38
+ ```typescript
39
+ import bcrypt from "bcrypt";
40
+ const SALT_ROUNDS = 12; // Minimum 10, recommended 12-14
41
+ async function hashPassword(plaintext: string): Promise<string> {
42
+ return bcrypt.hash(plaintext, SALT_ROUNDS);
43
+ }
44
+ async function verifyPassword(plaintext: string, hash: string): Promise<boolean> {
45
+ return bcrypt.compare(plaintext, hash);
46
+ }
47
+ ```
48
+
49
+ ```python
50
+ import bcrypt
51
+ def hash_password(plaintext: str) -> str:
52
+ return bcrypt.hashpw(plaintext.encode("utf-8"), bcrypt.gensalt(rounds=12)).decode("utf-8")
53
+ def verify_password(plaintext: str, hashed: str) -> bool:
54
+ return bcrypt.checkpw(plaintext.encode("utf-8"), hashed.encode("utf-8"))
55
+ ```
56
+
57
+ ```go
58
+ import "golang.org/x/crypto/bcrypt"
59
+ func HashPassword(password string) (string, error) {
60
+ hash, err := bcrypt.GenerateFromPassword([]byte(password), 12)
61
+ return string(hash), err
62
+ }
63
+ func VerifyPassword(password, hash string) error {
64
+ return bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
65
+ }
66
+ ```
67
+
68
+ ### Argon2id (Strongest Option)
69
+
70
+ Winner of the Password Hashing Competition. Use when you need maximum security.
71
+
72
+ ```typescript
73
+ import argon2 from "argon2";
74
+ async function hashPassword(plaintext: string): Promise<string> {
75
+ return argon2.hash(plaintext, {
76
+ type: argon2.argon2id, memoryCost: 65536, timeCost: 3, parallelism: 4,
77
+ });
78
+ }
79
+ async function verifyPassword(plaintext: string, hash: string): Promise<boolean> {
80
+ return argon2.verify(hash, plaintext);
81
+ }
82
+ ```
83
+
84
+ ### Algorithm Selection
85
+
86
+ | Algorithm | When To Use | Max Password Length |
87
+ |-----------|-------------|---------------------|
88
+ | bcrypt | Default choice, wide support | 72 bytes |
89
+ | Argon2id | Highest security, configurable memory | No practical limit |
90
+ | scrypt | Node.js built-in, no extra deps | No practical limit |
91
+
92
+ ### scrypt (Node.js Built-in)
93
+
94
+ ```typescript
95
+ import crypto from "crypto";
96
+ import { promisify } from "util";
97
+ const scryptAsync = promisify(crypto.scrypt);
98
+
99
+ async function hashPassword(password: string): Promise<string> {
100
+ const salt = crypto.randomBytes(32);
101
+ const key = (await scryptAsync(password, salt, 64, { N: 16384, r: 8, p: 1 })) as Buffer;
102
+ return `${salt.toString("hex")}:${key.toString("hex")}`;
103
+ }
104
+
105
+ async function verifyPassword(password: string, stored: string): Promise<boolean> {
106
+ const [saltHex, hashHex] = stored.split(":");
107
+ const salt = Buffer.from(saltHex, "hex");
108
+ const storedHash = Buffer.from(hashHex, "hex");
109
+ const key = (await scryptAsync(password, salt, 64, { N: 16384, r: 8, p: 1 })) as Buffer;
110
+ return crypto.timingSafeEqual(key, storedHash);
111
+ }
112
+ ```
113
+
114
+ ---
115
+
116
+ ## Integrity Hashing (SHA-256)
117
+
118
+ Use SHA-256 for data integrity verification and checksums. Never for passwords.
119
+
120
+ ```typescript
121
+ import crypto from "crypto";
122
+
123
+ function sha256(data: string | Buffer): string {
124
+ return crypto.createHash("sha256").update(data).digest("hex");
125
+ }
126
+ ```
127
+
128
+ ```python
129
+ import hashlib
130
+ def sha256(data: bytes) -> str:
131
+ return hashlib.sha256(data).hexdigest()
132
+ ```
133
+
134
+ ---
135
+
136
+ ## Symmetric Encryption (AES-256-GCM)
137
+
138
+ AES-256-GCM provides authenticated encryption (confidentiality + integrity).
139
+
140
+ ```typescript
141
+ import crypto from "crypto";
142
+
143
+ interface EncryptedPayload {
144
+ iv: string; ciphertext: string; tag: string;
145
+ }
146
+
147
+ function encrypt(plaintext: string, key: Buffer): EncryptedPayload {
148
+ const iv = crypto.randomBytes(12); // 96 bits for GCM
149
+ const cipher = crypto.createCipheriv("aes-256-gcm", key, iv);
150
+ let ciphertext = cipher.update(plaintext, "utf8", "hex");
151
+ ciphertext += cipher.final("hex");
152
+ return { iv: iv.toString("hex"), ciphertext, tag: cipher.getAuthTag().toString("hex") };
153
+ }
154
+
155
+ function decrypt(payload: EncryptedPayload, key: Buffer): string {
156
+ const decipher = crypto.createDecipheriv("aes-256-gcm", key, Buffer.from(payload.iv, "hex"));
157
+ decipher.setAuthTag(Buffer.from(payload.tag, "hex"));
158
+ let plaintext = decipher.update(payload.ciphertext, "hex", "utf8");
159
+ plaintext += decipher.final("utf8");
160
+ return plaintext;
161
+ }
162
+ ```
163
+
164
+ ```python
165
+ from cryptography.hazmat.primitives.ciphers.aead import AESGCM
166
+ import os
167
+
168
+ def encrypt(plaintext: bytes, key: bytes) -> tuple[bytes, bytes]:
169
+ nonce = os.urandom(12)
170
+ return nonce, AESGCM(key).encrypt(nonce, plaintext, None)
171
+
172
+ def decrypt(nonce: bytes, ciphertext: bytes, key: bytes) -> bytes:
173
+ return AESGCM(key).decrypt(nonce, ciphertext, None)
174
+ ```
175
+
176
+ ### Using libsodium (Simplest API)
177
+
178
+ ```typescript
179
+ import sodium from "libsodium-wrappers";
180
+ await sodium.ready;
181
+
182
+ function encryptWithSodium(plaintext: string, key: Uint8Array): string {
183
+ const nonce = sodium.randombytes_buf(sodium.crypto_secretbox_NONCEBYTES);
184
+ const ciphertext = sodium.crypto_secretbox_easy(plaintext, nonce, key);
185
+ const combined = new Uint8Array(nonce.length + ciphertext.length);
186
+ combined.set(nonce);
187
+ combined.set(ciphertext, nonce.length);
188
+ return sodium.to_base64(combined);
189
+ }
190
+ ```
191
+
192
+ ---
193
+
194
+ ## Key Management
195
+
196
+ ### Envelope Encryption
197
+
198
+ Encrypt data with a Data Encryption Key (DEK), then encrypt the DEK with a
199
+ Key Encryption Key (KEK) stored in a KMS.
200
+
201
+ ```typescript
202
+ // KMS integration pattern
203
+ interface KMSProvider {
204
+ generateDataKey(): Promise<{ plaintext: Buffer; encrypted: Buffer }>;
205
+ decryptDataKey(encryptedKey: Buffer): Promise<Buffer>;
206
+ }
207
+
208
+ async function encryptWithKMS(plaintext: string, kms: KMSProvider) {
209
+ const { plaintext: dek, encrypted: encryptedKey } = await kms.generateDataKey();
210
+ const payload = encrypt(plaintext, dek);
211
+ dek.fill(0); // Zero out plaintext DEK from memory
212
+ return { encryptedKey, payload };
213
+ }
214
+
215
+ async function decryptWithKMS(encryptedKey: Buffer, payload: EncryptedPayload, kms: KMSProvider) {
216
+ const dek = await kms.decryptDataKey(encryptedKey);
217
+ const result = decrypt(payload, dek);
218
+ dek.fill(0);
219
+ return result;
220
+ }
221
+ ```
222
+
223
+ **Key rules**: Never hardcode keys in source code. Store keys in KMS (AWS KMS,
224
+ Google Cloud KMS, Azure Key Vault) or environment variables. Rotate keys on a
225
+ schedule. Zero out plaintext keys from memory after use.
226
+
227
+ ---
228
+
229
+ ## JWT Best Practices
230
+
231
+ ### Algorithm Selection
232
+
233
+ | Algorithm | Type | Use Case |
234
+ |-----------|------|----------|
235
+ | HS256 | Symmetric | Single-service auth (shared secret, 256+ bits) |
236
+ | RS256 | Asymmetric | Multi-service auth (RSA 2048+ bit key pair) |
237
+ | ES256 | Asymmetric | Modern systems, smaller tokens (ECDSA P-256) |
238
+
239
+ ### Secure Implementation
240
+
241
+ ```typescript
242
+ import jwt from "jsonwebtoken";
243
+
244
+ const JWT_SECRET = process.env.JWT_SECRET;
245
+ const ACCESS_TOKEN_EXPIRY = "15m"; // Short-lived
246
+ const REFRESH_TOKEN_EXPIRY = "7d"; // Longer, stored securely
247
+
248
+ function generateAccessToken(userId: string, roles: string[]): string {
249
+ return jwt.sign({ sub: userId, roles, type: "access" }, JWT_SECRET, {
250
+ expiresIn: ACCESS_TOKEN_EXPIRY, algorithm: "HS256",
251
+ issuer: "myapp.com", audience: "myapp.com", jwtid: crypto.randomUUID(),
252
+ });
253
+ }
254
+
255
+ function verifyToken(token: string, expectedType: "access" | "refresh") {
256
+ const decoded = jwt.verify(token, JWT_SECRET, {
257
+ algorithms: ["HS256"], // Explicitly allow ONLY expected algorithm
258
+ issuer: "myapp.com", audience: "myapp.com",
259
+ }) as { sub: string; type: string; roles?: string[] };
260
+ if (decoded.type !== expectedType) throw new Error("Invalid token type");
261
+ return decoded;
262
+ }
263
+ ```
264
+
265
+ ### Token Refresh Flow
266
+
267
+ ```typescript
268
+ async function refreshTokens(refreshToken: string) {
269
+ const payload = verifyToken(refreshToken, "refresh");
270
+ if (await isTokenRevoked(payload.jti)) throw new Error("Token revoked");
271
+ await revokeToken(payload.jti); // Rotate: revoke old refresh token
272
+
273
+ const user = await getUserById(payload.sub);
274
+ if (!user || !user.active) throw new Error("User not found or inactive");
275
+
276
+ return {
277
+ accessToken: generateAccessToken(user.id, user.roles),
278
+ refreshToken: generateRefreshToken(user.id),
279
+ };
280
+ }
281
+ ```
282
+
283
+ ### JWT Anti-Patterns
284
+
285
+ | Anti-Pattern | Risk | Fix |
286
+ |-------------|------|-----|
287
+ | `algorithm: "none"` | Token forgery | Explicit algorithm in verify |
288
+ | Not validating `iss`/`aud` | Token misuse across services | Set and verify both |
289
+ | Long-lived access tokens | Extended compromise window | 15min access + refresh tokens |
290
+ | JWTs in localStorage | XSS token theft | httpOnly cookies |
291
+ | No token revocation | Cannot invalidate stolen tokens | Revocation list |
292
+ | Sensitive data in payload | Exposed (base64, not encrypted) | Only IDs and roles |
293
+
294
+ ---
295
+
296
+ ## HMAC for Webhook Verification
297
+
298
+ ```typescript
299
+ import crypto from "crypto";
300
+
301
+ function verifyWebhookSignature(rawBody: string | Buffer, signatureHeader: string, secret: string): boolean {
302
+ const expected = crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
303
+ const provided = signatureHeader.replace("sha256=", "");
304
+ try {
305
+ return crypto.timingSafeEqual(Buffer.from(provided, "hex"), Buffer.from(expected, "hex"));
306
+ } catch { return false; }
307
+ }
308
+
309
+ function signWebhookPayload(payload: string, secret: string): string {
310
+ return "sha256=" + crypto.createHmac("sha256", secret).update(payload).digest("hex");
311
+ }
312
+ ```
313
+
314
+ ```python
315
+ import hmac, hashlib
316
+ def verify_webhook(payload: bytes, signature: str, secret: str) -> bool:
317
+ expected = hmac.new(secret.encode(), payload, hashlib.sha256).hexdigest()
318
+ return hmac.compare_digest(expected, signature.replace("sha256=", ""))
319
+ ```
320
+
321
+ ```go
322
+ import ("crypto/hmac"; "crypto/sha256"; "encoding/hex")
323
+ func VerifyWebhook(payload []byte, signature, secret string) bool {
324
+ mac := hmac.New(sha256.New, []byte(secret))
325
+ mac.Write(payload)
326
+ return hmac.Equal([]byte(hex.EncodeToString(mac.Sum(nil))), []byte(signature))
327
+ }
328
+ ```
329
+
330
+ ---
331
+
332
+ ## Secure Random Generation
333
+
334
+ ```typescript
335
+ import crypto from "crypto";
336
+
337
+ function generateToken(bytes: number = 32): string { return crypto.randomBytes(bytes).toString("base64url"); }
338
+ function generateId(): string { return crypto.randomUUID(); }
339
+ function generateOTP(digits: number = 6): string {
340
+ return crypto.randomInt(0, Math.pow(10, digits)).toString().padStart(digits, "0");
341
+ }
342
+ ```
343
+
344
+ ```python
345
+ import secrets
346
+ def generate_token(bytes: int = 32) -> str: return secrets.token_urlsafe(bytes)
347
+ def generate_otp(digits: int = 6) -> str: return "".join(secrets.choice("0123456789") for _ in range(digits))
348
+ ```
349
+
350
+ ### Never Use for Security
351
+
352
+ | Insecure | Secure Replacement |
353
+ |----------|-------------------|
354
+ | `Math.random()` | `crypto.randomBytes()` / `crypto.randomInt()` |
355
+ | `random.random()` (Python) | `secrets.token_bytes()` / `secrets.randbelow()` |
356
+ | `rand.Intn()` (Go math/rand) | `crypto/rand.Int()` |
357
+ | UUID v1 (time-based) | UUID v4 (random) or `crypto.randomUUID()` |
358
+
359
+ ---
360
+
361
+ ## TLS Configuration
362
+
363
+ ### nginx
364
+
365
+ ```nginx
366
+ ssl_protocols TLSv1.2 TLSv1.3;
367
+ ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
368
+ ssl_prefer_server_ciphers on;
369
+ ssl_stapling on;
370
+ ssl_stapling_verify on;
371
+ ssl_session_cache shared:SSL:10m;
372
+ ssl_session_timeout 1d;
373
+ ssl_session_tickets off;
374
+ add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
375
+ ```
376
+
377
+ ### Node.js
378
+
379
+ ```typescript
380
+ const server = https.createServer({
381
+ key: fs.readFileSync("/path/to/private.key"),
382
+ cert: fs.readFileSync("/path/to/certificate.crt"),
383
+ minVersion: "TLSv1.2",
384
+ ciphers: [
385
+ "TLS_AES_256_GCM_SHA384", "TLS_CHACHA20_POLY1305_SHA256",
386
+ "ECDHE-RSA-AES256-GCM-SHA384", "ECDHE-RSA-AES128-GCM-SHA256",
387
+ ].join(":"),
388
+ honorCipherOrder: true,
389
+ }, app);
390
+ ```
391
+
392
+ **Certificate pinning warning**: Pinning can cause outages if certificates rotate
393
+ without updating pins. Prefer Certificate Transparency monitoring for web apps.
394
+
395
+ ---
396
+
397
+ ## Anti-Patterns Summary
398
+
399
+ | Anti-Pattern | Risk | Correct Approach |
400
+ |-------------|------|-----------------|
401
+ | MD5/SHA1 for passwords | Rainbow table attacks | bcrypt, argon2id, or scrypt |
402
+ | ECB mode for encryption | Pattern leakage | GCM mode with authentication |
403
+ | Hardcoded encryption keys | Key compromise on code leak | KMS or environment variables |
404
+ | Custom crypto algorithms | Unknown vulnerabilities | Vetted libraries (libsodium, crypto) |
405
+ | Reusing IVs/nonces | Breaks encryption | Random IV for every operation |
406
+ | `Math.random()` for tokens | Predictable output | `crypto.randomBytes()` |
407
+ | Comparing hashes with `===` | Timing attacks | `crypto.timingSafeEqual()` |
408
+ | TLS 1.0/1.1 enabled | Protocol vulnerabilities | TLS 1.2 minimum |
409
+ | Self-signed certs in production | MitM risk | CA-issued certificates |
410
+
411
+ ---
412
+
413
+ ## Decision Matrix
414
+
415
+ ```
416
+ Storing passwords? --> bcrypt (default) or argon2id (max security)
417
+ Encrypting data at rest? --> AES-256-GCM with envelope encryption
418
+ Verifying data integrity? --> SHA-256 hash
419
+ Signing/verifying messages? --> HMAC-SHA256
420
+ Authentication tokens? --> JWT with RS256/ES256 (multi-service) or HS256 (single)
421
+ Random security values? --> crypto.randomBytes() / secrets.token_urlsafe()
422
+ Protecting data in transit? --> TLS 1.2+ with modern cipher suites
423
+ ```
424
+
425
+ ---
426
+
427
+ ## References
428
+
429
+ - **OWASP Password Storage Cheat Sheet**: https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html
430
+ - **OWASP Key Management Cheat Sheet**: https://cheatsheetseries.owasp.org/cheatsheets/Key_Management_Cheat_Sheet.html
431
+ - **JWT Best Practices (RFC 8725)**: https://www.rfc-editor.org/rfc/rfc8725
432
+ - **libsodium Documentation**: https://doc.libsodium.org/
433
+ - **Node.js crypto Module**: https://nodejs.org/api/crypto.html
434
+
435
+ ---
436
+
437
+ **Last verified**: 2026-02-17 | **Skill version**: 1.0.0