@heyai-rules/pilo-masterkit 2.1.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (739) hide show
  1. package/.agent/agents/PILO_MASTER.md +77 -77
  2. package/.agent/agents/architect.md +211 -211
  3. package/.agent/agents/backend-specialist.md +263 -263
  4. package/.agent/agents/build-error-resolver.md +114 -114
  5. package/.agent/agents/chief-of-staff.md +151 -151
  6. package/.agent/agents/code-archaeologist.md +106 -106
  7. package/.agent/agents/code-reviewer.md +237 -237
  8. package/.agent/agents/cpp-build-resolver.md +90 -90
  9. package/.agent/agents/cpp-reviewer.md +72 -72
  10. package/.agent/agents/csharp-reviewer.md +101 -101
  11. package/.agent/agents/dart-build-resolver.md +201 -201
  12. package/.agent/agents/database-architect.md +226 -226
  13. package/.agent/agents/database-reviewer.md +91 -91
  14. package/.agent/agents/debugger.md +225 -225
  15. package/.agent/agents/devops-engineer.md +242 -242
  16. package/.agent/agents/doc-updater.md +107 -107
  17. package/.agent/agents/docs-lookup.md +68 -68
  18. package/.agent/agents/documentation-writer.md +104 -104
  19. package/.agent/agents/e2e-runner.md +107 -107
  20. package/.agent/agents/explorer-agent.md +73 -73
  21. package/.agent/agents/flutter-reviewer.md +243 -243
  22. package/.agent/agents/frontend-specialist.md +593 -593
  23. package/.agent/agents/game-developer.md +162 -162
  24. package/.agent/agents/gan-evaluator.md +209 -209
  25. package/.agent/agents/gan-generator.md +131 -131
  26. package/.agent/agents/gan-planner.md +99 -99
  27. package/.agent/agents/go-build-resolver.md +94 -94
  28. package/.agent/agents/go-reviewer.md +76 -76
  29. package/.agent/agents/harness-optimizer.md +35 -35
  30. package/.agent/agents/healthcare-reviewer.md +83 -83
  31. package/.agent/agents/java-build-resolver.md +153 -153
  32. package/.agent/agents/java-reviewer.md +92 -92
  33. package/.agent/agents/kotlin-build-resolver.md +118 -118
  34. package/.agent/agents/kotlin-reviewer.md +159 -159
  35. package/.agent/agents/loop-operator.md +36 -36
  36. package/.agent/agents/mobile-developer.md +377 -377
  37. package/.agent/agents/opensource-forker.md +198 -198
  38. package/.agent/agents/opensource-packager.md +249 -249
  39. package/.agent/agents/opensource-sanitizer.md +188 -188
  40. package/.agent/agents/orchestrator.md +416 -416
  41. package/.agent/agents/penetration-tester.md +188 -188
  42. package/.agent/agents/performance-optimizer.md +446 -446
  43. package/.agent/agents/personas/athena-agent/agent.json +10 -10
  44. package/.agent/agents/personas/athena-agent/athena-backend-logic-architecture-profile.md +3 -3
  45. package/.agent/agents/personas/athena-agent/context-files/agents.md +1 -1
  46. package/.agent/agents/personas/athena-agent/context-files/identity.md +1 -1
  47. package/.agent/agents/personas/athena-agent/context-files/soul.md +1 -1
  48. package/.agent/agents/personas/athena-agent/context-files/user-predefined.md +1 -1
  49. package/.agent/agents/personas/athena-agent/user-context-files/system/bootstrap.md +1 -1
  50. package/.agent/agents/personas/athena-agent/user-context-files/system/user.md +1 -1
  51. package/.agent/agents/personas/da-vinci-agent/agent.json +10 -10
  52. package/.agent/agents/personas/da-vinci-agent/context-files/agents.md +1 -1
  53. package/.agent/agents/personas/da-vinci-agent/context-files/identity.md +1 -1
  54. package/.agent/agents/personas/da-vinci-agent/context-files/soul.md +1 -1
  55. package/.agent/agents/personas/da-vinci-agent/context-files/user-predefined.md +1 -1
  56. package/.agent/agents/personas/da-vinci-agent/da-vinci-frontend-ui-ux-design-profile.md +3 -3
  57. package/.agent/agents/personas/da-vinci-agent/user-context-files/system/bootstrap.md +1 -1
  58. package/.agent/agents/personas/da-vinci-agent/user-context-files/system/user.md +1 -1
  59. package/.agent/agents/personas/duong-tang-agent/agent.json +10 -10
  60. package/.agent/agents/personas/duong-tang-agent/context-files/agents.md +1 -1
  61. package/.agent/agents/personas/duong-tang-agent/context-files/identity.md +1 -1
  62. package/.agent/agents/personas/duong-tang-agent/context-files/soul.md +1 -1
  63. package/.agent/agents/personas/duong-tang-agent/context-files/user-predefined.md +1 -1
  64. package/.agent/agents/personas/duong-tang-agent/tang-monk-quality-testing-documentation-profile.md +3 -3
  65. package/.agent/agents/personas/duong-tang-agent/user-context-files/system/bootstrap.md +1 -1
  66. package/.agent/agents/personas/duong-tang-agent/user-context-files/system/user.md +1 -1
  67. package/.agent/agents/personas/gia-cat-luong-agent/agent.json +10 -10
  68. package/.agent/agents/personas/gia-cat-luong-agent/context-files/agents.md +1 -1
  69. package/.agent/agents/personas/gia-cat-luong-agent/context-files/identity.md +1 -1
  70. package/.agent/agents/personas/gia-cat-luong-agent/context-files/soul.md +1 -1
  71. package/.agent/agents/personas/gia-cat-luong-agent/context-files/user-predefined.md +1 -1
  72. package/.agent/agents/personas/gia-cat-luong-agent/kongming-research-strategy-analysis-profile.md +3 -3
  73. package/.agent/agents/personas/gia-cat-luong-agent/user-context-files/system/bootstrap.md +1 -1
  74. package/.agent/agents/personas/gia-cat-luong-agent/user-context-files/system/user.md +1 -1
  75. package/.agent/agents/personas/mihata-agent/agent.json +10 -10
  76. package/.agent/agents/personas/mihata-agent/context-files/agents.md +1 -1
  77. package/.agent/agents/personas/mihata-agent/context-files/identity.md +1 -1
  78. package/.agent/agents/personas/mihata-agent/context-files/soul.md +1 -1
  79. package/.agent/agents/personas/mihata-agent/context-files/user-predefined.md +1 -1
  80. package/.agent/agents/personas/mihata-agent/mihata-multi-agent-orchestration-profile.md +3 -3
  81. package/.agent/agents/personas/mihata-agent/user-context-files/system/bootstrap.md +1 -1
  82. package/.agent/agents/personas/mihata-agent/user-context-files/system/user.md +1 -1
  83. package/.agent/agents/personas/tesla-agent/agent.json +10 -10
  84. package/.agent/agents/personas/tesla-agent/context-files/agents.md +1 -1
  85. package/.agent/agents/personas/tesla-agent/context-files/identity.md +1 -1
  86. package/.agent/agents/personas/tesla-agent/context-files/soul.md +1 -1
  87. package/.agent/agents/personas/tesla-agent/context-files/user-predefined.md +1 -1
  88. package/.agent/agents/personas/tesla-agent/tesla-fullstack-system-optimization-profile.md +3 -3
  89. package/.agent/agents/personas/tesla-agent/user-context-files/system/bootstrap.md +1 -1
  90. package/.agent/agents/personas/tesla-agent/user-context-files/system/user.md +1 -1
  91. package/.agent/agents/personas/tu-ma-y-agent/agent.json +10 -10
  92. package/.agent/agents/personas/tu-ma-y-agent/context-files/agents.md +1 -1
  93. package/.agent/agents/personas/tu-ma-y-agent/context-files/identity.md +1 -1
  94. package/.agent/agents/personas/tu-ma-y-agent/context-files/soul.md +1 -1
  95. package/.agent/agents/personas/tu-ma-y-agent/context-files/user-predefined.md +1 -1
  96. package/.agent/agents/personas/tu-ma-y-agent/simayi-feasibility-risk-control-profile.md +3 -3
  97. package/.agent/agents/personas/tu-ma-y-agent/user-context-files/system/bootstrap.md +1 -1
  98. package/.agent/agents/personas/tu-ma-y-agent/user-context-files/system/user.md +1 -1
  99. package/.agent/agents/personas/venti-agent/agent.json +10 -10
  100. package/.agent/agents/personas/venti-agent/context-files/agents.md +1 -1
  101. package/.agent/agents/personas/venti-agent/context-files/identity.md +1 -1
  102. package/.agent/agents/personas/venti-agent/context-files/soul.md +1 -1
  103. package/.agent/agents/personas/venti-agent/context-files/user-predefined.md +1 -1
  104. package/.agent/agents/personas/venti-agent/user-context-files/system/bootstrap.md +1 -1
  105. package/.agent/agents/personas/venti-agent/user-context-files/system/user.md +1 -1
  106. package/.agent/agents/personas/venti-agent/venti-learning-communication-mentoring-profile.md +3 -3
  107. package/.agent/agents/planner.md +212 -212
  108. package/.agent/agents/product-manager.md +112 -112
  109. package/.agent/agents/product-owner.md +95 -95
  110. package/.agent/agents/project-planner.md +406 -406
  111. package/.agent/agents/python-reviewer.md +98 -98
  112. package/.agent/agents/pytorch-build-resolver.md +120 -120
  113. package/.agent/agents/qa-automation-engineer.md +103 -103
  114. package/.agent/agents/refactor-cleaner.md +85 -85
  115. package/.agent/agents/rust-build-resolver.md +148 -148
  116. package/.agent/agents/rust-reviewer.md +94 -94
  117. package/.agent/agents/security-auditor.md +170 -170
  118. package/.agent/agents/security-reviewer.md +108 -108
  119. package/.agent/agents/seo-specialist.md +111 -111
  120. package/.agent/agents/tdd-guide.md +91 -91
  121. package/.agent/agents/test-engineer.md +158 -158
  122. package/.agent/agents/typescript-reviewer.md +112 -112
  123. package/.agent/contexts/dev.md +20 -20
  124. package/.agent/contexts/research.md +26 -26
  125. package/.agent/contexts/review.md +22 -22
  126. package/.agent/hooks/hooks.json +395 -395
  127. package/.agent/hooks/readme.md +222 -222
  128. package/.agent/mcp-configs/mcp-servers.json +181 -181
  129. package/.agent/rules/ARCHITECTURAL_BLUEPRINTS.md +62 -62
  130. package/.agent/rules/CODE_CRAFTSMANSHIP.md +69 -69
  131. package/.agent/rules/CORE_RULES.md +72 -72
  132. package/.agent/rules/PROJECT_MAP.md +58 -58
  133. package/.agent/rules/QUALITY_ASSURANCE.md +54 -54
  134. package/.agent/rules/SECURITY_ARMOR.md +44 -44
  135. package/.agent/rules/VERSION_ORCHESTRATION.md +64 -64
  136. package/.agent/rules/WORKFLOW_ORCHESTRATION.md +55 -55
  137. package/.agent/rules/common/agents.md +50 -50
  138. package/.agent/rules/common/code-review.md +124 -124
  139. package/.agent/rules/common/coding-style.md +48 -48
  140. package/.agent/rules/common/development-workflow.md +44 -44
  141. package/.agent/rules/common/git-workflow.md +24 -24
  142. package/.agent/rules/common/hooks.md +30 -30
  143. package/.agent/rules/common/patterns.md +31 -31
  144. package/.agent/rules/common/performance.md +55 -55
  145. package/.agent/rules/common/security.md +29 -29
  146. package/.agent/rules/common/testing.md +29 -29
  147. package/.agent/rules/cpp/coding-style.md +44 -44
  148. package/.agent/rules/cpp/hooks.md +39 -39
  149. package/.agent/rules/cpp/patterns.md +51 -51
  150. package/.agent/rules/cpp/security.md +51 -51
  151. package/.agent/rules/cpp/testing.md +44 -44
  152. package/.agent/rules/csharp/coding-style.md +72 -72
  153. package/.agent/rules/csharp/hooks.md +25 -25
  154. package/.agent/rules/csharp/patterns.md +50 -50
  155. package/.agent/rules/csharp/security.md +58 -58
  156. package/.agent/rules/csharp/testing.md +46 -46
  157. package/.agent/rules/dart/coding-style.md +159 -159
  158. package/.agent/rules/dart/hooks.md +66 -66
  159. package/.agent/rules/dart/patterns.md +261 -261
  160. package/.agent/rules/dart/security.md +135 -135
  161. package/.agent/rules/dart/testing.md +215 -215
  162. package/.agent/rules/golang/coding-style.md +32 -32
  163. package/.agent/rules/golang/hooks.md +17 -17
  164. package/.agent/rules/golang/patterns.md +45 -45
  165. package/.agent/rules/golang/security.md +34 -34
  166. package/.agent/rules/golang/testing.md +31 -31
  167. package/.agent/rules/java/coding-style.md +114 -114
  168. package/.agent/rules/java/hooks.md +18 -18
  169. package/.agent/rules/java/patterns.md +146 -146
  170. package/.agent/rules/java/security.md +100 -100
  171. package/.agent/rules/java/testing.md +131 -131
  172. package/.agent/rules/kotlin/coding-style.md +86 -86
  173. package/.agent/rules/kotlin/hooks.md +17 -17
  174. package/.agent/rules/kotlin/patterns.md +146 -146
  175. package/.agent/rules/kotlin/security.md +82 -82
  176. package/.agent/rules/kotlin/testing.md +128 -128
  177. package/.agent/rules/perl/coding-style.md +46 -46
  178. package/.agent/rules/perl/hooks.md +22 -22
  179. package/.agent/rules/perl/patterns.md +76 -76
  180. package/.agent/rules/perl/security.md +69 -69
  181. package/.agent/rules/perl/testing.md +54 -54
  182. package/.agent/rules/php/coding-style.md +40 -40
  183. package/.agent/rules/php/hooks.md +24 -24
  184. package/.agent/rules/php/patterns.md +33 -33
  185. package/.agent/rules/php/security.md +37 -37
  186. package/.agent/rules/php/testing.md +39 -39
  187. package/.agent/rules/python/coding-style.md +42 -42
  188. package/.agent/rules/python/hooks.md +19 -19
  189. package/.agent/rules/python/patterns.md +39 -39
  190. package/.agent/rules/python/security.md +30 -30
  191. package/.agent/rules/python/testing.md +38 -38
  192. package/.agent/rules/readme.md +111 -111
  193. package/.agent/rules/rust/coding-style.md +151 -151
  194. package/.agent/rules/rust/hooks.md +16 -16
  195. package/.agent/rules/rust/patterns.md +168 -168
  196. package/.agent/rules/rust/security.md +141 -141
  197. package/.agent/rules/rust/testing.md +154 -154
  198. package/.agent/rules/swift/coding-style.md +47 -47
  199. package/.agent/rules/swift/hooks.md +20 -20
  200. package/.agent/rules/swift/patterns.md +66 -66
  201. package/.agent/rules/swift/security.md +33 -33
  202. package/.agent/rules/swift/testing.md +45 -45
  203. package/.agent/rules/typescript/coding-style.md +199 -199
  204. package/.agent/rules/typescript/hooks.md +22 -22
  205. package/.agent/rules/typescript/patterns.md +52 -52
  206. package/.agent/rules/typescript/security.md +28 -28
  207. package/.agent/rules/typescript/testing.md +18 -18
  208. package/.agent/rules/web/coding-style.md +96 -96
  209. package/.agent/rules/web/design-quality.md +63 -63
  210. package/.agent/rules/web/hooks.md +120 -120
  211. package/.agent/rules/web/patterns.md +79 -79
  212. package/.agent/rules/web/performance.md +64 -64
  213. package/.agent/rules/web/security.md +57 -57
  214. package/.agent/rules/web/testing.md +55 -55
  215. package/.agent/rules/zh/agents.md +50 -50
  216. package/.agent/rules/zh/code-review.md +124 -124
  217. package/.agent/rules/zh/coding-style.md +48 -48
  218. package/.agent/rules/zh/development-workflow.md +44 -44
  219. package/.agent/rules/zh/git-workflow.md +24 -24
  220. package/.agent/rules/zh/hooks.md +30 -30
  221. package/.agent/rules/zh/patterns.md +31 -31
  222. package/.agent/rules/zh/performance.md +55 -55
  223. package/.agent/rules/zh/readme.md +108 -108
  224. package/.agent/rules/zh/security.md +29 -29
  225. package/.agent/rules/zh/testing.md +29 -29
  226. package/.agent/scripts/auto_preview.py +148 -148
  227. package/.agent/scripts/checklist.py +217 -217
  228. package/.agent/scripts/session_manager.py +120 -120
  229. package/.agent/scripts/verify_all.py +327 -327
  230. package/.agent/skills/agent-eval/SKILL.md +145 -145
  231. package/.agent/skills/agent-harness-construction/SKILL.md +73 -73
  232. package/.agent/skills/agent-payment-x402/SKILL.md +178 -178
  233. package/.agent/skills/agentic-engineering/SKILL.md +63 -63
  234. package/.agent/skills/ai-first-engineering/SKILL.md +51 -51
  235. package/.agent/skills/ai-regression-testing/SKILL.md +385 -385
  236. package/.agent/skills/android-clean-architecture/SKILL.md +339 -339
  237. package/.agent/skills/api-design/SKILL.md +523 -523
  238. package/.agent/skills/api-patterns/SKILL.md +81 -81
  239. package/.agent/skills/api-patterns/api-style.md +42 -42
  240. package/.agent/skills/api-patterns/auth.md +24 -24
  241. package/.agent/skills/api-patterns/documentation.md +26 -26
  242. package/.agent/skills/api-patterns/graphql.md +41 -41
  243. package/.agent/skills/api-patterns/rate-limiting.md +31 -31
  244. package/.agent/skills/api-patterns/response.md +37 -37
  245. package/.agent/skills/api-patterns/rest.md +40 -40
  246. package/.agent/skills/api-patterns/scripts/api_validator.py +211 -211
  247. package/.agent/skills/api-patterns/security-testing.md +122 -122
  248. package/.agent/skills/api-patterns/trpc.md +41 -41
  249. package/.agent/skills/api-patterns/versioning.md +22 -22
  250. package/.agent/skills/app-builder/SKILL.md +75 -75
  251. package/.agent/skills/app-builder/agent-coordination.md +71 -71
  252. package/.agent/skills/app-builder/feature-building.md +53 -53
  253. package/.agent/skills/app-builder/project-detection.md +34 -34
  254. package/.agent/skills/app-builder/scaffolding.md +118 -118
  255. package/.agent/skills/app-builder/tech-stack.md +41 -41
  256. package/.agent/skills/app-builder/templates/SKILL.md +39 -39
  257. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -76
  258. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -92
  259. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -88
  260. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -88
  261. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -83
  262. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -90
  263. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -90
  264. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -122
  265. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -122
  266. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -169
  267. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -134
  268. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -83
  269. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -119
  270. package/.agent/skills/architecture/SKILL.md +55 -55
  271. package/.agent/skills/architecture/context-discovery.md +43 -43
  272. package/.agent/skills/architecture/examples.md +94 -94
  273. package/.agent/skills/architecture/pattern-selection.md +68 -68
  274. package/.agent/skills/architecture/patterns-reference.md +50 -50
  275. package/.agent/skills/architecture/trade-off-analysis.md +77 -77
  276. package/.agent/skills/architecture-decision-records/SKILL.md +179 -179
  277. package/.agent/skills/article-writing/SKILL.md +79 -79
  278. package/.agent/skills/autonomous-agent-harness/SKILL.md +267 -267
  279. package/.agent/skills/autonomous-loops/SKILL.md +610 -610
  280. package/.agent/skills/backend-patterns/SKILL.md +598 -598
  281. package/.agent/skills/bash-linux/SKILL.md +199 -199
  282. package/.agent/skills/behavioral-modes/SKILL.md +242 -242
  283. package/.agent/skills/benchmark/SKILL.md +93 -93
  284. package/.agent/skills/blueprint/SKILL.md +105 -105
  285. package/.agent/skills/brainstorming/SKILL.md +163 -163
  286. package/.agent/skills/brainstorming/dynamic-questioning.md +350 -350
  287. package/.agent/skills/brand-voice/SKILL.md +97 -97
  288. package/.agent/skills/brand-voice/references/voice-profile-schema.md +55 -55
  289. package/.agent/skills/browser-qa/SKILL.md +87 -87
  290. package/.agent/skills/bun-runtime/SKILL.md +84 -84
  291. package/.agent/skills/canary-watch/SKILL.md +99 -99
  292. package/.agent/skills/carrier-relationship-management/SKILL.md +212 -212
  293. package/.agent/skills/ck/SKILL.md +147 -147
  294. package/.agent/skills/ck/commands/forget.mjs +44 -44
  295. package/.agent/skills/ck/commands/info.mjs +24 -24
  296. package/.agent/skills/ck/commands/init.mjs +143 -143
  297. package/.agent/skills/ck/commands/list.mjs +40 -40
  298. package/.agent/skills/ck/commands/migrate.mjs +202 -202
  299. package/.agent/skills/ck/commands/resume.mjs +36 -36
  300. package/.agent/skills/ck/commands/save.mjs +210 -210
  301. package/.agent/skills/ck/commands/shared.mjs +387 -387
  302. package/.agent/skills/ck/hooks/session-start.mjs +224 -224
  303. package/.agent/skills/claude-api/SKILL.md +337 -337
  304. package/.agent/skills/claude-devfleet/SKILL.md +103 -103
  305. package/.agent/skills/clean-code/SKILL.md +201 -201
  306. package/.agent/skills/click-path-audit/SKILL.md +244 -244
  307. package/.agent/skills/clickhouse-io/SKILL.md +439 -439
  308. package/.agent/skills/code-review-checklist/SKILL.md +109 -109
  309. package/.agent/skills/codebase-onboarding/SKILL.md +233 -233
  310. package/.agent/skills/coding-standards/SKILL.md +530 -530
  311. package/.agent/skills/compose-multiplatform-patterns/SKILL.md +299 -299
  312. package/.agent/skills/configure-ecc/SKILL.md +367 -367
  313. package/.agent/skills/connections-optimizer/SKILL.md +189 -189
  314. package/.agent/skills/content-engine/SKILL.md +131 -131
  315. package/.agent/skills/content-hash-cache-pattern/SKILL.md +161 -161
  316. package/.agent/skills/context-budget/SKILL.md +135 -135
  317. package/.agent/skills/continuous-agent-loop/SKILL.md +45 -45
  318. package/.agent/skills/continuous-learning/SKILL.md +119 -119
  319. package/.agent/skills/continuous-learning/config.json +18 -18
  320. package/.agent/skills/continuous-learning/evaluate-session.sh +69 -69
  321. package/.agent/skills/continuous-learning-v2/SKILL.md +365 -365
  322. package/.agent/skills/continuous-learning-v2/agents/observer-loop.sh +271 -271
  323. package/.agent/skills/continuous-learning-v2/agents/observer.md +198 -198
  324. package/.agent/skills/continuous-learning-v2/agents/session-guardian.sh +150 -150
  325. package/.agent/skills/continuous-learning-v2/agents/start-observer.sh +244 -244
  326. package/.agent/skills/continuous-learning-v2/config.json +8 -8
  327. package/.agent/skills/continuous-learning-v2/hooks/observe.sh +428 -428
  328. package/.agent/skills/continuous-learning-v2/scripts/detect-project.sh +228 -228
  329. package/.agent/skills/continuous-learning-v2/scripts/instinct-cli.py +1426 -1426
  330. package/.agent/skills/continuous-learning-v2/scripts/test-parse-instinct.py +984 -984
  331. package/.agent/skills/cost-aware-llm-pipeline/SKILL.md +183 -183
  332. package/.agent/skills/cpp-coding-standards/SKILL.md +723 -723
  333. package/.agent/skills/cpp-testing/SKILL.md +324 -324
  334. package/.agent/skills/crosspost/SKILL.md +111 -111
  335. package/.agent/skills/csharp-testing/SKILL.md +321 -321
  336. package/.agent/skills/customer-billing-ops/SKILL.md +140 -140
  337. package/.agent/skills/customs-trade-compliance/SKILL.md +263 -263
  338. package/.agent/skills/dart-flutter-patterns/SKILL.md +563 -563
  339. package/.agent/skills/data-scraper-agent/SKILL.md +764 -764
  340. package/.agent/skills/database-design/SKILL.md +52 -52
  341. package/.agent/skills/database-design/database-selection.md +43 -43
  342. package/.agent/skills/database-design/indexing.md +39 -39
  343. package/.agent/skills/database-design/migrations.md +48 -48
  344. package/.agent/skills/database-design/optimization.md +36 -36
  345. package/.agent/skills/database-design/orm-selection.md +30 -30
  346. package/.agent/skills/database-design/schema-design.md +56 -56
  347. package/.agent/skills/database-design/scripts/schema_validator.py +172 -172
  348. package/.agent/skills/database-migrations/SKILL.md +429 -429
  349. package/.agent/skills/deep-research/SKILL.md +155 -155
  350. package/.agent/skills/deployment-patterns/SKILL.md +427 -427
  351. package/.agent/skills/deployment-procedures/SKILL.md +241 -241
  352. package/.agent/skills/design-system/SKILL.md +82 -82
  353. package/.agent/skills/django-patterns/SKILL.md +734 -734
  354. package/.agent/skills/django-security/SKILL.md +593 -593
  355. package/.agent/skills/django-tdd/SKILL.md +729 -729
  356. package/.agent/skills/django-verification/SKILL.md +469 -469
  357. package/.agent/skills/dmux-workflows/SKILL.md +191 -191
  358. package/.agent/skills/doc.md +177 -177
  359. package/.agent/skills/docker-patterns/SKILL.md +364 -364
  360. package/.agent/skills/documentation-lookup/SKILL.md +90 -90
  361. package/.agent/skills/documentation-templates/SKILL.md +194 -194
  362. package/.agent/skills/dotnet-patterns/SKILL.md +321 -321
  363. package/.agent/skills/e2e-testing/SKILL.md +326 -326
  364. package/.agent/skills/energy-procurement/SKILL.md +228 -228
  365. package/.agent/skills/enterprise-agent-ops/SKILL.md +50 -50
  366. package/.agent/skills/eval-harness/SKILL.md +270 -270
  367. package/.agent/skills/exa-search/SKILL.md +103 -103
  368. package/.agent/skills/fal-ai-media/SKILL.md +284 -284
  369. package/.agent/skills/flutter-dart-code-review/SKILL.md +435 -435
  370. package/.agent/skills/foundation-models-on-device/SKILL.md +243 -243
  371. package/.agent/skills/frontend-design/SKILL.md +452 -452
  372. package/.agent/skills/frontend-design/animation-guide.md +331 -331
  373. package/.agent/skills/frontend-design/color-system.md +311 -311
  374. package/.agent/skills/frontend-design/decision-trees.md +418 -418
  375. package/.agent/skills/frontend-design/motion-graphics.md +306 -306
  376. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -183
  377. package/.agent/skills/frontend-design/scripts/ux_audit.py +722 -722
  378. package/.agent/skills/frontend-design/typography-system.md +345 -345
  379. package/.agent/skills/frontend-design/ux-psychology.md +1116 -1116
  380. package/.agent/skills/frontend-design/visual-effects.md +383 -383
  381. package/.agent/skills/frontend-patterns/SKILL.md +642 -642
  382. package/.agent/skills/frontend-slides/SKILL.md +184 -184
  383. package/.agent/skills/frontend-slides/style-presets.md +330 -330
  384. package/.agent/skills/game-development/2d-games/SKILL.md +119 -119
  385. package/.agent/skills/game-development/3d-games/SKILL.md +135 -135
  386. package/.agent/skills/game-development/SKILL.md +167 -167
  387. package/.agent/skills/game-development/game-art/SKILL.md +185 -185
  388. package/.agent/skills/game-development/game-audio/SKILL.md +190 -190
  389. package/.agent/skills/game-development/game-design/SKILL.md +129 -129
  390. package/.agent/skills/game-development/mobile-games/SKILL.md +108 -108
  391. package/.agent/skills/game-development/multiplayer/SKILL.md +132 -132
  392. package/.agent/skills/game-development/pc-games/SKILL.md +144 -144
  393. package/.agent/skills/game-development/vr-ar/SKILL.md +123 -123
  394. package/.agent/skills/game-development/web-games/SKILL.md +150 -150
  395. package/.agent/skills/gan-style-harness/SKILL.md +278 -278
  396. package/.agent/skills/geo-fundamentals/SKILL.md +156 -156
  397. package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -289
  398. package/.agent/skills/git-workflow/SKILL.md +715 -715
  399. package/.agent/skills/golang-patterns/SKILL.md +674 -674
  400. package/.agent/skills/golang-testing/SKILL.md +720 -720
  401. package/.agent/skills/google-workspace-ops/SKILL.md +95 -95
  402. package/.agent/skills/healthcare-cdss-patterns/SKILL.md +245 -245
  403. package/.agent/skills/healthcare-emr-patterns/SKILL.md +159 -159
  404. package/.agent/skills/healthcare-eval-harness/SKILL.md +207 -207
  405. package/.agent/skills/healthcare-phi-compliance/SKILL.md +145 -145
  406. package/.agent/skills/hexagonal-architecture/SKILL.md +276 -276
  407. package/.agent/skills/i18n-localization/SKILL.md +154 -154
  408. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -241
  409. package/.agent/skills/intelligent-routing/SKILL.md +335 -335
  410. package/.agent/skills/inventory-demand-planning/SKILL.md +247 -247
  411. package/.agent/skills/investor-materials/SKILL.md +96 -96
  412. package/.agent/skills/investor-outreach/SKILL.md +91 -91
  413. package/.agent/skills/iterative-retrieval/SKILL.md +211 -211
  414. package/.agent/skills/java-coding-standards/SKILL.md +147 -147
  415. package/.agent/skills/jira-integration/SKILL.md +293 -293
  416. package/.agent/skills/jpa-patterns/SKILL.md +151 -151
  417. package/.agent/skills/kotlin-coroutines-flows/SKILL.md +284 -284
  418. package/.agent/skills/kotlin-exposed-patterns/SKILL.md +719 -719
  419. package/.agent/skills/kotlin-ktor-patterns/SKILL.md +689 -689
  420. package/.agent/skills/kotlin-patterns/SKILL.md +711 -711
  421. package/.agent/skills/kotlin-testing/SKILL.md +824 -824
  422. package/.agent/skills/laravel-patterns/SKILL.md +415 -415
  423. package/.agent/skills/laravel-plugin-discovery/SKILL.md +229 -229
  424. package/.agent/skills/laravel-security/SKILL.md +285 -285
  425. package/.agent/skills/laravel-tdd/SKILL.md +283 -283
  426. package/.agent/skills/laravel-verification/SKILL.md +179 -179
  427. package/.agent/skills/lead-intelligence/SKILL.md +321 -321
  428. package/.agent/skills/lead-intelligence/agents/enrichment-agent.md +85 -85
  429. package/.agent/skills/lead-intelligence/agents/mutual-mapper.md +75 -75
  430. package/.agent/skills/lead-intelligence/agents/outreach-drafter.md +98 -98
  431. package/.agent/skills/lead-intelligence/agents/signal-scorer.md +60 -60
  432. package/.agent/skills/lint-and-validate/SKILL.md +45 -45
  433. package/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -184
  434. package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -173
  435. package/.agent/skills/liquid-glass-design/SKILL.md +279 -279
  436. package/.agent/skills/logistics-exception-management/SKILL.md +222 -222
  437. package/.agent/skills/manim-video/SKILL.md +89 -89
  438. package/.agent/skills/manim-video/assets/network-graph-scene.py +52 -52
  439. package/.agent/skills/market-research/SKILL.md +75 -75
  440. package/.agent/skills/mcp-server-patterns/SKILL.md +67 -67
  441. package/.agent/skills/mobile-design/SKILL.md +394 -394
  442. package/.agent/skills/mobile-design/decision-trees.md +516 -516
  443. package/.agent/skills/mobile-design/mobile-backend.md +491 -491
  444. package/.agent/skills/mobile-design/mobile-color-system.md +420 -420
  445. package/.agent/skills/mobile-design/mobile-debugging.md +122 -122
  446. package/.agent/skills/mobile-design/mobile-design-thinking.md +357 -357
  447. package/.agent/skills/mobile-design/mobile-navigation.md +458 -458
  448. package/.agent/skills/mobile-design/mobile-performance.md +767 -767
  449. package/.agent/skills/mobile-design/mobile-testing.md +356 -356
  450. package/.agent/skills/mobile-design/mobile-typography.md +433 -433
  451. package/.agent/skills/mobile-design/platform-android.md +666 -666
  452. package/.agent/skills/mobile-design/platform-ios.md +561 -561
  453. package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -670
  454. package/.agent/skills/mobile-design/touch-psychology.md +537 -537
  455. package/.agent/skills/nanoclaw-repl/SKILL.md +33 -33
  456. package/.agent/skills/nestjs-patterns/SKILL.md +230 -230
  457. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +351 -351
  458. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -240
  459. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -490
  460. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -264
  461. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -581
  462. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -432
  463. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -684
  464. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -150
  465. package/.agent/skills/nextjs-react-expert/9-cache-components.md +103 -103
  466. package/.agent/skills/nextjs-react-expert/SKILL.md +293 -293
  467. package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -222
  468. package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -252
  469. package/.agent/skills/nextjs-turbopack/SKILL.md +44 -44
  470. package/.agent/skills/nodejs-best-practices/SKILL.md +333 -333
  471. package/.agent/skills/nutrient-document-processing/SKILL.md +167 -167
  472. package/.agent/skills/nuxt4-patterns/SKILL.md +100 -100
  473. package/.agent/skills/openclaw-persona-forge/SKILL.md +296 -296
  474. package/.agent/skills/openclaw-persona-forge/gacha.py +224 -224
  475. package/.agent/skills/openclaw-persona-forge/gacha.sh +5 -5
  476. package/.agent/skills/openclaw-persona-forge/references/avatar-style.md +124 -124
  477. package/.agent/skills/openclaw-persona-forge/references/boundary-rules.md +53 -53
  478. package/.agent/skills/openclaw-persona-forge/references/error-handling.md +53 -53
  479. package/.agent/skills/openclaw-persona-forge/references/identity-tension.md +48 -48
  480. package/.agent/skills/openclaw-persona-forge/references/naming-system.md +39 -39
  481. package/.agent/skills/openclaw-persona-forge/references/output-template.md +166 -166
  482. package/.agent/skills/opensource-pipeline/SKILL.md +255 -255
  483. package/.agent/skills/parallel-agents/SKILL.md +175 -175
  484. package/.agent/skills/performance-profiling/SKILL.md +143 -143
  485. package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -76
  486. package/.agent/skills/perl-patterns/SKILL.md +504 -504
  487. package/.agent/skills/perl-security/SKILL.md +503 -503
  488. package/.agent/skills/perl-testing/SKILL.md +475 -475
  489. package/.agent/skills/plan-writing/SKILL.md +152 -152
  490. package/.agent/skills/plankton-code-quality/SKILL.md +236 -236
  491. package/.agent/skills/postgres-patterns/SKILL.md +147 -147
  492. package/.agent/skills/powershell-windows/SKILL.md +167 -167
  493. package/.agent/skills/product-lens/SKILL.md +85 -85
  494. package/.agent/skills/production-scheduling/SKILL.md +238 -238
  495. package/.agent/skills/project-flow-ops/SKILL.md +111 -111
  496. package/.agent/skills/project-guidelines-example/SKILL.md +349 -349
  497. package/.agent/skills/prompt-optimizer/SKILL.md +397 -397
  498. package/.agent/skills/python-patterns/SKILL.md +750 -750
  499. package/.agent/skills/python-testing/SKILL.md +816 -816
  500. package/.agent/skills/pytorch-patterns/SKILL.md +396 -396
  501. package/.agent/skills/quality-nonconformance/SKILL.md +260 -260
  502. package/.agent/skills/ralphinho-rfc-pipeline/SKILL.md +67 -67
  503. package/.agent/skills/red-team-tactics/SKILL.md +199 -199
  504. package/.agent/skills/regex-vs-llm-structured-text/SKILL.md +220 -220
  505. package/.agent/skills/remotion-video-creation/SKILL.md +43 -43
  506. package/.agent/skills/remotion-video-creation/rules/3d.md +86 -86
  507. package/.agent/skills/remotion-video-creation/rules/animations.md +29 -29
  508. package/.agent/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -173
  509. package/.agent/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -100
  510. package/.agent/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -108
  511. package/.agent/skills/remotion-video-creation/rules/assets.md +78 -78
  512. package/.agent/skills/remotion-video-creation/rules/audio.md +172 -172
  513. package/.agent/skills/remotion-video-creation/rules/calculate-metadata.md +104 -104
  514. package/.agent/skills/remotion-video-creation/rules/can-decode.md +75 -75
  515. package/.agent/skills/remotion-video-creation/rules/charts.md +58 -58
  516. package/.agent/skills/remotion-video-creation/rules/compositions.md +146 -146
  517. package/.agent/skills/remotion-video-creation/rules/display-captions.md +126 -126
  518. package/.agent/skills/remotion-video-creation/rules/extract-frames.md +229 -229
  519. package/.agent/skills/remotion-video-creation/rules/fonts.md +152 -152
  520. package/.agent/skills/remotion-video-creation/rules/get-audio-duration.md +58 -58
  521. package/.agent/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -68
  522. package/.agent/skills/remotion-video-creation/rules/get-video-duration.md +58 -58
  523. package/.agent/skills/remotion-video-creation/rules/gifs.md +138 -138
  524. package/.agent/skills/remotion-video-creation/rules/images.md +130 -130
  525. package/.agent/skills/remotion-video-creation/rules/import-srt-captions.md +67 -67
  526. package/.agent/skills/remotion-video-creation/rules/lottie.md +67 -67
  527. package/.agent/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -34
  528. package/.agent/skills/remotion-video-creation/rules/measuring-text.md +143 -143
  529. package/.agent/skills/remotion-video-creation/rules/sequencing.md +106 -106
  530. package/.agent/skills/remotion-video-creation/rules/tailwind.md +11 -11
  531. package/.agent/skills/remotion-video-creation/rules/text-animations.md +20 -20
  532. package/.agent/skills/remotion-video-creation/rules/timing.md +179 -179
  533. package/.agent/skills/remotion-video-creation/rules/transcribe-captions.md +19 -19
  534. package/.agent/skills/remotion-video-creation/rules/transitions.md +122 -122
  535. package/.agent/skills/remotion-video-creation/rules/trimming.md +52 -52
  536. package/.agent/skills/remotion-video-creation/rules/videos.md +171 -171
  537. package/.agent/skills/repo-scan/SKILL.md +63 -63
  538. package/.agent/skills/returns-reverse-logistics/SKILL.md +240 -240
  539. package/.agent/skills/rules-distill/SKILL.md +264 -264
  540. package/.agent/skills/rules-distill/scripts/scan-rules.sh +58 -58
  541. package/.agent/skills/rules-distill/scripts/scan-skills.sh +129 -129
  542. package/.agent/skills/rust-patterns/SKILL.md +499 -499
  543. package/.agent/skills/rust-pro/SKILL.md +175 -175
  544. package/.agent/skills/rust-testing/SKILL.md +500 -500
  545. package/.agent/skills/safety-guard/SKILL.md +75 -75
  546. package/.agent/skills/santa-method/SKILL.md +306 -306
  547. package/.agent/skills/search-first/SKILL.md +161 -161
  548. package/.agent/skills/security-review/SKILL.md +495 -495
  549. package/.agent/skills/security-review/cloud-infrastructure-security.md +361 -361
  550. package/.agent/skills/security-scan/SKILL.md +165 -165
  551. package/.agent/skills/seo-fundamentals/SKILL.md +129 -129
  552. package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +219 -219
  553. package/.agent/skills/server-management/SKILL.md +161 -161
  554. package/.agent/skills/skill-comply/SKILL.md +58 -58
  555. package/.agent/skills/skill-comply/fixtures/compliant-trace.jsonl +5 -5
  556. package/.agent/skills/skill-comply/fixtures/noncompliant-trace.jsonl +3 -3
  557. package/.agent/skills/skill-comply/fixtures/tdd-spec.yaml +44 -44
  558. package/.agent/skills/skill-comply/prompts/classifier.md +24 -24
  559. package/.agent/skills/skill-comply/prompts/scenario-generator.md +62 -62
  560. package/.agent/skills/skill-comply/prompts/spec-generator.md +42 -42
  561. package/.agent/skills/skill-comply/pyproject.toml +15 -15
  562. package/.agent/skills/skill-comply/scripts/classifier.py +85 -85
  563. package/.agent/skills/skill-comply/scripts/grader.py +122 -122
  564. package/.agent/skills/skill-comply/scripts/parser.py +107 -107
  565. package/.agent/skills/skill-comply/scripts/report.py +170 -170
  566. package/.agent/skills/skill-comply/scripts/run.py +127 -127
  567. package/.agent/skills/skill-comply/scripts/runner.py +161 -161
  568. package/.agent/skills/skill-comply/scripts/scenario-generator.py +70 -70
  569. package/.agent/skills/skill-comply/scripts/spec-generator.py +72 -72
  570. package/.agent/skills/skill-comply/scripts/utils.py +13 -13
  571. package/.agent/skills/skill-comply/tests/test-grader.py +137 -137
  572. package/.agent/skills/skill-comply/tests/test-parser.py +90 -90
  573. package/.agent/skills/skill-stocktake/SKILL.md +193 -193
  574. package/.agent/skills/skill-stocktake/scripts/quick-diff.sh +87 -87
  575. package/.agent/skills/skill-stocktake/scripts/save-results.sh +56 -56
  576. package/.agent/skills/skill-stocktake/scripts/scan.sh +170 -170
  577. package/.agent/skills/social-graph-ranker/SKILL.md +154 -154
  578. package/.agent/skills/springboot-patterns/SKILL.md +314 -314
  579. package/.agent/skills/springboot-security/SKILL.md +272 -272
  580. package/.agent/skills/springboot-tdd/SKILL.md +158 -158
  581. package/.agent/skills/springboot-verification/SKILL.md +231 -231
  582. package/.agent/skills/strategic-compact/SKILL.md +131 -131
  583. package/.agent/skills/strategic-compact/suggest-compact.sh +54 -54
  584. package/.agent/skills/swift-actor-persistence/SKILL.md +143 -143
  585. package/.agent/skills/swift-concurrency-6-2/SKILL.md +216 -216
  586. package/.agent/skills/swift-protocol-di-testing/SKILL.md +190 -190
  587. package/.agent/skills/swiftui-patterns/SKILL.md +259 -259
  588. package/.agent/skills/systematic-debugging/SKILL.md +109 -109
  589. package/.agent/skills/tailwind-patterns/SKILL.md +269 -269
  590. package/.agent/skills/tdd-workflow/SKILL.md +463 -463
  591. package/.agent/skills/team-builder/SKILL.md +168 -168
  592. package/.agent/skills/testing-patterns/SKILL.md +178 -178
  593. package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -219
  594. package/.agent/skills/token-budget-advisor/SKILL.md +133 -133
  595. package/.agent/skills/ui-demo/SKILL.md +465 -465
  596. package/.agent/skills/ui-ux-pro-max/SKILL.md +292 -292
  597. package/.agent/skills/ui-ux-pro-max/data/charts.csv +26 -26
  598. package/.agent/skills/ui-ux-pro-max/data/colors.csv +97 -97
  599. package/.agent/skills/ui-ux-pro-max/data/icons.csv +101 -101
  600. package/.agent/skills/ui-ux-pro-max/data/landing.csv +31 -31
  601. package/.agent/skills/ui-ux-pro-max/data/products.csv +96 -96
  602. package/.agent/skills/ui-ux-pro-max/data/react-performance.csv +45 -45
  603. package/.agent/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -54
  604. package/.agent/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
  605. package/.agent/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
  606. package/.agent/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
  607. package/.agent/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
  608. package/.agent/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
  609. package/.agent/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
  610. package/.agent/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
  611. package/.agent/skills/ui-ux-pro-max/data/stacks/react.csv +54 -54
  612. package/.agent/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
  613. package/.agent/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
  614. package/.agent/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
  615. package/.agent/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -50
  616. package/.agent/skills/ui-ux-pro-max/data/styles.csv +68 -68
  617. package/.agent/skills/ui-ux-pro-max/data/typography.csv +57 -57
  618. package/.agent/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
  619. package/.agent/skills/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
  620. package/.agent/skills/ui-ux-pro-max/data/web-interface.csv +31 -31
  621. package/.agent/skills/ui-ux-pro-max/scripts/core.py +253 -253
  622. package/.agent/skills/ui-ux-pro-max/scripts/design_system.py +1067 -1067
  623. package/.agent/skills/ui-ux-pro-max/scripts/search.py +114 -114
  624. package/.agent/skills/verification-loop/SKILL.md +126 -126
  625. package/.agent/skills/video-editing/SKILL.md +310 -310
  626. package/.agent/skills/videodb/SKILL.md +374 -374
  627. package/.agent/skills/videodb/reference/api-reference.md +550 -550
  628. package/.agent/skills/videodb/reference/capture-reference.md +407 -407
  629. package/.agent/skills/videodb/reference/capture.md +101 -101
  630. package/.agent/skills/videodb/reference/editor.md +443 -443
  631. package/.agent/skills/videodb/reference/generative.md +331 -331
  632. package/.agent/skills/videodb/reference/rtstream-reference.md +564 -564
  633. package/.agent/skills/videodb/reference/rtstream.md +65 -65
  634. package/.agent/skills/videodb/reference/search.md +230 -230
  635. package/.agent/skills/videodb/reference/streaming.md +406 -406
  636. package/.agent/skills/videodb/reference/use-cases.md +118 -118
  637. package/.agent/skills/videodb/scripts/ws-listener.py +282 -282
  638. package/.agent/skills/visa-doc-translate/SKILL.md +117 -117
  639. package/.agent/skills/visa-doc-translate/readme.md +86 -86
  640. package/.agent/skills/vulnerability-scanner/SKILL.md +276 -276
  641. package/.agent/skills/vulnerability-scanner/checklists.md +121 -121
  642. package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +458 -458
  643. package/.agent/skills/web-design-guidelines/SKILL.md +57 -57
  644. package/.agent/skills/webapp-testing/SKILL.md +187 -187
  645. package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -173
  646. package/.agent/skills/workspace-surface-audit/SKILL.md +125 -125
  647. package/.agent/skills/x-api/SKILL.md +230 -230
  648. package/.agent/tasks/lessons.md +40 -40
  649. package/.agent/tasks/todo.md +33 -33
  650. package/.agent/tasks/two-track-merge-contract.md +1 -1
  651. package/.agent/workflows/aside.md +164 -164
  652. package/.agent/workflows/brainstorm.md +113 -113
  653. package/.agent/workflows/build-fix.md +62 -62
  654. package/.agent/workflows/checkpoint.md +74 -74
  655. package/.agent/workflows/claw.md +23 -23
  656. package/.agent/workflows/clean-memory.md +34 -34
  657. package/.agent/workflows/code-review.md +289 -289
  658. package/.agent/workflows/context-budget.md +23 -23
  659. package/.agent/workflows/cpp-build.md +173 -173
  660. package/.agent/workflows/cpp-review.md +132 -132
  661. package/.agent/workflows/cpp-test.md +251 -251
  662. package/.agent/workflows/create.md +59 -59
  663. package/.agent/workflows/debug.md +103 -103
  664. package/.agent/workflows/deploy.md +176 -176
  665. package/.agent/workflows/devfleet.md +23 -23
  666. package/.agent/workflows/docs.md +23 -23
  667. package/.agent/workflows/e2e.md +268 -268
  668. package/.agent/workflows/enhance.md +63 -63
  669. package/.agent/workflows/eval.md +23 -23
  670. package/.agent/workflows/evolve.md +178 -178
  671. package/.agent/workflows/flutter-build.md +164 -164
  672. package/.agent/workflows/flutter-review.md +116 -116
  673. package/.agent/workflows/flutter-test.md +144 -144
  674. package/.agent/workflows/gan-build.md +99 -99
  675. package/.agent/workflows/gan-design.md +35 -35
  676. package/.agent/workflows/go-build.md +183 -183
  677. package/.agent/workflows/go-review.md +148 -148
  678. package/.agent/workflows/go-test.md +268 -268
  679. package/.agent/workflows/gradle-build.md +70 -70
  680. package/.agent/workflows/harness-audit.md +73 -73
  681. package/.agent/workflows/init-docs.md +46 -46
  682. package/.agent/workflows/instinct-export.md +66 -66
  683. package/.agent/workflows/instinct-import.md +114 -114
  684. package/.agent/workflows/instinct-status.md +59 -59
  685. package/.agent/workflows/jira.md +106 -106
  686. package/.agent/workflows/kotlin-build.md +174 -174
  687. package/.agent/workflows/kotlin-review.md +140 -140
  688. package/.agent/workflows/kotlin-test.md +312 -312
  689. package/.agent/workflows/learn-eval.md +116 -116
  690. package/.agent/workflows/learn.md +70 -70
  691. package/.agent/workflows/loop-start.md +32 -32
  692. package/.agent/workflows/loop-status.md +24 -24
  693. package/.agent/workflows/model-route.md +26 -26
  694. package/.agent/workflows/multi-backend.md +158 -158
  695. package/.agent/workflows/multi-execute.md +315 -315
  696. package/.agent/workflows/multi-frontend.md +158 -158
  697. package/.agent/workflows/multi-plan.md +268 -268
  698. package/.agent/workflows/multi-workflow.md +191 -191
  699. package/.agent/workflows/orchestrate.md +135 -135
  700. package/.agent/workflows/plan.md +117 -117
  701. package/.agent/workflows/pm2.md +272 -272
  702. package/.agent/workflows/preview.md +81 -81
  703. package/.agent/workflows/projects.md +39 -39
  704. package/.agent/workflows/promote.md +41 -41
  705. package/.agent/workflows/prompt-optimize.md +23 -23
  706. package/.agent/workflows/prp-commit.md +112 -112
  707. package/.agent/workflows/prp-implement.md +385 -385
  708. package/.agent/workflows/prp-plan.md +502 -502
  709. package/.agent/workflows/prp-pr.md +184 -184
  710. package/.agent/workflows/prp-prd.md +447 -447
  711. package/.agent/workflows/prune.md +31 -31
  712. package/.agent/workflows/python-review.md +297 -297
  713. package/.agent/workflows/quality-gate.md +29 -29
  714. package/.agent/workflows/refactor-clean.md +80 -80
  715. package/.agent/workflows/resume-session.md +156 -156
  716. package/.agent/workflows/rules-distill.md +20 -20
  717. package/.agent/workflows/rust-build.md +187 -187
  718. package/.agent/workflows/rust-review.md +142 -142
  719. package/.agent/workflows/rust-test.md +308 -308
  720. package/.agent/workflows/santa-loop.md +175 -175
  721. package/.agent/workflows/save-session.md +275 -275
  722. package/.agent/workflows/sessions.md +333 -333
  723. package/.agent/workflows/setup-pm.md +80 -80
  724. package/.agent/workflows/skill-create.md +174 -174
  725. package/.agent/workflows/skill-health.md +54 -54
  726. package/.agent/workflows/status.md +86 -86
  727. package/.agent/workflows/tdd.md +231 -231
  728. package/.agent/workflows/test-coverage.md +69 -69
  729. package/.agent/workflows/test.md +144 -144
  730. package/.agent/workflows/ui-ux-pro-max.md +295 -295
  731. package/.agent/workflows/update-codemaps.md +72 -72
  732. package/.agent/workflows/update-docs.md +84 -84
  733. package/.agent/workflows/verify.md +23 -23
  734. package/LICENSE +176 -176
  735. package/README.md +144 -144
  736. package/package.json +1 -1
  737. package/scripts/release-check.js +55 -55
  738. package/src/bin/cli.js +424 -354
  739. package/src/lib/installer.js +223 -11
