@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,91 @@
1
+ ---
2
+ name: aws-patterns
3
+ description: Designs and reviews workloads on Amazon Web Services, covering least-privilege IAM roles and policies, picking Lambda versus ECS Fargate versus EC2, S3 bucket hardening, RDS and Aurora setup, VPC subnets and security groups, Secrets Manager and Parameter Store, and the bill surprises that come from NAT gateways, public IPv4 and idle resources. Use when building or changing something on AWS, writing an IAM policy, choosing an AWS compute service, or asking why an AWS account costs more than expected.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Live checks need the AWS CLI with credentials for the target account. Infrastructure code may be Terraform, CloudFormation, CDK or SAM.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: devops
9
+ kete-loom/risk: network
10
+ kete-loom/requires: "aws"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # AWS patterns
15
+
16
+ Build on AWS so that every principal has only the access it needs, nothing is public by accident, secrets never sit in code, and the monthly bill holds no surprises. Terraform syntax itself belongs to `terraform-patterns`; container image detail to `docker-patterns`; CI wiring to `github-actions-ci`.
17
+
18
+ ## Ground rules
19
+
20
+ 1. **Everything is code.** Create resources through the project's IaC (Terraform, CloudFormation, CDK or SAM). Console changes are for exploring only; if you find drift, report it, don't "fix" it by clicking.
21
+ 2. **Roles, not users.** Workloads get IAM roles (Lambda execution role, ECS task role, EC2 instance profile). People sign in through IAM Identity Center. Never create long-lived access keys for an app or a CI system; CI uses OIDC federation (see `github-actions-ci`).
22
+ 3. **Least privilege, scoped by resource.** No `"Action": "*"` or `"Resource": "*"` on write actions. Name the ARNs. Use conditions (`aws:SourceArn`, `aws:PrincipalOrgID`, `s3:prefix`) when a service or cross-account principal is involved.
23
+ 4. **Private by default.** S3 Block Public Access stays on at account and bucket level. Databases live in private subnets with no public endpoint. Serve public content through CloudFront with origin access control, not a public bucket.
24
+ 5. **Secrets in Secrets Manager or SSM Parameter Store (`SecureString`).** Never in environment variables committed to the repo, task definitions in git, or user data. Grant `secretsmanager:GetSecretValue` on that one secret ARN only.
25
+ 6. **Encrypt and log.** Encryption at rest on S3, EBS, RDS (default keys are fine unless compliance asks for customer-managed KMS keys). CloudTrail on in every region for the account.
26
+ 7. **Tag everything** with at least owner, environment and cost centre so cost reports mean something.
27
+
28
+ ## Choosing compute
29
+
30
+ | Need | Pick | Watch out for |
31
+ |---|---|---|
32
+ | Event-driven, spiky, short tasks (API, queue consumer, cron) | Lambda | 15-minute maximum run time; cold starts; database connection storms (use RDS Proxy) |
33
+ | Long-running containers without managing servers | ECS on Fargate | Pay per vCPU/memory even when idle; right-size tasks |
34
+ | Many services, team already runs Kubernetes | EKS | Control-plane fee per cluster plus node cost; operational load. See `kubernetes-patterns` |
35
+ | GPUs, special kernels, licensed software, steady high load | EC2 (Auto Scaling group) | You patch the OS; use SSM Session Manager instead of SSH keys and open port 22 |
36
+ | Static site | S3 + CloudFront | Bucket stays private behind origin access control |
37
+
38
+ Decision rule: start with the simplest option that meets the run-time and scaling need. If the user wants EKS for one or two services, ask whether they have Kubernetes experience before committing.
39
+
40
+ ## Networking basics
41
+
42
+ 1. One VPC per environment, spread across at least two Availability Zones.
43
+ 2. Public subnets hold only load balancers and NAT gateways. App and database subnets are private.
44
+ 3. Security groups reference other security groups, not CIDR ranges: the database SG allows port 5432 from the app SG only. Never `0.0.0.0/0` on anything but 80/443 on a load balancer.
45
+ 4. Add a gateway VPC endpoint for S3 (and DynamoDB if used): it costs nothing and keeps that traffic off the NAT gateway.
46
+ 5. Use interface endpoints for other heavy AWS API traffic (ECR, Secrets Manager, CloudWatch Logs) when NAT data charges are high.
47
+
48
+ ## Data
49
+
50
+ - **S3:** versioning on for anything you can't regenerate; lifecycle rules to move or expire old objects and abort incomplete multipart uploads; bucket policy that denies non-TLS requests (`aws:SecureTransport` = false).
51
+ - **RDS / Aurora:** Multi-AZ for production, automated backups with a retention that matches the recovery need, deletion protection on, storage encrypted, credentials managed by Secrets Manager (RDS can manage and rotate the master password). Connect with IAM auth or a secret, never a password in config.
52
+ - **DynamoDB:** design keys around access patterns first; on-demand capacity until traffic is predictable.
53
+
54
+ ## Cost traps to check every time
55
+
56
+ - NAT gateway hourly charge plus per-GB processing; one per AZ multiplies it. Traffic to S3 through NAT is the classic waste.
57
+ - Public IPv4 addresses are billed per hour, including ones attached to running instances and idle Elastic IPs.
58
+ - Cross-AZ and internet data transfer.
59
+ - Unattached EBS volumes, old snapshots, idle load balancers, forgotten dev RDS instances.
60
+ - CloudWatch Logs with no retention set (the default is never expire).
61
+ - Lambda with oversized memory or a retry loop on a failing event source.
62
+
63
+ Set an AWS Budgets alert on every account before building anything else.
64
+
65
+ ## Steps for a change
66
+
67
+ 1. Read the existing IaC and identify the account, region and environment. If you can't tell which account a change targets, **stop and ask**.
68
+ 2. Write the change in IaC following the ground rules.
69
+ 3. Validate it: `terraform plan`, `cdk diff`, `sam validate` or `aws cloudformation validate-template`. For IAM, run `aws accessanalyzer validate-policy --policy-type IDENTITY_POLICY --policy-document file://policy.json` and fix every error and security warning.
70
+ 4. Show the user the plan. **Stop and ask before** any apply that deletes or replaces a stateful resource (database, bucket, volume), widens a security group to the internet, or touches production.
71
+ 5. After apply, verify: `aws sts get-caller-identity` for identity, the service's health check, and that no new resource is public.
72
+
73
+ ## Never
74
+
75
+ - Commit access keys, or put them in `.env` files that reach git.
76
+ - Use the root user for anything except the few tasks that require it; root has MFA and no access keys.
77
+ - Attach `AdministratorAccess` to a workload role "to get it working".
78
+ - Run destructive CLI commands (`aws s3 rm --recursive`, `delete-db-instance`) without the user confirming the exact target.
79
+
80
+ ## Review output
81
+
82
+ When asked to review AWS setup, report:
83
+
84
+ ```
85
+ AWS review: <account/env>
86
+ Critical: <public data, admin roles, leaked keys>
87
+ High: <missing encryption, open security groups, no backups>
88
+ Cost: <each trap found, rough monthly impact if known>
89
+ Suggested IaC changes: <file: change>
90
+ Not checked: <what you had no access to>
91
+ ```
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "Write a least-privilege IAM policy so our Lambda can only read one S3 bucket and one secret",
4
+ "Should this background worker run on Lambda, ECS Fargate or plain EC2?",
5
+ "Our AWS bill doubled and most of it is NAT gateway data processing, what are we doing wrong?",
6
+ "Set up a VPC with private subnets for RDS Postgres and security groups that only let the app in",
7
+ "Where should our app's database password live on AWS instead of the task definition env vars?"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Configure GitHub Actions to assume an AWS role with OIDC instead of access keys",
11
+ "Refactor our Terraform modules to use for_each instead of count",
12
+ "Deploy the service to Google Cloud Run with its own service account",
13
+ "Plan a canary rollout for the new checkout service with automatic rollback",
14
+ "Write a Kubernetes Deployment manifest with resource limits and probes"
15
+ ]
16
+ }
@@ -0,0 +1,86 @@
1
+ ---
2
+ name: azure-patterns
3
+ description: Sets up and audits Microsoft Azure workloads with Entra ID and managed identities instead of stored credentials, Azure RBAC at resource scope, a reasoned choice among App Service, Container Apps, Azure Functions and AKS, Azure SQL and Cosmos DB configuration, Key Vault references, virtual networks with private endpoints and NSGs, and Azure spending pitfalls like idle App Service plans and over-provisioned RUs. Use when building on Azure, wiring a managed identity, deciding where an Azure app should run, or explaining an Azure invoice.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Live checks need the Azure CLI signed in to the target subscription. Infrastructure code may be Bicep, ARM or Terraform.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: devops
9
+ kete-loom/risk: network
10
+ kete-loom/requires: "az"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # Azure patterns
15
+
16
+ Build on Azure so apps authenticate with managed identities, secrets live in Key Vault, data services sit behind private endpoints, and costs are predictable. Terraform detail is in `terraform-patterns`, Kubernetes manifests in `kubernetes-patterns`, CI login in `github-actions-ci`, .NET code in `aspnet-core-patterns`.
17
+
18
+ ## Ground rules
19
+
20
+ 1. **Structure:** management groups, then one subscription per environment (or at least per prod / non-prod), then resource groups per application and environment. Resource groups share a lifecycle: everything in one is deployed and deleted together.
21
+ 2. **Managed identities for workloads.** Use a system-assigned identity when one resource needs access; a user-assigned identity when several resources share it or it must exist before the resource. In code use `DefaultAzureCredential` (or the language's equivalent) so the same code works locally with a developer sign-in and in Azure with the identity.
22
+ 3. **No client secrets in apps.** If an app registration secret seems needed, **stop and ask** whether a managed identity or workload identity federation (for CI and for AKS) works instead. If a secret is unavoidable, store it in Key Vault and set an expiry reminder.
23
+ 4. **Azure RBAC, narrowest scope, data-plane roles.** Grant `Key Vault Secrets User` on the vault, `Storage Blob Data Reader` on the storage account or container. Never Owner or Contributor on a subscription for a workload.
24
+ 5. **Key Vault for secrets, keys and certificates.** Use the RBAC permission model, soft delete and purge protection. App Service and Functions read secrets through Key Vault references in app settings; Container Apps through secret references to Key Vault.
25
+ 6. **Everything in IaC** (Bicep, ARM or Terraform). Preview with `az deployment group what-if` or `terraform plan`.
26
+
27
+ ## Choosing compute
28
+
29
+ | Need | Pick | Watch out for |
30
+ |---|---|---|
31
+ | Web app or API, code or container, simple ops | App Service | The App Service plan bills while running even with zero traffic; deployment slots for zero-downtime swaps |
32
+ | Containerised microservices, scale to zero, Dapr or KEDA scaling | Container Apps | Set min replicas deliberately; workload profiles for dedicated capacity |
33
+ | Event-driven functions (queues, timers, HTTP) | Azure Functions, Flex Consumption plan for new serverless apps | Linux Consumption is legacy and scheduled for retirement; check timeouts per plan |
34
+ | Full Kubernetes control, many teams, custom operators | AKS | You own upgrades and node pools; use workload identity, not pod-managed identity |
35
+ | Lift-and-shift VM software | Virtual Machines / scale sets | Patch management; Bastion instead of public RDP/SSH |
36
+
37
+ Decision rule: App Service or Container Apps first. Choose AKS only when the user names a requirement those can't meet.
38
+
39
+ ## Networking basics
40
+
41
+ 1. One virtual network per environment (or hub-and-spoke for larger estates), with subnets per tier.
42
+ 2. Data services (Azure SQL, Cosmos DB, Storage, Key Vault) get **private endpoints** and public network access disabled; add the matching Private DNS zones so names resolve to the private IP.
43
+ 3. App Service and Functions reach the VNet through VNet integration; Container Apps run in a VNet-integrated environment.
44
+ 4. NSGs on subnets allow only the ports each tier needs, by service tag or application security group. Never open RDP (3389) or SSH (22) to the internet; use Azure Bastion.
45
+ 5. Public HTTP goes through Application Gateway or Front Door, with WAF if the user needs it.
46
+
47
+ ## Data
48
+
49
+ - **Azure SQL Database:** Entra ID authentication with the app's managed identity (no SQL passwords in connection strings), Entra-only auth where possible; geo-redundant backups and point-in-time restore configured; serverless tier with auto-pause for dev.
50
+ - **Cosmos DB:** choose the partition key from the dominant query; serverless or autoscale throughput rather than high fixed RU/s; use data-plane RBAC with the managed identity instead of account keys, and disable key-based auth when nothing needs it.
51
+ - **Storage accounts:** disable anonymous blob access and shared key auth where clients support Entra; soft delete for blobs and containers; lifecycle management to cool or archive tiers.
52
+
53
+ ## Cost traps
54
+
55
+ - App Service plans and Premium Functions plans that keep billing for apps nobody uses; several small plans that could share one.
56
+ - Cosmos DB provisioned RU/s far above actual use; one container per tenant with minimum RU each.
57
+ - AKS node pools that never scale down; forgotten dev clusters.
58
+ - Log Analytics ingestion with no daily cap or retention policy.
59
+ - Unattached managed disks, public IPs, idle Application Gateways, VMs stopped but not deallocated.
60
+
61
+ Create a budget with alerts on each subscription first.
62
+
63
+ ## Steps for a change
64
+
65
+ 1. Confirm the subscription and resource group: `az account show`. If it is not the one the user means, **stop and ask**.
66
+ 2. Write the change in IaC with identities, RBAC assignments and private endpoints in the same change.
67
+ 3. Preview: `az deployment group what-if` or `terraform plan`. Read every delete and replace line.
68
+ 4. **Stop and ask before** any deployment in `Complete` mode, any delete or replace of a database, storage account or vault, any role assignment at subscription scope, or any production change.
69
+ 5. After deploying, verify the app's health endpoint, that the identity has exactly the intended role assignments (`az role assignment list --assignee <principalId>`), and that public network access is off where intended.
70
+
71
+ ## Never
72
+
73
+ - Put storage account keys, Cosmos keys or SQL passwords in app settings or source.
74
+ - Purge a soft-deleted Key Vault or delete a resource group without the user confirming the exact name.
75
+ - Grant Owner to a service principal used by CI "to save time".
76
+
77
+ ## Review output
78
+
79
+ ```
80
+ Azure review: <subscription/env>
81
+ Critical: <secrets in config, public data endpoints, Owner on workloads>
82
+ High: <no managed identity, missing backups, open NSG rules>
83
+ Cost: <each trap found>
84
+ Suggested IaC changes: <file: change>
85
+ Not checked: <what you had no access to>
86
+ ```
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "Give our App Service a managed identity so it can read secrets from Key Vault without a client secret",
4
+ "Should we host these microservices on Azure Container Apps or AKS?",
5
+ "Lock down Azure SQL and the storage account with private endpoints and disable public access",
6
+ "Our Cosmos DB costs are huge, how do we cut the provisioned RU/s spend?",
7
+ "We still run Azure Functions on the Linux Consumption plan, what should we move to?"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Use azure/login in a GitHub Actions workflow with a federated credential",
11
+ "Set up IAM roles and a VPC for an ECS service on AWS",
12
+ "Configure Entity Framework Core migrations for our ASP.NET Core app",
13
+ "Pick between Cloud Run and GKE for a new service on Google Cloud",
14
+ "Write a blue-green deployment plan for the billing API"
15
+ ]
16
+ }
@@ -0,0 +1,88 @@
1
+ ---
2
+ name: benchmark-methodology
3
+ description: Designs and runs performance benchmarks whose numbers hold up, with warmup, enough iterations, medians and p95/p99 with spread, a quiet and pinned machine, interleaved before/after comparison with a significance check, and guards against dead-code elimination and other microbenchmark traps in Go, JMH, BenchmarkDotNet, Criterion, pytest-benchmark and JS. Use when measuring whether a change made code faster or slower, writing a microbenchmark, or judging a performance claim.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs the project's language toolchain; hyperfine is optional for command-level timing.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: testing
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # Benchmark methodology
14
+
15
+ A benchmark is an experiment. Its job is to answer one question ("is B faster than A for this workload, by how much, and are we sure?") with numbers someone else can reproduce. Most bad benchmarks measure the wrong thing, too few times, on a noisy machine.
16
+
17
+ ## 1. Write down the question
18
+
19
+ Before any code, state:
20
+
21
+ 1. **What is measured**: a function, an endpoint, a CLI command, a whole job.
22
+ 2. **The metric**: latency per operation, throughput, allocations, peak memory, startup time.
23
+ 3. **The workload**: realistic input sizes and shapes. Use production-like data, not `n = 10`. If you don't know the real sizes, **ask the user**.
24
+ 4. **The decision**: what result would change what we do ("ship if p95 improves by 10 % or more with no regression in allocations").
25
+
26
+ If the user wants to know why the app is slow rather than compare versions, profile first (CPU profiler, flame graph) and benchmark the hot spot after.
27
+
28
+ ## 2. Pick the level and the tool
29
+
30
+ - **Microbenchmark** (a function, nanoseconds to milliseconds): use the language harness, never a hand-rolled timer loop. See `references/language-harnesses.md`.
31
+ - **Command or process** (a CLI, a build step): `hyperfine --warmup 3 --runs 20 'old-cmd' 'new-cmd'`; add `--prepare` to reset caches or state between runs and `--export-json` to keep raw data.
32
+ - **Service** (an HTTP endpoint): a load tool at a fixed request rate, measuring latency percentiles at that rate. Measuring at maximum throughput hides latency problems.
33
+
34
+ ## 3. Control the environment
35
+
36
+ - Same machine, same build flags (release / optimised), same runtime version, same input for A and B.
37
+ - Close other heavy work. On laptops, plug in power and disable low-power modes. In CI, shared runners are noisy: use a dedicated runner, or only trust large differences.
38
+ - Where possible, disable CPU frequency boost and pin to cores (Linux: `taskset -c 2 <cmd>`). Record if you could not.
39
+ - Warm up: JIT compilation, caches, connection pools and lazy initialisation make first runs slow. Discard warmup iterations, or measure cold start separately on purpose.
40
+ - Note the hardware, OS, runtime version and commit for every run.
41
+
42
+ ## 4. Run enough and keep the raw data
43
+
44
+ - At least 10 samples per variant for microbenchmarks the harness doesn't already repeat (Go: `-count=10`); 20 or more for noisy ones.
45
+ - **Interleave** A and B (A, B, A, B...) or alternate whole runs so thermal drift and background jobs hit both equally. Never run all of A in the morning and all of B after lunch.
46
+ - Keep the raw samples, not only the mean.
47
+
48
+ ## 5. Summarise honestly
49
+
50
+ - Report the **median** and **p95 / p99** for latency; the mean hides tail latency and is pulled by outliers.
51
+ - Report spread: standard deviation, median absolute deviation or a confidence interval.
52
+ - Compare with a significance test, not by eye. Go: `benchstat old.txt new.txt`. JMH and BenchmarkDotNet print error margins; differences inside the error bars are noise. For raw samples, a Mann-Whitney U test is a safe default.
53
+ - Say "no measurable difference" when that is the result. A 2 % change with 5 % noise is not a win.
54
+ - Check memory too: allocations per op (`-benchmem` in Go, `[MemoryDiagnoser]` in BenchmarkDotNet, `-prof gc` in JMH). A faster version that allocates far more may be slower in production.
55
+
56
+ ## 6. Microbenchmark traps
57
+
58
+ Check each before trusting a number:
59
+
60
+ 1. **Dead-code elimination**: the compiler removes work whose result is unused. Consume results (`Blackhole` in JMH, `std::hint::black_box` in Rust, return the value from a BenchmarkDotNet method, `b.Loop()` in Go 1.24+).
61
+ 2. **Constant folding**: inputs known at compile time get precomputed. Load inputs from a variable or setup step.
62
+ 3. **Measuring setup**: allocating the input inside the timed region. Do setup outside it.
63
+ 4. **Caches too warm**: the same small input every iteration stays in L1 and branch predictors learn it. Use realistic sizes and varied data.
64
+ 5. **Timer resolution**: timing a 20 ns operation once is noise; harnesses batch iterations for this reason.
65
+ 6. **GC and JIT pauses** landing in one variant only. Run long enough and check variance.
66
+ 7. **Debug builds**: `cargo bench` and `go test -bench` optimise by default; for C and C++ check optimisation flags (`-O2`, CMake `Release`), for .NET build with `-c Release`; on the JVM, use JMH so the JIT has warmed up.
67
+
68
+ Language-specific details and example code are in `references/language-harnesses.md`.
69
+
70
+ ## Rules
71
+
72
+ - Never claim a speed-up from a single run, a debug build, or a different input.
73
+ - Never tune the benchmark until it shows the result you hoped for; fix the method, then accept the answer.
74
+ - Never commit benchmark code that makes network calls or depends on wall-clock time of day.
75
+ - If results contradict across runs, **stop and report the noise** instead of picking the best run.
76
+
77
+ ## Report back
78
+
79
+ ```
80
+ Question: <what was compared, workload>
81
+ Environment: <CPU, OS, runtime version, commit A, commit B, noise controls>
82
+ Method: <tool, warmup, samples per variant, interleaved yes/no>
83
+ Results:
84
+ | Variant | median | p95 | spread | allocs/op |
85
+ Verdict: <B is X% faster (p < 0.05) | no measurable difference | B regressed>
86
+ Caveats: <what could still skew it>
87
+ Commands: <exact commands to reproduce>
88
+ ```
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "Write a Go benchmark comparing the old and new JSON decoder and tell me if the new one is actually faster",
4
+ "My JMH numbers swing 30% between runs, how do I get results I can trust?",
5
+ "Is my refactor of the tokenizer a performance regression? Measure it properly before and after",
6
+ "Set up BenchmarkDotNet for our hashing code with allocation stats",
7
+ "Someone claims the Rust rewrite is 3x faster, check whether their benchmark is valid"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Profile the API and fix whatever is making the orders endpoint slow",
11
+ "Our Lighthouse score dropped, improve the page load time",
12
+ "Raise the unit test coverage of the parser package to 80%",
13
+ "Write Playwright tests for the search page",
14
+ "Run the test suite and lint before I push"
15
+ ]
16
+ }
@@ -0,0 +1,130 @@
1
+ # Benchmark harnesses by language
2
+
3
+ Read this when writing a microbenchmark. Use the harness the project already has; add a new one only with the user's agreement.
4
+
5
+ ## Go (`testing`)
6
+
7
+ ```go
8
+ func BenchmarkParse(b *testing.B) {
9
+ input := loadFixture(b) // setup is outside the timed loop with b.Loop
10
+ for b.Loop() {
11
+ Parse(input)
12
+ }
13
+ }
14
+ ```
15
+
16
+ - `b.Loop()` (Go 1.24+) times only the loop body and stops the compiler from optimising the body away. On older Go, use `for i := 0; i < b.N; i++`, call `b.ResetTimer()` after setup, and assign results to a package-level sink variable.
17
+ - Run: `go test -run '^$' -bench BenchmarkParse -benchmem -count=10 ./pkg/parse > new.txt`.
18
+ - Compare: `go install golang.org/x/perf/cmd/benchstat@latest`, then `benchstat old.txt new.txt`. It prints the change with a p-value; "~" means no significant difference.
19
+ - Pitfalls: `-run '^$'` stops unit tests from running alongside; `-cpu 1,4` shows scaling.
20
+
21
+ ## Java and Kotlin (JMH)
22
+
23
+ ```java
24
+ @State(Scope.Benchmark)
25
+ @BenchmarkMode(Mode.AverageTime)
26
+ @OutputTimeUnit(TimeUnit.NANOSECONDS)
27
+ @Warmup(iterations = 5) @Measurement(iterations = 10) @Fork(3)
28
+ public class ParseBench {
29
+ String input;
30
+ @Setup public void setup() { input = Fixtures.load(); }
31
+ @Benchmark public void parse(Blackhole bh) { bh.consume(Parser.parse(input)); }
32
+ }
33
+ ```
34
+
35
+ - Never benchmark the JVM with `System.nanoTime()` loops: JIT tiers, on-stack replacement and dead-code elimination make them meaningless.
36
+ - `@Fork` of 2 or more runs separate JVMs so one JIT profile doesn't decide the result.
37
+ - `-prof gc` reports allocation rate; `-prof async` (async-profiler) shows where time goes.
38
+ - Use `@Param` for input sizes so you see how cost scales.
39
+
40
+ ## C# / .NET (BenchmarkDotNet)
41
+
42
+ ```csharp
43
+ [MemoryDiagnoser]
44
+ public class ParseBench {
45
+ private string _input = default!;
46
+ [GlobalSetup] public void Setup() => _input = Fixtures.Load();
47
+ [Benchmark(Baseline = true)] public Result Old() => OldParser.Parse(_input);
48
+ [Benchmark] public Result New() => NewParser.Parse(_input);
49
+ }
50
+ // Program.cs: BenchmarkRunner.Run<ParseBench>();
51
+ ```
52
+
53
+ - Run in Release: `dotnet run -c Release`. BenchmarkDotNet warns when it detects a debug build or an attached debugger.
54
+ - Return the result from the method so it isn't eliminated.
55
+ - `Baseline = true` adds a Ratio column for before/after.
56
+
57
+ ## Rust (Criterion or `cargo bench`)
58
+
59
+ ```rust
60
+ use criterion::{criterion_group, criterion_main, Criterion};
61
+ use std::hint::black_box;
62
+
63
+ fn bench(c: &mut Criterion) {
64
+ let input = load_fixture();
65
+ c.bench_function("parse", |b| b.iter(|| parse(black_box(&input))));
66
+ }
67
+ criterion_group!(benches, bench);
68
+ criterion_main!(benches);
69
+ ```
70
+
71
+ - Needs `[[bench]] name = "parse" harness = false` in `Cargo.toml`.
72
+ - Criterion saves a baseline and reports change and significance against the previous run; `cargo bench -- --save-baseline before` then `--baseline before` compares named baselines.
73
+ - `black_box` on inputs prevents constant folding; Criterion handles the output.
74
+
75
+ ## Python (pytest-benchmark, pyperf, timeit)
76
+
77
+ ```python
78
+ def test_parse(benchmark):
79
+ data = load_fixture()
80
+ result = benchmark(parse, data)
81
+ assert result.ok
82
+ ```
83
+
84
+ - Run: `pytest --benchmark-only --benchmark-autosave`, then compare saved runs with `pytest-benchmark compare`.
85
+ - For stand-alone scripts, `pyperf` handles warmup, multiple processes and system tuning advice (`python -m pyperf system tune` on Linux).
86
+ - `python -m timeit -s 'setup' 'stmt'` is fine for a quick check, not for a decision.
87
+ - Interpreter version matters a lot between releases; record it.
88
+
89
+ ## JavaScript and TypeScript (tinybench, mitata, Vitest bench)
90
+
91
+ ```ts
92
+ import { Bench } from 'tinybench';
93
+ const bench = new Bench({ time: 1000 }); // warmup option names differ between tinybench majors; check the installed version's docs
94
+ const input = loadFixture();
95
+ bench.add('old', () => oldParse(input)).add('new', () => newParse(input));
96
+ await bench.run();
97
+ console.table(bench.table());
98
+ ```
99
+
100
+ - V8 optimises and deoptimises based on observed types; feed realistic, varied inputs or one shape will look unrealistically fast.
101
+ - Keep the result reachable (return it, or push into an array checked after the run).
102
+ - Vitest has `bench()` in `*.bench.ts` files, run with `npx vitest bench`.
103
+ - Node version and flags change results; record `node --version`.
104
+
105
+ ## C and C++ (Google Benchmark)
106
+
107
+ ```cpp
108
+ static void BM_Parse(benchmark::State& state) {
109
+ auto input = LoadFixture();
110
+ for (auto _ : state) benchmark::DoNotOptimize(Parse(input));
111
+ }
112
+ BENCHMARK(BM_Parse);
113
+ BENCHMARK_MAIN();
114
+ ```
115
+
116
+ - Build with optimisations (`-O2` or `-DCMAKE_BUILD_TYPE=Release`); the library warns if it was built as debug.
117
+ - `--benchmark_repetitions=10 --benchmark_report_aggregates_only=true` gives mean, median and stddev.
118
+ - `benchmark::ClobberMemory()` forces pending writes to be treated as observable.
119
+
120
+ ## Commands and processes (hyperfine)
121
+
122
+ ```sh
123
+ # build both versions first (e.g. ./old-bin from main, ./new-bin from the branch)
124
+ hyperfine --warmup 3 --runs 30 --export-json bench.json \
125
+ './old-bin input.txt' './new-bin input.txt'
126
+ ```
127
+
128
+ - `--prepare 'cmd'` runs before each timing run (for example, clearing a cache directory).
129
+ - Never put state-changing commands (`git stash`, `git checkout`) inside a timed command; build each variant once, then time the binaries.
130
+ - hyperfine reports mean, standard deviation, min/max and a relative comparison; it warns about statistical outliers.
@@ -0,0 +1,84 @@
1
+ ---
2
+ name: bgp-diagnostics
3
+ description: Diagnoses Border Gateway Protocol problems on Cisco, Juniper, Arista and FRR routers by reading neighbor state (Idle, Active, OpenSent, Established) and NOTIFICATION codes, checking which prefixes are received, accepted and advertised through prefix-lists, route-maps and max-prefix limits, walking best-path selection, decoding standard and large communities, spotting RPKI-invalid or leaked routes, and confirming what the internet sees from RIPEstat, RouteViews and other looking glasses. Use when a BGP session will not come up or keeps flapping, a prefix is missing, not propagating or taking the wrong path, a provider says they are not receiving an announcement, or traffic shifted after a routing change or an upstream incident.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Works from pasted router output; live checks need read-only CLI access to the router and web access to public looking glasses and route collectors.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: devops
9
+ kete-loom/risk: read-only
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # BGP diagnostics
14
+
15
+ Find out why a BGP session or route is not doing what the operator expects, using read-only commands and public data, and hand back a cause with evidence and a proposed fix the operator applies.
16
+
17
+ For NOTIFICATION codes, best-path order, well-known communities and per-vendor command equivalents, read `references/bgp-reference.md`.
18
+
19
+ ## Ground rules
20
+
21
+ 1. **Read-only.** Use `show`/`display` commands and public looking glasses. Never run `clear ip bgp`, `clear bgp`, `neighbor ... shutdown`, policy edits or `soft` resets yourself; propose them and let the operator run them in a window. A hard reset drops every route from that peer.
22
+ 2. Work from evidence: ask for the exact command output, router platform and OS version, local AS, peer AS and peer address.
23
+ 3. Separate the two questions: **is the session up?** and **is the route right?** Fix the first before the second.
24
+ 4. Treat every public looking-glass result as a sample from one vantage point. Check at least two sources before telling the user "the internet can't see it".
25
+
26
+ ## 1. Session not Established
27
+
28
+ Get `show bgp summary` (or `show ip bgp summary`, Junos `show bgp summary`, FRR `vtysh -c "show bgp summary"`) and `show bgp neighbors <peer>`.
29
+
30
+ | State seen | Usual cause | Check |
31
+ |---|---|---|
32
+ | `Idle` | Admin shutdown, no route to peer, max-prefix tripped, or waiting after errors | `show bgp neighbors` last reset reason; `Idle (Admin)` / `Idle (PfxCt)` on IOS |
33
+ | `Active` / `Connect` cycling | TCP 179 never completes: wrong peer IP, ACL or firewall, peer not configured, wrong source interface | Ping the peer from the configured source; `update-source` on loopback peers; ACLs and CoPP for TCP 179 |
34
+ | `OpenSent` / `OpenConfirm` then reset | OPEN rejected: wrong remote AS, bad router ID, capability or hold-time mismatch, MD5/TCP-AO password mismatch | Logs for NOTIFICATION code 2/x; on IOS `%TCP-6-BADAUTH` means password mismatch |
35
+ | Up then flaps every ~3 min | Hold timer expiry: loss, CPU, MTU problems on large updates | NOTIFICATION 4; interface errors; ping with DF at full MTU |
36
+ | Up then drops at a prefix count | Max-prefix limit | Cease subcode 1; compare received count to `maximum-prefix` |
37
+
38
+ Also check:
39
+ - eBGP to a non-directly-connected address needs `ebgp-multihop` (or `ttl-security` on both sides), because eBGP packets default to TTL 1.
40
+ - Some platforms refuse to send or accept eBGP routes with no policy configured (RFC 8212): IOS-XR ("no policy; defaults to 'drop'", overridable with `bgp unsafe-ebgp-policy`) and FRR in its default traditional profile (`bgp ebgp-requires-policy`, shown as `(Policy)` in `show bgp summary`). Session `Established` with 0 prefixes both ways often means this.
41
+ - Address family activated on both sides (`address-family ipv6` + `neighbor ... activate`).
42
+
43
+ ## 2. Prefix missing or wrong
44
+
45
+ Walk the path step by step and stop at the first step that fails.
46
+
47
+ 1. **Originated?** The prefix is in the local BGP table: `show bgp ipv4 unicast <prefix>`. A `network` statement needs an exact match in the RIB (same mask); otherwise use a static to Null0 or an aggregate.
48
+ 2. **Advertised?** `show bgp ipv4 unicast neighbors <peer> advertised-routes`. If absent, check outbound prefix-list, route-map, `no-export`/`no-advertise` communities, and iBGP split-horizon (iBGP-learned routes are not sent to other iBGP peers without a route reflector).
49
+ 3. **Received by the peer?** Ask the peer, or use their looking glass. On your side for inbound routes: `received-routes` needs `soft-reconfiguration inbound` on IOS; otherwise use `show bgp ... neighbors <peer> routes` for accepted routes only.
50
+ 4. **Accepted?** Inbound filters, max-prefix, AS-path loop (own AS in path; `allowas-in` only if the design needs it), RPKI-invalid dropped by ROV, or IRR-based filters at the provider missing your route object.
51
+ 5. **Best?** `show bgp ipv4 unicast <prefix>` lists all paths; walk the best-path order in the reference and name the step that decided. Common surprises: weight set on one neighbor, local-pref from a route-map, MED compared only within one neighbor AS, IGP metric to next hop.
52
+ 6. **Installed?** `show ip route <prefix>`: an IGP or static with lower administrative distance wins; next hop unreachable makes the path invalid (`inaccessible`).
53
+
54
+ ## 3. What the internet sees
55
+
56
+ For a public prefix or ASN:
57
+ - RIPEstat (`stat.ripe.net`): Routing Status, Looking Glass and BGPlay widgets show visibility across RIS collectors and the history of announcements and withdrawals.
58
+ - RouteViews collectors (`route-views.routeviews.org` and others) and bgp.tools or bgp.he.net for origin AS, upstreams and visibility.
59
+ - RPKI: check the prefix and origin pair is Valid in the RIPEstat RPKI widget or your RIR portal. An Invalid (wrong origin or max-length too short) is dropped by many networks.
60
+ - IRR: `whois -h whois.radb.net <prefix>` or the provider's IRR; missing or wrong `route`/`route6` objects cause providers to filter you.
61
+ - PeeringDB for the peer's NOC contact, prefix limits they expect, and IX details.
62
+
63
+ ## 4. Common outage causes to rule out
64
+
65
+ 1. ROA created with a max-length shorter than the announced more-specific, or for the wrong origin AS.
66
+ 2. A route leak: your prefix seen with an unexpected AS in the path, or you announcing learned routes to another provider (missing outbound filter). Check outbound policy matches only your own prefixes.
67
+ 3. Hijack or more-specific announced by someone else: a different origin AS for your prefix or a longer prefix inside it.
68
+ 4. Max-prefix tripped after a peer sent a full table.
69
+ 5. Password, AS or IP changed on one side during maintenance.
70
+ 6. Policy change applied without a soft refresh, so the new policy never took effect; or a soft reset expected to fix something it cannot.
71
+ 7. Upstream incident: check the provider status page and RIPEstat for many prefixes moving at once.
72
+
73
+ **Stop and tell the user to contact the provider or a qualified network engineer** when evidence points at the upstream, a suspected hijack, or a change that would affect transit for the whole network.
74
+
75
+ ## Report back
76
+
77
+ ```
78
+ Session: <peer IP / AS> state <state>, last reset <reason/code>
79
+ Prefix: <prefix> originated <y/n> advertised <y/n> seen by peer <y/n/unknown> best <y/n, decided at step N>
80
+ External view: <sources checked, visibility, RPKI status, IRR status>
81
+ Cause: <one sentence>, evidence: <command output lines>
82
+ Proposed fix: <exact commands for the operator>, impact: <soft refresh vs session reset>
83
+ Not verified: <what was not checked>
84
+ ```
@@ -0,0 +1,18 @@
1
+ {
2
+ "should_trigger": [
3
+ "show ip bgp summary says our neighbor 203.0.113.1 is stuck in Active, what does that mean?",
4
+ "Our transit provider says they don't see our /24 but it's in our BGP table, where is it getting dropped?",
5
+ "BGP session with the IX route server goes down every few minutes with hold timer expired",
6
+ "Why is the router choosing the path through ISP B when we set local-pref 200 on ISP A?",
7
+ "RIPEstat shows our prefix with a different origin AS since this morning, is this a hijack?",
8
+ "The peer sent a NOTIFICATION cease subcode 1 and the session dropped, how do I read that?"
9
+ ],
10
+ "should_not_trigger": [
11
+ "Write a Nornir task that renders BGP neighbor config from NetBox and pushes it to all edge routers",
12
+ "Configure an extended ACL on the Cisco switch to block telnet to the management VLAN",
13
+ "My laptop can reach google.com by IP but DNS lookups fail on the office Wi-Fi",
14
+ "Plan an address scheme and VLANs for a new branch office network",
15
+ "Review this firewall ruleset before I load it on the edge gateway",
16
+ "Write the OSPF config for three Cisco routers sharing area 0 over point-to-point links"
17
+ ]
18
+ }
@@ -0,0 +1,81 @@
1
+ # BGP reference
2
+
3
+ ## FSM states (RFC 4271)
4
+
5
+ `Idle` → `Connect` → `Active` → `OpenSent` → `OpenConfirm` → `Established`. `Connect` and `Active` mean TCP to port 179 has not completed. `OpenSent`/`OpenConfirm` mean TCP is up and OPEN messages are being exchanged.
6
+
7
+ ## NOTIFICATION error codes (RFC 4271)
8
+
9
+ | Code | Meaning | Typical subcodes |
10
+ |---|---|---|
11
+ | 1 | Message Header Error | bad length or type |
12
+ | 2 | OPEN Message Error | 2 Bad Peer AS, 3 Bad BGP Identifier, 4 Unsupported Optional Parameter, 6 Unacceptable Hold Time, 7 Unsupported Capability (RFC 5492) |
13
+ | 3 | UPDATE Message Error | malformed attribute list, invalid next hop, malformed AS_PATH |
14
+ | 4 | Hold Timer Expired | no keepalive or update within the hold time |
15
+ | 5 | Finite State Machine Error | |
16
+ | 6 | Cease | see below |
17
+
18
+ Cease subcodes (RFC 4486): 1 Maximum Number of Prefixes Reached, 2 Administrative Shutdown, 3 Peer De-configured, 4 Administrative Reset, 5 Connection Rejected, 6 Other Configuration Change, 7 Connection Collision Resolution, 8 Out of Resources.
19
+
20
+ Cisco IOS default timers: keepalive 60 s, hold 180 s. The negotiated hold time is the lower of the two sides.
21
+
22
+ ## Best-path selection, Cisco IOS/IOS-XE order
23
+
24
+ A path whose next hop is unreachable is not a candidate. Then:
25
+
26
+ 1. Highest weight (Cisco-local, not advertised)
27
+ 2. Highest local preference (default 100)
28
+ 3. Locally originated (`network`, redistribution, aggregate)
29
+ 4. Shortest AS_PATH (an AS_SET counts as 1; skipped with `bgp bestpath as-path ignore`)
30
+ 5. Lowest origin: IGP < EGP < Incomplete
31
+ 6. Lowest MED, compared only between paths from the same neighbor AS unless `bgp always-compare-med` (set it AS-wide or not at all)
32
+ 7. eBGP over iBGP
33
+ 8. Lowest IGP metric to the next hop
34
+ 9. Multipath decision, if `maximum-paths` is set
35
+ 10. Oldest eBGP path (skipped with `bgp bestpath compare-routerid`)
36
+ 11. Lowest router ID (originator ID with route reflection)
37
+ 12. Shortest cluster list
38
+ 13. Lowest neighbor address
39
+
40
+ Other vendors follow the same broad order without weight; Junos and FRR differ in details (for example MED handling and the oldest-path step). Check the vendor's doc for the exact release.
41
+
42
+ ## Well-known communities
43
+
44
+ | Community | Value | Effect |
45
+ |---|---|---|
46
+ | NO_EXPORT | 65535:65281 | Do not advertise outside the AS (or confederation) |
47
+ | NO_ADVERTISE | 65535:65282 | Do not advertise to any peer |
48
+ | NO_EXPORT_SUBCONFED | 65535:65283 | Do not advertise to external peers, including other confederation member ASes |
49
+ | GRACEFUL_SHUTDOWN | 65535:0 | RFC 8326: receiver lowers local preference before planned maintenance |
50
+ | BLACKHOLE | 65535:666 | RFC 7999: request the neighbor to discard traffic to the prefix (only if the neighbor supports it) |
51
+
52
+ Regular communities are `ASN:value` (RFC 1997). Large communities are `ASN:value1:value2` (RFC 8092) and are needed for 4-byte ASNs. Provider-specific action communities (prepend, local-pref, no-export to a region) are documented by each provider; look them up, never guess. On IOS, communities are only sent to a neighbor with `neighbor <ip> send-community` (`both` or `extended`/`large` as needed).
53
+
54
+ ## RPKI route origin validation (RFC 6811)
55
+
56
+ Result per route: Valid (a ROA covers the prefix with the same origin AS and the prefix length is within max-length), Invalid (covered but wrong origin or too long), NotFound (no covering ROA). Many networks drop Invalid.
57
+
58
+ ## Command equivalents
59
+
60
+ | Task | Cisco IOS/IOS-XE | Junos | Arista EOS | FRR (vtysh) |
61
+ |---|---|---|---|---|
62
+ | Summary | `show bgp ipv4 unicast summary` | `show bgp summary` | `show ip bgp summary` | `show bgp summary` |
63
+ | Neighbor detail | `show bgp ipv4 unicast neighbors <ip>` | `show bgp neighbor <ip>` | `show ip bgp neighbors <ip>` | `show bgp neighbors <ip>` |
64
+ | Prefix detail | `show bgp ipv4 unicast <prefix>` | `show route <prefix> detail` | `show ip bgp <prefix>` | `show bgp ipv4 unicast <prefix>` |
65
+ | Sent to peer | `show bgp ipv4 unicast neighbors <ip> advertised-routes` | `show route advertising-protocol bgp <ip>` | `show ip bgp neighbors <ip> advertised-routes` | `show bgp ipv4 unicast neighbors <ip> advertised-routes` |
66
+ | Received from peer (before policy) | `... neighbors <ip> received-routes` (needs `soft-reconfiguration inbound`) | `show route receive-protocol bgp <ip>` | `show ip bgp neighbors <ip> received-routes` | `... neighbors <ip> received-routes` (configure `soft-reconfiguration inbound` to keep the pre-policy table) |
67
+ | Soft refresh inbound (operator runs) | `clear bgp ipv4 unicast <ip> soft in` | `clear bgp neighbor <ip> soft-inbound` | `clear ip bgp <ip> soft in` | `clear bgp ipv4 unicast <ip> soft in` |
68
+
69
+ Check whether `received-routes` / `receive-protocol` output on your release is before or after inbound policy before drawing conclusions from it.
70
+
71
+ ## Sources
72
+
73
+ - RFC 4271 (FSM, NOTIFICATION codes, OPEN subcodes, hold time): https://www.rfc-editor.org/rfc/rfc4271
74
+ - RFC 4486 (Cease subcodes): https://www.rfc-editor.org/rfc/rfc4486
75
+ - RFC 5492 (subcode 7, Unsupported Capability): https://www.rfc-editor.org/rfc/rfc5492
76
+ - IANA well-known communities: https://www.iana.org/assignments/bgp-well-known-communities/
77
+ - RFC 8092 (large communities), RFC 6811 (origin validation), RFC 8212 (eBGP default reject)
78
+ - Cisco best-path algorithm: https://www.cisco.com/c/en/us/support/docs/ip/border-gateway-protocol-bgp/13753-25.html
79
+ - Cisco IOS BGP timers (`neighbor timers`): https://www.cisco.com/c/en/us/td/docs/ios/iproute_bgp/command/reference/irg_book/irg_bgp4.html
80
+ - FRR BGP (`ebgp-requires-policy`, show and clear commands): https://docs.frrouting.org/en/latest/bgp.html
81
+ - Junos `clear bgp neighbor`: https://www.juniper.net/documentation/us/en/software/junos/bgp/topics/ref/command/clear-bgp-neighbor.html