claude-code-arcane 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1778) hide show
  1. package/CHANGELOG.md +100 -0
  2. package/LICENSE +26 -0
  3. package/README.md +372 -0
  4. package/agents/ai/ai-architect.md +80 -0
  5. package/agents/ai/data-engineer.md +66 -0
  6. package/agents/ai/data-scientist.md +58 -0
  7. package/agents/ai/ml-engineer.md +61 -0
  8. package/agents/business/business-ops-lead.md +64 -0
  9. package/agents/business/financial-analyst.md +62 -0
  10. package/agents/business/sales-engineer.md +74 -0
  11. package/agents/clevel/ceo-advisor.md +64 -0
  12. package/agents/clevel/cfo-advisor.md +63 -0
  13. package/agents/clevel/chief-of-staff.md +60 -0
  14. package/agents/clevel/cmo-advisor.md +67 -0
  15. package/agents/clevel/coo-advisor.md +79 -0
  16. package/agents/clevel/cto-advisor.md +72 -0
  17. package/agents/devops/cloud-architect.md +52 -0
  18. package/agents/devops/platform-lead.md +72 -0
  19. package/agents/devops/sre-lead.md +100 -0
  20. package/agents/engineering/android-engineer.md +78 -0
  21. package/agents/engineering/backend-architect.md +127 -0
  22. package/agents/engineering/database-architect.md +138 -0
  23. package/agents/engineering/flutter-engineer.md +75 -0
  24. package/agents/engineering/frontend-architect.md +138 -0
  25. package/agents/engineering/go-engineer.md +102 -0
  26. package/agents/engineering/ios-engineer.md +76 -0
  27. package/agents/engineering/node-engineer.md +107 -0
  28. package/agents/engineering/react-engineer.md +109 -0
  29. package/agents/engineering/react-native-engineer.md +112 -0
  30. package/agents/engineering/sql-specialist.md +106 -0
  31. package/agents/game/accessibility-specialist.md +150 -0
  32. package/agents/game/ai-programmer.md +95 -0
  33. package/agents/game/analytics-engineer.md +101 -0
  34. package/agents/game/art-director.md +64 -0
  35. package/agents/game/economy-designer.md +143 -0
  36. package/agents/game/game-designer.md +70 -0
  37. package/agents/game/gameplay-programmer.md +133 -0
  38. package/agents/game/lead-programmer.md +62 -0
  39. package/agents/game/level-designer.md +115 -0
  40. package/agents/game/live-ops-designer.md +184 -0
  41. package/agents/game/narrative-director.md +60 -0
  42. package/agents/game/network-programmer.md +98 -0
  43. package/agents/game/performance-analyst.md +112 -0
  44. package/agents/game/qa-lead.md +65 -0
  45. package/agents/game/qa-tester-gamedev.md +230 -0
  46. package/agents/game/release-manager.md +65 -0
  47. package/agents/game/sound-designer.md +85 -0
  48. package/agents/game/systems-designer.md +157 -0
  49. package/agents/game/technical-artist.md +108 -0
  50. package/agents/game/technical-director.md +74 -0
  51. package/agents/game/ue-replication-specialist.md +143 -0
  52. package/agents/game/unity-shader-specialist.md +178 -0
  53. package/agents/game/unity-specialist.md +184 -0
  54. package/agents/game/unreal-specialist.md +172 -0
  55. package/agents/game/ux-designer.md +112 -0
  56. package/agents/game/world-builder.md +111 -0
  57. package/agents/game/writer.md +104 -0
  58. package/agents/integrations/api-tools-specialist.md +209 -0
  59. package/agents/integrations/comms-tools-specialist.md +159 -0
  60. package/agents/integrations/design-tools-specialist.md +129 -0
  61. package/agents/integrations/docs-tools-specialist.md +116 -0
  62. package/agents/integrations/integrations-architect.md +144 -0
  63. package/agents/integrations/project-tools-specialist.md +129 -0
  64. package/agents/management/delivery-manager.md +105 -0
  65. package/agents/management/program-director.md +55 -0
  66. package/agents/management/project-manager.md +126 -0
  67. package/agents/management/scrum-master.md +96 -0
  68. package/agents/marketing/content-lead.md +74 -0
  69. package/agents/marketing/growth-lead.md +72 -0
  70. package/agents/marketing/marketing-analyst.md +89 -0
  71. package/agents/marketing/marketing-director.md +75 -0
  72. package/agents/marketing/seo-lead.md +80 -0
  73. package/agents/product/chief-product-officer.md +79 -0
  74. package/agents/product/design-system-lead.md +76 -0
  75. package/agents/product/product-manager.md +132 -0
  76. package/agents/product/ui-lead.md +73 -0
  77. package/agents/product/ux-lead.md +103 -0
  78. package/agents/quality/qa-director.md +121 -0
  79. package/agents/quality/qa-engineer.md +92 -0
  80. package/agents/quality/security-architect.md +144 -0
  81. package/agents/regulatory/compliance-officer.md +88 -0
  82. package/agents/regulatory/quality-manager.md +90 -0
  83. package/agents/regulatory/regulatory-director.md +92 -0
  84. package/agents/visualnovel/vn-comfyui-artist.md +91 -0
  85. package/agents/visualnovel/vn-narrative-director.md +86 -0
  86. package/agents/visualnovel/vn-producer.md +108 -0
  87. package/agents/visualnovel/vn-renpy-developer.md +118 -0
  88. package/agents/visualnovel/vn-scene-director.md +98 -0
  89. package/agents/visualnovel/vn-ui-designer.md +97 -0
  90. package/dist/cli.js +2352 -0
  91. package/docs/SKILLS-CATALOG.md +457 -0
  92. package/docs/USER-GUIDE.md +543 -0
  93. package/docs/agent-hierarchy.md +133 -0
  94. package/docs/coding-standards.md +135 -0
  95. package/docs/collaborative-design.md +439 -0
  96. package/docs/context-management.md +200 -0
  97. package/docs/coordination-rules.md +164 -0
  98. package/docs/directory-structure.md +156 -0
  99. package/docs/division-structure.md +135 -0
  100. package/docs/gamedev/coding-standards.md +184 -0
  101. package/docs/gates/README.md +169 -0
  102. package/docs/gates/gamedev-gates.md +509 -0
  103. package/docs/gates/software-gates.md +449 -0
  104. package/docs/software/coding-standards.md +165 -0
  105. package/docs/technical-preferences.md +61 -0
  106. package/docs/templates/accessibility-requirements.md +331 -0
  107. package/docs/templates/architecture-decision-record.md +177 -0
  108. package/docs/templates/architecture-doc-from-code.md +266 -0
  109. package/docs/templates/architecture-traceability.md +101 -0
  110. package/docs/templates/changelog-template.md +62 -0
  111. package/docs/templates/collaborative-protocols/design-agent-protocol.md +157 -0
  112. package/docs/templates/collaborative-protocols/implementation-agent-protocol.md +160 -0
  113. package/docs/templates/collaborative-protocols/leadership-agent-protocol.md +181 -0
  114. package/docs/templates/design-doc-from-implementation.md +204 -0
  115. package/docs/templates/incident-response.md +135 -0
  116. package/docs/templates/interaction-pattern-library.md +1089 -0
  117. package/docs/templates/milestone-definition.md +79 -0
  118. package/docs/templates/post-mortem.md +69 -0
  119. package/docs/templates/prd.md +222 -0
  120. package/docs/templates/project-stage-report.md +218 -0
  121. package/docs/templates/release-checklist-template.md +125 -0
  122. package/docs/templates/release-notes.md +103 -0
  123. package/docs/templates/rfc.md +256 -0
  124. package/docs/templates/risk-register-entry.md +58 -0
  125. package/docs/templates/skill-test-spec.md +96 -0
  126. package/docs/templates/sprint-plan.md +75 -0
  127. package/docs/templates/technical-design-document.md +98 -0
  128. package/docs/templates/test-evidence.md +86 -0
  129. package/docs/templates/test-plan.md +151 -0
  130. package/docs/templates/ux-spec.md +544 -0
  131. package/hooks/check-update.sh +82 -0
  132. package/hooks/detect-division.sh +28 -0
  133. package/hooks/detect-gaps.sh +230 -0
  134. package/hooks/log-agent-stop.sh +7 -0
  135. package/hooks/log-agent.sh +7 -0
  136. package/hooks/notify.sh +7 -0
  137. package/hooks/post-compact.sh +7 -0
  138. package/hooks/pre-compact.sh +7 -0
  139. package/hooks/session-start.sh +78 -0
  140. package/hooks/session-stop.sh +7 -0
  141. package/hooks/statusline.sh +98 -0
  142. package/hooks/validate-assets.sh +10 -0
  143. package/hooks/validate-commit.sh +24 -0
  144. package/hooks/validate-push.sh +21 -0
  145. package/hooks/validate-secrets.sh +23 -0
  146. package/hooks/validate-skill-change.sh +19 -0
  147. package/package.json +63 -0
  148. package/profiles/agile.yaml +60 -0
  149. package/profiles/ai.yaml +27 -0
  150. package/profiles/android-native.yaml +36 -0
  151. package/profiles/backend-go.yaml +56 -0
  152. package/profiles/backend-ts.yaml +59 -0
  153. package/profiles/business.yaml +24 -0
  154. package/profiles/clevel.yaml +48 -0
  155. package/profiles/clickup.yaml +21 -0
  156. package/profiles/core.yaml +83 -0
  157. package/profiles/database.yaml +28 -0
  158. package/profiles/design.yaml +30 -0
  159. package/profiles/docs.yaml +31 -0
  160. package/profiles/finance.yaml +23 -0
  161. package/profiles/flutter.yaml +37 -0
  162. package/profiles/frontend.yaml +39 -0
  163. package/profiles/infra.yaml +47 -0
  164. package/profiles/integrations.yaml +23 -0
  165. package/profiles/ios-native.yaml +37 -0
  166. package/profiles/jira.yaml +21 -0
  167. package/profiles/marketing.yaml +64 -0
  168. package/profiles/mobile.yaml +39 -0
  169. package/profiles/regulatory.yaml +33 -0
  170. package/profiles/security.yaml +30 -0
  171. package/profiles/self-improving.yaml +22 -0
  172. package/profiles/statusline.yaml +21 -0
  173. package/profiles/testing.yaml +32 -0
  174. package/profiles/unity-design.yaml +37 -0
  175. package/profiles/unity-dev.yaml +44 -0
  176. package/profiles/visual-novel.yaml +54 -0
  177. package/rules/ai-code.md +60 -0
  178. package/rules/api-code.md +41 -0
  179. package/rules/backend-code.md +35 -0
  180. package/rules/data-files.md +58 -0
  181. package/rules/frontend-code.md +35 -0
  182. package/rules/gamedev/ai-code.md +15 -0
  183. package/rules/gamedev/design-docs.md +18 -0
  184. package/rules/gamedev/engine-code.md +41 -0
  185. package/rules/gamedev/gameplay-code.md +31 -0
  186. package/rules/gamedev/narrative.md +15 -0
  187. package/rules/gamedev/network-code.md +15 -0
  188. package/rules/gamedev/shader-code.md +43 -0
  189. package/rules/gamedev/ui-code.md +15 -0
  190. package/rules/gamedev/vn-code.md +37 -0
  191. package/rules/implementation-workflow.md +48 -0
  192. package/rules/infra-code.md +47 -0
  193. package/rules/migration-code.md +41 -0
  194. package/rules/prototype-code.md +40 -0
  195. package/rules/test-standards.md +55 -0
  196. package/skills/ab-test-setup/SKILL.md +99 -0
  197. package/skills/ab-test-setup/references/sample-size-guide.md +252 -0
  198. package/skills/ab-test-setup/references/test-templates.md +268 -0
  199. package/skills/ab-test-setup/scripts/sample_size_calculator.py +337 -0
  200. package/skills/accessibility/SKILL.md +32 -0
  201. package/skills/accessibility/references/anti-patterns.md +9 -0
  202. package/skills/accessibility/references/component-requirements.md +15 -0
  203. package/skills/accessibility/references/focus-forms-testing.md +31 -0
  204. package/skills/accessibility/references/wcag-criteria.md +17 -0
  205. package/skills/ad-creative/SKILL.md +85 -0
  206. package/skills/ad-creative/references/creative-frameworks.md +253 -0
  207. package/skills/ad-creative/references/platform-specs.md +170 -0
  208. package/skills/ad-creative/scripts/ad_copy_validator.py +490 -0
  209. package/skills/agent-designer/README.md +430 -0
  210. package/skills/agent-designer/SKILL.md +64 -0
  211. package/skills/agent-designer/agent_evaluator.py +1223 -0
  212. package/skills/agent-designer/agent_planner.py +911 -0
  213. package/skills/agent-designer/assets/sample_execution_logs.json +543 -0
  214. package/skills/agent-designer/assets/sample_system_requirements.json +57 -0
  215. package/skills/agent-designer/assets/sample_tool_descriptions.json +545 -0
  216. package/skills/agent-designer/expected_outputs/sample_agent_architecture.json +488 -0
  217. package/skills/agent-designer/expected_outputs/sample_evaluation_report.json +570 -0
  218. package/skills/agent-designer/expected_outputs/sample_tool_schemas.json +416 -0
  219. package/skills/agent-designer/references/agent_architecture_patterns.md +445 -0
  220. package/skills/agent-designer/references/evaluation_methodology.md +749 -0
  221. package/skills/agent-designer/references/tool_design_best_practices.md +470 -0
  222. package/skills/agent-designer/tool_schema_generator.py +978 -0
  223. package/skills/agent-protocol/SKILL.md +102 -0
  224. package/skills/agent-protocol/references/communication-standard.md +115 -0
  225. package/skills/agent-protocol/references/invocation-patterns.md +247 -0
  226. package/skills/agent-protocol/references/quality-loop.md +123 -0
  227. package/skills/agent-workflow-designer/SKILL.md +59 -0
  228. package/skills/agent-workflow-designer/references/workflow-patterns.md +82 -0
  229. package/skills/agent-workflow-designer/scripts/workflow_scaffolder.py +113 -0
  230. package/skills/ai-security/SKILL.md +113 -0
  231. package/skills/ai-security/references/atlas-coverage.md +150 -0
  232. package/skills/ai-security/scripts/ai_threat_scanner.py +564 -0
  233. package/skills/ai-seo/SKILL.md +172 -0
  234. package/skills/ai-seo/references/ai-search-landscape.md +191 -0
  235. package/skills/ai-seo/references/content-patterns.md +276 -0
  236. package/skills/ai-seo/references/monitoring-guide.md +208 -0
  237. package/skills/ai-seo/references/optimization-playbook.md +58 -0
  238. package/skills/analytics-tracking/SKILL.md +105 -0
  239. package/skills/analytics-tracking/references/debugging-playbook.md +224 -0
  240. package/skills/analytics-tracking/references/event-taxonomy-guide.md +203 -0
  241. package/skills/analytics-tracking/references/gtm-patterns.md +298 -0
  242. package/skills/analytics-tracking/scripts/tracking_plan_generator.py +386 -0
  243. package/skills/android-native-dev/SKILL.md +878 -0
  244. package/skills/android-native-dev/references/accessibility.md +209 -0
  245. package/skills/android-native-dev/references/adaptive-screens.md +231 -0
  246. package/skills/android-native-dev/references/design-style-guide.md +365 -0
  247. package/skills/android-native-dev/references/functional-requirements.md +229 -0
  248. package/skills/android-native-dev/references/motion-system.md +203 -0
  249. package/skills/android-native-dev/references/performance-stability.md +223 -0
  250. package/skills/android-native-dev/references/privacy-security.md +244 -0
  251. package/skills/android-native-dev/references/testing.md +554 -0
  252. package/skills/android-native-dev/references/visual-design.md +246 -0
  253. package/skills/api-design/SKILL.md +88 -0
  254. package/skills/api-design/references/anti-patterns.md +14 -0
  255. package/skills/api-design/references/versioning-deprecation.md +23 -0
  256. package/skills/api-docs/SKILL.md +101 -0
  257. package/skills/api-versioning/SKILL.md +51 -0
  258. package/skills/api-versioning/references/anti-patterns-and-checklist.md +27 -0
  259. package/skills/api-versioning/references/implementation-by-framework.md +31 -0
  260. package/skills/app-store-optimization/HOW_TO_USE.md +281 -0
  261. package/skills/app-store-optimization/SKILL.md +150 -0
  262. package/skills/app-store-optimization/assets/aso-audit-template.md +268 -0
  263. package/skills/app-store-optimization/expected_output.json +170 -0
  264. package/skills/app-store-optimization/references/ab-testing-guide.md +72 -0
  265. package/skills/app-store-optimization/references/aso-best-practices.md +403 -0
  266. package/skills/app-store-optimization/references/before-after-examples.md +73 -0
  267. package/skills/app-store-optimization/references/keyword-research-guide.md +419 -0
  268. package/skills/app-store-optimization/references/metadata-optimization.md +65 -0
  269. package/skills/app-store-optimization/references/platform-requirements.md +324 -0
  270. package/skills/app-store-optimization/sample_input.json +30 -0
  271. package/skills/app-store-optimization/scripts/ab_test_planner.py +662 -0
  272. package/skills/app-store-optimization/scripts/aso_scorer.py +482 -0
  273. package/skills/app-store-optimization/scripts/competitor_analyzer.py +577 -0
  274. package/skills/app-store-optimization/scripts/keyword_analyzer.py +406 -0
  275. package/skills/app-store-optimization/scripts/launch_checklist.py +739 -0
  276. package/skills/app-store-optimization/scripts/localization_helper.py +588 -0
  277. package/skills/app-store-optimization/scripts/metadata_optimizer.py +581 -0
  278. package/skills/app-store-optimization/scripts/review_analyzer.py +714 -0
  279. package/skills/arcane-add/SKILL.md +47 -0
  280. package/skills/arcane-clean/SKILL.md +45 -0
  281. package/skills/arcane-list/SKILL.md +46 -0
  282. package/skills/arcane-remove/SKILL.md +68 -0
  283. package/skills/arcane-status/SKILL.md +42 -0
  284. package/skills/architecture-decision/SKILL.md +75 -0
  285. package/skills/architecture-decision/templates/adr.md +101 -0
  286. package/skills/architecture-review/SKILL.md +90 -0
  287. package/skills/art-bible/SKILL.md +88 -0
  288. package/skills/art-bible/references/anti-patterns.md +8 -0
  289. package/skills/art-bible/references/checklist.md +17 -0
  290. package/skills/asset-audit/SKILL.md +95 -0
  291. package/skills/asset-spec/SKILL.md +72 -0
  292. package/skills/asset-spec/references/anti-patterns-checklist.md +19 -0
  293. package/skills/asset-spec/references/spec-output-format.md +34 -0
  294. package/skills/async-ops/SKILL.md +59 -0
  295. package/skills/async-ops/references/anti-patterns.md +16 -0
  296. package/skills/async-ops/references/checklist.md +10 -0
  297. package/skills/async-ops/references/job-scheduling.md +37 -0
  298. package/skills/async-ops/references/outbound-webhooks.md +19 -0
  299. package/skills/atlassian-admin/SKILL.md +121 -0
  300. package/skills/atlassian-admin/assets/permission_scheme_template.json +173 -0
  301. package/skills/atlassian-admin/references/security-hardening-guide.md +214 -0
  302. package/skills/atlassian-admin/references/user-provisioning-checklist.md +177 -0
  303. package/skills/atlassian-admin/scripts/permission_audit_tool.py +469 -0
  304. package/skills/atlassian-templates/SKILL.md +128 -0
  305. package/skills/atlassian-templates/references/governance-framework.md +234 -0
  306. package/skills/atlassian-templates/references/template-design-patterns.md +252 -0
  307. package/skills/atlassian-templates/scripts/template_scaffolder.py +418 -0
  308. package/skills/audit-dev/SKILL.md +43 -0
  309. package/skills/audit-game/SKILL.md +54 -0
  310. package/skills/audit-game/references/cross-reference-criteria.md +42 -0
  311. package/skills/audit-game/references/output-template.md +48 -0
  312. package/skills/audit-log/SKILL.md +75 -0
  313. package/skills/auth-strategy/SKILL.md +120 -0
  314. package/skills/auth-strategy/references/anti-patterns.md +21 -0
  315. package/skills/aws-solution-architect/SKILL.md +125 -0
  316. package/skills/aws-solution-architect/assets/expected_output.json +55 -0
  317. package/skills/aws-solution-architect/assets/sample_input.json +18 -0
  318. package/skills/aws-solution-architect/references/architecture_patterns.md +535 -0
  319. package/skills/aws-solution-architect/references/best_practices.md +631 -0
  320. package/skills/aws-solution-architect/references/service_selection.md +484 -0
  321. package/skills/aws-solution-architect/scripts/architecture_designer.py +808 -0
  322. package/skills/aws-solution-architect/scripts/cost_optimizer.py +346 -0
  323. package/skills/aws-solution-architect/scripts/serverless_stack.py +663 -0
  324. package/skills/azure-cloud-architect/SKILL.md +128 -0
  325. package/skills/azure-cloud-architect/references/architecture_patterns.md +413 -0
  326. package/skills/azure-cloud-architect/references/best_practices.md +337 -0
  327. package/skills/azure-cloud-architect/references/service_selection.md +250 -0
  328. package/skills/azure-cloud-architect/scripts/architecture_designer.py +592 -0
  329. package/skills/azure-cloud-architect/scripts/bicep_generator.py +775 -0
  330. package/skills/azure-cloud-architect/scripts/cost_optimizer.py +492 -0
  331. package/skills/backup-strategy/SKILL.md +101 -0
  332. package/skills/balance-check/SKILL.md +119 -0
  333. package/skills/board-deck-builder/SKILL.md +64 -0
  334. package/skills/board-deck-builder/references/deck-frameworks.md +184 -0
  335. package/skills/board-deck-builder/templates/board-deck-template.md +210 -0
  336. package/skills/board-meeting/SKILL.md +58 -0
  337. package/skills/board-meeting/references/meeting-facilitation.md +167 -0
  338. package/skills/board-meeting/templates/meeting-agenda.md +81 -0
  339. package/skills/board-meeting/templates/meeting-minutes.md +91 -0
  340. package/skills/brainstorm/SKILL.md +94 -0
  341. package/skills/brainstorm/references/next-steps-pipeline.md +13 -0
  342. package/skills/brainstorm/references/review-mode-gates.md +13 -0
  343. package/skills/brand-guidelines/SKILL.md +91 -0
  344. package/skills/brand-guidelines/references/brand-identity-and-framework.md +262 -0
  345. package/skills/bug-report/SKILL.md +53 -0
  346. package/skills/bug-triage/SKILL.md +74 -0
  347. package/skills/business-investment-advisor/SKILL.md +83 -0
  348. package/skills/business-investment-advisor/references/analysis-frameworks.md +113 -0
  349. package/skills/caching-strategy/SKILL.md +81 -0
  350. package/skills/caching-strategy/references/http-headers.md +9 -0
  351. package/skills/caching-strategy/references/patterns-and-invalidation.md +25 -0
  352. package/skills/caching-strategy/references/redis-and-client.md +13 -0
  353. package/skills/caching-strategy/references/ttl-defaults.md +11 -0
  354. package/skills/campaign-analytics/SKILL.md +93 -0
  355. package/skills/campaign-analytics/assets/ab_test_template.md +130 -0
  356. package/skills/campaign-analytics/assets/campaign_report_template.md +141 -0
  357. package/skills/campaign-analytics/assets/channel_comparison_template.md +158 -0
  358. package/skills/campaign-analytics/assets/expected_output.json +110 -0
  359. package/skills/campaign-analytics/assets/sample_campaign_data.json +151 -0
  360. package/skills/campaign-analytics/references/attribution-models-guide.md +285 -0
  361. package/skills/campaign-analytics/references/campaign-metrics-benchmarks.md +259 -0
  362. package/skills/campaign-analytics/references/funnel-optimization-framework.md +302 -0
  363. package/skills/campaign-analytics/scripts/attribution_analyzer.py +347 -0
  364. package/skills/campaign-analytics/scripts/campaign_roi_calculator.py +459 -0
  365. package/skills/campaign-analytics/scripts/funnel_analyzer.py +305 -0
  366. package/skills/capa-officer/SKILL.md +125 -0
  367. package/skills/capa-officer/references/effectiveness-verification-guide.md +462 -0
  368. package/skills/capa-officer/references/rca-methodologies.md +455 -0
  369. package/skills/capa-officer/scripts/capa_tracker.py +638 -0
  370. package/skills/capa-officer/scripts/root_cause_analyzer.py +486 -0
  371. package/skills/cdn-setup/SKILL.md +33 -0
  372. package/skills/cdn-setup/references/cache-strategy-and-invalidation.md +30 -0
  373. package/skills/cdn-setup/references/security-and-anti-patterns.md +26 -0
  374. package/skills/ceo-advisor/SKILL.md +110 -0
  375. package/skills/ceo-advisor/references/board_governance_investor_relations.md +599 -0
  376. package/skills/ceo-advisor/references/executive_decision_framework.md +475 -0
  377. package/skills/ceo-advisor/references/leadership_organizational_culture.md +682 -0
  378. package/skills/ceo-advisor/scripts/financial_scenario_analyzer.py +451 -0
  379. package/skills/ceo-advisor/scripts/strategy_analyzer.py +609 -0
  380. package/skills/cfo-advisor/SKILL.md +81 -0
  381. package/skills/cfo-advisor/references/cash_management.md +374 -0
  382. package/skills/cfo-advisor/references/financial_planning.md +500 -0
  383. package/skills/cfo-advisor/references/fundraising_playbook.md +419 -0
  384. package/skills/cfo-advisor/scripts/burn_rate_calculator.py +402 -0
  385. package/skills/cfo-advisor/scripts/fundraising_model.py +490 -0
  386. package/skills/cfo-advisor/scripts/unit_economics_analyzer.py +529 -0
  387. package/skills/change-management/SKILL.md +53 -0
  388. package/skills/change-management/references/adkar-details.md +110 -0
  389. package/skills/change-management/references/change-playbook.md +308 -0
  390. package/skills/changelog/SKILL.md +111 -0
  391. package/skills/check/SKILL.md +22 -0
  392. package/skills/chief-of-staff/SKILL.md +70 -0
  393. package/skills/chief-of-staff/references/routing-matrix.md +212 -0
  394. package/skills/chief-of-staff/references/synthesis-framework.md +201 -0
  395. package/skills/chro-advisor/SKILL.md +86 -0
  396. package/skills/chro-advisor/references/comp_frameworks.md +320 -0
  397. package/skills/chro-advisor/references/org_design.md +333 -0
  398. package/skills/chro-advisor/references/people_strategy.md +320 -0
  399. package/skills/chro-advisor/scripts/comp_benchmarker.py +613 -0
  400. package/skills/chro-advisor/scripts/hiring_plan_modeler.py +572 -0
  401. package/skills/churn-prevention/SKILL.md +200 -0
  402. package/skills/churn-prevention/references/cancel-flow-playbook.md +254 -0
  403. package/skills/churn-prevention/references/dunning-guide.md +276 -0
  404. package/skills/churn-prevention/references/exit-survey-and-save-offers.md +42 -0
  405. package/skills/churn-prevention/scripts/churn_impact_calculator.py +199 -0
  406. package/skills/ci-cd-setup/SKILL.md +66 -0
  407. package/skills/ci-cd-setup/references/anti-patterns.md +10 -0
  408. package/skills/ci-cd-setup/references/checklist.md +14 -0
  409. package/skills/ci-cd-setup/references/secret-and-deploy.md +30 -0
  410. package/skills/ciso-advisor/SKILL.md +86 -0
  411. package/skills/ciso-advisor/references/compliance_roadmap.md +370 -0
  412. package/skills/ciso-advisor/references/incident_response.md +350 -0
  413. package/skills/ciso-advisor/references/security_strategy.md +321 -0
  414. package/skills/ciso-advisor/scripts/compliance_tracker.py +781 -0
  415. package/skills/ciso-advisor/scripts/risk_quantifier.py +690 -0
  416. package/skills/clickup/SKILL.md +134 -0
  417. package/skills/cloud-security/SKILL.md +107 -0
  418. package/skills/cloud-security/references/cspm-checks.md +109 -0
  419. package/skills/cloud-security/scripts/cloud_posture_check.py +1180 -0
  420. package/skills/cmo-advisor/SKILL.md +82 -0
  421. package/skills/cmo-advisor/references/brand_positioning.md +374 -0
  422. package/skills/cmo-advisor/references/growth_frameworks.md +456 -0
  423. package/skills/cmo-advisor/references/marketing_org.md +281 -0
  424. package/skills/cmo-advisor/scripts/growth_model_simulator.py +416 -0
  425. package/skills/cmo-advisor/scripts/marketing_budget_modeler.py +440 -0
  426. package/skills/code-review/SKILL.md +66 -0
  427. package/skills/cold-email/SKILL.md +178 -0
  428. package/skills/cold-email/references/deliverability-guide.md +225 -0
  429. package/skills/cold-email/references/follow-up-playbook.md +225 -0
  430. package/skills/cold-email/references/frameworks.md +217 -0
  431. package/skills/cold-email/references/voice-and-subject-lines.md +41 -0
  432. package/skills/cold-email/scripts/email_sequence_analyzer.py +517 -0
  433. package/skills/commit/SKILL.md +25 -0
  434. package/skills/company-os/SKILL.md +66 -0
  435. package/skills/company-os/references/implementation-guide.md +249 -0
  436. package/skills/company-os/references/os-comparison.md +242 -0
  437. package/skills/company-os/references/six-components.md +129 -0
  438. package/skills/competitive-intel/SKILL.md +62 -0
  439. package/skills/competitive-intel/references/ci-playbook.md +237 -0
  440. package/skills/competitive-intel/templates/battlecard-template.md +99 -0
  441. package/skills/competitive-teardown/SKILL.md +169 -0
  442. package/skills/competitive-teardown/references/analysis-templates.md +203 -0
  443. package/skills/competitive-teardown/references/competitive-analysis-frameworks.md +107 -0
  444. package/skills/competitive-teardown/references/data-collection-guide.md +104 -0
  445. package/skills/competitive-teardown/references/scoring-rubric.md +116 -0
  446. package/skills/competitive-teardown/scripts/competitive_matrix_builder.py +299 -0
  447. package/skills/competitor-alternatives/SKILL.md +92 -0
  448. package/skills/competitor-alternatives/references/content-architecture.md +263 -0
  449. package/skills/competitor-alternatives/references/templates.md +212 -0
  450. package/skills/competitor-alternatives/scripts/comparison_matrix_builder.py +365 -0
  451. package/skills/confluence-expert/SKILL.md +129 -0
  452. package/skills/confluence-expert/references/macro-cheat-sheet.md +144 -0
  453. package/skills/confluence-expert/references/space-architecture-patterns.md +246 -0
  454. package/skills/confluence-expert/references/templates.md +725 -0
  455. package/skills/confluence-expert/scripts/content_audit_analyzer.py +457 -0
  456. package/skills/confluence-expert/scripts/space_structure_generator.py +517 -0
  457. package/skills/consistency-check/SKILL.md +68 -0
  458. package/skills/content-creator/SKILL.md +52 -0
  459. package/skills/content-creator/assets/content_calendar_template.md +99 -0
  460. package/skills/content-creator/examples/brand_voice_analysis_example.md +180 -0
  461. package/skills/content-creator/examples/seo_optimization_example.md +259 -0
  462. package/skills/content-creator/references/analytics_guide.md +352 -0
  463. package/skills/content-creator/references/brand_guidelines.md +219 -0
  464. package/skills/content-creator/references/content_frameworks.md +551 -0
  465. package/skills/content-creator/references/social_media_optimization.md +342 -0
  466. package/skills/content-humanizer/SKILL.md +193 -0
  467. package/skills/content-humanizer/references/ai-tells-checklist.md +157 -0
  468. package/skills/content-humanizer/references/voice-techniques.md +168 -0
  469. package/skills/content-humanizer/scripts/humanizer_scorer.py +504 -0
  470. package/skills/content-production/SKILL.md +192 -0
  471. package/skills/content-production/references/content-brief-guide.md +146 -0
  472. package/skills/content-production/references/optimization-checklist.md +139 -0
  473. package/skills/content-production/scripts/brand_voice_analyzer.py +197 -0
  474. package/skills/content-production/scripts/content_scorer.py +464 -0
  475. package/skills/content-production/scripts/seo_optimizer.py +433 -0
  476. package/skills/content-production/templates/content-brief-template.md +126 -0
  477. package/skills/content-strategy/SKILL.md +125 -0
  478. package/skills/content-strategy/references/content-strategy-reference.md +278 -0
  479. package/skills/content-strategy/scripts/topic_cluster_mapper.py +243 -0
  480. package/skills/context-engine/SKILL.md +50 -0
  481. package/skills/context-engine/references/anonymization-protocol.md +173 -0
  482. package/skills/context-prime/SKILL.md +25 -0
  483. package/skills/contract-and-proposal-writer/SKILL.md +126 -0
  484. package/skills/contract-and-proposal-writer/references/contract-templates.md +276 -0
  485. package/skills/contract-testing/SKILL.md +42 -0
  486. package/skills/contract-testing/references/anti-patterns-and-checklist.md +28 -0
  487. package/skills/contract-testing/references/implementation-details.md +29 -0
  488. package/skills/coo-advisor/SKILL.md +92 -0
  489. package/skills/coo-advisor/references/ops_cadence.md +606 -0
  490. package/skills/coo-advisor/references/process_frameworks.md +459 -0
  491. package/skills/coo-advisor/references/scaling_playbook.md +465 -0
  492. package/skills/coo-advisor/scripts/okr_tracker.py +1100 -0
  493. package/skills/coo-advisor/scripts/ops_efficiency_analyzer.py +1071 -0
  494. package/skills/copy-editing/SKILL.md +124 -0
  495. package/skills/copy-editing/references/copy-editing-checklist.md +134 -0
  496. package/skills/copy-editing/references/plain-english-alternatives.md +376 -0
  497. package/skills/copy-editing/references/seven-sweeps-framework.md +228 -0
  498. package/skills/copy-editing/scripts/readability_scorer.py +285 -0
  499. package/skills/copywriting/SKILL.md +192 -0
  500. package/skills/copywriting/references/copy-frameworks.md +338 -0
  501. package/skills/copywriting/references/natural-transitions.md +252 -0
  502. package/skills/copywriting/references/writing-style-rules.md +63 -0
  503. package/skills/copywriting/scripts/headline_scorer.py +256 -0
  504. package/skills/cpo-advisor/SKILL.md +102 -0
  505. package/skills/cpo-advisor/references/pmf_playbook.md +307 -0
  506. package/skills/cpo-advisor/references/product_org_design.md +407 -0
  507. package/skills/cpo-advisor/references/product_strategy.md +454 -0
  508. package/skills/cpo-advisor/scripts/pmf_scorer.py +600 -0
  509. package/skills/cpo-advisor/scripts/portfolio_analyzer.py +547 -0
  510. package/skills/create-epics/SKILL.md +65 -0
  511. package/skills/create-pr/SKILL.md +26 -0
  512. package/skills/create-stories/SKILL.md +85 -0
  513. package/skills/create-test-user/SKILL.md +37 -0
  514. package/skills/create-ticket/SKILL.md +50 -0
  515. package/skills/cro-advisor/SKILL.md +86 -0
  516. package/skills/cro-advisor/references/nrr_playbook.md +380 -0
  517. package/skills/cro-advisor/references/pricing_strategy.md +417 -0
  518. package/skills/cro-advisor/references/sales_playbook.md +461 -0
  519. package/skills/cro-advisor/scripts/churn_analyzer.py +742 -0
  520. package/skills/cro-advisor/scripts/revenue_forecast_model.py +571 -0
  521. package/skills/cs-onboard/SKILL.md +60 -0
  522. package/skills/cs-onboard/references/interview-guide.md +173 -0
  523. package/skills/cs-onboard/templates/company-context-template.md +144 -0
  524. package/skills/csp-headers/SKILL.md +53 -0
  525. package/skills/csp-headers/references/anti-patterns-checklist.md +26 -0
  526. package/skills/csp-headers/references/implementation.md +18 -0
  527. package/skills/cto-advisor/SKILL.md +95 -0
  528. package/skills/cto-advisor/references/architecture_decision_records.md +294 -0
  529. package/skills/cto-advisor/references/engineering_metrics.md +393 -0
  530. package/skills/cto-advisor/references/technology_evaluation_framework.md +370 -0
  531. package/skills/cto-advisor/references/workflows.md +84 -0
  532. package/skills/cto-advisor/scripts/team_scaling_calculator.py +562 -0
  533. package/skills/cto-advisor/scripts/tech_debt_analyzer.py +450 -0
  534. package/skills/culture-architect/SKILL.md +66 -0
  535. package/skills/culture-architect/references/culture-playbook.md +243 -0
  536. package/skills/culture-architect/templates/culture-code-template.md +137 -0
  537. package/skills/customer-success-manager/SKILL.md +97 -0
  538. package/skills/customer-success-manager/assets/executive_business_review_template.md +209 -0
  539. package/skills/customer-success-manager/assets/expected_output.json +170 -0
  540. package/skills/customer-success-manager/assets/onboarding_checklist_template.md +215 -0
  541. package/skills/customer-success-manager/assets/qbr_template.md +163 -0
  542. package/skills/customer-success-manager/assets/sample_customer_data.json +314 -0
  543. package/skills/customer-success-manager/assets/success_plan_template.md +167 -0
  544. package/skills/customer-success-manager/references/cs-metrics-benchmarks.md +259 -0
  545. package/skills/customer-success-manager/references/cs-playbooks.md +290 -0
  546. package/skills/customer-success-manager/references/health-scoring-framework.md +184 -0
  547. package/skills/customer-success-manager/scripts/churn_risk_analyzer.py +487 -0
  548. package/skills/customer-success-manager/scripts/expansion_opportunity_scorer.py +414 -0
  549. package/skills/customer-success-manager/scripts/health_score_calculator.py +438 -0
  550. package/skills/data-migrations/SKILL.md +113 -0
  551. package/skills/data-migrations/references/anti-patterns.md +14 -0
  552. package/skills/data-migrations/references/batching.md +9 -0
  553. package/skills/data-migrations/references/checklist.md +14 -0
  554. package/skills/data-migrations/references/expand-contract.md +19 -0
  555. package/skills/data-operations/SKILL.md +59 -0
  556. package/skills/data-operations/references/anti-patterns.md +17 -0
  557. package/skills/data-operations/references/query-optimization.md +37 -0
  558. package/skills/data-operations/references/seeding.md +38 -0
  559. package/skills/data-seeding/SKILL.md +96 -0
  560. package/skills/database/SKILL.md +74 -0
  561. package/skills/database/references/anti-patterns.md +20 -0
  562. package/skills/database/references/query-patterns.md +32 -0
  563. package/skills/database-indexing/SKILL.md +85 -0
  564. package/skills/database-indexing/references/anti-patterns.md +14 -0
  565. package/skills/database-indexing/references/checklists.md +23 -0
  566. package/skills/database-indexing/references/index-types.md +18 -0
  567. package/skills/database-setup/SKILL.md +109 -0
  568. package/skills/database-setup/references/indexing-guide.md +126 -0
  569. package/skills/db-diagram/SKILL.md +87 -0
  570. package/skills/decision-logger/SKILL.md +59 -0
  571. package/skills/decision-logger/references/entry-format.md +55 -0
  572. package/skills/decision-logger/scripts/decision_tracker.py +620 -0
  573. package/skills/decision-logger/templates/decision-entry.md +63 -0
  574. package/skills/deploy-check/SKILL.md +87 -0
  575. package/skills/deploy-staging/SKILL.md +44 -0
  576. package/skills/deps-audit/SKILL.md +92 -0
  577. package/skills/design-handoff/SKILL.md +49 -0
  578. package/skills/design-system/SKILL.md +56 -0
  579. package/skills/design-system/references/post-design-validation.md +8 -0
  580. package/skills/design-system/references/section-guidance.md +29 -0
  581. package/skills/distributed-tracing/SKILL.md +86 -0
  582. package/skills/doc-gdd/SKILL.md +56 -0
  583. package/skills/doc-pas/SKILL.md +41 -0
  584. package/skills/doc-pas/references/examples-and-usage.md +27 -0
  585. package/skills/doc-pas/references/output-format-template.md +63 -0
  586. package/skills/doc-rfc/SKILL.md +55 -0
  587. package/skills/doc-rfc/templates/decision.md +38 -0
  588. package/skills/doc-rfc/templates/epica.md +68 -0
  589. package/skills/doc-rfc/templates/hu.md +52 -0
  590. package/skills/doc-rfc/templates/tarea.md +37 -0
  591. package/skills/docker-setup/SKILL.md +78 -0
  592. package/skills/docker-setup/references/anti-patterns.md +10 -0
  593. package/skills/docker-setup/references/checklists.md +34 -0
  594. package/skills/docker-setup/references/size-optimization.md +7 -0
  595. package/skills/docx-generator/SKILL.md +249 -0
  596. package/skills/docx-generator/assets/styles/academic_styles.xml +250 -0
  597. package/skills/docx-generator/assets/styles/corporate_styles.xml +284 -0
  598. package/skills/docx-generator/assets/styles/default_styles.xml +449 -0
  599. package/skills/docx-generator/assets/xsd/aesthetic-rules.xsd +470 -0
  600. package/skills/docx-generator/assets/xsd/business-rules.xsd +130 -0
  601. package/skills/docx-generator/assets/xsd/common-types.xsd +159 -0
  602. package/skills/docx-generator/assets/xsd/wml-subset.xsd +589 -0
  603. package/skills/docx-generator/references/cjk_typography.md +357 -0
  604. package/skills/docx-generator/references/cjk_university_template_guide.md +184 -0
  605. package/skills/docx-generator/references/comments_guide.md +191 -0
  606. package/skills/docx-generator/references/design_good_bad_examples.md +829 -0
  607. package/skills/docx-generator/references/design_principles.md +819 -0
  608. package/skills/docx-generator/references/openxml_element_order.md +308 -0
  609. package/skills/docx-generator/references/openxml_encyclopedia_part1.md +4061 -0
  610. package/skills/docx-generator/references/openxml_encyclopedia_part2.md +2820 -0
  611. package/skills/docx-generator/references/openxml_encyclopedia_part3.md +3381 -0
  612. package/skills/docx-generator/references/openxml_namespaces.md +82 -0
  613. package/skills/docx-generator/references/openxml_units.md +72 -0
  614. package/skills/docx-generator/references/scenario_a_create.md +284 -0
  615. package/skills/docx-generator/references/scenario_b_edit_content.md +295 -0
  616. package/skills/docx-generator/references/scenario_c_apply_template.md +456 -0
  617. package/skills/docx-generator/references/track_changes_guide.md +200 -0
  618. package/skills/docx-generator/references/troubleshooting.md +506 -0
  619. package/skills/docx-generator/references/typography_guide.md +294 -0
  620. package/skills/docx-generator/references/xsd_validation_guide.md +158 -0
  621. package/skills/docx-generator/scripts/doc_to_docx.sh +40 -0
  622. package/skills/docx-generator/scripts/docx_preview.sh +37 -0
  623. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
  624. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
  625. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
  626. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
  627. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
  628. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
  629. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
  630. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
  631. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
  632. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
  633. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
  634. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
  635. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
  636. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
  637. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
  638. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
  639. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
  640. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
  641. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
  642. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
  643. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
  644. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
  645. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
  646. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
  647. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
  648. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
  649. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
  650. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
  651. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
  652. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
  653. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
  654. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
  655. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
  656. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
  657. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
  658. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
  659. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
  660. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
  661. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
  662. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
  663. package/skills/docx-generator/scripts/env_check.sh +196 -0
  664. package/skills/docx-generator/scripts/setup.ps1 +274 -0
  665. package/skills/docx-generator/scripts/setup.sh +504 -0
  666. package/skills/email-sequence/SKILL.md +119 -0
  667. package/skills/email-sequence/references/email-sequence-playbook.md +209 -0
  668. package/skills/email-sequence/scripts/sequence_analyzer.py +354 -0
  669. package/skills/email-template-builder/SKILL.md +93 -0
  670. package/skills/email-template-builder/references/react-email-templates.md +323 -0
  671. package/skills/env-sync/SKILL.md +102 -0
  672. package/skills/error-tracking/SKILL.md +25 -0
  673. package/skills/error-tracking/references/anti-patterns-and-checklist.md +23 -0
  674. package/skills/error-tracking/references/operational-details.md +38 -0
  675. package/skills/error-tracking/references/setup-per-stack.md +24 -0
  676. package/skills/estimate/SKILL.md +51 -0
  677. package/skills/estimate/references/complexity-factors.md +30 -0
  678. package/skills/estimate/references/estimate-template.md +60 -0
  679. package/skills/executive-mentor/.claude-plugin/plugin.json +13 -0
  680. package/skills/executive-mentor/SKILL.md +90 -0
  681. package/skills/executive-mentor/agents/devils-advocate.md +139 -0
  682. package/skills/executive-mentor/references/board_dynamics.md +263 -0
  683. package/skills/executive-mentor/references/crisis_playbook.md +173 -0
  684. package/skills/executive-mentor/references/hard_things.md +256 -0
  685. package/skills/executive-mentor/scripts/decision_matrix_scorer.py +491 -0
  686. package/skills/executive-mentor/scripts/stakeholder_mapper.py +547 -0
  687. package/skills/executive-mentor/skills/board-prep/SKILL.md +76 -0
  688. package/skills/executive-mentor/skills/challenge/SKILL.md +80 -0
  689. package/skills/executive-mentor/skills/hard-call/SKILL.md +64 -0
  690. package/skills/executive-mentor/skills/postmortem/SKILL.md +78 -0
  691. package/skills/executive-mentor/skills/stress-test/SKILL.md +74 -0
  692. package/skills/executive-mentor/skills/stress-test/references/patterns-by-type.md +73 -0
  693. package/skills/experiment-designer/SKILL.md +108 -0
  694. package/skills/experiment-designer/references/experiment-playbook.md +70 -0
  695. package/skills/experiment-designer/references/statistics-reference.md +56 -0
  696. package/skills/experiment-designer/scripts/sample_size_calculator.py +100 -0
  697. package/skills/fda-consultant-specialist/SKILL.md +102 -0
  698. package/skills/fda-consultant-specialist/references/device_cybersecurity_guidance.md +695 -0
  699. package/skills/fda-consultant-specialist/references/fda_capa_requirements.md +718 -0
  700. package/skills/fda-consultant-specialist/references/fda_submission_guide.md +400 -0
  701. package/skills/fda-consultant-specialist/references/hipaa_compliance_framework.md +721 -0
  702. package/skills/fda-consultant-specialist/references/qsr_compliance_requirements.md +753 -0
  703. package/skills/fda-consultant-specialist/scripts/fda_submission_tracker.py +493 -0
  704. package/skills/fda-consultant-specialist/scripts/hipaa_risk_assessment.py +626 -0
  705. package/skills/fda-consultant-specialist/scripts/qsr_compliance_checker.py +618 -0
  706. package/skills/feature-flags/SKILL.md +98 -0
  707. package/skills/figma/SKILL.md +124 -0
  708. package/skills/figma-to-code/SKILL.md +80 -0
  709. package/skills/figma-to-code/references/checklist-and-output.md +32 -0
  710. package/skills/figma-to-code/references/stack-detection.md +34 -0
  711. package/skills/figma-tokens/SKILL.md +55 -0
  712. package/skills/file-uploads/SKILL.md +95 -0
  713. package/skills/financial-analyst/SKILL.md +152 -0
  714. package/skills/financial-analyst/assets/dcf_analysis_template.md +184 -0
  715. package/skills/financial-analyst/assets/expected_output.json +161 -0
  716. package/skills/financial-analyst/assets/forecast_report_template.md +177 -0
  717. package/skills/financial-analyst/assets/sample_financial_data.json +219 -0
  718. package/skills/financial-analyst/assets/variance_report_template.md +122 -0
  719. package/skills/financial-analyst/references/financial-ratios-guide.md +376 -0
  720. package/skills/financial-analyst/references/forecasting-best-practices.md +279 -0
  721. package/skills/financial-analyst/references/industry-adaptations.md +103 -0
  722. package/skills/financial-analyst/references/valuation-methodology.md +246 -0
  723. package/skills/financial-analyst/scripts/budget_variance_analyzer.py +406 -0
  724. package/skills/financial-analyst/scripts/dcf_valuation.py +449 -0
  725. package/skills/financial-analyst/scripts/forecast_builder.py +494 -0
  726. package/skills/financial-analyst/scripts/ratio_calculator.py +432 -0
  727. package/skills/fix-issue/SKILL.md +19 -0
  728. package/skills/flutter-dev/SKILL.md +122 -0
  729. package/skills/flutter-dev/references/animations.md +497 -0
  730. package/skills/flutter-dev/references/bloc-state.md +281 -0
  731. package/skills/flutter-dev/references/forms.md +656 -0
  732. package/skills/flutter-dev/references/gorouter-navigation.md +257 -0
  733. package/skills/flutter-dev/references/localization.md +510 -0
  734. package/skills/flutter-dev/references/networking.md +566 -0
  735. package/skills/flutter-dev/references/performance.md +306 -0
  736. package/skills/flutter-dev/references/platform-specific.md +417 -0
  737. package/skills/flutter-dev/references/project-structure.md +274 -0
  738. package/skills/flutter-dev/references/riverpod-state.md +232 -0
  739. package/skills/flutter-dev/references/testing.md +364 -0
  740. package/skills/flutter-dev/references/widget-patterns.md +233 -0
  741. package/skills/form-cro/SKILL.md +128 -0
  742. package/skills/form-cro/references/experiments.md +77 -0
  743. package/skills/form-cro/references/form-cro-playbook.md +271 -0
  744. package/skills/form-cro/scripts/form_field_analyzer.py +291 -0
  745. package/skills/form-validation/SKILL.md +75 -0
  746. package/skills/founder-coach/SKILL.md +57 -0
  747. package/skills/founder-coach/references/delegation-energy.md +124 -0
  748. package/skills/founder-coach/references/founder-toolkit.md +296 -0
  749. package/skills/founder-coach/references/leadership-evolution.md +112 -0
  750. package/skills/founder-coach/references/leadership-growth.md +178 -0
  751. package/skills/free-tool-strategy/SKILL.md +167 -0
  752. package/skills/free-tool-strategy/references/design-and-lead-capture.md +58 -0
  753. package/skills/free-tool-strategy/references/launch-playbook.md +182 -0
  754. package/skills/free-tool-strategy/references/tool-types-guide.md +253 -0
  755. package/skills/free-tool-strategy/scripts/tool_roi_estimator.py +401 -0
  756. package/skills/frontend-dev/SKILL.md +555 -0
  757. package/skills/frontend-dev/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  758. package/skills/frontend-dev/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  759. package/skills/frontend-dev/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  760. package/skills/frontend-dev/canvas-fonts/BigShoulders-OFL.txt +93 -0
  761. package/skills/frontend-dev/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  762. package/skills/frontend-dev/canvas-fonts/Boldonse-OFL.txt +93 -0
  763. package/skills/frontend-dev/canvas-fonts/Boldonse-Regular.ttf +0 -0
  764. package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  765. package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  766. package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  767. package/skills/frontend-dev/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  768. package/skills/frontend-dev/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  769. package/skills/frontend-dev/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  770. package/skills/frontend-dev/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  771. package/skills/frontend-dev/canvas-fonts/DMMono-OFL.txt +93 -0
  772. package/skills/frontend-dev/canvas-fonts/DMMono-Regular.ttf +0 -0
  773. package/skills/frontend-dev/canvas-fonts/EricaOne-OFL.txt +94 -0
  774. package/skills/frontend-dev/canvas-fonts/EricaOne-Regular.ttf +0 -0
  775. package/skills/frontend-dev/canvas-fonts/GeistMono-Bold.ttf +0 -0
  776. package/skills/frontend-dev/canvas-fonts/GeistMono-OFL.txt +93 -0
  777. package/skills/frontend-dev/canvas-fonts/GeistMono-Regular.ttf +0 -0
  778. package/skills/frontend-dev/canvas-fonts/Gloock-OFL.txt +93 -0
  779. package/skills/frontend-dev/canvas-fonts/Gloock-Regular.ttf +0 -0
  780. package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  781. package/skills/frontend-dev/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  782. package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  783. package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  784. package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  785. package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  786. package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  787. package/skills/frontend-dev/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  788. package/skills/frontend-dev/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  789. package/skills/frontend-dev/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  790. package/skills/frontend-dev/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  791. package/skills/frontend-dev/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  792. package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  793. package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  794. package/skills/frontend-dev/canvas-fonts/Italiana-OFL.txt +93 -0
  795. package/skills/frontend-dev/canvas-fonts/Italiana-Regular.ttf +0 -0
  796. package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  797. package/skills/frontend-dev/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  798. package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  799. package/skills/frontend-dev/canvas-fonts/Jura-Light.ttf +0 -0
  800. package/skills/frontend-dev/canvas-fonts/Jura-Medium.ttf +0 -0
  801. package/skills/frontend-dev/canvas-fonts/Jura-OFL.txt +93 -0
  802. package/skills/frontend-dev/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  803. package/skills/frontend-dev/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  804. package/skills/frontend-dev/canvas-fonts/Lora-Bold.ttf +0 -0
  805. package/skills/frontend-dev/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  806. package/skills/frontend-dev/canvas-fonts/Lora-Italic.ttf +0 -0
  807. package/skills/frontend-dev/canvas-fonts/Lora-OFL.txt +93 -0
  808. package/skills/frontend-dev/canvas-fonts/Lora-Regular.ttf +0 -0
  809. package/skills/frontend-dev/canvas-fonts/NationalPark-Bold.ttf +0 -0
  810. package/skills/frontend-dev/canvas-fonts/NationalPark-OFL.txt +93 -0
  811. package/skills/frontend-dev/canvas-fonts/NationalPark-Regular.ttf +0 -0
  812. package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  813. package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  814. package/skills/frontend-dev/canvas-fonts/Outfit-Bold.ttf +0 -0
  815. package/skills/frontend-dev/canvas-fonts/Outfit-OFL.txt +93 -0
  816. package/skills/frontend-dev/canvas-fonts/Outfit-Regular.ttf +0 -0
  817. package/skills/frontend-dev/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  818. package/skills/frontend-dev/canvas-fonts/PixelifySans-OFL.txt +93 -0
  819. package/skills/frontend-dev/canvas-fonts/PoiretOne-OFL.txt +93 -0
  820. package/skills/frontend-dev/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  821. package/skills/frontend-dev/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  822. package/skills/frontend-dev/canvas-fonts/RedHatMono-OFL.txt +93 -0
  823. package/skills/frontend-dev/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  824. package/skills/frontend-dev/canvas-fonts/Silkscreen-OFL.txt +93 -0
  825. package/skills/frontend-dev/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  826. package/skills/frontend-dev/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  827. package/skills/frontend-dev/canvas-fonts/SmoochSans-OFL.txt +93 -0
  828. package/skills/frontend-dev/canvas-fonts/Tektur-Medium.ttf +0 -0
  829. package/skills/frontend-dev/canvas-fonts/Tektur-OFL.txt +93 -0
  830. package/skills/frontend-dev/canvas-fonts/Tektur-Regular.ttf +0 -0
  831. package/skills/frontend-dev/canvas-fonts/WorkSans-Bold.ttf +0 -0
  832. package/skills/frontend-dev/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  833. package/skills/frontend-dev/canvas-fonts/WorkSans-Italic.ttf +0 -0
  834. package/skills/frontend-dev/canvas-fonts/WorkSans-OFL.txt +93 -0
  835. package/skills/frontend-dev/canvas-fonts/WorkSans-Regular.ttf +0 -0
  836. package/skills/frontend-dev/canvas-fonts/YoungSerif-OFL.txt +93 -0
  837. package/skills/frontend-dev/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  838. package/skills/frontend-dev/references/asset-prompt-guide.md +43 -0
  839. package/skills/frontend-dev/references/env-setup.md +33 -0
  840. package/skills/frontend-dev/references/minimax-cli-reference.md +133 -0
  841. package/skills/frontend-dev/references/minimax-image-guide.md +65 -0
  842. package/skills/frontend-dev/references/minimax-music-guide.md +216 -0
  843. package/skills/frontend-dev/references/minimax-tts-guide.md +78 -0
  844. package/skills/frontend-dev/references/minimax-video-guide.md +82 -0
  845. package/skills/frontend-dev/references/minimax-voice-catalog.md +686 -0
  846. package/skills/frontend-dev/references/motion-recipes.md +407 -0
  847. package/skills/frontend-dev/references/troubleshooting.md +85 -0
  848. package/skills/frontend-dev/scripts/minimax_image.py +137 -0
  849. package/skills/frontend-dev/scripts/minimax_music.py +157 -0
  850. package/skills/frontend-dev/scripts/minimax_tts.py +127 -0
  851. package/skills/frontend-dev/scripts/minimax_video.py +187 -0
  852. package/skills/frontend-dev/templates/generator_template.js +223 -0
  853. package/skills/frontend-dev/templates/viewer.html +599 -0
  854. package/skills/game-analysis/SKILL.md +51 -0
  855. package/skills/game-analysis/references/anti-patterns-checklist.md +25 -0
  856. package/skills/game-analysis/references/balance-report-format.md +21 -0
  857. package/skills/game-analysis/references/playtest-template.md +28 -0
  858. package/skills/game-audit/SKILL.md +66 -0
  859. package/skills/game-docs/SKILL.md +58 -0
  860. package/skills/game-docs/references/gdd-structure.md +24 -0
  861. package/skills/game-docs/references/pas-format.md +49 -0
  862. package/skills/game-docs/references/writing-rules.md +17 -0
  863. package/skills/gate-check/SKILL.md +93 -0
  864. package/skills/gcp-cloud-architect/SKILL.md +127 -0
  865. package/skills/gcp-cloud-architect/references/architecture_patterns.md +512 -0
  866. package/skills/gcp-cloud-architect/references/best_practices.md +467 -0
  867. package/skills/gcp-cloud-architect/references/service_selection.md +547 -0
  868. package/skills/gcp-cloud-architect/scripts/architecture_designer.py +805 -0
  869. package/skills/gcp-cloud-architect/scripts/cost_optimizer.py +465 -0
  870. package/skills/gcp-cloud-architect/scripts/deployment_manager.py +835 -0
  871. package/skills/gdocs/SKILL.md +128 -0
  872. package/skills/gdpr-dsgvo-expert/SKILL.md +97 -0
  873. package/skills/gdpr-dsgvo-expert/references/dpia_methodology.md +412 -0
  874. package/skills/gdpr-dsgvo-expert/references/gdpr_compliance_guide.md +336 -0
  875. package/skills/gdpr-dsgvo-expert/references/german_bdsg_requirements.md +327 -0
  876. package/skills/gdpr-dsgvo-expert/scripts/data_subject_rights_tracker.py +541 -0
  877. package/skills/gdpr-dsgvo-expert/scripts/dpia_generator.py +670 -0
  878. package/skills/gdpr-dsgvo-expert/scripts/gdpr_compliance_checker.py +443 -0
  879. package/skills/gdrive/SKILL.md +46 -0
  880. package/skills/gh-projects/SKILL.md +103 -0
  881. package/skills/gh-projects/references/graphql-queries.md +207 -0
  882. package/skills/git-worktree-manager/SKILL.md +86 -0
  883. package/skills/git-worktree-manager/references/docker-compose-patterns.md +62 -0
  884. package/skills/git-worktree-manager/references/port-allocation-strategy.md +46 -0
  885. package/skills/git-worktree-manager/scripts/worktree_cleanup.py +196 -0
  886. package/skills/git-worktree-manager/scripts/worktree_manager.py +240 -0
  887. package/skills/go-clean-architecture/SKILL.md +95 -0
  888. package/skills/go-clean-architecture/references/anti-patterns.md +7 -0
  889. package/skills/go-clean-architecture/references/checklist.md +13 -0
  890. package/skills/gsheets/SKILL.md +46 -0
  891. package/skills/helm-chart-builder/.claude-plugin/plugin.json +13 -0
  892. package/skills/helm-chart-builder/SKILL.md +122 -0
  893. package/skills/helm-chart-builder/references/chart-patterns.md +435 -0
  894. package/skills/helm-chart-builder/references/values-design.md +462 -0
  895. package/skills/helm-chart-builder/scripts/chart_analyzer.py +542 -0
  896. package/skills/helm-chart-builder/scripts/values_validator.py +442 -0
  897. package/skills/help/SKILL.md +75 -0
  898. package/skills/hotfix/SKILL.md +63 -0
  899. package/skills/i18n-setup/SKILL.md +79 -0
  900. package/skills/incident/SKILL.md +107 -0
  901. package/skills/incident-commander/SKILL.md +133 -0
  902. package/skills/incident-commander/assets/incident_report_template.md +171 -0
  903. package/skills/incident-commander/assets/runbook_template.md +289 -0
  904. package/skills/incident-commander/assets/sample_incident_classification.json +14 -0
  905. package/skills/incident-commander/assets/sample_incident_data.json +276 -0
  906. package/skills/incident-commander/assets/sample_incident_pir_data.json +74 -0
  907. package/skills/incident-commander/assets/sample_timeline_events.json +263 -0
  908. package/skills/incident-commander/assets/simple_incident.json +6 -0
  909. package/skills/incident-commander/assets/simple_timeline_events.json +30 -0
  910. package/skills/incident-commander/expected_outputs/incident_classification_text_output.txt +44 -0
  911. package/skills/incident-commander/expected_outputs/pir_markdown_output.md +88 -0
  912. package/skills/incident-commander/expected_outputs/simple_incident_classification.txt +44 -0
  913. package/skills/incident-commander/expected_outputs/timeline_reconstruction_text_output.txt +110 -0
  914. package/skills/incident-commander/references/communication_templates.md +591 -0
  915. package/skills/incident-commander/references/incident-response-framework.md +372 -0
  916. package/skills/incident-commander/references/incident_severity_matrix.md +292 -0
  917. package/skills/incident-commander/references/rca_frameworks_guide.md +562 -0
  918. package/skills/incident-commander/references/reference-information.md +201 -0
  919. package/skills/incident-commander/references/sla-management-guide.md +566 -0
  920. package/skills/incident-commander/scripts/incident_classifier.py +914 -0
  921. package/skills/incident-commander/scripts/incident_timeline_builder.py +742 -0
  922. package/skills/incident-commander/scripts/pir_generator.py +1638 -0
  923. package/skills/incident-commander/scripts/postmortem_generator.py +804 -0
  924. package/skills/incident-commander/scripts/severity_classifier.py +1228 -0
  925. package/skills/incident-commander/scripts/timeline_reconstructor.py +1007 -0
  926. package/skills/incident-response/SKILL.md +103 -0
  927. package/skills/incident-response/references/regulatory-deadlines.md +125 -0
  928. package/skills/incident-response/scripts/incident_triage.py +768 -0
  929. package/skills/information-security-manager-iso27001/SKILL.md +120 -0
  930. package/skills/information-security-manager-iso27001/references/incident-response.md +420 -0
  931. package/skills/information-security-manager-iso27001/references/iso27001-controls.md +381 -0
  932. package/skills/information-security-manager-iso27001/references/risk-assessment-guide.md +262 -0
  933. package/skills/information-security-manager-iso27001/scripts/compliance_checker.py +398 -0
  934. package/skills/information-security-manager-iso27001/scripts/risk_assessment.py +403 -0
  935. package/skills/internal-narrative/SKILL.md +68 -0
  936. package/skills/internal-narrative/references/narrative-frameworks.md +211 -0
  937. package/skills/internal-narrative/templates/all-hands-template.md +103 -0
  938. package/skills/intl-expansion/SKILL.md +72 -0
  939. package/skills/intl-expansion/references/market-entry-playbook.md +138 -0
  940. package/skills/intl-expansion/references/regional-guide.md +144 -0
  941. package/skills/ios-application-dev/SKILL.md +172 -0
  942. package/skills/ios-application-dev/references/accessibility.md +259 -0
  943. package/skills/ios-application-dev/references/graphics-animation.md +350 -0
  944. package/skills/ios-application-dev/references/layout-system.md +199 -0
  945. package/skills/ios-application-dev/references/metal-shader.md +178 -0
  946. package/skills/ios-application-dev/references/navigation-patterns.md +175 -0
  947. package/skills/ios-application-dev/references/swift-coding-standards.md +757 -0
  948. package/skills/ios-application-dev/references/swiftui-design-guidelines.md +1167 -0
  949. package/skills/ios-application-dev/references/system-integration.md +401 -0
  950. package/skills/ios-application-dev/references/uikit-components.md +297 -0
  951. package/skills/isms-audit-expert/SKILL.md +108 -0
  952. package/skills/isms-audit-expert/references/cloud-security-audit.md +226 -0
  953. package/skills/isms-audit-expert/references/iso27001-audit-methodology.md +260 -0
  954. package/skills/isms-audit-expert/references/security-control-testing.md +276 -0
  955. package/skills/isms-audit-expert/scripts/isms_audit_scheduler.py +279 -0
  956. package/skills/jira-tickets/SKILL.md +52 -0
  957. package/skills/jira-tickets/references/states-epics-sprints.md +43 -0
  958. package/skills/jira-tickets/references/team-data.md +51 -0
  959. package/skills/job-scheduling/SKILL.md +107 -0
  960. package/skills/jwt-strategy/SKILL.md +74 -0
  961. package/skills/jwt-strategy/references/anti-patterns.md +16 -0
  962. package/skills/jwt-strategy/references/checklist.md +13 -0
  963. package/skills/jwt-strategy/references/implementation.md +21 -0
  964. package/skills/kickoff/SKILL.md +180 -0
  965. package/skills/launch-strategy/SKILL.md +72 -0
  966. package/skills/launch-strategy/references/launch-frameworks-and-checklists.md +317 -0
  967. package/skills/launch-strategy/scripts/launch_readiness_scorer.py +301 -0
  968. package/skills/llm-cost-optimizer/SKILL.md +194 -0
  969. package/skills/local-database-setup/SKILL.md +48 -0
  970. package/skills/logging-setup/SKILL.md +79 -0
  971. package/skills/logging-setup/references/anti-patterns.md +7 -0
  972. package/skills/logging-setup/references/checklist.md +14 -0
  973. package/skills/logging-setup/references/pii-audit-access.md +25 -0
  974. package/skills/ma-playbook/SKILL.md +72 -0
  975. package/skills/ma-playbook/references/due-diligence-checklist.md +148 -0
  976. package/skills/ma-playbook/references/integration-playbook.md +145 -0
  977. package/skills/map-systems/SKILL.md +82 -0
  978. package/skills/map-systems/references/dependency-layers-priorities.md +36 -0
  979. package/skills/map-systems/references/implicit-systems.md +13 -0
  980. package/skills/marketing-context/SKILL.md +167 -0
  981. package/skills/marketing-context/references/context-template.md +64 -0
  982. package/skills/marketing-context/scripts/context_validator.py +219 -0
  983. package/skills/marketing-context/templates/marketing-context-template.md +133 -0
  984. package/skills/marketing-demand-acquisition/SKILL.md +124 -0
  985. package/skills/marketing-demand-acquisition/references/attribution-guide.md +217 -0
  986. package/skills/marketing-demand-acquisition/references/campaign-templates.md +221 -0
  987. package/skills/marketing-demand-acquisition/references/hubspot-workflows.md +168 -0
  988. package/skills/marketing-demand-acquisition/references/international-playbooks.md +200 -0
  989. package/skills/marketing-demand-acquisition/scripts/calculate_cac.py +101 -0
  990. package/skills/marketing-ideas/SKILL.md +83 -0
  991. package/skills/marketing-ideas/references/ideas-by-category.md +347 -0
  992. package/skills/marketing-ops/SKILL.md +188 -0
  993. package/skills/marketing-ops/references/routing-matrix.md +37 -0
  994. package/skills/marketing-ops/scripts/campaign_tracker.py +156 -0
  995. package/skills/marketing-psychology/SKILL.md +121 -0
  996. package/skills/marketing-psychology/references/mental-models-catalog.md +397 -0
  997. package/skills/marketing-strategy-pmm/SKILL.md +130 -0
  998. package/skills/marketing-strategy-pmm/references/international-gtm.md +401 -0
  999. package/skills/marketing-strategy-pmm/references/launch-checklists.md +333 -0
  1000. package/skills/marketing-strategy-pmm/references/messaging-templates.md +446 -0
  1001. package/skills/marketing-strategy-pmm/references/positioning-frameworks.md +279 -0
  1002. package/skills/mcp-server-builder/SKILL.md +109 -0
  1003. package/skills/mcp-server-builder/references/openapi-extraction-guide.md +34 -0
  1004. package/skills/mcp-server-builder/references/python-server-template.md +22 -0
  1005. package/skills/mcp-server-builder/references/typescript-server-template.md +19 -0
  1006. package/skills/mcp-server-builder/references/validation-checklist.md +30 -0
  1007. package/skills/mcp-server-builder/scripts/mcp_validator.py +186 -0
  1008. package/skills/mcp-server-builder/scripts/openapi_to_mcp.py +284 -0
  1009. package/skills/mdr-745-specialist/SKILL.md +110 -0
  1010. package/skills/mdr-745-specialist/references/clinical-evidence-requirements.md +303 -0
  1011. package/skills/mdr-745-specialist/references/mdr-classification-guide.md +289 -0
  1012. package/skills/mdr-745-specialist/references/technical-documentation-templates.md +355 -0
  1013. package/skills/mdr-745-specialist/scripts/mdr_gap_analyzer.py +511 -0
  1014. package/skills/meeting-analyzer/SKILL.md +99 -0
  1015. package/skills/meeting-analyzer/references/analysis-modules.md +92 -0
  1016. package/skills/meeting-to-tasks/SKILL.md +63 -0
  1017. package/skills/mfa-setup/SKILL.md +111 -0
  1018. package/skills/mfa-setup/references/anti-patterns.md +15 -0
  1019. package/skills/mfa-setup/references/checklist.md +17 -0
  1020. package/skills/mfa-setup/references/rate-limiting.md +10 -0
  1021. package/skills/mfa-setup/references/role-rules.md +9 -0
  1022. package/skills/mfa-setup/references/schema-db.md +5 -0
  1023. package/skills/milestone-review/SKILL.md +46 -0
  1024. package/skills/monorepo-setup/SKILL.md +66 -0
  1025. package/skills/monorepo-setup/references/anti-patterns-and-checklist.md +27 -0
  1026. package/skills/ms365-tenant-manager/SKILL.md +104 -0
  1027. package/skills/ms365-tenant-manager/expected_output.json +86 -0
  1028. package/skills/ms365-tenant-manager/references/powershell-templates.md +704 -0
  1029. package/skills/ms365-tenant-manager/references/security-policies.md +357 -0
  1030. package/skills/ms365-tenant-manager/references/troubleshooting.md +411 -0
  1031. package/skills/ms365-tenant-manager/references/workflow-scripts.md +145 -0
  1032. package/skills/ms365-tenant-manager/sample_input.json +21 -0
  1033. package/skills/ms365-tenant-manager/scripts/powershell_generator.py +430 -0
  1034. package/skills/ms365-tenant-manager/scripts/tenant_setup.py +447 -0
  1035. package/skills/ms365-tenant-manager/scripts/user_management.py +447 -0
  1036. package/skills/oauth-setup/SKILL.md +92 -0
  1037. package/skills/observability/SKILL.md +88 -0
  1038. package/skills/observability-ops/SKILL.md +42 -0
  1039. package/skills/observability-ops/references/anti-patterns.md +14 -0
  1040. package/skills/observability-ops/references/slo-sli-framework.md +44 -0
  1041. package/skills/observability-ops/references/tracing-setup.md +35 -0
  1042. package/skills/observability-setup/SKILL.md +43 -0
  1043. package/skills/observability-setup/references/conventions-and-anti-patterns.md +32 -0
  1044. package/skills/observability-setup/references/stack-setup-details.md +23 -0
  1045. package/skills/onboard/SKILL.md +123 -0
  1046. package/skills/onboarding-cro/SKILL.md +149 -0
  1047. package/skills/onboarding-cro/references/experiments.md +89 -0
  1048. package/skills/onboarding-cro/scripts/activation_funnel_analyzer.py +217 -0
  1049. package/skills/optimize/SKILL.md +27 -0
  1050. package/skills/org-health-diagnostic/SKILL.md +79 -0
  1051. package/skills/org-health-diagnostic/references/health-benchmarks.md +217 -0
  1052. package/skills/org-health-diagnostic/scripts/health_scorer.py +585 -0
  1053. package/skills/owasp-top10-check/SKILL.md +110 -0
  1054. package/skills/owasp-top10-check/references/anti-patterns.md +19 -0
  1055. package/skills/owasp-top10-check/references/educabot-specifics.md +6 -0
  1056. package/skills/owasp-top10-check/references/tools.md +9 -0
  1057. package/skills/page-cro/SKILL.md +160 -0
  1058. package/skills/page-cro/references/experiments.md +71 -0
  1059. package/skills/page-cro/scripts/conversion_audit.py +427 -0
  1060. package/skills/paid-ads/SKILL.md +162 -0
  1061. package/skills/paid-ads/references/ad-copy-templates.md +200 -0
  1062. package/skills/paid-ads/references/audience-targeting.md +234 -0
  1063. package/skills/paid-ads/references/campaign-structure.md +103 -0
  1064. package/skills/paid-ads/references/platform-setup-checklists.md +269 -0
  1065. package/skills/paid-ads/scripts/roas_calculator.py +304 -0
  1066. package/skills/patch-notes/SKILL.md +51 -0
  1067. package/skills/paywall-upgrade-cro/SKILL.md +189 -0
  1068. package/skills/paywall-upgrade-cro/references/experiments.md +78 -0
  1069. package/skills/pdf-generator/SKILL.md +181 -0
  1070. package/skills/pdf-generator/design/design.md +381 -0
  1071. package/skills/pdf-generator/scripts/cover.py +1579 -0
  1072. package/skills/pdf-generator/scripts/fill_inspect.py +200 -0
  1073. package/skills/pdf-generator/scripts/fill_write.py +242 -0
  1074. package/skills/pdf-generator/scripts/make.sh +491 -0
  1075. package/skills/pdf-generator/scripts/merge.py +112 -0
  1076. package/skills/pdf-generator/scripts/palette.py +521 -0
  1077. package/skills/pdf-generator/scripts/reformat_parse.py +374 -0
  1078. package/skills/pdf-generator/scripts/render_body.py +1052 -0
  1079. package/skills/pdf-generator/scripts/render_cover.js +111 -0
  1080. package/skills/perf-profile/SKILL.md +82 -0
  1081. package/skills/performance/SKILL.md +37 -0
  1082. package/skills/performance/references/anti-patterns.md +25 -0
  1083. package/skills/performance/references/cache-strategy.md +48 -0
  1084. package/skills/performance/references/rate-limit-config.md +48 -0
  1085. package/skills/performance-test/SKILL.md +87 -0
  1086. package/skills/playtest-report/SKILL.md +45 -0
  1087. package/skills/playwright-pro/.mcp.json +27 -0
  1088. package/skills/playwright-pro/CLAUDE.md +84 -0
  1089. package/skills/playwright-pro/LICENSE +21 -0
  1090. package/skills/playwright-pro/SKILL.md +91 -0
  1091. package/skills/playwright-pro/agents/migration-planner.md +121 -0
  1092. package/skills/playwright-pro/agents/test-architect.md +105 -0
  1093. package/skills/playwright-pro/agents/test-debugger.md +117 -0
  1094. package/skills/playwright-pro/hooks/detect-playwright.sh +23 -0
  1095. package/skills/playwright-pro/hooks/hooks.json +25 -0
  1096. package/skills/playwright-pro/hooks/validate-test.sh +58 -0
  1097. package/skills/playwright-pro/references/assertions.md +89 -0
  1098. package/skills/playwright-pro/references/common-pitfalls.md +137 -0
  1099. package/skills/playwright-pro/references/fixtures.md +121 -0
  1100. package/skills/playwright-pro/references/flaky-tests.md +56 -0
  1101. package/skills/playwright-pro/references/golden-rules.md +12 -0
  1102. package/skills/playwright-pro/references/locators.md +77 -0
  1103. package/skills/playwright-pro/settings.json +8 -0
  1104. package/skills/playwright-pro/skills/browserstack/SKILL.md +169 -0
  1105. package/skills/playwright-pro/skills/fix/SKILL.md +114 -0
  1106. package/skills/playwright-pro/skills/fix/flaky-taxonomy.md +134 -0
  1107. package/skills/playwright-pro/skills/generate/SKILL.md +145 -0
  1108. package/skills/playwright-pro/skills/generate/patterns.md +163 -0
  1109. package/skills/playwright-pro/skills/init/SKILL.md +168 -0
  1110. package/skills/playwright-pro/skills/migrate/SKILL.md +136 -0
  1111. package/skills/playwright-pro/skills/migrate/cypress-mapping.md +79 -0
  1112. package/skills/playwright-pro/skills/migrate/selenium-mapping.md +94 -0
  1113. package/skills/playwright-pro/skills/report/SKILL.md +127 -0
  1114. package/skills/playwright-pro/skills/review/SKILL.md +103 -0
  1115. package/skills/playwright-pro/skills/review/anti-patterns.md +182 -0
  1116. package/skills/playwright-pro/skills/testrail/SKILL.md +130 -0
  1117. package/skills/playwright-pro/templates/README.md +123 -0
  1118. package/skills/playwright-pro/templates/accessibility/color-contrast.md +162 -0
  1119. package/skills/playwright-pro/templates/accessibility/keyboard-navigation.md +149 -0
  1120. package/skills/playwright-pro/templates/accessibility/screen-reader.md +159 -0
  1121. package/skills/playwright-pro/templates/api/auth-headers.md +148 -0
  1122. package/skills/playwright-pro/templates/api/error-responses.md +157 -0
  1123. package/skills/playwright-pro/templates/api/graphql.md +174 -0
  1124. package/skills/playwright-pro/templates/api/rate-limiting.md +152 -0
  1125. package/skills/playwright-pro/templates/api/rest-crud.md +152 -0
  1126. package/skills/playwright-pro/templates/auth/login.md +119 -0
  1127. package/skills/playwright-pro/templates/auth/logout.md +112 -0
  1128. package/skills/playwright-pro/templates/auth/mfa.md +125 -0
  1129. package/skills/playwright-pro/templates/auth/password-reset.md +129 -0
  1130. package/skills/playwright-pro/templates/auth/rbac.md +132 -0
  1131. package/skills/playwright-pro/templates/auth/remember-me.md +127 -0
  1132. package/skills/playwright-pro/templates/auth/session-timeout.md +113 -0
  1133. package/skills/playwright-pro/templates/auth/sso.md +115 -0
  1134. package/skills/playwright-pro/templates/checkout/add-to-cart.md +112 -0
  1135. package/skills/playwright-pro/templates/checkout/apply-coupon.md +123 -0
  1136. package/skills/playwright-pro/templates/checkout/order-confirm.md +108 -0
  1137. package/skills/playwright-pro/templates/checkout/order-history.md +119 -0
  1138. package/skills/playwright-pro/templates/checkout/payment.md +148 -0
  1139. package/skills/playwright-pro/templates/checkout/update-quantity.md +125 -0
  1140. package/skills/playwright-pro/templates/crud/bulk-operations.md +129 -0
  1141. package/skills/playwright-pro/templates/crud/create.md +118 -0
  1142. package/skills/playwright-pro/templates/crud/delete.md +116 -0
  1143. package/skills/playwright-pro/templates/crud/read.md +117 -0
  1144. package/skills/playwright-pro/templates/crud/soft-delete.md +113 -0
  1145. package/skills/playwright-pro/templates/crud/update.md +129 -0
  1146. package/skills/playwright-pro/templates/dashboard/chart-rendering.md +131 -0
  1147. package/skills/playwright-pro/templates/dashboard/data-loading.md +128 -0
  1148. package/skills/playwright-pro/templates/dashboard/date-range-filter.md +136 -0
  1149. package/skills/playwright-pro/templates/dashboard/export.md +146 -0
  1150. package/skills/playwright-pro/templates/dashboard/realtime-updates.md +143 -0
  1151. package/skills/playwright-pro/templates/forms/autosave.md +135 -0
  1152. package/skills/playwright-pro/templates/forms/conditional-fields.md +120 -0
  1153. package/skills/playwright-pro/templates/forms/file-upload.md +136 -0
  1154. package/skills/playwright-pro/templates/forms/multi-step.md +137 -0
  1155. package/skills/playwright-pro/templates/forms/single-step.md +124 -0
  1156. package/skills/playwright-pro/templates/forms/validation.md +141 -0
  1157. package/skills/playwright-pro/templates/notifications/in-app.md +125 -0
  1158. package/skills/playwright-pro/templates/notifications/notification-center.md +128 -0
  1159. package/skills/playwright-pro/templates/notifications/toast-messages.md +139 -0
  1160. package/skills/playwright-pro/templates/onboarding/email-verification.md +118 -0
  1161. package/skills/playwright-pro/templates/onboarding/first-time-setup.md +130 -0
  1162. package/skills/playwright-pro/templates/onboarding/registration.md +131 -0
  1163. package/skills/playwright-pro/templates/onboarding/welcome-tour.md +128 -0
  1164. package/skills/playwright-pro/templates/search/basic-search.md +118 -0
  1165. package/skills/playwright-pro/templates/search/empty-state.md +109 -0
  1166. package/skills/playwright-pro/templates/search/filters.md +128 -0
  1167. package/skills/playwright-pro/templates/search/pagination.md +123 -0
  1168. package/skills/playwright-pro/templates/search/sorting.md +131 -0
  1169. package/skills/playwright-pro/templates/settings/account-delete.md +136 -0
  1170. package/skills/playwright-pro/templates/settings/notification-prefs.md +139 -0
  1171. package/skills/playwright-pro/templates/settings/password-change.md +143 -0
  1172. package/skills/playwright-pro/templates/settings/profile-update.md +130 -0
  1173. package/skills/popup-cro/SKILL.md +142 -0
  1174. package/skills/popup-cro/references/experiments.md +88 -0
  1175. package/skills/popup-cro/references/popup-cro-playbook.md +261 -0
  1176. package/skills/postman/SKILL.md +79 -0
  1177. package/skills/pptx-generator/SKILL.md +246 -0
  1178. package/skills/pptx-generator/references/design-system.md +392 -0
  1179. package/skills/pptx-generator/references/editing.md +162 -0
  1180. package/skills/pptx-generator/references/pitfalls.md +112 -0
  1181. package/skills/pptx-generator/references/pptxgenjs.md +420 -0
  1182. package/skills/pptx-generator/references/slide-types.md +413 -0
  1183. package/skills/pricing-strategy/SKILL.md +101 -0
  1184. package/skills/pricing-strategy/references/pricing-models.md +194 -0
  1185. package/skills/pricing-strategy/references/pricing-page-playbook.md +221 -0
  1186. package/skills/pricing-strategy/scripts/pricing_modeler.py +283 -0
  1187. package/skills/product-analytics/SKILL.md +151 -0
  1188. package/skills/product-analytics/references/dashboard-templates.md +66 -0
  1189. package/skills/product-analytics/references/metrics-frameworks.md +84 -0
  1190. package/skills/product-analytics/scripts/metrics_calculator.py +195 -0
  1191. package/skills/product-discovery/SKILL.md +118 -0
  1192. package/skills/product-discovery/references/discovery-frameworks.md +72 -0
  1193. package/skills/product-discovery/scripts/assumption_mapper.py +123 -0
  1194. package/skills/product-manager-toolkit/SKILL.md +121 -0
  1195. package/skills/product-manager-toolkit/assets/prd_template.md +132 -0
  1196. package/skills/product-manager-toolkit/assets/rice_input_template.csv +4 -0
  1197. package/skills/product-manager-toolkit/references/frameworks.md +559 -0
  1198. package/skills/product-manager-toolkit/references/input-output-examples.md +156 -0
  1199. package/skills/product-manager-toolkit/references/prd_templates.md +317 -0
  1200. package/skills/product-manager-toolkit/scripts/customer_interview_analyzer.py +452 -0
  1201. package/skills/product-manager-toolkit/scripts/rice_prioritizer.py +296 -0
  1202. package/skills/product-spec/SKILL.md +65 -0
  1203. package/skills/product-strategist/SKILL.md +122 -0
  1204. package/skills/product-strategist/assets/okr_template.md +106 -0
  1205. package/skills/product-strategist/references/examples/sample_growth_okrs.json +366 -0
  1206. package/skills/product-strategist/references/okr_framework.md +328 -0
  1207. package/skills/product-strategist/references/strategy_types.md +320 -0
  1208. package/skills/product-strategist/scripts/okr_cascade_generator.py +592 -0
  1209. package/skills/programmatic-seo/SKILL.md +156 -0
  1210. package/skills/programmatic-seo/references/playbooks.md +72 -0
  1211. package/skills/programmatic-seo/scripts/url_pattern_generator.py +194 -0
  1212. package/skills/prompt-engineer-toolkit/README.md +51 -0
  1213. package/skills/prompt-engineer-toolkit/SKILL.md +136 -0
  1214. package/skills/prompt-engineer-toolkit/references/evaluation-rubric.md +14 -0
  1215. package/skills/prompt-engineer-toolkit/references/prompt-templates.md +105 -0
  1216. package/skills/prompt-engineer-toolkit/references/technique-guide.md +25 -0
  1217. package/skills/prompt-engineer-toolkit/scripts/prompt_tester.py +239 -0
  1218. package/skills/prompt-engineer-toolkit/scripts/prompt_versioner.py +235 -0
  1219. package/skills/prototype/SKILL.md +54 -0
  1220. package/skills/qa-plan/SKILL.md +77 -0
  1221. package/skills/qms-audit-expert/SKILL.md +116 -0
  1222. package/skills/qms-audit-expert/references/iso13485-audit-guide.md +388 -0
  1223. package/skills/qms-audit-expert/references/nonconformity-classification.md +221 -0
  1224. package/skills/qms-audit-expert/scripts/audit_schedule_optimizer.py +420 -0
  1225. package/skills/quality-documentation-manager/SKILL.md +140 -0
  1226. package/skills/quality-documentation-manager/references/21cfr11-compliance-guide.md +398 -0
  1227. package/skills/quality-documentation-manager/references/document-control-procedures.md +340 -0
  1228. package/skills/quality-documentation-manager/scripts/document_validator.py +646 -0
  1229. package/skills/quality-documentation-manager/scripts/document_version_control.py +466 -0
  1230. package/skills/quality-manager-qmr/SKILL.md +129 -0
  1231. package/skills/quality-manager-qmr/references/management-review-guide.md +378 -0
  1232. package/skills/quality-manager-qmr/references/quality-kpi-framework.md +296 -0
  1233. package/skills/quality-manager-qmr/scripts/management_review_tracker.py +580 -0
  1234. package/skills/quality-manager-qmr/scripts/quality_effectiveness_monitor.py +481 -0
  1235. package/skills/quality-manager-qms-iso13485/SKILL.md +129 -0
  1236. package/skills/quality-manager-qms-iso13485/references/iso13485-clause-requirements.md +726 -0
  1237. package/skills/quality-manager-qms-iso13485/references/qms-process-templates.md +876 -0
  1238. package/skills/quality-manager-qms-iso13485/scripts/qms_audit_checklist.py +886 -0
  1239. package/skills/query-optimization/SKILL.md +107 -0
  1240. package/skills/quick-design/SKILL.md +47 -0
  1241. package/skills/rag-architect/SKILL.md +117 -0
  1242. package/skills/rag-architect/references/chunking_strategies_comparison.md +287 -0
  1243. package/skills/rag-architect/references/embedding_model_benchmark.md +338 -0
  1244. package/skills/rag-architect/references/rag_evaluation_framework.md +431 -0
  1245. package/skills/rag-architect/scripts/chunking_optimizer.py +787 -0
  1246. package/skills/rag-architect/scripts/rag_pipeline_designer.py +680 -0
  1247. package/skills/rag-architect/scripts/retrieval_evaluator.py +578 -0
  1248. package/skills/rate-limiting/SKILL.md +114 -0
  1249. package/skills/rbac-abac/SKILL.md +70 -0
  1250. package/skills/rbac-abac/references/anti-patterns.md +14 -0
  1251. package/skills/rbac-abac/references/checklist.md +13 -0
  1252. package/skills/rbac-abac/references/schema-jwt-cache.md +27 -0
  1253. package/skills/react-native-dev/SKILL.md +139 -0
  1254. package/skills/react-native-dev/references/animations.md +254 -0
  1255. package/skills/react-native-dev/references/components.md +124 -0
  1256. package/skills/react-native-dev/references/engineering.md +527 -0
  1257. package/skills/react-native-dev/references/forms.md +300 -0
  1258. package/skills/react-native-dev/references/native-capabilities.md +163 -0
  1259. package/skills/react-native-dev/references/navigation.md +271 -0
  1260. package/skills/react-native-dev/references/networking.md +346 -0
  1261. package/skills/react-native-dev/references/performance.md +215 -0
  1262. package/skills/react-native-dev/references/state-management.md +230 -0
  1263. package/skills/react-native-dev/references/styling.md +117 -0
  1264. package/skills/react-native-dev/references/testing.md +342 -0
  1265. package/skills/read-replicas/SKILL.md +46 -0
  1266. package/skills/read-replicas/references/anti-patterns-checklist.md +26 -0
  1267. package/skills/read-replicas/references/consistency-connection.md +24 -0
  1268. package/skills/read-replicas/references/ha-dr.md +18 -0
  1269. package/skills/red-team/SKILL.md +120 -0
  1270. package/skills/red-team/references/attack-path-methodology.md +135 -0
  1271. package/skills/red-team/scripts/engagement_planner.py +420 -0
  1272. package/skills/referral-program/SKILL.md +189 -0
  1273. package/skills/referral-program/references/loop-and-incentives.md +81 -0
  1274. package/skills/referral-program/references/measurement-framework.md +199 -0
  1275. package/skills/referral-program/references/program-mechanics.md +212 -0
  1276. package/skills/referral-program/scripts/referral_roi_calculator.py +420 -0
  1277. package/skills/regression-suite/SKILL.md +89 -0
  1278. package/skills/regulatory-affairs-head/SKILL.md +117 -0
  1279. package/skills/regulatory-affairs-head/references/eu-mdr-submission-guide.md +95 -0
  1280. package/skills/regulatory-affairs-head/references/fda-submission-guide.md +127 -0
  1281. package/skills/regulatory-affairs-head/references/global-regulatory-pathways.md +283 -0
  1282. package/skills/regulatory-affairs-head/references/iso-regulatory-requirements.md +363 -0
  1283. package/skills/regulatory-affairs-head/scripts/regulatory_pathway_analyzer.py +557 -0
  1284. package/skills/regulatory-affairs-head/scripts/regulatory_tracker.py +199 -0
  1285. package/skills/release/SKILL.md +89 -0
  1286. package/skills/release-announce/SKILL.md +64 -0
  1287. package/skills/release-checklist/SKILL.md +63 -0
  1288. package/skills/research-summarizer/SKILL.md +94 -0
  1289. package/skills/research-summarizer/references/citation-formats.md +105 -0
  1290. package/skills/research-summarizer/references/summary-templates.md +120 -0
  1291. package/skills/research-summarizer/scripts/extract_citations.py +309 -0
  1292. package/skills/research-summarizer/scripts/format_summary.py +244 -0
  1293. package/skills/retrospective/SKILL.md +72 -0
  1294. package/skills/revenue-operations/SKILL.md +101 -0
  1295. package/skills/revenue-operations/assets/expected_output.json +117 -0
  1296. package/skills/revenue-operations/assets/forecast_report_template.md +149 -0
  1297. package/skills/revenue-operations/assets/gtm_dashboard_template.md +215 -0
  1298. package/skills/revenue-operations/assets/pipeline_review_template.md +138 -0
  1299. package/skills/revenue-operations/assets/sample_forecast_data.json +23 -0
  1300. package/skills/revenue-operations/assets/sample_gtm_data.json +24 -0
  1301. package/skills/revenue-operations/assets/sample_pipeline_data.json +160 -0
  1302. package/skills/revenue-operations/references/gtm-efficiency-benchmarks.md +257 -0
  1303. package/skills/revenue-operations/references/pipeline-management-framework.md +292 -0
  1304. package/skills/revenue-operations/references/revops-metrics-guide.md +304 -0
  1305. package/skills/revenue-operations/scripts/forecast_accuracy_tracker.py +531 -0
  1306. package/skills/revenue-operations/scripts/gtm_efficiency_calculator.py +658 -0
  1307. package/skills/revenue-operations/scripts/pipeline_analyzer.py +496 -0
  1308. package/skills/reverse-document/SKILL.md +70 -0
  1309. package/skills/risk-management-specialist/SKILL.md +125 -0
  1310. package/skills/risk-management-specialist/references/iso14971-implementation-guide.md +468 -0
  1311. package/skills/risk-management-specialist/references/risk-analysis-methods.md +415 -0
  1312. package/skills/risk-management-specialist/references/risk-assessment-templates.md +77 -0
  1313. package/skills/risk-management-specialist/scripts/fmea_analyzer.py +442 -0
  1314. package/skills/risk-management-specialist/scripts/risk_matrix_calculator.py +419 -0
  1315. package/skills/roadmap-communicator/SKILL.md +96 -0
  1316. package/skills/roadmap-communicator/references/communication-templates.md +63 -0
  1317. package/skills/roadmap-communicator/references/roadmap-templates.md +44 -0
  1318. package/skills/roadmap-communicator/scripts/changelog_generator.py +151 -0
  1319. package/skills/rollback-strategy/SKILL.md +80 -0
  1320. package/skills/rollback-strategy/references/anti-patterns.md +14 -0
  1321. package/skills/rollback-strategy/references/canary-auto-rollback.md +17 -0
  1322. package/skills/rollback-strategy/references/communication-protocol.md +6 -0
  1323. package/skills/rollback-strategy/references/mobile-rollback.md +10 -0
  1324. package/skills/rollback-strategy/references/pre-deploy-checklist.md +15 -0
  1325. package/skills/rollback-strategy/references/runbook-commands.md +147 -0
  1326. package/skills/run-migrations/SKILL.md +67 -0
  1327. package/skills/runbooks/SKILL.md +57 -0
  1328. package/skills/runbooks/references/anti-patterns.md +6 -0
  1329. package/skills/runbooks/references/checklist.md +13 -0
  1330. package/skills/runbooks/references/lifecycle.md +14 -0
  1331. package/skills/runbooks/references/writing-principles.md +9 -0
  1332. package/skills/runbooks/templates/runbook.md +80 -0
  1333. package/skills/saas-metrics-coach/SKILL.md +156 -0
  1334. package/skills/saas-metrics-coach/assets/input-template.md +29 -0
  1335. package/skills/saas-metrics-coach/references/benchmarks.md +101 -0
  1336. package/skills/saas-metrics-coach/references/formulas.md +103 -0
  1337. package/skills/saas-metrics-coach/scripts/metrics_calculator.py +217 -0
  1338. package/skills/saas-metrics-coach/scripts/quick_ratio_calculator.py +173 -0
  1339. package/skills/saas-metrics-coach/scripts/unit_economics_simulator.py +205 -0
  1340. package/skills/sales-engineer/SKILL.md +104 -0
  1341. package/skills/sales-engineer/assets/demo_script_template.md +232 -0
  1342. package/skills/sales-engineer/assets/expected_output.json +474 -0
  1343. package/skills/sales-engineer/assets/poc_scorecard_template.md +213 -0
  1344. package/skills/sales-engineer/assets/sample_rfp_data.json +219 -0
  1345. package/skills/sales-engineer/assets/technical_proposal_template.md +231 -0
  1346. package/skills/sales-engineer/references/competitive-positioning-framework.md +226 -0
  1347. package/skills/sales-engineer/references/poc-best-practices.md +277 -0
  1348. package/skills/sales-engineer/references/rfp-response-guide.md +189 -0
  1349. package/skills/sales-engineer/scripts/competitive_matrix_builder.py +525 -0
  1350. package/skills/sales-engineer/scripts/poc_planner.py +765 -0
  1351. package/skills/sales-engineer/scripts/rfp_response_analyzer.py +557 -0
  1352. package/skills/scaffold-fastify-ts/SKILL.md +77 -0
  1353. package/skills/scaffold-fastify-ts/references/anti-patterns.md +10 -0
  1354. package/skills/scaffold-fastify-ts/references/key-decisions.md +27 -0
  1355. package/skills/scaffold-go/SKILL.md +77 -0
  1356. package/skills/scaffold-go/references/patterns.md +22 -0
  1357. package/skills/scaffold-go/references/project-structure.md +15 -0
  1358. package/skills/scaffold-react-native/SKILL.md +69 -0
  1359. package/skills/scaffold-react-native/references/conventions.md +26 -0
  1360. package/skills/scaffold-react-native/references/workflow-and-navigation.md +22 -0
  1361. package/skills/scaffold-react-vite/SKILL.md +76 -0
  1362. package/skills/scaffold-react-vite/references/anti-patterns.md +9 -0
  1363. package/skills/scaffold-react-vite/references/dependency-baseline.md +22 -0
  1364. package/skills/scaffold-unity/SKILL.md +52 -0
  1365. package/skills/scaffold-unity/references/folder-structure-and-files.md +43 -0
  1366. package/skills/scaffold-unity/references/naming-conventions.md +11 -0
  1367. package/skills/scenario-war-room/SKILL.md +81 -0
  1368. package/skills/scenario-war-room/references/cascade-model.md +103 -0
  1369. package/skills/scenario-war-room/references/scenario-planning.md +212 -0
  1370. package/skills/scenario-war-room/scripts/scenario_modeler.py +486 -0
  1371. package/skills/schema-markup/SKILL.md +184 -0
  1372. package/skills/schema-markup/references/implementation-patterns.md +437 -0
  1373. package/skills/schema-markup/references/schema-types-guide.md +285 -0
  1374. package/skills/schema-markup/references/testing-and-mistakes.md +43 -0
  1375. package/skills/schema-markup/scripts/schema_validator.py +442 -0
  1376. package/skills/scope-check/SKILL.md +67 -0
  1377. package/skills/scope-check/references/report-template.md +56 -0
  1378. package/skills/scrum-master/SKILL.md +128 -0
  1379. package/skills/scrum-master/assets/expected_output.json +131 -0
  1380. package/skills/scrum-master/assets/expected_velocity_output.json +85 -0
  1381. package/skills/scrum-master/assets/sample_sprint_data.json +821 -0
  1382. package/skills/scrum-master/assets/sprint_report_template.md +214 -0
  1383. package/skills/scrum-master/assets/team_health_check_template.md +380 -0
  1384. package/skills/scrum-master/references/retro-formats.md +336 -0
  1385. package/skills/scrum-master/references/team-dynamics-framework.md +561 -0
  1386. package/skills/scrum-master/references/velocity-forecasting-guide.md +386 -0
  1387. package/skills/scrum-master/scripts/retrospective_analyzer.py +914 -0
  1388. package/skills/scrum-master/scripts/sprint_health_scorer.py +744 -0
  1389. package/skills/scrum-master/scripts/velocity_analyzer.py +580 -0
  1390. package/skills/search-setup/SKILL.md +49 -0
  1391. package/skills/search-setup/references/anti-patterns-checklist.md +24 -0
  1392. package/skills/search-setup/references/engine-details.md +15 -0
  1393. package/skills/search-setup/references/indexing-pipeline.md +11 -0
  1394. package/skills/search-setup/references/observability.md +6 -0
  1395. package/skills/secret-management/SKILL.md +49 -0
  1396. package/skills/secret-management/references/anti-patterns.md +7 -0
  1397. package/skills/secret-management/references/checklist.md +13 -0
  1398. package/skills/secret-management/references/implementation-details.md +37 -0
  1399. package/skills/security-audit/SKILL.md +86 -0
  1400. package/skills/security-pen-testing/SKILL.md +114 -0
  1401. package/skills/security-pen-testing/references/attack_patterns.md +629 -0
  1402. package/skills/security-pen-testing/references/owasp_top_10_checklist.md +440 -0
  1403. package/skills/security-pen-testing/references/responsible_disclosure.md +317 -0
  1404. package/skills/security-pen-testing/scripts/dependency_auditor.py +455 -0
  1405. package/skills/security-pen-testing/scripts/pentest_report_generator.py +462 -0
  1406. package/skills/security-pen-testing/scripts/vulnerability_scanner.py +545 -0
  1407. package/skills/self-improving-agent/.claude-plugin/plugin.json +13 -0
  1408. package/skills/self-improving-agent/CLAUDE.md +79 -0
  1409. package/skills/self-improving-agent/LICENSE +21 -0
  1410. package/skills/self-improving-agent/SKILL.md +112 -0
  1411. package/skills/self-improving-agent/agents/memory-analyst.md +74 -0
  1412. package/skills/self-improving-agent/agents/skill-extractor.md +110 -0
  1413. package/skills/self-improving-agent/hooks/error-capture.sh +110 -0
  1414. package/skills/self-improving-agent/hooks/hooks.json +15 -0
  1415. package/skills/self-improving-agent/reference/memory-architecture.md +131 -0
  1416. package/skills/self-improving-agent/reference/promotion-rules.md +83 -0
  1417. package/skills/self-improving-agent/reference/rules-directory-patterns.md +137 -0
  1418. package/skills/self-improving-agent/settings.json +28 -0
  1419. package/skills/self-improving-agent/skills/extract/SKILL.md +182 -0
  1420. package/skills/self-improving-agent/skills/promote/SKILL.md +148 -0
  1421. package/skills/self-improving-agent/skills/remember/SKILL.md +102 -0
  1422. package/skills/self-improving-agent/skills/review/SKILL.md +130 -0
  1423. package/skills/self-improving-agent/skills/status/SKILL.md +107 -0
  1424. package/skills/self-improving-agent/templates/rule-template.md +17 -0
  1425. package/skills/self-improving-agent/templates/skill-template.md +53 -0
  1426. package/skills/senior-computer-vision/SKILL.md +125 -0
  1427. package/skills/senior-computer-vision/references/computer_vision_architectures.md +683 -0
  1428. package/skills/senior-computer-vision/references/object_detection_optimization.md +885 -0
  1429. package/skills/senior-computer-vision/references/production_vision_systems.md +1226 -0
  1430. package/skills/senior-computer-vision/references/reference-docs-and-commands.md +96 -0
  1431. package/skills/senior-computer-vision/scripts/dataset_pipeline_builder.py +1699 -0
  1432. package/skills/senior-computer-vision/scripts/inference_optimizer.py +557 -0
  1433. package/skills/senior-computer-vision/scripts/vision_model_trainer.py +576 -0
  1434. package/skills/senior-data-engineer/SKILL.md +198 -0
  1435. package/skills/senior-data-engineer/references/data_modeling_patterns.md +1058 -0
  1436. package/skills/senior-data-engineer/references/data_pipeline_architecture.md +1100 -0
  1437. package/skills/senior-data-engineer/references/dataops_best_practices.md +1502 -0
  1438. package/skills/senior-data-engineer/references/troubleshooting.md +183 -0
  1439. package/skills/senior-data-engineer/references/workflows.md +624 -0
  1440. package/skills/senior-data-engineer/scripts/data_quality_validator.py +1636 -0
  1441. package/skills/senior-data-engineer/scripts/etl_performance_optimizer.py +1685 -0
  1442. package/skills/senior-data-engineer/scripts/pipeline_orchestrator.py +883 -0
  1443. package/skills/senior-data-scientist/SKILL.md +117 -0
  1444. package/skills/senior-data-scientist/references/experiment_design_frameworks.md +80 -0
  1445. package/skills/senior-data-scientist/references/feature_engineering_patterns.md +80 -0
  1446. package/skills/senior-data-scientist/references/statistical_methods_advanced.md +80 -0
  1447. package/skills/senior-data-scientist/scripts/experiment_designer.py +100 -0
  1448. package/skills/senior-data-scientist/scripts/feature_engineering_pipeline.py +100 -0
  1449. package/skills/senior-data-scientist/scripts/model_evaluation_suite.py +100 -0
  1450. package/skills/senior-ml-engineer/SKILL.md +121 -0
  1451. package/skills/senior-ml-engineer/references/llm_integration_guide.md +317 -0
  1452. package/skills/senior-ml-engineer/references/mlops_production_patterns.md +265 -0
  1453. package/skills/senior-ml-engineer/references/rag_system_architecture.md +371 -0
  1454. package/skills/senior-ml-engineer/scripts/ml_monitoring_suite.py +100 -0
  1455. package/skills/senior-ml-engineer/scripts/model_deployment_pipeline.py +100 -0
  1456. package/skills/senior-ml-engineer/scripts/rag_system_builder.py +100 -0
  1457. package/skills/senior-pm/SKILL.md +109 -0
  1458. package/skills/senior-pm/assets/executive_report_template.md +267 -0
  1459. package/skills/senior-pm/assets/expected_output.json +150 -0
  1460. package/skills/senior-pm/assets/project_charter_template.md +274 -0
  1461. package/skills/senior-pm/assets/raci_matrix_template.md +265 -0
  1462. package/skills/senior-pm/assets/sample_project_data.json +458 -0
  1463. package/skills/senior-pm/references/portfolio-kpis.md +32 -0
  1464. package/skills/senior-pm/references/portfolio-prioritization-models.md +645 -0
  1465. package/skills/senior-pm/references/risk-management-framework.md +485 -0
  1466. package/skills/senior-pm/scripts/project_health_dashboard.py +814 -0
  1467. package/skills/senior-pm/scripts/resource_capacity_planner.py +846 -0
  1468. package/skills/senior-pm/scripts/risk_matrix_analyzer.py +698 -0
  1469. package/skills/senior-prompt-engineer/SKILL.md +108 -0
  1470. package/skills/senior-prompt-engineer/references/agentic_system_design.md +646 -0
  1471. package/skills/senior-prompt-engineer/references/llm_evaluation_frameworks.md +524 -0
  1472. package/skills/senior-prompt-engineer/references/prompt_engineering_patterns.md +572 -0
  1473. package/skills/senior-prompt-engineer/scripts/agent_orchestrator.py +560 -0
  1474. package/skills/senior-prompt-engineer/scripts/prompt_optimizer.py +519 -0
  1475. package/skills/senior-prompt-engineer/scripts/rag_evaluator.py +574 -0
  1476. package/skills/seo-audit/SKILL.md +150 -0
  1477. package/skills/seo-audit/references/aeo-geo-patterns.md +110 -0
  1478. package/skills/seo-audit/references/ai-writing-detection.md +63 -0
  1479. package/skills/seo-audit/references/seo-audit-reference.md +289 -0
  1480. package/skills/seo-audit/scripts/seo_checker.py +361 -0
  1481. package/skills/shader-dev/SKILL.md +299 -0
  1482. package/skills/shader-dev/reference/ambient-occlusion.md +382 -0
  1483. package/skills/shader-dev/reference/analytic-ray-tracing.md +651 -0
  1484. package/skills/shader-dev/reference/anti-aliasing.md +71 -0
  1485. package/skills/shader-dev/reference/atmospheric-scattering.md +571 -0
  1486. package/skills/shader-dev/reference/camera-effects.md +80 -0
  1487. package/skills/shader-dev/reference/cellular-automata.md +635 -0
  1488. package/skills/shader-dev/reference/color-palette.md +481 -0
  1489. package/skills/shader-dev/reference/csg-boolean-operations.md +466 -0
  1490. package/skills/shader-dev/reference/domain-repetition.md +436 -0
  1491. package/skills/shader-dev/reference/domain-warping.md +419 -0
  1492. package/skills/shader-dev/reference/fluid-simulation.md +425 -0
  1493. package/skills/shader-dev/reference/fractal-rendering.md +525 -0
  1494. package/skills/shader-dev/reference/lighting-model.md +639 -0
  1495. package/skills/shader-dev/reference/matrix-transform.md +535 -0
  1496. package/skills/shader-dev/reference/multipass-buffer.md +571 -0
  1497. package/skills/shader-dev/reference/normal-estimation.md +418 -0
  1498. package/skills/shader-dev/reference/particle-system.md +589 -0
  1499. package/skills/shader-dev/reference/path-tracing-gi.md +602 -0
  1500. package/skills/shader-dev/reference/polar-uv-manipulation.md +521 -0
  1501. package/skills/shader-dev/reference/post-processing.md +375 -0
  1502. package/skills/shader-dev/reference/procedural-2d-pattern.md +439 -0
  1503. package/skills/shader-dev/reference/procedural-noise.md +551 -0
  1504. package/skills/shader-dev/reference/ray-marching.md +396 -0
  1505. package/skills/shader-dev/reference/sdf-2d.md +724 -0
  1506. package/skills/shader-dev/reference/sdf-3d.md +805 -0
  1507. package/skills/shader-dev/reference/sdf-tricks.md +63 -0
  1508. package/skills/shader-dev/reference/shadow-techniques.md +476 -0
  1509. package/skills/shader-dev/reference/simulation-physics.md +644 -0
  1510. package/skills/shader-dev/reference/sound-synthesis.md +578 -0
  1511. package/skills/shader-dev/reference/terrain-rendering.md +839 -0
  1512. package/skills/shader-dev/reference/texture-mapping-advanced.md +87 -0
  1513. package/skills/shader-dev/reference/texture-sampling.md +553 -0
  1514. package/skills/shader-dev/reference/volumetric-rendering.md +608 -0
  1515. package/skills/shader-dev/reference/voronoi-cellular-noise.md +486 -0
  1516. package/skills/shader-dev/reference/voxel-rendering.md +701 -0
  1517. package/skills/shader-dev/reference/water-ocean.md +445 -0
  1518. package/skills/shader-dev/reference/webgl-pitfalls.md +41 -0
  1519. package/skills/shader-dev/techniques/ambient-occlusion.md +364 -0
  1520. package/skills/shader-dev/techniques/analytic-ray-tracing.md +542 -0
  1521. package/skills/shader-dev/techniques/anti-aliasing.md +124 -0
  1522. package/skills/shader-dev/techniques/atmospheric-scattering.md +522 -0
  1523. package/skills/shader-dev/techniques/camera-effects.md +115 -0
  1524. package/skills/shader-dev/techniques/cellular-automata.md +531 -0
  1525. package/skills/shader-dev/techniques/color-palette.md +380 -0
  1526. package/skills/shader-dev/techniques/csg-boolean-operations.md +491 -0
  1527. package/skills/shader-dev/techniques/domain-repetition.md +333 -0
  1528. package/skills/shader-dev/techniques/domain-warping.md +414 -0
  1529. package/skills/shader-dev/techniques/fluid-simulation.md +1175 -0
  1530. package/skills/shader-dev/techniques/fractal-rendering.md +436 -0
  1531. package/skills/shader-dev/techniques/lighting-model.md +527 -0
  1532. package/skills/shader-dev/techniques/matrix-transform.md +455 -0
  1533. package/skills/shader-dev/techniques/multipass-buffer.md +922 -0
  1534. package/skills/shader-dev/techniques/normal-estimation.md +318 -0
  1535. package/skills/shader-dev/techniques/particle-system.md +1203 -0
  1536. package/skills/shader-dev/techniques/path-tracing-gi.md +623 -0
  1537. package/skills/shader-dev/techniques/polar-uv-manipulation.md +373 -0
  1538. package/skills/shader-dev/techniques/post-processing.md +788 -0
  1539. package/skills/shader-dev/techniques/procedural-2d-pattern.md +346 -0
  1540. package/skills/shader-dev/techniques/procedural-noise.md +554 -0
  1541. package/skills/shader-dev/techniques/ray-marching.md +467 -0
  1542. package/skills/shader-dev/techniques/sdf-2d.md +631 -0
  1543. package/skills/shader-dev/techniques/sdf-3d.md +589 -0
  1544. package/skills/shader-dev/techniques/sdf-tricks.md +100 -0
  1545. package/skills/shader-dev/techniques/shadow-techniques.md +776 -0
  1546. package/skills/shader-dev/techniques/simulation-physics.md +1542 -0
  1547. package/skills/shader-dev/techniques/sound-synthesis.md +490 -0
  1548. package/skills/shader-dev/techniques/terrain-rendering.md +408 -0
  1549. package/skills/shader-dev/techniques/texture-mapping-advanced.md +121 -0
  1550. package/skills/shader-dev/techniques/texture-sampling.md +382 -0
  1551. package/skills/shader-dev/techniques/volumetric-rendering.md +375 -0
  1552. package/skills/shader-dev/techniques/voronoi-cellular-noise.md +458 -0
  1553. package/skills/shader-dev/techniques/voxel-rendering.md +985 -0
  1554. package/skills/shader-dev/techniques/water-ocean.md +490 -0
  1555. package/skills/shader-dev/techniques/webgl-pitfalls.md +170 -0
  1556. package/skills/signup-flow-cro/SKILL.md +150 -0
  1557. package/skills/signup-flow-cro/references/experiments.md +76 -0
  1558. package/skills/signup-flow-cro/references/signup-cro-playbook.md +180 -0
  1559. package/skills/signup-flow-cro/scripts/funnel_drop_analyzer.py +320 -0
  1560. package/skills/site-architecture/SKILL.md +167 -0
  1561. package/skills/site-architecture/references/internal-linking-playbook.md +216 -0
  1562. package/skills/site-architecture/references/navigation-design.md +32 -0
  1563. package/skills/site-architecture/references/silo-and-linking-guide.md +80 -0
  1564. package/skills/site-architecture/references/url-design-guide.md +220 -0
  1565. package/skills/site-architecture/scripts/sitemap_analyzer.py +375 -0
  1566. package/skills/skill-auditor/SKILL.md +159 -0
  1567. package/skills/skill-auditor/references/frontmatter-spec.md +113 -0
  1568. package/skills/skill-auditor/references/lazy-loading-guide.md +98 -0
  1569. package/skills/skill-improve/SKILL.md +59 -0
  1570. package/skills/skill-test/SKILL.md +45 -0
  1571. package/skills/skill-test/references/audit-mode-procedure.md +7 -0
  1572. package/skills/skill-test/references/category-mode-procedure.md +7 -0
  1573. package/skills/skill-test/references/next-steps-guide.md +9 -0
  1574. package/skills/skill-test/references/spec-mode-procedure.md +8 -0
  1575. package/skills/skill-test/references/static-checks.md +13 -0
  1576. package/skills/slack/SKILL.md +45 -0
  1577. package/skills/slo-sli/SKILL.md +92 -0
  1578. package/skills/slo-sli/references/alerting-burn-rate.md +22 -0
  1579. package/skills/slo-sli/references/anti-patterns.md +12 -0
  1580. package/skills/slo-sli/references/checklist.md +14 -0
  1581. package/skills/smoke-check/SKILL.md +77 -0
  1582. package/skills/snowflake-development/SKILL.md +119 -0
  1583. package/skills/snowflake-development/references/cortex_ai_and_agents.md +280 -0
  1584. package/skills/snowflake-development/references/snowflake_sql_and_pipelines.md +281 -0
  1585. package/skills/snowflake-development/references/troubleshooting.md +155 -0
  1586. package/skills/snowflake-development/scripts/snowflake_query_helper.py +233 -0
  1587. package/skills/soc2-compliance/SKILL.md +132 -0
  1588. package/skills/soc2-compliance/references/evidence_collection_guide.md +227 -0
  1589. package/skills/soc2-compliance/references/trust_service_criteria.md +273 -0
  1590. package/skills/soc2-compliance/references/type1_vs_type2.md +273 -0
  1591. package/skills/soc2-compliance/scripts/control_matrix_builder.py +679 -0
  1592. package/skills/soc2-compliance/scripts/evidence_tracker.py +240 -0
  1593. package/skills/soc2-compliance/scripts/gap_analyzer.py +479 -0
  1594. package/skills/social-content/SKILL.md +155 -0
  1595. package/skills/social-content/references/hooks-and-repurposing.md +74 -0
  1596. package/skills/social-content/references/platforms.md +163 -0
  1597. package/skills/social-content/references/post-templates.md +171 -0
  1598. package/skills/social-content/references/reverse-engineering.md +190 -0
  1599. package/skills/social-media-analyzer/HOW_TO_USE.md +39 -0
  1600. package/skills/social-media-analyzer/SKILL.md +190 -0
  1601. package/skills/social-media-analyzer/assets/expected_output.json +61 -0
  1602. package/skills/social-media-analyzer/assets/sample_input.json +42 -0
  1603. package/skills/social-media-analyzer/references/platform-benchmarks.md +226 -0
  1604. package/skills/social-media-analyzer/scripts/analyze_performance.py +180 -0
  1605. package/skills/social-media-analyzer/scripts/calculate_metrics.py +147 -0
  1606. package/skills/social-media-manager/SKILL.md +195 -0
  1607. package/skills/social-media-manager/scripts/social_calendar_generator.py +399 -0
  1608. package/skills/sprint-ceremony/SKILL.md +75 -0
  1609. package/skills/sprint-plan/SKILL.md +47 -0
  1610. package/skills/sprint-report/SKILL.md +124 -0
  1611. package/skills/standup-report/SKILL.md +51 -0
  1612. package/skills/start/SKILL.md +67 -0
  1613. package/skills/start-service/SKILL.md +45 -0
  1614. package/skills/state-management/SKILL.md +75 -0
  1615. package/skills/story-done/SKILL.md +69 -0
  1616. package/skills/story-done/references/review-gates.md +9 -0
  1617. package/skills/story-done/references/test-evidence-traceability.md +17 -0
  1618. package/skills/story-readiness/SKILL.md +57 -0
  1619. package/skills/story-readiness/references/context-loading.md +9 -0
  1620. package/skills/story-readiness/references/output-format.md +7 -0
  1621. package/skills/story-readiness/references/readiness-checklist.md +33 -0
  1622. package/skills/strategic-alignment/SKILL.md +79 -0
  1623. package/skills/strategic-alignment/references/alignment-playbook.md +205 -0
  1624. package/skills/strategic-alignment/scripts/alignment_checker.py +455 -0
  1625. package/skills/stripe-integration-expert/SKILL.md +65 -0
  1626. package/skills/stripe-integration-expert/references/stripe-code-examples.md +372 -0
  1627. package/skills/tdd-guide/HOW_TO_USE.md +313 -0
  1628. package/skills/tdd-guide/SKILL.md +114 -0
  1629. package/skills/tdd-guide/assets/expected_output.json +77 -0
  1630. package/skills/tdd-guide/assets/sample_coverage_report.lcov +56 -0
  1631. package/skills/tdd-guide/assets/sample_input_python.json +39 -0
  1632. package/skills/tdd-guide/assets/sample_input_typescript.json +36 -0
  1633. package/skills/tdd-guide/references/ci-integration.md +195 -0
  1634. package/skills/tdd-guide/references/framework-guide.md +206 -0
  1635. package/skills/tdd-guide/references/tdd-best-practices.md +128 -0
  1636. package/skills/tdd-guide/references/tdd-code-examples.md +229 -0
  1637. package/skills/tdd-guide/scripts/coverage_analyzer.py +434 -0
  1638. package/skills/tdd-guide/scripts/fixture_generator.py +440 -0
  1639. package/skills/tdd-guide/scripts/format_detector.py +384 -0
  1640. package/skills/tdd-guide/scripts/framework_adapter.py +428 -0
  1641. package/skills/tdd-guide/scripts/metrics_calculator.py +456 -0
  1642. package/skills/tdd-guide/scripts/output_formatter.py +354 -0
  1643. package/skills/tdd-guide/scripts/tdd_workflow.py +474 -0
  1644. package/skills/tdd-guide/scripts/test_generator.py +438 -0
  1645. package/skills/team-communications/SKILL.md +69 -0
  1646. package/skills/team-communications/references/3p-updates.md +47 -0
  1647. package/skills/team-communications/references/company-newsletter.md +65 -0
  1648. package/skills/team-communications/references/faq-answers.md +30 -0
  1649. package/skills/team-communications/references/general-comms.md +16 -0
  1650. package/skills/team-vn/SKILL.md +187 -0
  1651. package/skills/tech-debt/SKILL.md +91 -0
  1652. package/skills/tech-debt/references/register-format.md +20 -0
  1653. package/skills/tech-debt/references/scan-indicators.md +22 -0
  1654. package/skills/tech-stack-evaluator/SKILL.md +111 -0
  1655. package/skills/tech-stack-evaluator/assets/expected_output_comparison.json +82 -0
  1656. package/skills/tech-stack-evaluator/assets/sample_input_structured.json +39 -0
  1657. package/skills/tech-stack-evaluator/assets/sample_input_tco.json +42 -0
  1658. package/skills/tech-stack-evaluator/assets/sample_input_text.json +4 -0
  1659. package/skills/tech-stack-evaluator/references/examples.md +383 -0
  1660. package/skills/tech-stack-evaluator/references/metrics.md +242 -0
  1661. package/skills/tech-stack-evaluator/references/workflows.md +362 -0
  1662. package/skills/tech-stack-evaluator/scripts/ecosystem_analyzer.py +501 -0
  1663. package/skills/tech-stack-evaluator/scripts/format_detector.py +430 -0
  1664. package/skills/tech-stack-evaluator/scripts/migration_analyzer.py +587 -0
  1665. package/skills/tech-stack-evaluator/scripts/report_generator.py +460 -0
  1666. package/skills/tech-stack-evaluator/scripts/security_assessor.py +518 -0
  1667. package/skills/tech-stack-evaluator/scripts/stack_comparator.py +389 -0
  1668. package/skills/tech-stack-evaluator/scripts/tco_calculator.py +458 -0
  1669. package/skills/terraform-init/SKILL.md +80 -0
  1670. package/skills/terraform-init/references/anti-patterns.md +11 -0
  1671. package/skills/terraform-init/references/security-checklist.md +10 -0
  1672. package/skills/test-flakiness/SKILL.md +90 -0
  1673. package/skills/test-helpers/SKILL.md +50 -0
  1674. package/skills/test-setup/SKILL.md +58 -0
  1675. package/skills/testing/SKILL.md +32 -0
  1676. package/skills/testing/references/anti-patterns.md +11 -0
  1677. package/skills/testing/references/coverage-strategy.md +11 -0
  1678. package/skills/testing/references/framework-setup.md +25 -0
  1679. package/skills/testing/references/helper-patterns.md +9 -0
  1680. package/skills/threat-detection/SKILL.md +114 -0
  1681. package/skills/threat-detection/references/hunt-playbooks.md +131 -0
  1682. package/skills/threat-detection/scripts/threat_signal_analyzer.py +571 -0
  1683. package/skills/unity-game-architecture/SKILL.md +45 -0
  1684. package/skills/unity-game-architecture/references/anti-patterns.md +15 -0
  1685. package/skills/unity-game-architecture/references/checklist.md +16 -0
  1686. package/skills/unity-game-architecture/references/performance-and-systems.md +29 -0
  1687. package/skills/user-persona/SKILL.md +65 -0
  1688. package/skills/user-persona/references/persona-template.md +27 -0
  1689. package/skills/ux-design/SKILL.md +60 -0
  1690. package/skills/ux-design/references/cross-reference-and-routing.md +19 -0
  1691. package/skills/ux-design/references/spec-sections.md +19 -0
  1692. package/skills/ux-review/SKILL.md +70 -0
  1693. package/skills/video-content-strategist/SKILL.md +181 -0
  1694. package/skills/video-content-strategist/references/scripts-and-anti-patterns.md +48 -0
  1695. package/skills/visual-regression/SKILL.md +86 -0
  1696. package/skills/vn-asset-pipeline/SKILL.md +166 -0
  1697. package/skills/vn-character-design/SKILL.md +220 -0
  1698. package/skills/vn-comfyui-gen/SKILL.md +235 -0
  1699. package/skills/vn-comfyui-gen/references/comfyui-vn-workflows.md +197 -0
  1700. package/skills/vn-dialogue-tree/SKILL.md +126 -0
  1701. package/skills/vn-gdd/SKILL.md +133 -0
  1702. package/skills/vn-narrative-design/SKILL.md +185 -0
  1703. package/skills/vn-renpy-setup/SKILL.md +136 -0
  1704. package/skills/vn-scene-compose/SKILL.md +234 -0
  1705. package/skills/vn-script/SKILL.md +140 -0
  1706. package/skills/vn-script/references/renpy-cheatsheet.md +169 -0
  1707. package/skills/vn-testing/SKILL.md +178 -0
  1708. package/skills/vn-ui-design/SKILL.md +220 -0
  1709. package/skills/web-security/SKILL.md +92 -0
  1710. package/skills/web-security/references/csp-and-frontend.md +36 -0
  1711. package/skills/webhooks/SKILL.md +102 -0
  1712. package/skills/websocket-realtime-rooms/SKILL.md +46 -0
  1713. package/skills/websocket-realtime-rooms/references/anti-patterns-checklist.md +27 -0
  1714. package/skills/websocket-realtime-rooms/references/auth-security.md +9 -0
  1715. package/skills/websocket-realtime-rooms/references/client-implementation.md +15 -0
  1716. package/skills/websocket-realtime-rooms/references/heartbeat-reconnect-backpressure.md +17 -0
  1717. package/skills/weekly-digest/SKILL.md +51 -0
  1718. package/skills/worktree-isolation/README.md +193 -0
  1719. package/skills/worktree-isolation/SKILL.md +87 -0
  1720. package/skills/worktree-isolation/scripts/apply.py +178 -0
  1721. package/skills/worktree-isolation/scripts/lib.py +371 -0
  1722. package/skills/worktree-isolation-setup/README.md +137 -0
  1723. package/skills/worktree-isolation-setup/SKILL.md +192 -0
  1724. package/skills/worktree-isolation-setup/scripts/apply.py +178 -0
  1725. package/skills/worktree-isolation-setup/scripts/install_hook.py +118 -0
  1726. package/skills/worktree-isolation-setup/scripts/lib.py +371 -0
  1727. package/skills/x-twitter-growth/SKILL.md +91 -0
  1728. package/skills/x-twitter-growth/references/algorithm-signals.md +70 -0
  1729. package/skills/x-twitter-growth/scripts/competitor_analyzer.py +235 -0
  1730. package/skills/x-twitter-growth/scripts/content_planner.py +210 -0
  1731. package/skills/x-twitter-growth/scripts/growth_tracker.py +259 -0
  1732. package/skills/x-twitter-growth/scripts/profile_auditor.py +294 -0
  1733. package/skills/x-twitter-growth/scripts/tweet_composer.py +290 -0
  1734. package/skills/xlsx-generator/SKILL.md +135 -0
  1735. package/skills/xlsx-generator/references/create.md +691 -0
  1736. package/skills/xlsx-generator/references/edit.md +684 -0
  1737. package/skills/xlsx-generator/references/fix.md +37 -0
  1738. package/skills/xlsx-generator/references/format.md +768 -0
  1739. package/skills/xlsx-generator/references/ooxml-cheatsheet.md +231 -0
  1740. package/skills/xlsx-generator/references/read-analyze.md +97 -0
  1741. package/skills/xlsx-generator/references/validate.md +772 -0
  1742. package/skills/xlsx-generator/scripts/formula_check.py +422 -0
  1743. package/skills/xlsx-generator/scripts/libreoffice_recalc.py +248 -0
  1744. package/skills/xlsx-generator/scripts/shared_strings_builder.py +163 -0
  1745. package/skills/xlsx-generator/scripts/style_audit.py +575 -0
  1746. package/skills/xlsx-generator/scripts/xlsx_add_column.py +395 -0
  1747. package/skills/xlsx-generator/scripts/xlsx_insert_row.py +274 -0
  1748. package/skills/xlsx-generator/scripts/xlsx_pack.py +87 -0
  1749. package/skills/xlsx-generator/scripts/xlsx_reader.py +362 -0
  1750. package/skills/xlsx-generator/scripts/xlsx_shift_rows.py +396 -0
  1751. package/skills/xlsx-generator/scripts/xlsx_unpack.py +130 -0
  1752. package/skills/xlsx-generator/templates/minimal_xlsx/[Content_Types].xml +9 -0
  1753. package/skills/xlsx-generator/templates/minimal_xlsx/_rels/.rels +6 -0
  1754. package/skills/xlsx-generator/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
  1755. package/skills/xlsx-generator/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
  1756. package/skills/xlsx-generator/templates/minimal_xlsx/xl/styles.xml +160 -0
  1757. package/skills/xlsx-generator/templates/minimal_xlsx/xl/workbook.xml +30 -0
  1758. package/skills/xlsx-generator/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
  1759. package/templates/gamedev/architecture-decision-record.md +176 -0
  1760. package/templates/gamedev/art-bible.md +80 -0
  1761. package/templates/gamedev/concept-doc-from-prototype.md +304 -0
  1762. package/templates/gamedev/difficulty-curve.md +330 -0
  1763. package/templates/gamedev/economy-model.md +130 -0
  1764. package/templates/gamedev/faction-design.md +166 -0
  1765. package/templates/gamedev/game-concept.md +316 -0
  1766. package/templates/gamedev/game-design-document.md +219 -0
  1767. package/templates/gamedev/game-pillars.md +313 -0
  1768. package/templates/gamedev/hud-design.md +505 -0
  1769. package/templates/gamedev/level-design-document.md +111 -0
  1770. package/templates/gamedev/narrative-character-sheet.md +111 -0
  1771. package/templates/gamedev/pitch-document.md +140 -0
  1772. package/templates/gamedev/player-journey.md +357 -0
  1773. package/templates/gamedev/project-stage-report.md +199 -0
  1774. package/templates/gamedev/sound-bible.md +130 -0
  1775. package/templates/gamedev/systems-index.md +146 -0
  1776. package/templates/gamedev/technical-design-document.md +96 -0
  1777. package/templates/gamedev/test-evidence.md +86 -0
  1778. package/templates/gamedev/test-plan.md +144 -0
