@ketecode/loom 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (851) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +616 -2
  3. package/agents/accessibility-reviewer/AGENT.md +70 -0
  4. package/agents/accessibility-reviewer/evals/triggers.json +15 -0
  5. package/agents/agent-evaluator/AGENT.md +74 -0
  6. package/agents/agent-evaluator/evals/triggers.json +15 -0
  7. package/agents/architect/AGENT.md +82 -0
  8. package/agents/architect/evals/triggers.json +17 -0
  9. package/agents/billing-reviewer/AGENT.md +68 -0
  10. package/agents/billing-reviewer/evals/triggers.json +16 -0
  11. package/agents/code-reviewer/AGENT.md +51 -0
  12. package/agents/code-reviewer/evals/behavior.json +60 -0
  13. package/agents/code-reviewer/evals/triggers.json +14 -0
  14. package/agents/code-simplifier/AGENT.md +74 -0
  15. package/agents/code-simplifier/evals/triggers.json +15 -0
  16. package/agents/cpp-build-resolver/AGENT.md +73 -0
  17. package/agents/cpp-build-resolver/evals/triggers.json +16 -0
  18. package/agents/cpp-reviewer/AGENT.md +59 -0
  19. package/agents/cpp-reviewer/evals/triggers.json +16 -0
  20. package/agents/csharp-build-resolver/AGENT.md +84 -0
  21. package/agents/csharp-build-resolver/evals/triggers.json +17 -0
  22. package/agents/csharp-reviewer/AGENT.md +88 -0
  23. package/agents/csharp-reviewer/evals/triggers.json +17 -0
  24. package/agents/dart-build-resolver/AGENT.md +80 -0
  25. package/agents/dart-build-resolver/evals/triggers.json +17 -0
  26. package/agents/dart-reviewer/AGENT.md +66 -0
  27. package/agents/dart-reviewer/evals/triggers.json +17 -0
  28. package/agents/database-reviewer/AGENT.md +72 -0
  29. package/agents/database-reviewer/evals/triggers.json +16 -0
  30. package/agents/django-reviewer/AGENT.md +61 -0
  31. package/agents/django-reviewer/evals/triggers.json +15 -0
  32. package/agents/doc-updater/AGENT.md +92 -0
  33. package/agents/doc-updater/evals/triggers.json +14 -0
  34. package/agents/e2e-runner/AGENT.md +88 -0
  35. package/agents/e2e-runner/evals/triggers.json +16 -0
  36. package/agents/fastapi-reviewer/AGENT.md +63 -0
  37. package/agents/fastapi-reviewer/evals/triggers.json +15 -0
  38. package/agents/flutter-reviewer/AGENT.md +70 -0
  39. package/agents/flutter-reviewer/evals/triggers.json +15 -0
  40. package/agents/fsharp-build-resolver/AGENT.md +81 -0
  41. package/agents/fsharp-build-resolver/evals/triggers.json +15 -0
  42. package/agents/fsharp-reviewer/AGENT.md +77 -0
  43. package/agents/fsharp-reviewer/evals/triggers.json +15 -0
  44. package/agents/go-build-resolver/AGENT.md +85 -0
  45. package/agents/go-build-resolver/evals/triggers.json +16 -0
  46. package/agents/go-reviewer/AGENT.md +66 -0
  47. package/agents/go-reviewer/evals/triggers.json +16 -0
  48. package/agents/healthcare-reviewer/AGENT.md +65 -0
  49. package/agents/healthcare-reviewer/evals/triggers.json +16 -0
  50. package/agents/i18n-reviewer/AGENT.md +64 -0
  51. package/agents/i18n-reviewer/evals/triggers.json +16 -0
  52. package/agents/inbox-triager/AGENT.md +98 -0
  53. package/agents/inbox-triager/evals/triggers.json +16 -0
  54. package/agents/infra-reviewer/AGENT.md +93 -0
  55. package/agents/infra-reviewer/evals/triggers.json +15 -0
  56. package/agents/java-build-resolver/AGENT.md +82 -0
  57. package/agents/java-build-resolver/evals/triggers.json +16 -0
  58. package/agents/java-reviewer/AGENT.md +64 -0
  59. package/agents/java-reviewer/evals/triggers.json +16 -0
  60. package/agents/kotlin-build-resolver/AGENT.md +89 -0
  61. package/agents/kotlin-build-resolver/evals/triggers.json +16 -0
  62. package/agents/kotlin-reviewer/AGENT.md +75 -0
  63. package/agents/kotlin-reviewer/evals/triggers.json +16 -0
  64. package/agents/mle-reviewer/AGENT.md +68 -0
  65. package/agents/mle-reviewer/evals/triggers.json +16 -0
  66. package/agents/network-config-reviewer/AGENT.md +68 -0
  67. package/agents/network-config-reviewer/evals/triggers.json +17 -0
  68. package/agents/payments-reviewer/AGENT.md +64 -0
  69. package/agents/payments-reviewer/evals/triggers.json +16 -0
  70. package/agents/performance-optimizer/AGENT.md +86 -0
  71. package/agents/performance-optimizer/evals/triggers.json +16 -0
  72. package/agents/perl-build-resolver/AGENT.md +84 -0
  73. package/agents/perl-build-resolver/evals/triggers.json +15 -0
  74. package/agents/perl-reviewer/AGENT.md +77 -0
  75. package/agents/perl-reviewer/evals/triggers.json +15 -0
  76. package/agents/php-build-resolver/AGENT.md +88 -0
  77. package/agents/php-build-resolver/evals/triggers.json +16 -0
  78. package/agents/php-reviewer/AGENT.md +61 -0
  79. package/agents/php-reviewer/evals/triggers.json +15 -0
  80. package/agents/planner/AGENT.md +75 -0
  81. package/agents/planner/evals/triggers.json +17 -0
  82. package/agents/pr-test-analyzer/AGENT.md +82 -0
  83. package/agents/pr-test-analyzer/evals/triggers.json +16 -0
  84. package/agents/python-build-resolver/AGENT.md +87 -0
  85. package/agents/python-build-resolver/evals/triggers.json +16 -0
  86. package/agents/python-reviewer/AGENT.md +63 -0
  87. package/agents/python-reviewer/evals/triggers.json +15 -0
  88. package/agents/rag-reviewer/AGENT.md +71 -0
  89. package/agents/rag-reviewer/evals/triggers.json +16 -0
  90. package/agents/react-reviewer/AGENT.md +70 -0
  91. package/agents/react-reviewer/evals/triggers.json +16 -0
  92. package/agents/refactor-cleaner/AGENT.md +82 -0
  93. package/agents/refactor-cleaner/evals/triggers.json +16 -0
  94. package/agents/ruby-build-resolver/AGENT.md +93 -0
  95. package/agents/ruby-build-resolver/evals/triggers.json +16 -0
  96. package/agents/ruby-reviewer/AGENT.md +62 -0
  97. package/agents/ruby-reviewer/evals/triggers.json +16 -0
  98. package/agents/rust-build-resolver/AGENT.md +98 -0
  99. package/agents/rust-build-resolver/evals/triggers.json +16 -0
  100. package/agents/rust-reviewer/AGENT.md +78 -0
  101. package/agents/rust-reviewer/evals/triggers.json +15 -0
  102. package/agents/security-reviewer/AGENT.md +84 -0
  103. package/agents/security-reviewer/evals/triggers.json +16 -0
  104. package/agents/silent-failure-hunter/AGENT.md +66 -0
  105. package/agents/silent-failure-hunter/evals/triggers.json +16 -0
  106. package/agents/solidity-reviewer/AGENT.md +70 -0
  107. package/agents/solidity-reviewer/evals/triggers.json +16 -0
  108. package/agents/spec-reviewer/AGENT.md +95 -0
  109. package/agents/spec-reviewer/evals/behavior.json +57 -0
  110. package/agents/spec-reviewer/evals/triggers.json +16 -0
  111. package/agents/swift-build-resolver/AGENT.md +85 -0
  112. package/agents/swift-build-resolver/evals/triggers.json +15 -0
  113. package/agents/swift-reviewer/AGENT.md +75 -0
  114. package/agents/swift-reviewer/evals/triggers.json +15 -0
  115. package/agents/task-implementer/AGENT.md +89 -0
  116. package/agents/task-implementer/evals/behavior.json +47 -0
  117. package/agents/task-implementer/evals/triggers.json +16 -0
  118. package/agents/typescript-build-resolver/AGENT.md +76 -0
  119. package/agents/typescript-build-resolver/evals/triggers.json +15 -0
  120. package/agents/typescript-reviewer/AGENT.md +76 -0
  121. package/agents/typescript-reviewer/evals/triggers.json +15 -0
  122. package/agents/vue-reviewer/AGENT.md +75 -0
  123. package/agents/vue-reviewer/evals/triggers.json +15 -0
  124. package/bin/kete-loom.js +723 -0
  125. package/commands/aside.md +19 -0
  126. package/commands/brainstorm.md +25 -0
  127. package/commands/build-fix.md +26 -0
  128. package/commands/campaign.md +19 -0
  129. package/commands/changelog.md +36 -0
  130. package/commands/checkpoint.md +26 -0
  131. package/commands/codemap.md +25 -0
  132. package/commands/commit.md +26 -0
  133. package/commands/debug.md +27 -0
  134. package/commands/deps-audit.md +32 -0
  135. package/commands/dual-review.md +34 -0
  136. package/commands/epic-decompose.md +21 -0
  137. package/commands/explain.md +37 -0
  138. package/commands/feature-dev.md +23 -0
  139. package/commands/finish-branch.md +26 -0
  140. package/commands/fix-bug.md +38 -0
  141. package/commands/hookify.md +23 -0
  142. package/commands/i18n-check.md +39 -0
  143. package/commands/issue-sync.md +22 -0
  144. package/commands/jira.md +19 -0
  145. package/commands/learn.md +23 -0
  146. package/commands/loom.md +21 -0
  147. package/commands/loop.md +20 -0
  148. package/commands/model-route.md +27 -0
  149. package/commands/onboard.md +35 -0
  150. package/commands/orchestrate.md +21 -0
  151. package/commands/plan-feature.md +36 -0
  152. package/commands/postmortem.md +42 -0
  153. package/commands/pr-describe.md +39 -0
  154. package/commands/pr.md +22 -0
  155. package/commands/prd.md +41 -0
  156. package/commands/production-readiness.md +45 -0
  157. package/commands/project-init.md +21 -0
  158. package/commands/refactor-clean.md +24 -0
  159. package/commands/resume-session.md +22 -0
  160. package/commands/review.md +35 -0
  161. package/commands/save-session.md +37 -0
  162. package/commands/security-scan.md +32 -0
  163. package/commands/sessions.md +21 -0
  164. package/commands/skill-create.md +21 -0
  165. package/commands/tdd.md +36 -0
  166. package/commands/test-coverage.md +24 -0
  167. package/commands/threat-model.md +36 -0
  168. package/commands/update-docs.md +25 -0
  169. package/commands/usage-report.md +43 -0
  170. package/commands/verify.md +21 -0
  171. package/hooks/block-dangerous-commands/HOOK.md +30 -0
  172. package/hooks/block-dangerous-commands/cases.json +50 -0
  173. package/hooks/block-dangerous-commands/hook.js +75 -0
  174. package/hooks/block-foreground-servers/HOOK.md +34 -0
  175. package/hooks/block-foreground-servers/cases.json +31 -0
  176. package/hooks/block-foreground-servers/hook.js +41 -0
  177. package/hooks/block-no-verify/HOOK.md +25 -0
  178. package/hooks/block-no-verify/cases.json +30 -0
  179. package/hooks/block-no-verify/hook.js +43 -0
  180. package/hooks/capture-lessons/HOOK.md +24 -0
  181. package/hooks/capture-lessons/hook.js +48 -0
  182. package/hooks/format-on-edit/HOOK.md +24 -0
  183. package/hooks/format-on-edit/hook.js +89 -0
  184. package/hooks/guard-secrets/HOOK.md +19 -0
  185. package/hooks/guard-secrets/cases.json +110 -0
  186. package/hooks/guard-secrets/hook.js +44 -0
  187. package/hooks/load-session-context/HOOK.md +20 -0
  188. package/hooks/load-session-context/hook.js +56 -0
  189. package/hooks/notify-on-stop/HOOK.md +25 -0
  190. package/hooks/notify-on-stop/hook.js +27 -0
  191. package/hooks/protect-files/HOOK.md +24 -0
  192. package/hooks/protect-files/cases.json +27 -0
  193. package/hooks/protect-files/hook.js +39 -0
  194. package/hooks/protect-lint-config/HOOK.md +29 -0
  195. package/hooks/protect-lint-config/cases.json +18 -0
  196. package/hooks/protect-lint-config/fixtures/.eslintrc.json +1 -0
  197. package/hooks/protect-lint-config/fixtures/.golangci.yml +1 -0
  198. package/hooks/protect-lint-config/fixtures/.prettierrc +1 -0
  199. package/hooks/protect-lint-config/fixtures/.rubocop.yml +1 -0
  200. package/hooks/protect-lint-config/fixtures/biome.json +1 -0
  201. package/hooks/protect-lint-config/fixtures/eslint.config.mjs +1 -0
  202. package/hooks/protect-lint-config/fixtures/ruff.toml +1 -0
  203. package/hooks/protect-lint-config/hook.js +25 -0
  204. package/hooks/read-before-edit/HOOK.md +26 -0
  205. package/hooks/read-before-edit/cases.json +15 -0
  206. package/hooks/read-before-edit/hook.js +50 -0
  207. package/hooks/run.js +148 -0
  208. package/hooks/verify-before-stop/HOOK.md +32 -0
  209. package/hooks/verify-before-stop/hook.js +70 -0
  210. package/mcp/atlassian.json +11 -0
  211. package/mcp/chrome-devtools.json +18 -0
  212. package/mcp/clickhouse.json +11 -0
  213. package/mcp/cloudflare.json +11 -0
  214. package/mcp/context7.json +11 -0
  215. package/mcp/exa.json +11 -0
  216. package/mcp/fetch.json +17 -0
  217. package/mcp/figma.json +11 -0
  218. package/mcp/firecrawl.json +11 -0
  219. package/mcp/git.json +17 -0
  220. package/mcp/github.json +11 -0
  221. package/mcp/linear.json +11 -0
  222. package/mcp/memory.json +18 -0
  223. package/mcp/notion.json +11 -0
  224. package/mcp/playwright.json +18 -0
  225. package/mcp/sentry.json +11 -0
  226. package/mcp/stripe.json +11 -0
  227. package/mcp/supabase.json +11 -0
  228. package/mcp/time.json +17 -0
  229. package/mcp/vercel.json +11 -0
  230. package/package.json +61 -4
  231. package/profiles.json +214 -0
  232. package/rules/common.md +21 -0
  233. package/rules/cpp.md +29 -0
  234. package/rules/csharp.md +25 -0
  235. package/rules/dart.md +29 -0
  236. package/rules/fsharp.md +28 -0
  237. package/rules/git.md +26 -0
  238. package/rules/go.md +29 -0
  239. package/rules/java.md +29 -0
  240. package/rules/kotlin.md +27 -0
  241. package/rules/perl.md +26 -0
  242. package/rules/php.md +28 -0
  243. package/rules/python.md +30 -0
  244. package/rules/ruby.md +27 -0
  245. package/rules/rust.md +26 -0
  246. package/rules/security.md +29 -0
  247. package/rules/swift.md +28 -0
  248. package/rules/testing.md +25 -0
  249. package/rules/typescript.md +29 -0
  250. package/rules/use-skills.md +23 -0
  251. package/schemas/skill-frontmatter.schema.json +52 -0
  252. package/scripts/lib/audit.js +96 -0
  253. package/scripts/lib/behavior.js +52 -0
  254. package/scripts/lib/frontmatter.js +65 -0
  255. package/scripts/lib/hooks-install.js +294 -0
  256. package/scripts/lib/i18n.js +51 -0
  257. package/scripts/lib/inventory.js +85 -0
  258. package/scripts/lib/lint.js +180 -0
  259. package/scripts/lib/mcp-install.js +288 -0
  260. package/scripts/lib/profiles.js +128 -0
  261. package/scripts/lib/render.js +92 -0
  262. package/scripts/lib/rules-install.js +118 -0
  263. package/scripts/lib/skills.js +87 -0
  264. package/scripts/lib/targets.js +123 -0
  265. package/skills/accounting-api-integration/SKILL.md +81 -0
  266. package/skills/accounting-api-integration/evals/triggers.json +17 -0
  267. package/skills/accounting-api-integration/references/quickbooks.md +48 -0
  268. package/skills/accounting-api-integration/references/xero.md +45 -0
  269. package/skills/agent-failure-debugging/SKILL.md +92 -0
  270. package/skills/agent-failure-debugging/evals/triggers.json +16 -0
  271. package/skills/agent-harness-design/SKILL.md +125 -0
  272. package/skills/agent-harness-design/evals/triggers.json +21 -0
  273. package/skills/agent-outbound-messaging/SKILL.md +92 -0
  274. package/skills/agent-outbound-messaging/evals/triggers.json +16 -0
  275. package/skills/agent-security/SKILL.md +117 -0
  276. package/skills/agent-security/evals/triggers.json +16 -0
  277. package/skills/agent-security/references/host-configs.md +37 -0
  278. package/skills/ai-media-generation/SKILL.md +89 -0
  279. package/skills/ai-media-generation/evals/triggers.json +16 -0
  280. package/skills/ai-media-generation/references/job-pipeline.md +76 -0
  281. package/skills/angular-patterns/SKILL.md +122 -0
  282. package/skills/angular-patterns/evals/triggers.json +16 -0
  283. package/skills/api-client-integration/SKILL.md +86 -0
  284. package/skills/api-client-integration/evals/triggers.json +16 -0
  285. package/skills/api-client-integration/references/resilience.md +57 -0
  286. package/skills/api-design/SKILL.md +96 -0
  287. package/skills/api-design/evals/triggers.json +18 -0
  288. package/skills/api-design/references/conventions.md +133 -0
  289. package/skills/architecture-decision-records/SKILL.md +98 -0
  290. package/skills/architecture-decision-records/evals/triggers.json +17 -0
  291. package/skills/article-writing/SKILL.md +108 -0
  292. package/skills/article-writing/evals/triggers.json +16 -0
  293. package/skills/aspnet-core-patterns/SKILL.md +149 -0
  294. package/skills/aspnet-core-patterns/evals/triggers.json +16 -0
  295. package/skills/auth-patterns/SKILL.md +104 -0
  296. package/skills/auth-patterns/evals/triggers.json +17 -0
  297. package/skills/auth-patterns/references/oauth-oidc.md +64 -0
  298. package/skills/autonomous-loops/SKILL.md +99 -0
  299. package/skills/autonomous-loops/evals/triggers.json +14 -0
  300. package/skills/aws-patterns/SKILL.md +91 -0
  301. package/skills/aws-patterns/evals/triggers.json +16 -0
  302. package/skills/azure-patterns/SKILL.md +86 -0
  303. package/skills/azure-patterns/evals/triggers.json +16 -0
  304. package/skills/benchmark-methodology/SKILL.md +88 -0
  305. package/skills/benchmark-methodology/evals/triggers.json +16 -0
  306. package/skills/benchmark-methodology/references/language-harnesses.md +130 -0
  307. package/skills/bgp-diagnostics/SKILL.md +84 -0
  308. package/skills/bgp-diagnostics/evals/triggers.json +18 -0
  309. package/skills/bgp-diagnostics/references/bgp-reference.md +81 -0
  310. package/skills/bioinformatics-workflows/SKILL.md +108 -0
  311. package/skills/bioinformatics-workflows/evals/triggers.json +16 -0
  312. package/skills/bioinformatics-workflows/references/commands.md +71 -0
  313. package/skills/bioinformatics-workflows/references/formats.md +24 -0
  314. package/skills/bioinformatics-workflows/references/workflow-managers.md +107 -0
  315. package/skills/blender-automation/SKILL.md +100 -0
  316. package/skills/blender-automation/evals/triggers.json +16 -0
  317. package/skills/blender-automation/references/batch-and-render.md +77 -0
  318. package/skills/blender-automation/references/bpy-inspection.md +91 -0
  319. package/skills/blender-automation/references/rig-and-retarget-checks.md +23 -0
  320. package/skills/brand-strategy/SKILL.md +83 -0
  321. package/skills/brand-strategy/evals/triggers.json +16 -0
  322. package/skills/brand-voice/SKILL.md +112 -0
  323. package/skills/brand-voice/evals/triggers.json +16 -0
  324. package/skills/browser-qa/SKILL.md +99 -0
  325. package/skills/browser-qa/evals/triggers.json +16 -0
  326. package/skills/bun-runtime/SKILL.md +93 -0
  327. package/skills/bun-runtime/evals/triggers.json +16 -0
  328. package/skills/change-impact-analysis/SKILL.md +89 -0
  329. package/skills/change-impact-analysis/evals/triggers.json +16 -0
  330. package/skills/change-impact-analysis/references/graph-commands.md +28 -0
  331. package/skills/cisco-ios-config/SKILL.md +101 -0
  332. package/skills/cisco-ios-config/evals/triggers.json +18 -0
  333. package/skills/cisco-ios-config/references/verification.md +63 -0
  334. package/skills/clickhouse-patterns/SKILL.md +101 -0
  335. package/skills/clickhouse-patterns/evals/triggers.json +18 -0
  336. package/skills/clickhouse-patterns/references/engines-and-views.md +138 -0
  337. package/skills/clinical-decision-support/SKILL.md +90 -0
  338. package/skills/clinical-decision-support/evals/triggers.json +16 -0
  339. package/skills/clinical-decision-support/references/cds-hooks.md +76 -0
  340. package/skills/clinical-decision-support/references/regulatory-boundaries.md +37 -0
  341. package/skills/code-tour/SKILL.md +97 -0
  342. package/skills/code-tour/evals/triggers.json +14 -0
  343. package/skills/codebase-onboarding/SKILL.md +112 -0
  344. package/skills/codebase-onboarding/evals/triggers.json +14 -0
  345. package/skills/cold-outreach-sequences/SKILL.md +90 -0
  346. package/skills/cold-outreach-sequences/evals/triggers.json +16 -0
  347. package/skills/content-repurposing/SKILL.md +82 -0
  348. package/skills/content-repurposing/evals/triggers.json +16 -0
  349. package/skills/context-budget/SKILL.md +84 -0
  350. package/skills/context-budget/evals/triggers.json +14 -0
  351. package/skills/contract-drafting/SKILL.md +96 -0
  352. package/skills/contract-drafting/evals/triggers.json +16 -0
  353. package/skills/contract-drafting/references/term-sheets.md +68 -0
  354. package/skills/contract-first-development/SKILL.md +86 -0
  355. package/skills/contract-first-development/evals/triggers.json +16 -0
  356. package/skills/contract-first-development/references/tooling.md +46 -0
  357. package/skills/conventional-commits/SKILL.md +144 -0
  358. package/skills/conventional-commits/evals/triggers.json +16 -0
  359. package/skills/cpp-patterns/SKILL.md +129 -0
  360. package/skills/cpp-patterns/evals/triggers.json +16 -0
  361. package/skills/cpp-patterns/references/cmake-and-tooling.md +88 -0
  362. package/skills/cpp-patterns/references/undefined-behaviour.md +75 -0
  363. package/skills/cpp-testing/SKILL.md +131 -0
  364. package/skills/cpp-testing/evals/triggers.json +16 -0
  365. package/skills/csharp-patterns/SKILL.md +110 -0
  366. package/skills/csharp-patterns/evals/triggers.json +17 -0
  367. package/skills/csharp-patterns/references/analyzers.md +59 -0
  368. package/skills/csharp-testing/SKILL.md +85 -0
  369. package/skills/csharp-testing/evals/triggers.json +17 -0
  370. package/skills/csharp-testing/references/integration-tests.md +77 -0
  371. package/skills/css-architecture/SKILL.md +143 -0
  372. package/skills/css-architecture/evals/triggers.json +16 -0
  373. package/skills/customs-trade-compliance/SKILL.md +95 -0
  374. package/skills/customs-trade-compliance/evals/triggers.json +16 -0
  375. package/skills/customs-trade-compliance/references/incoterms-2020.md +42 -0
  376. package/skills/dart-patterns/SKILL.md +157 -0
  377. package/skills/dart-patterns/evals/triggers.json +18 -0
  378. package/skills/dart-testing/SKILL.md +164 -0
  379. package/skills/dart-testing/evals/triggers.json +18 -0
  380. package/skills/data-analysis-notebooks/SKILL.md +113 -0
  381. package/skills/data-analysis-notebooks/evals/triggers.json +16 -0
  382. package/skills/data-analysis-notebooks/references/dataframe-pitfalls.md +49 -0
  383. package/skills/data-analysis-notebooks/references/statistics-pitfalls.md +24 -0
  384. package/skills/data-pipelines/SKILL.md +90 -0
  385. package/skills/data-pipelines/evals/triggers.json +16 -0
  386. package/skills/data-pipelines/references/orchestrators.md +64 -0
  387. package/skills/database-migrations/SKILL.md +102 -0
  388. package/skills/database-migrations/evals/triggers.json +16 -0
  389. package/skills/database-migrations/references/recipes.md +98 -0
  390. package/skills/database-migrations/references/tools.md +21 -0
  391. package/skills/dbt-patterns/SKILL.md +96 -0
  392. package/skills/dbt-patterns/evals/triggers.json +16 -0
  393. package/skills/dbt-patterns/references/yaml-examples.md +114 -0
  394. package/skills/decision-council/SKILL.md +98 -0
  395. package/skills/decision-council/evals/triggers.json +16 -0
  396. package/skills/deep-research/SKILL.md +107 -0
  397. package/skills/deep-research/evals/triggers.json +14 -0
  398. package/skills/dependency-audit/SKILL.md +103 -0
  399. package/skills/dependency-audit/evals/triggers.json +16 -0
  400. package/skills/dependency-audit/references/tools.md +124 -0
  401. package/skills/deployment-strategies/SKILL.md +108 -0
  402. package/skills/deployment-strategies/evals/triggers.json +16 -0
  403. package/skills/design-brainstorming/SKILL.md +132 -0
  404. package/skills/design-brainstorming/evals/behavior.json +55 -0
  405. package/skills/design-brainstorming/evals/triggers.json +16 -0
  406. package/skills/design-brainstorming/references/visual-mockups.md +34 -0
  407. package/skills/desktop-app-testing/SKILL.md +104 -0
  408. package/skills/desktop-app-testing/evals/triggers.json +16 -0
  409. package/skills/desktop-app-testing/references/drivers.md +81 -0
  410. package/skills/django-patterns/SKILL.md +123 -0
  411. package/skills/django-patterns/evals/triggers.json +16 -0
  412. package/skills/docker-patterns/SKILL.md +132 -0
  413. package/skills/docker-patterns/evals/triggers.json +16 -0
  414. package/skills/docker-patterns/references/dockerfiles.md +105 -0
  415. package/skills/document-processing/SKILL.md +100 -0
  416. package/skills/document-processing/evals/triggers.json +17 -0
  417. package/skills/document-processing/references/extraction-and-ocr.md +71 -0
  418. package/skills/document-processing/references/forms-and-conversion.md +69 -0
  419. package/skills/document-processing/references/redaction.md +61 -0
  420. package/skills/e2e-testing-playwright/SKILL.md +94 -0
  421. package/skills/e2e-testing-playwright/evals/triggers.json +16 -0
  422. package/skills/e2e-testing-playwright/references/config-and-ci.md +129 -0
  423. package/skills/ef-core-patterns/SKILL.md +117 -0
  424. package/skills/ef-core-patterns/evals/triggers.json +16 -0
  425. package/skills/email-deliverability/SKILL.md +99 -0
  426. package/skills/email-deliverability/evals/triggers.json +17 -0
  427. package/skills/email-deliverability/references/dns-records.md +85 -0
  428. package/skills/energy-procurement/SKILL.md +106 -0
  429. package/skills/energy-procurement/evals/triggers.json +16 -0
  430. package/skills/error-handling-patterns/SKILL.md +112 -0
  431. package/skills/error-handling-patterns/evals/triggers.json +18 -0
  432. package/skills/error-handling-patterns/references/language-idioms.md +49 -0
  433. package/skills/estimation-and-scoping/SKILL.md +97 -0
  434. package/skills/estimation-and-scoping/evals/triggers.json +14 -0
  435. package/skills/evm-dapp-integration/SKILL.md +73 -0
  436. package/skills/evm-dapp-integration/evals/triggers.json +16 -0
  437. package/skills/fastapi-patterns/SKILL.md +127 -0
  438. package/skills/fastapi-patterns/evals/triggers.json +16 -0
  439. package/skills/ffmpeg-media-processing/SKILL.md +94 -0
  440. package/skills/ffmpeg-media-processing/evals/triggers.json +16 -0
  441. package/skills/ffmpeg-media-processing/references/recipes.md +112 -0
  442. package/skills/fhir-integration/SKILL.md +81 -0
  443. package/skills/fhir-integration/evals/triggers.json +16 -0
  444. package/skills/fhir-integration/references/search-and-bundles.md +73 -0
  445. package/skills/fhir-integration/references/smart-on-fhir.md +50 -0
  446. package/skills/finishing-a-branch/SKILL.md +127 -0
  447. package/skills/finishing-a-branch/evals/behavior.json +49 -0
  448. package/skills/finishing-a-branch/evals/triggers.json +16 -0
  449. package/skills/flask-patterns/SKILL.md +132 -0
  450. package/skills/flask-patterns/evals/triggers.json +16 -0
  451. package/skills/flutter-patterns/SKILL.md +99 -0
  452. package/skills/flutter-patterns/evals/triggers.json +16 -0
  453. package/skills/flutterwave-integration/SKILL.md +75 -0
  454. package/skills/flutterwave-integration/evals/triggers.json +16 -0
  455. package/skills/flutterwave-integration/references/api.md +73 -0
  456. package/skills/flutterwave-integration/references/webhooks.md +49 -0
  457. package/skills/freight-carrier-management/SKILL.md +107 -0
  458. package/skills/freight-carrier-management/evals/triggers.json +16 -0
  459. package/skills/fsharp-patterns/SKILL.md +133 -0
  460. package/skills/fsharp-patterns/evals/triggers.json +16 -0
  461. package/skills/fsharp-testing/SKILL.md +136 -0
  462. package/skills/fsharp-testing/evals/triggers.json +16 -0
  463. package/skills/gcp-patterns/SKILL.md +86 -0
  464. package/skills/gcp-patterns/evals/triggers.json +16 -0
  465. package/skills/git-workflow/SKILL.md +114 -0
  466. package/skills/git-workflow/evals/triggers.json +16 -0
  467. package/skills/git-worktrees/SKILL.md +130 -0
  468. package/skills/git-worktrees/evals/behavior.json +56 -0
  469. package/skills/git-worktrees/evals/triggers.json +16 -0
  470. package/skills/github-actions-ci/SKILL.md +117 -0
  471. package/skills/github-actions-ci/evals/triggers.json +16 -0
  472. package/skills/github-api-automation/SKILL.md +101 -0
  473. package/skills/github-api-automation/evals/triggers.json +17 -0
  474. package/skills/go-patterns/SKILL.md +118 -0
  475. package/skills/go-patterns/evals/triggers.json +17 -0
  476. package/skills/go-patterns/references/concurrency.md +162 -0
  477. package/skills/go-testing/SKILL.md +154 -0
  478. package/skills/go-testing/evals/triggers.json +17 -0
  479. package/skills/google-workspace-integration/SKILL.md +65 -0
  480. package/skills/google-workspace-integration/evals/triggers.json +17 -0
  481. package/skills/google-workspace-integration/references/api.md +121 -0
  482. package/skills/harmonyos-arkts/SKILL.md +117 -0
  483. package/skills/harmonyos-arkts/evals/triggers.json +16 -0
  484. package/skills/harmonyos-arkts/references/build-errors.md +42 -0
  485. package/skills/hexagonal-architecture/SKILL.md +89 -0
  486. package/skills/hexagonal-architecture/evals/triggers.json +17 -0
  487. package/skills/hipaa-compliance/SKILL.md +91 -0
  488. package/skills/hipaa-compliance/evals/triggers.json +18 -0
  489. package/skills/hipaa-compliance/references/safeguards.md +68 -0
  490. package/skills/hl7v2-integration/SKILL.md +69 -0
  491. package/skills/hl7v2-integration/evals/triggers.json +16 -0
  492. package/skills/hl7v2-integration/references/messages-and-ack.md +78 -0
  493. package/skills/homelab-network-setup/SKILL.md +125 -0
  494. package/skills/homelab-network-setup/evals/triggers.json +18 -0
  495. package/skills/homelab-network-setup/references/firewall-and-dns.md +45 -0
  496. package/skills/homelab-network-setup/references/wireguard.md +72 -0
  497. package/skills/hubtel-integration/SKILL.md +77 -0
  498. package/skills/hubtel-integration/evals/triggers.json +16 -0
  499. package/skills/hubtel-integration/references/api.md +92 -0
  500. package/skills/i18n-localization/SKILL.md +114 -0
  501. package/skills/i18n-localization/evals/triggers.json +16 -0
  502. package/skills/i18n-localization/references/libraries.md +52 -0
  503. package/skills/implementation-plans/SKILL.md +117 -0
  504. package/skills/implementation-plans/evals/behavior.json +54 -0
  505. package/skills/implementation-plans/evals/triggers.json +16 -0
  506. package/skills/incident-postmortem/SKILL.md +118 -0
  507. package/skills/incident-postmortem/evals/triggers.json +14 -0
  508. package/skills/inventory-demand-planning/SKILL.md +89 -0
  509. package/skills/inventory-demand-planning/evals/triggers.json +16 -0
  510. package/skills/inventory-demand-planning/references/formulas.md +62 -0
  511. package/skills/investor-materials/SKILL.md +127 -0
  512. package/skills/investor-materials/evals/triggers.json +16 -0
  513. package/skills/investor-materials/references/templates.md +74 -0
  514. package/skills/invoicing-and-tax/SKILL.md +84 -0
  515. package/skills/invoicing-and-tax/evals/triggers.json +17 -0
  516. package/skills/invoicing-and-tax/references/e-invoicing.md +24 -0
  517. package/skills/invoicing-and-tax/references/invoice-fields.md +38 -0
  518. package/skills/invoicing-and-tax/references/rounding.md +26 -0
  519. package/skills/ios-platform-features/SKILL.md +99 -0
  520. package/skills/ios-platform-features/evals/triggers.json +16 -0
  521. package/skills/ios-platform-features/references/foundation-models.md +90 -0
  522. package/skills/java-patterns/SKILL.md +141 -0
  523. package/skills/java-patterns/evals/triggers.json +17 -0
  524. package/skills/java-testing/SKILL.md +142 -0
  525. package/skills/java-testing/evals/triggers.json +16 -0
  526. package/skills/jetpack-compose-patterns/SKILL.md +88 -0
  527. package/skills/jetpack-compose-patterns/evals/triggers.json +16 -0
  528. package/skills/jira-integration/SKILL.md +92 -0
  529. package/skills/jira-integration/evals/triggers.json +17 -0
  530. package/skills/jpa-hibernate/SKILL.md +92 -0
  531. package/skills/jpa-hibernate/evals/triggers.json +18 -0
  532. package/skills/jpa-hibernate/references/mapping.md +99 -0
  533. package/skills/jvm-sql-mappers/SKILL.md +98 -0
  534. package/skills/jvm-sql-mappers/evals/triggers.json +16 -0
  535. package/skills/jvm-sql-mappers/references/examples.md +129 -0
  536. package/skills/kotlin-multiplatform/SKILL.md +97 -0
  537. package/skills/kotlin-multiplatform/evals/triggers.json +16 -0
  538. package/skills/kotlin-patterns/SKILL.md +128 -0
  539. package/skills/kotlin-patterns/evals/triggers.json +16 -0
  540. package/skills/kotlin-testing/SKILL.md +117 -0
  541. package/skills/kotlin-testing/evals/triggers.json +16 -0
  542. package/skills/ktor-patterns/SKILL.md +135 -0
  543. package/skills/ktor-patterns/evals/triggers.json +18 -0
  544. package/skills/kubernetes-patterns/SKILL.md +106 -0
  545. package/skills/kubernetes-patterns/evals/triggers.json +16 -0
  546. package/skills/kubernetes-patterns/references/manifests.md +115 -0
  547. package/skills/laravel-patterns/SKILL.md +136 -0
  548. package/skills/laravel-patterns/evals/triggers.json +16 -0
  549. package/skills/linear-integration/SKILL.md +98 -0
  550. package/skills/linear-integration/evals/triggers.json +17 -0
  551. package/skills/literature-review/SKILL.md +109 -0
  552. package/skills/literature-review/evals/triggers.json +16 -0
  553. package/skills/literature-review/references/appraisal.md +41 -0
  554. package/skills/literature-review/references/search-sources.md +39 -0
  555. package/skills/llm-app-patterns/SKILL.md +97 -0
  556. package/skills/llm-app-patterns/evals/triggers.json +17 -0
  557. package/skills/llm-evals/SKILL.md +98 -0
  558. package/skills/llm-evals/evals/triggers.json +16 -0
  559. package/skills/llm-evals/references/graders.md +66 -0
  560. package/skills/logistics-exception-management/SKILL.md +90 -0
  561. package/skills/logistics-exception-management/evals/triggers.json +16 -0
  562. package/skills/manim-animations/SKILL.md +106 -0
  563. package/skills/manim-animations/evals/triggers.json +16 -0
  564. package/skills/market-research/SKILL.md +117 -0
  565. package/skills/market-research/evals/triggers.json +16 -0
  566. package/skills/marketing-campaign/SKILL.md +111 -0
  567. package/skills/marketing-campaign/evals/triggers.json +16 -0
  568. package/skills/mcp-server-patterns/SKILL.md +127 -0
  569. package/skills/mcp-server-patterns/evals/triggers.json +18 -0
  570. package/skills/mcp-server-patterns/references/protocol-notes.md +68 -0
  571. package/skills/metrics-dashboards/SKILL.md +113 -0
  572. package/skills/metrics-dashboards/evals/triggers.json +16 -0
  573. package/skills/ml-experiment-workflow/SKILL.md +125 -0
  574. package/skills/ml-experiment-workflow/evals/triggers.json +16 -0
  575. package/skills/mobile-accessibility/SKILL.md +94 -0
  576. package/skills/mobile-accessibility/evals/triggers.json +16 -0
  577. package/skills/mongodb-patterns/SKILL.md +115 -0
  578. package/skills/mongodb-patterns/evals/triggers.json +18 -0
  579. package/skills/mongodb-patterns/references/indexes-and-aggregation.md +94 -0
  580. package/skills/mpesa-daraja-integration/SKILL.md +70 -0
  581. package/skills/mpesa-daraja-integration/evals/triggers.json +16 -0
  582. package/skills/mpesa-daraja-integration/references/api.md +103 -0
  583. package/skills/mpesa-daraja-integration/references/callbacks.md +74 -0
  584. package/skills/mtn-momo-integration/SKILL.md +66 -0
  585. package/skills/mtn-momo-integration/evals/triggers.json +16 -0
  586. package/skills/mtn-momo-integration/references/api.md +153 -0
  587. package/skills/mtn-momo-integration/references/callbacks.md +92 -0
  588. package/skills/mtn-momo-integration/references/sandbox-and-go-live.md +51 -0
  589. package/skills/mtn-momo-integration/scripts/sandbox-setup.js +79 -0
  590. package/skills/mysql-patterns/SKILL.md +96 -0
  591. package/skills/mysql-patterns/evals/triggers.json +16 -0
  592. package/skills/mysql-patterns/references/explain.md +34 -0
  593. package/skills/mysql-patterns/references/online-ddl.md +41 -0
  594. package/skills/nestjs-patterns/SKILL.md +114 -0
  595. package/skills/nestjs-patterns/evals/triggers.json +16 -0
  596. package/skills/nestjs-patterns/references/testing.md +68 -0
  597. package/skills/network-automation/SKILL.md +107 -0
  598. package/skills/network-automation/evals/triggers.json +18 -0
  599. package/skills/network-automation/references/tool-snippets.md +153 -0
  600. package/skills/network-design/SKILL.md +98 -0
  601. package/skills/network-design/evals/triggers.json +16 -0
  602. package/skills/network-troubleshooting/SKILL.md +152 -0
  603. package/skills/network-troubleshooting/evals/triggers.json +18 -0
  604. package/skills/network-troubleshooting/references/commands.md +33 -0
  605. package/skills/nextjs-patterns/SKILL.md +150 -0
  606. package/skills/nextjs-patterns/evals/triggers.json +18 -0
  607. package/skills/nextjs-patterns/references/caching.md +87 -0
  608. package/skills/node-backend-patterns/SKILL.md +103 -0
  609. package/skills/node-backend-patterns/evals/triggers.json +16 -0
  610. package/skills/node-backend-patterns/references/templates.md +122 -0
  611. package/skills/nuxt-patterns/SKILL.md +103 -0
  612. package/skills/nuxt-patterns/evals/triggers.json +16 -0
  613. package/skills/observability/SKILL.md +125 -0
  614. package/skills/observability/evals/triggers.json +17 -0
  615. package/skills/observability/references/otel-setup.md +87 -0
  616. package/skills/observability/references/slo-alerts.md +70 -0
  617. package/skills/open-source-release/SKILL.md +107 -0
  618. package/skills/open-source-release/evals/triggers.json +15 -0
  619. package/skills/open-source-release/references/history-scrub.md +65 -0
  620. package/skills/parallel-agent-orchestration/SKILL.md +106 -0
  621. package/skills/parallel-agent-orchestration/evals/triggers.json +14 -0
  622. package/skills/patent-research/SKILL.md +94 -0
  623. package/skills/patent-research/evals/triggers.json +16 -0
  624. package/skills/patent-research/references/databases-and-queries.md +52 -0
  625. package/skills/paystack-integration/SKILL.md +59 -0
  626. package/skills/paystack-integration/evals/triggers.json +14 -0
  627. package/skills/paystack-integration/references/api.md +73 -0
  628. package/skills/paystack-integration/references/mobile-money.md +50 -0
  629. package/skills/paystack-integration/references/webhooks.md +80 -0
  630. package/skills/pci-dss-scope/SKILL.md +103 -0
  631. package/skills/pci-dss-scope/evals/triggers.json +18 -0
  632. package/skills/pci-dss-scope/references/saq-and-data.md +36 -0
  633. package/skills/perl-patterns/SKILL.md +135 -0
  634. package/skills/perl-patterns/evals/triggers.json +18 -0
  635. package/skills/perl-testing/SKILL.md +126 -0
  636. package/skills/perl-testing/evals/triggers.json +17 -0
  637. package/skills/php-patterns/SKILL.md +116 -0
  638. package/skills/php-patterns/evals/triggers.json +16 -0
  639. package/skills/php-testing/SKILL.md +123 -0
  640. package/skills/php-testing/evals/triggers.json +16 -0
  641. package/skills/postgres-patterns/SKILL.md +103 -0
  642. package/skills/postgres-patterns/evals/triggers.json +17 -0
  643. package/skills/postgres-patterns/references/explain.md +59 -0
  644. package/skills/postgres-patterns/references/locks.md +53 -0
  645. package/skills/prd-writing/SKILL.md +124 -0
  646. package/skills/prd-writing/evals/triggers.json +15 -0
  647. package/skills/prisma-patterns/SKILL.md +83 -0
  648. package/skills/prisma-patterns/evals/triggers.json +18 -0
  649. package/skills/prisma-patterns/references/prisma-8.md +46 -0
  650. package/skills/prisma-patterns/references/workflow.md +50 -0
  651. package/skills/privacy-compliance/SKILL.md +121 -0
  652. package/skills/privacy-compliance/evals/triggers.json +18 -0
  653. package/skills/privacy-compliance/references/jurisdictions.md +51 -0
  654. package/skills/production-scheduling/SKILL.md +98 -0
  655. package/skills/production-scheduling/evals/triggers.json +16 -0
  656. package/skills/prompt-engineering/SKILL.md +92 -0
  657. package/skills/prompt-engineering/evals/triggers.json +16 -0
  658. package/skills/prospect-research/SKILL.md +87 -0
  659. package/skills/prospect-research/evals/triggers.json +16 -0
  660. package/skills/python-app-distribution/SKILL.md +107 -0
  661. package/skills/python-app-distribution/evals/triggers.json +16 -0
  662. package/skills/python-app-distribution/references/pypi-trusted-publishing.md +55 -0
  663. package/skills/python-app-distribution/references/windows-macos-signing.md +70 -0
  664. package/skills/python-patterns/SKILL.md +107 -0
  665. package/skills/python-patterns/evals/triggers.json +16 -0
  666. package/skills/python-patterns/references/tooling.md +101 -0
  667. package/skills/python-testing/SKILL.md +126 -0
  668. package/skills/python-testing/evals/triggers.json +16 -0
  669. package/skills/python-testing/references/mocking.md +71 -0
  670. package/skills/pytorch-patterns/SKILL.md +139 -0
  671. package/skills/pytorch-patterns/evals/triggers.json +16 -0
  672. package/skills/pytorch-patterns/references/debugging.md +39 -0
  673. package/skills/quality-nonconformance/SKILL.md +107 -0
  674. package/skills/quality-nonconformance/evals/triggers.json +16 -0
  675. package/skills/quality-nonconformance/references/8d-and-capa.md +46 -0
  676. package/skills/quarkus-patterns/SKILL.md +93 -0
  677. package/skills/quarkus-patterns/evals/triggers.json +18 -0
  678. package/skills/rag-pipeline-patterns/SKILL.md +117 -0
  679. package/skills/rag-pipeline-patterns/evals/triggers.json +18 -0
  680. package/skills/rag-pipeline-patterns/references/evaluation.md +37 -0
  681. package/skills/rag-pipeline-patterns/references/retrieval-recipes.md +78 -0
  682. package/skills/rails-patterns/SKILL.md +132 -0
  683. package/skills/rails-patterns/evals/triggers.json +16 -0
  684. package/skills/react-native-patterns/SKILL.md +101 -0
  685. package/skills/react-native-patterns/evals/triggers.json +16 -0
  686. package/skills/react-patterns/SKILL.md +140 -0
  687. package/skills/react-patterns/evals/triggers.json +18 -0
  688. package/skills/react-performance/SKILL.md +107 -0
  689. package/skills/react-performance/evals/triggers.json +18 -0
  690. package/skills/react-testing/SKILL.md +121 -0
  691. package/skills/react-testing/evals/triggers.json +18 -0
  692. package/skills/react-testing/references/msw.md +64 -0
  693. package/skills/react-testing/references/queries.md +41 -0
  694. package/skills/react-testing/references/setup.md +74 -0
  695. package/skills/recommender-systems/SKILL.md +119 -0
  696. package/skills/recommender-systems/evals/triggers.json +16 -0
  697. package/skills/recommender-systems/references/evaluation.md +39 -0
  698. package/skills/redis-patterns/SKILL.md +109 -0
  699. package/skills/redis-patterns/evals/triggers.json +18 -0
  700. package/skills/redis-patterns/references/operations.md +61 -0
  701. package/skills/refactoring-safely/SKILL.md +107 -0
  702. package/skills/refactoring-safely/evals/behavior.json +57 -0
  703. package/skills/refactoring-safely/evals/triggers.json +17 -0
  704. package/skills/release-management/SKILL.md +141 -0
  705. package/skills/release-management/evals/triggers.json +16 -0
  706. package/skills/remotion-video/SKILL.md +91 -0
  707. package/skills/remotion-video/evals/triggers.json +16 -0
  708. package/skills/remotion-video/references/lambda.md +66 -0
  709. package/skills/reproducible-dev-environments/SKILL.md +132 -0
  710. package/skills/reproducible-dev-environments/evals/triggers.json +16 -0
  711. package/skills/responding-to-code-review/SKILL.md +124 -0
  712. package/skills/responding-to-code-review/evals/behavior.json +54 -0
  713. package/skills/responding-to-code-review/evals/triggers.json +16 -0
  714. package/skills/returns-reverse-logistics/SKILL.md +97 -0
  715. package/skills/returns-reverse-logistics/evals/triggers.json +16 -0
  716. package/skills/ruby-patterns/SKILL.md +127 -0
  717. package/skills/ruby-patterns/evals/triggers.json +18 -0
  718. package/skills/ruby-testing/SKILL.md +113 -0
  719. package/skills/ruby-testing/evals/triggers.json +18 -0
  720. package/skills/runbook-writing/SKILL.md +101 -0
  721. package/skills/runbook-writing/evals/triggers.json +14 -0
  722. package/skills/rust-patterns/SKILL.md +118 -0
  723. package/skills/rust-patterns/evals/triggers.json +16 -0
  724. package/skills/rust-patterns/references/cargo-and-clippy.md +105 -0
  725. package/skills/rust-patterns/references/errors-and-traits.md +97 -0
  726. package/skills/rust-testing/SKILL.md +148 -0
  727. package/skills/rust-testing/evals/triggers.json +16 -0
  728. package/skills/rust-testing/references/fakes-proptest-async.md +113 -0
  729. package/skills/search-first/SKILL.md +73 -0
  730. package/skills/search-first/evals/triggers.json +14 -0
  731. package/skills/security-review/SKILL.md +58 -0
  732. package/skills/security-review/evals/behavior.json +56 -0
  733. package/skills/security-review/evals/triggers.json +14 -0
  734. package/skills/security-review/references/checklist.md +54 -0
  735. package/skills/security-review/scripts/scan-secrets.js +79 -0
  736. package/skills/seo-audit/SKILL.md +111 -0
  737. package/skills/seo-audit/evals/triggers.json +16 -0
  738. package/skills/seo-audit/references/checks.md +65 -0
  739. package/skills/session-handoff/SKILL.md +101 -0
  740. package/skills/session-handoff/evals/behavior.json +55 -0
  741. package/skills/session-handoff/evals/triggers.json +14 -0
  742. package/skills/skill-authoring/SKILL.md +98 -0
  743. package/skills/skill-authoring/evals/triggers.json +15 -0
  744. package/skills/skill-authoring/references/frontmatter.md +40 -0
  745. package/skills/skill-authoring/references/pressure-testing.md +87 -0
  746. package/skills/slack-app-integration/SKILL.md +108 -0
  747. package/skills/slack-app-integration/evals/triggers.json +17 -0
  748. package/skills/slide-decks/SKILL.md +107 -0
  749. package/skills/slide-decks/evals/triggers.json +18 -0
  750. package/skills/slide-decks/references/html-decks.md +86 -0
  751. package/skills/slide-decks/references/layouts.md +45 -0
  752. package/skills/slide-decks/references/pptx.md +87 -0
  753. package/skills/smart-contract-security/SKILL.md +110 -0
  754. package/skills/smart-contract-security/evals/triggers.json +16 -0
  755. package/skills/smart-contract-security/references/vulnerability-checklist.md +79 -0
  756. package/skills/social-media-publishing/SKILL.md +84 -0
  757. package/skills/social-media-publishing/evals/triggers.json +17 -0
  758. package/skills/social-media-publishing/references/platform-apis.md +116 -0
  759. package/skills/solidity-patterns/SKILL.md +95 -0
  760. package/skills/solidity-patterns/evals/triggers.json +16 -0
  761. package/skills/spring-boot-patterns/SKILL.md +128 -0
  762. package/skills/spring-boot-patterns/evals/triggers.json +18 -0
  763. package/skills/spring-boot-patterns/references/testing.md +72 -0
  764. package/skills/stripe-integration/SKILL.md +69 -0
  765. package/skills/stripe-integration/evals/triggers.json +16 -0
  766. package/skills/stripe-integration/references/api.md +71 -0
  767. package/skills/stripe-integration/references/billing.md +58 -0
  768. package/skills/stripe-integration/references/webhooks.md +76 -0
  769. package/skills/subagent-driven-development/SKILL.md +109 -0
  770. package/skills/subagent-driven-development/evals/behavior.json +53 -0
  771. package/skills/subagent-driven-development/evals/triggers.json +15 -0
  772. package/skills/subagent-driven-development/references/implementer-brief.md +60 -0
  773. package/skills/subagent-driven-development/references/reviewer-briefs.md +52 -0
  774. package/skills/subscription-billing-ops/SKILL.md +118 -0
  775. package/skills/subscription-billing-ops/evals/triggers.json +17 -0
  776. package/skills/subscription-billing-ops/references/proration.md +47 -0
  777. package/skills/subscription-billing-ops/references/revenue-metrics.md +38 -0
  778. package/skills/svelte-patterns/SKILL.md +122 -0
  779. package/skills/svelte-patterns/evals/triggers.json +16 -0
  780. package/skills/swift-patterns/SKILL.md +113 -0
  781. package/skills/swift-patterns/evals/triggers.json +16 -0
  782. package/skills/swift-patterns/references/concurrency-migration.md +40 -0
  783. package/skills/swift-testing/SKILL.md +121 -0
  784. package/skills/swift-testing/evals/triggers.json +16 -0
  785. package/skills/swift-testing/references/swift-testing-cheatsheet.md +81 -0
  786. package/skills/swiftui-patterns/SKILL.md +102 -0
  787. package/skills/swiftui-patterns/evals/triggers.json +16 -0
  788. package/skills/systematic-debugging/SKILL.md +92 -0
  789. package/skills/systematic-debugging/evals/behavior.json +59 -0
  790. package/skills/systematic-debugging/evals/triggers.json +16 -0
  791. package/skills/systematic-debugging/references/condition-waiting.md +52 -0
  792. package/skills/systematic-debugging/references/root-cause-tracing.md +49 -0
  793. package/skills/systematic-debugging/references/test-pollution.md +46 -0
  794. package/skills/tdd-workflow/SKILL.md +69 -0
  795. package/skills/tdd-workflow/evals/behavior.json +55 -0
  796. package/skills/tdd-workflow/evals/triggers.json +15 -0
  797. package/skills/tdd-workflow/references/testing-anti-patterns.md +87 -0
  798. package/skills/technical-writing/SKILL.md +95 -0
  799. package/skills/technical-writing/evals/triggers.json +14 -0
  800. package/skills/terraform-patterns/SKILL.md +122 -0
  801. package/skills/terraform-patterns/evals/triggers.json +16 -0
  802. package/skills/terraform-patterns/references/backends.md +67 -0
  803. package/skills/test-coverage-improvement/SKILL.md +107 -0
  804. package/skills/test-coverage-improvement/evals/triggers.json +16 -0
  805. package/skills/threat-modeling/SKILL.md +113 -0
  806. package/skills/threat-modeling/evals/triggers.json +16 -0
  807. package/skills/transactional-email/SKILL.md +68 -0
  808. package/skills/transactional-email/evals/triggers.json +17 -0
  809. package/skills/transactional-email/references/providers.md +63 -0
  810. package/skills/typescript-patterns/SKILL.md +122 -0
  811. package/skills/typescript-patterns/evals/triggers.json +16 -0
  812. package/skills/typescript-testing/SKILL.md +101 -0
  813. package/skills/typescript-testing/evals/triggers.json +16 -0
  814. package/skills/ui-demo-recording/SKILL.md +93 -0
  815. package/skills/ui-demo-recording/evals/triggers.json +16 -0
  816. package/skills/ui-demo-recording/references/cursor-and-captions.md +48 -0
  817. package/skills/ui-demo-recording/references/playwright-recording.md +63 -0
  818. package/skills/ui-demo-recording/references/post-processing.md +57 -0
  819. package/skills/ui-design-polish/SKILL.md +113 -0
  820. package/skills/ui-design-polish/evals/triggers.json +18 -0
  821. package/skills/ui-design-polish/references/detail-checklist.md +45 -0
  822. package/skills/ui-design-polish/references/tokens.md +68 -0
  823. package/skills/ui-flow-audit/SKILL.md +112 -0
  824. package/skills/ui-flow-audit/evals/triggers.json +17 -0
  825. package/skills/ui-motion/SKILL.md +103 -0
  826. package/skills/ui-motion/evals/triggers.json +18 -0
  827. package/skills/ui-motion/references/patterns.md +138 -0
  828. package/skills/ui-motion/references/tokens.md +52 -0
  829. package/skills/unicode-text-processing/SKILL.md +103 -0
  830. package/skills/unicode-text-processing/evals/triggers.json +17 -0
  831. package/skills/unicode-text-processing/references/apis.md +89 -0
  832. package/skills/unicode-text-processing/references/script-notes.md +50 -0
  833. package/skills/verification-loop/SKILL.md +70 -0
  834. package/skills/verification-loop/evals/behavior.json +52 -0
  835. package/skills/verification-loop/evals/triggers.json +14 -0
  836. package/skills/verification-loop/scripts/detect-checks.js +102 -0
  837. package/skills/video-editing/SKILL.md +111 -0
  838. package/skills/video-editing/evals/triggers.json +16 -0
  839. package/skills/video-editing/references/edl-and-logging.md +44 -0
  840. package/skills/video-editing/references/ffmpeg-edit-recipes.md +92 -0
  841. package/skills/video-editing/references/resolve-scripting.md +53 -0
  842. package/skills/vite-patterns/SKILL.md +117 -0
  843. package/skills/vite-patterns/evals/triggers.json +16 -0
  844. package/skills/vue-patterns/SKILL.md +104 -0
  845. package/skills/vue-patterns/evals/triggers.json +16 -0
  846. package/skills/web-accessibility/SKILL.md +119 -0
  847. package/skills/web-accessibility/evals/triggers.json +16 -0
  848. package/skills/web-performance/SKILL.md +107 -0
  849. package/skills/web-performance/evals/triggers.json +16 -0
  850. package/skills/web-scraping/SKILL.md +80 -0
  851. package/skills/web-scraping/evals/triggers.json +16 -0
