@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
package/hooks/run.js ADDED
@@ -0,0 +1,132 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ // kete-loom hook runner. The installer copies it with each hook's hook.js to ~/.kete-loom/hooks/ and
5
+ // registers `node run.js <host> <hook> <event>` with each host. It turns that host's stdin payload into
6
+ // one normalized event, calls the hook's check(), and answers in the host's own dialect. Zero
7
+ // dependencies.
8
+ //
9
+ // Events: pre-shell { command, cwd }, pre-edit { files: [{ path, content }], cwd },
10
+ // post-edit { files: [{ path }], cwd }, session-start { cwd }.
11
+ //
12
+ // Blocking (pre-*): exit 2 with the reason on stderr works on every host; Cursor and Copilot also get
13
+ // their JSON verdict. Internal errors fail OPEN (exit 0): Copilot and Kete Code deny on a crashed hook,
14
+ // so a runner bug must never block every tool call. post-edit and session-start never block.
15
+
16
+ const fs = require('fs');
17
+ const path = require('path');
18
+
19
+ const pick = (o, ...keys) => {
20
+ for (const k of keys) if (o && typeof o[k] === 'string') return o[k];
21
+ return undefined;
22
+ };
23
+ const parseMaybe = (v) => (typeof v === 'string' ? JSON.parse(v) : v || {});
24
+
25
+ // `*** Add File: p` / `*** Update File: p` (apply_patch) and `+++ b/p` (unified diff); added lines are
26
+ // the new content.
27
+ function parsePatch(text) {
28
+ const files = [];
29
+ let current = null;
30
+ for (const line of String(text || '').split('\n')) {
31
+ const header = /^\*\*\* (?:Add|Update) File: (.+)$/.exec(line) || /^\*\*\* Move to: (.+)$/.exec(line) || /^\+\+\+ (?:b\/)?(.+)$/.exec(line);
32
+ if (header && header[1] !== '/dev/null') {
33
+ current = { path: header[1].trim(), content: '' };
34
+ files.push(current);
35
+ } else if (current && line.startsWith('+') && !line.startsWith('+++')) current.content += `${line.slice(1)}\n`;
36
+ }
37
+ return files;
38
+ }
39
+
40
+ // A Claude-style tool_input -> [{ path, content }].
41
+ const claudeFiles = (input) => {
42
+ const p = pick(input, 'file_path', 'notebook_path', 'path', 'filePath');
43
+ return p ? [{ path: p, content: pick(input, 'content', 'new_string', 'new_source') || '' }] : [];
44
+ };
45
+
46
+ // Tolerant reader for hosts whose edit arguments aren't fully documented (Copilot, OpenCode).
47
+ const looseFiles = (args) => {
48
+ if (pick(args, 'patchText', 'patch', 'input')) return parsePatch(pick(args, 'patchText', 'patch', 'input'));
49
+ const p = pick(args, 'path', 'filePath', 'file_path');
50
+ return p ? [{ path: p, content: pick(args, 'file_text', 'content', 'new_str', 'newString', 'new_string') || '' }] : [];
51
+ };
52
+
53
+ const SHELL_TOOLS = { kete: ['shell'], copilot: ['bash', 'powershell', 'shell'], opencode: ['bash'] };
54
+ const EDIT_TOOLS = { kete: ['edit', 'write', 'patch'], copilot: ['edit', 'create', 'str_replace_editor', 'apply_patch'], opencode: ['edit', 'write', 'apply_patch'] };
55
+
56
+ // Each host's payload -> the normalized event, or null when the call isn't one this event handles.
57
+ // Claude, Codex and Gemini filter tools with matchers at registration; the rest are filtered here.
58
+ function normalize(host, event, j) {
59
+ const cwd = pick(j, 'cwd') || (Array.isArray(j.workspace_roots) && j.workspace_roots[0]) || process.env.CURSOR_PROJECT_DIR || process.cwd();
60
+ const tool = j.tool || j.toolName || j.tool_name;
61
+ const toolArgs = () => (host === 'copilot' ? parseMaybe(j.toolArgs) : j.tool_input || j.args || {});
62
+ if (event === 'session-start') return { cwd };
63
+ if (SHELL_TOOLS[host] && event === 'pre-shell' && tool && !SHELL_TOOLS[host].includes(tool)) return null;
64
+ if (EDIT_TOOLS[host] && event !== 'pre-shell' && tool && !EDIT_TOOLS[host].includes(tool)) return null;
65
+
66
+ if (event === 'pre-shell') {
67
+ const command = host === 'cursor' ? j.command : pick(toolArgs(), 'command');
68
+ return typeof command === 'string' ? { command, cwd } : null;
69
+ }
70
+ let files;
71
+ if (host === 'codex') files = parsePatch(pick(j.tool_input, 'command', 'input', 'patch'));
72
+ else if (host === 'cursor') files = j.file_path ? [{ path: j.file_path, content: '' }] : [];
73
+ else if (host === 'claude' || host === 'gemini') files = claudeFiles(j.tool_input);
74
+ else files = looseFiles(toolArgs());
75
+ return files.length ? { files, cwd } : null;
76
+ }
77
+
78
+ const SESSION_JSON = {
79
+ claude: (c) => ({ hookSpecificOutput: { hookEventName: 'SessionStart', additionalContext: c } }),
80
+ codex: (c) => ({ hookSpecificOutput: { hookEventName: 'SessionStart', additionalContext: c } }),
81
+ gemini: (c) => ({ hookSpecificOutput: { hookEventName: 'SessionStart', additionalContext: c } }),
82
+ kete: (c) => ({ context: c }),
83
+ cursor: (c) => ({ additional_context: c }),
84
+ copilot: (c) => ({ additionalContext: c }),
85
+ };
86
+ const ALLOW_JSON = { cursor: { permission: 'allow' } };
87
+ const DENY_JSON = {
88
+ cursor: (reason) => ({ permission: 'deny', user_message: reason, agent_message: reason }),
89
+ copilot: (reason) => ({ permissionDecision: 'deny', permissionDecisionReason: reason }),
90
+ };
91
+
92
+ const EVENTS = ['pre-shell', 'pre-edit', 'post-edit', 'session-start'];
93
+ const allow = (host, event) => ({ code: 0, stdout: event.startsWith('pre-') && ALLOW_JSON[host] ? JSON.stringify(ALLOW_JSON[host]) : '', stderr: '' });
94
+
95
+ // Returns { code, stdout, stderr } so tests can drive it without a process.
96
+ function respond(host, hookName, input, hooksDir = __dirname, event = 'pre-shell') {
97
+ let verdict;
98
+ try {
99
+ if (!Object.prototype.hasOwnProperty.call(SESSION_JSON, host) && host !== 'opencode') throw new Error(`unknown host "${host}"`);
100
+ if (!EVENTS.includes(event)) throw new Error(`unknown event "${event}"`);
101
+ if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(hookName || '')) throw new Error(`bad hook name "${hookName}"`);
102
+ const normalized = normalize(host, event, input ? JSON.parse(input) : {});
103
+ if (!normalized) return allow(host, event);
104
+ const { check } = require(path.join(hooksDir, hookName, 'hook.js'));
105
+ verdict = check(normalized) || {};
106
+ } catch (e) {
107
+ const r = allow(host, event);
108
+ return { ...r, stderr: `kete-loom hook ${hookName}: ${e.message} (allowed)\n` };
109
+ }
110
+ if (event === 'session-start') {
111
+ return verdict.context && SESSION_JSON[host] ? { code: 0, stdout: JSON.stringify(SESSION_JSON[host](String(verdict.context))), stderr: '' } : allow(host, event);
112
+ }
113
+ if (!event.startsWith('pre-') || !verdict.block) return allow(host, event);
114
+ const reason = String(verdict.reason || `Blocked by kete-loom hook ${hookName}`);
115
+ return { code: 2, stdout: DENY_JSON[host] ? JSON.stringify(DENY_JSON[host](reason)) : '', stderr: `${reason}\n` };
116
+ }
117
+
118
+ if (require.main === module) {
119
+ const [host, hookName, event = 'pre-shell'] = process.argv.slice(2);
120
+ let input = '';
121
+ try {
122
+ input = fs.readFileSync(0, 'utf8');
123
+ } catch {
124
+ // no stdin: treated as an empty event
125
+ }
126
+ const r = respond(host, hookName, input, __dirname, event);
127
+ if (r.stdout) process.stdout.write(r.stdout);
128
+ if (r.stderr) process.stderr.write(r.stderr);
129
+ process.exitCode = r.code;
130
+ }
131
+
132
+ module.exports = { respond, normalize, parsePatch, EVENTS };
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "atlassian",
3
+ "description": "Atlassian's remote MCP server for Jira and Confluence: issues, pages and search, signed in with Atlassian OAuth.",
4
+ "version": "0.1.0",
5
+ "category": "integrations",
6
+ "risk": "network",
7
+ "transport": "http",
8
+ "url": "https://mcp.atlassian.com/v2/mcp",
9
+ "auth": "oauth",
10
+ "homepage": "https://support.atlassian.com/atlassian-rovo-mcp-server/docs/getting-started-with-the-atlassian-remote-mcp-server/"
11
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "chrome-devtools",
3
+ "description": "The Chrome DevTools MCP server: control and inspect a live Chrome, including console, network, performance traces and screenshots.",
4
+ "version": "0.1.0",
5
+ "category": "testing",
6
+ "risk": "runs-commands",
7
+ "transport": "stdio",
8
+ "command": "npx",
9
+ "args": [
10
+ "-y",
11
+ "chrome-devtools-mcp@latest"
12
+ ],
13
+ "auth": "none",
14
+ "requires": [
15
+ "node"
16
+ ],
17
+ "homepage": "https://github.com/ChromeDevTools/chrome-devtools-mcp"
18
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "cloudflare",
3
+ "description": "Cloudflare's remote MCP server for the Cloudflare API and docs, signed in with Cloudflare OAuth.",
4
+ "version": "0.1.0",
5
+ "category": "devops",
6
+ "risk": "network",
7
+ "transport": "http",
8
+ "url": "https://mcp.cloudflare.com/mcp",
9
+ "auth": "oauth",
10
+ "homepage": "https://developers.cloudflare.com/agents/model-context-protocol/mcp-servers-for-cloudflare/"
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "context7",
3
+ "description": "Context7 by Upstash: up-to-date, version-specific library documentation and code examples for the model. Works without a key at lower rate limits.",
4
+ "version": "0.1.0",
5
+ "category": "docs",
6
+ "risk": "network",
7
+ "transport": "http",
8
+ "url": "https://mcp.context7.com/mcp",
9
+ "auth": "oauth",
10
+ "homepage": "https://github.com/upstash/context7"
11
+ }
package/mcp/fetch.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "fetch",
3
+ "description": "The reference Fetch MCP server: fetch a web page and return it as Markdown for the model to read.",
4
+ "version": "0.1.0",
5
+ "category": "docs",
6
+ "risk": "runs-commands",
7
+ "transport": "stdio",
8
+ "command": "uvx",
9
+ "args": [
10
+ "mcp-server-fetch"
11
+ ],
12
+ "auth": "none",
13
+ "requires": [
14
+ "uvx"
15
+ ],
16
+ "homepage": "https://github.com/modelcontextprotocol/servers/tree/main/src/fetch"
17
+ }
package/mcp/figma.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "figma",
3
+ "description": "Figma's remote MCP server: bring design context (frames, components, variables) into code, signed in with Figma.",
4
+ "version": "0.1.0",
5
+ "category": "coding",
6
+ "risk": "network",
7
+ "transport": "http",
8
+ "url": "https://mcp.figma.com/mcp",
9
+ "auth": "oauth",
10
+ "homepage": "https://developers.figma.com/docs/figma-mcp-server/"
11
+ }
package/mcp/git.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "git",
3
+ "description": "The reference Git MCP server: read history, diffs and status and make commits in a local repository.",
4
+ "version": "0.1.0",
5
+ "category": "devops",
6
+ "risk": "runs-commands",
7
+ "transport": "stdio",
8
+ "command": "uvx",
9
+ "args": [
10
+ "mcp-server-git"
11
+ ],
12
+ "auth": "none",
13
+ "requires": [
14
+ "uvx"
15
+ ],
16
+ "homepage": "https://github.com/modelcontextprotocol/servers/tree/main/src/git"
17
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "github",
3
+ "description": "GitHub's official remote MCP server: repositories, issues, pull requests and Actions, signed in with GitHub OAuth.",
4
+ "version": "0.1.0",
5
+ "category": "integrations",
6
+ "risk": "network",
7
+ "transport": "http",
8
+ "url": "https://api.githubcopilot.com/mcp/",
9
+ "auth": "oauth",
10
+ "homepage": "https://github.com/github/github-mcp-server"
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "linear",
3
+ "description": "Linear's remote MCP server: read and update issues, projects and comments, signed in with Linear OAuth.",
4
+ "version": "0.1.0",
5
+ "category": "integrations",
6
+ "risk": "network",
7
+ "transport": "http",
8
+ "url": "https://mcp.linear.app/mcp",
9
+ "auth": "oauth",
10
+ "homepage": "https://linear.app/docs/mcp"
11
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "memory",
3
+ "description": "The reference Memory MCP server: a local knowledge graph the agent can store and recall facts in across sessions.",
4
+ "version": "0.1.0",
5
+ "category": "ai",
6
+ "risk": "runs-commands",
7
+ "transport": "stdio",
8
+ "command": "npx",
9
+ "args": [
10
+ "-y",
11
+ "@modelcontextprotocol/server-memory"
12
+ ],
13
+ "auth": "none",
14
+ "requires": [
15
+ "node"
16
+ ],
17
+ "homepage": "https://github.com/modelcontextprotocol/servers/tree/main/src/memory"
18
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "notion",
3
+ "description": "Notion's remote MCP server: search, read and edit pages and databases, signed in with Notion OAuth.",
4
+ "version": "0.1.0",
5
+ "category": "integrations",
6
+ "risk": "network",
7
+ "transport": "http",
8
+ "url": "https://mcp.notion.com/mcp",
9
+ "auth": "oauth",
10
+ "homepage": "https://developers.notion.com/docs/get-started-with-mcp"
11
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "playwright",
3
+ "description": "Microsoft's Playwright MCP server: drive a real browser through the accessibility tree to navigate, click, fill forms and check pages.",
4
+ "version": "0.1.0",
5
+ "category": "testing",
6
+ "risk": "runs-commands",
7
+ "transport": "stdio",
8
+ "command": "npx",
9
+ "args": [
10
+ "-y",
11
+ "@playwright/mcp@latest"
12
+ ],
13
+ "auth": "none",
14
+ "requires": [
15
+ "node"
16
+ ],
17
+ "homepage": "https://github.com/microsoft/playwright-mcp"
18
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "sentry",
3
+ "description": "Sentry's remote MCP server: search errors and issues, inspect events and triage, signed in with Sentry OAuth.",
4
+ "version": "0.1.0",
5
+ "category": "devops",
6
+ "risk": "network",
7
+ "transport": "http",
8
+ "url": "https://mcp.sentry.dev/mcp",
9
+ "auth": "oauth",
10
+ "homepage": "https://github.com/getsentry/sentry-mcp"
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "stripe",
3
+ "description": "Stripe's remote MCP server: work with the Stripe API and search Stripe docs, signed in with Stripe OAuth.",
4
+ "version": "0.1.0",
5
+ "category": "integrations",
6
+ "risk": "network",
7
+ "transport": "http",
8
+ "url": "https://mcp.stripe.com",
9
+ "auth": "oauth",
10
+ "homepage": "https://docs.stripe.com/mcp"
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "supabase",
3
+ "description": "Supabase's remote MCP server in read-only mode: inspect projects, schemas and data, and search the docs, signed in with Supabase OAuth.",
4
+ "version": "0.1.0",
5
+ "category": "data",
6
+ "risk": "network",
7
+ "transport": "http",
8
+ "url": "https://mcp.supabase.com/mcp?read_only=true",
9
+ "auth": "oauth",
10
+ "homepage": "https://supabase.com/docs/guides/getting-started/mcp"
11
+ }
package/mcp/time.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "time",
3
+ "description": "The reference Time MCP server: current time and timezone conversion.",
4
+ "version": "0.1.0",
5
+ "category": "meta",
6
+ "risk": "runs-commands",
7
+ "transport": "stdio",
8
+ "command": "uvx",
9
+ "args": [
10
+ "mcp-server-time"
11
+ ],
12
+ "auth": "none",
13
+ "requires": [
14
+ "uvx"
15
+ ],
16
+ "homepage": "https://github.com/modelcontextprotocol/servers/tree/main/src/time"
17
+ }
package/package.json CHANGED
@@ -1,6 +1,61 @@
1
1
  {
2
2
  "name": "@ketecode/loom",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "Kete Loom: curated, tested, portable Agent Skills, subagents, commands, rules, hooks and MCP configs. One source, installable in Claude Code, Codex, OpenCode, Cursor, Gemini CLI, GitHub Copilot and Kete Code.",
5
+ "license": "MIT",
6
+ "author": "Kete-org <support@ketecode.ai>",
7
+ "homepage": "https://ketecode.ai",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/kete-org/kete-loom.git"
11
+ },
12
+ "bugs": "https://github.com/kete-org/kete-loom/issues",
13
+ "keywords": [
14
+ "agent-skills",
15
+ "skills",
16
+ "claude-code",
17
+ "codex",
18
+ "opencode",
19
+ "cursor",
20
+ "gemini-cli",
21
+ "copilot",
22
+ "kete-code"
23
+ ],
24
+ "bin": {
25
+ "kete-loom": "bin/kete-loom.js"
26
+ },
27
+ "files": [
28
+ "bin/",
29
+ "scripts/lib/",
30
+ "skills/",
31
+ "agents/",
32
+ "commands/",
33
+ "hooks/",
34
+ "rules/",
35
+ "mcp/",
36
+ "profiles.json",
37
+ "schemas/",
38
+ "README.md",
39
+ "LICENSE"
40
+ ],
41
+ "engines": {
42
+ "node": ">=18"
43
+ },
44
+ "publishConfig": {
45
+ "access": "public"
46
+ },
47
+ "scripts": {
48
+ "lint": "node scripts/lint-skills.js",
49
+ "eval": "node scripts/run-evals.js",
50
+ "eval:estimate": "node scripts/run-evals.js --estimate",
51
+ "eval:live": "node scripts/run-evals.js --live",
52
+ "test": "node --test",
53
+ "check": "npm run lint && npm test && npm run eval",
54
+ "catalog": "node scripts/build-catalog.js",
55
+ "site": "node scripts/build-site.js",
56
+ "prepublishOnly": "npm run check"
57
+ },
58
+ "devDependencies": {
59
+ "@anthropic-ai/sdk": "^0.135.0"
60
+ }
61
+ }
package/profiles.json ADDED
@@ -0,0 +1,165 @@
1
+ {
2
+ "minimal": {
3
+ "description": "The essentials: test-first work, verification before merge, security review and code review.",
4
+ "skills": [
5
+ "tdd-workflow",
6
+ "verification-loop",
7
+ "security-review"
8
+ ],
9
+ "agents": [
10
+ "code-reviewer"
11
+ ],
12
+ "commands": [
13
+ "review",
14
+ "verify"
15
+ ],
16
+ "rules": [
17
+ "common",
18
+ "security"
19
+ ]
20
+ },
21
+ "core": {
22
+ "description": "Everyday development: the essentials, planning, git, onboarding and session handoff, plus the language and framework packs this project uses.",
23
+ "extends": [
24
+ "minimal"
25
+ ],
26
+ "skills": [
27
+ "search-first",
28
+ "git-workflow",
29
+ "conventional-commits",
30
+ "codebase-onboarding",
31
+ "session-handoff",
32
+ "error-handling-patterns",
33
+ "refactoring-safely"
34
+ ],
35
+ "agents": [
36
+ "planner",
37
+ "security-reviewer",
38
+ "refactor-cleaner"
39
+ ],
40
+ "commands": [
41
+ "build-fix",
42
+ "plan-feature",
43
+ "commit",
44
+ "pr-describe",
45
+ "tdd",
46
+ "explain",
47
+ "save-session",
48
+ "resume-session",
49
+ "test-coverage"
50
+ ],
51
+ "rules": [
52
+ "testing",
53
+ "git"
54
+ ],
55
+ "detect": true
56
+ },
57
+ "developer": {
58
+ "description": "Core plus the safety hooks: block dangerous commands, --no-verify, edits to protected files and secrets in code.",
59
+ "extends": [
60
+ "core"
61
+ ],
62
+ "hooks": [
63
+ "block-dangerous-commands",
64
+ "block-no-verify",
65
+ "protect-files",
66
+ "guard-secrets"
67
+ ]
68
+ },
69
+ "security": {
70
+ "description": "Security and compliance: every security and compliance item, the essentials, and the four safety hooks.",
71
+ "extends": [
72
+ "minimal"
73
+ ],
74
+ "categories": [
75
+ "security",
76
+ "compliance"
77
+ ],
78
+ "commands": [
79
+ "security-scan",
80
+ "threat-model",
81
+ "deps-audit"
82
+ ],
83
+ "rules": [
84
+ "security"
85
+ ],
86
+ "hooks": [
87
+ "block-dangerous-commands",
88
+ "block-no-verify",
89
+ "protect-files",
90
+ "guard-secrets"
91
+ ]
92
+ },
93
+ "ai": {
94
+ "description": "Building AI features: LLM apps, prompts, evals, RAG, MCP servers, agents and ML, on top of core.",
95
+ "extends": [
96
+ "core"
97
+ ],
98
+ "categories": [
99
+ "ai"
100
+ ]
101
+ },
102
+ "data": {
103
+ "description": "Data work: databases, pipelines, dbt, scraping, dashboards and analysis, on top of core.",
104
+ "extends": [
105
+ "core"
106
+ ],
107
+ "categories": [
108
+ "data"
109
+ ]
110
+ },
111
+ "business": {
112
+ "description": "Founders and product teams: marketing, SEO, research, investor materials, writing, PRDs and operations.",
113
+ "categories": [
114
+ "business",
115
+ "docs"
116
+ ],
117
+ "commands": [
118
+ "prd",
119
+ "postmortem"
120
+ ]
121
+ },
122
+ "full": {
123
+ "description": "Everything in Kete Loom, including every hook.",
124
+ "all": true
125
+ },
126
+ "mcp-web": {
127
+ "description": "MCP pack for web work: Playwright and Chrome DevTools browsers, Context7 library docs and Fetch.",
128
+ "mcp": [
129
+ "playwright",
130
+ "chrome-devtools",
131
+ "context7",
132
+ "fetch"
133
+ ]
134
+ },
135
+ "mcp-code": {
136
+ "description": "MCP pack for code hosting and errors: GitHub, local Git and Sentry.",
137
+ "mcp": [
138
+ "github",
139
+ "git",
140
+ "sentry"
141
+ ]
142
+ },
143
+ "mcp-team": {
144
+ "description": "MCP pack for team tools: Linear, Notion and Atlassian (Jira and Confluence).",
145
+ "mcp": [
146
+ "linear",
147
+ "notion",
148
+ "atlassian"
149
+ ]
150
+ },
151
+ "mcp-cloud": {
152
+ "description": "MCP pack for cloud and payments: Cloudflare, Supabase (read-only) and Stripe.",
153
+ "mcp": [
154
+ "cloudflare",
155
+ "supabase",
156
+ "stripe"
157
+ ]
158
+ },
159
+ "mcp-design": {
160
+ "description": "MCP pack for design handoff: Figma.",
161
+ "mcp": [
162
+ "figma"
163
+ ]
164
+ }
165
+ }
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: common
3
+ description: Always-on engineering rules for any project, covering scope, verification, honesty about results, safe changes and secrets.
4
+ license: MIT
5
+ metadata:
6
+ kete-loom/version: "0.1.0"
7
+ kete-loom/category: coding
8
+ kete-loom/risk: read-only
9
+ kete-loom/owner: "Kete-org"
10
+ ---
11
+
12
+ - Read the code you change and the code that calls it before editing. Search for an existing helper before writing a new one.
13
+ - Keep the change to what was asked. Mention other problems you notice instead of fixing them unasked.
14
+ - Match the surrounding code: its naming, structure, error handling and comment style.
15
+ - Prove a change works by running the project's own build, lint and tests. Never claim something passes without having run it.
16
+ - Report results as they are. If a test fails, a step was skipped or you are unsure, say so plainly.
17
+ - Never delete, skip or weaken a test to make a suite pass.
18
+ - Handle errors where they can be handled; never swallow them silently.
19
+ - Never put secrets, tokens or credentials in code, logs, commits or test fixtures. Read them from the environment or a secret store.
20
+ - Ask before anything destructive or hard to undo: deleting data, force-pushing, rewriting history, dropping tables, changing production config.
21
+ - Prefer small, reversible steps. Commit only when the user asks.
package/rules/cpp.md ADDED
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: cpp
3
+ description: Always-on rules for modern C++ code, covering ownership and RAII, undefined behaviour, bounds and lifetimes, concurrency, headers, and sanitizer-backed build and test checks.
4
+ license: MIT
5
+ metadata:
6
+ kete-loom/version: "0.1.0"
7
+ kete-loom/category: coding
8
+ kete-loom/risk: read-only
9
+ kete-loom/paths: "**/*.cpp, **/*.cc, **/*.cxx, **/*.c++, **/*.hpp, **/*.hh, **/*.hxx, **/*.h, **/*.ipp, **/*.ixx, **/*.cppm"
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ - Write to the C++ standard the project's build sets; do not use features newer than it.
14
+ - Manage every resource with RAII. Never use raw `new`/`delete` for ownership; use `std::make_unique`, `std::make_shared` or a container.
15
+ - Use `std::unique_ptr` by default; reach for `std::shared_ptr` only for genuinely shared ownership. Raw pointers and references never own.
16
+ - Follow the rule of zero; if you write one of destructor, copy or move operations, define or delete all five.
17
+ - Never return or store a reference, pointer, `std::string_view` or `std::span` to a local or temporary that will die first.
18
+ - Never use an iterator, pointer or reference into a container after an operation that may invalidate it, such as `push_back` or `erase`.
19
+ - Check bounds on untrusted indices; never index past the end. Prefer `std::array`, `std::vector` and `std::string` over C arrays and `char*` buffers.
20
+ - Never use `strcpy`, `sprintf`, `gets` or other unbounded C string functions.
21
+ - Initialize every variable, and avoid signed overflow, unchecked narrowing and C-style casts; use `static_cast` and friends.
22
+ - Guard all shared mutable state with `std::mutex` and `std::lock_guard`/`std::scoped_lock`, or `std::atomic`; a data race is undefined behaviour.
23
+ - Mark functions `noexcept` only when they truly cannot throw, and destructors must never throw.
24
+ - Mark overriding functions `override`, give polymorphic bases a virtual or protected destructor, and make single-argument constructors `explicit`.
25
+ - Never put `using namespace` in a header; use include guards or `#pragma once` as the project does.
26
+ - Build with warnings on (for example `-Wall -Wextra`) and fix them; run tests under AddressSanitizer and UndefinedBehaviorSanitizer (`-fsanitize=address,undefined`) when the toolchain supports them.
27
+ - Use the project's configured build system, formatter and test framework.
28
+
29
+ For more, load the cpp-patterns and cpp-testing skills.