@funnycode/myclaude 0.1.71 → 0.1.73

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 (497) hide show
  1. package/LICENSE +21 -21
  2. package/dist/myclaude.js +14145 -9008
  3. package/dist/myclaude.mjs +14145 -9008
  4. package/package.json +125 -125
  5. package/seed/marketplaces/ecc/.claude/commands/add-language-rules.md +39 -0
  6. package/seed/marketplaces/ecc/.claude/commands/database-migration.md +36 -0
  7. package/seed/marketplaces/ecc/.claude/commands/feature-development.md +38 -0
  8. package/seed/marketplaces/ecc/.claude/ecc-tools.json +334 -0
  9. package/seed/marketplaces/ecc/.claude/enterprise/controls.md +15 -0
  10. package/seed/marketplaces/ecc/.claude/homunculus/instincts/inherited/everything-claude-code-instincts.yaml +162 -0
  11. package/seed/marketplaces/ecc/.claude/identity.json +14 -0
  12. package/seed/marketplaces/ecc/.claude/package-manager.json +4 -0
  13. package/seed/marketplaces/ecc/.claude/research/everything-claude-code-research-playbook.md +21 -0
  14. package/seed/marketplaces/ecc/.claude/rules/everything-claude-code-guardrails.md +43 -0
  15. package/seed/marketplaces/ecc/.claude/rules/node.md +56 -0
  16. package/seed/marketplaces/ecc/.claude/skills/everything-claude-code/SKILL.md +442 -0
  17. package/seed/marketplaces/ecc/.claude/team/everything-claude-code-team-config.json +15 -0
  18. package/seed/marketplaces/ecc/.opencode/package-lock.json +169 -169
  19. package/seed/marketplaces/ecc/.vscode/settings.json +17 -0
  20. package/seed/marketplaces/ecc/commands/aside.md +164 -164
  21. package/seed/marketplaces/ecc/commands/auto-update.md +28 -28
  22. package/seed/marketplaces/ecc/commands/build-fix.md +66 -66
  23. package/seed/marketplaces/ecc/commands/checkpoint.md +78 -78
  24. package/seed/marketplaces/ecc/commands/code-review.md +289 -289
  25. package/seed/marketplaces/ecc/commands/cost-report.md +107 -107
  26. package/seed/marketplaces/ecc/commands/cpp-build.md +173 -173
  27. package/seed/marketplaces/ecc/commands/cpp-review.md +132 -132
  28. package/seed/marketplaces/ecc/commands/cpp-test.md +251 -251
  29. package/seed/marketplaces/ecc/commands/ecc-guide.md +93 -93
  30. package/seed/marketplaces/ecc/commands/evolve.md +178 -178
  31. package/seed/marketplaces/ecc/commands/fastapi-review.md +39 -39
  32. package/seed/marketplaces/ecc/commands/feature-dev.md +49 -49
  33. package/seed/marketplaces/ecc/commands/flutter-build.md +164 -164
  34. package/seed/marketplaces/ecc/commands/flutter-review.md +116 -116
  35. package/seed/marketplaces/ecc/commands/flutter-test.md +144 -144
  36. package/seed/marketplaces/ecc/commands/gan-build.md +103 -103
  37. package/seed/marketplaces/ecc/commands/gan-design.md +39 -39
  38. package/seed/marketplaces/ecc/commands/go-build.md +183 -183
  39. package/seed/marketplaces/ecc/commands/go-review.md +148 -148
  40. package/seed/marketplaces/ecc/commands/go-test.md +268 -268
  41. package/seed/marketplaces/ecc/commands/gradle-build.md +70 -70
  42. package/seed/marketplaces/ecc/commands/harness-audit.md +84 -84
  43. package/seed/marketplaces/ecc/commands/hookify-configure.md +14 -14
  44. package/seed/marketplaces/ecc/commands/hookify-help.md +46 -46
  45. package/seed/marketplaces/ecc/commands/hookify-list.md +21 -21
  46. package/seed/marketplaces/ecc/commands/hookify.md +50 -50
  47. package/seed/marketplaces/ecc/commands/instinct-export.md +66 -66
  48. package/seed/marketplaces/ecc/commands/instinct-import.md +114 -114
  49. package/seed/marketplaces/ecc/commands/instinct-status.md +59 -59
  50. package/seed/marketplaces/ecc/commands/jira.md +106 -106
  51. package/seed/marketplaces/ecc/commands/kotlin-build.md +174 -174
  52. package/seed/marketplaces/ecc/commands/kotlin-review.md +140 -140
  53. package/seed/marketplaces/ecc/commands/kotlin-test.md +312 -312
  54. package/seed/marketplaces/ecc/commands/learn-eval.md +116 -116
  55. package/seed/marketplaces/ecc/commands/learn.md +74 -74
  56. package/seed/marketplaces/ecc/commands/loop-start.md +36 -36
  57. package/seed/marketplaces/ecc/commands/loop-status.md +77 -77
  58. package/seed/marketplaces/ecc/commands/marketing-campaign.md +129 -129
  59. package/seed/marketplaces/ecc/commands/model-route.md +30 -30
  60. package/seed/marketplaces/ecc/commands/multi-backend.md +162 -162
  61. package/seed/marketplaces/ecc/commands/multi-execute.md +319 -319
  62. package/seed/marketplaces/ecc/commands/multi-frontend.md +162 -162
  63. package/seed/marketplaces/ecc/commands/multi-plan.md +272 -272
  64. package/seed/marketplaces/ecc/commands/multi-workflow.md +195 -195
  65. package/seed/marketplaces/ecc/commands/plan-prd.md +160 -160
  66. package/seed/marketplaces/ecc/commands/plan.md +200 -200
  67. package/seed/marketplaces/ecc/commands/pm2.md +276 -276
  68. package/seed/marketplaces/ecc/commands/pr.md +184 -184
  69. package/seed/marketplaces/ecc/commands/project-init.md +86 -86
  70. package/seed/marketplaces/ecc/commands/projects.md +39 -39
  71. package/seed/marketplaces/ecc/commands/promote.md +41 -41
  72. package/seed/marketplaces/ecc/commands/prp-commit.md +112 -112
  73. package/seed/marketplaces/ecc/commands/prp-implement.md +385 -385
  74. package/seed/marketplaces/ecc/commands/prp-plan.md +502 -502
  75. package/seed/marketplaces/ecc/commands/prp-pr.md +184 -184
  76. package/seed/marketplaces/ecc/commands/prp-prd.md +447 -447
  77. package/seed/marketplaces/ecc/commands/prune.md +31 -31
  78. package/seed/marketplaces/ecc/commands/python-review.md +297 -297
  79. package/seed/marketplaces/ecc/commands/quality-gate.md +33 -33
  80. package/seed/marketplaces/ecc/commands/refactor-clean.md +84 -84
  81. package/seed/marketplaces/ecc/commands/resume-session.md +156 -156
  82. package/seed/marketplaces/ecc/commands/review-pr.md +37 -37
  83. package/seed/marketplaces/ecc/commands/rust-build.md +187 -187
  84. package/seed/marketplaces/ecc/commands/rust-review.md +142 -142
  85. package/seed/marketplaces/ecc/commands/rust-test.md +308 -308
  86. package/seed/marketplaces/ecc/commands/santa-loop.md +175 -175
  87. package/seed/marketplaces/ecc/commands/save-session.md +275 -275
  88. package/seed/marketplaces/ecc/commands/security-scan.md +92 -92
  89. package/seed/marketplaces/ecc/commands/sessions.md +339 -339
  90. package/seed/marketplaces/ecc/commands/setup-pm.md +80 -80
  91. package/seed/marketplaces/ecc/commands/skill-create.md +174 -174
  92. package/seed/marketplaces/ecc/commands/skill-health.md +54 -54
  93. package/seed/marketplaces/ecc/commands/test-coverage.md +73 -73
  94. package/seed/marketplaces/ecc/commands/update-codemaps.md +76 -76
  95. package/seed/marketplaces/ecc/commands/update-docs.md +88 -88
  96. package/seed/marketplaces/ecc/skills/accessibility/SKILL.md +146 -146
  97. package/seed/marketplaces/ecc/skills/agent-architecture-audit/SKILL.md +256 -256
  98. package/seed/marketplaces/ecc/skills/agent-eval/SKILL.md +145 -145
  99. package/seed/marketplaces/ecc/skills/agent-harness-construction/SKILL.md +73 -73
  100. package/seed/marketplaces/ecc/skills/agent-introspection-debugging/SKILL.md +153 -153
  101. package/seed/marketplaces/ecc/skills/agent-payment-x402/SKILL.md +224 -224
  102. package/seed/marketplaces/ecc/skills/agent-sort/SKILL.md +215 -215
  103. package/seed/marketplaces/ecc/skills/agentic-engineering/SKILL.md +63 -63
  104. package/seed/marketplaces/ecc/skills/agentic-os/SKILL.md +387 -387
  105. package/seed/marketplaces/ecc/skills/ai-first-engineering/SKILL.md +51 -51
  106. package/seed/marketplaces/ecc/skills/ai-regression-testing/SKILL.md +385 -385
  107. package/seed/marketplaces/ecc/skills/android-clean-architecture/SKILL.md +339 -339
  108. package/seed/marketplaces/ecc/skills/angular-developer/SKILL.md +154 -154
  109. package/seed/marketplaces/ecc/skills/angular-developer/references/angular-animations.md +160 -160
  110. package/seed/marketplaces/ecc/skills/angular-developer/references/angular-aria.md +410 -410
  111. package/seed/marketplaces/ecc/skills/angular-developer/references/cli.md +86 -86
  112. package/seed/marketplaces/ecc/skills/angular-developer/references/component-harnesses.md +59 -59
  113. package/seed/marketplaces/ecc/skills/angular-developer/references/component-styling.md +91 -91
  114. package/seed/marketplaces/ecc/skills/angular-developer/references/components.md +117 -117
  115. package/seed/marketplaces/ecc/skills/angular-developer/references/creating-services.md +97 -97
  116. package/seed/marketplaces/ecc/skills/angular-developer/references/data-resolvers.md +69 -69
  117. package/seed/marketplaces/ecc/skills/angular-developer/references/define-routes.md +67 -67
  118. package/seed/marketplaces/ecc/skills/angular-developer/references/defining-providers.md +72 -72
  119. package/seed/marketplaces/ecc/skills/angular-developer/references/di-fundamentals.md +120 -120
  120. package/seed/marketplaces/ecc/skills/angular-developer/references/e2e-testing.md +56 -56
  121. package/seed/marketplaces/ecc/skills/angular-developer/references/effects.md +83 -83
  122. package/seed/marketplaces/ecc/skills/angular-developer/references/hierarchical-injectors.md +43 -43
  123. package/seed/marketplaces/ecc/skills/angular-developer/references/host-elements.md +80 -80
  124. package/seed/marketplaces/ecc/skills/angular-developer/references/injection-context.md +63 -63
  125. package/seed/marketplaces/ecc/skills/angular-developer/references/inputs.md +101 -101
  126. package/seed/marketplaces/ecc/skills/angular-developer/references/linked-signal.md +59 -59
  127. package/seed/marketplaces/ecc/skills/angular-developer/references/loading-strategies.md +61 -61
  128. package/seed/marketplaces/ecc/skills/angular-developer/references/mcp.md +108 -108
  129. package/seed/marketplaces/ecc/skills/angular-developer/references/navigate-to-routes.md +69 -69
  130. package/seed/marketplaces/ecc/skills/angular-developer/references/outputs.md +86 -86
  131. package/seed/marketplaces/ecc/skills/angular-developer/references/reactive-forms.md +122 -122
  132. package/seed/marketplaces/ecc/skills/angular-developer/references/rendering-strategies.md +44 -44
  133. package/seed/marketplaces/ecc/skills/angular-developer/references/resource.md +77 -77
  134. package/seed/marketplaces/ecc/skills/angular-developer/references/route-animations.md +56 -56
  135. package/seed/marketplaces/ecc/skills/angular-developer/references/route-guards.md +52 -52
  136. package/seed/marketplaces/ecc/skills/angular-developer/references/router-lifecycle.md +45 -45
  137. package/seed/marketplaces/ecc/skills/angular-developer/references/router-testing.md +87 -87
  138. package/seed/marketplaces/ecc/skills/angular-developer/references/show-routes-with-outlets.md +68 -68
  139. package/seed/marketplaces/ecc/skills/angular-developer/references/signal-forms.md +795 -795
  140. package/seed/marketplaces/ecc/skills/angular-developer/references/signals-overview.md +94 -94
  141. package/seed/marketplaces/ecc/skills/angular-developer/references/tailwind-css.md +69 -69
  142. package/seed/marketplaces/ecc/skills/angular-developer/references/template-driven-forms.md +114 -114
  143. package/seed/marketplaces/ecc/skills/angular-developer/references/testing-fundamentals.md +65 -65
  144. package/seed/marketplaces/ecc/skills/api-connector-builder/SKILL.md +120 -120
  145. package/seed/marketplaces/ecc/skills/api-design/SKILL.md +523 -523
  146. package/seed/marketplaces/ecc/skills/architecture-decision-records/SKILL.md +179 -179
  147. package/seed/marketplaces/ecc/skills/article-writing/SKILL.md +79 -79
  148. package/seed/marketplaces/ecc/skills/automation-audit-ops/SKILL.md +142 -142
  149. package/seed/marketplaces/ecc/skills/autonomous-agent-harness/SKILL.md +273 -273
  150. package/seed/marketplaces/ecc/skills/autonomous-loops/SKILL.md +610 -610
  151. package/seed/marketplaces/ecc/skills/backend-patterns/SKILL.md +561 -561
  152. package/seed/marketplaces/ecc/skills/benchmark/SKILL.md +93 -93
  153. package/seed/marketplaces/ecc/skills/benchmark-optimization-loop/SKILL.md +69 -69
  154. package/seed/marketplaces/ecc/skills/blender-motion-state-inspection/SKILL.md +164 -164
  155. package/seed/marketplaces/ecc/skills/blueprint/SKILL.md +105 -105
  156. package/seed/marketplaces/ecc/skills/brand-voice/SKILL.md +97 -97
  157. package/seed/marketplaces/ecc/skills/brand-voice/references/voice-profile-schema.md +55 -55
  158. package/seed/marketplaces/ecc/skills/browser-qa/SKILL.md +87 -87
  159. package/seed/marketplaces/ecc/skills/bun-runtime/SKILL.md +84 -84
  160. package/seed/marketplaces/ecc/skills/canary-watch/SKILL.md +107 -107
  161. package/seed/marketplaces/ecc/skills/carrier-relationship-management/SKILL.md +212 -212
  162. package/seed/marketplaces/ecc/skills/cisco-ios-patterns/SKILL.md +163 -163
  163. package/seed/marketplaces/ecc/skills/ck/SKILL.md +147 -147
  164. package/seed/marketplaces/ecc/skills/ck/commands/forget.mjs +44 -44
  165. package/seed/marketplaces/ecc/skills/ck/commands/info.mjs +24 -24
  166. package/seed/marketplaces/ecc/skills/ck/commands/init.mjs +143 -143
  167. package/seed/marketplaces/ecc/skills/ck/commands/list.mjs +40 -40
  168. package/seed/marketplaces/ecc/skills/ck/commands/migrate.mjs +202 -202
  169. package/seed/marketplaces/ecc/skills/ck/commands/resume.mjs +36 -36
  170. package/seed/marketplaces/ecc/skills/ck/commands/save.mjs +210 -210
  171. package/seed/marketplaces/ecc/skills/ck/commands/shared.mjs +387 -387
  172. package/seed/marketplaces/ecc/skills/ck/hooks/session-start.mjs +224 -224
  173. package/seed/marketplaces/ecc/skills/claude-devfleet/SKILL.md +103 -103
  174. package/seed/marketplaces/ecc/skills/click-path-audit/SKILL.md +244 -244
  175. package/seed/marketplaces/ecc/skills/clickhouse-io/SKILL.md +439 -439
  176. package/seed/marketplaces/ecc/skills/code-tour/SKILL.md +236 -236
  177. package/seed/marketplaces/ecc/skills/codebase-onboarding/SKILL.md +233 -233
  178. package/seed/marketplaces/ecc/skills/coding-standards/SKILL.md +549 -549
  179. package/seed/marketplaces/ecc/skills/compose-multiplatform-patterns/SKILL.md +299 -299
  180. package/seed/marketplaces/ecc/skills/configure-ecc/SKILL.md +384 -384
  181. package/seed/marketplaces/ecc/skills/connections-optimizer/SKILL.md +189 -189
  182. package/seed/marketplaces/ecc/skills/content-engine/SKILL.md +131 -131
  183. package/seed/marketplaces/ecc/skills/content-hash-cache-pattern/SKILL.md +161 -161
  184. package/seed/marketplaces/ecc/skills/context-budget/SKILL.md +135 -135
  185. package/seed/marketplaces/ecc/skills/continuous-agent-loop/SKILL.md +45 -45
  186. package/seed/marketplaces/ecc/skills/continuous-learning/SKILL.md +131 -131
  187. package/seed/marketplaces/ecc/skills/continuous-learning/config.json +18 -18
  188. package/seed/marketplaces/ecc/skills/continuous-learning/evaluate-session.sh +69 -69
  189. package/seed/marketplaces/ecc/skills/continuous-learning-v2/SKILL.md +360 -360
  190. package/seed/marketplaces/ecc/skills/continuous-learning-v2/agents/observer-loop.sh +322 -322
  191. package/seed/marketplaces/ecc/skills/continuous-learning-v2/agents/observer.md +198 -198
  192. package/seed/marketplaces/ecc/skills/continuous-learning-v2/agents/session-guardian.sh +150 -150
  193. package/seed/marketplaces/ecc/skills/continuous-learning-v2/agents/start-observer.sh +248 -248
  194. package/seed/marketplaces/ecc/skills/continuous-learning-v2/config.json +8 -8
  195. package/seed/marketplaces/ecc/skills/continuous-learning-v2/hooks/observe.sh +498 -498
  196. package/seed/marketplaces/ecc/skills/continuous-learning-v2/scripts/detect-project.sh +322 -322
  197. package/seed/marketplaces/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +1826 -1826
  198. package/seed/marketplaces/ecc/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -31
  199. package/seed/marketplaces/ecc/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -62
  200. package/seed/marketplaces/ecc/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1018 -1018
  201. package/seed/marketplaces/ecc/skills/cost-aware-llm-pipeline/SKILL.md +183 -183
  202. package/seed/marketplaces/ecc/skills/cost-tracking/SKILL.md +147 -147
  203. package/seed/marketplaces/ecc/skills/council/SKILL.md +203 -203
  204. package/seed/marketplaces/ecc/skills/cpp-coding-standards/SKILL.md +723 -723
  205. package/seed/marketplaces/ecc/skills/cpp-testing/SKILL.md +324 -324
  206. package/seed/marketplaces/ecc/skills/crosspost/SKILL.md +111 -111
  207. package/seed/marketplaces/ecc/skills/csharp-testing/SKILL.md +321 -321
  208. package/seed/marketplaces/ecc/skills/customer-billing-ops/SKILL.md +140 -140
  209. package/seed/marketplaces/ecc/skills/customs-trade-compliance/SKILL.md +263 -263
  210. package/seed/marketplaces/ecc/skills/dart-flutter-patterns/SKILL.md +563 -563
  211. package/seed/marketplaces/ecc/skills/dashboard-builder/SKILL.md +108 -108
  212. package/seed/marketplaces/ecc/skills/data-scraper-agent/SKILL.md +764 -764
  213. package/seed/marketplaces/ecc/skills/data-throughput-accelerator/SKILL.md +72 -72
  214. package/seed/marketplaces/ecc/skills/database-migrations/SKILL.md +429 -429
  215. package/seed/marketplaces/ecc/skills/deep-research/SKILL.md +159 -159
  216. package/seed/marketplaces/ecc/skills/defi-amm-security/SKILL.md +166 -166
  217. package/seed/marketplaces/ecc/skills/deployment-patterns/SKILL.md +427 -427
  218. package/seed/marketplaces/ecc/skills/design-system/SKILL.md +82 -82
  219. package/seed/marketplaces/ecc/skills/django-celery/SKILL.md +457 -457
  220. package/seed/marketplaces/ecc/skills/django-patterns/SKILL.md +734 -734
  221. package/seed/marketplaces/ecc/skills/django-security/SKILL.md +593 -593
  222. package/seed/marketplaces/ecc/skills/django-tdd/SKILL.md +729 -729
  223. package/seed/marketplaces/ecc/skills/django-verification/SKILL.md +469 -469
  224. package/seed/marketplaces/ecc/skills/dmux-workflows/SKILL.md +191 -191
  225. package/seed/marketplaces/ecc/skills/docker-patterns/SKILL.md +364 -364
  226. package/seed/marketplaces/ecc/skills/documentation-lookup/SKILL.md +90 -90
  227. package/seed/marketplaces/ecc/skills/dotnet-patterns/SKILL.md +321 -321
  228. package/seed/marketplaces/ecc/skills/e2e-testing/SKILL.md +326 -326
  229. package/seed/marketplaces/ecc/skills/ecc-guide/SKILL.md +189 -189
  230. package/seed/marketplaces/ecc/skills/ecc-tools-cost-audit/SKILL.md +160 -160
  231. package/seed/marketplaces/ecc/skills/email-ops/SKILL.md +121 -121
  232. package/seed/marketplaces/ecc/skills/energy-procurement/SKILL.md +228 -228
  233. package/seed/marketplaces/ecc/skills/enterprise-agent-ops/SKILL.md +50 -50
  234. package/seed/marketplaces/ecc/skills/error-handling/SKILL.md +376 -376
  235. package/seed/marketplaces/ecc/skills/eval-harness/SKILL.md +270 -270
  236. package/seed/marketplaces/ecc/skills/evm-token-decimals/SKILL.md +130 -130
  237. package/seed/marketplaces/ecc/skills/exa-search/SKILL.md +107 -107
  238. package/seed/marketplaces/ecc/skills/fal-ai-media/SKILL.md +288 -288
  239. package/seed/marketplaces/ecc/skills/fastapi-patterns/SKILL.md +327 -327
  240. package/seed/marketplaces/ecc/skills/finance-billing-ops/SKILL.md +127 -127
  241. package/seed/marketplaces/ecc/skills/flox-environments/SKILL.md +496 -496
  242. package/seed/marketplaces/ecc/skills/flutter-dart-code-review/SKILL.md +435 -435
  243. package/seed/marketplaces/ecc/skills/foundation-models-on-device/SKILL.md +243 -243
  244. package/seed/marketplaces/ecc/skills/frontend-a11y/SKILL.md +446 -446
  245. package/seed/marketplaces/ecc/skills/frontend-design-direction/SKILL.md +92 -92
  246. package/seed/marketplaces/ecc/skills/frontend-patterns/SKILL.md +642 -642
  247. package/seed/marketplaces/ecc/skills/frontend-slides/SKILL.md +184 -184
  248. package/seed/marketplaces/ecc/skills/frontend-slides/STYLE_PRESETS.md +330 -330
  249. package/seed/marketplaces/ecc/skills/frontend-slides/animation-patterns.md +122 -122
  250. package/seed/marketplaces/ecc/skills/frontend-slides/html-template.md +419 -419
  251. package/seed/marketplaces/ecc/skills/frontend-slides/scripts/export-pdf.sh +418 -418
  252. package/seed/marketplaces/ecc/skills/frontend-slides/scripts/extract-pptx.py +96 -96
  253. package/seed/marketplaces/ecc/skills/frontend-slides/viewport-base.css +153 -153
  254. package/seed/marketplaces/ecc/skills/fsharp-testing/SKILL.md +280 -280
  255. package/seed/marketplaces/ecc/skills/gan-style-harness/SKILL.md +278 -278
  256. package/seed/marketplaces/ecc/skills/gateguard/SKILL.md +125 -125
  257. package/seed/marketplaces/ecc/skills/git-workflow/SKILL.md +715 -715
  258. package/seed/marketplaces/ecc/skills/github-ops/SKILL.md +144 -144
  259. package/seed/marketplaces/ecc/skills/golang-patterns/SKILL.md +674 -674
  260. package/seed/marketplaces/ecc/skills/golang-testing/SKILL.md +720 -720
  261. package/seed/marketplaces/ecc/skills/google-workspace-ops/SKILL.md +95 -95
  262. package/seed/marketplaces/ecc/skills/healthcare-cdss-patterns/SKILL.md +245 -245
  263. package/seed/marketplaces/ecc/skills/healthcare-emr-patterns/SKILL.md +159 -159
  264. package/seed/marketplaces/ecc/skills/healthcare-eval-harness/SKILL.md +207 -207
  265. package/seed/marketplaces/ecc/skills/healthcare-phi-compliance/SKILL.md +145 -145
  266. package/seed/marketplaces/ecc/skills/hermes-imports/SKILL.md +88 -88
  267. package/seed/marketplaces/ecc/skills/hexagonal-architecture/SKILL.md +276 -276
  268. package/seed/marketplaces/ecc/skills/hipaa-compliance/SKILL.md +78 -78
  269. package/seed/marketplaces/ecc/skills/homelab-network-readiness/SKILL.md +169 -169
  270. package/seed/marketplaces/ecc/skills/homelab-network-setup/SKILL.md +129 -129
  271. package/seed/marketplaces/ecc/skills/homelab-pihole-dns/SKILL.md +274 -274
  272. package/seed/marketplaces/ecc/skills/homelab-vlan-segmentation/SKILL.md +311 -311
  273. package/seed/marketplaces/ecc/skills/homelab-wireguard-vpn/SKILL.md +305 -305
  274. package/seed/marketplaces/ecc/skills/hookify-rules/SKILL.md +128 -128
  275. package/seed/marketplaces/ecc/skills/inventory-demand-planning/SKILL.md +247 -247
  276. package/seed/marketplaces/ecc/skills/investor-materials/SKILL.md +96 -96
  277. package/seed/marketplaces/ecc/skills/investor-outreach/SKILL.md +91 -91
  278. package/seed/marketplaces/ecc/skills/ios-icon-gen/SKILL.md +157 -157
  279. package/seed/marketplaces/ecc/skills/ios-icon-gen/scripts/generate_icons.swift +258 -258
  280. package/seed/marketplaces/ecc/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -235
  281. package/seed/marketplaces/ecc/skills/iterative-retrieval/SKILL.md +211 -211
  282. package/seed/marketplaces/ecc/skills/ito-basket-compare/SKILL.md +63 -63
  283. package/seed/marketplaces/ecc/skills/ito-data-atlas-agent/SKILL.md +63 -63
  284. package/seed/marketplaces/ecc/skills/ito-market-intelligence/SKILL.md +60 -60
  285. package/seed/marketplaces/ecc/skills/ito-trade-planner/SKILL.md +67 -67
  286. package/seed/marketplaces/ecc/skills/java-coding-standards/SKILL.md +383 -383
  287. package/seed/marketplaces/ecc/skills/jira-integration/SKILL.md +293 -293
  288. package/seed/marketplaces/ecc/skills/jpa-patterns/SKILL.md +151 -151
  289. package/seed/marketplaces/ecc/skills/knowledge-ops/SKILL.md +154 -154
  290. package/seed/marketplaces/ecc/skills/kotlin-coroutines-flows/SKILL.md +284 -284
  291. package/seed/marketplaces/ecc/skills/kotlin-exposed-patterns/SKILL.md +719 -719
  292. package/seed/marketplaces/ecc/skills/kotlin-ktor-patterns/SKILL.md +689 -689
  293. package/seed/marketplaces/ecc/skills/kotlin-patterns/SKILL.md +711 -711
  294. package/seed/marketplaces/ecc/skills/kotlin-testing/SKILL.md +824 -824
  295. package/seed/marketplaces/ecc/skills/laravel-patterns/SKILL.md +415 -415
  296. package/seed/marketplaces/ecc/skills/laravel-plugin-discovery/SKILL.md +229 -229
  297. package/seed/marketplaces/ecc/skills/laravel-security/SKILL.md +285 -285
  298. package/seed/marketplaces/ecc/skills/laravel-tdd/SKILL.md +283 -283
  299. package/seed/marketplaces/ecc/skills/laravel-verification/SKILL.md +179 -179
  300. package/seed/marketplaces/ecc/skills/latency-critical-systems/SKILL.md +73 -73
  301. package/seed/marketplaces/ecc/skills/lead-intelligence/SKILL.md +321 -321
  302. package/seed/marketplaces/ecc/skills/lead-intelligence/agents/enrichment-agent.md +85 -85
  303. package/seed/marketplaces/ecc/skills/lead-intelligence/agents/mutual-mapper.md +75 -75
  304. package/seed/marketplaces/ecc/skills/lead-intelligence/agents/outreach-drafter.md +98 -98
  305. package/seed/marketplaces/ecc/skills/lead-intelligence/agents/signal-scorer.md +60 -60
  306. package/seed/marketplaces/ecc/skills/liquid-glass-design/SKILL.md +279 -279
  307. package/seed/marketplaces/ecc/skills/llm-trading-agent-security/SKILL.md +146 -146
  308. package/seed/marketplaces/ecc/skills/logistics-exception-management/SKILL.md +222 -222
  309. package/seed/marketplaces/ecc/skills/make-interfaces-feel-better/SKILL.md +151 -151
  310. package/seed/marketplaces/ecc/skills/manim-video/SKILL.md +89 -89
  311. package/seed/marketplaces/ecc/skills/manim-video/assets/network_graph_scene.py +52 -52
  312. package/seed/marketplaces/ecc/skills/market-research/SKILL.md +75 -75
  313. package/seed/marketplaces/ecc/skills/marketing-campaign/SKILL.md +113 -113
  314. package/seed/marketplaces/ecc/skills/mcp-server-patterns/SKILL.md +69 -69
  315. package/seed/marketplaces/ecc/skills/messages-ops/SKILL.md +104 -104
  316. package/seed/marketplaces/ecc/skills/mle-workflow/SKILL.md +346 -346
  317. package/seed/marketplaces/ecc/skills/motion-advanced/SKILL.md +596 -596
  318. package/seed/marketplaces/ecc/skills/motion-foundations/SKILL.md +299 -299
  319. package/seed/marketplaces/ecc/skills/motion-patterns/SKILL.md +435 -435
  320. package/seed/marketplaces/ecc/skills/motion-ui/SKILL.md +575 -575
  321. package/seed/marketplaces/ecc/skills/mysql-patterns/SKILL.md +412 -412
  322. package/seed/marketplaces/ecc/skills/nanoclaw-repl/SKILL.md +33 -33
  323. package/seed/marketplaces/ecc/skills/nestjs-patterns/SKILL.md +230 -230
  324. package/seed/marketplaces/ecc/skills/netmiko-ssh-automation/SKILL.md +173 -173
  325. package/seed/marketplaces/ecc/skills/network-bgp-diagnostics/SKILL.md +167 -167
  326. package/seed/marketplaces/ecc/skills/network-config-validation/SKILL.md +210 -210
  327. package/seed/marketplaces/ecc/skills/network-interface-health/SKILL.md +152 -152
  328. package/seed/marketplaces/ecc/skills/nextjs-turbopack/SKILL.md +57 -57
  329. package/seed/marketplaces/ecc/skills/nodejs-keccak256/SKILL.md +102 -102
  330. package/seed/marketplaces/ecc/skills/nutrient-document-processing/SKILL.md +167 -167
  331. package/seed/marketplaces/ecc/skills/nuxt4-patterns/SKILL.md +100 -100
  332. package/seed/marketplaces/ecc/skills/openclaw-persona-forge/SKILL.md +288 -288
  333. package/seed/marketplaces/ecc/skills/openclaw-persona-forge/gacha.py +224 -224
  334. package/seed/marketplaces/ecc/skills/openclaw-persona-forge/gacha.sh +5 -5
  335. package/seed/marketplaces/ecc/skills/openclaw-persona-forge/references/avatar-style.md +124 -124
  336. package/seed/marketplaces/ecc/skills/openclaw-persona-forge/references/boundary-rules.md +53 -53
  337. package/seed/marketplaces/ecc/skills/openclaw-persona-forge/references/error-handling.md +53 -53
  338. package/seed/marketplaces/ecc/skills/openclaw-persona-forge/references/identity-tension.md +48 -48
  339. package/seed/marketplaces/ecc/skills/openclaw-persona-forge/references/naming-system.md +39 -39
  340. package/seed/marketplaces/ecc/skills/openclaw-persona-forge/references/output-template.md +166 -166
  341. package/seed/marketplaces/ecc/skills/opensource-pipeline/SKILL.md +255 -255
  342. package/seed/marketplaces/ecc/skills/parallel-execution-optimizer/SKILL.md +72 -72
  343. package/seed/marketplaces/ecc/skills/perl-patterns/SKILL.md +504 -504
  344. package/seed/marketplaces/ecc/skills/perl-security/SKILL.md +503 -503
  345. package/seed/marketplaces/ecc/skills/perl-testing/SKILL.md +475 -475
  346. package/seed/marketplaces/ecc/skills/plan-orchestrate/SKILL.md +262 -262
  347. package/seed/marketplaces/ecc/skills/plankton-code-quality/SKILL.md +236 -236
  348. package/seed/marketplaces/ecc/skills/postgres-patterns/SKILL.md +147 -147
  349. package/seed/marketplaces/ecc/skills/prediction-market-oracle-research/SKILL.md +63 -63
  350. package/seed/marketplaces/ecc/skills/prediction-market-risk-review/SKILL.md +60 -60
  351. package/seed/marketplaces/ecc/skills/prisma-patterns/SKILL.md +371 -371
  352. package/seed/marketplaces/ecc/skills/product-capability/SKILL.md +141 -141
  353. package/seed/marketplaces/ecc/skills/product-lens/SKILL.md +92 -92
  354. package/seed/marketplaces/ecc/skills/production-audit/SKILL.md +206 -206
  355. package/seed/marketplaces/ecc/skills/production-scheduling/SKILL.md +238 -238
  356. package/seed/marketplaces/ecc/skills/project-flow-ops/SKILL.md +111 -111
  357. package/seed/marketplaces/ecc/skills/prompt-optimizer/SKILL.md +398 -398
  358. package/seed/marketplaces/ecc/skills/python-patterns/SKILL.md +750 -750
  359. package/seed/marketplaces/ecc/skills/python-testing/SKILL.md +816 -816
  360. package/seed/marketplaces/ecc/skills/pytorch-patterns/SKILL.md +396 -396
  361. package/seed/marketplaces/ecc/skills/quality-nonconformance/SKILL.md +260 -260
  362. package/seed/marketplaces/ecc/skills/quarkus-patterns/SKILL.md +722 -722
  363. package/seed/marketplaces/ecc/skills/quarkus-security/SKILL.md +467 -467
  364. package/seed/marketplaces/ecc/skills/quarkus-tdd/SKILL.md +811 -811
  365. package/seed/marketplaces/ecc/skills/quarkus-verification/SKILL.md +479 -479
  366. package/seed/marketplaces/ecc/skills/ralphinho-rfc-pipeline/SKILL.md +67 -67
  367. package/seed/marketplaces/ecc/skills/recsys-pipeline-architect/SKILL.md +114 -114
  368. package/seed/marketplaces/ecc/skills/recursive-decision-ledger/SKILL.md +79 -79
  369. package/seed/marketplaces/ecc/skills/redis-patterns/SKILL.md +403 -403
  370. package/seed/marketplaces/ecc/skills/regex-vs-llm-structured-text/SKILL.md +220 -220
  371. package/seed/marketplaces/ecc/skills/remotion-video-creation/SKILL.md +43 -43
  372. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/3d.md +86 -86
  373. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/animations.md +29 -29
  374. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -173
  375. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -100
  376. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -108
  377. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/assets.md +78 -78
  378. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/audio.md +172 -172
  379. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/calculate-metadata.md +104 -104
  380. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/can-decode.md +75 -75
  381. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/charts.md +58 -58
  382. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/compositions.md +146 -146
  383. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/display-captions.md +126 -126
  384. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/extract-frames.md +229 -229
  385. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/fonts.md +152 -152
  386. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/get-audio-duration.md +58 -58
  387. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -68
  388. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/get-video-duration.md +58 -58
  389. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/gifs.md +138 -138
  390. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/images.md +130 -130
  391. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/import-srt-captions.md +67 -67
  392. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/lottie.md +67 -67
  393. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -34
  394. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/measuring-text.md +143 -143
  395. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/sequencing.md +106 -106
  396. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/tailwind.md +11 -11
  397. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/text-animations.md +20 -20
  398. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/timing.md +179 -179
  399. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/transcribe-captions.md +19 -19
  400. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/transitions.md +122 -122
  401. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/trimming.md +52 -52
  402. package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/videos.md +171 -171
  403. package/seed/marketplaces/ecc/skills/repo-scan/SKILL.md +78 -78
  404. package/seed/marketplaces/ecc/skills/research-ops/SKILL.md +112 -112
  405. package/seed/marketplaces/ecc/skills/returns-reverse-logistics/SKILL.md +240 -240
  406. package/seed/marketplaces/ecc/skills/rules-distill/SKILL.md +264 -264
  407. package/seed/marketplaces/ecc/skills/rules-distill/scripts/scan-rules.sh +58 -58
  408. package/seed/marketplaces/ecc/skills/rules-distill/scripts/scan-skills.sh +129 -129
  409. package/seed/marketplaces/ecc/skills/rust-patterns/SKILL.md +499 -499
  410. package/seed/marketplaces/ecc/skills/rust-testing/SKILL.md +500 -500
  411. package/seed/marketplaces/ecc/skills/safety-guard/SKILL.md +75 -75
  412. package/seed/marketplaces/ecc/skills/santa-method/SKILL.md +306 -306
  413. package/seed/marketplaces/ecc/skills/scientific-db-pubmed-database/SKILL.md +175 -175
  414. package/seed/marketplaces/ecc/skills/scientific-db-uspto-database/SKILL.md +177 -177
  415. package/seed/marketplaces/ecc/skills/scientific-pkg-gget/SKILL.md +166 -166
  416. package/seed/marketplaces/ecc/skills/scientific-thinking-literature-review/SKILL.md +192 -192
  417. package/seed/marketplaces/ecc/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -160
  418. package/seed/marketplaces/ecc/skills/search-first/SKILL.md +182 -182
  419. package/seed/marketplaces/ecc/skills/security-bounty-hunter/SKILL.md +99 -99
  420. package/seed/marketplaces/ecc/skills/security-review/SKILL.md +503 -503
  421. package/seed/marketplaces/ecc/skills/security-review/cloud-infrastructure-security.md +361 -361
  422. package/seed/marketplaces/ecc/skills/security-scan/SKILL.md +165 -165
  423. package/seed/marketplaces/ecc/skills/seo/SKILL.md +154 -154
  424. package/seed/marketplaces/ecc/skills/skill-comply/SKILL.md +58 -58
  425. package/seed/marketplaces/ecc/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -5
  426. package/seed/marketplaces/ecc/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -3
  427. package/seed/marketplaces/ecc/skills/skill-comply/fixtures/tdd_spec.yaml +44 -44
  428. package/seed/marketplaces/ecc/skills/skill-comply/prompts/classifier.md +24 -24
  429. package/seed/marketplaces/ecc/skills/skill-comply/prompts/scenario_generator.md +62 -62
  430. package/seed/marketplaces/ecc/skills/skill-comply/prompts/spec_generator.md +42 -42
  431. package/seed/marketplaces/ecc/skills/skill-comply/pyproject.toml +15 -15
  432. package/seed/marketplaces/ecc/skills/skill-comply/scripts/classifier.py +85 -85
  433. package/seed/marketplaces/ecc/skills/skill-comply/scripts/grader.py +124 -124
  434. package/seed/marketplaces/ecc/skills/skill-comply/scripts/parser.py +107 -107
  435. package/seed/marketplaces/ecc/skills/skill-comply/scripts/report.py +170 -170
  436. package/seed/marketplaces/ecc/skills/skill-comply/scripts/run.py +127 -127
  437. package/seed/marketplaces/ecc/skills/skill-comply/scripts/runner.py +186 -186
  438. package/seed/marketplaces/ecc/skills/skill-comply/scripts/scenario_generator.py +70 -70
  439. package/seed/marketplaces/ecc/skills/skill-comply/scripts/spec_generator.py +72 -72
  440. package/seed/marketplaces/ecc/skills/skill-comply/scripts/utils.py +13 -13
  441. package/seed/marketplaces/ecc/skills/skill-comply/tests/test_grader.py +197 -197
  442. package/seed/marketplaces/ecc/skills/skill-comply/tests/test_parser.py +90 -90
  443. package/seed/marketplaces/ecc/skills/skill-comply/tests/test_runner.py +172 -172
  444. package/seed/marketplaces/ecc/skills/skill-scout/SKILL.md +140 -140
  445. package/seed/marketplaces/ecc/skills/skill-stocktake/SKILL.md +194 -194
  446. package/seed/marketplaces/ecc/skills/skill-stocktake/scripts/quick-diff.sh +87 -87
  447. package/seed/marketplaces/ecc/skills/skill-stocktake/scripts/save-results.sh +56 -56
  448. package/seed/marketplaces/ecc/skills/skill-stocktake/scripts/scan.sh +170 -170
  449. package/seed/marketplaces/ecc/skills/social-graph-ranker/SKILL.md +154 -154
  450. package/seed/marketplaces/ecc/skills/social-publisher/SKILL.md +115 -115
  451. package/seed/marketplaces/ecc/skills/springboot-patterns/SKILL.md +314 -314
  452. package/seed/marketplaces/ecc/skills/springboot-security/SKILL.md +272 -272
  453. package/seed/marketplaces/ecc/skills/springboot-tdd/SKILL.md +158 -158
  454. package/seed/marketplaces/ecc/skills/springboot-verification/SKILL.md +231 -231
  455. package/seed/marketplaces/ecc/skills/strategic-compact/SKILL.md +131 -131
  456. package/seed/marketplaces/ecc/skills/swift-actor-persistence/SKILL.md +143 -143
  457. package/seed/marketplaces/ecc/skills/swift-concurrency-6-2/SKILL.md +216 -216
  458. package/seed/marketplaces/ecc/skills/swift-protocol-di-testing/SKILL.md +190 -190
  459. package/seed/marketplaces/ecc/skills/swiftui-patterns/SKILL.md +259 -259
  460. package/seed/marketplaces/ecc/skills/tdd-workflow/SKILL.md +463 -463
  461. package/seed/marketplaces/ecc/skills/team-builder/SKILL.md +168 -168
  462. package/seed/marketplaces/ecc/skills/terminal-ops/SKILL.md +109 -109
  463. package/seed/marketplaces/ecc/skills/tinystruct-patterns/SKILL.md +203 -203
  464. package/seed/marketplaces/ecc/skills/tinystruct-patterns/references/architecture.md +90 -90
  465. package/seed/marketplaces/ecc/skills/tinystruct-patterns/references/data-handling.md +60 -60
  466. package/seed/marketplaces/ecc/skills/tinystruct-patterns/references/database.md +99 -99
  467. package/seed/marketplaces/ecc/skills/tinystruct-patterns/references/routing.md +64 -64
  468. package/seed/marketplaces/ecc/skills/tinystruct-patterns/references/system-usage.md +97 -97
  469. package/seed/marketplaces/ecc/skills/tinystruct-patterns/references/testing.md +72 -72
  470. package/seed/marketplaces/ecc/skills/token-budget-advisor/SKILL.md +133 -133
  471. package/seed/marketplaces/ecc/skills/ui-demo/SKILL.md +465 -465
  472. package/seed/marketplaces/ecc/skills/ui-to-vue/SKILL.md +134 -134
  473. package/seed/marketplaces/ecc/skills/uncloud/SKILL.md +343 -343
  474. package/seed/marketplaces/ecc/skills/unified-notifications-ops/SKILL.md +187 -187
  475. package/seed/marketplaces/ecc/skills/verification-loop/SKILL.md +126 -126
  476. package/seed/marketplaces/ecc/skills/video-editing/SKILL.md +310 -310
  477. package/seed/marketplaces/ecc/skills/videodb/SKILL.md +374 -374
  478. package/seed/marketplaces/ecc/skills/videodb/reference/api-reference.md +550 -550
  479. package/seed/marketplaces/ecc/skills/videodb/reference/capture-reference.md +407 -407
  480. package/seed/marketplaces/ecc/skills/videodb/reference/capture.md +101 -101
  481. package/seed/marketplaces/ecc/skills/videodb/reference/editor.md +443 -443
  482. package/seed/marketplaces/ecc/skills/videodb/reference/generative.md +331 -331
  483. package/seed/marketplaces/ecc/skills/videodb/reference/rtstream-reference.md +564 -564
  484. package/seed/marketplaces/ecc/skills/videodb/reference/rtstream.md +65 -65
  485. package/seed/marketplaces/ecc/skills/videodb/reference/search.md +230 -230
  486. package/seed/marketplaces/ecc/skills/videodb/reference/streaming.md +406 -406
  487. package/seed/marketplaces/ecc/skills/videodb/reference/use-cases.md +118 -118
  488. package/seed/marketplaces/ecc/skills/videodb/scripts/ws_listener.py +282 -282
  489. package/seed/marketplaces/ecc/skills/visa-doc-translate/README.md +86 -86
  490. package/seed/marketplaces/ecc/skills/visa-doc-translate/SKILL.md +117 -117
  491. package/seed/marketplaces/ecc/skills/vite-patterns/SKILL.md +449 -449
  492. package/seed/marketplaces/ecc/skills/windows-desktop-e2e/SKILL.md +887 -887
  493. package/seed/marketplaces/ecc/skills/workspace-surface-audit/SKILL.md +125 -125
  494. package/seed/marketplaces/ecc/skills/x-api/SKILL.md +234 -234
  495. package/dist/SKILL-r7zmg5v7.md +0 -3
  496. package/dist/cli-mvr5k580.md +0 -3
  497. package/dist/server-zyhc2a9z.md +0 -3
