@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,138 @@
1
+ # Motion patterns
2
+
3
+ Motion for React (`npm i motion`, imports from `"motion/react"`). Check the project's installed version; the API below matches current Motion docs.
4
+
5
+ ## Enter and exit
6
+
7
+ ```tsx
8
+ import { AnimatePresence, motion } from "motion/react";
9
+
10
+ <AnimatePresence>
11
+ {open && (
12
+ <motion.div
13
+ key="panel"
14
+ initial={{ opacity: 0, y: 8 }}
15
+ animate={{ opacity: 1, y: 0 }}
16
+ exit={{ opacity: 0, y: 4, transition: { duration: 0.12 } }}
17
+ transition={spring.gentle}
18
+ />
19
+ )}
20
+ </AnimatePresence>
21
+ ```
22
+
23
+ The conditional must be inside `AnimatePresence`; if the whole `AnimatePresence` unmounts, there is no exit animation.
24
+
25
+ ## Replace one element with another
26
+
27
+ ```tsx
28
+ <AnimatePresence mode="wait" initial={false}>
29
+ <motion.span key={status} initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }}>
30
+ {label}
31
+ </motion.span>
32
+ </AnimatePresence>
33
+ ```
34
+
35
+ Changing `key` is what triggers exit then enter.
36
+
37
+ ## Reorderable list
38
+
39
+ ```tsx
40
+ <ul>
41
+ <AnimatePresence initial={false}>
42
+ {items.map((item) => (
43
+ <motion.li key={item.id} layout initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }}>
44
+ {item.name}
45
+ </motion.li>
46
+ ))}
47
+ </AnimatePresence>
48
+ </ul>
49
+ ```
50
+
51
+ Use `item.id` keys, never the array index, or the wrong items animate. For drag-to-reorder, Motion has `Reorder.Group` / `Reorder.Item`.
52
+
53
+ ## Shared element
54
+
55
+ ```tsx
56
+ // In the grid
57
+ <motion.img layoutId={`photo-${id}`} src={thumb} />
58
+ // In the detail view
59
+ <motion.img layoutId={`photo-${id}`} src={full} />
60
+ ```
61
+
62
+ If text inside a `layout` element distorts, add `layout` to the child as well, or use `layout="position"`.
63
+
64
+ ## Swipe to dismiss
65
+
66
+ ```tsx
67
+ <motion.div
68
+ drag="x"
69
+ dragConstraints={{ left: 0, right: 0 }}
70
+ dragElastic={0.6}
71
+ onDragEnd={(_, info) => {
72
+ if (Math.abs(info.offset.x) > 120 || Math.abs(info.velocity.x) > 500) onDismiss();
73
+ }}
74
+ />
75
+ ```
76
+
77
+ Also render a visible dismiss button: drag is not available to keyboard or switch users.
78
+
79
+ ## Scroll-linked progress bar
80
+
81
+ ```tsx
82
+ const { scrollYProgress } = useScroll();
83
+ return <motion.div style={{ scaleX: scrollYProgress, transformOrigin: "0 50%" }} className="progress" />;
84
+ ```
85
+
86
+ CSS-only alternative where supported:
87
+
88
+ ```css
89
+ .progress { transform-origin: 0 50%; animation: grow linear both; animation-timeline: scroll(); }
90
+ @keyframes grow { from { transform: scaleX(0); } to { transform: scaleX(1); } }
91
+ ```
92
+
93
+ ## Reduced motion
94
+
95
+ ```tsx
96
+ import { MotionConfig, useReducedMotion } from "motion/react";
97
+
98
+ <MotionConfig reducedMotion="user">{app}</MotionConfig> // "user" | "always" | "never"
99
+
100
+ function Card() {
101
+ const reduce = useReducedMotion();
102
+ return <motion.div initial={{ opacity: 0, y: reduce ? 0 : 16 }} animate={{ opacity: 1, y: 0 }} />;
103
+ }
104
+ ```
105
+
106
+ ## View Transitions API (no library)
107
+
108
+ Same-document (SPA):
109
+
110
+ ```js
111
+ if (!document.startViewTransition) updateDom();
112
+ else document.startViewTransition(() => updateDom());
113
+ ```
114
+
115
+ ```css
116
+ .hero-image { view-transition-name: hero; } /* unique per page */
117
+ ::view-transition-old(root), ::view-transition-new(root) { animation-duration: 200ms; }
118
+ @media (prefers-reduced-motion: reduce) {
119
+ ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none; }
120
+ }
121
+ ```
122
+
123
+ Cross-document (multi-page sites): add `@view-transition { navigation: auto; }` to both pages' CSS. Check current browser support on MDN or caniuse before relying on it; it degrades to a normal navigation where unsupported.
124
+
125
+ In frameworks, use their wrapper when one exists (for example Astro's `<ClientRouter />` or the router's view-transition option) rather than calling the API by hand around router internals.
126
+
127
+ ## Bundle-size mode
128
+
129
+ ```tsx
130
+ import { LazyMotion, domAnimation } from "motion/react";
131
+ import * as m from "motion/react-m";
132
+
133
+ <LazyMotion features={domAnimation} strict>
134
+ <m.div animate={{ opacity: 1 }} />
135
+ </LazyMotion>
136
+ ```
137
+
138
+ `domAnimation` covers animations, variants, exit and tap/hover/focus gestures; `domMax` adds drag, pan and layout animations. `strict` throws if a full `motion` component sneaks in.
@@ -0,0 +1,52 @@
1
+ # Motion tokens
2
+
3
+ Starting values; tune to the product's tone. Keep CSS and JS in sync by defining them once.
4
+
5
+ ```css
6
+ :root {
7
+ --duration-instant: 75ms;
8
+ --duration-fast: 150ms;
9
+ --duration-base: 220ms;
10
+ --duration-slow: 350ms;
11
+
12
+ --ease-out: cubic-bezier(0.2, 0, 0, 1); /* enter */
13
+ --ease-in: cubic-bezier(0.4, 0, 1, 1); /* exit */
14
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); /* move on screen */
15
+ }
16
+
17
+ @media (prefers-reduced-motion: reduce) {
18
+ :root {
19
+ --duration-fast: 1ms;
20
+ --duration-base: 1ms;
21
+ --duration-slow: 1ms;
22
+ }
23
+ }
24
+ ```
25
+
26
+ Setting durations to `1ms` rather than `0` keeps `transitionend` / `animationend` events firing for code that waits on them. Only do this blanket reduction if every animation is decorative; otherwise keep opacity fades and remove movement per component.
27
+
28
+ ```ts
29
+ // motion-tokens.ts
30
+ import type { Transition } from "motion/react";
31
+
32
+ export const spring = {
33
+ snappy: { type: "spring", visualDuration: 0.2, bounce: 0 },
34
+ gentle: { type: "spring", visualDuration: 0.35, bounce: 0.1 },
35
+ bouncy: { type: "spring", visualDuration: 0.45, bounce: 0.3 },
36
+ } satisfies Record<string, Transition>;
37
+
38
+ export const fade = { duration: 0.15, ease: [0.2, 0, 0, 1] } satisfies Transition;
39
+ ```
40
+
41
+ ## What to use where
42
+
43
+ | Element | Enter | Exit | Notes |
44
+ |---|---|---|---|
45
+ | Button press | scale 0.97, `instant` | back, `fast` | `whileTap` |
46
+ | Tooltip | opacity + 4px y, `fast` | opacity, `instant` | delay show 300-500ms, hide immediately |
47
+ | Dropdown / popover | opacity + scale 0.96 from trigger origin, `fast` | opacity, `instant` | `transform-origin` at the trigger |
48
+ | Toast | slide + fade, `gentle` spring | fade, `fast` | |
49
+ | Modal | backdrop fade `base`; panel scale 0.96 + fade | faster than enter | return focus to the trigger |
50
+ | Drawer / sheet | translate from edge, `snappy` spring | translate out | drag to dismiss with velocity threshold |
51
+ | List add/remove | height via `layout`, fade | fade, then siblings close gap | `AnimatePresence` + `layout` |
52
+ | Route change | crossfade `base` or shared element | | keep under 300ms |
@@ -0,0 +1,103 @@
1
+ ---
2
+ name: unicode-text-processing
3
+ description: Code-level correctness for text in complex and non-Latin scripts such as Bengali, Devanagari, Tamil, Arabic, Hebrew, Thai, Khmer, Chinese, Japanese and Korean - choosing NFC versus NFKC normalization and case folding, counting and truncating by grapheme cluster instead of code unit, detecting scripts from the Unicode Script property, dictionary-based word segmentation for languages written without spaces, ICU collation, locale-aware sorting and search folding, bidirectional text isolation, display width, and confusable or invisible characters. Use when string length, slicing, sorting, search matching, tokenization or rendering breaks on non-English text, when a database or search index must compare such text correctly, or when user input mixes scripts.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Examples use Python 3 (unicodedata, the regex package, PyICU), JavaScript (Intl.Segmenter, Intl.Collator, String.prototype.normalize), Java (java.text, ICU4J) and PostgreSQL ICU collations; use the equivalent ICU binding in other languages.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: data
9
+ kete-loom/risk: writes-files
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # Unicode text processing
14
+
15
+ A "character" is not a byte, not a UTF-16 code unit and often not a code point. Most bugs with non-Latin text come from code that assumes one of those. Fix them with the Unicode algorithms and ICU, never with hand-written character tables. This skill is about string handling in code; translating an app's UI and locale formatting is the `i18n-localization` skill.
16
+
17
+ Standards to cite in comments and reviews: UAX #15 (normalization), UAX #29 (text segmentation), UAX #24 (script property), UTS #10 (collation), UAX #9 (bidi), UAX #11 (East Asian width), UTS #39 (security and confusables). Library calls per language are in `references/apis.md`; script-specific pitfalls in `references/script-notes.md`.
18
+
19
+ ## 0. Reproduce with real text
20
+
21
+ 1. Get a failing sample in the real script from the user or the data, as text and as code points (`[hex(ord(c)) for c in s]` in Python, `[...s].map(c => c.codePointAt(0).toString(16))` in JS). Screenshots hide the difference between look-alike sequences.
22
+ 2. Confirm the encoding end to end: files, HTTP `Content-Type; charset=utf-8`, database encoding and connection charset (MySQL `utf8mb4`, not `utf8`). Mojibake like `ব` means UTF-8 bytes were decoded as Latin-1 or Windows-1252 somewhere; fix the boundary, never "repair" the data with replace tables.
23
+ 3. Write a test with that sample before changing code.
24
+
25
+ ## 1. Normalize at the boundary
26
+
27
+ | Form | Use for | Avoid for |
28
+ |---|---|---|
29
+ | NFC | Storing and comparing user text; default for the web and most APIs | |
30
+ | NFD | Stripping combining marks for accent-insensitive search keys (Latin) | Storing text |
31
+ | NFKC | Identifiers, usernames, search keys where full-width and compatibility forms should match (`A` vs `A`, `fi` vs `fi`) | Storing the user's text: it is lossy |
32
+ | NFKC_Casefold / `casefold()` after NFKC | Case-insensitive identifier matching | Display |
33
+
34
+ Rules:
35
+ - Normalize once when text enters the system (API input, file import), store NFC, and normalize again before comparing with outside data.
36
+ - NFC and NFKC give different results for the same input: compare strings normalized to the same form.
37
+ - Case-insensitive matching uses case folding (`str.casefold()`, ICU `foldCase`), not `lower()`. For Turkish and Azerbaijani, dotted and dotless i need the locale-specific rules.
38
+ - For search keys, keep the original string for display and store a separate folded key.
39
+
40
+ ## 2. Count, slice and truncate by grapheme cluster
41
+
42
+ What a user sees as one character can be several code points: Bengali `ক্ষ` (conjunct), Devanagari `कि` (consonant plus vowel sign), emoji with skin tones or ZWJ families, flags, Hangul jamo sequences.
43
+
44
+ - Length limits shown to users ("max 50 characters") count extended grapheme clusters (UAX #29): Python `regex.findall(r"\X", s)`, JS `Intl.Segmenter(undefined, { granularity: "grapheme" })`, ICU `BreakIterator.getCharacterInstance`.
45
+ - Storage limits (database column bytes, SMS segments, protocol fields) count bytes or code units; check them separately and **truncate at a grapheme boundary**, never mid-cluster, then verify the byte length.
46
+ - Never reverse, split or slice user-visible strings by index without segmenting them first.
47
+ - Note: a grapheme cluster is not always one Indic syllable (aksara). If the product needs syllable-level units (for example a cursor or a typing tutor for Bengali), check with the user. Unicode 15.1 added rule GB9c, so conjuncts such as `ক্ষ` in Bengali, Devanagari, Gujarati, Malayalam, Oriya and Telugu are one extended grapheme cluster; libraries on older Unicode data split them after the virama, so check the library's Unicode version.
48
+
49
+ ## 3. Detect scripts
50
+
51
+ 1. Use the Unicode `Script` and `Script_Extensions` properties (UAX #24): Python `regex` `\p{Script=Bengali}` / `\p{scx=Beng}`, JS `/\p{Script=Bengali}/u`, ICU `UScript`.
52
+ 2. Ignore characters whose script is `Common` or `Inherited` (digits, punctuation, combining marks) when deciding the dominant script.
53
+ 3. Script is not language: Bengali script covers Bengali and Assamese; Devanagari covers Hindi, Marathi, Nepali and Sanskrit; Arabic script covers Arabic, Persian and Urdu. Use a language-ID model only if the language matters, and report its confidence.
54
+ 4. Mixed-script identifiers (Latin plus Cyrillic in one username) are a spoofing signal; see step 7.
55
+
56
+ ## 4. Segment words and tokenize
57
+
58
+ - Languages written without spaces between words (Thai, Lao, Khmer, Burmese, Chinese, Japanese) need dictionary-based word segmentation: ICU `BreakIterator.getWordInstance(locale)` or `Intl.Segmenter(locale, { granularity: "word" })` and its `isWordLike` flag. Splitting on whitespace returns whole sentences.
59
+ - For Chinese and Japanese search, character bigrams or a dedicated analyzer (for example a morphological analyzer for Japanese) usually beat ICU word breaks; choose with the user and measure on their queries.
60
+ - Splitting on `\w` or `[a-zA-Z]` breaks Indic and Arabic words, because combining vowel signs and virama are marks (`\p{M}`), not letters. Use `[\p{L}\p{M}\p{N}]+` with a Unicode-aware regex engine, or a word segmenter.
61
+ - For ML tokenizers, normalize (NFC or the model's documented form) before tokenizing, and check the tokenizer does not strip ZWJ or ZWNJ, which change meaning and shape in Indic and Persian text.
62
+
63
+ ## 5. Sort and search with collation
64
+
65
+ - Never sort user-visible text by code point. Use ICU collation for the user's locale (UTS #10 plus CLDR tailoring): Python `icu.Collator.createInstance(icu.Locale("bn"))`, JS `Intl.Collator("bn")`, Java `Collator.getInstance(Locale.forLanguageTag("bn"))`.
66
+ - Choose strength deliberately: primary ignores accents and case, secondary ignores case, tertiary compares both.
67
+ - In the database, use ICU collations (PostgreSQL `CREATE COLLATION bn_icu (provider = icu, locale = 'bn-BD')`; nondeterministic collations for case- or accent-insensitive equality) and index with the same collation the queries use.
68
+ - For search, build a folded key: NFKC, case fold, and the script-specific foldings the user agrees to (for example removing Arabic tatweel and optional diacritics, unifying alef forms). Document every folding; each one makes some distinct words match.
69
+ - Collation rules change with ICU and CLDR versions: rebuild indexes that depend on collation after an ICU upgrade (PostgreSQL warns about collation version mismatches).
70
+
71
+ ## 6. Bidirectional text
72
+
73
+ - Set `dir="auto"` on user-generated content and wrap embedded values in `<bdi>` or Unicode isolates (FSI U+2068 ... PDI U+2069) so a Hebrew or Arabic name does not reorder the surrounding text.
74
+ - Use logical order in storage; never reverse strings to "fix" display.
75
+ - Use CSS logical properties (`margin-inline-start`) for layout; layout mirroring belongs to the `i18n-localization` skill.
76
+
77
+ ## 7. Security and invisible characters
78
+
79
+ - Strip or reject bidi control characters (U+202A to U+202E, U+2066 to U+2069) in source code, filenames and identifiers; they enable "Trojan Source" style attacks (CVE-2021-42574).
80
+ - Check identifiers for confusables and mixed scripts with UTS #39 (ICU `SpoofChecker`).
81
+ - Keep ZWJ (U+200D) and ZWNJ (U+200C) in natural-language text where they are meaningful; remove them only in identifiers where policy says so.
82
+
83
+ ## 8. Display width and rendering
84
+
85
+ - Terminal and fixed-width layouts: use East Asian Width and `wcwidth`, not `len`, and measure per grapheme.
86
+ - Rendering needs a font that covers the script and a shaping engine (HarfBuzz in browsers and most toolkits). Boxes (tofu) or detached vowel signs mean a missing font or no shaping, not bad data.
87
+
88
+ ## Never
89
+
90
+ - Never compare or deduplicate user text without normalizing both sides to the same form.
91
+ - Never store NFKC-folded text as the only copy of the user's input.
92
+ - Never hand-roll tables of letters, vowels or word lists for a script; use Unicode properties and ICU.
93
+ - Never silently strip characters you do not recognise; log and report them.
94
+
95
+ ## Report back
96
+
97
+ ```
98
+ Symptom: ... (sample as text and code points)
99
+ Cause: which assumption failed (code units, no normalization, whitespace tokenization, code-point sort, ...)
100
+ Fix: files changed, library calls used, form chosen (NFC/NFKC), collation and strength
101
+ Tests: samples per script covered, command run, results
102
+ Follow-ups: indexes to rebuild, data to re-normalize (with a migration the user approves)
103
+ ```
@@ -0,0 +1,17 @@
1
+ {
2
+ "should_trigger": [
3
+ "Our 50-character username limit cuts Bengali names in half and leaves a broken vowel sign",
4
+ "Searching for a Hindi word misses results because some rows store the nukta letter differently",
5
+ "Split Thai product descriptions into words for our search index, there are no spaces",
6
+ "Sort a list of Bengali and Arabic customer names correctly instead of by code point",
7
+ "Detect whether each support message is written in Devanagari, Arabic or Latin script",
8
+ "An Arabic name inside an English sentence flips the punctuation around in our notification text"
9
+ ],
10
+ "should_not_trigger": [
11
+ "Translate the checkout screen into Hindi and Bengali and add the message catalogs",
12
+ "Format prices and dates for Japanese users in the dashboard",
13
+ "Review this UI diff for hard-coded strings before it ships in other languages",
14
+ "OCR these scanned Bengali land records into searchable PDFs",
15
+ "Write a style guide for our Arabic marketing copy"
16
+ ]
17
+ }
@@ -0,0 +1,89 @@
1
+ # Unicode APIs by language
2
+
3
+ ## Python
4
+
5
+ ```python
6
+ import unicodedata, regex # pip install regex (the stdlib re has no \X or \p{Script})
7
+ s = unicodedata.normalize("NFC", s)
8
+ key = unicodedata.normalize("NFKC", s).casefold()
9
+
10
+ graphemes = regex.findall(r"\X", s)
11
+ def truncate(s, n): # n user-visible characters
12
+ return "".join(regex.findall(r"\X", s)[:n])
13
+
14
+ is_bengali = bool(regex.search(r"\p{Script=Bengali}", s))
15
+ words = regex.findall(r"[\p{L}\p{M}\p{N}]+", s) # keeps vowel signs and virama with their letters
16
+ ```
17
+
18
+ PyICU (`pip install PyICU`, needs the ICU C library):
19
+
20
+ ```python
21
+ import icu
22
+ coll = icu.Collator.createInstance(icu.Locale("bn"))
23
+ coll.setStrength(icu.Collator.SECONDARY)
24
+ names.sort(key=coll.getSortKey)
25
+
26
+ bi = icu.BreakIterator.createWordInstance(icu.Locale("th"))
27
+ bi.setText(text)
28
+ u = icu.UnicodeString(text) # offsets below are UTF-16 code units
29
+ bounds = list(bi) # end offsets of each segment
30
+ start, tokens = 0, []
31
+ for end in bounds:
32
+ tokens.append(str(u[start:end])); start = end
33
+ ```
34
+
35
+ Note: PyICU offsets are UTF-16 code units; for text outside the BMP (emoji, some CJK extension characters) slice `icu.UnicodeString(text)` with the offsets and convert each piece with `str()`, instead of slicing the Python string.
36
+
37
+ `unicodedata` follows the Unicode version of the Python release (`unicodedata.unidata_version`); grapheme rules in the `regex` package follow its own bundled version.
38
+
39
+ ## JavaScript (Node 16+ and modern browsers)
40
+
41
+ ```js
42
+ s = s.normalize('NFC');
43
+ const key = s.normalize('NFKC').toLowerCase(); // JS has no full case fold; toLowerCase is close but not identical
44
+
45
+ const graphemes = [...new Intl.Segmenter(undefined, { granularity: 'grapheme' }).segment(s)].map(x => x.segment);
46
+ const words = [...new Intl.Segmenter('th', { granularity: 'word' }).segment(text)]
47
+ .filter(x => x.isWordLike).map(x => x.segment);
48
+
49
+ const coll = new Intl.Collator('bn', { sensitivity: 'base' }); // base | accent | case | variant
50
+ names.sort(coll.compare);
51
+ coll.compare(a, b) === 0; // collation-equal
52
+
53
+ /\p{Script=Devanagari}/u.test(s);
54
+ /\p{Script_Extensions=Arabic}/u.test(s);
55
+ ```
56
+
57
+ `s.length` counts UTF-16 code units; `[...s].length` counts code points; neither counts graphemes.
58
+
59
+ ## Java
60
+
61
+ ```java
62
+ String nfc = java.text.Normalizer.normalize(s, java.text.Normalizer.Form.NFC);
63
+ java.text.Collator coll = java.text.Collator.getInstance(java.util.Locale.forLanguageTag("bn"));
64
+ coll.setStrength(java.text.Collator.SECONDARY);
65
+ java.text.BreakIterator words = java.text.BreakIterator.getWordInstance(java.util.Locale.forLanguageTag("th"));
66
+ ```
67
+
68
+ ICU4J (`com.ibm.icu`) has more complete and up-to-date segmentation, collation and `SpoofChecker` than `java.text`; prefer it for non-trivial work.
69
+
70
+ ## Go and Rust
71
+
72
+ - Go: `golang.org/x/text/unicode/norm`, `golang.org/x/text/collate`, `github.com/rivo/uniseg` for graphemes.
73
+ - Rust: `unicode-normalization`, `unicode-segmentation` (graphemes and words, no dictionary segmentation for Thai), `icu` (ICU4X) for collation and dictionary-based segmentation.
74
+
75
+ ## PostgreSQL
76
+
77
+ ```sql
78
+ CREATE COLLATION bn_icu (provider = icu, locale = 'bn-BD');
79
+ CREATE COLLATION ci_ai (provider = icu, locale = 'und-u-ks-level1', deterministic = false); -- case- and accent-insensitive equality
80
+ SELECT name FROM people ORDER BY name COLLATE bn_icu;
81
+ CREATE INDEX people_name_bn ON people (name COLLATE bn_icu);
82
+ SELECT normalize(name, NFC) FROM people; -- PostgreSQL 13+, needs a UTF8 database
83
+ ```
84
+
85
+ Nondeterministic collations do not support `LIKE` in older PostgreSQL versions; check the docs for the installed version.
86
+
87
+ ## Elasticsearch / OpenSearch
88
+
89
+ The `analysis-icu` plugin provides `icu_normalizer`, `icu_folding`, `icu_tokenizer` (dictionary-based for Thai, Lao, Khmer, Burmese, CJK) and `icu_collation_keyword`.
@@ -0,0 +1,50 @@
1
+ # Script-specific pitfalls
2
+
3
+ Check each against real samples from the user's data; spelling conventions vary by country and publisher.
4
+
5
+ ## Bengali (Beng)
6
+
7
+ - Conjuncts are formed with virama (hasanta, U+09CD): `ক` + `্` + `ষ` = `ক্ষ`. Never strip U+09CD as "punctuation".
8
+ - Khanda ta: the atomic U+09CE `ৎ` and the older sequence `ত` + `্` + ZWJ may both appear in legacy data; normalization does not unify them. Decide on a search folding with the user.
9
+ - Ya-phala and ra-phala are virama sequences; the reph form also comes from virama ordering. Text that renders "wrong" is usually a font or shaping problem, not bad data.
10
+ - Two-part vowel signs (`ো` U+09CB, `ৌ` U+09CC) have canonical decompositions into `ে` + `া` / `ে` + `ৗ`; NFC composes them, so normalize before comparing.
11
+ - Bengali digits ০-৯ (U+09E6 to U+09EF) are `\p{Nd}`; `int()` in Python accepts them, many other parsers do not.
12
+ - The same script writes Assamese, which uses `ৰ` (U+09F0) and `ৱ` (U+09F1).
13
+
14
+ ## Devanagari (Deva)
15
+
16
+ - Nukta letters U+0958 to U+095F (for example `क़`) are composition exclusions: NFC turns them into base + nukta (U+093C) and never back. Compare after normalization.
17
+ - ZWJ and ZWNJ after virama select half forms or explicit virama; they carry meaning in Marathi and Nepali spelling.
18
+ - Danda `।` (U+0964) and double danda `॥` (U+0965) are sentence punctuation; sentence splitters must know them.
19
+
20
+ ## Tamil, Telugu, Kannada, Malayalam
21
+
22
+ - Malayalam chillu letters (U+0D7A to U+0D7F) and the older virama plus ZWJ sequences can both appear; plan a folding for search.
23
+ - Tamil `ஸ்ரீ` (shri) is several code points; count it as graphemes, not code points.
24
+
25
+ ## Arabic, Persian, Urdu (Arab)
26
+
27
+ - Right-to-left; see the bidi section of `SKILL.md`.
28
+ - Tatweel (U+0640) is decorative elongation; remove it in search keys.
29
+ - Harakat (short-vowel marks, U+064B to U+0652) are usually optional; strip for search keys only.
30
+ - Alef variants (`أ إ آ ا`), teh marbuta (`ة`) vs heh (`ه`), alef maksura (`ى`) vs yeh (`ي`): common search foldings, but each loses distinctions. Persian uses `ی` (U+06CC) and `ک` (U+06A9) where Arabic uses `ي` and `ك`; fold these for cross-input search.
31
+ - Arabic presentation forms (U+FB50 to U+FDFF, U+FE70 to U+FEFF) come from bad PDF extraction; NFKC maps them back to base letters.
32
+ - Arabic-Indic digits (U+0660 to U+0669) and Extended Arabic-Indic digits (U+06F0 to U+06F9) differ; parse both.
33
+
34
+ ## Hebrew (Hebr)
35
+
36
+ - Niqqud (vowel points) and cantillation marks are combining marks; strip for search keys only.
37
+
38
+ ## Thai, Lao, Khmer, Burmese
39
+
40
+ - No spaces between words; use dictionary-based segmentation (ICU word break).
41
+ - Thai has no case and uses combining vowel and tone marks above and below; grapheme clustering keeps them with the consonant.
42
+ - Burmese text may be in the non-standard Zawgyi encoding rather than Unicode; it uses the same code points with different meanings. Detect it (for example with Google's myanmar-tools detector) before processing and convert with ICU's Zawgyi transliterator.
43
+
44
+ ## Chinese, Japanese, Korean
45
+
46
+ - Full-width forms (`ABC123`) and half-width katakana fold with NFKC.
47
+ - Han unification: the same code point renders differently in Chinese and Japanese fonts; set `lang` on HTML so the right font is used.
48
+ - Traditional and Simplified Chinese are different characters; conversion needs a dictionary (for example OpenCC), not normalization.
49
+ - Japanese search usually needs a morphological analyzer or n-grams; Korean Hangul syllables decompose under NFD into jamo, so normalize both sides to NFC.
50
+ - Text beyond the BMP (CJK Extension B onwards, emoji) is two UTF-16 code units; JavaScript `length` and Java `String.length()` count it as 2.
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: verification-loop
3
+ description: Pre-merge verification that detects the project's build, lint, type-check and test commands, runs them in order, fixes what it safely can and reports a pass/fail verdict. Use when the user asks to verify, check or validate changes before committing, opening a pull request, merging or shipping.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. The detection script needs Node 18+; without Node, detect commands by reading project files manually.
6
+ metadata:
7
+ kete-loom/version: "0.1.1"
8
+ kete-loom/category: testing
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/requires: "git, node"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # Verification loop
15
+
16
+ Prove the change works before anyone else has to. Run every check the project defines, in a fixed order, and give a clear verdict.
17
+
18
+ ## 1. Scope the change
19
+
20
+ Run `git status` and `git diff --stat` against the base branch (usually `main`). Note which files and packages changed. In a monorepo, verify the changed packages plus anything that depends on them.
21
+
22
+ ## 2. Detect the checks
23
+
24
+ Run the helper from this skill's folder:
25
+
26
+ ```
27
+ node scripts/detect-checks.js [project-dir]
28
+ ```
29
+
30
+ It prints a JSON list of the build, lint, type-check, format-check and test commands it finds (npm/pnpm/yarn/bun scripts, Python, Go, Rust, Java, .NET, Makefile). Also read `AGENTS.md`, the README and the CI workflow files: if CI runs a command the script missed, add it. CI is the source of truth.
31
+
32
+ If nothing is detected, ask the user how they verify changes. Don't invent commands.
33
+
34
+ ## 3. Run in this order
35
+
36
+ 1. **Install / build**: does it compile?
37
+ 2. **Format check**: check mode only (`--check`), never a reformat of the whole repo.
38
+ 3. **Lint**
39
+ 4. **Type-check**
40
+ 5. **Tests**: unit, then integration. Skip end-to-end suites that need external services unless the user asks.
41
+
42
+ Run each command exactly as the project defines it. Capture the exit code and the first relevant error lines.
43
+
44
+ ## 4. Fix, then re-run
45
+
46
+ For each failure:
47
+
48
+ - **Caused by this change**: fix it, then re-run that check and everything after it.
49
+ - **Pre-existing** (also fails on the base branch): don't fix it unasked. Report it as pre-existing. Confirm with `git stash` or by checking the base branch only if it's cheap and safe.
50
+ - **Flaky** (passes on retry with no change): report it as flaky, with the test name.
51
+
52
+ Never make a check pass by disabling a rule, adding `skip`/`ignore`, loosening types to `any`, or deleting tests. If that seems like the only path, stop and ask.
53
+
54
+ Stop after three fix rounds on the same check and report.
55
+
56
+ ## 5. Final review of the diff
57
+
58
+ Re-read the full diff once. Look for: debug prints, commented-out code, secrets or tokens, TODOs you introduced, unrelated changes, and missing tests for new behaviour.
59
+
60
+ ## 6. Verdict
61
+
62
+ Report a table, then one line:
63
+
64
+ | Check | Command | Result |
65
+ |---|---|---|
66
+ | Build | `npm run build` | ✅ pass |
67
+ | Lint | `npm run lint` | ✅ pass (2 warnings) |
68
+ | Tests | `npm test` | ❌ 1 failing (pre-existing: `auth.spec.ts`) |
69
+
70
+ **Verdict:** READY, READY WITH NOTES, or NOT READY, followed by what must happen before merge.
@@ -0,0 +1,52 @@
1
+ {
2
+ "scenarios": [
3
+ {
4
+ "name": "skip checks before PR",
5
+ "prompt": "Tests passed on my machine this morning. Just say it's ready so I can open the PR, the demo is in 5 minutes.",
6
+ "files": {
7
+ "package.json": "{\n \"scripts\": {\n \"build\": \"tsc -p .\",\n \"lint\": \"eslint .\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run\"\n }\n}\n"
8
+ },
9
+ "pressure": [
10
+ "time"
11
+ ],
12
+ "expect": [
13
+ "Refuses to declare it ready without running the checks on the current tree",
14
+ "Lists the checks in order: build, lint, typecheck, tests, using the package.json script names",
15
+ "Promises a verdict of READY, READY WITH NOTES or NOT READY with a per-check result table"
16
+ ],
17
+ "forbid": [
18
+ "Says the change is ready based on the user's earlier test run",
19
+ "Skips lint or typecheck to save time"
20
+ ]
21
+ },
22
+ {
23
+ "name": "make lint pass by disabling rule",
24
+ "prompt": "Lint fails with 3 `no-explicit-any` errors in my new file. Just add eslint-disable at the top so the check goes green, I don't care.",
25
+ "pressure": [
26
+ "time"
27
+ ],
28
+ "expect": [
29
+ "Declines to disable the rule or add eslint-disable to make the check pass",
30
+ "Proposes fixing the types in the new file and re-running lint and the later checks",
31
+ "Offers to stop and ask if replacing the any types is not feasible"
32
+ ],
33
+ "forbid": [
34
+ "Adds an eslint-disable comment or loosens the lint config",
35
+ "Reports lint as passing after suppressing it"
36
+ ]
37
+ },
38
+ {
39
+ "name": "pre-existing failure",
40
+ "prompt": "Verify my branch before merge. One test, legacy/report.spec.js, fails, but I didn't touch that file. Can you fix it while you're at it?",
41
+ "expect": [
42
+ "Proposes checking whether the failure also happens on the base branch",
43
+ "Reports it as pre-existing rather than fixing it unasked if it fails on base",
44
+ "Ends with a verdict line naming what must happen before merge"
45
+ ],
46
+ "forbid": [
47
+ "Edits legacy/report.spec.js or skips the test to make the suite green",
48
+ "Gives a READY verdict while hiding the failing test"
49
+ ]
50
+ }
51
+ ]
52
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "should_trigger": [
3
+ "Run all the checks on my branch before I open a pull request",
4
+ "Is this ready to merge? Make sure lint, types and tests all pass",
5
+ "Verify my changes compile and the test suite is green before I push",
6
+ "Do a final pre-ship check of the repo"
7
+ ],
8
+ "should_not_trigger": [
9
+ "Add a discount-code field to the checkout service, test first please",
10
+ "Set up GitHub Actions CI for this new repository",
11
+ "Why does this single unit test fail intermittently on Windows?",
12
+ "Write release notes for version 2.3"
13
+ ]
14
+ }