@heyai-rules/pilo-masterkit 1.2.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (708) hide show
  1. package/.agent/agents/PILO_MASTER.md +77 -77
  2. package/.agent/agents/backend-specialist.md +263 -263
  3. package/.agent/agents/code-archaeologist.md +106 -106
  4. package/.agent/agents/csharp-reviewer.md +101 -0
  5. package/.agent/agents/dart-build-resolver.md +201 -0
  6. package/.agent/agents/database-architect.md +226 -226
  7. package/.agent/agents/debugger.md +225 -225
  8. package/.agent/agents/devops-engineer.md +242 -242
  9. package/.agent/agents/documentation-writer.md +104 -104
  10. package/.agent/agents/explorer-agent.md +73 -73
  11. package/.agent/agents/frontend-specialist.md +593 -593
  12. package/.agent/agents/game-developer.md +162 -162
  13. package/.agent/agents/gan-evaluator.md +209 -0
  14. package/.agent/agents/gan-generator.md +131 -0
  15. package/.agent/agents/gan-planner.md +99 -0
  16. package/.agent/agents/healthcare-reviewer.md +83 -0
  17. package/.agent/agents/mobile-developer.md +377 -377
  18. package/.agent/agents/opensource-forker.md +198 -0
  19. package/.agent/agents/opensource-packager.md +249 -0
  20. package/.agent/agents/opensource-sanitizer.md +188 -0
  21. package/.agent/agents/orchestrator.md +416 -416
  22. package/.agent/agents/penetration-tester.md +188 -188
  23. package/.agent/agents/performance-optimizer.md +446 -187
  24. package/.agent/agents/personas/athena-agent/agent.json +10 -0
  25. package/.agent/agents/personas/athena-agent/athena-backend-logic-architecture-profile.md +189 -0
  26. package/.agent/agents/personas/athena-agent/context-files/agents.md +55 -0
  27. package/.agent/agents/personas/athena-agent/context-files/identity.md +23 -0
  28. package/.agent/agents/personas/athena-agent/context-files/soul.md +51 -0
  29. package/.agent/agents/personas/athena-agent/context-files/user-predefined.md +15 -0
  30. package/.agent/agents/personas/athena-agent/user-context-files/system/bootstrap.md +37 -0
  31. package/.agent/agents/personas/athena-agent/user-context-files/system/user.md +45 -0
  32. package/.agent/agents/personas/da-vinci-agent/agent.json +10 -0
  33. package/.agent/agents/personas/da-vinci-agent/context-files/agents.md +55 -0
  34. package/.agent/agents/personas/da-vinci-agent/context-files/identity.md +23 -0
  35. package/.agent/agents/personas/da-vinci-agent/context-files/soul.md +51 -0
  36. package/.agent/agents/personas/da-vinci-agent/context-files/user-predefined.md +15 -0
  37. package/.agent/agents/personas/da-vinci-agent/da-vinci-frontend-ui-ux-design-profile.md +189 -0
  38. package/.agent/agents/personas/da-vinci-agent/user-context-files/system/bootstrap.md +37 -0
  39. package/.agent/agents/personas/da-vinci-agent/user-context-files/system/user.md +45 -0
  40. package/.agent/agents/personas/duong-tang-agent/agent.json +10 -0
  41. package/.agent/agents/personas/duong-tang-agent/context-files/agents.md +55 -0
  42. package/.agent/agents/personas/duong-tang-agent/context-files/identity.md +23 -0
  43. package/.agent/agents/personas/duong-tang-agent/context-files/soul.md +51 -0
  44. package/.agent/agents/personas/duong-tang-agent/context-files/user-predefined.md +15 -0
  45. package/.agent/agents/personas/duong-tang-agent/tang-monk-quality-testing-documentation-profile.md +189 -0
  46. package/.agent/agents/personas/duong-tang-agent/user-context-files/system/bootstrap.md +37 -0
  47. package/.agent/agents/personas/duong-tang-agent/user-context-files/system/user.md +45 -0
  48. package/.agent/agents/personas/gia-cat-luong-agent/agent.json +10 -0
  49. package/.agent/agents/personas/gia-cat-luong-agent/context-files/agents.md +55 -0
  50. package/.agent/agents/personas/gia-cat-luong-agent/context-files/identity.md +23 -0
  51. package/.agent/agents/personas/gia-cat-luong-agent/context-files/soul.md +51 -0
  52. package/.agent/agents/personas/gia-cat-luong-agent/context-files/user-predefined.md +15 -0
  53. package/.agent/agents/personas/gia-cat-luong-agent/kongming-research-strategy-analysis-profile.md +189 -0
  54. package/.agent/agents/personas/gia-cat-luong-agent/user-context-files/system/bootstrap.md +37 -0
  55. package/.agent/agents/personas/gia-cat-luong-agent/user-context-files/system/user.md +45 -0
  56. package/.agent/agents/personas/mihata-agent/agent.json +10 -0
  57. package/.agent/agents/personas/mihata-agent/context-files/agents.md +55 -0
  58. package/.agent/agents/personas/mihata-agent/context-files/identity.md +23 -0
  59. package/.agent/agents/personas/mihata-agent/context-files/soul.md +51 -0
  60. package/.agent/agents/personas/mihata-agent/context-files/user-predefined.md +15 -0
  61. package/.agent/agents/personas/mihata-agent/mihata-multi-agent-orchestration-profile.md +189 -0
  62. package/.agent/agents/personas/mihata-agent/user-context-files/system/bootstrap.md +37 -0
  63. package/.agent/agents/personas/mihata-agent/user-context-files/system/user.md +45 -0
  64. package/.agent/agents/personas/tesla-agent/agent.json +10 -0
  65. package/.agent/agents/personas/tesla-agent/context-files/agents.md +55 -0
  66. package/.agent/agents/personas/tesla-agent/context-files/identity.md +23 -0
  67. package/.agent/agents/personas/tesla-agent/context-files/soul.md +51 -0
  68. package/.agent/agents/personas/tesla-agent/context-files/user-predefined.md +15 -0
  69. package/.agent/agents/personas/tesla-agent/tesla-fullstack-system-optimization-profile.md +189 -0
  70. package/.agent/agents/personas/tesla-agent/user-context-files/system/bootstrap.md +37 -0
  71. package/.agent/agents/personas/tesla-agent/user-context-files/system/user.md +45 -0
  72. package/.agent/agents/personas/tu-ma-y-agent/agent.json +10 -0
  73. package/.agent/agents/personas/tu-ma-y-agent/context-files/agents.md +55 -0
  74. package/.agent/agents/personas/tu-ma-y-agent/context-files/identity.md +23 -0
  75. package/.agent/agents/personas/tu-ma-y-agent/context-files/soul.md +51 -0
  76. package/.agent/agents/personas/tu-ma-y-agent/context-files/user-predefined.md +15 -0
  77. package/.agent/agents/personas/tu-ma-y-agent/simayi-feasibility-risk-control-profile.md +189 -0
  78. package/.agent/agents/personas/tu-ma-y-agent/user-context-files/system/bootstrap.md +37 -0
  79. package/.agent/agents/personas/tu-ma-y-agent/user-context-files/system/user.md +45 -0
  80. package/.agent/agents/personas/venti-agent/agent.json +10 -0
  81. package/.agent/agents/personas/venti-agent/context-files/agents.md +55 -0
  82. package/.agent/agents/personas/venti-agent/context-files/identity.md +23 -0
  83. package/.agent/agents/personas/venti-agent/context-files/soul.md +51 -0
  84. package/.agent/agents/personas/venti-agent/context-files/user-predefined.md +15 -0
  85. package/.agent/agents/personas/venti-agent/user-context-files/system/bootstrap.md +37 -0
  86. package/.agent/agents/personas/venti-agent/user-context-files/system/user.md +45 -0
  87. package/.agent/agents/personas/venti-agent/venti-learning-communication-mentoring-profile.md +189 -0
  88. package/.agent/agents/product-manager.md +112 -112
  89. package/.agent/agents/product-owner.md +95 -95
  90. package/.agent/agents/project-planner.md +406 -406
  91. package/.agent/agents/qa-automation-engineer.md +103 -103
  92. package/.agent/agents/security-auditor.md +170 -170
  93. package/.agent/agents/seo-specialist.md +111 -111
  94. package/.agent/agents/test-engineer.md +158 -158
  95. package/.agent/contexts/dev.md +20 -0
  96. package/.agent/contexts/research.md +26 -0
  97. package/.agent/contexts/review.md +22 -0
  98. package/.agent/hooks/hooks.json +395 -0
  99. package/.agent/hooks/readme.md +222 -0
  100. package/.agent/mcp-configs/mcp-servers.json +181 -0
  101. package/.agent/rules/ARCHITECTURAL_BLUEPRINTS.md +62 -62
  102. package/.agent/rules/CODE_CRAFTSMANSHIP.md +69 -69
  103. package/.agent/rules/CORE_RULES.md +72 -72
  104. package/.agent/rules/PROJECT_MAP.md +58 -58
  105. package/.agent/rules/QUALITY_ASSURANCE.md +54 -54
  106. package/.agent/rules/SECURITY_ARMOR.md +44 -44
  107. package/.agent/rules/VERSION_ORCHESTRATION.md +64 -64
  108. package/.agent/rules/WORKFLOW_ORCHESTRATION.md +55 -55
  109. package/.agent/rules/common/agents.md +50 -0
  110. package/.agent/rules/common/code-review.md +124 -0
  111. package/.agent/rules/common/coding-style.md +48 -0
  112. package/.agent/rules/common/development-workflow.md +44 -0
  113. package/.agent/rules/common/git-workflow.md +24 -0
  114. package/.agent/rules/common/hooks.md +30 -0
  115. package/.agent/rules/common/patterns.md +31 -0
  116. package/.agent/rules/common/performance.md +55 -0
  117. package/.agent/rules/common/security.md +29 -0
  118. package/.agent/rules/common/testing.md +29 -0
  119. package/.agent/rules/cpp/coding-style.md +44 -0
  120. package/.agent/rules/cpp/hooks.md +39 -0
  121. package/.agent/rules/cpp/patterns.md +51 -0
  122. package/.agent/rules/cpp/security.md +51 -0
  123. package/.agent/rules/cpp/testing.md +44 -0
  124. package/.agent/rules/csharp/coding-style.md +72 -0
  125. package/.agent/rules/csharp/hooks.md +25 -0
  126. package/.agent/rules/csharp/patterns.md +50 -0
  127. package/.agent/rules/csharp/security.md +58 -0
  128. package/.agent/rules/csharp/testing.md +46 -0
  129. package/.agent/rules/dart/coding-style.md +159 -0
  130. package/.agent/rules/dart/hooks.md +66 -0
  131. package/.agent/rules/dart/patterns.md +261 -0
  132. package/.agent/rules/dart/security.md +135 -0
  133. package/.agent/rules/dart/testing.md +215 -0
  134. package/.agent/rules/golang/coding-style.md +32 -0
  135. package/.agent/rules/golang/hooks.md +17 -0
  136. package/.agent/rules/golang/patterns.md +45 -0
  137. package/.agent/rules/golang/security.md +34 -0
  138. package/.agent/rules/golang/testing.md +31 -0
  139. package/.agent/rules/java/coding-style.md +114 -0
  140. package/.agent/rules/java/hooks.md +18 -0
  141. package/.agent/rules/java/patterns.md +146 -0
  142. package/.agent/rules/java/security.md +100 -0
  143. package/.agent/rules/java/testing.md +131 -0
  144. package/.agent/rules/kotlin/coding-style.md +86 -0
  145. package/.agent/rules/kotlin/hooks.md +17 -0
  146. package/.agent/rules/kotlin/patterns.md +146 -0
  147. package/.agent/rules/kotlin/security.md +82 -0
  148. package/.agent/rules/kotlin/testing.md +128 -0
  149. package/.agent/rules/perl/coding-style.md +46 -0
  150. package/.agent/rules/perl/hooks.md +22 -0
  151. package/.agent/rules/perl/patterns.md +76 -0
  152. package/.agent/rules/perl/security.md +69 -0
  153. package/.agent/rules/perl/testing.md +54 -0
  154. package/.agent/rules/php/coding-style.md +40 -0
  155. package/.agent/rules/php/hooks.md +24 -0
  156. package/.agent/rules/php/patterns.md +33 -0
  157. package/.agent/rules/php/security.md +37 -0
  158. package/.agent/rules/php/testing.md +39 -0
  159. package/.agent/rules/python/coding-style.md +42 -0
  160. package/.agent/rules/python/hooks.md +19 -0
  161. package/.agent/rules/python/patterns.md +39 -0
  162. package/.agent/rules/python/security.md +30 -0
  163. package/.agent/rules/python/testing.md +38 -0
  164. package/.agent/rules/readme.md +111 -0
  165. package/.agent/rules/rust/coding-style.md +151 -0
  166. package/.agent/rules/rust/hooks.md +16 -0
  167. package/.agent/rules/rust/patterns.md +168 -0
  168. package/.agent/rules/rust/security.md +141 -0
  169. package/.agent/rules/rust/testing.md +154 -0
  170. package/.agent/rules/swift/coding-style.md +47 -0
  171. package/.agent/rules/swift/hooks.md +20 -0
  172. package/.agent/rules/swift/patterns.md +66 -0
  173. package/.agent/rules/swift/security.md +33 -0
  174. package/.agent/rules/swift/testing.md +45 -0
  175. package/.agent/rules/typescript/coding-style.md +199 -0
  176. package/.agent/rules/typescript/hooks.md +22 -0
  177. package/.agent/rules/typescript/patterns.md +52 -0
  178. package/.agent/rules/typescript/security.md +28 -0
  179. package/.agent/rules/typescript/testing.md +18 -0
  180. package/.agent/rules/web/coding-style.md +96 -0
  181. package/.agent/rules/web/design-quality.md +63 -0
  182. package/.agent/rules/web/hooks.md +120 -0
  183. package/.agent/rules/web/patterns.md +79 -0
  184. package/.agent/rules/web/performance.md +64 -0
  185. package/.agent/rules/web/security.md +57 -0
  186. package/.agent/rules/web/testing.md +55 -0
  187. package/.agent/rules/zh/agents.md +50 -0
  188. package/.agent/rules/zh/code-review.md +124 -0
  189. package/.agent/rules/zh/coding-style.md +48 -0
  190. package/.agent/rules/zh/development-workflow.md +44 -0
  191. package/.agent/rules/zh/git-workflow.md +24 -0
  192. package/.agent/rules/zh/hooks.md +30 -0
  193. package/.agent/rules/zh/patterns.md +31 -0
  194. package/.agent/rules/zh/performance.md +55 -0
  195. package/.agent/rules/zh/readme.md +108 -0
  196. package/.agent/rules/zh/security.md +29 -0
  197. package/.agent/rules/zh/testing.md +29 -0
  198. package/.agent/scripts/auto_preview.py +148 -148
  199. package/.agent/scripts/checklist.py +217 -217
  200. package/.agent/scripts/session_manager.py +120 -120
  201. package/.agent/scripts/verify_all.py +327 -327
  202. package/.agent/skills/agent-eval/SKILL.md +145 -0
  203. package/.agent/skills/agent-harness-construction/SKILL.md +73 -0
  204. package/.agent/skills/agent-payment-x402/SKILL.md +178 -0
  205. package/.agent/skills/agentic-engineering/SKILL.md +63 -0
  206. package/.agent/skills/ai-first-engineering/SKILL.md +51 -0
  207. package/.agent/skills/ai-regression-testing/SKILL.md +385 -0
  208. package/.agent/skills/android-clean-architecture/SKILL.md +339 -0
  209. package/.agent/skills/api-design/SKILL.md +523 -0
  210. package/.agent/skills/api-patterns/SKILL.md +81 -81
  211. package/.agent/skills/api-patterns/api-style.md +42 -42
  212. package/.agent/skills/api-patterns/auth.md +24 -24
  213. package/.agent/skills/api-patterns/documentation.md +26 -26
  214. package/.agent/skills/api-patterns/graphql.md +41 -41
  215. package/.agent/skills/api-patterns/rate-limiting.md +31 -31
  216. package/.agent/skills/api-patterns/response.md +37 -37
  217. package/.agent/skills/api-patterns/rest.md +40 -40
  218. package/.agent/skills/api-patterns/scripts/api_validator.py +211 -211
  219. package/.agent/skills/api-patterns/security-testing.md +122 -122
  220. package/.agent/skills/api-patterns/trpc.md +41 -41
  221. package/.agent/skills/api-patterns/versioning.md +22 -22
  222. package/.agent/skills/app-builder/SKILL.md +75 -75
  223. package/.agent/skills/app-builder/agent-coordination.md +71 -71
  224. package/.agent/skills/app-builder/feature-building.md +53 -53
  225. package/.agent/skills/app-builder/project-detection.md +34 -34
  226. package/.agent/skills/app-builder/scaffolding.md +118 -118
  227. package/.agent/skills/app-builder/tech-stack.md +41 -41
  228. package/.agent/skills/app-builder/templates/SKILL.md +39 -39
  229. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -76
  230. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -92
  231. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -88
  232. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -88
  233. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -83
  234. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -90
  235. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -90
  236. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -122
  237. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -122
  238. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -169
  239. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -134
  240. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -83
  241. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -119
  242. package/.agent/skills/architecture/SKILL.md +55 -55
  243. package/.agent/skills/architecture/context-discovery.md +43 -43
  244. package/.agent/skills/architecture/examples.md +94 -94
  245. package/.agent/skills/architecture/pattern-selection.md +68 -68
  246. package/.agent/skills/architecture/patterns-reference.md +50 -50
  247. package/.agent/skills/architecture/trade-off-analysis.md +77 -77
  248. package/.agent/skills/architecture-decision-records/SKILL.md +179 -0
  249. package/.agent/skills/article-writing/SKILL.md +79 -0
  250. package/.agent/skills/autonomous-agent-harness/SKILL.md +267 -0
  251. package/.agent/skills/autonomous-loops/SKILL.md +610 -0
  252. package/.agent/skills/backend-patterns/SKILL.md +598 -0
  253. package/.agent/skills/bash-linux/SKILL.md +199 -199
  254. package/.agent/skills/behavioral-modes/SKILL.md +242 -242
  255. package/.agent/skills/benchmark/SKILL.md +93 -0
  256. package/.agent/skills/blueprint/SKILL.md +105 -0
  257. package/.agent/skills/brainstorming/SKILL.md +163 -163
  258. package/.agent/skills/brainstorming/dynamic-questioning.md +350 -350
  259. package/.agent/skills/brand-voice/SKILL.md +97 -0
  260. package/.agent/skills/brand-voice/references/voice-profile-schema.md +55 -0
  261. package/.agent/skills/browser-qa/SKILL.md +87 -0
  262. package/.agent/skills/bun-runtime/SKILL.md +84 -0
  263. package/.agent/skills/canary-watch/SKILL.md +99 -0
  264. package/.agent/skills/carrier-relationship-management/SKILL.md +212 -0
  265. package/.agent/skills/ck/SKILL.md +147 -0
  266. package/.agent/skills/ck/commands/forget.mjs +44 -0
  267. package/.agent/skills/ck/commands/info.mjs +24 -0
  268. package/.agent/skills/ck/commands/init.mjs +143 -0
  269. package/.agent/skills/ck/commands/list.mjs +40 -0
  270. package/.agent/skills/ck/commands/migrate.mjs +202 -0
  271. package/.agent/skills/ck/commands/resume.mjs +36 -0
  272. package/.agent/skills/ck/commands/save.mjs +210 -0
  273. package/.agent/skills/ck/commands/shared.mjs +387 -0
  274. package/.agent/skills/ck/hooks/session-start.mjs +224 -0
  275. package/.agent/skills/claude-api/SKILL.md +337 -0
  276. package/.agent/skills/claude-devfleet/SKILL.md +103 -0
  277. package/.agent/skills/clean-code/SKILL.md +201 -201
  278. package/.agent/skills/click-path-audit/SKILL.md +244 -0
  279. package/.agent/skills/clickhouse-io/SKILL.md +439 -0
  280. package/.agent/skills/code-review-checklist/SKILL.md +109 -109
  281. package/.agent/skills/codebase-onboarding/SKILL.md +233 -0
  282. package/.agent/skills/coding-standards/SKILL.md +530 -0
  283. package/.agent/skills/compose-multiplatform-patterns/SKILL.md +299 -0
  284. package/.agent/skills/configure-ecc/SKILL.md +367 -0
  285. package/.agent/skills/connections-optimizer/SKILL.md +189 -0
  286. package/.agent/skills/content-engine/SKILL.md +131 -0
  287. package/.agent/skills/content-hash-cache-pattern/SKILL.md +161 -0
  288. package/.agent/skills/context-budget/SKILL.md +135 -0
  289. package/.agent/skills/continuous-agent-loop/SKILL.md +45 -0
  290. package/.agent/skills/continuous-learning/SKILL.md +119 -0
  291. package/.agent/skills/continuous-learning/config.json +18 -0
  292. package/.agent/skills/continuous-learning/evaluate-session.sh +69 -0
  293. package/.agent/skills/continuous-learning-v2/SKILL.md +365 -0
  294. package/.agent/skills/continuous-learning-v2/agents/observer-loop.sh +271 -0
  295. package/.agent/skills/continuous-learning-v2/agents/observer.md +198 -0
  296. package/.agent/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
  297. package/.agent/skills/continuous-learning-v2/agents/start-observer.sh +244 -0
  298. package/.agent/skills/continuous-learning-v2/config.json +8 -0
  299. package/.agent/skills/continuous-learning-v2/hooks/observe.sh +428 -0
  300. package/.agent/skills/continuous-learning-v2/scripts/detect-project.sh +228 -0
  301. package/.agent/skills/continuous-learning-v2/scripts/instinct-cli.py +1426 -0
  302. package/.agent/skills/continuous-learning-v2/scripts/test-parse-instinct.py +984 -0
  303. package/.agent/skills/cost-aware-llm-pipeline/SKILL.md +183 -0
  304. package/.agent/skills/cpp-coding-standards/SKILL.md +723 -0
  305. package/.agent/skills/cpp-testing/SKILL.md +324 -0
  306. package/.agent/skills/crosspost/SKILL.md +111 -0
  307. package/.agent/skills/csharp-testing/SKILL.md +321 -0
  308. package/.agent/skills/customer-billing-ops/SKILL.md +140 -0
  309. package/.agent/skills/customs-trade-compliance/SKILL.md +263 -0
  310. package/.agent/skills/dart-flutter-patterns/SKILL.md +563 -0
  311. package/.agent/skills/data-scraper-agent/SKILL.md +764 -0
  312. package/.agent/skills/database-design/SKILL.md +52 -52
  313. package/.agent/skills/database-design/database-selection.md +43 -43
  314. package/.agent/skills/database-design/indexing.md +39 -39
  315. package/.agent/skills/database-design/migrations.md +48 -48
  316. package/.agent/skills/database-design/optimization.md +36 -36
  317. package/.agent/skills/database-design/orm-selection.md +30 -30
  318. package/.agent/skills/database-design/schema-design.md +56 -56
  319. package/.agent/skills/database-design/scripts/schema_validator.py +172 -172
  320. package/.agent/skills/database-migrations/SKILL.md +429 -0
  321. package/.agent/skills/deep-research/SKILL.md +155 -0
  322. package/.agent/skills/deployment-patterns/SKILL.md +427 -0
  323. package/.agent/skills/deployment-procedures/SKILL.md +241 -241
  324. package/.agent/skills/design-system/SKILL.md +82 -0
  325. package/.agent/skills/django-patterns/SKILL.md +734 -0
  326. package/.agent/skills/django-security/SKILL.md +593 -0
  327. package/.agent/skills/django-tdd/SKILL.md +729 -0
  328. package/.agent/skills/django-verification/SKILL.md +469 -0
  329. package/.agent/skills/dmux-workflows/SKILL.md +191 -0
  330. package/.agent/skills/doc.md +177 -177
  331. package/.agent/skills/docker-patterns/SKILL.md +364 -0
  332. package/.agent/skills/documentation-lookup/SKILL.md +90 -0
  333. package/.agent/skills/documentation-templates/SKILL.md +194 -194
  334. package/.agent/skills/dotnet-patterns/SKILL.md +321 -0
  335. package/.agent/skills/e2e-testing/SKILL.md +326 -0
  336. package/.agent/skills/energy-procurement/SKILL.md +228 -0
  337. package/.agent/skills/enterprise-agent-ops/SKILL.md +50 -0
  338. package/.agent/skills/eval-harness/SKILL.md +270 -0
  339. package/.agent/skills/exa-search/SKILL.md +103 -0
  340. package/.agent/skills/fal-ai-media/SKILL.md +284 -0
  341. package/.agent/skills/flutter-dart-code-review/SKILL.md +435 -0
  342. package/.agent/skills/foundation-models-on-device/SKILL.md +243 -0
  343. package/.agent/skills/frontend-design/SKILL.md +452 -452
  344. package/.agent/skills/frontend-design/animation-guide.md +331 -331
  345. package/.agent/skills/frontend-design/color-system.md +311 -311
  346. package/.agent/skills/frontend-design/decision-trees.md +418 -418
  347. package/.agent/skills/frontend-design/motion-graphics.md +306 -306
  348. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -183
  349. package/.agent/skills/frontend-design/scripts/ux_audit.py +722 -722
  350. package/.agent/skills/frontend-design/typography-system.md +345 -345
  351. package/.agent/skills/frontend-design/ux-psychology.md +1116 -1116
  352. package/.agent/skills/frontend-design/visual-effects.md +383 -383
  353. package/.agent/skills/frontend-patterns/SKILL.md +642 -0
  354. package/.agent/skills/frontend-slides/SKILL.md +184 -0
  355. package/.agent/skills/frontend-slides/style-presets.md +330 -0
  356. package/.agent/skills/game-development/2d-games/SKILL.md +119 -119
  357. package/.agent/skills/game-development/3d-games/SKILL.md +135 -135
  358. package/.agent/skills/game-development/SKILL.md +167 -167
  359. package/.agent/skills/game-development/game-art/SKILL.md +185 -185
  360. package/.agent/skills/game-development/game-audio/SKILL.md +190 -190
  361. package/.agent/skills/game-development/game-design/SKILL.md +129 -129
  362. package/.agent/skills/game-development/mobile-games/SKILL.md +108 -108
  363. package/.agent/skills/game-development/multiplayer/SKILL.md +132 -132
  364. package/.agent/skills/game-development/pc-games/SKILL.md +144 -144
  365. package/.agent/skills/game-development/vr-ar/SKILL.md +123 -123
  366. package/.agent/skills/game-development/web-games/SKILL.md +150 -150
  367. package/.agent/skills/gan-style-harness/SKILL.md +278 -0
  368. package/.agent/skills/geo-fundamentals/SKILL.md +156 -156
  369. package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -289
  370. package/.agent/skills/git-workflow/SKILL.md +715 -0
  371. package/.agent/skills/golang-patterns/SKILL.md +674 -0
  372. package/.agent/skills/golang-testing/SKILL.md +720 -0
  373. package/.agent/skills/google-workspace-ops/SKILL.md +95 -0
  374. package/.agent/skills/healthcare-cdss-patterns/SKILL.md +245 -0
  375. package/.agent/skills/healthcare-emr-patterns/SKILL.md +159 -0
  376. package/.agent/skills/healthcare-eval-harness/SKILL.md +207 -0
  377. package/.agent/skills/healthcare-phi-compliance/SKILL.md +145 -0
  378. package/.agent/skills/hexagonal-architecture/SKILL.md +276 -0
  379. package/.agent/skills/i18n-localization/SKILL.md +154 -154
  380. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -241
  381. package/.agent/skills/intelligent-routing/SKILL.md +335 -335
  382. package/.agent/skills/inventory-demand-planning/SKILL.md +247 -0
  383. package/.agent/skills/investor-materials/SKILL.md +96 -0
  384. package/.agent/skills/investor-outreach/SKILL.md +91 -0
  385. package/.agent/skills/iterative-retrieval/SKILL.md +211 -0
  386. package/.agent/skills/java-coding-standards/SKILL.md +147 -0
  387. package/.agent/skills/jira-integration/SKILL.md +293 -0
  388. package/.agent/skills/jpa-patterns/SKILL.md +151 -0
  389. package/.agent/skills/kotlin-coroutines-flows/SKILL.md +284 -0
  390. package/.agent/skills/kotlin-exposed-patterns/SKILL.md +719 -0
  391. package/.agent/skills/kotlin-ktor-patterns/SKILL.md +689 -0
  392. package/.agent/skills/kotlin-patterns/SKILL.md +711 -0
  393. package/.agent/skills/kotlin-testing/SKILL.md +824 -0
  394. package/.agent/skills/laravel-patterns/SKILL.md +415 -0
  395. package/.agent/skills/laravel-plugin-discovery/SKILL.md +229 -0
  396. package/.agent/skills/laravel-security/SKILL.md +285 -0
  397. package/.agent/skills/laravel-tdd/SKILL.md +283 -0
  398. package/.agent/skills/laravel-verification/SKILL.md +179 -0
  399. package/.agent/skills/lead-intelligence/SKILL.md +321 -0
  400. package/.agent/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
  401. package/.agent/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
  402. package/.agent/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
  403. package/.agent/skills/lead-intelligence/agents/signal-scorer.md +60 -0
  404. package/.agent/skills/lint-and-validate/SKILL.md +45 -45
  405. package/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -184
  406. package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -173
  407. package/.agent/skills/liquid-glass-design/SKILL.md +279 -0
  408. package/.agent/skills/logistics-exception-management/SKILL.md +222 -0
  409. package/.agent/skills/manim-video/SKILL.md +89 -0
  410. package/.agent/skills/manim-video/assets/network-graph-scene.py +52 -0
  411. package/.agent/skills/market-research/SKILL.md +75 -0
  412. package/.agent/skills/mcp-builder/SKILL.md +173 -113
  413. package/.agent/skills/mcp-builder/license.txt +202 -0
  414. package/.agent/skills/mcp-builder/reference/evaluation.md +602 -0
  415. package/.agent/skills/mcp-builder/reference/mcp-best-practices.md +249 -0
  416. package/.agent/skills/mcp-builder/reference/node-mcp-server.md +970 -0
  417. package/.agent/skills/mcp-builder/reference/python-mcp-server.md +719 -0
  418. package/.agent/skills/mcp-builder/scripts/connections.py +151 -0
  419. package/.agent/skills/mcp-builder/scripts/evaluation.py +373 -0
  420. package/.agent/skills/mcp-builder/scripts/example-evaluation.xml +22 -0
  421. package/.agent/skills/mcp-builder/scripts/requirements.txt +2 -0
  422. package/.agent/skills/mcp-server-patterns/SKILL.md +67 -0
  423. package/.agent/skills/mobile-design/SKILL.md +394 -394
  424. package/.agent/skills/mobile-design/decision-trees.md +516 -516
  425. package/.agent/skills/mobile-design/mobile-backend.md +491 -491
  426. package/.agent/skills/mobile-design/mobile-color-system.md +420 -420
  427. package/.agent/skills/mobile-design/mobile-debugging.md +122 -122
  428. package/.agent/skills/mobile-design/mobile-design-thinking.md +357 -357
  429. package/.agent/skills/mobile-design/mobile-navigation.md +458 -458
  430. package/.agent/skills/mobile-design/mobile-performance.md +767 -767
  431. package/.agent/skills/mobile-design/mobile-testing.md +356 -356
  432. package/.agent/skills/mobile-design/mobile-typography.md +433 -433
  433. package/.agent/skills/mobile-design/platform-android.md +666 -666
  434. package/.agent/skills/mobile-design/platform-ios.md +561 -561
  435. package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -670
  436. package/.agent/skills/mobile-design/touch-psychology.md +537 -537
  437. package/.agent/skills/nanoclaw-repl/SKILL.md +33 -0
  438. package/.agent/skills/nestjs-patterns/SKILL.md +230 -0
  439. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +351 -351
  440. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -240
  441. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -490
  442. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -264
  443. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -581
  444. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -432
  445. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -684
  446. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -150
  447. package/.agent/skills/nextjs-react-expert/9-cache-components.md +103 -103
  448. package/.agent/skills/nextjs-react-expert/SKILL.md +293 -293
  449. package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -222
  450. package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -252
  451. package/.agent/skills/nextjs-turbopack/SKILL.md +44 -0
  452. package/.agent/skills/nodejs-best-practices/SKILL.md +333 -333
  453. package/.agent/skills/nutrient-document-processing/SKILL.md +167 -0
  454. package/.agent/skills/nuxt4-patterns/SKILL.md +100 -0
  455. package/.agent/skills/openclaw-persona-forge/SKILL.md +296 -0
  456. package/.agent/skills/openclaw-persona-forge/gacha.py +224 -0
  457. package/.agent/skills/openclaw-persona-forge/gacha.sh +5 -0
  458. package/.agent/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
  459. package/.agent/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
  460. package/.agent/skills/openclaw-persona-forge/references/error-handling.md +53 -0
  461. package/.agent/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
  462. package/.agent/skills/openclaw-persona-forge/references/naming-system.md +39 -0
  463. package/.agent/skills/openclaw-persona-forge/references/output-template.md +166 -0
  464. package/.agent/skills/opensource-pipeline/SKILL.md +255 -0
  465. package/.agent/skills/parallel-agents/SKILL.md +175 -175
  466. package/.agent/skills/performance-profiling/SKILL.md +143 -143
  467. package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -76
  468. package/.agent/skills/perl-patterns/SKILL.md +504 -0
  469. package/.agent/skills/perl-security/SKILL.md +503 -0
  470. package/.agent/skills/perl-testing/SKILL.md +475 -0
  471. package/.agent/skills/plan-writing/SKILL.md +152 -152
  472. package/.agent/skills/plankton-code-quality/SKILL.md +236 -0
  473. package/.agent/skills/postgres-patterns/SKILL.md +147 -0
  474. package/.agent/skills/powershell-windows/SKILL.md +167 -167
  475. package/.agent/skills/product-lens/SKILL.md +85 -0
  476. package/.agent/skills/production-scheduling/SKILL.md +238 -0
  477. package/.agent/skills/project-flow-ops/SKILL.md +111 -0
  478. package/.agent/skills/project-guidelines-example/SKILL.md +349 -0
  479. package/.agent/skills/prompt-optimizer/SKILL.md +397 -0
  480. package/.agent/skills/python-patterns/SKILL.md +750 -441
  481. package/.agent/skills/python-testing/SKILL.md +816 -0
  482. package/.agent/skills/pytorch-patterns/SKILL.md +396 -0
  483. package/.agent/skills/quality-nonconformance/SKILL.md +260 -0
  484. package/.agent/skills/ralphinho-rfc-pipeline/SKILL.md +67 -0
  485. package/.agent/skills/red-team-tactics/SKILL.md +199 -199
  486. package/.agent/skills/regex-vs-llm-structured-text/SKILL.md +220 -0
  487. package/.agent/skills/remotion-video-creation/SKILL.md +43 -0
  488. package/.agent/skills/remotion-video-creation/rules/3d.md +86 -0
  489. package/.agent/skills/remotion-video-creation/rules/animations.md +29 -0
  490. package/.agent/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
  491. package/.agent/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
  492. package/.agent/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
  493. package/.agent/skills/remotion-video-creation/rules/assets.md +78 -0
  494. package/.agent/skills/remotion-video-creation/rules/audio.md +172 -0
  495. package/.agent/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
  496. package/.agent/skills/remotion-video-creation/rules/can-decode.md +75 -0
  497. package/.agent/skills/remotion-video-creation/rules/charts.md +58 -0
  498. package/.agent/skills/remotion-video-creation/rules/compositions.md +146 -0
  499. package/.agent/skills/remotion-video-creation/rules/display-captions.md +126 -0
  500. package/.agent/skills/remotion-video-creation/rules/extract-frames.md +229 -0
  501. package/.agent/skills/remotion-video-creation/rules/fonts.md +152 -0
  502. package/.agent/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
  503. package/.agent/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
  504. package/.agent/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
  505. package/.agent/skills/remotion-video-creation/rules/gifs.md +138 -0
  506. package/.agent/skills/remotion-video-creation/rules/images.md +130 -0
  507. package/.agent/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
  508. package/.agent/skills/remotion-video-creation/rules/lottie.md +67 -0
  509. package/.agent/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
  510. package/.agent/skills/remotion-video-creation/rules/measuring-text.md +143 -0
  511. package/.agent/skills/remotion-video-creation/rules/sequencing.md +106 -0
  512. package/.agent/skills/remotion-video-creation/rules/tailwind.md +11 -0
  513. package/.agent/skills/remotion-video-creation/rules/text-animations.md +20 -0
  514. package/.agent/skills/remotion-video-creation/rules/timing.md +179 -0
  515. package/.agent/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
  516. package/.agent/skills/remotion-video-creation/rules/transitions.md +122 -0
  517. package/.agent/skills/remotion-video-creation/rules/trimming.md +52 -0
  518. package/.agent/skills/remotion-video-creation/rules/videos.md +171 -0
  519. package/.agent/skills/repo-scan/SKILL.md +78 -0
  520. package/.agent/skills/returns-reverse-logistics/SKILL.md +240 -0
  521. package/.agent/skills/rules-distill/SKILL.md +264 -0
  522. package/.agent/skills/rules-distill/scripts/scan-rules.sh +58 -0
  523. package/.agent/skills/rules-distill/scripts/scan-skills.sh +129 -0
  524. package/.agent/skills/rust-patterns/SKILL.md +499 -0
  525. package/.agent/skills/rust-pro/SKILL.md +175 -175
  526. package/.agent/skills/rust-testing/SKILL.md +500 -0
  527. package/.agent/skills/safety-guard/SKILL.md +75 -0
  528. package/.agent/skills/santa-method/SKILL.md +306 -0
  529. package/.agent/skills/search-first/SKILL.md +161 -0
  530. package/.agent/skills/security-review/SKILL.md +495 -0
  531. package/.agent/skills/security-review/cloud-infrastructure-security.md +361 -0
  532. package/.agent/skills/security-scan/SKILL.md +165 -0
  533. package/.agent/skills/seo-fundamentals/SKILL.md +129 -129
  534. package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +219 -219
  535. package/.agent/skills/server-management/SKILL.md +161 -161
  536. package/.agent/skills/skill-comply/SKILL.md +58 -0
  537. package/.agent/skills/skill-comply/fixtures/compliant-trace.jsonl +5 -0
  538. package/.agent/skills/skill-comply/fixtures/noncompliant-trace.jsonl +3 -0
  539. package/.agent/skills/skill-comply/fixtures/tdd-spec.yaml +44 -0
  540. package/.agent/skills/skill-comply/prompts/classifier.md +24 -0
  541. package/.agent/skills/skill-comply/prompts/scenario-generator.md +62 -0
  542. package/.agent/skills/skill-comply/prompts/spec-generator.md +42 -0
  543. package/.agent/skills/skill-comply/pyproject.toml +15 -0
  544. package/.agent/skills/skill-comply/scripts/classifier.py +85 -0
  545. package/.agent/skills/skill-comply/scripts/grader.py +122 -0
  546. package/.agent/skills/skill-comply/scripts/init.py +0 -0
  547. package/.agent/skills/skill-comply/scripts/parser.py +107 -0
  548. package/.agent/skills/skill-comply/scripts/report.py +170 -0
  549. package/.agent/skills/skill-comply/scripts/run.py +127 -0
  550. package/.agent/skills/skill-comply/scripts/runner.py +161 -0
  551. package/.agent/skills/skill-comply/scripts/scenario-generator.py +70 -0
  552. package/.agent/skills/skill-comply/scripts/spec-generator.py +72 -0
  553. package/.agent/skills/skill-comply/scripts/utils.py +13 -0
  554. package/.agent/skills/skill-comply/tests/test-grader.py +137 -0
  555. package/.agent/skills/skill-comply/tests/test-parser.py +90 -0
  556. package/.agent/skills/skill-creator/SKILL.md +485 -0
  557. package/.agent/skills/skill-creator/agents/analyzer.md +274 -0
  558. package/.agent/skills/skill-creator/agents/comparator.md +202 -0
  559. package/.agent/skills/skill-creator/agents/grader.md +223 -0
  560. package/.agent/skills/skill-creator/assets/eval-review.html +146 -0
  561. package/.agent/skills/skill-creator/eval-viewer/generate-review.py +471 -0
  562. package/.agent/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  563. package/.agent/skills/skill-creator/license.txt +202 -0
  564. package/.agent/skills/skill-creator/references/schemas.md +430 -0
  565. package/.agent/skills/skill-creator/scripts/aggregate-benchmark.py +401 -0
  566. package/.agent/skills/skill-creator/scripts/generate-report.py +326 -0
  567. package/.agent/skills/skill-creator/scripts/improve-description.py +247 -0
  568. package/.agent/skills/skill-creator/scripts/init.py +0 -0
  569. package/.agent/skills/skill-creator/scripts/package-skill.py +136 -0
  570. package/.agent/skills/skill-creator/scripts/quick-validate.py +103 -0
  571. package/.agent/skills/skill-creator/scripts/run-eval.py +310 -0
  572. package/.agent/skills/skill-creator/scripts/run-loop.py +328 -0
  573. package/.agent/skills/skill-creator/scripts/utils.py +47 -0
  574. package/.agent/skills/skill-stocktake/SKILL.md +193 -0
  575. package/.agent/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
  576. package/.agent/skills/skill-stocktake/scripts/save-results.sh +56 -0
  577. package/.agent/skills/skill-stocktake/scripts/scan.sh +170 -0
  578. package/.agent/skills/social-graph-ranker/SKILL.md +154 -0
  579. package/.agent/skills/springboot-patterns/SKILL.md +314 -0
  580. package/.agent/skills/springboot-security/SKILL.md +272 -0
  581. package/.agent/skills/springboot-tdd/SKILL.md +158 -0
  582. package/.agent/skills/springboot-verification/SKILL.md +231 -0
  583. package/.agent/skills/strategic-compact/SKILL.md +131 -0
  584. package/.agent/skills/strategic-compact/suggest-compact.sh +54 -0
  585. package/.agent/skills/swift-actor-persistence/SKILL.md +143 -0
  586. package/.agent/skills/swift-concurrency-6-2/SKILL.md +216 -0
  587. package/.agent/skills/swift-protocol-di-testing/SKILL.md +190 -0
  588. package/.agent/skills/swiftui-patterns/SKILL.md +259 -0
  589. package/.agent/skills/systematic-debugging/SKILL.md +109 -109
  590. package/.agent/skills/tailwind-patterns/SKILL.md +269 -269
  591. package/.agent/skills/tdd-workflow/SKILL.md +463 -149
  592. package/.agent/skills/team-builder/SKILL.md +168 -0
  593. package/.agent/skills/testing-patterns/SKILL.md +178 -178
  594. package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -219
  595. package/.agent/skills/token-budget-advisor/SKILL.md +133 -0
  596. package/.agent/skills/ui-demo/SKILL.md +465 -0
  597. package/.agent/skills/ui-ux-pro-max/SKILL.md +292 -292
  598. package/.agent/skills/ui-ux-pro-max/data/icons.csv +101 -101
  599. package/.agent/skills/ui-ux-pro-max/data/landing.csv +3 -3
  600. package/.agent/skills/ui-ux-pro-max/data/react-performance.csv +45 -45
  601. package/.agent/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -54
  602. package/.agent/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
  603. package/.agent/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
  604. package/.agent/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
  605. package/.agent/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
  606. package/.agent/skills/ui-ux-pro-max/data/typography.csv +57 -57
  607. package/.agent/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
  608. package/.agent/skills/ui-ux-pro-max/data/web-interface.csv +31 -31
  609. package/.agent/skills/ui-ux-pro-max/scripts/core.py +253 -253
  610. package/.agent/skills/ui-ux-pro-max/scripts/design_system.py +1067 -1067
  611. package/.agent/skills/verification-loop/SKILL.md +126 -0
  612. package/.agent/skills/video-editing/SKILL.md +310 -0
  613. package/.agent/skills/videodb/SKILL.md +374 -0
  614. package/.agent/skills/videodb/reference/api-reference.md +550 -0
  615. package/.agent/skills/videodb/reference/capture-reference.md +407 -0
  616. package/.agent/skills/videodb/reference/capture.md +101 -0
  617. package/.agent/skills/videodb/reference/editor.md +443 -0
  618. package/.agent/skills/videodb/reference/generative.md +331 -0
  619. package/.agent/skills/videodb/reference/rtstream-reference.md +564 -0
  620. package/.agent/skills/videodb/reference/rtstream.md +65 -0
  621. package/.agent/skills/videodb/reference/search.md +230 -0
  622. package/.agent/skills/videodb/reference/streaming.md +406 -0
  623. package/.agent/skills/videodb/reference/use-cases.md +118 -0
  624. package/.agent/skills/videodb/scripts/ws-listener.py +282 -0
  625. package/.agent/skills/visa-doc-translate/SKILL.md +117 -0
  626. package/.agent/skills/visa-doc-translate/readme.md +86 -0
  627. package/.agent/skills/vulnerability-scanner/SKILL.md +276 -276
  628. package/.agent/skills/vulnerability-scanner/checklists.md +121 -121
  629. package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +458 -458
  630. package/.agent/skills/web-design-guidelines/SKILL.md +57 -57
  631. package/.agent/skills/webapp-testing/SKILL.md +187 -187
  632. package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -173
  633. package/.agent/skills/workspace-surface-audit/SKILL.md +125 -0
  634. package/.agent/skills/x-api/SKILL.md +230 -0
  635. package/.agent/tasks/lessons.md +40 -40
  636. package/.agent/tasks/todo.md +33 -33
  637. package/.agent/tasks/two-track-merge-contract.md +29 -0
  638. package/.agent/workflows/aside.md +3 -3
  639. package/.agent/workflows/brainstorm.md +113 -113
  640. package/.agent/workflows/claw.md +13 -41
  641. package/.agent/workflows/clean-memory.md +34 -0
  642. package/.agent/workflows/code-review.md +260 -11
  643. package/.agent/workflows/context-budget.md +12 -18
  644. package/.agent/workflows/cpp-build.md +1 -1
  645. package/.agent/workflows/cpp-review.md +4 -4
  646. package/.agent/workflows/create.md +59 -59
  647. package/.agent/workflows/debug.md +103 -103
  648. package/.agent/workflows/deploy.md +176 -176
  649. package/.agent/workflows/devfleet.md +13 -82
  650. package/.agent/workflows/docs.md +13 -21
  651. package/.agent/workflows/e2e.md +38 -135
  652. package/.agent/workflows/enhance.md +63 -63
  653. package/.agent/workflows/eval.md +15 -112
  654. package/.agent/workflows/flutter-build.md +164 -0
  655. package/.agent/workflows/flutter-review.md +116 -0
  656. package/.agent/workflows/flutter-test.md +144 -0
  657. package/.agent/workflows/gan-build.md +99 -0
  658. package/.agent/workflows/gan-design.md +35 -0
  659. package/.agent/workflows/go-build.md +1 -1
  660. package/.agent/workflows/go-review.md +4 -4
  661. package/.agent/workflows/harness-audit.md +5 -3
  662. package/.agent/workflows/init-docs.md +46 -46
  663. package/.agent/workflows/instinct-import.md +4 -4
  664. package/.agent/workflows/jira.md +106 -0
  665. package/.agent/workflows/kotlin-build.md +1 -1
  666. package/.agent/workflows/kotlin-review.md +5 -5
  667. package/.agent/workflows/learn-eval.md +9 -9
  668. package/.agent/workflows/multi-plan.md +10 -10
  669. package/.agent/workflows/orchestrate.md +23 -119
  670. package/.agent/workflows/plan.md +2 -0
  671. package/.agent/workflows/preview.md +81 -81
  672. package/.agent/workflows/prompt-optimize.md +13 -28
  673. package/.agent/workflows/prp-commit.md +112 -0
  674. package/.agent/workflows/prp-implement.md +385 -0
  675. package/.agent/workflows/prp-plan.md +502 -0
  676. package/.agent/workflows/prp-pr.md +184 -0
  677. package/.agent/workflows/prp-prd.md +447 -0
  678. package/.agent/workflows/python-review.md +5 -5
  679. package/.agent/workflows/refactor-clean.md +1 -1
  680. package/.agent/workflows/resume-session.md +10 -10
  681. package/.agent/workflows/rules-distill.md +14 -5
  682. package/.agent/workflows/santa-loop.md +175 -0
  683. package/.agent/workflows/save-session.md +9 -9
  684. package/.agent/workflows/status.md +86 -86
  685. package/.agent/workflows/tdd.md +30 -127
  686. package/.agent/workflows/test-coverage.md +1 -1
  687. package/.agent/workflows/test.md +144 -144
  688. package/.agent/workflows/ui-ux-pro-max.md +295 -295
  689. package/.agent/workflows/verify.md +15 -51
  690. package/README.md +144 -136
  691. package/RELEASE.md +32 -36
  692. package/package.json +87 -79
  693. package/scripts/release-check.js +1 -1
  694. package/src/bin/cli.js +354 -78
  695. package/src/lib/installer.js +151 -117
  696. package/src/lib/manifests/stacks.js +122 -0
  697. package/src/lib/slash-commands.js +28 -0
  698. package/src/templates/claude/CLAUDE.en.md +42 -0
  699. package/src/templates/claude/CLAUDE.md +42 -0
  700. package/src/templates/claude/CLAUDE.vi.md +42 -0
  701. package/src/templates/codex/AGENTS.en.md +40 -0
  702. package/src/templates/codex/AGENTS.md +40 -0
  703. package/src/templates/codex/AGENTS.vi.md +40 -0
  704. package/src/templates/cursor/pilo-masterkit.mdc +20 -0
  705. package/src/templates/gemini/GEMINI.en.md +56 -0
  706. package/src/templates/gemini/GEMINI.md +56 -0
  707. package/src/templates/gemini/GEMINI.vi.md +56 -0
  708. package/src/templates/github/copilot-instructions.md +16 -0
