@ketecode/loom 0.0.0-stage → 0.2.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 (851) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +616 -2
  3. package/agents/accessibility-reviewer/AGENT.md +70 -0
  4. package/agents/accessibility-reviewer/evals/triggers.json +15 -0
  5. package/agents/agent-evaluator/AGENT.md +74 -0
  6. package/agents/agent-evaluator/evals/triggers.json +15 -0
  7. package/agents/architect/AGENT.md +82 -0
  8. package/agents/architect/evals/triggers.json +17 -0
  9. package/agents/billing-reviewer/AGENT.md +68 -0
  10. package/agents/billing-reviewer/evals/triggers.json +16 -0
  11. package/agents/code-reviewer/AGENT.md +51 -0
  12. package/agents/code-reviewer/evals/behavior.json +60 -0
  13. package/agents/code-reviewer/evals/triggers.json +14 -0
  14. package/agents/code-simplifier/AGENT.md +74 -0
  15. package/agents/code-simplifier/evals/triggers.json +15 -0
  16. package/agents/cpp-build-resolver/AGENT.md +73 -0
  17. package/agents/cpp-build-resolver/evals/triggers.json +16 -0
  18. package/agents/cpp-reviewer/AGENT.md +59 -0
  19. package/agents/cpp-reviewer/evals/triggers.json +16 -0
  20. package/agents/csharp-build-resolver/AGENT.md +84 -0
  21. package/agents/csharp-build-resolver/evals/triggers.json +17 -0
  22. package/agents/csharp-reviewer/AGENT.md +88 -0
  23. package/agents/csharp-reviewer/evals/triggers.json +17 -0
  24. package/agents/dart-build-resolver/AGENT.md +80 -0
  25. package/agents/dart-build-resolver/evals/triggers.json +17 -0
  26. package/agents/dart-reviewer/AGENT.md +66 -0
  27. package/agents/dart-reviewer/evals/triggers.json +17 -0
  28. package/agents/database-reviewer/AGENT.md +72 -0
  29. package/agents/database-reviewer/evals/triggers.json +16 -0
  30. package/agents/django-reviewer/AGENT.md +61 -0
  31. package/agents/django-reviewer/evals/triggers.json +15 -0
  32. package/agents/doc-updater/AGENT.md +92 -0
  33. package/agents/doc-updater/evals/triggers.json +14 -0
  34. package/agents/e2e-runner/AGENT.md +88 -0
  35. package/agents/e2e-runner/evals/triggers.json +16 -0
  36. package/agents/fastapi-reviewer/AGENT.md +63 -0
  37. package/agents/fastapi-reviewer/evals/triggers.json +15 -0
  38. package/agents/flutter-reviewer/AGENT.md +70 -0
  39. package/agents/flutter-reviewer/evals/triggers.json +15 -0
  40. package/agents/fsharp-build-resolver/AGENT.md +81 -0
  41. package/agents/fsharp-build-resolver/evals/triggers.json +15 -0
  42. package/agents/fsharp-reviewer/AGENT.md +77 -0
  43. package/agents/fsharp-reviewer/evals/triggers.json +15 -0
  44. package/agents/go-build-resolver/AGENT.md +85 -0
  45. package/agents/go-build-resolver/evals/triggers.json +16 -0
  46. package/agents/go-reviewer/AGENT.md +66 -0
  47. package/agents/go-reviewer/evals/triggers.json +16 -0
  48. package/agents/healthcare-reviewer/AGENT.md +65 -0
  49. package/agents/healthcare-reviewer/evals/triggers.json +16 -0
  50. package/agents/i18n-reviewer/AGENT.md +64 -0
  51. package/agents/i18n-reviewer/evals/triggers.json +16 -0
  52. package/agents/inbox-triager/AGENT.md +98 -0
  53. package/agents/inbox-triager/evals/triggers.json +16 -0
  54. package/agents/infra-reviewer/AGENT.md +93 -0
  55. package/agents/infra-reviewer/evals/triggers.json +15 -0
  56. package/agents/java-build-resolver/AGENT.md +82 -0
  57. package/agents/java-build-resolver/evals/triggers.json +16 -0
  58. package/agents/java-reviewer/AGENT.md +64 -0
  59. package/agents/java-reviewer/evals/triggers.json +16 -0
  60. package/agents/kotlin-build-resolver/AGENT.md +89 -0
  61. package/agents/kotlin-build-resolver/evals/triggers.json +16 -0
  62. package/agents/kotlin-reviewer/AGENT.md +75 -0
  63. package/agents/kotlin-reviewer/evals/triggers.json +16 -0
  64. package/agents/mle-reviewer/AGENT.md +68 -0
  65. package/agents/mle-reviewer/evals/triggers.json +16 -0
  66. package/agents/network-config-reviewer/AGENT.md +68 -0
  67. package/agents/network-config-reviewer/evals/triggers.json +17 -0
  68. package/agents/payments-reviewer/AGENT.md +64 -0
  69. package/agents/payments-reviewer/evals/triggers.json +16 -0
  70. package/agents/performance-optimizer/AGENT.md +86 -0
  71. package/agents/performance-optimizer/evals/triggers.json +16 -0
  72. package/agents/perl-build-resolver/AGENT.md +84 -0
  73. package/agents/perl-build-resolver/evals/triggers.json +15 -0
  74. package/agents/perl-reviewer/AGENT.md +77 -0
  75. package/agents/perl-reviewer/evals/triggers.json +15 -0
  76. package/agents/php-build-resolver/AGENT.md +88 -0
  77. package/agents/php-build-resolver/evals/triggers.json +16 -0
  78. package/agents/php-reviewer/AGENT.md +61 -0
  79. package/agents/php-reviewer/evals/triggers.json +15 -0
  80. package/agents/planner/AGENT.md +75 -0
  81. package/agents/planner/evals/triggers.json +17 -0
  82. package/agents/pr-test-analyzer/AGENT.md +82 -0
  83. package/agents/pr-test-analyzer/evals/triggers.json +16 -0
  84. package/agents/python-build-resolver/AGENT.md +87 -0
  85. package/agents/python-build-resolver/evals/triggers.json +16 -0
  86. package/agents/python-reviewer/AGENT.md +63 -0
  87. package/agents/python-reviewer/evals/triggers.json +15 -0
  88. package/agents/rag-reviewer/AGENT.md +71 -0
  89. package/agents/rag-reviewer/evals/triggers.json +16 -0
  90. package/agents/react-reviewer/AGENT.md +70 -0
  91. package/agents/react-reviewer/evals/triggers.json +16 -0
  92. package/agents/refactor-cleaner/AGENT.md +82 -0
  93. package/agents/refactor-cleaner/evals/triggers.json +16 -0
  94. package/agents/ruby-build-resolver/AGENT.md +93 -0
  95. package/agents/ruby-build-resolver/evals/triggers.json +16 -0
  96. package/agents/ruby-reviewer/AGENT.md +62 -0
  97. package/agents/ruby-reviewer/evals/triggers.json +16 -0
  98. package/agents/rust-build-resolver/AGENT.md +98 -0
  99. package/agents/rust-build-resolver/evals/triggers.json +16 -0
  100. package/agents/rust-reviewer/AGENT.md +78 -0
  101. package/agents/rust-reviewer/evals/triggers.json +15 -0
  102. package/agents/security-reviewer/AGENT.md +84 -0
  103. package/agents/security-reviewer/evals/triggers.json +16 -0
  104. package/agents/silent-failure-hunter/AGENT.md +66 -0
  105. package/agents/silent-failure-hunter/evals/triggers.json +16 -0
  106. package/agents/solidity-reviewer/AGENT.md +70 -0
  107. package/agents/solidity-reviewer/evals/triggers.json +16 -0
  108. package/agents/spec-reviewer/AGENT.md +95 -0
  109. package/agents/spec-reviewer/evals/behavior.json +57 -0
  110. package/agents/spec-reviewer/evals/triggers.json +16 -0
  111. package/agents/swift-build-resolver/AGENT.md +85 -0
  112. package/agents/swift-build-resolver/evals/triggers.json +15 -0
  113. package/agents/swift-reviewer/AGENT.md +75 -0
  114. package/agents/swift-reviewer/evals/triggers.json +15 -0
  115. package/agents/task-implementer/AGENT.md +89 -0
  116. package/agents/task-implementer/evals/behavior.json +47 -0
  117. package/agents/task-implementer/evals/triggers.json +16 -0
  118. package/agents/typescript-build-resolver/AGENT.md +76 -0
  119. package/agents/typescript-build-resolver/evals/triggers.json +15 -0
  120. package/agents/typescript-reviewer/AGENT.md +76 -0
  121. package/agents/typescript-reviewer/evals/triggers.json +15 -0
  122. package/agents/vue-reviewer/AGENT.md +75 -0
  123. package/agents/vue-reviewer/evals/triggers.json +15 -0
  124. package/bin/kete-loom.js +723 -0
  125. package/commands/aside.md +19 -0
  126. package/commands/brainstorm.md +25 -0
  127. package/commands/build-fix.md +26 -0
  128. package/commands/campaign.md +19 -0
  129. package/commands/changelog.md +36 -0
  130. package/commands/checkpoint.md +26 -0
  131. package/commands/codemap.md +25 -0
  132. package/commands/commit.md +26 -0
  133. package/commands/debug.md +27 -0
  134. package/commands/deps-audit.md +32 -0
  135. package/commands/dual-review.md +34 -0
  136. package/commands/epic-decompose.md +21 -0
  137. package/commands/explain.md +37 -0
  138. package/commands/feature-dev.md +23 -0
  139. package/commands/finish-branch.md +26 -0
  140. package/commands/fix-bug.md +38 -0
  141. package/commands/hookify.md +23 -0
  142. package/commands/i18n-check.md +39 -0
  143. package/commands/issue-sync.md +22 -0
  144. package/commands/jira.md +19 -0
  145. package/commands/learn.md +23 -0
  146. package/commands/loom.md +21 -0
  147. package/commands/loop.md +20 -0
  148. package/commands/model-route.md +27 -0
  149. package/commands/onboard.md +35 -0
  150. package/commands/orchestrate.md +21 -0
  151. package/commands/plan-feature.md +36 -0
  152. package/commands/postmortem.md +42 -0
  153. package/commands/pr-describe.md +39 -0
  154. package/commands/pr.md +22 -0
  155. package/commands/prd.md +41 -0
  156. package/commands/production-readiness.md +45 -0
  157. package/commands/project-init.md +21 -0
  158. package/commands/refactor-clean.md +24 -0
  159. package/commands/resume-session.md +22 -0
  160. package/commands/review.md +35 -0
  161. package/commands/save-session.md +37 -0
  162. package/commands/security-scan.md +32 -0
  163. package/commands/sessions.md +21 -0
  164. package/commands/skill-create.md +21 -0
  165. package/commands/tdd.md +36 -0
  166. package/commands/test-coverage.md +24 -0
  167. package/commands/threat-model.md +36 -0
  168. package/commands/update-docs.md +25 -0
  169. package/commands/usage-report.md +43 -0
  170. package/commands/verify.md +21 -0
  171. package/hooks/block-dangerous-commands/HOOK.md +30 -0
  172. package/hooks/block-dangerous-commands/cases.json +50 -0
  173. package/hooks/block-dangerous-commands/hook.js +75 -0
  174. package/hooks/block-foreground-servers/HOOK.md +34 -0
  175. package/hooks/block-foreground-servers/cases.json +31 -0
  176. package/hooks/block-foreground-servers/hook.js +41 -0
  177. package/hooks/block-no-verify/HOOK.md +25 -0
  178. package/hooks/block-no-verify/cases.json +30 -0
  179. package/hooks/block-no-verify/hook.js +43 -0
  180. package/hooks/capture-lessons/HOOK.md +24 -0
  181. package/hooks/capture-lessons/hook.js +48 -0
  182. package/hooks/format-on-edit/HOOK.md +24 -0
  183. package/hooks/format-on-edit/hook.js +89 -0
  184. package/hooks/guard-secrets/HOOK.md +19 -0
  185. package/hooks/guard-secrets/cases.json +110 -0
  186. package/hooks/guard-secrets/hook.js +44 -0
  187. package/hooks/load-session-context/HOOK.md +20 -0
  188. package/hooks/load-session-context/hook.js +56 -0
  189. package/hooks/notify-on-stop/HOOK.md +25 -0
  190. package/hooks/notify-on-stop/hook.js +27 -0
  191. package/hooks/protect-files/HOOK.md +24 -0
  192. package/hooks/protect-files/cases.json +27 -0
  193. package/hooks/protect-files/hook.js +39 -0
  194. package/hooks/protect-lint-config/HOOK.md +29 -0
  195. package/hooks/protect-lint-config/cases.json +18 -0
  196. package/hooks/protect-lint-config/fixtures/.eslintrc.json +1 -0
  197. package/hooks/protect-lint-config/fixtures/.golangci.yml +1 -0
  198. package/hooks/protect-lint-config/fixtures/.prettierrc +1 -0
  199. package/hooks/protect-lint-config/fixtures/.rubocop.yml +1 -0
  200. package/hooks/protect-lint-config/fixtures/biome.json +1 -0
  201. package/hooks/protect-lint-config/fixtures/eslint.config.mjs +1 -0
  202. package/hooks/protect-lint-config/fixtures/ruff.toml +1 -0
  203. package/hooks/protect-lint-config/hook.js +25 -0
  204. package/hooks/read-before-edit/HOOK.md +26 -0
  205. package/hooks/read-before-edit/cases.json +15 -0
  206. package/hooks/read-before-edit/hook.js +50 -0
  207. package/hooks/run.js +148 -0
  208. package/hooks/verify-before-stop/HOOK.md +32 -0
  209. package/hooks/verify-before-stop/hook.js +70 -0
  210. package/mcp/atlassian.json +11 -0
  211. package/mcp/chrome-devtools.json +18 -0
  212. package/mcp/clickhouse.json +11 -0
  213. package/mcp/cloudflare.json +11 -0
  214. package/mcp/context7.json +11 -0
  215. package/mcp/exa.json +11 -0
  216. package/mcp/fetch.json +17 -0
  217. package/mcp/figma.json +11 -0
  218. package/mcp/firecrawl.json +11 -0
  219. package/mcp/git.json +17 -0
  220. package/mcp/github.json +11 -0
  221. package/mcp/linear.json +11 -0
  222. package/mcp/memory.json +18 -0
  223. package/mcp/notion.json +11 -0
  224. package/mcp/playwright.json +18 -0
  225. package/mcp/sentry.json +11 -0
  226. package/mcp/stripe.json +11 -0
  227. package/mcp/supabase.json +11 -0
  228. package/mcp/time.json +17 -0
  229. package/mcp/vercel.json +11 -0
  230. package/package.json +61 -4
  231. package/profiles.json +214 -0
  232. package/rules/common.md +21 -0
  233. package/rules/cpp.md +29 -0
  234. package/rules/csharp.md +25 -0
  235. package/rules/dart.md +29 -0
  236. package/rules/fsharp.md +28 -0
  237. package/rules/git.md +26 -0
  238. package/rules/go.md +29 -0
  239. package/rules/java.md +29 -0
  240. package/rules/kotlin.md +27 -0
  241. package/rules/perl.md +26 -0
  242. package/rules/php.md +28 -0
  243. package/rules/python.md +30 -0
  244. package/rules/ruby.md +27 -0
  245. package/rules/rust.md +26 -0
  246. package/rules/security.md +29 -0
  247. package/rules/swift.md +28 -0
  248. package/rules/testing.md +25 -0
  249. package/rules/typescript.md +29 -0
  250. package/rules/use-skills.md +23 -0
  251. package/schemas/skill-frontmatter.schema.json +52 -0
  252. package/scripts/lib/audit.js +96 -0
  253. package/scripts/lib/behavior.js +52 -0
  254. package/scripts/lib/frontmatter.js +65 -0
  255. package/scripts/lib/hooks-install.js +294 -0
  256. package/scripts/lib/i18n.js +51 -0
  257. package/scripts/lib/inventory.js +85 -0
  258. package/scripts/lib/lint.js +180 -0
  259. package/scripts/lib/mcp-install.js +288 -0
  260. package/scripts/lib/profiles.js +128 -0
  261. package/scripts/lib/render.js +92 -0
  262. package/scripts/lib/rules-install.js +118 -0
  263. package/scripts/lib/skills.js +87 -0
  264. package/scripts/lib/targets.js +123 -0
  265. package/skills/accounting-api-integration/SKILL.md +81 -0
  266. package/skills/accounting-api-integration/evals/triggers.json +17 -0
  267. package/skills/accounting-api-integration/references/quickbooks.md +48 -0
  268. package/skills/accounting-api-integration/references/xero.md +45 -0
  269. package/skills/agent-failure-debugging/SKILL.md +92 -0
  270. package/skills/agent-failure-debugging/evals/triggers.json +16 -0
  271. package/skills/agent-harness-design/SKILL.md +125 -0
  272. package/skills/agent-harness-design/evals/triggers.json +21 -0
  273. package/skills/agent-outbound-messaging/SKILL.md +92 -0
  274. package/skills/agent-outbound-messaging/evals/triggers.json +16 -0
  275. package/skills/agent-security/SKILL.md +117 -0
  276. package/skills/agent-security/evals/triggers.json +16 -0
  277. package/skills/agent-security/references/host-configs.md +37 -0
  278. package/skills/ai-media-generation/SKILL.md +89 -0
  279. package/skills/ai-media-generation/evals/triggers.json +16 -0
  280. package/skills/ai-media-generation/references/job-pipeline.md +76 -0
  281. package/skills/angular-patterns/SKILL.md +122 -0
  282. package/skills/angular-patterns/evals/triggers.json +16 -0
  283. package/skills/api-client-integration/SKILL.md +86 -0
  284. package/skills/api-client-integration/evals/triggers.json +16 -0
  285. package/skills/api-client-integration/references/resilience.md +57 -0
  286. package/skills/api-design/SKILL.md +96 -0
  287. package/skills/api-design/evals/triggers.json +18 -0
  288. package/skills/api-design/references/conventions.md +133 -0
  289. package/skills/architecture-decision-records/SKILL.md +98 -0
  290. package/skills/architecture-decision-records/evals/triggers.json +17 -0
  291. package/skills/article-writing/SKILL.md +108 -0
  292. package/skills/article-writing/evals/triggers.json +16 -0
  293. package/skills/aspnet-core-patterns/SKILL.md +149 -0
  294. package/skills/aspnet-core-patterns/evals/triggers.json +16 -0
  295. package/skills/auth-patterns/SKILL.md +104 -0
  296. package/skills/auth-patterns/evals/triggers.json +17 -0
  297. package/skills/auth-patterns/references/oauth-oidc.md +64 -0
  298. package/skills/autonomous-loops/SKILL.md +99 -0
  299. package/skills/autonomous-loops/evals/triggers.json +14 -0
  300. package/skills/aws-patterns/SKILL.md +91 -0
  301. package/skills/aws-patterns/evals/triggers.json +16 -0
  302. package/skills/azure-patterns/SKILL.md +86 -0
  303. package/skills/azure-patterns/evals/triggers.json +16 -0
  304. package/skills/benchmark-methodology/SKILL.md +88 -0
  305. package/skills/benchmark-methodology/evals/triggers.json +16 -0
  306. package/skills/benchmark-methodology/references/language-harnesses.md +130 -0
  307. package/skills/bgp-diagnostics/SKILL.md +84 -0
  308. package/skills/bgp-diagnostics/evals/triggers.json +18 -0
  309. package/skills/bgp-diagnostics/references/bgp-reference.md +81 -0
  310. package/skills/bioinformatics-workflows/SKILL.md +108 -0
  311. package/skills/bioinformatics-workflows/evals/triggers.json +16 -0
  312. package/skills/bioinformatics-workflows/references/commands.md +71 -0
  313. package/skills/bioinformatics-workflows/references/formats.md +24 -0
  314. package/skills/bioinformatics-workflows/references/workflow-managers.md +107 -0
  315. package/skills/blender-automation/SKILL.md +100 -0
  316. package/skills/blender-automation/evals/triggers.json +16 -0
  317. package/skills/blender-automation/references/batch-and-render.md +77 -0
  318. package/skills/blender-automation/references/bpy-inspection.md +91 -0
  319. package/skills/blender-automation/references/rig-and-retarget-checks.md +23 -0
  320. package/skills/brand-strategy/SKILL.md +83 -0
  321. package/skills/brand-strategy/evals/triggers.json +16 -0
  322. package/skills/brand-voice/SKILL.md +112 -0
  323. package/skills/brand-voice/evals/triggers.json +16 -0
  324. package/skills/browser-qa/SKILL.md +99 -0
  325. package/skills/browser-qa/evals/triggers.json +16 -0
  326. package/skills/bun-runtime/SKILL.md +93 -0
  327. package/skills/bun-runtime/evals/triggers.json +16 -0
  328. package/skills/change-impact-analysis/SKILL.md +89 -0
  329. package/skills/change-impact-analysis/evals/triggers.json +16 -0
  330. package/skills/change-impact-analysis/references/graph-commands.md +28 -0
  331. package/skills/cisco-ios-config/SKILL.md +101 -0
  332. package/skills/cisco-ios-config/evals/triggers.json +18 -0
  333. package/skills/cisco-ios-config/references/verification.md +63 -0
  334. package/skills/clickhouse-patterns/SKILL.md +101 -0
  335. package/skills/clickhouse-patterns/evals/triggers.json +18 -0
  336. package/skills/clickhouse-patterns/references/engines-and-views.md +138 -0
  337. package/skills/clinical-decision-support/SKILL.md +90 -0
  338. package/skills/clinical-decision-support/evals/triggers.json +16 -0
  339. package/skills/clinical-decision-support/references/cds-hooks.md +76 -0
  340. package/skills/clinical-decision-support/references/regulatory-boundaries.md +37 -0
  341. package/skills/code-tour/SKILL.md +97 -0
  342. package/skills/code-tour/evals/triggers.json +14 -0
  343. package/skills/codebase-onboarding/SKILL.md +112 -0
  344. package/skills/codebase-onboarding/evals/triggers.json +14 -0
  345. package/skills/cold-outreach-sequences/SKILL.md +90 -0
  346. package/skills/cold-outreach-sequences/evals/triggers.json +16 -0
  347. package/skills/content-repurposing/SKILL.md +82 -0
  348. package/skills/content-repurposing/evals/triggers.json +16 -0
  349. package/skills/context-budget/SKILL.md +84 -0
  350. package/skills/context-budget/evals/triggers.json +14 -0
  351. package/skills/contract-drafting/SKILL.md +96 -0
  352. package/skills/contract-drafting/evals/triggers.json +16 -0
  353. package/skills/contract-drafting/references/term-sheets.md +68 -0
  354. package/skills/contract-first-development/SKILL.md +86 -0
  355. package/skills/contract-first-development/evals/triggers.json +16 -0
  356. package/skills/contract-first-development/references/tooling.md +46 -0
  357. package/skills/conventional-commits/SKILL.md +144 -0
  358. package/skills/conventional-commits/evals/triggers.json +16 -0
  359. package/skills/cpp-patterns/SKILL.md +129 -0
  360. package/skills/cpp-patterns/evals/triggers.json +16 -0
  361. package/skills/cpp-patterns/references/cmake-and-tooling.md +88 -0
  362. package/skills/cpp-patterns/references/undefined-behaviour.md +75 -0
  363. package/skills/cpp-testing/SKILL.md +131 -0
  364. package/skills/cpp-testing/evals/triggers.json +16 -0
  365. package/skills/csharp-patterns/SKILL.md +110 -0
  366. package/skills/csharp-patterns/evals/triggers.json +17 -0
  367. package/skills/csharp-patterns/references/analyzers.md +59 -0
  368. package/skills/csharp-testing/SKILL.md +85 -0
  369. package/skills/csharp-testing/evals/triggers.json +17 -0
  370. package/skills/csharp-testing/references/integration-tests.md +77 -0
  371. package/skills/css-architecture/SKILL.md +143 -0
  372. package/skills/css-architecture/evals/triggers.json +16 -0
  373. package/skills/customs-trade-compliance/SKILL.md +95 -0
  374. package/skills/customs-trade-compliance/evals/triggers.json +16 -0
  375. package/skills/customs-trade-compliance/references/incoterms-2020.md +42 -0
  376. package/skills/dart-patterns/SKILL.md +157 -0
  377. package/skills/dart-patterns/evals/triggers.json +18 -0
  378. package/skills/dart-testing/SKILL.md +164 -0
  379. package/skills/dart-testing/evals/triggers.json +18 -0
  380. package/skills/data-analysis-notebooks/SKILL.md +113 -0
  381. package/skills/data-analysis-notebooks/evals/triggers.json +16 -0
  382. package/skills/data-analysis-notebooks/references/dataframe-pitfalls.md +49 -0
  383. package/skills/data-analysis-notebooks/references/statistics-pitfalls.md +24 -0
  384. package/skills/data-pipelines/SKILL.md +90 -0
  385. package/skills/data-pipelines/evals/triggers.json +16 -0
  386. package/skills/data-pipelines/references/orchestrators.md +64 -0
  387. package/skills/database-migrations/SKILL.md +102 -0
  388. package/skills/database-migrations/evals/triggers.json +16 -0
  389. package/skills/database-migrations/references/recipes.md +98 -0
  390. package/skills/database-migrations/references/tools.md +21 -0
  391. package/skills/dbt-patterns/SKILL.md +96 -0
  392. package/skills/dbt-patterns/evals/triggers.json +16 -0
  393. package/skills/dbt-patterns/references/yaml-examples.md +114 -0
  394. package/skills/decision-council/SKILL.md +98 -0
  395. package/skills/decision-council/evals/triggers.json +16 -0
  396. package/skills/deep-research/SKILL.md +107 -0
  397. package/skills/deep-research/evals/triggers.json +14 -0
  398. package/skills/dependency-audit/SKILL.md +103 -0
  399. package/skills/dependency-audit/evals/triggers.json +16 -0
  400. package/skills/dependency-audit/references/tools.md +124 -0
  401. package/skills/deployment-strategies/SKILL.md +108 -0
  402. package/skills/deployment-strategies/evals/triggers.json +16 -0
  403. package/skills/design-brainstorming/SKILL.md +132 -0
  404. package/skills/design-brainstorming/evals/behavior.json +55 -0
  405. package/skills/design-brainstorming/evals/triggers.json +16 -0
  406. package/skills/design-brainstorming/references/visual-mockups.md +34 -0
  407. package/skills/desktop-app-testing/SKILL.md +104 -0
  408. package/skills/desktop-app-testing/evals/triggers.json +16 -0
  409. package/skills/desktop-app-testing/references/drivers.md +81 -0
  410. package/skills/django-patterns/SKILL.md +123 -0
  411. package/skills/django-patterns/evals/triggers.json +16 -0
  412. package/skills/docker-patterns/SKILL.md +132 -0
  413. package/skills/docker-patterns/evals/triggers.json +16 -0
  414. package/skills/docker-patterns/references/dockerfiles.md +105 -0
  415. package/skills/document-processing/SKILL.md +100 -0
  416. package/skills/document-processing/evals/triggers.json +17 -0
  417. package/skills/document-processing/references/extraction-and-ocr.md +71 -0
  418. package/skills/document-processing/references/forms-and-conversion.md +69 -0
  419. package/skills/document-processing/references/redaction.md +61 -0
  420. package/skills/e2e-testing-playwright/SKILL.md +94 -0
  421. package/skills/e2e-testing-playwright/evals/triggers.json +16 -0
  422. package/skills/e2e-testing-playwright/references/config-and-ci.md +129 -0
  423. package/skills/ef-core-patterns/SKILL.md +117 -0
  424. package/skills/ef-core-patterns/evals/triggers.json +16 -0
  425. package/skills/email-deliverability/SKILL.md +99 -0
  426. package/skills/email-deliverability/evals/triggers.json +17 -0
  427. package/skills/email-deliverability/references/dns-records.md +85 -0
  428. package/skills/energy-procurement/SKILL.md +106 -0
  429. package/skills/energy-procurement/evals/triggers.json +16 -0
  430. package/skills/error-handling-patterns/SKILL.md +112 -0
  431. package/skills/error-handling-patterns/evals/triggers.json +18 -0
  432. package/skills/error-handling-patterns/references/language-idioms.md +49 -0
  433. package/skills/estimation-and-scoping/SKILL.md +97 -0
  434. package/skills/estimation-and-scoping/evals/triggers.json +14 -0
  435. package/skills/evm-dapp-integration/SKILL.md +73 -0
  436. package/skills/evm-dapp-integration/evals/triggers.json +16 -0
  437. package/skills/fastapi-patterns/SKILL.md +127 -0
  438. package/skills/fastapi-patterns/evals/triggers.json +16 -0
  439. package/skills/ffmpeg-media-processing/SKILL.md +94 -0
  440. package/skills/ffmpeg-media-processing/evals/triggers.json +16 -0
  441. package/skills/ffmpeg-media-processing/references/recipes.md +112 -0
  442. package/skills/fhir-integration/SKILL.md +81 -0
  443. package/skills/fhir-integration/evals/triggers.json +16 -0
  444. package/skills/fhir-integration/references/search-and-bundles.md +73 -0
  445. package/skills/fhir-integration/references/smart-on-fhir.md +50 -0
  446. package/skills/finishing-a-branch/SKILL.md +127 -0
  447. package/skills/finishing-a-branch/evals/behavior.json +49 -0
  448. package/skills/finishing-a-branch/evals/triggers.json +16 -0
  449. package/skills/flask-patterns/SKILL.md +132 -0
  450. package/skills/flask-patterns/evals/triggers.json +16 -0
  451. package/skills/flutter-patterns/SKILL.md +99 -0
  452. package/skills/flutter-patterns/evals/triggers.json +16 -0
  453. package/skills/flutterwave-integration/SKILL.md +75 -0
  454. package/skills/flutterwave-integration/evals/triggers.json +16 -0
  455. package/skills/flutterwave-integration/references/api.md +73 -0
  456. package/skills/flutterwave-integration/references/webhooks.md +49 -0
  457. package/skills/freight-carrier-management/SKILL.md +107 -0
  458. package/skills/freight-carrier-management/evals/triggers.json +16 -0
  459. package/skills/fsharp-patterns/SKILL.md +133 -0
  460. package/skills/fsharp-patterns/evals/triggers.json +16 -0
  461. package/skills/fsharp-testing/SKILL.md +136 -0
  462. package/skills/fsharp-testing/evals/triggers.json +16 -0
  463. package/skills/gcp-patterns/SKILL.md +86 -0
  464. package/skills/gcp-patterns/evals/triggers.json +16 -0
  465. package/skills/git-workflow/SKILL.md +114 -0
  466. package/skills/git-workflow/evals/triggers.json +16 -0
  467. package/skills/git-worktrees/SKILL.md +130 -0
  468. package/skills/git-worktrees/evals/behavior.json +56 -0
  469. package/skills/git-worktrees/evals/triggers.json +16 -0
  470. package/skills/github-actions-ci/SKILL.md +117 -0
  471. package/skills/github-actions-ci/evals/triggers.json +16 -0
  472. package/skills/github-api-automation/SKILL.md +101 -0
  473. package/skills/github-api-automation/evals/triggers.json +17 -0
  474. package/skills/go-patterns/SKILL.md +118 -0
  475. package/skills/go-patterns/evals/triggers.json +17 -0
  476. package/skills/go-patterns/references/concurrency.md +162 -0
  477. package/skills/go-testing/SKILL.md +154 -0
  478. package/skills/go-testing/evals/triggers.json +17 -0
  479. package/skills/google-workspace-integration/SKILL.md +65 -0
  480. package/skills/google-workspace-integration/evals/triggers.json +17 -0
  481. package/skills/google-workspace-integration/references/api.md +121 -0
  482. package/skills/harmonyos-arkts/SKILL.md +117 -0
  483. package/skills/harmonyos-arkts/evals/triggers.json +16 -0
  484. package/skills/harmonyos-arkts/references/build-errors.md +42 -0
  485. package/skills/hexagonal-architecture/SKILL.md +89 -0
  486. package/skills/hexagonal-architecture/evals/triggers.json +17 -0
  487. package/skills/hipaa-compliance/SKILL.md +91 -0
  488. package/skills/hipaa-compliance/evals/triggers.json +18 -0
  489. package/skills/hipaa-compliance/references/safeguards.md +68 -0
  490. package/skills/hl7v2-integration/SKILL.md +69 -0
  491. package/skills/hl7v2-integration/evals/triggers.json +16 -0
  492. package/skills/hl7v2-integration/references/messages-and-ack.md +78 -0
  493. package/skills/homelab-network-setup/SKILL.md +125 -0
  494. package/skills/homelab-network-setup/evals/triggers.json +18 -0
  495. package/skills/homelab-network-setup/references/firewall-and-dns.md +45 -0
  496. package/skills/homelab-network-setup/references/wireguard.md +72 -0
  497. package/skills/hubtel-integration/SKILL.md +77 -0
  498. package/skills/hubtel-integration/evals/triggers.json +16 -0
  499. package/skills/hubtel-integration/references/api.md +92 -0
  500. package/skills/i18n-localization/SKILL.md +114 -0
  501. package/skills/i18n-localization/evals/triggers.json +16 -0
  502. package/skills/i18n-localization/references/libraries.md +52 -0
  503. package/skills/implementation-plans/SKILL.md +117 -0
  504. package/skills/implementation-plans/evals/behavior.json +54 -0
  505. package/skills/implementation-plans/evals/triggers.json +16 -0
  506. package/skills/incident-postmortem/SKILL.md +118 -0
  507. package/skills/incident-postmortem/evals/triggers.json +14 -0
  508. package/skills/inventory-demand-planning/SKILL.md +89 -0
  509. package/skills/inventory-demand-planning/evals/triggers.json +16 -0
  510. package/skills/inventory-demand-planning/references/formulas.md +62 -0
  511. package/skills/investor-materials/SKILL.md +127 -0
  512. package/skills/investor-materials/evals/triggers.json +16 -0
  513. package/skills/investor-materials/references/templates.md +74 -0
  514. package/skills/invoicing-and-tax/SKILL.md +84 -0
  515. package/skills/invoicing-and-tax/evals/triggers.json +17 -0
  516. package/skills/invoicing-and-tax/references/e-invoicing.md +24 -0
  517. package/skills/invoicing-and-tax/references/invoice-fields.md +38 -0
  518. package/skills/invoicing-and-tax/references/rounding.md +26 -0
  519. package/skills/ios-platform-features/SKILL.md +99 -0
  520. package/skills/ios-platform-features/evals/triggers.json +16 -0
  521. package/skills/ios-platform-features/references/foundation-models.md +90 -0
  522. package/skills/java-patterns/SKILL.md +141 -0
  523. package/skills/java-patterns/evals/triggers.json +17 -0
  524. package/skills/java-testing/SKILL.md +142 -0
  525. package/skills/java-testing/evals/triggers.json +16 -0
  526. package/skills/jetpack-compose-patterns/SKILL.md +88 -0
  527. package/skills/jetpack-compose-patterns/evals/triggers.json +16 -0
  528. package/skills/jira-integration/SKILL.md +92 -0
  529. package/skills/jira-integration/evals/triggers.json +17 -0
  530. package/skills/jpa-hibernate/SKILL.md +92 -0
  531. package/skills/jpa-hibernate/evals/triggers.json +18 -0
  532. package/skills/jpa-hibernate/references/mapping.md +99 -0
  533. package/skills/jvm-sql-mappers/SKILL.md +98 -0
  534. package/skills/jvm-sql-mappers/evals/triggers.json +16 -0
  535. package/skills/jvm-sql-mappers/references/examples.md +129 -0
  536. package/skills/kotlin-multiplatform/SKILL.md +97 -0
  537. package/skills/kotlin-multiplatform/evals/triggers.json +16 -0
  538. package/skills/kotlin-patterns/SKILL.md +128 -0
  539. package/skills/kotlin-patterns/evals/triggers.json +16 -0
  540. package/skills/kotlin-testing/SKILL.md +117 -0
  541. package/skills/kotlin-testing/evals/triggers.json +16 -0
  542. package/skills/ktor-patterns/SKILL.md +135 -0
  543. package/skills/ktor-patterns/evals/triggers.json +18 -0
  544. package/skills/kubernetes-patterns/SKILL.md +106 -0
  545. package/skills/kubernetes-patterns/evals/triggers.json +16 -0
  546. package/skills/kubernetes-patterns/references/manifests.md +115 -0
  547. package/skills/laravel-patterns/SKILL.md +136 -0
  548. package/skills/laravel-patterns/evals/triggers.json +16 -0
  549. package/skills/linear-integration/SKILL.md +98 -0
  550. package/skills/linear-integration/evals/triggers.json +17 -0
  551. package/skills/literature-review/SKILL.md +109 -0
  552. package/skills/literature-review/evals/triggers.json +16 -0
  553. package/skills/literature-review/references/appraisal.md +41 -0
  554. package/skills/literature-review/references/search-sources.md +39 -0
  555. package/skills/llm-app-patterns/SKILL.md +97 -0
  556. package/skills/llm-app-patterns/evals/triggers.json +17 -0
  557. package/skills/llm-evals/SKILL.md +98 -0
  558. package/skills/llm-evals/evals/triggers.json +16 -0
  559. package/skills/llm-evals/references/graders.md +66 -0
  560. package/skills/logistics-exception-management/SKILL.md +90 -0
  561. package/skills/logistics-exception-management/evals/triggers.json +16 -0
  562. package/skills/manim-animations/SKILL.md +106 -0
  563. package/skills/manim-animations/evals/triggers.json +16 -0
  564. package/skills/market-research/SKILL.md +117 -0
  565. package/skills/market-research/evals/triggers.json +16 -0
  566. package/skills/marketing-campaign/SKILL.md +111 -0
  567. package/skills/marketing-campaign/evals/triggers.json +16 -0
  568. package/skills/mcp-server-patterns/SKILL.md +127 -0
  569. package/skills/mcp-server-patterns/evals/triggers.json +18 -0
  570. package/skills/mcp-server-patterns/references/protocol-notes.md +68 -0
  571. package/skills/metrics-dashboards/SKILL.md +113 -0
  572. package/skills/metrics-dashboards/evals/triggers.json +16 -0
  573. package/skills/ml-experiment-workflow/SKILL.md +125 -0
  574. package/skills/ml-experiment-workflow/evals/triggers.json +16 -0
  575. package/skills/mobile-accessibility/SKILL.md +94 -0
  576. package/skills/mobile-accessibility/evals/triggers.json +16 -0
  577. package/skills/mongodb-patterns/SKILL.md +115 -0
  578. package/skills/mongodb-patterns/evals/triggers.json +18 -0
  579. package/skills/mongodb-patterns/references/indexes-and-aggregation.md +94 -0
  580. package/skills/mpesa-daraja-integration/SKILL.md +70 -0
  581. package/skills/mpesa-daraja-integration/evals/triggers.json +16 -0
  582. package/skills/mpesa-daraja-integration/references/api.md +103 -0
  583. package/skills/mpesa-daraja-integration/references/callbacks.md +74 -0
  584. package/skills/mtn-momo-integration/SKILL.md +66 -0
  585. package/skills/mtn-momo-integration/evals/triggers.json +16 -0
  586. package/skills/mtn-momo-integration/references/api.md +153 -0
  587. package/skills/mtn-momo-integration/references/callbacks.md +92 -0
  588. package/skills/mtn-momo-integration/references/sandbox-and-go-live.md +51 -0
  589. package/skills/mtn-momo-integration/scripts/sandbox-setup.js +79 -0
  590. package/skills/mysql-patterns/SKILL.md +96 -0
  591. package/skills/mysql-patterns/evals/triggers.json +16 -0
  592. package/skills/mysql-patterns/references/explain.md +34 -0
  593. package/skills/mysql-patterns/references/online-ddl.md +41 -0
  594. package/skills/nestjs-patterns/SKILL.md +114 -0
  595. package/skills/nestjs-patterns/evals/triggers.json +16 -0
  596. package/skills/nestjs-patterns/references/testing.md +68 -0
  597. package/skills/network-automation/SKILL.md +107 -0
  598. package/skills/network-automation/evals/triggers.json +18 -0
  599. package/skills/network-automation/references/tool-snippets.md +153 -0
  600. package/skills/network-design/SKILL.md +98 -0
  601. package/skills/network-design/evals/triggers.json +16 -0
  602. package/skills/network-troubleshooting/SKILL.md +152 -0
  603. package/skills/network-troubleshooting/evals/triggers.json +18 -0
  604. package/skills/network-troubleshooting/references/commands.md +33 -0
  605. package/skills/nextjs-patterns/SKILL.md +150 -0
  606. package/skills/nextjs-patterns/evals/triggers.json +18 -0
  607. package/skills/nextjs-patterns/references/caching.md +87 -0
  608. package/skills/node-backend-patterns/SKILL.md +103 -0
  609. package/skills/node-backend-patterns/evals/triggers.json +16 -0
  610. package/skills/node-backend-patterns/references/templates.md +122 -0
  611. package/skills/nuxt-patterns/SKILL.md +103 -0
  612. package/skills/nuxt-patterns/evals/triggers.json +16 -0
  613. package/skills/observability/SKILL.md +125 -0
  614. package/skills/observability/evals/triggers.json +17 -0
  615. package/skills/observability/references/otel-setup.md +87 -0
  616. package/skills/observability/references/slo-alerts.md +70 -0
  617. package/skills/open-source-release/SKILL.md +107 -0
  618. package/skills/open-source-release/evals/triggers.json +15 -0
  619. package/skills/open-source-release/references/history-scrub.md +65 -0
  620. package/skills/parallel-agent-orchestration/SKILL.md +106 -0
  621. package/skills/parallel-agent-orchestration/evals/triggers.json +14 -0
  622. package/skills/patent-research/SKILL.md +94 -0
  623. package/skills/patent-research/evals/triggers.json +16 -0
  624. package/skills/patent-research/references/databases-and-queries.md +52 -0
  625. package/skills/paystack-integration/SKILL.md +59 -0
  626. package/skills/paystack-integration/evals/triggers.json +14 -0
  627. package/skills/paystack-integration/references/api.md +73 -0
  628. package/skills/paystack-integration/references/mobile-money.md +50 -0
  629. package/skills/paystack-integration/references/webhooks.md +80 -0
  630. package/skills/pci-dss-scope/SKILL.md +103 -0
  631. package/skills/pci-dss-scope/evals/triggers.json +18 -0
  632. package/skills/pci-dss-scope/references/saq-and-data.md +36 -0
  633. package/skills/perl-patterns/SKILL.md +135 -0
  634. package/skills/perl-patterns/evals/triggers.json +18 -0
  635. package/skills/perl-testing/SKILL.md +126 -0
  636. package/skills/perl-testing/evals/triggers.json +17 -0
  637. package/skills/php-patterns/SKILL.md +116 -0
  638. package/skills/php-patterns/evals/triggers.json +16 -0
  639. package/skills/php-testing/SKILL.md +123 -0
  640. package/skills/php-testing/evals/triggers.json +16 -0
  641. package/skills/postgres-patterns/SKILL.md +103 -0
  642. package/skills/postgres-patterns/evals/triggers.json +17 -0
  643. package/skills/postgres-patterns/references/explain.md +59 -0
  644. package/skills/postgres-patterns/references/locks.md +53 -0
  645. package/skills/prd-writing/SKILL.md +124 -0
  646. package/skills/prd-writing/evals/triggers.json +15 -0
  647. package/skills/prisma-patterns/SKILL.md +83 -0
  648. package/skills/prisma-patterns/evals/triggers.json +18 -0
  649. package/skills/prisma-patterns/references/prisma-8.md +46 -0
  650. package/skills/prisma-patterns/references/workflow.md +50 -0
  651. package/skills/privacy-compliance/SKILL.md +121 -0
  652. package/skills/privacy-compliance/evals/triggers.json +18 -0
  653. package/skills/privacy-compliance/references/jurisdictions.md +51 -0
  654. package/skills/production-scheduling/SKILL.md +98 -0
  655. package/skills/production-scheduling/evals/triggers.json +16 -0
  656. package/skills/prompt-engineering/SKILL.md +92 -0
  657. package/skills/prompt-engineering/evals/triggers.json +16 -0
  658. package/skills/prospect-research/SKILL.md +87 -0
  659. package/skills/prospect-research/evals/triggers.json +16 -0
  660. package/skills/python-app-distribution/SKILL.md +107 -0
  661. package/skills/python-app-distribution/evals/triggers.json +16 -0
  662. package/skills/python-app-distribution/references/pypi-trusted-publishing.md +55 -0
  663. package/skills/python-app-distribution/references/windows-macos-signing.md +70 -0
  664. package/skills/python-patterns/SKILL.md +107 -0
  665. package/skills/python-patterns/evals/triggers.json +16 -0
  666. package/skills/python-patterns/references/tooling.md +101 -0
  667. package/skills/python-testing/SKILL.md +126 -0
  668. package/skills/python-testing/evals/triggers.json +16 -0
  669. package/skills/python-testing/references/mocking.md +71 -0
  670. package/skills/pytorch-patterns/SKILL.md +139 -0
  671. package/skills/pytorch-patterns/evals/triggers.json +16 -0
  672. package/skills/pytorch-patterns/references/debugging.md +39 -0
  673. package/skills/quality-nonconformance/SKILL.md +107 -0
  674. package/skills/quality-nonconformance/evals/triggers.json +16 -0
  675. package/skills/quality-nonconformance/references/8d-and-capa.md +46 -0
  676. package/skills/quarkus-patterns/SKILL.md +93 -0
  677. package/skills/quarkus-patterns/evals/triggers.json +18 -0
  678. package/skills/rag-pipeline-patterns/SKILL.md +117 -0
  679. package/skills/rag-pipeline-patterns/evals/triggers.json +18 -0
  680. package/skills/rag-pipeline-patterns/references/evaluation.md +37 -0
  681. package/skills/rag-pipeline-patterns/references/retrieval-recipes.md +78 -0
  682. package/skills/rails-patterns/SKILL.md +132 -0
  683. package/skills/rails-patterns/evals/triggers.json +16 -0
  684. package/skills/react-native-patterns/SKILL.md +101 -0
  685. package/skills/react-native-patterns/evals/triggers.json +16 -0
  686. package/skills/react-patterns/SKILL.md +140 -0
  687. package/skills/react-patterns/evals/triggers.json +18 -0
  688. package/skills/react-performance/SKILL.md +107 -0
  689. package/skills/react-performance/evals/triggers.json +18 -0
  690. package/skills/react-testing/SKILL.md +121 -0
  691. package/skills/react-testing/evals/triggers.json +18 -0
  692. package/skills/react-testing/references/msw.md +64 -0
  693. package/skills/react-testing/references/queries.md +41 -0
  694. package/skills/react-testing/references/setup.md +74 -0
  695. package/skills/recommender-systems/SKILL.md +119 -0
  696. package/skills/recommender-systems/evals/triggers.json +16 -0
  697. package/skills/recommender-systems/references/evaluation.md +39 -0
  698. package/skills/redis-patterns/SKILL.md +109 -0
  699. package/skills/redis-patterns/evals/triggers.json +18 -0
  700. package/skills/redis-patterns/references/operations.md +61 -0
  701. package/skills/refactoring-safely/SKILL.md +107 -0
  702. package/skills/refactoring-safely/evals/behavior.json +57 -0
  703. package/skills/refactoring-safely/evals/triggers.json +17 -0
  704. package/skills/release-management/SKILL.md +141 -0
  705. package/skills/release-management/evals/triggers.json +16 -0
  706. package/skills/remotion-video/SKILL.md +91 -0
  707. package/skills/remotion-video/evals/triggers.json +16 -0
  708. package/skills/remotion-video/references/lambda.md +66 -0
  709. package/skills/reproducible-dev-environments/SKILL.md +132 -0
  710. package/skills/reproducible-dev-environments/evals/triggers.json +16 -0
  711. package/skills/responding-to-code-review/SKILL.md +124 -0
  712. package/skills/responding-to-code-review/evals/behavior.json +54 -0
  713. package/skills/responding-to-code-review/evals/triggers.json +16 -0
  714. package/skills/returns-reverse-logistics/SKILL.md +97 -0
  715. package/skills/returns-reverse-logistics/evals/triggers.json +16 -0
  716. package/skills/ruby-patterns/SKILL.md +127 -0
  717. package/skills/ruby-patterns/evals/triggers.json +18 -0
  718. package/skills/ruby-testing/SKILL.md +113 -0
  719. package/skills/ruby-testing/evals/triggers.json +18 -0
  720. package/skills/runbook-writing/SKILL.md +101 -0
  721. package/skills/runbook-writing/evals/triggers.json +14 -0
  722. package/skills/rust-patterns/SKILL.md +118 -0
  723. package/skills/rust-patterns/evals/triggers.json +16 -0
  724. package/skills/rust-patterns/references/cargo-and-clippy.md +105 -0
  725. package/skills/rust-patterns/references/errors-and-traits.md +97 -0
  726. package/skills/rust-testing/SKILL.md +148 -0
  727. package/skills/rust-testing/evals/triggers.json +16 -0
  728. package/skills/rust-testing/references/fakes-proptest-async.md +113 -0
  729. package/skills/search-first/SKILL.md +73 -0
  730. package/skills/search-first/evals/triggers.json +14 -0
  731. package/skills/security-review/SKILL.md +58 -0
  732. package/skills/security-review/evals/behavior.json +56 -0
  733. package/skills/security-review/evals/triggers.json +14 -0
  734. package/skills/security-review/references/checklist.md +54 -0
  735. package/skills/security-review/scripts/scan-secrets.js +79 -0
  736. package/skills/seo-audit/SKILL.md +111 -0
  737. package/skills/seo-audit/evals/triggers.json +16 -0
  738. package/skills/seo-audit/references/checks.md +65 -0
  739. package/skills/session-handoff/SKILL.md +101 -0
  740. package/skills/session-handoff/evals/behavior.json +55 -0
  741. package/skills/session-handoff/evals/triggers.json +14 -0
  742. package/skills/skill-authoring/SKILL.md +98 -0
  743. package/skills/skill-authoring/evals/triggers.json +15 -0
  744. package/skills/skill-authoring/references/frontmatter.md +40 -0
  745. package/skills/skill-authoring/references/pressure-testing.md +87 -0
  746. package/skills/slack-app-integration/SKILL.md +108 -0
  747. package/skills/slack-app-integration/evals/triggers.json +17 -0
  748. package/skills/slide-decks/SKILL.md +107 -0
  749. package/skills/slide-decks/evals/triggers.json +18 -0
  750. package/skills/slide-decks/references/html-decks.md +86 -0
  751. package/skills/slide-decks/references/layouts.md +45 -0
  752. package/skills/slide-decks/references/pptx.md +87 -0
  753. package/skills/smart-contract-security/SKILL.md +110 -0
  754. package/skills/smart-contract-security/evals/triggers.json +16 -0
  755. package/skills/smart-contract-security/references/vulnerability-checklist.md +79 -0
  756. package/skills/social-media-publishing/SKILL.md +84 -0
  757. package/skills/social-media-publishing/evals/triggers.json +17 -0
  758. package/skills/social-media-publishing/references/platform-apis.md +116 -0
  759. package/skills/solidity-patterns/SKILL.md +95 -0
  760. package/skills/solidity-patterns/evals/triggers.json +16 -0
  761. package/skills/spring-boot-patterns/SKILL.md +128 -0
  762. package/skills/spring-boot-patterns/evals/triggers.json +18 -0
  763. package/skills/spring-boot-patterns/references/testing.md +72 -0
  764. package/skills/stripe-integration/SKILL.md +69 -0
  765. package/skills/stripe-integration/evals/triggers.json +16 -0
  766. package/skills/stripe-integration/references/api.md +71 -0
  767. package/skills/stripe-integration/references/billing.md +58 -0
  768. package/skills/stripe-integration/references/webhooks.md +76 -0
  769. package/skills/subagent-driven-development/SKILL.md +109 -0
  770. package/skills/subagent-driven-development/evals/behavior.json +53 -0
  771. package/skills/subagent-driven-development/evals/triggers.json +15 -0
  772. package/skills/subagent-driven-development/references/implementer-brief.md +60 -0
  773. package/skills/subagent-driven-development/references/reviewer-briefs.md +52 -0
  774. package/skills/subscription-billing-ops/SKILL.md +118 -0
  775. package/skills/subscription-billing-ops/evals/triggers.json +17 -0
  776. package/skills/subscription-billing-ops/references/proration.md +47 -0
  777. package/skills/subscription-billing-ops/references/revenue-metrics.md +38 -0
  778. package/skills/svelte-patterns/SKILL.md +122 -0
  779. package/skills/svelte-patterns/evals/triggers.json +16 -0
  780. package/skills/swift-patterns/SKILL.md +113 -0
  781. package/skills/swift-patterns/evals/triggers.json +16 -0
  782. package/skills/swift-patterns/references/concurrency-migration.md +40 -0
  783. package/skills/swift-testing/SKILL.md +121 -0
  784. package/skills/swift-testing/evals/triggers.json +16 -0
  785. package/skills/swift-testing/references/swift-testing-cheatsheet.md +81 -0
  786. package/skills/swiftui-patterns/SKILL.md +102 -0
  787. package/skills/swiftui-patterns/evals/triggers.json +16 -0
  788. package/skills/systematic-debugging/SKILL.md +92 -0
  789. package/skills/systematic-debugging/evals/behavior.json +59 -0
  790. package/skills/systematic-debugging/evals/triggers.json +16 -0
  791. package/skills/systematic-debugging/references/condition-waiting.md +52 -0
  792. package/skills/systematic-debugging/references/root-cause-tracing.md +49 -0
  793. package/skills/systematic-debugging/references/test-pollution.md +46 -0
  794. package/skills/tdd-workflow/SKILL.md +69 -0
  795. package/skills/tdd-workflow/evals/behavior.json +55 -0
  796. package/skills/tdd-workflow/evals/triggers.json +15 -0
  797. package/skills/tdd-workflow/references/testing-anti-patterns.md +87 -0
  798. package/skills/technical-writing/SKILL.md +95 -0
  799. package/skills/technical-writing/evals/triggers.json +14 -0
  800. package/skills/terraform-patterns/SKILL.md +122 -0
  801. package/skills/terraform-patterns/evals/triggers.json +16 -0
  802. package/skills/terraform-patterns/references/backends.md +67 -0
  803. package/skills/test-coverage-improvement/SKILL.md +107 -0
  804. package/skills/test-coverage-improvement/evals/triggers.json +16 -0
  805. package/skills/threat-modeling/SKILL.md +113 -0
  806. package/skills/threat-modeling/evals/triggers.json +16 -0
  807. package/skills/transactional-email/SKILL.md +68 -0
  808. package/skills/transactional-email/evals/triggers.json +17 -0
  809. package/skills/transactional-email/references/providers.md +63 -0
  810. package/skills/typescript-patterns/SKILL.md +122 -0
  811. package/skills/typescript-patterns/evals/triggers.json +16 -0
  812. package/skills/typescript-testing/SKILL.md +101 -0
  813. package/skills/typescript-testing/evals/triggers.json +16 -0
  814. package/skills/ui-demo-recording/SKILL.md +93 -0
  815. package/skills/ui-demo-recording/evals/triggers.json +16 -0
  816. package/skills/ui-demo-recording/references/cursor-and-captions.md +48 -0
  817. package/skills/ui-demo-recording/references/playwright-recording.md +63 -0
  818. package/skills/ui-demo-recording/references/post-processing.md +57 -0
  819. package/skills/ui-design-polish/SKILL.md +113 -0
  820. package/skills/ui-design-polish/evals/triggers.json +18 -0
  821. package/skills/ui-design-polish/references/detail-checklist.md +45 -0
  822. package/skills/ui-design-polish/references/tokens.md +68 -0
  823. package/skills/ui-flow-audit/SKILL.md +112 -0
  824. package/skills/ui-flow-audit/evals/triggers.json +17 -0
  825. package/skills/ui-motion/SKILL.md +103 -0
  826. package/skills/ui-motion/evals/triggers.json +18 -0
  827. package/skills/ui-motion/references/patterns.md +138 -0
  828. package/skills/ui-motion/references/tokens.md +52 -0
  829. package/skills/unicode-text-processing/SKILL.md +103 -0
  830. package/skills/unicode-text-processing/evals/triggers.json +17 -0
  831. package/skills/unicode-text-processing/references/apis.md +89 -0
  832. package/skills/unicode-text-processing/references/script-notes.md +50 -0
  833. package/skills/verification-loop/SKILL.md +70 -0
  834. package/skills/verification-loop/evals/behavior.json +52 -0
  835. package/skills/verification-loop/evals/triggers.json +14 -0
  836. package/skills/verification-loop/scripts/detect-checks.js +102 -0
  837. package/skills/video-editing/SKILL.md +111 -0
  838. package/skills/video-editing/evals/triggers.json +16 -0
  839. package/skills/video-editing/references/edl-and-logging.md +44 -0
  840. package/skills/video-editing/references/ffmpeg-edit-recipes.md +92 -0
  841. package/skills/video-editing/references/resolve-scripting.md +53 -0
  842. package/skills/vite-patterns/SKILL.md +117 -0
  843. package/skills/vite-patterns/evals/triggers.json +16 -0
  844. package/skills/vue-patterns/SKILL.md +104 -0
  845. package/skills/vue-patterns/evals/triggers.json +16 -0
  846. package/skills/web-accessibility/SKILL.md +119 -0
  847. package/skills/web-accessibility/evals/triggers.json +16 -0
  848. package/skills/web-performance/SKILL.md +107 -0
  849. package/skills/web-performance/evals/triggers.json +16 -0
  850. package/skills/web-scraping/SKILL.md +80 -0
  851. package/skills/web-scraping/evals/triggers.json +16 -0