@@ -1,457 +1,457 @@
1
- ---
2
- name: django-celery
3
- description: Django + Celery async task patterns — configuration, task design, beat scheduling, retries, canvas workflows, monitoring, and testing. Use when adding background jobs, scheduled tasks, or async processing to a Django app.
4
- origin: ECC
5
- ---
6
-
7
- # Django + Celery Async Task Patterns
8
-
9
- Production-grade patterns for background task processing in Django using Celery with Redis or RabbitMQ.
10
-
11
- ## When to Activate
12
-
13
- - Adding background jobs or async processing to a Django app
14
- - Implementing periodic/scheduled tasks
15
- - Offloading slow operations (email, PDF generation, API calls) from request cycle
16
- - Setting up Celery Beat for cron-like scheduling
17
- - Debugging task failures, retries, or queue backlogs
18
- - Writing tests for Celery tasks
19
-
20
- ## Project Setup
21
-
22
- ### Installation
23
-
24
- ```bash
25
- pip install celery[redis] django-celery-results django-celery-beat
26
- ```
27
-
28
- ### `celery.py` — App Entrypoint
29
-
30
- ```python
31
- # config/celery.py
32
- import os
33
- from celery import Celery
34
-
35
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.development')
36
-
37
- app = Celery('myproject')
38
- app.config_from_object('django.conf:settings', namespace='CELERY')
39
- app.autodiscover_tasks() # Discovers tasks.py in each INSTALLED_APP
40
-
41
- @app.task(bind=True, ignore_result=True)
42
- def debug_task(self):
43
- print(f'Request: {self.request!r}')
44
- ```
45
-
46
- ```python
47
- # config/__init__.py
48
- from .celery import app as celery_app
49
-
50
- __all__ = ('celery_app',)
51
- ```
52
-
53
- ### Django Settings
54
-
55
- ```python
56
- # config/settings/base.py
57
-
58
- # Broker (Redis recommended for production)
59
- CELERY_BROKER_URL = env('CELERY_BROKER_URL', default='redis://localhost:6379/0')
60
- CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND', default='django-db')
61
-
62
- # Serialization
63
- CELERY_ACCEPT_CONTENT = ['json']
64
- CELERY_TASK_SERIALIZER = 'json'
65
- CELERY_RESULT_SERIALIZER = 'json'
66
-
67
- # Task behavior
68
- CELERY_TASK_TRACK_STARTED = True
69
- CELERY_TASK_TIME_LIMIT = 30 * 60 # Hard limit: 30 min
70
- CELERY_TASK_SOFT_TIME_LIMIT = 25 * 60 # Soft limit: sends SoftTimeLimitExceeded
71
- CELERY_WORKER_PREFETCH_MULTIPLIER = 1 # Prevent worker hoarding long tasks
72
- CELERY_TASK_ACKS_LATE = True # Re-queue on worker crash
73
-
74
- # Result persistence
75
- CELERY_RESULT_EXPIRES = 60 * 60 * 24 # Keep results 24 hours
76
-
77
- # Beat scheduler (for periodic tasks)
78
- CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
79
-
80
- # Installed apps
81
- INSTALLED_APPS += [
82
- 'django_celery_results',
83
- 'django_celery_beat',
84
- ]
85
- ```
86
-
87
- ### Running Workers
88
-
89
- ```bash
90
- # Start worker (development)
91
- celery -A config worker --loglevel=info
92
-
93
- # Start beat scheduler (periodic tasks)
94
- celery -A config beat --loglevel=info --scheduler django_celery_beat.schedulers:DatabaseScheduler
95
-
96
- # Combined worker + beat (dev only, never production)
97
- celery -A config worker --beat --loglevel=info
98
-
99
- # Production: multiple workers with concurrency
100
- celery -A config worker --loglevel=warning --concurrency=4 -Q default,high_priority
101
- ```
102
-
103
- ## Task Design Patterns
104
-
105
- ### Basic Task
106
-
107
- ```python
108
- # apps/notifications/tasks.py
109
- from celery import shared_task
110
- import logging
111
-
112
- logger = logging.getLogger(__name__)
113
-
114
- @shared_task(name='notifications.send_welcome_email')
115
- def send_welcome_email(user_id: int) -> None:
116
- """Send welcome email to newly registered user."""
117
- from apps.users.models import User
118
- from apps.notifications.services import EmailService
119
-
120
- try:
121
- user = User.objects.get(pk=user_id)
122
- except User.DoesNotExist:
123
- logger.warning('send_welcome_email: user %s not found', user_id)
124
- return # Idempotent — do not raise, task already impossible to complete
125
-
126
- EmailService.send_welcome(user)
127
- logger.info('Welcome email sent to user %s', user_id)
128
- ```
129
-
130
- ### Retryable Task
131
-
132
- ```python
133
- @shared_task(
134
- bind=True,
135
- name='integrations.sync_to_crm',
136
- max_retries=5,
137
- default_retry_delay=60, # seconds before first retry
138
- autoretry_for=(ConnectionError, TimeoutError),
139
- retry_backoff=True, # exponential backoff
140
- retry_backoff_max=600, # cap at 10 minutes
141
- retry_jitter=True, # randomise to avoid thundering herd
142
- )
143
- def sync_contact_to_crm(self, contact_id: int) -> dict:
144
- """Sync contact to external CRM with retry on transient failures."""
145
- from apps.crm.services import CRMClient
146
-
147
- try:
148
- result = CRMClient().sync(contact_id)
149
- return result
150
- except CRMClient.RateLimitError as exc:
151
- # Specific retry delay from response header
152
- raise self.retry(exc=exc, countdown=int(exc.retry_after))
153
- ```
154
-
155
- ### Idempotent Task Pattern
156
-
157
- Design tasks so they can safely run multiple times with the same inputs:
158
-
159
- ```python
160
- @shared_task(name='orders.mark_shipped')
161
- def mark_order_shipped(order_id: int, tracking_number: str) -> None:
162
- """Mark order as shipped — safe to run multiple times."""
163
- from apps.orders.models import Order
164
-
165
- updated = Order.objects.filter(
166
- pk=order_id,
167
- status=Order.Status.PROCESSING, # Guard: only update if not already shipped
168
- ).update(
169
- status=Order.Status.SHIPPED,
170
- tracking_number=tracking_number,
171
- )
172
-
173
- if not updated:
174
- logger.info('mark_order_shipped: order %s already shipped or not found', order_id)
175
- ```
176
-
177
- ### Task with Soft Time Limit
178
-
179
- ```python
180
- from celery.exceptions import SoftTimeLimitExceeded
181
-
182
- @shared_task(
183
- bind=True,
184
- name='reports.generate_pdf',
185
- soft_time_limit=120,
186
- time_limit=150,
187
- )
188
- def generate_pdf_report(self, report_id: int) -> str:
189
- """Generate PDF report with graceful timeout handling."""
190
- from apps.reports.services import PDFGenerator
191
-
192
- try:
193
- path = PDFGenerator.build(report_id)
194
- return path
195
- except SoftTimeLimitExceeded:
196
- # Clean up partial files before hard kill
197
- PDFGenerator.cleanup(report_id)
198
- raise
199
- ```
200
-
201
- ## Calling Tasks
202
-
203
- ```python
204
- from datetime import timedelta
205
- from django.utils import timezone
206
-
207
- # Fire and forget (async)
208
- send_welcome_email.delay(user.pk)
209
-
210
- # Schedule in the future
211
- send_reminder.apply_async(args=[user.pk], countdown=3600) # 1 hour from now
212
- send_reminder.apply_async(args=[user.pk], eta=timezone.now() + timedelta(days=1))
213
-
214
- # Apply with queue routing
215
- sync_contact_to_crm.apply_async(args=[contact.pk], queue='high_priority')
216
-
217
- # Run synchronously (tests / debugging only)
218
- result = generate_pdf_report.apply(args=[report.pk])
219
- ```
220
-
221
- ## Beat Scheduling (Periodic Tasks)
222
-
223
- ### Code-Defined Schedule
224
-
225
- ```python
226
- # config/settings/base.py
227
- from celery.schedules import crontab
228
-
229
- CELERY_BEAT_SCHEDULE = {
230
- 'cleanup-expired-sessions': {
231
- 'task': 'users.cleanup_expired_sessions',
232
- 'schedule': crontab(hour=2, minute=0), # 2am daily
233
- },
234
- 'sync-inventory': {
235
- 'task': 'products.sync_inventory',
236
- 'schedule': 60.0, # every 60 seconds
237
- },
238
- 'weekly-digest': {
239
- 'task': 'notifications.send_weekly_digest',
240
- 'schedule': crontab(day_of_week='monday', hour=8, minute=0),
241
- },
242
- }
243
- ```
244
-
245
- ### Database-Defined Schedule (via django-celery-beat)
246
-
247
- ```python
248
- # Manage periodic tasks from Django admin or code
249
- from django_celery_beat.models import PeriodicTask, CrontabSchedule
250
- import json
251
-
252
- schedule, _ = CrontabSchedule.objects.get_or_create(
253
- hour='*/6', minute='0',
254
- timezone='UTC',
255
- )
256
-
257
- PeriodicTask.objects.update_or_create(
258
- name='Sync inventory every 6 hours',
259
- defaults={
260
- 'crontab': schedule,
261
- 'task': 'products.sync_inventory',
262
- 'args': json.dumps([]),
263
- 'enabled': True,
264
- }
265
- )
266
- ```
267
-
268
- ## Canvas: Chaining and Grouping Tasks
269
-
270
- ```python
271
- from celery import chain, group, chord
272
-
273
- # Chain: run tasks sequentially, passing results
274
- pipeline = chain(
275
- fetch_data.s(source_id),
276
- transform_data.s(), # receives fetch_data result as first arg
277
- load_to_warehouse.s(),
278
- )
279
- pipeline.delay()
280
-
281
- # Group: run tasks in parallel
282
- parallel = group(
283
- send_welcome_email.s(user_id)
284
- for user_id in new_user_ids
285
- )
286
- parallel.delay()
287
-
288
- # Chord: parallel tasks + callback when all complete
289
- result = chord(
290
- group(process_chunk.s(chunk) for chunk in data_chunks),
291
- aggregate_results.s(), # called with list of chunk results
292
- )
293
- result.delay()
294
- ```
295
-
296
- ## Error Handling and Dead Letter Queue
297
-
298
- ```python
299
- # apps/core/tasks.py
300
- from celery.signals import task_failure
301
-
302
- @task_failure.connect
303
- def on_task_failure(sender, task_id, exception, args, kwargs, traceback, einfo, **kw):
304
- """Log all task failures to Sentry / alerting."""
305
- import sentry_sdk
306
- with sentry_sdk.new_scope() as scope:
307
- scope.set_context('celery', {
308
- 'task': sender.name,
309
- 'task_id': task_id,
310
- 'args': args,
311
- 'kwargs': kwargs,
312
- })
313
- sentry_sdk.capture_exception(exception)
314
- ```
315
-
316
- ```python
317
- # Route failed tasks to dead-letter queue after max retries
318
- @shared_task(
319
- bind=True,
320
- max_retries=3,
321
- name='payments.charge_card',
322
- )
323
- def charge_card(self, order_id: int) -> None:
324
- from apps.payments.models import Order, FailedCharge
325
-
326
- try:
327
- _do_charge(order_id)
328
- except Exception as exc:
329
- if self.request.retries >= self.max_retries:
330
- # Persist to dead-letter table for manual review
331
- FailedCharge.objects.create(
332
- order_id=order_id,
333
- error=str(exc),
334
- task_id=self.request.id,
335
- )
336
- return # Don't raise — task is permanently failed
337
- raise self.retry(exc=exc)
338
- ```
339
-
340
- ## Testing Celery Tasks
341
-
342
- ### Unit Testing (No Broker)
343
-
344
- ```python
345
- # tests/test_tasks.py
346
- import pytest
347
- from unittest.mock import patch, MagicMock
348
- from apps.notifications.tasks import send_welcome_email
349
-
350
- class TestSendWelcomeEmail:
351
-
352
- @pytest.mark.django_db
353
- def test_sends_email_to_existing_user(self, user):
354
- with patch('apps.notifications.services.EmailService') as mock_email:
355
- send_welcome_email(user.pk)
356
- mock_email.send_welcome.assert_called_once_with(user)
357
-
358
- @pytest.mark.django_db
359
- def test_skips_missing_user_gracefully(self):
360
- """Should not raise when user is deleted between enqueue and execute."""
361
- send_welcome_email(99999) # Non-existent user — must not raise
362
- ```
363
-
364
- ### Integration Testing with CELERY_TASK_ALWAYS_EAGER
365
-
366
- ```python
367
- # config/settings/test.py
368
- CELERY_TASK_ALWAYS_EAGER = True # Run tasks synchronously in tests
369
- CELERY_TASK_EAGER_PROPAGATES = True # Re-raise exceptions from tasks
370
-
371
- # tests/test_integration.py
372
- @pytest.mark.django_db
373
- def test_registration_triggers_welcome_email(client):
374
- with patch('apps.notifications.services.EmailService') as mock_email:
375
- response = client.post('/api/users/', {
376
- 'email': 'new@example.com',
377
- 'password': 'strongpass123',
378
- })
379
-
380
- assert response.status_code == 201
381
- mock_email.send_welcome.assert_called_once()
382
- ```
383
-
384
- ### Testing Retries
385
-
386
- ```python
387
- @pytest.mark.django_db
388
- def test_task_retries_on_connection_error():
389
- with patch('apps.crm.services.CRMClient.sync') as mock_sync:
390
- mock_sync.side_effect = ConnectionError('timeout')
391
-
392
- with pytest.raises(ConnectionError):
393
- sync_contact_to_crm.apply(args=[1], throw=True)
394
-
395
- assert mock_sync.call_count == 1 # First attempt only when eager
396
- ```
397
-
398
- ## Monitoring
399
-
400
- ```bash
401
- # Inspect active workers and queues
402
- celery -A config inspect active
403
- celery -A config inspect stats
404
- celery -A config inspect reserved
405
-
406
- # Check queue lengths (Redis)
407
- redis-cli llen celery
408
-
409
- # Flower: web-based real-time monitor
410
- pip install flower
411
- celery -A config flower --port=5555
412
- ```
413
-
414
- ## Anti-Patterns
415
-
416
- ```python
417
- # BAD: Passing model instances — they may be stale by execution time
418
- send_welcome_email.delay(user) # Never pass ORM objects
419
- send_welcome_email.delay(user.pk) # Always pass PKs
420
-
421
- # BAD: Calling tasks synchronously in production views
422
- result = generate_report.apply() # Blocks the request thread
423
-
424
- # BAD: Non-idempotent task without guards
425
- @shared_task
426
- def charge_and_fulfill(order_id):
427
- order.charge() # May charge twice if task retries!
428
- order.fulfill()
429
-
430
- # GOOD: Idempotent with status guard
431
- @shared_task
432
- def charge_and_fulfill(order_id):
433
- order = Order.objects.select_for_update().get(pk=order_id)
434
- if order.status != Order.Status.PENDING:
435
- return # Already processed
436
- order.charge()
437
- order.fulfill()
438
- ```
439
-
440
- ## Production Checklist
441
-
442
- | Check | Setting |
443
- |-------|---------|
444
- | Worker restarts on crash | `supervisord` or `systemd` unit |
445
- | `CELERY_TASK_ACKS_LATE = True` | Re-queue tasks on worker crash |
446
- | `CELERY_WORKER_PREFETCH_MULTIPLIER = 1` | Fair distribution of long tasks |
447
- | Separate queues per priority | `-Q default,high_priority,low_priority` |
448
- | `CELERY_TASK_SOFT_TIME_LIMIT` set | Graceful timeout before hard kill |
449
- | Sentry integration | Capture all `task_failure` signals |
450
- | Flower or other monitor | Visibility into queue depths |
451
- | Beat runs on single node only | Prevents duplicate scheduled task execution |
452
-
453
- ## Related Skills
454
-
455
- - `django-patterns` — ORM, service layer, and project structure
456
- - `django-tdd` — Testing Django models, views, and services
457
- - `python-testing` — pytest configuration and fixtures
1
+ ---
2
+ name: django-celery
3
+ description: Django + Celery async task patterns — configuration, task design, beat scheduling, retries, canvas workflows, monitoring, and testing. Use when adding background jobs, scheduled tasks, or async processing to a Django app.
4
+ origin: ECC
5
+ ---
6
+
7
+ # Django + Celery Async Task Patterns
8
+
9
+ Production-grade patterns for background task processing in Django using Celery with Redis or RabbitMQ.
10
+
11
+ ## When to Activate
12
+
13
+ - Adding background jobs or async processing to a Django app
14
+ - Implementing periodic/scheduled tasks
15
+ - Offloading slow operations (email, PDF generation, API calls) from request cycle
16
+ - Setting up Celery Beat for cron-like scheduling
17
+ - Debugging task failures, retries, or queue backlogs
18
+ - Writing tests for Celery tasks
19
+
20
+ ## Project Setup
21
+
22
+ ### Installation
23
+
24
+ ```bash
25
+ pip install celery[redis] django-celery-results django-celery-beat
26
+ ```
27
+
28
+ ### `celery.py` — App Entrypoint
29
+
30
+ ```python
31
+ # config/celery.py
32
+ import os
33
+ from celery import Celery
34
+
35
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.development')
36
+
37
+ app = Celery('myproject')
38
+ app.config_from_object('django.conf:settings', namespace='CELERY')
39
+ app.autodiscover_tasks() # Discovers tasks.py in each INSTALLED_APP
40
+
41
+ @app.task(bind=True, ignore_result=True)
42
+ def debug_task(self):
43
+ print(f'Request: {self.request!r}')
44
+ ```
45
+
46
+ ```python
47
+ # config/__init__.py
48
+ from .celery import app as celery_app
49
+
50
+ __all__ = ('celery_app',)
51
+ ```
52
+
53
+ ### Django Settings
54
+
55
+ ```python
56
+ # config/settings/base.py
57
+
58
+ # Broker (Redis recommended for production)
59
+ CELERY_BROKER_URL = env('CELERY_BROKER_URL', default='redis://localhost:6379/0')
60
+ CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND', default='django-db')
61
+
62
+ # Serialization
63
+ CELERY_ACCEPT_CONTENT = ['json']
64
+ CELERY_TASK_SERIALIZER = 'json'
65
+ CELERY_RESULT_SERIALIZER = 'json'
66
+
67
+ # Task behavior
68
+ CELERY_TASK_TRACK_STARTED = True
69
+ CELERY_TASK_TIME_LIMIT = 30 * 60 # Hard limit: 30 min
70
+ CELERY_TASK_SOFT_TIME_LIMIT = 25 * 60 # Soft limit: sends SoftTimeLimitExceeded
71
+ CELERY_WORKER_PREFETCH_MULTIPLIER = 1 # Prevent worker hoarding long tasks
72
+ CELERY_TASK_ACKS_LATE = True # Re-queue on worker crash
73
+
74
+ # Result persistence
75
+ CELERY_RESULT_EXPIRES = 60 * 60 * 24 # Keep results 24 hours
76
+
77
+ # Beat scheduler (for periodic tasks)
78
+ CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
79
+
80
+ # Installed apps
81
+ INSTALLED_APPS += [
82
+ 'django_celery_results',
83
+ 'django_celery_beat',
84
+ ]
85
+ ```
86
+
87
+ ### Running Workers
88
+
89
+ ```bash
90
+ # Start worker (development)
91
+ celery -A config worker --loglevel=info
92
+
93
+ # Start beat scheduler (periodic tasks)
94
+ celery -A config beat --loglevel=info --scheduler django_celery_beat.schedulers:DatabaseScheduler
95
+
96
+ # Combined worker + beat (dev only, never production)
97
+ celery -A config worker --beat --loglevel=info
98
+
99
+ # Production: multiple workers with concurrency
100
+ celery -A config worker --loglevel=warning --concurrency=4 -Q default,high_priority
101
+ ```
102
+
103
+ ## Task Design Patterns
104
+
105
+ ### Basic Task
106
+
107
+ ```python
108
+ # apps/notifications/tasks.py
109
+ from celery import shared_task
110
+ import logging
111
+
112
+ logger = logging.getLogger(__name__)
113
+
114
+ @shared_task(name='notifications.send_welcome_email')
115
+ def send_welcome_email(user_id: int) -> None:
116
+ """Send welcome email to newly registered user."""
117
+ from apps.users.models import User
118
+ from apps.notifications.services import EmailService
119
+
120
+ try:
121
+ user = User.objects.get(pk=user_id)
122
+ except User.DoesNotExist:
123
+ logger.warning('send_welcome_email: user %s not found', user_id)
124
+ return # Idempotent — do not raise, task already impossible to complete
125
+
126
+ EmailService.send_welcome(user)
127
+ logger.info('Welcome email sent to user %s', user_id)
128
+ ```
129
+
130
+ ### Retryable Task
131
+
132
+ ```python
133
+ @shared_task(
134
+ bind=True,
135
+ name='integrations.sync_to_crm',
136
+ max_retries=5,
137
+ default_retry_delay=60, # seconds before first retry
138
+ autoretry_for=(ConnectionError, TimeoutError),
139
+ retry_backoff=True, # exponential backoff
140
+ retry_backoff_max=600, # cap at 10 minutes
141
+ retry_jitter=True, # randomise to avoid thundering herd
142
+ )
143
+ def sync_contact_to_crm(self, contact_id: int) -> dict:
144
+ """Sync contact to external CRM with retry on transient failures."""
145
+ from apps.crm.services import CRMClient
146
+
147
+ try:
148
+ result = CRMClient().sync(contact_id)
149
+ return result
150
+ except CRMClient.RateLimitError as exc:
151
+ # Specific retry delay from response header
152
+ raise self.retry(exc=exc, countdown=int(exc.retry_after))
153
+ ```
154
+
155
+ ### Idempotent Task Pattern
156
+
157
+ Design tasks so they can safely run multiple times with the same inputs:
158
+
159
+ ```python
160
+ @shared_task(name='orders.mark_shipped')
161
+ def mark_order_shipped(order_id: int, tracking_number: str) -> None:
162
+ """Mark order as shipped — safe to run multiple times."""
163
+ from apps.orders.models import Order
164
+
165
+ updated = Order.objects.filter(
166
+ pk=order_id,
167
+ status=Order.Status.PROCESSING, # Guard: only update if not already shipped
168
+ ).update(
169
+ status=Order.Status.SHIPPED,
170
+ tracking_number=tracking_number,
171
+ )
172
+
173
+ if not updated:
174
+ logger.info('mark_order_shipped: order %s already shipped or not found', order_id)
175
+ ```
176
+
177
+ ### Task with Soft Time Limit
178
+
179
+ ```python
180
+ from celery.exceptions import SoftTimeLimitExceeded
181
+
182
+ @shared_task(
183
+ bind=True,
184
+ name='reports.generate_pdf',
185
+ soft_time_limit=120,
186
+ time_limit=150,
187
+ )
188
+ def generate_pdf_report(self, report_id: int) -> str:
189
+ """Generate PDF report with graceful timeout handling."""
190
+ from apps.reports.services import PDFGenerator
191
+
192
+ try:
193
+ path = PDFGenerator.build(report_id)
194
+ return path
195
+ except SoftTimeLimitExceeded:
196
+ # Clean up partial files before hard kill
197
+ PDFGenerator.cleanup(report_id)
198
+ raise
199
+ ```
200
+
201
+ ## Calling Tasks
202
+
203
+ ```python
204
+ from datetime import timedelta
205
+ from django.utils import timezone
206
+
207
+ # Fire and forget (async)
208
+ send_welcome_email.delay(user.pk)
209
+
210
+ # Schedule in the future
211
+ send_reminder.apply_async(args=[user.pk], countdown=3600) # 1 hour from now
212
+ send_reminder.apply_async(args=[user.pk], eta=timezone.now() + timedelta(days=1))
213
+
214
+ # Apply with queue routing
215
+ sync_contact_to_crm.apply_async(args=[contact.pk], queue='high_priority')
216
+
217
+ # Run synchronously (tests / debugging only)
218
+ result = generate_pdf_report.apply(args=[report.pk])
219
+ ```
220
+
221
+ ## Beat Scheduling (Periodic Tasks)
222
+
223
+ ### Code-Defined Schedule
224
+
225
+ ```python
226
+ # config/settings/base.py
227
+ from celery.schedules import crontab
228
+
229
+ CELERY_BEAT_SCHEDULE = {
230
+ 'cleanup-expired-sessions': {
231
+ 'task': 'users.cleanup_expired_sessions',
232
+ 'schedule': crontab(hour=2, minute=0), # 2am daily
233
+ },
234
+ 'sync-inventory': {
235
+ 'task': 'products.sync_inventory',
236
+ 'schedule': 60.0, # every 60 seconds
237
+ },
238
+ 'weekly-digest': {
239
+ 'task': 'notifications.send_weekly_digest',
240
+ 'schedule': crontab(day_of_week='monday', hour=8, minute=0),
241
+ },
242
+ }
243
+ ```
244
+
245
+ ### Database-Defined Schedule (via django-celery-beat)
246
+
247
+ ```python
248
+ # Manage periodic tasks from Django admin or code
249
+ from django_celery_beat.models import PeriodicTask, CrontabSchedule
250
+ import json
251
+
252
+ schedule, _ = CrontabSchedule.objects.get_or_create(
253
+ hour='*/6', minute='0',
254
+ timezone='UTC',
255
+ )
256
+
257
+ PeriodicTask.objects.update_or_create(
258
+ name='Sync inventory every 6 hours',
259
+ defaults={
260
+ 'crontab': schedule,
261
+ 'task': 'products.sync_inventory',
262
+ 'args': json.dumps([]),
263
+ 'enabled': True,
264
+ }
265
+ )
266
+ ```
267
+
268
+ ## Canvas: Chaining and Grouping Tasks
269
+
270
+ ```python
271
+ from celery import chain, group, chord
272
+
273
+ # Chain: run tasks sequentially, passing results
274
+ pipeline = chain(
275
+ fetch_data.s(source_id),
276
+ transform_data.s(), # receives fetch_data result as first arg
277
+ load_to_warehouse.s(),
278
+ )
279
+ pipeline.delay()
280
+
281
+ # Group: run tasks in parallel
282
+ parallel = group(
283
+ send_welcome_email.s(user_id)
284
+ for user_id in new_user_ids
285
+ )
286
+ parallel.delay()
287
+
288
+ # Chord: parallel tasks + callback when all complete
289
+ result = chord(
290
+ group(process_chunk.s(chunk) for chunk in data_chunks),
291
+ aggregate_results.s(), # called with list of chunk results
292
+ )
293
+ result.delay()
294
+ ```
295
+
296
+ ## Error Handling and Dead Letter Queue
297
+
298
+ ```python
299
+ # apps/core/tasks.py
300
+ from celery.signals import task_failure
301
+
302
+ @task_failure.connect
303
+ def on_task_failure(sender, task_id, exception, args, kwargs, traceback, einfo, **kw):
304
+ """Log all task failures to Sentry / alerting."""
305
+ import sentry_sdk
306
+ with sentry_sdk.new_scope() as scope:
307
+ scope.set_context('celery', {
308
+ 'task': sender.name,
309
+ 'task_id': task_id,
310
+ 'args': args,
311
+ 'kwargs': kwargs,
312
+ })
313
+ sentry_sdk.capture_exception(exception)
314
+ ```
315
+
316
+ ```python
317
+ # Route failed tasks to dead-letter queue after max retries
318
+ @shared_task(
319
+ bind=True,
320
+ max_retries=3,
321
+ name='payments.charge_card',
322
+ )
323
+ def charge_card(self, order_id: int) -> None:
324
+ from apps.payments.models import Order, FailedCharge
325
+
326
+ try:
327
+ _do_charge(order_id)
328
+ except Exception as exc:
329
+ if self.request.retries >= self.max_retries:
330
+ # Persist to dead-letter table for manual review
331
+ FailedCharge.objects.create(
332
+ order_id=order_id,
333
+ error=str(exc),
334
+ task_id=self.request.id,
335
+ )
336
+ return # Don't raise — task is permanently failed
337
+ raise self.retry(exc=exc)
338
+ ```
339
+
340
+ ## Testing Celery Tasks
341
+
342
+ ### Unit Testing (No Broker)
343
+
344
+ ```python
345
+ # tests/test_tasks.py
346
+ import pytest
347
+ from unittest.mock import patch, MagicMock
348
+ from apps.notifications.tasks import send_welcome_email
349
+
350
+ class TestSendWelcomeEmail:
351
+
352
+ @pytest.mark.django_db
353
+ def test_sends_email_to_existing_user(self, user):
354
+ with patch('apps.notifications.services.EmailService') as mock_email:
355
+ send_welcome_email(user.pk)
356
+ mock_email.send_welcome.assert_called_once_with(user)
357
+
358
+ @pytest.mark.django_db
359
+ def test_skips_missing_user_gracefully(self):
360
+ """Should not raise when user is deleted between enqueue and execute."""
361
+ send_welcome_email(99999) # Non-existent user — must not raise
362
+ ```
363
+
364
+ ### Integration Testing with CELERY_TASK_ALWAYS_EAGER
365
+
366
+ ```python
367
+ # config/settings/test.py
368
+ CELERY_TASK_ALWAYS_EAGER = True # Run tasks synchronously in tests
369
+ CELERY_TASK_EAGER_PROPAGATES = True # Re-raise exceptions from tasks
370
+
371
+ # tests/test_integration.py
372
+ @pytest.mark.django_db
373
+ def test_registration_triggers_welcome_email(client):
374
+ with patch('apps.notifications.services.EmailService') as mock_email:
375
+ response = client.post('/api/users/', {
376
+ 'email': 'new@example.com',
377
+ 'password': 'strongpass123',
378
+ })
379
+
380
+ assert response.status_code == 201
381
+ mock_email.send_welcome.assert_called_once()
382
+ ```
383
+
384
+ ### Testing Retries
385
+
386
+ ```python
387
+ @pytest.mark.django_db
388
+ def test_task_retries_on_connection_error():
389
+ with patch('apps.crm.services.CRMClient.sync') as mock_sync:
390
+ mock_sync.side_effect = ConnectionError('timeout')
391
+
392
+ with pytest.raises(ConnectionError):
393
+ sync_contact_to_crm.apply(args=[1], throw=True)
394
+
395
+ assert mock_sync.call_count == 1 # First attempt only when eager
396
+ ```
397
+
398
+ ## Monitoring
399
+
400
+ ```bash
401
+ # Inspect active workers and queues
402
+ celery -A config inspect active
403
+ celery -A config inspect stats
404
+ celery -A config inspect reserved
405
+
406
+ # Check queue lengths (Redis)
407
+ redis-cli llen celery
408
+
409
+ # Flower: web-based real-time monitor
410
+ pip install flower
411
+ celery -A config flower --port=5555
412
+ ```
413
+
414
+ ## Anti-Patterns
415
+
416
+ ```python
417
+ # BAD: Passing model instances — they may be stale by execution time
418
+ send_welcome_email.delay(user) # Never pass ORM objects
419
+ send_welcome_email.delay(user.pk) # Always pass PKs
420
+
421
+ # BAD: Calling tasks synchronously in production views
422
+ result = generate_report.apply() # Blocks the request thread
423
+
424
+ # BAD: Non-idempotent task without guards
425
+ @shared_task
426
+ def charge_and_fulfill(order_id):
427
+ order.charge() # May charge twice if task retries!
428
+ order.fulfill()
429
+
430
+ # GOOD: Idempotent with status guard
431
+ @shared_task
432
+ def charge_and_fulfill(order_id):
433
+ order = Order.objects.select_for_update().get(pk=order_id)
434
+ if order.status != Order.Status.PENDING:
435
+ return # Already processed
436
+ order.charge()
437
+ order.fulfill()
438
+ ```
439
+
440
+ ## Production Checklist
441
+
442
+ | Check | Setting |
443
+ |-------|---------|
444
+ | Worker restarts on crash | `supervisord` or `systemd` unit |
445
+ | `CELERY_TASK_ACKS_LATE = True` | Re-queue tasks on worker crash |
446
+ | `CELERY_WORKER_PREFETCH_MULTIPLIER = 1` | Fair distribution of long tasks |
447
+ | Separate queues per priority | `-Q default,high_priority,low_priority` |
448
+ | `CELERY_TASK_SOFT_TIME_LIMIT` set | Graceful timeout before hard kill |
449
+ | Sentry integration | Capture all `task_failure` signals |
450
+ | Flower or other monitor | Visibility into queue depths |
451
+ | Beat runs on single node only | Prevents duplicate scheduled task execution |
452
+
453
+ ## Related Skills
454
+
455
+ - `django-patterns` — ORM, service layer, and project structure
456
+ - `django-tdd` — Testing Django models, views, and services
457
+ - `python-testing` — pytest configuration and fixtures