@devo-bmad-custom/agent-orchestration 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 (714) hide show
  1. package/bin/bmad.js +36 -0
  2. package/lib/cli.js +137 -0
  3. package/lib/filter.js +73 -0
  4. package/lib/installer.js +787 -0
  5. package/package.json +30 -0
  6. package/src/.agents/skills/audit-website/README.md +20 -0
  7. package/src/.agents/skills/audit-website/SKILL.md +470 -0
  8. package/src/.agents/skills/audit-website/agents/openai.yaml +6 -0
  9. package/src/.agents/skills/audit-website/assets/icon-small.svg +41 -0
  10. package/src/.agents/skills/audit-website/references/OUTPUT-FORMAT.md +250 -0
  11. package/src/.agents/skills/clean-code-standards/SKILL.md +105 -0
  12. package/src/.agents/skills/excalidraw-dark-standard/SKILL.md +282 -0
  13. package/src/.agents/skills/excalidraw-diagram-generator/SKILL.md +613 -0
  14. package/src/.agents/skills/excalidraw-diagram-generator/references/element-types.md +497 -0
  15. package/src/.agents/skills/excalidraw-diagram-generator/references/excalidraw-schema.md +350 -0
  16. package/src/.agents/skills/excalidraw-diagram-generator/scripts/README.md +193 -0
  17. package/src/.agents/skills/excalidraw-diagram-generator/scripts/add-arrow.py +312 -0
  18. package/src/.agents/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +404 -0
  19. package/src/.agents/skills/excalidraw-diagram-generator/scripts/split-excalidraw-library.py +183 -0
  20. package/src/.agents/skills/excalidraw-diagram-generator/templates/business-flow-swimlane-template.excalidraw +334 -0
  21. package/src/.agents/skills/excalidraw-diagram-generator/templates/class-diagram-template.excalidraw +558 -0
  22. package/src/.agents/skills/excalidraw-diagram-generator/templates/data-flow-diagram-template.excalidraw +279 -0
  23. package/src/.agents/skills/excalidraw-diagram-generator/templates/er-diagram-template.excalidraw +662 -0
  24. package/src/.agents/skills/excalidraw-diagram-generator/templates/flowchart-template.excalidraw +179 -0
  25. package/src/.agents/skills/excalidraw-diagram-generator/templates/mindmap-template.excalidraw +244 -0
  26. package/src/.agents/skills/excalidraw-diagram-generator/templates/relationship-template.excalidraw +145 -0
  27. package/src/.agents/skills/excalidraw-diagram-generator/templates/sequence-diagram-template.excalidraw +509 -0
  28. package/src/.agents/skills/frontend-responsive-design-standards/SKILL.md +434 -0
  29. package/src/.agents/skills/java-fundamentals/SKILL.md +116 -0
  30. package/src/.agents/skills/java-performance/SKILL.md +119 -0
  31. package/src/.agents/skills/next-best-practices/SKILL.md +153 -0
  32. package/src/.agents/skills/next-best-practices/async-patterns.md +87 -0
  33. package/src/.agents/skills/next-best-practices/bundling.md +180 -0
  34. package/src/.agents/skills/next-best-practices/data-patterns.md +297 -0
  35. package/src/.agents/skills/next-best-practices/debug-tricks.md +105 -0
  36. package/src/.agents/skills/next-best-practices/directives.md +73 -0
  37. package/src/.agents/skills/next-best-practices/error-handling.md +227 -0
  38. package/src/.agents/skills/next-best-practices/file-conventions.md +140 -0
  39. package/src/.agents/skills/next-best-practices/font.md +245 -0
  40. package/src/.agents/skills/next-best-practices/functions.md +108 -0
  41. package/src/.agents/skills/next-best-practices/hydration-error.md +91 -0
  42. package/src/.agents/skills/next-best-practices/image.md +173 -0
  43. package/src/.agents/skills/next-best-practices/metadata.md +301 -0
  44. package/src/.agents/skills/next-best-practices/parallel-routes.md +287 -0
  45. package/src/.agents/skills/next-best-practices/route-handlers.md +146 -0
  46. package/src/.agents/skills/next-best-practices/rsc-boundaries.md +159 -0
  47. package/src/.agents/skills/next-best-practices/runtime-selection.md +39 -0
  48. package/src/.agents/skills/next-best-practices/scripts.md +141 -0
  49. package/src/.agents/skills/next-best-practices/self-hosting.md +371 -0
  50. package/src/.agents/skills/next-best-practices/suspense-boundaries.md +67 -0
  51. package/src/.agents/skills/nextjs-app-router-patterns/SKILL.md +537 -0
  52. package/src/.agents/skills/postgresql-optimization/SKILL.md +404 -0
  53. package/src/.agents/skills/python-backend/SKILL.md +153 -0
  54. package/src/.agents/skills/python-fundamentals/SKILL.md +234 -0
  55. package/src/.agents/skills/python-performance/SKILL.md +404 -0
  56. package/src/.agents/skills/react-expert/SKILL.md +335 -0
  57. package/src/.agents/skills/redis-best-practices/SKILL.md +438 -0
  58. package/src/.agents/skills/security-best-practices/SKILL.md +288 -0
  59. package/src/.agents/skills/security-review/LICENSE +22 -0
  60. package/src/.agents/skills/security-review/SKILL.md +312 -0
  61. package/src/.agents/skills/security-review/infrastructure/docker.md +432 -0
  62. package/src/.agents/skills/security-review/languages/javascript.md +388 -0
  63. package/src/.agents/skills/security-review/languages/python.md +363 -0
  64. package/src/.agents/skills/security-review/references/api-security.md +519 -0
  65. package/src/.agents/skills/security-review/references/authentication.md +353 -0
  66. package/src/.agents/skills/security-review/references/authorization.md +372 -0
  67. package/src/.agents/skills/security-review/references/business-logic.md +443 -0
  68. package/src/.agents/skills/security-review/references/cryptography.md +329 -0
  69. package/src/.agents/skills/security-review/references/csrf.md +398 -0
  70. package/src/.agents/skills/security-review/references/data-protection.md +378 -0
  71. package/src/.agents/skills/security-review/references/deserialization.md +410 -0
  72. package/src/.agents/skills/security-review/references/error-handling.md +436 -0
  73. package/src/.agents/skills/security-review/references/file-security.md +457 -0
  74. package/src/.agents/skills/security-review/references/injection.md +259 -0
  75. package/src/.agents/skills/security-review/references/logging.md +433 -0
  76. package/src/.agents/skills/security-review/references/misconfiguration.md +435 -0
  77. package/src/.agents/skills/security-review/references/modern-threats.md +475 -0
  78. package/src/.agents/skills/security-review/references/ssrf.md +415 -0
  79. package/src/.agents/skills/security-review/references/supply-chain.md +405 -0
  80. package/src/.agents/skills/security-review/references/xss.md +336 -0
  81. package/src/.agents/skills/subagent-driven-development/SKILL.md +275 -0
  82. package/src/.agents/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
  83. package/src/.agents/skills/subagent-driven-development/implementer-prompt.md +113 -0
  84. package/src/.agents/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  85. package/src/.agents/skills/systematic-debugging/CREATION-LOG.md +119 -0
  86. package/src/.agents/skills/systematic-debugging/SKILL.md +296 -0
  87. package/src/.agents/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  88. package/src/.agents/skills/systematic-debugging/condition-based-waiting.md +115 -0
  89. package/src/.agents/skills/systematic-debugging/defense-in-depth.md +122 -0
  90. package/src/.agents/skills/systematic-debugging/find-polluter.sh +63 -0
  91. package/src/.agents/skills/systematic-debugging/root-cause-tracing.md +169 -0
  92. package/src/.agents/skills/systematic-debugging/test-academic.md +14 -0
  93. package/src/.agents/skills/systematic-debugging/test-pressure-1.md +58 -0
  94. package/src/.agents/skills/systematic-debugging/test-pressure-2.md +68 -0
  95. package/src/.agents/skills/systematic-debugging/test-pressure-3.md +69 -0
  96. package/src/.agents/skills/typescript-best-practices/SKILL.md +373 -0
  97. package/src/.agents/skills/ui-ux-pro-custom/SKILL.md +348 -0
  98. package/src/.agents/skills/ui-ux-pro-custom/data/charts.csv +26 -0
  99. package/src/.agents/skills/ui-ux-pro-custom/data/colors.csv +97 -0
  100. package/src/.agents/skills/ui-ux-pro-custom/data/icons.csv +101 -0
  101. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/SKILL.md +106 -0
  102. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/accessibility.md +475 -0
  103. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/animation.md +466 -0
  104. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/composition-locals.md +231 -0
  105. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/deprecated-patterns.md +323 -0
  106. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/lists-scrolling.md +400 -0
  107. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/modifiers.md +331 -0
  108. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/navigation.md +416 -0
  109. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/performance.md +446 -0
  110. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/side-effects.md +516 -0
  111. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/foundation-source.md +13327 -0
  112. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/material3-source.md +19097 -0
  113. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/navigation-source.md +2947 -0
  114. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/runtime-source.md +11316 -0
  115. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/ui-source.md +7896 -0
  116. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/state-management.md +377 -0
  117. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/styles-experimental.md +470 -0
  118. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/theming-material3.md +349 -0
  119. package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/view-composition.md +595 -0
  120. package/src/.agents/skills/ui-ux-pro-custom/data/landing.csv +31 -0
  121. package/src/.agents/skills/ui-ux-pro-custom/data/mobile-ui-layout.md +654 -0
  122. package/src/.agents/skills/ui-ux-pro-custom/data/products.csv +97 -0
  123. package/src/.agents/skills/ui-ux-pro-custom/data/react-performance.csv +45 -0
  124. package/src/.agents/skills/ui-ux-pro-custom/data/stacks/astro.csv +54 -0
  125. package/src/.agents/skills/ui-ux-pro-custom/data/stacks/flutter.csv +53 -0
  126. package/src/.agents/skills/ui-ux-pro-custom/data/stacks/html-tailwind.csv +56 -0
  127. package/src/.agents/skills/ui-ux-pro-custom/data/stacks/jetpack-compose.csv +53 -0
  128. package/src/.agents/skills/ui-ux-pro-custom/data/stacks/nextjs.csv +53 -0
  129. package/src/.agents/skills/ui-ux-pro-custom/data/stacks/nuxt-ui.csv +51 -0
  130. package/src/.agents/skills/ui-ux-pro-custom/data/stacks/nuxtjs.csv +59 -0
  131. package/src/.agents/skills/ui-ux-pro-custom/data/stacks/react-native.csv +56 -0
  132. package/src/.agents/skills/ui-ux-pro-custom/data/stacks/react.csv +54 -0
  133. package/src/.agents/skills/ui-ux-pro-custom/data/stacks/shadcn.csv +61 -0
  134. package/src/.agents/skills/ui-ux-pro-custom/data/stacks/svelte.csv +54 -0
  135. package/src/.agents/skills/ui-ux-pro-custom/data/stacks/swiftui.csv +51 -0
  136. package/src/.agents/skills/ui-ux-pro-custom/data/stacks/vue.csv +50 -0
  137. package/src/.agents/skills/ui-ux-pro-custom/data/styles.csv +68 -0
  138. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/alarmkit/SKILL.md +438 -0
  139. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/alarmkit/references/alarmkit-patterns.md +584 -0
  140. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-clips/SKILL.md +436 -0
  141. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-intents/SKILL.md +489 -0
  142. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-intents/references/appintents-advanced.md +1076 -0
  143. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-store-review/SKILL.md +340 -0
  144. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-store-review/references/privacy-manifest.md +90 -0
  145. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-store-review/references/review-checklists.md +106 -0
  146. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/SKILL.md +500 -0
  147. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/references/coreml-conversion.md +425 -0
  148. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/references/coreml-optimization.md +344 -0
  149. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/references/foundation-models.md +508 -0
  150. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/references/mlx-swift.md +285 -0
  151. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/authentication/SKILL.md +496 -0
  152. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/authentication/references/keychain-biometric.md +211 -0
  153. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/background-processing/SKILL.md +499 -0
  154. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/background-processing/references/background-task-patterns.md +390 -0
  155. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/callkit-voip/SKILL.md +461 -0
  156. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/callkit-voip/references/callkit-patterns.md +425 -0
  157. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/cloudkit-sync/SKILL.md +492 -0
  158. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/cloudkit-sync/references/cloudkit-patterns.md +461 -0
  159. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/codable-patterns/SKILL.md +467 -0
  160. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/contacts-framework/SKILL.md +425 -0
  161. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/contacts-framework/references/contacts-patterns.md +409 -0
  162. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-bluetooth/SKILL.md +491 -0
  163. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-bluetooth/references/ble-patterns.md +435 -0
  164. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-motion/SKILL.md +388 -0
  165. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-motion/references/motion-patterns.md +405 -0
  166. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-nfc/SKILL.md +495 -0
  167. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-nfc/references/nfc-patterns.md +420 -0
  168. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/coreml/SKILL.md +459 -0
  169. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/coreml/references/coreml-swift-integration.md +765 -0
  170. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/debugging-instruments/SKILL.md +422 -0
  171. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/debugging-instruments/references/instruments-guide.md +387 -0
  172. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/debugging-instruments/references/lldb-patterns.md +298 -0
  173. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/device-integrity/SKILL.md +477 -0
  174. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/energykit/SKILL.md +460 -0
  175. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/energykit/references/energykit-patterns.md +541 -0
  176. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/eventkit-calendar/SKILL.md +483 -0
  177. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/eventkit-calendar/references/eventkit-patterns.md +326 -0
  178. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/healthkit/SKILL.md +498 -0
  179. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/healthkit/references/healthkit-patterns.md +602 -0
  180. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/homekit-matter/SKILL.md +496 -0
  181. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/homekit-matter/references/matter-commissioning.md +455 -0
  182. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-accessibility/SKILL.md +301 -0
  183. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-accessibility/references/a11y-patterns.md +140 -0
  184. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-localization/SKILL.md +418 -0
  185. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-localization/references/formatstyle-locale.md +627 -0
  186. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-localization/references/string-catalogs.md +462 -0
  187. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/SKILL.md +441 -0
  188. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/references/background-websocket.md +862 -0
  189. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/references/lightweight-clients.md +93 -0
  190. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/references/network-framework.md +563 -0
  191. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/references/urlsession-patterns.md +1116 -0
  192. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/SKILL.md +496 -0
  193. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/references/app-review-guidelines.md +174 -0
  194. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/references/cryptokit-advanced.md +297 -0
  195. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/references/file-storage-patterns.md +354 -0
  196. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/references/privacy-manifest.md +117 -0
  197. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/live-activities/SKILL.md +500 -0
  198. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/live-activities/references/live-activity-patterns.md +868 -0
  199. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/mapkit-location/SKILL.md +485 -0
  200. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/mapkit-location/references/corelocation-patterns.md +730 -0
  201. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/mapkit-location/references/mapkit-patterns.md +748 -0
  202. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/metrickit-diagnostics/SKILL.md +479 -0
  203. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/musickit-audio/SKILL.md +395 -0
  204. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/musickit-audio/references/musickit-patterns.md +363 -0
  205. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/natural-language/SKILL.md +412 -0
  206. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/natural-language/references/translation-patterns.md +311 -0
  207. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/passkit-wallet/SKILL.md +398 -0
  208. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/passkit-wallet/references/wallet-passes.md +254 -0
  209. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/pencilkit-drawing/SKILL.md +387 -0
  210. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/pencilkit-drawing/references/paperkit-integration.md +376 -0
  211. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/pencilkit-drawing/references/pencilkit-patterns.md +302 -0
  212. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/permissionkit/SKILL.md +446 -0
  213. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/permissionkit/references/permissionkit-patterns.md +435 -0
  214. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/SKILL.md +501 -0
  215. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/references/av-playback.md +701 -0
  216. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/references/camera-capture.md +774 -0
  217. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/references/image-loading-caching.md +869 -0
  218. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/references/photospicker-patterns.md +597 -0
  219. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/push-notifications/SKILL.md +501 -0
  220. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/push-notifications/references/notification-patterns.md +677 -0
  221. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/push-notifications/references/rich-notifications.md +745 -0
  222. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/realitykit-ar/SKILL.md +479 -0
  223. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/realitykit-ar/references/realitykit-patterns.md +480 -0
  224. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/shareplay-activities/SKILL.md +483 -0
  225. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/shareplay-activities/references/shareplay-patterns.md +544 -0
  226. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/speech-recognition/SKILL.md +485 -0
  227. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/storekit/SKILL.md +478 -0
  228. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/storekit/references/app-review-guidelines.md +58 -0
  229. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/storekit/references/storekit-advanced.md +755 -0
  230. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-charts/SKILL.md +487 -0
  231. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-charts/references/charts-patterns.md +895 -0
  232. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/SKILL.md +408 -0
  233. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/references/approachable-concurrency.md +80 -0
  234. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/references/swift-6-2-concurrency.md +233 -0
  235. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/references/swiftui-concurrency.md +187 -0
  236. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/references/synchronization-primitives.md +341 -0
  237. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-language/SKILL.md +498 -0
  238. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-language/references/swift-patterns-extended.md +505 -0
  239. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-testing/SKILL.md +467 -0
  240. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-testing/references/testing-patterns.md +504 -0
  241. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftdata/SKILL.md +334 -0
  242. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftdata/references/core-data-coexistence.md +504 -0
  243. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftdata/references/swiftdata-advanced.md +975 -0
  244. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftdata/references/swiftdata-queries.md +675 -0
  245. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-animation/SKILL.md +481 -0
  246. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-animation/references/animation-advanced.md +804 -0
  247. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-animation/references/core-animation-bridge.md +553 -0
  248. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-gestures/SKILL.md +450 -0
  249. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-gestures/references/gesture-patterns.md +425 -0
  250. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/SKILL.md +336 -0
  251. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/references/form.md +97 -0
  252. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/references/grids.md +69 -0
  253. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/references/list.md +99 -0
  254. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/references/scrollview.md +147 -0
  255. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-liquid-glass/SKILL.md +325 -0
  256. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-liquid-glass/references/liquid-glass.md +387 -0
  257. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/SKILL.md +262 -0
  258. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/references/deeplinks.md +207 -0
  259. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/references/navigationstack.md +177 -0
  260. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/references/sheets.md +169 -0
  261. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/references/tabview.md +178 -0
  262. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/SKILL.md +381 -0
  263. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/references/architecture-patterns.md +486 -0
  264. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/references/deprecated-migration.md +1097 -0
  265. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/references/design-polish.md +780 -0
  266. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/references/platform-and-sharing.md +696 -0
  267. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/SKILL.md +491 -0
  268. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +46 -0
  269. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +29 -0
  270. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/references/understanding-hangs-in-your-app.md +33 -0
  271. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/references/understanding-improving-swiftui-performance.md +52 -0
  272. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-uikit-interop/SKILL.md +428 -0
  273. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-uikit-interop/references/hosting-migration.md +534 -0
  274. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-uikit-interop/references/representable-recipes.md +1133 -0
  275. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/tipkit/SKILL.md +494 -0
  276. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/tipkit/references/tipkit-patterns.md +782 -0
  277. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/vision-framework/SKILL.md +475 -0
  278. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/vision-framework/references/vision-requests.md +736 -0
  279. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/vision-framework/references/visionkit-scanner.md +738 -0
  280. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/weatherkit/SKILL.md +410 -0
  281. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/weatherkit/references/weatherkit-patterns.md +567 -0
  282. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/widgetkit/SKILL.md +497 -0
  283. package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/widgetkit/references/widgetkit-advanced.md +871 -0
  284. package/src/.agents/skills/ui-ux-pro-custom/data/typography.csv +58 -0
  285. package/src/.agents/skills/ui-ux-pro-custom/data/ui-reasoning.csv +101 -0
  286. package/src/.agents/skills/ui-ux-pro-custom/data/ux-guidelines.csv +100 -0
  287. package/src/.agents/skills/ui-ux-pro-custom/data/web-interface.csv +31 -0
  288. package/src/.agents/skills/ui-ux-pro-custom/scripts/core.py +253 -0
  289. package/src/.agents/skills/ui-ux-pro-custom/scripts/design_system.py +1067 -0
  290. package/src/.agents/skills/ui-ux-pro-custom/scripts/search.py +114 -0
  291. package/src/.agents/skills/ux-audit/SKILL.md +151 -0
  292. package/src/.agents/skills/websocket-engineer/SKILL.md +168 -0
  293. package/src/.agents/skills/websocket-engineer/references/alternatives.md +391 -0
  294. package/src/.agents/skills/websocket-engineer/references/patterns.md +400 -0
  295. package/src/.agents/skills/websocket-engineer/references/protocol.md +195 -0
  296. package/src/.agents/skills/websocket-engineer/references/scaling.md +333 -0
  297. package/src/.agents/skills/websocket-engineer/references/security.md +474 -0
  298. package/src/.agents/skills/writing-skills/SKILL.md +655 -0
  299. package/src/.agents/skills/writing-skills/anthropic-best-practices.md +1150 -0
  300. package/src/.agents/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  301. package/src/.agents/skills/writing-skills/graphviz-conventions.dot +172 -0
  302. package/src/.agents/skills/writing-skills/persuasion-principles.md +187 -0
  303. package/src/.agents/skills/writing-skills/render-graphs.js +168 -0
  304. package/src/.agents/skills/writing-skills/testing-skills-with-subagents.md +384 -0
  305. package/src/.claude/commands/bmad-track-compact.md +19 -0
  306. package/src/.claude/commands/bmad-track-extended.md +19 -0
  307. package/src/.claude/commands/bmad-track-large.md +19 -0
  308. package/src/.claude/commands/bmad-track-medium.md +19 -0
  309. package/src/.claude/commands/bmad-track-nano.md +19 -0
  310. package/src/.claude/commands/bmad-track-rv.md +18 -0
  311. package/src/.claude/commands/bmad-track-small.md +19 -0
  312. package/src/_memory/config.yaml +11 -0
  313. package/src/_memory/master-orchestrator-sidecar/docs-index.md +3 -0
  314. package/src/_memory/master-orchestrator-sidecar/instructions.md +2566 -0
  315. package/src/_memory/master-orchestrator-sidecar/memories.md +8 -0
  316. package/src/_memory/master-orchestrator-sidecar/session-state.md +15 -0
  317. package/src/_memory/master-orchestrator-sidecar/triage-history.md +3 -0
  318. package/src/_memory/master-orchestrator-sidecar/workflows-overview.html +1230 -0
  319. package/src/_memory/skills/excalidraw/SKILL.md +78 -0
  320. package/src/_memory/skills/excalidraw/diagram-patterns.md +53 -0
  321. package/src/_memory/skills/nimbalyst-tracking/SKILL.md +103 -0
  322. package/src/_memory/skills/writing-skills/SKILL.md +655 -0
  323. package/src/bmb/agents/agent-builder.md +59 -0
  324. package/src/bmb/agents/module-builder.md +60 -0
  325. package/src/bmb/agents/workflow-builder.md +61 -0
  326. package/src/bmb/config.yaml +12 -0
  327. package/src/bmb/module-help.csv +13 -0
  328. package/src/bmb/workflows/agent/data/agent-architecture.md +258 -0
  329. package/src/bmb/workflows/agent/data/agent-compilation.md +185 -0
  330. package/src/bmb/workflows/agent/data/agent-menu-patterns.md +189 -0
  331. package/src/bmb/workflows/agent/data/agent-metadata.md +133 -0
  332. package/src/bmb/workflows/agent/data/agent-validation.md +111 -0
  333. package/src/bmb/workflows/agent/data/brainstorm-context.md +96 -0
  334. package/src/bmb/workflows/agent/data/communication-presets.csv +61 -0
  335. package/src/bmb/workflows/agent/data/critical-actions.md +75 -0
  336. package/src/bmb/workflows/agent/data/persona-properties.md +252 -0
  337. package/src/bmb/workflows/agent/data/principles-crafting.md +142 -0
  338. package/src/bmb/workflows/agent/data/reference/module-examples/architect.md +68 -0
  339. package/src/bmb/workflows/agent/data/reference/with-sidecar/journal-keeper/journal-keeper-sidecar/entries/yy-mm-dd-entry-template.md +17 -0
  340. package/src/bmb/workflows/agent/data/understanding-agent-types.md +126 -0
  341. package/src/bmb/workflows/agent/steps-c/step-01-brainstorm.md +129 -0
  342. package/src/bmb/workflows/agent/steps-c/step-02-discovery.md +170 -0
  343. package/src/bmb/workflows/agent/steps-c/step-03-sidecar-metadata.md +309 -0
  344. package/src/bmb/workflows/agent/steps-c/step-04-persona.md +213 -0
  345. package/src/bmb/workflows/agent/steps-c/step-05-commands-menu.md +179 -0
  346. package/src/bmb/workflows/agent/steps-c/step-06-activation.md +278 -0
  347. package/src/bmb/workflows/agent/steps-c/step-07-build-agent.md +316 -0
  348. package/src/bmb/workflows/agent/steps-c/step-08-celebrate.md +247 -0
  349. package/src/bmb/workflows/agent/steps-e/e-01-load-existing.md +221 -0
  350. package/src/bmb/workflows/agent/steps-e/e-02-discover-edits.md +195 -0
  351. package/src/bmb/workflows/agent/steps-e/e-03-placeholder.md +1 -0
  352. package/src/bmb/workflows/agent/steps-e/e-04-sidecar-metadata.md +126 -0
  353. package/src/bmb/workflows/agent/steps-e/e-05-persona.md +135 -0
  354. package/src/bmb/workflows/agent/steps-e/e-06-commands-menu.md +123 -0
  355. package/src/bmb/workflows/agent/steps-e/e-07-activation.md +124 -0
  356. package/src/bmb/workflows/agent/steps-e/e-08-edit-agent.md +197 -0
  357. package/src/bmb/workflows/agent/steps-e/e-09-celebrate.md +155 -0
  358. package/src/bmb/workflows/agent/steps-v/v-01-load-review.md +137 -0
  359. package/src/bmb/workflows/agent/steps-v/v-02a-validate-metadata.md +116 -0
  360. package/src/bmb/workflows/agent/steps-v/v-02b-validate-persona.md +124 -0
  361. package/src/bmb/workflows/agent/steps-v/v-02c-validate-menu.md +127 -0
  362. package/src/bmb/workflows/agent/steps-v/v-02d-validate-structure.md +134 -0
  363. package/src/bmb/workflows/agent/steps-v/v-02e-validate-sidecar.md +134 -0
  364. package/src/bmb/workflows/agent/steps-v/v-03-summary.md +104 -0
  365. package/src/bmb/workflows/agent/templates/agent-plan.template.md +5 -0
  366. package/src/bmb/workflows/agent/templates/agent-template.md +89 -0
  367. package/src/bmb/workflows/agent/workflow-create-agent.md +72 -0
  368. package/src/bmb/workflows/agent/workflow-edit-agent.md +75 -0
  369. package/src/bmb/workflows/agent/workflow-validate-agent.md +73 -0
  370. package/src/bmb/workflows/module/data/agent-architecture.md +179 -0
  371. package/src/bmb/workflows/module/data/agent-spec-template.md +79 -0
  372. package/src/bmb/workflows/module/data/module-standards.md +263 -0
  373. package/src/bmb/workflows/module/data/module-yaml-conventions.md +392 -0
  374. package/src/bmb/workflows/module/module-help-generate.md +254 -0
  375. package/src/bmb/workflows/module/steps-b/step-01-welcome.md +148 -0
  376. package/src/bmb/workflows/module/steps-b/step-02-spark.md +141 -0
  377. package/src/bmb/workflows/module/steps-b/step-03-module-type.md +149 -0
  378. package/src/bmb/workflows/module/steps-b/step-04-vision.md +83 -0
  379. package/src/bmb/workflows/module/steps-b/step-05-identity.md +97 -0
  380. package/src/bmb/workflows/module/steps-b/step-06-users.md +86 -0
  381. package/src/bmb/workflows/module/steps-b/step-07-value.md +76 -0
  382. package/src/bmb/workflows/module/steps-b/step-08-agents.md +97 -0
  383. package/src/bmb/workflows/module/steps-b/step-09-workflows.md +83 -0
  384. package/src/bmb/workflows/module/steps-b/step-10-tools.md +91 -0
  385. package/src/bmb/workflows/module/steps-b/step-11-scenarios.md +84 -0
  386. package/src/bmb/workflows/module/steps-b/step-12-creative.md +95 -0
  387. package/src/bmb/workflows/module/steps-b/step-13-review.md +105 -0
  388. package/src/bmb/workflows/module/steps-b/step-14-finalize.md +117 -0
  389. package/src/bmb/workflows/module/steps-c/step-01-load-brief.md +179 -0
  390. package/src/bmb/workflows/module/steps-c/step-01b-continue.md +82 -0
  391. package/src/bmb/workflows/module/steps-c/step-02-structure.md +105 -0
  392. package/src/bmb/workflows/module/steps-c/step-03-config.md +119 -0
  393. package/src/bmb/workflows/module/steps-c/step-04-agents.md +168 -0
  394. package/src/bmb/workflows/module/steps-c/step-05-workflows.md +184 -0
  395. package/src/bmb/workflows/module/steps-c/step-06-docs.md +401 -0
  396. package/src/bmb/workflows/module/steps-c/step-07-complete.md +152 -0
  397. package/src/bmb/workflows/module/steps-e/step-01-load-target.md +81 -0
  398. package/src/bmb/workflows/module/steps-e/step-02-select-edit.md +77 -0
  399. package/src/bmb/workflows/module/steps-e/step-03-apply-edit.md +77 -0
  400. package/src/bmb/workflows/module/steps-e/step-04-review.md +80 -0
  401. package/src/bmb/workflows/module/steps-e/step-05-confirm.md +75 -0
  402. package/src/bmb/workflows/module/steps-v/step-01-load-target.md +96 -0
  403. package/src/bmb/workflows/module/steps-v/step-02-file-structure.md +93 -0
  404. package/src/bmb/workflows/module/steps-v/step-03-module-yaml.md +99 -0
  405. package/src/bmb/workflows/module/steps-v/step-04-agent-specs.md +152 -0
  406. package/src/bmb/workflows/module/steps-v/step-05-workflow-specs.md +152 -0
  407. package/src/bmb/workflows/module/steps-v/step-06-documentation.md +143 -0
  408. package/src/bmb/workflows/module/steps-v/step-07-installation.md +102 -0
  409. package/src/bmb/workflows/module/steps-v/step-08-report.md +197 -0
  410. package/src/bmb/workflows/module/templates/brief-template.md +154 -0
  411. package/src/bmb/workflows/module/templates/workflow-spec-template.md +96 -0
  412. package/src/bmb/workflows/module/workflow-create-module-brief.md +71 -0
  413. package/src/bmb/workflows/module/workflow-create-module.md +86 -0
  414. package/src/bmb/workflows/module/workflow-edit-module.md +66 -0
  415. package/src/bmb/workflows/module/workflow-validate-module.md +66 -0
  416. package/src/bmb/workflows/workflow/data/architecture.md +150 -0
  417. package/src/bmb/workflows/workflow/data/common-workflow-tools.csv +19 -0
  418. package/src/bmb/workflows/workflow/data/csv-data-file-standards.md +53 -0
  419. package/src/bmb/workflows/workflow/data/frontmatter-standards.md +184 -0
  420. package/src/bmb/workflows/workflow/data/input-discovery-standards.md +191 -0
  421. package/src/bmb/workflows/workflow/data/intent-vs-prescriptive-spectrum.md +44 -0
  422. package/src/bmb/workflows/workflow/data/menu-handling-standards.md +133 -0
  423. package/src/bmb/workflows/workflow/data/output-format-standards.md +135 -0
  424. package/src/bmb/workflows/workflow/data/step-file-rules.md +235 -0
  425. package/src/bmb/workflows/workflow/data/step-type-patterns.md +257 -0
  426. package/src/bmb/workflows/workflow/data/subprocess-optimization-patterns.md +188 -0
  427. package/src/bmb/workflows/workflow/data/trimodal-workflow-structure.md +164 -0
  428. package/src/bmb/workflows/workflow/data/workflow-chaining-standards.md +222 -0
  429. package/src/bmb/workflows/workflow/data/workflow-examples.md +232 -0
  430. package/src/bmb/workflows/workflow/data/workflow-type-criteria.md +134 -0
  431. package/src/bmb/workflows/workflow/steps-c/step-00-conversion.md +263 -0
  432. package/src/bmb/workflows/workflow/steps-c/step-01-discovery.md +194 -0
  433. package/src/bmb/workflows/workflow/steps-c/step-01b-continuation.md +3 -0
  434. package/src/bmb/workflows/workflow/steps-c/step-02-classification.md +270 -0
  435. package/src/bmb/workflows/workflow/steps-c/step-03-requirements.md +283 -0
  436. package/src/bmb/workflows/workflow/steps-c/step-04-tools.md +282 -0
  437. package/src/bmb/workflows/workflow/steps-c/step-05-plan-review.md +243 -0
  438. package/src/bmb/workflows/workflow/steps-c/step-06-design.md +330 -0
  439. package/src/bmb/workflows/workflow/steps-c/step-07-foundation.md +239 -0
  440. package/src/bmb/workflows/workflow/steps-c/step-08-build-step-01.md +379 -0
  441. package/src/bmb/workflows/workflow/steps-c/step-09-build-next-step.md +350 -0
  442. package/src/bmb/workflows/workflow/steps-c/step-10-confirmation.md +322 -0
  443. package/src/bmb/workflows/workflow/steps-c/step-11-completion.md +191 -0
  444. package/src/bmb/workflows/workflow/steps-e/step-e-01-assess-workflow.md +237 -0
  445. package/src/bmb/workflows/workflow/steps-e/step-e-02-discover-edits.md +251 -0
  446. package/src/bmb/workflows/workflow/steps-e/step-e-03-fix-validation.md +254 -0
  447. package/src/bmb/workflows/workflow/steps-e/step-e-04-direct-edit.md +277 -0
  448. package/src/bmb/workflows/workflow/steps-e/step-e-05-apply-edit.md +154 -0
  449. package/src/bmb/workflows/workflow/steps-e/step-e-06-validate-after.md +190 -0
  450. package/src/bmb/workflows/workflow/steps-e/step-e-07-complete.md +206 -0
  451. package/src/bmb/workflows/workflow/steps-v/step-01-validate-max-mode.md +109 -0
  452. package/src/bmb/workflows/workflow/steps-v/step-01-validate.md +221 -0
  453. package/src/bmb/workflows/workflow/steps-v/step-01b-structure.md +152 -0
  454. package/src/bmb/workflows/workflow/steps-v/step-02-frontmatter-validation.md +199 -0
  455. package/src/bmb/workflows/workflow/steps-v/step-02b-path-violations.md +265 -0
  456. package/src/bmb/workflows/workflow/steps-v/step-03-menu-validation.md +164 -0
  457. package/src/bmb/workflows/workflow/steps-v/step-04-step-type-validation.md +211 -0
  458. package/src/bmb/workflows/workflow/steps-v/step-05-output-format-validation.md +200 -0
  459. package/src/bmb/workflows/workflow/steps-v/step-06-validation-design-check.md +195 -0
  460. package/src/bmb/workflows/workflow/steps-v/step-07-instruction-style-check.md +209 -0
  461. package/src/bmb/workflows/workflow/steps-v/step-08-collaborative-experience-check.md +199 -0
  462. package/src/bmb/workflows/workflow/steps-v/step-08b-subprocess-optimization.md +179 -0
  463. package/src/bmb/workflows/workflow/steps-v/step-09-cohesive-review.md +186 -0
  464. package/src/bmb/workflows/workflow/steps-v/step-10-report-complete.md +154 -0
  465. package/src/bmb/workflows/workflow/steps-v/step-11-plan-validation.md +237 -0
  466. package/src/bmb/workflows/workflow/templates/minimal-output-template.md +11 -0
  467. package/src/bmb/workflows/workflow/templates/step-01-init-continuable-template.md +241 -0
  468. package/src/bmb/workflows/workflow/templates/step-1b-template.md +224 -0
  469. package/src/bmb/workflows/workflow/templates/step-template.md +294 -0
  470. package/src/bmb/workflows/workflow/templates/workflow-template.md +102 -0
  471. package/src/bmb/workflows/workflow/workflow-create-workflow.md +79 -0
  472. package/src/bmb/workflows/workflow/workflow-edit-workflow.md +65 -0
  473. package/src/bmb/workflows/workflow/workflow-rework-workflow.md +65 -0
  474. package/src/bmb/workflows/workflow/workflow-validate-max-parallel-workflow.md +66 -0
  475. package/src/bmb/workflows/workflow/workflow-validate-workflow.md +65 -0
  476. package/src/bmm/agents/analyst.md +104 -0
  477. package/src/bmm/agents/architect.md +85 -0
  478. package/src/bmm/agents/dev.md +100 -0
  479. package/src/bmm/agents/pm.md +98 -0
  480. package/src/bmm/agents/qa.md +90 -0
  481. package/src/bmm/agents/quick-flow-solo-dev.md +92 -0
  482. package/src/bmm/agents/review-agent.md +129 -0
  483. package/src/bmm/agents/sm.md +90 -0
  484. package/src/bmm/agents/tech-writer/tech-writer.md +94 -0
  485. package/src/bmm/agents/ux-designer.md +124 -0
  486. package/src/bmm/data/project-context-template.md +26 -0
  487. package/src/bmm/module-help.csv +31 -0
  488. package/src/bmm/teams/default-party.csv +20 -0
  489. package/src/bmm/teams/team-fullstack.yaml +12 -0
  490. package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
  491. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +115 -0
  492. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +107 -0
  493. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +141 -0
  494. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +144 -0
  495. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +147 -0
  496. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +161 -0
  497. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +99 -0
  498. package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +57 -0
  499. package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +87 -0
  500. package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +156 -0
  501. package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +165 -0
  502. package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +140 -0
  503. package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +152 -0
  504. package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +345 -0
  505. package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +92 -0
  506. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +164 -0
  507. package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +174 -0
  508. package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +184 -0
  509. package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +105 -0
  510. package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +360 -0
  511. package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
  512. package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +87 -0
  513. package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +165 -0
  514. package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +174 -0
  515. package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +141 -0
  516. package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +159 -0
  517. package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +387 -0
  518. package/src/bmm/workflows/1-analysis/research/workflow-domain-research.md +54 -0
  519. package/src/bmm/workflows/1-analysis/research/workflow-market-research.md +54 -0
  520. package/src/bmm/workflows/1-analysis/research/workflow-technical-research.md +54 -0
  521. package/src/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +15 -0
  522. package/src/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
  523. package/src/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
  524. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +139 -0
  525. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +100 -0
  526. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +160 -0
  527. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +88 -0
  528. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +99 -0
  529. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +169 -0
  530. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +156 -0
  531. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +136 -0
  532. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +176 -0
  533. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +184 -0
  534. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +174 -0
  535. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +175 -0
  536. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +189 -0
  537. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +162 -0
  538. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +79 -0
  539. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +183 -0
  540. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +149 -0
  541. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +187 -0
  542. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +192 -0
  543. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +108 -0
  544. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +166 -0
  545. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +131 -0
  546. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +150 -0
  547. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +118 -0
  548. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +155 -0
  549. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +170 -0
  550. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +158 -0
  551. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +147 -0
  552. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +182 -0
  553. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +202 -0
  554. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +148 -0
  555. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +201 -0
  556. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +179 -0
  557. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +164 -0
  558. package/src/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -0
  559. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +65 -0
  560. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +65 -0
  561. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +63 -0
  562. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +63 -0
  563. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +63 -0
  564. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +106 -0
  565. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +111 -0
  566. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +115 -0
  567. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +127 -0
  568. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +167 -0
  569. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +143 -0
  570. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +118 -0
  571. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +154 -0
  572. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +136 -0
  573. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +165 -0
  574. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +135 -0
  575. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +192 -0
  576. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +101 -0
  577. package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
  578. package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +45 -0
  579. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +185 -0
  580. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +129 -0
  581. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +130 -0
  582. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +93 -0
  583. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +196 -0
  584. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +129 -0
  585. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
  586. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +54 -0
  587. package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
  588. package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +13 -0
  589. package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
  590. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +89 -0
  591. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +82 -0
  592. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +106 -0
  593. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +138 -0
  594. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +129 -0
  595. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +166 -0
  596. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +186 -0
  597. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +163 -0
  598. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +38 -0
  599. package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +49 -0
  600. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +129 -0
  601. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +124 -0
  602. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +122 -0
  603. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +84 -0
  604. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  605. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
  606. package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
  607. package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
  608. package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +43 -0
  609. package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
  610. package/src/bmm/workflows/4-implementation/correct-course/instructions.md +207 -0
  611. package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +53 -0
  612. package/src/bmm/workflows/4-implementation/create-story/checklist.md +159 -0
  613. package/src/bmm/workflows/4-implementation/create-story/instructions.xml +574 -0
  614. package/src/bmm/workflows/4-implementation/create-story/template.md +79 -0
  615. package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +52 -0
  616. package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
  617. package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +493 -0
  618. package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +20 -0
  619. package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1444 -0
  620. package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +52 -0
  621. package/src/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
  622. package/src/bmm/workflows/4-implementation/sprint-planning/instructions.md +232 -0
  623. package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
  624. package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +52 -0
  625. package/src/bmm/workflows/4-implementation/sprint-status/instructions.md +230 -0
  626. package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +25 -0
  627. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +158 -0
  628. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +122 -0
  629. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +93 -0
  630. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +93 -0
  631. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +87 -0
  632. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +146 -0
  633. package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -0
  634. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +204 -0
  635. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +152 -0
  636. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +123 -0
  637. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +201 -0
  638. package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
  639. package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -0
  640. package/src/bmm/workflows/document-project/checklist.md +245 -0
  641. package/src/bmm/workflows/document-project/documentation-requirements.csv +12 -0
  642. package/src/bmm/workflows/document-project/instructions.md +130 -0
  643. package/src/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
  644. package/src/bmm/workflows/document-project/templates/index-template.md +169 -0
  645. package/src/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
  646. package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  647. package/src/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
  648. package/src/bmm/workflows/document-project/workflow.yaml +22 -0
  649. package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  650. package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
  651. package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  652. package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
  653. package/src/bmm/workflows/generate-project-context/project-context-template.md +21 -0
  654. package/src/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -0
  655. package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +322 -0
  656. package/src/bmm/workflows/generate-project-context/steps/step-03-complete.md +235 -0
  657. package/src/bmm/workflows/generate-project-context/workflow.md +49 -0
  658. package/src/bmm/workflows/qa/automate/workflow.yaml +233 -0
  659. package/src/bmm/workflows/qa-generate-e2e-tests/checklist.md +33 -0
  660. package/src/bmm/workflows/qa-generate-e2e-tests/instructions.md +110 -0
  661. package/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml +42 -0
  662. package/src/core/agents/bmad-master.md +56 -0
  663. package/src/core/agents/master-orchestrator.md +54 -0
  664. package/src/core/config.yaml +9 -0
  665. package/src/core/module-help.csv +10 -0
  666. package/src/core/scripts/generate-loop-report.py +72 -0
  667. package/src/core/skills/prepare-to-merge/SKILL.md +77 -0
  668. package/src/core/tasks/editorial-review-prose.xml +102 -0
  669. package/src/core/tasks/editorial-review-structure.xml +208 -0
  670. package/src/core/tasks/help.md +86 -0
  671. package/src/core/tasks/index-docs.xml +65 -0
  672. package/src/core/tasks/review-adversarial-general.xml +66 -0
  673. package/src/core/tasks/review-adversarial-loop.xml +46 -0
  674. package/src/core/tasks/review-edge-case-hunter.xml +63 -0
  675. package/src/core/tasks/review-party-loop.xml +46 -0
  676. package/src/core/tasks/shard-doc.xml +108 -0
  677. package/src/core/tasks/workflow.xml +236 -0
  678. package/src/core/templates/review-loop-report.html +88 -0
  679. package/src/core/templates/review-loop-report.md +5 -0
  680. package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
  681. package/src/core/workflows/advanced-elicitation/workflow.xml +118 -0
  682. package/src/core/workflows/brainstorming/brain-methods.csv +62 -0
  683. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +212 -0
  684. package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
  685. package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
  686. package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
  687. package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
  688. package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
  689. package/src/core/workflows/brainstorming/steps/step-02e-deep-dive.md +68 -0
  690. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +403 -0
  691. package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
  692. package/src/core/workflows/brainstorming/template.md +15 -0
  693. package/src/core/workflows/brainstorming/workflow.md +60 -0
  694. package/src/core/workflows/extract-trackers/workflow.md +45 -0
  695. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +142 -0
  696. package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
  697. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +168 -0
  698. package/src/core/workflows/party-mode/workflow.md +194 -0
  699. package/src/docs/dev/tmux/actions_popup.py +291 -0
  700. package/src/docs/dev/tmux/actions_popup.sh +110 -0
  701. package/src/docs/dev/tmux/claude_usage.sh +15 -0
  702. package/src/docs/dev/tmux/colors.conf +34 -0
  703. package/src/docs/dev/tmux/cpu_usage.sh +7 -0
  704. package/src/docs/dev/tmux/dispatch.sh +10 -0
  705. package/src/docs/dev/tmux/float_init.sh +13 -0
  706. package/src/docs/dev/tmux/float_term.sh +23 -0
  707. package/src/docs/dev/tmux/open_clip.sh +14 -0
  708. package/src/docs/dev/tmux/paste_clipboard.sh +13 -0
  709. package/src/docs/dev/tmux/paste_image_wrapper.sh +83 -0
  710. package/src/docs/dev/tmux/ram_usage.sh +3 -0
  711. package/src/docs/dev/tmux/title_sync.sh +54 -0
  712. package/src/docs/dev/tmux/tmux-setup.md +806 -0
  713. package/src/docs/dev/tmux/tmux.conf +127 -0
  714. package/src/docs/dev/tmux/xclip +18 -0
