@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,136 @@
1
+ ---
2
+ name: laravel-patterns
3
+ description: Laravel application conventions for routes, controllers and Eloquent models, with N+1 detection through eager loading and preventLazyLoading, validation in Form Request classes, authorization through policies and gates, queued jobs that dispatch after commit, config caching and the env() trap, mass-assignment and other framework security defaults, and feature tests in Pest or PHPUnit using RefreshDatabase and fakes. Use when building or reviewing a Laravel app, fixing slow Eloquent pages, adding a policy, form request or queued job, or writing Laravel feature tests.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs PHP, Composer and the project's artisan command. Written for Laravel 11 and later; most rules also apply to 9 and 10.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: coding
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/requires: "php, composer"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # Laravel patterns
15
+
16
+ Write Laravel code the way the framework expects, so the next developer finds things where Laravel puts them. For plain PHP language style (types, enums, PSR-12) follow the `php-patterns` skill; for PHPUnit or Pest mechanics outside Laravel follow `php-testing`.
17
+
18
+ ## 0. Before you change anything
19
+
20
+ 1. Read `composer.json` for the `laravel/framework` version and whether `pestphp/pest` is installed. Match the project, not this skill, where they differ.
21
+ 2. Check the layout: Laravel 11+ apps configure middleware, exceptions and routing in `bootstrap/app.php` and have no `Http/Kernel.php`. Older apps use the kernel. Do not mix the two styles.
22
+ 3. Run the test command (`php artisan test`, or `./vendor/bin/pest` / `./vendor/bin/phpunit`). If it fails before you start, **stop and tell the user**.
23
+
24
+ ## 1. Structure
25
+
26
+ - Routes stay thin: `routes/web.php` and `routes/api.php` map URLs to controllers. No business logic in route closures beyond trivial pages.
27
+ - Controllers: one resource controller per model (`php artisan make:controller PostController --resource --model=Post`). A controller method does: authorize, validate, call the domain code, return a response.
28
+ - Put multi-step business logic in an action or service class under `app/` (for example `app/Actions/PublishPost.php`) injected through the constructor. Do not invent a repository layer over Eloquent unless the project already has one.
29
+ - Use route model binding (`Post $post`) instead of `Post::findOrFail($id)` in the controller. Scope child bindings with `->scopeBindings()` so `/users/{user}/posts/{post}` can't load another user's post.
30
+ - Return API data through API resources (`php artisan make:resource PostResource`), never `$model->toArray()` straight from the database, so new columns don't leak.
31
+
32
+ ## 2. Eloquent and N+1
33
+
34
+ 1. Turn lazy loading into an error outside production, in `AppServiceProvider::boot()`:
35
+ ```php
36
+ Model::preventLazyLoading(! $this->app->isProduction());
37
+ ```
38
+ Then every N+1 shows up as a `LazyLoadingViolationException` in tests and local runs.
39
+ 2. Load relations before the loop: `Post::with(['author', 'tags'])->paginate()`. On an already loaded collection use `$posts->load('author')`. For counts use `withCount('comments')`, not `$post->comments->count()`.
40
+ 3. Select only what the page needs on wide tables (`->select(['id', 'title', 'user_id'])`), keeping the foreign keys the eager loads need.
41
+ 4. Large batch work: `chunkById(500, ...)` or `lazyById()`, never `Model::all()` on a table that grows.
42
+ 5. Writes that touch many rows: `Post::where(...)->update([...])` runs one query but skips model events and observers. Say so if the code relies on them.
43
+ 6. Wrap multi-write operations in `DB::transaction(function () { ... })`.
44
+ 7. Index every column you filter, join or sort on, in the same migration that adds the query.
45
+
46
+ ## 3. Validation with Form Requests
47
+
48
+ - Any input with more than a couple of rules gets a Form Request: `php artisan make:request StorePostRequest`. Type-hint it in the controller; Laravel validates before the method runs.
49
+ - Persist only `$request->validated()` (or `$request->safe()->only([...])`). Never `$request->all()` into `create()` or `update()`.
50
+ - `make:request` generates `authorize()` returning `false`, which turns every request into a 403. Return the policy check there (`return $this->user()->can('update', $this->route('post'));`), or delete the method and authorize in the controller; never leave both with different logic.
51
+ - Use rule objects for real rules: `Rule::unique('users')->ignore($user)`, `Rule::exists('teams', 'id')`, `Rule::enum(Status::class)`, `Password::defaults()`.
52
+ - Validate files with `file`, `mimes:` and `max:` (kilobytes). Never trust the client file name; store with `store()` and a generated name.
53
+
54
+ ## 4. Authorization: policies and gates
55
+
56
+ - One policy per model: `php artisan make:policy PostPolicy --model=Post`. Policies in `app/Policies` named `<Model>Policy` are discovered automatically.
57
+ - Authorize in every action that reads or changes a specific record:
58
+ ```php
59
+ Gate::authorize('update', $post); // throws, becomes 403
60
+ Route::put('/posts/{post}', ...)->can('update', 'post');
61
+ ```
62
+ `$this->authorize()` in a controller only exists if the base controller uses the `AuthorizesRequests` trait; the Laravel 11+ skeleton's base controller does not, so prefer `Gate::authorize`.
63
+ - Gates (`Gate::define` in `AppServiceProvider`) are for actions without a model, such as viewing an admin dashboard.
64
+ - Return `Response::denyAsNotFound()` from a policy when a 403 would reveal that the record exists.
65
+ - Hiding a button in Blade with `@can` is not authorization. The controller check is.
66
+
67
+ ## 5. Queues and jobs
68
+
69
+ 1. `php artisan make:job SendInvoice`; implement `ShouldQueue`. Pass models or IDs, not large payloads; `SerializesModels` reloads the model when the job runs.
70
+ 2. Dispatch after the database commit when the job reads rows you just wrote: `SendInvoice::dispatch($invoice)->afterCommit()`, or set `after_commit` to `true` on the queue connection in `config/queue.php`.
71
+ 3. Make every job safe to run twice. Set `$tries`, `$backoff` and `$timeout`, check state before acting, and use `ShouldBeUnique` or `WithoutOverlapping` middleware where duplicates hurt.
72
+ 4. Implement `failed(Throwable $e)` for anything the user is waiting on, so a failure is recorded, not lost.
73
+ 5. Production runs a real driver (redis, database, SQS) with a supervised `php artisan queue:work`; `sync` is for tests only. Run `php artisan queue:restart` on deploy so workers load new code.
74
+
75
+ ## 6. Config and environment
76
+
77
+ - Read `env()` **only** inside `config/*.php`. After `php artisan config:cache`, `env()` elsewhere returns `null`. Application code uses `config('services.stripe.secret')`.
78
+ - `.env` is never committed. Add every new key to `.env.example` with a placeholder.
79
+ - Production: `APP_DEBUG=false`, `APP_ENV=production`, a set `APP_KEY`, and `php artisan optimize` (config, route, event and view caches) in the deploy.
80
+
81
+ ## 7. Security defaults to keep
82
+
83
+ - Mass assignment: declare `$fillable` (or a narrow `$guarded`) on every model. Never `$guarded = []` on models that take user input. Consider `Model::preventSilentlyDiscardingAttributes()` outside production.
84
+ - Blade `{{ }}` escapes; `{!! !!}` does not. Use `{!! !!}` only for HTML you sanitised yourself.
85
+ - Raw SQL: `DB::select('... where id = ?', [$id])` or `whereRaw('x = ?', [$v])`. Never interpolate input into `whereRaw`, `orderByRaw` or column names; whitelist sortable columns.
86
+ - Keep CSRF protection on web routes. Exclude only webhook routes that verify their own signature.
87
+ - Hash passwords with `Hash::make` (or the `hashed` cast). Rate-limit login and API routes with `RateLimiter::for` and the `throttle` middleware.
88
+ - Signed URLs (`URL::temporarySignedRoute`) for one-off links; check `hasValidSignature()` or use the `signed` middleware.
89
+
90
+ ## 8. Testing (Pest or PHPUnit)
91
+
92
+ Use whichever the project has. Feature tests hit routes; unit tests cover plain classes.
93
+
94
+ ```php
95
+ uses(RefreshDatabase::class);
96
+
97
+ it('lets the owner update a post', function () {
98
+ $post = Post::factory()->create();
99
+
100
+ $this->actingAs($post->author)
101
+ ->put(route('posts.update', $post), ['title' => 'New'])
102
+ ->assertRedirect();
103
+
104
+ expect($post->fresh()->title)->toBe('New');
105
+ });
106
+
107
+ it('forbids other users', function () {
108
+ $post = Post::factory()->create();
109
+ $this->actingAs(User::factory()->create())
110
+ ->put(route('posts.update', $post), ['title' => 'x'])
111
+ ->assertForbidden();
112
+ });
113
+ ```
114
+
115
+ - Build data with model factories and states, not hand-written inserts.
116
+ - Fake side effects: `Queue::fake()`, `Bus::fake()`, `Mail::fake()`, `Notification::fake()`, `Event::fake()`, `Storage::fake('s3')`, `Http::fake([...])` plus `Http::preventStrayRequests()`.
117
+ - Every policy gets an allowed and a forbidden test. Every Form Request gets at least one invalid-input test asserting `assertSessionHasErrors` or `assertUnprocessable()`.
118
+ - Freeze time with `$this->travelTo(...)` or `Carbon::setTestNow()` for anything date-based.
119
+
120
+ ## Stop and ask the user
121
+
122
+ - Before a migration that drops or renames a column or table with data, or rewrites a large table.
123
+ - Before changing the queue driver, cache store, session driver or auth guard.
124
+ - Before adding a Composer package for something Laravel already does.
125
+
126
+ ## Never
127
+
128
+ - Never commit `.env`, `APP_KEY` or credentials, or set `APP_DEBUG=true` in production.
129
+ - Never call `env()` outside `config/`.
130
+ - Never pass `$request->all()` to `create`, `update` or `fill`.
131
+ - Never skip the policy check because "the UI hides it".
132
+ - Never run `migrate:fresh` or `db:wipe` against anything but a local or test database.
133
+
134
+ ## Finish
135
+
136
+ Run the test command and `php artisan route:list` if routes changed. Report: files changed, N+1s found and fixed, authorization added, and anything you could not test.
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "My Laravel posts index runs 200 queries, how do I fix the N+1 with Eloquent?",
4
+ "Add a form request and a policy so only the owner can update an invoice in our Laravel app",
5
+ "The welcome email job in Laravel sometimes runs before the user row is committed, how do I dispatch it safely?",
6
+ "env('STRIPE_KEY') returns null in production after php artisan config:cache, why?",
7
+ "Write Pest feature tests for the Laravel orders controller, including the forbidden case"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Convert these PHPUnit docblock annotations to PHP 8 attributes in my plain Composer library",
11
+ "Make this PHP 8 value object readonly and use a backed enum for its status",
12
+ "My Rails index page has an N+1 on comments, fix it with includes",
13
+ "Review the Stripe webhook handler for idempotency and signature checks",
14
+ "Set up GitHub Actions to run our PHP tests on every pull request"
15
+ ]
16
+ }
@@ -0,0 +1,98 @@
1
+ ---
2
+ name: linear-integration
3
+ description: Talks to Linear's GraphQL API at api.linear.app/graphql with the @linear/sdk or raw queries, covering personal API keys versus OAuth 2.0 apps (actor=app, 24-hour access tokens with refresh, client credentials), querying and mutating issues, projects, cycles, teams and workflow states, Relay-style first/after cursor pagination, Linear-Signature HMAC webhook checks with the webhookTimestamp replay window, and request plus complexity rate limits reported as RATELIMITED errors. Use when building a Linear sync, bot or agent, creating or moving Linear issues from code, receiving Linear webhooks, or fixing Linear auth, paging or rate-limit problems.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Live calls need network access to api.linear.app. Examples use TypeScript and the official @linear/sdk; raw GraphQL works from any language.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: integrations
9
+ kete-loom/risk: network
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # Linear integration
14
+
15
+ Build a Linear integration that uses the right credential, asks GraphQL only for what it needs, pages through every result, trusts only signed webhooks, and stays within both the request and complexity budgets.
16
+
17
+ ## Ground rules
18
+
19
+ 1. **One endpoint:** `POST https://api.linear.app/graphql`, JSON body `{ "query": ..., "variables": ... }`. Explore the schema with Linear's API explorer or introspection; do not guess field names.
20
+ 2. **Credentials from the environment** (`LINEAR_API_KEY`, OAuth client secret, webhook signing secret). Never commit or log them.
21
+ 3. **Look up IDs, never hard-code them.** Team, workflow state, label, project and cycle IDs differ per workspace. Fetch them once and cache.
22
+ 4. **Errors arrive in the body.** A GraphQL response can be HTTP 200 or 400 with an `errors` array. Always check `errors` and each mutation's `success` field.
23
+ 5. **Ask only for the fields you use**; every field and nested connection adds complexity points.
24
+
25
+ ## Choose the auth
26
+
27
+ | Situation | Use |
28
+ |---|---|
29
+ | Personal script or internal tool, acting as you | Personal API key, sent as `Authorization: <API_KEY>` (no `Bearer`) |
30
+ | App other users or workspaces install | OAuth 2.0, `Authorization: Bearer <access token>` |
31
+ | Bot or agent whose actions show as the app, not a person | OAuth with `actor=app` |
32
+ | Server-to-server for your own workspace without a user | OAuth client credentials grant (enable it on the app first) |
33
+
34
+ ### OAuth 2.0
35
+
36
+ 1. Create an OAuth app in Linear's settings; set redirect URIs.
37
+ 2. Redirect to `https://linear.app/oauth/authorize?client_id=...&redirect_uri=...&response_type=code&scope=read,write&state=...` (add `&actor=app` for app actor). Scopes: `read` (always), `write`, `issues:create`, `comments:create`, `timeSchedule:write`, `admin`. Request `admin` only if the user confirms it is needed.
38
+ 3. Exchange the code at `POST https://api.linear.app/oauth/token`. Access tokens last 24 hours; refresh with `grant_type=refresh_token` and store the new refresh token each time.
39
+ 4. Client credentials tokens last 30 days, have no refresh token, and are invalidated when the client secret is rotated; request a new one on 401.
40
+ 5. Revoke on disconnect: `POST https://api.linear.app/oauth/revoke`.
41
+
42
+ ## Common operations
43
+
44
+ ```ts
45
+ import { LinearClient } from '@linear/sdk';
46
+ const linear = new LinearClient({ apiKey: process.env.LINEAR_API_KEY }); // or { accessToken } for OAuth
47
+
48
+ const team = (await linear.teams({ filter: { key: { eq: 'ENG' } } })).nodes[0];
49
+ const done = (await team.states({ filter: { type: { eq: 'completed' } } })).nodes[0];
50
+
51
+ const res = await linear.createIssue({ teamId: team.id, title: 'Checkout 500s', description: 'Markdown body', priority: 2 });
52
+ if (!res.success) throw new Error('issueCreate failed');
53
+ const issue = await res.issue;
54
+ await linear.updateIssue(issue.id, { stateId: done.id });
55
+ ```
56
+
57
+ Raw GraphQL equivalents: `issueCreate(input: IssueCreateInput!)`, `issueUpdate(id:, input:)`, `commentCreate(input:)`, and queries `issues(filter:)`, `issue(id:)` (accepts the UUID or the identifier such as `ENG-123`), `projects`, `cycles`, `teams`, `workflowStates`.
58
+
59
+ - **Workflow states** belong to a team and have a `type` (`triage`, `backlog`, `unstarted`, `started`, `completed`, `canceled`). Move issues by choosing a state of the target type in that issue's team, not by state name across teams.
60
+ - **Priority** is an integer: 0 none, 1 urgent, 2 high, 3 medium, 4 low.
61
+ - **Descriptions and comments** are Markdown.
62
+ - **Projects** span teams; set `projectId` on the issue. **Cycles** are per team; set `cycleId` to a cycle of the issue's team (find the active one via the team's `activeCycle`).
63
+ - **Filtering** happens on the server: `issues(filter: { team: { key: { eq: "ENG" } }, state: { type: { nin: ["completed", "canceled"] } }, updatedAt: { gt: $since } })`. Never fetch everything and filter client-side.
64
+ - **Idempotency:** Linear has no idempotency key. Store your external ID (for example in an attachment URL or your own table) and check before creating. Attachments with the same URL on one issue are deduplicated, which makes `attachmentCreate` a good link-back anchor.
65
+
66
+ ## Pagination
67
+
68
+ - Connections are Relay-style: `first` / `after` (or `last` / `before`), returning `nodes` and `pageInfo { hasNextPage endCursor }`. Default page size is 50.
69
+ - Loop: pass `endCursor` as `after` while `hasNextPage` is true. In the SDK, `connection.fetchNext()` appends the next page.
70
+ - Default order is `createdAt`; use `orderBy: updatedAt` for incremental sync, and store the last `updatedAt` you processed.
71
+ - Avoid nested connections inside a paged list (issues, each with all comments, each with all reactions); page the inner data separately. Nested pages multiply complexity.
72
+
73
+ ## Webhooks
74
+
75
+ 1. Create the webhook in workspace settings (or with the `webhookCreate` mutation, admin scope), choosing resource types (Issue, Comment, Project, Cycle and others). Note its signing secret.
76
+ 2. Verify every request: `Linear-Signature` is the hex HMAC-SHA256 of the **raw** body with the signing secret. Compute it before parsing JSON; compare with a constant-time function.
77
+ 3. Reject replays: `webhookTimestamp` in the body (milliseconds) must be within about one minute of now.
78
+ 4. Respond `200` within 5 seconds and process from a queue. Linear retries failures up to 3 times (after 1 minute, 1 hour and 6 hours) and may disable a webhook that keeps failing.
79
+ 5. Route on `type` and `action` (`create`, `update`, `remove`); for updates, `updatedFrom` holds the previous values. Ignore changes your own integration made (compare `actor`) to avoid loops.
80
+ 6. Payloads may be stale by the time you process them; re-query the issue if you need current state.
81
+
82
+ ## Rate limits
83
+
84
+ Per hour (check the docs, they change): API key 2,500 requests and 3,000,000 complexity points per user; OAuth app 5,000 requests and 2,000,000 points per user or app user; unauthenticated 600 requests per IP. A single query over 10,000 complexity points is rejected.
85
+
86
+ - Read `X-RateLimit-Requests-Remaining`, `X-RateLimit-Complexity-Remaining` and `X-Complexity` (this query's cost). Reset headers are UTC epoch **milliseconds**.
87
+ - When limited, Linear returns HTTP 400 with `errors[].extensions.code == "RATELIMITED"`. Wait until the relevant reset time, then retry with backoff and a retry cap. Do not treat every 400 as a rate limit; check the code.
88
+ - Lower cost: smaller `first`, fewer fields, no deep nesting, filters instead of scans, webhooks instead of polling.
89
+
90
+ ## Stop and ask the user
91
+
92
+ - Before bulk updates, moves or archiving across many issues; show the filter and the count first.
93
+ - Before requesting the `admin` scope or creating workspace-wide webhooks.
94
+ - Before an agent or bot acts as a person (`actor=user`) rather than as the app.
95
+
96
+ ## Before you finish
97
+
98
+ Test against a test workspace or team: a list longer than one page, an issue created and moved to a completed state in its own team, a duplicate create (no second issue), a webhook with a bad signature and one with a stale `webhookTimestamp` (both rejected), and a `RATELIMITED` response handled with a wait. Linear's developer docs at linear.app/developers are the final word on schema and limits.
@@ -0,0 +1,17 @@
1
+ {
2
+ "should_trigger": [
3
+ "Create Linear issues from our error tracker using the Linear GraphQL API",
4
+ "Verify the Linear-Signature header on webhooks our server receives from Linear",
5
+ "Our Linear sync gets RATELIMITED errors, how do we stay under the complexity limit?",
6
+ "Should our Linear bot use a personal API key or OAuth with actor=app?",
7
+ "Page through every issue in the current Linear cycle with the @linear/sdk",
8
+ "Move a Linear issue to the team's completed state when the PR merges"
9
+ ],
10
+ "should_not_trigger": [
11
+ "Move a Jira ticket to In Review when a pull request is opened",
12
+ "Plan the next sprint and pick which tickets fit",
13
+ "Write a GraphQL schema for our own product API",
14
+ "Turn on Linear's built-in GitHub integration in workspace settings so PRs link to issues",
15
+ "Post a Slack message whenever a deploy finishes"
16
+ ]
17
+ }
@@ -0,0 +1,109 @@
1
+ ---
2
+ name: literature-review
3
+ description: Scientific literature review that plans a reproducible search across PubMed, Google Scholar and arXiv, screens papers against written inclusion and exclusion criteria, appraises study design and risk of bias, extracts effect sizes into a table, cites each claim to a DOI or PMID, and states how certain the evidence is. Use when someone needs a literature review, a background or related-work section for a paper or grant, an evidence summary on a scientific or clinical question, or a PRISMA-style record of how studies were found and screened.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Searching needs network access to PubMed (NCBI E-utilities), arXiv and Google Scholar; without it, work only from papers the user supplies.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: data
9
+ kete-loom/risk: network
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # Literature review
14
+
15
+ Produce a review a reader could repeat: the same search, the same screening rules, and every claim traceable to a paper you actually read.
16
+
17
+ ## Scope and limits
18
+
19
+ - This skill organises and summarises published evidence. It is **not** a formal systematic review, meta-analysis or clinical guideline. If the output will inform patient care, regulatory submissions or a published systematic review, say so and tell the user a qualified reviewer (and, for a systematic review, a second independent screener and an information specialist) must check it.
20
+ - Never invent a paper, author, DOI, PMID, page number, sample size or effect size. If you cannot open a source, say "not retrieved" rather than guessing what it says.
21
+
22
+ ## 1. Frame the question (stop and ask if unclear)
23
+
24
+ 1. Write the question in one sentence. For clinical or intervention questions, break it into PICO: Population, Intervention or exposure, Comparator, Outcome. For other fields use the closest equivalent (system, method, baseline, metric).
25
+ 2. Agree with the user on: review type (narrative overview, scoping review, or systematic-style), date range, languages, study types wanted, and the deliverable (related-work section, evidence table, full report).
26
+ 3. If the user cannot state the outcome they care about, stop and ask. A review without a defined outcome cannot be screened.
27
+
28
+ ## 2. Write the inclusion and exclusion criteria before searching
29
+
30
+ Record them as a short list, for example:
31
+
32
+ - Include: peer-reviewed primary studies or preprints, 2015 onward, adult humans, reports outcome X.
33
+ - Exclude: editorials, conference abstracts without data, animal-only studies, duplicate reports of the same cohort.
34
+
35
+ Decide now how preprints are handled (included but flagged is the usual choice). Do not change the criteria after seeing results without noting the change and why.
36
+
37
+ ## 3. Build and run the search
38
+
39
+ 1. List synonyms and controlled vocabulary for each concept. Combine synonyms with `OR`, concepts with `AND`.
40
+ 2. Run the strategy in each source and record the exact query string, the date run and the hit count. Source-specific syntax, field tags and API endpoints are in `references/search-sources.md`.
41
+ 3. Use at least two sources. PubMed for biomedicine, arXiv for physics, maths, CS and quantitative fields, Google Scholar for breadth and grey literature (its results are not reproducible, so record it as supplementary).
42
+ 4. Snowball: check the reference lists of key included papers (backward) and papers that cite them (forward).
43
+ 5. Respect source limits: NCBI E-utilities allow 3 requests per second without an API key and 10 with one; the arXiv API asks for no more than one request every three seconds on a single connection. Do not scrape Google Scholar programmatically.
44
+
45
+ ## 4. Screen
46
+
47
+ 1. De-duplicate by DOI, then by title and first author.
48
+ 2. Screen titles and abstracts against the criteria; then screen full texts for anything that passes.
49
+ 3. Log every exclusion at full-text stage with one reason from your criteria list.
50
+ 4. Keep counts for each stage (identified, duplicates removed, screened, full texts assessed, excluded with reasons, included). These are the numbers a PRISMA 2020 flow diagram needs.
51
+
52
+ ## 5. Appraise quality
53
+
54
+ Judge each included study by its design before you weigh its findings. Use the checklist in `references/appraisal.md`:
55
+
56
+ - Design hierarchy as a starting point: systematic reviews of RCTs, RCTs, cohort, case-control, cross-sectional, case series, expert opinion. Benchmarks and simulation studies in computational fields are judged on dataset, baselines, and whether code and data are available.
57
+ - Named tools when the field uses them: Cochrane RoB 2 for randomised trials, ROBINS-I for non-randomised intervention studies, Newcastle-Ottawa Scale for cohort and case-control studies.
58
+ - Always note: sample size, preregistration, conflicts of interest, funding, retractions (check the journal page or Retraction Watch), and whether the result has been replicated.
59
+
60
+ ## 6. Extract findings
61
+
62
+ Fill one row per study in an evidence table:
63
+
64
+ | Study (first author, year) | ID (DOI/PMID/arXiv) | Design | N | Population | Intervention / method | Comparator | Outcome and effect (with CI or error) | Risk of bias | Notes |
65
+
66
+ - Copy numbers exactly as reported, with units and the confidence interval or standard error. Mark values you computed yourself.
67
+ - Report the effect measure the paper uses (risk ratio, odds ratio, mean difference, accuracy); never convert between them without saying so.
68
+
69
+ ## 7. Synthesise and state uncertainty
70
+
71
+ 1. Group studies by outcome, then by design. Describe agreement and disagreement; explain disagreements by design, population or method where you can.
72
+ 2. Do not count votes ("7 studies positive, 3 negative") as evidence strength. Weigh by size, design and risk of bias.
73
+ 3. Rate certainty per main outcome. For health questions use GRADE wording (high, moderate, low, very low) and give the reasons for downgrading: risk of bias, inconsistency, indirectness, imprecision, publication bias. For other fields use the same four words and the same reasons in plain language.
74
+ 4. Name the gaps: populations not studied, outcomes not measured, methods never compared.
75
+ 5. Do not pool numbers into a meta-analysis unless the user asked for one and the studies are comparable; if pooled, a statistician should check it.
76
+
77
+ ## 8. Cite correctly
78
+
79
+ - Cite every factual claim to a specific paper. Prefer the DOI; give PMID or arXiv ID too when present.
80
+ - Cite the version you read. If a preprint has since been published, cite the published version and say so.
81
+ - Use the style the user names (Vancouver, APA, a journal's own). If none is given, use author-year in text and a full reference list with DOIs.
82
+ - Quote sparingly and with page or section. Paraphrase faithfully; never strengthen a hedged finding ("associated with" stays "associated with", not "causes").
83
+
84
+ ## Never
85
+
86
+ - Cite a paper from its abstract alone when the claim depends on methods or numbers in the full text; mark it "abstract only" if that is all you could access.
87
+ - Present a Google Scholar-only or unsearched topic as comprehensive.
88
+ - Drop studies that contradict the expected answer.
89
+
90
+ ## Report format
91
+
92
+ ```
93
+ # <Question>
94
+ Scope: <review type, date range, sources, date searched>
95
+ ## Search
96
+ <source>: <exact query> (<date>, <hits>) ... one line per source
97
+ ## Screening
98
+ Identified N, duplicates N, screened N, full text N, excluded N (reasons), included N
99
+ ## Evidence table
100
+ <table from step 6>
101
+ ## Synthesis
102
+ <per outcome: what the evidence shows, certainty rating, reasons>
103
+ ## Gaps and limitations
104
+ <including limits of this review itself>
105
+ ## References
106
+ <full list with DOIs>
107
+ ```
108
+
109
+ If the user wants only a related-work section, still keep the search and screening log as an appendix so the review can be checked.
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "Do a literature review on whether intermittent fasting improves insulin sensitivity in adults, with the PubMed search strings you used",
4
+ "I need a related-work section for my paper on graph neural networks for protein folding, pull the key arXiv papers and cite them properly",
5
+ "Summarise the published evidence on microplastics in drinking water and how confident we can be in it",
6
+ "Help me set inclusion criteria and screen these 40 abstracts for a scoping review on telehealth in rural clinics",
7
+ "Appraise the risk of bias in these five RCTs on vitamin D and depression and build an evidence table"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Compare three Python job queue libraries and recommend one with links to their docs",
11
+ "Run a differential expression analysis on my RNA-seq counts table",
12
+ "Size the market for a lab notebook SaaS and list the competitors",
13
+ "Write the methods section describing the statistical tests I ran in my own experiment",
14
+ "Clean up my Jupyter notebook so the statistics in it are reproducible"
15
+ ]
16
+ }
@@ -0,0 +1,41 @@
1
+ # Appraising study quality
2
+
3
+ Read this in step 5. Record a judgement and a one-line reason for every item; "unclear" is an allowed answer.
4
+
5
+ ## Any primary study
6
+
7
+ 1. Is the question and primary outcome stated in advance (registration, protocol, preregistration)?
8
+ 2. Is the sample size adequate, and was it justified (power calculation)?
9
+ 3. How were participants or data selected? Could selection explain the result?
10
+ 4. Are the comparison groups comparable at baseline?
11
+ 5. Were outcomes measured the same way in every group, ideally blind to group?
12
+ 6. How much missing data or loss to follow-up, and how was it handled?
13
+ 7. Are confounders measured and adjusted for (observational designs)?
14
+ 8. Are all prespecified outcomes reported, or only the significant ones?
15
+ 9. Effect size with a confidence interval, not just a p-value?
16
+ 10. Funding source and conflicts of interest declared?
17
+ 11. Retracted, corrected or subject to an expression of concern?
18
+
19
+ ## Named tools
20
+
21
+ | Design | Tool | Domains (summary) |
22
+ |---|---|---|
23
+ | Randomised trial | Cochrane RoB 2 | randomisation process, deviations from intended interventions, missing outcome data, outcome measurement, selection of the reported result |
24
+ | Non-randomised intervention study | ROBINS-I V2 (Nov 2025 draft; check riskofbias.info for the current version) | confounding, classification of intervention, selection into the study, missing data, measurement of the outcome, selection of the reported result (V2 dropped the 2016 version's deviations-from-intended-interventions domain) |
25
+ | Cohort or case-control | Newcastle-Ottawa Scale | selection, comparability, outcome or exposure |
26
+ | Diagnostic accuracy | QUADAS-2 | patient selection, index test, reference standard, flow and timing |
27
+ | Systematic review | AMSTAR 2 | 16 items, including protocol, search, duplicate selection and extraction, risk-of-bias assessment, meta-analysis methods, publication bias |
28
+
29
+ Apply the tool's official guidance documents; this table is a reminder, not a substitute. Sources: RoB 2 and ROBINS-I at https://www.riskofbias.info/ , Cochrane Handbook chapter 8 (https://www.cochrane.org/authors/handbooks-and-manuals/handbook/current/chapter-08), QUADAS-2 (Whiting 2011, PMID 22007046), AMSTAR 2 (https://amstar.ca/Amstar_Checklist.php), GRADE Handbook (https://gdt.gradepro.org/app/handbook/handbook.html).
30
+
31
+ ## Computational and benchmark studies
32
+
33
+ - Dataset: public, described, and free from train/test leakage?
34
+ - Baselines: strong, recent and tuned with the same effort?
35
+ - Variance: multiple seeds or runs, with error bars?
36
+ - Code and data available, and does the reported result reproduce?
37
+ - Claims match the evaluation (no general claims from one dataset)?
38
+
39
+ ## Certainty of a body of evidence (GRADE-style)
40
+
41
+ Start high for randomised evidence and low for observational evidence, then move down for: risk of bias, inconsistency (results disagree), indirectness (different population or outcome from the question), imprecision (wide intervals, small samples), publication bias. Observational evidence may move up for a large effect, a dose-response gradient, or when all plausible residual confounding would have reduced the observed effect. State the final level (high, moderate, low, very low) and each reason.
@@ -0,0 +1,39 @@
1
+ # Search sources
2
+
3
+ Read this when building or running the search in step 3.
4
+
5
+ ## PubMed
6
+
7
+ - Web: https://pubmed.ncbi.nlm.nih.gov/ . Use "Advanced" to see the query translation PubMed actually ran, and record it.
8
+ - Field tags: `[tiab]` title/abstract, `[mh]` MeSH heading, `[majr]` MeSH major topic, `[au]` author, `[dp]` publication date, `[pt]` publication type.
9
+ - Example: `("sleep deprivation"[mh] OR "sleep restriction"[tiab]) AND ("working memory"[tiab] OR "memory, short-term"[mh]) AND 2015:2025[dp]`
10
+ - Look up MeSH terms in the MeSH database before relying on them; newer papers may not be indexed with MeSH yet, so always pair `[mh]` with `[tiab]` synonyms.
11
+ - Programmatic access, NCBI E-utilities, base `https://eutils.ncbi.nlm.nih.gov/entrez/eutils/`:
12
+ - `esearch.fcgi?db=pubmed&term=<query>&retmax=200&usehistory=y` returns PMIDs (and a WebEnv for large sets).
13
+ - `efetch.fcgi?db=pubmed&id=<pmids>&rettype=abstract&retmode=xml` returns records.
14
+ - `esummary.fcgi?db=pubmed&id=<pmids>` returns brief metadata.
15
+ - Pass `tool`, `email` and, if you have one, `api_key`. Limit: 3 requests/second without a key, 10 with one.
16
+ - Biopython wrapper: `Bio.Entrez` (set `Entrez.email` first).
17
+
18
+ ## arXiv
19
+
20
+ - Web search: https://arxiv.org/search/ ; API: `https://export.arxiv.org/api/query?search_query=<q>&start=0&max_results=100` returns Atom XML.
21
+ - Field prefixes: `ti:` title, `abs:` abstract, `au:` author, `cat:` category (for example `cat:cs.LG`), `all:`. Combine with `AND`, `OR`, `ANDNOT`.
22
+ - Example: `search_query=abs:"graph neural network" AND cat:q-bio.QM`. URL-encode it in the request: spaces as `+`, quotes as `%22` (`abs:%22graph+neural+network%22+AND+cat:q-bio.QM`).
23
+ - Terms of use: no more than one request every three seconds, one connection at a time.
24
+ - arXiv papers are preprints and are not peer reviewed. Check whether a later published version exists (the arXiv page often lists a journal reference or DOI).
25
+
26
+ ## Google Scholar
27
+
28
+ - Useful for breadth, citations ("Cited by" for forward snowballing) and grey literature.
29
+ - Operators documented in Scholar help: quotes for phrases, `author:`, `site:`; use Advanced search for title-only words and the sidebar for a date range. Each query returns at most 1,000 results.
30
+ - Results are personalised and change over time; record them as supplementary and not as a reproducible search. No official API; do not scrape it.
31
+
32
+ ## Other sources worth naming to the user
33
+
34
+ - Europe PMC (includes preprints and full text, has a REST API), Semantic Scholar (API with citation graph), Crossref (DOI metadata), bioRxiv / medRxiv (life-science preprints), Cochrane Library (systematic reviews), ClinicalTrials.gov (registered and unpublished trials), field databases such as Embase, Web of Science, Scopus, PsycINFO, IEEE Xplore, ACM DL (often need an institutional subscription).
35
+
36
+ ## Search log template
37
+
38
+ | Source | Date run | Exact query | Filters | Hits | Exported to |
39
+ |---|---|---|---|---|---|
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: llm-app-patterns
3
+ description: Engineering patterns for shipping LLM-backed product features in application code, covering schema-validated structured output, timeouts and bounded retries, streaming responses, prompt caching and token budgets, choosing a model tier, defending against prompt injection from untrusted content, and logging each call so it can be evaluated later. Use when wiring a model API call into a backend or app, hardening an existing LLM feature for production, cutting its latency or cost, or handling tool output and user documents that reach the model.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Provider-neutral; applies to any model API or SDK in any backend language.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: ai
9
+ kete-loom/risk: writes-files
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # LLM app patterns
14
+
15
+ Treat a model call like any other unreliable network dependency that returns untrusted text. This skill covers the code around the call. For wording the prompt itself, use `prompt-engineering`; for measuring quality, use `llm-evals`; for retrieval pipelines, use `rag-pipeline-patterns`.
16
+
17
+ ## 0. Before you write code
18
+
19
+ 1. Find what the project already uses: search for the provider SDK import, an existing client wrapper, env vars holding API keys, and any logging or tracing of model calls. Extend that; don't add a second client.
20
+ 2. Write down the feature contract in one or two lines: input, output shape, latency budget, and what the user sees when the model fails.
21
+ 3. If there is no fallback behaviour for "model unavailable" and the feature is user-facing, **stop and ask the user** what should happen (hide the feature, show an error, use a non-LLM default).
22
+
23
+ ## 1. Structured output
24
+
25
+ 1. Define the output as a schema in code (JSON Schema, Zod, Pydantic, a typed struct). That schema is the source of truth for the prompt, the parser and the tests.
26
+ 2. Use the provider's native structured output or tool/function calling with that schema when available. Otherwise ask for JSON only and parse strictly.
27
+ 3. **Always validate** the parsed result against the schema in your code, even when the provider claims to enforce it. Reject unknown enum values and out-of-range numbers.
28
+ 4. On a validation failure: retry once, sending the validation error back to the model. If it fails again, return the defined fallback. Never pass unvalidated model output to a database write, a shell, a SQL query, an HTML page or another tool.
29
+ 5. Keep schemas flat and small. Add an explicit "unknown" or `null` option so the model is not forced to invent a value.
30
+
31
+ ## 2. Timeouts, retries and failure
32
+
33
+ - Set a client timeout on every call. Streaming calls get a time-to-first-token timeout and an overall timeout.
34
+ - Check the SDK's own retry behaviour before adding yours. The official OpenAI and Anthropic SDKs already retry connection errors, 408, 409, 429 and 5xx (2 retries by default, configurable with `max_retries`). Wrapping your own retry loop around that multiplies the attempts; either tune the SDK setting or disable it and own the loop.
35
+ - Retry only transient failures: timeouts, connection errors, 408, 429, 5xx and provider "overloaded" errors. Use exponential backoff with jitter and honour a `retry-after` header if present. Cap the total at 2 to 3 attempts.
36
+ - Don't retry other 4xx errors (bad request, auth, permission, not found, request too large): fix the request instead.
37
+ - Put a per-user and global concurrency limit in front of the API so a traffic spike cannot burn the rate limit for everyone.
38
+ - If an action has side effects (sending an email, calling a tool that writes), make the retry idempotent or don't retry the step that has the side effect.
39
+
40
+ ## 3. Streaming
41
+
42
+ - Stream when a human is waiting on long free text. Don't stream when the output must be validated as a whole before use (structured output feeding code).
43
+ - Forward chunks to the client as they arrive (SSE or WebSocket), and handle the stream ending early: show partial text as incomplete, never as final.
44
+ - Read the final usage and stop reason from the end of the stream and log them. A stop because of the max-token limit means the answer is truncated; treat it as a failure for structured output.
45
+ - Cancel the upstream request when the client disconnects so you stop paying for tokens nobody reads.
46
+
47
+ ## 4. Cost and latency
48
+
49
+ 1. Measure first: log input tokens, output tokens, cached tokens and latency per call (section 6). Optimise the call that costs the most, not the one you suspect.
50
+ 2. **Prompt caching:** put stable content first (system prompt, tool definitions, long reference documents, few-shot examples) and variable content (the user's turn) last. Some providers cache matching prefixes automatically; others need an explicit cache marker on the stable block. Check the provider's docs for the minimum cacheable length and cache lifetime, and confirm hits in the usage fields.
51
+ 3. Don't put timestamps, request IDs or per-user data at the top of the prompt: they break the cached prefix.
52
+ 4. Set `max_tokens` (or the provider's equivalent) to what the feature needs, not the model maximum.
53
+ 5. Trim context: send only the fields the task needs, summarise long histories, and cap retrieved documents.
54
+ 6. Cache whole responses in your own store only for deterministic, non-personal requests, keyed on model + prompt version + normalised input.
55
+ 7. Use batch APIs for offline jobs that can wait.
56
+
57
+ ## 5. Model selection
58
+
59
+ - Start with the most capable model to prove the feature works and to build the eval set, then try a smaller, cheaper or faster tier and keep it only if it passes the same evals.
60
+ - Route by task: a small model for classification, extraction and routing; a larger one for multi-step reasoning or long writing.
61
+ - Pin an exact model version in config, not a floating alias, so behaviour doesn't change under you. Upgrading the model is a change that must re-run the evals.
62
+ - Keep the model name, temperature and max tokens in config next to the prompt version, not scattered through code.
63
+
64
+ ## 6. Prompt injection and untrusted content
65
+
66
+ Anything the model reads that you did not write is untrusted: user messages, uploaded files, web pages, emails, retrieved documents and tool results.
67
+
68
+ 1. Keep instructions in the system prompt. Put untrusted content in clearly delimited blocks (for example XML-style tags) and say in the instructions that text inside them is data, not instructions.
69
+ 2. **Assume injection will sometimes succeed** and limit the damage: give the model only the tools the task needs, scope credentials to the current user, and enforce authorisation in your code, never by asking the model to check.
70
+ 3. Require human confirmation before irreversible or external actions the model proposes (payments, sending messages, deleting data).
71
+ 4. Never render model output as raw HTML or Markdown that can load remote images or links without sanitising; that is a data-exfiltration path.
72
+ 5. Don't put secrets in prompts. Assume the system prompt can be extracted.
73
+ 6. Add injection attempts to the eval set (`llm-evals`) so a prompt change cannot quietly remove a defence.
74
+
75
+ ## 7. Logging for evaluation
76
+
77
+ Log one record per model call, with the project's normal logger or tracing system:
78
+
79
+ ```
80
+ { request_id, feature, prompt_version, model, params, input_tokens, output_tokens,
81
+ cached_tokens, latency_ms, stop_reason, validation_ok, retry_count, error, user_feedback }
82
+ ```
83
+
84
+ - Log full prompts and outputs only where the project's privacy rules allow it. Redact or hash personal data and secrets before storage, and set a retention period. If unsure, **stop and ask the user**.
85
+ - Version prompts like code (a constant or file with a version string) and log the version, so a regression can be traced to a change.
86
+ - Capture explicit user feedback (thumbs, edits, retries) against the `request_id`. Those records become eval cases.
87
+
88
+ ## Never
89
+
90
+ - Never trust model output as authorisation, as a safe identifier, or as already validated.
91
+ - Never send API keys to a browser or mobile client; call the model from your server.
92
+ - Never retry without a cap, or loop on tool calls without a maximum step count.
93
+ - Never ship a prompt or model change without re-running the evals.
94
+
95
+ ## Report back
96
+
97
+ End with: the files changed, the schema and fallback chosen, timeout and retry settings, how caching is arranged, what is logged, and any risk left open (for example "no eval set yet").
@@ -0,0 +1,17 @@
1
+ {
2
+ "should_trigger": [
3
+ "Our summarize endpoint calls the model and sometimes returns broken JSON, make it return a validated object every time",
4
+ "Add retries with backoff and a timeout around the OpenAI call in our ticket classifier",
5
+ "The chat feature is too expensive, help me restructure the prompt so prompt caching actually hits",
6
+ "Stream the assistant's reply to the browser over SSE and cancel the request if the user closes the tab",
7
+ "Users can upload PDFs that get sent to the LLM, how do we stop instructions inside those files from hijacking it?"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Rewrite this system prompt so the model stops ignoring the tone guidelines",
11
+ "Build a test set of 50 cases and a grader to score our extraction feature",
12
+ "Chunk our docs and set up vector search for the support bot",
13
+ "Write an MCP server that exposes our inventory database as tools",
14
+ "Fine-tune a PyTorch model on our labelled images",
15
+ "Design the planner and executor loop and tool permissions for our coding agent harness"
16
+ ]
17
+ }