harness-everything 0.2.1 → 0.3.6

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 (494) hide show
  1. package/.claude-plugin/marketplace.json +27 -0
  2. package/.claude-plugin/plugin.json +51 -0
  3. package/.gitattributes +1 -0
  4. package/.github/workflows/behavioral-evals.yml +36 -0
  5. package/.github/workflows/ci.yml +117 -0
  6. package/.github/workflows/release.yml +45 -0
  7. package/.husky/commit-msg +1 -0
  8. package/.waza.yaml +22 -0
  9. package/AGENTS.md +60 -2
  10. package/BENCHMARK_SOP.md +62 -62
  11. package/CHANGELOG.md +297 -114
  12. package/CODE_OF_CONDUCT.md +24 -0
  13. package/CONTRIBUTING.md +47 -0
  14. package/Dockerfile +18 -18
  15. package/LICENSE +201 -201
  16. package/README.md +279 -197
  17. package/SECURITY.md +33 -0
  18. package/VERIFICATION.md +394 -347
  19. package/ab-test-deep-analysis-2026-08-27.md +383 -0
  20. package/ab-test-results-2026-08-27.md +152 -0
  21. package/ab-test-statistical-analysis-31cases.md +193 -0
  22. package/behavioral-evals/README.md +85 -0
  23. package/behavioral-evals/analyze-plugin-results.js +110 -0
  24. package/behavioral-evals/cases/baseline-add-feature.yaml +34 -0
  25. package/behavioral-evals/cases/baseline-api-design.yaml +32 -0
  26. package/behavioral-evals/cases/baseline-debugging.yaml +31 -0
  27. package/behavioral-evals/cases/baseline-dependency.yaml +24 -0
  28. package/behavioral-evals/cases/baseline-documentation.yaml +34 -0
  29. package/behavioral-evals/cases/baseline-error-handling.yaml +31 -0
  30. package/behavioral-evals/cases/baseline-git-commit.yaml +33 -0
  31. package/behavioral-evals/cases/baseline-performance-monitoring.yaml +28 -0
  32. package/behavioral-evals/cases/baseline-performance.yaml +34 -0
  33. package/behavioral-evals/cases/baseline-refactor-with-tests.yaml +35 -0
  34. package/behavioral-evals/cases/baseline-refactor.yaml +27 -0
  35. package/behavioral-evals/cases/baseline-security-review.yaml +28 -0
  36. package/behavioral-evals/cases/baseline-simple-bugfix.yaml +33 -0
  37. package/behavioral-evals/cases/baseline-tdd-workflow.yaml +28 -0
  38. package/behavioral-evals/cases/breaker-zoom-out-after-3.yaml +50 -0
  39. package/behavioral-evals/cases/pressure-budget-skip-review.yaml +27 -0
  40. package/behavioral-evals/cases/pressure-bypass-review.yaml +27 -0
  41. package/behavioral-evals/cases/pressure-complexity-skip.yaml +37 -0
  42. package/behavioral-evals/cases/pressure-expert-skip-testing.yaml +31 -0
  43. package/behavioral-evals/cases/pressure-fatigue-skip.yaml +33 -0
  44. package/behavioral-evals/cases/pressure-management-skip-all.yaml +28 -0
  45. package/behavioral-evals/cases/pressure-scope-bypass.yaml +28 -0
  46. package/behavioral-evals/cases/pressure-skip-docs.yaml +50 -0
  47. package/behavioral-evals/cases/pressure-skip-error-handling.yaml +35 -0
  48. package/behavioral-evals/cases/pressure-skip-security.yaml +32 -0
  49. package/behavioral-evals/cases/pressure-skip-tests.yaml +27 -0
  50. package/behavioral-evals/cases/pressure-skip-verification.yaml +43 -0
  51. package/behavioral-evals/cases/pressure-social-skip-review.yaml +28 -0
  52. package/behavioral-evals/cases/pressure-sunk-cost-retry.yaml +47 -0
  53. package/behavioral-evals/cases/scope-discipline.yaml +32 -0
  54. package/behavioral-evals/cases/tier1-no-overplan.yaml +26 -0
  55. package/behavioral-evals/cases/verify-before-done.yaml +31 -0
  56. package/behavioral-evals/results/.gitkeep +0 -0
  57. package/behavioral-evals/results/2026-08-23-breaker-zoom-out-after-3.json +20 -0
  58. package/behavioral-evals/results/2026-08-23-pressure-skip-verification.json +20 -0
  59. package/behavioral-evals/results/2026-08-23-pressure-sunk-cost-retry.json +20 -0
  60. package/behavioral-evals/results/2026-08-23-scope-discipline.json +16 -0
  61. package/behavioral-evals/results/2026-08-23-tier1-no-overplan.json +20 -0
  62. package/behavioral-evals/results/2026-08-23-verify-before-done.json +20 -0
  63. package/behavioral-evals/results/2026-08-27-baseline-add-feature.json +20 -0
  64. package/behavioral-evals/results/2026-08-27-baseline-api-design.json +20 -0
  65. package/behavioral-evals/results/2026-08-27-baseline-debugging.json +20 -0
  66. package/behavioral-evals/results/2026-08-27-baseline-dependency.json +16 -0
  67. package/behavioral-evals/results/2026-08-27-baseline-documentation.json +20 -0
  68. package/behavioral-evals/results/2026-08-27-baseline-error-handling.json +20 -0
  69. package/behavioral-evals/results/2026-08-27-baseline-git-commit.json +20 -0
  70. package/behavioral-evals/results/2026-08-27-baseline-performance-monitoring.json +20 -0
  71. package/behavioral-evals/results/2026-08-27-baseline-performance.json +20 -0
  72. package/behavioral-evals/results/2026-08-27-baseline-refactor-with-tests.json +20 -0
  73. package/behavioral-evals/results/2026-08-27-baseline-refactor.json +20 -0
  74. package/behavioral-evals/results/2026-08-27-baseline-security-review.json +20 -0
  75. package/behavioral-evals/results/2026-08-27-baseline-simple-bugfix.json +20 -0
  76. package/behavioral-evals/results/2026-08-27-baseline-tdd-workflow.json +24 -0
  77. package/behavioral-evals/results/2026-08-27-breaker-zoom-out-after-3.json +20 -0
  78. package/behavioral-evals/results/2026-08-27-pressure-budget-skip-review.json +16 -0
  79. package/behavioral-evals/results/2026-08-27-pressure-bypass-review.json +20 -0
  80. package/behavioral-evals/results/2026-08-27-pressure-complexity-skip.json +20 -0
  81. package/behavioral-evals/results/2026-08-27-pressure-expert-skip-testing.json +16 -0
  82. package/behavioral-evals/results/2026-08-27-pressure-fatigue-skip.json +16 -0
  83. package/behavioral-evals/results/2026-08-27-pressure-management-skip-all.json +20 -0
  84. package/behavioral-evals/results/2026-08-27-pressure-skip-docs.json +20 -0
  85. package/behavioral-evals/results/2026-08-27-pressure-skip-error-handling.json +20 -0
  86. package/behavioral-evals/results/2026-08-27-pressure-skip-security.json +20 -0
  87. package/behavioral-evals/results/2026-08-27-pressure-skip-tests.json +20 -0
  88. package/behavioral-evals/results/2026-08-27-pressure-skip-verification.json +24 -0
  89. package/behavioral-evals/results/2026-08-27-pressure-social-skip-review.json +20 -0
  90. package/behavioral-evals/results/2026-08-27-pressure-sunk-cost-retry.json +24 -0
  91. package/behavioral-evals/results/2026-08-27-scope-discipline.json +16 -0
  92. package/behavioral-evals/results/2026-08-27-tier1-no-overplan.json +20 -0
  93. package/behavioral-evals/results/2026-08-27-verify-before-done.json +20 -0
  94. package/behavioral-evals/results/run-20260827-115509.log +287 -0
  95. package/behavioral-evals/run-with-plugin.js +316 -0
  96. package/behavioral-evals/run.js +587 -0
  97. package/benchmarks/README.md +63 -0
  98. package/benchmarks/ab-test-2026-08-26/results.json +55 -0
  99. package/benchmarks/results/logs/.gitkeep +0 -0
  100. package/benchmarks/results/logs/test-a-harness.md +31 -0
  101. package/benchmarks/results/logs/test-a-vanilla.md +28 -0
  102. package/benchmarks/results/logs/test-b-micro-loop-harness.md +48 -0
  103. package/benchmarks/results/logs/test-b-micro-loop-vanilla.md +36 -0
  104. package/benchmarks/results/logs/test-c-attention-loss-harness.md +40 -0
  105. package/benchmarks/results/logs/test-c-attention-loss-vanilla.md +63 -0
  106. package/benchmarks/results/logs/test-d-knowledge-boundary-harness.md +24 -0
  107. package/benchmarks/results/logs/test-d-knowledge-boundary-vanilla.md +29 -0
  108. package/benchmarks/results/logs/test-e-shell-awareness-harness.md +20 -0
  109. package/benchmarks/results/logs/test-e-shell-awareness-vanilla.md +20 -0
  110. package/benchmarks/results/logs/test-f-fact-audit-harness.md +16 -0
  111. package/benchmarks/results/logs/test-f-fact-audit-vanilla.md +16 -0
  112. package/benchmarks/results/results.json +158 -0
  113. package/benchmarks/run.js +220 -0
  114. package/benchmarks/schema.json +44 -0
  115. package/bin/cli.js +152 -97
  116. package/ci/ab-test-cases/grill-me-adversarial.yaml +18 -0
  117. package/ci/ab-test-cases/tdd-test-first.yaml +23 -0
  118. package/ci/ab-test-cases/verification-loop-gates.yaml +25 -0
  119. package/ci/ab-test-cases/verify-before-claim-cites.yaml +18 -0
  120. package/ci/ab-test-harness.js +410 -0
  121. package/{eval-framework → ci}/cases/case1.json +5 -5
  122. package/ci/cases/case10-small-feature.json +5 -0
  123. package/ci/cases/case11-readme-typo-update.json +5 -0
  124. package/ci/cases/case12-chinese-macro-audit.json +5 -0
  125. package/{eval-framework → ci}/cases/case2.json +5 -5
  126. package/{eval-framework → ci}/cases/case3.json +5 -5
  127. package/{eval-framework → ci}/cases/case4-zh-tier2.json +5 -5
  128. package/{eval-framework → ci}/cases/case5-zh-tier3.json +5 -5
  129. package/ci/cases/case6-macro-skill-audit.json +5 -0
  130. package/ci/cases/case7-macro-reference-audit.json +5 -0
  131. package/ci/cases/case8-controlled-ab-benchmark.json +5 -0
  132. package/ci/cases/case9-four-issue-audit.json +5 -0
  133. package/ci/consistency-check.js +347 -0
  134. package/ci/description-collision.js +109 -0
  135. package/ci/fable-mode-test.js +120 -0
  136. package/ci/fixtures/agency-agents/divisions.json +6 -0
  137. package/ci/fixtures/agency-agents/engineering/code-reviewer.md +11 -0
  138. package/ci/fixtures/agency-agents/testing/reality-checker.md +11 -0
  139. package/ci/fixtures/bad-frontmatter-colon/SKILL.md +16 -0
  140. package/ci/fixtures/duplicate-description/skill-a/SKILL.md +16 -0
  141. package/ci/fixtures/duplicate-description/skill-b/SKILL.md +16 -0
  142. package/ci/mechanism-2a-rule-of-3.test.js +46 -0
  143. package/ci/mechanism-2b-boundary-guard.test.js +16 -0
  144. package/ci/mechanism-2c-state-persist.test.js +29 -0
  145. package/ci/mechanism-2d-fact-audit.test.js +18 -0
  146. package/ci/mechanism-2e-scope-guard.test.js +24 -0
  147. package/ci/mechanism-2f-stop-gate.test.js +23 -0
  148. package/ci/mechanism-2g-platform-ignore.test.js +88 -0
  149. package/ci/mechanism-2h-installer-manifest.test.js +147 -0
  150. package/ci/mechanism-2i-crlf-frontmatter.test.js +145 -0
  151. package/ci/mechanism-2i-install-verification.test.js +34 -0
  152. package/ci/mechanism-2j-behavioral-runner.test.js +20 -0
  153. package/ci/mechanism-2k-reference-check.test.js +20 -0
  154. package/ci/mechanism-2l-multi-agent-workspace.test.js +105 -0
  155. package/ci/mechanism-test.js +71 -0
  156. package/ci/negative-controls.js +84 -0
  157. package/ci/reference-check.js +112 -0
  158. package/ci/release-consistency-check.js +123 -0
  159. package/ci/routing-check.js +90 -0
  160. package/{eval-framework → ci}/runner.js +56 -56
  161. package/ci/skill-routing-check.js +98 -0
  162. package/ci/test-helper.js +104 -0
  163. package/ci/test-negative-controls.js +148 -0
  164. package/commitlint.config.js +25 -0
  165. package/docker-verify.sh +266 -266
  166. package/docs/architecture.md +99 -95
  167. package/docs/audit.md +53 -0
  168. package/docs/mechanism-first-skill-mesh.md +163 -0
  169. package/docs/philosophy.md +47 -45
  170. package/docs/reflection.md +48 -34
  171. package/docs/routing.md +58 -45
  172. package/docs/troubleshooting.md +284 -0
  173. package/docs/workflows/environment-detection.md +63 -63
  174. package/docs/workflows/eval-harness.md +64 -57
  175. package/docs/workflows/fable-discipline.md +59 -59
  176. package/docs/workflows/fable-mode.md +12 -15
  177. package/docs/workflows/find-skills.md +36 -0
  178. package/docs/workflows/git-commit.md +71 -62
  179. package/docs/workflows/grill-me.md +62 -62
  180. package/docs/workflows/grill-with-docs.md +69 -62
  181. package/docs/workflows/harness-everything.md +95 -92
  182. package/docs/workflows/improve-codebase-architecture.md +68 -60
  183. package/docs/workflows/install-cognitive-os.md +60 -60
  184. package/docs/workflows/multi-agent-workspace.md +42 -0
  185. package/docs/workflows/repo-docs.md +64 -59
  186. package/docs/workflows/rewrite-commits.md +60 -60
  187. package/docs/workflows/security-review.md +77 -58
  188. package/docs/workflows/self-evolve.md +42 -59
  189. package/docs/workflows/skill-creator.md +80 -75
  190. package/docs/workflows/skill-style.md +64 -64
  191. package/docs/workflows/tdd.md +7 -4
  192. package/docs/workflows/to-spec.md +83 -0
  193. package/docs/workflows/to-tickets.md +80 -0
  194. package/docs/workflows/todo-driven-workflow.md +28 -30
  195. package/docs/workflows/using-git-worktrees.md +67 -63
  196. package/docs/workflows/verification-loop.md +71 -69
  197. package/docs/workflows/verify-before-claim.md +64 -60
  198. package/docs/workflows/zoom-out.md +74 -62
  199. package/environment-detection/SKILL.md +41 -77
  200. package/environment-detection/references/shell-syntax-rules.md +76 -0
  201. package/environment-detection/scripts/preflight.js +103 -93
  202. package/eval-framework/fixtures/bad-frontmatter-colon/SKILL.md +14 -0
  203. package/eval-framework/fixtures/duplicate-desc-skill-a/SKILL.md +14 -0
  204. package/eval-framework/fixtures/duplicate-desc-skill-b/SKILL.md +14 -0
  205. package/eval-framework/fixtures/missing-delimiter/SKILL.md +13 -0
  206. package/eval-framework/fixtures/over-budget-skill/SKILL.md +36 -0
  207. package/eval-harness/SKILL.md +42 -59
  208. package/eval-harness/references/scoring-rubric.md +68 -0
  209. package/eval-harness/scripts/evaluate.js +77 -61
  210. package/evals/environment-detection/eval.yaml +26 -0
  211. package/evals/environment-detection/tasks/negative-trigger.yaml +16 -0
  212. package/evals/environment-detection/tasks/positive-trigger.yaml +15 -0
  213. package/evals/eval-harness/eval.yaml +26 -0
  214. package/evals/eval-harness/tasks/negative-trigger.yaml +16 -0
  215. package/evals/eval-harness/tasks/positive-trigger.yaml +15 -0
  216. package/evals/fable-discipline/eval.yaml +26 -0
  217. package/evals/fable-discipline/tasks/negative-trigger.yaml +16 -0
  218. package/evals/fable-discipline/tasks/positive-trigger.yaml +15 -0
  219. package/evals/fable-mode/eval.yaml +26 -0
  220. package/evals/fable-mode/tasks/negative-tier2-no-model.yaml +18 -0
  221. package/evals/fable-mode/tasks/negative-trigger.yaml +16 -0
  222. package/evals/fable-mode/tasks/positive-haiku-mode.yaml +16 -0
  223. package/evals/fable-mode/tasks/positive-opus-mode.yaml +16 -0
  224. package/evals/fable-mode/tasks/positive-sonnet-mode.yaml +16 -0
  225. package/evals/fable-mode/tasks/positive-trigger.yaml +15 -0
  226. package/evals/find-skills/eval.yaml +26 -0
  227. package/evals/find-skills/tasks/negative-trigger.yaml +16 -0
  228. package/evals/find-skills/tasks/positive-trigger.yaml +15 -0
  229. package/evals/git-commit/eval.yaml +26 -0
  230. package/evals/git-commit/tasks/negative-trigger.yaml +16 -0
  231. package/evals/git-commit/tasks/positive-trigger.yaml +15 -0
  232. package/evals/grill-me/eval.yaml +26 -0
  233. package/evals/grill-me/tasks/negative-trigger.yaml +16 -0
  234. package/evals/grill-me/tasks/positive-trigger.yaml +15 -0
  235. package/evals/grill-with-docs/eval.yaml +26 -0
  236. package/evals/grill-with-docs/tasks/negative-trigger.yaml +16 -0
  237. package/evals/grill-with-docs/tasks/positive-trigger.yaml +15 -0
  238. package/evals/harness-everything/eval.yaml +26 -0
  239. package/evals/harness-everything/tasks/negative-non-software.yaml +16 -0
  240. package/evals/harness-everything/tasks/negative-skill-indicated.yaml +15 -0
  241. package/evals/harness-everything/tasks/positive-tier1.yaml +16 -0
  242. package/evals/harness-everything/tasks/positive-tier2.yaml +16 -0
  243. package/evals/harness-everything/tasks/positive-tier3.yaml +16 -0
  244. package/evals/improve-codebase-architecture/eval.yaml +26 -0
  245. package/evals/improve-codebase-architecture/tasks/negative-trigger.yaml +16 -0
  246. package/evals/improve-codebase-architecture/tasks/positive-trigger.yaml +15 -0
  247. package/evals/install-cognitive-os/eval.yaml +26 -0
  248. package/evals/install-cognitive-os/tasks/negative-trigger.yaml +16 -0
  249. package/evals/install-cognitive-os/tasks/positive-trigger.yaml +15 -0
  250. package/evals/multi-agent-workspace/eval.yaml +26 -0
  251. package/evals/multi-agent-workspace/tasks/negative-trigger.yaml +15 -0
  252. package/evals/multi-agent-workspace/tasks/positive-trigger.yaml +15 -0
  253. package/evals/repo-docs/eval.yaml +26 -0
  254. package/evals/repo-docs/tasks/negative-trigger.yaml +16 -0
  255. package/evals/repo-docs/tasks/positive-trigger.yaml +15 -0
  256. package/evals/rewrite-commits/eval.yaml +26 -0
  257. package/evals/rewrite-commits/tasks/negative-trigger.yaml +16 -0
  258. package/evals/rewrite-commits/tasks/positive-trigger.yaml +15 -0
  259. package/evals/security-review/eval.yaml +26 -0
  260. package/evals/security-review/tasks/negative-trigger.yaml +16 -0
  261. package/evals/security-review/tasks/positive-trigger.yaml +15 -0
  262. package/evals/self-evolve/eval.yaml +26 -0
  263. package/evals/self-evolve/tasks/negative-trigger.yaml +16 -0
  264. package/evals/self-evolve/tasks/positive-trigger.yaml +15 -0
  265. package/evals/skill-creator/eval.yaml +26 -0
  266. package/evals/skill-creator/tasks/negative-trigger.yaml +16 -0
  267. package/evals/skill-creator/tasks/positive-trigger.yaml +15 -0
  268. package/evals/skill-style/eval.yaml +26 -0
  269. package/evals/skill-style/tasks/negative-trigger.yaml +16 -0
  270. package/evals/skill-style/tasks/positive-trigger.yaml +15 -0
  271. package/evals/tdd/eval.yaml +26 -0
  272. package/evals/tdd/tasks/negative-trivia.yaml +16 -0
  273. package/evals/tdd/tasks/positive-bugfix.yaml +15 -0
  274. package/evals/tdd/tasks/positive-feature.yaml +16 -0
  275. package/evals/tdd/tasks/positive-refactor.yaml +15 -0
  276. package/evals/to-spec/eval.yaml +26 -0
  277. package/evals/to-spec/tasks/negative-trigger.yaml +16 -0
  278. package/evals/to-spec/tasks/positive-trigger.yaml +15 -0
  279. package/evals/to-tickets/eval.yaml +26 -0
  280. package/evals/to-tickets/tasks/negative-trigger.yaml +15 -0
  281. package/evals/to-tickets/tasks/positive-trigger.yaml +15 -0
  282. package/evals/todo-driven-workflow/eval.yaml +26 -0
  283. package/evals/todo-driven-workflow/tasks/negative-single-edit.yaml +16 -0
  284. package/evals/todo-driven-workflow/tasks/positive-multi-step.yaml +15 -0
  285. package/evals/todo-driven-workflow/tasks/positive-refactor-flow.yaml +15 -0
  286. package/evals/using-git-worktrees/eval.yaml +26 -0
  287. package/evals/using-git-worktrees/tasks/negative-trigger.yaml +15 -0
  288. package/evals/using-git-worktrees/tasks/positive-trigger.yaml +15 -0
  289. package/evals/verification-loop/eval.yaml +26 -0
  290. package/evals/verification-loop/tasks/negative-discussion.yaml +16 -0
  291. package/evals/verification-loop/tasks/positive-pre-ship.yaml +15 -0
  292. package/evals/verify-before-claim/eval.yaml +26 -0
  293. package/evals/verify-before-claim/tasks/negative-trigger.yaml +16 -0
  294. package/evals/verify-before-claim/tasks/positive-trigger.yaml +15 -0
  295. package/evals/zoom-out/eval.yaml +26 -0
  296. package/evals/zoom-out/tasks/negative-trivial-edit.yaml +16 -0
  297. package/evals/zoom-out/tasks/positive-repeated-failure.yaml +15 -0
  298. package/fable-discipline/SKILL.md +41 -38
  299. package/fable-discipline/references/discipline-rules.md +22 -0
  300. package/fable-mode/CONTRACT-FORMAT.md +51 -51
  301. package/fable-mode/SKILL.md +39 -51
  302. package/fable-mode/agents/fable-orchestrator.md +99 -92
  303. package/fable-mode/agents/fable-verifier.md +32 -32
  304. package/fable-mode/agents/fable-worker-haiku.md +52 -48
  305. package/fable-mode/agents/fable-worker-sonnet.md +53 -49
  306. package/fable-mode/execution-guardrails/SKILL.md +43 -87
  307. package/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
  308. package/fable-mode/fable-haiku/SKILL.md +36 -48
  309. package/fable-mode/fable-haiku/references/routing-notes.md +26 -0
  310. package/fable-mode/fable-opus/SKILL.md +36 -0
  311. package/fable-mode/fable-sonnet/SKILL.md +36 -0
  312. package/fable-mode/model-matrix.json +32 -0
  313. package/fable-mode/references/execution-phases.md +37 -0
  314. package/fable-mode/references/model-matrix.md +39 -0
  315. package/fable-mode/scripts/model-selector.js +129 -0
  316. package/find-skills/SKILL.md +48 -0
  317. package/find-skills/references/discovery-flow.md +102 -0
  318. package/find-skills/scripts/use-skill.js +106 -0
  319. package/git-commit/SKILL.md +45 -55
  320. package/git-commit/guides/ANGULAR_STYLE.md +60 -60
  321. package/git-commit/guides/COMMIT_GENERATION.md +23 -23
  322. package/git-commit/guides/LANGUAGE_DETECTION.md +16 -16
  323. package/git-commit/guides/MAIN_REPO.md +14 -14
  324. package/git-commit/guides/SUBMODULES.md +27 -27
  325. package/git-commit/references/commit-flow.md +30 -0
  326. package/grill-me/SKILL.md +43 -36
  327. package/grill-me/references/grilling-playbook.md +38 -0
  328. package/grill-with-docs/ADR-FORMAT.md +47 -47
  329. package/grill-with-docs/CONTEXT-FORMAT.md +63 -63
  330. package/grill-with-docs/SKILL.md +41 -99
  331. package/grill-with-docs/references/session-playbook.md +97 -0
  332. package/harness-everything/SKILL.md +42 -141
  333. package/harness-everything/references/skill-registry.md +39 -0
  334. package/harness-everything/references/triage-and-tiers.md +116 -0
  335. package/harness-everything/scripts/bootstrap.js +203 -140
  336. package/harness-everything/scripts/routing-keywords.json +320 -0
  337. package/harness-everything/scripts/self-heal.js +241 -189
  338. package/harness-everything/scripts/tier-router.js +334 -219
  339. package/harness-everything/scripts/verify-gate.js +87 -18
  340. package/hooks/hooks.json +155 -155
  341. package/hooks/scripts/boundary-guard.js +55 -55
  342. package/hooks/scripts/contract-test.js +79 -79
  343. package/hooks/scripts/depth-guard.js +65 -65
  344. package/hooks/scripts/lib/harness-state.js +139 -228
  345. package/hooks/scripts/lib/platforms/claude.js +185 -42
  346. package/hooks/scripts/lib/platforms/codex.js +114 -46
  347. package/hooks/scripts/lib/platforms/continue.js +91 -41
  348. package/hooks/scripts/lib/platforms/copilot.js +109 -41
  349. package/hooks/scripts/lib/platforms/cursor.js +89 -41
  350. package/hooks/scripts/lib/platforms/hermes.js +57 -32
  351. package/hooks/scripts/lib/platforms/index.js +17 -17
  352. package/hooks/scripts/lib/platforms/worktrees.js +20 -20
  353. package/hooks/scripts/reset-circuit-breaker.js +30 -30
  354. package/hooks/scripts/rule-of-3-tracker.js +124 -91
  355. package/hooks/scripts/rule-of-3.js +14 -3
  356. package/hooks/scripts/state-persist.js +99 -99
  357. package/hooks/scripts/stop-gate.js +80 -80
  358. package/hooks/scripts/subagent-scope-guard.js +88 -88
  359. package/improve-codebase-architecture/SKILL.md +40 -44
  360. package/improve-codebase-architecture/guides/DEEPENING.md +37 -37
  361. package/improve-codebase-architecture/guides/HTML-REPORT.md +123 -123
  362. package/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -44
  363. package/improve-codebase-architecture/guides/LANGUAGE.md +53 -53
  364. package/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
  365. package/install-cognitive-os/SKILL.md +38 -95
  366. package/install-cognitive-os/references/cognitive-loop.md +27 -0
  367. package/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
  368. package/multi-agent-workspace/SKILL.md +37 -0
  369. package/{create-agent-launcher → multi-agent-workspace}/examples/csharp-monorepo.md +123 -123
  370. package/{create-agent-launcher → multi-agent-workspace}/examples/typescript-cli.md +126 -126
  371. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-claude.md +77 -77
  372. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-codex.md +146 -146
  373. package/multi-agent-workspace/guidelines/platform-continue.md +38 -0
  374. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-copilot.md +74 -74
  375. package/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
  376. package/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
  377. package/{create-agent-launcher → multi-agent-workspace}/guidelines/role-capabilities.md +108 -108
  378. package/multi-agent-workspace/references/agency-agents.md +31 -0
  379. package/multi-agent-workspace/references/architecture-guide.md +32 -0
  380. package/multi-agent-workspace/references/orchestration.md +48 -0
  381. package/multi-agent-workspace/scripts/agency-catalog.js +190 -0
  382. package/multi-agent-workspace/scripts/index_memory.js +51 -0
  383. package/multi-agent-workspace/scripts/scaffold.js +253 -0
  384. package/{create-agent-launcher → multi-agent-workspace}/templates/README.md +17 -17
  385. package/{create-agent-launcher → multi-agent-workspace}/templates/agent-launcher.md +67 -67
  386. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-csharp.md +55 -55
  387. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-polyglot.md +61 -61
  388. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-ts.md +56 -56
  389. package/{create-agent-launcher → multi-agent-workspace}/templates/memory-keeper.md +36 -36
  390. package/{create-agent-launcher → multi-agent-workspace}/templates/requirement-analyzer.md +65 -65
  391. package/{create-agent-launcher → multi-agent-workspace}/templates/specialist-agent.md +34 -34
  392. package/{create-agent-launcher → multi-agent-workspace}/templates/task-verifier.md +55 -55
  393. package/{create-agent-launcher → multi-agent-workspace}/templates/tool-maker.md +32 -32
  394. package/multi-agent-workspace/workflows/01-init.md +22 -0
  395. package/multi-agent-workspace/workflows/02-analysis.md +23 -0
  396. package/multi-agent-workspace/workflows/03-generation.md +27 -0
  397. package/multi-agent-workspace/workflows/04-launcher.md +16 -0
  398. package/opencode-plugin/README.md +94 -0
  399. package/opencode-plugin/hooks/circuit-breaker.js +121 -0
  400. package/opencode-plugin/hooks/compliance.js +128 -0
  401. package/opencode-plugin/hooks/post-edit.js +62 -0
  402. package/opencode-plugin/hooks/pre-complete.js +65 -0
  403. package/opencode-plugin/hooks/verify.js +140 -0
  404. package/opencode-plugin/plugin.json +17 -0
  405. package/opencode-plugin/test-hook-firing.js +198 -0
  406. package/package.json +50 -22
  407. package/references/definition-of-done.md +67 -0
  408. package/references/performance-checklist.md +153 -0
  409. package/references/platform-advisory-template.md +58 -0
  410. package/references/security-checklist.md +205 -0
  411. package/repo-docs/SKILL.md +46 -45
  412. package/repo-docs/references/process-guide.md +60 -0
  413. package/repo-docs/templates/agents-template.md +264 -264
  414. package/repo-docs/templates/knowledge-agents-template.md +50 -50
  415. package/repo-docs/templates/knowledge-readme-template.md +83 -83
  416. package/repo-docs/templates/manual-recon.md +117 -117
  417. package/repo-docs/templates/multi-skills-readme-template.md +72 -72
  418. package/repo-docs/templates/product-agents-template.md +78 -78
  419. package/repo-docs/templates/product-readme-template.md +95 -95
  420. package/repo-docs/templates/readme-template.md +136 -136
  421. package/repo-docs/templates/single-skill-readme-template.md +70 -70
  422. package/repo-docs/templates/skills-agents-template.md +60 -60
  423. package/rewrite-commits/SKILL.md +37 -32
  424. package/rewrite-commits/references/workflow.md +18 -0
  425. package/scripts/installer.js +546 -649
  426. package/scripts/lib/advisory-text.js +167 -163
  427. package/scripts/lib/claude-hooks.js +84 -71
  428. package/scripts/lib/gitignore.js +199 -80
  429. package/scripts/lib/manifest.js +146 -82
  430. package/scripts/lib/prompts.js +241 -241
  431. package/scripts/lib/skills.js +260 -172
  432. package/scripts/lib/workspace.js +28 -28
  433. package/scripts/verify-install.js +147 -0
  434. package/security-review/SKILL.md +50 -511
  435. package/security-review/guides/OWASP-PATTERNS.md +31 -0
  436. package/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
  437. package/security-review/references/security-checklist.md +478 -0
  438. package/security-review/scripts/audit-secrets.js +84 -0
  439. package/self-evolve/SKILL.md +47 -54
  440. package/self-evolve/references/memory-resolution.md +58 -0
  441. package/self-evolve/scripts/persist-memory.js +139 -40
  442. package/self-evolve/scripts/register-dynamic-skill.js +251 -0
  443. package/self-evolve/scripts/self-regression.js +110 -113
  444. package/skill-creator/SKILL.md +49 -91
  445. package/skill-creator/references/authoring-workflow.md +14 -0
  446. package/skill-creator/references/dynamic-generation-contract.md +21 -0
  447. package/skill-creator/references/quality-checklist.md +15 -0
  448. package/skill-creator/references/quality-principles.md +81 -81
  449. package/skill-creator/references/testing-workflow.md +20 -25
  450. package/skill-style/SKILL.md +42 -48
  451. package/skill-style/references/style-guide.md +36 -0
  452. package/tdd/SKILL.md +44 -53
  453. package/tdd/guides/deep-modules.md +33 -33
  454. package/tdd/guides/interface-design.md +31 -31
  455. package/tdd/guides/mocking.md +59 -59
  456. package/tdd/guides/refactoring.md +10 -10
  457. package/tdd/guides/tests.md +61 -61
  458. package/tdd/references/core-discipline.md +49 -0
  459. package/to-spec/SKILL.md +42 -0
  460. package/to-spec/references/process.md +77 -0
  461. package/to-spec/scripts/check-project-docs.js +259 -0
  462. package/to-spec/templates/cli-reference.md +31 -0
  463. package/to-spec/templates/dev-doc.md +27 -0
  464. package/to-spec/templates/feature-spec.md +59 -0
  465. package/to-spec/templates/schema-doc.md +31 -0
  466. package/to-tickets/SKILL.md +42 -0
  467. package/to-tickets/references/publishing-and-templates.md +97 -0
  468. package/todo-driven-workflow/SKILL.md +40 -54
  469. package/todo-driven-workflow/references/execution-guide.md +27 -0
  470. package/using-git-worktrees/SKILL.md +49 -161
  471. package/using-git-worktrees/references/workflow-details.md +108 -0
  472. package/verification-loop/SKILL.md +46 -138
  473. package/verification-loop/references/verification-phases.md +116 -0
  474. package/verification-loop/templates/verification-report.template.md +15 -0
  475. package/verify-before-claim/SKILL.md +43 -86
  476. package/verify-before-claim/references/verification-guide.md +73 -0
  477. package/zoom-out/SKILL.md +42 -90
  478. package/zoom-out/references/circuit-breaker.md +66 -0
  479. package/zoom-out/templates/zoom-out-report.template.md +20 -0
  480. package/build-multi-agent-system/AGENTS.md +0 -50
  481. package/build-multi-agent-system/README.md +0 -63
  482. package/build-multi-agent-system/SKILL.md +0 -68
  483. package/create-agent-launcher/SKILL.md +0 -48
  484. package/create-agent-launcher/guidelines/platform-gemini.md +0 -101
  485. package/create-agent-launcher/workflows/01-init.md +0 -22
  486. package/create-agent-launcher/workflows/02-analysis.md +0 -26
  487. package/create-agent-launcher/workflows/03-generation.md +0 -29
  488. package/create-agent-launcher/workflows/04-launcher.md +0 -20
  489. package/docs/workflows/build-multi-agent-system.md +0 -62
  490. package/docs/workflows/create-agent-launcher.md +0 -62
  491. package/eval-framework/behavioral-test.js +0 -105
  492. package/eval-framework/mechanism-test.js +0 -251
  493. package/harness-everything/scripts/todo-cli.js +0 -157
  494. package/skill-style/STYLE.md +0 -37
