@ketecode/loom 0.0.0-stage → 0.1.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 (656) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +516 -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/triggers.json +14 -0
  13. package/agents/code-simplifier/AGENT.md +74 -0
  14. package/agents/code-simplifier/evals/triggers.json +15 -0
  15. package/agents/cpp-build-resolver/AGENT.md +73 -0
  16. package/agents/cpp-build-resolver/evals/triggers.json +16 -0
  17. package/agents/cpp-reviewer/AGENT.md +59 -0
  18. package/agents/cpp-reviewer/evals/triggers.json +16 -0
  19. package/agents/csharp-build-resolver/AGENT.md +84 -0
  20. package/agents/csharp-build-resolver/evals/triggers.json +17 -0
  21. package/agents/csharp-reviewer/AGENT.md +88 -0
  22. package/agents/csharp-reviewer/evals/triggers.json +17 -0
  23. package/agents/dart-build-resolver/AGENT.md +80 -0
  24. package/agents/dart-build-resolver/evals/triggers.json +17 -0
  25. package/agents/dart-reviewer/AGENT.md +66 -0
  26. package/agents/dart-reviewer/evals/triggers.json +17 -0
  27. package/agents/database-reviewer/AGENT.md +72 -0
  28. package/agents/database-reviewer/evals/triggers.json +16 -0
  29. package/agents/django-reviewer/AGENT.md +61 -0
  30. package/agents/django-reviewer/evals/triggers.json +15 -0
  31. package/agents/doc-updater/AGENT.md +92 -0
  32. package/agents/doc-updater/evals/triggers.json +14 -0
  33. package/agents/e2e-runner/AGENT.md +88 -0
  34. package/agents/e2e-runner/evals/triggers.json +16 -0
  35. package/agents/fastapi-reviewer/AGENT.md +63 -0
  36. package/agents/fastapi-reviewer/evals/triggers.json +15 -0
  37. package/agents/flutter-reviewer/AGENT.md +70 -0
  38. package/agents/flutter-reviewer/evals/triggers.json +15 -0
  39. package/agents/fsharp-build-resolver/AGENT.md +81 -0
  40. package/agents/fsharp-build-resolver/evals/triggers.json +15 -0
  41. package/agents/fsharp-reviewer/AGENT.md +77 -0
  42. package/agents/fsharp-reviewer/evals/triggers.json +15 -0
  43. package/agents/go-build-resolver/AGENT.md +85 -0
  44. package/agents/go-build-resolver/evals/triggers.json +16 -0
  45. package/agents/go-reviewer/AGENT.md +66 -0
  46. package/agents/go-reviewer/evals/triggers.json +16 -0
  47. package/agents/healthcare-reviewer/AGENT.md +65 -0
  48. package/agents/healthcare-reviewer/evals/triggers.json +16 -0
  49. package/agents/i18n-reviewer/AGENT.md +64 -0
  50. package/agents/i18n-reviewer/evals/triggers.json +16 -0
  51. package/agents/infra-reviewer/AGENT.md +93 -0
  52. package/agents/infra-reviewer/evals/triggers.json +15 -0
  53. package/agents/java-build-resolver/AGENT.md +82 -0
  54. package/agents/java-build-resolver/evals/triggers.json +16 -0
  55. package/agents/java-reviewer/AGENT.md +64 -0
  56. package/agents/java-reviewer/evals/triggers.json +16 -0
  57. package/agents/kotlin-build-resolver/AGENT.md +89 -0
  58. package/agents/kotlin-build-resolver/evals/triggers.json +16 -0
  59. package/agents/kotlin-reviewer/AGENT.md +75 -0
  60. package/agents/kotlin-reviewer/evals/triggers.json +16 -0
  61. package/agents/mle-reviewer/AGENT.md +68 -0
  62. package/agents/mle-reviewer/evals/triggers.json +16 -0
  63. package/agents/network-config-reviewer/AGENT.md +68 -0
  64. package/agents/network-config-reviewer/evals/triggers.json +17 -0
  65. package/agents/payments-reviewer/AGENT.md +64 -0
  66. package/agents/payments-reviewer/evals/triggers.json +16 -0
  67. package/agents/performance-optimizer/AGENT.md +86 -0
  68. package/agents/performance-optimizer/evals/triggers.json +16 -0
  69. package/agents/perl-build-resolver/AGENT.md +84 -0
  70. package/agents/perl-build-resolver/evals/triggers.json +15 -0
  71. package/agents/perl-reviewer/AGENT.md +77 -0
  72. package/agents/perl-reviewer/evals/triggers.json +15 -0
  73. package/agents/php-build-resolver/AGENT.md +88 -0
  74. package/agents/php-build-resolver/evals/triggers.json +16 -0
  75. package/agents/php-reviewer/AGENT.md +61 -0
  76. package/agents/php-reviewer/evals/triggers.json +15 -0
  77. package/agents/planner/AGENT.md +75 -0
  78. package/agents/planner/evals/triggers.json +17 -0
  79. package/agents/pr-test-analyzer/AGENT.md +82 -0
  80. package/agents/pr-test-analyzer/evals/triggers.json +16 -0
  81. package/agents/python-build-resolver/AGENT.md +87 -0
  82. package/agents/python-build-resolver/evals/triggers.json +16 -0
  83. package/agents/python-reviewer/AGENT.md +63 -0
  84. package/agents/python-reviewer/evals/triggers.json +15 -0
  85. package/agents/rag-reviewer/AGENT.md +71 -0
  86. package/agents/rag-reviewer/evals/triggers.json +16 -0
  87. package/agents/react-reviewer/AGENT.md +70 -0
  88. package/agents/react-reviewer/evals/triggers.json +16 -0
  89. package/agents/refactor-cleaner/AGENT.md +82 -0
  90. package/agents/refactor-cleaner/evals/triggers.json +16 -0
  91. package/agents/ruby-build-resolver/AGENT.md +93 -0
  92. package/agents/ruby-build-resolver/evals/triggers.json +16 -0
  93. package/agents/ruby-reviewer/AGENT.md +62 -0
  94. package/agents/ruby-reviewer/evals/triggers.json +16 -0
  95. package/agents/rust-build-resolver/AGENT.md +98 -0
  96. package/agents/rust-build-resolver/evals/triggers.json +16 -0
  97. package/agents/rust-reviewer/AGENT.md +78 -0
  98. package/agents/rust-reviewer/evals/triggers.json +15 -0
  99. package/agents/security-reviewer/AGENT.md +84 -0
  100. package/agents/security-reviewer/evals/triggers.json +16 -0
  101. package/agents/silent-failure-hunter/AGENT.md +66 -0
  102. package/agents/silent-failure-hunter/evals/triggers.json +16 -0
  103. package/agents/solidity-reviewer/AGENT.md +70 -0
  104. package/agents/solidity-reviewer/evals/triggers.json +16 -0
  105. package/agents/swift-build-resolver/AGENT.md +85 -0
  106. package/agents/swift-build-resolver/evals/triggers.json +15 -0
  107. package/agents/swift-reviewer/AGENT.md +75 -0
  108. package/agents/swift-reviewer/evals/triggers.json +15 -0
  109. package/agents/typescript-build-resolver/AGENT.md +76 -0
  110. package/agents/typescript-build-resolver/evals/triggers.json +15 -0
  111. package/agents/typescript-reviewer/AGENT.md +76 -0
  112. package/agents/typescript-reviewer/evals/triggers.json +15 -0
  113. package/agents/vue-reviewer/AGENT.md +75 -0
  114. package/agents/vue-reviewer/evals/triggers.json +15 -0
  115. package/bin/kete-loom.js +683 -0
  116. package/commands/aside.md +19 -0
  117. package/commands/build-fix.md +26 -0
  118. package/commands/campaign.md +19 -0
  119. package/commands/changelog.md +36 -0
  120. package/commands/checkpoint.md +26 -0
  121. package/commands/codemap.md +25 -0
  122. package/commands/commit.md +26 -0
  123. package/commands/deps-audit.md +32 -0
  124. package/commands/epic-decompose.md +21 -0
  125. package/commands/explain.md +37 -0
  126. package/commands/feature-dev.md +22 -0
  127. package/commands/hookify.md +23 -0
  128. package/commands/i18n-check.md +39 -0
  129. package/commands/issue-sync.md +22 -0
  130. package/commands/jira.md +19 -0
  131. package/commands/learn.md +23 -0
  132. package/commands/loom.md +21 -0
  133. package/commands/loop.md +20 -0
  134. package/commands/model-route.md +27 -0
  135. package/commands/onboard.md +35 -0
  136. package/commands/orchestrate.md +21 -0
  137. package/commands/plan-feature.md +36 -0
  138. package/commands/postmortem.md +42 -0
  139. package/commands/pr-describe.md +39 -0
  140. package/commands/pr.md +22 -0
  141. package/commands/prd.md +41 -0
  142. package/commands/project-init.md +21 -0
  143. package/commands/refactor-clean.md +24 -0
  144. package/commands/resume-session.md +22 -0
  145. package/commands/review.md +35 -0
  146. package/commands/save-session.md +37 -0
  147. package/commands/security-scan.md +32 -0
  148. package/commands/sessions.md +21 -0
  149. package/commands/skill-create.md +21 -0
  150. package/commands/tdd.md +36 -0
  151. package/commands/test-coverage.md +24 -0
  152. package/commands/threat-model.md +36 -0
  153. package/commands/update-docs.md +25 -0
  154. package/commands/verify.md +21 -0
  155. package/hooks/block-dangerous-commands/HOOK.md +30 -0
  156. package/hooks/block-dangerous-commands/cases.json +50 -0
  157. package/hooks/block-dangerous-commands/hook.js +75 -0
  158. package/hooks/block-no-verify/HOOK.md +25 -0
  159. package/hooks/block-no-verify/cases.json +30 -0
  160. package/hooks/block-no-verify/hook.js +43 -0
  161. package/hooks/format-on-edit/HOOK.md +24 -0
  162. package/hooks/format-on-edit/hook.js +89 -0
  163. package/hooks/guard-secrets/HOOK.md +19 -0
  164. package/hooks/guard-secrets/cases.json +110 -0
  165. package/hooks/guard-secrets/hook.js +44 -0
  166. package/hooks/load-session-context/HOOK.md +20 -0
  167. package/hooks/load-session-context/hook.js +56 -0
  168. package/hooks/protect-files/HOOK.md +24 -0
  169. package/hooks/protect-files/cases.json +27 -0
  170. package/hooks/protect-files/hook.js +39 -0
  171. package/hooks/run.js +132 -0
  172. package/mcp/atlassian.json +11 -0
  173. package/mcp/chrome-devtools.json +18 -0
  174. package/mcp/cloudflare.json +11 -0
  175. package/mcp/context7.json +11 -0
  176. package/mcp/fetch.json +17 -0
  177. package/mcp/figma.json +11 -0
  178. package/mcp/git.json +17 -0
  179. package/mcp/github.json +11 -0
  180. package/mcp/linear.json +11 -0
  181. package/mcp/memory.json +18 -0
  182. package/mcp/notion.json +11 -0
  183. package/mcp/playwright.json +18 -0
  184. package/mcp/sentry.json +11 -0
  185. package/mcp/stripe.json +11 -0
  186. package/mcp/supabase.json +11 -0
  187. package/mcp/time.json +17 -0
  188. package/package.json +59 -4
  189. package/profiles.json +165 -0
  190. package/rules/common.md +21 -0
  191. package/rules/cpp.md +29 -0
  192. package/rules/csharp.md +25 -0
  193. package/rules/dart.md +29 -0
  194. package/rules/fsharp.md +28 -0
  195. package/rules/git.md +26 -0
  196. package/rules/go.md +29 -0
  197. package/rules/java.md +29 -0
  198. package/rules/kotlin.md +27 -0
  199. package/rules/perl.md +26 -0
  200. package/rules/php.md +28 -0
  201. package/rules/python.md +30 -0
  202. package/rules/ruby.md +27 -0
  203. package/rules/rust.md +26 -0
  204. package/rules/security.md +29 -0
  205. package/rules/swift.md +28 -0
  206. package/rules/testing.md +25 -0
  207. package/rules/typescript.md +29 -0
  208. package/schemas/skill-frontmatter.schema.json +52 -0
  209. package/scripts/lib/audit.js +96 -0
  210. package/scripts/lib/frontmatter.js +65 -0
  211. package/scripts/lib/hooks-install.js +292 -0
  212. package/scripts/lib/i18n.js +51 -0
  213. package/scripts/lib/inventory.js +85 -0
  214. package/scripts/lib/lint.js +158 -0
  215. package/scripts/lib/mcp-install.js +284 -0
  216. package/scripts/lib/profiles.js +128 -0
  217. package/scripts/lib/render.js +86 -0
  218. package/scripts/lib/rules-install.js +118 -0
  219. package/scripts/lib/skills.js +86 -0
  220. package/scripts/lib/targets.js +113 -0
  221. package/skills/accounting-api-integration/SKILL.md +81 -0
  222. package/skills/accounting-api-integration/evals/triggers.json +17 -0
  223. package/skills/accounting-api-integration/references/quickbooks.md +48 -0
  224. package/skills/accounting-api-integration/references/xero.md +45 -0
  225. package/skills/agent-harness-design/SKILL.md +125 -0
  226. package/skills/agent-harness-design/evals/triggers.json +21 -0
  227. package/skills/ai-media-generation/SKILL.md +89 -0
  228. package/skills/ai-media-generation/evals/triggers.json +16 -0
  229. package/skills/ai-media-generation/references/job-pipeline.md +76 -0
  230. package/skills/angular-patterns/SKILL.md +122 -0
  231. package/skills/angular-patterns/evals/triggers.json +16 -0
  232. package/skills/api-design/SKILL.md +96 -0
  233. package/skills/api-design/evals/triggers.json +18 -0
  234. package/skills/api-design/references/conventions.md +133 -0
  235. package/skills/architecture-decision-records/SKILL.md +98 -0
  236. package/skills/architecture-decision-records/evals/triggers.json +17 -0
  237. package/skills/article-writing/SKILL.md +108 -0
  238. package/skills/article-writing/evals/triggers.json +16 -0
  239. package/skills/aspnet-core-patterns/SKILL.md +149 -0
  240. package/skills/aspnet-core-patterns/evals/triggers.json +16 -0
  241. package/skills/auth-patterns/SKILL.md +104 -0
  242. package/skills/auth-patterns/evals/triggers.json +17 -0
  243. package/skills/auth-patterns/references/oauth-oidc.md +64 -0
  244. package/skills/autonomous-loops/SKILL.md +99 -0
  245. package/skills/autonomous-loops/evals/triggers.json +14 -0
  246. package/skills/aws-patterns/SKILL.md +91 -0
  247. package/skills/aws-patterns/evals/triggers.json +16 -0
  248. package/skills/azure-patterns/SKILL.md +86 -0
  249. package/skills/azure-patterns/evals/triggers.json +16 -0
  250. package/skills/benchmark-methodology/SKILL.md +88 -0
  251. package/skills/benchmark-methodology/evals/triggers.json +16 -0
  252. package/skills/benchmark-methodology/references/language-harnesses.md +130 -0
  253. package/skills/bgp-diagnostics/SKILL.md +84 -0
  254. package/skills/bgp-diagnostics/evals/triggers.json +18 -0
  255. package/skills/bgp-diagnostics/references/bgp-reference.md +81 -0
  256. package/skills/bioinformatics-workflows/SKILL.md +108 -0
  257. package/skills/bioinformatics-workflows/evals/triggers.json +16 -0
  258. package/skills/bioinformatics-workflows/references/commands.md +71 -0
  259. package/skills/bioinformatics-workflows/references/formats.md +24 -0
  260. package/skills/bioinformatics-workflows/references/workflow-managers.md +107 -0
  261. package/skills/brand-voice/SKILL.md +112 -0
  262. package/skills/brand-voice/evals/triggers.json +16 -0
  263. package/skills/browser-qa/SKILL.md +99 -0
  264. package/skills/browser-qa/evals/triggers.json +16 -0
  265. package/skills/bun-runtime/SKILL.md +93 -0
  266. package/skills/bun-runtime/evals/triggers.json +16 -0
  267. package/skills/cisco-ios-config/SKILL.md +101 -0
  268. package/skills/cisco-ios-config/evals/triggers.json +18 -0
  269. package/skills/cisco-ios-config/references/verification.md +63 -0
  270. package/skills/clickhouse-patterns/SKILL.md +101 -0
  271. package/skills/clickhouse-patterns/evals/triggers.json +18 -0
  272. package/skills/clickhouse-patterns/references/engines-and-views.md +138 -0
  273. package/skills/clinical-decision-support/SKILL.md +90 -0
  274. package/skills/clinical-decision-support/evals/triggers.json +16 -0
  275. package/skills/clinical-decision-support/references/cds-hooks.md +76 -0
  276. package/skills/clinical-decision-support/references/regulatory-boundaries.md +37 -0
  277. package/skills/code-tour/SKILL.md +97 -0
  278. package/skills/code-tour/evals/triggers.json +14 -0
  279. package/skills/codebase-onboarding/SKILL.md +112 -0
  280. package/skills/codebase-onboarding/evals/triggers.json +14 -0
  281. package/skills/cold-outreach-sequences/SKILL.md +90 -0
  282. package/skills/cold-outreach-sequences/evals/triggers.json +16 -0
  283. package/skills/content-repurposing/SKILL.md +82 -0
  284. package/skills/content-repurposing/evals/triggers.json +16 -0
  285. package/skills/context-budget/SKILL.md +84 -0
  286. package/skills/context-budget/evals/triggers.json +14 -0
  287. package/skills/conventional-commits/SKILL.md +144 -0
  288. package/skills/conventional-commits/evals/triggers.json +16 -0
  289. package/skills/cpp-patterns/SKILL.md +129 -0
  290. package/skills/cpp-patterns/evals/triggers.json +16 -0
  291. package/skills/cpp-patterns/references/cmake-and-tooling.md +88 -0
  292. package/skills/cpp-patterns/references/undefined-behaviour.md +75 -0
  293. package/skills/cpp-testing/SKILL.md +131 -0
  294. package/skills/cpp-testing/evals/triggers.json +16 -0
  295. package/skills/csharp-patterns/SKILL.md +110 -0
  296. package/skills/csharp-patterns/evals/triggers.json +17 -0
  297. package/skills/csharp-patterns/references/analyzers.md +59 -0
  298. package/skills/csharp-testing/SKILL.md +85 -0
  299. package/skills/csharp-testing/evals/triggers.json +17 -0
  300. package/skills/csharp-testing/references/integration-tests.md +77 -0
  301. package/skills/css-architecture/SKILL.md +143 -0
  302. package/skills/css-architecture/evals/triggers.json +16 -0
  303. package/skills/customs-trade-compliance/SKILL.md +95 -0
  304. package/skills/customs-trade-compliance/evals/triggers.json +16 -0
  305. package/skills/customs-trade-compliance/references/incoterms-2020.md +42 -0
  306. package/skills/dart-patterns/SKILL.md +157 -0
  307. package/skills/dart-patterns/evals/triggers.json +18 -0
  308. package/skills/dart-testing/SKILL.md +164 -0
  309. package/skills/dart-testing/evals/triggers.json +18 -0
  310. package/skills/data-analysis-notebooks/SKILL.md +113 -0
  311. package/skills/data-analysis-notebooks/evals/triggers.json +16 -0
  312. package/skills/data-analysis-notebooks/references/dataframe-pitfalls.md +49 -0
  313. package/skills/data-analysis-notebooks/references/statistics-pitfalls.md +24 -0
  314. package/skills/data-pipelines/SKILL.md +90 -0
  315. package/skills/data-pipelines/evals/triggers.json +16 -0
  316. package/skills/data-pipelines/references/orchestrators.md +64 -0
  317. package/skills/database-migrations/SKILL.md +102 -0
  318. package/skills/database-migrations/evals/triggers.json +16 -0
  319. package/skills/database-migrations/references/recipes.md +98 -0
  320. package/skills/database-migrations/references/tools.md +21 -0
  321. package/skills/dbt-patterns/SKILL.md +96 -0
  322. package/skills/dbt-patterns/evals/triggers.json +16 -0
  323. package/skills/dbt-patterns/references/yaml-examples.md +114 -0
  324. package/skills/deep-research/SKILL.md +107 -0
  325. package/skills/deep-research/evals/triggers.json +14 -0
  326. package/skills/dependency-audit/SKILL.md +103 -0
  327. package/skills/dependency-audit/evals/triggers.json +16 -0
  328. package/skills/dependency-audit/references/tools.md +124 -0
  329. package/skills/deployment-strategies/SKILL.md +108 -0
  330. package/skills/deployment-strategies/evals/triggers.json +16 -0
  331. package/skills/django-patterns/SKILL.md +123 -0
  332. package/skills/django-patterns/evals/triggers.json +16 -0
  333. package/skills/docker-patterns/SKILL.md +132 -0
  334. package/skills/docker-patterns/evals/triggers.json +16 -0
  335. package/skills/docker-patterns/references/dockerfiles.md +105 -0
  336. package/skills/e2e-testing-playwright/SKILL.md +94 -0
  337. package/skills/e2e-testing-playwright/evals/triggers.json +16 -0
  338. package/skills/e2e-testing-playwright/references/config-and-ci.md +129 -0
  339. package/skills/ef-core-patterns/SKILL.md +117 -0
  340. package/skills/ef-core-patterns/evals/triggers.json +16 -0
  341. package/skills/email-deliverability/SKILL.md +99 -0
  342. package/skills/email-deliverability/evals/triggers.json +17 -0
  343. package/skills/email-deliverability/references/dns-records.md +85 -0
  344. package/skills/error-handling-patterns/SKILL.md +112 -0
  345. package/skills/error-handling-patterns/evals/triggers.json +18 -0
  346. package/skills/error-handling-patterns/references/language-idioms.md +49 -0
  347. package/skills/estimation-and-scoping/SKILL.md +97 -0
  348. package/skills/estimation-and-scoping/evals/triggers.json +14 -0
  349. package/skills/evm-dapp-integration/SKILL.md +73 -0
  350. package/skills/evm-dapp-integration/evals/triggers.json +16 -0
  351. package/skills/fastapi-patterns/SKILL.md +127 -0
  352. package/skills/fastapi-patterns/evals/triggers.json +16 -0
  353. package/skills/ffmpeg-media-processing/SKILL.md +94 -0
  354. package/skills/ffmpeg-media-processing/evals/triggers.json +16 -0
  355. package/skills/ffmpeg-media-processing/references/recipes.md +112 -0
  356. package/skills/fhir-integration/SKILL.md +81 -0
  357. package/skills/fhir-integration/evals/triggers.json +16 -0
  358. package/skills/fhir-integration/references/search-and-bundles.md +73 -0
  359. package/skills/fhir-integration/references/smart-on-fhir.md +50 -0
  360. package/skills/flask-patterns/SKILL.md +132 -0
  361. package/skills/flask-patterns/evals/triggers.json +16 -0
  362. package/skills/flutter-patterns/SKILL.md +99 -0
  363. package/skills/flutter-patterns/evals/triggers.json +16 -0
  364. package/skills/flutterwave-integration/SKILL.md +75 -0
  365. package/skills/flutterwave-integration/evals/triggers.json +16 -0
  366. package/skills/flutterwave-integration/references/api.md +73 -0
  367. package/skills/flutterwave-integration/references/webhooks.md +49 -0
  368. package/skills/fsharp-patterns/SKILL.md +133 -0
  369. package/skills/fsharp-patterns/evals/triggers.json +16 -0
  370. package/skills/fsharp-testing/SKILL.md +136 -0
  371. package/skills/fsharp-testing/evals/triggers.json +16 -0
  372. package/skills/gcp-patterns/SKILL.md +86 -0
  373. package/skills/gcp-patterns/evals/triggers.json +16 -0
  374. package/skills/git-workflow/SKILL.md +114 -0
  375. package/skills/git-workflow/evals/triggers.json +16 -0
  376. package/skills/github-actions-ci/SKILL.md +117 -0
  377. package/skills/github-actions-ci/evals/triggers.json +16 -0
  378. package/skills/github-api-automation/SKILL.md +101 -0
  379. package/skills/github-api-automation/evals/triggers.json +17 -0
  380. package/skills/go-patterns/SKILL.md +118 -0
  381. package/skills/go-patterns/evals/triggers.json +17 -0
  382. package/skills/go-patterns/references/concurrency.md +162 -0
  383. package/skills/go-testing/SKILL.md +154 -0
  384. package/skills/go-testing/evals/triggers.json +17 -0
  385. package/skills/hexagonal-architecture/SKILL.md +89 -0
  386. package/skills/hexagonal-architecture/evals/triggers.json +17 -0
  387. package/skills/hipaa-compliance/SKILL.md +91 -0
  388. package/skills/hipaa-compliance/evals/triggers.json +18 -0
  389. package/skills/hipaa-compliance/references/safeguards.md +68 -0
  390. package/skills/hl7v2-integration/SKILL.md +69 -0
  391. package/skills/hl7v2-integration/evals/triggers.json +16 -0
  392. package/skills/hl7v2-integration/references/messages-and-ack.md +78 -0
  393. package/skills/homelab-network-setup/SKILL.md +125 -0
  394. package/skills/homelab-network-setup/evals/triggers.json +18 -0
  395. package/skills/homelab-network-setup/references/firewall-and-dns.md +45 -0
  396. package/skills/homelab-network-setup/references/wireguard.md +72 -0
  397. package/skills/hubtel-integration/SKILL.md +77 -0
  398. package/skills/hubtel-integration/evals/triggers.json +16 -0
  399. package/skills/hubtel-integration/references/api.md +92 -0
  400. package/skills/i18n-localization/SKILL.md +114 -0
  401. package/skills/i18n-localization/evals/triggers.json +16 -0
  402. package/skills/i18n-localization/references/libraries.md +52 -0
  403. package/skills/incident-postmortem/SKILL.md +118 -0
  404. package/skills/incident-postmortem/evals/triggers.json +14 -0
  405. package/skills/inventory-demand-planning/SKILL.md +89 -0
  406. package/skills/inventory-demand-planning/evals/triggers.json +16 -0
  407. package/skills/inventory-demand-planning/references/formulas.md +62 -0
  408. package/skills/investor-materials/SKILL.md +127 -0
  409. package/skills/investor-materials/evals/triggers.json +16 -0
  410. package/skills/investor-materials/references/templates.md +74 -0
  411. package/skills/invoicing-and-tax/SKILL.md +84 -0
  412. package/skills/invoicing-and-tax/evals/triggers.json +17 -0
  413. package/skills/invoicing-and-tax/references/e-invoicing.md +24 -0
  414. package/skills/invoicing-and-tax/references/invoice-fields.md +38 -0
  415. package/skills/invoicing-and-tax/references/rounding.md +26 -0
  416. package/skills/java-patterns/SKILL.md +141 -0
  417. package/skills/java-patterns/evals/triggers.json +17 -0
  418. package/skills/java-testing/SKILL.md +142 -0
  419. package/skills/java-testing/evals/triggers.json +16 -0
  420. package/skills/jetpack-compose-patterns/SKILL.md +88 -0
  421. package/skills/jetpack-compose-patterns/evals/triggers.json +16 -0
  422. package/skills/jira-integration/SKILL.md +92 -0
  423. package/skills/jira-integration/evals/triggers.json +17 -0
  424. package/skills/jpa-hibernate/SKILL.md +92 -0
  425. package/skills/jpa-hibernate/evals/triggers.json +18 -0
  426. package/skills/jpa-hibernate/references/mapping.md +99 -0
  427. package/skills/kotlin-multiplatform/SKILL.md +97 -0
  428. package/skills/kotlin-multiplatform/evals/triggers.json +16 -0
  429. package/skills/kotlin-patterns/SKILL.md +128 -0
  430. package/skills/kotlin-patterns/evals/triggers.json +16 -0
  431. package/skills/kotlin-testing/SKILL.md +117 -0
  432. package/skills/kotlin-testing/evals/triggers.json +16 -0
  433. package/skills/ktor-patterns/SKILL.md +135 -0
  434. package/skills/ktor-patterns/evals/triggers.json +18 -0
  435. package/skills/kubernetes-patterns/SKILL.md +106 -0
  436. package/skills/kubernetes-patterns/evals/triggers.json +16 -0
  437. package/skills/kubernetes-patterns/references/manifests.md +115 -0
  438. package/skills/laravel-patterns/SKILL.md +136 -0
  439. package/skills/laravel-patterns/evals/triggers.json +16 -0
  440. package/skills/linear-integration/SKILL.md +98 -0
  441. package/skills/linear-integration/evals/triggers.json +17 -0
  442. package/skills/literature-review/SKILL.md +109 -0
  443. package/skills/literature-review/evals/triggers.json +16 -0
  444. package/skills/literature-review/references/appraisal.md +41 -0
  445. package/skills/literature-review/references/search-sources.md +39 -0
  446. package/skills/llm-app-patterns/SKILL.md +97 -0
  447. package/skills/llm-app-patterns/evals/triggers.json +17 -0
  448. package/skills/llm-evals/SKILL.md +98 -0
  449. package/skills/llm-evals/evals/triggers.json +16 -0
  450. package/skills/llm-evals/references/graders.md +66 -0
  451. package/skills/logistics-exception-management/SKILL.md +90 -0
  452. package/skills/logistics-exception-management/evals/triggers.json +16 -0
  453. package/skills/manim-animations/SKILL.md +106 -0
  454. package/skills/manim-animations/evals/triggers.json +16 -0
  455. package/skills/market-research/SKILL.md +117 -0
  456. package/skills/market-research/evals/triggers.json +16 -0
  457. package/skills/marketing-campaign/SKILL.md +111 -0
  458. package/skills/marketing-campaign/evals/triggers.json +16 -0
  459. package/skills/mcp-server-patterns/SKILL.md +127 -0
  460. package/skills/mcp-server-patterns/evals/triggers.json +18 -0
  461. package/skills/mcp-server-patterns/references/protocol-notes.md +68 -0
  462. package/skills/metrics-dashboards/SKILL.md +113 -0
  463. package/skills/metrics-dashboards/evals/triggers.json +16 -0
  464. package/skills/ml-experiment-workflow/SKILL.md +125 -0
  465. package/skills/ml-experiment-workflow/evals/triggers.json +16 -0
  466. package/skills/mongodb-patterns/SKILL.md +115 -0
  467. package/skills/mongodb-patterns/evals/triggers.json +18 -0
  468. package/skills/mongodb-patterns/references/indexes-and-aggregation.md +94 -0
  469. package/skills/mpesa-daraja-integration/SKILL.md +70 -0
  470. package/skills/mpesa-daraja-integration/evals/triggers.json +16 -0
  471. package/skills/mpesa-daraja-integration/references/api.md +103 -0
  472. package/skills/mpesa-daraja-integration/references/callbacks.md +74 -0
  473. package/skills/mtn-momo-integration/SKILL.md +66 -0
  474. package/skills/mtn-momo-integration/evals/triggers.json +16 -0
  475. package/skills/mtn-momo-integration/references/api.md +153 -0
  476. package/skills/mtn-momo-integration/references/callbacks.md +92 -0
  477. package/skills/mtn-momo-integration/references/sandbox-and-go-live.md +51 -0
  478. package/skills/mtn-momo-integration/scripts/sandbox-setup.js +79 -0
  479. package/skills/mysql-patterns/SKILL.md +96 -0
  480. package/skills/mysql-patterns/evals/triggers.json +16 -0
  481. package/skills/mysql-patterns/references/explain.md +34 -0
  482. package/skills/mysql-patterns/references/online-ddl.md +41 -0
  483. package/skills/nestjs-patterns/SKILL.md +114 -0
  484. package/skills/nestjs-patterns/evals/triggers.json +16 -0
  485. package/skills/nestjs-patterns/references/testing.md +68 -0
  486. package/skills/network-automation/SKILL.md +107 -0
  487. package/skills/network-automation/evals/triggers.json +18 -0
  488. package/skills/network-automation/references/tool-snippets.md +153 -0
  489. package/skills/network-troubleshooting/SKILL.md +152 -0
  490. package/skills/network-troubleshooting/evals/triggers.json +18 -0
  491. package/skills/network-troubleshooting/references/commands.md +33 -0
  492. package/skills/nextjs-patterns/SKILL.md +150 -0
  493. package/skills/nextjs-patterns/evals/triggers.json +18 -0
  494. package/skills/nextjs-patterns/references/caching.md +87 -0
  495. package/skills/node-backend-patterns/SKILL.md +103 -0
  496. package/skills/node-backend-patterns/evals/triggers.json +16 -0
  497. package/skills/node-backend-patterns/references/templates.md +122 -0
  498. package/skills/nuxt-patterns/SKILL.md +103 -0
  499. package/skills/nuxt-patterns/evals/triggers.json +16 -0
  500. package/skills/parallel-agent-orchestration/SKILL.md +106 -0
  501. package/skills/parallel-agent-orchestration/evals/triggers.json +14 -0
  502. package/skills/paystack-integration/SKILL.md +59 -0
  503. package/skills/paystack-integration/evals/triggers.json +14 -0
  504. package/skills/paystack-integration/references/api.md +73 -0
  505. package/skills/paystack-integration/references/mobile-money.md +50 -0
  506. package/skills/paystack-integration/references/webhooks.md +80 -0
  507. package/skills/pci-dss-scope/SKILL.md +103 -0
  508. package/skills/pci-dss-scope/evals/triggers.json +18 -0
  509. package/skills/pci-dss-scope/references/saq-and-data.md +36 -0
  510. package/skills/perl-patterns/SKILL.md +135 -0
  511. package/skills/perl-patterns/evals/triggers.json +18 -0
  512. package/skills/perl-testing/SKILL.md +126 -0
  513. package/skills/perl-testing/evals/triggers.json +17 -0
  514. package/skills/php-patterns/SKILL.md +116 -0
  515. package/skills/php-patterns/evals/triggers.json +16 -0
  516. package/skills/php-testing/SKILL.md +123 -0
  517. package/skills/php-testing/evals/triggers.json +16 -0
  518. package/skills/postgres-patterns/SKILL.md +103 -0
  519. package/skills/postgres-patterns/evals/triggers.json +17 -0
  520. package/skills/postgres-patterns/references/explain.md +59 -0
  521. package/skills/postgres-patterns/references/locks.md +53 -0
  522. package/skills/prd-writing/SKILL.md +124 -0
  523. package/skills/prd-writing/evals/triggers.json +15 -0
  524. package/skills/prisma-patterns/SKILL.md +83 -0
  525. package/skills/prisma-patterns/evals/triggers.json +18 -0
  526. package/skills/prisma-patterns/references/prisma-8.md +46 -0
  527. package/skills/prisma-patterns/references/workflow.md +50 -0
  528. package/skills/privacy-compliance/SKILL.md +121 -0
  529. package/skills/privacy-compliance/evals/triggers.json +18 -0
  530. package/skills/privacy-compliance/references/jurisdictions.md +51 -0
  531. package/skills/production-scheduling/SKILL.md +98 -0
  532. package/skills/production-scheduling/evals/triggers.json +16 -0
  533. package/skills/prompt-engineering/SKILL.md +92 -0
  534. package/skills/prompt-engineering/evals/triggers.json +16 -0
  535. package/skills/python-patterns/SKILL.md +107 -0
  536. package/skills/python-patterns/evals/triggers.json +16 -0
  537. package/skills/python-patterns/references/tooling.md +101 -0
  538. package/skills/python-testing/SKILL.md +126 -0
  539. package/skills/python-testing/evals/triggers.json +16 -0
  540. package/skills/python-testing/references/mocking.md +71 -0
  541. package/skills/pytorch-patterns/SKILL.md +139 -0
  542. package/skills/pytorch-patterns/evals/triggers.json +16 -0
  543. package/skills/pytorch-patterns/references/debugging.md +39 -0
  544. package/skills/quarkus-patterns/SKILL.md +93 -0
  545. package/skills/quarkus-patterns/evals/triggers.json +18 -0
  546. package/skills/rag-pipeline-patterns/SKILL.md +117 -0
  547. package/skills/rag-pipeline-patterns/evals/triggers.json +18 -0
  548. package/skills/rag-pipeline-patterns/references/evaluation.md +37 -0
  549. package/skills/rag-pipeline-patterns/references/retrieval-recipes.md +78 -0
  550. package/skills/rails-patterns/SKILL.md +132 -0
  551. package/skills/rails-patterns/evals/triggers.json +16 -0
  552. package/skills/react-native-patterns/SKILL.md +101 -0
  553. package/skills/react-native-patterns/evals/triggers.json +16 -0
  554. package/skills/react-patterns/SKILL.md +140 -0
  555. package/skills/react-patterns/evals/triggers.json +18 -0
  556. package/skills/react-performance/SKILL.md +107 -0
  557. package/skills/react-performance/evals/triggers.json +18 -0
  558. package/skills/redis-patterns/SKILL.md +109 -0
  559. package/skills/redis-patterns/evals/triggers.json +18 -0
  560. package/skills/redis-patterns/references/operations.md +61 -0
  561. package/skills/refactoring-safely/SKILL.md +107 -0
  562. package/skills/refactoring-safely/evals/triggers.json +17 -0
  563. package/skills/release-management/SKILL.md +141 -0
  564. package/skills/release-management/evals/triggers.json +16 -0
  565. package/skills/remotion-video/SKILL.md +91 -0
  566. package/skills/remotion-video/evals/triggers.json +16 -0
  567. package/skills/remotion-video/references/lambda.md +66 -0
  568. package/skills/returns-reverse-logistics/SKILL.md +97 -0
  569. package/skills/returns-reverse-logistics/evals/triggers.json +16 -0
  570. package/skills/ruby-patterns/SKILL.md +127 -0
  571. package/skills/ruby-patterns/evals/triggers.json +18 -0
  572. package/skills/ruby-testing/SKILL.md +113 -0
  573. package/skills/ruby-testing/evals/triggers.json +18 -0
  574. package/skills/runbook-writing/SKILL.md +101 -0
  575. package/skills/runbook-writing/evals/triggers.json +14 -0
  576. package/skills/rust-patterns/SKILL.md +118 -0
  577. package/skills/rust-patterns/evals/triggers.json +16 -0
  578. package/skills/rust-patterns/references/cargo-and-clippy.md +105 -0
  579. package/skills/rust-patterns/references/errors-and-traits.md +97 -0
  580. package/skills/rust-testing/SKILL.md +148 -0
  581. package/skills/rust-testing/evals/triggers.json +16 -0
  582. package/skills/rust-testing/references/fakes-proptest-async.md +113 -0
  583. package/skills/search-first/SKILL.md +73 -0
  584. package/skills/search-first/evals/triggers.json +14 -0
  585. package/skills/security-review/SKILL.md +58 -0
  586. package/skills/security-review/evals/triggers.json +14 -0
  587. package/skills/security-review/references/checklist.md +54 -0
  588. package/skills/security-review/scripts/scan-secrets.js +79 -0
  589. package/skills/seo-audit/SKILL.md +111 -0
  590. package/skills/seo-audit/evals/triggers.json +16 -0
  591. package/skills/seo-audit/references/checks.md +65 -0
  592. package/skills/session-handoff/SKILL.md +101 -0
  593. package/skills/session-handoff/evals/triggers.json +14 -0
  594. package/skills/skill-authoring/SKILL.md +87 -0
  595. package/skills/skill-authoring/evals/triggers.json +14 -0
  596. package/skills/skill-authoring/references/frontmatter.md +40 -0
  597. package/skills/slack-app-integration/SKILL.md +108 -0
  598. package/skills/slack-app-integration/evals/triggers.json +17 -0
  599. package/skills/smart-contract-security/SKILL.md +110 -0
  600. package/skills/smart-contract-security/evals/triggers.json +16 -0
  601. package/skills/smart-contract-security/references/vulnerability-checklist.md +79 -0
  602. package/skills/social-media-publishing/SKILL.md +84 -0
  603. package/skills/social-media-publishing/evals/triggers.json +17 -0
  604. package/skills/social-media-publishing/references/platform-apis.md +116 -0
  605. package/skills/solidity-patterns/SKILL.md +95 -0
  606. package/skills/solidity-patterns/evals/triggers.json +16 -0
  607. package/skills/spring-boot-patterns/SKILL.md +128 -0
  608. package/skills/spring-boot-patterns/evals/triggers.json +18 -0
  609. package/skills/spring-boot-patterns/references/testing.md +72 -0
  610. package/skills/stripe-integration/SKILL.md +69 -0
  611. package/skills/stripe-integration/evals/triggers.json +16 -0
  612. package/skills/stripe-integration/references/api.md +71 -0
  613. package/skills/stripe-integration/references/billing.md +58 -0
  614. package/skills/stripe-integration/references/webhooks.md +76 -0
  615. package/skills/subscription-billing-ops/SKILL.md +118 -0
  616. package/skills/subscription-billing-ops/evals/triggers.json +17 -0
  617. package/skills/subscription-billing-ops/references/proration.md +47 -0
  618. package/skills/subscription-billing-ops/references/revenue-metrics.md +38 -0
  619. package/skills/svelte-patterns/SKILL.md +122 -0
  620. package/skills/svelte-patterns/evals/triggers.json +16 -0
  621. package/skills/swift-patterns/SKILL.md +113 -0
  622. package/skills/swift-patterns/evals/triggers.json +16 -0
  623. package/skills/swift-patterns/references/concurrency-migration.md +40 -0
  624. package/skills/swift-testing/SKILL.md +121 -0
  625. package/skills/swift-testing/evals/triggers.json +16 -0
  626. package/skills/swift-testing/references/swift-testing-cheatsheet.md +81 -0
  627. package/skills/swiftui-patterns/SKILL.md +102 -0
  628. package/skills/swiftui-patterns/evals/triggers.json +16 -0
  629. package/skills/tdd-workflow/SKILL.md +67 -0
  630. package/skills/tdd-workflow/evals/triggers.json +14 -0
  631. package/skills/technical-writing/SKILL.md +95 -0
  632. package/skills/technical-writing/evals/triggers.json +14 -0
  633. package/skills/terraform-patterns/SKILL.md +122 -0
  634. package/skills/terraform-patterns/evals/triggers.json +16 -0
  635. package/skills/terraform-patterns/references/backends.md +67 -0
  636. package/skills/test-coverage-improvement/SKILL.md +107 -0
  637. package/skills/test-coverage-improvement/evals/triggers.json +16 -0
  638. package/skills/threat-modeling/SKILL.md +113 -0
  639. package/skills/threat-modeling/evals/triggers.json +16 -0
  640. package/skills/typescript-patterns/SKILL.md +122 -0
  641. package/skills/typescript-patterns/evals/triggers.json +16 -0
  642. package/skills/typescript-testing/SKILL.md +101 -0
  643. package/skills/typescript-testing/evals/triggers.json +16 -0
  644. package/skills/verification-loop/SKILL.md +70 -0
  645. package/skills/verification-loop/evals/triggers.json +14 -0
  646. package/skills/verification-loop/scripts/detect-checks.js +102 -0
  647. package/skills/vite-patterns/SKILL.md +117 -0
  648. package/skills/vite-patterns/evals/triggers.json +16 -0
  649. package/skills/vue-patterns/SKILL.md +104 -0
  650. package/skills/vue-patterns/evals/triggers.json +16 -0
  651. package/skills/web-accessibility/SKILL.md +119 -0
  652. package/skills/web-accessibility/evals/triggers.json +16 -0
  653. package/skills/web-performance/SKILL.md +107 -0
  654. package/skills/web-performance/evals/triggers.json +16 -0
  655. package/skills/web-scraping/SKILL.md +80 -0
  656. package/skills/web-scraping/evals/triggers.json +16 -0