@@ -1,490 +1,490 @@
1
- # 3. Server-Side Performance
2
-
3
- > **Impact:** HIGH
4
- > **Focus:** Optimizing server-side rendering and data fetching eliminates server-side waterfalls and reduces response times.
5
-
6
- ---
7
-
8
- ## Overview
9
-
10
- This section contains **7 rules** focused on server-side performance.
11
-
12
- ---
13
-
14
- ## Rule 3.1: Authenticate Server Actions Like API Routes
15
-
16
- **Impact:** CRITICAL
17
- **Tags:** server, server-actions, authentication, security, authorization
18
-
19
- ## Authenticate Server Actions Like API Routes
20
-
21
- **Impact: CRITICAL (prevents unauthorized access to server mutations)**
22
-
23
- Server Actions (functions with `"use server"`) are exposed as public endpoints, just like API routes. Always verify authentication and authorization **inside** each Server Action—do not rely solely on middleware, layout guards, or page-level checks, as Server Actions can be invoked directly.
24
-
25
- Next.js documentation explicitly states: "Treat Server Actions with the same security considerations as public-facing API endpoints, and verify if the user is allowed to perform a mutation."
26
-
27
- **Incorrect (no authentication check):**
28
-
29
- ```typescript
30
- 'use server'
31
-
32
- export async function deleteUser(userId: string) {
33
- // Anyone can call this! No auth check
34
- await db.user.delete({ where: { id: userId } })
35
- return { success: true }
36
- }
37
- ```
38
-
39
- **Correct (authentication inside the action):**
40
-
41
- ```typescript
42
- 'use server'
43
-
44
- import { verifySession } from '@/lib/auth'
45
- import { unauthorized } from '@/lib/errors'
46
-
47
- export async function deleteUser(userId: string) {
48
- // Always check auth inside the action
49
- const session = await verifySession()
50
-
51
- if (!session) {
52
- throw unauthorized('Must be logged in')
53
- }
54
-
55
- // Check authorization too
56
- if (session.user.role !== 'admin' && session.user.id !== userId) {
57
- throw unauthorized('Cannot delete other users')
58
- }
59
-
60
- await db.user.delete({ where: { id: userId } })
61
- return { success: true }
62
- }
63
- ```
64
-
65
- **With input validation:**
66
-
67
- ```typescript
68
- 'use server'
69
-
70
- import { verifySession } from '@/lib/auth'
71
- import { z } from 'zod'
72
-
73
- const updateProfileSchema = z.object({
74
- userId: z.string().uuid(),
75
- name: z.string().min(1).max(100),
76
- email: z.string().email()
77
- })
78
-
79
- export async function updateProfile(data: unknown) {
80
- // Validate input first
81
- const validated = updateProfileSchema.parse(data)
82
-
83
- // Then authenticate
84
- const session = await verifySession()
85
- if (!session) {
86
- throw new Error('Unauthorized')
87
- }
88
-
89
- // Then authorize
90
- if (session.user.id !== validated.userId) {
91
- throw new Error('Can only update own profile')
92
- }
93
-
94
- // Finally perform the mutation
95
- await db.user.update({
96
- where: { id: validated.userId },
97
- data: {
98
- name: validated.name,
99
- email: validated.email
100
- }
101
- })
102
-
103
- return { success: true }
104
- }
105
- ```
106
-
107
- Reference: [https://nextjs.org/docs/app/guides/authentication](https://nextjs.org/docs/app/guides/authentication)
108
-
109
- ---
110
-
111
- ## Rule 3.2: Avoid Duplicate Serialization in RSC Props
112
-
113
- **Impact:** LOW
114
- **Tags:** server, rsc, serialization, props, client-components
115
-
116
- ## Avoid Duplicate Serialization in RSC Props
117
-
118
- **Impact: LOW (reduces network payload by avoiding duplicate serialization)**
119
-
120
- RSC→client serialization deduplicates by object reference, not value. Same reference = serialized once; new reference = serialized again. Do transformations (`.toSorted()`, `.filter()`, `.map()`) in client, not server.
121
-
122
- **Incorrect (duplicates array):**
123
-
124
- ```tsx
125
- // RSC: sends 6 strings (2 arrays × 3 items)
126
- <ClientList usernames={usernames} usernamesOrdered={usernames.toSorted()} />
127
- ```
128
-
129
- **Correct (sends 3 strings):**
130
-
131
- ```tsx
132
- // RSC: send once
133
- <ClientList usernames={usernames} />
134
-
135
- // Client: transform there
136
- 'use client'
137
- const sorted = useMemo(() => [...usernames].sort(), [usernames])
138
- ```
139
-
140
- **Nested deduplication behavior:**
141
-
142
- Deduplication works recursively. Impact varies by data type:
143
-
144
- - `string[]`, `number[]`, `boolean[]`: **HIGH impact** - array + all primitives fully duplicated
145
- - `object[]`: **LOW impact** - array duplicated, but nested objects deduplicated by reference
146
-
147
- ```tsx
148
- // string[] - duplicates everything
149
- usernames={['a','b']} sorted={usernames.toSorted()} // sends 4 strings
150
-
151
- // object[] - duplicates array structure only
152
- users={[{id:1},{id:2}]} sorted={users.toSorted()} // sends 2 arrays + 2 unique objects (not 4)
153
- ```
154
-
155
- **Operations breaking deduplication (create new references):**
156
-
157
- - Arrays: `.toSorted()`, `.filter()`, `.map()`, `.slice()`, `[...arr]`
158
- - Objects: `{...obj}`, `Object.assign()`, `structuredClone()`, `JSON.parse(JSON.stringify())`
159
-
160
- **More examples:**
161
-
162
- ```tsx
163
- // ❌ Bad
164
- <C users={users} active={users.filter(u => u.active)} />
165
- <C product={product} productName={product.name} />
166
-
167
- // ✅ Good
168
- <C users={users} />
169
- <C product={product} />
170
- // Do filtering/destructuring in client
171
- ```
172
-
173
- **Exception:** Pass derived data when transformation is expensive or client doesn't need original.
174
-
175
- ---
176
-
177
- ## Rule 3.3: Cross-Request LRU Caching
178
-
179
- **Impact:** HIGH
180
- **Tags:** server, cache, lru, cross-request
181
-
182
- ## Cross-Request LRU Caching
183
-
184
- `React.cache()` only works within one request. For data shared across sequential requests (user clicks button A then button B), use an LRU cache.
185
-
186
- **Implementation:**
187
-
188
- ```typescript
189
- import { LRUCache } from 'lru-cache'
190
-
191
- const cache = new LRUCache<string, any>({
192
- max: 1000,
193
- ttl: 5 * 60 * 1000 // 5 minutes
194
- })
195
-
196
- export async function getUser(id: string) {
197
- const cached = cache.get(id)
198
- if (cached) return cached
199
-
200
- const user = await db.user.findUnique({ where: { id } })
201
- cache.set(id, user)
202
- return user
203
- }
204
-
205
- // Request 1: DB query, result cached
206
- // Request 2: cache hit, no DB query
207
- ```
208
-
209
- Use when sequential user actions hit multiple endpoints needing the same data within seconds.
210
-
211
- **With Vercel's [Fluid Compute](https://vercel.com/docs/fluid-compute):** LRU caching is especially effective because multiple concurrent requests can share the same function instance and cache. This means the cache persists across requests without needing external storage like Redis.
212
-
213
- **In traditional serverless:** Each invocation runs in isolation, so consider Redis for cross-process caching.
214
-
215
- Reference: [https://github.com/isaacs/node-lru-cache](https://github.com/isaacs/node-lru-cache)
216
-
217
- ---
218
-
219
- ## Rule 3.4: Minimize Serialization at RSC Boundaries
220
-
221
- **Impact:** HIGH
222
- **Tags:** server, rsc, serialization, props
223
-
224
- ## Minimize Serialization at RSC Boundaries
225
-
226
- The React Server/Client boundary serializes all object properties into strings and embeds them in the HTML response and subsequent RSC requests. This serialized data directly impacts page weight and load time, so **size matters a lot**. Only pass fields that the client actually uses.
227
-
228
- **Incorrect (serializes all 50 fields):**
229
-
230
- ```tsx
231
- async function Page() {
232
- const user = await fetchUser() // 50 fields
233
- return <Profile user={user} />
234
- }
235
-
236
- 'use client'
237
- function Profile({ user }: { user: User }) {
238
- return <div>{user.name}</div> // uses 1 field
239
- }
240
- ```
241
-
242
- **Correct (serializes only 1 field):**
243
-
244
- ```tsx
245
- async function Page() {
246
- const user = await fetchUser()
247
- return <Profile name={user.name} />
248
- }
249
-
250
- 'use client'
251
- function Profile({ name }: { name: string }) {
252
- return <div>{name}</div>
253
- }
254
- ```
255
-
256
- ---
257
-
258
- ## Rule 3.5: Parallel Data Fetching with Component Composition
259
-
260
- **Impact:** CRITICAL
261
- **Tags:** server, rsc, parallel-fetching, composition
262
-
263
- ## Parallel Data Fetching with Component Composition
264
-
265
- React Server Components execute sequentially within a tree. Restructure with composition to parallelize data fetching.
266
-
267
- **Incorrect (Sidebar waits for Page's fetch to complete):**
268
-
269
- ```tsx
270
- export default async function Page() {
271
- const header = await fetchHeader()
272
- return (
273
- <div>
274
- <div>{header}</div>
275
- <Sidebar />
276
- </div>
277
- )
278
- }
279
-
280
- async function Sidebar() {
281
- const items = await fetchSidebarItems()
282
- return <nav>{items.map(renderItem)}</nav>
283
- }
284
- ```
285
-
286
- **Correct (both fetch simultaneously):**
287
-
288
- ```tsx
289
- async function Header() {
290
- const data = await fetchHeader()
291
- return <div>{data}</div>
292
- }
293
-
294
- async function Sidebar() {
295
- const items = await fetchSidebarItems()
296
- return <nav>{items.map(renderItem)}</nav>
297
- }
298
-
299
- export default function Page() {
300
- return (
301
- <div>
302
- <Header />
303
- <Sidebar />
304
- </div>
305
- )
306
- }
307
- ```
308
-
309
- **Alternative with children prop:**
310
-
311
- ```tsx
312
- async function Header() {
313
- const data = await fetchHeader()
314
- return <div>{data}</div>
315
- }
316
-
317
- async function Sidebar() {
318
- const items = await fetchSidebarItems()
319
- return <nav>{items.map(renderItem)}</nav>
320
- }
321
-
322
- function Layout({ children }: { children: ReactNode }) {
323
- return (
324
- <div>
325
- <Header />
326
- {children}
327
- </div>
328
- )
329
- }
330
-
331
- export default function Page() {
332
- return (
333
- <Layout>
334
- <Sidebar />
335
- </Layout>
336
- )
337
- }
338
- ```
339
-
340
- ---
341
-
342
- ## Rule 3.6: Per-Request Deduplication with React.cache()
343
-
344
- **Impact:** MEDIUM
345
- **Tags:** server, cache, react-cache, deduplication
346
-
347
- ## Per-Request Deduplication with React.cache()
348
-
349
- Use `React.cache()` for server-side request deduplication. Authentication and database queries benefit most.
350
-
351
- **Usage:**
352
-
353
- ```typescript
354
- import { cache } from 'react'
355
-
356
- export const getCurrentUser = cache(async () => {
357
- const session = await auth()
358
- if (!session?.user?.id) return null
359
- return await db.user.findUnique({
360
- where: { id: session.user.id }
361
- })
362
- })
363
- ```
364
-
365
- Within a single request, multiple calls to `getCurrentUser()` execute the query only once.
366
-
367
- **Avoid inline objects as arguments:**
368
-
369
- `React.cache()` uses shallow equality (`Object.is`) to determine cache hits. Inline objects create new references each call, preventing cache hits.
370
-
371
- **Incorrect (always cache miss):**
372
-
373
- ```typescript
374
- const getUser = cache(async (params: { uid: number }) => {
375
- return await db.user.findUnique({ where: { id: params.uid } })
376
- })
377
-
378
- // Each call creates new object, never hits cache
379
- getUser({ uid: 1 })
380
- getUser({ uid: 1 }) // Cache miss, runs query again
381
- ```
382
-
383
- **Correct (cache hit):**
384
-
385
- ```typescript
386
- const getUser = cache(async (uid: number) => {
387
- return await db.user.findUnique({ where: { id: uid } })
388
- })
389
-
390
- // Primitive args use value equality
391
- getUser(1)
392
- getUser(1) // Cache hit, returns cached result
393
- ```
394
-
395
- If you must pass objects, pass the same reference:
396
-
397
- ```typescript
398
- const params = { uid: 1 }
399
- getUser(params) // Query runs
400
- getUser(params) // Cache hit (same reference)
401
- ```
402
-
403
- **Next.js-Specific Note:**
404
-
405
- In Next.js, the `fetch` API is automatically extended with request memoization. Requests with the same URL and options are automatically deduplicated within a single request, so you don't need `React.cache()` for `fetch` calls. However, `React.cache()` is still essential for other async tasks:
406
-
407
- - Database queries (Prisma, Drizzle, etc.)
408
- - Heavy computations
409
- - Authentication checks
410
- - File system operations
411
- - Any non-fetch async work
412
-
413
- Use `React.cache()` to deduplicate these operations across your component tree.
414
-
415
- Reference: [React.cache documentation](https://react.dev/reference/react/cache)
416
-
417
- ---
418
-
419
- ## Rule 3.7: Use after() for Non-Blocking Operations
420
-
421
- **Impact:** MEDIUM
422
- **Tags:** server, async, logging, analytics, side-effects
423
-
424
- ## Use after() for Non-Blocking Operations
425
-
426
- Use Next.js's `after()` to schedule work that should execute after a response is sent. This prevents logging, analytics, and other side effects from blocking the response.
427
-
428
- **Incorrect (blocks response):**
429
-
430
- ```tsx
431
- import { logUserAction } from '@/app/utils'
432
-
433
- export async function POST(request: Request) {
434
- // Perform mutation
435
- await updateDatabase(request)
436
-
437
- // Logging blocks the response
438
- const userAgent = request.headers.get('user-agent') || 'unknown'
439
- await logUserAction({ userAgent })
440
-
441
- return new Response(JSON.stringify({ status: 'success' }), {
442
- status: 200,
443
- headers: { 'Content-Type': 'application/json' }
444
- })
445
- }
446
- ```
447
-
448
- **Correct (non-blocking):**
449
-
450
- ```tsx
451
- import { after } from 'next/server'
452
- import { headers, cookies } from 'next/headers'
453
- import { logUserAction } from '@/app/utils'
454
-
455
- export async function POST(request: Request) {
456
- // Perform mutation
457
- await updateDatabase(request)
458
-
459
- // Log after response is sent
460
- after(async () => {
461
- const userAgent = (await headers()).get('user-agent') || 'unknown'
462
- const sessionCookie = (await cookies()).get('session-id')?.value || 'anonymous'
463
-
464
- logUserAction({ sessionCookie, userAgent })
465
- })
466
-
467
- return new Response(JSON.stringify({ status: 'success' }), {
468
- status: 200,
469
- headers: { 'Content-Type': 'application/json' }
470
- })
471
- }
472
- ```
473
-
474
- The response is sent immediately while logging happens in the background.
475
-
476
- **Common use cases:**
477
-
478
- - Analytics tracking
479
- - Audit logging
480
- - Sending notifications
481
- - Cache invalidation
482
- - Cleanup tasks
483
-
484
- **Important notes:**
485
-
486
- - `after()` runs even if the response fails or redirects
487
- - Works in Server Actions, Route Handlers, and Server Components
488
-
489
- Reference: [https://nextjs.org/docs/app/api-reference/functions/after](https://nextjs.org/docs/app/api-reference/functions/after)
490
-
1
+ # 3. Server-Side Performance
2
+
3
+ > **Impact:** HIGH
4
+ > **Focus:** Optimizing server-side rendering and data fetching eliminates server-side waterfalls and reduces response times.
5
+
6
+ ---
7
+
8
+ ## Overview
9
+
10
+ This section contains **7 rules** focused on server-side performance.
11
+
12
+ ---
13
+
14
+ ## Rule 3.1: Authenticate Server Actions Like API Routes
15
+
16
+ **Impact:** CRITICAL
17
+ **Tags:** server, server-actions, authentication, security, authorization
18
+
19
+ ## Authenticate Server Actions Like API Routes
20
+
21
+ **Impact: CRITICAL (prevents unauthorized access to server mutations)**
22
+
23
+ Server Actions (functions with `"use server"`) are exposed as public endpoints, just like API routes. Always verify authentication and authorization **inside** each Server Action—do not rely solely on middleware, layout guards, or page-level checks, as Server Actions can be invoked directly.
24
+
25
+ Next.js documentation explicitly states: "Treat Server Actions with the same security considerations as public-facing API endpoints, and verify if the user is allowed to perform a mutation."
26
+
27
+ **Incorrect (no authentication check):**
28
+
29
+ ```typescript
30
+ 'use server'
31
+
32
+ export async function deleteUser(userId: string) {
33
+ // Anyone can call this! No auth check
34
+ await db.user.delete({ where: { id: userId } })
35
+ return { success: true }
36
+ }
37
+ ```
38
+
39
+ **Correct (authentication inside the action):**
40
+
41
+ ```typescript
42
+ 'use server'
43
+
44
+ import { verifySession } from '@/lib/auth'
45
+ import { unauthorized } from '@/lib/errors'
46
+
47
+ export async function deleteUser(userId: string) {
48
+ // Always check auth inside the action
49
+ const session = await verifySession()
50
+
51
+ if (!session) {
52
+ throw unauthorized('Must be logged in')
53
+ }
54
+
55
+ // Check authorization too
56
+ if (session.user.role !== 'admin' && session.user.id !== userId) {
57
+ throw unauthorized('Cannot delete other users')
58
+ }
59
+
60
+ await db.user.delete({ where: { id: userId } })
61
+ return { success: true }
62
+ }
63
+ ```
64
+
65
+ **With input validation:**
66
+
67
+ ```typescript
68
+ 'use server'
69
+
70
+ import { verifySession } from '@/lib/auth'
71
+ import { z } from 'zod'
72
+
73
+ const updateProfileSchema = z.object({
74
+ userId: z.string().uuid(),
75
+ name: z.string().min(1).max(100),
76
+ email: z.string().email()
77
+ })
78
+
79
+ export async function updateProfile(data: unknown) {
80
+ // Validate input first
81
+ const validated = updateProfileSchema.parse(data)
82
+
83
+ // Then authenticate
84
+ const session = await verifySession()
85
+ if (!session) {
86
+ throw new Error('Unauthorized')
87
+ }
88
+
89
+ // Then authorize
90
+ if (session.user.id !== validated.userId) {
91
+ throw new Error('Can only update own profile')
92
+ }
93
+
94
+ // Finally perform the mutation
95
+ await db.user.update({
96
+ where: { id: validated.userId },
97
+ data: {
98
+ name: validated.name,
99
+ email: validated.email
100
+ }
101
+ })
102
+
103
+ return { success: true }
104
+ }
105
+ ```
106
+
107
+ Reference: [https://nextjs.org/docs/app/guides/authentication](https://nextjs.org/docs/app/guides/authentication)
108
+
109
+ ---
110
+
111
+ ## Rule 3.2: Avoid Duplicate Serialization in RSC Props
112
+
113
+ **Impact:** LOW
114
+ **Tags:** server, rsc, serialization, props, client-components
115
+
116
+ ## Avoid Duplicate Serialization in RSC Props
117
+
118
+ **Impact: LOW (reduces network payload by avoiding duplicate serialization)**
119
+
120
+ RSC→client serialization deduplicates by object reference, not value. Same reference = serialized once; new reference = serialized again. Do transformations (`.toSorted()`, `.filter()`, `.map()`) in client, not server.
121
+
122
+ **Incorrect (duplicates array):**
123
+
124
+ ```tsx
125
+ // RSC: sends 6 strings (2 arrays × 3 items)
126
+ <ClientList usernames={usernames} usernamesOrdered={usernames.toSorted()} />
127
+ ```
128
+
129
+ **Correct (sends 3 strings):**
130
+
131
+ ```tsx
132
+ // RSC: send once
133
+ <ClientList usernames={usernames} />
134
+
135
+ // Client: transform there
136
+ 'use client'
137
+ const sorted = useMemo(() => [...usernames].sort(), [usernames])
138
+ ```
139
+
140
+ **Nested deduplication behavior:**
141
+
142
+ Deduplication works recursively. Impact varies by data type:
143
+
144
+ - `string[]`, `number[]`, `boolean[]`: **HIGH impact** - array + all primitives fully duplicated
145
+ - `object[]`: **LOW impact** - array duplicated, but nested objects deduplicated by reference
146
+
147
+ ```tsx
148
+ // string[] - duplicates everything
149
+ usernames={['a','b']} sorted={usernames.toSorted()} // sends 4 strings
150
+
151
+ // object[] - duplicates array structure only
152
+ users={[{id:1},{id:2}]} sorted={users.toSorted()} // sends 2 arrays + 2 unique objects (not 4)
153
+ ```
154
+
155
+ **Operations breaking deduplication (create new references):**
156
+
157
+ - Arrays: `.toSorted()`, `.filter()`, `.map()`, `.slice()`, `[...arr]`
158
+ - Objects: `{...obj}`, `Object.assign()`, `structuredClone()`, `JSON.parse(JSON.stringify())`
159
+
160
+ **More examples:**
161
+
162
+ ```tsx
163
+ // ❌ Bad
164
+ <C users={users} active={users.filter(u => u.active)} />
165
+ <C product={product} productName={product.name} />
166
+
167
+ // ✅ Good
168
+ <C users={users} />
169
+ <C product={product} />
170
+ // Do filtering/destructuring in client
171
+ ```
172
+
173
+ **Exception:** Pass derived data when transformation is expensive or client doesn't need original.
174
+
175
+ ---
176
+
177
+ ## Rule 3.3: Cross-Request LRU Caching
178
+
179
+ **Impact:** HIGH
180
+ **Tags:** server, cache, lru, cross-request
181
+
182
+ ## Cross-Request LRU Caching
183
+
184
+ `React.cache()` only works within one request. For data shared across sequential requests (user clicks button A then button B), use an LRU cache.
185
+
186
+ **Implementation:**
187
+
188
+ ```typescript
189
+ import { LRUCache } from 'lru-cache'
190
+
191
+ const cache = new LRUCache<string, any>({
192
+ max: 1000,
193
+ ttl: 5 * 60 * 1000 // 5 minutes
194
+ })
195
+
196
+ export async function getUser(id: string) {
197
+ const cached = cache.get(id)
198
+ if (cached) return cached
199
+
200
+ const user = await db.user.findUnique({ where: { id } })
201
+ cache.set(id, user)
202
+ return user
203
+ }
204
+
205
+ // Request 1: DB query, result cached
206
+ // Request 2: cache hit, no DB query
207
+ ```
208
+
209
+ Use when sequential user actions hit multiple endpoints needing the same data within seconds.
210
+
211
+ **With Vercel's [Fluid Compute](https://vercel.com/docs/fluid-compute):** LRU caching is especially effective because multiple concurrent requests can share the same function instance and cache. This means the cache persists across requests without needing external storage like Redis.
212
+
213
+ **In traditional serverless:** Each invocation runs in isolation, so consider Redis for cross-process caching.
214
+
215
+ Reference: [https://github.com/isaacs/node-lru-cache](https://github.com/isaacs/node-lru-cache)
216
+
217
+ ---
218
+
219
+ ## Rule 3.4: Minimize Serialization at RSC Boundaries
220
+
221
+ **Impact:** HIGH
222
+ **Tags:** server, rsc, serialization, props
223
+
224
+ ## Minimize Serialization at RSC Boundaries
225
+
226
+ The React Server/Client boundary serializes all object properties into strings and embeds them in the HTML response and subsequent RSC requests. This serialized data directly impacts page weight and load time, so **size matters a lot**. Only pass fields that the client actually uses.
227
+
228
+ **Incorrect (serializes all 50 fields):**
229
+
230
+ ```tsx
231
+ async function Page() {
232
+ const user = await fetchUser() // 50 fields
233
+ return <Profile user={user} />
234
+ }
235
+
236
+ 'use client'
237
+ function Profile({ user }: { user: User }) {
238
+ return <div>{user.name}</div> // uses 1 field
239
+ }
240
+ ```
241
+
242
+ **Correct (serializes only 1 field):**
243
+
244
+ ```tsx
245
+ async function Page() {
246
+ const user = await fetchUser()
247
+ return <Profile name={user.name} />
248
+ }
249
+
250
+ 'use client'
251
+ function Profile({ name }: { name: string }) {
252
+ return <div>{name}</div>
253
+ }
254
+ ```
255
+
256
+ ---
257
+
258
+ ## Rule 3.5: Parallel Data Fetching with Component Composition
259
+
260
+ **Impact:** CRITICAL
261
+ **Tags:** server, rsc, parallel-fetching, composition
262
+
263
+ ## Parallel Data Fetching with Component Composition
264
+
265
+ React Server Components execute sequentially within a tree. Restructure with composition to parallelize data fetching.
266
+
267
+ **Incorrect (Sidebar waits for Page's fetch to complete):**
268
+
269
+ ```tsx
270
+ export default async function Page() {
271
+ const header = await fetchHeader()
272
+ return (
273
+ <div>
274
+ <div>{header}</div>
275
+ <Sidebar />
276
+ </div>
277
+ )
278
+ }
279
+
280
+ async function Sidebar() {
281
+ const items = await fetchSidebarItems()
282
+ return <nav>{items.map(renderItem)}</nav>
283
+ }
284
+ ```
285
+
286
+ **Correct (both fetch simultaneously):**
287
+
288
+ ```tsx
289
+ async function Header() {
290
+ const data = await fetchHeader()
291
+ return <div>{data}</div>
292
+ }
293
+
294
+ async function Sidebar() {
295
+ const items = await fetchSidebarItems()
296
+ return <nav>{items.map(renderItem)}</nav>
297
+ }
298
+
299
+ export default function Page() {
300
+ return (
301
+ <div>
302
+ <Header />
303
+ <Sidebar />
304
+ </div>
305
+ )
306
+ }
307
+ ```
308
+
309
+ **Alternative with children prop:**
310
+
311
+ ```tsx
312
+ async function Header() {
313
+ const data = await fetchHeader()
314
+ return <div>{data}</div>
315
+ }
316
+
317
+ async function Sidebar() {
318
+ const items = await fetchSidebarItems()
319
+ return <nav>{items.map(renderItem)}</nav>
320
+ }
321
+
322
+ function Layout({ children }: { children: ReactNode }) {
323
+ return (
324
+ <div>
325
+ <Header />
326
+ {children}
327
+ </div>
328
+ )
329
+ }
330
+
331
+ export default function Page() {
332
+ return (
333
+ <Layout>
334
+ <Sidebar />
335
+ </Layout>
336
+ )
337
+ }
338
+ ```
339
+
340
+ ---
341
+
342
+ ## Rule 3.6: Per-Request Deduplication with React.cache()
343
+
344
+ **Impact:** MEDIUM
345
+ **Tags:** server, cache, react-cache, deduplication
346
+
347
+ ## Per-Request Deduplication with React.cache()
348
+
349
+ Use `React.cache()` for server-side request deduplication. Authentication and database queries benefit most.
350
+
351
+ **Usage:**
352
+
353
+ ```typescript
354
+ import { cache } from 'react'
355
+
356
+ export const getCurrentUser = cache(async () => {
357
+ const session = await auth()
358
+ if (!session?.user?.id) return null
359
+ return await db.user.findUnique({
360
+ where: { id: session.user.id }
361
+ })
362
+ })
363
+ ```
364
+
365
+ Within a single request, multiple calls to `getCurrentUser()` execute the query only once.
366
+
367
+ **Avoid inline objects as arguments:**
368
+
369
+ `React.cache()` uses shallow equality (`Object.is`) to determine cache hits. Inline objects create new references each call, preventing cache hits.
370
+
371
+ **Incorrect (always cache miss):**
372
+
373
+ ```typescript
374
+ const getUser = cache(async (params: { uid: number }) => {
375
+ return await db.user.findUnique({ where: { id: params.uid } })
376
+ })
377
+
378
+ // Each call creates new object, never hits cache
379
+ getUser({ uid: 1 })
380
+ getUser({ uid: 1 }) // Cache miss, runs query again
381
+ ```
382
+
383
+ **Correct (cache hit):**
384
+
385
+ ```typescript
386
+ const getUser = cache(async (uid: number) => {
387
+ return await db.user.findUnique({ where: { id: uid } })
388
+ })
389
+
390
+ // Primitive args use value equality
391
+ getUser(1)
392
+ getUser(1) // Cache hit, returns cached result
393
+ ```
394
+
395
+ If you must pass objects, pass the same reference:
396
+
397
+ ```typescript
398
+ const params = { uid: 1 }
399
+ getUser(params) // Query runs
400
+ getUser(params) // Cache hit (same reference)
401
+ ```
402
+
403
+ **Next.js-Specific Note:**
404
+
405
+ In Next.js, the `fetch` API is automatically extended with request memoization. Requests with the same URL and options are automatically deduplicated within a single request, so you don't need `React.cache()` for `fetch` calls. However, `React.cache()` is still essential for other async tasks:
406
+
407
+ - Database queries (Prisma, Drizzle, etc.)
408
+ - Heavy computations
409
+ - Authentication checks
410
+ - File system operations
411
+ - Any non-fetch async work
412
+
413
+ Use `React.cache()` to deduplicate these operations across your component tree.
414
+
415
+ Reference: [React.cache documentation](https://react.dev/reference/react/cache)
416
+
417
+ ---
418
+
419
+ ## Rule 3.7: Use after() for Non-Blocking Operations
420
+
421
+ **Impact:** MEDIUM
422
+ **Tags:** server, async, logging, analytics, side-effects
423
+
424
+ ## Use after() for Non-Blocking Operations
425
+
426
+ Use Next.js's `after()` to schedule work that should execute after a response is sent. This prevents logging, analytics, and other side effects from blocking the response.
427
+
428
+ **Incorrect (blocks response):**
429
+
430
+ ```tsx
431
+ import { logUserAction } from '@/app/utils'
432
+
433
+ export async function POST(request: Request) {
434
+ // Perform mutation
435
+ await updateDatabase(request)
436
+
437
+ // Logging blocks the response
438
+ const userAgent = request.headers.get('user-agent') || 'unknown'
439
+ await logUserAction({ userAgent })
440
+
441
+ return new Response(JSON.stringify({ status: 'success' }), {
442
+ status: 200,
443
+ headers: { 'Content-Type': 'application/json' }
444
+ })
445
+ }
446
+ ```
447
+
448
+ **Correct (non-blocking):**
449
+
450
+ ```tsx
451
+ import { after } from 'next/server'
452
+ import { headers, cookies } from 'next/headers'
453
+ import { logUserAction } from '@/app/utils'
454
+
455
+ export async function POST(request: Request) {
456
+ // Perform mutation
457
+ await updateDatabase(request)
458
+
459
+ // Log after response is sent
460
+ after(async () => {
461
+ const userAgent = (await headers()).get('user-agent') || 'unknown'
462
+ const sessionCookie = (await cookies()).get('session-id')?.value || 'anonymous'
463
+
464
+ logUserAction({ sessionCookie, userAgent })
465
+ })
466
+
467
+ return new Response(JSON.stringify({ status: 'success' }), {
468
+ status: 200,
469
+ headers: { 'Content-Type': 'application/json' }
470
+ })
471
+ }
472
+ ```
473
+
474
+ The response is sent immediately while logging happens in the background.
475
+
476
+ **Common use cases:**
477
+
478
+ - Analytics tracking
479
+ - Audit logging
480
+ - Sending notifications
481
+ - Cache invalidation
482
+ - Cleanup tasks
483
+
484
+ **Important notes:**
485
+
486
+ - `after()` runs even if the response fails or redirects
487
+ - Works in Server Actions, Route Handlers, and Server Components
488
+
489
+ Reference: [https://nextjs.org/docs/app/api-reference/functions/after](https://nextjs.org/docs/app/api-reference/functions/after)
490
+