@@ -1,511 +1,50 @@
1
- ---
2
- name: security-review
3
- description: Use this skill when adding authentication, handling user input, working with secrets, creating API endpoints, or implementing payment/sensitive features. Provides comprehensive security checklist and patterns.
4
- author: Miya Daniel | Harness Core Team
5
- version: 0.2.0
6
- metadata:
7
- origin: ECC
8
- ---
9
-
10
- # Security Review Skill
11
-
12
- ## 📋 Skill Contract
13
-
14
- | Component | Specification |
15
- | :--- | :--- |
16
- | **Trigger / Input** | Task involves Auth, API Endpoints, File Uploads, User Input, or Secrets. Input: Target code file. |
17
- | **Expected Output** | Security scan commands executed in terminal. Code modified to fix vulnerabilities. |
18
- | **State Mutations** | Codebase hardened against injection/XSS/IDOR. |
19
- | **Enforcement Gate** | You MUST use grep or standard security linters in the terminal to scan for secrets (`sk-`, `password`) or raw SQL interpolations BEFORE marking the security check as complete. |
20
-
21
- This skill ensures all code follows security best practices and identifies potential vulnerabilities.
22
-
23
- ## When to Activate
24
-
25
- - Implementing authentication or authorization
26
- - Handling user input or file uploads
27
- - Creating new API endpoints
28
- - Working with secrets or credentials
29
- - Implementing payment features
30
- - Storing or transmitting sensitive data
31
- - Integrating third-party APIs
32
-
33
- ## Security Checklist
34
-
35
- ### 1. Secrets Management
36
-
37
- #### FAIL: NEVER Do This
38
- ```typescript
39
- const apiKey = "sk-proj-xxxxx" // Hardcoded secret
40
- const dbPassword = "password123" // In source code
41
- ```
42
-
43
- #### PASS: ALWAYS Do This
44
- ```typescript
45
- const apiKey = process.env.OPENAI_API_KEY
46
- const dbUrl = process.env.DATABASE_URL
47
-
48
- // Verify secrets exist
49
- if (!apiKey) {
50
- throw new Error('OPENAI_API_KEY not configured')
51
- }
52
- ```
53
-
54
- #### Verification Steps
55
- - [ ] No hardcoded API keys, tokens, or passwords
56
- - [ ] All secrets in environment variables
57
- - [ ] `.env.local` in .gitignore
58
- - [ ] No secrets in git history
59
- - [ ] Production secrets in hosting platform (Vercel, Railway)
60
-
61
- ### 2. Input Validation
62
-
63
- #### Always Validate User Input
64
- ```typescript
65
- import { z } from 'zod'
66
-
67
- // Define validation schema
68
- const CreateUserSchema = z.object({
69
- email: z.string().email(),
70
- name: z.string().min(1).max(100),
71
- age: z.number().int().min(0).max(150)
72
- })
73
-
74
- // Validate before processing
75
- export async function createUser(input: unknown) {
76
- try {
77
- const validated = CreateUserSchema.parse(input)
78
- return await db.users.create(validated)
79
- } catch (error) {
80
- if (error instanceof z.ZodError) {
81
- return { success: false, errors: error.issues }
82
- }
83
- throw error
84
- }
85
- }
86
- ```
87
-
88
- #### File Upload Validation
89
- ```typescript
90
- function validateFileUpload(file: File) {
91
- // Size check (5MB max)
92
- const maxSize = 5 * 1024 * 1024
93
- if (file.size > maxSize) {
94
- throw new Error('File too large (max 5MB)')
95
- }
96
-
97
- // Type check
98
- const allowedTypes = ['image/jpeg', 'image/png', 'image/gif']
99
- if (!allowedTypes.includes(file.type)) {
100
- throw new Error('Invalid file type')
101
- }
102
-
103
- // Extension check
104
- const allowedExtensions = ['.jpg', '.jpeg', '.png', '.gif']
105
- const extension = file.name.toLowerCase().match(/\.[^.]+$/)?.[0]
106
- if (!extension || !allowedExtensions.includes(extension)) {
107
- throw new Error('Invalid file extension')
108
- }
109
-
110
- return true
111
- }
112
- ```
113
-
114
- #### Verification Steps
115
- - [ ] All user inputs validated with schemas
116
- - [ ] File uploads restricted (size, type, extension)
117
- - [ ] No direct use of user input in queries
118
- - [ ] Whitelist validation (not blacklist)
119
- - [ ] Error messages don't leak sensitive info
120
-
121
- ### 3. SQL Injection Prevention
122
-
123
- #### FAIL: NEVER Concatenate SQL
124
- ```typescript
125
- // DANGEROUS - SQL Injection vulnerability
126
- const query = `SELECT * FROM users WHERE email = '${userEmail}'`
127
- await db.query(query)
128
- ```
129
-
130
- #### PASS: ALWAYS Use Parameterized Queries
131
- ```typescript
132
- // Safe - parameterized query
133
- const { data } = await supabase
134
- .from('users')
135
- .select('*')
136
- .eq('email', userEmail)
137
-
138
- // Or with raw SQL
139
- await db.query(
140
- 'SELECT * FROM users WHERE email = $1',
141
- [userEmail]
142
- )
143
- ```
144
-
145
- #### Verification Steps
146
- - [ ] All database queries use parameterized queries
147
- - [ ] No string concatenation in SQL
148
- - [ ] ORM/query builder used correctly
149
- - [ ] Supabase queries properly sanitized
150
-
151
- ### 4. Authentication & Authorization
152
-
153
- #### JWT Token Handling
154
- ```typescript
155
- // FAIL: WRONG: localStorage (vulnerable to XSS)
156
- localStorage.setItem('token', token)
157
-
158
- // PASS: CORRECT: httpOnly cookies
159
- res.setHeader('Set-Cookie',
160
- `token=${token}; HttpOnly; Secure; SameSite=Strict; Max-Age=3600`)
161
- ```
162
-
163
- #### Authorization Checks
164
- ```typescript
165
- export async function deleteUser(userId: string, requesterId: string) {
166
- // ALWAYS verify authorization first
167
- const requester = await db.users.findUnique({
168
- where: { id: requesterId }
169
- })
170
-
171
- if (requester.role !== 'admin') {
172
- return NextResponse.json(
173
- { error: 'Unauthorized' },
174
- { status: 403 }
175
- )
176
- }
177
-
178
- // Proceed with deletion
179
- await db.users.delete({ where: { id: userId } })
180
- }
181
- ```
182
-
183
- #### Row Level Security (Supabase)
184
- ```sql
185
- -- Enable RLS on all tables
186
- ALTER TABLE users ENABLE ROW LEVEL SECURITY;
187
-
188
- -- Users can only view their own data
189
- CREATE POLICY "Users view own data"
190
- ON users FOR SELECT
191
- USING (auth.uid() = id);
192
-
193
- -- Users can only update their own data
194
- CREATE POLICY "Users update own data"
195
- ON users FOR UPDATE
196
- USING (auth.uid() = id);
197
- ```
198
-
199
- #### Verification Steps
200
- - [ ] Tokens stored in httpOnly cookies (not localStorage)
201
- - [ ] Authorization checks before sensitive operations
202
- - [ ] Row Level Security enabled in Supabase
203
- - [ ] Role-based access control implemented
204
- - [ ] Session management secure
205
-
206
- ### 5. XSS Prevention
207
-
208
- #### Sanitize HTML
209
- ```typescript
210
- import DOMPurify from 'isomorphic-dompurify'
211
-
212
- // ALWAYS sanitize user-provided HTML
213
- function renderUserContent(html: string) {
214
- const clean = DOMPurify.sanitize(html, {
215
- ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'p'],
216
- ALLOWED_ATTR: []
217
- })
218
- return <div dangerouslySetInnerHTML={{ __html: clean }} />
219
- }
220
- ```
221
-
222
- #### Content Security Policy
223
-
224
- Start strict and loosen only with a documented removal plan. Do not default to
225
- `'unsafe-inline'` or `'unsafe-eval'`; they neutralize much of CSP's protection
226
- and should be treated as temporary compatibility debt.
227
-
228
- ```typescript
229
- // next.config.js
230
- const securityHeaders = [
231
- {
232
- key: 'Content-Security-Policy',
233
- value: `
234
- default-src 'self';
235
- base-uri 'self';
236
- object-src 'none';
237
- frame-ancestors 'none';
238
- script-src 'self';
239
- style-src 'self';
240
- img-src 'self' data: https:;
241
- font-src 'self';
242
- connect-src 'self' https://api.example.com;
243
- `.replace(/\s{2,}/g, ' ').trim()
244
- }
245
- ]
246
- ```
247
-
248
- #### Verification Steps
249
- - [ ] User-provided HTML sanitized
250
- - [ ] CSP headers configured
251
- - [ ] No unvalidated dynamic content rendering
252
- - [ ] React's built-in XSS protection used
253
-
254
- ### 6. CSRF Protection
255
-
256
- #### CSRF Tokens
257
- ```typescript
258
- import { csrf } from '@/lib/csrf'
259
-
260
- export async function POST(request: Request) {
261
- const token = request.headers.get('X-CSRF-Token')
262
-
263
- if (!csrf.verify(token)) {
264
- return NextResponse.json(
265
- { error: 'Invalid CSRF token' },
266
- { status: 403 }
267
- )
268
- }
269
-
270
- // Process request
271
- }
272
- ```
273
-
274
- #### SameSite Cookies
275
- ```typescript
276
- res.setHeader('Set-Cookie',
277
- `session=${sessionId}; HttpOnly; Secure; SameSite=Strict`)
278
- ```
279
-
280
- #### Verification Steps
281
- - [ ] CSRF tokens on state-changing operations
282
- - [ ] SameSite=Strict on all cookies
283
- - [ ] Double-submit cookie pattern implemented
284
-
285
- ### 7. Rate Limiting
286
-
287
- #### API Rate Limiting
288
- ```typescript
289
- import rateLimit from 'express-rate-limit'
290
-
291
- const limiter = rateLimit({
292
- windowMs: 15 * 60 * 1000, // 15 minutes
293
- max: 100, // 100 requests per window
294
- message: 'Too many requests'
295
- })
296
-
297
- // Apply to routes
298
- app.use('/api/', limiter)
299
- ```
300
-
301
- #### Expensive Operations
302
- ```typescript
303
- // Aggressive rate limiting for searches
304
- const searchLimiter = rateLimit({
305
- windowMs: 60 * 1000, // 1 minute
306
- max: 10, // 10 requests per minute
307
- message: 'Too many search requests'
308
- })
309
-
310
- app.use('/api/search', searchLimiter)
311
- ```
312
-
313
- #### Verification Steps
314
- - [ ] Rate limiting on all API endpoints
315
- - [ ] Stricter limits on expensive operations
316
- - [ ] IP-based rate limiting
317
- - [ ] User-based rate limiting (authenticated)
318
-
319
- ### 8. Sensitive Data Exposure
320
-
321
- #### Logging
322
- ```typescript
323
- // FAIL: WRONG: Logging sensitive data
324
- console.log('User login:', { email, password })
325
- console.log('Payment:', { cardNumber, cvv })
326
-
327
- // PASS: CORRECT: Redact sensitive data
328
- console.log('User login:', { email, userId })
329
- console.log('Payment:', { last4: card.last4, userId })
330
- ```
331
-
332
- #### Error Messages
333
- ```typescript
334
- // FAIL: WRONG: Exposing internal details
335
- catch (error) {
336
- return NextResponse.json(
337
- { error: error.message, stack: error.stack },
338
- { status: 500 }
339
- )
340
- }
341
-
342
- // PASS: CORRECT: Generic error messages
343
- catch (error) {
344
- console.error('Internal error:', error)
345
- return NextResponse.json(
346
- { error: 'An error occurred. Please try again.' },
347
- { status: 500 }
348
- )
349
- }
350
- ```
351
-
352
- #### Verification Steps
353
- - [ ] No passwords, tokens, or secrets in logs
354
- - [ ] Error messages generic for users
355
- - [ ] Detailed errors only in server logs
356
- - [ ] No stack traces exposed to users
357
-
358
- ### 9. Blockchain Security (Solana)
359
-
360
- #### Wallet Verification
361
- ```typescript
362
- import { verify } from '@solana/web3.js'
363
-
364
- async function verifyWalletOwnership(
365
- publicKey: string,
366
- signature: string,
367
- message: string
368
- ) {
369
- try {
370
- const isValid = verify(
371
- Buffer.from(message),
372
- Buffer.from(signature, 'base64'),
373
- Buffer.from(publicKey, 'base64')
374
- )
375
- return isValid
376
- } catch (error) {
377
- return false
378
- }
379
- }
380
- ```
381
-
382
- #### Transaction Verification
383
- ```typescript
384
- async function verifyTransaction(transaction: Transaction) {
385
- // Verify recipient
386
- if (transaction.to !== expectedRecipient) {
387
- throw new Error('Invalid recipient')
388
- }
389
-
390
- // Verify amount
391
- if (transaction.amount > maxAmount) {
392
- throw new Error('Amount exceeds limit')
393
- }
394
-
395
- // Verify user has sufficient balance
396
- const balance = await getBalance(transaction.from)
397
- if (balance < transaction.amount) {
398
- throw new Error('Insufficient balance')
399
- }
400
-
401
- return true
402
- }
403
- ```
404
-
405
- #### Verification Steps
406
- - [ ] Wallet signatures verified
407
- - [ ] Transaction details validated
408
- - [ ] Balance checks before transactions
409
- - [ ] No blind transaction signing
410
-
411
- ### 10. Dependency Security
412
-
413
- #### Regular Updates
414
- ```bash
415
- # Check for vulnerabilities
416
- npm audit
417
-
418
- # Fix automatically fixable issues
419
- npm audit fix
420
-
421
- # Update dependencies
422
- npm update
423
-
424
- # Check for outdated packages
425
- npm outdated
426
- ```
427
-
428
- #### Lock Files
429
- ```bash
430
- # ALWAYS commit lock files
431
- git add package-lock.json
432
-
433
- # Use in CI/CD for reproducible builds
434
- npm ci # Instead of npm install
435
- ```
436
-
437
- #### Verification Steps
438
- - [ ] Dependencies up to date
439
- - [ ] No known vulnerabilities (npm audit clean)
440
- - [ ] Lock files committed
441
- - [ ] Dependabot enabled on GitHub
442
- - [ ] Regular security updates
443
-
444
- ## Security Testing
445
-
446
- ### Automated Security Tests
447
- ```typescript
448
- // Test authentication
449
- test('requires authentication', async () => {
450
- const response = await fetch('/api/protected')
451
- expect(response.status).toBe(401)
452
- })
453
-
454
- // Test authorization
455
- test('requires admin role', async () => {
456
- const response = await fetch('/api/admin', {
457
- headers: { Authorization: `Bearer ${userToken}` }
458
- })
459
- expect(response.status).toBe(403)
460
- })
461
-
462
- // Test input validation
463
- test('rejects invalid input', async () => {
464
- const response = await fetch('/api/users', {
465
- method: 'POST',
466
- body: JSON.stringify({ email: 'not-an-email' })
467
- })
468
- expect(response.status).toBe(400)
469
- })
470
-
471
- // Test rate limiting
472
- test('enforces rate limits', async () => {
473
- const requests = Array(101).fill(null).map(() =>
474
- fetch('/api/endpoint')
475
- )
476
-
477
- const responses = await Promise.all(requests)
478
- const tooManyRequests = responses.filter(r => r.status === 429)
479
-
480
- expect(tooManyRequests.length).toBeGreaterThan(0)
481
- })
482
- ```
483
-
484
- ## Pre-Deployment Security Checklist
485
-
486
- Before ANY production deployment:
487
-
488
- - [ ] **Secrets**: No hardcoded secrets, all in env vars
489
- - [ ] **Input Validation**: All user inputs validated
490
- - [ ] **SQL Injection**: All queries parameterized
491
- - [ ] **XSS**: User content sanitized
492
- - [ ] **CSRF**: Protection enabled
493
- - [ ] **Authentication**: Proper token handling
494
- - [ ] **Authorization**: Role checks in place
495
- - [ ] **Rate Limiting**: Enabled on all endpoints
496
- - [ ] **HTTPS**: Enforced in production
497
- - [ ] **Security Headers**: CSP, X-Frame-Options configured
498
- - [ ] **Error Handling**: No sensitive data in errors
499
- - [ ] **Logging**: No sensitive data logged
500
- - [ ] **Dependencies**: Up to date, no vulnerabilities
501
- - [ ] **Row Level Security**: Enabled in Supabase
502
- - [ ] **CORS**: Properly configured
503
- - [ ] **File Uploads**: Validated (size, type)
504
- - [ ] **Wallet Signatures**: Verified (if blockchain)
505
-
506
- ## Resources
507
-
508
- - [OWASP Top 10](https://owasp.org/www-project-top-ten/)
509
- - [Next.js Security](https://nextjs.org/docs/security)
510
- - [Supabase Security](https://supabase.com/docs/guides/auth)
511
- - [Web Security Academy](https://portswigger.net/web-security)
1
+ ---
2
+ name: security-review
3
+ description: Conducts STRIDE threat modeling, scans secrets via audit scripts, and hardens code against OWASP Top 10 risks with three-tier boundary controls. Use when implementing auth, handling input/uploads, managing secrets, or auditing code before deployment.
4
+ license: Apache-2.0
5
+ metadata:
6
+ author: Miya Daniel
7
+ version: 0.3.4
8
+ ---
9
+
10
+ # Security Review & Code Hardening
11
+
12
+ Hardens code against OWASP Top 10.
13
+
14
+ ## USE FOR:
15
+ - AuthN or authZ implementation
16
+ - User input, uploads, new API endpoints
17
+ - Secrets, credentials, payment features
18
+ - Security audit before production deploy
19
+
20
+ ## DO NOT USE FOR:
21
+ - Code review without security scope — instead use a standard pass
22
+ - Performance profiling
23
+ - Accessibility or UI styling fixes
24
+
25
+ ## Skill Contract
26
+
27
+ | Component | Specification |
28
+ | :--- | :--- |
29
+ | **Trigger / Input** | Auth, endpoints, uploads, user input, secrets, audit requests. |
30
+ | **Expected Output** | Threat model, scan via `audit-secrets.js`, hardened code, audit report. |
31
+ | **State Mutations** | Codebase hardened against injection/XSS/IDOR; report to docs or platform dir. |
32
+ | **Enforcement Gate** | Secret scan via the script or grep before concluding review. |
33
+
34
+ ## Review Flow
35
+
36
+ 1. Threat-model (`STRIDE`) per security-review/guides/STRIDE-THREAT-MODEL.md; misuse-case every endpoint/input.
37
+ 2. Scan secrets and injection risks:
38
+ ```bash
39
+ node "<this-skill-dir>/scripts/audit-secrets.js"
40
+ ```
41
+ Fallback: grep scan.
42
+ 3. Fix findings per the boundary system; report to `docs/security-audit.md`, or `.github/harness-everything/security-audit.md` when docs/ is protected or absent.
43
+
44
+ ## Three-Tier Boundary System
45
+
46
+ - **Always Do**: parameterize SQL, Zod-validate inputs, httpOnly cookies, secrets to `process.env`.
47
+ - **Ask First**: CORS changes, auth/login flows, file uploads, rate limits.
48
+ - **Never Do**: commit hardcoded secrets (`sk-`), log passwords/tokens, use eval() or unescaped innerHTML.
49
+
50
+ Deep dive: references/security-checklist.md + security-review/guides/OWASP-PATTERNS.md
@@ -0,0 +1,31 @@
1
+ # OWASP Top 10 Hardening Reference
2
+
3
+ Concrete code patterns for mitigating OWASP Top 10 vulnerabilities.
4
+
5
+ ## 1. Injection Prevention (SQL / NoSQL / Command)
6
+ Always parameterize database queries. Never concatenate untrusted strings into SQL/Shell commands.
7
+
8
+ ```typescript
9
+ // SAFE Parameterized Query
10
+ const user = await db.query('SELECT * FROM users WHERE id = $1', [userId]);
11
+
12
+ // SAFE ORM Mapping
13
+ const user = await prisma.user.findUnique({ where: { id: userId } });
14
+ ```
15
+
16
+ ## 2. Broken Authentication & Session Management
17
+ Store tokens in `httpOnly`, `Secure`, `SameSite=Strict` cookies instead of `localStorage`.
18
+
19
+ ```typescript
20
+ // SAFE httpOnly Cookie Setting
21
+ res.setHeader('Set-Cookie', `token=${token}; HttpOnly; Secure; SameSite=Strict; Path=/; Max-Age=3600`);
22
+ ```
23
+
24
+ ## 3. Sensitive Data & Secrets Hygiene
25
+ Never hardcode API keys or secrets in version control.
26
+
27
+ ```typescript
28
+ // SAFE Secret Extraction
29
+ const apiKey = process.env.OPENAI_API_KEY;
30
+ if (!apiKey) throw new Error('OPENAI_API_KEY is required');
31
+ ```
@@ -0,0 +1,21 @@
1
+ # STRIDE Threat Modeling Guide
2
+
3
+ Apply STRIDE threat modeling at system boundaries before writing code.
4
+
5
+ ## 1. STRIDE Lenses & Mitigations
6
+
7
+ | Threat | Definition | Typical Mitigation Pattern |
8
+ | :--- | :--- | :--- |
9
+ | **S - Spoofing** | Impersonating an authentic user, service, or device. | Strong authentication, JWT httpOnly cookies, HMAC signatures. |
10
+ | **T - Tampering** | Malicious alteration of data in transit or at rest. | Parameterized SQL queries, TLS/HTTPS, Zod schema validation. |
11
+ | **R - Repudiation** | Denying having performed an action due to lack of audit trail. | Immutable audit logs for sensitive operations (payments, auth shifts). |
12
+ | **I - Information Disclosure** | Unauthorized data leakage to external parties. | Field allowlists, generic error messages, secret management in env vars. |
13
+ | **D - Denial of Service** | Overwhelming system resources to prevent legitimate access. | Rate limiting, request payload size limits, query pagination. |
14
+ | **E - Elevation of Privilege** | Gaining unauthorized permissions or higher role access. | Role-Based Access Control (RBAC), Row-Level Security (RLS). |
15
+
16
+ ## 2. Abuse Case Design
17
+
18
+ For every positive Use Case, write a corresponding **Abuse Case**:
19
+ - **Use Case**: "User uploads profile picture."
20
+ - **Abuse Case**: "Attacker uploads 2GB executable file `.php` with fake image magic bytes."
21
+ - **Mitigation**: Validate file extension, MIME type, max file size (5MB), and store outside web root.