@@ -1,593 +1,593 @@
1
- ---
2
- name: django-security
3
- description: Django security best practices, authentication, authorization, CSRF protection, SQL injection prevention, XSS prevention, and secure deployment configurations.
4
- origin: ECC
5
- ---
6
-
7
- # Django Security Best Practices
8
-
9
- Comprehensive security guidelines for Django applications to protect against common vulnerabilities.
10
-
11
- ## When to Activate
12
-
13
- - Setting up Django authentication and authorization
14
- - Implementing user permissions and roles
15
- - Configuring production security settings
16
- - Reviewing Django application for security issues
17
- - Deploying Django applications to production
18
-
19
- ## Core Security Settings
20
-
21
- ### Production Settings Configuration
22
-
23
- ```python
24
- # settings/production.py
25
- import os
26
-
27
- DEBUG = False # CRITICAL: Never use True in production
28
-
29
- ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', '').split(',')
30
-
31
- # Security headers
32
- SECURE_SSL_REDIRECT = True
33
- SESSION_COOKIE_SECURE = True
34
- CSRF_COOKIE_SECURE = True
35
- SECURE_HSTS_SECONDS = 31536000 # 1 year
36
- SECURE_HSTS_INCLUDE_SUBDOMAINS = True
37
- SECURE_HSTS_PRELOAD = True
38
- SECURE_CONTENT_TYPE_NOSNIFF = True
39
- SECURE_BROWSER_XSS_FILTER = True
40
- X_FRAME_OPTIONS = 'DENY'
41
-
42
- # HTTPS and Cookies
43
- SESSION_COOKIE_HTTPONLY = True
44
- CSRF_COOKIE_HTTPONLY = True
45
- SESSION_COOKIE_SAMESITE = 'Lax'
46
- CSRF_COOKIE_SAMESITE = 'Lax'
47
-
48
- # Secret key (must be set via environment variable)
49
- SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
50
- if not SECRET_KEY:
51
- raise ImproperlyConfigured('DJANGO_SECRET_KEY environment variable is required')
52
-
53
- # Password validation
54
- AUTH_PASSWORD_VALIDATORS = [
55
- {
56
- 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
57
- },
58
- {
59
- 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
60
- 'OPTIONS': {
61
- 'min_length': 12,
62
- }
63
- },
64
- {
65
- 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
66
- },
67
- {
68
- 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
69
- },
70
- ]
71
- ```
72
-
73
- ## Authentication
74
-
75
- ### Custom User Model
76
-
77
- ```python
78
- # apps/users/models.py
79
- from django.contrib.auth.models import AbstractUser
80
- from django.db import models
81
-
82
- class User(AbstractUser):
83
- """Custom user model for better security."""
84
-
85
- email = models.EmailField(unique=True)
86
- phone = models.CharField(max_length=20, blank=True)
87
-
88
- USERNAME_FIELD = 'email' # Use email as username
89
- REQUIRED_FIELDS = ['username']
90
-
91
- class Meta:
92
- db_table = 'users'
93
- verbose_name = 'User'
94
- verbose_name_plural = 'Users'
95
-
96
- def __str__(self):
97
- return self.email
98
-
99
- # settings/base.py
100
- AUTH_USER_MODEL = 'users.User'
101
- ```
102
-
103
- ### Password Hashing
104
-
105
- ```python
106
- # Django uses PBKDF2 by default. For stronger security:
107
- PASSWORD_HASHERS = [
108
- 'django.contrib.auth.hashers.Argon2PasswordHasher',
109
- 'django.contrib.auth.hashers.PBKDF2PasswordHasher',
110
- 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
111
- 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
112
- ]
113
- ```
114
-
115
- ### Session Management
116
-
117
- ```python
118
- # Session configuration
119
- SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # Or 'db'
120
- SESSION_CACHE_ALIAS = 'default'
121
- SESSION_COOKIE_AGE = 3600 * 24 * 7 # 1 week
122
- SESSION_SAVE_EVERY_REQUEST = False
123
- SESSION_EXPIRE_AT_BROWSER_CLOSE = False # Better UX, but less secure
124
- ```
125
-
126
- ## Authorization
127
-
128
- ### Permissions
129
-
130
- ```python
131
- # models.py
132
- from django.db import models
133
- from django.contrib.auth.models import Permission
134
-
135
- class Post(models.Model):
136
- title = models.CharField(max_length=200)
137
- content = models.TextField()
138
- author = models.ForeignKey(User, on_delete=models.CASCADE)
139
-
140
- class Meta:
141
- permissions = [
142
- ('can_publish', 'Can publish posts'),
143
- ('can_edit_others', 'Can edit posts of others'),
144
- ]
145
-
146
- def user_can_edit(self, user):
147
- """Check if user can edit this post."""
148
- return self.author == user or user.has_perm('app.can_edit_others')
149
-
150
- # views.py
151
- from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
152
- from django.views.generic import UpdateView
153
-
154
- class PostUpdateView(LoginRequiredMixin, PermissionRequiredMixin, UpdateView):
155
- model = Post
156
- permission_required = 'app.can_edit_others'
157
- raise_exception = True # Return 403 instead of redirect
158
-
159
- def get_queryset(self):
160
- """Only allow users to edit their own posts."""
161
- return Post.objects.filter(author=self.request.user)
162
- ```
163
-
164
- ### Custom Permissions
165
-
166
- ```python
167
- # permissions.py
168
- from rest_framework import permissions
169
-
170
- class IsOwnerOrReadOnly(permissions.BasePermission):
171
- """Allow only owners to edit objects."""
172
-
173
- def has_object_permission(self, request, view, obj):
174
- # Read permissions allowed for any request
175
- if request.method in permissions.SAFE_METHODS:
176
- return True
177
-
178
- # Write permissions only for owner
179
- return obj.author == request.user
180
-
181
- class IsAdminOrReadOnly(permissions.BasePermission):
182
- """Allow admins to do anything, others read-only."""
183
-
184
- def has_permission(self, request, view):
185
- if request.method in permissions.SAFE_METHODS:
186
- return True
187
- return request.user and request.user.is_staff
188
-
189
- class IsVerifiedUser(permissions.BasePermission):
190
- """Allow only verified users."""
191
-
192
- def has_permission(self, request, view):
193
- return request.user and request.user.is_authenticated and request.user.is_verified
194
- ```
195
-
196
- ### Role-Based Access Control (RBAC)
197
-
198
- ```python
199
- # models.py
200
- from django.contrib.auth.models import AbstractUser, Group
201
-
202
- class User(AbstractUser):
203
- ROLE_CHOICES = [
204
- ('admin', 'Administrator'),
205
- ('moderator', 'Moderator'),
206
- ('user', 'Regular User'),
207
- ]
208
- role = models.CharField(max_length=20, choices=ROLE_CHOICES, default='user')
209
-
210
- def is_admin(self):
211
- return self.role == 'admin' or self.is_superuser
212
-
213
- def is_moderator(self):
214
- return self.role in ['admin', 'moderator']
215
-
216
- # Mixins
217
- class AdminRequiredMixin:
218
- """Mixin to require admin role."""
219
-
220
- def dispatch(self, request, *args, **kwargs):
221
- if not request.user.is_authenticated or not request.user.is_admin():
222
- from django.core.exceptions import PermissionDenied
223
- raise PermissionDenied
224
- return super().dispatch(request, *args, **kwargs)
225
- ```
226
-
227
- ## SQL Injection Prevention
228
-
229
- ### Django ORM Protection
230
-
231
- ```python
232
- # GOOD: Django ORM automatically escapes parameters
233
- def get_user(username):
234
- return User.objects.get(username=username) # Safe
235
-
236
- # GOOD: Using parameters with raw()
237
- def search_users(query):
238
- return User.objects.raw('SELECT * FROM users WHERE username = %s', [query])
239
-
240
- # BAD: Never directly interpolate user input
241
- def get_user_bad(username):
242
- return User.objects.raw(f'SELECT * FROM users WHERE username = {username}') # VULNERABLE!
243
-
244
- # GOOD: Using filter with proper escaping
245
- def get_users_by_email(email):
246
- return User.objects.filter(email__iexact=email) # Safe
247
-
248
- # GOOD: Using Q objects for complex queries
249
- from django.db.models import Q
250
- def search_users_complex(query):
251
- return User.objects.filter(
252
- Q(username__icontains=query) |
253
- Q(email__icontains=query)
254
- ) # Safe
255
- ```
256
-
257
- ### Extra Security with raw()
258
-
259
- ```python
260
- # If you must use raw SQL, always use parameters
261
- User.objects.raw(
262
- 'SELECT * FROM users WHERE email = %s AND status = %s',
263
- [user_input_email, status]
264
- )
265
- ```
266
-
267
- ## XSS Prevention
268
-
269
- ### Template Escaping
270
-
271
- ```django
272
- {# Django auto-escapes variables by default - SAFE #}
273
- {{ user_input }} {# Escaped HTML #}
274
-
275
- {# Explicitly mark safe only for trusted content #}
276
- {{ trusted_html|safe }} {# Not escaped #}
277
-
278
- {# Use template filters for safe HTML #}
279
- {{ user_input|escape }} {# Same as default #}
280
- {{ user_input|striptags }} {# Remove all HTML tags #}
281
-
282
- {# JavaScript escaping #}
283
- <script>
284
- var username = {{ username|escapejs }};
285
- </script>
286
- ```
287
-
288
- ### Safe String Handling
289
-
290
- ```python
291
- from django.utils.safestring import mark_safe
292
- from django.utils.html import escape
293
-
294
- # BAD: Never mark user input as safe without escaping
295
- def render_bad(user_input):
296
- return mark_safe(user_input) # VULNERABLE!
297
-
298
- # GOOD: Escape first, then mark safe
299
- def render_good(user_input):
300
- return mark_safe(escape(user_input))
301
-
302
- # GOOD: Use format_html for HTML with variables
303
- from django.utils.html import format_html
304
-
305
- def greet_user(username):
306
- return format_html('<span class="user">{}</span>', escape(username))
307
- ```
308
-
309
- ### HTTP Headers
310
-
311
- ```python
312
- # settings.py
313
- SECURE_CONTENT_TYPE_NOSNIFF = True # Prevent MIME sniffing
314
- SECURE_BROWSER_XSS_FILTER = True # Enable XSS filter
315
- X_FRAME_OPTIONS = 'DENY' # Prevent clickjacking
316
-
317
- # Custom middleware
318
- from django.conf import settings
319
-
320
- class SecurityHeaderMiddleware:
321
- def __init__(self, get_response):
322
- self.get_response = get_response
323
-
324
- def __call__(self, request):
325
- response = self.get_response(request)
326
- response['X-Content-Type-Options'] = 'nosniff'
327
- response['X-Frame-Options'] = 'DENY'
328
- response['X-XSS-Protection'] = '1; mode=block'
329
- response['Content-Security-Policy'] = "default-src 'self'"
330
- return response
331
- ```
332
-
333
- ## CSRF Protection
334
-
335
- ### Default CSRF Protection
336
-
337
- ```python
338
- # settings.py - CSRF is enabled by default
339
- CSRF_COOKIE_SECURE = True # Only send over HTTPS
340
- CSRF_COOKIE_HTTPONLY = True # Prevent JavaScript access
341
- CSRF_COOKIE_SAMESITE = 'Lax' # Prevent CSRF in some cases
342
- CSRF_TRUSTED_ORIGINS = ['https://example.com'] # Trusted domains
343
-
344
- # Template usage
345
- <form method="post">
346
- {% csrf_token %}
347
- {{ form.as_p }}
348
- <button type="submit">Submit</button>
349
- </form>
350
-
351
- # AJAX requests
352
- function getCookie(name) {
353
- let cookieValue = null;
354
- if (document.cookie && document.cookie !== '') {
355
- const cookies = document.cookie.split(';');
356
- for (let i = 0; i < cookies.length; i++) {
357
- const cookie = cookies[i].trim();
358
- if (cookie.substring(0, name.length + 1) === (name + '=')) {
359
- cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
360
- break;
361
- }
362
- }
363
- }
364
- return cookieValue;
365
- }
366
-
367
- fetch('/api/endpoint/', {
368
- method: 'POST',
369
- headers: {
370
- 'X-CSRFToken': getCookie('csrftoken'),
371
- 'Content-Type': 'application/json',
372
- },
373
- body: JSON.stringify(data)
374
- });
375
- ```
376
-
377
- ### Exempting Views (Use Carefully)
378
-
379
- ```python
380
- from django.views.decorators.csrf import csrf_exempt
381
-
382
- @csrf_exempt # Only use when absolutely necessary!
383
- def webhook_view(request):
384
- # Webhook from external service
385
- pass
386
- ```
387
-
388
- ## File Upload Security
389
-
390
- ### File Validation
391
-
392
- ```python
393
- import os
394
- from django.core.exceptions import ValidationError
395
-
396
- def validate_file_extension(value):
397
- """Validate file extension."""
398
- ext = os.path.splitext(value.name)[1]
399
- valid_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.pdf']
400
- if not ext.lower() in valid_extensions:
401
- raise ValidationError('Unsupported file extension.')
402
-
403
- def validate_file_size(value):
404
- """Validate file size (max 5MB)."""
405
- filesize = value.size
406
- if filesize > 5 * 1024 * 1024:
407
- raise ValidationError('File too large. Max size is 5MB.')
408
-
409
- # models.py
410
- class Document(models.Model):
411
- file = models.FileField(
412
- upload_to='documents/',
413
- validators=[validate_file_extension, validate_file_size]
414
- )
415
- ```
416
-
417
- ### Secure File Storage
418
-
419
- ```python
420
- # settings.py
421
- MEDIA_ROOT = '/var/www/media/'
422
- MEDIA_URL = '/media/'
423
-
424
- # Use a separate domain for media in production
425
- MEDIA_DOMAIN = 'https://media.example.com'
426
-
427
- # Don't serve user uploads directly
428
- # Use whitenoise or a CDN for static files
429
- # Use a separate server or S3 for media files
430
- ```
431
-
432
- ## API Security
433
-
434
- ### Rate Limiting
435
-
436
- ```python
437
- # settings.py
438
- REST_FRAMEWORK = {
439
- 'DEFAULT_THROTTLE_CLASSES': [
440
- 'rest_framework.throttling.AnonRateThrottle',
441
- 'rest_framework.throttling.UserRateThrottle'
442
- ],
443
- 'DEFAULT_THROTTLE_RATES': {
444
- 'anon': '100/day',
445
- 'user': '1000/day',
446
- 'upload': '10/hour',
447
- }
448
- }
449
-
450
- # Custom throttle
451
- from rest_framework.throttling import UserRateThrottle
452
-
453
- class BurstRateThrottle(UserRateThrottle):
454
- scope = 'burst'
455
- rate = '60/min'
456
-
457
- class SustainedRateThrottle(UserRateThrottle):
458
- scope = 'sustained'
459
- rate = '1000/day'
460
- ```
461
-
462
- ### Authentication for APIs
463
-
464
- ```python
465
- # settings.py
466
- REST_FRAMEWORK = {
467
- 'DEFAULT_AUTHENTICATION_CLASSES': [
468
- 'rest_framework.authentication.TokenAuthentication',
469
- 'rest_framework.authentication.SessionAuthentication',
470
- 'rest_framework_simplejwt.authentication.JWTAuthentication',
471
- ],
472
- 'DEFAULT_PERMISSION_CLASSES': [
473
- 'rest_framework.permissions.IsAuthenticated',
474
- ],
475
- }
476
-
477
- # views.py
478
- from rest_framework.decorators import api_view, permission_classes
479
- from rest_framework.permissions import IsAuthenticated
480
-
481
- @api_view(['GET', 'POST'])
482
- @permission_classes([IsAuthenticated])
483
- def protected_view(request):
484
- return Response({'message': 'You are authenticated'})
485
- ```
486
-
487
- ## Security Headers
488
-
489
- ### Content Security Policy
490
-
491
- ```python
492
- # settings.py
493
- CSP_DEFAULT_SRC = "'self'"
494
- CSP_SCRIPT_SRC = "'self' https://cdn.example.com"
495
- CSP_STYLE_SRC = "'self' 'unsafe-inline'"
496
- CSP_IMG_SRC = "'self' data: https:"
497
- CSP_CONNECT_SRC = "'self' https://api.example.com"
498
-
499
- # Middleware
500
- class CSPMiddleware:
501
- def __init__(self, get_response):
502
- self.get_response = get_response
503
-
504
- def __call__(self, request):
505
- response = self.get_response(request)
506
- response['Content-Security-Policy'] = (
507
- f"default-src {CSP_DEFAULT_SRC}; "
508
- f"script-src {CSP_SCRIPT_SRC}; "
509
- f"style-src {CSP_STYLE_SRC}; "
510
- f"img-src {CSP_IMG_SRC}; "
511
- f"connect-src {CSP_CONNECT_SRC}"
512
- )
513
- return response
514
- ```
515
-
516
- ## Environment Variables
517
-
518
- ### Managing Secrets
519
-
520
- ```python
521
- # Use python-decouple or django-environ
522
- import environ
523
-
524
- env = environ.Env(
525
- # set casting, default value
526
- DEBUG=(bool, False)
527
- )
528
-
529
- # reading .env file
530
- environ.Env.read_env()
531
-
532
- SECRET_KEY = env('DJANGO_SECRET_KEY')
533
- DATABASE_URL = env('DATABASE_URL')
534
- ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')
535
-
536
- # .env file (never commit this)
537
- DEBUG=False
538
- SECRET_KEY=your-secret-key-here
539
- DATABASE_URL=postgresql://user:password@localhost:5432/dbname
540
- ALLOWED_HOSTS=example.com,www.example.com
541
- ```
542
-
543
- ## Logging Security Events
544
-
545
- ```python
546
- # settings.py
547
- LOGGING = {
548
- 'version': 1,
549
- 'disable_existing_loggers': False,
550
- 'handlers': {
551
- 'file': {
552
- 'level': 'WARNING',
553
- 'class': 'logging.FileHandler',
554
- 'filename': '/var/log/django/security.log',
555
- },
556
- 'console': {
557
- 'level': 'INFO',
558
- 'class': 'logging.StreamHandler',
559
- },
560
- },
561
- 'loggers': {
562
- 'django.security': {
563
- 'handlers': ['file', 'console'],
564
- 'level': 'WARNING',
565
- 'propagate': True,
566
- },
567
- 'django.request': {
568
- 'handlers': ['file'],
569
- 'level': 'ERROR',
570
- 'propagate': False,
571
- },
572
- },
573
- }
574
- ```
575
-
576
- ## Quick Security Checklist
577
-
578
- | Check | Description |
579
- |-------|-------------|
580
- | `DEBUG = False` | Never run with DEBUG in production |
581
- | HTTPS only | Force SSL, secure cookies |
582
- | Strong secrets | Use environment variables for SECRET_KEY |
583
- | Password validation | Enable all password validators |
584
- | CSRF protection | Enabled by default, don't disable |
585
- | XSS prevention | Django auto-escapes, don't use `&#124;safe` with user input |
586
- | SQL injection | Use ORM, never concatenate strings in queries |
587
- | File uploads | Validate file type and size |
588
- | Rate limiting | Throttle API endpoints |
589
- | Security headers | CSP, X-Frame-Options, HSTS |
590
- | Logging | Log security events |
591
- | Updates | Keep Django and dependencies updated |
592
-
593
- Remember: Security is a process, not a product. Regularly review and update your security practices.
1
+ ---
2
+ name: django-security
3
+ description: Django security best practices, authentication, authorization, CSRF protection, SQL injection prevention, XSS prevention, and secure deployment configurations.
4
+ origin: ECC
5
+ ---
6
+
7
+ # Django Security Best Practices
8
+
9
+ Comprehensive security guidelines for Django applications to protect against common vulnerabilities.
10
+
11
+ ## When to Activate
12
+
13
+ - Setting up Django authentication and authorization
14
+ - Implementing user permissions and roles
15
+ - Configuring production security settings
16
+ - Reviewing Django application for security issues
17
+ - Deploying Django applications to production
18
+
19
+ ## Core Security Settings
20
+
21
+ ### Production Settings Configuration
22
+
23
+ ```python
24
+ # settings/production.py
25
+ import os
26
+
27
+ DEBUG = False # CRITICAL: Never use True in production
28
+
29
+ ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', '').split(',')
30
+
31
+ # Security headers
32
+ SECURE_SSL_REDIRECT = True
33
+ SESSION_COOKIE_SECURE = True
34
+ CSRF_COOKIE_SECURE = True
35
+ SECURE_HSTS_SECONDS = 31536000 # 1 year
36
+ SECURE_HSTS_INCLUDE_SUBDOMAINS = True
37
+ SECURE_HSTS_PRELOAD = True
38
+ SECURE_CONTENT_TYPE_NOSNIFF = True
39
+ SECURE_BROWSER_XSS_FILTER = True
40
+ X_FRAME_OPTIONS = 'DENY'
41
+
42
+ # HTTPS and Cookies
43
+ SESSION_COOKIE_HTTPONLY = True
44
+ CSRF_COOKIE_HTTPONLY = True
45
+ SESSION_COOKIE_SAMESITE = 'Lax'
46
+ CSRF_COOKIE_SAMESITE = 'Lax'
47
+
48
+ # Secret key (must be set via environment variable)
49
+ SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
50
+ if not SECRET_KEY:
51
+ raise ImproperlyConfigured('DJANGO_SECRET_KEY environment variable is required')
52
+
53
+ # Password validation
54
+ AUTH_PASSWORD_VALIDATORS = [
55
+ {
56
+ 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
57
+ },
58
+ {
59
+ 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
60
+ 'OPTIONS': {
61
+ 'min_length': 12,
62
+ }
63
+ },
64
+ {
65
+ 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
66
+ },
67
+ {
68
+ 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
69
+ },
70
+ ]
71
+ ```
72
+
73
+ ## Authentication
74
+
75
+ ### Custom User Model
76
+
77
+ ```python
78
+ # apps/users/models.py
79
+ from django.contrib.auth.models import AbstractUser
80
+ from django.db import models
81
+
82
+ class User(AbstractUser):
83
+ """Custom user model for better security."""
84
+
85
+ email = models.EmailField(unique=True)
86
+ phone = models.CharField(max_length=20, blank=True)
87
+
88
+ USERNAME_FIELD = 'email' # Use email as username
89
+ REQUIRED_FIELDS = ['username']
90
+
91
+ class Meta:
92
+ db_table = 'users'
93
+ verbose_name = 'User'
94
+ verbose_name_plural = 'Users'
95
+
96
+ def __str__(self):
97
+ return self.email
98
+
99
+ # settings/base.py
100
+ AUTH_USER_MODEL = 'users.User'
101
+ ```
102
+
103
+ ### Password Hashing
104
+
105
+ ```python
106
+ # Django uses PBKDF2 by default. For stronger security:
107
+ PASSWORD_HASHERS = [
108
+ 'django.contrib.auth.hashers.Argon2PasswordHasher',
109
+ 'django.contrib.auth.hashers.PBKDF2PasswordHasher',
110
+ 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
111
+ 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
112
+ ]
113
+ ```
114
+
115
+ ### Session Management
116
+
117
+ ```python
118
+ # Session configuration
119
+ SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # Or 'db'
120
+ SESSION_CACHE_ALIAS = 'default'
121
+ SESSION_COOKIE_AGE = 3600 * 24 * 7 # 1 week
122
+ SESSION_SAVE_EVERY_REQUEST = False
123
+ SESSION_EXPIRE_AT_BROWSER_CLOSE = False # Better UX, but less secure
124
+ ```
125
+
126
+ ## Authorization
127
+
128
+ ### Permissions
129
+
130
+ ```python
131
+ # models.py
132
+ from django.db import models
133
+ from django.contrib.auth.models import Permission
134
+
135
+ class Post(models.Model):
136
+ title = models.CharField(max_length=200)
137
+ content = models.TextField()
138
+ author = models.ForeignKey(User, on_delete=models.CASCADE)
139
+
140
+ class Meta:
141
+ permissions = [
142
+ ('can_publish', 'Can publish posts'),
143
+ ('can_edit_others', 'Can edit posts of others'),
144
+ ]
145
+
146
+ def user_can_edit(self, user):
147
+ """Check if user can edit this post."""
148
+ return self.author == user or user.has_perm('app.can_edit_others')
149
+
150
+ # views.py
151
+ from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
152
+ from django.views.generic import UpdateView
153
+
154
+ class PostUpdateView(LoginRequiredMixin, PermissionRequiredMixin, UpdateView):
155
+ model = Post
156
+ permission_required = 'app.can_edit_others'
157
+ raise_exception = True # Return 403 instead of redirect
158
+
159
+ def get_queryset(self):
160
+ """Only allow users to edit their own posts."""
161
+ return Post.objects.filter(author=self.request.user)
162
+ ```
163
+
164
+ ### Custom Permissions
165
+
166
+ ```python
167
+ # permissions.py
168
+ from rest_framework import permissions
169
+
170
+ class IsOwnerOrReadOnly(permissions.BasePermission):
171
+ """Allow only owners to edit objects."""
172
+
173
+ def has_object_permission(self, request, view, obj):
174
+ # Read permissions allowed for any request
175
+ if request.method in permissions.SAFE_METHODS:
176
+ return True
177
+
178
+ # Write permissions only for owner
179
+ return obj.author == request.user
180
+
181
+ class IsAdminOrReadOnly(permissions.BasePermission):
182
+ """Allow admins to do anything, others read-only."""
183
+
184
+ def has_permission(self, request, view):
185
+ if request.method in permissions.SAFE_METHODS:
186
+ return True
187
+ return request.user and request.user.is_staff
188
+
189
+ class IsVerifiedUser(permissions.BasePermission):
190
+ """Allow only verified users."""
191
+
192
+ def has_permission(self, request, view):
193
+ return request.user and request.user.is_authenticated and request.user.is_verified
194
+ ```
195
+
196
+ ### Role-Based Access Control (RBAC)
197
+
198
+ ```python
199
+ # models.py
200
+ from django.contrib.auth.models import AbstractUser, Group
201
+
202
+ class User(AbstractUser):
203
+ ROLE_CHOICES = [
204
+ ('admin', 'Administrator'),
205
+ ('moderator', 'Moderator'),
206
+ ('user', 'Regular User'),
207
+ ]
208
+ role = models.CharField(max_length=20, choices=ROLE_CHOICES, default='user')
209
+
210
+ def is_admin(self):
211
+ return self.role == 'admin' or self.is_superuser
212
+
213
+ def is_moderator(self):
214
+ return self.role in ['admin', 'moderator']
215
+
216
+ # Mixins
217
+ class AdminRequiredMixin:
218
+ """Mixin to require admin role."""
219
+
220
+ def dispatch(self, request, *args, **kwargs):
221
+ if not request.user.is_authenticated or not request.user.is_admin():
222
+ from django.core.exceptions import PermissionDenied
223
+ raise PermissionDenied
224
+ return super().dispatch(request, *args, **kwargs)
225
+ ```
226
+
227
+ ## SQL Injection Prevention
228
+
229
+ ### Django ORM Protection
230
+
231
+ ```python
232
+ # GOOD: Django ORM automatically escapes parameters
233
+ def get_user(username):
234
+ return User.objects.get(username=username) # Safe
235
+
236
+ # GOOD: Using parameters with raw()
237
+ def search_users(query):
238
+ return User.objects.raw('SELECT * FROM users WHERE username = %s', [query])
239
+
240
+ # BAD: Never directly interpolate user input
241
+ def get_user_bad(username):
242
+ return User.objects.raw(f'SELECT * FROM users WHERE username = {username}') # VULNERABLE!
243
+
244
+ # GOOD: Using filter with proper escaping
245
+ def get_users_by_email(email):
246
+ return User.objects.filter(email__iexact=email) # Safe
247
+
248
+ # GOOD: Using Q objects for complex queries
249
+ from django.db.models import Q
250
+ def search_users_complex(query):
251
+ return User.objects.filter(
252
+ Q(username__icontains=query) |
253
+ Q(email__icontains=query)
254
+ ) # Safe
255
+ ```
256
+
257
+ ### Extra Security with raw()
258
+
259
+ ```python
260
+ # If you must use raw SQL, always use parameters
261
+ User.objects.raw(
262
+ 'SELECT * FROM users WHERE email = %s AND status = %s',
263
+ [user_input_email, status]
264
+ )
265
+ ```
266
+
267
+ ## XSS Prevention
268
+
269
+ ### Template Escaping
270
+
271
+ ```django
272
+ {# Django auto-escapes variables by default - SAFE #}
273
+ {{ user_input }} {# Escaped HTML #}
274
+
275
+ {# Explicitly mark safe only for trusted content #}
276
+ {{ trusted_html|safe }} {# Not escaped #}
277
+
278
+ {# Use template filters for safe HTML #}
279
+ {{ user_input|escape }} {# Same as default #}
280
+ {{ user_input|striptags }} {# Remove all HTML tags #}
281
+
282
+ {# JavaScript escaping #}
283
+ <script>
284
+ var username = {{ username|escapejs }};
285
+ </script>
286
+ ```
287
+
288
+ ### Safe String Handling
289
+
290
+ ```python
291
+ from django.utils.safestring import mark_safe
292
+ from django.utils.html import escape
293
+
294
+ # BAD: Never mark user input as safe without escaping
295
+ def render_bad(user_input):
296
+ return mark_safe(user_input) # VULNERABLE!
297
+
298
+ # GOOD: Escape first, then mark safe
299
+ def render_good(user_input):
300
+ return mark_safe(escape(user_input))
301
+
302
+ # GOOD: Use format_html for HTML with variables
303
+ from django.utils.html import format_html
304
+
305
+ def greet_user(username):
306
+ return format_html('<span class="user">{}</span>', escape(username))
307
+ ```
308
+
309
+ ### HTTP Headers
310
+
311
+ ```python
312
+ # settings.py
313
+ SECURE_CONTENT_TYPE_NOSNIFF = True # Prevent MIME sniffing
314
+ SECURE_BROWSER_XSS_FILTER = True # Enable XSS filter
315
+ X_FRAME_OPTIONS = 'DENY' # Prevent clickjacking
316
+
317
+ # Custom middleware
318
+ from django.conf import settings
319
+
320
+ class SecurityHeaderMiddleware:
321
+ def __init__(self, get_response):
322
+ self.get_response = get_response
323
+
324
+ def __call__(self, request):
325
+ response = self.get_response(request)
326
+ response['X-Content-Type-Options'] = 'nosniff'
327
+ response['X-Frame-Options'] = 'DENY'
328
+ response['X-XSS-Protection'] = '1; mode=block'
329
+ response['Content-Security-Policy'] = "default-src 'self'"
330
+ return response
331
+ ```
332
+
333
+ ## CSRF Protection
334
+
335
+ ### Default CSRF Protection
336
+
337
+ ```python
338
+ # settings.py - CSRF is enabled by default
339
+ CSRF_COOKIE_SECURE = True # Only send over HTTPS
340
+ CSRF_COOKIE_HTTPONLY = True # Prevent JavaScript access
341
+ CSRF_COOKIE_SAMESITE = 'Lax' # Prevent CSRF in some cases
342
+ CSRF_TRUSTED_ORIGINS = ['https://example.com'] # Trusted domains
343
+
344
+ # Template usage
345
+ <form method="post">
346
+ {% csrf_token %}
347
+ {{ form.as_p }}
348
+ <button type="submit">Submit</button>
349
+ </form>
350
+
351
+ # AJAX requests
352
+ function getCookie(name) {
353
+ let cookieValue = null;
354
+ if (document.cookie && document.cookie !== '') {
355
+ const cookies = document.cookie.split(';');
356
+ for (let i = 0; i < cookies.length; i++) {
357
+ const cookie = cookies[i].trim();
358
+ if (cookie.substring(0, name.length + 1) === (name + '=')) {
359
+ cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
360
+ break;
361
+ }
362
+ }
363
+ }
364
+ return cookieValue;
365
+ }
366
+
367
+ fetch('/api/endpoint/', {
368
+ method: 'POST',
369
+ headers: {
370
+ 'X-CSRFToken': getCookie('csrftoken'),
371
+ 'Content-Type': 'application/json',
372
+ },
373
+ body: JSON.stringify(data)
374
+ });
375
+ ```
376
+
377
+ ### Exempting Views (Use Carefully)
378
+
379
+ ```python
380
+ from django.views.decorators.csrf import csrf_exempt
381
+
382
+ @csrf_exempt # Only use when absolutely necessary!
383
+ def webhook_view(request):
384
+ # Webhook from external service
385
+ pass
386
+ ```
387
+
388
+ ## File Upload Security
389
+
390
+ ### File Validation
391
+
392
+ ```python
393
+ import os
394
+ from django.core.exceptions import ValidationError
395
+
396
+ def validate_file_extension(value):
397
+ """Validate file extension."""
398
+ ext = os.path.splitext(value.name)[1]
399
+ valid_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.pdf']
400
+ if not ext.lower() in valid_extensions:
401
+ raise ValidationError('Unsupported file extension.')
402
+
403
+ def validate_file_size(value):
404
+ """Validate file size (max 5MB)."""
405
+ filesize = value.size
406
+ if filesize > 5 * 1024 * 1024:
407
+ raise ValidationError('File too large. Max size is 5MB.')
408
+
409
+ # models.py
410
+ class Document(models.Model):
411
+ file = models.FileField(
412
+ upload_to='documents/',
413
+ validators=[validate_file_extension, validate_file_size]
414
+ )
415
+ ```
416
+
417
+ ### Secure File Storage
418
+
419
+ ```python
420
+ # settings.py
421
+ MEDIA_ROOT = '/var/www/media/'
422
+ MEDIA_URL = '/media/'
423
+
424
+ # Use a separate domain for media in production
425
+ MEDIA_DOMAIN = 'https://media.example.com'
426
+
427
+ # Don't serve user uploads directly
428
+ # Use whitenoise or a CDN for static files
429
+ # Use a separate server or S3 for media files
430
+ ```
431
+
432
+ ## API Security
433
+
434
+ ### Rate Limiting
435
+
436
+ ```python
437
+ # settings.py
438
+ REST_FRAMEWORK = {
439
+ 'DEFAULT_THROTTLE_CLASSES': [
440
+ 'rest_framework.throttling.AnonRateThrottle',
441
+ 'rest_framework.throttling.UserRateThrottle'
442
+ ],
443
+ 'DEFAULT_THROTTLE_RATES': {
444
+ 'anon': '100/day',
445
+ 'user': '1000/day',
446
+ 'upload': '10/hour',
447
+ }
448
+ }
449
+
450
+ # Custom throttle
451
+ from rest_framework.throttling import UserRateThrottle
452
+
453
+ class BurstRateThrottle(UserRateThrottle):
454
+ scope = 'burst'
455
+ rate = '60/min'
456
+
457
+ class SustainedRateThrottle(UserRateThrottle):
458
+ scope = 'sustained'
459
+ rate = '1000/day'
460
+ ```
461
+
462
+ ### Authentication for APIs
463
+
464
+ ```python
465
+ # settings.py
466
+ REST_FRAMEWORK = {
467
+ 'DEFAULT_AUTHENTICATION_CLASSES': [
468
+ 'rest_framework.authentication.TokenAuthentication',
469
+ 'rest_framework.authentication.SessionAuthentication',
470
+ 'rest_framework_simplejwt.authentication.JWTAuthentication',
471
+ ],
472
+ 'DEFAULT_PERMISSION_CLASSES': [
473
+ 'rest_framework.permissions.IsAuthenticated',
474
+ ],
475
+ }
476
+
477
+ # views.py
478
+ from rest_framework.decorators import api_view, permission_classes
479
+ from rest_framework.permissions import IsAuthenticated
480
+
481
+ @api_view(['GET', 'POST'])
482
+ @permission_classes([IsAuthenticated])
483
+ def protected_view(request):
484
+ return Response({'message': 'You are authenticated'})
485
+ ```
486
+
487
+ ## Security Headers
488
+
489
+ ### Content Security Policy
490
+
491
+ ```python
492
+ # settings.py
493
+ CSP_DEFAULT_SRC = "'self'"
494
+ CSP_SCRIPT_SRC = "'self' https://cdn.example.com"
495
+ CSP_STYLE_SRC = "'self' 'unsafe-inline'"
496
+ CSP_IMG_SRC = "'self' data: https:"
497
+ CSP_CONNECT_SRC = "'self' https://api.example.com"
498
+
499
+ # Middleware
500
+ class CSPMiddleware:
501
+ def __init__(self, get_response):
502
+ self.get_response = get_response
503
+
504
+ def __call__(self, request):
505
+ response = self.get_response(request)
506
+ response['Content-Security-Policy'] = (
507
+ f"default-src {CSP_DEFAULT_SRC}; "
508
+ f"script-src {CSP_SCRIPT_SRC}; "
509
+ f"style-src {CSP_STYLE_SRC}; "
510
+ f"img-src {CSP_IMG_SRC}; "
511
+ f"connect-src {CSP_CONNECT_SRC}"
512
+ )
513
+ return response
514
+ ```
515
+
516
+ ## Environment Variables
517
+
518
+ ### Managing Secrets
519
+
520
+ ```python
521
+ # Use python-decouple or django-environ
522
+ import environ
523
+
524
+ env = environ.Env(
525
+ # set casting, default value
526
+ DEBUG=(bool, False)
527
+ )
528
+
529
+ # reading .env file
530
+ environ.Env.read_env()
531
+
532
+ SECRET_KEY = env('DJANGO_SECRET_KEY')
533
+ DATABASE_URL = env('DATABASE_URL')
534
+ ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')
535
+
536
+ # .env file (never commit this)
537
+ DEBUG=False
538
+ SECRET_KEY=your-secret-key-here
539
+ DATABASE_URL=postgresql://user:password@localhost:5432/dbname
540
+ ALLOWED_HOSTS=example.com,www.example.com
541
+ ```
542
+
543
+ ## Logging Security Events
544
+
545
+ ```python
546
+ # settings.py
547
+ LOGGING = {
548
+ 'version': 1,
549
+ 'disable_existing_loggers': False,
550
+ 'handlers': {
551
+ 'file': {
552
+ 'level': 'WARNING',
553
+ 'class': 'logging.FileHandler',
554
+ 'filename': '/var/log/django/security.log',
555
+ },
556
+ 'console': {
557
+ 'level': 'INFO',
558
+ 'class': 'logging.StreamHandler',
559
+ },
560
+ },
561
+ 'loggers': {
562
+ 'django.security': {
563
+ 'handlers': ['file', 'console'],
564
+ 'level': 'WARNING',
565
+ 'propagate': True,
566
+ },
567
+ 'django.request': {
568
+ 'handlers': ['file'],
569
+ 'level': 'ERROR',
570
+ 'propagate': False,
571
+ },
572
+ },
573
+ }
574
+ ```
575
+
576
+ ## Quick Security Checklist
577
+
578
+ | Check | Description |
579
+ |-------|-------------|
580
+ | `DEBUG = False` | Never run with DEBUG in production |
581
+ | HTTPS only | Force SSL, secure cookies |
582
+ | Strong secrets | Use environment variables for SECRET_KEY |
583
+ | Password validation | Enable all password validators |
584
+ | CSRF protection | Enabled by default, don't disable |
585
+ | XSS prevention | Django auto-escapes, don't use `&#124;safe` with user input |
586
+ | SQL injection | Use ORM, never concatenate strings in queries |
587
+ | File uploads | Validate file type and size |
588
+ | Rate limiting | Throttle API endpoints |
589
+ | Security headers | CSP, X-Frame-Options, HSTS |
590
+ | Logging | Log security events |
591
+ | Updates | Keep Django and dependencies updated |
592
+
593
+ Remember: Security is a process, not a product. Regularly review and update your security practices.