@@ -0,0 +1,329 @@
1
+ # Cryptographic Security Reference
2
+
3
+ ## Core Principles
4
+
5
+ 1. **Avoid storing sensitive data** when possible - the best protection is not having the data
6
+ 2. **Use established libraries** - never implement cryptographic algorithms yourself
7
+ 3. **Use modern algorithms** - avoid deprecated algorithms even if they seem convenient
8
+ 4. **Manage keys securely** - key management is often harder than encryption itself
9
+
10
+ ## Encryption Algorithms
11
+
12
+ ### Symmetric Encryption
13
+
14
+ **Recommended:**
15
+ - **AES-256-GCM** (preferred) - Provides encryption + authentication
16
+ - **AES-128-GCM** - Acceptable minimum
17
+ - **ChaCha20-Poly1305** - Good alternative, especially on systems without AES hardware
18
+
19
+ **Avoid:**
20
+ - DES, 3DES - Deprecated, insufficient key length
21
+ - RC4 - Broken
22
+ - AES-ECB - Reveals patterns in data
23
+ - AES-CBC without authentication - Vulnerable to padding oracle attacks
24
+
25
+ ### Cipher Modes
26
+
27
+ | Mode | Use Case | Notes |
28
+ |------|----------|-------|
29
+ | **GCM** | General purpose | Authenticated encryption (preferred) |
30
+ | **CCM** | Constrained environments | Authenticated encryption |
31
+ | **CTR + HMAC** | When GCM unavailable | Encrypt-then-MAC pattern |
32
+ | **CBC** | Legacy only | Requires separate MAC |
33
+ | **ECB** | Never for data | Reveals patterns |
34
+
35
+ ```python
36
+ # VULNERABLE: ECB mode
37
+ from Crypto.Cipher import AES
38
+ cipher = AES.new(key, AES.MODE_ECB)
39
+
40
+ # SAFE: GCM mode
41
+ cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
42
+ ciphertext, tag = cipher.encrypt_and_digest(plaintext)
43
+ ```
44
+
45
+ ### Asymmetric Encryption
46
+
47
+ **Recommended:**
48
+ - **ECC with Curve25519** (preferred for key exchange)
49
+ - **RSA-2048** minimum (RSA-4096 for long-term)
50
+ - **ECDSA with P-256** or Ed25519 for signatures
51
+
52
+ **Avoid:**
53
+ - RSA < 2048 bits
54
+ - DSA
55
+ - ECDSA with weak curves
56
+
57
+ ---
58
+
59
+ ## Secure Random Number Generation
60
+
61
+ ### Cryptographically Secure PRNGs (CSPRNG)
62
+
63
+ | Language | Safe | Unsafe |
64
+ |----------|------|--------|
65
+ | **Python** | `secrets`, `os.urandom()` | `random` module |
66
+ | **JavaScript** | `crypto.randomBytes()`, `crypto.randomUUID()` | `Math.random()` |
67
+ | **Java** | `SecureRandom`, `UUID.randomUUID()` | `Math.random()`, `java.util.Random` |
68
+ | **PHP** | `random_bytes()`, `random_int()` | `rand()`, `mt_rand()`, `uniqid()` |
69
+ | **.NET** | `RandomNumberGenerator` | `Random()` |
70
+ | **Go** | `crypto/rand` | `math/rand` |
71
+ | **Ruby** | `SecureRandom` | `rand()` |
72
+
73
+ ```python
74
+ # VULNERABLE: Predictable random
75
+ import random
76
+ token = ''.join(random.choices(string.ascii_letters, k=32))
77
+
78
+ # SAFE: Cryptographically secure
79
+ import secrets
80
+ token = secrets.token_urlsafe(32)
81
+ ```
82
+
83
+ ### UUID Considerations
84
+
85
+ - **UUID v1**: NOT random - contains timestamp and MAC address
86
+ - **UUID v4**: Depends on implementation - verify CSPRNG usage
87
+ - **ULID**: Time-sortable but predictable time component
88
+
89
+ ```python
90
+ # Check if UUID v4 is actually random
91
+ import uuid
92
+ # uuid.uuid4() uses os.urandom() in Python - SAFE
93
+ token = str(uuid.uuid4())
94
+ ```
95
+
96
+ ---
97
+
98
+ ## Key Management
99
+
100
+ ### Key Generation
101
+
102
+ ```python
103
+ # VULNERABLE: Key from password directly
104
+ key = password.encode()
105
+
106
+ # SAFE: Key derivation function
107
+ from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
108
+ kdf = PBKDF2HMAC(
109
+ algorithm=hashes.SHA256(),
110
+ length=32,
111
+ salt=salt,
112
+ iterations=600000,
113
+ )
114
+ key = kdf.derive(password.encode())
115
+ ```
116
+
117
+ ### Key Storage
118
+
119
+ **Do:**
120
+ - Use Hardware Security Modules (HSM)
121
+ - Use cloud key management (AWS KMS, Azure Key Vault, GCP KMS)
122
+ - Use dedicated secrets managers (HashiCorp Vault)
123
+ - Store keys separately from encrypted data
124
+
125
+ **Don't:**
126
+ - Hardcode keys in source code
127
+ - Commit keys to version control
128
+ - Store keys in environment variables (can leak)
129
+ - Store keys in plaintext files
130
+
131
+ ```python
132
+ # VULNERABLE: Hardcoded key
133
+ KEY = b'super_secret_key_12345'
134
+
135
+ # VULNERABLE: Key in code as base64
136
+ KEY = base64.b64decode('c3VwZXJfc2VjcmV0X2tleQ==')
137
+
138
+ # SAFE: Load from secure source
139
+ KEY = secrets_manager.get_secret('encryption_key')
140
+ ```
141
+
142
+ ### Key Rotation
143
+
144
+ **When to rotate:**
145
+ - Key compromise (immediate)
146
+ - Cryptoperiod expiration (time-based)
147
+ - After encrypting 2^35 bytes (for 64-bit block ciphers)
148
+ - Algorithm deprecation
149
+
150
+ **Rotation strategies:**
151
+
152
+ 1. **Re-encryption** (preferred): Decrypt with old key, re-encrypt with new
153
+ 2. **Versioning**: Tag encrypted items with key version, maintain multiple keys
154
+
155
+ ### Envelope Encryption
156
+
157
+ ```python
158
+ # Two-key structure:
159
+ # - Data Encryption Key (DEK): Encrypts actual data
160
+ # - Key Encryption Key (KEK): Encrypts the DEK
161
+
162
+ def encrypt_with_envelope(plaintext, kek):
163
+ # Generate random DEK
164
+ dek = secrets.token_bytes(32)
165
+
166
+ # Encrypt data with DEK
167
+ cipher = AES.new(dek, AES.MODE_GCM)
168
+ ciphertext, tag = cipher.encrypt_and_digest(plaintext)
169
+
170
+ # Encrypt DEK with KEK
171
+ kek_cipher = AES.new(kek, AES.MODE_GCM)
172
+ encrypted_dek, dek_tag = kek_cipher.encrypt_and_digest(dek)
173
+
174
+ # Store encrypted_dek with ciphertext
175
+ return {
176
+ 'ciphertext': ciphertext,
177
+ 'tag': tag,
178
+ 'encrypted_dek': encrypted_dek,
179
+ 'dek_tag': dek_tag,
180
+ 'nonce': cipher.nonce,
181
+ 'dek_nonce': kek_cipher.nonce
182
+ }
183
+ ```
184
+
185
+ ---
186
+
187
+ ## Hashing
188
+
189
+ ### Password Hashing
190
+
191
+ See `authentication.md` for password-specific hashing.
192
+
193
+ ### General Purpose Hashing
194
+
195
+ | Use Case | Algorithm |
196
+ |----------|-----------|
197
+ | Integrity verification | SHA-256 or SHA-3 |
198
+ | HMAC | HMAC-SHA-256 |
199
+ | Key derivation | HKDF, PBKDF2 |
200
+ | Content addressing | SHA-256 |
201
+
202
+ **Avoid for new systems:**
203
+ - MD5 (broken)
204
+ - SHA-1 (deprecated)
205
+
206
+ ```python
207
+ # For integrity/checksums
208
+ import hashlib
209
+ digest = hashlib.sha256(data).hexdigest()
210
+
211
+ # For authentication (HMAC)
212
+ import hmac
213
+ mac = hmac.new(key, data, hashlib.sha256).digest()
214
+ ```
215
+
216
+ ---
217
+
218
+ ## Common Vulnerabilities
219
+
220
+ ### Weak Algorithm Usage
221
+
222
+ ```python
223
+ # VULNERABLE: MD5 for security purposes
224
+ import hashlib
225
+ checksum = hashlib.md5(data).hexdigest()
226
+
227
+ # VULNERABLE: SHA1 for signatures
228
+ signature = hashlib.sha1(data + secret).hexdigest()
229
+
230
+ # SAFE: SHA-256
231
+ checksum = hashlib.sha256(data).hexdigest()
232
+ ```
233
+
234
+ ### Insufficient Key Size
235
+
236
+ ```python
237
+ # VULNERABLE: Short key
238
+ key = b'short_key' # 9 bytes
239
+
240
+ # SAFE: Adequate key length
241
+ key = secrets.token_bytes(32) # 256 bits
242
+ ```
243
+
244
+ ### Predictable IV/Nonce
245
+
246
+ ```python
247
+ # VULNERABLE: Reused or predictable nonce
248
+ nonce = b'\x00' * 12 # Static nonce
249
+
250
+ # VULNERABLE: Counter-based without persistence
251
+ nonce = counter.to_bytes(12, 'big')
252
+
253
+ # SAFE: Random nonce
254
+ nonce = secrets.token_bytes(12)
255
+ ```
256
+
257
+ ### ECB Mode Patterns
258
+
259
+ ```python
260
+ # VULNERABLE: ECB reveals patterns
261
+ cipher = AES.new(key, AES.MODE_ECB)
262
+
263
+ # SAFE: GCM hides patterns
264
+ cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
265
+ ```
266
+
267
+ ### Missing Authentication
268
+
269
+ ```python
270
+ # VULNERABLE: Encryption without authentication
271
+ cipher = AES.new(key, AES.MODE_CBC, iv=iv)
272
+ ciphertext = cipher.encrypt(pad(plaintext, 16))
273
+ # Vulnerable to bit-flipping, padding oracle
274
+
275
+ # SAFE: Authenticated encryption
276
+ cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
277
+ ciphertext, tag = cipher.encrypt_and_digest(plaintext)
278
+ ```
279
+
280
+ ---
281
+
282
+ ## Grep Patterns for Detection
283
+
284
+ ```bash
285
+ # Weak algorithms
286
+ grep -rn "MD5\|md5\|SHA1\|sha1\|DES\|des\|RC4\|rc4" --include="*.py" --include="*.js"
287
+ grep -rn "MODE_ECB\|ecb" --include="*.py" --include="*.js"
288
+
289
+ # Insecure random
290
+ grep -rn "Math\.random\|random\.random\|random\.randint" --include="*.py" --include="*.js"
291
+ grep -rn "mt_rand\|rand()" --include="*.php"
292
+
293
+ # Hardcoded keys
294
+ grep -rn "key\s*=\s*['\"]" --include="*.py" --include="*.js"
295
+ grep -rn "secret\s*=\s*['\"]" --include="*.py" --include="*.js"
296
+ grep -rn "AES\.new.*b'" --include="*.py"
297
+
298
+ # Static IVs/nonces
299
+ grep -rn "iv\s*=\s*b'\|nonce\s*=\s*b'" --include="*.py"
300
+ grep -rn "\\x00.*\\x00.*\\x00" --include="*.py"
301
+
302
+ # CBC without HMAC
303
+ grep -rn "MODE_CBC" --include="*.py" | grep -v "hmac\|mac\|tag"
304
+ ```
305
+
306
+ ---
307
+
308
+ ## Testing Checklist
309
+
310
+ - [ ] No hardcoded keys/secrets in source code
311
+ - [ ] Keys not committed to version control
312
+ - [ ] Using modern algorithms (AES-GCM, RSA-2048+, SHA-256+)
313
+ - [ ] CSPRNG used for all security-sensitive randomness
314
+ - [ ] Keys stored securely (HSM, KMS, secrets manager)
315
+ - [ ] Key rotation mechanism exists
316
+ - [ ] No ECB mode usage
317
+ - [ ] Authenticated encryption used (GCM, or encrypt-then-MAC)
318
+ - [ ] Adequate key lengths (256-bit symmetric, 2048+ RSA)
319
+ - [ ] IVs/nonces are random and never reused with same key
320
+
321
+ ---
322
+
323
+ ## References
324
+
325
+ - [OWASP Cryptographic Storage Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html)
326
+ - [OWASP Key Management Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Key_Management_Cheat_Sheet.html)
327
+ - [CWE-327: Use of Broken Crypto Algorithm](https://cwe.mitre.org/data/definitions/327.html)
328
+ - [CWE-330: Insufficient Randomness](https://cwe.mitre.org/data/definitions/330.html)
329
+ - [CWE-321: Hard-coded Cryptographic Key](https://cwe.mitre.org/data/definitions/321.html)
@@ -0,0 +1,398 @@
1
+ # Cross-Site Request Forgery (CSRF) Prevention Reference
2
+
3
+ ## Overview
4
+
5
+ CSRF attacks trick authenticated users into performing unintended actions by exploiting the browser's automatic credential transmission. The attack works because browsers automatically include cookies with requests to a domain, regardless of the request's origin.
6
+
7
+ ## Attack Scenario
8
+
9
+ ```html
10
+ <!-- Attacker's page -->
11
+ <img src="https://bank.com/transfer?to=attacker&amount=10000">
12
+
13
+ <!-- Or form submission -->
14
+ <form action="https://bank.com/transfer" method="POST" id="evil">
15
+ <input name="to" value="attacker">
16
+ <input name="amount" value="10000">
17
+ </form>
18
+ <script>document.getElementById('evil').submit();</script>
19
+ ```
20
+
21
+ When a logged-in user visits the attacker's page, their browser makes the request with their session cookie.
22
+
23
+ ---
24
+
25
+ ## Primary Defenses
26
+
27
+ ### 1. Synchronizer Token Pattern
28
+
29
+ Generate and validate a unique token per session.
30
+
31
+ ```python
32
+ import secrets
33
+
34
+ # Generate token on session creation
35
+ def create_csrf_token(session_id):
36
+ token = secrets.token_urlsafe(32)
37
+ store_csrf_token(session_id, token)
38
+ return token
39
+
40
+ # Include in forms
41
+ def render_form():
42
+ token = get_csrf_token(session.id)
43
+ return f'''
44
+ <form method="POST">
45
+ <input type="hidden" name="csrf_token" value="{token}">
46
+ <!-- form fields -->
47
+ </form>
48
+ '''
49
+
50
+ # Validate on submission
51
+ def validate_csrf():
52
+ submitted_token = request.form.get('csrf_token')
53
+ stored_token = get_csrf_token(session.id)
54
+
55
+ if not submitted_token or not secrets.compare_digest(submitted_token, stored_token):
56
+ raise CSRFValidationError()
57
+ ```
58
+
59
+ ### 2. Double Submit Cookie Pattern (Stateless)
60
+
61
+ Use a cryptographically signed token that doesn't require server-side storage.
62
+
63
+ ```python
64
+ import hmac
65
+ import hashlib
66
+ import time
67
+
68
+ SECRET_KEY = os.environ['CSRF_SECRET']
69
+
70
+ def generate_csrf_token(session_id):
71
+ """Generate signed token tied to session."""
72
+ timestamp = int(time.time())
73
+ message = f"{session_id}:{timestamp}"
74
+ signature = hmac.new(
75
+ SECRET_KEY.encode(),
76
+ message.encode(),
77
+ hashlib.sha256
78
+ ).hexdigest()
79
+ return f"{timestamp}:{signature}"
80
+
81
+ def validate_csrf_token(token, session_id):
82
+ """Validate token matches session and isn't expired."""
83
+ try:
84
+ timestamp, signature = token.split(':')
85
+ timestamp = int(timestamp)
86
+
87
+ # Check expiry (1 hour)
88
+ if time.time() - timestamp > 3600:
89
+ return False
90
+
91
+ # Verify signature
92
+ message = f"{session_id}:{timestamp}"
93
+ expected = hmac.new(
94
+ SECRET_KEY.encode(),
95
+ message.encode(),
96
+ hashlib.sha256
97
+ ).hexdigest()
98
+
99
+ return secrets.compare_digest(signature, expected)
100
+ except:
101
+ return False
102
+ ```
103
+
104
+ ### 3. SameSite Cookie Attribute
105
+
106
+ ```python
107
+ # Modern browsers respect SameSite attribute
108
+ response.set_cookie(
109
+ 'session_id',
110
+ value=session_id,
111
+ samesite='Lax', # Or 'Strict' for maximum protection
112
+ secure=True,
113
+ httponly=True
114
+ )
115
+ ```
116
+
117
+ **SameSite Values:**
118
+
119
+ | Value | Behavior |
120
+ |-------|----------|
121
+ | **Strict** | Never sent cross-site |
122
+ | **Lax** | Sent only with safe methods (GET) on top-level navigation |
123
+ | **None** | Always sent (requires Secure) |
124
+
125
+ ### 4. Custom Request Headers
126
+
127
+ For AJAX/API requests, require a custom header that can't be set cross-origin without CORS.
128
+
129
+ ```javascript
130
+ // Client
131
+ fetch('/api/transfer', {
132
+ method: 'POST',
133
+ headers: {
134
+ 'Content-Type': 'application/json',
135
+ 'X-CSRF-Token': getCSRFToken() // Or any custom header
136
+ },
137
+ body: JSON.stringify(data)
138
+ });
139
+ ```
140
+
141
+ ```python
142
+ # Server
143
+ @app.before_request
144
+ def verify_csrf_header():
145
+ if request.method in ('POST', 'PUT', 'DELETE', 'PATCH'):
146
+ token = request.headers.get('X-CSRF-Token')
147
+ if not validate_csrf_token(token):
148
+ return jsonify({'error': 'CSRF validation failed'}), 403
149
+ ```
150
+
151
+ ---
152
+
153
+ ## Framework Implementations
154
+
155
+ ### Django
156
+
157
+ ```python
158
+ # Enabled by default via middleware
159
+ MIDDLEWARE = [
160
+ 'django.middleware.csrf.CsrfViewMiddleware',
161
+ ...
162
+ ]
163
+
164
+ # In templates
165
+ <form method="POST">
166
+ {% csrf_token %}
167
+ ...
168
+ </form>
169
+
170
+ # For AJAX
171
+ <script>
172
+ const csrftoken = document.querySelector('[name=csrfmiddlewaretoken]').value;
173
+ fetch('/api/endpoint', {
174
+ method: 'POST',
175
+ headers: {'X-CSRFToken': csrftoken},
176
+ ...
177
+ });
178
+ </script>
179
+ ```
180
+
181
+ ### Flask
182
+
183
+ ```python
184
+ from flask_wtf.csrf import CSRFProtect
185
+
186
+ csrf = CSRFProtect(app)
187
+
188
+ # In templates
189
+ <form method="POST">
190
+ <input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
191
+ ...
192
+ </form>
193
+
194
+ # Exempt specific routes if needed (be careful!)
195
+ @csrf.exempt
196
+ @app.route('/webhook', methods=['POST'])
197
+ def webhook():
198
+ pass
199
+ ```
200
+
201
+ ### Express.js
202
+
203
+ ```javascript
204
+ const csrf = require('csurf');
205
+ const csrfProtection = csrf({ cookie: true });
206
+
207
+ app.use(csrfProtection);
208
+
209
+ app.get('/form', (req, res) => {
210
+ res.render('form', { csrfToken: req.csrfToken() });
211
+ });
212
+
213
+ // In template
214
+ <form method="POST">
215
+ <input type="hidden" name="_csrf" value="<%= csrfToken %>">
216
+ ...
217
+ </form>
218
+ ```
219
+
220
+ ---
221
+
222
+ ## Origin and Referer Validation
223
+
224
+ As a supplementary defense:
225
+
226
+ ```python
227
+ def verify_origin():
228
+ """Verify request origin matches expected domain."""
229
+ origin = request.headers.get('Origin')
230
+ referer = request.headers.get('Referer')
231
+
232
+ # Prefer Origin header
233
+ if origin:
234
+ if not is_trusted_origin(origin):
235
+ return False
236
+ return True
237
+
238
+ # Fall back to Referer
239
+ if referer:
240
+ parsed = urlparse(referer)
241
+ if not is_trusted_origin(f"{parsed.scheme}://{parsed.netloc}"):
242
+ return False
243
+ return True
244
+
245
+ # No origin info - could be same-origin or direct request
246
+ # Decision depends on security requirements
247
+ return True # Or False for strict validation
248
+
249
+ def is_trusted_origin(origin):
250
+ TRUSTED = {'https://example.com', 'https://admin.example.com'}
251
+ return origin in TRUSTED
252
+ ```
253
+
254
+ ---
255
+
256
+ ## Fetch Metadata Headers
257
+
258
+ Modern browsers send additional headers that indicate request context:
259
+
260
+ ```python
261
+ def check_fetch_metadata():
262
+ """Use Fetch Metadata headers for CSRF protection."""
263
+ sec_fetch_site = request.headers.get('Sec-Fetch-Site')
264
+ sec_fetch_mode = request.headers.get('Sec-Fetch-Mode')
265
+
266
+ # Allow same-origin requests
267
+ if sec_fetch_site == 'same-origin':
268
+ return True
269
+
270
+ # Allow navigation requests (clicking links)
271
+ if sec_fetch_site == 'none' and sec_fetch_mode == 'navigate':
272
+ return True
273
+
274
+ # Block cross-origin state-changing requests
275
+ if request.method in ('POST', 'PUT', 'DELETE', 'PATCH'):
276
+ if sec_fetch_site in ('cross-site', 'same-site'):
277
+ return False
278
+
279
+ return True
280
+ ```
281
+
282
+ ---
283
+
284
+ ## Client-Side CSRF
285
+
286
+ Modern variant where JavaScript code uses attacker-controlled input:
287
+
288
+ ```javascript
289
+ // VULNERABLE: URL fragment used in request
290
+ const param = window.location.hash.substring(1);
291
+ fetch(`/api/action?${param}`, { method: 'POST' });
292
+
293
+ // Attack: https://example.com#action=delete&target=all
294
+
295
+ // SAFE: Validate before use
296
+ const allowedActions = ['view', 'refresh'];
297
+ const param = window.location.hash.substring(1);
298
+ const parsed = new URLSearchParams(param);
299
+ if (allowedActions.includes(parsed.get('action'))) {
300
+ fetch(`/api/action?${param}`, { method: 'POST' });
301
+ }
302
+ ```
303
+
304
+ ---
305
+
306
+ ## Common Mistakes
307
+
308
+ ### 1. GET Requests for State Changes
309
+
310
+ ```python
311
+ # VULNERABLE: State change via GET
312
+ @app.route('/delete/<id>')
313
+ def delete_item(id):
314
+ Item.delete(id) # Attacker: <img src="/delete/123">
315
+
316
+ # SAFE: Use POST for state changes
317
+ @app.route('/delete/<id>', methods=['POST'])
318
+ @csrf_required
319
+ def delete_item(id):
320
+ Item.delete(id)
321
+ ```
322
+
323
+ ### 2. CORS Misconfiguration
324
+
325
+ ```python
326
+ # VULNERABLE: Allows any origin with credentials
327
+ @app.after_request
328
+ def add_cors(response):
329
+ response.headers['Access-Control-Allow-Origin'] = request.headers.get('Origin')
330
+ response.headers['Access-Control-Allow-Credentials'] = 'true'
331
+ return response
332
+
333
+ # SAFE: Explicit allowlist
334
+ ALLOWED_ORIGINS = {'https://trusted.com'}
335
+
336
+ @app.after_request
337
+ def add_cors(response):
338
+ origin = request.headers.get('Origin')
339
+ if origin in ALLOWED_ORIGINS:
340
+ response.headers['Access-Control-Allow-Origin'] = origin
341
+ response.headers['Access-Control-Allow-Credentials'] = 'true'
342
+ return response
343
+ ```
344
+
345
+ ### 3. Token in URL
346
+
347
+ ```html
348
+ <!-- VULNERABLE: Token exposed in URL (logged, cached, referer) -->
349
+ <a href="/action?csrf_token=abc123">Do Action</a>
350
+
351
+ <!-- SAFE: Token in form -->
352
+ <form method="POST" action="/action">
353
+ <input type="hidden" name="csrf_token" value="abc123">
354
+ <button type="submit">Do Action</button>
355
+ </form>
356
+ ```
357
+
358
+ ---
359
+
360
+ ## Grep Patterns for Detection
361
+
362
+ ```bash
363
+ # Missing CSRF protection
364
+ grep -rn "@app\.route.*POST\|@router\.post" --include="*.py" | grep -v "csrf"
365
+
366
+ # State-changing GET requests
367
+ grep -rn "\.delete\|\.update\|\.create" --include="*.py" | grep "GET"
368
+
369
+ # CORS wildcards
370
+ grep -rn "Access-Control-Allow-Origin.*\*" --include="*.py"
371
+
372
+ # Framework CSRF disabled
373
+ grep -rn "csrf_exempt\|WTF_CSRF_ENABLED.*False\|csrf.*disable" --include="*.py"
374
+ ```
375
+
376
+ ---
377
+
378
+ ## Testing Checklist
379
+
380
+ - [ ] All state-changing requests require POST/PUT/DELETE
381
+ - [ ] CSRF tokens included in all forms
382
+ - [ ] CSRF tokens validated on submission
383
+ - [ ] SameSite cookie attribute set (Lax or Strict)
384
+ - [ ] Custom headers required for API requests
385
+ - [ ] Origin/Referer validated as secondary defense
386
+ - [ ] Fetch Metadata headers checked where supported
387
+ - [ ] CORS properly configured (no wildcard with credentials)
388
+ - [ ] Token not exposed in URL/logs
389
+ - [ ] GET requests never change state
390
+
391
+ ---
392
+
393
+ ## References
394
+
395
+ - [OWASP CSRF Prevention Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html)
396
+ - [CWE-352: Cross-Site Request Forgery](https://cwe.mitre.org/data/definitions/352.html)
397
+ - [Fetch Metadata Headers](https://web.dev/fetch-metadata/)
398
+ - [SameSite Cookies Explained](https://web.dev/samesite-cookies-explained/)