@@ -0,0 +1,63 @@
1
+ # Playwright recording script
2
+
3
+ Video is written when the browser context closes. Without an explicit size, Playwright scales the viewport down to fit in 800x800, so always set both `viewport` and `recordVideo.size`.
4
+
5
+ ```js
6
+ // demos/onboarding/record.mjs
7
+ import { chromium } from 'playwright';
8
+ import { cursorOverlay } from './cursor-overlay.mjs';
9
+
10
+ const W = 1920, H = 1080;
11
+ const BASE = process.env.DEMO_URL ?? 'http://localhost:3000';
12
+
13
+ const browser = await chromium.launch();
14
+ const context = await browser.newContext({
15
+ viewport: { width: W, height: H },
16
+ deviceScaleFactor: 1,
17
+ colorScheme: 'light',
18
+ locale: 'en-GB',
19
+ timezoneId: 'Europe/London',
20
+ storageState: 'demos/.auth/demo-user.json',
21
+ recordVideo: { dir: 'demos/onboarding/raw', size: { width: W, height: H } },
22
+ });
23
+ await context.addInitScript(cursorOverlay);
24
+ await context.route(/(google-analytics|segment|intercom|hotjar)/, (r) => r.abort());
25
+
26
+ const page = await context.newPage();
27
+ await page.clock.setFixedTime(new Date('2026-03-02T10:00:00Z'));
28
+
29
+ async function clickLike(locator) {
30
+ await locator.waitFor({ state: 'visible' });
31
+ const box = await locator.boundingBox();
32
+ await page.mouse.move(box.x + box.width / 2, box.y + box.height / 2, { steps: 25 });
33
+ await page.waitForTimeout(200);
34
+ await locator.click();
35
+ }
36
+ const hold = (ms = 1200) => page.waitForTimeout(ms);
37
+ const caption = (text) => page.evaluate((t) => window.__demoCaption?.(t), text);
38
+
39
+ // Scene 1
40
+ await page.goto(`${BASE}/projects`);
41
+ await caption('Create a project in seconds');
42
+ await hold();
43
+
44
+ // Scene 2
45
+ await clickLike(page.getByRole('button', { name: 'New project' }));
46
+ await page.getByLabel('Project name').pressSequentially('Harbour Bridge refit', { delay: 60 });
47
+ await hold(600);
48
+ await clickLike(page.getByRole('button', { name: 'Create' }));
49
+ await page.getByRole('heading', { name: 'Harbour Bridge refit' }).waitFor();
50
+ await caption('');
51
+ await hold(1500);
52
+
53
+ const video = page.video();
54
+ await context.close(); // finishes the file
55
+ await video.saveAs('demos/onboarding/raw/take.webm');
56
+ await browser.close();
57
+ ```
58
+
59
+ Notes:
60
+ - `page.clock` exists in Playwright 1.45 and later; on older versions, override `Date` with an init script.
61
+ - With Playwright Test, set `use: { video: { mode: 'on', size: { width: 1920, height: 1080 } }, viewport: { width: 1920, height: 1080 } }` in a separate `demo` project. Recent versions also accept `video.show.actions` (outline and title for each action) and `video.show.test`; these are debugging annotations, usually unwanted in a marketing demo, and missing in older versions.
62
+ - Chromium gives the most consistent recordings; record in headless mode on the same machine type each time.
63
+ - Record a fresh take for each language or theme instead of editing one video.
@@ -0,0 +1,57 @@
1
+ # Post-processing a Playwright take
2
+
3
+ Playwright writes VP8 WebM. Probe it first: `ffprobe -v error -show_entries format=duration:stream=width,height,r_frame_rate -of json take.webm`.
4
+
5
+ ## Trim and convert to web MP4
6
+
7
+ ```bash
8
+ ffmpeg -ss 0.6 -i take.webm -t 40.4 -vf "fps=30,format=yuv420p" -c:v libx264 -crf 18 -preset slow -movflags +faststart -an demo.mp4
9
+ ```
10
+
11
+ `-ss` before `-i` with re-encode is frame-accurate; give the output length with `-t` (seconds kept after the start point), since `-to` combined with input seeking is easy to misread. Drop `-an` if you add audio below.
12
+
13
+ ## Find dead frames to trim
14
+
15
+ ```bash
16
+ ffmpeg -i take.webm -vf "freezedetect=n=0.001:d=2" -an -f null - 2>&1 | grep freeze_
17
+ ```
18
+
19
+ ## Speed up a dull stretch (10 s to 18 s at 2x)
20
+
21
+ ```bash
22
+ ffmpeg -i demo.mp4 -filter_complex "[0:v]trim=start=0:end=10,setpts=PTS-STARTPTS[a];[0:v]trim=start=10:end=18,setpts=(PTS-STARTPTS)/2[b];[0:v]trim=start=18,setpts=PTS-STARTPTS[c];[a][b][c]concat=n=3:v=1:a=0[v]" -map "[v]" -c:v libx264 -crf 18 -pix_fmt yuv420p demo_fast.mp4
23
+ ```
24
+
25
+ ## Fade in and out
26
+
27
+ ```bash
28
+ ffmpeg -i demo.mp4 -vf "fade=t=in:st=0:d=0.4,fade=t=out:st=40.4:d=0.6" -c:v libx264 -crf 18 -pix_fmt yuv420p demo_fade.mp4
29
+ ```
30
+
31
+ ## Captions
32
+
33
+ ```bash
34
+ # soft captions (keeps them accessible and editable)
35
+ ffmpeg -i demo.mp4 -i demo.srt -map 0 -map 1 -c copy -c:s mov_text -metadata:s:s:0 language=eng demo_cc.mp4
36
+ # burned in
37
+ ffmpeg -i demo.mp4 -vf "subtitles=demo.srt:force_style='FontSize=22,Outline=1'" -c:v libx264 -crf 18 demo_burned.mp4
38
+ ```
39
+
40
+ ## Music bed (licensed track supplied by the user)
41
+
42
+ ```bash
43
+ ffmpeg -i demo.mp4 -i bed.mp3 -filter_complex "[1:a]volume=0.25,afade=t=out:st=38:d=3[m]" -map 0:v -map "[m]" -shortest -c:v copy -c:a aac -b:a 160k demo_music.mp4
44
+ ```
45
+
46
+ ## GIF (two-pass palette)
47
+
48
+ ```bash
49
+ ffmpeg -i demo.mp4 -vf "fps=12,scale=800:-1:flags=lanczos,palettegen=stats_mode=diff" palette.png
50
+ ffmpeg -i demo.mp4 -i palette.png -lavfi "fps=12,scale=800:-1:flags=lanczos[x];[x][1:v]paletteuse=dither=bayer:bayer_scale=5" demo.gif
51
+ ```
52
+
53
+ ## Final check
54
+
55
+ ```bash
56
+ ffprobe -v error -show_entries format=duration,size:stream=codec_name,width,height,pix_fmt -of compact demo.mp4
57
+ ```
@@ -0,0 +1,113 @@
1
+ ---
2
+ name: ui-design-polish
3
+ description: Visual design direction and design-engineering finish for product UI - choosing a deliberate aesthetic instead of template defaults, then applying a spacing scale, a modular type scale, semantic colour tokens, hover, focus, active and disabled states, optical alignment, and real empty, loading and error states; also inventories an existing codebase's ad-hoc colours, sizes and components into a design-system audit. Use when a screen looks generic, unfinished or inconsistent, someone asks to make the UI look better or more professional, or wants the de facto design system extracted from scattered styles.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Works with plain CSS, CSS Modules, Tailwind or CSS-in-JS. Running the app and a browser for screenshots helps but is optional.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: coding
9
+ kete-loom/risk: writes-files
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # UI design polish
14
+
15
+ Make an interface look intended. Two jobs: pick a visual direction and hold it, then sweat the details that separate "works" from "finished". Most "it looks off" complaints are inconsistent spacing, too many font sizes, unmanaged colour and missing states, not a lack of decoration.
16
+
17
+ Neighbours: `css-architecture` decides how styles are organised (layers, naming, theming plumbing); `web-accessibility` owns WCAG conformance; `ui-motion` owns animation. This skill decides what things look like.
18
+
19
+ ## 0. Before you start
20
+
21
+ 1. Ask, or infer from the product, three things: **who uses it**, **the tone** (calm and dense for a tool, warm for consumer, editorial for content), and **constraints** (existing brand, component library, dark mode). If there is a brand guide or design file, it wins; **stop and ask** before overriding it.
22
+ 2. Find the current styling approach and any token file (`tokens.css`, `theme.ts`, `tailwind.config.*` `theme.extend`, CSS custom properties on `:root`). Polish goes through tokens, not one-off values.
23
+ 3. Look at the real screens. Run the app if you can and capture the screens you will change, at mobile and desktop widths, before touching anything.
24
+
25
+ ## 1. Choose a direction (new UI or redesign)
26
+
27
+ Write the direction down in 4-6 lines before coding, for example:
28
+
29
+ ```
30
+ Direction: quiet utility. Neutral warm greys, one accent (teal 600) used only for primary actions and focus.
31
+ Type: one sans (system stack or Inter), 4 sizes; weight carries hierarchy, not colour.
32
+ Density: compact, 4px base grid, 8/12/16/24/32 spacing.
33
+ Shape: 6px radius on controls, 10px on cards; borders over shadows.
34
+ Signature: tabular numbers and a thin top rule on section headers.
35
+ ```
36
+
37
+ Rules:
38
+
39
+ - One accent colour, used sparingly. If everything is highlighted, nothing is.
40
+ - Pick one signature detail and repeat it; do not add five.
41
+ - Avoid the template look: centred hero with gradient blob, three equal cards with icons, purple-to-blue gradients, everything rounded-2xl with a drop shadow. Use them only if the brief asks.
42
+ - Restraint beats decoration. Remove before adding.
43
+
44
+ ## 2. Foundations as tokens
45
+
46
+ Set these up (or tighten the existing ones). Value tables and naming in `references/tokens.md`.
47
+
48
+ - **Spacing**: a scale on a 4px or 8px base. Every margin, padding and gap uses it. Related things sit closer together than unrelated things.
49
+ - **Type**: 4-6 sizes from a ratio (1.2-1.25 for dense UI, up to 1.333 for marketing). Body 16px on the web, line-height 1.4-1.6 for body and 1.1-1.25 for headings, measure 60-75 characters.
50
+ - **Colour**: raw palette (`--gray-50`...`--gray-950`, one accent ramp, red/amber/green for status) mapped to **semantic** tokens (`--color-bg`, `--color-surface`, `--color-text`, `--color-text-muted`, `--color-border`, `--color-accent`, `--color-danger`). Components only use semantic tokens. Dark mode redefines the semantic layer.
51
+ - **Radius, border, shadow, z-index**: 2-3 values each.
52
+
53
+ Check text contrast against WCAG AA (4.5:1 body, 3:1 large text and UI component boundaries) as you choose colours.
54
+
55
+ ## 3. Interactive states
56
+
57
+ Every control needs all of these, designed, not browser defaults left by accident:
58
+
59
+ | State | Rule |
60
+ |---|---|
61
+ | Default | Clear affordance: a button looks pressable, a link looks like a link |
62
+ | Hover | Subtle shift (background one step on the ramp); only on `@media (hover: hover)` devices |
63
+ | Focus-visible | A visible ring (`:focus-visible`, 2px outline with offset, accent or high-contrast colour). Never `outline: none` without a replacement |
64
+ | Active / pressed | Slightly darker or inset; immediate |
65
+ | Disabled | Reduced contrast plus `cursor: not-allowed`; still readable; explain why nearby if it is not obvious |
66
+ | Loading | Keep the button's width; spinner or label change; block double submit |
67
+ | Selected / current | Distinct from hover (`aria-current`, `aria-selected` styled) |
68
+ | Invalid | Border and message in danger colour plus an icon or text, never colour alone |
69
+
70
+ ## 4. Screen states
71
+
72
+ For each data-driven view, design: **loading** (skeleton matching the final layout, not a page-centre spinner, for waits over ~300ms), **empty** (what this is, why it is empty, the one action that fills it), **error** (what happened in plain words, what to do, a retry), **partial** (some items failed), and **overflow** (long names, 0 / 1 / 1,000 items, missing images). Write the copy too.
73
+
74
+ ## 5. Detail pass
75
+
76
+ Go through `references/detail-checklist.md` on each changed screen. The highest-yield items:
77
+
78
+ - Align to a grid; left edges line up across sections.
79
+ - Optical alignment: icons next to text are centred on the text's x-height or cap height, not the box; play icons nudge right; round shapes overshoot squares slightly.
80
+ - Tabular numbers (`font-variant-numeric: tabular-nums`) in tables, prices and timers.
81
+ - Consistent icon set, size and stroke weight.
82
+ - No orphaned single words in headings where `text-wrap: balance` can fix it.
83
+ - Hit targets at least 24x24 CSS px (44x44 on touch-first screens).
84
+
85
+ ## 6. Design-system audit (existing codebase)
86
+
87
+ When asked to extract or audit the design system:
88
+
89
+ 1. Search the styles for raw values: hex/rgb/hsl colours, `px`/`rem` font sizes, spacing values, radii, shadows, z-indexes, breakpoints. Count each distinct value and where it is used.
90
+ 2. Cluster near-duplicates (`#1f2937` vs `#1e293b`, `14px` vs `0.875rem` vs `13.5px`).
91
+ 3. Propose the token set: the clusters that survive, with a mapping from each old value to its token.
92
+ 4. Inventory components: list every button, input, card and modal variant found, with file paths, and mark duplicates.
93
+ 5. Report with the format below. **Stop and ask** before a mass find-and-replace; do it per component or per page so diffs stay reviewable.
94
+
95
+ ## Never
96
+
97
+ - Never introduce a new colour, size or spacing value that is not a token.
98
+ - Never remove focus styles, or rely on colour alone for meaning.
99
+ - Never restyle a brand's logo, colours or fonts without the owner's approval.
100
+ - Never ship a visual change you have not looked at in a rendered page at mobile and desktop widths, in light and dark if both exist.
101
+
102
+ ## Report back
103
+
104
+ ```
105
+ ## UI polish: <screen or scope>
106
+ Direction: <the 4-6 line direction, or "kept existing">
107
+ Tokens added/changed: <list>
108
+ Changes: <file: what changed and why, one line each>
109
+ States covered: <loading / empty / error / hover / focus / disabled per component>
110
+ Before/after: <screenshot paths, or "not captured">
111
+ Audit (if run): <N colours -> M tokens, N font sizes -> M, duplicate components found>
112
+ Left for later: <items and why>
113
+ ```
@@ -0,0 +1,18 @@
1
+ {
2
+ "should_trigger": [
3
+ "Our settings page works but looks amateur, tighten the spacing, type and colours so it feels professional",
4
+ "This dashboard looks like every other AI-generated template, give it a distinct visual direction",
5
+ "Go through the codebase and tell me how many different greys, font sizes and button styles we actually use, then propose a token set",
6
+ "The projects list has no empty state, loading state or error state, design all three",
7
+ "Polish the buttons: hover, pressed, disabled and loading states all look like browser defaults",
8
+ "The icons and labels in the sidebar look slightly misaligned, fix the optical alignment and spacing"
9
+ ],
10
+ "should_not_trigger": [
11
+ "Introduce cascade layers so the vendor CSS stops overriding our component styles",
12
+ "Audit the signup form against WCAG 2.2 AA and fix the screen reader problems",
13
+ "Add a spring animation when the modal opens and a fade when it closes",
14
+ "Write a brand voice guide for our marketing emails",
15
+ "Our homepage LCP is 4 seconds, make it load faster",
16
+ "Build a slide deck for Friday's product review"
17
+ ]
18
+ }
@@ -0,0 +1,45 @@
1
+ # Detail checklist
2
+
3
+ Run per changed screen. Tick what passes, fix or list what does not.
4
+
5
+ ## Layout and spacing
6
+ - [ ] Every gap, margin and padding is on the spacing scale.
7
+ - [ ] Proximity groups related items; space between groups is larger than within.
8
+ - [ ] Left edges align across header, content and footer.
9
+ - [ ] Content width is capped for reading (about 65ch); wide tables scroll inside their container, not the page.
10
+ - [ ] Nothing touches the viewport edge at 320px width; no horizontal page scroll.
11
+
12
+ ## Typography
13
+ - [ ] No more than the scale's sizes; no stray 13px or 15px.
14
+ - [ ] Hierarchy is readable with colour removed (size and weight carry it).
15
+ - [ ] Line length and line height suit the text size.
16
+ - [ ] Headings use `text-wrap: balance`; paragraphs may use `text-wrap: pretty`.
17
+ - [ ] Numbers in tables, prices and counters use `tabular-nums`; right-aligned in numeric columns.
18
+ - [ ] Truncation has a full-text fallback (tooltip, title or expand) and does not cut mid-character.
19
+
20
+ ## Colour
21
+ - [ ] Only semantic tokens in components.
22
+ - [ ] Accent is used for the primary action and focus, not decoration.
23
+ - [ ] Text contrast meets 4.5:1 (body) and 3:1 (large text, control borders, icons that carry meaning).
24
+ - [ ] Status is never shown by colour alone.
25
+
26
+ ## Alignment details
27
+ - [ ] Icons are optically centred with their label (adjust by 1px when the glyph box misleads).
28
+ - [ ] Icon size matches text size (16px icon with 14-16px text, 20px with 18-20px).
29
+ - [ ] Inputs, buttons and selects in the same row share a height.
30
+ - [ ] Nested radii are concentric (inner = outer - padding).
31
+ - [ ] Borders are 1px and the same colour token; no double borders where cards meet.
32
+
33
+ ## States
34
+ - [ ] Hover, focus-visible, active, disabled, loading, selected and invalid exist for each control.
35
+ - [ ] Loading skeleton matches the final layout; no layout shift when data arrives.
36
+ - [ ] Empty state explains and offers the next action.
37
+ - [ ] Error state says what happened and how to recover, with retry.
38
+ - [ ] Long, short, zero, one and many items all render well.
39
+
40
+ ## Polish
41
+ - [ ] Images have fixed aspect ratios (`aspect-ratio`) and a placeholder background.
42
+ - [ ] Cursor is `pointer` only on clickable elements.
43
+ - [ ] Scrollbars and overflow do not shift the layout (`scrollbar-gutter: stable` where needed).
44
+ - [ ] Selection colour and caret colour suit the theme (`::selection`, `caret-color`), when the direction calls for it.
45
+ - [ ] Favicon, page title and social preview exist for public pages.
@@ -0,0 +1,68 @@
1
+ # Token starting points
2
+
3
+ Adjust to the direction; these are defaults, not rules.
4
+
5
+ ## Spacing (4px base)
6
+
7
+ | Token | px | Typical use |
8
+ |---|---|---|
9
+ | `--space-1` | 4 | icon-to-label gap |
10
+ | `--space-2` | 8 | inside compact controls, tight stacks |
11
+ | `--space-3` | 12 | control padding, list item gap |
12
+ | `--space-4` | 16 | card padding (dense), form field gap |
13
+ | `--space-6` | 24 | card padding, group gap |
14
+ | `--space-8` | 32 | section gap |
15
+ | `--space-12` | 48 | page section gap |
16
+ | `--space-16` | 64 | hero / marketing sections |
17
+
18
+ Tailwind's default spacing scale is already 0.25rem steps; use it rather than arbitrary `p-[13px]` values.
19
+
20
+ ## Type scale (ratio 1.25, base 16px)
21
+
22
+ | Token | rem | px | Use |
23
+ |---|---|---|---|
24
+ | `--text-xs` | 0.75 | 12 | captions, badges (avoid for body) |
25
+ | `--text-sm` | 0.875 | 14 | secondary text, dense tables |
26
+ | `--text-base` | 1 | 16 | body |
27
+ | `--text-lg` | 1.25 | 20 | card titles |
28
+ | `--text-xl` | 1.563 | 25 | page titles |
29
+ | `--text-2xl` | 1.953 | 31 | hero / display |
30
+
31
+ Use `rem` so user font-size settings apply. For fluid headings, `clamp(1.5rem, 1rem + 2vw, 2.5rem)`; keep body text fixed.
32
+
33
+ Weights: 400 body, 500-600 labels and buttons, 600-700 headings. Two or three weights per family.
34
+
35
+ ## Colour: palette to semantic layer
36
+
37
+ ```css
38
+ :root {
39
+ /* palette */
40
+ --gray-50: #f8f8f7; --gray-100: #efeeec; --gray-200: #dddbd7; --gray-500: #79756e;
41
+ --gray-700: #45423d; --gray-900: #1d1c1a;
42
+ --teal-600: #0d7c74; --teal-700: #0a645e;
43
+ --red-600: #c4321f; --amber-600: #b26b00; --green-600: #2f7d32;
44
+
45
+ /* semantic */
46
+ --color-bg: var(--gray-50);
47
+ --color-surface: #fff;
48
+ --color-text: var(--gray-900);
49
+ --color-text-muted: var(--gray-700);
50
+ --color-border: var(--gray-200);
51
+ --color-accent: var(--teal-600);
52
+ --color-accent-hover: var(--teal-700);
53
+ --color-danger: var(--red-600);
54
+ }
55
+ @media (prefers-color-scheme: dark) {
56
+ :root { --color-bg: var(--gray-900); --color-surface: #262522; --color-text: var(--gray-50); /* ... */ }
57
+ }
58
+ ```
59
+
60
+ These hex values are illustrative; check each text/background pair with a contrast checker before use. `oklch()` makes even lightness steps easier to build when the project's browser targets support it.
61
+
62
+ Dark mode is not inverted light mode: lower the surface contrast, desaturate the accent slightly, and use lighter surfaces (not shadows) for elevation.
63
+
64
+ ## Radius, shadow, z-index
65
+
66
+ - Radius: `--radius-sm` 4px (inputs, tags), `--radius-md` 8px (buttons, cards), `--radius-full` 9999px (pills, avatars). Nested radius = outer radius minus padding.
67
+ - Shadow: `--shadow-sm` for raised controls, `--shadow-lg` for popovers and dialogs only.
68
+ - Z-index: named layers (`--z-dropdown: 10; --z-sticky: 20; --z-overlay: 30; --z-modal: 40; --z-toast: 50`), never `9999`.
@@ -0,0 +1,112 @@
1
+ ---
2
+ name: ui-flow-audit
3
+ description: Static trace of every user-facing control in a frontend, following each click, toggle or submit through its event handler, state setters, effects, store actions, network calls and their responses to the final rendered state, to find interactions that each work alone but cancel each other, race, double-fire or leave the screen in the wrong state, reported flow by flow. Use when a feature behaves correctly in isolation yet breaks when actions are combined or repeated, a toggle snaps back, a filter or form resets unexpectedly, or someone wants an audit of how the UI's state changes fit together before a release.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Framework-neutral (React, Vue, Svelte, Angular, vanilla); reading code is enough, running the app and its tests confirms findings.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: coding
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # UI flow audit
14
+
15
+ Bugs in interactive UIs often live between handlers, not inside them: a click sets state, an effect reacts and resets it, a response from an earlier request lands last and overwrites the newer one. Each piece passes its unit test. This audit traces the whole chain for each control and checks what the user finally sees.
16
+
17
+ The audit does not change source files. It may run the app or tests to confirm a finding, with the user's permission. It produces a report; fixing is a separate step the user approves. Neighbours: `browser-qa` clicks through a running app; `react-reviewer` reviews a diff; `react-patterns` says how to structure state. This skill maps cause and effect across a whole screen or feature.
18
+
19
+ ## 0. Scope
20
+
21
+ 1. Agree the scope with the user: one screen, one feature, or a list of routes. A whole app at once gives a shallow report; **ask** to narrow it if there are more than ~30 controls.
22
+ 2. Identify the framework and the state tools in use (component state, context, Redux/Zustand/Pinia/NgRx stores, a query cache such as TanStack Query or SWR, URL/search params, form libraries, local storage).
23
+ 3. Note the expected behaviour for each flow. If there is a spec, PRD or test describing it, read it. If not, write your assumption next to each flow and flag it for confirmation.
24
+
25
+ ## 1. Inventory controls
26
+
27
+ Search the scoped components for every user-facing trigger and list them:
28
+
29
+ - Event props: `onClick`, `onChange`, `onSubmit`, `onBlur`, `onKeyDown`, `@click`, `v-model`, `(click)`, `bind:value`, `on:submit`.
30
+ - Indirect triggers: route changes, URL param edits, drag/drop, keyboard shortcuts, timers and polling, websocket or SSE messages, window focus refetch, `storage` events from other tabs.
31
+
32
+ Give each an ID (`F1`, `F2`...) with file and line.
33
+
34
+ ## 2. Trace each flow
35
+
36
+ For each control, follow the chain until nothing else changes. Write it as a sequence:
37
+
38
+ ```
39
+ F3 "Apply filter" button (Filters.tsx:42)
40
+ 1. onClick -> setFilters({...filters, status}) Filters.tsx:44
41
+ 2. filters is a dependency of useEffect -> setPage(1) ResultsList.tsx:18
42
+ 3. [filters, page] in query key -> GET /api/items?status&page useItems.ts:9
43
+ 4. URL sync effect writes ?status=... but not page useUrlState.ts:31
44
+ 5. Response -> cache -> list renders
45
+ Final state: filter applied, page 1, URL missing page
46
+ ```
47
+
48
+ At each step record: what changed, who reads it, and what that reader does. Follow:
49
+
50
+ - Every setter call and every place that state is read (search for its name).
51
+ - Effects/watchers/computed values that depend on it, and what they set in turn.
52
+ - Store actions, reducers and middleware/sagas/listeners they trigger.
53
+ - Network calls: request, success path, error path, and what happens if two are in flight.
54
+ - Derived or mirrored state (props copied into state, state copied to URL or storage), the commonest source of fights.
55
+
56
+ ## 3. Cross-check pairs and sequences
57
+
58
+ The bugs are in combinations. For each flow, check against the others that touch the same state:
59
+
60
+ | Check | Question | Typical bug |
61
+ |---|---|---|
62
+ | Shared writes | Do two flows write the same state, URL param or cache key? | Second handler or an effect silently undoes the first |
63
+ | Effect loops | Does an effect write state that triggers another effect that writes back? | Value snaps back, infinite render loop, flicker |
64
+ | Order | Does the final state depend on which handler or effect runs first? | `onBlur` save vs `onClick` cancel; parent and child both handle the event |
65
+ | Stale closure | Does a handler, timer or subscription capture an old value? | Increment uses the value from mount; interval sees initial filters |
66
+ | Races | Can responses arrive out of order? Is there cancellation (`AbortController`, query keys, ignore flag)? | Typing "ab" shows results for "a" |
67
+ | Repeat | What if the user clicks twice, double submits, or toggles fast? | Duplicate POST, toggle ends in wrong state, optimistic update not rolled back |
68
+ | Optimistic updates | Is rollback on error correct, and does a refetch overwrite a newer local change? | Item reappears after delete; like count jumps |
69
+ | Reset paths | What resets this state (route change, logout, form reset, key change)? Does it reset everything it should, and nothing else? | Old filter survives navigation; modal reopens with last user's data |
70
+ | Remount | Does a changing `key`, conditional render or route remount the component and lose state? | Input clears while typing |
71
+ | Disabled/loading | Is the control disabled while its action runs, and re-enabled on error? | Stuck spinner after a failed request |
72
+ | External sync | Back/forward buttons, a second tab, a websocket event: do they agree with local state? | URL says page 3, list shows page 1 |
73
+
74
+ ## 4. Confirm
75
+
76
+ For each suspected problem, try to confirm it before reporting:
77
+
78
+ 1. Re-read the exact lines; check the framework's semantics (for example, React 18+ batches all setters in the same tick, including in promises and timeouts; `useEffect` normally runs after paint, but after a discrete event such as a click React flushes it before the browser paints; Vue watchers are batched and by default run before the next component update, `flush: 'pre'`).
79
+ 2. If tests exist, look for one covering the combination. If the user allows running things, run the app and reproduce, or write a throwaway test outside the source tree (or delete it afterwards), and note the result. Do not commit anything.
80
+ 3. Mark each finding **confirmed** (reproduced or provable from the code alone) or **suspected** (depends on timing or data you could not check). Drop anything you cannot point to a line for.
81
+
82
+ ## Never
83
+
84
+ - Never edit source files during the audit. Suggested fixes go in the report.
85
+ - Never report a hypothetical without the sequence of steps that produces it.
86
+ - Never assume a library's behaviour; check its docs or source when a finding depends on it (cache invalidation, batching, debounce semantics).
87
+
88
+ ## Report
89
+
90
+ ```
91
+ ## UI flow audit: <scope>
92
+ Assumptions to confirm: <list>
93
+
94
+ ### Flow map
95
+ F1 <control> (file:line): <one-line chain> -> final state OK | PROBLEM
96
+ F2 ...
97
+
98
+ ### Findings (most severe first)
99
+ 1. [confirmed|suspected] <title> Flows: F3 + F7
100
+ Steps: <user steps that trigger it>
101
+ Chain: <file:line -> file:line -> ...>
102
+ Expected: <...> Actual: <...>
103
+ Fix: <smallest change, e.g. derive instead of mirror, cancel stale request, single owner for the URL param>
104
+ Test to add: <the combination test that would catch it>
105
+ 2. ...
106
+
107
+ ### Clean flows
108
+ <IDs that were traced and are fine>
109
+
110
+ ### Not traced
111
+ <controls or triggers skipped and why>
112
+ ```
@@ -0,0 +1,17 @@
1
+ {
2
+ "should_trigger": [
3
+ "When I change the sort order and then the filter, the sort snaps back to default; trace what every control on the search page actually does",
4
+ "Each button on the cart screen works on its own but combinations leave the wrong total, audit how the handlers and effects interact",
5
+ "Map every click handler, effect and store update on the booking form and find where they fight each other",
6
+ "The dark mode toggle flips back after a second, follow the state through the context, the effect and localStorage to see why",
7
+ "Before release, audit the kanban board's interactions for races, double submits and stale state between actions"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Click through the staging build and write up any bugs you find before the demo",
11
+ "Review my React pull request for missing useEffect dependencies",
12
+ "Should this modal's open state live in the URL or in component state?",
13
+ "Write React Testing Library tests for the cart total component",
14
+ "Draw the user journey for onboarding as a flowchart for the product team",
15
+ "Our dashboard renders slowly when filters change, profile it"
16
+ ]
17
+ }
@@ -0,0 +1,103 @@
1
+ ---
2
+ name: ui-motion
3
+ description: Interface animation for the web with the Motion library (motion/react, formerly Framer Motion) and plain CSS transitions, keyframes and the View Transitions API - motion duration and easing tokens, spring physics, hover, tap and drag gestures, AnimatePresence exit animations, layout and shared-element transitions, route changes, prefers-reduced-motion fallbacks, and keeping animation on transform and opacity within the frame budget. Use when adding or fixing a micro-interaction, modal or list animation, page transition or draggable element, an animation stutters or causes layout shift, or motion must respect reduced-motion settings.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Motion examples need React 18+ and the motion npm package; CSS and View Transitions sections apply to any framework.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: coding
9
+ kete-loom/risk: writes-files
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # UI motion
14
+
15
+ Animation in a product UI has a job: show where something came from, confirm an action, or keep the user oriented during a change. If it does none of these, leave it out. Good UI motion is short, consistent, interruptible and optional.
16
+
17
+ Neighbours: `remotion-video` and `manim-animations` render video; `ui-design-polish` sets the visual direction; `react-performance` covers render cost. This skill is live interface animation.
18
+
19
+ ## 0. Before you start
20
+
21
+ 1. Check what the project has: `motion` or `framer-motion` in `package.json`, a CSS animation convention, or existing duration/easing variables. Use what is there. Do not add Motion for something a CSS transition does.
22
+ 2. Note the import path in use. Current Motion: `import { motion, AnimatePresence } from "motion/react"`. Older code imports the same names from `"framer-motion"`; both work, do not mix them in one codebase. Migrating is a separate change; **ask first**.
23
+ 3. Ask what the motion is for if it is not obvious. "Make it feel alive" needs a concrete target: which element, which change, what it should communicate.
24
+
25
+ ## 1. Decide: CSS or Motion
26
+
27
+ | Need | Use |
28
+ |---|---|
29
+ | Hover, focus, colour or simple show/hide state | CSS `transition` |
30
+ | Looping or decorative keyframes (spinner, shimmer) | CSS `@keyframes` |
31
+ | Exit animation when React unmounts an element | Motion `AnimatePresence` |
32
+ | Element changes size/position because layout changed (reorder, expand) | Motion `layout` |
33
+ | Same thing moves between two components (thumbnail to detail) | Motion `layoutId`, or View Transitions |
34
+ | Drag, swipe, pan with momentum | Motion `drag` |
35
+ | Interruptible, velocity-aware motion | Motion springs |
36
+ | Page or route change in a multi-page or SPA app | View Transitions API where supported, else Motion `AnimatePresence` around the route |
37
+
38
+ ## 2. Motion tokens
39
+
40
+ Define once and reuse (values to start from in `references/tokens.md`):
41
+
42
+ - Durations: `--duration-fast` 100-150ms (hover, press), `--duration-base` 200-250ms (small enter/exit), `--duration-slow` 300-400ms (modals, page-level). UI animation over 500ms feels slow.
43
+ - Easing: ease-out for entering (`cubic-bezier(0.2, 0, 0, 1)` style curves), ease-in for leaving, ease-in-out for moving on screen. Never linear except for progress and spinners.
44
+ - Springs: two or three named presets (`snappy`, `gentle`, `bouncy`) as Motion transition objects.
45
+ - Exits are faster than entrances (about 75% of the enter duration).
46
+
47
+ ## 3. Build it
48
+
49
+ Core patterns with code in `references/patterns.md`:
50
+
51
+ - **Enter/exit**: wrap conditionally rendered elements in `<AnimatePresence>`, give each child a stable `key`, set `initial`, `animate` and `exit`. Use `mode="wait"` when one element replaces another; `initial={false}` on `AnimatePresence` to skip the animation on first page load.
52
+ - **Gestures**: `whileHover`, `whileTap`, `whileFocus` for feedback. Tap feedback is a small scale (0.97-0.98), not a bounce.
53
+ - **Drag**: `drag` (`true`, `"x"` or `"y"`), `dragConstraints` (pixel object or a ref to a container), `dragElastic` (0-1), `dragMomentum={false}` to stop on release, `onDragEnd={(e, info) => ...}` using `info.offset` and `info.velocity` to decide a swipe. Always provide a keyboard or button alternative to a drag action.
54
+ - **Layout**: `layout` on elements whose position or size changes; `layout="position"` when only position should animate (stops text squashing); `layoutId` for shared elements. Wrap siblings that affect each other in `<LayoutGroup>`.
55
+ - **Lists**: stagger with `transition={{ delay: index * 0.03 }}` or variants with `staggerChildren`; cap total stagger at about 300ms so long lists do not take seconds.
56
+ - **Springs**: `transition={{ type: "spring", visualDuration: 0.3, bounce: 0.2 }}` is easiest to reason about; or `stiffness`/`damping`/`mass` (these override `bounce` and `duration`). Bounce 0 for UI chrome, 0.1-0.3 for playful elements.
57
+ - **Bundle size**: in bundle-sensitive apps use `LazyMotion` with `domAnimation` (no drag or layout) or `domMax` and the `m` component from `"motion/react-m"`.
58
+
59
+ ## 4. Reduced motion
60
+
61
+ Required, not optional (WCAG 2.2 SC 2.3.3 Animation from Interactions is AAA, but vestibular disorders are common and the OS setting is the user's explicit request).
62
+
63
+ - App-wide in Motion: `<MotionConfig reducedMotion="user">` at the root. It disables transform and layout animations when the OS setting is on and keeps opacity and colour changes.
64
+ - Per component: `const reduce = useReducedMotion();` then swap movement for a fade.
65
+ - CSS: `@media (prefers-reduced-motion: reduce) { ... }` removing translation, parallax, auto-play and large scale changes. Keep short opacity fades so state changes are still visible.
66
+ - Auto-playing or looping motion longer than 5 seconds needs a pause control (WCAG 2.2.2).
67
+ - Nothing should flash more than three times per second (WCAG 2.3.1).
68
+
69
+ ## 5. Performance
70
+
71
+ - Animate `transform` (`x`, `y`, `scale`, `rotate`) and `opacity`. These can run on the compositor. Animating `width`, `height`, `top`, `left`, `margin` or `box-shadow` triggers layout or paint every frame; use `layout` animations or `transform: scale` instead.
72
+ - Frame budget: 16.7ms at 60Hz, 8.3ms at 120Hz. Check with the browser's Performance panel (look for long tasks and layout/paint during the animation) and the Rendering panel's paint flashing.
73
+ - `will-change: transform` only on elements about to animate, removed after; not on everything.
74
+ - Do not drive animation from React state set every frame; use Motion values (`useMotionValue`, `useTransform`, `useScroll`) which update without re-rendering.
75
+ - Scroll-linked effects: prefer CSS scroll-driven animations (`animation-timeline: scroll()` / `view()`) where browser support fits, or Motion `useScroll`; never a `scroll` event listener that sets state.
76
+ - Test on a throttled CPU (4x slowdown) and a real low-end phone if the audience uses them.
77
+
78
+ ## 6. Verify
79
+
80
+ 1. Trigger each animation, then interrupt it (click again mid-animation, navigate away). It must not jump, stack or leave an element half-visible.
81
+ 2. Turn on the OS reduced-motion setting (or emulate `prefers-reduced-motion` in browser devtools) and repeat.
82
+ 3. Record a performance profile of the heaviest animation; no dropped frames on the target device class.
83
+ 4. Check keyboard: focus lands correctly after a modal opens or a route changes, and is not lost to an exiting element.
84
+ 5. Check no layout shift is introduced (elements entering should not push content after load).
85
+
86
+ ## Never
87
+
88
+ - Never block input until an animation finishes, or make users wait for motion to reach content.
89
+ - Never animate on page load just because you can; entrance animations on every scroll section get tiring.
90
+ - Never use motion as the only signal of a state change.
91
+ - Never mix `framer-motion` and `motion/react` imports, or two animation libraries on one element.
92
+
93
+ ## Report back
94
+
95
+ ```
96
+ ## Motion: <scope>
97
+ Added/changed: <element: trigger -> animation, duration/spring, file>
98
+ Tokens: <defined or reused>
99
+ Reduced motion: <how each animation degrades>
100
+ Performance: <properties animated; profile result or "not profiled">
101
+ Interruptions tested: <yes/no, what>
102
+ Not done: <items and why>
103
+ ```
@@ -0,0 +1,18 @@
1
+ {
2
+ "should_trigger": [
3
+ "Make the notification toasts slide in and fade out when dismissed using motion/react",
4
+ "Our accordion animates height and it janks on mobile, make it smooth",
5
+ "Add a shared-element transition so the product thumbnail grows into the detail page image",
6
+ "Let users swipe cards left or right to dismiss them, with a spring back if they don't swipe far enough",
7
+ "How do I make all our Framer Motion animations respect prefers-reduced-motion?",
8
+ "Define duration and easing tokens so every hover and modal transition in the app feels consistent"
9
+ ],
10
+ "should_not_trigger": [
11
+ "Render a 30 second promo MP4 from React components with spring animations",
12
+ "Animate a visual proof of the chain rule for a maths video",
13
+ "Pick a colour palette and type scale so the admin panel stops looking generic",
14
+ "The product grid re-renders on every filter change, profile and fix it",
15
+ "Check that our modal traps focus and is announced by screen readers",
16
+ "Write Playwright tests for the drag-and-drop kanban board"
17
+ ]
18
+ }