@@ -0,0 +1,138 @@
1
+ # ClickHouse engines and materialised view recipes
2
+
3
+ Read this when choosing an engine, writing a rollup, or deduplicating. Check syntax against clickhouse.com/docs for the server version in use. On ClickHouse Cloud, write the plain engine name (`MergeTree`, `ReplacingMergeTree`); the service maps it to its shared engine. On a self-hosted cluster, use the `Replicated*` variant with the `ON CLUSTER` conventions the existing tables use.
4
+
5
+ ## Choosing an engine
6
+
7
+ | Engine | Merges rows with the same sorting key by | Use for |
8
+ |---|---|---|
9
+ | `MergeTree` | nothing (keeps all rows) | raw events, logs, append-only facts |
10
+ | `ReplacingMergeTree(version)` | keeping the row with the highest `version` (or the last inserted) | latest state per entity, upserts, CDC from OLTP |
11
+ | `SummingMergeTree` | summing numeric columns | simple counters per key |
12
+ | `AggregatingMergeTree` | merging `AggregateFunction` states | rollups with `uniq`, `quantile`, `avg` |
13
+ | `CollapsingMergeTree(sign)` / `VersionedCollapsingMergeTree` | cancelling `+1`/`-1` row pairs | changing aggregates with explicit cancel rows |
14
+
15
+ All merging is eventual. Queries must be correct before merges happen.
16
+
17
+ ## Raw events table
18
+
19
+ ```sql
20
+ CREATE TABLE analytics.events
21
+ (
22
+ tenant_id UInt32,
23
+ event_type LowCardinality(String),
24
+ ts DateTime64(3),
25
+ user_id UInt64,
26
+ session_id String,
27
+ props String CODEC(ZSTD(3))
28
+ )
29
+ ENGINE = MergeTree
30
+ PARTITION BY toYYYYMM(ts)
31
+ ORDER BY (tenant_id, event_type, toDate(ts), user_id)
32
+ TTL toDateTime(ts) + INTERVAL 13 MONTH
33
+ SETTINGS ttl_only_drop_parts = 1;
34
+ ```
35
+
36
+ ## Latest state with ReplacingMergeTree
37
+
38
+ ```sql
39
+ CREATE TABLE app.users_latest
40
+ (
41
+ user_id UInt64,
42
+ email String,
43
+ plan LowCardinality(String),
44
+ updated_at DateTime64(3),
45
+ is_deleted UInt8 DEFAULT 0
46
+ )
47
+ ENGINE = ReplacingMergeTree(updated_at)
48
+ ORDER BY user_id;
49
+ ```
50
+
51
+ Read the current state either way:
52
+
53
+ ```sql
54
+ SELECT * FROM app.users_latest FINAL WHERE is_deleted = 0;
55
+
56
+ SELECT user_id, argMax(plan, updated_at) AS plan
57
+ FROM app.users_latest
58
+ GROUP BY user_id;
59
+ ```
60
+
61
+ `FINAL` is much cheaper on recent versions than it used to be, but still costs more than a plain read; measure it. Newer versions also accept an `is_deleted` column as a second engine parameter; check the docs for your version before relying on it.
62
+
63
+ ## Daily rollup with AggregatingMergeTree
64
+
65
+ ```sql
66
+ CREATE TABLE analytics.daily_events
67
+ (
68
+ tenant_id UInt32,
69
+ day Date,
70
+ event_type LowCardinality(String),
71
+ events SimpleAggregateFunction(sum, UInt64),
72
+ users AggregateFunction(uniq, UInt64)
73
+ )
74
+ ENGINE = AggregatingMergeTree
75
+ PARTITION BY toYYYYMM(day)
76
+ ORDER BY (tenant_id, day, event_type);
77
+
78
+ CREATE MATERIALIZED VIEW analytics.daily_events_mv TO analytics.daily_events AS
79
+ SELECT tenant_id, toDate(ts) AS day, event_type,
80
+ count() AS events,
81
+ uniqState(user_id) AS users
82
+ FROM analytics.events
83
+ GROUP BY tenant_id, day, event_type;
84
+ ```
85
+
86
+ Query it with merge functions, always grouping:
87
+
88
+ ```sql
89
+ SELECT day, sum(events) AS events, uniqMerge(users) AS users
90
+ FROM analytics.daily_events
91
+ WHERE tenant_id = 42 AND day >= today() - 30
92
+ GROUP BY day ORDER BY day;
93
+ ```
94
+
95
+ Backfill existing data once, in chunks by partition, with the same SELECT as the view:
96
+
97
+ ```sql
98
+ INSERT INTO analytics.daily_events
99
+ SELECT tenant_id, toDate(ts) AS day, event_type, count(), uniqState(user_id)
100
+ FROM analytics.events
101
+ WHERE toYYYYMM(ts) = 202609
102
+ GROUP BY tenant_id, day, event_type;
103
+ ```
104
+
105
+ To avoid double counting, create the view first, note the time, and backfill only rows before it, or pause ingestion during the switch.
106
+
107
+ ## Materialised view gotchas
108
+
109
+ - The view's SELECT runs on each inserted **block**, not on the whole table. A `GROUP BY` in it aggregates within the block only; the target engine finishes the job.
110
+ - A failing view makes the insert into the source fail. Test the view's SELECT on sample data first.
111
+ - Joins inside an incremental view read the right-hand table at insert time; later changes to it don't update old rows. Use a dictionary or a refreshable view instead.
112
+ - Changing a view: create the new target and view, backfill, switch readers, then drop the old ones.
113
+
114
+ ## Refreshable view
115
+
116
+ ```sql
117
+ CREATE MATERIALIZED VIEW reports.top_customers
118
+ REFRESH EVERY 1 HOUR
119
+ ENGINE = MergeTree ORDER BY revenue
120
+ AS SELECT customer_id, sum(amount) AS revenue
121
+ FROM sales.orders
122
+ GROUP BY customer_id
123
+ ORDER BY revenue DESC
124
+ LIMIT 100;
125
+ ```
126
+
127
+ Each refresh replaces the content atomically. Check status in `system.view_refreshes`.
128
+
129
+ ## Useful system tables
130
+
131
+ | Table | Use |
132
+ |---|---|
133
+ | `system.query_log` | slow and heavy queries, `read_rows`, `memory_usage` |
134
+ | `system.parts` | active part counts and sizes per partition |
135
+ | `system.merges` | merges in progress |
136
+ | `system.mutations` | `ALTER ... UPDATE/DELETE` progress (`is_done`) |
137
+ | `system.columns` | compressed vs uncompressed size per column |
138
+ | `system.replication_queue` | replicated table backlogs (self-hosted) |
@@ -0,0 +1,90 @@
1
+ ---
2
+ name: clinical-decision-support
3
+ description: Engineering discipline for software that recommends or warns at the point of care, including CDS Hooks services (discovery, patient-view and order-sign hooks, prefetch, cards, suggestions, feedback), alert design that avoids alert fatigue, versioned rule logic tied to cited evidence, clinician sign-off and regression testing on synthetic cases, override and audit trails, and the regulatory line where software becomes a medical device (FDA CDS guidance, EU MDR Rule 11, UK DCB0129). Use when building drug-interaction or dosing alerts, risk scores, care-gap reminders or AI suggestions shown to clinicians, writing a CDS Hooks service, or deciding whether a clinical feature needs regulatory or clinical-safety review.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Works on any codebase; CDS Hooks testing needs a FHIR sandbox or the CDS Hooks sandbox. Regulatory statements must be checked against current FDA, EU and national guidance by a qualified person.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: compliance
9
+ kete-loom/risk: writes-files
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # Clinical decision support
14
+
15
+ Build decision support that clinicians trust: it fires rarely and correctly, shows its reasoning and evidence, can be overridden with a reason, is traceable to a reviewed rule version, and stays on the right side of medical device regulation.
16
+
17
+ ## Boundary: not clinical, legal or regulatory advice
18
+
19
+ - You engineer the system. You never author or approve clinical content (thresholds, doses, interactions, risk cut-offs). A named clinician owns every rule and signs off each version.
20
+ - You never decide whether the product is a regulated medical device. You flag the questions; regulatory affairs or counsel decides.
21
+ - Say this once, plainly, when the user asks for clinical thresholds or a regulatory verdict, then continue with the engineering. Never invent a clinical threshold to fill a gap; leave a named placeholder and stop.
22
+
23
+ ## Step 1: classify the feature before building
24
+
25
+ Answer these and write the answers into the design doc:
26
+
27
+ 1. **Who sees it?** A healthcare professional, a patient or caregiver, or nobody (automatic action)?
28
+ 2. **What does it do?** Display reference information, flag something for review, recommend one action, or take an action automatically?
29
+ 3. **What are the inputs?** Structured data and published guidelines, or medical images, signals (ECG, waveforms) or IVD data?
30
+ 4. **Can the clinician independently review the basis?** Are the inputs, logic and evidence shown so they need not rely on the software alone?
31
+ 5. **Is it time-critical?** Would a clinician have time to review the basis before acting?
32
+
33
+ Then apply the regulatory flags in `references/regulatory-boundaries.md`. If the feature analyses images or signals, targets patients directly, acts automatically, is opaque (for example an ML model whose basis the clinician cannot review), or is used in time-critical decisions, **stop and tell the user it needs regulatory review before build**.
34
+
35
+ ## Step 2: design the intervention
36
+
37
+ - **Fire only when actionable.** Every alert names one specific patient, finding and action. If nobody can act on it right now, it is not an interruptive alert: make it passive (a chart flag, a worklist, `info` card) or drop it.
38
+ - **Right time, right person.** Trigger at the workflow step where the decision is made (for drug checks: `order-select` or `order-sign`, not `patient-view`). Target the role that can act.
39
+ - **Severity is earned.** Reserve interruptive or `critical` for harm that is likely and serious. Tier everything else. Track the override rate per rule; a rule overridden most of the time is noise and needs clinical review.
40
+ - **Show the why.** Include the triggering data (values, dates), the rule's logic in plain words, and a link to the evidence source.
41
+ - **Make the right action one click.** Offer a concrete suggestion (adjust dose, order test, discontinue) and allow override with a structured reason.
42
+ - **Suppress duplicates.** Don't re-fire the same alert for the same patient and data in one session; respect snoozes and documented exceptions.
43
+ - **Fail safe and visible.** If the CDS service is down or data is missing, show nothing interruptive but never imply "no issues found". Missing inputs must not be treated as normal values.
44
+
45
+ ## Step 3: build the logic as versioned, reviewable artefacts
46
+
47
+ - Keep rules in data or a dedicated module (for example CQL libraries, or a rules table), not scattered through UI code.
48
+ - Each rule has: ID, semantic version, owner clinician, evidence citation (guideline, version, date), inputs with code systems (LOINC, SNOMED CT, RxNorm), logic, outputs, effective date, review-by date.
49
+ - Units and codes are explicit. Convert units with a library (UCUM), never assume. Handle `preliminary`, `corrected` and `entered-in-error` source data.
50
+ - Every change goes through code review **and** clinical review, and bumps the rule version. Record who approved and when.
51
+
52
+ ## Step 4: implement the delivery
53
+
54
+ For EHR-embedded CDS use CDS Hooks as in `references/cds-hooks.md`: a discovery endpoint, one service per hook, prefetch templates for the data you need, cards with `summary`, `indicator`, `source` and suggestions, and the feedback endpoint to capture accept/override. Authenticate the EHR's JWT on every call and use the `fhirAuthorization` token only for the patient in context.
55
+
56
+ ## Step 5: test with clinicians
57
+
58
+ 1. Build a test set of synthetic patients (never real records) per rule: must fire, must not fire, boundary values, missing data, unit variants, corrected results, duplicate orders.
59
+ 2. Store expected outputs and run them as automated regression tests on every change.
60
+ 3. A clinician reviews the cases and the card wording before release and signs the test report.
61
+ 4. Pilot silently first where possible ("shadow mode": evaluate and log, don't show) and compare fire rates with expectations.
62
+
63
+ ## Step 6: audit and monitor
64
+
65
+ Log, for every evaluation that produced output: timestamp, rule ID and version, patient reference (internal ID, not name), user, hook instance, card shown, action taken, override reason. Keep it append-only and access-controlled like other PHI logs (`hipaa-compliance`). Review override rates, fire rates and reported incidents on a schedule, and give clinicians a way to report a bad alert.
66
+
67
+ ## Stop and ask the user
68
+
69
+ - Before writing any clinical threshold, dose, interaction or score cut-off: ask who the clinical owner is and for the source.
70
+ - When Step 1 raises a regulatory flag.
71
+ - Before making any alert interruptive, or any action automatic.
72
+ - Before shipping a rule change without recorded clinical sign-off.
73
+
74
+ ## Never
75
+
76
+ - Never auto-order, auto-cancel or auto-change medication or orders without explicit clinical governance approval.
77
+ - Never hide the inputs or reasoning behind a recommendation.
78
+ - Never treat missing data as normal.
79
+ - Never ship ML-based suggestions as if they were rule-based, or without documented validation on the target population.
80
+ - Never let a CDS outage silently disable safety checks without telling users.
81
+
82
+ ## Report format
83
+
84
+ ```
85
+ Feature: <name>, audience, hook or trigger point
86
+ Classification: <answers to Step 1>, regulatory flags: <none | list → needs regulatory review>
87
+ Rules: <ID@version, owner, evidence source> per rule
88
+ Test coverage: <cases per rule, clinician sign-off status>
89
+ Open items for clinical/regulatory owners: <list>
90
+ ```
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "Build a CDS Hooks service that warns at order-sign when a renally cleared drug is ordered for a patient with low eGFR",
4
+ "Our sepsis alert fires constantly and nurses override 95% of them, how should we redesign it?",
5
+ "Does our symptom checker that recommends a diagnosis to patients count as a medical device under FDA rules?",
6
+ "Set up versioning, clinician sign-off and regression tests for our medication dosing rules",
7
+ "How do we audit which decision support cards were shown, accepted or overridden by each clinician?"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Fetch MedicationRequest resources from the EHR's FHIR API with a SMART standalone launch",
11
+ "Parse ORU^R01 lab results arriving over MLLP and send an ACK",
12
+ "Which HIPAA safeguards does our telehealth backend need for video visits?",
13
+ "Train a gradient boosting model to predict readmission and report its AUC",
14
+ "Review the clinic scheduling service for PHI in logs and missing consent checks"
15
+ ]
16
+ }
@@ -0,0 +1,76 @@
1
+ # CDS Hooks implementation notes
2
+
3
+ Source: CDS Hooks specification 2.0 (cds-hooks.hl7.org, STU 2, based on FHIR R4). Check the EHR vendor's docs for which hooks and features they support.
4
+
5
+ ## Endpoints
6
+
7
+ | Endpoint | Purpose |
8
+ |---|---|
9
+ | `GET {base}/cds-services` | discovery: list of services with `hook`, `id`, `title`, `description`, `prefetch`, optional `usageRequirements` |
10
+ | `POST {base}/cds-services/{id}` | invoke a service for a hook |
11
+ | `POST {base}/cds-services/{id}/feedback` | the EHR reports which cards and suggestions were accepted or overridden |
12
+
13
+ ## Standard hooks
14
+
15
+ `patient-view`, `order-select`, `order-sign`, `order-dispatch`, `appointment-book`, `encounter-start`, `encounter-discharge`, `medication-refill`, `allergyintolerance-create`, `problem-list-item-create`. (`medication-prescribe` and `order-review` are deprecated.) Each hook defines its `context` fields, for example `order-sign` carries `userId`, `patientId`, `encounterId` and `draftOrders` (a Bundle).
16
+
17
+ ## Discovery example
18
+
19
+ ```json
20
+ {
21
+ "services": [{
22
+ "hook": "order-sign",
23
+ "id": "renal-dose-check",
24
+ "title": "Renal dose check",
25
+ "description": "Flags renally cleared drugs ordered for patients with reduced eGFR",
26
+ "prefetch": {
27
+ "patient": "Patient/{{context.patientId}}",
28
+ "egfr": "Observation?patient={{context.patientId}}&code=http://loinc.org|<egfr-code>&_sort=-date&_count=1"
29
+ }
30
+ }]
31
+ }
32
+ ```
33
+
34
+ Prefetch is an optimisation the EHR may skip: if a key is missing, fetch it from `fhirServer` with `fhirAuthorization.access_token`, and if neither is available return no cards rather than guessing. Log that the check could not run and count it, so an outage shows up in monitoring instead of looking like "no issues".
35
+
36
+ ## Request fields
37
+
38
+ `hook`, `hookInstance` (UUID, use it as the correlation ID in audit logs), `fhirServer`, `fhirAuthorization` (`access_token`, `token_type`, `expires_in`, `scope`, `subject`), `context`, `prefetch`.
39
+
40
+ ## Security
41
+
42
+ - The EHR sends a signed JWT bearer token in `Authorization`. Verify it on every request: signature against the EHR's JWK Set (from the optional `jku` header only if that URL is on your allowlist, otherwise a key exchanged out of band), `iss` on your allowlist of EHRs, `aud` equal to the URL of the endpoint being called (`{base}/cds-services/{id}`), `exp` not passed, `iat` present, `jti` not replayed.
43
+ - Use the `fhirAuthorization` token only for the patient in context and discard it after the call.
44
+ - Never log `prefetch` or `context` bodies; log `hookInstance`, service ID, rule versions and card UUIDs.
45
+
46
+ ## Response
47
+
48
+ ```json
49
+ {
50
+ "cards": [{
51
+ "uuid": "6f0c...",
52
+ "summary": "Dose may be too high for eGFR 25 (under 140 chars)",
53
+ "detail": "Markdown: triggering values, the rule in plain words, evidence link",
54
+ "indicator": "warning",
55
+ "source": { "label": "Renal dosing rules v1.4.0", "url": "https://example.org/evidence" },
56
+ "suggestions": [{ "label": "Reduce dose", "uuid": "...", "isRecommended": true, "actions": [{ "type": "update", "description": "...", "resource": {} }] }],
57
+ "selectionBehavior": "at-most-one",
58
+ "overrideReasons": [{ "code": "benefit-outweighs-risk", "system": "https://example.org/override-reasons", "display": "Benefit outweighs risk" }],
59
+ "links": [{ "label": "Guideline", "url": "https://...", "type": "absolute" }]
60
+ }],
61
+ "systemActions": []
62
+ }
63
+ ```
64
+
65
+ - `indicator`: `info`, `warning`, `critical` (increasing urgency).
66
+ - `selectionBehavior` is required when `suggestions` is present.
67
+ - `systemActions` are applied by the EHR without showing the user: leave empty unless clinical governance has approved the automation.
68
+ - Return `{"cards": []}` when nothing applies. Respond fast (the clinician is waiting); set a timeout budget well under the EHR's.
69
+
70
+ ## Feedback
71
+
72
+ Give every card and suggestion a `uuid`: the EHR sends no feedback for a card or suggestion without one. Store each feedback item (`card`, `outcome` accepted/overridden, `acceptedSuggestions`, `overrideReason`, `outcomeTimestamp`) against the rule version. This is the data for override-rate and alert-fatigue review.
73
+
74
+ ## Testing
75
+
76
+ The public CDS Hooks sandbox (sandbox.cds-hooks.org) can call a service you host and render its cards. Use synthetic patients only.
@@ -0,0 +1,37 @@
1
+ # Regulatory boundaries for clinical software
2
+
3
+ This is a map of questions to raise, not a determination. Regulatory affairs or counsel decides whether a product is a medical device, and the rules change: check the current text of each source before relying on it.
4
+
5
+ ## United States (FDA)
6
+
7
+ - Basis: section 520(o)(1)(E) of the FD&C Act (added by the 21st Century Cures Act) excludes some CDS software from the device definition. FDA's "Clinical Decision Support Software" guidance explains how it reads the criteria; FDA lists a final version dated January 2026, which replaced the September 2022 version. Secondary summaries say it relaxed FDA's position on software that gives a single recommendation and refined its approach to time-critical use. Read the FDA text itself before relying on either point.
8
+ - All four criteria must be met for the exclusion:
9
+ 1. Not intended to acquire, process or analyse a medical image, a signal from an in vitro diagnostic device, or a pattern or signal from a signal acquisition system.
10
+ 2. Intended to display, analyse or print medical information about a patient or other medical information (such as peer-reviewed studies and guidelines).
11
+ 3. Intended to support or provide recommendations to a healthcare professional about prevention, diagnosis or treatment.
12
+ 4. Intended to enable the healthcare professional to independently review the basis for the recommendations, so they don't rely primarily on the software.
13
+ - Red flags that push toward device regulation: image or waveform analysis; patient- or caregiver-facing recommendations; time-critical alerts; outputs a clinician cannot independently check (opaque ML); automatic actions.
14
+ - Related: FDA guidance on device software functions and mobile medical applications, and general wellness products, describe other functions FDA does or does not focus on.
15
+
16
+ ## European Union (MDR 2017/745)
17
+
18
+ - Software intended by its manufacturer for a medical purpose (diagnosis, prevention, monitoring, prediction, prognosis, treatment) can be a medical device (MDR Article 2). MDCG 2019-11 is the guidance on qualifying and classifying software.
19
+ - Annex VIII Rule 11: software that provides information used to take decisions with diagnostic or therapeutic purposes is class IIa; class IIb where those decisions could cause a serious deterioration of health or a surgical intervention; class III where they could cause death or an irreversible deterioration. Few decision support products are class I under the MDR.
20
+ - The EU AI Act also applies to AI systems that are, or are safety components of, devices requiring notified-body assessment.
21
+
22
+ ## United Kingdom
23
+
24
+ - Medical devices: MHRA under the UK MDR 2002 (as amended); MHRA publishes guidance on software and AI as a medical device.
25
+ - NHS clinical safety (applies to health IT deployed in the NHS in England whether or not it is a device): DCB0129 for manufacturers and DCB0160 for deploying organisations. They require a clinical risk management process, a hazard log, a clinical safety case report and a named Clinical Safety Officer (a registered clinician).
26
+
27
+ ## Other markets
28
+
29
+ Check the national regulator (for example Health Canada, TGA in Australia, and national authorities across Africa and Asia). Many follow IMDRF "Software as a Medical Device" concepts, which classify by the significance of the information to the decision and the state of the condition.
30
+
31
+ ## Engineering practices that help in every regime
32
+
33
+ - A written intended-use statement for each feature.
34
+ - A hazard log: what could go wrong (wrong patient, wrong unit, missing data, outage), severity, likelihood, mitigations, residual risk.
35
+ - Traceability from requirement to rule version to test case to release.
36
+ - Software lifecycle practices aligned with IEC 62304 and risk management with ISO 14971 where the product is, or may become, a device.
37
+ - Post-release monitoring of fire rates, overrides and incidents, with a route to report safety issues.
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: code-tour
3
+ description: Authors a step-by-step guided walkthrough of a codebase or a single feature as an ordered list of stops, each pinned to a file:line reference with a short explanation of what that code does and why it matters, written so a new contributor can follow it in one sitting. Use when asked to create a code walkthrough, a feature tour, a "follow the request" guide, or contributor-facing reading order for part of a project.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs git to pin the tour to a commit.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: docs
9
+ kete-loom/risk: writes-files
10
+ kete-loom/requires: "git"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # Code tour
15
+
16
+ A code tour is a reading order. It takes a newcomer through the code that matters, one stop at a time, so they understand a feature without reading the whole repo. A good tour has 6 to 15 stops, follows the path execution takes, and every stop points at real code.
17
+
18
+ ## 1. Agree the scope
19
+
20
+ Before writing, settle with the user:
21
+
22
+ - **Subject:** the whole codebase at high level, or one feature or flow (for example "how a login request is handled").
23
+ - **Reader:** new contributor, reviewer, new team member, or future maintainer. This sets how much background each stop needs.
24
+ - **Where it lives:** a Markdown file in the repo (default `docs/tours/<topic>.md`), or reply only.
25
+
26
+ If the subject is "everything" for a large repo, propose splitting into one overview tour plus one tour per major flow, and ask which to write first.
27
+
28
+ ## 2. Find the path
29
+
30
+ 1. Locate the entry point for the subject: a route, command handler, event consumer, UI action or public function.
31
+ 2. Follow the call chain by reading code and searching for callers and definitions. Don't trust names; open each function.
32
+ 3. Note each place a reader must understand: where input arrives, where it's validated, where the core decision is made, where state changes, where it leaves the system, and where errors are handled.
33
+ 4. Find the test that exercises this path. It makes a good last stop.
34
+
35
+ Drop stops that are pure plumbing (re-exports, trivial wrappers) unless skipping them would confuse the reader.
36
+
37
+ ## 3. Pin it to a commit
38
+
39
+ Line numbers drift. Record the current commit with `git rev-parse --short HEAD` and put it in the tour header. If `git status --porcelain -- <cited paths>` shows uncommitted changes in files the tour cites, tell the user the references may move once they commit.
40
+
41
+ ## 4. Write the stops
42
+
43
+ Each stop has:
44
+
45
+ - a numbered title that says what happens, not the file name ("3. Validate the payload", not "3. validators.ts");
46
+ - a `path:line` or `path:start-end` reference, relative to the repo root;
47
+ - 2 to 5 sentences: what this code does, why it's here, and what to notice;
48
+ - optionally, a short excerpt (at most 10 lines) when the point is a specific construct.
49
+
50
+ Rules for stops:
51
+
52
+ - Order follows execution or data flow, not the directory tree.
53
+ - Each stop should connect to the next ("the validated payload is handed to...").
54
+ - Explain intent and non-obvious decisions. Don't narrate code line by line.
55
+ - Flag gotchas the reader would otherwise hit: hidden side effects, global state, ordering requirements, surprising config.
56
+ - Keep ranges tight. A stop pointing at a 300-line file teaches nothing.
57
+
58
+ ## 5. Use this format
59
+
60
+ ```markdown
61
+ # Tour: <subject>
62
+
63
+ > Commit `<sha>` · Reader: <audience> · About <N> minutes
64
+
65
+ **You'll learn:** <one or two sentences>
66
+ **Before you start:** <prerequisites, such as how to run the app or which concepts to know>
67
+
68
+ ## 1. <What happens here>
69
+ `path/to/file.ext:12-30`
70
+
71
+ <2 to 5 sentences.>
72
+
73
+ ## 2. <Next step>
74
+ `path/to/other.ext:44`
75
+
76
+ <...>
77
+
78
+ ## Where to go next
79
+ - <related tour, doc, or the test to run: `<command>`>
80
+ ```
81
+
82
+ ## 6. Verify before you hand it over
83
+
84
+ 1. Open every cited range and confirm it still shows what the stop describes. Fix or drop any that don't.
85
+ 2. Confirm every path exists, using the exact case.
86
+ 3. Read the tour top to bottom as the target reader. If a stop uses a term no earlier stop or prerequisite introduced, add a sentence or a link.
87
+ 4. If the tour includes a command, run it, or mark it as not run.
88
+
89
+ ## Never
90
+
91
+ - Invent a file, function or line number. If you couldn't find something, say so in the tour.
92
+ - Edit source code to make the tour easier to write.
93
+ - Overwrite an existing tour without asking; offer an updated version alongside it.
94
+
95
+ ## Report back
96
+
97
+ Return the tour (or its path), the commit it is pinned to, the number of stops, and any references you could not verify. For getting yourself oriented rather than writing for others, use `codebase-onboarding`; for README or API docs, use `technical-writing`.
@@ -0,0 +1,14 @@
1
+ {
2
+ "should_trigger": [
3
+ "Write a guided tour of how a login request moves through this app, with file and line references for each stop",
4
+ "Create a walkthrough of the billing module for new contributors so they know what to read and in what order",
5
+ "Can you make a step-by-step code tour of the plugin loader for the docs folder?",
6
+ "Our new hire starts Monday. Put together a feature tour of the search indexing pipeline pinned to the current commit"
7
+ ],
8
+ "should_not_trigger": [
9
+ "I just cloned this project, help me figure out how to build it and where the entry points are",
10
+ "Write API reference docs for the public functions in the sdk package",
11
+ "Update the README and CHANGELOG to reflect the renamed config flag",
12
+ "Explain what this one regular expression in utils.py matches"
13
+ ]
14
+ }
@@ -0,0 +1,112 @@
1
+ ---
2
+ name: codebase-onboarding
3
+ description: Gets you productive in an unfamiliar repository fast by locating its entry points, building and running it locally, mapping modules and the main data flow, reading the tests as a specification, and ending with a one-page orientation note. Use when someone has just cloned or inherited a project, asks "how does this codebase work", "where do I start", or needs to understand a repo before changing it.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs git and whatever build tool the project uses.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: docs
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/requires: "git"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # Codebase onboarding
15
+
16
+ Turn an unknown repository into a mental map you can act on. The goal is not to read everything: it is to find the few files that matter, prove you can build and run the thing, and write down what you learned so the next person starts faster.
17
+
18
+ Work read-first. Do not edit tracked files during onboarding. The only files you may create are git-ignored local config copies (step 2) and the orientation note, and the note only where the user agrees.
19
+
20
+ ## 1. Get the lay of the land (5 minutes)
21
+
22
+ 1. List the top level of the repo and read, in this order, whichever exist: `README*`, `CONTRIBUTING*`, `AGENTS.md`, `CLAUDE.md`, `docs/` index, `ARCHITECTURE*`.
23
+ 2. Identify the stack from manifests: `package.json`, `pyproject.toml`, `requirements*.txt`, `go.mod`, `Cargo.toml`, `pom.xml`, `build.gradle*`, `*.csproj`, `Gemfile`, `composer.json`, `pubspec.yaml`, `Package.swift`, `CMakeLists.txt`, `Makefile`.
24
+ 3. Note the scripts or tasks they define (for example `scripts` in `package.json`, targets in a `Makefile`, `[project.scripts]` in `pyproject.toml`). These are the project's own answer to "how do I build, test and run this".
25
+ 4. Check recent history: `git log --oneline -20` and `git shortlog -sn --since="6 months ago"` show what is active and who knows it.
26
+ 5. Check CI config (`.github/workflows/`, `.gitlab-ci.yml`, `Jenkinsfile`, `.circleci/`). CI is the most reliable record of the real build and test commands.
27
+
28
+ If it is a monorepo (workspaces, `packages/`, `apps/`, `services/`), ask the user which package they care about before going further. Onboarding to everything at once produces nothing useful.
29
+
30
+ ## 2. Build and run it
31
+
32
+ 1. Install dependencies with the command the README or CI uses. Prefer the lockfile-respecting form (`npm ci`, `pip install -r`, `go mod download`, `bundle install`).
33
+ 2. Run the test suite once. Record the command, pass/fail counts and duration.
34
+ 3. Start the app, CLI or service the way the README says, and hit one real path (a request, a command, a page).
35
+ 4. Copy environment templates (`.env.example`, `config/*.sample`) only into files that `git check-ignore <path>` confirms are ignored, and never overwrite an existing `.env`.
36
+
37
+ Stop and ask the user when:
38
+
39
+ - setup needs credentials, a paid service, production data or access you don't have;
40
+ - a step would install system-wide packages, change global config or run a database migration against anything but a local database;
41
+ - the build fails and the fix is not obvious after one attempt. Report the exact error instead of guessing.
42
+
43
+ Never run deploy, publish, release or data-deleting scripts while onboarding, even if they sit next to the build scripts.
44
+
45
+ ## 3. Find the entry points
46
+
47
+ Search for where execution starts. Typical signs:
48
+
49
+ | Kind | Look for |
50
+ |---|---|
51
+ | Web server | route or controller registration, `listen(`, app factory, framework config |
52
+ | CLI | `bin` field in `package.json`, `[project.scripts]`, `main` packages, argument parsers |
53
+ | Library | the package's public export file (`index.*`, `__init__.py`, `lib.rs`, `mod.rs`) |
54
+ | Workers and jobs | queue consumers, cron or scheduler definitions, serverless handlers |
55
+ | Frontend | the root component, router definition, HTML entry |
56
+
57
+ List at most five entry points with `path:line`. If you find more, group them.
58
+
59
+ ## 4. Map modules and data flow
60
+
61
+ 1. Sketch the module layout from directory names, then confirm by reading one file in each major directory. Directory names lie; imports don't.
62
+ 2. Pick one representative request or command and trace it end to end: entry point, validation, business logic, persistence or external call, response. Write each hop as `path:line — what happens`.
63
+ 3. Note where state lives: databases (look for migrations and schema files), caches, queues, files, third-party APIs.
64
+ 4. Note the cross-cutting pieces: config loading, logging, auth, error handling, dependency injection.
65
+
66
+ ## 5. Read the tests as a spec
67
+
68
+ - Find the test layout and the fixtures or factories.
69
+ - Read the tests for the flow you traced. They show intended behaviour and edge cases the code alone hides.
70
+ - Note what has no tests. That is where changes are risky.
71
+
72
+ ## 6. Write the orientation note
73
+
74
+ Ask the user where it should go (reply only, a scratch file, or `docs/ONBOARDING.md`). Do not overwrite an existing onboarding doc; propose additions instead. Keep it to one page, in this format:
75
+
76
+ ```markdown
77
+ # <project> orientation
78
+
79
+ **What it is:** <one sentence>
80
+ **Stack:** <languages, frameworks, datastores>
81
+
82
+ ## Run it
83
+ - Install: `<command>`
84
+ - Test: `<command>` (<N> passed, <duration>)
85
+ - Start: `<command>`, then <how to see it working>
86
+
87
+ ## Entry points
88
+ - `path:line` — <what starts here>
89
+
90
+ ## How a request flows
91
+ 1. `path:line` — <step>
92
+
93
+ ## Where things live
94
+ - <directory> — <responsibility>
95
+
96
+ ## Gotchas
97
+ - <surprising thing, flaky test, required env var>
98
+
99
+ ## Open questions
100
+ - <things you could not confirm>
101
+ ```
102
+
103
+ ## Rules
104
+
105
+ - Every claim in the note points to a file or a command output. If you inferred it, say "probably".
106
+ - Don't summarise files you didn't open.
107
+ - Don't paste secrets from `.env` or config into the note or the reply.
108
+ - Keep it short. A note nobody reads is worse than none.
109
+
110
+ ## Report back
111
+
112
+ Return the orientation note (or its path), the commands you ran with their results, and the open questions the user should take to a maintainer. For a walkthrough meant for other contributors, hand off to the `code-tour` skill; for polished project docs, to `technical-writing`.
@@ -0,0 +1,14 @@
1
+ {
2
+ "should_trigger": [
3
+ "I just inherited this repo and have no idea how it fits together, help me get oriented",
4
+ "Where do I even start with this codebase? Figure out how to build and run it",
5
+ "Map out the modules and how a request flows through this service before I change anything",
6
+ "New job, first day, cloned their monorepo. Give me a quick lay of the land for the payments package"
7
+ ],
8
+ "should_not_trigger": [
9
+ "Write a guided tour of the checkout feature for our new contributors, with file and line stops",
10
+ "Rewrite our README so a new user can install the CLI in five minutes",
11
+ "I changed the config loader, update the docs and changelog to match",
12
+ "Propose how we should split this monolith into separate services and write up the trade-offs"
13
+ ]
14
+ }