@@ -0,0 +1,1542 @@
1
+ - **Key**: Multi-pass rendering requires creating framebuffers and textures, switching the render target from screen to texture
2
+
3
+ ### WebGL2 Multi-Pass Rendering Complete Template
4
+
5
+ Below is a complete standalone HTML template demonstrating how to set up WebGL2 double buffering (ping-pong) for physics simulation:
6
+
7
+ **IMPORTANT: WebGL2 ping-pong core rule: The texture bound to the write-target framebuffer must never simultaneously serve as input for any iChannel.** Violating this rule causes undefined behavior (typically all-black/all-zero output).
8
+
9
+ For simulations requiring "current frame" and "previous frame" two time steps (such as the wave equation), use **dual-channel encoding**: R channel stores current height, G channel stores previous frame height. This way only one buffer is read from (iChannel0 = currentBuf), writing to another buffer (nextBuf), avoiding read-write conflicts.
10
+
11
+ ```html
12
+ <!DOCTYPE html>
13
+ <html>
14
+ <head><meta charset="utf-8"><title>GPU Physics</title>
15
+ <style>body{margin:0;overflow:hidden}canvas{display:block;width:100vw;height:100vh}</style>
16
+ </head>
17
+ <body><canvas id="c"></canvas>
18
+ <script>
19
+ const canvas = document.getElementById('c');
20
+ const gl = canvas.getContext('webgl2', { antialias: false });
21
+ if (!gl) { document.body.innerHTML = 'WebGL2 not supported'; throw new Error('No WebGL2'); }
22
+
23
+ function resize() {
24
+ canvas.width = window.innerWidth;
25
+ canvas.height = window.innerHeight;
26
+ }
27
+ window.addEventListener('resize', resize);
28
+ resize();
29
+
30
+ function createShader(type, src) {
31
+ const s = gl.createShader(type);
32
+ gl.shaderSource(s, src);
33
+ gl.compileShader(s);
34
+ if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) {
35
+ console.error(gl.getShaderInfoLog(s));
36
+ gl.deleteShader(s);
37
+ return null;
38
+ }
39
+ return s;
40
+ }
41
+ function createProgram(vsSrc, fsSrc) {
42
+ const vs = createShader(gl.VERTEX_SHADER, vsSrc);
43
+ const fs = createShader(gl.FRAGMENT_SHADER, fsSrc);
44
+ if (!vs || !fs) return null;
45
+ const p = gl.createProgram();
46
+ gl.attachShader(p, vs);
47
+ gl.attachShader(p, fs);
48
+ gl.linkProgram(p);
49
+ if (!gl.getProgramParameter(p, gl.LINK_STATUS)) {
50
+ console.error(gl.getProgramInfoLog(p));
51
+ return null;
52
+ }
53
+ return p;
54
+ }
55
+
56
+ const vsQuad = `#version 300 es
57
+ in vec2 position;
58
+ out vec2 vUv;
59
+ void main() {
60
+ vUv = position * 0.5 + 0.5;
61
+ gl_Position = vec4(position, 0.0, 1.0);
62
+ }`;
63
+
64
+ // === Buffer Pass Shader (physics simulation) ===
65
+ // IMPORTANT: Only uses iChannel0 (reads currentBuf), writes to nextBuf
66
+ // R channel = current height, G channel = previous frame height (dual-channel encoding avoids read-write conflict)
67
+ // IMPORTANT: RGBA8 compatible: use encode/decode to map signed values to [0,1], ensuring SwiftShader/no-float-texture environments work correctly
68
+ const fsBuffer = `#version 300 es
69
+ precision highp float;
70
+ uniform sampler2D iChannel0;
71
+ uniform vec2 iResolution;
72
+ uniform float iTime;
73
+ uniform int iFrame;
74
+ uniform int useFloatTex;
75
+ in vec2 vUv;
76
+ out vec4 fragColor;
77
+
78
+ float decode(float v) { return useFloatTex == 1 ? v : v * 2.0 - 1.0; }
79
+ float encode(float v) { return useFloatTex == 1 ? v : v * 0.5 + 0.5; }
80
+
81
+ void main() {
82
+ vec2 texel = 1.0 / iResolution;
83
+
84
+ vec2 raw = texture(iChannel0, vUv).xy;
85
+ float current = decode(raw.x);
86
+ float previous = decode(raw.y);
87
+
88
+ float left = decode(texture(iChannel0, vUv - vec2(texel.x, 0.0)).x);
89
+ float right = decode(texture(iChannel0, vUv + vec2(texel.x, 0.0)).x);
90
+ float down = decode(texture(iChannel0, vUv - vec2(0.0, texel.y)).x);
91
+ float up = decode(texture(iChannel0, vUv + vec2(0.0, texel.y)).x);
92
+
93
+ float laplacian = left + right + down + up - 4.0 * current;
94
+ float next = 2.0 * current - previous + 0.25 * laplacian;
95
+ next *= 0.995;
96
+ next *= min(1.0, float(iFrame));
97
+
98
+ fragColor = vec4(encode(next), encode(current), 0.0, 1.0);
99
+ }`;
100
+
101
+ const fsImage = `#version 300 es
102
+ precision highp float;
103
+ uniform sampler2D iChannel0;
104
+ uniform vec2 iResolution;
105
+ uniform int useFloatTex;
106
+ in vec2 vUv;
107
+ out vec4 fragColor;
108
+
109
+ float decode(float v) { return useFloatTex == 1 ? v : v * 2.0 - 1.0; }
110
+
111
+ void main() {
112
+ vec2 uv = vUv;
113
+ vec2 texel = 1.0 / iResolution;
114
+
115
+ float val = decode(texture(iChannel0, uv).x);
116
+
117
+ vec3 col = vec3(val * 0.5 + 0.5);
118
+ col += vec3(0.1, 0.15, 0.2);
119
+
120
+ fragColor = vec4(col, 1.0);
121
+ }`;
122
+
123
+ const progBuffer = createProgram(vsQuad, fsBuffer);
124
+ const progImage = createProgram(vsQuad, fsImage);
125
+
126
+ const ext = gl.getExtension('EXT_color_buffer_float');
127
+ const useFloat = !!ext;
128
+
129
+ function createFramebuffer(width, height) {
130
+ const tex = gl.createTexture();
131
+ gl.bindTexture(gl.TEXTURE_2D, tex);
132
+
133
+ const internalFormat = useFloat ? gl.RGBA32F : gl.RGBA8;
134
+ const format = gl.RGBA;
135
+ const type = useFloat ? gl.FLOAT : gl.UNSIGNED_BYTE;
136
+
137
+ gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, width, height, 0, format, type, null);
138
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
139
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
140
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
141
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
142
+
143
+ const fb = gl.createFramebuffer();
144
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
145
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
146
+
147
+ return { fb, tex };
148
+ }
149
+
150
+ const SIM_W = 512, SIM_H = 512;
151
+ let bufA = createFramebuffer(SIM_W, SIM_H);
152
+ let bufB = createFramebuffer(SIM_W, SIM_H);
153
+
154
+ const quadVao = gl.createVertexArray();
155
+ gl.bindVertexArray(quadVao);
156
+ const quadBuf = gl.createBuffer();
157
+ gl.bindBuffer(gl.ARRAY_BUFFER, quadBuf);
158
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1,-1, 1,-1, -1,1, 1,1]), gl.STATIC_DRAW);
159
+ const posLoc = gl.getAttribLocation(progBuffer, 'position');
160
+ gl.enableVertexAttribArray(posLoc);
161
+ gl.vertexAttribPointer(posLoc, 2, gl.FLOAT, false, 0, 0);
162
+
163
+ // === Render loop ===
164
+ // IMPORTANT: Key: currentBuf (read-only) and nextBuf (write-only) must be different buffers
165
+ let frame = 0;
166
+ function render(time) {
167
+ time *= 0.001;
168
+
169
+ const currentBuf = (frame % 2 === 0) ? bufA : bufB;
170
+ const nextBuf = (frame % 2 === 0) ? bufB : bufA;
171
+
172
+ // === Buffer Pass: read from currentBuf, write to nextBuf ===
173
+ gl.bindFramebuffer(gl.FRAMEBUFFER, nextBuf.fb);
174
+ gl.viewport(0, 0, SIM_W, SIM_H);
175
+ gl.useProgram(progBuffer);
176
+
177
+ gl.activeTexture(gl.TEXTURE0);
178
+ gl.bindTexture(gl.TEXTURE_2D, currentBuf.tex);
179
+ gl.uniform1i(gl.getUniformLocation(progBuffer, 'iChannel0'), 0);
180
+
181
+ gl.uniform2f(gl.getUniformLocation(progBuffer, 'iResolution'), SIM_W, SIM_H);
182
+ gl.uniform1f(gl.getUniformLocation(progBuffer, 'iTime'), time);
183
+ gl.uniform1i(gl.getUniformLocation(progBuffer, 'iFrame'), frame);
184
+ gl.uniform1i(gl.getUniformLocation(progBuffer, 'useFloatTex'), useFloat ? 1 : 0);
185
+
186
+ gl.bindVertexArray(quadVao);
187
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
188
+
189
+ // === Image Pass: render to screen ===
190
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
191
+ gl.viewport(0, 0, canvas.width, canvas.height);
192
+ gl.useProgram(progImage);
193
+
194
+ gl.activeTexture(gl.TEXTURE0);
195
+ gl.bindTexture(gl.TEXTURE_2D, nextBuf.tex);
196
+ gl.uniform1i(gl.getUniformLocation(progImage, 'iChannel0'), 0);
197
+ gl.uniform2f(gl.getUniformLocation(progImage, 'iResolution'), canvas.width, canvas.height);
198
+ gl.uniform1i(gl.getUniformLocation(progImage, 'useFloatTex'), useFloat ? 1 : 0);
199
+
200
+ gl.bindVertexArray(quadVao);
201
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
202
+
203
+ frame++;
204
+ requestAnimationFrame(render);
205
+ }
206
+ requestAnimationFrame(render);
207
+ </script></body></html>
208
+ ```
209
+
210
+ **IMPORTANT: Common errors**:
211
+ 1. **RGBA8 signed value truncation (fatal)**: Environments like SwiftShader that don't support `EXT_color_buffer_float` fall back to RGBA8 where values are clamped to [0,1]. Simulations requiring negative values (like the wave equation) will all zero out and produce a static image. **Must** use encode/decode functions: store as `v * 0.5 + 0.5`, read as `v * 2.0 - 1.0`, switching at runtime via `uniform int useFloatTex`. See the `encode()`/`decode()` functions in the template above
212
+ 2. **Ping-pong read-write conflict (fatal)**: When rendering to a framebuffer, the texture bound to that framebuffer cannot simultaneously serve as input. The wave equation uses dual-channel encoding (R=current, G=previous) requiring only one input buffer; cloth/particle systems read getpos/getvel both from iChannel0
213
+ 3. **Cloth rendering must use world coordinate projection (fatal)**: The cloth Image Pass cannot use `uv * vec2(SIZX, SIZY)` to map screen UV directly to grid ID. It must iterate over mesh faces, project vertex world coordinates to screen space via `worldToScreen()`, and perform triangle rasterization
214
+ 4. **Smoke brightness insufficient (fatal)**: Beer-Lambert absorption must be >=3.0, background color >=`vec3(0.06, 0.07, 0.10)`, smoke base color >=`vec3(0.35)`, add gamma correction `pow(col, vec3(0.85))`, source density >=3.0, density decay >=0.9995
215
+ 5. **GLSL reserved words**: `active`, `input`, `output`, `filter`, `sample`, `buffer`, `shared` cannot be used as variable names
216
+ 6. **viewport/iResolution**: Buffer pass uses simulation resolution, Image pass uses screen resolution. Cloth Image Pass getpos/getvel must use `iSimResolution`
217
+ 7. **GLSL type & math safety**: Cannot write `float / vec2`; `normalize(vec3(0))` produces NaN — check `length(v) > 0.0001` before calling
218
+ 8. **GLSL nested functions forbidden**: Functions cannot be defined inside other functions
219
+ 9. **JS variable declarations**: Ping-pong variables inside for loops must use `let`; in substeps, pass `iFrame` as `frame * substeps + substep`
220
+
221
+ # GPU Physics Simulation Skill
222
+
223
+ ## Use Cases
224
+
225
+ - Real-time physics simulation: waves, fluid smoke, cloth, rigid body collision, particle fluids
226
+ - Interactive physics effects: mouse force fields, ripples, pushing/pulling rigid bodies
227
+ - Scientific visualization: chaotic attractors, vortex dynamics, ship wave dispersion
228
+ - Iterative computations requiring "previous frame → next frame" state persistence
229
+
230
+ ## Core Principles
231
+
232
+ The core paradigm of GPU physics simulation is **Buffer Feedback**: physical state is stored in texture buffers, each frame reads the previous frame's state → computes → writes back, with each pixel processed independently in parallel.
233
+
234
+ ### Key Mathematical Tools
235
+
236
+ ```
237
+ Discrete Laplacian: ∇²f ≈ f(x+1,y) + f(x-1,y) + f(x,y+1) + f(x,y-1) - 4·f(x,y)
238
+ Semi-Lagrangian advection: f_new(x) = f_old(x - v·dt)
239
+ Spring force: F = k · (|Δx| - L₀) · normalize(Δx)
240
+ Damping force: F = c · dot(normalize(Δx), Δv) · normalize(Δx)
241
+ Vorticity confinement: curl = ∂v_x/∂y - ∂v_y/∂x
242
+ ```
243
+
244
+ ### Architecture Patterns
245
+
246
+ | Layer | Responsibility | ShaderToy Implementation |
247
+ |-------|---------------|--------------------------|
248
+ | **State Storage** | Encode physical quantities into textures | Buffer RGBA channels |
249
+ | **Solver** | Read old state → compute forces → integrate → write new state | Buffer Pass (can be chained iteratively) |
250
+ | **Rendering** | Visualize physical state | Image Pass |
251
+
252
+ ## Implementation Steps
253
+
254
+ ### Step 1: Ping-Pong Double Buffering (Correct WebGL2 Implementation)
255
+
256
+ **IMPORTANT: Key difference between ShaderToy and WebGL2**: In ShaderToy, Buffer A/B are two independent passes with separate write targets, so `iChannel0=self, iChannel1=other` doesn't conflict. But in WebGL2 with a single shader program doing ping-pong, the write-target texture cannot be read simultaneously.
257
+
258
+ **Solution: Dual-channel encoding** — R channel stores current height, G channel stores previous frame height, requiring only one input buffer:
259
+
260
+ ```glsl
261
+ // WebGL2 Wave Equation Buffer Pass
262
+ // IMPORTANT: Only iChannel0 (reads currentBuf), writes to nextBuf (must be different!)
263
+ // IMPORTANT: encode/decode ensures signed values aren't truncated under RGBA8 (no float textures)
264
+
265
+ uniform int useFloatTex;
266
+ float decode(float v) { return useFloatTex == 1 ? v : v * 2.0 - 1.0; }
267
+ float encode(float v) { return useFloatTex == 1 ? v : v * 0.5 + 0.5; }
268
+
269
+ void main() {
270
+ vec2 uv = vUv;
271
+ vec2 texel = 1.0 / iResolution;
272
+
273
+ vec2 raw = texture(iChannel0, uv).xy;
274
+ float current = decode(raw.x);
275
+ float previous = decode(raw.y);
276
+
277
+ float left = decode(texture(iChannel0, uv - vec2(texel.x, 0.0)).x);
278
+ float right = decode(texture(iChannel0, uv + vec2(texel.x, 0.0)).x);
279
+ float down = decode(texture(iChannel0, uv - vec2(0.0, texel.y)).x);
280
+ float up = decode(texture(iChannel0, uv + vec2(0.0, texel.y)).x);
281
+
282
+ float laplacian = left + right + down + up - 4.0 * current;
283
+ float next = 2.0 * current - previous + 0.25 * laplacian;
284
+ next *= 0.995;
285
+ next *= min(1.0, float(iFrame));
286
+
287
+ fragColor = vec4(encode(next), encode(current), 0.0, 1.0);
288
+ }
289
+ ```
290
+
291
+ Corresponding JS render loop (binds only one input texture):
292
+ ```js
293
+ const currentBuf = (frame % 2 === 0) ? bufA : bufB;
294
+ const nextBuf = (frame % 2 === 0) ? bufB : bufA;
295
+
296
+ gl.bindFramebuffer(gl.FRAMEBUFFER, nextBuf.fb); // write to nextBuf
297
+ gl.activeTexture(gl.TEXTURE0);
298
+ gl.bindTexture(gl.TEXTURE_2D, currentBuf.tex); // read from currentBuf
299
+ gl.uniform1i(gl.getUniformLocation(progBuffer, 'iChannel0'), 0);
300
+ gl.uniform1i(gl.getUniformLocation(progBuffer, 'useFloatTex'), useFloat ? 1 : 0);
301
+ // IMPORTANT: Do NOT bind iChannel1 to nextBuf/otherBuf!
302
+ ```
303
+
304
+ ### Step 2: Interaction-Driven (External Force Injection)
305
+
306
+ ```glsl
307
+ // Insert external forces before the wave equation computation (add to next)
308
+ float force = 0.0;
309
+ if (iMouse.z > 0.0)
310
+ {
311
+ vec2 fragCoord = vUv * iResolution;
312
+ force = smoothstep(4.5, 0.5, length(iMouse.xy - fragCoord));
313
+ }
314
+ else
315
+ {
316
+ // Procedural raindrops
317
+ vec2 fragCoord = vUv * iResolution;
318
+ float t = iTime * 2.0;
319
+ vec2 pos = fract(floor(t) * vec2(0.456665, 0.708618)) * iResolution;
320
+ float amp = 1.0 - step(0.05, fract(t));
321
+ force = -amp * smoothstep(2.5, 0.5, length(pos - fragCoord));
322
+ }
323
+
324
+ // Add external force after wave equation
325
+ next += force;
326
+ ```
327
+
328
+ ### Step 3: Height Field Rendering (Image Pass)
329
+
330
+ ```glsl
331
+ // IMPORTANT: Image Pass also needs decode
332
+ uniform int useFloatTex;
333
+ float decode(float v) { return useFloatTex == 1 ? v : v * 2.0 - 1.0; }
334
+
335
+ void main()
336
+ {
337
+ vec2 uv = vUv;
338
+ vec2 texel = 1.0 / iResolution;
339
+
340
+ float left = decode(texture(iChannel0, uv - vec2(texel.x, 0.0)).x);
341
+ float right = decode(texture(iChannel0, uv + vec2(texel.x, 0.0)).x);
342
+ float down = decode(texture(iChannel0, uv - vec2(0.0, texel.y)).x);
343
+ float up = decode(texture(iChannel0, uv + vec2(0.0, texel.y)).x);
344
+
345
+ vec3 normal = normalize(vec3((right - left) * 8.0, (up - down) * 8.0, 1.0));
346
+
347
+ vec3 light = normalize(vec3(0.2, -0.5, 0.7));
348
+ float diffuse = max(dot(normal, light), 0.0);
349
+ float spec = pow(max(-reflect(light, normal).z, 0.0), 32.0);
350
+
351
+ vec3 waterTint = vec3(0.05, 0.15, 0.3);
352
+ vec3 color = waterTint * (0.6 + 0.5 * diffuse) + vec3(1.0) * spec * 0.6;
353
+
354
+ fragColor = vec4(color, 1.0);
355
+ }
356
+ ```
357
+
358
+ ### Step 4: Chained Multi-Buffer Iteration (Fluid Solver)
359
+
360
+ Buffer A/B/C share the solver from a Common pass, iterating 3 times per frame:
361
+ ```glsl
362
+ // === Common Pass ===
363
+ #define dt 0.15
364
+ #define viscosityThreshold 0.64
365
+ #define vorticityThreshold 0.25
366
+
367
+ vec4 fluidSolver(sampler2D field, vec2 uv, vec2 step,
368
+ vec4 mouse, vec4 prevMouse)
369
+ {
370
+ float k = 0.2, s = k / dt;
371
+ vec4 c = textureLod(field, uv, 0.0);
372
+ vec4 fr = textureLod(field, uv + vec2(step.x, 0.0), 0.0);
373
+ vec4 fl = textureLod(field, uv - vec2(step.x, 0.0), 0.0);
374
+ vec4 ft = textureLod(field, uv + vec2(0.0, step.y), 0.0);
375
+ vec4 fd = textureLod(field, uv - vec2(0.0, step.y), 0.0);
376
+
377
+ vec3 ddx = (fr - fl).xyz * 0.5;
378
+ vec3 ddy = (ft - fd).xyz * 0.5;
379
+ float divergence = ddx.x + ddy.y;
380
+ vec2 densityDiff = vec2(ddx.z, ddy.z);
381
+
382
+ c.z -= dt * dot(vec3(densityDiff, divergence), c.xyz);
383
+
384
+ vec2 laplacian = fr.xy + fl.xy + ft.xy + fd.xy - 4.0 * c.xy;
385
+ vec2 viscosity = viscosityThreshold * laplacian;
386
+
387
+ vec2 densityInv = s * densityDiff;
388
+ vec2 uvHistory = uv - dt * c.xy * step;
389
+ c.xyw = textureLod(field, uvHistory, 0.0).xyw;
390
+
391
+ vec2 extForce = vec2(0.0);
392
+ if (mouse.z > 1.0 && prevMouse.z > 1.0)
393
+ {
394
+ vec2 drag = clamp((mouse.xy - prevMouse.xy) * step * 600.0, -10.0, 10.0);
395
+ vec2 p = uv - mouse.xy * step;
396
+ extForce += 0.001 / dot(p, p) * drag;
397
+ }
398
+
399
+ c.xy += dt * (viscosity - densityInv + extForce);
400
+ c.xy = max(vec2(0.0), abs(c.xy) - 5e-6) * sign(c.xy);
401
+
402
+ // Vorticity confinement
403
+ c.w = (fd.x - ft.x + fr.y - fl.y);
404
+ vec2 vorticity = vec2(abs(ft.w) - abs(fd.w), abs(fl.w) - abs(fr.w));
405
+ vorticity *= vorticityThreshold / (length(vorticity) + 1e-5) * c.w;
406
+ c.xy += vorticity;
407
+
408
+ c.y *= smoothstep(0.5, 0.48, abs(uv.y - 0.5));
409
+ c.x *= smoothstep(0.5, 0.49, abs(uv.x - 0.5));
410
+ c = clamp(c, vec4(-24.0, -24.0, 0.5, -0.25), vec4(24.0, 24.0, 3.0, 0.25));
411
+ return c;
412
+ }
413
+
414
+ // === Buffer A / B / C ===
415
+ void mainImage(out vec4 fragColor, in vec2 fragCoord)
416
+ {
417
+ vec2 uv = fragCoord / iResolution.xy;
418
+ vec2 stepSize = 1.0 / iResolution.xy;
419
+ vec4 prevMouse = textureLod(iChannel0, vec2(0.0), 0.0);
420
+ fragColor = fluidSolver(iChannel0, uv, stepSize, iMouse, prevMouse);
421
+ if (fragCoord.y < 1.0) fragColor = iMouse; // store mouse state
422
+ }
423
+ ```
424
+
425
+ ### Step 5: Particle Data Layout (Cloth/N-Body)
426
+
427
+ Texture regions are partitioned to store different attributes:
428
+ ```glsl
429
+ #define SIZX 128.0
430
+ #define SIZY 64.0
431
+
432
+ // IMPORTANT: Cloth/particle systems: getpos/getvel both read from iChannel0 (not iChannel1)
433
+ // Because iChannel0 = currentBuf (read-only), write target is nextBuf (separate buffer)
434
+ // IMPORTANT: Use +0.5 to sample texel centers (not +0.01)
435
+ vec3 getpos(vec2 id) {
436
+ return texture(iChannel0, (id + 0.5) / iResolution.xy).xyz;
437
+ }
438
+ vec3 getvel(vec2 id) {
439
+ return texture(iChannel0, (id + 0.5 + vec2(SIZX, 0.0)) / iResolution.xy).xyz;
440
+ }
441
+
442
+ void mainImage(out vec4 fragColor, in vec2 fragCoord)
443
+ {
444
+ vec2 fc = floor(fragCoord);
445
+ vec2 c = fc;
446
+ c.x = fract(c.x / SIZX) * SIZX;
447
+
448
+ vec3 pos = getpos(c);
449
+ vec3 vel = getvel(c);
450
+ // ... physics computation ...
451
+ fragColor = vec4(fc.x >= SIZX ? vel : pos, 0.0);
452
+ }
453
+ ```
454
+
455
+ ### Step 6: Spring-Damper Constraints
456
+
457
+ ```glsl
458
+ const float SPRING_K = 0.15;
459
+ const float DAMPER_C = 0.10;
460
+ const float GRAVITY = 0.0022;
461
+
462
+ vec3 pos, vel, ovel;
463
+ vec2 c;
464
+
465
+ void edge(vec2 dif)
466
+ {
467
+ if ((dif + c).x < 0.0 || (dif + c).x >= SIZX ||
468
+ (dif + c).y < 0.0 || (dif + c).y >= SIZY) return;
469
+
470
+ float restLen = length(dif);
471
+ vec3 posdif = getpos(dif + c) - pos;
472
+ vec3 veldif = getvel(dif + c) - ovel;
473
+
474
+ float plen = length(posdif);
475
+ if (plen < 0.0001) return;
476
+ vec3 dir = posdif / plen;
477
+
478
+ vel += dir * clamp(plen - restLen, -1.0, 1.0) * SPRING_K;
479
+ vel += dir * dot(dir, veldif) * DAMPER_C;
480
+ }
481
+
482
+ // Call 12 edges: 4 nearest neighbors + 4 diagonal + 4 skip
483
+ // edge(vec2(0,1)); edge(vec2(0,-1)); edge(vec2(1,0)); edge(vec2(-1,0));
484
+ // edge(vec2(1,1)); edge(vec2(-1,-1));
485
+ // edge(vec2(0,2)); edge(vec2(0,-2)); edge(vec2(2,0)); edge(vec2(-2,0));
486
+ // edge(vec2(2,-2)); edge(vec2(-2,2));
487
+ ```
488
+
489
+ ### Step 7: N-Body Vortex Particles (Biot-Savart)
490
+
491
+ ```glsl
492
+ #define N 20
493
+ #define Nf float(N)
494
+ #define MARKERS 0.90
495
+
496
+ float STRENGTH = 1e3 * 0.25 / (1.0 - MARKERS) * sqrt(30.0 / Nf);
497
+ #define tex(i,j) texture(iChannel1, (vec2(i,j) + 0.5) / iResolution.xy)
498
+ #define W(i,j) tex(i, j + N).z
499
+
500
+ void mainImage(out vec4 O, vec2 U)
501
+ {
502
+ vec2 T = floor(U / Nf);
503
+ U = mod(U, Nf);
504
+ vec2 F = vec2(0.0);
505
+
506
+ for (int j = 0; j < N; j++)
507
+ for (int i = 0; i < N; i++)
508
+ {
509
+ float w = W(i, j);
510
+ vec2 d = tex(i, j).xy - O.xy;
511
+ d = (fract(0.5 + d / iResolution.xy) - 0.5) * iResolution.xy;
512
+ float l = dot(d, d);
513
+ if (l > 1e-5)
514
+ F += vec2(-d.y, d.x) * w / l;
515
+ }
516
+
517
+ O.zw = STRENGTH * F;
518
+ O.xy += O.zw * dt;
519
+ O.xy = mod(O.xy, iResolution.xy);
520
+ }
521
+ ```
522
+
523
+ ### Step 8: Global State Storage (Specific Pixel)
524
+
525
+ ```glsl
526
+ void mainImage(out vec4 fragColor, in vec2 fragCoord)
527
+ {
528
+ // Pixel (0,0) stores global state (e.g., Lorenz attractor position)
529
+ if (floor(fragCoord) == vec2(0, 0))
530
+ {
531
+ if (iFrame == 0) {
532
+ fragColor = vec4(0.1, 0.001, 0.0, 0.0);
533
+ } else {
534
+ vec3 state = texture(iChannel0, vec2(0.0)).xyz;
535
+ for (float i = 0.0; i < 96.0; i++) {
536
+ vec3 deriv;
537
+ deriv.x = 10.0 * (state.y - state.x);
538
+ deriv.y = state.x * (28.0 - state.z) - state.y;
539
+ deriv.z = state.x * state.y - 8.0/3.0 * state.z;
540
+ state += deriv * 0.016 * 0.2;
541
+ }
542
+ fragColor = vec4(state, 0.0);
543
+ }
544
+ return;
545
+ }
546
+
547
+ // Other pixels: accumulate trajectory distance field
548
+ vec3 last = texture(iChannel0, vec2(0.0)).xyz;
549
+ float d = 1e6;
550
+ for (float i = 0.0; i < 96.0; i++) {
551
+ vec3 next = Integrate(last, 0.016 * 0.2);
552
+ d = min(d, dfLine(last.xz * 0.015, next.xz * 0.015, uv));
553
+ last = next;
554
+ }
555
+ float c = 0.5 * smoothstep(1.0 / iResolution.y, 0.0, d);
556
+ vec3 prev = texture(iChannel0, fragCoord / iResolution.xy).rgb;
557
+ fragColor = vec4(vec3(c) + prev * 0.99, 0.0);
558
+ }
559
+ ```
560
+
561
+ ## Complete Code Template
562
+
563
+ 2D wave simulation: double buffering + mouse interaction + procedural raindrops + height field water surface rendering.
564
+
565
+ **Ping-Pong setup**: bufA and bufB alternate; the shader only reads from iChannel0 (currentBuf) and writes to nextBuf. R=current height, G=previous frame height.
566
+
567
+ ```glsl
568
+ // === Buffer Pass (Wave Equation) ===
569
+ // IMPORTANT: Only uses iChannel0 = currentBuf (read-only), writes to nextBuf
570
+ // IMPORTANT: encode/decode ensures signed values aren't truncated under RGBA8 (SwiftShader compatible)
571
+
572
+ uniform int useFloatTex;
573
+ float decode(float v) { return useFloatTex == 1 ? v : v * 2.0 - 1.0; }
574
+ float encode(float v) { return useFloatTex == 1 ? v : v * 0.5 + 0.5; }
575
+
576
+ #define DAMPING 0.995
577
+ #define WAVE_SPEED 0.25
578
+
579
+ void mainImage(out vec4 fragColor, in vec2 fragCoord)
580
+ {
581
+ vec2 uv = fragCoord / iResolution.xy;
582
+ vec2 texel = 1.0 / iResolution.xy;
583
+
584
+ float current = decode(texture(iChannel0, uv).x);
585
+ float previous = decode(texture(iChannel0, uv).y);
586
+
587
+ float left = decode(texture(iChannel0, uv - vec2(texel.x, 0.0)).x);
588
+ float right = decode(texture(iChannel0, uv + vec2(texel.x, 0.0)).x);
589
+ float down = decode(texture(iChannel0, uv - vec2(0.0, texel.y)).x);
590
+ float up = decode(texture(iChannel0, uv + vec2(0.0, texel.y)).x);
591
+
592
+ float force = 0.0;
593
+ if (iMouse.z > 0.0) {
594
+ force = smoothstep(4.5, 0.5, length(iMouse.xy - fragCoord));
595
+ } else {
596
+ float t = iTime * 2.0;
597
+ vec2 pos = fract(floor(t) * vec2(0.456665, 0.708618)) * iResolution.xy;
598
+ float amp = 1.0 - step(0.05, fract(t));
599
+ force = -amp * smoothstep(2.5, 0.5, length(pos - fragCoord));
600
+ }
601
+
602
+ float laplacian = left + right + down + up - 4.0 * current;
603
+ float next = 2.0 * current - previous + WAVE_SPEED * laplacian;
604
+ next += force;
605
+ next *= DAMPING;
606
+ next *= min(1.0, float(iFrame));
607
+
608
+ fragColor = vec4(encode(next), encode(current), 0.0, 0.0);
609
+ }
610
+ ```
611
+
612
+ ```glsl
613
+ // === Image Pass ===
614
+ // IMPORTANT: Also needs decode to correctly read signed height values
615
+
616
+ uniform int useFloatTex;
617
+ float decode(float v) { return useFloatTex == 1 ? v : v * 2.0 - 1.0; }
618
+
619
+ #define SPECULAR_POWER 32.0
620
+
621
+ void mainImage(out vec4 fragColor, in vec2 fragCoord)
622
+ {
623
+ vec2 uv = fragCoord / iResolution.xy;
624
+ vec2 texel = 1.0 / iResolution.xy;
625
+
626
+ float left = decode(texture(iChannel0, uv - vec2(texel.x, 0.0)).x);
627
+ float right = decode(texture(iChannel0, uv + vec2(texel.x, 0.0)).x);
628
+ float down = decode(texture(iChannel0, uv - vec2(0.0, texel.y)).x);
629
+ float up = decode(texture(iChannel0, uv + vec2(0.0, texel.y)).x);
630
+
631
+ vec3 normal = normalize(vec3((right - left) * 8.0, (up - down) * 8.0, 1.0));
632
+
633
+ vec3 light = normalize(vec3(0.3, 0.6, 0.8));
634
+ vec3 viewDir = vec3(0.0, 0.0, 1.0);
635
+ float diffuse = max(dot(normal, light), 0.0);
636
+ vec3 reflectDir = reflect(-light, normal);
637
+ float spec = pow(max(dot(reflectDir, viewDir), 0.0), SPECULAR_POWER);
638
+
639
+ float h = decode(texture(iChannel0, uv).x);
640
+ vec3 deepColor = vec3(0.02, 0.06, 0.15);
641
+ vec3 shallowColor = vec3(0.05, 0.18, 0.30);
642
+ vec3 waterBase = mix(deepColor, shallowColor, clamp(abs(h) * 3.0, 0.0, 1.0));
643
+
644
+ float fresnel = pow(1.0 - max(dot(normal, viewDir), 0.0), 3.0);
645
+ vec3 skyColor = vec3(0.4, 0.55, 0.75);
646
+ vec3 color = waterBase * (0.6 + 0.5 * diffuse);
647
+ color = mix(color, skyColor, fresnel * 0.3);
648
+ color += vec3(1.0, 0.95, 0.85) * spec * 0.6;
649
+
650
+ fragColor = vec4(color, 1.0);
651
+ }
652
+ ```
653
+
654
+ ## Common Variants
655
+
656
+ ### Variant 1: Euler Fluid (Smoke/Ink)
657
+
658
+ Smoke/ink simulation requires a complete Buffer Pass (fluid solver) + Image Pass (volume rendering). Buffer stores xy=velocity, z=density, w=curl.
659
+
660
+ ```glsl
661
+ // === Buffer Pass (Fluid Solver) ===
662
+ // Requires 3 chained buffer iterations (A→B→C→Image), each buffer executes the same fluidSolver
663
+ #define dt 0.15
664
+ #define viscosityCoeff 0.64
665
+ #define vorticityCoeff 0.25
666
+
667
+ vec4 fluidSolver(sampler2D field, vec2 uv, vec2 step, vec4 mouse, vec4 prevMouse) {
668
+ float k = 0.2, s = k / dt;
669
+ vec4 c = textureLod(field, uv, 0.0);
670
+ vec4 fr = textureLod(field, uv + vec2(step.x, 0.0), 0.0);
671
+ vec4 fl = textureLod(field, uv - vec2(step.x, 0.0), 0.0);
672
+ vec4 ft = textureLod(field, uv + vec2(0.0, step.y), 0.0);
673
+ vec4 fd = textureLod(field, uv - vec2(0.0, step.y), 0.0);
674
+
675
+ vec3 ddx = (fr - fl).xyz * 0.5;
676
+ vec3 ddy = (ft - fd).xyz * 0.5;
677
+ float divergence = ddx.x + ddy.y;
678
+ vec2 densityDiff = vec2(ddx.z, ddy.z);
679
+
680
+ c.z -= dt * dot(vec3(densityDiff, divergence), c.xyz);
681
+
682
+ vec2 laplacian = fr.xy + fl.xy + ft.xy + fd.xy - 4.0 * c.xy;
683
+ vec2 viscosity = viscosityCoeff * laplacian;
684
+ vec2 densityInv = s * densityDiff;
685
+
686
+ // Semi-Lagrangian advection
687
+ vec2 uvHistory = uv - dt * c.xy * step;
688
+ c.xyw = textureLod(field, uvHistory, 0.0).xyw;
689
+
690
+ // Buoyancy (key for smoke: higher density means stronger upward force)
691
+ float buoyancy = 0.15 * c.z;
692
+ c.y += buoyancy * dt;
693
+
694
+ // Wind force (horizontal offset)
695
+ c.x += 0.02 * sin(uv.y * 6.28 + float(iFrame) * 0.02) * c.z * dt;
696
+
697
+ // Mouse/procedural source injection
698
+ vec2 extForce = vec2(0.0);
699
+ float densitySource = 0.0;
700
+ if (mouse.z > 1.0 && prevMouse.z > 1.0) {
701
+ vec2 drag = clamp((mouse.xy - prevMouse.xy) * step * 600.0, -10.0, 10.0);
702
+ vec2 p = uv - mouse.xy * step;
703
+ float influence = 0.001 / (dot(p, p) + 1e-6);
704
+ extForce += influence * drag;
705
+ densitySource += influence * 0.5;
706
+ } else {
707
+ // Procedural bottom smoke sources (multi-point + wide range, ensuring dense visibility)
708
+ float srcStrength = 0.0;
709
+ for (float si = -1.0; si <= 1.0; si += 1.0) {
710
+ float srcX = 0.5 + si * 0.12 + 0.08 * sin(float(iFrame) * 0.013 + si * 2.0);
711
+ vec2 srcPos = vec2(srcX, 0.06);
712
+ float d = length(uv - srcPos);
713
+ srcStrength += smoothstep(0.12, 0.0, d) * 3.5;
714
+ }
715
+ densitySource += srcStrength;
716
+ extForce.y += srcStrength * 0.4;
717
+ }
718
+
719
+ c.xy += dt * (viscosity - densityInv + extForce);
720
+ c.z = max(c.z + densitySource * dt, 0.0);
721
+
722
+ // Vorticity confinement (preserves smoke detail and curling structures)
723
+ c.w = (fd.x - ft.x + fr.y - fl.y);
724
+ vec2 vortGrad = vec2(abs(ft.w) - abs(fd.w), abs(fl.w) - abs(fr.w));
725
+ vortGrad *= vorticityCoeff / (length(vortGrad) + 1e-5) * c.w;
726
+ c.xy += vortGrad;
727
+
728
+ c.y *= smoothstep(0.5, 0.48, abs(uv.y - 0.5));
729
+ c.x *= smoothstep(0.5, 0.49, abs(uv.x - 0.5));
730
+ c.z *= 0.9995; // density decay (closer to 1.0 = denser and more persistent smoke)
731
+ c = clamp(c, vec4(-24.0, -24.0, 0.0, -0.25), vec4(24.0, 24.0, 5.0, 0.25));
732
+ return c;
733
+ }
734
+
735
+ void main() {
736
+ vec2 uv = vUv;
737
+ vec2 stepSize = 1.0 / iResolution;
738
+ vec4 prevMouse = textureLod(iChannel0, vec2(0.0), 0.0);
739
+ fragColor = fluidSolver(iChannel0, uv, stepSize, iMouse, prevMouse);
740
+ if (floor(vUv * iResolution).y < 1.0) fragColor = iMouse;
741
+ }
742
+ ```
743
+
744
+ ```glsl
745
+ // === Image Pass (Smoke Rendering) ===
746
+ // Reads density (z channel) and velocity (xy channels) from buffer, renders dense layered smoke + light scattering
747
+ // IMPORTANT: Smoke brightness key: absorption coefficient must be large enough (>=3.0), background not too dark, lightTransmit must not over-attenuate
748
+
749
+ void main() {
750
+ vec2 uv = vUv;
751
+ vec4 data = texture(iChannel0, uv);
752
+ float density = data.z;
753
+ vec2 vel = data.xy;
754
+
755
+ // Multi-layer sampling for added depth (accumulate density from nearby pixels)
756
+ float layeredDensity = density;
757
+ vec2 texel = 1.0 / iResolution;
758
+ for (float i = 1.0; i <= 4.0; i += 1.0) {
759
+ float scale = i * 3.0;
760
+ layeredDensity += texture(iChannel0, uv + vec2(texel.x * scale, 0.0)).z * 0.4;
761
+ layeredDensity += texture(iChannel0, uv - vec2(texel.x * scale, 0.0)).z * 0.4;
762
+ layeredDensity += texture(iChannel0, uv + vec2(0.0, texel.y * scale)).z * 0.4;
763
+ layeredDensity += texture(iChannel0, uv - vec2(0.0, texel.y * scale)).z * 0.4;
764
+ }
765
+ layeredDensity /= 4.0;
766
+
767
+ // Beer-Lambert absorption (denser regions are more opaque)
768
+ float absorption = 1.0 - exp(-layeredDensity * 3.5);
769
+
770
+ // Light scattering: accumulate density from light direction for simple ray marching
771
+ vec2 lightDir2D = normalize(vec2(0.3, 1.0));
772
+ float lightAccum = 0.0;
773
+ for (float s = 1.0; s <= 8.0; s += 1.0) {
774
+ vec2 sampleUV = uv + lightDir2D * texel * s * 5.0;
775
+ lightAccum += texture(iChannel0, sampleUV).z;
776
+ }
777
+ float lightTransmit = exp(-lightAccum * 0.25);
778
+
779
+ // Velocity field drives color variation (faster flow regions are brighter)
780
+ float speed = length(vel);
781
+
782
+ // Smoke color: gray-white tones, affected by lighting
783
+ vec3 smokeBase = mix(vec3(0.35, 0.32, 0.30), vec3(0.85, 0.82, 0.78), lightTransmit);
784
+ smokeBase += vec3(1.0, 0.85, 0.6) * lightTransmit * absorption * 0.5;
785
+ smokeBase += vec3(0.3, 0.2, 0.1) * speed * 3.0;
786
+
787
+ // Background gradient (blue-gray, bright enough to contrast with smoke)
788
+ vec3 bg = mix(vec3(0.06, 0.07, 0.10), vec3(0.15, 0.18, 0.25), uv.y);
789
+
790
+ vec3 col = mix(bg, smokeBase, absorption);
791
+
792
+ // Bottom light source glow
793
+ float glow = smoothstep(0.3, 0.0, uv.y) * 0.4;
794
+ col += vec3(1.0, 0.6, 0.2) * glow * (0.5 + 0.5 * absorption);
795
+
796
+ // Gamma correction to ensure smoke visibility
797
+ col = pow(col, vec3(0.85));
798
+
799
+ fragColor = vec4(col, 1.0);
800
+ }
801
+ ```
802
+
803
+ Smoke simulation requires 3 chained buffer iterations (same fluidSolver) for enhanced convergence. JS side creates bufA/bufB/bufC, executing A→B→C→Image each frame.
804
+
805
+ ### Variant 2: Cloth Simulation (Mass-Spring-Damper)
806
+
807
+ Cloth simulation requires 2 buffers for ping-pong alternating read/write, with a JS render loop using a for loop to execute multiple substeps (e.g., 4 steps). Data structure:
808
+ - Left half of texture [0, SIZX) stores position xyz
809
+ - Right half of texture [SIZX, 2*SIZX) stores velocity xyz
810
+ - **Note**: When using substep loops, buffer variables in the render function must use `let` to allow reassignment within the loop
811
+ - **Key**: Image Pass `getpos`/`getvel` functions must use the simulation resolution (`iSimResolution`) for UV calculation, not the screen resolution
812
+
813
+ ```glsl
814
+ // WebGL2-adapted cloth simulation Buffer Pass
815
+ // IMPORTANT: getpos/getvel both read from iChannel0! iChannel0 = currentBuf (read-only), writes to nextBuf
816
+
817
+ #define SIZX 128.0
818
+ #define SIZY 64.0
819
+ const float SPRING_K = 0.15;
820
+ const float DAMPER_C = 0.10;
821
+ const float GRAVITY = 0.0022;
822
+
823
+ vec3 pos, vel, ovel;
824
+ vec2 c;
825
+
826
+ vec3 getpos(vec2 id) {
827
+ return texture(iChannel0, (id + 0.5) / iResolution.xy).xyz;
828
+ }
829
+ vec3 getvel(vec2 id) {
830
+ return texture(iChannel0, (id + 0.5 + vec2(SIZX, 0.0)) / iResolution.xy).xyz;
831
+ }
832
+
833
+ void edge(vec2 dif) {
834
+ if ((dif + c).x < 0.0 || (dif + c).x >= SIZX ||
835
+ (dif + c).y < 0.0 || (dif + c).y >= SIZY) return;
836
+ vec3 posdif = getpos(dif + c) - pos;
837
+ vec3 veldif = getvel(dif + c) - ovel;
838
+ float restLen = length(dif);
839
+ float plen = length(posdif);
840
+ if (plen < 0.0001) return;
841
+ vec3 dir = posdif / plen;
842
+ vel += dir * clamp(plen - restLen, -1.0, 1.0) * SPRING_K;
843
+ vel += dir * dot(dir, veldif) * DAMPER_C;
844
+ }
845
+
846
+ void mainImage(out vec4 fragColor, in vec2 fragCoord) {
847
+ vec2 fc = floor(fragCoord);
848
+ c = fc;
849
+ c.x = fract(c.x / SIZX) * SIZX;
850
+
851
+ // iFrame should pass the global frame count: frame * SUBSTEPS + substep
852
+ if (iFrame < 4) {
853
+ vec2 p = vec2(c.x / SIZX, c.y / SIZY);
854
+ vec3 initialPos = vec3(p.x * 1.6 - 0.3, -p.y * 0.8 + 0.6, 0.0);
855
+ fragColor = vec4(fc.x >= SIZX ? vec3(0.0) : initialPos, 0.0);
856
+ return;
857
+ }
858
+
859
+ pos = getpos(c);
860
+ vel = getvel(c);
861
+ ovel = vel;
862
+
863
+ edge(vec2(0,1)); edge(vec2(0,-1)); edge(vec2(1,0)); edge(vec2(-1,0));
864
+ edge(vec2(1,1)); edge(vec2(-1,-1));
865
+ edge(vec2(0,2)); edge(vec2(0,-2)); edge(vec2(2,0)); edge(vec2(-2,0));
866
+
867
+ vel.y -= GRAVITY;
868
+
869
+ vec3 ballPos = vec3(0.35, 0.3, 0.0);
870
+ float ballRadius = 0.15;
871
+ vec3 toBall = pos - ballPos;
872
+ float distToBall = length(toBall);
873
+ if (distToBall < ballRadius && distToBall > 0.0001) {
874
+ vec3 pushDir = toBall / distToBall;
875
+ pos = ballPos + pushDir * ballRadius;
876
+ vel -= pushDir * dot(pushDir, vel);
877
+ }
878
+
879
+ if (c.y == 0.0) {
880
+ pos = vec3(fc.x * 0.85 / SIZX, 0.0, 0.0);
881
+ vel = vec3(0.0);
882
+ }
883
+
884
+ pos += vel;
885
+
886
+ fragColor = vec4(fc.x >= SIZX ? vel : pos, 0.0);
887
+ }
888
+ ```
889
+
890
+ #### Cloth Rendering Pass (Image Pass) Complete Template
891
+
892
+ **IMPORTANT: Cloth rendering core principle**: After physics simulation, cloth particle world positions (pos.xy) will deviate from their initial grid positions (due to gravity, collisions, etc.). The Image Pass must render based on particles' **actual world positions** projected to the screen — you cannot use `uv * vec2(SIZX, SIZY)` to directly map screen UV to grid ID (that would produce scattered dots/fragments rather than a continuous cloth surface).
893
+
894
+ Correct approach: iterate over all cloth mesh cells, project each cell's 4 vertex world coordinates to screen space, determine if the current pixel falls within that quad, then interpolate shading.
895
+
896
+ ```glsl
897
+ // IMPORTANT: Key: must pass additional uniform vec2 iSimResolution (simulation resolution)
898
+ // getpos/getvel use iSimResolution, not iResolution
899
+ // Rendering method: iterate cloth mesh, project world coordinates to screen coordinates
900
+
901
+ #define SIZX 128.0
902
+ #define SIZY 64.0
903
+
904
+ in vec2 vUv;
905
+ out vec4 fragColor;
906
+
907
+ uniform sampler2D iChannel0;
908
+ uniform vec2 iResolution;
909
+ uniform vec2 iSimResolution;
910
+ uniform float iTime;
911
+
912
+ vec3 getpos(vec2 id) {
913
+ return texture(iChannel0, (id + 0.5) / iSimResolution).xyz;
914
+ }
915
+ vec3 getvel(vec2 id) {
916
+ return texture(iChannel0, (id + 0.5 + vec2(SIZX, 0.0)) / iSimResolution).xyz;
917
+ }
918
+
919
+ vec2 worldToScreen(vec3 p) {
920
+ return vec2(p.x * 0.5 + 0.5, 1.0 - (p.y * 0.5 + 0.5));
921
+ }
922
+
923
+ vec3 calcNormal(vec2 cell) {
924
+ vec3 pL = getpos(vec2(max(cell.x - 1.0, 0.0), cell.y));
925
+ vec3 pR = getpos(vec2(min(cell.x + 1.0, SIZX - 1.0), cell.y));
926
+ vec3 pD = getpos(vec2(cell.x, max(cell.y - 1.0, 0.0)));
927
+ vec3 pU = getpos(vec2(cell.x, min(cell.y + 1.0, SIZY - 1.0)));
928
+ vec3 tanX = pR - pL;
929
+ vec3 tanY = pU - pD;
930
+ vec3 normal = cross(tanX, tanY);
931
+ float nlen = length(normal);
932
+ if (nlen < 0.0001) return vec3(0.0, 0.0, -1.0);
933
+ normal /= nlen;
934
+ if (normal.z > 0.0) normal = -normal;
935
+ return normal;
936
+ }
937
+
938
+ float cross2d(vec2 a, vec2 b) { return a.x * b.y - a.y * b.x; }
939
+
940
+ bool pointInTriangle(vec2 p, vec2 a, vec2 b, vec2 c, out vec3 bary) {
941
+ float d00 = dot(b - a, b - a);
942
+ float d01 = dot(b - a, c - a);
943
+ float d11 = dot(c - a, c - a);
944
+ float d20 = dot(p - a, b - a);
945
+ float d21 = dot(p - a, c - a);
946
+ float denom = d00 * d11 - d01 * d01;
947
+ if (abs(denom) < 1e-10) return false;
948
+ float v = (d11 * d20 - d01 * d21) / denom;
949
+ float w = (d00 * d21 - d01 * d20) / denom;
950
+ float u = 1.0 - v - w;
951
+ bary = vec3(u, v, w);
952
+ return u >= -0.01 && v >= -0.01 && w >= -0.01;
953
+ }
954
+
955
+ void main() {
956
+ vec2 uv = vUv;
957
+ vec2 fragCoord = vUv * iResolution;
958
+
959
+ vec3 bgTop = vec3(0.05, 0.08, 0.15);
960
+ vec3 bgBot = vec3(0.02, 0.03, 0.08);
961
+ vec3 bg = mix(bgBot, bgTop, uv.y);
962
+ vec3 col = bg;
963
+ float closestZ = 1e6;
964
+
965
+ vec3 ballPos = vec3(0.35 + sin(iTime * 0.6) * 0.15, 0.3 + cos(iTime * 0.4) * 0.1, 0.0);
966
+ float ballRadius = 0.12;
967
+ vec2 ballScreen = worldToScreen(ballPos);
968
+ float ballDist = length(uv - ballScreen);
969
+ if (ballDist < ballRadius * 0.6) {
970
+ float shade = smoothstep(ballRadius * 0.6, ballRadius * 0.15, ballDist);
971
+ vec3 ballColor = vec3(0.95, 0.35, 0.2);
972
+ vec2 bnXY = (uv - ballScreen) / (ballRadius * 0.6);
973
+ float bnZ = sqrt(max(0.0, 1.0 - dot(bnXY, bnXY)));
974
+ vec3 bn = normalize(vec3(bnXY, bnZ));
975
+ float bdiff = max(dot(bn, normalize(vec3(0.5, 0.8, 1.0))), 0.0);
976
+ float bspec = pow(max(dot(normalize(bn + normalize(vec3(0.5, 0.8, 1.0))), vec3(0.0, 0.0, 1.0)), 0.0), 32.0);
977
+ col = ballColor * (0.3 + 0.7 * bdiff) + vec3(1.0) * bspec * 0.4;
978
+ closestZ = ballPos.z - ballRadius;
979
+ }
980
+
981
+ for (float cy = 0.0; cy < SIZY - 1.0; cy += 1.0) {
982
+ for (float cx = 0.0; cx < SIZX - 1.0; cx += 1.0) {
983
+ vec3 p00 = getpos(vec2(cx, cy));
984
+ vec3 p10 = getpos(vec2(cx + 1.0, cy));
985
+ vec3 p01 = getpos(vec2(cx, cy + 1.0));
986
+ vec3 p11 = getpos(vec2(cx + 1.0, cy + 1.0));
987
+
988
+ vec2 s00 = worldToScreen(p00);
989
+ vec2 s10 = worldToScreen(p10);
990
+ vec2 s01 = worldToScreen(p01);
991
+ vec2 s11 = worldToScreen(p11);
992
+
993
+ vec2 bboxMin = min(min(s00, s10), min(s01, s11));
994
+ vec2 bboxMax = max(max(s00, s10), max(s01, s11));
995
+ if (uv.x < bboxMin.x - 0.01 || uv.x > bboxMax.x + 0.01 ||
996
+ uv.y < bboxMin.y - 0.01 || uv.y > bboxMax.y + 0.01) continue;
997
+
998
+ vec3 bary;
999
+ vec2 cellId = vec2(cx, cy);
1000
+ bool hit = false;
1001
+ float interpZ = 0.0;
1002
+
1003
+ if (pointInTriangle(uv, s00, s10, s01, bary)) {
1004
+ hit = true;
1005
+ interpZ = bary.x * p00.z + bary.y * p10.z + bary.z * p01.z;
1006
+ } else if (pointInTriangle(uv, s10, s11, s01, bary)) {
1007
+ hit = true;
1008
+ interpZ = bary.x * p10.z + bary.y * p11.z + bary.z * p01.z;
1009
+ }
1010
+
1011
+ if (hit && interpZ < closestZ) {
1012
+ closestZ = interpZ;
1013
+ vec3 normal = calcNormal(cellId);
1014
+ vec3 lightDir = normalize(vec3(0.5, 0.8, 1.0));
1015
+ float diff = max(dot(normal, lightDir), 0.0);
1016
+ float diffBack = max(dot(-normal, lightDir), 0.0);
1017
+ vec3 halfDir = normalize(lightDir + vec3(0.0, 0.0, 1.0));
1018
+ float spec = pow(max(dot(normal, halfDir), 0.0), 32.0);
1019
+
1020
+ float stretch = length(getvel(cellId));
1021
+ vec3 clothColor1 = vec3(0.25, 0.55, 0.95);
1022
+ vec3 clothColor2 = vec3(0.95, 0.35, 0.45);
1023
+ vec3 clothColor = mix(clothColor1, clothColor2, clamp(stretch * 10.0, 0.0, 1.0));
1024
+
1025
+ vec2 gridFrac = fract(vec2(cx, cy) * 0.125);
1026
+ float checker = step(0.5, fract(gridFrac.x + gridFrac.y));
1027
+ clothColor *= 0.85 + 0.15 * checker;
1028
+
1029
+ col = clothColor * (0.3 + 0.6 * diff + 0.25 * diffBack) + vec3(1.0) * spec * 0.35;
1030
+ }
1031
+ }
1032
+ }
1033
+
1034
+ fragColor = vec4(col, 1.0);
1035
+ }
1036
+ ```
1037
+
1038
+ **IMPORTANT: Cloth rendering performance note**: The above template uses a double loop to iterate all mesh faces for triangle rasterization. For a 128x64 mesh this is about 8000 quads per frame. If GPU performance is insufficient, reduce mesh resolution (e.g., SIZX=64, SIZY=32) or use `texelFetch` instead of `texture` for speed. Another approach is to partition the cloth into blocks (e.g., 4x4), each with an independent bounding box for early culling.
1039
+
1040
+ #### Cloth Simulation Complete HTML Template (Multi-Substep Iteration)
1041
+
1042
+ **IMPORTANT: Key notes (must-read for cloth template)**:
1043
+ 1. **No read-write conflict**: In the Buffer Pass, iChannel0 is bound to currentBuf (read-only), the write target is nextBuf (separate buffer). getpos/getvel both read from iChannel0
1044
+ 2. **iSimResolution uniform**: Image Pass must have `uniform vec2 iSimResolution` passing `(SIM_W, SIM_H)`, and `getpos`/`getvel` internally use `iSimResolution` for UV calculation
1045
+ 3. **iFrame value passing**: In substep loops, iFrame should pass `frame * SUBSTEPS + substep`, ensuring the initialization condition `iFrame < SUBSTEPS` only triggers on the first frame
1046
+ 4. **Substeps use 2-buffer ping-pong + JS for loop**: Do not use 4 buffers; use 2 buffers alternating at the JS level
1047
+
1048
+ ```html
1049
+ <!DOCTYPE html>
1050
+ <html>
1051
+ <head><meta charset="utf-8"><title>GPU Cloth Simulation</title>
1052
+ <style>body{margin:0;overflow:hidden}canvas{display:block;width:100vw;height:100vh}</style>
1053
+ </head>
1054
+ <body><canvas id="c"></canvas>
1055
+ <script>
1056
+ const canvas = document.getElementById('c');
1057
+ const gl = canvas.getContext('webgl2', { antialias: false });
1058
+ if (!gl) { document.body.innerHTML = 'WebGL2 not supported'; throw new Error('No WebGL2'); }
1059
+
1060
+ const ext = gl.getExtension('EXT_color_buffer_float');
1061
+ const isFloat = !!ext;
1062
+
1063
+ function resize() {
1064
+ canvas.width = window.innerWidth;
1065
+ canvas.height = window.innerHeight;
1066
+ }
1067
+ window.addEventListener('resize', resize);
1068
+ resize();
1069
+
1070
+ function createShader(type, src) {
1071
+ const s = gl.createShader(type);
1072
+ gl.shaderSource(s, src);
1073
+ gl.compileShader(s);
1074
+ if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) {
1075
+ console.error('Shader compile error:', gl.getShaderInfoLog(s));
1076
+ gl.deleteShader(s);
1077
+ return null;
1078
+ }
1079
+ return s;
1080
+ }
1081
+ function createProgram(vsSrc, fsSrc) {
1082
+ const vs = createShader(gl.VERTEX_SHADER, vsSrc);
1083
+ const fs = createShader(gl.FRAGMENT_SHADER, fsSrc);
1084
+ if (!vs || !fs) return null;
1085
+ const p = gl.createProgram();
1086
+ gl.attachShader(p, vs);
1087
+ gl.attachShader(p, fs);
1088
+ gl.linkProgram(p);
1089
+ if (!gl.getProgramParameter(p, gl.LINK_STATUS)) {
1090
+ console.error('Program link error:', gl.getProgramInfoLog(p));
1091
+ return null;
1092
+ }
1093
+ return p;
1094
+ }
1095
+
1096
+ const vsQuad = `#version 300 es
1097
+ in vec2 position;
1098
+ out vec2 vUv;
1099
+ void main() {
1100
+ vUv = position * 0.5 + 0.5;
1101
+ gl_Position = vec4(position, 0.0, 1.0);
1102
+ }`;
1103
+
1104
+ const SUBSTEPS = 4;
1105
+
1106
+ const fsBuffer = `#version 300 es
1107
+ precision highp float;
1108
+
1109
+ uniform sampler2D iChannel0;
1110
+ uniform vec2 iResolution;
1111
+ uniform float iTime;
1112
+ uniform int iFrame;
1113
+ uniform vec4 iMouse;
1114
+
1115
+ in vec2 vUv;
1116
+ out vec4 fragColor;
1117
+
1118
+ #define SIZX 128.0
1119
+ #define SIZY 64.0
1120
+ const float SPRING_K = 0.18;
1121
+ const float DAMPER_C = 0.12;
1122
+ const float GRAVITY = 0.0018;
1123
+
1124
+ vec3 getBallPos(float time) {
1125
+ float t = time * 0.5;
1126
+ return vec3(0.35 + sin(t * 1.2) * 0.15, 0.3 + cos(t * 0.8) * 0.1, 0.0);
1127
+ }
1128
+ float getBallRadius() { return 0.12; }
1129
+
1130
+ vec3 pos, vel, ovel;
1131
+ vec2 c;
1132
+
1133
+ // IMPORTANT: Both read from iChannel0 (currentBuf), not iChannel1
1134
+ vec3 getpos(vec2 id) {
1135
+ return texture(iChannel0, (id + 0.5) / iResolution.xy).xyz;
1136
+ }
1137
+
1138
+ vec3 getvel(vec2 id) {
1139
+ return texture(iChannel0, (id + 0.5 + vec2(SIZX, 0.0)) / iResolution.xy).xyz;
1140
+ }
1141
+
1142
+ void edge(vec2 dif) {
1143
+ vec2 neighbor = c + dif;
1144
+ if (neighbor.x < 0.0 || neighbor.x >= SIZX || neighbor.y < 0.0 || neighbor.y >= SIZY) return;
1145
+
1146
+ vec3 posdif = getpos(neighbor) - pos;
1147
+ vec3 veldif = getvel(neighbor) - ovel;
1148
+ float restLen = length(dif);
1149
+
1150
+ float plen = length(posdif);
1151
+ if (plen < 0.0001) return;
1152
+ vec3 dir = posdif / plen;
1153
+ vel += dir * clamp(plen - restLen, -1.0, 1.0) * SPRING_K;
1154
+ vel += dir * dot(dir, veldif) * DAMPER_C;
1155
+ }
1156
+
1157
+ void main() {
1158
+ vec2 fc = floor(vUv * iResolution.xy);
1159
+ c = fc;
1160
+ c.x = fract(c.x / SIZX) * SIZX;
1161
+
1162
+ if (iFrame < ${SUBSTEPS}) {
1163
+ vec2 p = vec2(c.x / SIZX, c.y / SIZY);
1164
+ vec3 initialPos = vec3(p.x * 1.6 - 0.3, -p.y * 0.8 + 0.6, 0.0);
1165
+ fragColor = vec4(fc.x >= SIZX ? vec3(0.0) : initialPos, 0.0);
1166
+ return;
1167
+ }
1168
+
1169
+ pos = getpos(c);
1170
+ vel = getvel(c);
1171
+ ovel = vel;
1172
+
1173
+ edge(vec2(0.0, 1.0));
1174
+ edge(vec2(0.0, -1.0));
1175
+ edge(vec2(1.0, 0.0));
1176
+ edge(vec2(-1.0, 0.0));
1177
+ edge(vec2(1.0, 1.0));
1178
+ edge(vec2(-1.0, -1.0));
1179
+ edge(vec2(1.0, -1.0));
1180
+ edge(vec2(-1.0, 1.0));
1181
+ edge(vec2(0.0, 2.0));
1182
+ edge(vec2(0.0, -2.0));
1183
+ edge(vec2(2.0, 0.0));
1184
+ edge(vec2(-2.0, 0.0));
1185
+
1186
+ vel.y -= GRAVITY;
1187
+
1188
+ vec3 ballPos = getBallPos(iTime);
1189
+ float ballRadius = getBallRadius();
1190
+ vec3 toBall = pos - ballPos;
1191
+ float dist = length(toBall);
1192
+ if (dist < ballRadius && dist > 0.0001) {
1193
+ vec3 pushDir = toBall / dist;
1194
+ pos = ballPos + pushDir * ballRadius;
1195
+ vel -= pushDir * dot(pushDir, vel) * 1.2;
1196
+ }
1197
+
1198
+ if (iMouse.z > 0.0) {
1199
+ vec2 mousePos = iMouse.xy / iResolution.xy;
1200
+ mousePos.y = 1.0 - mousePos.y;
1201
+ vec2 p = vec2(c.x / SIZX, c.y / SIZY);
1202
+ float mouseDist = length(p - mousePos);
1203
+ if (mouseDist < 0.15) {
1204
+ vec3 pushDir = vec3(mousePos - p, 0.2);
1205
+ float plen = length(pushDir);
1206
+ if (plen > 0.0001) {
1207
+ vel += (pushDir / plen) * (0.15 - mouseDist) * 0.5;
1208
+ }
1209
+ }
1210
+ }
1211
+
1212
+ if (c.y < 1.0) {
1213
+ pos = vec3(fc.x * 1.6 / SIZX - 0.3, 0.6, 0.0);
1214
+ vel = vec3(0.0);
1215
+ }
1216
+
1217
+ vel *= 0.998;
1218
+ pos += vel;
1219
+
1220
+ fragColor = vec4(fc.x >= SIZX ? vel : pos, 0.0);
1221
+ }`;
1222
+
1223
+ const fsImage = `#version 300 es
1224
+ precision highp float;
1225
+
1226
+ uniform sampler2D iChannel0;
1227
+ uniform vec2 iResolution;
1228
+ uniform vec2 iSimResolution;
1229
+ uniform float iTime;
1230
+ uniform vec4 iMouse;
1231
+
1232
+ in vec2 vUv;
1233
+ out vec4 fragColor;
1234
+
1235
+ #define SIZX 128.0
1236
+ #define SIZY 64.0
1237
+
1238
+ vec3 getBallPos(float time) {
1239
+ float t = time * 0.5;
1240
+ return vec3(0.35 + sin(t * 1.2) * 0.15, 0.3 + cos(t * 0.8) * 0.1, 0.0);
1241
+ }
1242
+ float getBallRadius() { return 0.12; }
1243
+
1244
+ vec3 getpos(vec2 id) {
1245
+ return texture(iChannel0, (id + 0.5) / iSimResolution).xyz;
1246
+ }
1247
+ vec3 getvel(vec2 id) {
1248
+ return texture(iChannel0, (id + 0.5 + vec2(SIZX, 0.0)) / iSimResolution).xyz;
1249
+ }
1250
+
1251
+ vec2 worldToScreen(vec3 p) {
1252
+ return vec2(p.x * 0.5 + 0.5, 1.0 - (p.y * 0.5 + 0.5));
1253
+ }
1254
+
1255
+ vec3 calcNormal(vec2 cell) {
1256
+ vec3 pL = getpos(vec2(max(cell.x - 1.0, 0.0), cell.y));
1257
+ vec3 pR = getpos(vec2(min(cell.x + 1.0, SIZX - 1.0), cell.y));
1258
+ vec3 pD = getpos(vec2(cell.x, max(cell.y - 1.0, 0.0)));
1259
+ vec3 pU = getpos(vec2(cell.x, min(cell.y + 1.0, SIZY - 1.0)));
1260
+ vec3 tanX = pR - pL;
1261
+ vec3 tanY = pU - pD;
1262
+ vec3 normal = cross(tanX, tanY);
1263
+ float nlen = length(normal);
1264
+ if (nlen < 0.0001) return vec3(0.0, 0.0, -1.0);
1265
+ normal /= nlen;
1266
+ if (normal.z > 0.0) normal = -normal;
1267
+ return normal;
1268
+ }
1269
+
1270
+ float cross2d(vec2 a, vec2 b) { return a.x * b.y - a.y * b.x; }
1271
+
1272
+ bool pointInTriangle(vec2 p, vec2 a, vec2 b, vec2 c, out vec3 bary) {
1273
+ float d00 = dot(b - a, b - a);
1274
+ float d01 = dot(b - a, c - a);
1275
+ float d11 = dot(c - a, c - a);
1276
+ float d20 = dot(p - a, b - a);
1277
+ float d21 = dot(p - a, c - a);
1278
+ float denom = d00 * d11 - d01 * d01;
1279
+ if (abs(denom) < 1e-10) return false;
1280
+ float v = (d11 * d20 - d01 * d21) / denom;
1281
+ float w = (d00 * d21 - d01 * d20) / denom;
1282
+ float u = 1.0 - v - w;
1283
+ bary = vec3(u, v, w);
1284
+ return u >= -0.01 && v >= -0.01 && w >= -0.01;
1285
+ }
1286
+
1287
+ void main() {
1288
+ vec2 uv = vUv;
1289
+ vec3 bgTop = vec3(0.05, 0.08, 0.15);
1290
+ vec3 bgBot = vec3(0.02, 0.03, 0.08);
1291
+ vec3 bg = mix(bgBot, bgTop, uv.y);
1292
+ vec3 col = bg;
1293
+ float closestZ = 1e6;
1294
+
1295
+ vec3 ballPos = getBallPos(iTime);
1296
+ float ballRadius = getBallRadius();
1297
+ vec2 ballScreen = worldToScreen(ballPos);
1298
+ float bsDist = length(uv - ballScreen);
1299
+ if (bsDist < ballRadius * 0.6) {
1300
+ float shade = smoothstep(ballRadius * 0.6, ballRadius * 0.15, bsDist);
1301
+ vec3 ballColor = vec3(0.95, 0.35, 0.2);
1302
+ vec2 bnXY = (uv - ballScreen) / (ballRadius * 0.6);
1303
+ float bnZ = sqrt(max(0.0, 1.0 - dot(bnXY, bnXY)));
1304
+ vec3 bn = normalize(vec3(bnXY, bnZ));
1305
+ vec3 ldir = normalize(vec3(0.5, 0.8, 1.0));
1306
+ float bdiff = max(dot(bn, ldir), 0.0);
1307
+ float bspec = pow(max(dot(normalize(bn + ldir), vec3(0.0,0.0,1.0)), 0.0), 32.0);
1308
+ col = ballColor * (0.3 + 0.7 * bdiff) + vec3(1.0) * bspec * 0.4;
1309
+ closestZ = ballPos.z - ballRadius;
1310
+ }
1311
+
1312
+ for (float cy = 0.0; cy < SIZY - 1.0; cy += 1.0) {
1313
+ for (float cx = 0.0; cx < SIZX - 1.0; cx += 1.0) {
1314
+ vec3 p00 = getpos(vec2(cx, cy));
1315
+ vec3 p10 = getpos(vec2(cx + 1.0, cy));
1316
+ vec3 p01 = getpos(vec2(cx, cy + 1.0));
1317
+ vec3 p11 = getpos(vec2(cx + 1.0, cy + 1.0));
1318
+ vec2 s00 = worldToScreen(p00);
1319
+ vec2 s10 = worldToScreen(p10);
1320
+ vec2 s01 = worldToScreen(p01);
1321
+ vec2 s11 = worldToScreen(p11);
1322
+ vec2 bMin = min(min(s00, s10), min(s01, s11));
1323
+ vec2 bMax = max(max(s00, s10), max(s01, s11));
1324
+ if (uv.x < bMin.x - 0.01 || uv.x > bMax.x + 0.01 ||
1325
+ uv.y < bMin.y - 0.01 || uv.y > bMax.y + 0.01) continue;
1326
+ vec3 bary;
1327
+ bool hit = false;
1328
+ float interpZ = 0.0;
1329
+ vec2 cellId = vec2(cx, cy);
1330
+ if (pointInTriangle(uv, s00, s10, s01, bary)) {
1331
+ hit = true;
1332
+ interpZ = bary.x * p00.z + bary.y * p10.z + bary.z * p01.z;
1333
+ } else if (pointInTriangle(uv, s10, s11, s01, bary)) {
1334
+ hit = true;
1335
+ interpZ = bary.x * p10.z + bary.y * p11.z + bary.z * p01.z;
1336
+ }
1337
+ if (hit && interpZ < closestZ) {
1338
+ closestZ = interpZ;
1339
+ vec3 normal = calcNormal(cellId);
1340
+ vec3 ldir = normalize(vec3(0.5, 0.8, 1.0));
1341
+ float diff = max(dot(normal, ldir), 0.0);
1342
+ float diffBack = max(dot(-normal, ldir), 0.0);
1343
+ float spec = pow(max(dot(normalize(normal + ldir), vec3(0.0,0.0,1.0)), 0.0), 32.0);
1344
+ float stretch = length(getvel(cellId));
1345
+ vec3 cc1 = vec3(0.25, 0.55, 0.95);
1346
+ vec3 cc2 = vec3(0.95, 0.35, 0.45);
1347
+ vec3 cc = mix(cc1, cc2, clamp(stretch * 10.0, 0.0, 1.0));
1348
+ float checker = step(0.5, fract(cx * 0.125 + cy * 0.125));
1349
+ cc *= 0.85 + 0.15 * checker;
1350
+ col = cc * (0.3 + 0.6 * diff + 0.25 * diffBack) + vec3(1.0) * spec * 0.35;
1351
+ }
1352
+ }
1353
+ }
1354
+
1355
+ col = col / (col + vec3(1.0));
1356
+ col = pow(col, vec3(0.9));
1357
+ fragColor = vec4(col, 1.0);
1358
+ }`;
1359
+
1360
+ const progBuffer = createProgram(vsQuad, fsBuffer);
1361
+ const progImage = createProgram(vsQuad, fsImage);
1362
+
1363
+ function createFramebuffer(width, height) {
1364
+ const tex = gl.createTexture();
1365
+ gl.bindTexture(gl.TEXTURE_2D, tex);
1366
+
1367
+ const internalFormat = isFloat ? gl.RGBA32F : gl.RGBA8;
1368
+ const format = gl.RGBA;
1369
+ const type = isFloat ? gl.FLOAT : gl.UNSIGNED_BYTE;
1370
+
1371
+ gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, width, height, 0, format, type, null);
1372
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
1373
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
1374
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
1375
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
1376
+
1377
+ const fb = gl.createFramebuffer();
1378
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
1379
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
1380
+
1381
+ const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
1382
+ if (status !== gl.FRAMEBUFFER_COMPLETE) {
1383
+ console.error('Framebuffer incomplete:', status);
1384
+ }
1385
+
1386
+ return { fb, tex };
1387
+ }
1388
+
1389
+ const SIM_W = 256;
1390
+ const SIM_H = 128;
1391
+ let bufA = createFramebuffer(SIM_W, SIM_H);
1392
+ let bufB = createFramebuffer(SIM_W, SIM_H);
1393
+
1394
+ const quadVao = gl.createVertexArray();
1395
+ gl.bindVertexArray(quadVao);
1396
+ const quadBuf = gl.createBuffer();
1397
+ gl.bindBuffer(gl.ARRAY_BUFFER, quadBuf);
1398
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1,-1, 1,-1, -1,1, 1,1]), gl.STATIC_DRAW);
1399
+ const posLoc = gl.getAttribLocation(progBuffer, 'position');
1400
+ gl.enableVertexAttribArray(posLoc);
1401
+ gl.vertexAttribPointer(posLoc, 2, gl.FLOAT, false, 0, 0);
1402
+
1403
+ let mouseState = [0, 0, 0, 0];
1404
+ canvas.addEventListener('mousemove', (e) => {
1405
+ mouseState[0] = e.clientX;
1406
+ mouseState[1] = e.clientY;
1407
+ });
1408
+ canvas.addEventListener('mousedown', () => { mouseState[2] = 1; });
1409
+ canvas.addEventListener('mouseup', () => { mouseState[2] = 0; });
1410
+
1411
+ let frame = 0;
1412
+ let globalStep = 0;
1413
+ function render(time) {
1414
+ time *= 0.001;
1415
+
1416
+ for (let substep = 0; substep < SUBSTEPS; substep++) {
1417
+ // IMPORTANT: ping-pong: read from currentBuf (iChannel0), write to nextBuf
1418
+ let currentBuf = (globalStep % 2 === 0) ? bufA : bufB;
1419
+ let nextBuf = (globalStep % 2 === 0) ? bufB : bufA;
1420
+
1421
+ gl.bindFramebuffer(gl.FRAMEBUFFER, nextBuf.fb);
1422
+ gl.viewport(0, 0, SIM_W, SIM_H);
1423
+ gl.useProgram(progBuffer);
1424
+
1425
+ // IMPORTANT: Only bind iChannel0 = currentBuf (read-only)
1426
+ gl.activeTexture(gl.TEXTURE0);
1427
+ gl.bindTexture(gl.TEXTURE_2D, currentBuf.tex);
1428
+ gl.uniform1i(gl.getUniformLocation(progBuffer, 'iChannel0'), 0);
1429
+
1430
+ gl.uniform2f(gl.getUniformLocation(progBuffer, 'iResolution'), SIM_W, SIM_H);
1431
+ gl.uniform1f(gl.getUniformLocation(progBuffer, 'iTime'), time);
1432
+ gl.uniform1i(gl.getUniformLocation(progBuffer, 'iFrame'), frame * SUBSTEPS + substep);
1433
+ gl.uniform4f(gl.getUniformLocation(progBuffer, 'iMouse'),
1434
+ mouseState[0], mouseState[1], mouseState[2], mouseState[3]);
1435
+
1436
+ gl.bindVertexArray(quadVao);
1437
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
1438
+
1439
+ globalStep++;
1440
+ }
1441
+
1442
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
1443
+ gl.viewport(0, 0, canvas.width, canvas.height);
1444
+ gl.useProgram(progImage);
1445
+
1446
+ const finalBuf = (globalStep % 2 === 0) ? bufA : bufB;
1447
+
1448
+ gl.activeTexture(gl.TEXTURE0);
1449
+ gl.bindTexture(gl.TEXTURE_2D, finalBuf.tex);
1450
+ gl.uniform1i(gl.getUniformLocation(progImage, 'iChannel0'), 0);
1451
+
1452
+ gl.uniform2f(gl.getUniformLocation(progImage, 'iResolution'), canvas.width, canvas.height);
1453
+ gl.uniform2f(gl.getUniformLocation(progImage, 'iSimResolution'), SIM_W, SIM_H);
1454
+ gl.uniform1f(gl.getUniformLocation(progImage, 'iTime'), time);
1455
+ gl.uniform4f(gl.getUniformLocation(progImage, 'iMouse'),
1456
+ mouseState[0], mouseState[1], mouseState[2], mouseState[3]);
1457
+
1458
+ gl.bindVertexArray(quadVao);
1459
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
1460
+
1461
+ frame++;
1462
+ requestAnimationFrame(render);
1463
+ }
1464
+
1465
+ requestAnimationFrame(render);
1466
+ </script></body></html>
1467
+ ```
1468
+
1469
+ ### Variant 3: Rigid Body Physics Engine (Box2D-lite on GPU)
1470
+
1471
+ ```glsl
1472
+ // Structured memory addressing: struct mapped to consecutive pixels
1473
+ int bodyAddress(int b_id) {
1474
+ return pixel_count_of_Globals + pixel_count_of_Body * b_id;
1475
+ }
1476
+ Body loadBody(sampler2D buff, int b_id) {
1477
+ int addr = bodyAddress(b_id);
1478
+ vec4 d0 = texelFetch(buff, address2D(res, addr), 0);
1479
+ vec4 d1 = texelFetch(buff, address2D(res, addr+1), 0);
1480
+ b.pos = d0.xy; b.vel = d0.zw;
1481
+ b.ang = d1.x; b.ang_vel = d1.y;
1482
+ }
1483
+
1484
+ // Contact impulse solver
1485
+ float v_n = dot(dv, contact.normal);
1486
+ float dp_n = contact.mass_n * (-v_n + contact.bias);
1487
+ dp_n = max(0.0, dp_n);
1488
+ body.vel += body.inv_mass * dp_n * contact.normal;
1489
+ ```
1490
+
1491
+ ### Variant 4: N-Body Vortex Particles
1492
+
1493
+ ```glsl
1494
+ // Biot-Savart kernel: v = w * (-dy, dx) / |d|²
1495
+ for (int j = 0; j < N; j++)
1496
+ for (int i = 0; i < N; i++) {
1497
+ float w = W(i, j);
1498
+ vec2 d = tex(i, j).xy - pos;
1499
+ d = (fract(0.5 + d / res) - 0.5) * res; // periodic boundary
1500
+ float l = dot(d, d);
1501
+ if (l > 1e-5) F += vec2(-d.y, d.x) * w / l;
1502
+ }
1503
+ ```
1504
+
1505
+ ### Variant 5: 3D SPH Particle Fluid
1506
+
1507
+ ```glsl
1508
+ // 2D texture mapping for 3D grid
1509
+ vec2 dim2from3(vec3 p3d) {
1510
+ float ny = floor(p3d.z / SCALE.x);
1511
+ float nx = floor(p3d.z) - ny * SCALE.x;
1512
+ return vec2(nx, ny) * size3d.xy + p3d.xy;
1513
+ }
1514
+
1515
+ // SPH pressure force + friction + surface tension
1516
+ float pressure = max(rho / rest_density - 1.0, 0.0);
1517
+ float SPH_F = force_coef_a * GD(d, 1.5) * pressure;
1518
+ float Friction = 0.45 * dot(dir, dvel) * GD(d, 1.5);
1519
+ float F = surface_tension * GD(d, surface_tension_rad);
1520
+ p.force += force_k * dir * (F + SPH_F + Friction) * irho / rest_density;
1521
+ ```
1522
+
1523
+ ## Performance & Composition
1524
+
1525
+ ### Performance Tips
1526
+ - Use `texelFetch` instead of `texture` to skip filtering; precompute `1.0/iResolution.xy`
1527
+ - N-Body: limit N to 20~30; passive marker particles (90%) skip force computation
1528
+ - Cloth multi-substep: use 2 buffers + JS for loop (do not use 4-buffer chain)
1529
+ - Adaptive precision: use larger time steps for distant regions
1530
+ - Data packing: bit operations for compression (5-bit exponent + 3x9-bit components)
1531
+ - Stability: `clamp` to prevent explosion, `smoothstep` for soft boundaries, damping 0.95~0.999
1532
+
1533
+ ### Composition Patterns
1534
+ - **Physics + post-processing**: wave refraction/caustics, fluid advection ink coloring, cloth ray tracing
1535
+ - **Physics + SDF rendering**: `sdBox`/`length-radius` to render rigid bodies/particles
1536
+ - **Physics + volume rendering**: density field trilinear interpolation → ray marching → lighting + shadows
1537
+ - **Multi-system coupling**: fluid driving rigid bodies, cloth collision bodies, particle↔field mutual driving (SPH/Biot-Savart)
1538
+ - **Physics + audio**: spectrum energy mapped as external force, low frequency drives large scale, high frequency drives small scale
1539
+
1540
+ ## Further Reading
1541
+
1542
+ Full step-by-step tutorial, mathematical derivations, and advanced usage in [reference](../reference/simulation-physics.md)