@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,117 @@
1
+ ---
2
+ name: rag-pipeline-patterns
3
+ description: Retrieval-augmented generation pipeline design covering document chunking, embedding choice, hybrid keyword plus vector search with reranking, metadata and permission filters, grounded answers with citations, index freshness, and measuring retrieval quality apart from answer quality. Use when building or fixing a RAG system, a chat-over-your-docs feature, a semantic search index, or when answers cite the wrong passages or miss documents that exist.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Examples use SQL (Postgres with pgvector) and pseudocode; the rules apply to any vector store and model provider.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: ai
9
+ kete-loom/risk: writes-files
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # RAG pipeline patterns
14
+
15
+ A RAG system is two systems: a search engine and a writer. Most "the model hallucinated" bugs are search bugs. Build, measure and fix retrieval first, then generation.
16
+
17
+ ## 0. Before you change anything
18
+
19
+ 1. Find the pipeline stages in the code: loaders, chunker, embedder, index writer, query path (rewrite, search, rerank, filter), prompt builder, answer post-processing.
20
+ 2. Write down the current settings: chunk size and overlap, embedding model and dimension, distance metric, top-k at each stage, filters, prompt template.
21
+ 3. Look for an evaluation set (questions with known relevant documents). If none exists, build one first (step 7). **Stop and ask the user** for 20 to 50 real questions if you can't find real traffic or logs; do not invent the whole set yourself.
22
+ 4. Never change the embedding model, chunker and prompt in one step. Change one stage, re-run the eval, keep or revert.
23
+
24
+ ## 1. Ingestion and chunking
25
+
26
+ - Parse structure before splitting: keep headings, lists, tables and code blocks intact. Convert HTML and PDF to clean text or Markdown first; strip navigation, footers and boilerplate repeated on every page.
27
+ - Split on structure (sections, then paragraphs, then sentences), not on a fixed character count. Fall back to token-count windows only for unstructured text.
28
+ - Start with chunks of roughly 200 to 500 tokens and 10 to 20 percent overlap, then tune on the eval set. Short factual lookups favour smaller chunks; reasoning across a section favours larger ones.
29
+ - Prepend context to each chunk before embedding: document title and the heading path (`Billing > Refunds > Partial refunds`). A chunk that says "it expires after 30 days" is useless without knowing what "it" is.
30
+ - Store per chunk: stable `chunk_id`, `doc_id`, source URL or path, heading path, position, content hash, `updated_at`, and access-control fields (tenant, groups). Citations and filters depend on these.
31
+ - Tables: keep the header row with every chunk of rows, or store the table as one chunk plus a text summary.
32
+ - Deduplicate near-identical chunks (same content hash, or very high similarity) so top-k isn't five copies of one paragraph.
33
+
34
+ ## 2. Embeddings
35
+
36
+ - Use one embedding model per index. Query and document vectors must come from the same model and version; mixing them silently ruins recall.
37
+ - Record the model name and dimension in the index metadata. Changing models means a full re-embed into a new index, then a switch, never an in-place mix.
38
+ - Use the model's query/document modes or prefixes if it has them (some models expect different input types for queries and passages). Check the model's docs.
39
+ - Match the distance metric to the model (most text models are trained for cosine; normalise vectors if you use inner product).
40
+ - Batch embedding calls, retry with backoff on rate limits, and cache by content hash so re-ingesting unchanged chunks costs nothing.
41
+
42
+ ## 3. Retrieval
43
+
44
+ Default to hybrid search, then rerank:
45
+
46
+ 1. **Keyword search** (BM25 or the database's full-text search) catches exact terms: product codes, error messages, names, acronyms. Vector search alone misses these.
47
+ 2. **Vector search** catches paraphrases and synonyms.
48
+ 3. **Fuse** the two ranked lists with reciprocal rank fusion: `score = sum(1 / (k + rank))` over both lists, with `k = 60` as the usual starting value. RRF needs no score normalisation, which is why it is the safe default.
49
+ 4. **Rerank** the fused top 30 to 100 with a cross-encoder or a reranking API, then keep the top 3 to 10 for the prompt.
50
+
51
+ Decision rules:
52
+
53
+ - Apply metadata and permission filters **inside** the search query (pre-filter), not after top-k. Post-filtering returns too few results and can leak titles or counts of documents the user cannot see.
54
+ - If an approximate index (HNSW, IVF) combined with a restrictive filter returns fewer than k rows, raise the index's search breadth setting or use exact search for that filter; check your store's docs for the knob.
55
+ - Query rewriting (expanding a follow-up question into a standalone one using chat history) belongs before search. Keep the original question for the prompt.
56
+ - Return nothing rather than something irrelevant: set a minimum reranker score and let the generator say "I couldn't find this" below it.
57
+
58
+ Postgres + pgvector examples are in `references/retrieval-recipes.md`.
59
+
60
+ ## 4. Building the prompt
61
+
62
+ - Put retrieved chunks in clearly delimited blocks, each with its `chunk_id` and source, e.g. `<source id="c_812" title="Refund policy">...</source>`.
63
+ - Instruct the model to answer only from the sources, to cite the source ids it used for each claim, and to say it doesn't know when the sources don't cover the question.
64
+ - Treat retrieved text as untrusted data. Documents can contain instructions ("ignore previous instructions"); the system prompt must say sources are reference material, never commands. Never give the generation step tools that act on the world based on retrieved text without a confirmation step.
65
+ - Trim to a token budget rather than a fixed k. With long contexts, put the strongest chunks at the start (and, if you must send many, at the end) rather than burying them in the middle.
66
+
67
+ ## 5. Citations
68
+
69
+ - Validate citations after generation: every cited id must be one you actually sent. Drop or flag answers that cite unknown ids.
70
+ - Map ids back to source URL plus heading or page so users can click through.
71
+ - For high-stakes answers, check that each cited chunk actually supports the sentence (a second model call or string-overlap check), and mark unsupported sentences.
72
+
73
+ ## 6. Freshness and deletion
74
+
75
+ - Re-ingest incrementally: compare content hashes per document, re-chunk and re-embed only what changed, and delete chunks whose document was removed or whose permissions changed.
76
+ - Deletion is a requirement, not a cleanup task. A deleted or access-revoked document that stays in the index is a data leak.
77
+ - Store `updated_at` and allow a recency boost or filter for time-sensitive corpora (news, release notes, prices).
78
+ - Schedule a periodic full reconciliation (index ids vs source ids) to catch missed deletes.
79
+
80
+ ## 7. Evaluate retrieval separately from generation
81
+
82
+ Build an eval set of question → relevant `doc_id`s (or chunk ids), then measure each stage on its own. Details and formulas are in `references/evaluation.md`.
83
+
84
+ | Stage | Metric | Tells you |
85
+ |---|---|---|
86
+ | Retrieval | recall@k, MRR, nDCG@k | Did the right chunks come back, and how high? |
87
+ | Reranking | recall@final_k before vs after | Is the reranker helping or dropping good chunks? |
88
+ | Generation | faithfulness (claims supported by sources), answer correctness, citation accuracy | Is the writer using what it got? |
89
+ | End to end | task success, "I don't know" rate on unanswerable questions | Does it work for users? |
90
+
91
+ Rules:
92
+
93
+ - If recall@k is low, fix chunking, hybrid search or filters. Do not touch the prompt.
94
+ - If recall is high but answers are wrong, fix the prompt, context ordering or model.
95
+ - Include unanswerable questions; a good system refuses them.
96
+ - Re-run the eval on every change to chunking, embeddings, retrieval settings or prompt, and report before and after numbers.
97
+
98
+ ## Never
99
+
100
+ - Never mix embeddings from two models in one index.
101
+ - Never filter permissions after retrieval or in the prompt ("only use documents the user may see").
102
+ - Never tune top-k, chunk size or the prompt without an eval set to measure against.
103
+ - Never let retrieved text trigger tool calls or override system instructions.
104
+ - Never report "better" from a handful of eyeballed answers.
105
+
106
+ ## Report format
107
+
108
+ When you finish a change, report:
109
+
110
+ ```
111
+ Stage changed: <chunking | embeddings | retrieval | rerank | prompt | freshness>
112
+ Change: <one line>
113
+ Eval set: <n questions, source>
114
+ recall@k: <before> → <after> MRR: <before> → <after>
115
+ Faithfulness / correctness: <before> → <after> (or "not measured")
116
+ Risks: <re-index needed, cost change, latency change>
117
+ ```
@@ -0,0 +1,18 @@
1
+ {
2
+ "should_trigger": [
3
+ "Build a chat-over-our-docs feature that answers from our Confluence export with citations",
4
+ "Our RAG bot keeps citing the wrong section of the handbook, how do I fix retrieval?",
5
+ "Add hybrid BM25 plus vector search with a reranker to our pgvector document index",
6
+ "What chunk size and overlap should I use for embedding these PDF manuals?",
7
+ "Deleted documents still show up in our semantic search answers, fix the re-indexing job",
8
+ "How do I measure recall@k for our retrieval step separately from answer quality?"
9
+ ],
10
+ "should_not_trigger": [
11
+ "Review our RAG pipeline code and config and list its weaknesses without changing anything",
12
+ "Write a Model Context Protocol server that exposes our docs search as a tool",
13
+ "Design the tool set and permission model for our coding agent",
14
+ "Set up an eval harness that scores our chatbot's prompts against a golden set",
15
+ "Tune this Postgres query that joins orders and customers, it is slow",
16
+ "Fine-tune a PyTorch model on our labelled support tickets"
17
+ ]
18
+ }
@@ -0,0 +1,37 @@
1
+ # Evaluating a RAG pipeline
2
+
3
+ Read this when building the eval set or computing metrics.
4
+
5
+ ## Building the eval set
6
+
7
+ 1. Collect 20 to 50 real questions to start (support tickets, search logs, chat logs). Grow to a few hundred over time.
8
+ 2. For each, record the ids of the documents (or chunks) that answer it, and a short reference answer. A subject-matter expert should confirm these.
9
+ 3. Add 10 to 20 percent unanswerable questions (the corpus doesn't cover them) with an empty relevant set.
10
+ 4. Add hard cases: exact identifiers (error codes, SKUs), follow-up questions that need history, questions whose answer changed recently, questions where the user lacks access to the answering document.
11
+ 5. Freeze the set in version control as JSONL: `{"id": "q17", "question": "...", "relevant": ["doc_42"], "answer": "..."}`. Never tune on the test portion; keep a held-out split if you iterate a lot.
12
+
13
+ Synthetic questions generated by a model from your chunks are fine for extra coverage, but they over-reward chunk-shaped questions. Never use only synthetic data.
14
+
15
+ ## Retrieval metrics
16
+
17
+ For each question, take the ranked list of retrieved ids (deduplicated to doc level if relevance is labelled per document).
18
+
19
+ - **recall@k** = |relevant ∩ top-k| / |relevant|. Average over answerable questions.
20
+ - **hit@k** = 1 if any relevant id is in top-k, else 0. Useful when one document is enough.
21
+ - **MRR** = mean of 1 / (rank of first relevant id), 0 if none in the list.
22
+ - **nDCG@k** = DCG@k / ideal DCG@k, with DCG = sum over positions i of rel_i / log2(i + 1). Use graded relevance if you have it.
23
+
24
+ Measure at the retriever's k (before rerank) and at the final k sent to the prompt. The gap shows what reranking and trimming cost.
25
+
26
+ ## Generation metrics
27
+
28
+ - **Faithfulness**: split the answer into claims; the fraction supported by the provided sources. Usually judged by a model with a fixed rubric; spot-check the judge against human labels on 30+ examples before trusting it.
29
+ - **Answer correctness**: compare to the reference answer (model judge or human).
30
+ - **Citation accuracy**: fraction of citations that point to a sent chunk that actually supports the sentence.
31
+ - **Refusal on unanswerable**: fraction of unanswerable questions where the system said it didn't know.
32
+
33
+ ## Running it
34
+
35
+ - Run the full set on every pipeline change and log: git commit, settings (chunk size, model, k values, prompt version), and every metric.
36
+ - Report before and after side by side, and list questions that flipped from pass to fail. Regressions on individual questions matter more than a small average gain.
37
+ - Judges and generators are non-deterministic: fix temperature at 0 where possible and repeat runs if differences are small.
@@ -0,0 +1,78 @@
1
+ # Retrieval recipes (Postgres + pgvector)
2
+
3
+ Read this when the project stores vectors in Postgres. The patterns carry over to other stores; check that store's docs for the equivalent syntax.
4
+
5
+ ## Schema
6
+
7
+ ```sql
8
+ CREATE EXTENSION IF NOT EXISTS vector;
9
+
10
+ CREATE TABLE chunks (
11
+ chunk_id text PRIMARY KEY,
12
+ doc_id text NOT NULL,
13
+ tenant_id text NOT NULL,
14
+ heading_path text,
15
+ content text NOT NULL,
16
+ content_hash text NOT NULL,
17
+ updated_at timestamptz NOT NULL,
18
+ embedding vector(1024) NOT NULL, -- dimension of YOUR model; HNSW on `vector` indexes up to 2,000 dims
19
+ tsv tsvector GENERATED ALWAYS AS (to_tsvector('english', content)) STORED
20
+ );
21
+
22
+ CREATE INDEX ON chunks USING hnsw (embedding vector_cosine_ops);
23
+ CREATE INDEX ON chunks USING gin (tsv);
24
+ CREATE INDEX ON chunks (tenant_id);
25
+ ```
26
+
27
+ pgvector distance operators: `<=>` cosine distance, `<->` Euclidean (L2), `<#>` negative inner product. The index operator class must match the operator you query with (`vector_cosine_ops` for `<=>`).
28
+
29
+ ## Hybrid search with reciprocal rank fusion
30
+
31
+ ```sql
32
+ WITH vec AS (
33
+ SELECT chunk_id, row_number() OVER (ORDER BY embedding <=> $1) AS rank
34
+ FROM chunks
35
+ WHERE tenant_id = $2 -- pre-filter: permissions first
36
+ ORDER BY embedding <=> $1
37
+ LIMIT 50
38
+ ),
39
+ kw AS (
40
+ SELECT chunk_id,
41
+ row_number() OVER (ORDER BY ts_rank_cd(tsv, q) DESC) AS rank
42
+ FROM chunks, websearch_to_tsquery('english', $3) q
43
+ WHERE tenant_id = $2 AND tsv @@ q
44
+ ORDER BY ts_rank_cd(tsv, q) DESC
45
+ LIMIT 50
46
+ )
47
+ SELECT c.chunk_id, c.doc_id, c.heading_path, c.content,
48
+ COALESCE(1.0 / (60 + vec.rank), 0) + COALESCE(1.0 / (60 + kw.rank), 0) AS rrf
49
+ FROM vec FULL OUTER JOIN kw USING (chunk_id)
50
+ JOIN chunks c USING (chunk_id)
51
+ ORDER BY rrf DESC
52
+ LIMIT 40; -- send these to the reranker
53
+ ```
54
+
55
+ `$1` is the query embedding, `$2` the caller's tenant, `$3` the raw query text.
56
+
57
+ ## Filtered approximate search
58
+
59
+ With a selective filter, HNSW may return fewer than `LIMIT` rows because the filter is applied after the index scan. Two knobs, both set per query inside a transaction:
60
+
61
+ - `SET LOCAL hnsw.ef_search = 200;` widens the candidate list (default 40).
62
+ - From pgvector 0.8.0: `SET LOCAL hnsw.iterative_scan = relaxed_order;` (or `strict_order`) keeps scanning the index until enough rows pass the filter. IVFFlat uses `ivfflat.iterative_scan`.
63
+
64
+ Check the installed version (`SELECT extversion FROM pg_extension WHERE extname = 'vector';`) before relying on iterative scans. For a very selective filter (one small tenant), a partial index or exact search on that subset can beat both.
65
+
66
+ ## Incremental re-ingest
67
+
68
+ ```
69
+ for each source document:
70
+ new_hash = hash(normalised text)
71
+ if new_hash == stored doc hash: skip
72
+ chunks = chunk(document)
73
+ upsert chunks by chunk_id (re-embed only chunks whose content_hash changed)
74
+ delete chunks for this doc_id whose chunk_id is not in the new set
75
+ for each doc_id in index but not in source: delete its chunks
76
+ ```
77
+
78
+ Run the delete pass in the same job as the upsert pass so a failure can't leave removed documents searchable.
@@ -0,0 +1,132 @@
1
+ ---
2
+ name: rails-patterns
3
+ description: Ruby on Rails application work that follows the framework's conventions - fat-enough models and thin controllers, Active Record queries without N+1 (includes, preload, strict_loading), strong parameters with params.expect or require/permit, Active Job enqueued after commit, zero-downtime migrations, encrypted credentials, Turbo Frames and Streams, and Rails tests for models, requests, jobs and system flows. Use when building or reviewing a Rails app, fixing slow Active Record pages, writing a migration for a busy table, adding a background job or Hotwire form, or storing secrets in Rails credentials.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs Ruby, Bundler and the project's bin/rails. Written for Rails 7.1 and later; Rails 8 specifics are marked.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: coding
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/requires: "ruby, bundle"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # Rails patterns
15
+
16
+ Put code where Rails expects it and let the conventions do the work. For plain Ruby style (objects, Enumerable, RuboCop) follow the `ruby-patterns` skill; for RSpec or Minitest mechanics in depth follow `ruby-testing`.
17
+
18
+ ## 0. Before you change anything
19
+
20
+ 1. Read `Gemfile.lock` for the `rails` version, the database adapter, the job backend (Solid Queue, Sidekiq, GoodJob) and whether tests are RSpec (`spec/`) or Minitest (`test/`).
21
+ 2. Run the suite (`bin/rails test` or `bundle exec rspec`). If it fails before you start, **stop and tell the user**.
22
+ 3. Check `db/schema.rb` (or `structure.sql`) for the tables you touch, their indexes and row counts if the user can tell you.
23
+
24
+ ## 1. Conventions
25
+
26
+ - Controllers are RESTful: `index show new create edit update destroy`. A new verb usually means a new resource (`resource :publication` with `create`/`destroy`), not a custom action.
27
+ - A controller action: find the record scoped to the current user, authorize, call the model or a plain object in `app/models` or `app/services`, then render or redirect.
28
+ - Scope lookups through the owner: `current_user.projects.find(params[:id])`, never `Project.find(params[:id])` for user-owned data.
29
+ - Callbacks only for the record's own consistency (normalising, defaults). Side effects (emails, API calls, other aggregates) go in explicit code or `after_commit` jobs, not `before_save`.
30
+ - Use `normalizes :email, with: ->(e) { e.strip.downcase }` (Rails 7.1+) instead of hand-written callbacks.
31
+
32
+ ## 2. Active Record queries and N+1
33
+
34
+ 1. Turn N+1s into errors in development and test: `config.active_record.strict_loading_by_default = true` in those environments, or `.strict_loading` on a relation / `strict_loading!(mode: :n_plus_one_only)` on a record. On an existing app the global setting can fail many tests at once, so ask before turning it on and start per model or relation. Add the `bullet` gem only if the project already uses it.
35
+ 2. Load associations before iterating:
36
+ - `includes(:author)`: Rails picks preload or a join.
37
+ - `preload(:tags)`: separate queries; use for has_many.
38
+ - `eager_load(:author)`: one LEFT JOIN; required when you filter or order on the association.
39
+ 3. Counts: `counter_cache: true` or `left_joins(:comments).group(:id).select("posts.*, COUNT(comments.id) AS comments_count")`. Never `post.comments.count` inside a loop.
40
+ 4. Existence: `exists?` (or `any?` / `empty?`, which query without loading), never `present?` or `blank?` on an unloaded relation; those load every row.
41
+ 5. Batches: `find_each` / `in_batches` for anything that grows; never `Model.all.each`.
42
+ 6. `pluck(:id)` when you only need columns; `select` when you need model objects with fewer columns.
43
+ 7. Bulk writes `update_all`, `insert_all`, `upsert_all` skip validations and callbacks. Use them deliberately and say so.
44
+ 8. Wrap multi-record changes in `ActiveRecord::Base.transaction do ... end`. Use `with_lock` or `lock!` for read-modify-write on one row.
45
+ 9. Raw SQL: `where("price > ?", min)` or named binds. Never interpolate params into `where`, `order` or `pluck`; whitelist sort columns.
46
+
47
+ ## 3. Strong parameters
48
+
49
+ Rails 8:
50
+ ```ruby
51
+ def post_params
52
+ params.expect(post: [:title, :body, tag_ids: []])
53
+ end
54
+ ```
55
+ Rails 7.x:
56
+ ```ruby
57
+ def post_params
58
+ params.require(:post).permit(:title, :body, tag_ids: [])
59
+ end
60
+ ```
61
+ - `params.expect` returns 400 on a missing or wrongly shaped key instead of raising a 500 on tampered input.
62
+ - Never permit `:user_id`, `:role`, `:admin` or `:account_id` from a form; set them from `current_user` on the server.
63
+ - Never use `permit!`.
64
+
65
+ ## 4. Background jobs (Active Job)
66
+
67
+ 1. `bin/rails generate job SendReceipt`. Pass records (serialised via GlobalID) or IDs, not big hashes.
68
+ 2. Enqueue only after the data is committed: `after_create_commit -> { SendReceiptJob.perform_later(self) }` or enqueue after the transaction block ends. A job enqueued inside an open transaction can run before the row exists.
69
+ 3. Make jobs idempotent: check state first, use unique keys on what they create, and use `retry_on` for transient errors with a limit and `discard_on ActiveJob::DeserializationError` for deleted records.
70
+ 4. Rails 8 defaults to Solid Queue (`bin/jobs`). Whatever the backend, production needs a supervised worker process; `:async` and `:inline` are for development and tests.
71
+
72
+ ## 5. Migrations that don't take the site down
73
+
74
+ - One concern per migration. Use reversible `change` or explicit `up`/`down`.
75
+ - Adding a column with a constant (non-volatile) default is a metadata-only change on PostgreSQL 11+ and MySQL 8.0.12+; backfilling existing rows is not. Backfill in a separate migration or job with `in_batches`, then add `null: false`.
76
+ - Indexes on big PostgreSQL tables:
77
+ ```ruby
78
+ disable_ddl_transaction!
79
+ def change
80
+ add_index :orders, :customer_id, algorithm: :concurrently
81
+ end
82
+ ```
83
+ - Removing a column: first add it to `self.ignored_columns` and deploy, then drop it in a later deploy.
84
+ - Renaming a column or table in place breaks running code. Add new, write both, backfill, switch reads, drop old.
85
+ - Add foreign keys with `add_foreign_key ..., validate: false`, then `validate_foreign_key` in a second migration on large tables.
86
+ - If the project uses `strong_migrations`, follow its messages; don't silence them with `safety_assured` without telling the user why.
87
+
88
+ ## 6. Credentials and config
89
+
90
+ - Secrets live in encrypted credentials: `bin/rails credentials:edit --environment production`. Read with `Rails.application.credentials.dig(:stripe, :secret_key)`.
91
+ - Never commit `config/master.key` or `config/credentials/*.key`; production gets `RAILS_MASTER_KEY` from the environment.
92
+ - Non-secret per-environment settings go in `config/environments/*.rb` or `config_for(:name)` YAML.
93
+ - Keep `config.force_ssl = true` and `config.filter_parameters` covering tokens and passwords in production.
94
+
95
+ ## 7. Hotwire basics
96
+
97
+ - Turbo Drive is on by default. A failed form must render with a 4xx status, or Turbo won't show the errors:
98
+ ```ruby
99
+ if @post.save
100
+ redirect_to @post
101
+ else
102
+ render :new, status: :unprocessable_entity # 422; Rack 3.1+ also names it :unprocessable_content
103
+ end
104
+ ```
105
+ - Turbo Frames (`turbo_frame_tag dom_id(post)`) replace one part of the page; the response must contain a frame with the same id.
106
+ - Turbo Streams (`turbo_stream.replace`, `.append`, `.remove`) for multi-part updates from a form response or `broadcasts_to` over Action Cable.
107
+ - Stimulus controllers for small client behaviour; keep state in the HTML, not in the controller.
108
+ - Authorization still happens in the controller; a frame request is a normal request.
109
+
110
+ ## 8. Testing
111
+
112
+ - Model tests for validations, scopes and domain methods. Request (or integration) tests for every controller action, including the "other user gets 404/403" case. System tests (Capybara) only for critical flows and Turbo behaviour.
113
+ - Use the project's fixtures or FactoryBot; don't introduce the other.
114
+ - Jobs: `assert_enqueued_with(job: SendReceiptJob)` (or `have_enqueued_job` in RSpec), and `perform_enqueued_jobs` to run them inline.
115
+ - Mail: `assert_emails(1) { ... }`. Time: `travel_to`. HTTP: WebMock, never real network.
116
+
117
+ ## Stop and ask the user
118
+
119
+ - Before a migration that drops, renames or rewrites a column or table with data, or locks a large table.
120
+ - Before changing the job backend, cache store or session store.
121
+ - Before editing production credentials or rotating `secret_key_base`.
122
+
123
+ ## Never
124
+
125
+ - Never commit master keys or put secrets in `database.yml` or code.
126
+ - Never `permit!` or permit ownership and role fields.
127
+ - Never enqueue a job inside an open transaction that the job depends on.
128
+ - Never run `db:drop`, `db:reset` or `db:schema:load` against a shared or production database.
129
+
130
+ ## Finish
131
+
132
+ Run the suite and, if migrations changed, `bin/rails db:migrate` then `bin/rails db:rollback` then migrate again to prove reversibility. Report: files changed, queries fixed, migrations and their deploy order, and anything untested.
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "Our Rails dashboard loads every project's owner one query at a time, use includes or preload to fix it",
4
+ "Write a Rails migration to add an index on orders.customer_id without locking the table in production",
5
+ "How should I store the Stripe secret key in Rails credentials for production?",
6
+ "The Rails form doesn't show validation errors after I switched to Turbo, what's wrong?",
7
+ "Add strong parameters to the Rails PostsController so users can't set their own role"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Set up RuboCop and RBS signatures for my Ruby gem",
11
+ "Find which RSpec example leaks state and only fails with seed 4821",
12
+ "Fix the Eloquent N+1 on the Laravel users page",
13
+ "Design the REST endpoints and error format for our public orders API",
14
+ "Tune this PostgreSQL query plan that does a sequential scan on events"
15
+ ]
16
+ }
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: react-native-patterns
3
+ description: React Native and Expo app guidance for picking a navigation library, keeping global state small, writing or wrapping native modules for the New Architecture, fixing slow lists and needless re-renders, handling iOS versus Android differences, and shipping over-the-air updates with EAS Update without breaking installed binaries. Use when building or restructuring screens in a React Native or Expo project, debugging jank in a FlatList or FlashList, adding a native dependency or config plugin, or planning a store release or OTA update.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs Node and the project's package manager; device builds need Xcode (iOS) or Android Studio and a JDK (Android). Expo projects use the expo and eas CLIs.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: coding
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/requires: "node, npx"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # React Native patterns
15
+
16
+ Build React Native screens that stay at 60 fps, behave on both platforms, and survive the release process. Plain React component design and web-only concerns belong to `react-patterns`; TypeScript typing belongs to `typescript-patterns`.
17
+
18
+ ## 0. Before you change anything
19
+
20
+ 1. Read `package.json` and find the `react-native` and (if present) `expo` versions. Read `app.json` / `app.config.(js|ts)` for Expo projects.
21
+ 2. Decide the project type, because it changes every native step:
22
+ - **Expo with Continuous Native Generation (CNG)**: no committed `ios/` or `android/` folders, native config comes from `app.config` and config plugins. Never hand-edit generated native folders; they are overwritten by `npx expo prebuild`.
23
+ - **Bare / committed native folders**: native changes are made in `ios/` and `android/` directly and reviewed like any other code.
24
+ 3. Find the navigation library (`expo-router`, `@react-navigation/*`) and state libraries already in use. Follow them; don't introduce a second one.
25
+ 4. Run the project's type check and tests once and record the result.
26
+
27
+ ## 1. Navigation
28
+
29
+ - Expo projects with `expo-router`: routes are files under `app/`. Use `_layout.tsx` for stacks and tabs, `[id].tsx` for params, and typed routes if the project enables them.
30
+ - React Navigation projects: declare param lists per navigator in TypeScript and pass only IDs and small serialisable values as params. Fetch the object on the destination screen.
31
+ - Never pass functions, class instances or large objects through params. They break deep links, state persistence and state restoration.
32
+ - Deep links: define them once (Expo `scheme` or React Navigation `linking` config) and test a cold start from a link on both platforms.
33
+
34
+ ## 2. State
35
+
36
+ Decision rule, smallest first:
37
+
38
+ 1. Local `useState` / `useReducer` for state used by one screen.
39
+ 2. Server data: a query cache (TanStack Query, RTK Query, SWR or whatever the project uses), not a global store.
40
+ 3. Truly global client state (session, theme, feature flags): the project's existing store (Zustand, Redux Toolkit, Jotai, Context).
41
+ 4. Persisted values: `expo-secure-store` or the Keychain/Keystore for secrets and tokens; AsyncStorage or MMKV only for non-sensitive data.
42
+
43
+ Never store tokens or personal data in AsyncStorage: it is unencrypted.
44
+
45
+ ## 3. Lists and re-renders
46
+
47
+ Lists are the first place to look for jank.
48
+
49
+ - Use `FlatList`, `SectionList` or `FlashList` for anything that can grow. Never `.map()` a long array inside a `ScrollView`.
50
+ - Give every list a stable `keyExtractor` from the data's ID, never the index.
51
+ - Memoise `renderItem` with `useCallback` and the row component with `React.memo`; pass primitive props so memo can skip.
52
+ - For fixed-height rows provide `getItemLayout` (FlatList). Tune `initialNumToRender`, `windowSize` and `maxToRenderPerBatch` only after measuring.
53
+ - Don't create new objects, arrays or inline style objects per render in hot rows; hoist them or use `StyleSheet.create`.
54
+ - Selectors: subscribe to the smallest slice of a store (`useStore(s => s.count)`), not the whole store.
55
+ - Animations: run them on the UI thread with Reanimated worklets or `useNativeDriver: true`, never by setting state every frame.
56
+
57
+ Measure before and after: React DevTools Profiler for renders, the platform profiler (Xcode Instruments, Android Studio profiler) for frames, and always test in a **release** build. Dev builds are much slower and mislead.
58
+
59
+ ## 4. Native modules
60
+
61
+ The New Architecture (TurboModules, Fabric) is the default since React Native 0.76, and from 0.82 it can no longer be turned off.
62
+
63
+ 1. Before writing a module, search for a maintained library or Expo SDK module that already does it, and check it supports the New Architecture.
64
+ 2. Expo projects: write new native code as an Expo Module (`npx create-expo-module`) and any native config change as a config plugin, so `prebuild` reproduces it.
65
+ 3. Bare projects: write a TurboModule with a typed JS spec and Codegen.
66
+ 4. Keep the JS/native boundary coarse: one call that does the work, not many chatty calls per frame.
67
+ 5. Every native dependency change needs a new binary. **Stop and tell the user** that an OTA update cannot ship it.
68
+
69
+ ## 5. Platform differences
70
+
71
+ Check each of these on both platforms before calling a screen done:
72
+
73
+ - Safe areas and notches: `react-native-safe-area-context`, not hard-coded padding.
74
+ - Keyboard: `KeyboardAvoidingView` behaviour differs (`padding` on iOS is usual; Android often relies on `windowSoftInputMode`). Test forms with the keyboard open.
75
+ - Android hardware back button and predictive back; iOS swipe-back gesture.
76
+ - Permissions: iOS needs usage-description strings (`NSCameraUsageDescription` and friends, via `ios.infoPlist` in Expo); Android needs manifest permissions plus a runtime request.
77
+ - Shadows (`shadow*` on iOS vs `elevation` on Android), fonts and text line height.
78
+ - Use `Platform.select` or `.ios.tsx` / `.android.tsx` files for real divergence, not scattered `Platform.OS` checks.
79
+
80
+ ## 6. OTA updates and releases
81
+
82
+ An OTA update (EAS Update or similar) only replaces the JavaScript bundle and assets.
83
+
84
+ - Set `runtimeVersion` deliberately. With the `appVersion` policy you must bump the app `version` whenever native code changes; the `fingerprint` policy derives it from native inputs. A wrong runtime version ships JS that calls native code the binary doesn't have, which crashes on launch.
85
+ - Ship native changes (new native dependency, SDK upgrade, permission, config plugin) only through a store build.
86
+ - Publish to a staging channel, test on a real installed build, then promote to production.
87
+ - Keep a rollback path: know the command to republish or roll back the previous update before you publish.
88
+ - Release builds: bump the store version and build number (`ios.buildNumber`, `android.versionCode`), keep signing credentials out of git, and test the release build, not the dev client.
89
+
90
+ **Stop and ask the user** before publishing an update to a production channel or submitting to a store.
91
+
92
+ ## Never
93
+
94
+ - Never hand-edit `ios/` or `android/` in a CNG project.
95
+ - Never ship native changes over the air.
96
+ - Never leave `console.log` in hot render paths of a release build, or secrets in the JS bundle (anything in the bundle is readable).
97
+ - Never judge performance from a debug build.
98
+
99
+ ## Report back
100
+
101
+ End with: what changed, which platforms you ran it on (simulator, device, release or debug), commands run and results, and whether the change needs a new binary or can go out as an OTA update.
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "My FlatList of 2000 chat messages stutters when scrolling on Android, how do I fix it?",
4
+ "Set up expo-router tabs with a details screen that takes an id param",
5
+ "We need to call a native Bluetooth SDK from our Expo app, how should I wrap it?",
6
+ "Can I push this fix to users with EAS Update or do I need a new App Store build?",
7
+ "The keyboard covers the login form on iOS but not Android in our React Native app"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Build a Next.js page that server-renders the product catalogue",
11
+ "My Flutter ListView rebuilds every item when one changes",
12
+ "Write Playwright end-to-end tests for the web checkout",
13
+ "Add a SwiftUI settings screen with a NavigationStack",
14
+ "Reduce re-renders in this React web dashboard using memo and useCallback"
15
+ ]
16
+ }