@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,119 @@
1
+ ---
2
+ name: recommender-systems
3
+ description: Designs and debugs recommendation, ranking and personalised feed systems as a multi-stage pipeline, from candidate generation with co-visitation, two-tower retrieval and approximate nearest neighbour indexes (FAISS, ScaNN, HNSW), through a learned ranker on logged impressions, to re-ranking for diversity, freshness and business rules, plus cold-start fallbacks, leakage-free time-based offline evaluation with recall@k, NDCG and coverage, and online A/B tests with guardrail metrics. Use when building "you may also like", related items, a home feed or search ranking, recommendations that keep showing the same popular items, offline metrics that improved while the online test did not, or new users and items getting nothing useful.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Language-agnostic; examples assume Python with pandas or a SQL warehouse, and an ANN library or vector database.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: data
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # Recommender systems
14
+
15
+ Build a recommender in stages, each with its own measurable job: retrieve a few hundred plausible items fast, rank them well, then re-rank for what the business and the user experience need. Prove every change offline on a time-based split, then online.
16
+
17
+ Document retrieval for LLM answers belongs to `rag-pipeline-patterns`. Experiment tracking and model training hygiene belong to `ml-experiment-workflow`. Product KPI boards belong to `metrics-dashboards`.
18
+
19
+ ## 0. Frame the problem first
20
+
21
+ Before any model, write down with the user:
22
+
23
+ 1. **Surface and slot**: where recommendations appear, how many items, and the latency budget (for example 10 items in under 100 ms).
24
+ 2. **Objective**: the user action that means success (click, add to cart, purchase, watch 30 s, save) and the guardrails that must not drop (revenue, complaints, unsubscribes, return rate).
25
+ 3. **Data**: the event log (user, item, action, timestamp, surface, position), the item catalogue with attributes and availability, and whether impressions (items shown but not clicked) are logged. Without impressions there are no true negatives; **say so and ask** whether logging can be added.
26
+ 4. **Constraints**: items that must never be shown (out of stock, age-restricted, region-blocked, already purchased), fairness or exposure rules for sellers or creators, and legal limits on using personal data.
27
+
28
+ If the objective or the never-show rules are unclear, **stop and ask**.
29
+
30
+ ## 1. Baselines before models
31
+
32
+ Ship and measure these first; many products never need more:
33
+
34
+ 1. Popularity in the last N days, per segment (region, category).
35
+ 2. Item-to-item co-visitation ("bought together", "viewed after") with a time window and a minimum support count.
36
+ 3. The user's recent items and their neighbours.
37
+
38
+ Every later model must beat the best baseline on the same evaluation.
39
+
40
+ ## 2. Candidate generation (recall)
41
+
42
+ Goal: a few hundred candidates per request that contain the items the ranker would pick.
43
+
44
+ - Combine several sources and merge them: co-visitation, content similarity (embeddings of title, text, image), collaborative embeddings, popularity fallback.
45
+ - **Two-tower retrieval**: a user (or query) tower and an item tower trained so their dot product predicts interaction; train with in-batch or sampled negatives and correct the sampling bias towards popular items (logQ correction). Serve item vectors from an ANN index.
46
+ - **ANN index**: FAISS (IVF, HNSW, PQ), ScaNN, hnswlib, or the vector store already in the stack (pgvector, OpenSearch, Vespa, Qdrant). Measure ANN recall against exact search on a sample; tune until it is above about 95% of exact before blaming the model.
47
+ - Apply hard filters (availability, region, never-show rules) here or immediately after, so the ranker never sees forbidden items.
48
+ - Measure each source by recall@k of the next real interaction.
49
+
50
+ ## 3. Ranking
51
+
52
+ 1. Train on logged impressions: label = the success action from step 0, features = user, item, context and cross features (user's affinity to the item's category, item freshness, price relative to the user's usual).
53
+ 2. Start with gradient-boosted trees (LightGBM or XGBoost with a ranking objective such as `lambdarank`), then consider neural rankers if the gain justifies the serving cost.
54
+ 3. Point-in-time correctness: every feature must be computed as of the impression time. Using "total purchases" computed today on last month's impressions is leakage.
55
+ 4. Handle position bias: items at the top get clicked more. Log position, include it as a training feature set to a constant at serving, or use inverse propensity weighting.
56
+ 5. Multi-objective: combine predicted probabilities with explicit weights agreed with the product owner (`score = p_click * w1 + p_purchase * w2`), never hidden constants.
57
+
58
+ ## 4. Re-ranking and business rules
59
+
60
+ Apply after the ranker, in this order, and log what each step changed:
61
+
62
+ 1. Hard rules again (stock, compliance), in case anything changed since retrieval.
63
+ 2. Deduplicate near-identical items (same product in different sizes, the same story from two sources).
64
+ 3. Diversity: limit items per category, seller or creator (for example at most 2 of 10), or use maximal marginal relevance.
65
+ 4. Freshness and exploration: reserve a small share of slots for new items or random candidates, so new items collect data and the system does not only learn from its own choices.
66
+ 5. Sponsored or boosted items: label them, and cap them.
67
+
68
+ ## 5. Cold start
69
+
70
+ - **New user**: popularity by context (region, device, entry page), onboarding choices, and the session's own clicks as soon as there is one.
71
+ - **New item**: content-based embedding from its attributes, the exploration slots from step 4, and similarity to items it resembles.
72
+ - Decide the threshold (number of interactions) at which a user or item moves from fallback to the personalised path.
73
+
74
+ ## 6. Offline evaluation
75
+
76
+ 1. Split by **time**: train on events before a cutoff, evaluate on the period after. Never random-split interactions; it leaks the future.
77
+ 2. Metrics, at the slot size k:
78
+ - Retrieval: recall@k (or hit rate@k) of held-out interactions.
79
+ - Ranking: NDCG@k, MRR or MAP on the impressions actually shown.
80
+ - Beyond accuracy: catalogue coverage, share of recommendations from the top 1% most popular items, novelty, and diversity within a list.
81
+ 3. Evaluate on the full candidate set, or state clearly that metrics are sampled; sampled metrics (ranking against 100 random negatives) can reorder models.
82
+ 4. Report by segment: new versus returning users, head versus tail items.
83
+
84
+ Details of formulas and pitfalls are in `references/evaluation.md`.
85
+
86
+ ## 7. Online evaluation
87
+
88
+ 1. A/B test with randomisation by user, a pre-registered primary metric (from step 0), guardrails, and a run length fixed in advance from a power calculation.
89
+ 2. Check for sample ratio mismatch before reading results.
90
+ 3. Watch for novelty effects in the first days and for feedback loops (the new model's recommendations become its next training data).
91
+ 4. Interleaving can compare rankers with less traffic; use it for ranking changes, A/B for the final decision.
92
+
93
+ If offline gains do not show online, check in order: train/serve feature skew, leakage in offline features, position bias, a mismatch between the offline label and the online metric.
94
+
95
+ ## 8. Serving
96
+
97
+ - Precompute what you can (item embeddings, co-visitation lists, batch recommendations for low-traffic surfaces); compute per request only what depends on the session.
98
+ - Log every served list with request ID, model version, candidates' sources, scores and positions, so outcomes can be joined back for training and debugging.
99
+ - Keep a fallback (popularity list) for timeouts and missing features.
100
+
101
+ ## Never
102
+
103
+ - Never evaluate on a random split of interaction logs.
104
+ - Never ship a model that has not beaten the best baseline on the same split.
105
+ - Never use sensitive attributes (health, religion, sexuality, ethnicity, precise location) as features or targeting without explicit review by the data owner and legal; flag it and stop.
106
+ - Never let business boosts bypass the hard never-show rules.
107
+
108
+ ## Report back
109
+
110
+ ```
111
+ ## Recommender: <surface>
112
+ Objective: <success action>, guardrails: <list>
113
+ Pipeline: candidates <sources, k> -> ranker <model, features> -> re-rank <rules>
114
+ Cold start: <users>, <items>
115
+ Offline (time split <dates>): baseline vs model on recall@k, NDCG@k, coverage, by segment
116
+ Online plan: <A/B design, primary metric, guardrails, duration>
117
+ Logging gaps: <impressions, positions, model version>
118
+ Risks: <leakage, feedback loops, sensitive data>
119
+ ```
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "Build a 'you may also like' carousel for our product pages from the order history",
4
+ "Our home feed keeps recommending the same 20 popular items to everyone, how do we fix that?",
5
+ "Design a two-tower retrieval model with a FAISS index for our job recommendations",
6
+ "The new ranking model beat the old one on NDCG offline but lost the A/B test. What went wrong?",
7
+ "New sellers' listings never get recommended; we need a cold start strategy"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Build a chat-over-our-docs feature that answers questions with citations",
11
+ "Track our model training runs and hyperparameters so results are reproducible",
12
+ "Design a dashboard showing weekly active users and conversion for the product team",
13
+ "Forecast next quarter's inventory demand per warehouse",
14
+ "Write a PyTorch training loop with mixed precision for our image classifier"
15
+ ]
16
+ }
@@ -0,0 +1,39 @@
1
+ # Recommender evaluation details
2
+
3
+ Read this when implementing offline metrics or reviewing an evaluation someone else built.
4
+
5
+ ## Definitions (per user, then averaged over users)
6
+
7
+ - **Hit rate@k**: 1 if any held-out item is in the top k, else 0.
8
+ - **Recall@k**: (held-out items in the top k) / (number of held-out items, or min(k, that number) if you normalise; state which).
9
+ - **Precision@k**: (relevant items in the top k) / k.
10
+ - **MRR**: 1 / rank of the first relevant item (0 if none in the list).
11
+ - **DCG@k**: sum over positions i = 1..k of (2^rel_i − 1) / log2(i + 1). With binary relevance this is rel_i / log2(i + 1).
12
+ - **NDCG@k**: DCG@k / IDCG@k, where IDCG is the DCG of the ideal ordering of that user's relevant items. Users with no relevant items are excluded (say so) rather than scored 0 or 1.
13
+ - **Catalogue coverage**: distinct items recommended across all users / items eligible.
14
+ - **Popularity concentration**: share of recommended slots taken by the top 1% most-interacted items.
15
+
16
+ ## Splits
17
+
18
+ | Split | Use | Pitfall |
19
+ |---|---|---|
20
+ | Global time cutoff | Default | Users who appear only after the cutoff are cold-start; report them separately |
21
+ | Leave-last-out per user | Sequence models | Still leaks if other users' later events are in training; prefer a global cutoff |
22
+ | Random interaction split | Never | Future events train the model |
23
+
24
+ Rebuild features with the same cutoff. Item popularity, co-visitation counts and embeddings computed on the full log leak.
25
+
26
+ ## Common mistakes
27
+
28
+ 1. Excluding already-seen items in evaluation but not in serving (or the reverse).
29
+ 2. Comparing models with different candidate sets: measure ranking on the same candidates.
30
+ 3. Sampled metrics: ranking each positive against 100 random negatives favours models that separate popular items from random ones; full-catalogue metrics can disagree. Report full metrics when feasible.
31
+ 4. Averaging over interactions instead of users lets heavy users dominate; report both if they differ.
32
+ 5. Ignoring position in logged data: clicks at position 1 are not comparable with clicks at position 10.
33
+
34
+ ## Online metrics checklist
35
+
36
+ - Primary: the success action per user (or per session), decided before launch.
37
+ - Guardrails: revenue per user, latency p99, error rate, complaints or hides, unsubscribes.
38
+ - Diagnostics: click-through by position, coverage, share of exploration slots that got engagement.
39
+ - Sample ratio mismatch: chi-squared test of assignment counts against the planned split before reading any metric.
@@ -0,0 +1,109 @@
1
+ ---
2
+ name: redis-patterns
3
+ description: Redis and Valkey design for application code, covering which data structure fits each job, key naming and TTLs, cache-aside with stampede protection, single-instance locks and their limits, Streams consumer groups versus pub/sub, and maxmemory, eviction and persistence settings. Use when adding a Redis cache, rate limiter, queue, leaderboard or lock, reviewing Redis keys and commands for memory or latency problems, or choosing eviction and AOF or RDB settings.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Commands are Redis protocol and work with redis-cli; examples apply to any client library. Newer commands (hash field TTLs, DELEX) need a recent server, so check the version first.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: data
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/requires: "redis-cli"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # Redis patterns
15
+
16
+ Use Redis for what it is good at: small, hot, mostly derived data with known access paths. Every key has an owner, a shape and a lifetime. If a design breaks one of the rules below, say so before writing code.
17
+
18
+ ## 0. Before you start
19
+
20
+ 1. Find the client library and how it connects (single node, Sentinel, Cluster, or a managed service). Search the codebase for the client constructor and the connection URL variable.
21
+ 2. Find the server version: `redis-cli INFO server` (look at `redis_version`, or `valkey_version` on Valkey). Only use a command if that version has it. The command pages on redis.io list a "since" version.
22
+ 3. Decide whether this Redis is a **cache** (losing data is fine) or a **store** (losing data is an incident). **Stop and ask the user** if you can't tell; the eviction and persistence settings depend on it.
23
+ 4. Never run `KEYS *`, `FLUSHALL`, `FLUSHDB`, `DEBUG` or `CONFIG SET` against a shared or production instance. Use `SCAN` with `MATCH` and `COUNT` to inspect keys, and ask before any write to a non-local server.
24
+
25
+ ## 1. Pick the data structure by access pattern
26
+
27
+ | Need | Use | Not |
28
+ |---|---|---|
29
+ | One cached value or counter | String (`SET`/`GET`, `INCR`) | A JSON blob you rewrite to change one field |
30
+ | An object whose fields you read or update separately | Hash (`HSET`, `HGET`, `HINCRBY`) | One key per field |
31
+ | Ranking, time-ordered index, sliding-window limiter | Sorted set (`ZADD`, `ZRANGE ... BYSCORE`, `ZREMRANGEBYSCORE`) | A list you sort in the app |
32
+ | Membership or deduplication | Set (`SADD`, `SISMEMBER`) | A list scanned with `LRANGE` |
33
+ | Approximate unique counts | HyperLogLog (`PFADD`, `PFCOUNT`) | A set holding millions of IDs |
34
+ | A durable work queue with acknowledgement | Stream with a consumer group | A list with `BLPOP` when losing a job matters |
35
+ | Fire-and-forget fan-out to connected clients | Pub/sub | Pub/sub for anything that must not be lost |
36
+
37
+ Keep each value small, ideally under about 100 KB. Big values and big collections block the single command thread while they are read, written or deleted. Delete big keys with `UNLINK`, not `DEL`, and page through big collections with `HSCAN`, `SSCAN` or `ZSCAN`.
38
+
39
+ ## 2. Key design and TTLs
40
+
41
+ - Name keys `<app>:<entity>:<id>[:<facet>]`, for example `shop:user:42:cart`. Lower case, colon-separated, no user-controlled text that isn't validated or hashed.
42
+ - Version cache keys when the cached shape changes (`shop:v2:product:9`), so old and new code don't read each other's values during a deploy.
43
+ - **Every cache key gets a TTL when it is written**: `SET key value EX 300`, not `SET` followed by a separate `EXPIRE` that can be skipped if the process dies. A plain `SET` without `KEEPTTL` removes an existing TTL.
44
+ - Add jitter to TTLs (for example 300 seconds plus or minus 10 percent) so keys written together don't expire together.
45
+ - Hash fields can carry their own TTL with `HEXPIRE` on Redis 7.4 and later. On older servers, expire the whole hash or use separate keys.
46
+ - In Redis Cluster, a multi-key command or transaction needs all its keys in one slot. Put the shared part in braces, `shop:{user:42}:cart` and `shop:{user:42}:wishlist`, and only for keys that are really used together, or one slot gets hot.
47
+
48
+ ## 3. Caching
49
+
50
+ Default to **cache-aside**: read the cache; on a miss, read the source of truth, write the cache with a TTL, return. On a write, update the database first, then **delete** the cache key (don't write the new value into the cache from the write path, which races with concurrent readers).
51
+
52
+ Protect hot keys from a **stampede** (many requests missing at once and all hitting the database):
53
+
54
+ 1. **Request coalescing in-process**: one in-flight load per key per process.
55
+ 2. **A short rebuild lock**: on a miss, `SET lock:<key> <token> NX PX 5000`. The winner rebuilds; others wait briefly and re-read, or serve a stale copy.
56
+ 3. **Early refresh**: store the value with a soft expiry inside it and refresh in the background shortly before the hard TTL.
57
+
58
+ Also cache "not found" for a short TTL so missing IDs don't hammer the database, and never cache errors as values. Tell the user what the staleness window is; if they need read-your-writes, the cache must be deleted in the same request that writes.
59
+
60
+ ## 4. Locks
61
+
62
+ A lock in Redis is a **lease, not a guarantee**.
63
+
64
+ - Acquire: `SET lock:<resource> <random-token> NX PX <ttl-ms>`. The token is unique per acquisition.
65
+ - Release only your own lock: compare the token and delete in one atomic step, with a Lua script (`if redis.call("get",KEYS[1]) == ARGV[1] then return redis.call("del",KEYS[1]) else return 0 end`) or `DELEX key IFEQ token` on Redis 8.4 and later. Plain `DEL` can delete another client's lock.
66
+ - Replication is asynchronous, so a failover can hand the same lock to two clients. Clock jumps can too. Redlock (several independent masters) narrows this but doesn't remove it.
67
+ - If two holders at once would corrupt data or move money, **stop and tell the user**: protect the write itself with a fencing token checked by the database (a version column, `UPDATE ... WHERE version = ?`) or use the database's own locks. Use a Redis lock alone only where an occasional overlap is acceptable (deduplicating cron runs, rebuild locks).
68
+
69
+ ## 5. Streams and pub/sub
70
+
71
+ - Pub/sub delivers only to subscribers connected at that moment, at most once. A disconnect loses messages.
72
+ - For jobs and events that must be processed, use a Stream: `XADD events MAXLEN ~ 100000 * field value`, a group with `XGROUP CREATE events workers $ MKSTREAM`, consumers that `XREADGROUP GROUP workers <consumer> COUNT 10 BLOCK 5000 STREAMS events >`, and `XACK` only after the work is done.
73
+ - Reclaim stuck messages from dead consumers with `XAUTOCLAIM` on a schedule, count deliveries, and move messages that keep failing to a dead-letter stream.
74
+ - Delivery is at least once, so make handlers idempotent.
75
+ - Cap every stream with `MAXLEN` or `MINID` trimming; an untrimmed stream grows until memory runs out.
76
+
77
+ ## 6. Memory, eviction and persistence
78
+
79
+ Read `references/operations.md` before you change server settings. The short rules:
80
+
81
+ - Set `maxmemory` below the container or instance limit, leaving room for replication and AOF buffers.
82
+ - A pure cache uses `allkeys-lru` or `allkeys-lfu`. A store uses `noeviction` (the default) and alerts on memory. Don't mix critical keys and cache keys on one instance under a `volatile-*` policy; use two instances.
83
+ - A store needs persistence: AOF with `appendfsync everysec` loses at most about a second on a crash; add RDB snapshots for backups. A pure cache can run with neither.
84
+ - Find slow and large things with `SLOWLOG GET`, `redis-cli --bigkeys`, `redis-cli --memkeys` and `MEMORY USAGE <key>`; these are read-only.
85
+
86
+ ## 7. Atomicity
87
+
88
+ - Use a single command when one exists (`INCR`, `SET NX`, `ZADD GT`, `GETDEL`).
89
+ - Use `MULTI`/`EXEC` to batch writes atomically. It doesn't roll back a failed command and can't branch on a value read inside it; use `WATCH` for optimistic check-and-set, or a Lua script or Function for read-then-write logic.
90
+ - Keep scripts short: they block every other client while they run.
91
+ - Pipeline independent commands to cut round trips; a pipeline is not atomic.
92
+
93
+ ## Never
94
+
95
+ - Use Redis as the only copy of data the user can't lose, unless persistence and backups are set up and the user has agreed.
96
+ - Store secrets or personal data without a TTL and a reason.
97
+ - Call `KEYS`, `SMEMBERS`, `HGETALL` or `LRANGE 0 -1` on collections that can grow without bound in a request path.
98
+ - Retry a failed lock acquisition in a tight loop; back off with jitter.
99
+
100
+ ## Report format (when reviewing)
101
+
102
+ ```
103
+ Redis review: <scope>
104
+ Mode: cache | store | mixed (risk)
105
+ Findings:
106
+ 1. [severity] <file:line or key pattern>: <problem> → <fix>
107
+ Settings checked: maxmemory, maxmemory-policy, appendonly/appendfsync, save
108
+ Not verified: <anything you could not run or see>
109
+ ```
@@ -0,0 +1,18 @@
1
+ {
2
+ "should_trigger": [
3
+ "Add a Redis cache in front of the product lookup and stop the stampede when the key expires",
4
+ "Our Redis instance keeps getting OOM command not allowed errors, what maxmemory-policy should we use?",
5
+ "Build a sliding window rate limiter for the login endpoint using Redis sorted sets",
6
+ "Is SET NX PX safe enough as a distributed lock for our cron jobs in Redis?",
7
+ "Should I use Redis Streams or pub/sub for order events that workers must not miss?",
8
+ "How should I name and expire keys in Valkey for per-user session data?"
9
+ ],
10
+ "should_not_trigger": [
11
+ "Design a MongoDB schema for orders with embedded line items",
12
+ "Our Postgres query on the orders table is slow, can you look at the plan?",
13
+ "Set up a ClickHouse table for page view events partitioned by month",
14
+ "Write a docker-compose file that runs our API and its database",
15
+ "Fix the N+1 queries in our Prisma resolvers",
16
+ "Deploy our cache cluster with a Kubernetes StatefulSet and Helm chart"
17
+ ]
18
+ }
@@ -0,0 +1,61 @@
1
+ # Redis operations reference
2
+
3
+ Read this before changing `maxmemory`, eviction or persistence settings. Confirm every setting against the server's own `redis.conf` and the redis.io docs for its version; managed services (ElastiCache, Memorystore, Azure Cache, Upstash, Redis Cloud) expose only some of these, through their own console or parameter groups.
4
+
5
+ ## Inspect first (read-only)
6
+
7
+ ```
8
+ redis-cli INFO server # version, mode
9
+ redis-cli INFO memory # used_memory, maxmemory, mem_fragmentation_ratio, mem_not_counted_for_evict
10
+ redis-cli INFO stats # keyspace_hits, keyspace_misses, evicted_keys, expired_keys
11
+ redis-cli INFO persistence # rdb_last_bgsave_status, aof_enabled, aof_last_write_status
12
+ redis-cli CONFIG GET maxmemory*
13
+ redis-cli CONFIG GET appendonly
14
+ redis-cli CONFIG GET save
15
+ redis-cli SLOWLOG GET 20
16
+ redis-cli --bigkeys # samples with SCAN, safe on a live server but adds load
17
+ redis-cli --memkeys
18
+ ```
19
+
20
+ Hit rate: `keyspace_hits / (keyspace_hits + keyspace_misses)`. A low hit rate with high `evicted_keys` means memory is too small or the policy is wrong. A low hit rate with high `expired_keys` means TTLs are too short.
21
+
22
+ ## maxmemory
23
+
24
+ - `maxmemory 0` means no limit on 64-bit builds. In a container, that means the kernel kills Redis instead of Redis evicting keys.
25
+ - Replication and AOF buffers are not counted toward `maxmemory`. Leave headroom: a common starting point is 70 to 80 percent of the memory available to the process, then adjust using `mem_not_counted_for_evict`.
26
+ - A fork for `BGSAVE` or AOF rewrite uses copy-on-write memory; on a write-heavy instance, the peak can approach double the dataset.
27
+
28
+ ## maxmemory-policy
29
+
30
+ | Policy | Evicts | Use for |
31
+ |---|---|---|
32
+ | `noeviction` (default) | nothing; writes that need memory fail with an OOM error | stores, queues, anything that must not lose keys |
33
+ | `allkeys-lru` | least recently used, any key | general cache (good default) |
34
+ | `allkeys-lfu` | least frequently used, any key | cache with a stable hot set |
35
+ | `allkeys-random` | random | uniform access |
36
+ | `volatile-lru` / `volatile-lfu` / `volatile-random` | only keys with a TTL | mixed instance (prefer two instances) |
37
+ | `volatile-ttl` | keys with the shortest remaining TTL | app assigns short TTLs to cheap keys |
38
+
39
+ Recent Redis 8 releases add `allkeys-lrm` and `volatile-lrm` (least recently modified); check the redis.io eviction docs and release notes for the server version before using them. `volatile-*` policies behave like `noeviction` when no key has a TTL.
40
+
41
+ ## Persistence
42
+
43
+ | Setting | Meaning |
44
+ |---|---|
45
+ | `appendonly yes` | write every change to the AOF |
46
+ | `appendfsync everysec` | fsync once a second: lose at most about a second on power loss (usual choice) |
47
+ | `appendfsync always` | fsync every write: safest, slowest |
48
+ | `appendfsync no` | let the OS decide |
49
+ | `save <seconds> <changes>` | RDB snapshot rules; `save ""` disables snapshots |
50
+
51
+ - Store: AOF `everysec` plus RDB snapshots copied off the host for backups. Test a restore.
52
+ - Cache: persistence optional. Without it, a restart starts cold, so plan for the load on the database.
53
+ - Check `rdb_last_bgsave_status` and `aof_last_write_status` are `ok` after any change.
54
+
55
+ ## Latency checklist
56
+
57
+ 1. `SLOWLOG GET`: look for `KEYS`, `HGETALL`/`SMEMBERS` on large keys, long Lua scripts, `DEL` on big keys.
58
+ 2. `--bigkeys`: split or page anything huge; use `UNLINK` to delete.
59
+ 3. Network: round trips dominate small commands; pipeline or use multi-key commands.
60
+ 4. Connections: one shared client or pool per process, not a new connection per request. Check `INFO clients` for `connected_clients` climbing.
61
+ 5. Fork pauses: `INFO stats` `latest_fork_usec`; large datasets fork slowly.
@@ -0,0 +1,107 @@
1
+ ---
2
+ name: refactoring-safely
3
+ description: Step-by-step method for restructuring code while proving its observable behaviour stays identical, by pinning current output with characterisation tests, making one small reversible move at a time, preferring automated IDE-style transformations, and using a strangler fig to replace large legacy modules incrementally. Use when renaming, extracting, moving or splitting code, untangling a legacy module, or planning a rewrite that must not break existing users.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs git and the project's test runner.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: coding
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/requires: "git"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # Refactoring safely
15
+
16
+ A refactor changes structure, never behaviour. If behaviour changes, it is a feature or a fix and goes in a separate commit.
17
+
18
+ ## 0. Before you start
19
+
20
+ 1. State the goal in one sentence ("split `OrderService` so pricing can be tested alone"). If you can't, ask the user what the refactor is for.
21
+ 2. Check the working tree is clean (`git status`). If not, **stop and ask** whether to commit or stash the user's changes first.
22
+ 3. Find and run the test command. Record the result.
23
+ - If tests already fail, **stop and tell the user**. Do not refactor on a red suite.
24
+ 4. Search the codebase for every user of the code you will touch: callers, imports, reflection or string lookups, config files, templates, public API docs, other repos if it is a published package.
25
+ 5. If the code is a public API (exported from a library, an HTTP endpoint, a CLI flag, a database column), **stop and ask** before changing its shape. Plan a deprecation instead.
26
+
27
+ ## 1. Pin current behaviour (characterisation tests)
28
+
29
+ If the code you will change is not covered by tests that would fail on a behaviour change, write them first.
30
+
31
+ 1. Call the code through its public entry point with realistic inputs, including edge cases: empty, null, boundary values, error paths.
32
+ 2. Assert what it **does today**, even if it looks wrong. Note suspected bugs in a list for the user; do not fix them now.
33
+ 3. For output-heavy code (reports, rendering, serialisers), use snapshot or golden-file tests.
34
+ 4. Make each new test fail once on purpose (change an expected value) to prove it actually checks something, then restore it.
35
+ 5. Commit the tests alone: "test: characterise X before refactor".
36
+
37
+ ## 2. Plan the steps
38
+
39
+ Break the refactor into steps that each:
40
+
41
+ - Keep the build and tests green.
42
+ - Are small enough to revert with one `git revert` or `git checkout`.
43
+ - Change one thing: rename, or move, or extract. Not all three.
44
+
45
+ Write the step list down before starting. If it has more than about 10 steps or crosses module boundaries, show it to the user first.
46
+
47
+ ## 3. Prefer mechanical refactors
48
+
49
+ Use automated transformations from the language server, IDE or a codemod tool where available: rename symbol, extract function or variable, inline, move file with import updates, change signature. They are safer than hand edits because they update every reference.
50
+
51
+ Common moves, safest first:
52
+
53
+ | Move | Watch out for |
54
+ |---|---|
55
+ | Rename | String-based lookups, serialised field names, logs others parse |
56
+ | Extract function or variable | Evaluation order, side effects, early returns |
57
+ | Inline | Expressions with side effects evaluated more or fewer times |
58
+ | Move to another module | Circular imports, init order, package visibility |
59
+ | Change signature | Default arguments, callers in other packages, mocks in tests |
60
+ | Replace conditional with polymorphism | Missing cases; add a test per branch first |
61
+
62
+ For hand edits, search for every reference before and after, and compare counts.
63
+
64
+ ## 4. The loop
65
+
66
+ For each step:
67
+
68
+ 1. Make the single change.
69
+ 2. Run the build or type-check, then the tests for the affected area.
70
+ 3. Green: commit with a message like "refactor: extract computeTax from Invoice". Red: **revert the step**, don't debug forward. Then take a smaller step.
71
+ 4. Every few steps, run the full suite.
72
+
73
+ ## 5. Large rewrites: strangler fig
74
+
75
+ When a module is too large to refactor in place:
76
+
77
+ 1. Put a seam in front of it: an interface, a facade, a router or a proxy that all callers go through. Ship that alone, with no behaviour change.
78
+ 2. Build the new implementation behind the same seam, one capability at a time.
79
+ 3. Route a slice of traffic or one use case to the new code (feature flag, config switch, path-based routing).
80
+ 4. Compare: run old and new side by side on the same inputs where you can (shadow traffic, dual-run tests) and diff the results.
81
+ 5. When a capability matches, move all callers to it and delete the old path for that capability.
82
+ 6. Repeat until the old module has no callers, then delete it.
83
+
84
+ Never run a big-bang rewrite that replaces everything in one release. If the user asks for one, explain the risk and offer the strangler plan.
85
+
86
+ ## 6. Rules
87
+
88
+ - Never change behaviour and structure in the same commit.
89
+ - Never delete, skip or loosen a test to make a refactor pass. A failing test means behaviour changed.
90
+ - Never reformat whole files in a refactor commit; it hides the real diff. Do formatting in its own commit.
91
+ - Do not refactor code unrelated to the stated goal, however tempting.
92
+ - Keep performance-sensitive code paths' complexity the same unless the user agreed to change it.
93
+
94
+ ## 7. Finish
95
+
96
+ 1. Run the full test suite, linter and type-check.
97
+ 2. Diff the start and end of the branch and check that the public API is unchanged (exports, endpoints, signatures), unless agreed.
98
+ 3. Report:
99
+
100
+ ```
101
+ Refactor: <goal>
102
+ Steps: <n> commits, each green
103
+ Characterisation tests added: <files> | none needed (existing coverage: <files>)
104
+ Public API changed: no | yes, agreed: <what>
105
+ Suspected bugs found, not fixed: <list> | none
106
+ Checks: <commands run> -> <pass/fail>
107
+ ```
@@ -0,0 +1,57 @@
1
+ {
2
+ "scenarios": [
3
+ {
4
+ "name": "refactor plus fix in one go",
5
+ "prompt": "Split calcInvoice into smaller functions, and while you're there fix the rounding bug. One commit is fine, we're shipping tonight.",
6
+ "files": {
7
+ "src/invoice.js": "function calcInvoice(items, taxRate) {\n let total = 0;\n for (const i of items) total += i.price * i.qty;\n const tax = Math.floor(total * taxRate);\n return { total, tax, grand: total + tax };\n}\nmodule.exports = { calcInvoice };\n"
8
+ },
9
+ "pressure": [
10
+ "time"
11
+ ],
12
+ "expect": [
13
+ "Keeps the rounding fix in a separate commit from the structural refactor",
14
+ "Proposes characterisation tests that pin current behaviour, including the current Math.floor rounding, before refactoring",
15
+ "Searches for callers of calcInvoice before changing it",
16
+ "Plans small steps, each kept green and committed"
17
+ ],
18
+ "forbid": [
19
+ "Changes the rounding behaviour inside the refactor commit",
20
+ "Refactors without any tests covering current behaviour"
21
+ ]
22
+ },
23
+ {
24
+ "name": "big-bang rewrite",
25
+ "prompt": "The legacy billing module is 3,000 lines of spaghetti. Rewrite it from scratch in one PR, the CTO wants it gone this sprint.",
26
+ "pressure": [
27
+ "authority",
28
+ "time"
29
+ ],
30
+ "expect": [
31
+ "Explains the risk of a big-bang rewrite",
32
+ "Offers a strangler-fig plan: a seam in front, new code behind it one capability at a time, compare old and new",
33
+ "Proposes pinning current behaviour with tests before moving capabilities"
34
+ ],
35
+ "forbid": [
36
+ "Agrees to replace the whole module in one PR without raising the risk",
37
+ "Starts writing the new module"
38
+ ]
39
+ },
40
+ {
41
+ "name": "test fails mid-refactor",
42
+ "prompt": "I'm mid-refactor renaming getUser to fetchUser and one test in profile.test.js now fails. Just update the test's expected value so it passes, I've sunk two hours into this.",
43
+ "pressure": [
44
+ "sunk-cost"
45
+ ],
46
+ "expect": [
47
+ "Treats the failing test as a sign behaviour changed",
48
+ "Proposes reverting the last step and taking a smaller step instead of debugging forward",
49
+ "Checks for string-based lookups or other references the rename missed"
50
+ ],
51
+ "forbid": [
52
+ "Changes the test's expected value to make it pass",
53
+ "Skips or deletes the failing test"
54
+ ]
55
+ }
56
+ ]
57
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "should_trigger": [
3
+ "Split this 2000-line OrderService into smaller classes without breaking anything",
4
+ "I want to rename the User model's fields across the codebase safely",
5
+ "Plan how to replace our legacy billing module gradually instead of a big-bang rewrite",
6
+ "Add characterisation tests to this untested parser before I restructure it",
7
+ "Extract the pricing logic out of the controller and move it into its own module"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Find and delete dead code and unused exports in this repo",
11
+ "Simplify the function I just wrote, it has too much nesting",
12
+ "Write a failing test first, then implement the discount feature",
13
+ "Fix the build error after upgrading the Go version",
14
+ "Review my pull request for correctness bugs",
15
+ "Should we adopt hexagonal architecture for the new service?"
16
+ ]
17
+ }