cli-jaw 0.1.6 → 0.1.8

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 (746) hide show
  1. package/README.ko.md +68 -71
  2. package/README.md +123 -92
  3. package/README.zh-CN.md +68 -73
  4. package/dist/bin/cli-claw.js +96 -0
  5. package/dist/bin/cli-claw.js.map +1 -0
  6. package/dist/bin/cli-jaw.js +0 -0
  7. package/dist/bin/commands/doctor.js +3 -0
  8. package/dist/bin/commands/doctor.js.map +1 -1
  9. package/dist/bin/commands/init.js +36 -19
  10. package/dist/bin/commands/init.js.map +1 -1
  11. package/dist/bin/postinstall.js +175 -104
  12. package/dist/bin/postinstall.js.map +1 -1
  13. package/dist/lib/mcp-sync.js +43 -4
  14. package/dist/lib/mcp-sync.js.map +1 -1
  15. package/dist/server.js +22 -103
  16. package/dist/server.js.map +1 -1
  17. package/dist/src/cli/acp-client.js +1 -1
  18. package/dist/src/cli/command-context.js +73 -0
  19. package/dist/src/cli/command-context.js.map +1 -0
  20. package/dist/src/core/db.js +1 -1
  21. package/dist/src/memory/heartbeat.js +2 -1
  22. package/dist/src/memory/heartbeat.js.map +1 -1
  23. package/dist/src/orchestrator/collect.js +53 -0
  24. package/dist/src/orchestrator/collect.js.map +1 -0
  25. package/dist/src/orchestrator/gateway.js +49 -0
  26. package/dist/src/orchestrator/gateway.js.map +1 -0
  27. package/dist/src/telegram/bot.js +32 -119
  28. package/dist/src/telegram/bot.js.map +1 -1
  29. package/package.json +7 -7
  30. package/public/css/sidebar.css +14 -0
  31. package/public/dist/bundle.js +21 -21
  32. package/public/dist/bundle.js.map +3 -3
  33. package/public/index.html +2 -2
  34. package/public/js/features/settings.js +1 -2
  35. package/public/js/main.js +0 -1
  36. package/scripts/check-copilot-gap.js +57 -0
  37. package/scripts/check-deps-offline.mjs +75 -0
  38. package/scripts/check-deps-online.sh +26 -0
  39. package/scripts/i18n-registry.py +208 -0
  40. package/scripts/postinstall-guard.cjs +63 -0
  41. package/scripts/release.sh +30 -0
  42. package/skills_ref/1password/SKILL.md +0 -70
  43. package/skills_ref/agents-sdk/SKILL.md +0 -155
  44. package/skills_ref/agents-sdk/references/callable.md +0 -92
  45. package/skills_ref/agents-sdk/references/codemode.md +0 -207
  46. package/skills_ref/agents-sdk/references/email.md +0 -146
  47. package/skills_ref/agents-sdk/references/mcp.md +0 -154
  48. package/skills_ref/agents-sdk/references/state-scheduling.md +0 -164
  49. package/skills_ref/agents-sdk/references/streaming-chat.md +0 -178
  50. package/skills_ref/agents-sdk/references/workflows.md +0 -132
  51. package/skills_ref/algorithmic-art/LICENSE.txt +0 -202
  52. package/skills_ref/algorithmic-art/SKILL.md +0 -405
  53. package/skills_ref/algorithmic-art/templates/generator_template.js +0 -223
  54. package/skills_ref/algorithmic-art/templates/viewer.html +0 -599
  55. package/skills_ref/apple-notes/SKILL.md +0 -77
  56. package/skills_ref/apple-reminders/SKILL.md +0 -118
  57. package/skills_ref/atlas/SKILL.md +0 -99
  58. package/skills_ref/brainstorming/SKILL.md +0 -96
  59. package/skills_ref/browser/SKILL.md +0 -179
  60. package/skills_ref/canvas-design/LICENSE.txt +0 -202
  61. package/skills_ref/canvas-design/SKILL.md +0 -130
  62. package/skills_ref/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
  63. package/skills_ref/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  64. package/skills_ref/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  65. package/skills_ref/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -93
  66. package/skills_ref/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  67. package/skills_ref/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -93
  68. package/skills_ref/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  69. package/skills_ref/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  70. package/skills_ref/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -93
  71. package/skills_ref/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  72. package/skills_ref/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  73. package/skills_ref/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  74. package/skills_ref/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -93
  75. package/skills_ref/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  76. package/skills_ref/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -93
  77. package/skills_ref/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  78. package/skills_ref/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -94
  79. package/skills_ref/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  80. package/skills_ref/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  81. package/skills_ref/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -93
  82. package/skills_ref/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  83. package/skills_ref/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -93
  84. package/skills_ref/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  85. package/skills_ref/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  86. package/skills_ref/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -93
  87. package/skills_ref/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  88. package/skills_ref/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  89. package/skills_ref/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  90. package/skills_ref/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  91. package/skills_ref/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  92. package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  93. package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  94. package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  95. package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -93
  96. package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  97. package/skills_ref/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  98. package/skills_ref/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  99. package/skills_ref/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -93
  100. package/skills_ref/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  101. package/skills_ref/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  102. package/skills_ref/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -93
  103. package/skills_ref/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  104. package/skills_ref/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  105. package/skills_ref/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  106. package/skills_ref/canvas-design/canvas-fonts/Jura-OFL.txt +0 -93
  107. package/skills_ref/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
  108. package/skills_ref/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  109. package/skills_ref/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  110. package/skills_ref/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  111. package/skills_ref/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  112. package/skills_ref/canvas-design/canvas-fonts/Lora-OFL.txt +0 -93
  113. package/skills_ref/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  114. package/skills_ref/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  115. package/skills_ref/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -93
  116. package/skills_ref/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  117. package/skills_ref/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -93
  118. package/skills_ref/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  119. package/skills_ref/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  120. package/skills_ref/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -93
  121. package/skills_ref/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  122. package/skills_ref/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  123. package/skills_ref/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -93
  124. package/skills_ref/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
  125. package/skills_ref/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  126. package/skills_ref/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  127. package/skills_ref/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -93
  128. package/skills_ref/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  129. package/skills_ref/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -93
  130. package/skills_ref/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  131. package/skills_ref/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  132. package/skills_ref/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -93
  133. package/skills_ref/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  134. package/skills_ref/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -93
  135. package/skills_ref/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  136. package/skills_ref/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  137. package/skills_ref/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  138. package/skills_ref/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  139. package/skills_ref/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -93
  140. package/skills_ref/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  141. package/skills_ref/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -93
  142. package/skills_ref/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  143. package/skills_ref/changelog-generator/SKILL.md +0 -104
  144. package/skills_ref/cloudflare-deploy/SKILL.md +0 -207
  145. package/skills_ref/codebase-orientation/SKILL.md +0 -29
  146. package/skills_ref/config-file-explainer/SKILL.md +0 -26
  147. package/skills_ref/context-compression/SKILL.md +0 -265
  148. package/skills_ref/context-compression/references/evaluation-framework.md +0 -213
  149. package/skills_ref/context-compression/scripts/compression_evaluator.py +0 -658
  150. package/skills_ref/data-structure-chooser/SKILL.md +0 -26
  151. package/skills_ref/debugging-checklist/SKILL.md +0 -26
  152. package/skills_ref/debugging-helpers/CREATION-LOG.md +0 -119
  153. package/skills_ref/debugging-helpers/SKILL.md +0 -296
  154. package/skills_ref/debugging-helpers/condition-based-waiting-example.ts +0 -158
  155. package/skills_ref/debugging-helpers/condition-based-waiting.md +0 -115
  156. package/skills_ref/debugging-helpers/defense-in-depth.md +0 -122
  157. package/skills_ref/debugging-helpers/find-polluter.sh +0 -63
  158. package/skills_ref/debugging-helpers/root-cause-tracing.md +0 -169
  159. package/skills_ref/debugging-helpers/test-academic.md +0 -14
  160. package/skills_ref/debugging-helpers/test-pressure-1.md +0 -58
  161. package/skills_ref/debugging-helpers/test-pressure-2.md +0 -68
  162. package/skills_ref/debugging-helpers/test-pressure-3.md +0 -69
  163. package/skills_ref/deep-research/.env.example +0 -7
  164. package/skills_ref/deep-research/README.md +0 -246
  165. package/skills_ref/deep-research/SKILL.md +0 -106
  166. package/skills_ref/deep-research/requirements.txt +0 -2
  167. package/skills_ref/deep-research/scripts/research.py +0 -692
  168. package/skills_ref/dependency-install-helper/SKILL.md +0 -26
  169. package/skills_ref/dev/SKILL.md +0 -65
  170. package/skills_ref/dev-backend/SKILL.md +0 -61
  171. package/skills_ref/dev-data/SKILL.md +0 -76
  172. package/skills_ref/dev-frontend/LICENSE.txt +0 -177
  173. package/skills_ref/dev-frontend/SKILL.md +0 -42
  174. package/skills_ref/dev-testing/LICENSE.txt +0 -202
  175. package/skills_ref/dev-testing/SKILL.md +0 -96
  176. package/skills_ref/dev-testing/examples/console_logging.py +0 -35
  177. package/skills_ref/dev-testing/examples/element_discovery.py +0 -40
  178. package/skills_ref/dev-testing/examples/static_html_automation.py +0 -33
  179. package/skills_ref/dev-testing/scripts/with_server.py +0 -106
  180. package/skills_ref/develop-web-game/SKILL.md +0 -149
  181. package/skills_ref/differential-review/.claude-plugin/plugin.json +0 -10
  182. package/skills_ref/differential-review/README.md +0 -109
  183. package/skills_ref/differential-review/commands/diff-review.md +0 -21
  184. package/skills_ref/differential-review/skills/differential-review/SKILL.md +0 -220
  185. package/skills_ref/differential-review/skills/differential-review/adversarial.md +0 -203
  186. package/skills_ref/differential-review/skills/differential-review/methodology.md +0 -234
  187. package/skills_ref/differential-review/skills/differential-review/patterns.md +0 -300
  188. package/skills_ref/differential-review/skills/differential-review/reporting.md +0 -369
  189. package/skills_ref/dispatching-parallel-agents/SKILL.md +0 -180
  190. package/skills_ref/doc-coauthoring/SKILL.md +0 -375
  191. package/skills_ref/docx/LICENSE.txt +0 -30
  192. package/skills_ref/docx/SKILL.md +0 -481
  193. package/skills_ref/docx/scripts/__init__.py +0 -1
  194. package/skills_ref/docx/scripts/accept_changes.py +0 -135
  195. package/skills_ref/docx/scripts/comment.py +0 -318
  196. package/skills_ref/docx/scripts/office/helpers/__init__.py +0 -0
  197. package/skills_ref/docx/scripts/office/helpers/merge_runs.py +0 -199
  198. package/skills_ref/docx/scripts/office/helpers/simplify_redlines.py +0 -197
  199. package/skills_ref/docx/scripts/office/pack.py +0 -159
  200. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  201. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  202. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  203. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  204. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  205. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  206. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  207. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  208. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  209. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  210. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  211. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  212. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  213. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  214. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  215. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  216. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  217. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  218. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  219. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  220. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  221. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  222. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  223. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  224. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  225. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  226. package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  227. package/skills_ref/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  228. package/skills_ref/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  229. package/skills_ref/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  230. package/skills_ref/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  231. package/skills_ref/docx/scripts/office/schemas/mce/mc.xsd +0 -75
  232. package/skills_ref/docx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
  233. package/skills_ref/docx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
  234. package/skills_ref/docx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
  235. package/skills_ref/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  236. package/skills_ref/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  237. package/skills_ref/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  238. package/skills_ref/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  239. package/skills_ref/docx/scripts/office/soffice.py +0 -183
  240. package/skills_ref/docx/scripts/office/unpack.py +0 -132
  241. package/skills_ref/docx/scripts/office/validate.py +0 -111
  242. package/skills_ref/docx/scripts/office/validators/__init__.py +0 -15
  243. package/skills_ref/docx/scripts/office/validators/base.py +0 -847
  244. package/skills_ref/docx/scripts/office/validators/docx.py +0 -446
  245. package/skills_ref/docx/scripts/office/validators/pptx.py +0 -275
  246. package/skills_ref/docx/scripts/office/validators/redlining.py +0 -247
  247. package/skills_ref/docx/scripts/templates/comments.xml +0 -3
  248. package/skills_ref/docx/scripts/templates/commentsExtended.xml +0 -3
  249. package/skills_ref/docx/scripts/templates/commentsExtensible.xml +0 -3
  250. package/skills_ref/docx/scripts/templates/commentsIds.xml +0 -3
  251. package/skills_ref/docx/scripts/templates/people.xml +0 -3
  252. package/skills_ref/durable-objects/SKILL.md +0 -186
  253. package/skills_ref/durable-objects/references/rules.md +0 -286
  254. package/skills_ref/durable-objects/references/testing.md +0 -264
  255. package/skills_ref/durable-objects/references/workers.md +0 -346
  256. package/skills_ref/email-draft-polish/SKILL.md +0 -24
  257. package/skills_ref/error-message-explainer/SKILL.md +0 -27
  258. package/skills_ref/fal-image-edit/SKILL.md +0 -249
  259. package/skills_ref/fal-image-edit/scripts/edit-image.sh +0 -199
  260. package/skills_ref/figma-implement-design/SKILL.md +0 -264
  261. package/skills_ref/git-worktrees/SKILL.md +0 -218
  262. package/skills_ref/github/SKILL.md +0 -210
  263. package/skills_ref/gog/SKILL.md +0 -116
  264. package/skills_ref/goplaces/SKILL.md +0 -52
  265. package/skills_ref/himalaya/SKILL.md +0 -257
  266. package/skills_ref/hugging-face-cli/SKILL.md +0 -186
  267. package/skills_ref/hugging-face-cli/references/commands.md +0 -954
  268. package/skills_ref/hugging-face-cli/references/examples.md +0 -374
  269. package/skills_ref/hugging-face-evaluation/SKILL.md +0 -651
  270. package/skills_ref/hugging-face-evaluation/examples/.env.example +0 -7
  271. package/skills_ref/hugging-face-evaluation/examples/USAGE_EXAMPLES.md +0 -382
  272. package/skills_ref/hugging-face-evaluation/examples/artificial_analysis_to_hub.py +0 -141
  273. package/skills_ref/hugging-face-evaluation/examples/example_readme_tables.md +0 -135
  274. package/skills_ref/hugging-face-evaluation/examples/metric_mapping.json +0 -50
  275. package/skills_ref/hugging-face-evaluation/requirements.txt +0 -20
  276. package/skills_ref/hugging-face-evaluation/scripts/evaluation_manager.py +0 -1374
  277. package/skills_ref/hugging-face-evaluation/scripts/inspect_eval_uv.py +0 -104
  278. package/skills_ref/hugging-face-evaluation/scripts/inspect_vllm_uv.py +0 -317
  279. package/skills_ref/hugging-face-evaluation/scripts/lighteval_vllm_uv.py +0 -303
  280. package/skills_ref/hugging-face-evaluation/scripts/run_eval_job.py +0 -98
  281. package/skills_ref/hugging-face-evaluation/scripts/run_vllm_eval_job.py +0 -331
  282. package/skills_ref/hugging-face-evaluation/scripts/test_extraction.py +0 -206
  283. package/skills_ref/hugging-face-model-trainer/SKILL.md +0 -718
  284. package/skills_ref/hugging-face-model-trainer/references/gguf_conversion.md +0 -296
  285. package/skills_ref/hugging-face-model-trainer/references/hardware_guide.md +0 -283
  286. package/skills_ref/hugging-face-model-trainer/references/hub_saving.md +0 -364
  287. package/skills_ref/hugging-face-model-trainer/references/reliability_principles.md +0 -371
  288. package/skills_ref/hugging-face-model-trainer/references/trackio_guide.md +0 -189
  289. package/skills_ref/hugging-face-model-trainer/references/training_methods.md +0 -150
  290. package/skills_ref/hugging-face-model-trainer/references/training_patterns.md +0 -203
  291. package/skills_ref/hugging-face-model-trainer/references/troubleshooting.md +0 -282
  292. package/skills_ref/hugging-face-model-trainer/references/unsloth.md +0 -313
  293. package/skills_ref/hugging-face-model-trainer/scripts/convert_to_gguf.py +0 -424
  294. package/skills_ref/hugging-face-model-trainer/scripts/dataset_inspector.py +0 -417
  295. package/skills_ref/hugging-face-model-trainer/scripts/estimate_cost.py +0 -150
  296. package/skills_ref/hugging-face-model-trainer/scripts/train_dpo_example.py +0 -106
  297. package/skills_ref/hugging-face-model-trainer/scripts/train_grpo_example.py +0 -89
  298. package/skills_ref/hugging-face-model-trainer/scripts/train_sft_example.py +0 -122
  299. package/skills_ref/hugging-face-model-trainer/scripts/unsloth_sft_example.py +0 -512
  300. package/skills_ref/imagegen/SKILL.md +0 -174
  301. package/skills_ref/insecure-defaults/.claude-plugin/plugin.json +0 -10
  302. package/skills_ref/insecure-defaults/README.md +0 -45
  303. package/skills_ref/insecure-defaults/skills/insecure-defaults/SKILL.md +0 -117
  304. package/skills_ref/insecure-defaults/skills/insecure-defaults/references/examples.md +0 -409
  305. package/skills_ref/jupyter-notebook/SKILL.md +0 -107
  306. package/skills_ref/linear/SKILL.md +0 -87
  307. package/skills_ref/linter-fix-guide/SKILL.md +0 -27
  308. package/skills_ref/log-summarizer/SKILL.md +0 -27
  309. package/skills_ref/mcp-builder/LICENSE.txt +0 -202
  310. package/skills_ref/mcp-builder/SKILL.md +0 -236
  311. package/skills_ref/mcp-builder/reference/evaluation.md +0 -602
  312. package/skills_ref/mcp-builder/reference/mcp_best_practices.md +0 -249
  313. package/skills_ref/mcp-builder/reference/node_mcp_server.md +0 -970
  314. package/skills_ref/mcp-builder/reference/python_mcp_server.md +0 -719
  315. package/skills_ref/mcp-builder/scripts/connections.py +0 -151
  316. package/skills_ref/mcp-builder/scripts/evaluation.py +0 -373
  317. package/skills_ref/mcp-builder/scripts/example_evaluation.xml +0 -22
  318. package/skills_ref/mcp-builder/scripts/requirements.txt +0 -2
  319. package/skills_ref/memory/SKILL.md +0 -129
  320. package/skills_ref/modern-python/.claude-plugin/plugin.json +0 -10
  321. package/skills_ref/modern-python/README.md +0 -66
  322. package/skills_ref/modern-python/hooks/hooks.json +0 -16
  323. package/skills_ref/modern-python/hooks/setup-shims.bats +0 -70
  324. package/skills_ref/modern-python/hooks/setup-shims.sh +0 -24
  325. package/skills_ref/modern-python/hooks/shims/pip +0 -27
  326. package/skills_ref/modern-python/hooks/shims/pip-shim.bats +0 -45
  327. package/skills_ref/modern-python/hooks/shims/pip3 +0 -27
  328. package/skills_ref/modern-python/hooks/shims/pipx +0 -41
  329. package/skills_ref/modern-python/hooks/shims/pipx-shim.bats +0 -64
  330. package/skills_ref/modern-python/hooks/shims/python +0 -26
  331. package/skills_ref/modern-python/hooks/shims/python-shim.bats +0 -53
  332. package/skills_ref/modern-python/hooks/shims/python3 +0 -26
  333. package/skills_ref/modern-python/hooks/shims/uv +0 -27
  334. package/skills_ref/modern-python/hooks/shims/uv-shim.bats +0 -47
  335. package/skills_ref/modern-python/skills/modern-python/SKILL.md +0 -333
  336. package/skills_ref/modern-python/skills/modern-python/references/dependabot.md +0 -43
  337. package/skills_ref/modern-python/skills/modern-python/references/migration-checklist.md +0 -141
  338. package/skills_ref/modern-python/skills/modern-python/references/pep723-scripts.md +0 -259
  339. package/skills_ref/modern-python/skills/modern-python/references/prek.md +0 -211
  340. package/skills_ref/modern-python/skills/modern-python/references/pyproject.md +0 -254
  341. package/skills_ref/modern-python/skills/modern-python/references/ruff-config.md +0 -240
  342. package/skills_ref/modern-python/skills/modern-python/references/security-setup.md +0 -255
  343. package/skills_ref/modern-python/skills/modern-python/references/testing.md +0 -284
  344. package/skills_ref/modern-python/skills/modern-python/references/uv-commands.md +0 -200
  345. package/skills_ref/modern-python/skills/modern-python/templates/dependabot.yml +0 -36
  346. package/skills_ref/modern-python/skills/modern-python/templates/pre-commit-config.yaml +0 -66
  347. package/skills_ref/nano-banana-pro/SKILL.md +0 -58
  348. package/skills_ref/netlify-deploy/SKILL.md +0 -233
  349. package/skills_ref/notion/SKILL.md +0 -304
  350. package/skills_ref/notion-knowledge-capture/SKILL.md +0 -56
  351. package/skills_ref/notion-meeting-intelligence/SKILL.md +0 -60
  352. package/skills_ref/notion-research-documentation/SKILL.md +0 -59
  353. package/skills_ref/notion-spec-to-implementation/SKILL.md +0 -58
  354. package/skills_ref/obsidian/SKILL.md +0 -81
  355. package/skills_ref/openai-docs/SKILL.md +0 -56
  356. package/skills_ref/openhue/SKILL.md +0 -112
  357. package/skills_ref/pdf/SKILL.md +0 -69
  358. package/skills_ref/postgres/README.md +0 -77
  359. package/skills_ref/postgres/SKILL.md +0 -129
  360. package/skills_ref/postgres/connections.example.json +0 -34
  361. package/skills_ref/postgres/requirements.txt +0 -1
  362. package/skills_ref/postgres/scripts/query.py +0 -262
  363. package/skills_ref/pptx/LICENSE.txt +0 -30
  364. package/skills_ref/pptx/SKILL.md +0 -232
  365. package/skills_ref/pptx/editing.md +0 -205
  366. package/skills_ref/pptx/pptxgenjs.md +0 -420
  367. package/skills_ref/pptx/scripts/__init__.py +0 -0
  368. package/skills_ref/pptx/scripts/add_slide.py +0 -195
  369. package/skills_ref/pptx/scripts/clean.py +0 -286
  370. package/skills_ref/pptx/scripts/office/helpers/__init__.py +0 -0
  371. package/skills_ref/pptx/scripts/office/helpers/merge_runs.py +0 -199
  372. package/skills_ref/pptx/scripts/office/helpers/simplify_redlines.py +0 -197
  373. package/skills_ref/pptx/scripts/office/pack.py +0 -159
  374. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  375. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  376. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  377. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  378. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  379. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  380. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  381. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  382. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  383. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  384. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  385. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  386. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  387. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  388. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  389. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  390. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  391. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  392. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  393. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  394. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  395. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  396. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  397. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  398. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  399. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  400. package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  401. package/skills_ref/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  402. package/skills_ref/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  403. package/skills_ref/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  404. package/skills_ref/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  405. package/skills_ref/pptx/scripts/office/schemas/mce/mc.xsd +0 -75
  406. package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
  407. package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
  408. package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
  409. package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  410. package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  411. package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  412. package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  413. package/skills_ref/pptx/scripts/office/soffice.py +0 -183
  414. package/skills_ref/pptx/scripts/office/unpack.py +0 -132
  415. package/skills_ref/pptx/scripts/office/validate.py +0 -111
  416. package/skills_ref/pptx/scripts/office/validators/__init__.py +0 -15
  417. package/skills_ref/pptx/scripts/office/validators/base.py +0 -847
  418. package/skills_ref/pptx/scripts/office/validators/docx.py +0 -446
  419. package/skills_ref/pptx/scripts/office/validators/pptx.py +0 -275
  420. package/skills_ref/pptx/scripts/office/validators/redlining.py +0 -247
  421. package/skills_ref/pptx/scripts/thumbnail.py +0 -289
  422. package/skills_ref/property-based-testing/.claude-plugin/plugin.json +0 -9
  423. package/skills_ref/property-based-testing/README.md +0 -47
  424. package/skills_ref/property-based-testing/skills/property-based-testing/README.md +0 -88
  425. package/skills_ref/property-based-testing/skills/property-based-testing/SKILL.md +0 -123
  426. package/skills_ref/property-based-testing/skills/property-based-testing/references/design.md +0 -191
  427. package/skills_ref/property-based-testing/skills/property-based-testing/references/generating.md +0 -204
  428. package/skills_ref/property-based-testing/skills/property-based-testing/references/interpreting-failures.md +0 -239
  429. package/skills_ref/property-based-testing/skills/property-based-testing/references/libraries.md +0 -130
  430. package/skills_ref/property-based-testing/skills/property-based-testing/references/refactoring.md +0 -181
  431. package/skills_ref/property-based-testing/skills/property-based-testing/references/reviewing.md +0 -209
  432. package/skills_ref/property-based-testing/skills/property-based-testing/references/strategies.md +0 -124
  433. package/skills_ref/react-best-practices/AGENTS.md +0 -2934
  434. package/skills_ref/react-best-practices/README.md +0 -123
  435. package/skills_ref/react-best-practices/SKILL.md +0 -136
  436. package/skills_ref/react-best-practices/metadata.json +0 -15
  437. package/skills_ref/react-best-practices/rules/_sections.md +0 -46
  438. package/skills_ref/react-best-practices/rules/_template.md +0 -28
  439. package/skills_ref/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  440. package/skills_ref/react-best-practices/rules/advanced-init-once.md +0 -42
  441. package/skills_ref/react-best-practices/rules/advanced-use-latest.md +0 -39
  442. package/skills_ref/react-best-practices/rules/async-api-routes.md +0 -38
  443. package/skills_ref/react-best-practices/rules/async-defer-await.md +0 -80
  444. package/skills_ref/react-best-practices/rules/async-dependencies.md +0 -51
  445. package/skills_ref/react-best-practices/rules/async-parallel.md +0 -28
  446. package/skills_ref/react-best-practices/rules/async-suspense-boundaries.md +0 -99
  447. package/skills_ref/react-best-practices/rules/bundle-barrel-imports.md +0 -59
  448. package/skills_ref/react-best-practices/rules/bundle-conditional.md +0 -31
  449. package/skills_ref/react-best-practices/rules/bundle-defer-third-party.md +0 -49
  450. package/skills_ref/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  451. package/skills_ref/react-best-practices/rules/bundle-preload.md +0 -50
  452. package/skills_ref/react-best-practices/rules/client-event-listeners.md +0 -74
  453. package/skills_ref/react-best-practices/rules/client-localstorage-schema.md +0 -71
  454. package/skills_ref/react-best-practices/rules/client-passive-event-listeners.md +0 -48
  455. package/skills_ref/react-best-practices/rules/client-swr-dedup.md +0 -56
  456. package/skills_ref/react-best-practices/rules/js-batch-dom-css.md +0 -107
  457. package/skills_ref/react-best-practices/rules/js-cache-function-results.md +0 -80
  458. package/skills_ref/react-best-practices/rules/js-cache-property-access.md +0 -28
  459. package/skills_ref/react-best-practices/rules/js-cache-storage.md +0 -70
  460. package/skills_ref/react-best-practices/rules/js-combine-iterations.md +0 -32
  461. package/skills_ref/react-best-practices/rules/js-early-exit.md +0 -50
  462. package/skills_ref/react-best-practices/rules/js-hoist-regexp.md +0 -45
  463. package/skills_ref/react-best-practices/rules/js-index-maps.md +0 -37
  464. package/skills_ref/react-best-practices/rules/js-length-check-first.md +0 -49
  465. package/skills_ref/react-best-practices/rules/js-min-max-loop.md +0 -82
  466. package/skills_ref/react-best-practices/rules/js-set-map-lookups.md +0 -24
  467. package/skills_ref/react-best-practices/rules/js-tosorted-immutable.md +0 -57
  468. package/skills_ref/react-best-practices/rules/rendering-activity.md +0 -26
  469. package/skills_ref/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  470. package/skills_ref/react-best-practices/rules/rendering-conditional-render.md +0 -40
  471. package/skills_ref/react-best-practices/rules/rendering-content-visibility.md +0 -38
  472. package/skills_ref/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  473. package/skills_ref/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  474. package/skills_ref/react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  475. package/skills_ref/react-best-practices/rules/rendering-svg-precision.md +0 -28
  476. package/skills_ref/react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  477. package/skills_ref/react-best-practices/rules/rerender-defer-reads.md +0 -39
  478. package/skills_ref/react-best-practices/rules/rerender-dependencies.md +0 -45
  479. package/skills_ref/react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  480. package/skills_ref/react-best-practices/rules/rerender-derived-state.md +0 -29
  481. package/skills_ref/react-best-practices/rules/rerender-functional-setstate.md +0 -74
  482. package/skills_ref/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  483. package/skills_ref/react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  484. package/skills_ref/react-best-practices/rules/rerender-memo.md +0 -44
  485. package/skills_ref/react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  486. package/skills_ref/react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  487. package/skills_ref/react-best-practices/rules/rerender-transitions.md +0 -40
  488. package/skills_ref/react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  489. package/skills_ref/react-best-practices/rules/server-after-nonblocking.md +0 -73
  490. package/skills_ref/react-best-practices/rules/server-auth-actions.md +0 -96
  491. package/skills_ref/react-best-practices/rules/server-cache-lru.md +0 -41
  492. package/skills_ref/react-best-practices/rules/server-cache-react.md +0 -76
  493. package/skills_ref/react-best-practices/rules/server-dedup-props.md +0 -65
  494. package/skills_ref/react-best-practices/rules/server-parallel-fetching.md +0 -83
  495. package/skills_ref/react-best-practices/rules/server-serialization.md +0 -38
  496. package/skills_ref/receiving-code-review/SKILL.md +0 -213
  497. package/skills_ref/registry.json +0 -1493
  498. package/skills_ref/render-deploy/SKILL.md +0 -462
  499. package/skills_ref/requesting-code-review/SKILL.md +0 -105
  500. package/skills_ref/requesting-code-review/code-reviewer.md +0 -146
  501. package/skills_ref/screen-capture/SKILL.md +0 -162
  502. package/skills_ref/security-best-practices/LICENSE.txt +0 -201
  503. package/skills_ref/security-best-practices/SKILL.md +0 -86
  504. package/skills_ref/security-best-practices/agents/openai.yaml +0 -4
  505. package/skills_ref/security-best-practices/references/golang-general-backend-security.md +0 -826
  506. package/skills_ref/security-best-practices/references/javascript-express-web-server-security.md +0 -1158
  507. package/skills_ref/security-best-practices/references/javascript-general-web-frontend-security.md +0 -747
  508. package/skills_ref/security-best-practices/references/javascript-jquery-web-frontend-security.md +0 -678
  509. package/skills_ref/security-best-practices/references/javascript-typescript-nextjs-web-server-security.md +0 -1144
  510. package/skills_ref/security-best-practices/references/javascript-typescript-react-web-frontend-security.md +0 -990
  511. package/skills_ref/security-best-practices/references/javascript-typescript-vue-web-frontend-security.md +0 -791
  512. package/skills_ref/security-best-practices/references/python-django-web-server-security.md +0 -882
  513. package/skills_ref/security-best-practices/references/python-fastapi-web-server-security.md +0 -1036
  514. package/skills_ref/security-best-practices/references/python-flask-web-server-security.md +0 -705
  515. package/skills_ref/security-ownership-map/LICENSE.txt +0 -201
  516. package/skills_ref/security-ownership-map/SKILL.md +0 -206
  517. package/skills_ref/security-ownership-map/agents/openai.yaml +0 -4
  518. package/skills_ref/security-ownership-map/references/neo4j-import.md +0 -60
  519. package/skills_ref/security-ownership-map/scripts/build_ownership_map.py +0 -956
  520. package/skills_ref/security-ownership-map/scripts/community_maintainers.py +0 -544
  521. package/skills_ref/security-ownership-map/scripts/query_ownership.py +0 -483
  522. package/skills_ref/security-ownership-map/scripts/run_ownership_map.py +0 -200
  523. package/skills_ref/security-threat-model/LICENSE.txt +0 -201
  524. package/skills_ref/security-threat-model/SKILL.md +0 -81
  525. package/skills_ref/security-threat-model/agents/openai.yaml +0 -4
  526. package/skills_ref/security-threat-model/references/prompt-template.md +0 -255
  527. package/skills_ref/security-threat-model/references/security-controls-and-assets.md +0 -32
  528. package/skills_ref/sentry/SKILL.md +0 -123
  529. package/skills_ref/skill-creator/SKILL.md +0 -372
  530. package/skills_ref/sora/SKILL.md +0 -153
  531. package/skills_ref/speech/SKILL.md +0 -144
  532. package/skills_ref/spotify-player/SKILL.md +0 -64
  533. package/skills_ref/static-analysis/.claude-plugin/plugin.json +0 -8
  534. package/skills_ref/static-analysis/README.md +0 -65
  535. package/skills_ref/static-analysis/agents/semgrep-scanner.md +0 -71
  536. package/skills_ref/static-analysis/agents/semgrep-triager.md +0 -107
  537. package/skills_ref/static-analysis/skills/codeql/SKILL.md +0 -119
  538. package/skills_ref/static-analysis/skills/codeql/references/diagnostic-query-templates.md +0 -339
  539. package/skills_ref/static-analysis/skills/codeql/references/language-details.md +0 -207
  540. package/skills_ref/static-analysis/skills/codeql/references/performance-tuning.md +0 -111
  541. package/skills_ref/static-analysis/skills/codeql/references/ruleset-catalog.md +0 -63
  542. package/skills_ref/static-analysis/skills/codeql/references/threat-models.md +0 -44
  543. package/skills_ref/static-analysis/skills/codeql/workflows/build-database.md +0 -669
  544. package/skills_ref/static-analysis/skills/codeql/workflows/create-data-extensions.md +0 -536
  545. package/skills_ref/static-analysis/skills/codeql/workflows/run-analysis.md +0 -436
  546. package/skills_ref/static-analysis/skills/sarif-parsing/SKILL.md +0 -479
  547. package/skills_ref/static-analysis/skills/sarif-parsing/resources/jq-queries.md +0 -162
  548. package/skills_ref/static-analysis/skills/sarif-parsing/resources/sarif_helpers.py +0 -331
  549. package/skills_ref/static-analysis/skills/semgrep/SKILL.md +0 -431
  550. package/skills_ref/static-analysis/skills/semgrep/references/rulesets.md +0 -162
  551. package/skills_ref/static-analysis/skills/semgrep/references/scanner-task-prompt.md +0 -102
  552. package/skills_ref/static-analysis/skills/semgrep/references/triage-task-prompt.md +0 -122
  553. package/skills_ref/static-analysis/skills/semgrep/scripts/merge_triaged_sarif.py +0 -252
  554. package/skills_ref/summarize/SKILL.md +0 -87
  555. package/skills_ref/tdd/SKILL.md +0 -371
  556. package/skills_ref/tdd/testing-anti-patterns.md +0 -299
  557. package/skills_ref/telegram-send/SKILL.md +0 -99
  558. package/skills_ref/terraform/README.md +0 -105
  559. package/skills_ref/terraform/code-generation/.claude-plugin/plugin.json +0 -30
  560. package/skills_ref/terraform/code-generation/skills/azure-verified-modules/SKILL.md +0 -613
  561. package/skills_ref/terraform/code-generation/skills/terraform-style-guide/SKILL.md +0 -353
  562. package/skills_ref/terraform/code-generation/skills/terraform-test/SKILL.md +0 -1669
  563. package/skills_ref/terraform/module-generation/.claude-plugin/plugin.json +0 -30
  564. package/skills_ref/terraform/module-generation/skills/refactor-module/SKILL.md +0 -538
  565. package/skills_ref/terraform/module-generation/skills/terraform-stacks/SKILL.md +0 -468
  566. package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/api-monitoring.md +0 -543
  567. package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/component-blocks.md +0 -476
  568. package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/deployment-blocks.md +0 -391
  569. package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/examples.md +0 -1529
  570. package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/linked-stacks.md +0 -187
  571. package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/troubleshooting.md +0 -671
  572. package/skills_ref/terraform/provider-development/.claude-plugin/plugin.json +0 -13
  573. package/skills_ref/terraform/provider-development/skills/new-terraform-provider/SKILL.md +0 -25
  574. package/skills_ref/terraform/provider-development/skills/new-terraform-provider/assets/main.go +0 -40
  575. package/skills_ref/terraform/provider-development/skills/provider-actions/SKILL.md +0 -478
  576. package/skills_ref/terraform/provider-development/skills/provider-resources/SKILL.md +0 -599
  577. package/skills_ref/terraform/provider-development/skills/run-acceptance-tests/SKILL.md +0 -41
  578. package/skills_ref/theme-factory/LICENSE.txt +0 -202
  579. package/skills_ref/theme-factory/SKILL.md +0 -59
  580. package/skills_ref/theme-factory/theme-showcase.pdf +0 -0
  581. package/skills_ref/theme-factory/themes/arctic-frost.md +0 -19
  582. package/skills_ref/theme-factory/themes/botanical-garden.md +0 -19
  583. package/skills_ref/theme-factory/themes/desert-rose.md +0 -19
  584. package/skills_ref/theme-factory/themes/forest-canopy.md +0 -19
  585. package/skills_ref/theme-factory/themes/golden-hour.md +0 -19
  586. package/skills_ref/theme-factory/themes/midnight-galaxy.md +0 -19
  587. package/skills_ref/theme-factory/themes/modern-minimalist.md +0 -19
  588. package/skills_ref/theme-factory/themes/ocean-depths.md +0 -19
  589. package/skills_ref/theme-factory/themes/sunset-boulevard.md +0 -19
  590. package/skills_ref/theme-factory/themes/tech-innovation.md +0 -19
  591. package/skills_ref/things-mac/SKILL.md +0 -86
  592. package/skills_ref/tmux/SKILL.md +0 -153
  593. package/skills_ref/transcribe/SKILL.md +0 -81
  594. package/skills_ref/trello/SKILL.md +0 -95
  595. package/skills_ref/tts/SKILL.md +0 -99
  596. package/skills_ref/vercel-deploy/SKILL.md +0 -115
  597. package/skills_ref/video-downloader/SKILL.md +0 -99
  598. package/skills_ref/video-downloader/scripts/download_video.py +0 -145
  599. package/skills_ref/video-frames/SKILL.md +0 -46
  600. package/skills_ref/vision-click/SKILL.md +0 -128
  601. package/skills_ref/weather/SKILL.md +0 -112
  602. package/skills_ref/web-artifacts-builder/LICENSE.txt +0 -202
  603. package/skills_ref/web-artifacts-builder/SKILL.md +0 -74
  604. package/skills_ref/web-artifacts-builder/scripts/bundle-artifact.sh +0 -54
  605. package/skills_ref/web-artifacts-builder/scripts/init-artifact.sh +0 -322
  606. package/skills_ref/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  607. package/skills_ref/web-perf/SKILL.md +0 -193
  608. package/skills_ref/web-routing/SKILL.md +0 -26
  609. package/skills_ref/whatsapp/SKILL.md +0 -255
  610. package/skills_ref/whatsapp/assets/agent-app-integration-example.json +0 -35
  611. package/skills_ref/whatsapp/assets/databases-example.json +0 -11
  612. package/skills_ref/whatsapp/assets/function-decide-route-interactive-buttons.json +0 -6
  613. package/skills_ref/whatsapp/assets/functions-example.json +0 -5
  614. package/skills_ref/whatsapp/assets/workflow-agent-simple.json +0 -31
  615. package/skills_ref/whatsapp/assets/workflow-api-template-wait-agent.json +0 -59
  616. package/skills_ref/whatsapp/assets/workflow-customer-support-intake-agent.json +0 -56
  617. package/skills_ref/whatsapp/assets/workflow-decision.json +0 -83
  618. package/skills_ref/whatsapp/assets/workflow-interactive-buttons-decide-ai.json +0 -89
  619. package/skills_ref/whatsapp/assets/workflow-interactive-buttons-decide-function.json +0 -88
  620. package/skills_ref/whatsapp/assets/workflow-linear.json +0 -53
  621. package/skills_ref/whatsapp/package.json +0 -10
  622. package/skills_ref/whatsapp/references/app-integrations.md +0 -89
  623. package/skills_ref/whatsapp/references/databases-reference.md +0 -21
  624. package/skills_ref/whatsapp/references/execution-context.md +0 -42
  625. package/skills_ref/whatsapp/references/function-contracts.md +0 -55
  626. package/skills_ref/whatsapp/references/functions-payloads.md +0 -87
  627. package/skills_ref/whatsapp/references/functions-reference.md +0 -133
  628. package/skills_ref/whatsapp/references/graph-contract.md +0 -145
  629. package/skills_ref/whatsapp/references/node-types.md +0 -430
  630. package/skills_ref/whatsapp/references/triggers.md +0 -20
  631. package/skills_ref/whatsapp/references/workflow-overview.md +0 -22
  632. package/skills_ref/whatsapp/references/workflow-reference.md +0 -123
  633. package/skills_ref/whatsapp/scripts/configure-prop.js +0 -113
  634. package/skills_ref/whatsapp/scripts/create-connect-token.js +0 -38
  635. package/skills_ref/whatsapp/scripts/create-function.js +0 -64
  636. package/skills_ref/whatsapp/scripts/create-integration.js +0 -137
  637. package/skills_ref/whatsapp/scripts/create-row.js +0 -47
  638. package/skills_ref/whatsapp/scripts/create-trigger.js +0 -88
  639. package/skills_ref/whatsapp/scripts/create-workflow.js +0 -85
  640. package/skills_ref/whatsapp/scripts/delete-integration.js +0 -44
  641. package/skills_ref/whatsapp/scripts/delete-row.js +0 -49
  642. package/skills_ref/whatsapp/scripts/delete-trigger.js +0 -44
  643. package/skills_ref/whatsapp/scripts/deploy-function.js +0 -47
  644. package/skills_ref/whatsapp/scripts/edit-graph.js +0 -289
  645. package/skills_ref/whatsapp/scripts/get-action-schema.js +0 -44
  646. package/skills_ref/whatsapp/scripts/get-context-value.js +0 -80
  647. package/skills_ref/whatsapp/scripts/get-execution-event.js +0 -55
  648. package/skills_ref/whatsapp/scripts/get-execution.js +0 -44
  649. package/skills_ref/whatsapp/scripts/get-function.js +0 -43
  650. package/skills_ref/whatsapp/scripts/get-graph.js +0 -85
  651. package/skills_ref/whatsapp/scripts/get-table.js +0 -45
  652. package/skills_ref/whatsapp/scripts/get-workflow.js +0 -44
  653. package/skills_ref/whatsapp/scripts/invoke-function.js +0 -60
  654. package/skills_ref/whatsapp/scripts/lib/databases/args.js +0 -87
  655. package/skills_ref/whatsapp/scripts/lib/databases/filters.js +0 -30
  656. package/skills_ref/whatsapp/scripts/lib/databases/kapso-api.js +0 -70
  657. package/skills_ref/whatsapp/scripts/lib/functions/args.js +0 -55
  658. package/skills_ref/whatsapp/scripts/lib/functions/kapso-api.js +0 -70
  659. package/skills_ref/whatsapp/scripts/lib/workflows/args.js +0 -53
  660. package/skills_ref/whatsapp/scripts/lib/workflows/kapso-api.js +0 -123
  661. package/skills_ref/whatsapp/scripts/lib/workflows/result.js +0 -16
  662. package/skills_ref/whatsapp/scripts/list-accounts.js +0 -62
  663. package/skills_ref/whatsapp/scripts/list-apps.js +0 -42
  664. package/skills_ref/whatsapp/scripts/list-execution-events.js +0 -61
  665. package/skills_ref/whatsapp/scripts/list-executions.js +0 -53
  666. package/skills_ref/whatsapp/scripts/list-function-invocations.js +0 -53
  667. package/skills_ref/whatsapp/scripts/list-functions.js +0 -41
  668. package/skills_ref/whatsapp/scripts/list-integrations.js +0 -41
  669. package/skills_ref/whatsapp/scripts/list-provider-models.js +0 -48
  670. package/skills_ref/whatsapp/scripts/list-tables.js +0 -41
  671. package/skills_ref/whatsapp/scripts/list-triggers.js +0 -44
  672. package/skills_ref/whatsapp/scripts/list-whatsapp-phone-numbers.js +0 -56
  673. package/skills_ref/whatsapp/scripts/list-workflows.js +0 -44
  674. package/skills_ref/whatsapp/scripts/openapi-explore.mjs +0 -1273
  675. package/skills_ref/whatsapp/scripts/query-rows.js +0 -71
  676. package/skills_ref/whatsapp/scripts/reload-props.js +0 -110
  677. package/skills_ref/whatsapp/scripts/resume-execution.js +0 -75
  678. package/skills_ref/whatsapp/scripts/search-actions.js +0 -64
  679. package/skills_ref/whatsapp/scripts/update-execution-status.js +0 -51
  680. package/skills_ref/whatsapp/scripts/update-function.js +0 -65
  681. package/skills_ref/whatsapp/scripts/update-graph.js +0 -154
  682. package/skills_ref/whatsapp/scripts/update-integration.js +0 -82
  683. package/skills_ref/whatsapp/scripts/update-row.js +0 -51
  684. package/skills_ref/whatsapp/scripts/update-trigger.js +0 -60
  685. package/skills_ref/whatsapp/scripts/update-workflow-settings.js +0 -67
  686. package/skills_ref/whatsapp/scripts/upsert-row.js +0 -64
  687. package/skills_ref/whatsapp/scripts/validate-graph.js +0 -293
  688. package/skills_ref/whatsapp/scripts/variables-delete.js +0 -37
  689. package/skills_ref/whatsapp/scripts/variables-list.js +0 -55
  690. package/skills_ref/whatsapp/scripts/variables-set.js +0 -39
  691. package/skills_ref/writing-plans/SKILL.md +0 -116
  692. package/skills_ref/xlsx/LICENSE.txt +0 -30
  693. package/skills_ref/xlsx/SKILL.md +0 -292
  694. package/skills_ref/xlsx/scripts/office/helpers/__init__.py +0 -0
  695. package/skills_ref/xlsx/scripts/office/helpers/merge_runs.py +0 -199
  696. package/skills_ref/xlsx/scripts/office/helpers/simplify_redlines.py +0 -197
  697. package/skills_ref/xlsx/scripts/office/pack.py +0 -159
  698. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  699. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  700. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  701. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  702. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  703. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  704. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  705. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  706. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  707. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  708. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  709. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  710. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  711. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  712. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  713. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  714. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  715. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  716. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  717. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  718. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  719. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  720. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  721. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  722. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  723. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  724. package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  725. package/skills_ref/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  726. package/skills_ref/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  727. package/skills_ref/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  728. package/skills_ref/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  729. package/skills_ref/xlsx/scripts/office/schemas/mce/mc.xsd +0 -75
  730. package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
  731. package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
  732. package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
  733. package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  734. package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  735. package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  736. package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  737. package/skills_ref/xlsx/scripts/office/soffice.py +0 -183
  738. package/skills_ref/xlsx/scripts/office/unpack.py +0 -132
  739. package/skills_ref/xlsx/scripts/office/validate.py +0 -111
  740. package/skills_ref/xlsx/scripts/office/validators/__init__.py +0 -15
  741. package/skills_ref/xlsx/scripts/office/validators/base.py +0 -847
  742. package/skills_ref/xlsx/scripts/office/validators/docx.py +0 -446
  743. package/skills_ref/xlsx/scripts/office/validators/pptx.py +0 -275
  744. package/skills_ref/xlsx/scripts/office/validators/redlining.py +0 -247
  745. package/skills_ref/xlsx/scripts/recalc.py +0 -184
  746. package/skills_ref/xurl/SKILL.md +0 -461
