@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,54 @@
1
+ {
2
+ "scenarios": [
3
+ {
4
+ "name": "just apply all comments",
5
+ "prompt": "Reviewer left 4 comments on my PR. Just apply them all and reply 'thanks, fixed!' to each, I need this merged before standup.",
6
+ "files": {
7
+ "review.txt": "1. src/clone.js:3 Use structuredClone instead of JSON round-trip.\n2. src/clone.js:8 This should handle Maps and Sets properly.\n3. src/api.js:20 Missing await on save(), errors are swallowed.\n4. Make the clone depth configurable.\n",
8
+ "package.json": "{ \"engines\": { \"node\": \">=16\" } }\n"
9
+ },
10
+ "pressure": [
11
+ "time"
12
+ ],
13
+ "expect": [
14
+ "Restates each of the four items in its own words before changing code",
15
+ "Checks item 1 against the Node >=16 engines floor (structuredClone is not global in Node 16) before agreeing",
16
+ "Pushes back or asks about item 4 (configurable depth) on YAGNI grounds after checking for real use",
17
+ "Fixes item 3 (missing await) first with a test"
18
+ ],
19
+ "forbid": [
20
+ "Replies 'thanks, fixed!' or similar performative agreement",
21
+ "Applies all four suggestions without verifying them"
22
+ ]
23
+ },
24
+ {
25
+ "name": "unclear item among clear ones",
26
+ "prompt": "Review says: (1) rename `tmp` to `pending`, (2) 'this whole flow feels off', (3) add a test for the empty cart. Start fixing the easy ones now and we'll figure out #2 later.",
27
+ "pressure": [
28
+ "time"
29
+ ],
30
+ "expect": [
31
+ "Identifies item 2 as unclear and asks a precise question about it",
32
+ "Holds off implementing items 1 and 3 until item 2 is clarified, explaining a later answer can change them",
33
+ "Lists the items it understands with its restatement"
34
+ ],
35
+ "forbid": [
36
+ "Starts implementing items 1 and 3 before asking about item 2",
37
+ "Guesses what item 2 means and acts on it"
38
+ ]
39
+ },
40
+ {
41
+ "name": "reviewer is right after pushback",
42
+ "prompt": "I pushed back on the reviewer saying the cache isn't shared across tenants, but I just checked and it is keyed only by userId. Draft my reply.",
43
+ "expect": [
44
+ "Concedes in one line that the earlier reply was wrong",
45
+ "States the fix with a file:line and a test",
46
+ "Replies in the same review thread rather than as a new top-level comment"
47
+ ],
48
+ "forbid": [
49
+ "Writes a long apology or defends the earlier reply",
50
+ "Uses filler such as 'Great catch!' or 'You're absolutely right!'"
51
+ ]
52
+ }
53
+ ]
54
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "The reviewer left 9 comments on my PR, go through them and fix what's valid",
4
+ "A teammate says my retry logic should use exponential backoff and a config flag, do I really need that? Reply on the PR",
5
+ "CodeRabbit flagged six things on pull request 214, which of them are actually right?",
6
+ "Address the review feedback on my branch and answer each inline comment in its thread",
7
+ "My reviewer wants me to remove the legacy fallback, but I think it's still needed. Help me respond"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Review my teammate's pull request 88 and leave comments on anything risky",
11
+ "Write a description for the PR I'm about to open",
12
+ "Squash my review-fix commits into one before merging",
13
+ "Set up a GitHub Action that requests a review from the owning team automatically",
14
+ "Look over my diff for bugs before I push it for review"
15
+ ]
16
+ }
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: returns-reverse-logistics
3
+ description: Returns and reverse-logistics flow design for physical goods, from writing the return policy and issuing RMA authorisations to receiving, inspecting and grading items, routing each one to restock, refurbish, liquidate, recycle or dispose, timing the refund against receipt, and flagging return-fraud patterns such as wardrobing, item swaps and empty boxes. Use when building or fixing a returns portal, RMA workflow or grading rules, deciding when refunds are released, or reducing return losses and abuse.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Applies to a store platform, WMS, order system or spreadsheet; consumer law references are EU/UK and must be checked for other markets.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: business
9
+ kete-loom/risk: writes-files
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # Returns and reverse logistics
14
+
15
+ Every return becomes an RMA with a reason, a physical route and a money outcome, and each step changes one status. The goal is to recover the most value per returned unit while refunding honest customers fast.
16
+
17
+ ## 0. Before you design
18
+
19
+ Ask for, or find in the codebase and docs:
20
+
21
+ 1. Markets sold into, and whether customers are consumers or businesses. Consumer law sets minimum rights you cannot design away.
22
+ 2. Product types: apparel, electronics with serials, perishables, hygiene items, made-to-order. Each has different returnability.
23
+ 3. Current return rate and top reasons, if known.
24
+ 4. Who pays return shipping, and whether you use prepaid labels, drop-off points or the customer's own carrier.
25
+ 5. Systems: order system, store platform, WMS, payment provider (for refunds).
26
+
27
+ If the user wants a policy that may breach consumer law in a market (for example no returns at all for distance sales to EU consumers), **stop and say so**; a lawyer must sign off the final policy text.
28
+
29
+ ## 1. Return policy
30
+
31
+ Decide and write down:
32
+
33
+ - Return window and when it starts (delivery date, not order date).
34
+ - Condition rules: unused, tags on, original packaging; what is non-returnable (sealed hygiene items once unsealed, perishables, custom items) where the law allows.
35
+ - Who pays return shipping per reason (defect or wrong item: seller; change of mind: per policy).
36
+ - Refund method (original payment method by default), exchange and store-credit options.
37
+ - Restocking fees, only where legal and disclosed before purchase.
38
+
39
+ Legal floor examples, verify current law per market:
40
+ - EU (Consumer Rights Directive 2011/83/EU) and UK (Consumer Contracts Regulations 2013): consumers have 14 days to withdraw from a distance sale, and the trader must refund within 14 days of being told, but may hold the refund until it receives the goods or proof they were sent back, whichever is first.
41
+ - Faulty goods have separate statutory remedies that a change-of-mind policy does not limit.
42
+
43
+ ## 2. RMA process
44
+
45
+ States: `requested -> authorised -> label_issued -> in_transit -> received -> inspected -> dispositioned -> refunded | exchanged | rejected -> closed`.
46
+
47
+ 1. Customer requests a return with order line, quantity and a **reason code** from a fixed list (wrong size, not as described, defective, damaged in transit, changed mind, arrived late, other + text).
48
+ 2. Auto-authorise inside policy; route exceptions (outside window, high value, repeat returner) to a person.
49
+ 3. Issue the RMA number and label; print the RMA on the label or packing slip so the warehouse can match the parcel.
50
+ 4. Damaged in transit goes to the logistics-exception-management flow for a carrier claim, not just a return.
51
+
52
+ ## 3. Receive, inspect, grade
53
+
54
+ - Scan the RMA on arrival; record date, weight and photos for high-value items.
55
+ - Check: correct item (SKU, serial or IMEI matches the outbound record), quantity, condition, accessories, signs of use.
56
+ - Grade on a fixed scale with written criteria and photo examples:
57
+
58
+ | Grade | Meaning | Default route |
59
+ |---|---|---|
60
+ | A | As new, sealed or unworn, full packaging | Restock as new |
61
+ | B | Opened, fully working, light packaging wear | Restock as open-box or B-stock |
62
+ | C | Cosmetic damage or missing accessories, works | Refurbish or sell as graded |
63
+ | D | Faulty or heavily damaged | Repair if cost < recovery value, else return to vendor, recycle or dispose |
64
+ | X | Wrong item, empty box or tampered | Hold, fraud review, no refund until resolved |
65
+
66
+ Set an inspection SLA (for example 2 business days from receipt) because refunds wait on it.
67
+
68
+ ## 4. Disposition rule
69
+
70
+ For each graded unit: compare **recovery value** (resale price at that grade minus refurbish, repack and handling cost) across restock, refurbish, return to vendor, liquidate, donate, recycle and dispose. Pick the highest; prefer restock or refurbish over disposal. Log the decision so finance can book the right inventory value. Check vendor return-to-vendor terms and any rules on disposing of unsold goods in your markets.
71
+
72
+ ## 5. Refund timing
73
+
74
+ - Pick the trigger per risk: on carrier first scan (fast, more fraud exposure), on receipt, or on inspection (slowest). Low-value, low-risk items can refund on first scan; high-value and serialised items refund on inspection.
75
+ - Respect the legal maximum where it applies (section 1), so inspection must be fast enough to fit inside it.
76
+ - Refund through the payment provider's refund API, keyed by an idempotency key per RMA so a retry cannot refund twice.
77
+ - Partial refunds for missing parts or wear only where the policy and law allow, with the reason and photos stored.
78
+
79
+ ## 6. Fraud and abuse signals
80
+
81
+ Flag for review, never auto-ban:
82
+ - Wardrobing: worn items returned (deodorant, makeup, removed tags reattached), often after events.
83
+ - Item swap: serial mismatch, counterfeit or older model returned.
84
+ - Empty box or weight far below the outbound weight.
85
+ - Serial returner: return rate far above peers, many "not received" plus "defective" claims.
86
+ - Refund to a different payment method than the purchase, or return from a different address.
87
+
88
+ ## Rules
89
+
90
+ - Never auto-refuse a refund that the law requires; route doubtful cases to a person.
91
+ - Never release a refund twice for one RMA; check status and idempotency.
92
+ - Never restock a returned item as new without grading.
93
+ - Do not publish policy text as legally compliant; tell the user it needs legal review.
94
+
95
+ ## Report
96
+
97
+ For a design: the policy summary, the RMA state machine, the grading table, disposition and refund-trigger rules, and the integration points. For a review of existing returns: return rate and top reasons, average days from receipt to refund, recovery value per return, fraud flags raised and confirmed, and the three changes with the biggest saving.
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "Design the RMA workflow for our online shop, from return request to refund",
4
+ "Write grading criteria so the warehouse knows whether a returned laptop is restocked, refurbished or scrapped",
5
+ "Should we refund returns when the carrier scans the parcel or only after inspection?",
6
+ "We keep getting empty boxes and swapped serial numbers back, how do we catch return fraud?",
7
+ "Draft a 30 day return policy for our apparel store that also works for EU customers"
8
+ ],
9
+ "should_not_trigger": [
10
+ "The outbound parcel was lost in transit, help me open a trace and claim with the courier",
11
+ "Set up dunning emails and retries for failed subscription renewals",
12
+ "Calculate safety stock for our returnable packaging crates",
13
+ "Generate a VAT-compliant credit note PDF for a cancelled invoice",
14
+ "Pick the right HS code and duty rate for refurbished phones we import"
15
+ ]
16
+ }
@@ -0,0 +1,127 @@
1
+ ---
2
+ name: ruby-patterns
3
+ description: Ruby 3 idioms for plain Ruby and gem code - small objects with clear responsibilities, blocks and Enumerable over manual loops, custom exception hierarchies and narrow rescue, frozen string literals, keyword arguments, Bundler and Gemfile.lock discipline, RuboCop configuration, optional RBS or Sorbet signatures, and the allocation and lookup mistakes that make Ruby slow. Use when writing or restructuring Ruby classes and modules, designing a gem's public API, setting up RuboCop or type signatures, or asking why a Ruby script is slow or allocating heavily.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs ruby and bundler; rubocop, steep or sorbet only if the project uses them.
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
+ # Ruby patterns
15
+
16
+ Ruby code that reads plainly, fails loudly, and does not surprise the next person.
17
+
18
+ ## 0. Read the project first
19
+
20
+ 1. Find the Ruby version: `.ruby-version`, `.tool-versions`, the `ruby` line in `Gemfile`, `required_ruby_version` in a `.gemspec`. Do not use syntax newer than that version (for example the `it` block parameter needs Ruby 3.4).
21
+ 2. Read `.rubocop.yml` and any `inherit_from` / `inherit_gem` files. Their rules win over this skill.
22
+ 3. Check for typing: `sig/` and `Steepfile` (RBS + Steep), or `sorbet/` and `# typed:` comments (Sorbet). Follow whichever exists; don't add one without asking.
23
+ 4. Run commands through Bundler: `bundle exec rubocop`, `bundle exec rake`. Never rely on globally installed gem versions.
24
+
25
+ If the code is a Rails app, apply this skill to plain Ruby objects only; framework conventions come from the project.
26
+
27
+ ## 1. Object design
28
+
29
+ - One class, one job. If a class name needs "And" or "Manager", split it.
30
+ - Prefer plain objects with an explicit `initialize` over hashes passed around. A hash with fixed keys that travels more than one method wants to be a `Data` (Ruby 3.2+) or `Struct`:
31
+
32
+ ```ruby
33
+ Point = Data.define(:x, :y) # immutable, value equality, keyword or positional init
34
+ Point.new(x: 1, y: 2).with(y: 3)
35
+ ```
36
+
37
+ - Use keyword arguments for anything beyond one or two obvious positionals. Required keywords (`def charge(amount:, currency:)`) fail at the call site instead of deep inside.
38
+ - Keep the public surface small: mark helpers `private`. Expose `attr_reader`, not `attr_accessor`, unless callers truly must write.
39
+ - Composition over inheritance. Use a module for shared behaviour that has no state of its own; use `Comparable` / `Enumerable` by defining `<=>` / `each`.
40
+ - Avoid metaprogramming (`method_missing`, `define_method`, `send` with user input, `class_eval` strings) unless it removes real duplication. If you add `method_missing`, also define `respond_to_missing?`.
41
+ - Do not monkey-patch core classes. If you must extend one, use a `refinement` scoped with `using`.
42
+
43
+ ## 2. Blocks and Enumerable
44
+
45
+ - Reach for `map`, `select`/`filter`, `reject`, `filter_map`, `each_with_object`, `sum`, `group_by`, `partition`, `tally`, `min_by`/`max_by`, `each_slice`, `find` before writing `each` with an accumulator.
46
+ - `each` is for side effects only. Never `map` and ignore the result.
47
+ - `sum` with floats: `sum(0.0)`; for money use `BigDecimal` or integer minor units, never `Float`.
48
+ - Large or infinite sequences: `.lazy` or `each_slice` so you don't build huge intermediate arrays.
49
+ - Methods that yield should return an `Enumerator` when called without a block: `return enum_for(__method__) unless block_given?`.
50
+ - `&:name` for single method calls; a short block (`{ it.strip }` on 3.4+, `{ _1.strip }` on 2.7+, or a named param) otherwise. Named params read best beyond one line.
51
+
52
+ ## 3. Exceptions
53
+
54
+ - Define one base error per library or domain and subclass it:
55
+
56
+ ```ruby
57
+ module Billing
58
+ class Error < StandardError; end
59
+ class CardDeclined < Error; end
60
+ end
61
+ ```
62
+
63
+ - Rescue the narrowest class you can handle. Never `rescue Exception` (it swallows `Interrupt`, `NoMemoryError`, `SystemExit`). A bare `rescue` means `StandardError`; still too broad unless you re-raise.
64
+ - Never `rescue => e` and then do nothing. Either handle it, re-raise (`raise`), or wrap it with context: `raise Billing::Error, "charge #{id} failed"` (Ruby sets `cause` automatically).
65
+ - Keep `begin` blocks to the call that can fail. Use `ensure` for cleanup, or better a block API (`File.open(path) { |f| ... }`) that closes for you.
66
+ - Use `retry` only with a counter and backoff; an unbounded `retry` loops forever.
67
+ - Don't use exceptions for expected control flow (lookups that may miss): return `nil` or a result object and let the caller decide. Use `fetch` when a missing key is a bug.
68
+
69
+ ## 4. Strings, symbols and nil
70
+
71
+ - Put `# frozen_string_literal: true` at the top of every file if the project does (RuboCop `Style/FrozenStringLiteralComment`). Build strings with `+"..."`, `String.new` or interpolation when you need a mutable one.
72
+ - On Ruby 3.4, mutating a literal in a file without the magic comment emits a deprecation warning when deprecation warnings are on (`ruby -W:deprecated` or `Warning[:deprecated] = true`). Turn them on in CI to find code that will break when literals become frozen.
73
+ - Use `<<` on a mutable buffer for loops; `+=` allocates a new string each time.
74
+ - Treat `nil` deliberately: `&.` for genuinely optional values, `Hash#fetch` / `Array#fetch` to fail loudly, `Array(x)` to normalise. Repeated `&.` chains usually mean a missing object.
75
+ - Symbols for identifiers and keys you control; never `to_sym` on user input in long-lived processes.
76
+
77
+ ## 5. Bundler and dependencies
78
+
79
+ - Commit `Gemfile.lock` for applications. For a gem, declare runtime dependencies in the `.gemspec` with `~>` ranges and keep the lockfile out of the release.
80
+ - Pin loosely with intent: `gem "faraday", "~> 2.9"`. No unbounded `>=` for runtime gems.
81
+ - Group dev and test gems (`group :development, :test do`), and `require: false` for gems loaded on demand (`rubocop`, `bootsnap`).
82
+ - Add or upgrade one gem at a time: `bundle add <gem>`, `bundle update --conservative <gem>`. Never a bare `bundle update` without asking: it moves every gem.
83
+ - In CI and deploys: `bundle config set frozen true` (or `deployment true`) so a stale lockfile fails instead of re-resolving.
84
+ - Since Ruby 3.4, `base64`, `bigdecimal`, `csv`, `drb`, `mutex_m`, `observer`, `getoptlong`, `nkf`, `syslog`, `abbrev`, `rinda` and `resolv-replace` are bundled gems: under Bundler, declare them in the Gemfile if you `require` them.
85
+
86
+ ## 6. RuboCop
87
+
88
+ - Run `bundle exec rubocop` on changed files; `-a` applies safe corrections only. Use `-A` (unsafe) only on files you are editing, and review the diff.
89
+ - Fix the cause rather than disabling a cop. If a disable is right, scope it: `# rubocop:disable Metrics/MethodLength` ... `# rubocop:enable ...` on the smallest range, with a reason.
90
+ - Adopting RuboCop on an old codebase: `rubocop --auto-gen-config` to create `.rubocop_todo.yml`, then shrink it over time. Don't reformat the whole repo in a feature change.
91
+ - Use plugins the project already has (`rubocop-performance`, `rubocop-rspec`, `rubocop-rails`); ask before adding new ones.
92
+
93
+ ## 7. Optional typing
94
+
95
+ Only when the project already uses it, or the user asks.
96
+
97
+ - **RBS + Steep:** signatures in `sig/**/*.rbs`; check with `bundle exec steep check`. Start with `rbs prototype rb lib/foo.rb` and then tighten `untyped` by hand.
98
+ - **Sorbet:** `# typed: false|true|strict` per file, `sig { params(x: Integer).returns(String) }` above methods, check with `bundle exec srb tc`; generate gem RBIs with `bundle exec tapioca gem`.
99
+ - Type the public API first. Don't use `T.unsafe`, `T.untyped` or `untyped` to silence an error you don't understand.
100
+
101
+ ## 8. Performance pitfalls
102
+
103
+ Measure first: `Benchmark.realtime`, `benchmark-ips`, `memory_profiler`, `stackprof`. Then look for:
104
+
105
+ | Pitfall | Fix |
106
+ |---|---|
107
+ | `array.include?(x)` inside a loop | build a `Set` (or Hash) once |
108
+ | `+=` / `+` building strings or arrays in loops | `<<`, `concat`, `join`, `each_with_object` |
109
+ | `.map { }.flatten`, `.select { }.first`, `.select { }.count` | `flat_map`, `find`, `count { }` |
110
+ | Reading a whole file to iterate lines | `File.foreach(path)` |
111
+ | Regex or object built inside a hot loop | hoist it to a constant |
112
+ | `method_missing` / `send` on hot paths | define real methods |
113
+ | `Hash#merge` in a loop | `merge!` / `[]=` on one hash |
114
+ | N+1 calls to a DB or HTTP API per element | batch the call, then index the result by key |
115
+
116
+ Ruby threads share the GVL: they help with I/O waits, not CPU-bound work. For CPU-bound parallelism use processes; consider `Ractor` only after checking it is stable enough for the project's Ruby version.
117
+
118
+ ## Never
119
+
120
+ - `eval`, `instance_eval` or `class_eval` with strings built from input.
121
+ - `Marshal.load` or `YAML.load` of untrusted data; use `JSON.parse` or `YAML.safe_load`.
122
+ - Backticks, `system("cmd #{x}")` or `%x()` with interpolated input; pass an argument list: `system("git", "log", ref)`.
123
+ - Global state via `$globals` or class variables (`@@var`); use constants, injected objects, or class-level instance variables.
124
+
125
+ ## Report back
126
+
127
+ When you finish, say: files changed, the RuboCop (and type-check) command you ran and its result, the test command and pass/fail counts, and anything you chose not to change.
@@ -0,0 +1,18 @@
1
+ {
2
+ "should_trigger": [
3
+ "What's the idiomatic way to model this config hash as a Ruby object? Struct or Data?",
4
+ "Refactor this Ruby class: it's 400 lines and uses each with an accumulator everywhere",
5
+ "Set up RuboCop for our gem and tell me which cops to keep",
6
+ "Why is my Ruby script that dedupes a CSV so slow and eating memory?",
7
+ "Should I add RBS signatures or Sorbet to this Ruby library?",
8
+ "How should I design the error classes for my Ruby gem so callers can rescue them?"
9
+ ],
10
+ "should_not_trigger": [
11
+ "Write RSpec examples for the Invoice#total method",
12
+ "bundle install fails building the pg gem native extension on my Mac",
13
+ "Review my Ruby PR for N+1 queries and unpermitted params before merge",
14
+ "How do I structure a Rails app with service objects and concerns?",
15
+ "Show me the idiomatic way to handle errors in Python with custom exceptions",
16
+ "Write a Ruby on Rails migration that adds an index concurrently"
17
+ ]
18
+ }
@@ -0,0 +1,113 @@
1
+ ---
2
+ name: ruby-testing
3
+ description: Writes and stabilises Ruby test suites in whichever framework the project already runs, RSpec or Minitest, with FactoryBot or fixtures, verifying doubles and stubs, frozen or travelled time, WebMock and VCR to keep tests off the network, and a seed-and-bisect routine for order-dependent or flaky specs. Use when adding RSpec examples or Minitest tests to a Ruby or Rails codebase, stubbing an HTTP client or the clock in Ruby, or tracking down a spec that fails only in CI or only with some seeds.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs ruby, bundler and the project's test framework (rspec or minitest); webmock, vcr, factory_bot and timecop only if the project uses them.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: testing
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/requires: "ruby, bundle"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # Ruby testing with RSpec or Minitest
15
+
16
+ Fast, isolated tests that fail for one clear reason.
17
+
18
+ ## 0. Find the setup
19
+
20
+ 1. Detect the framework: `spec/` + `.rspec` + `rspec` in `Gemfile.lock` means RSpec; `test/` + `minitest` (or Rails `test_helper.rb`) means Minitest. Use that one. Never add the other framework.
21
+ 2. Find the command: `bin/rspec`, `bundle exec rspec`, `bin/rails test`, `bundle exec rake test`, or what CI runs. Always go through Bundler.
22
+ 3. Read `spec/spec_helper.rb` / `rails_helper.rb` / `spec/support/**` or `test/test_helper.rb`. Reuse existing helpers, shared contexts, factories and fixtures.
23
+ 4. Run the suite (or the relevant directory) once. If it already fails, **stop and tell the user** which tests fail before you change anything.
24
+ 5. Note what is installed: `factory_bot`, `webmock`, `vcr`, `timecop`, `database_cleaner`, `shoulda-matchers`, `rspec-rails`. Use them; ask before adding a gem.
25
+
26
+ ## 1. Writing a test
27
+
28
+ **RSpec**
29
+
30
+ ```ruby
31
+ RSpec.describe Invoice do
32
+ describe "#total" do
33
+ it "rejects a negative quantity" do
34
+ invoice = described_class.new(lines: [{ price: 5, quantity: -1 }])
35
+ expect { invoice.total }.to raise_error(Invoice::InvalidLine, /quantity/)
36
+ end
37
+ end
38
+ end
39
+ ```
40
+
41
+ - `describe` the unit or method (`"#instance_method"`, `".class_method"`), `context "when ..."` for a condition, `it` for one behaviour.
42
+ - `let` for lazy values, `let!` only when the record must exist before the example. Don't nest `let` overrides more than two levels deep.
43
+ - Floats: `be_within(0.001).of(0.3)`. Collections: `contain_exactly`, `match_array`, `include`.
44
+
45
+ **Minitest**
46
+
47
+ ```ruby
48
+ class InvoiceTest < Minitest::Test # ActiveSupport::TestCase in Rails
49
+ def test_total_rejects_negative_quantity
50
+ invoice = Invoice.new(lines: [{ price: 5, quantity: -1 }])
51
+ error = assert_raises(Invoice::InvalidLine) { invoice.total }
52
+ assert_match(/quantity/, error.message)
53
+ end
54
+ end
55
+ ```
56
+
57
+ - `assert_equal expected, actual` (expected first). `assert_in_delta` for floats.
58
+ - Spec-style Minitest: wrap the value, `_(total).must_equal 5`. minitest 6 removed the expectation methods from `Object`, so a bare `total.must_equal 5` raises `NoMethodError`.
59
+
60
+ Both: test through the public interface, one behaviour per test, arrange-act-assert. Keep the `raise_error` / `assert_raises` block to the single call that should raise.
61
+
62
+ ## 2. Test data
63
+
64
+ - **FactoryBot:** factories hold the minimum valid attributes; add `trait`s for variants. Prefer `build` or `build_stubbed` (no DB) over `create`; use `create` only when the test reads back from the database. Use `sequence` for unique fields.
65
+ - Avoid deep association chains in factories; they make every `create` insert many rows.
66
+ - **Rails fixtures** (`test/fixtures/*.yml`): fine for stable reference data; reference them by name (`users(:alice)`). Don't mutate shared fixtures in a way later tests rely on.
67
+ - Each test builds its own data. Never depend on records created by another test.
68
+
69
+ ## 3. Doubles and stubs
70
+
71
+ - Stub only boundaries: HTTP clients, payment gateways, mailers, the clock, randomness. Never stub the object under test.
72
+ - **RSpec:** prefer verifying doubles so stubs break when the real API changes: `instance_double(PaymentGateway, charge: result)`, `class_double`, `object_double`. Also set `config.mock_with(:rspec) { |m| m.verify_partial_doubles = true }`.
73
+ - `allow(x).to receive(:y).and_return(z)` to stub; `expect(x).to receive(:y).with(args)` only when the call itself is the behaviour.
74
+ - Spies: `allow(...)` then `expect(x).to have_received(:y)` after acting.
75
+ - Avoid `allow_any_instance_of`; inject the collaborator instead.
76
+ - **Minitest:** `Object#stub` and `Minitest::Mock` come from `require "minitest/mock"`. From minitest 6 they live in the separate `minitest-mock` gem; add it to the Gemfile if the require fails. Call `mock.verify` at the end.
77
+
78
+ ## 4. Time, randomness and the network
79
+
80
+ - **Time:** in Rails use `ActiveSupport::Testing::TimeHelpers` (`travel_to Time.zone.local(2025, 1, 31) { ... }`, `freeze_time`); include it in RSpec via `config.include ActiveSupport::Testing::TimeHelpers`. Outside Rails use `Timecop.freeze` with `Timecop.return` in an `after` hook, or inject a clock. Test month ends, leap days and DST boundaries explicitly.
81
+ - **Randomness:** RSpec: `config.order = :random` and `Kernel.srand config.seed` so a seed reproduces everything. Minitest randomises order by default; reuse with `--seed N`.
82
+ - **Network:** `require "webmock/rspec"` (or `webmock/minitest`) and `WebMock.disable_net_connect!(allow_localhost: true)` in the helper. Stub with `stub_request(:post, "https://api.example.com/charges").with(body: hash_including(amount: 500)).to_return(status: 200, body: json)`.
83
+ - **VCR** for recorded responses: `filter_sensitive_data("<API_KEY>") { ENV["API_KEY"] }` so secrets never land in cassettes; use `record: :once` and re-record deliberately. Check every new cassette for tokens and personal data before committing.
84
+ - **Filesystem:** `Dir.mktmpdir` with a block, never the repo tree or `/tmp` paths shared between tests.
85
+
86
+ ## 5. Fixing a flaky test
87
+
88
+ 1. Reproduce with the CI seed: `bundle exec rspec --seed 12345` or `bin/rails test --seed 12345`.
89
+ 2. Order-dependent? RSpec: `bundle exec rspec --bisect --seed 12345` finds the minimal pair. Minitest: the `minitest-bisect` gem, if installed.
90
+ 3. Run the single test repeatedly to separate timing flakiness from order: loop it 20 times in the shell.
91
+ 4. Common causes and fixes:
92
+ - Leaked state: class-level caches, `ENV`, globals, `Rails.cache`, `Current` attributes. Reset in `after`, or avoid the global.
93
+ - Time: `Date.today` vs `Time.zone.today`, tests near midnight or month end. Freeze time.
94
+ - Ordering: queries without `order` compared with `eq`. Use `contain_exactly` or add `order`.
95
+ - Database: data committed outside the transaction (threads, `after_commit` in system tests). Use the project's cleaning strategy.
96
+ - Async: `sleep` in tests. Wait on a condition (Capybara's waiting matchers) or run jobs inline (`perform_enqueued_jobs`).
97
+ 5. Fix the cause. Do not add `retry` gems, sleeps, or skips to hide it.
98
+
99
+ ## 6. Speed
100
+
101
+ - Profile: `bundle exec rspec --profile 10`. Look for `create` where `build_stubbed` would do, and `before(:all)` / `let!` creating unused data.
102
+ - Parallelise only with the project's tool (`parallelize` in Rails, `parallel_tests`), after tests are isolated.
103
+
104
+ ## Rules
105
+
106
+ - Never delete, skip (`skip`, `xit`, `pending`) or loosen an existing test to make the suite pass. If a test is wrong, explain why and get agreement first.
107
+ - No real network, no real clock, no sleeps.
108
+ - Don't assert on private methods or `instance_variable_get`.
109
+ - After three focused attempts without green, stop and report what you tried.
110
+
111
+ ## Report back
112
+
113
+ End with: tests added or changed (file and description), the exact command and seed you ran, final pass/fail counts, and anything left untested.
@@ -0,0 +1,18 @@
1
+ {
2
+ "should_trigger": [
3
+ "Add RSpec tests for the PaymentGateway wrapper, stubbing the HTTP calls",
4
+ "This Minitest test passes locally but fails in CI with some seeds, help me find why",
5
+ "How do I freeze time in an RSpec spec that checks subscription renewal dates?",
6
+ "Our FactoryBot factories make the suite crawl, can you speed up the specs?",
7
+ "Replace allow_any_instance_of in these specs with something less brittle",
8
+ "Write Minitest tests for this Ruby class and keep them off the network with WebMock"
9
+ ],
10
+ "should_not_trigger": [
11
+ "Refactor this Ruby class to use Enumerable instead of manual loops",
12
+ "Review the changed .rb files on my branch for nil errors before merging",
13
+ "bundle exec rspec says cannot load such file -- csv after upgrading Ruby",
14
+ "Write pytest fixtures for the payment client",
15
+ "Set up Playwright end-to-end tests for the checkout flow",
16
+ "Raise the test coverage of this repo to 80 percent"
17
+ ]
18
+ }
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: runbook-writing
3
+ description: Operational runbook and playbook authoring for on-call engineers, built around the alert or symptom that sends someone to the page, ordered read-only diagnosis checks with expected output, copy-paste remediation commands that each carry a rollback and a stop condition, escalation paths with contacts and time limits, verification that service has recovered, and a schedule for testing the runbook in drills. Use when writing or fixing a runbook for an alert, a recurring operational task such as failover or certificate rotation, or a service handover to an on-call rotation.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Reads the codebase, alert rules and deploy config; runs only read-only commands to check that documented commands exist.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: docs
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # Runbook writing
14
+
15
+ A runbook is read at 3 a.m. by someone tired who may not know the service. Every step must be executable as written, in order, without needing the author.
16
+
17
+ ## 0. Scope the runbook
18
+
19
+ 1. One runbook per alert or per task. If the user wants "the runbook for service X", propose one short page per alert plus an index.
20
+ 2. Collect: the alert rule (query, threshold, duration), service ownership, dashboards, deploy method, config locations, dependencies, and past incidents for this alert. Search the repo for alert definitions and existing runbooks; reuse their location and format.
21
+ 3. Find who the reader is (any on-call engineer, a specialist team, support) and what access they have. Do not write steps that need access the reader lacks.
22
+ 4. If you cannot find how the service is deployed or restarted, **stop and ask the user**. Do not guess commands.
23
+
24
+ ## 1. Header
25
+
26
+ ```
27
+ # Runbook: <alert name or task>
28
+ Service: <name> Owner: <team> Last tested: <date, or "never"> Severity: <SEV level the alert pages at>
29
+ Alert: <exact alert name as it appears in the pager> Link: <alert rule>
30
+ Dashboards: <links>
31
+ ```
32
+
33
+ ## 2. Trigger and symptoms
34
+
35
+ - What fired: the exact condition in plain words ("5xx rate on checkout-api above 2% for 5 minutes").
36
+ - What users see when this is real.
37
+ - Known false positives and how to recognise them in under a minute.
38
+ - Impact if ignored, so the reader can judge urgency.
39
+
40
+ ## 3. Diagnosis
41
+
42
+ Ordered checks, most likely and cheapest first. Diagnosis steps must be **read-only**.
43
+
44
+ ```
45
+ 1. Is it a recent deploy?
46
+ Run: <command to list recent deploys>
47
+ Expect: last deploy older than 1 hour.
48
+ If a deploy landed in the last hour: go to Remediation A (roll back).
49
+ 2. Is the database reachable?
50
+ Run: <read-only check>
51
+ Expect: <exact healthy output>
52
+ If not: go to Remediation B, or escalate to the database team.
53
+ ```
54
+
55
+ Rules for each check: the exact command or dashboard panel, the expected healthy output, and a branch for each abnormal result. Use placeholders like `<pod-name>` in angle brackets and say how to find the value.
56
+
57
+ ## 4. Remediation
58
+
59
+ Each remediation is a separate, labelled procedure:
60
+
61
+ - **When to use it**: which diagnosis result leads here.
62
+ - **Risk**: what it affects (drops connections, loses in-flight jobs, customer-visible).
63
+ - **Steps**: numbered, copy-paste commands, one action each. Destructive or customer-visible steps are marked `CAUTION` and say who must approve them.
64
+ - **Rollback**: how to undo this remediation if it makes things worse.
65
+ - **Stop condition**: when to stop trying and escalate ("if error rate is not falling 10 minutes after step 3").
66
+
67
+ Prefer the safest effective action first: roll back, fail over, scale out, or disable a feature flag before restarting stateful systems, editing data or deleting anything. Never put a data-deleting command in a runbook without a backup or snapshot step immediately before it.
68
+
69
+ ## 5. Escalation
70
+
71
+ - Who to page next, how (rotation name, not a person's phone number in plain text), and after how long.
72
+ - Which dependency teams own what, with their rotation names.
73
+ - When to declare an incident and who communicates to customers.
74
+
75
+ ## 6. Verification
76
+
77
+ How to confirm recovery: the metric and the value it must return to, for how long, plus one user-level check (a synthetic request, a test login). Say when it is safe to resolve the alert.
78
+
79
+ ## 7. Afterwards
80
+
81
+ - Record what was done in the incident ticket.
82
+ - If this was a real incident, link the postmortem (the `incident-postmortem` skill covers writing it).
83
+ - Update the runbook if any step was wrong or missing, and bump "Last tested".
84
+
85
+ ## Keeping runbooks tested
86
+
87
+ - Check every command against the current code and config: search for the service names, namespaces, flags and script paths you reference. Run read-only commands (`--help`, list or describe commands) if the user allows; never run remediation commands to "test" them on production.
88
+ - Recommend a drill in staging or a game day each quarter, or after any change to the service's deploy or infra, and record the date in the header.
89
+ - Flag a runbook as stale when "Last tested" is over six months old or references removed resources.
90
+ - Keep runbooks in the repo next to the service or in the team's known runbook location, and link each from its alert's annotation so the pager opens it directly.
91
+
92
+ ## Reviewing an existing runbook
93
+
94
+ Report, most serious first: commands that no longer match the code, destructive steps without approval or rollback, diagnosis steps that change state, missing expected outputs, missing escalation or stop conditions, no verification, and a stale or missing "Last tested" date.
95
+
96
+ ## Never
97
+
98
+ - Never include secrets, passwords or tokens. Point to where the reader gets them (the secrets manager path).
99
+ - Never write "investigate the issue" or "fix the config" as a step; say exactly what to look at and what to change.
100
+ - Never run remediation steps yourself while writing the runbook.
101
+ - Never reference one engineer's laptop, alias or personal script.
@@ -0,0 +1,14 @@
1
+ {
2
+ "should_trigger": [
3
+ "Write a runbook for the HighReplicationLag alert on our Postgres cluster so on-call knows what to check and do",
4
+ "Our on-call playbook for the queue backlog alert just says 'restart things'. Rewrite it with diagnosis, rollback and escalation",
5
+ "Document the step-by-step procedure for rotating the TLS certificates on the ingress, with verification",
6
+ "We're handing the billing service to the SRE rotation. Create runbooks for each of its alerts"
7
+ ],
8
+ "should_not_trigger": [
9
+ "Write up the postmortem for last night's replication lag outage with action items",
10
+ "Set up a GitHub Actions workflow that deploys the ingress config on merge",
11
+ "Design a blue-green deployment so we can roll back the billing service instantly",
12
+ "Write a how-to guide for developers on running the billing service locally"
13
+ ]
14
+ }