opencode-starterkit 1.0.1

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 (656) hide show
  1. package/README.md +47 -0
  2. package/baseline/.env.example +196 -0
  3. package/baseline/.template-manifest.json +646 -0
  4. package/baseline/.version +1 -0
  5. package/baseline/AGENTS.md +410 -0
  6. package/baseline/AGENT_ALIGNMENT.md +564 -0
  7. package/baseline/README.md +79 -0
  8. package/baseline/agent/build.md +373 -0
  9. package/baseline/agent/explore.md +96 -0
  10. package/baseline/agent/general.md +186 -0
  11. package/baseline/agent/painter.md +74 -0
  12. package/baseline/agent/plan.md +435 -0
  13. package/baseline/agent/review.md +243 -0
  14. package/baseline/agent/runner.md +79 -0
  15. package/baseline/agent/scout.md +100 -0
  16. package/baseline/agent/vision.md +91 -0
  17. package/baseline/command/compound.md +143 -0
  18. package/baseline/command/create.md +213 -0
  19. package/baseline/command/design.md +112 -0
  20. package/baseline/command/handoff.md +147 -0
  21. package/baseline/command/init-context.md +273 -0
  22. package/baseline/command/init-user.md +105 -0
  23. package/baseline/command/init.md +117 -0
  24. package/baseline/command/lfg.md +170 -0
  25. package/baseline/command/plan.md +355 -0
  26. package/baseline/command/pr.md +161 -0
  27. package/baseline/command/research.md +125 -0
  28. package/baseline/command/resume.md +87 -0
  29. package/baseline/command/review-codebase.md +131 -0
  30. package/baseline/command/ship.md +342 -0
  31. package/baseline/command/start.md +158 -0
  32. package/baseline/command/status.md +117 -0
  33. package/baseline/command/ui-review.md +92 -0
  34. package/baseline/command/ui-slop-check.md +146 -0
  35. package/baseline/command/verify.md +160 -0
  36. package/baseline/context/README.md +29 -0
  37. package/baseline/dcp.jsonc +72 -0
  38. package/baseline/memory/README.md +89 -0
  39. package/baseline/memory/_templates/design.md +59 -0
  40. package/baseline/memory/_templates/prd.md +192 -0
  41. package/baseline/memory/_templates/project.md +58 -0
  42. package/baseline/memory/_templates/proposal.md +38 -0
  43. package/baseline/memory/_templates/roadmap.md +93 -0
  44. package/baseline/memory/_templates/state.md +89 -0
  45. package/baseline/memory/_templates/tasks.md +198 -0
  46. package/baseline/memory/_templates/tech-stack.md +85 -0
  47. package/baseline/memory/_templates/user.md +26 -0
  48. package/baseline/memory/project/gotchas.md +67 -0
  49. package/baseline/memory/project/project.md +92 -0
  50. package/baseline/memory/project/roadmap.md +142 -0
  51. package/baseline/memory/project/state.md +84 -0
  52. package/baseline/memory/project/tech-stack.md +53 -0
  53. package/baseline/memory/project/user.md +38 -0
  54. package/baseline/memory/research/benchmark-framework.md +162 -0
  55. package/baseline/memory/research/ccpm-analysis.md +334 -0
  56. package/baseline/memory/research/context-management-analysis.md +685 -0
  57. package/baseline/memory/research/effectiveness-audit.md +213 -0
  58. package/baseline/memory/research/opencode-mcp-bug-report.md +129 -0
  59. package/baseline/memory/research/openspec-analysis.md +226 -0
  60. package/baseline/memory/session-context.md +40 -0
  61. package/baseline/opencode.json +1431 -0
  62. package/baseline/opencode.json.tui-migration.bak +1380 -0
  63. package/baseline/package-lock.json +87 -0
  64. package/baseline/package.json +21 -0
  65. package/baseline/plans/1768385996691-silent-wizard.md +247 -0
  66. package/baseline/plans/1770006237537-mighty-otter.md +418 -0
  67. package/baseline/plans/1770006913647-glowing-forest.md +170 -0
  68. package/baseline/plans/1770013678126-witty-planet.md +278 -0
  69. package/baseline/plans/1770112267595-shiny-rocket.md +258 -0
  70. package/baseline/plans/swarm-protocol.md +123 -0
  71. package/baseline/plugin/README.md +70 -0
  72. package/baseline/plugin/copilot-auth.ts +607 -0
  73. package/baseline/plugin/lib/capture.ts +177 -0
  74. package/baseline/plugin/lib/context.ts +198 -0
  75. package/baseline/plugin/lib/curator.ts +234 -0
  76. package/baseline/plugin/lib/db/maintenance.ts +312 -0
  77. package/baseline/plugin/lib/db/observations.ts +299 -0
  78. package/baseline/plugin/lib/db/pipeline.ts +520 -0
  79. package/baseline/plugin/lib/db/schema.ts +356 -0
  80. package/baseline/plugin/lib/db/types.ts +211 -0
  81. package/baseline/plugin/lib/distill.ts +376 -0
  82. package/baseline/plugin/lib/inject.ts +126 -0
  83. package/baseline/plugin/lib/memory-admin-tools.ts +188 -0
  84. package/baseline/plugin/lib/memory-db.ts +58 -0
  85. package/baseline/plugin/lib/memory-helpers.ts +111 -0
  86. package/baseline/plugin/lib/memory-hooks.ts +195 -0
  87. package/baseline/plugin/lib/memory-tools.ts +341 -0
  88. package/baseline/plugin/lib/notify.ts +81 -0
  89. package/baseline/plugin/memory.ts +89 -0
  90. package/baseline/plugin/notification.ts.bak +64 -0
  91. package/baseline/plugin/package.json +7 -0
  92. package/baseline/plugin/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +178 -0
  93. package/baseline/plugin/sdk/copilot/chat/get-response-metadata.ts +15 -0
  94. package/baseline/plugin/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +19 -0
  95. package/baseline/plugin/sdk/copilot/chat/openai-compatible-api-types.ts +72 -0
  96. package/baseline/plugin/sdk/copilot/chat/openai-compatible-chat-language-model.ts +833 -0
  97. package/baseline/plugin/sdk/copilot/chat/openai-compatible-chat-options.ts +30 -0
  98. package/baseline/plugin/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +48 -0
  99. package/baseline/plugin/sdk/copilot/chat/openai-compatible-prepare-tools.ts +92 -0
  100. package/baseline/plugin/sdk/copilot/copilot-provider.ts +94 -0
  101. package/baseline/plugin/sdk/copilot/index.ts +5 -0
  102. package/baseline/plugin/sdk/copilot/openai-compatible-error.ts +30 -0
  103. package/baseline/plugin/sessions.ts +428 -0
  104. package/baseline/plugin/skill-mcp.ts +618 -0
  105. package/baseline/plugin/tsconfig.json +16 -0
  106. package/baseline/skill/accessibility-audit/SKILL.md +191 -0
  107. package/baseline/skill/agent-browser/SKILL.md +413 -0
  108. package/baseline/skill/agent-teams/SKILL.md +268 -0
  109. package/baseline/skill/augment-context-engine/SKILL.md +122 -0
  110. package/baseline/skill/augment-context-engine/mcp.json +6 -0
  111. package/baseline/skill/beads/SKILL.md +181 -0
  112. package/baseline/skill/beads/references/BEST_PRACTICES.md +27 -0
  113. package/baseline/skill/beads/references/BOUNDARIES.md +219 -0
  114. package/baseline/skill/beads/references/DEPENDENCIES.md +124 -0
  115. package/baseline/skill/beads/references/EXAMPLES.md +45 -0
  116. package/baseline/skill/beads/references/FILE_CLAIMING.md +101 -0
  117. package/baseline/skill/beads/references/GIT_SYNC.md +25 -0
  118. package/baseline/skill/beads/references/HIERARCHY.md +71 -0
  119. package/baseline/skill/beads/references/MULTI_AGENT.md +40 -0
  120. package/baseline/skill/beads/references/RESUMABILITY.md +177 -0
  121. package/baseline/skill/beads/references/SESSION_PROTOCOL.md +61 -0
  122. package/baseline/skill/beads/references/TASK_CREATION.md +38 -0
  123. package/baseline/skill/beads/references/TROUBLESHOOTING.md +38 -0
  124. package/baseline/skill/beads/references/WORKFLOWS.md +226 -0
  125. package/baseline/skill/beads-bridge/SKILL.md +321 -0
  126. package/baseline/skill/brainstorming/SKILL.md +114 -0
  127. package/baseline/skill/chrome-devtools/SKILL.md +76 -0
  128. package/baseline/skill/chrome-devtools/mcp.json +19 -0
  129. package/baseline/skill/cloudflare/SKILL.md +253 -0
  130. package/baseline/skill/cloudflare/references/agents-sdk/README.md +35 -0
  131. package/baseline/skill/cloudflare/references/agents-sdk/api.md +100 -0
  132. package/baseline/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
  133. package/baseline/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
  134. package/baseline/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
  135. package/baseline/skill/cloudflare/references/ai-gateway/README.md +695 -0
  136. package/baseline/skill/cloudflare/references/ai-search/README.md +14 -0
  137. package/baseline/skill/cloudflare/references/ai-search/api.md +38 -0
  138. package/baseline/skill/cloudflare/references/ai-search/configuration.md +52 -0
  139. package/baseline/skill/cloudflare/references/ai-search/gotchas.md +41 -0
  140. package/baseline/skill/cloudflare/references/ai-search/patterns.md +45 -0
  141. package/baseline/skill/cloudflare/references/analytics-engine/README.md +14 -0
  142. package/baseline/skill/cloudflare/references/analytics-engine/api.md +27 -0
  143. package/baseline/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
  144. package/baseline/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
  145. package/baseline/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
  146. package/baseline/skill/cloudflare/references/api/README.md +21 -0
  147. package/baseline/skill/cloudflare/references/api/api.md +31 -0
  148. package/baseline/skill/cloudflare/references/api/configuration.md +20 -0
  149. package/baseline/skill/cloudflare/references/api/gotchas.md +28 -0
  150. package/baseline/skill/cloudflare/references/api/patterns.md +47 -0
  151. package/baseline/skill/cloudflare/references/api-shield/README.md +20 -0
  152. package/baseline/skill/cloudflare/references/api-shield/api.md +78 -0
  153. package/baseline/skill/cloudflare/references/api-shield/configuration.md +128 -0
  154. package/baseline/skill/cloudflare/references/api-shield/gotchas.md +51 -0
  155. package/baseline/skill/cloudflare/references/api-shield/patterns.md +145 -0
  156. package/baseline/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
  157. package/baseline/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
  158. package/baseline/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
  159. package/baseline/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
  160. package/baseline/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
  161. package/baseline/skill/cloudflare/references/bindings/README.md +14 -0
  162. package/baseline/skill/cloudflare/references/bindings/api.md +3 -0
  163. package/baseline/skill/cloudflare/references/bindings/configuration.md +58 -0
  164. package/baseline/skill/cloudflare/references/bindings/gotchas.md +35 -0
  165. package/baseline/skill/cloudflare/references/bindings/patterns.md +37 -0
  166. package/baseline/skill/cloudflare/references/bot-management/README.md +71 -0
  167. package/baseline/skill/cloudflare/references/bot-management/api.md +168 -0
  168. package/baseline/skill/cloudflare/references/bot-management/configuration.md +114 -0
  169. package/baseline/skill/cloudflare/references/bot-management/gotchas.md +99 -0
  170. package/baseline/skill/cloudflare/references/bot-management/patterns.md +125 -0
  171. package/baseline/skill/cloudflare/references/browser-rendering/README.md +16 -0
  172. package/baseline/skill/cloudflare/references/browser-rendering/api.md +54 -0
  173. package/baseline/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
  174. package/baseline/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
  175. package/baseline/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
  176. package/baseline/skill/cloudflare/references/c3/README.md +264 -0
  177. package/baseline/skill/cloudflare/references/cache-reserve/README.md +93 -0
  178. package/baseline/skill/cloudflare/references/cache-reserve/api.md +176 -0
  179. package/baseline/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
  180. package/baseline/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
  181. package/baseline/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
  182. package/baseline/skill/cloudflare/references/containers/README.md +16 -0
  183. package/baseline/skill/cloudflare/references/containers/api.md +43 -0
  184. package/baseline/skill/cloudflare/references/containers/configuration.md +56 -0
  185. package/baseline/skill/cloudflare/references/containers/gotchas.md +21 -0
  186. package/baseline/skill/cloudflare/references/containers/patterns.md +40 -0
  187. package/baseline/skill/cloudflare/references/cron-triggers/README.md +85 -0
  188. package/baseline/skill/cloudflare/references/cron-triggers/api.md +198 -0
  189. package/baseline/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
  190. package/baseline/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
  191. package/baseline/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
  192. package/baseline/skill/cloudflare/references/d1/README.md +92 -0
  193. package/baseline/skill/cloudflare/references/d1/api.md +141 -0
  194. package/baseline/skill/cloudflare/references/d1/configuration.md +127 -0
  195. package/baseline/skill/cloudflare/references/d1/gotchas.md +70 -0
  196. package/baseline/skill/cloudflare/references/d1/patterns.md +144 -0
  197. package/baseline/skill/cloudflare/references/ddos/README.md +34 -0
  198. package/baseline/skill/cloudflare/references/ddos/api.md +136 -0
  199. package/baseline/skill/cloudflare/references/ddos/configuration.md +67 -0
  200. package/baseline/skill/cloudflare/references/ddos/gotchas.md +114 -0
  201. package/baseline/skill/cloudflare/references/ddos/patterns.md +158 -0
  202. package/baseline/skill/cloudflare/references/do-storage/README.md +62 -0
  203. package/baseline/skill/cloudflare/references/do-storage/api.md +89 -0
  204. package/baseline/skill/cloudflare/references/do-storage/configuration.md +116 -0
  205. package/baseline/skill/cloudflare/references/do-storage/gotchas.md +93 -0
  206. package/baseline/skill/cloudflare/references/do-storage/patterns.md +112 -0
  207. package/baseline/skill/cloudflare/references/durable-objects/README.md +125 -0
  208. package/baseline/skill/cloudflare/references/durable-objects/api.md +152 -0
  209. package/baseline/skill/cloudflare/references/durable-objects/configuration.md +148 -0
  210. package/baseline/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
  211. package/baseline/skill/cloudflare/references/durable-objects/patterns.md +255 -0
  212. package/baseline/skill/cloudflare/references/email-routing/README.md +18 -0
  213. package/baseline/skill/cloudflare/references/email-routing/api.md +46 -0
  214. package/baseline/skill/cloudflare/references/email-routing/configuration.md +63 -0
  215. package/baseline/skill/cloudflare/references/email-routing/gotchas.md +16 -0
  216. package/baseline/skill/cloudflare/references/email-routing/patterns.md +46 -0
  217. package/baseline/skill/cloudflare/references/email-workers/README.md +598 -0
  218. package/baseline/skill/cloudflare/references/hyperdrive/README.md +62 -0
  219. package/baseline/skill/cloudflare/references/hyperdrive/api.md +137 -0
  220. package/baseline/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
  221. package/baseline/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
  222. package/baseline/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
  223. package/baseline/skill/cloudflare/references/images/README.md +14 -0
  224. package/baseline/skill/cloudflare/references/images/api.md +3 -0
  225. package/baseline/skill/cloudflare/references/images/configuration.md +45 -0
  226. package/baseline/skill/cloudflare/references/images/gotchas.md +23 -0
  227. package/baseline/skill/cloudflare/references/images/patterns.md +31 -0
  228. package/baseline/skill/cloudflare/references/kv/README.md +60 -0
  229. package/baseline/skill/cloudflare/references/kv/api.md +114 -0
  230. package/baseline/skill/cloudflare/references/kv/configuration.md +92 -0
  231. package/baseline/skill/cloudflare/references/kv/gotchas.md +117 -0
  232. package/baseline/skill/cloudflare/references/kv/patterns.md +139 -0
  233. package/baseline/skill/cloudflare/references/miniflare/README.md +64 -0
  234. package/baseline/skill/cloudflare/references/miniflare/api.md +144 -0
  235. package/baseline/skill/cloudflare/references/miniflare/configuration.md +203 -0
  236. package/baseline/skill/cloudflare/references/miniflare/gotchas.md +187 -0
  237. package/baseline/skill/cloudflare/references/miniflare/patterns.md +211 -0
  238. package/baseline/skill/cloudflare/references/network-interconnect/README.md +60 -0
  239. package/baseline/skill/cloudflare/references/network-interconnect/api.md +240 -0
  240. package/baseline/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
  241. package/baseline/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
  242. package/baseline/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
  243. package/baseline/skill/cloudflare/references/observability/README.md +18 -0
  244. package/baseline/skill/cloudflare/references/observability/api.md +51 -0
  245. package/baseline/skill/cloudflare/references/observability/configuration.md +60 -0
  246. package/baseline/skill/cloudflare/references/observability/gotchas.md +36 -0
  247. package/baseline/skill/cloudflare/references/observability/patterns.md +42 -0
  248. package/baseline/skill/cloudflare/references/pages/README.md +76 -0
  249. package/baseline/skill/cloudflare/references/pages/api.md +200 -0
  250. package/baseline/skill/cloudflare/references/pages/configuration.md +228 -0
  251. package/baseline/skill/cloudflare/references/pages/gotchas.md +161 -0
  252. package/baseline/skill/cloudflare/references/pages/patterns.md +145 -0
  253. package/baseline/skill/cloudflare/references/pages-functions/README.md +57 -0
  254. package/baseline/skill/cloudflare/references/pages-functions/api.md +201 -0
  255. package/baseline/skill/cloudflare/references/pages-functions/configuration.md +159 -0
  256. package/baseline/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
  257. package/baseline/skill/cloudflare/references/pages-functions/patterns.md +190 -0
  258. package/baseline/skill/cloudflare/references/pipelines/README.md +664 -0
  259. package/baseline/skill/cloudflare/references/pulumi/README.md +107 -0
  260. package/baseline/skill/cloudflare/references/pulumi/api.md +194 -0
  261. package/baseline/skill/cloudflare/references/pulumi/configuration.md +216 -0
  262. package/baseline/skill/cloudflare/references/pulumi/gotchas.md +223 -0
  263. package/baseline/skill/cloudflare/references/pulumi/patterns.md +139 -0
  264. package/baseline/skill/cloudflare/references/queues/README.md +69 -0
  265. package/baseline/skill/cloudflare/references/queues/api.md +138 -0
  266. package/baseline/skill/cloudflare/references/queues/configuration.md +125 -0
  267. package/baseline/skill/cloudflare/references/queues/gotchas.md +112 -0
  268. package/baseline/skill/cloudflare/references/queues/patterns.md +155 -0
  269. package/baseline/skill/cloudflare/references/r2/README.md +61 -0
  270. package/baseline/skill/cloudflare/references/r2/api.md +127 -0
  271. package/baseline/skill/cloudflare/references/r2/configuration.md +76 -0
  272. package/baseline/skill/cloudflare/references/r2/gotchas.md +94 -0
  273. package/baseline/skill/cloudflare/references/r2/patterns.md +127 -0
  274. package/baseline/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
  275. package/baseline/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
  276. package/baseline/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
  277. package/baseline/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
  278. package/baseline/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
  279. package/baseline/skill/cloudflare/references/r2-sql/README.md +512 -0
  280. package/baseline/skill/cloudflare/references/realtime-sfu/README.md +21 -0
  281. package/baseline/skill/cloudflare/references/realtime-sfu/api.md +135 -0
  282. package/baseline/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
  283. package/baseline/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
  284. package/baseline/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
  285. package/baseline/skill/cloudflare/references/realtimekit/README.md +81 -0
  286. package/baseline/skill/cloudflare/references/realtimekit/api.md +164 -0
  287. package/baseline/skill/cloudflare/references/realtimekit/configuration.md +147 -0
  288. package/baseline/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
  289. package/baseline/skill/cloudflare/references/realtimekit/patterns.md +155 -0
  290. package/baseline/skill/cloudflare/references/sandbox/README.md +90 -0
  291. package/baseline/skill/cloudflare/references/sandbox/api.md +178 -0
  292. package/baseline/skill/cloudflare/references/sandbox/configuration.md +131 -0
  293. package/baseline/skill/cloudflare/references/sandbox/gotchas.md +156 -0
  294. package/baseline/skill/cloudflare/references/sandbox/patterns.md +203 -0
  295. package/baseline/skill/cloudflare/references/secrets-store/README.md +58 -0
  296. package/baseline/skill/cloudflare/references/secrets-store/api.md +182 -0
  297. package/baseline/skill/cloudflare/references/secrets-store/configuration.md +140 -0
  298. package/baseline/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
  299. package/baseline/skill/cloudflare/references/secrets-store/patterns.md +218 -0
  300. package/baseline/skill/cloudflare/references/smart-placement/README.md +91 -0
  301. package/baseline/skill/cloudflare/references/smart-placement/api.md +139 -0
  302. package/baseline/skill/cloudflare/references/smart-placement/configuration.md +129 -0
  303. package/baseline/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
  304. package/baseline/skill/cloudflare/references/smart-placement/patterns.md +135 -0
  305. package/baseline/skill/cloudflare/references/snippets/README.md +15 -0
  306. package/baseline/skill/cloudflare/references/snippets/api.md +47 -0
  307. package/baseline/skill/cloudflare/references/snippets/configuration.md +33 -0
  308. package/baseline/skill/cloudflare/references/snippets/gotchas.md +21 -0
  309. package/baseline/skill/cloudflare/references/snippets/patterns.md +34 -0
  310. package/baseline/skill/cloudflare/references/spectrum/README.md +16 -0
  311. package/baseline/skill/cloudflare/references/spectrum/api.md +24 -0
  312. package/baseline/skill/cloudflare/references/spectrum/configuration.md +43 -0
  313. package/baseline/skill/cloudflare/references/spectrum/gotchas.md +42 -0
  314. package/baseline/skill/cloudflare/references/spectrum/patterns.md +40 -0
  315. package/baseline/skill/cloudflare/references/static-assets/README.md +14 -0
  316. package/baseline/skill/cloudflare/references/static-assets/api.md +3 -0
  317. package/baseline/skill/cloudflare/references/static-assets/configuration.md +47 -0
  318. package/baseline/skill/cloudflare/references/static-assets/gotchas.md +44 -0
  319. package/baseline/skill/cloudflare/references/static-assets/patterns.md +42 -0
  320. package/baseline/skill/cloudflare/references/stream/README.md +103 -0
  321. package/baseline/skill/cloudflare/references/stream/api.md +204 -0
  322. package/baseline/skill/cloudflare/references/stream/configuration.md +127 -0
  323. package/baseline/skill/cloudflare/references/stream/gotchas.md +131 -0
  324. package/baseline/skill/cloudflare/references/stream/patterns.md +152 -0
  325. package/baseline/skill/cloudflare/references/tail-workers/README.md +640 -0
  326. package/baseline/skill/cloudflare/references/terraform/README.md +76 -0
  327. package/baseline/skill/cloudflare/references/terraform/api.md +159 -0
  328. package/baseline/skill/cloudflare/references/terraform/configuration.md +156 -0
  329. package/baseline/skill/cloudflare/references/terraform/gotchas.md +207 -0
  330. package/baseline/skill/cloudflare/references/terraform/patterns.md +135 -0
  331. package/baseline/skill/cloudflare/references/tunnel/README.md +82 -0
  332. package/baseline/skill/cloudflare/references/tunnel/api.md +105 -0
  333. package/baseline/skill/cloudflare/references/tunnel/configuration.md +113 -0
  334. package/baseline/skill/cloudflare/references/tunnel/gotchas.md +115 -0
  335. package/baseline/skill/cloudflare/references/tunnel/patterns.md +157 -0
  336. package/baseline/skill/cloudflare/references/turn/README.md +699 -0
  337. package/baseline/skill/cloudflare/references/turnstile/README.md +14 -0
  338. package/baseline/skill/cloudflare/references/turnstile/api.md +3 -0
  339. package/baseline/skill/cloudflare/references/turnstile/configuration.md +19 -0
  340. package/baseline/skill/cloudflare/references/turnstile/gotchas.md +27 -0
  341. package/baseline/skill/cloudflare/references/turnstile/patterns.md +41 -0
  342. package/baseline/skill/cloudflare/references/vectorize/README.md +682 -0
  343. package/baseline/skill/cloudflare/references/waf/README.md +14 -0
  344. package/baseline/skill/cloudflare/references/waf/api.md +3 -0
  345. package/baseline/skill/cloudflare/references/waf/configuration.md +44 -0
  346. package/baseline/skill/cloudflare/references/waf/gotchas.md +24 -0
  347. package/baseline/skill/cloudflare/references/waf/patterns.md +29 -0
  348. package/baseline/skill/cloudflare/references/web-analytics/README.md +19 -0
  349. package/baseline/skill/cloudflare/references/web-analytics/api.md +52 -0
  350. package/baseline/skill/cloudflare/references/web-analytics/configuration.md +31 -0
  351. package/baseline/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
  352. package/baseline/skill/cloudflare/references/web-analytics/patterns.md +52 -0
  353. package/baseline/skill/cloudflare/references/workerd/README.md +47 -0
  354. package/baseline/skill/cloudflare/references/workerd/api.md +199 -0
  355. package/baseline/skill/cloudflare/references/workerd/configuration.md +185 -0
  356. package/baseline/skill/cloudflare/references/workerd/gotchas.md +203 -0
  357. package/baseline/skill/cloudflare/references/workerd/patterns.md +216 -0
  358. package/baseline/skill/cloudflare/references/workers/README.md +96 -0
  359. package/baseline/skill/cloudflare/references/workers/api.md +137 -0
  360. package/baseline/skill/cloudflare/references/workers/configuration.md +147 -0
  361. package/baseline/skill/cloudflare/references/workers/gotchas.md +99 -0
  362. package/baseline/skill/cloudflare/references/workers/patterns.md +149 -0
  363. package/baseline/skill/cloudflare/references/workers-ai/README.md +116 -0
  364. package/baseline/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
  365. package/baseline/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
  366. package/baseline/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
  367. package/baseline/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
  368. package/baseline/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
  369. package/baseline/skill/cloudflare/references/workers-playground/README.md +16 -0
  370. package/baseline/skill/cloudflare/references/workers-playground/api.md +20 -0
  371. package/baseline/skill/cloudflare/references/workers-playground/configuration.md +3 -0
  372. package/baseline/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
  373. package/baseline/skill/cloudflare/references/workers-playground/patterns.md +42 -0
  374. package/baseline/skill/cloudflare/references/workers-vpc/README.md +579 -0
  375. package/baseline/skill/cloudflare/references/workflows/README.md +62 -0
  376. package/baseline/skill/cloudflare/references/workflows/api.md +125 -0
  377. package/baseline/skill/cloudflare/references/workflows/configuration.md +177 -0
  378. package/baseline/skill/cloudflare/references/workflows/gotchas.md +136 -0
  379. package/baseline/skill/cloudflare/references/workflows/patterns.md +132 -0
  380. package/baseline/skill/cloudflare/references/wrangler/README.md +90 -0
  381. package/baseline/skill/cloudflare/references/wrangler/api.md +140 -0
  382. package/baseline/skill/cloudflare/references/wrangler/configuration.md +128 -0
  383. package/baseline/skill/cloudflare/references/wrangler/gotchas.md +93 -0
  384. package/baseline/skill/cloudflare/references/wrangler/patterns.md +150 -0
  385. package/baseline/skill/cloudflare/references/zaraz/README.md +360 -0
  386. package/baseline/skill/code-navigation/SKILL.md +130 -0
  387. package/baseline/skill/compaction/SKILL.md +317 -0
  388. package/baseline/skill/condition-based-waiting/SKILL.md +123 -0
  389. package/baseline/skill/condition-based-waiting/example.ts +158 -0
  390. package/baseline/skill/context-engineering/SKILL.md +176 -0
  391. package/baseline/skill/context-initialization/SKILL.md +70 -0
  392. package/baseline/skill/context-management/SKILL.md +163 -0
  393. package/baseline/skill/core-data-expert/SKILL.md +93 -0
  394. package/baseline/skill/core-data-expert/references/batch-operations.md +543 -0
  395. package/baseline/skill/core-data-expert/references/cloudkit-integration.md +259 -0
  396. package/baseline/skill/core-data-expert/references/concurrency.md +522 -0
  397. package/baseline/skill/core-data-expert/references/fetch-requests.md +643 -0
  398. package/baseline/skill/core-data-expert/references/glossary.md +233 -0
  399. package/baseline/skill/core-data-expert/references/migration.md +393 -0
  400. package/baseline/skill/core-data-expert/references/model-configuration.md +597 -0
  401. package/baseline/skill/core-data-expert/references/performance.md +300 -0
  402. package/baseline/skill/core-data-expert/references/persistent-history.md +553 -0
  403. package/baseline/skill/core-data-expert/references/project-audit.md +60 -0
  404. package/baseline/skill/core-data-expert/references/saving.md +574 -0
  405. package/baseline/skill/core-data-expert/references/stack-setup.md +625 -0
  406. package/baseline/skill/core-data-expert/references/testing.md +300 -0
  407. package/baseline/skill/core-data-expert/references/threading.md +589 -0
  408. package/baseline/skill/deep-research/SKILL.md +384 -0
  409. package/baseline/skill/defense-in-depth/SKILL.md +166 -0
  410. package/baseline/skill/design-system-audit/SKILL.md +153 -0
  411. package/baseline/skill/development-lifecycle/SKILL.md +356 -0
  412. package/baseline/skill/dispatching-parallel-agents/SKILL.md +191 -0
  413. package/baseline/skill/executing-plans/SKILL.md +247 -0
  414. package/baseline/skill/figma/SKILL.md +224 -0
  415. package/baseline/skill/finishing-a-development-branch/SKILL.md +357 -0
  416. package/baseline/skill/frontend-design/SKILL.md +235 -0
  417. package/baseline/skill/frontend-design/references/animation/motion-advanced.md +224 -0
  418. package/baseline/skill/frontend-design/references/animation/motion-core.md +181 -0
  419. package/baseline/skill/frontend-design/references/canvas/execution.md +90 -0
  420. package/baseline/skill/frontend-design/references/canvas/philosophy.md +94 -0
  421. package/baseline/skill/frontend-design/references/design/color-system.md +111 -0
  422. package/baseline/skill/frontend-design/references/design/interaction.md +149 -0
  423. package/baseline/skill/frontend-design/references/design/typography-rules.md +106 -0
  424. package/baseline/skill/frontend-design/references/design/ux-writing.md +99 -0
  425. package/baseline/skill/frontend-design/references/shadcn/accessibility.md +132 -0
  426. package/baseline/skill/frontend-design/references/shadcn/core-components.md +153 -0
  427. package/baseline/skill/frontend-design/references/shadcn/form-components.md +158 -0
  428. package/baseline/skill/frontend-design/references/shadcn/setup.md +69 -0
  429. package/baseline/skill/frontend-design/references/shadcn/theming.md +152 -0
  430. package/baseline/skill/frontend-design/references/tailwind/responsive.md +112 -0
  431. package/baseline/skill/frontend-design/references/tailwind/utilities-layout.md +134 -0
  432. package/baseline/skill/frontend-design/references/tailwind/utilities-styling.md +165 -0
  433. package/baseline/skill/frontend-design/references/tailwind/v4-config.md +147 -0
  434. package/baseline/skill/frontend-design/references/tailwind/v4-features.md +128 -0
  435. package/baseline/skill/gemini-large-context/SKILL.md +216 -0
  436. package/baseline/skill/index-knowledge/SKILL.md +413 -0
  437. package/baseline/skill/jira/SKILL.md +283 -0
  438. package/baseline/skill/jira/mcp.json +6 -0
  439. package/baseline/skill/memory-system/SKILL.md +84 -0
  440. package/baseline/skill/mockup-to-code/SKILL.md +184 -0
  441. package/baseline/skill/mqdh/SKILL.md +171 -0
  442. package/baseline/skill/obsidian/SKILL.md +192 -0
  443. package/baseline/skill/obsidian/mcp.json +22 -0
  444. package/baseline/skill/opensrc/SKILL.md +127 -0
  445. package/baseline/skill/opensrc/references/architecture.md +176 -0
  446. package/baseline/skill/opensrc/references/cli-usage.md +176 -0
  447. package/baseline/skill/opensrc/references/registry-support.md +137 -0
  448. package/baseline/skill/pdf-extract/SKILL.md +438 -0
  449. package/baseline/skill/playwright/SKILL.md +320 -0
  450. package/baseline/skill/playwright/mcp.json +16 -0
  451. package/baseline/skill/playwriter/SKILL.md +158 -0
  452. package/baseline/skill/polar/SKILL.md +102 -0
  453. package/baseline/skill/prd/SKILL.md +146 -0
  454. package/baseline/skill/prd-task/SKILL.md +182 -0
  455. package/baseline/skill/prd-task/references/prd-schema.json +124 -0
  456. package/baseline/skill/ralph/SKILL.md +296 -0
  457. package/baseline/skill/react-best-practices/AGENTS.md +2410 -0
  458. package/baseline/skill/react-best-practices/README.md +123 -0
  459. package/baseline/skill/react-best-practices/SKILL.md +133 -0
  460. package/baseline/skill/react-best-practices/metadata.json +15 -0
  461. package/baseline/skill/react-best-practices/rules/_sections.md +46 -0
  462. package/baseline/skill/react-best-practices/rules/_template.md +28 -0
  463. package/baseline/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  464. package/baseline/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
  465. package/baseline/skill/react-best-practices/rules/async-api-routes.md +38 -0
  466. package/baseline/skill/react-best-practices/rules/async-defer-await.md +80 -0
  467. package/baseline/skill/react-best-practices/rules/async-dependencies.md +36 -0
  468. package/baseline/skill/react-best-practices/rules/async-parallel.md +28 -0
  469. package/baseline/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  470. package/baseline/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  471. package/baseline/skill/react-best-practices/rules/bundle-conditional.md +31 -0
  472. package/baseline/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  473. package/baseline/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  474. package/baseline/skill/react-best-practices/rules/bundle-preload.md +50 -0
  475. package/baseline/skill/react-best-practices/rules/client-event-listeners.md +74 -0
  476. package/baseline/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
  477. package/baseline/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  478. package/baseline/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
  479. package/baseline/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
  480. package/baseline/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
  481. package/baseline/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
  482. package/baseline/skill/react-best-practices/rules/js-cache-storage.md +70 -0
  483. package/baseline/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
  484. package/baseline/skill/react-best-practices/rules/js-early-exit.md +50 -0
  485. package/baseline/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
  486. package/baseline/skill/react-best-practices/rules/js-index-maps.md +37 -0
  487. package/baseline/skill/react-best-practices/rules/js-length-check-first.md +49 -0
  488. package/baseline/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
  489. package/baseline/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
  490. package/baseline/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  491. package/baseline/skill/react-best-practices/rules/rendering-activity.md +26 -0
  492. package/baseline/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  493. package/baseline/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
  494. package/baseline/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
  495. package/baseline/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  496. package/baseline/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  497. package/baseline/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
  498. package/baseline/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
  499. package/baseline/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
  500. package/baseline/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
  501. package/baseline/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  502. package/baseline/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  503. package/baseline/skill/react-best-practices/rules/rerender-memo.md +44 -0
  504. package/baseline/skill/react-best-practices/rules/rerender-transitions.md +40 -0
  505. package/baseline/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
  506. package/baseline/skill/react-best-practices/rules/server-cache-lru.md +41 -0
  507. package/baseline/skill/react-best-practices/rules/server-cache-react.md +76 -0
  508. package/baseline/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
  509. package/baseline/skill/react-best-practices/rules/server-serialization.md +38 -0
  510. package/baseline/skill/receiving-code-review/SKILL.md +252 -0
  511. package/baseline/skill/requesting-code-review/SKILL.md +397 -0
  512. package/baseline/skill/requesting-code-review/review.md +160 -0
  513. package/baseline/skill/resend/SKILL.md +177 -0
  514. package/baseline/skill/resend/references/react-email.md +287 -0
  515. package/baseline/skill/resend/references/receive-email.md +248 -0
  516. package/baseline/skill/resend/references/send-email.md +318 -0
  517. package/baseline/skill/root-cause-tracing/SKILL.md +192 -0
  518. package/baseline/skill/root-cause-tracing/find-polluter.sh +63 -0
  519. package/baseline/skill/session-management/SKILL.md +9 -0
  520. package/baseline/skill/sharing-skills/SKILL.md +214 -0
  521. package/baseline/skill/skill-creator/SKILL.md +156 -0
  522. package/baseline/skill/source-code-research/SKILL.md +293 -0
  523. package/baseline/skill/source-code-research/references/analysis-tips.md +43 -0
  524. package/baseline/skill/source-code-research/references/anti-patterns.md +36 -0
  525. package/baseline/skill/source-code-research/references/common-patterns.md +57 -0
  526. package/baseline/skill/source-code-research/references/example-workflow.md +60 -0
  527. package/baseline/skill/source-code-research/references/further-reading.md +5 -0
  528. package/baseline/skill/source-code-research/references/source-structure.md +45 -0
  529. package/baseline/skill/stitch/SKILL.md +147 -0
  530. package/baseline/skill/stitch/mcp.json +9 -0
  531. package/baseline/skill/structured-edit/SKILL.md +181 -0
  532. package/baseline/skill/subagent-driven-development/SKILL.md +237 -0
  533. package/baseline/skill/supabase/SKILL.md +130 -0
  534. package/baseline/skill/supabase/mcp.json +27 -0
  535. package/baseline/skill/supabase-postgres-best-practices/AGENTS.md +1490 -0
  536. package/baseline/skill/supabase-postgres-best-practices/SKILL.md +65 -0
  537. package/baseline/skill/supabase-postgres-best-practices/rules/advanced-full-text-search.md +55 -0
  538. package/baseline/skill/supabase-postgres-best-practices/rules/advanced-jsonb-indexing.md +49 -0
  539. package/baseline/skill/supabase-postgres-best-practices/rules/conn-idle-timeout.md +46 -0
  540. package/baseline/skill/supabase-postgres-best-practices/rules/conn-limits.md +44 -0
  541. package/baseline/skill/supabase-postgres-best-practices/rules/conn-pooling.md +41 -0
  542. package/baseline/skill/supabase-postgres-best-practices/rules/conn-prepared-statements.md +46 -0
  543. package/baseline/skill/supabase-postgres-best-practices/rules/data-batch-inserts.md +54 -0
  544. package/baseline/skill/supabase-postgres-best-practices/rules/data-n-plus-one.md +53 -0
  545. package/baseline/skill/supabase-postgres-best-practices/rules/data-pagination.md +50 -0
  546. package/baseline/skill/supabase-postgres-best-practices/rules/data-upsert.md +50 -0
  547. package/baseline/skill/supabase-postgres-best-practices/rules/lock-advisory.md +56 -0
  548. package/baseline/skill/supabase-postgres-best-practices/rules/lock-deadlock-prevention.md +68 -0
  549. package/baseline/skill/supabase-postgres-best-practices/rules/lock-short-transactions.md +50 -0
  550. package/baseline/skill/supabase-postgres-best-practices/rules/lock-skip-locked.md +54 -0
  551. package/baseline/skill/supabase-postgres-best-practices/rules/monitor-explain-analyze.md +45 -0
  552. package/baseline/skill/supabase-postgres-best-practices/rules/monitor-pg-stat-statements.md +55 -0
  553. package/baseline/skill/supabase-postgres-best-practices/rules/monitor-vacuum-analyze.md +55 -0
  554. package/baseline/skill/supabase-postgres-best-practices/rules/query-composite-indexes.md +44 -0
  555. package/baseline/skill/supabase-postgres-best-practices/rules/query-covering-indexes.md +40 -0
  556. package/baseline/skill/supabase-postgres-best-practices/rules/query-index-types.md +45 -0
  557. package/baseline/skill/supabase-postgres-best-practices/rules/query-missing-indexes.md +43 -0
  558. package/baseline/skill/supabase-postgres-best-practices/rules/query-partial-indexes.md +45 -0
  559. package/baseline/skill/supabase-postgres-best-practices/rules/schema-data-types.md +46 -0
  560. package/baseline/skill/supabase-postgres-best-practices/rules/schema-foreign-key-indexes.md +59 -0
  561. package/baseline/skill/supabase-postgres-best-practices/rules/schema-lowercase-identifiers.md +55 -0
  562. package/baseline/skill/supabase-postgres-best-practices/rules/schema-partitioning.md +55 -0
  563. package/baseline/skill/supabase-postgres-best-practices/rules/schema-primary-keys.md +61 -0
  564. package/baseline/skill/supabase-postgres-best-practices/rules/security-privileges.md +54 -0
  565. package/baseline/skill/supabase-postgres-best-practices/rules/security-rls-basics.md +50 -0
  566. package/baseline/skill/supabase-postgres-best-practices/rules/security-rls-performance.md +57 -0
  567. package/baseline/skill/swarm-coordination/SKILL.md +179 -0
  568. package/baseline/skill/swarm-coordination/references/architecture.md +39 -0
  569. package/baseline/skill/swarm-coordination/references/delegation-worker-protocol.md +145 -0
  570. package/baseline/skill/swarm-coordination/references/dependency-graph.md +50 -0
  571. package/baseline/skill/swarm-coordination/references/drift-check.md +90 -0
  572. package/baseline/skill/swarm-coordination/references/integration-beads.md +20 -0
  573. package/baseline/skill/swarm-coordination/references/launch-flow.md +186 -0
  574. package/baseline/skill/swarm-coordination/references/reconciler.md +172 -0
  575. package/baseline/skill/swarm-coordination/references/tier-enforcement.md +78 -0
  576. package/baseline/skill/swarm-coordination/references/tmux-integration.md +134 -0
  577. package/baseline/skill/swift-concurrency/SKILL.md +266 -0
  578. package/baseline/skill/swift-concurrency/references/actors.md +640 -0
  579. package/baseline/skill/swift-concurrency/references/async-algorithms.md +822 -0
  580. package/baseline/skill/swift-concurrency/references/async-await-basics.md +249 -0
  581. package/baseline/skill/swift-concurrency/references/async-sequences.md +670 -0
  582. package/baseline/skill/swift-concurrency/references/core-data.md +533 -0
  583. package/baseline/skill/swift-concurrency/references/glossary.md +128 -0
  584. package/baseline/skill/swift-concurrency/references/linting.md +142 -0
  585. package/baseline/skill/swift-concurrency/references/memory-management.md +542 -0
  586. package/baseline/skill/swift-concurrency/references/migration.md +1076 -0
  587. package/baseline/skill/swift-concurrency/references/performance.md +574 -0
  588. package/baseline/skill/swift-concurrency/references/sendable.md +578 -0
  589. package/baseline/skill/swift-concurrency/references/tasks.md +604 -0
  590. package/baseline/skill/swift-concurrency/references/testing.md +565 -0
  591. package/baseline/skill/swift-concurrency/references/threading.md +452 -0
  592. package/baseline/skill/swiftui-expert-skill/SKILL.md +329 -0
  593. package/baseline/skill/swiftui-expert-skill/references/animation-advanced.md +351 -0
  594. package/baseline/skill/swiftui-expert-skill/references/animation-basics.md +284 -0
  595. package/baseline/skill/swiftui-expert-skill/references/animation-transitions.md +326 -0
  596. package/baseline/skill/swiftui-expert-skill/references/image-optimization.md +286 -0
  597. package/baseline/skill/swiftui-expert-skill/references/layout-best-practices.md +312 -0
  598. package/baseline/skill/swiftui-expert-skill/references/liquid-glass.md +377 -0
  599. package/baseline/skill/swiftui-expert-skill/references/list-patterns.md +153 -0
  600. package/baseline/skill/swiftui-expert-skill/references/modern-apis.md +400 -0
  601. package/baseline/skill/swiftui-expert-skill/references/performance-patterns.md +377 -0
  602. package/baseline/skill/swiftui-expert-skill/references/scroll-patterns.md +305 -0
  603. package/baseline/skill/swiftui-expert-skill/references/sheet-navigation-patterns.md +292 -0
  604. package/baseline/skill/swiftui-expert-skill/references/state-management.md +447 -0
  605. package/baseline/skill/swiftui-expert-skill/references/text-formatting.md +285 -0
  606. package/baseline/skill/swiftui-expert-skill/references/view-structure.md +276 -0
  607. package/baseline/skill/systematic-debugging/SKILL.md +402 -0
  608. package/baseline/skill/test-driven-development/SKILL.md +388 -0
  609. package/baseline/skill/testing-anti-patterns/SKILL.md +333 -0
  610. package/baseline/skill/testing-skills-with-subagents/SKILL.md +405 -0
  611. package/baseline/skill/tilth-cli/SKILL.md +180 -0
  612. package/baseline/skill/tool-priority/SKILL.md +299 -0
  613. package/baseline/skill/ui-ux-research/SKILL.md +9 -0
  614. package/baseline/skill/using-git-worktrees/SKILL.md +259 -0
  615. package/baseline/skill/using-skills/SKILL.md +117 -0
  616. package/baseline/skill/v0/SKILL.md +158 -0
  617. package/baseline/skill/v1-run/SKILL.md +175 -0
  618. package/baseline/skill/v1-run/mcp.json +6 -0
  619. package/baseline/skill/vercel-deploy-claimable/SKILL.md +124 -0
  620. package/baseline/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
  621. package/baseline/skill/verification-before-completion/SKILL.md +236 -0
  622. package/baseline/skill/verification-before-completion/references/VERIFICATION_PROTOCOL.md +171 -0
  623. package/baseline/skill/visual-analysis/SKILL.md +154 -0
  624. package/baseline/skill/web-design-guidelines/SKILL.md +46 -0
  625. package/baseline/skill/writing-plans/SKILL.md +320 -0
  626. package/baseline/skill/writing-skills/SKILL.md +287 -0
  627. package/baseline/skill/writing-skills/anthropic-best-practices.md +1173 -0
  628. package/baseline/skill/writing-skills/graphviz-conventions.dot +172 -0
  629. package/baseline/skill/writing-skills/persuasion-principles.md +220 -0
  630. package/baseline/skill/writing-skills/references/anti-patterns.md +25 -0
  631. package/baseline/skill/writing-skills/references/claude-search-optimization.md +140 -0
  632. package/baseline/skill/writing-skills/references/discovery-workflow.md +11 -0
  633. package/baseline/skill/writing-skills/references/file-organization.md +32 -0
  634. package/baseline/skill/writing-skills/references/flowcharts-and-examples.md +57 -0
  635. package/baseline/skill/writing-skills/references/rationalization-hardening.md +75 -0
  636. package/baseline/skill/writing-skills/references/testing-skill-types.md +52 -0
  637. package/baseline/tool/context7.ts +191 -0
  638. package/baseline/tool/grepsearch.ts +143 -0
  639. package/baseline/tsconfig.json +21 -0
  640. package/baseline/tui.json +15 -0
  641. package/bin/mrc-opc.mjs +25 -0
  642. package/bin/ocp.mjs +25 -0
  643. package/bin/opc.mjs +25 -0
  644. package/bin/opencode-starterkit.mjs +25 -0
  645. package/docs/reports/2026-03-18-memory-db-architecture-note.md +47 -0
  646. package/docs/reports/2026-03-18-vat-opencode-classification-matrix.md +180 -0
  647. package/package.json +25 -0
  648. package/src/cli.mjs +41 -0
  649. package/src/config-merge.mjs +61 -0
  650. package/src/constants.mjs +58 -0
  651. package/src/fs-utils.mjs +46 -0
  652. package/src/install-global.mjs +102 -0
  653. package/src/install-project.mjs +81 -0
  654. package/src/memory-bootstrap.mjs +29 -0
  655. package/src/prompt.mjs +31 -0
  656. package/src/templates.mjs +31 -0