@@ -1,705 +0,0 @@
1
- # Flask (Python) Web Security Spec (Flask 3.1.x, Python 3.x)
2
-
3
- This document is designed as a **security spec** that supports:
4
- 1) **Secure-by-default code generation** for new Flask code.
5
- 2) **Security review / vulnerability hunting** in existing Flask code (passive “notice issues while working” and active “scan the repo and report findings”).
6
-
7
- It is intentionally written as a set of **normative requirements** (“MUST/SHOULD/MAY”) plus **audit rules** (what bad patterns look like, how to detect them, and how to fix/mitigate them).
8
-
9
- --------------------------------------------------------------------
10
-
11
- ## 0) Safety, boundaries, and anti-abuse constraints (MUST FOLLOW)
12
-
13
- - MUST NOT request, output, log, or commit secrets (API keys, passwords, private keys, session cookies, SECRET_KEY).
14
- - MUST NOT “fix” security by disabling protections (e.g., turning off CSRF, relaxing CORS, disabling escaping, disabling auth checks).
15
- - MUST provide **evidence-based findings** during audits: cite file paths, code snippets, and configuration values that justify the claim.
16
- - MUST treat uncertainty honestly: if a protection might exist in infrastructure (reverse proxy, WAF, CDN), report it as “not visible in app code; verify at runtime/config”.
17
-
18
- --------------------------------------------------------------------
19
-
20
- ## 1) Operating modes
21
-
22
- ### 1.1 Generation mode (default)
23
- When asked to write new Flask code or modify existing code:
24
- - MUST follow every **MUST** requirement in this spec.
25
- - SHOULD follow every **SHOULD** requirement unless the user explicitly says otherwise.
26
- - MUST prefer safe-by-default APIs and proven libraries over custom security code.
27
- - MUST avoid introducing new risky sinks (template rendering from strings, shell execution, dynamic imports, unsafe redirects, serving user files as HTML, etc.).
28
-
29
- ### 1.2 Passive review mode (always on while editing)
30
- While working anywhere in a Flask repo (even if the user did not ask for a security scan):
31
- - MUST “notice” violations of this spec in touched/nearby code.
32
- - SHOULD mention issues as they come up, with a brief explanation + safe fix.
33
-
34
- ### 1.3 Active audit mode (explicit scan request)
35
- When the user asks to “scan”, “audit”, or “hunt for vulns”:
36
- - MUST systematically search the codebase for violations of this spec.
37
- - MUST output findings in a structured format (see §2.3).
38
-
39
- Recommended audit order:
40
- 1) App entrypoints / deployment scripts / Dockerfiles / Procfiles.
41
- 2) Flask configuration and environment handling.
42
- 3) Auth + sessions + cookies.
43
- 4) CSRF protections and state-changing routes.
44
- 5) Template rendering and XSS/SSTI.
45
- 6) File handling (uploads + downloads) and path traversal.
46
- 7) Injection classes (SQL, command execution, unsafe deserialization).
47
- 8) Outbound requests (SSRF).
48
- 9) Redirect handling (open redirects).
49
- 10) CORS and security headers.
50
-
51
- --------------------------------------------------------------------
52
-
53
- ## 2) Definitions and review guidance
54
-
55
- ### 2.1 Untrusted input (treat as attacker-controlled unless proven otherwise)
56
- Examples include:
57
- - `request.args`, `request.form`, `request.values`
58
- - `request.get_json()`, `request.json`, `request.data`
59
- - `request.headers`, `request.cookies`
60
- - URL path parameters (e.g., `/user/<id>`)
61
- - Any data from external systems (webhooks, third-party APIs, message queues)
62
- - Any persisted user content (DB rows) that originated from users
63
-
64
- ### 2.2 State-changing request
65
- A request is state-changing if it can create/update/delete data, change auth/session state, trigger side effects (purchase, email send, webhook send), or initiate privileged actions.
66
-
67
- ### 2.3 Required audit finding format
68
- For each issue found, output:
69
-
70
- - Rule ID:
71
- - Severity: Critical / High / Medium / Low
72
- - Location: file path + function/route name + line(s)
73
- - Evidence: the exact code/config snippet
74
- - Impact: what could go wrong, who can exploit it
75
- - Fix: safe change (prefer minimal diff)
76
- - Mitigation: defense-in-depth if immediate fix is hard
77
- - False positive notes: what to verify if uncertain
78
-
79
- --------------------------------------------------------------------
80
-
81
- ## 3) Secure baseline: minimum production configuration (MUST in production)
82
-
83
- This is the smallest “production baseline” that prevents common Flask misconfigurations.
84
-
85
- ### 3.1 App initialization pattern (SHOULD)
86
- SHOULD use an app factory and environment-based config so production config is not hard-coded.
87
-
88
- Example skeleton (illustrative; adjust to your project):
89
- - Load config from environment / secret store.
90
- - Fail closed if critical settings are missing in production.
91
-
92
- Key baseline config targets:
93
- - `SECRET_KEY` set and not committed
94
- - `SESSION_COOKIE_SECURE=True` (when HTTPS) IMPORTANT NOTE: Only set `Secure` in production environment when TLS is configured. When running in a local dev environment over HTTP, do not set `Secure` property on cookies. You should do this conditionally based on if the app is running in production mode. You should also include a property like `SESSION_COOKIE_SECURE` which can be used to disable `Secure` cookies when testing over HTTP.
95
- - `SESSION_COOKIE_HTTPONLY=True`
96
- - `SESSION_COOKIE_SAMESITE='Lax'` (or `'Strict'` if compatible)
97
- - `TRUSTED_HOSTS` set in production
98
- - Security headers set (CSP, etc.) either in app or at the edge
99
-
100
- --------------------------------------------------------------------
101
-
102
- ## 4) Rules (generation + audit)
103
-
104
- Each rule contains: required practice, insecure patterns, detection hints, and remediation.
105
-
106
- ### FLASK-DEPLOY-001: Do not use Flask’s development server in production
107
- Severity: High (if production)
108
-
109
- Required:
110
- - MUST NOT deploy the built-in development server as the production server.
111
- - MUST run behind a production-grade WSGI server or managed platform (such as gunicorn)
112
-
113
- Insecure patterns:
114
- - `app.run(...)` in a production entrypoint.
115
- - Deployment docs/scripts that use `flask run` in production.
116
-
117
- Detection hints:
118
- - Search for `app.run(`, `flask run`, `--debug`, `FLASK_DEBUG`, `FLASK_ENV=development`.
119
- - Check Docker CMD/ENTRYPOINT, Procfile, systemd units, shell scripts.
120
-
121
- Fix:
122
- - Use a production WSGI server (and keep Flask as the app object).
123
- - Ensure the dev server is only used for local development.
124
-
125
- Note:
126
- - These are often used in dev mode or local testing. This is allowed. Only flag if it is clear that it is being used as the production entrypoint
127
-
128
- ---
129
-
130
- ### FLASK-DEPLOY-002: Debug mode MUST be disabled in production
131
- Severity: Critical
132
-
133
- Required:
134
- - MUST NOT enable debug mode in production.
135
- - MUST treat the interactive debugger as equivalent to remote code execution if exposed.
136
-
137
- Insecure patterns:
138
- - `app.run(debug=True)`
139
- - `flask run --debug` in production.
140
- - `DEBUG=True` via env/config in production.
141
-
142
- Detection hints:
143
- - Look for `debug=True`, `FLASK_DEBUG=1`, `DEBUG = True`, `app.debug = True`.
144
- - Look for `TRAP_HTTP_EXCEPTIONS`/debugger settings enabled in non-test contexts.
145
-
146
- Fix:
147
- - Ensure debug is only enabled in local dev/test.
148
- - Prefer environment-based toggles and safe defaults.
149
-
150
- Note:
151
- - These are often used in dev mode or local testing. This is allowed. Only flag if it is clear that it is being used as the production entrypoint
152
-
153
- ---
154
-
155
- ### FLASK-CONFIG-001: SECRET_KEY must be strong, secret, and rotated safely
156
- Severity: High (Critical if missing in production with sessions or signing)
157
-
158
- Required:
159
- - MUST set a strong random `SECRET_KEY` in production.
160
- - MUST keep `SECRET_KEY` out of source control and out of logs.
161
- - MAY rotate keys periodically; MAY use `SECRET_KEY_FALLBACKS` to support rotation without instantly invalidating existing sessions, then remove old keys after the rotation window. This likely is not needed for smaller applications but is good practice for larger applications. As this may complicate deployment, suggest that it be implemented rather than implementing it by default.
162
-
163
- Insecure patterns:
164
- - Missing `SECRET_KEY` in production.
165
- - Hard-coded `SECRET_KEY` in repo (including test keys accidentally used in prod).
166
- - Logging or printing `SECRET_KEY`.
167
-
168
- Detection hints:
169
- - Search for `SECRET_KEY =`, `app.secret_key =`, `SECRET_KEY_FALLBACKS =`.
170
- - Check `.env` files committed to repo.
171
- - Check config modules for constants.
172
-
173
- Fix:
174
- - Load from secret manager or environment variable.
175
- - Add a rotation process:
176
- - Set new `SECRET_KEY`
177
- - Keep old key(s) temporarily in `SECRET_KEY_FALLBACKS`
178
- - Remove old key(s) after the safe window.
179
-
180
- Notes:
181
- - If the application uses Flask sessions (cookie-based by default), `SECRET_KEY` is directly security-critical.
182
-
183
- ---
184
-
185
- ### FLASK-SESS-001: Session cookies must use secure attributes in production
186
- Severity: Medium
187
-
188
- Required (production, HTTPS):
189
- - MUST set `SESSION_COOKIE_SECURE=True` (cookies only over HTTPS). NOTE: Only set `Secure` in production environment when TLS is configured. When running in a local dev environment over HTTP, do not set `Secure` property on cookies. You should do this conditionally based on if the app is running in production mode. You should also include a property like `SESSION_COOKIE_SECURE` which can be used to disable `Secure` cookies when testing over HTTP.
190
- - MUST ensure `SESSION_COOKIE_HTTPONLY=True` (protect from JS access).
191
- - SHOULD set `SESSION_COOKIE_SAMESITE='Lax'` (recommended) or `'Strict'` if compatible with UX.
192
- - SHOULD keep `SESSION_COOKIE_DOMAIN=None` unless you explicitly need subdomain-wide cookies.
193
- - If you need embedded/iframe third-party usage, MAY consider `SESSION_COOKIE_PARTITIONED=True` (requires HTTPS).
194
-
195
- Insecure patterns:
196
- - `SESSION_COOKIE_SECURE=False` in production.
197
- - `SESSION_COOKIE_HTTPONLY=False`.
198
- - `SESSION_COOKIE_SAMESITE=None` with cookie-authenticated state-changing endpoints (higher CSRF risk).
199
-
200
- Detection hints:
201
- - Inspect `app.config.update(...)` blocks and config classes.
202
- - Look for `set_cookie(..., secure=..., httponly=..., samesite=...)` usage on non-session cookies too.
203
-
204
- Fix:
205
- - Set these config values explicitly in production config.
206
-
207
- Notes:
208
- - SameSite is defense-in-depth; do not treat it as a full replacement for CSRF tokens.
209
-
210
- ---
211
-
212
- ### FLASK-SESS-002: Sessions must be bounded and resistant to fixation/replay
213
- Severity: Medium
214
-
215
- Required:
216
- - SHOULD set a bounded session lifetime appropriate to the app.
217
- - SHOULD set `session.permanent = True` only when you intend persistent sessions, and set `PERMANENT_SESSION_LIFETIME` to a justified value.
218
- - SHOULD clear the session on login and privilege changes to reduce session fixation risk.
219
- - MUST NOT store sensitive secrets in the default Flask session cookie. The default session is signed, not encrypted.
220
-
221
- Insecure patterns:
222
- - Extremely long or unlimited lifetimes for privileged sessions.
223
- - No session clearing on login.
224
- - Storing secrets (passwords, access tokens, PII) directly in `session[...]` when using default cookie sessions.
225
-
226
- Detection hints:
227
- - Search for `PERMANENT_SESSION_LIFETIME`, `session.permanent`, `session[...] =`.
228
- - Identify whether server-side session storage is used; if not, assume default cookie sessions.
229
-
230
- Fix:
231
- - Set appropriate lifetimes.
232
- - Clear/rotate session on login.
233
- - Store sensitive data server-side; store only identifiers in the session cookie.
234
-
235
- ---
236
-
237
- ### FLASK-CSRF-001: State-changing requests using cookie auth MUST be CSRF-protected
238
- Severity: High
239
-
240
- - IMPORTANT NOTE: If cookies are not being used for auth (ie auth is via Authentication header or other passed token), then there is no CSRF risk.
241
-
242
- Required:
243
- - MUST protect all state-changing endpoints (POST/PUT/PATCH/DELETE) that rely on cookies for authentication.
244
- - MAY use a well-tested CSRF library/integration (form framework or middleware) rather than rolling your own.
245
- - MAY use additional defenses (Origin/Referer checking, SameSite cookies, Fetch Metadata headers, custom headers for AJAX/API), but tokens remain the primary defense for cookie-authenticated apps.
246
- If tokens are impractical, or for small applications:
247
- * MUST at a minimum require a custom header to be set and set the session cookie SESSION_COOKIE_SAMESITE=lax, as this is the strongest method besides requiring a form token, and may be much easier to implement.
248
-
249
- Insecure patterns:
250
- - Cookie-authenticated endpoints that change state with no CSRF protection.
251
- - Using GET for state-changing actions (amplifies CSRF risk).
252
-
253
- Detection hints:
254
- - Enumerate routes with methods other than GET and identify auth mechanism.
255
- - Look for CSRF integrations (e.g., Flask-WTF, global CSRF middleware). If absent, treat as suspicious.
256
- - Check JSON API endpoints too, not only HTML forms.
257
-
258
- Fix:
259
- - Add CSRF protection to all state-changing requests.
260
- - If the app is a pure API and uses Authorization headers (bearer tokens) rather than cookies, document that choice and ensure cookies aren’t used for auth. If cookies are not used for auth, there is no CSRF risk.
261
-
262
- Notes:
263
- - XSS can defeat CSRF protections; CSRF defenses do not replace XSS prevention.
264
-
265
- ---
266
-
267
- ### FLASK-XSS-001: Prevent reflected/stored XSS in templates and HTML generation
268
- Severity: High
269
-
270
- Required:
271
- - MUST rely on Jinja auto-escaping for HTML templates.
272
- - MUST NOT mark untrusted content as safe:
273
- - Avoid `Markup(...)` on user data.
274
- - Avoid Jinja `|safe` on user-controlled content.
275
- - MUST quote HTML attributes containing Jinja expressions (`value="{{ x }}"` not `value={{ x }}`).
276
- - MUST NOT serve uploaded HTML as active HTML; serve as download (`Content-Disposition: attachment`) or transform to a safe format. Note: This is only relevant if it is possible to upload document content such as html, js, css, etc. If it purely is image files, there is no concern.
277
- - SHOULD deploy a Content Security Policy (CSP) to mitigate XSS classes (including `javascript:` in `href`).
278
-
279
- Insecure patterns:
280
- - `Markup(request.args.get(...))`
281
- - Template filters: `{{ user_html|safe }}`
282
- - Unquoted attributes in templates
283
- - Serving user-uploaded content directly with `text/html` or inline rendering
284
-
285
- Detection hints:
286
- - Search for `Markup(` and investigate origin of the data.
287
- - Search template files for `|safe`, `|tojson` misuse, and unquoted attributes.
288
- - Review file-serving routes that might return user uploads without `as_attachment=True`. Note: This is only relevant if it is possible to upload document content such as html, js, css, etc. If it purely is image files, there is no concern.
289
-
290
- Fix:
291
- - Remove unsafe marking; sanitize only when strictly necessary using a trusted HTML sanitizer.
292
- - Always quote attributes.
293
- - Add CSP and reduce inline scripts.
294
-
295
- ---
296
-
297
- ### FLASK-SSTI-001: Never render untrusted templates (Server-Side Template Injection)
298
- Severity: Critical
299
-
300
- Required:
301
- - MUST NOT render templates that contain user-controlled template syntax.
302
- - MUST treat `render_template_string` and `Environment.from_string(...).render(...)` as dangerous if the template string is influenced by untrusted input.
303
- - MUST NOT use use `.format()` on user controlled strings
304
- - If untrusted templates are absolutely required, treat it as a special high-risk design:
305
- - MUST use a sandboxed templating approach and restrict capabilities.
306
- - MUST keep Jinja updated and assume sandbox escapes are possible; isolate further.
307
-
308
- Insecure patterns:
309
- - `render_template_string(request.args["tmpl"], ...)`
310
- - Storing user templates in DB and rendering them with the normal Jinja environment.
311
- - `request.args["tmpl"].format(...)`
312
-
313
- Detection hints:
314
- - Grep for `render_template_string`, `from_string`, `.render(` with dynamic strings.
315
- - Trace the origin of the template string (DB, request, uploads, admin panels).
316
-
317
- Fix:
318
- - Replace with safe templating alternatives that do not evaluate code (e.g., string.Template, str.replace).
319
- - If templates must be user-defined, use a sandbox plus strict allowlists and heavy isolation.
320
-
321
- ---
322
-
323
- ### FLASK-HEADERS-001: Set essential security headers (in app or at the edge)
324
- Severity: Medium
325
-
326
- Required (typical web app):
327
- - SHOULD set:
328
- - CSP (`Content-Security-Policy`)
329
- - `X-Content-Type-Options: nosniff`
330
- - Clickjacking protection (`X-Frame-Options: SAMEORIGIN` and/or CSP `frame-ancestors`) (there may be cases where the user wants to iframe their site elsewhere. If that is the case, work with them to safely allow it)
331
- - SHOULD consider additional hardening headers depending on app (Referrer-Policy, Permissions-Policy).
332
- - MUST ensure cookies are set with secure attributes (see FLASK-SESS-001).
333
-
334
- NOTE: Security headers may be set via a proxy or other cloud provider. Check to see if there is evidence of that.
335
-
336
- Insecure patterns:
337
- - No security headers anywhere (app or edge).
338
- - CSP missing on apps that display untrusted content.
339
-
340
- Detection hints:
341
- - Search for `after_request` hooks, Flask-Talisman usage, reverse proxy config.
342
- - If not visible in app code, flag as “verify at edge”.
343
-
344
- Fix:
345
- - Set headers centrally (middleware / after_request) or via reverse proxy/CDN.
346
- - Keep CSP realistic and compatible; avoid `unsafe-inline` where possible.
347
-
348
- ---
349
-
350
- ### FLASK-LIMITS-001: Request size and form parsing limits MUST be set appropriately
351
- Severity: Low (Medium if file uploads / large bodies are possible)
352
-
353
- Required:
354
- - SHOULD set and justify:
355
- - `MAX_CONTENT_LENGTH` (global maximum request bytes)
356
- - `MAX_FORM_MEMORY_SIZE` (max per non-file form field in multipart)
357
- - `MAX_FORM_PARTS` (max number of multipart fields)
358
- - MUST enforce additional limits at the reverse proxy / WSGI / platform level where possible.
359
-
360
- Insecure patterns:
361
- - Unlimited request body sizes when handling uploads or user content.
362
- - Accepting arbitrarily large multipart forms or many fields.
363
-
364
- Detection hints:
365
- - Inspect Flask config for these keys.
366
- - Inspect upload routes and APIs that accept large JSON.
367
-
368
- Fix:
369
- - Set conservative defaults, override per-route only when needed.
370
- - Ensure large uploads use dedicated upload mechanisms.
371
-
372
- ---
373
-
374
- ### FLASK-HOST-001: Host header must be validated in production
375
- Severity: Low (depends on app’s use of external URLs)
376
-
377
- Required:
378
- - MUST set `TRUSTED_HOSTS` in production to restrict accepted Host values.
379
- - MUST NOT rely on `SERVER_NAME` as a host restriction mechanism.
380
-
381
- Insecure patterns:
382
- - `TRUSTED_HOSTS` unset in production.
383
- - Code that generates external URLs for emails/password resets without host validation.
384
-
385
- Detection hints:
386
- - Find `TRUSTED_HOSTS` config usage.
387
- - Find `url_for(..., _external=True)` and check how host is determined.
388
-
389
- Fix:
390
- - Set `TRUSTED_HOSTS` to your expected domains (and required subdomains).
391
- - Ensure external URL generation uses trusted host/scheme.
392
-
393
- ---
394
-
395
- ### FLASK-PROXY-001: Reverse proxy trust must be configured correctly
396
- Severity: Medium (High if relying on IPs for auth)
397
-
398
- Required:
399
- - If behind a reverse proxy, MUST configure Flask/Werkzeug to trust forwarded headers only from the intended proxy.
400
- - MUST NOT blindly trust `X-Forwarded-*` headers from the open internet.
401
-
402
- Insecure patterns:
403
- - `ProxyFix` applied with overly broad trust settings, or applied without understanding how many proxies are in front.
404
- - Relying on forwarded headers for scheme/host without validation.
405
-
406
- Detection hints:
407
- - Search for `ProxyFix`.
408
- - Search for usage of `request.remote_addr`, `request.scheme`, `request.host` in security-sensitive logic.
409
-
410
- Fix:
411
- - Configure `ProxyFix` (or platform-specific settings) with correct hop counts.
412
- - Keep `TRUSTED_HOSTS` in place even behind proxies.
413
-
414
- ---
415
-
416
- ### FLASK-PATH-001: Prevent path traversal and unsafe file serving
417
- Severity: High
418
-
419
- Required:
420
- - MUST NOT pass user-controlled file paths to `send_file` or to direct file I/O.
421
- - MUST use safe file serving patterns:
422
- - `send_from_directory` for user-specified paths under a trusted base directory
423
- - `safe_join` for joining a trusted base directory with untrusted path components
424
- - `secure_filename` for uploaded filenames (and still generate your own unique storage name)
425
- - MUST ensure user uploads are not served as executable/active content (especially HTML).
426
- - SHOULD in general use `safe_join` over `os.path.join` for almost any filesystem path computations.
427
-
428
- Insecure patterns:
429
- - `send_file(request.args["path"])`
430
- - `open(os.path.join(base_dir, user_path))` where `user_path` is untrusted
431
- - Serving uploads from within a static web root without restrictions
432
-
433
- Detection hints:
434
- - Search for `send_file(`, `open(`, `os.path.join(`, `pathlib.Path(...)/...` in file routes.
435
- - Identify where filenames come from (request args, DB, headers).
436
-
437
- Fix:
438
- - Serve only from a non-user-controlled directory base.
439
- - Store uploads outside static roots; serve through controlled routes.
440
- - Always validate and normalize file identifiers.
441
-
442
- Note: `safe_join` is imported from `werkzeug.security`
443
-
444
- ---
445
-
446
- ### FLASK-UPLOAD-001: File uploads must be validated, stored safely, and served safely
447
- Severity: High
448
-
449
- Required:
450
- - MUST enforce upload size limits (app + edge).
451
- - MUST validate file type using allowlists and content checks (not only extension).
452
- - MUST store uploads outside executable/static roots when possible.
453
- - SHOULD generate server-side filenames (random IDs) and avoid trusting original names.
454
- - MUST serve potentially active formats safely (download attachment) unless explicitly intended.
455
-
456
- Insecure patterns:
457
- - Accepting arbitrary file types and serving them back inline.
458
- - Using user-supplied filename as storage path.
459
- - Missing size/type validation.
460
-
461
- Detection hints:
462
- - Look for `request.files[...]` handlers.
463
- - Check for `secure_filename` usage (and whether it’s combined with uniqueness).
464
- - Check where files are stored and how they are served.
465
-
466
- Fix:
467
- - Implement allowlist validation + safe storage + safe serving.
468
- - Add scanning / quarantine if applicable.
469
-
470
- ---
471
-
472
- ### FLASK-INJECT-001: Prevent SQL injection (use parameterized queries / ORM)
473
- Severity: High
474
-
475
- Required:
476
- - MUST use parameterized queries or an ORM that parameterizes under the hood.
477
- - MUST NOT build SQL by string concatenation / f-strings with untrusted input.
478
-
479
- Insecure patterns:
480
- - `f"SELECT ... WHERE id={request.args['id']}"`
481
- - `"... WHERE name = '%s'" % user_input`
482
-
483
- Detection hints:
484
- - Grep for `SELECT`, `INSERT`, `UPDATE`, `DELETE` strings in Python code.
485
- - Track untrusted data into DB execute calls.
486
-
487
- Fix:
488
- - Replace with parameterized queries or ORM query APIs.
489
- - Validate types (e.g., int IDs) before querying.
490
-
491
- ---
492
-
493
- ### FLASK-INJECT-002: Prevent OS command injection
494
- Severity: Critical to High (depends on exposure)
495
-
496
- Required:
497
- - MUST avoid executing shell commands with untrusted input.
498
- - If subprocess is necessary:
499
- - MUST pass args as a list (not a string)
500
- - MUST NOT use `shell=True` with attacker-influenced strings
501
- - SHOULD use strict allowlists for any variable component
502
- - If possible, use pure python or a python library rather than using a subprocess or system command
503
- - Do not assume that arguments to commands will be inherently safe even in `shell=False`. Commands may incorrectly process these arguments as command line flags or other trusted values.
504
-
505
- Insecure patterns:
506
- - `os.system(user_input)`
507
- - `subprocess.run(f"cmd {user}", shell=True)`
508
- - Passing user strings into `bash -c`, `sh -c`, PowerShell, etc.
509
-
510
- Detection hints:
511
- - Search for `os.system`, `subprocess`, `Popen`, `shell=True`.
512
- - Trace data from request/DB into these calls.
513
-
514
- Fix:
515
- - Use library APIs instead of shell commands.
516
- - If unavoidable, hard-code the command and allowlist validated parameters. If supported by the subcommand, try to keep user values after `--` to prevent them being processed as command line flags.
517
-
518
- ---
519
-
520
- ### FLASK-SSRF-001: Prevent server-side request forgery (SSRF) in outbound HTTP
521
- Severity: Medium
522
-
523
- - Note: For small stand alone projects this is less important. It is most important when deploying into an LAN or with other services listening on the same server.
524
-
525
- Required:
526
- - MUST treat outbound requests to user-provided URLs as high risk.
527
- - SHOULD validate and restrict destinations (allowlist hosts/domains) for any user-influenced URL fetch.
528
- - SHOULD block access to:
529
- - localhost / private IP ranges / link-local addresses
530
- - cloud metadata endpoints
531
- - MUST NOT allow non http/https protocols (ie file: etc)
532
- - SHOULD set timeouts and restrict redirects.
533
-
534
-
535
-
536
- Insecure patterns:
537
- - `requests.get(request.args["url"])`
538
- - Webhooks/preview/fetch endpoints that accept arbitrary URLs.
539
-
540
- Detection hints:
541
- - Search for `requests.get/post`, `httpx`, `urllib`, `aiohttp` usage with untrusted URL sources.
542
- - Identify URL fetch features (preview, import, webhook tester).
543
-
544
- Fix:
545
- - Ensure URLs are http or https (disallow file: or other protocols)
546
- - Enforce allowlists and network egress controls.
547
- - Add strict parsing and IP resolution checks; set timeouts; disable redirects if not needed.
548
-
549
- ---
550
-
551
- ### FLASK-REDIRECT-001: Prevent open redirects
552
- Severity: Low
553
-
554
- Required:
555
- - MUST validate redirect targets derived from untrusted input (e.g., `next`, `redirect`, `return_to`).
556
- - SHOULD use allowlists of internal paths or known domains.
557
- - SHOULD prefer redirecting only to same-site relative paths.
558
-
559
- Insecure patterns:
560
- - `redirect(request.args.get("next"))` with no validation.
561
-
562
- Detection hints:
563
- - Search for `redirect(` and examine where `location` comes from.
564
-
565
- Fix:
566
- - Only allow relative paths or allowlisted domains.
567
- - Fall back to a safe default if validation fails.
568
-
569
- ---
570
-
571
- ### FLASK-HTTP-001: Use HTTP methods safely; do not change state via GET; avoid secrets in URLs
572
- Severity: Medium
573
-
574
- Required:
575
- - MUST NOT perform state-changing actions over GET.
576
- - MUST NOT put secrets in URLs (query strings are commonly logged and leaked via referrers).
577
- - SHOULD require POST/PUT/PATCH/DELETE for state change and apply CSRF protections when cookie-authenticated.
578
-
579
- Insecure patterns:
580
- - `/delete?id=...` implemented as GET
581
- - Password reset tokens or API keys in query params
582
-
583
- Detection hints:
584
- - Enumerate GET routes and inspect whether they mutate state.
585
- - Look for URL parameters named `token`, `key`, `secret`, `password`, etc.
586
-
587
- Fix:
588
- - Move state changes to non-GET methods.
589
- - Move sensitive values to secure channels (POST bodies, headers) and protect them.
590
-
591
- ---
592
-
593
- ### FLASK-CORS-001: CORS must be explicit and least-privilege
594
- Severity: Medium (High if misconfigured with credentials)
595
-
596
- Required:
597
- - If CORS is not needed, MUST keep it disabled.
598
- - If CORS is needed:
599
- - MUST allowlist trusted origins (do not reflect arbitrary origins).
600
- - MUST be careful with credentialed requests; do not combine broad origins with cookies.
601
- - SHOULD restrict allowed methods and headers.
602
-
603
- Insecure patterns:
604
- - `Access-Control-Allow-Origin: *` paired with credentialed cookies or overly broad access.
605
- - Reflecting `Origin` without validation.
606
- - `flask_cors.CORS(app)` with permissive defaults.
607
-
608
- Detection hints:
609
- - Search for `flask_cors`, `CORS(`, `Access-Control-Allow-Origin`.
610
- - Check for `supports_credentials=True` and wildcard origins.
611
-
612
- Fix:
613
- - Use a strict origin allowlist and minimal methods/headers.
614
- - Ensure cookie-authenticated endpoints are not exposed cross-origin unless necessary.
615
-
616
- ---
617
-
618
- ### FLASK-SUPPLY-001: Dependency and patch hygiene (focus on security-relevant deps)
619
- Severity: Low
620
-
621
- Required:
622
- - SHOULD pin and regularly update security-critical dependencies (Flask, Werkzeug, Jinja2, itsdangerous).
623
- - MUST respond to known security advisories promptly.
624
-
625
- Audit focus example:
626
- - If running on Windows and using file serving with untrusted paths, ensure Werkzeug’s `safe_join` behavior is not vulnerable to Windows device-name edge cases.
627
-
628
- Detection hints:
629
- - Check `requirements.txt`, lockfiles, and runtime environments.
630
- - Identify where security helpers are used (safe_join, send_from_directory).
631
-
632
- Fix:
633
- - Upgrade to patched versions and add regression tests for the impacted behavior.
634
-
635
- --------------------------------------------------------------------
636
-
637
- ## 5) Practical scanning heuristics (how to “hunt”)
638
-
639
- When actively scanning, use these high-signal patterns:
640
-
641
- - Dev server / debug:
642
- - `app.run(`, `flask run`, `--debug`, `DEBUG=True`, `FLASK_DEBUG`
643
- - Secrets:
644
- - `SECRET_KEY`, `secret_key`, `.env` committed, `print(config)`
645
- - Cookies / sessions:
646
- - `SESSION_COOKIE_SECURE`, `SESSION_COOKIE_HTTPONLY`, `SESSION_COOKIE_SAMESITE`
647
- - `session[...] =` with sensitive values
648
- - CSRF:
649
- - POST/PUT/PATCH/DELETE handlers without CSRF checks in cookie-authenticated apps
650
- - XSS/SSTI:
651
- - `Markup(`, `|safe`, unquoted attributes, `render_template_string`
652
- - Files:
653
- - `send_file(` with user-controlled path; `open(` on user path; `os.path.join` with untrusted
654
- - upload handlers using user filename for path
655
- - Injection:
656
- - SQL strings + string formatting into `.execute(...)`
657
- - `subprocess.*`, `shell=True`, `os.system`
658
- - SSRF:
659
- - `requests.get/post` or `httpx` with URL from request/DB
660
- - Redirect:
661
- - `redirect(request.args.get("next"))`
662
- - CORS:
663
- - `flask_cors.CORS` permissive configs; wildcard origins with credentials
664
-
665
- Always try to confirm:
666
- - data origin (untrusted vs trusted)
667
- - sink type (template/SQL/subprocess/files/redirect/http)
668
- - protective controls present (validation, allowlists, middleware)
669
-
670
- --------------------------------------------------------------------
671
-
672
- ## 6) Sources (accessed 2026-01-26)
673
-
674
- Primary framework documentation:
675
- - Flask Docs: Deploying to Production — https://flask.palletsprojects.com/en/stable/deploying/
676
- - Flask Docs: Debugging Application Errors — https://flask.palletsprojects.com/en/stable/debugging/
677
- - Flask Docs: Configuration Handling — https://flask.palletsprojects.com/en/stable/config/
678
- - Flask Docs: Security Considerations — https://flask.palletsprojects.com/en/stable/web-security/
679
- - Flask Docs: Tell Flask it is Behind a Proxy — https://flask.palletsprojects.com/en/stable/deploying/proxy_fix/
680
- - Flask API Docs: Sessions — https://flask.palletsprojects.com/en/stable/api/#sessions
681
-
682
- Werkzeug documentation & advisories:
683
- - Werkzeug Docs: Utilities (send_file / send_from_directory / safe_join / secure_filename / password hashing) — https://werkzeug.palletsprojects.com/en/stable/utils/
684
- - GitHub Advisory: CVE-2025-66221 (Werkzeug safe_join Windows device names) — https://github.com/advisories/GHSA-hgf8-39gv-g3f2
685
-
686
- OWASP Cheat Sheet Series:
687
- - Session Management — https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html
688
- - CSRF Prevention — https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html
689
- - XSS Prevention — https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
690
- - Input Validation — https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html
691
- - SQL Injection Prevention — https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
692
- - Injection Prevention — https://cheatsheetseries.owasp.org/cheatsheets/Injection_Prevention_Cheat_Sheet.html
693
- - OS Command Injection Defense — https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html
694
- - SSRF Prevention — https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html
695
- - File Upload — https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
696
- - Unvalidated Redirects — https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html
697
- - HTTP Headers — https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html
698
-
699
- Template safety references:
700
- - Jinja: Sandbox (rendering untrusted templates) — https://jinja.palletsprojects.com/en/stable/sandbox/
701
- - OWASP WSTG: Testing for Server-Side Template Injection — https://owasp.org/www-project-web-security-testing-guide/v41/4-Web_Application_Security_Testing/07-Input_Validation_Testing/18-Testing_for_Server_Side_Template_Injection
702
- - PortSwigger Web Security Academy: Server-side template injection — https://portswigger.net/web-security/server-side-template-injection
703
-
704
- HTTP semantics:
705
- - RFC 9110: HTTP Semantics (safe methods) — https://www.rfc-editor.org/rfc/rfc9110