@@ -0,0 +1,129 @@
1
+ # Playwright config and CI
2
+
3
+ Read this when creating or reworking `playwright.config.ts` or the CI job. Check option names against playwright.dev/docs/test-configuration for the installed version.
4
+
5
+ ## Starting config
6
+
7
+ ```ts
8
+ import { defineConfig, devices } from '@playwright/test';
9
+
10
+ export default defineConfig({
11
+ testDir: './e2e',
12
+ fullyParallel: true,
13
+ forbidOnly: !!process.env.CI,
14
+ retries: process.env.CI ? 2 : 0,
15
+ workers: process.env.CI ? 1 : undefined,
16
+ reporter: process.env.CI ? [['html', { open: 'never' }], ['github']] : 'html',
17
+ use: {
18
+ baseURL: process.env.BASE_URL ?? 'http://localhost:3000',
19
+ trace: 'on-first-retry',
20
+ screenshot: 'only-on-failure',
21
+ },
22
+ projects: [
23
+ { name: 'setup', testMatch: /.*\.setup\.ts/ },
24
+ {
25
+ name: 'chromium',
26
+ use: { ...devices['Desktop Chrome'], storageState: 'playwright/.auth/user.json' },
27
+ dependencies: ['setup'],
28
+ },
29
+ ],
30
+ webServer: {
31
+ command: 'npm run start',
32
+ url: 'http://localhost:3000',
33
+ reuseExistingServer: !process.env.CI,
34
+ },
35
+ });
36
+ ```
37
+
38
+ Add Firefox, WebKit or mobile projects (`devices['Pixel 7']`, `devices['iPhone 15']`) only when the product supports them; each project multiplies run time.
39
+
40
+ ## Auth setup file
41
+
42
+ ```ts
43
+ // e2e/auth.setup.ts
44
+ import { test as setup, expect } from '@playwright/test';
45
+
46
+ const authFile = 'playwright/.auth/user.json';
47
+
48
+ setup('authenticate', async ({ page }) => {
49
+ await page.goto('/login');
50
+ await page.getByLabel('Email').fill(process.env.E2E_USER!);
51
+ await page.getByLabel('Password').fill(process.env.E2E_PASSWORD!);
52
+ await page.getByRole('button', { name: 'Sign in' }).click();
53
+ await expect(page.getByRole('button', { name: 'Account' })).toBeVisible();
54
+ await page.context().storageState({ path: authFile });
55
+ });
56
+ ```
57
+
58
+ ## Custom fixture
59
+
60
+ ```ts
61
+ // e2e/fixtures.ts
62
+ import { test as base } from '@playwright/test';
63
+
64
+ type Fixtures = { project: { id: string; name: string } };
65
+
66
+ export const test = base.extend<Fixtures>({
67
+ project: async ({ request }, use, testInfo) => {
68
+ const name = `e2e-${testInfo.testId}`;
69
+ const res = await request.post('/api/projects', { data: { name } });
70
+ const project = await res.json();
71
+ await use(project);
72
+ await request.delete(`/api/projects/${project.id}`);
73
+ },
74
+ });
75
+ export { expect } from '@playwright/test';
76
+ ```
77
+
78
+ ## GitHub Actions with sharding
79
+
80
+ ```yaml
81
+ name: e2e
82
+ on: [push, pull_request]
83
+ jobs:
84
+ e2e:
85
+ runs-on: ubuntu-latest
86
+ timeout-minutes: 30
87
+ strategy:
88
+ fail-fast: false
89
+ matrix:
90
+ shard: [1/4, 2/4, 3/4, 4/4]
91
+ steps:
92
+ - uses: actions/checkout@v4
93
+ - uses: actions/setup-node@v4
94
+ with:
95
+ node-version: 20
96
+ cache: npm
97
+ - run: npm ci
98
+ - run: npx playwright install --with-deps
99
+ - run: npx playwright test --shard=${{ matrix.shard }}
100
+ env:
101
+ E2E_USER: ${{ secrets.E2E_USER }}
102
+ E2E_PASSWORD: ${{ secrets.E2E_PASSWORD }}
103
+ - uses: actions/upload-artifact@v4
104
+ if: ${{ !cancelled() }}
105
+ with:
106
+ name: playwright-report-${{ strategy.job-index }}
107
+ path: |
108
+ playwright-report/
109
+ test-results/
110
+ retention-days: 14
111
+ ```
112
+
113
+ To combine shard reports into one, use the `blob` reporter on CI and `npx playwright merge-reports --reporter html ./all-blob-reports` in a follow-up job.
114
+
115
+ ## Useful commands
116
+
117
+ | Goal | Command |
118
+ |---|---|
119
+ | Run one file | `npx playwright test e2e/checkout.spec.ts` |
120
+ | Run by title | `npx playwright test -g "applies coupon"` |
121
+ | Debug step by step | `npx playwright test --debug` |
122
+ | Interactive runner | `npx playwright test --ui` |
123
+ | Re-run last failures | `npx playwright test --last-failed` |
124
+ | Stress a test | `npx playwright test e2e/x.spec.ts --repeat-each=20` |
125
+ | Open a trace | `npx playwright show-trace test-results/.../trace.zip` |
126
+ | Open the report | `npx playwright show-report` |
127
+ | Record a draft test | `npx playwright codegen http://localhost:3000` |
128
+
129
+ Treat `codegen` output as a draft: replace its locators with role-based ones and add assertions.
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: ef-core-patterns
3
+ description: Entity Framework Core data-access rules for .NET - scoped DbContext lifetime, pooling and IDbContextFactory, AsNoTracking for read paths, LINQ that translates to SQL instead of throwing or evaluating on the client, projections, Include versus AsSplitQuery for N+1 and cartesian explosion, ExecuteUpdate and ExecuteDelete for bulk writes, safe dotnet ef migrations and idempotent scripts, and optimistic concurrency with row versions. Use when writing or reviewing EF Core queries or DbContext setup, fixing slow or untranslatable LINQ, adding or deploying an EF Core migration, or handling DbUpdateConcurrencyException.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs the .NET SDK and the dotnet-ef tool for migrations. Written for EF Core 8 and later.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: coding
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/requires: "dotnet"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # EF Core patterns
15
+
16
+ Use EF Core so every query is one you would have written by hand, and every write is safe under concurrency. For the web host around it follow `aspnet-core-patterns`; for engine-specific SQL tuning follow `postgres-patterns` or `mysql-patterns`.
17
+
18
+ ## 0. Before you change anything
19
+
20
+ 1. Read the `Microsoft.EntityFrameworkCore.*` package versions and the provider (SqlServer, Npgsql, Sqlite, Pomelo MySQL). Behaviour differs by provider.
21
+ 2. Turn on SQL logging locally so you can see what each query does:
22
+ ```csharp
23
+ options.UseNpgsql(cs).LogTo(Console.WriteLine, LogLevel.Information)
24
+ .EnableSensitiveDataLogging(env.IsDevelopment());
25
+ ```
26
+ 3. Run `dotnet test`. If it fails before you start, **stop and tell the user**.
27
+
28
+ ## 1. DbContext lifetime
29
+
30
+ - Web apps: `AddDbContext<AppDbContext>` registers it **scoped**, one per request. For hot paths, `AddDbContextPool<AppDbContext>` reuses instances; pooled contexts must not hold per-request state in fields.
31
+ - Singletons, background services, Blazor Server components and parallel work: inject `IDbContextFactory<AppDbContext>` (`AddDbContextFactory`) and `await using var db = await factory.CreateDbContextAsync(ct);`.
32
+ - A `DbContext` is not thread-safe. Never run two queries on the same context at once (`Task.WhenAll` over one context throws). Use separate contexts.
33
+ - Keep a context short-lived. A long-lived context's change tracker grows and serves stale data.
34
+
35
+ ## 2. Tracking vs no-tracking
36
+
37
+ | Path | Use |
38
+ |---|---|
39
+ | Read-only list or detail | `AsNoTracking()` or a `Select` projection |
40
+ | Read then update the same entities | Tracking (default), then `SaveChangesAsync` |
41
+ | Read-only with repeated references you need deduplicated | `AsNoTrackingWithIdentityResolution()` |
42
+
43
+ - Set `UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking)` on the context only if the whole codebase is read-heavy and every update path re-attaches explicitly. Otherwise opt in per query.
44
+ - Projections (`Select(o => new OrderDto(...))`) are never tracked and fetch only the columns used. Prefer them for APIs.
45
+
46
+ ## 3. Query translation pitfalls
47
+
48
+ 1. Keep the query `IQueryable` until the end. `ToList()`, `AsEnumerable()` or `IEnumerable<T>` parameters in the middle pull every row into memory and filter in C#.
49
+ 2. Methods EF can't translate (your own C# helpers, most string formatting, complex `GroupBy` shapes) throw `InvalidOperationException: ... could not be translated`. Rewrite with translatable operators, move the logic to after a projection that already limits rows, or use `FromSql` with parameters.
50
+ 3. Client evaluation is allowed only in the final `Select`. Don't rely on it for filtering.
51
+ 4. `string.Equals(a, b, StringComparison.OrdinalIgnoreCase)` usually doesn't translate; use the column's collation, `EF.Functions.ILike` (Npgsql) or `EF.Functions.Like`.
52
+ 5. `Contains` over a local list becomes `IN` or a parameterised array; keep lists bounded.
53
+ 6. Raw SQL: `FromSql($"... WHERE id = {id}")` and `ExecuteSql($"...")` parameterise interpolated values. `FromSqlRaw` / `ExecuteSqlRaw` with string concatenation is SQL injection.
54
+ 7. Always `await` the async operators (`ToListAsync`, `FirstOrDefaultAsync`, `SaveChangesAsync`) and pass the `CancellationToken`.
55
+ 8. Paginate with `OrderBy` then `Skip`/`Take` (or keyset `Where(x => x.Id > lastId)` for deep pages). `Skip` without `OrderBy` gives unstable pages.
56
+
57
+ ## 4. N+1, Include and split queries
58
+
59
+ - Lazy loading proxies make N+1s invisible. If the project has `UseLazyLoadingProxies()`, don't add more reliance on it; load explicitly.
60
+ - Load what you need: `Include(o => o.Lines).ThenInclude(l => l.Product)`, or better, a projection that selects just the fields.
61
+ - Several collection `Include`s in one query cause cartesian explosion (rows multiply). EF warns about this. Use `AsSplitQuery()` on that query, or `UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery)` globally with `AsSingleQuery()` where you need one round trip.
62
+ - Split queries are not one snapshot: data can change between them. Use a transaction with a suitable isolation level when consistency matters, and always `OrderBy` before `Skip`/`Take` with split queries.
63
+ - Filtered include: `Include(o => o.Lines.Where(l => !l.Cancelled))`.
64
+
65
+ ## 5. Writes
66
+
67
+ - Bulk changes without loading: `ExecuteUpdateAsync(s => s.SetProperty(o => o.Status, OrderStatus.Archived), ct)` and `ExecuteDeleteAsync(ct)`. They bypass the change tracker, interceptors that hook `SaveChanges`, and concurrency checks. Say so when you use them.
68
+ - One `SaveChangesAsync` per unit of work; it runs in a transaction. Use `await using var tx = await db.Database.BeginTransactionAsync(ct);` only when you span several `SaveChanges` or raw SQL.
69
+ - With retrying execution strategies (`EnableRetryOnFailure`), wrap manual transactions in `db.Database.CreateExecutionStrategy().ExecuteAsync(...)`.
70
+
71
+ ## 6. Concurrency tokens
72
+
73
+ ```csharp
74
+ // SQL Server rowversion
75
+ [Timestamp] public byte[] RowVersion { get; set; } = [];
76
+ // Any provider: an app-managed token
77
+ modelBuilder.Entity<Account>().Property(a => a.Version).IsConcurrencyToken();
78
+ // Npgsql: a uint property marked as row version maps to the xmin system column
79
+ public uint Version { get; set; }
80
+ modelBuilder.Entity<Account>().Property(a => a.Version).IsRowVersion();
81
+ ```
82
+
83
+ - Handle `DbUpdateConcurrencyException`: reload the entry (`entry.GetDatabaseValuesAsync()`), then retry, merge or return 409 to the client. Never catch and ignore it.
84
+ - APIs send the token to the client (ETag or a field) and require it on update, so stale writes are rejected.
85
+ - An app-managed token must be changed on every update (for example `Version = Guid.NewGuid()` or an incremented int).
86
+
87
+ ## 7. Migrations
88
+
89
+ 1. Create: `dotnet ef migrations add AddInvoiceTable` (add `--project` / `--startup-project` when the context lives in another project).
90
+ 2. **Read the generated migration.** EF can scaffold a rename as drop plus add; edit it to `RenameColumn` when that happens. Check for data loss before you commit it.
91
+ 3. Never edit a migration that has been applied in a shared environment; add a new one.
92
+ 4. Deploy with an idempotent script or a bundle, reviewed and run by the pipeline:
93
+ ```
94
+ dotnet ef migrations script --idempotent -o migrate.sql
95
+ dotnet ef migrations bundle --self-contained
96
+ ```
97
+ Prefer this over `Database.Migrate()` at app startup in production: startup migration needs schema rights for the app identity and gives no review step. Before EF Core 9, several instances migrating at once could also race; EF Core 9+ takes a database-wide lock but SQL scripts do not.
98
+ Add `dotnet ef migrations has-pending-model-changes` to CI (EF Core 8+) so a model change without a migration fails the build.
99
+ 5. Large tables: add nullable columns, backfill in batches, then make them required in a later migration. Raw SQL for things EF can't express (`migrationBuilder.Sql(...)`, for example concurrent index creation on PostgreSQL with the transaction suppressed).
100
+ 6. Keep the model snapshot in source control and resolve merge conflicts in it by re-adding the migration, not by hand-merging.
101
+
102
+ ## Stop and ask the user
103
+
104
+ - Before a migration that drops or renames a column or table with data.
105
+ - Before turning on global no-tracking, global split queries or lazy loading.
106
+ - Before running migrations against any non-local database.
107
+
108
+ ## Never
109
+
110
+ - Never register `DbContext` as a singleton or share one across threads.
111
+ - Never build SQL with string concatenation in `FromSqlRaw` / `ExecuteSqlRaw`.
112
+ - Never `ToList()` a table to filter it in memory.
113
+ - Never swallow `DbUpdateConcurrencyException`.
114
+
115
+ ## Finish
116
+
117
+ Run `dotnet test` and look at the logged SQL for each query you changed. Report: queries changed with before/after query counts, migrations added and whether they lose data, and concurrency handling added.
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "My EF Core LINQ query throws 'could not be translated' when I call my own helper in Where",
4
+ "Loading orders with Include on lines and payments returns millions of rows in EF Core, should I use AsSplitQuery?",
5
+ "Two admins edit the same account and the last save wins, add optimistic concurrency with EF Core",
6
+ "How do I deploy dotnet ef migrations to production without calling Database.Migrate at startup?",
7
+ "Should this read-only EF Core endpoint use AsNoTracking or a projection?"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Our ASP.NET Core middleware order breaks authentication, fix Program.cs",
11
+ "Refactor this C# service to use records and pattern matching",
12
+ "Write a Prisma migration for the new invoices table",
13
+ "This PostgreSQL index isn't being used for the orders query, read the EXPLAIN output",
14
+ "Configure Hibernate second-level cache for our Spring Boot JPA entities"
15
+ ]
16
+ }
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: email-deliverability
3
+ description: Gets email into the inbox instead of spam by setting up SPF, DKIM, DMARC and BIMI DNS records with alignment, splitting transactional and marketing mail onto separate subdomains and streams, choosing a sending provider, processing bounces and complaints, keeping lists clean and warming a new domain or IP. Use when mail lands in spam or bounces, a domain needs authenticating before sending, Gmail, Yahoo or Outlook bulk-sender rules must be met, or a new sending domain is about to go live.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. DNS checks use dig or nslookup; header checks need a raw message (.eml) or the provider's logs. Changes are made in the user's DNS host and email provider.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: business
9
+ kete-loom/risk: network
10
+ kete-loom/requires: "dig"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # Email deliverability
15
+
16
+ Make mail provably come from the domain it claims, keep receipts and password resets away from the reputation of newsletters, and stop sending to people who bounce, complain or never engage.
17
+
18
+ ## Ground rules
19
+
20
+ 1. **Authenticate every sending domain** with SPF and DKIM, then DMARC. Gmail requires SPF or DKIM for everyone, and SPF, DKIM and DMARC (`p=none` allowed) for anyone sending more than 5,000 messages a day to personal Gmail accounts. Outlook.com (hotmail.com, live.com, outlook.com) requires SPF and DKIM to pass and DMARC to pass with alignment (`p=none` allowed) for senders of 5,000 or more messages from one `From:` domain, and rejects failures with `550 5.7.515`.
21
+ 2. **Alignment is what DMARC checks**: the `From:` domain must match the DKIM `d=` domain or the SPF (Return-Path) domain. A provider signing with its own domain passes DKIM but fails DMARC. Use custom DKIM and a custom return-path on your domain.
22
+ 3. **Separate streams.** Transactional mail (receipts, resets, alerts) and marketing mail use different subdomains (for example `mail.example.com` and `news.example.com`) and, where the provider supports it, different streams or IP pools. A bad campaign must never delay a password reset.
23
+ 4. **Never buy, rent or scrape lists** for marketing mail. Purchased lists contain spam traps and drive complaints; no technical setup fixes that.
24
+ 5. **Marketing mail needs one-click unsubscribe**: a `List-Unsubscribe` header with an HTTPS URL, `List-Unsubscribe-Post: List-Unsubscribe=One-Click` (RFC 8058), and a visible link in the body. Honour it quickly (Google says within 48 hours; US CAN-SPAM allows at most 10 business days).
25
+ 6. **Watch the complaint rate.** Keep Gmail's user-reported spam rate in Postmaster Tools under 0.1% and never let it reach 0.3%.
26
+ 7. **Change DNS carefully.** Read the existing records before editing. A second SPF record, or a DMARC jump to `p=reject` before every sender is aligned, breaks real mail.
27
+
28
+ ## Diagnose first
29
+
30
+ When the user says "our emails go to spam", collect before changing anything:
31
+
32
+ 1. The exact `From:` address, the provider(s) that send for that domain (app, marketing tool, CRM, helpdesk, Google Workspace or Microsoft 365), and daily volume per stream.
33
+ 2. Current records: `dig +short TXT example.com` (SPF), `dig +short TXT _dmarc.example.com`, `dig +short TXT <selector>._domainkey.example.com`, `dig +short MX example.com`.
34
+ 3. Raw headers of one message that landed in spam. Read `Authentication-Results:` for `spf=`, `dkim=`, `dmarc=` and the domains each checked.
35
+ 4. Data from Google Postmaster Tools and Microsoft SNDS if set up, plus the provider's bounce and complaint numbers.
36
+
37
+ Then decide:
38
+
39
+ | Finding | Fix |
40
+ |---|---|
41
+ | `dmarc=fail` with `dkim=pass` | DKIM signed by the provider's domain; set up custom DKIM on yours |
42
+ | `spf=permerror` | More than 10 DNS lookups or two SPF records; merge and flatten (`references/dns-records.md`) |
43
+ | All auth passes, still spam | Reputation or content: check complaint rate, list source, engagement, sudden volume jumps |
44
+ | Bounces with `5.7.x` codes | Policy rejection: authentication or reputation; read the bounce text, it usually names the rule |
45
+ | Only one mailbox provider affected | Check that provider's postmaster tools and its own requirements |
46
+
47
+ ## Set up a sending domain
48
+
49
+ 1. Choose subdomains per stream. List every service that will send as each one.
50
+ 2. Add the provider's DKIM records (2048-bit keys where offered; Gmail requires at least 1024) and its custom return-path or bounce domain (a CNAME or MX record).
51
+ 3. Publish one SPF record per domain name that sends, including only the services that use it: `v=spf1 include:<provider> ~all`. Record shapes in `references/dns-records.md`.
52
+ 4. Publish DMARC at `p=none` with an aggregate report address: `v=DMARC1; p=none; rua=mailto:dmarc@example.com`. Read the reports for a few weeks (2 to 4 is a common rule of thumb) to find every legitimate sender.
53
+ 5. Move to `p=quarantine`, then `p=reject` once reports show all real mail aligned. **Stop and ask the user** before each step.
54
+ 6. BIMI only after DMARC is at `quarantine` or `reject`; it needs an SVG Tiny PS logo and, for Gmail, a mark certificate (a VMC, or a CMC for a logo that is not trademarked). Other mailbox providers, including Apple Mail, set their own BIMI rules; check the provider's current documentation before buying a certificate. Treat it as a branding extra, not a deliverability fix.
55
+ 7. Set valid forward and reverse DNS (PTR) if you run your own sending IPs; hosted providers do this for you.
56
+
57
+ ## Choose a provider
58
+
59
+ - Transactional: a provider with a dedicated transactional stream, webhooks for bounces and complaints, and per-message logs (for example Postmark, Amazon SES, SendGrid, Mailgun, Resend).
60
+ - Marketing: a tool that handles consent, unsubscribes, suppression lists and one-click headers for you.
61
+ - Shared IPs are right under roughly tens of thousands of messages a month; a dedicated IP needs steady volume to build a reputation. Ask the user for volume before recommending one.
62
+ - Never send bulk mail through a personal Google Workspace or Microsoft 365 mailbox.
63
+
64
+ ## Bounces, complaints and list hygiene
65
+
66
+ 1. Subscribe to the provider's bounce and complaint webhooks (or SES notifications) and write them to a suppression table keyed by address.
67
+ 2. Hard bounce (`5.x.x`, unknown user): suppress immediately and permanently.
68
+ 3. Soft bounce (`4.x.x`, mailbox full, throttled): retry per the provider; suppress after repeated failures across several sends.
69
+ 4. Complaint (feedback loop, "report spam"): suppress from all marketing at once; it counts as an unsubscribe.
70
+ 5. Check suppression before every send, across every tool that mails the same domain.
71
+ 6. Use confirmed opt-in for sign-ups from public forms. Sunset marketing contacts with no opens or clicks for a long stretch (6 to 12 months is a common rule of thumb, not a provider rule) after a re-engagement attempt (opens are unreliable since Apple Mail Privacy Protection, so weight clicks).
72
+
73
+ ## Warm a new domain or IP
74
+
75
+ 1. Start with the most engaged recipients (recent sign-ups, active customers), not the whole list.
76
+ 2. Grow volume gradually, roughly doubling while bounce and complaint rates stay low; hold or drop back if they rise. Two to six weeks is a common rule of thumb, not a mailbox-provider rule; follow the sending provider's warm-up plan if it has one.
77
+ 3. Keep volume and timing steady; avoid one huge blast after weeks of silence.
78
+ 4. Send transactional mail from day one; it is high-engagement and builds reputation.
79
+
80
+ ## Never
81
+
82
+ - Publish two SPF TXT records, or use `+all`.
83
+ - Put a DMARC record at `p=reject` without reading reports first.
84
+ - Hide or break the unsubscribe link, or require login to unsubscribe.
85
+ - Re-import suppressed or bounced addresses into another tool.
86
+ - Rotate domains or IPs to escape a bad reputation ("snowshoeing").
87
+
88
+ ## Report format
89
+
90
+ ```
91
+ Domain(s): ... Streams: transactional / marketing
92
+ Auth status: SPF pass|fail (lookups n/10) DKIM aligned yes|no DMARC p=...
93
+ Main problem: one sentence
94
+ Fixes, in order: 1. ... (DNS record or setting, exact value) 2. ...
95
+ Needs user decision: ...
96
+ Re-test: send to a seed list and read Authentication-Results
97
+ ```
98
+
99
+ Mailbox-provider rules change. Check Google's and Yahoo's sender guidelines and Microsoft's Outlook sender requirements before stating a threshold as current; links are in `references/dns-records.md`.
@@ -0,0 +1,17 @@
1
+ {
2
+ "should_trigger": [
3
+ "Our password reset emails keep landing in Gmail spam, here are the headers showing dmarc=fail",
4
+ "Set up SPF, DKIM and DMARC for our new sending domain before we turn on Amazon SES",
5
+ "SPF check says permerror too many DNS lookups, how do I fix the record?",
6
+ "We send 20k newsletters a day, what do we need for the Gmail and Yahoo bulk sender requirements?",
7
+ "Plan a warm-up schedule for the brand new domain we bought for product emails",
8
+ "How should we handle hard bounces and spam complaints coming back from Postmark webhooks?"
9
+ ],
10
+ "should_not_trigger": [
11
+ "Write a five-step cold email sequence for CFOs at logistics companies",
12
+ "Turn our latest blog post into a weekly newsletter issue and three LinkedIn posts",
13
+ "Build the HTML template for our order confirmation email in React Email",
14
+ "Schedule our product announcement to post on X and LinkedIn via their APIs",
15
+ "Plan the launch campaign and channel budget for our new app"
16
+ ]
17
+ }
@@ -0,0 +1,85 @@
1
+ # DNS record shapes
2
+
3
+ Replace `example.com`, selectors and provider includes with the user's values. Always read existing records first.
4
+
5
+ ## SPF (RFC 7208)
6
+
7
+ One TXT record at each name that appears as an envelope sender (Return-Path).
8
+
9
+ ```
10
+ example.com. TXT "v=spf1 include:_spf.google.com include:amazonses.com ~all"
11
+ ```
12
+
13
+ - Only one `v=spf1` record per name. Two records is a `permerror`.
14
+ - At most 10 DNS-querying mechanisms (`include`, `a`, `mx`, `ptr`, `exists`, `redirect`), counted recursively. Over 10 is a `permerror`, which counts as a fail.
15
+ - To get under 10: move senders to subdomains (each subdomain has its own SPF), remove services no longer used, or replace an `include` with `ip4:`/`ip6:` ranges only if the provider publishes stable ones.
16
+ - `~all` (softfail) is normal once DMARC is in place; `-all` is fine when the list is complete. Never `+all`.
17
+ - A domain that never sends mail: `v=spf1 -all`.
18
+
19
+ ## DKIM
20
+
21
+ The provider gives the selector and key, usually as a CNAME so it can rotate keys.
22
+
23
+ ```
24
+ s1._domainkey.example.com. CNAME s1.domainkey.u123.wl.provider.net.
25
+ s1._domainkey.example.com. TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."
26
+ ```
27
+
28
+ - Use 2048-bit RSA where offered. Long TXT values may need splitting into several quoted strings; most DNS hosts do this for you.
29
+ - Check: `dig +short TXT s1._domainkey.example.com`. In a received message, `DKIM-Signature: d=` must be your domain for alignment.
30
+
31
+ ## DMARC (RFC 9989, which obsoletes RFC 7489)
32
+
33
+ ```
34
+ _dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com; adkim=r; aspf=r"
35
+ ```
36
+
37
+ | Tag | Meaning |
38
+ |---|---|
39
+ | `p` | `none` (monitor), `quarantine`, `reject` |
40
+ | `sp` | policy for subdomains, defaults to `p` |
41
+ | `rua` | where aggregate XML reports go; use a mailbox or a DMARC report service |
42
+ | `pct` | RFC 7489 only: share of failing mail the policy applies to, default 100. RFC 9989 removed it (along with `rf` and `ri`) and added `t=y`, a test flag asking receivers to apply one policy level lower. Older receivers may still read `pct`; do not depend on it for rollout |
43
+ | `adkim` / `aspf` | `r` relaxed (organisational domain match, the default) or `s` strict |
44
+
45
+ Reports sent to a different domain need an authorisation record at that domain (`example.com._report._dmarc.reports.net TXT "v=DMARC1"`); report services set this up.
46
+
47
+ Rollout: `p=none` for a few weeks (2 to 4 is a rule of thumb), then `p=quarantine`, then `p=reject`. Rolling out per subdomain with `sp=` is a safer stage than `pct`.
48
+
49
+ ## BIMI
50
+
51
+ ```
52
+ default._bimi.example.com. TXT "v=BIMI1; l=https://example.com/bimi/logo.svg; a=https://example.com/bimi/vmc.pem"
53
+ ```
54
+
55
+ - Requires DMARC at `quarantine` or `reject` on the organisational domain; Gmail also requires `pct=100` if `pct` is present.
56
+ - `l=` is an HTTPS URL to an SVG Tiny PS file. `a=` is the PEM certificate (Gmail accepts a VMC or a CMC; other providers set their own rules).
57
+ - Display is at the mailbox provider's discretion even when everything validates.
58
+
59
+ ## One-click unsubscribe headers (RFC 8058)
60
+
61
+ ```
62
+ List-Unsubscribe: <https://example.com/unsub?t=opaque-token>, <mailto:unsub@example.com?subject=unsub>
63
+ List-Unsubscribe-Post: List-Unsubscribe=One-Click
64
+ ```
65
+
66
+ - The HTTPS endpoint must accept a POST with body `List-Unsubscribe=One-Click` and unsubscribe without further confirmation or login.
67
+ - Both headers must be covered by the DKIM signature.
68
+ - The token identifies the recipient and list; it must not be guessable or expose the address.
69
+
70
+ ## Useful checks
71
+
72
+ ```
73
+ dig +short TXT example.com
74
+ dig +short TXT _dmarc.example.com
75
+ dig +short TXT default._bimi.example.com
76
+ dig +short -x <sending-ip> # reverse DNS (PTR)
77
+ ```
78
+
79
+ ## Sources
80
+
81
+ - Gmail sender guidelines: https://support.google.com/a/answer/81126 and FAQ (48-hour unsubscribe): https://support.google.com/a/answer/14229414
82
+ - Outlook.com high-volume senders (`550 5.7.515`): https://support.microsoft.com/en-us/outlook/fix-ndr-error-550-5-7-515-in-outlook-com
83
+ - Gmail BIMI: https://knowledge.workspace.google.com/admin/security/set-up-bimi
84
+ - SPF: https://www.rfc-editor.org/rfc/rfc7208 . DMARC: https://www.rfc-editor.org/rfc/rfc9989 . One-click unsubscribe: https://www.rfc-editor.org/rfc/rfc8058
85
+ - CAN-SPAM: https://www.ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-business
@@ -0,0 +1,106 @@
1
+ ---
2
+ name: energy-procurement
3
+ description: Commercial electricity and natural gas buying for offices, plants, warehouses and multi-site portfolios, covering how to read utility bills and tariffs (energy, demand, capacity and transmission charges), analysing 15-minute interval load data for load factor and peaks, comparing fixed-price, index and block-and-index supply contracts, running a supplier RFP on a like-for-like basis, layering purchases to manage price risk, and renewable options such as green tariffs, unbundled certificates and power purchase agreements. Use when a supply contract is up for renewal, a site's energy costs jumped, you are comparing supplier offers, or a sustainability target needs a renewable electricity plan, in a market where the customer can choose a supplier.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Works from the user's bills, interval data and offers; market prices come from the user's broker, supplier or a market data service. Market rules differ by country, state and utility. Not financial, legal or trading advice.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: business
9
+ kete-loom/risk: read-only
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # Energy procurement
14
+
15
+ Know what each site actually pays for and why, buy supply with a risk level the business chose on purpose, and compare offers on the same basis. Rules, charge names and who may sell to whom depend on the jurisdiction, so confirm them before you rely on any of this.
16
+
17
+ ## 0. Establish the market
18
+
19
+ Ask, and stop until you have answers:
20
+
21
+ 1. Country and region, and for each site the utility (distribution company) and, where relevant, the grid or market operator (for example PJM, ERCOT, ISO-NE, NYISO, MISO, CAISO in the US; national markets in the UK and EU).
22
+ 2. Is the site in a market where the customer may choose a retail supplier for electricity, gas, or both? If not, the job is tariff optimisation with the utility, not a supply contract; use sections 1, 2 and 6 only.
23
+ 3. Current contracts: supplier, product type, price, start and end date, volume tolerance (swing) clauses, early termination terms.
24
+ 4. The business's risk appetite and budget certainty need, and who signs off (finance, procurement, a risk committee).
25
+
26
+ Never state a regulated tariff rate, market rule, tax or incentive without checking the utility's current tariff sheet or the regulator's site; record source and date.
27
+
28
+ ## 1. Read the bills
29
+
30
+ Collect 12 to 24 months of bills per site per fuel. Split every charge into:
31
+
32
+ | Bucket | Electricity examples | Gas examples |
33
+ |---|---|---|
34
+ | Supply (energy) | kWh x energy price, often by time-of-use period | therms, MMBtu, or kWh x commodity price |
35
+ | Capacity | capacity charge set by the site's load in the system peak hours (PJM's peak load contribution is one example) | n/a, or pipeline capacity |
36
+ | Transmission | network charge, sometimes set by coincident peaks (ERCOT 4CP is one example) | transportation |
37
+ | Distribution | utility delivery charge, kW demand charge on the monthly peak, customer charge | distribution, customer charge |
38
+ | Taxes, levies, riders | renewable and efficiency riders, taxes | same |
39
+
40
+ Record which buckets the supplier contract covers and which stay with the utility; offers that include different buckets cannot be compared directly. Check for billing errors: estimated reads, wrong rate class, wrong meter multiplier, tax charged on exempt use.
41
+
42
+ ## 2. Analyse the load
43
+
44
+ 1. Get 15-minute or hourly interval data (from the utility portal or meter data) for at least 12 months.
45
+ 2. Compute per site: annual kWh, peak kW, load factor (`average kW / peak kW`), on-peak versus off-peak split, and a monthly and hourly profile.
46
+ 3. Find the hours that set capacity and transmission charges in this market; quantify how much load the site was carrying in those hours.
47
+ 4. Note what can move: shiftable process load, on-site generation, storage, demand response programmes. Flag these as savings to evaluate, not promises.
48
+ 5. For gas: monthly usage against heating degree days, base load versus weather-driven load.
49
+
50
+ A flat, high-load-factor profile gets better supply prices; a peaky profile pays for its shape.
51
+
52
+ ## 3. Choose the product structure
53
+
54
+ | Product | What is fixed | Who carries price risk | Fits when |
55
+ |---|---|---|---|
56
+ | Fixed price (full requirements) | all-in supply price per unit for the term | supplier, priced in as a premium | budget certainty matters most, small team |
57
+ | Index (pass-through) | supplier adder only; energy floats with the market index | customer | can absorb volatility, wants lowest expected cost |
58
+ | Block and index | a fixed block (for example a set MW in on-peak hours); the rest floats | shared | large or predictable load, wants to hedge in stages |
59
+ | Layered or hedged | tranches fixed at different times | shared, timed by the customer | has a policy and someone to execute it |
60
+
61
+ Also check per offer: which charges are passed through rather than fixed, swing or bandwidth limits and the penalty for usage outside them, the material-change clause, credit requirements, term, and termination cost.
62
+
63
+ ## 4. Run a supplier RFP
64
+
65
+ 1. Send the same data to every supplier: sites, account and meter numbers, interval data, contract start date, term options, product structures wanted, which charges must be fixed or passed through, and payment and credit terms.
66
+ 2. Use a response template so each offer comes back on the same basis (price per unit by product and term, pass-through list, swing terms).
67
+ 3. Prices are usually valid for hours, not days; agree in advance who can accept, and get internal approval for a price ceiling before the pricing day.
68
+ 4. Normalise offers to an all-in cost per unit using the site's real load shape, and show it next to the contract risks.
69
+ 5. If a broker or consultant runs the RFP, ask how they are paid (fees embedded in the unit price are common) and put it in writing.
70
+
71
+ ## 5. Risk and hedging
72
+
73
+ - Write a short procurement policy: target hedge percentage by year ahead (for example more hedged for the next 12 months than for year three), price triggers, who decides, and how results are reported.
74
+ - Hedge by layering purchases over time rather than one day's price.
75
+ - Report open (unhedged) volume and its exposure to a price move, using a scenario the user sets.
76
+ - **Stop and say that a qualified energy adviser, treasury or risk function must decide** before any financial hedge, derivative, or a commitment above the user's sign-off limit. This skill does not give trading advice.
77
+
78
+ ## 6. Renewable options
79
+
80
+ | Option | What you get | Watch |
81
+ |---|---|---|
82
+ | Utility green tariff | renewable supply via the utility | premium, additionality, term |
83
+ | Supplier renewable product | supply plus certificates | which certificates, from where |
84
+ | Unbundled certificates | RECs (US), Guarantees of Origin (EU), REGOs (UK), I-RECs elsewhere | market boundary and vintage rules for your reporting standard |
85
+ | On-site generation | solar or other on site, owned or under a lease or PPA | roof, interconnection, net metering rules |
86
+ | Physical or virtual PPA | long-term contract with a project; a virtual PPA is a financial contract for difference | long term, accounting treatment, basis and shape risk |
87
+
88
+ Check the claim against the reporting standard the business uses (for example the GHG Protocol Scope 2 guidance; it has been under revision, so confirm the current version). Any PPA needs legal, accounting and treasury review before signing.
89
+
90
+ ## Rules
91
+
92
+ - Never compare offers that fix different charges without normalising them first.
93
+ - Never recommend accepting a price without the user's internal approval route confirmed.
94
+ - Never present a forecast as a price; label every forward price with source, date and time.
95
+ - Jurisdiction rules first: if you have not confirmed retail choice and the charge structure for the site, say so.
96
+
97
+ ## Report
98
+
99
+ ```
100
+ Site | utility | rate class | annual kWh / therms | peak kW | load factor | current contract (product, price, end date)
101
+ Bill split: supply x% | capacity x% | transmission x% | distribution x% | taxes x%
102
+ Offers (normalised all-in per unit): supplier | product | term | price | pass-throughs | swing | notes
103
+ Recommendation: product and term, hedge plan, renewable option, with risks
104
+ Needs expert review: <hedges, PPA, contracts above limit, tariff questions>
105
+ Sources: <tariff sheets, market data, dates>
106
+ ```
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "Our electricity supply contract for three plants in Ohio ends in March, should we go fixed price or block and index this time?",
4
+ "I have 12 months of 15-minute interval data for our warehouse, work out the load factor and what is driving our demand charges",
5
+ "Compare these four retail electricity supplier offers, some pass through capacity and transmission and some do not",
6
+ "Write a natural gas and power procurement policy with hedge targets for the next three years",
7
+ "We want 100% renewable electricity for our offices, compare a utility green tariff, unbundled RECs and a virtual PPA"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Calculate our Scope 1 and Scope 2 greenhouse gas inventory for this year's sustainability report",
11
+ "Size a rooftop solar array and battery for my house and estimate the payback",
12
+ "Write a Python job that pulls smart meter readings from our IoT gateway into TimescaleDB",
13
+ "Our supplier sent a batch of out-of-spec castings, open a nonconformance and start the root cause",
14
+ "Find a reliable truckload carrier for our new Houston to Denver lane"
15
+ ]
16
+ }