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
@@ -0,0 +1,478 @@
1
+ # Security Checklist, Patterns & Testing (moved from SKILL.md)
2
+
3
+ ## Security Checklist & Patterns
4
+
5
+ ### 1. Secrets Management
6
+
7
+ #### Anti-Pattern (Avoid)
8
+ ```typescript
9
+ const apiKey = "sk-proj-xxxxx" // Hardcoded secret in source control
10
+ ```
11
+
12
+ #### Recommended Pattern
13
+ ```typescript
14
+ const apiKey = process.env.OPENAI_API_KEY
15
+
16
+ if (!apiKey) {
17
+ throw new Error('OPENAI_API_KEY environment variable is missing')
18
+ }
19
+ ```
20
+
21
+ #### Verification Steps
22
+ - [ ] No hardcoded API keys, tokens, or passwords
23
+ - [ ] All secrets in environment variables
24
+ - [ ] `.env.local` in .gitignore
25
+ - [ ] No secrets in git history
26
+ - [ ] Production secrets in hosting platform (Vercel, Railway)
27
+
28
+ ### 2. Input Validation
29
+
30
+ #### Always Validate User Input
31
+ ```typescript
32
+ import { z } from 'zod'
33
+
34
+ // Define validation schema
35
+ const CreateUserSchema = z.object({
36
+ email: z.string().email(),
37
+ name: z.string().min(1).max(100),
38
+ age: z.number().int().min(0).max(150)
39
+ })
40
+
41
+ // Validate before processing
42
+ export async function createUser(input: unknown) {
43
+ try {
44
+ const validated = CreateUserSchema.parse(input)
45
+ return await db.users.create(validated)
46
+ } catch (error) {
47
+ if (error instanceof z.ZodError) {
48
+ return { success: false, errors: error.issues }
49
+ }
50
+ throw error
51
+ }
52
+ }
53
+ ```
54
+
55
+ #### File Upload Validation
56
+ ```typescript
57
+ function validateFileUpload(file: File) {
58
+ // Size check (5MB max)
59
+ const maxSize = 5 * 1024 * 1024
60
+ if (file.size > maxSize) {
61
+ throw new Error('File too large (max 5MB)')
62
+ }
63
+
64
+ // Type check
65
+ const allowedTypes = ['image/jpeg', 'image/png', 'image/gif']
66
+ if (!allowedTypes.includes(file.type)) {
67
+ throw new Error('Invalid file type')
68
+ }
69
+
70
+ // Extension check
71
+ const allowedExtensions = ['.jpg', '.jpeg', '.png', '.gif']
72
+ const extension = file.name.toLowerCase().match(/\.[^.]+$/)?.[0]
73
+ if (!extension || !allowedExtensions.includes(extension)) {
74
+ throw new Error('Invalid file extension')
75
+ }
76
+
77
+ return true
78
+ }
79
+ ```
80
+
81
+ #### Verification Steps
82
+ - [ ] All user inputs validated with schemas
83
+ - [ ] File uploads restricted (size, type, extension)
84
+ - [ ] No direct use of user input in queries
85
+ - [ ] Whitelist validation (not blacklist)
86
+ - [ ] Error messages don't leak sensitive info
87
+
88
+ ### 3. SQL Injection Prevention
89
+
90
+ #### FAIL: NEVER Concatenate SQL
91
+ ```typescript
92
+ // DANGEROUS - SQL Injection vulnerability
93
+ const query = `SELECT * FROM users WHERE email = '${userEmail}'`
94
+ await db.query(query)
95
+ ```
96
+
97
+ #### PASS: ALWAYS Use Parameterized Queries
98
+ ```typescript
99
+ // Safe - parameterized query
100
+ const { data } = await supabase
101
+ .from('users')
102
+ .select('*')
103
+ .eq('email', userEmail)
104
+
105
+ // Or with raw SQL
106
+ await db.query(
107
+ 'SELECT * FROM users WHERE email = $1',
108
+ [userEmail]
109
+ )
110
+ ```
111
+
112
+ #### Verification Steps
113
+ - [ ] All database queries use parameterized queries
114
+ - [ ] No string concatenation in SQL
115
+ - [ ] ORM/query builder used correctly
116
+ - [ ] Supabase queries properly sanitized
117
+
118
+ ### 4. Authentication & Authorization
119
+
120
+ #### JWT Token Handling
121
+ ```typescript
122
+ // FAIL: WRONG: localStorage (vulnerable to XSS)
123
+ localStorage.setItem('token', token)
124
+
125
+ // PASS: CORRECT: httpOnly cookies
126
+ res.setHeader('Set-Cookie',
127
+ `token=${token}; HttpOnly; Secure; SameSite=Strict; Max-Age=3600`)
128
+ ```
129
+
130
+ #### Authorization Checks
131
+ ```typescript
132
+ export async function deleteUser(userId: string, requesterId: string) {
133
+ // ALWAYS verify authorization first
134
+ const requester = await db.users.findUnique({
135
+ where: { id: requesterId }
136
+ })
137
+
138
+ if (requester.role !== 'admin') {
139
+ return NextResponse.json(
140
+ { error: 'Unauthorized' },
141
+ { status: 403 }
142
+ )
143
+ }
144
+
145
+ // Proceed with deletion
146
+ await db.users.delete({ where: { id: userId } })
147
+ }
148
+ ```
149
+
150
+ #### Row Level Security (Supabase)
151
+ ```sql
152
+ -- Enable RLS on all tables
153
+ ALTER TABLE users ENABLE ROW LEVEL SECURITY;
154
+
155
+ -- Users can only view their own data
156
+ CREATE POLICY "Users view own data"
157
+ ON users FOR SELECT
158
+ USING (auth.uid() = id);
159
+
160
+ -- Users can only update their own data
161
+ CREATE POLICY "Users update own data"
162
+ ON users FOR UPDATE
163
+ USING (auth.uid() = id);
164
+ ```
165
+
166
+ #### Verification Steps
167
+ - [ ] Tokens stored in httpOnly cookies (not localStorage)
168
+ - [ ] Authorization checks before sensitive operations
169
+ - [ ] Row Level Security enabled in Supabase
170
+ - [ ] Role-based access control implemented
171
+ - [ ] Session management secure
172
+
173
+ ### 5. XSS Prevention
174
+
175
+ #### Sanitize HTML
176
+ ```typescript
177
+ import DOMPurify from 'isomorphic-dompurify'
178
+
179
+ // ALWAYS sanitize user-provided HTML
180
+ function renderUserContent(html: string) {
181
+ const clean = DOMPurify.sanitize(html, {
182
+ ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'p'],
183
+ ALLOWED_ATTR: []
184
+ })
185
+ return <div dangerouslySetInnerHTML={{ __html: clean }} />
186
+ }
187
+ ```
188
+
189
+ #### Content Security Policy
190
+
191
+ Start strict and loosen only with a documented removal plan. Do not default to
192
+ `'unsafe-inline'` or `'unsafe-eval'`; they neutralize much of CSP's protection
193
+ and should be treated as temporary compatibility debt.
194
+
195
+ ```typescript
196
+ // next.config.js
197
+ const securityHeaders = [
198
+ {
199
+ key: 'Content-Security-Policy',
200
+ value: `
201
+ default-src 'self';
202
+ base-uri 'self';
203
+ object-src 'none';
204
+ frame-ancestors 'none';
205
+ script-src 'self';
206
+ style-src 'self';
207
+ img-src 'self' data: https:;
208
+ font-src 'self';
209
+ connect-src 'self' https://api.example.com;
210
+ `.replace(/\s{2,}/g, ' ').trim()
211
+ }
212
+ ]
213
+ ```
214
+
215
+ #### Verification Steps
216
+ - [ ] User-provided HTML sanitized
217
+ - [ ] CSP headers configured
218
+ - [ ] No unvalidated dynamic content rendering
219
+ - [ ] React's built-in XSS protection used
220
+
221
+ ### 6. CSRF Protection
222
+
223
+ #### CSRF Tokens
224
+ ```typescript
225
+ import { csrf } from '@/lib/csrf'
226
+
227
+ export async function POST(request: Request) {
228
+ const token = request.headers.get('X-CSRF-Token')
229
+
230
+ if (!csrf.verify(token)) {
231
+ return NextResponse.json(
232
+ { error: 'Invalid CSRF token' },
233
+ { status: 403 }
234
+ )
235
+ }
236
+
237
+ // Process request
238
+ }
239
+ ```
240
+
241
+ #### SameSite Cookies
242
+ ```typescript
243
+ res.setHeader('Set-Cookie',
244
+ `session=${sessionId}; HttpOnly; Secure; SameSite=Strict`)
245
+ ```
246
+
247
+ #### Verification Steps
248
+ - [ ] CSRF tokens on state-changing operations
249
+ - [ ] SameSite=Strict on all cookies
250
+ - [ ] Double-submit cookie pattern implemented
251
+
252
+ ### 7. Rate Limiting
253
+
254
+ #### API Rate Limiting
255
+ ```typescript
256
+ import rateLimit from 'express-rate-limit'
257
+
258
+ const limiter = rateLimit({
259
+ windowMs: 15 * 60 * 1000, // 15 minutes
260
+ max: 100, // 100 requests per window
261
+ message: 'Too many requests'
262
+ })
263
+
264
+ // Apply to routes
265
+ app.use('/api/', limiter)
266
+ ```
267
+
268
+ #### Expensive Operations
269
+ ```typescript
270
+ // Aggressive rate limiting for searches
271
+ const searchLimiter = rateLimit({
272
+ windowMs: 60 * 1000, // 1 minute
273
+ max: 10, // 10 requests per minute
274
+ message: 'Too many search requests'
275
+ })
276
+
277
+ app.use('/api/search', searchLimiter)
278
+ ```
279
+
280
+ #### Verification Steps
281
+ - [ ] Rate limiting on all API endpoints
282
+ - [ ] Stricter limits on expensive operations
283
+ - [ ] IP-based rate limiting
284
+ - [ ] User-based rate limiting (authenticated)
285
+
286
+ ### 8. Sensitive Data Exposure
287
+
288
+ #### Logging
289
+ ```typescript
290
+ // FAIL: WRONG: Logging sensitive data
291
+ console.log('User login:', { email, password })
292
+ console.log('Payment:', { cardNumber, cvv })
293
+
294
+ // PASS: CORRECT: Redact sensitive data
295
+ console.log('User login:', { email, userId })
296
+ console.log('Payment:', { last4: card.last4, userId })
297
+ ```
298
+
299
+ #### Error Messages
300
+ ```typescript
301
+ // FAIL: WRONG: Exposing internal details
302
+ catch (error) {
303
+ return NextResponse.json(
304
+ { error: error.message, stack: error.stack },
305
+ { status: 500 }
306
+ )
307
+ }
308
+
309
+ // PASS: CORRECT: Generic error messages
310
+ catch (error) {
311
+ console.error('Internal error:', error)
312
+ return NextResponse.json(
313
+ { error: 'An error occurred. Please try again.' },
314
+ { status: 500 }
315
+ )
316
+ }
317
+ ```
318
+
319
+ #### Verification Steps
320
+ - [ ] No passwords, tokens, or secrets in logs
321
+ - [ ] Error messages generic for users
322
+ - [ ] Detailed errors only in server logs
323
+ - [ ] No stack traces exposed to users
324
+
325
+ ### 9. Blockchain Security (Solana)
326
+
327
+ #### Wallet Verification
328
+ ```typescript
329
+ import { verify } from '@solana/web3.js'
330
+
331
+ async function verifyWalletOwnership(
332
+ publicKey: string,
333
+ signature: string,
334
+ message: string
335
+ ) {
336
+ try {
337
+ const isValid = verify(
338
+ Buffer.from(message),
339
+ Buffer.from(signature, 'base64'),
340
+ Buffer.from(publicKey, 'base64')
341
+ )
342
+ return isValid
343
+ } catch (error) {
344
+ return false
345
+ }
346
+ }
347
+ ```
348
+
349
+ #### Transaction Verification
350
+ ```typescript
351
+ async function verifyTransaction(transaction: Transaction) {
352
+ // Verify recipient
353
+ if (transaction.to !== expectedRecipient) {
354
+ throw new Error('Invalid recipient')
355
+ }
356
+
357
+ // Verify amount
358
+ if (transaction.amount > maxAmount) {
359
+ throw new Error('Amount exceeds limit')
360
+ }
361
+
362
+ // Verify user has sufficient balance
363
+ const balance = await getBalance(transaction.from)
364
+ if (balance < transaction.amount) {
365
+ throw new Error('Insufficient balance')
366
+ }
367
+
368
+ return true
369
+ }
370
+ ```
371
+
372
+ #### Verification Steps
373
+ - [ ] Wallet signatures verified
374
+ - [ ] Transaction details validated
375
+ - [ ] Balance checks before transactions
376
+ - [ ] No blind transaction signing
377
+
378
+ ### 10. Dependency Security
379
+
380
+ #### Regular Updates
381
+ ```bash
382
+ # Check for vulnerabilities
383
+ npm audit
384
+
385
+ # Fix automatically fixable issues
386
+ npm audit fix
387
+
388
+ # Update dependencies
389
+ npm update
390
+
391
+ # Check for outdated packages
392
+ npm outdated
393
+ ```
394
+
395
+ #### Lock Files
396
+ ```bash
397
+ # ALWAYS commit lock files
398
+ git add package-lock.json
399
+
400
+ # Use in CI/CD for reproducible builds
401
+ npm ci # Instead of npm install
402
+ ```
403
+
404
+ #### Verification Steps
405
+ - [ ] Dependencies up to date
406
+ - [ ] No known vulnerabilities (npm audit clean)
407
+ - [ ] Lock files committed
408
+ - [ ] Dependabot enabled on GitHub
409
+ - [ ] Regular security updates
410
+
411
+ ## Security Testing
412
+
413
+ ### Automated Security Tests
414
+ ```typescript
415
+ // Test authentication
416
+ test('requires authentication', async () => {
417
+ const response = await fetch('/api/protected')
418
+ expect(response.status).toBe(401)
419
+ })
420
+
421
+ // Test authorization
422
+ test('requires admin role', async () => {
423
+ const response = await fetch('/api/admin', {
424
+ headers: { Authorization: `Bearer ${userToken}` }
425
+ })
426
+ expect(response.status).toBe(403)
427
+ })
428
+
429
+ // Test input validation
430
+ test('rejects invalid input', async () => {
431
+ const response = await fetch('/api/users', {
432
+ method: 'POST',
433
+ body: JSON.stringify({ email: 'not-an-email' })
434
+ })
435
+ expect(response.status).toBe(400)
436
+ })
437
+
438
+ // Test rate limiting
439
+ test('enforces rate limits', async () => {
440
+ const requests = Array(101).fill(null).map(() =>
441
+ fetch('/api/endpoint')
442
+ )
443
+
444
+ const responses = await Promise.all(requests)
445
+ const tooManyRequests = responses.filter(r => r.status === 429)
446
+
447
+ expect(tooManyRequests.length).toBeGreaterThan(0)
448
+ })
449
+ ```
450
+
451
+ ## Pre-Deployment Security Checklist
452
+
453
+ Before ANY production deployment:
454
+
455
+ - [ ] **Secrets**: No hardcoded secrets, all in env vars
456
+ - [ ] **Input Validation**: All user inputs validated
457
+ - [ ] **SQL Injection**: All queries parameterized
458
+ - [ ] **XSS**: User content sanitized
459
+ - [ ] **CSRF**: Protection enabled
460
+ - [ ] **Authentication**: Proper token handling
461
+ - [ ] **Authorization**: Role checks in place
462
+ - [ ] **Rate Limiting**: Enabled on all endpoints
463
+ - [ ] **HTTPS**: Enforced in production
464
+ - [ ] **Security Headers**: CSP, X-Frame-Options configured
465
+ - [ ] **Error Handling**: No sensitive data in errors
466
+ - [ ] **Logging**: No sensitive data logged
467
+ - [ ] **Dependencies**: Up to date, no vulnerabilities
468
+ - [ ] **Row Level Security**: Enabled in Supabase
469
+ - [ ] **CORS**: Properly configured
470
+ - [ ] **File Uploads**: Validated (size, type)
471
+ - [ ] **Wallet Signatures**: Verified (if blockchain)
472
+
473
+ ## Resources
474
+
475
+ - [OWASP Top 10](https://owasp.org/www-project-top-ten/)
476
+ - [Next.js Security](https://nextjs.org/docs/security)
477
+ - [Supabase Security](https://supabase.com/docs/guides/auth)
478
+ - [Web Security Academy](https://portswigger.net/web-security)
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Automated Security Scan Helper
3
+ * Scans the workspace for hardcoded secrets, raw SQL concatenations, unhandled innerHTML/eval, and loose CORS/HTTP configs.
4
+ * Usage:
5
+ * node audit-secrets.js Scan current workspace
6
+ * node audit-secrets.js --json Output JSON format
7
+ */
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+
11
+ function getWorkspaceRoot() {
12
+ let dir = path.resolve(process.cwd());
13
+ while (dir !== path.parse(dir).root) {
14
+ if (fs.existsSync(path.join(dir, '.git'))) return dir;
15
+ dir = path.dirname(dir);
16
+ }
17
+ return process.cwd();
18
+ }
19
+
20
+ const SECRET_PATTERNS = [
21
+ { name: 'Hardcoded API Key / Token', regex: /(?:sk-[a-zA-Z0-9]{20,}|ghp_[a-zA-Z0-9]{30,}|api[_-]?key\s*=\s*['"][a-zA-Z0-9_\-]{16,}['"])/i },
22
+ { name: 'Hardcoded Password', regex: /(?:password|passwd|pwd)\s*[:=]\s*['"][^'"]{6,}['"]/i },
23
+ { name: 'Unescaped SQL Concatenation', regex: /SELECT\s+.*\s+FROM\s+.*(?:\+|`|\${)/i },
24
+ { name: 'Unsafe Dynamic Code Execution', regex: /(?:eval\s*\(|dangerouslySetInnerHTML|innerHTML\s*=)/i }
25
+ ];
26
+
27
+ const IGNORE_DIRS = ['node_modules', '.git', 'dist', 'build', '.next', 'coverage', '.claude', '.github', '.cursor'];
28
+
29
+ function scanDir(dir, findings = []) {
30
+ try {
31
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
32
+ for (const entry of entries) {
33
+ if (IGNORE_DIRS.includes(entry.name)) continue;
34
+ const fullPath = path.join(dir, entry.name);
35
+ if (entry.isDirectory()) {
36
+ scanDir(fullPath, findings);
37
+ } else if (entry.isFile() && /\.(js|ts|tsx|jsx|json|py|go|env|md)$/i.test(entry.name)) {
38
+ scanFile(fullPath, findings);
39
+ }
40
+ }
41
+ } catch (e) {
42
+ // Ignore unreadable directories
43
+ }
44
+ return findings;
45
+ }
46
+
47
+ function scanFile(filePath, findings) {
48
+ try {
49
+ const content = fs.readFileSync(filePath, 'utf8');
50
+ const lines = content.split(/\r?\n/);
51
+ lines.forEach((line, index) => {
52
+ SECRET_PATTERNS.forEach(pattern => {
53
+ if (pattern.regex.test(line)) {
54
+ findings.push({
55
+ file: path.relative(process.cwd(), filePath),
56
+ line: index + 1,
57
+ issue: pattern.name,
58
+ snippet: line.trim().slice(0, 120)
59
+ });
60
+ }
61
+ });
62
+ });
63
+ } catch (e) {
64
+ // Ignore unreadable files
65
+ }
66
+ }
67
+
68
+ const wsRoot = getWorkspaceRoot();
69
+ const findings = scanDir(wsRoot);
70
+
71
+ if (process.argv.includes('--json')) {
72
+ console.log(JSON.stringify(findings, null, 2));
73
+ } else {
74
+ console.log(`=== Harness Security & Secrets Scan ===`);
75
+ if (findings.length === 0) {
76
+ console.log(`✅ No obvious hardcoded secrets or raw SQL injections detected.`);
77
+ } else {
78
+ console.log(`⚠️ Found ${findings.length} potential security concern(s):\n`);
79
+ findings.forEach(f => {
80
+ console.log(` [${f.issue}] ${f.file}:${f.line}`);
81
+ console.log(` Snippet: ${f.snippet}\n`);
82
+ });
83
+ }
84
+ }
@@ -1,54 +1,47 @@
1
- ---
2
- name: self-evolve
3
- description: Extracts root causes from resolved difficult problems and persists them as new error boundaries in memory.
4
- author: Miya Daniel | Harness Core Team
5
- version: 0.2.0
6
- ---
7
-
8
- # Self Evolve (Self Evolution & Memory Extraction)
9
-
10
- ## 📋 Skill Contract
11
-
12
- | Component | Specification |
13
- | :--- | :--- |
14
- | **Trigger / Input** | Task completion after a major struggle, or post-zoom-out recovery. Input: The root cause of the previous failure. |
15
- | **Expected Output** | Terminal execution of the persistence script. |
16
- | **State Mutations** | Updates workspace memory/rules files (e.g., `RULES.md` or `.claude/harness-state/memories.json`). |
17
- | **Enforcement Gate** | You MUST run `node <this-skill-dir>/scripts/self-regression.js`. You MUST run `node <this-skill-dir>/scripts/persist-memory.js "<rule>"`. |
18
-
19
- This skill is responsible for the long-term learning and error prevention of the system.
20
- It ensures that the entire Harness ecosystem becomes smarter and avoids repeating mistakes after solving difficult problems every time.
21
-
22
- ## 1. Triggers
23
- - **Post-Circuit Breaker**: When `zoom-out` was triggered, and the difficult problem was ultimately solved — via the reflection report's fresh diagnosis or with the human's hints.
24
- - **Major Breakthrough**: Completed an extremely complex Tier 3 task, and discovered some previously unknown framework limitations or architectural pitfalls during the process.
25
- - **Human Instruction**: The user explicitly requests "remember this lesson" or "add this to memory".
26
-
27
- ## 2. Execution Process (The Evolution Loop)
28
-
29
- ### Step 1: Deep Reflection & Root Cause Extraction
30
- - **Reflection is Core**: Reflection is the true focus of the memory system. Mere recording cannot improve accuracy; you must continuously reflect to self-evolve.
31
- - Analyze the problem just solved, discarding specific variable names or specific line numbers of code.
32
- - Extract the **high-level, universally applicable root cause**.
33
- - *Incorrect Extraction*: "Do not use `forEach` to call the database on line 45 of `auth.js`."
34
- - *Correct Extraction*: "When handling ORM relational writes in this project, you MUST use Transactions and batch writes. Sending Queries individually in a loop is PROHIBITED, otherwise it will cause connection pool exhaustion."
35
-
36
- ### Step 2: Define Error Boundaries
37
- - Transform the extracted root cause into a defensive rule for `install-cognitive-os` to reference in the future.
38
- - Explicitly define which domain this new rule applies to (e.g., Database, React Hooks, specific API integration).
39
- - **Anti-Focus Loss**: This rule must be able to directly guide future Agents to notice this landmine during the `[Discover]` phase, instead of finding out only after writing it wrong.
40
-
41
- ### Step 3: Memory Persistence & Dynamic Skill Generation
42
- - **MANDATORY**: Before persisting or committing any dynamically generated skills or memories, you MUST run the self-regression suite to ensure no behavioral regressions or syntax errors were introduced. Both scripts below live in the `scripts/` directory **inside this skill's own directory** — resolve paths from wherever this SKILL.md was loaded (do not guess a hard-coded location):
43
- ```bash
44
- node "<this-skill-dir>/scripts/self-regression.js"
45
- ```
46
- - **MANDATORY**: You MUST execute the persistence script instead of manually editing files or calling write tools:
47
- ```bash
48
- node "<this-skill-dir>/scripts/persist-memory.js" "<Your extracted root cause and defensive rule here>"
49
- ```
50
- - **Dynamic Skill Generation (Session Packaging)**: Through self-review, package the successful session summary (hard boundary) into a new, dynamic skill. **You MUST load `skill-creator/SKILL.md` and follow its §4 Dynamic Skill Generation Contract** before writing the file — it defines the required location (`.claude/harness-everything/skills/generated/<name>/SKILL.md`, not the repo root), the required lifecycle frontmatter (`metadata.type: dynamic`, `status: draft`), and the Quality Checklist gate this file must pass since it skips human PR review by design. Do not hand-write a `SKILL.md` inline here; that checklist is the only review a dynamically generated skill gets. These dynamically generated skills have a lifecycle — draft → active → deprecated, or promoted to a static skill once proven general — distinct from the system's foundational static skills.
51
- - **Note**: Only record "Key Insights", keeping the memory document short and punchy. Avoid stuffing it with lengthy conversation logs or useless narratives.
52
-
53
- ## 3. Purpose
54
- Through `self-evolve`, we transform "invalid trial-and-error", which might otherwise waste Tokens, into a valuable "moat" for the system. Even if the underlying model doesn't become inherently smarter, equipped with these memories, the system will automatically avoid known traps and break through its original reasoning ceiling.
1
+ ---
2
+ name: self-evolve
3
+ description: "Extract root causes from resolved problems and persist them as defensive memory rules or dynamic skills; use after struggles, zoom-outs, or explicit request."
4
+ license: Apache-2.0
5
+ metadata:
6
+ author: Miya Daniel
7
+ version: 0.3.6
8
+ ---
9
+
10
+ # Self-evolve
11
+
12
+ Record reusable root causes from resolved work.
13
+
14
+ Boundary: the host agent supplies authorized evidence and a generalized root cause. This skill classifies and persists it; it does not scan host transcripts.
15
+
16
+ Load `references/memory-resolution.md` on demand for the decision matrix, fallback paths, lazy-loading rules, and dynamic-skill details.
17
+
18
+ ## 📋 Skill Contract
19
+
20
+ | Component | Specification |
21
+ | :--- | :--- |
22
+ | **Trigger / Input** | Resolved struggle, zoom-out recovery, or explicit request; caller supplies evidence and root cause. |
23
+ | **Expected Output** | Persisted rule in existing memory or registered dynamic skill. |
24
+ | **State Mutations** | Updates the selected workspace memory or generated-skill manifest. |
25
+ | **Enforcement Gate** | Deduplication, self-regression, and the 60-line routing rule pass before persistence. |
26
+
27
+ ## Core Workflow
28
+
29
+ 1. Prefer existing `MEMORY.md`/`RULES.md`/`CLAUDE.md`/`AGENTS.md`.
30
+ 2. Route the lesson:
31
+ - Simple rule (constraint/tip) → `memories/repo/RULES.md`, else `.github/harness-everything/memories/RULES.md`; use `persist-memory.js`.
32
+ - Reusable procedure → follow `skill-creator/SKILL.md`, then register with `register-dynamic-skill.js` in every platform `manifest.json`.
33
+ 3. Run `self-regression.js` before persisting. Never persist without it.
34
+
35
+ ## USE FOR:
36
+ - Lesson after hard debugging recovery
37
+ - Defensive rule found mid-task
38
+ - Reusable pattern packaged as dynamic skill
39
+ - Post-zoom-out rule extraction
40
+
41
+ ## DO NOT USE FOR:
42
+ - One-off notes that won't recur
43
+ - Lessons already captured
44
+ - Secrets in memory files
45
+ - Static repo skills (use `skill-creator`)
46
+
47
+ Deep dive: references/memory-resolution.md