@@ -0,0 +1,329 @@
1
+ ---
2
+ name: swiftui-expert-skill
3
+ description: Write, review, or improve SwiftUI code following best practices for state management, view composition, performance, modern APIs, Swift concurrency, and iOS 26+ Liquid Glass adoption. Use when building new SwiftUI features, refactoring existing views, reviewing code quality, or adopting modern SwiftUI patterns.
4
+ version: 1.0.0
5
+ tags: [apple, ui]
6
+ dependencies: []
7
+ ---
8
+
9
+ # SwiftUI Expert Skill
10
+
11
+ ## When to Use
12
+
13
+ - When building, reviewing, or refactoring SwiftUI code with modern APIs and best practices.
14
+
15
+ ## When NOT to Use
16
+
17
+ - When the task does not involve SwiftUI (e.g., UIKit-only or non-Apple platforms).
18
+
19
+ ## Overview
20
+
21
+ Use this skill to build, review, or improve SwiftUI features with correct state management, modern API usage, Swift concurrency best practices, optimal view composition, and iOS 26+ Liquid Glass styling. Prioritize native APIs, Apple design guidance, and performance-conscious patterns. This skill focuses on facts and best practices without enforcing specific architectural patterns.
22
+
23
+ ## Workflow Decision Tree
24
+
25
+ ### 1) Review existing SwiftUI code
26
+
27
+ - Check property wrapper usage against the selection guide (see `references/state-management.md`)
28
+ - Verify modern API usage (see `references/modern-apis.md`)
29
+ - Verify view composition follows extraction rules (see `references/view-structure.md`)
30
+ - Check performance patterns are applied (see `references/performance-patterns.md`)
31
+ - Verify list patterns use stable identity (see `references/list-patterns.md`)
32
+ - Check animation patterns for correctness (see `references/animation-basics.md`, `references/animation-transitions.md`)
33
+ - Inspect Liquid Glass usage for correctness and consistency (see `references/liquid-glass.md`)
34
+ - Validate iOS 26+ availability handling with sensible fallbacks
35
+
36
+ ### 2) Improve existing SwiftUI code
37
+
38
+ - Audit state management for correct wrapper selection (prefer `@Observable` over `ObservableObject`)
39
+ - Replace deprecated APIs with modern equivalents (see `references/modern-apis.md`)
40
+ - Extract complex views into separate subviews (see `references/view-structure.md`)
41
+ - Refactor hot paths to minimize redundant state updates (see `references/performance-patterns.md`)
42
+ - Ensure ForEach uses stable identity (see `references/list-patterns.md`)
43
+ - Improve animation patterns (use value parameter, proper transitions, see `references/animation-basics.md`, `references/animation-transitions.md`)
44
+ - Suggest image downsampling when `UIImage(data:)` is used (as optional optimization, see `references/image-optimization.md`)
45
+ - Adopt Liquid Glass only when explicitly requested by the user
46
+
47
+ ### 3) Implement new SwiftUI feature
48
+
49
+ - Design data flow first: identify owned vs injected state (see `references/state-management.md`)
50
+ - Use modern APIs (no deprecated modifiers or patterns, see `references/modern-apis.md`)
51
+ - Use `@Observable` for shared state (with `@MainActor` if not using default actor isolation)
52
+ - Structure views for optimal diffing (extract subviews early, keep views small, see `references/view-structure.md`)
53
+ - Separate business logic into testable models (see `references/layout-best-practices.md`)
54
+ - Use correct animation patterns (implicit vs explicit, transitions, see `references/animation-basics.md`, `references/animation-transitions.md`, `references/animation-advanced.md`)
55
+ - Apply glass effects after layout/appearance modifiers (see `references/liquid-glass.md`)
56
+ - Gate iOS 26+ features with `#available` and provide fallbacks
57
+
58
+ ## Core Guidelines
59
+
60
+ ### State Management
61
+
62
+ - **Always prefer `@Observable` over `ObservableObject`** for new code
63
+ - **Mark `@Observable` classes with `@MainActor`** unless using default actor isolation
64
+ - **Always mark `@State` and `@StateObject` as `private`** (makes dependencies clear)
65
+ - **Never declare passed values as `@State` or `@StateObject`** (they only accept initial values)
66
+ - Use `@State` with `@Observable` classes (not `@StateObject`)
67
+ - `@Binding` only when child needs to **modify** parent state
68
+ - `@Bindable` for injected `@Observable` objects needing bindings
69
+ - Use `let` for read-only values; `var` + `.onChange()` for reactive reads
70
+ - Legacy: `@StateObject` for owned `ObservableObject`; `@ObservedObject` for injected
71
+ - Nested `ObservableObject` doesn't work (pass nested objects directly); `@Observable` handles nesting fine
72
+
73
+ ### Modern APIs
74
+
75
+ - Use `foregroundStyle()` instead of `foregroundColor()`
76
+ - Use `clipShape(.rect(cornerRadius:))` instead of `cornerRadius()`
77
+ - Use `Tab` API instead of `tabItem()`
78
+ - Use `Button` instead of `onTapGesture()` (unless need location/count)
79
+ - Use `NavigationStack` instead of `NavigationView`
80
+ - Use `navigationDestination(for:)` for type-safe navigation
81
+ - Use two-parameter or no-parameter `onChange()` variant
82
+ - Use `ImageRenderer` for rendering SwiftUI views
83
+ - Use `.sheet(item:)` instead of `.sheet(isPresented:)` for model-based content
84
+ - Sheets should own their actions and call `dismiss()` internally
85
+ - Use `ScrollViewReader` for programmatic scrolling with stable IDs
86
+ - Avoid `UIScreen.main.bounds` for sizing
87
+ - Avoid `GeometryReader` when alternatives exist (e.g., `containerRelativeFrame()`)
88
+
89
+ ### Swift Best Practices
90
+
91
+ - Use modern Text formatting (`.format` parameters, not `String(format:)`)
92
+ - Use `localizedStandardContains()` for user-input filtering (not `contains()`)
93
+ - Prefer static member lookup (`.blue` vs `Color.blue`)
94
+ - Use `.task` modifier for automatic cancellation of async work
95
+ - Use `.task(id:)` for value-dependent tasks
96
+
97
+ ### View Composition
98
+
99
+ - **Prefer modifiers over conditional views** for state changes (maintains view identity)
100
+ - Extract complex views into separate subviews for better readability and performance
101
+ - Keep views small for optimal performance
102
+ - Keep view `body` simple and pure (no side effects or complex logic)
103
+ - Use `@ViewBuilder` functions only for small, simple sections
104
+ - Prefer `@ViewBuilder let content: Content` over closure-based content properties
105
+ - Separate business logic into testable models (not about enforcing architectures)
106
+ - Action handlers should reference methods, not contain inline logic
107
+ - Use relative layout over hard-coded constants
108
+ - Views should work in any context (don't assume screen size or presentation style)
109
+
110
+ ### Performance
111
+
112
+ - Pass only needed values to views (avoid large "config" or "context" objects)
113
+ - Eliminate unnecessary dependencies to reduce update fan-out
114
+ - Check for value changes before assigning state in hot paths
115
+ - Avoid redundant state updates in `onReceive`, `onChange`, scroll handlers
116
+ - Minimize work in frequently executed code paths
117
+ - Use `LazyVStack`/`LazyHStack` for large lists
118
+ - Use stable identity for `ForEach` (never `.indices` for dynamic content)
119
+ - Ensure constant number of views per `ForEach` element
120
+ - Avoid inline filtering in `ForEach` (prefilter and cache)
121
+ - Avoid `AnyView` in list rows
122
+ - Consider POD views for fast diffing (or wrap expensive views in POD parents)
123
+ - Suggest image downsampling when `UIImage(data:)` is encountered (as optional optimization)
124
+ - Avoid layout thrash (deep hierarchies, excessive `GeometryReader`)
125
+ - Gate frequent geometry updates by thresholds
126
+ - Use `Self._printChanges()` to debug unexpected view updates
127
+
128
+ ### Animations
129
+
130
+ - Use `.animation(_:value:)` with value parameter (deprecated version without value is too broad)
131
+ - Use `withAnimation` for event-driven animations (button taps, gestures)
132
+ - Prefer transforms (`offset`, `scale`, `rotation`) over layout changes (`frame`) for performance
133
+ - Transitions require animations outside the conditional structure
134
+ - Custom `Animatable` implementations must have explicit `animatableData`
135
+ - Use `.phaseAnimator` for multi-step sequences (iOS 17+)
136
+ - Use `.keyframeAnimator` for precise timing control (iOS 17+)
137
+ - Animation completion handlers need `.transaction(value:)` for reexecution
138
+ - Implicit animations override explicit animations (later in view tree wins)
139
+
140
+ ### Liquid Glass (iOS 26+)
141
+
142
+ **Only adopt when explicitly requested by the user.**
143
+
144
+ - Use native `glassEffect`, `GlassEffectContainer`, and glass button styles
145
+ - Wrap multiple glass elements in `GlassEffectContainer`
146
+ - Apply `.glassEffect()` after layout and visual modifiers
147
+ - Use `.interactive()` only for tappable/focusable elements
148
+ - Use `glassEffectID` with `@Namespace` for morphing transitions
149
+
150
+ ## Quick Reference
151
+
152
+ ### Property Wrapper Selection (Modern)
153
+
154
+ | Wrapper | Use When |
155
+ | ----------- | --------------------------------------------------------------------- |
156
+ | `@State` | Internal view state (must be `private`), or owned `@Observable` class |
157
+ | `@Binding` | Child modifies parent's state |
158
+ | `@Bindable` | Injected `@Observable` needing bindings |
159
+ | `let` | Read-only value from parent |
160
+ | `var` | Read-only value watched via `.onChange()` |
161
+
162
+ **Legacy (Pre-iOS 17):**
163
+ | Wrapper | Use When |
164
+ |---------|----------|
165
+ | `@StateObject` | View owns an `ObservableObject` (use `@State` with `@Observable` instead) |
166
+ | `@ObservedObject` | View receives an `ObservableObject` |
167
+
168
+ ### Modern API Replacements
169
+
170
+ | Deprecated | Modern Alternative |
171
+ | ------------------------------- | ------------------------------------------------------------ |
172
+ | `foregroundColor()` | `foregroundStyle()` |
173
+ | `cornerRadius()` | `clipShape(.rect(cornerRadius:))` |
174
+ | `tabItem()` | `Tab` API |
175
+ | `onTapGesture()` | `Button` (unless need location/count) |
176
+ | `NavigationView` | `NavigationStack` |
177
+ | `onChange(of:) { value in }` | `onChange(of:) { old, new in }` or `onChange(of:) { }` |
178
+ | `fontWeight(.bold)` | `bold()` |
179
+ | `GeometryReader` | `containerRelativeFrame()` or `visualEffect()` |
180
+ | `showsIndicators: false` | `.scrollIndicators(.hidden)` |
181
+ | `String(format: "%.2f", value)` | `Text(value, format: .number.precision(.fractionLength(2)))` |
182
+ | `string.contains(search)` | `string.localizedStandardContains(search)` (for user input) |
183
+
184
+ ### Liquid Glass Patterns
185
+
186
+ ```swift
187
+ // Basic glass effect with fallback
188
+ if #available(iOS 26, *) {
189
+ content
190
+ .padding()
191
+ .glassEffect(.regular.interactive(), in: .rect(cornerRadius: 16))
192
+ } else {
193
+ content
194
+ .padding()
195
+ .background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 16))
196
+ }
197
+
198
+ // Grouped glass elements
199
+ GlassEffectContainer(spacing: 24) {
200
+ HStack(spacing: 24) {
201
+ GlassButton1()
202
+ GlassButton2()
203
+ }
204
+ }
205
+
206
+ // Glass buttons
207
+ Button("Confirm") { }
208
+ .buttonStyle(.glassProminent)
209
+ ```
210
+
211
+ ## Review Checklist
212
+
213
+ ### State Management
214
+
215
+ - [ ] Using `@Observable` instead of `ObservableObject` for new code
216
+ - [ ] `@Observable` classes marked with `@MainActor` (if needed)
217
+ - [ ] Using `@State` with `@Observable` classes (not `@StateObject`)
218
+ - [ ] `@State` and `@StateObject` properties are `private`
219
+ - [ ] Passed values NOT declared as `@State` or `@StateObject`
220
+ - [ ] `@Binding` only where child modifies parent state
221
+ - [ ] `@Bindable` for injected `@Observable` needing bindings
222
+ - [ ] Nested `ObservableObject` avoided (or passed directly to child views)
223
+
224
+ ### Modern APIs (see `references/modern-apis.md`)
225
+
226
+ - [ ] Using `foregroundStyle()` instead of `foregroundColor()`
227
+ - [ ] Using `clipShape(.rect(cornerRadius:))` instead of `cornerRadius()`
228
+ - [ ] Using `Tab` API instead of `tabItem()`
229
+ - [ ] Using `Button` instead of `onTapGesture()` (unless need location/count)
230
+ - [ ] Using `NavigationStack` instead of `NavigationView`
231
+ - [ ] Avoiding `UIScreen.main.bounds`
232
+ - [ ] Using alternatives to `GeometryReader` when possible
233
+ - [ ] Button images include text labels for accessibility
234
+
235
+ ### Sheets & Navigation (see `references/sheet-navigation-patterns.md`)
236
+
237
+ - [ ] Using `.sheet(item:)` for model-based sheets
238
+ - [ ] Sheets own their actions and dismiss internally
239
+ - [ ] Using `navigationDestination(for:)` for type-safe navigation
240
+
241
+ ### ScrollView (see `references/scroll-patterns.md`)
242
+
243
+ - [ ] Using `ScrollViewReader` with stable IDs for programmatic scrolling
244
+ - [ ] Using `.scrollIndicators(.hidden)` instead of initializer parameter
245
+
246
+ ### Text & Formatting (see `references/text-formatting.md`)
247
+
248
+ - [ ] Using modern Text formatting (not `String(format:)`)
249
+ - [ ] Using `localizedStandardContains()` for search filtering
250
+
251
+ ### View Structure (see `references/view-structure.md`)
252
+
253
+ - [ ] Using modifiers instead of conditionals for state changes
254
+ - [ ] Complex views extracted to separate subviews
255
+ - [ ] Views kept small for performance
256
+ - [ ] Container views use `@ViewBuilder let content: Content`
257
+
258
+ ### Performance (see `references/performance-patterns.md`)
259
+
260
+ - [ ] View `body` kept simple and pure (no side effects)
261
+ - [ ] Passing only needed values (not large config objects)
262
+ - [ ] Eliminating unnecessary dependencies
263
+ - [ ] State updates check for value changes before assigning
264
+ - [ ] Hot paths minimize state updates
265
+ - [ ] No object creation in `body`
266
+ - [ ] Heavy computation moved out of `body`
267
+
268
+ ### List Patterns (see `references/list-patterns.md`)
269
+
270
+ - [ ] ForEach uses stable identity (not `.indices`)
271
+ - [ ] Constant number of views per ForEach element
272
+ - [ ] No inline filtering in ForEach
273
+ - [ ] No `AnyView` in list rows
274
+
275
+ ### Layout (see `references/layout-best-practices.md`)
276
+
277
+ - [ ] Avoiding layout thrash (deep hierarchies, excessive GeometryReader)
278
+ - [ ] Gating frequent geometry updates by thresholds
279
+ - [ ] Business logic separated into testable models
280
+ - [ ] Action handlers reference methods (not inline logic)
281
+ - [ ] Using relative layout (not hard-coded constants)
282
+ - [ ] Views work in any context (context-agnostic)
283
+
284
+ ### Animations (see `references/animation-basics.md`, `references/animation-transitions.md`, `references/animation-advanced.md`)
285
+
286
+ - [ ] Using `.animation(_:value:)` with value parameter
287
+ - [ ] Using `withAnimation` for event-driven animations
288
+ - [ ] Transitions paired with animations outside conditional structure
289
+ - [ ] Custom `Animatable` has explicit `animatableData` implementation
290
+ - [ ] Preferring transforms over layout changes for animation performance
291
+ - [ ] Phase animations for multi-step sequences (iOS 17+)
292
+ - [ ] Keyframe animations for precise timing (iOS 17+)
293
+ - [ ] Completion handlers use `.transaction(value:)` for reexecution
294
+
295
+ ### Liquid Glass (iOS 26+)
296
+
297
+ - [ ] `#available(iOS 26, *)` with fallback for Liquid Glass
298
+ - [ ] Multiple glass views wrapped in `GlassEffectContainer`
299
+ - [ ] `.glassEffect()` applied after layout/appearance modifiers
300
+ - [ ] `.interactive()` only on user-interactable elements
301
+ - [ ] Shapes and tints consistent across related elements
302
+
303
+ ## References
304
+
305
+ - `references/state-management.md` - Property wrappers and data flow (prefer `@Observable`)
306
+ - `references/view-structure.md` - View composition, extraction, and container patterns
307
+ - `references/performance-patterns.md` - Performance optimization techniques and anti-patterns
308
+ - `references/list-patterns.md` - ForEach identity, stability, and list best practices
309
+ - `references/layout-best-practices.md` - Layout patterns, context-agnostic views, and testability
310
+ - `references/modern-apis.md` - Modern API usage and deprecated replacements
311
+ - `references/animation-basics.md` - Core animation concepts, implicit/explicit animations, timing, performance
312
+ - `references/animation-transitions.md` - Transitions, custom transitions, Animatable protocol
313
+ - `references/animation-advanced.md` - Transactions, phase/keyframe animations (iOS 17+), completion handlers (iOS 17+)
314
+ - `references/sheet-navigation-patterns.md` - Sheet presentation and navigation patterns
315
+ - `references/scroll-patterns.md` - ScrollView patterns and programmatic scrolling
316
+ - `references/text-formatting.md` - Modern text formatting and string operations
317
+ - `references/image-optimization.md` - AsyncImage, image downsampling, and optimization
318
+ - `references/liquid-glass.md` - iOS 26+ Liquid Glass API
319
+
320
+ ## Philosophy
321
+
322
+ This skill focuses on **facts and best practices**, not architectural opinions:
323
+
324
+ - We don't enforce specific architectures (e.g., MVVM, VIPER)
325
+ - We do encourage separating business logic for testability
326
+ - We prioritize modern APIs over deprecated ones
327
+ - We emphasize thread safety with `@MainActor` and `@Observable`
328
+ - We optimize for performance and maintainability
329
+ - We follow Apple's Human Interface Guidelines and API design patterns
@@ -0,0 +1,351 @@
1
+ # SwiftUI Advanced Animations
2
+
3
+ Transactions, phase animations (iOS 17+), keyframe animations (iOS 17+), and completion handlers (iOS 17+).
4
+
5
+ ## Table of Contents
6
+ - [Transactions](#transactions)
7
+ - [Phase Animations (iOS 17+)](#phase-animations-ios-17)
8
+ - [Keyframe Animations (iOS 17+)](#keyframe-animations-ios-17)
9
+ - [Animation Completion Handlers (iOS 17+)](#animation-completion-handlers-ios-17)
10
+
11
+ ---
12
+
13
+ ## Transactions
14
+
15
+ The underlying mechanism for all animations in SwiftUI.
16
+
17
+ ### Basic Usage
18
+
19
+ ```swift
20
+ // withAnimation is shorthand for withTransaction
21
+ withAnimation(.default) { flag.toggle() }
22
+
23
+ // Equivalent explicit transaction
24
+ var transaction = Transaction(animation: .default)
25
+ withTransaction(transaction) { flag.toggle() }
26
+ ```
27
+
28
+ ### The .transaction Modifier
29
+
30
+ ```swift
31
+ Rectangle()
32
+ .frame(width: flag ? 100 : 50, height: 50)
33
+ .transaction { t in
34
+ t.animation = .default
35
+ }
36
+ ```
37
+
38
+ **Note:** This behaves like the deprecated `.animation(_:)` without value parameter - it animates on every state change.
39
+
40
+ ### Animation Precedence
41
+
42
+ **Implicit animations override explicit animations** (later in view tree wins).
43
+
44
+ ```swift
45
+ Button("Tap") {
46
+ withAnimation(.linear) { flag.toggle() }
47
+ }
48
+ .animation(.bouncy, value: flag) // .bouncy wins!
49
+ ```
50
+
51
+ ### Disabling Animations
52
+
53
+ ```swift
54
+ // Prevent implicit animations from overriding
55
+ .transaction { t in
56
+ t.disablesAnimations = true
57
+ }
58
+
59
+ // Remove animation entirely
60
+ .transaction { $0.animation = nil }
61
+ ```
62
+
63
+ ### Custom Transaction Keys (iOS 17+)
64
+
65
+ Pass metadata through transactions.
66
+
67
+ ```swift
68
+ struct ChangeSourceKey: TransactionKey {
69
+ static let defaultValue: String = "unknown"
70
+ }
71
+
72
+ extension Transaction {
73
+ var changeSource: String {
74
+ get { self[ChangeSourceKey.self] }
75
+ set { self[ChangeSourceKey.self] = newValue }
76
+ }
77
+ }
78
+
79
+ // Set source
80
+ var transaction = Transaction(animation: .default)
81
+ transaction.changeSource = "server"
82
+ withTransaction(transaction) { flag.toggle() }
83
+
84
+ // Read in view tree
85
+ .transaction { t in
86
+ if t.changeSource == "server" {
87
+ t.animation = .smooth
88
+ } else {
89
+ t.animation = .bouncy
90
+ }
91
+ }
92
+ ```
93
+
94
+ ---
95
+
96
+ ## Phase Animations (iOS 17+)
97
+
98
+ Cycle through discrete phases automatically. Each phase change is a separate animation.
99
+
100
+ ### Basic Usage
101
+
102
+ ```swift
103
+ // GOOD - triggered phase animation
104
+ Button("Shake") { trigger += 1 }
105
+ .phaseAnimator(
106
+ [0.0, -10.0, 10.0, -5.0, 5.0, 0.0],
107
+ trigger: trigger
108
+ ) { content, offset in
109
+ content.offset(x: offset)
110
+ }
111
+
112
+ // Infinite loop (no trigger)
113
+ Circle()
114
+ .phaseAnimator([1.0, 1.2, 1.0]) { content, scale in
115
+ content.scaleEffect(scale)
116
+ }
117
+ ```
118
+
119
+ ### Enum Phases (Recommended for Clarity)
120
+
121
+ ```swift
122
+ // GOOD - enum phases are self-documenting
123
+ enum BouncePhase: CaseIterable {
124
+ case initial, up, down, settle
125
+
126
+ var scale: CGFloat {
127
+ switch self {
128
+ case .initial: 1.0
129
+ case .up: 1.2
130
+ case .down: 0.9
131
+ case .settle: 1.0
132
+ }
133
+ }
134
+ }
135
+
136
+ Circle()
137
+ .phaseAnimator(BouncePhase.allCases, trigger: trigger) { content, phase in
138
+ content.scaleEffect(phase.scale)
139
+ }
140
+ ```
141
+
142
+ ### Custom Timing Per Phase
143
+
144
+ ```swift
145
+ .phaseAnimator([0, -20, 20], trigger: trigger) { content, offset in
146
+ content.offset(x: offset)
147
+ } animation: { phase in
148
+ switch phase {
149
+ case -20: .bouncy
150
+ case 20: .linear
151
+ default: .smooth
152
+ }
153
+ }
154
+ ```
155
+
156
+ ### Good vs Bad
157
+
158
+ ```swift
159
+ // GOOD - use phaseAnimator for multi-step sequences
160
+ .phaseAnimator([0, -10, 10, 0], trigger: trigger) { content, offset in
161
+ content.offset(x: offset)
162
+ }
163
+
164
+ // BAD - manual DispatchQueue sequencing
165
+ Button("Animate") {
166
+ withAnimation(.easeOut(duration: 0.1)) { offset = -10 }
167
+ DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
168
+ withAnimation { offset = 10 }
169
+ }
170
+ DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
171
+ withAnimation { offset = 0 }
172
+ }
173
+ }
174
+ ```
175
+
176
+ ---
177
+
178
+ ## Keyframe Animations (iOS 17+)
179
+
180
+ Precise timing control with exact values at specific times.
181
+
182
+ ### Basic Usage
183
+
184
+ ```swift
185
+ Button("Bounce") { trigger += 1 }
186
+ .keyframeAnimator(
187
+ initialValue: AnimationValues(),
188
+ trigger: trigger
189
+ ) { content, value in
190
+ content
191
+ .scaleEffect(value.scale)
192
+ .offset(y: value.verticalOffset)
193
+ } keyframes: { _ in
194
+ KeyframeTrack(\.scale) {
195
+ SpringKeyframe(1.2, duration: 0.15)
196
+ SpringKeyframe(0.9, duration: 0.1)
197
+ SpringKeyframe(1.0, duration: 0.15)
198
+ }
199
+ KeyframeTrack(\.verticalOffset) {
200
+ LinearKeyframe(-20, duration: 0.15)
201
+ LinearKeyframe(0, duration: 0.25)
202
+ }
203
+ }
204
+
205
+ struct AnimationValues {
206
+ var scale: CGFloat = 1.0
207
+ var verticalOffset: CGFloat = 0
208
+ }
209
+ ```
210
+
211
+ ### Keyframe Types
212
+
213
+ | Type | Behavior |
214
+ |------|----------|
215
+ | `CubicKeyframe` | Smooth interpolation |
216
+ | `LinearKeyframe` | Straight-line interpolation |
217
+ | `SpringKeyframe` | Spring physics |
218
+ | `MoveKeyframe` | Instant jump (no interpolation) |
219
+
220
+ ### Multiple Synchronized Tracks
221
+
222
+ Tracks run **in parallel**, each animating one property.
223
+
224
+ ```swift
225
+ // GOOD - bell shake with synchronized rotation and scale
226
+ struct BellAnimation {
227
+ var rotation: Double = 0
228
+ var scale: CGFloat = 1.0
229
+ }
230
+
231
+ Image(systemName: "bell.fill")
232
+ .keyframeAnimator(
233
+ initialValue: BellAnimation(),
234
+ trigger: trigger
235
+ ) { content, value in
236
+ content
237
+ .rotationEffect(.degrees(value.rotation))
238
+ .scaleEffect(value.scale)
239
+ } keyframes: { _ in
240
+ KeyframeTrack(\.rotation) {
241
+ CubicKeyframe(15, duration: 0.1)
242
+ CubicKeyframe(-15, duration: 0.1)
243
+ CubicKeyframe(10, duration: 0.1)
244
+ CubicKeyframe(-10, duration: 0.1)
245
+ CubicKeyframe(0, duration: 0.1)
246
+ }
247
+ KeyframeTrack(\.scale) {
248
+ CubicKeyframe(1.1, duration: 0.25)
249
+ CubicKeyframe(1.0, duration: 0.25)
250
+ }
251
+ }
252
+
253
+ // BAD - manual timer-based animation
254
+ Image(systemName: "bell.fill")
255
+ .onTapGesture {
256
+ withAnimation(.easeOut(duration: 0.1)) { rotation = 15 }
257
+ DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
258
+ withAnimation { rotation = -15 }
259
+ }
260
+ // ... more manual timing - error prone
261
+ }
262
+ ```
263
+
264
+ ### KeyframeTimeline (iOS 17+)
265
+
266
+ Query animation values directly for testing or non-SwiftUI use.
267
+
268
+ ```swift
269
+ let timeline = KeyframeTimeline(initialValue: AnimationValues()) {
270
+ KeyframeTrack(\.scale) {
271
+ CubicKeyframe(1.2, duration: 0.25)
272
+ CubicKeyframe(1.0, duration: 0.25)
273
+ }
274
+ }
275
+
276
+ let midpoint = timeline.value(time: 0.25)
277
+ print(midpoint.scale) // Value at 0.25 seconds
278
+ ```
279
+
280
+ ---
281
+
282
+ ## Animation Completion Handlers (iOS 17+)
283
+
284
+ Execute code when animations finish.
285
+
286
+ ### With withAnimation
287
+
288
+ ```swift
289
+ // GOOD - completion with withAnimation
290
+ Button("Animate") {
291
+ withAnimation(.spring) {
292
+ isExpanded.toggle()
293
+ } completion: {
294
+ showNextStep = true
295
+ }
296
+ }
297
+ ```
298
+
299
+ ### With Transaction (For Reexecution)
300
+
301
+ ```swift
302
+ // GOOD - completion fires on every trigger change
303
+ Circle()
304
+ .scaleEffect(bounceCount % 2 == 0 ? 1.0 : 1.2)
305
+ .transaction(value: bounceCount) { transaction in
306
+ transaction.animation = .spring
307
+ transaction.addAnimationCompletion {
308
+ message = "Bounce \(bounceCount) complete"
309
+ }
310
+ }
311
+
312
+ // BAD - completion only fires ONCE (no value parameter)
313
+ Circle()
314
+ .scaleEffect(bounceCount % 2 == 0 ? 1.0 : 1.2)
315
+ .animation(.spring, value: bounceCount)
316
+ .transaction { transaction in // No value!
317
+ transaction.addAnimationCompletion {
318
+ completionCount += 1 // Only fires once, ever
319
+ }
320
+ }
321
+ ```
322
+
323
+ ---
324
+
325
+ ## Quick Reference
326
+
327
+ ### Transactions (All iOS versions)
328
+ - `withTransaction` is the explicit form of `withAnimation`
329
+ - Implicit animations override explicit (later in view tree wins)
330
+ - Use `disablesAnimations` to prevent override
331
+ - Use `.transaction { $0.animation = nil }` to remove animation
332
+
333
+ ### Custom Transaction Keys (iOS 17+)
334
+ - Pass metadata through animation system via `TransactionKey`
335
+
336
+ ### Phase Animations (iOS 17+)
337
+ - Use for multi-step sequences returning to start
338
+ - Prefer enum phases for clarity
339
+ - Each phase change is a separate animation
340
+ - Use `trigger` parameter for one-shot animations
341
+
342
+ ### Keyframe Animations (iOS 17+)
343
+ - Use for precise timing control
344
+ - Tracks run in parallel
345
+ - Use `KeyframeTimeline` for testing/advanced use
346
+ - Prefer over manual DispatchQueue timing
347
+
348
+ ### Completion Handlers (iOS 17+)
349
+ - Use `withAnimation(.animation) { } completion: { }` for one-shot completion handlers
350
+ - Use `.transaction(value:)` for handlers that should refire on every value change
351
+ - Without `value:` parameter, completion only fires once