harness-everything 0.2.2 → 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 (496) 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 +10 -10
  174. package/docs/workflows/eval-harness.md +13 -6
  175. package/docs/workflows/fable-discipline.md +9 -9
  176. package/docs/workflows/fable-mode.md +29 -32
  177. package/docs/workflows/find-skills.md +36 -0
  178. package/docs/workflows/git-commit.md +18 -9
  179. package/docs/workflows/grill-me.md +11 -11
  180. package/docs/workflows/grill-with-docs.md +14 -7
  181. package/docs/workflows/harness-everything.md +95 -92
  182. package/docs/workflows/improve-codebase-architecture.md +15 -7
  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 +12 -7
  186. package/docs/workflows/security-review.md +26 -7
  187. package/docs/workflows/self-evolve.md +27 -44
  188. package/docs/workflows/skill-creator.md +80 -75
  189. package/docs/workflows/skill-style.md +64 -64
  190. package/docs/workflows/tdd.md +42 -39
  191. package/docs/workflows/to-spec.md +83 -0
  192. package/docs/workflows/to-tickets.md +80 -0
  193. package/docs/workflows/todo-driven-workflow.md +34 -36
  194. package/docs/workflows/using-git-worktrees.md +12 -8
  195. package/docs/workflows/verification-loop.md +16 -14
  196. package/docs/workflows/verify-before-claim.md +12 -8
  197. package/docs/workflows/zoom-out.md +22 -10
  198. package/environment-detection/SKILL.md +25 -61
  199. package/environment-detection/references/shell-syntax-rules.md +76 -0
  200. package/environment-detection/scripts/preflight.js +103 -93
  201. package/eval-framework/fixtures/bad-frontmatter-colon/SKILL.md +14 -0
  202. package/eval-framework/fixtures/duplicate-desc-skill-a/SKILL.md +14 -0
  203. package/eval-framework/fixtures/duplicate-desc-skill-b/SKILL.md +14 -0
  204. package/eval-framework/fixtures/missing-delimiter/SKILL.md +13 -0
  205. package/eval-framework/fixtures/over-budget-skill/SKILL.md +36 -0
  206. package/eval-harness/SKILL.md +34 -51
  207. package/eval-harness/references/scoring-rubric.md +68 -0
  208. package/eval-harness/scripts/evaluate.js +77 -61
  209. package/evals/environment-detection/eval.yaml +26 -0
  210. package/evals/environment-detection/tasks/negative-trigger.yaml +16 -0
  211. package/evals/environment-detection/tasks/positive-trigger.yaml +15 -0
  212. package/evals/eval-harness/eval.yaml +26 -0
  213. package/evals/eval-harness/tasks/negative-trigger.yaml +16 -0
  214. package/evals/eval-harness/tasks/positive-trigger.yaml +15 -0
  215. package/evals/fable-discipline/eval.yaml +26 -0
  216. package/evals/fable-discipline/tasks/negative-trigger.yaml +16 -0
  217. package/evals/fable-discipline/tasks/positive-trigger.yaml +15 -0
  218. package/evals/fable-mode/eval.yaml +26 -0
  219. package/evals/fable-mode/tasks/negative-tier2-no-model.yaml +18 -0
  220. package/evals/fable-mode/tasks/negative-trigger.yaml +16 -0
  221. package/evals/fable-mode/tasks/positive-haiku-mode.yaml +16 -0
  222. package/evals/fable-mode/tasks/positive-opus-mode.yaml +16 -0
  223. package/evals/fable-mode/tasks/positive-sonnet-mode.yaml +16 -0
  224. package/evals/fable-mode/tasks/positive-trigger.yaml +15 -0
  225. package/evals/find-skills/eval.yaml +26 -0
  226. package/evals/find-skills/tasks/negative-trigger.yaml +16 -0
  227. package/evals/find-skills/tasks/positive-trigger.yaml +15 -0
  228. package/evals/git-commit/eval.yaml +26 -0
  229. package/evals/git-commit/tasks/negative-trigger.yaml +16 -0
  230. package/evals/git-commit/tasks/positive-trigger.yaml +15 -0
  231. package/evals/grill-me/eval.yaml +26 -0
  232. package/evals/grill-me/tasks/negative-trigger.yaml +16 -0
  233. package/evals/grill-me/tasks/positive-trigger.yaml +15 -0
  234. package/evals/grill-with-docs/eval.yaml +26 -0
  235. package/evals/grill-with-docs/tasks/negative-trigger.yaml +16 -0
  236. package/evals/grill-with-docs/tasks/positive-trigger.yaml +15 -0
  237. package/evals/harness-everything/eval.yaml +26 -0
  238. package/evals/harness-everything/tasks/negative-non-software.yaml +16 -0
  239. package/evals/harness-everything/tasks/negative-skill-indicated.yaml +15 -0
  240. package/evals/harness-everything/tasks/positive-tier1.yaml +16 -0
  241. package/evals/harness-everything/tasks/positive-tier2.yaml +16 -0
  242. package/evals/harness-everything/tasks/positive-tier3.yaml +16 -0
  243. package/evals/improve-codebase-architecture/eval.yaml +26 -0
  244. package/evals/improve-codebase-architecture/tasks/negative-trigger.yaml +16 -0
  245. package/evals/improve-codebase-architecture/tasks/positive-trigger.yaml +15 -0
  246. package/evals/install-cognitive-os/eval.yaml +26 -0
  247. package/evals/install-cognitive-os/tasks/negative-trigger.yaml +16 -0
  248. package/evals/install-cognitive-os/tasks/positive-trigger.yaml +15 -0
  249. package/evals/multi-agent-workspace/eval.yaml +26 -0
  250. package/evals/multi-agent-workspace/tasks/negative-trigger.yaml +15 -0
  251. package/evals/multi-agent-workspace/tasks/positive-trigger.yaml +15 -0
  252. package/evals/repo-docs/eval.yaml +26 -0
  253. package/evals/repo-docs/tasks/negative-trigger.yaml +16 -0
  254. package/evals/repo-docs/tasks/positive-trigger.yaml +15 -0
  255. package/evals/rewrite-commits/eval.yaml +26 -0
  256. package/evals/rewrite-commits/tasks/negative-trigger.yaml +16 -0
  257. package/evals/rewrite-commits/tasks/positive-trigger.yaml +15 -0
  258. package/evals/security-review/eval.yaml +26 -0
  259. package/evals/security-review/tasks/negative-trigger.yaml +16 -0
  260. package/evals/security-review/tasks/positive-trigger.yaml +15 -0
  261. package/evals/self-evolve/eval.yaml +26 -0
  262. package/evals/self-evolve/tasks/negative-trigger.yaml +16 -0
  263. package/evals/self-evolve/tasks/positive-trigger.yaml +15 -0
  264. package/evals/skill-creator/eval.yaml +26 -0
  265. package/evals/skill-creator/tasks/negative-trigger.yaml +16 -0
  266. package/evals/skill-creator/tasks/positive-trigger.yaml +15 -0
  267. package/evals/skill-style/eval.yaml +26 -0
  268. package/evals/skill-style/tasks/negative-trigger.yaml +16 -0
  269. package/evals/skill-style/tasks/positive-trigger.yaml +15 -0
  270. package/evals/tdd/eval.yaml +26 -0
  271. package/evals/tdd/tasks/negative-trivia.yaml +16 -0
  272. package/evals/tdd/tasks/positive-bugfix.yaml +15 -0
  273. package/evals/tdd/tasks/positive-feature.yaml +16 -0
  274. package/evals/tdd/tasks/positive-refactor.yaml +15 -0
  275. package/evals/to-spec/eval.yaml +26 -0
  276. package/evals/to-spec/tasks/negative-trigger.yaml +16 -0
  277. package/evals/to-spec/tasks/positive-trigger.yaml +15 -0
  278. package/evals/to-tickets/eval.yaml +26 -0
  279. package/evals/to-tickets/tasks/negative-trigger.yaml +15 -0
  280. package/evals/to-tickets/tasks/positive-trigger.yaml +15 -0
  281. package/evals/todo-driven-workflow/eval.yaml +26 -0
  282. package/evals/todo-driven-workflow/tasks/negative-single-edit.yaml +16 -0
  283. package/evals/todo-driven-workflow/tasks/positive-multi-step.yaml +15 -0
  284. package/evals/todo-driven-workflow/tasks/positive-refactor-flow.yaml +15 -0
  285. package/evals/using-git-worktrees/eval.yaml +26 -0
  286. package/evals/using-git-worktrees/tasks/negative-trigger.yaml +15 -0
  287. package/evals/using-git-worktrees/tasks/positive-trigger.yaml +15 -0
  288. package/evals/verification-loop/eval.yaml +26 -0
  289. package/evals/verification-loop/tasks/negative-discussion.yaml +16 -0
  290. package/evals/verification-loop/tasks/positive-pre-ship.yaml +15 -0
  291. package/evals/verify-before-claim/eval.yaml +26 -0
  292. package/evals/verify-before-claim/tasks/negative-trigger.yaml +16 -0
  293. package/evals/verify-before-claim/tasks/positive-trigger.yaml +15 -0
  294. package/evals/zoom-out/eval.yaml +26 -0
  295. package/evals/zoom-out/tasks/negative-trivial-edit.yaml +16 -0
  296. package/evals/zoom-out/tasks/positive-repeated-failure.yaml +15 -0
  297. package/fable-discipline/SKILL.md +31 -28
  298. package/fable-discipline/references/discipline-rules.md +22 -0
  299. package/fable-mode/CONTRACT-FORMAT.md +51 -51
  300. package/fable-mode/SKILL.md +31 -43
  301. package/fable-mode/agents/fable-orchestrator.md +99 -92
  302. package/fable-mode/agents/fable-verifier.md +32 -32
  303. package/fable-mode/agents/fable-worker-haiku.md +52 -48
  304. package/fable-mode/agents/fable-worker-sonnet.md +53 -49
  305. package/fable-mode/execution-guardrails/SKILL.md +43 -87
  306. package/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
  307. package/fable-mode/fable-haiku/SKILL.md +36 -48
  308. package/fable-mode/fable-haiku/references/routing-notes.md +26 -0
  309. package/fable-mode/fable-opus/SKILL.md +36 -0
  310. package/fable-mode/fable-sonnet/SKILL.md +36 -0
  311. package/fable-mode/model-matrix.json +32 -0
  312. package/fable-mode/references/execution-phases.md +37 -0
  313. package/fable-mode/references/model-matrix.md +39 -0
  314. package/fable-mode/scripts/model-selector.js +129 -0
  315. package/find-skills/SKILL.md +48 -0
  316. package/find-skills/references/discovery-flow.md +102 -0
  317. package/find-skills/scripts/use-skill.js +106 -0
  318. package/git-commit/SKILL.md +35 -45
  319. package/git-commit/guides/ANGULAR_STYLE.md +60 -60
  320. package/git-commit/guides/COMMIT_GENERATION.md +23 -23
  321. package/git-commit/guides/LANGUAGE_DETECTION.md +16 -16
  322. package/git-commit/guides/MAIN_REPO.md +14 -14
  323. package/git-commit/guides/SUBMODULES.md +27 -27
  324. package/git-commit/references/commit-flow.md +30 -0
  325. package/grill-me/SKILL.md +34 -27
  326. package/grill-me/references/grilling-playbook.md +38 -0
  327. package/grill-with-docs/ADR-FORMAT.md +47 -47
  328. package/grill-with-docs/CONTEXT-FORMAT.md +63 -63
  329. package/grill-with-docs/SKILL.md +33 -91
  330. package/grill-with-docs/references/session-playbook.md +97 -0
  331. package/harness-everything/SKILL.md +29 -128
  332. package/harness-everything/examples/README.md +9 -9
  333. package/harness-everything/examples/todo-workflow.md +22 -22
  334. package/harness-everything/references/skill-registry.md +39 -0
  335. package/harness-everything/references/triage-and-tiers.md +116 -0
  336. package/harness-everything/scripts/bootstrap.js +203 -140
  337. package/harness-everything/scripts/routing-keywords.json +320 -0
  338. package/harness-everything/scripts/self-heal.js +241 -189
  339. package/harness-everything/scripts/tier-router.js +334 -219
  340. package/harness-everything/scripts/verify-gate.js +100 -31
  341. package/hooks/hooks.json +155 -155
  342. package/hooks/scripts/atomic-commit-check.js +68 -68
  343. package/hooks/scripts/boundary-guard.js +55 -55
  344. package/hooks/scripts/context-compact.js +114 -114
  345. package/hooks/scripts/contract-test.js +79 -79
  346. package/hooks/scripts/depth-guard.js +65 -65
  347. package/hooks/scripts/lib/harness-state.js +139 -228
  348. package/hooks/scripts/lib/platforms/claude.js +72 -19
  349. package/hooks/scripts/lib/platforms/codex.js +24 -6
  350. package/hooks/scripts/lib/platforms/continue.js +23 -5
  351. package/hooks/scripts/lib/platforms/copilot.js +23 -5
  352. package/hooks/scripts/lib/platforms/cursor.js +23 -5
  353. package/hooks/scripts/lib/platforms/hermes.js +57 -57
  354. package/hooks/scripts/lib/platforms/index.js +17 -17
  355. package/hooks/scripts/lib/platforms/worktrees.js +20 -20
  356. package/hooks/scripts/reset-circuit-breaker.js +30 -30
  357. package/hooks/scripts/rule-of-3-tracker.js +124 -91
  358. package/hooks/scripts/rule-of-3.js +187 -176
  359. package/hooks/scripts/state-persist.js +99 -99
  360. package/hooks/scripts/stop-gate.js +80 -80
  361. package/hooks/scripts/subagent-scope-guard.js +88 -88
  362. package/improve-codebase-architecture/SKILL.md +31 -35
  363. package/improve-codebase-architecture/guides/DEEPENING.md +37 -37
  364. package/improve-codebase-architecture/guides/HTML-REPORT.md +123 -123
  365. package/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -44
  366. package/improve-codebase-architecture/guides/LANGUAGE.md +53 -53
  367. package/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
  368. package/install-cognitive-os/SKILL.md +23 -80
  369. package/install-cognitive-os/references/cognitive-loop.md +27 -0
  370. package/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
  371. package/multi-agent-workspace/SKILL.md +37 -0
  372. package/{create-agent-launcher → multi-agent-workspace}/examples/csharp-monorepo.md +123 -123
  373. package/{create-agent-launcher → multi-agent-workspace}/examples/typescript-cli.md +126 -126
  374. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-claude.md +77 -77
  375. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-codex.md +146 -146
  376. package/multi-agent-workspace/guidelines/platform-continue.md +38 -0
  377. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-copilot.md +74 -74
  378. package/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
  379. package/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
  380. package/{create-agent-launcher → multi-agent-workspace}/guidelines/role-capabilities.md +108 -108
  381. package/multi-agent-workspace/references/agency-agents.md +31 -0
  382. package/multi-agent-workspace/references/architecture-guide.md +32 -0
  383. package/multi-agent-workspace/references/orchestration.md +48 -0
  384. package/multi-agent-workspace/scripts/agency-catalog.js +190 -0
  385. package/multi-agent-workspace/scripts/index_memory.js +51 -0
  386. package/multi-agent-workspace/scripts/scaffold.js +253 -0
  387. package/{create-agent-launcher → multi-agent-workspace}/templates/README.md +17 -17
  388. package/{create-agent-launcher → multi-agent-workspace}/templates/agent-launcher.md +67 -67
  389. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-csharp.md +55 -55
  390. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-polyglot.md +61 -61
  391. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-ts.md +56 -56
  392. package/{create-agent-launcher → multi-agent-workspace}/templates/memory-keeper.md +36 -36
  393. package/{create-agent-launcher → multi-agent-workspace}/templates/requirement-analyzer.md +65 -65
  394. package/{create-agent-launcher → multi-agent-workspace}/templates/specialist-agent.md +34 -34
  395. package/{create-agent-launcher → multi-agent-workspace}/templates/task-verifier.md +55 -55
  396. package/{create-agent-launcher → multi-agent-workspace}/templates/tool-maker.md +32 -32
  397. package/multi-agent-workspace/workflows/01-init.md +22 -0
  398. package/multi-agent-workspace/workflows/02-analysis.md +23 -0
  399. package/multi-agent-workspace/workflows/03-generation.md +27 -0
  400. package/multi-agent-workspace/workflows/04-launcher.md +16 -0
  401. package/opencode-plugin/README.md +94 -0
  402. package/opencode-plugin/hooks/circuit-breaker.js +121 -0
  403. package/opencode-plugin/hooks/compliance.js +128 -0
  404. package/opencode-plugin/hooks/post-edit.js +62 -0
  405. package/opencode-plugin/hooks/pre-complete.js +65 -0
  406. package/opencode-plugin/hooks/verify.js +140 -0
  407. package/opencode-plugin/plugin.json +17 -0
  408. package/opencode-plugin/test-hook-firing.js +198 -0
  409. package/package.json +50 -22
  410. package/references/definition-of-done.md +67 -0
  411. package/references/performance-checklist.md +153 -0
  412. package/references/platform-advisory-template.md +58 -0
  413. package/references/security-checklist.md +205 -0
  414. package/repo-docs/SKILL.md +38 -37
  415. package/repo-docs/references/process-guide.md +60 -0
  416. package/repo-docs/templates/agents-template.md +264 -264
  417. package/repo-docs/templates/knowledge-agents-template.md +50 -50
  418. package/repo-docs/templates/knowledge-readme-template.md +83 -83
  419. package/repo-docs/templates/manual-recon.md +117 -117
  420. package/repo-docs/templates/multi-skills-readme-template.md +72 -72
  421. package/repo-docs/templates/product-agents-template.md +78 -78
  422. package/repo-docs/templates/product-readme-template.md +95 -95
  423. package/repo-docs/templates/readme-template.md +136 -136
  424. package/repo-docs/templates/single-skill-readme-template.md +70 -70
  425. package/repo-docs/templates/skills-agents-template.md +60 -60
  426. package/rewrite-commits/SKILL.md +22 -17
  427. package/rewrite-commits/references/workflow.md +18 -0
  428. package/scripts/installer.js +546 -506
  429. package/scripts/lib/advisory-text.js +8 -4
  430. package/scripts/lib/claude-hooks.js +18 -5
  431. package/scripts/lib/gitignore.js +199 -80
  432. package/scripts/lib/manifest.js +68 -4
  433. package/scripts/lib/prompts.js +1 -1
  434. package/scripts/lib/skills.js +87 -1
  435. package/scripts/verify-install.js +147 -0
  436. package/security-review/SKILL.md +35 -496
  437. package/security-review/guides/OWASP-PATTERNS.md +31 -0
  438. package/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
  439. package/security-review/references/security-checklist.md +478 -0
  440. package/security-review/scripts/audit-secrets.js +84 -0
  441. package/self-evolve/SKILL.md +38 -45
  442. package/self-evolve/references/memory-resolution.md +58 -0
  443. package/self-evolve/scripts/persist-memory.js +139 -40
  444. package/self-evolve/scripts/register-dynamic-skill.js +251 -0
  445. package/self-evolve/scripts/self-regression.js +110 -113
  446. package/skill-creator/SKILL.md +34 -76
  447. package/skill-creator/references/authoring-workflow.md +14 -0
  448. package/skill-creator/references/dynamic-generation-contract.md +21 -0
  449. package/skill-creator/references/quality-checklist.md +15 -0
  450. package/skill-creator/references/quality-principles.md +81 -81
  451. package/skill-creator/references/testing-workflow.md +27 -32
  452. package/skill-style/SKILL.md +33 -39
  453. package/skill-style/references/style-guide.md +36 -0
  454. package/tdd/SKILL.md +34 -43
  455. package/tdd/guides/deep-modules.md +33 -33
  456. package/tdd/guides/interface-design.md +31 -31
  457. package/tdd/guides/mocking.md +59 -59
  458. package/tdd/guides/refactoring.md +10 -10
  459. package/tdd/guides/tests.md +61 -61
  460. package/tdd/references/core-discipline.md +49 -0
  461. package/to-spec/SKILL.md +42 -0
  462. package/to-spec/references/process.md +77 -0
  463. package/to-spec/scripts/check-project-docs.js +259 -0
  464. package/to-spec/templates/cli-reference.md +31 -0
  465. package/to-spec/templates/dev-doc.md +27 -0
  466. package/to-spec/templates/feature-spec.md +59 -0
  467. package/to-spec/templates/schema-doc.md +31 -0
  468. package/to-tickets/SKILL.md +42 -0
  469. package/to-tickets/references/publishing-and-templates.md +97 -0
  470. package/todo-driven-workflow/SKILL.md +27 -41
  471. package/todo-driven-workflow/references/execution-guide.md +27 -0
  472. package/using-git-worktrees/SKILL.md +29 -141
  473. package/using-git-worktrees/references/workflow-details.md +108 -0
  474. package/verification-loop/SKILL.md +29 -121
  475. package/verification-loop/references/verification-phases.md +116 -0
  476. package/verification-loop/templates/verification-report.template.md +15 -0
  477. package/verify-before-claim/SKILL.md +27 -70
  478. package/verify-before-claim/references/verification-guide.md +73 -0
  479. package/zoom-out/SKILL.md +28 -76
  480. package/zoom-out/references/circuit-breaker.md +66 -0
  481. package/zoom-out/templates/zoom-out-report.template.md +20 -0
  482. package/build-multi-agent-system/AGENTS.md +0 -50
  483. package/build-multi-agent-system/README.md +0 -63
  484. package/build-multi-agent-system/SKILL.md +0 -68
  485. package/create-agent-launcher/SKILL.md +0 -48
  486. package/create-agent-launcher/guidelines/platform-gemini.md +0 -101
  487. package/create-agent-launcher/workflows/01-init.md +0 -22
  488. package/create-agent-launcher/workflows/02-analysis.md +0 -26
  489. package/create-agent-launcher/workflows/03-generation.md +0 -29
  490. package/create-agent-launcher/workflows/04-launcher.md +0 -20
  491. package/docs/workflows/build-multi-agent-system.md +0 -62
  492. package/docs/workflows/create-agent-launcher.md +0 -62
  493. package/eval-framework/behavioral-test.js +0 -105
  494. package/eval-framework/mechanism-test.js +0 -251
  495. package/harness-everything/scripts/todo-cli.js +0 -157
  496. package/skill-style/STYLE.md +0 -37
@@ -1,31 +1,100 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Verification Gatekeeper
4
- * Forces the AI to run this script to prove quality gates before declaring a task done.
5
- */
6
- const { execSync } = require('child_process');
7
-
8
- console.log("=== 🛡️ Harness Verification Gate ===");
9
-
10
- try {
11
- console.log("Running basic checks (simulated for now)...");
12
-
13
- // In a real project, this would run `npm run lint` and `npm test`
14
- // We'll simulate a failure if `.verify-fail.tmp` exists just to prove the mechanism.
15
- const fs = require('fs');
16
- if (fs.existsSync('.verify-fail.tmp')) {
17
- console.error("❌ Verification FAILED: Found broken tests or lint errors.");
18
- console.error("Please fix the code and run this gate again.");
19
- process.exit(1);
20
- }
21
-
22
- console.log("✅ Lint passed.");
23
- console.log("✅ Tests passed.");
24
- console.log("✅ Verification SUCCESS. You may now complete the task.");
25
- process.exit(0);
26
-
27
- } catch (err) {
28
- console.error("❌ Verification FAILED.");
29
- console.error(err.message);
30
- process.exit(1);
31
- }
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Verification Gatekeeper
4
+ * Runs the target project's own mechanical checks (lint/test scripts from the
5
+ * nearest package.json) and refuses completion (Exit 1) when any of them fail.
6
+ *
7
+ * Escape hatches, both deliberate:
8
+ * - `.verify-fail.tmp` in cwd forces a failure - the hermetic self-regression
9
+ * suite uses it to prove the blocking mechanism without needing a real
10
+ * broken project.
11
+ * - HARNESS_SKIP_PROJECT_CHECKS=1 skips the project-script phase (the tmp-file
12
+ * check above still applies). The gate sets it for its own children so a
13
+ * project whose test suite itself drives the Harness runtime (like this repo) cannot
14
+ * recurse back into the gate.
15
+ */
16
+ const { execSync } = require('child_process');
17
+ const fs = require('fs');
18
+ const path = require('path');
19
+
20
+ console.log("=== 🛡️ Harness Verification Gate ===");
21
+
22
+ // Phase 1: explicit failure injection (test/demo hook).
23
+ if (fs.existsSync('.verify-fail.tmp')) {
24
+ console.error("❌ Verification FAILED: .verify-fail.tmp present (injected failure).");
25
+ console.error("Please fix the code and run this gate again.");
26
+ process.exit(1);
27
+ }
28
+
29
+ if (process.env.HARNESS_SKIP_PROJECT_CHECKS === '1') {
30
+ console.log("ℹ️ HARNESS_SKIP_PROJECT_CHECKS=1 - project scripts skipped (recursion guard / hermetic test mode).");
31
+ console.log("✅ Verification SUCCESS (injection check only).");
32
+ process.exit(0);
33
+ }
34
+
35
+ // Phase 2: locate the nearest package.json, walking up from cwd but never
36
+ // above the enclosing git repository (same scoping rule as tier-router.js).
37
+ function findPackageDir() {
38
+ let dir = path.resolve(process.cwd());
39
+ while (true) {
40
+ if (fs.existsSync(path.join(dir, 'package.json'))) return dir;
41
+ if (fs.existsSync(path.join(dir, '.git'))) return null; // repo root reached, none found
42
+ const parent = path.dirname(dir);
43
+ if (parent === dir) return null;
44
+ dir = parent;
45
+ }
46
+ }
47
+
48
+ function detectRunner(dir) {
49
+ if (fs.existsSync(path.join(dir, 'pnpm-lock.yaml'))) return 'pnpm';
50
+ if (fs.existsSync(path.join(dir, 'yarn.lock'))) return 'yarn';
51
+ if (fs.existsSync(path.join(dir, 'bun.lockb')) || fs.existsSync(path.join(dir, 'bun.lock'))) return 'bun';
52
+ return 'npm';
53
+ }
54
+
55
+ const pkgDir = findPackageDir();
56
+ let scripts = {};
57
+ if (pkgDir) {
58
+ try {
59
+ scripts = JSON.parse(fs.readFileSync(path.join(pkgDir, 'package.json'), 'utf8')).scripts || {};
60
+ } catch (err) {
61
+ console.error(`❌ Verification FAILED: package.json at ${pkgDir} is unreadable/invalid JSON (${err.message}).`);
62
+ process.exit(1);
63
+ }
64
+ }
65
+
66
+ // npm-init's placeholder ("no test specified" + exit 1) is absence of a test
67
+ // suite, not a failing one - running it would block every fresh project.
68
+ const runnable = ['lint', 'test'].filter(name =>
69
+ typeof scripts[name] === 'string' &&
70
+ scripts[name].trim() !== '' &&
71
+ !/no test specified/i.test(scripts[name])
72
+ );
73
+
74
+ if (!pkgDir || runnable.length === 0) {
75
+ console.log("⚠️ Verification UNCHECKED: No automated lint/test scripts detected in package.json.");
76
+ console.log(" Exit code is 0 (non-blocking), but NO AUTOMATED EVIDENCE was produced.");
77
+ console.log(" PROHIBITED: Do NOT cite this run as proof that tests pass. Perform manual or alternative verification first.");
78
+ process.exit(0);
79
+ }
80
+
81
+ const runner = detectRunner(pkgDir);
82
+ for (const name of runnable) {
83
+ console.log(`\n▶ Running "${runner} run ${name}" in ${pkgDir} ...`);
84
+ try {
85
+ execSync(`${runner} run ${name}`, {
86
+ cwd: pkgDir,
87
+ stdio: 'inherit',
88
+ timeout: 10 * 60 * 1000,
89
+ env: { ...process.env, HARNESS_SKIP_PROJECT_CHECKS: '1' }
90
+ });
91
+ console.log(`✅ ${name} passed.`);
92
+ } catch (err) {
93
+ console.error(`\n❌ Verification FAILED: "${runner} run ${name}" exited non-zero${err.signal ? ` (signal ${err.signal})` : ''}.`);
94
+ console.error("Fix the failures above and run this gate again.");
95
+ process.exit(1);
96
+ }
97
+ }
98
+
99
+ console.log("\n✅ Verification SUCCESS. You may now complete the task.");
100
+ process.exit(0);
package/hooks/hooks.json CHANGED
@@ -1,155 +1,155 @@
1
- {
2
- "$schema": "https://json.schemastore.org/claude-code-settings.json",
3
- "hooks": {
4
- "SessionStart": [
5
- {
6
- "hooks": [
7
- {
8
- "type": "command",
9
- "command": "node harness-everything/scripts/bootstrap.js"
10
- }
11
- ],
12
- "description": "Bootstrap Harness Skills OS on session start",
13
- "id": "harness:pre:bootstrap"
14
- }
15
- ],
16
- "UserPromptSubmit": [
17
- {
18
- "hooks": [
19
- {
20
- "type": "command",
21
- "command": "node harness-everything/scripts/tier-router.js"
22
- }
23
- ],
24
- "description": "Auto-route user requests using tier-router",
25
- "id": "harness:pre:tier-router"
26
- }
27
- ],
28
- "PreToolUse": [
29
- {
30
- "matcher": "Bash|PowerShell|Edit|Write",
31
- "hooks": [
32
- {
33
- "type": "command",
34
- "command": "node hooks/scripts/rule-of-3.js"
35
- }
36
- ],
37
- "description": "Rule of 3 Circuit Breaker - Prevents micro-error looping",
38
- "id": "harness:pre:rule-of-3"
39
- },
40
- {
41
- "matcher": "Grep|Glob|Read",
42
- "hooks": [
43
- {
44
- "type": "command",
45
- "command": "node hooks/scripts/boundary-guard.js"
46
- }
47
- ],
48
- "description": "Physical boundary enforcement for searches and large file reads",
49
- "id": "harness:pre:boundary-guard"
50
- },
51
- {
52
- "matcher": "Edit|Write",
53
- "hooks": [
54
- {
55
- "type": "command",
56
- "command": "node hooks/scripts/depth-guard.js"
57
- }
58
- ],
59
- "description": "Information depth guard - Enforce impact assessment before writing code",
60
- "id": "harness:pre:depth-guard"
61
- },
62
- {
63
- "matcher": "Edit|Write|Bash|PowerShell",
64
- "hooks": [
65
- {
66
- "type": "command",
67
- "command": "node hooks/scripts/context-compact.js"
68
- }
69
- ],
70
- "description": "Strategic context compaction enforcement",
71
- "id": "harness:pre:context-compact"
72
- },
73
- {
74
- "matcher": "Task",
75
- "hooks": [
76
- {
77
- "type": "command",
78
- "command": "node hooks/scripts/subagent-scope-guard.js"
79
- }
80
- ],
81
- "description": "Snapshot repo state before a subagent burst starts",
82
- "id": "harness:pre:subagent-scope-guard"
83
- }
84
- ],
85
- "Stop": [
86
- {
87
- "hooks": [
88
- {
89
- "type": "command",
90
- "command": "node hooks/scripts/stop-gate.js"
91
- }
92
- ],
93
- "description": "Pre-delivery gate - bounce the end of a turn once per edit batch when edits were never verified",
94
- "id": "harness:stop:stop-gate"
95
- }
96
- ],
97
- "PostToolUse": [
98
- {
99
- "matcher": "Bash|PowerShell",
100
- "hooks": [
101
- {
102
- "type": "command",
103
- "command": "node hooks/scripts/rule-of-3-tracker.js"
104
- }
105
- ],
106
- "description": "Track error signatures for Rule of 3",
107
- "id": "harness:post:rule-of-3-tracker"
108
- },
109
- {
110
- "matcher": "Edit|Write|Bash|PowerShell",
111
- "hooks": [
112
- {
113
- "type": "command",
114
- "command": "node hooks/scripts/state-persist.js"
115
- }
116
- ],
117
- "description": "Save skill transition state",
118
- "id": "harness:post:state-persist"
119
- },
120
- {
121
- "matcher": "Edit|Write",
122
- "hooks": [
123
- {
124
- "type": "command",
125
- "command": "node hooks/scripts/atomic-commit-check.js"
126
- }
127
- ],
128
- "description": "Atomic commit enforcement",
129
- "id": "harness:post:atomic-commit-check"
130
- },
131
- {
132
- "matcher": "Bash|PowerShell",
133
- "hooks": [
134
- {
135
- "type": "command",
136
- "command": "node hooks/scripts/contract-test.js"
137
- }
138
- ],
139
- "description": "Contract testing between sub-agents",
140
- "id": "harness:post:contract-test"
141
- },
142
- {
143
- "matcher": "Task",
144
- "hooks": [
145
- {
146
- "type": "command",
147
- "command": "node hooks/scripts/subagent-scope-guard.js"
148
- }
149
- ],
150
- "description": "Diff the whole repo after a subagent burst finishes - catches scope creep past what the task briefed",
151
- "id": "harness:post:subagent-scope-guard"
152
- }
153
- ]
154
- }
155
- }
1
+ {
2
+ "$schema": "https://json.schemastore.org/claude-code-settings.json",
3
+ "hooks": {
4
+ "SessionStart": [
5
+ {
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "node harness-everything/scripts/bootstrap.js"
10
+ }
11
+ ],
12
+ "description": "Bootstrap Harness Skills OS on session start",
13
+ "id": "harness:pre:bootstrap"
14
+ }
15
+ ],
16
+ "UserPromptSubmit": [
17
+ {
18
+ "hooks": [
19
+ {
20
+ "type": "command",
21
+ "command": "node harness-everything/scripts/tier-router.js"
22
+ }
23
+ ],
24
+ "description": "Auto-route user requests using tier-router",
25
+ "id": "harness:pre:tier-router"
26
+ }
27
+ ],
28
+ "PreToolUse": [
29
+ {
30
+ "matcher": "Bash|PowerShell|Edit|Write",
31
+ "hooks": [
32
+ {
33
+ "type": "command",
34
+ "command": "node hooks/scripts/rule-of-3.js"
35
+ }
36
+ ],
37
+ "description": "Rule of 3 Circuit Breaker - Prevents micro-error looping",
38
+ "id": "harness:pre:rule-of-3"
39
+ },
40
+ {
41
+ "matcher": "Grep|Glob|Read",
42
+ "hooks": [
43
+ {
44
+ "type": "command",
45
+ "command": "node hooks/scripts/boundary-guard.js"
46
+ }
47
+ ],
48
+ "description": "Physical boundary enforcement for searches and large file reads",
49
+ "id": "harness:pre:boundary-guard"
50
+ },
51
+ {
52
+ "matcher": "Edit|Write",
53
+ "hooks": [
54
+ {
55
+ "type": "command",
56
+ "command": "node hooks/scripts/depth-guard.js"
57
+ }
58
+ ],
59
+ "description": "Information depth guard - Enforce impact assessment before writing code",
60
+ "id": "harness:pre:depth-guard"
61
+ },
62
+ {
63
+ "matcher": "Edit|Write|Bash|PowerShell",
64
+ "hooks": [
65
+ {
66
+ "type": "command",
67
+ "command": "node hooks/scripts/context-compact.js"
68
+ }
69
+ ],
70
+ "description": "Strategic context compaction enforcement",
71
+ "id": "harness:pre:context-compact"
72
+ },
73
+ {
74
+ "matcher": "Task",
75
+ "hooks": [
76
+ {
77
+ "type": "command",
78
+ "command": "node hooks/scripts/subagent-scope-guard.js"
79
+ }
80
+ ],
81
+ "description": "Snapshot repo state before a subagent burst starts",
82
+ "id": "harness:pre:subagent-scope-guard"
83
+ }
84
+ ],
85
+ "Stop": [
86
+ {
87
+ "hooks": [
88
+ {
89
+ "type": "command",
90
+ "command": "node hooks/scripts/stop-gate.js"
91
+ }
92
+ ],
93
+ "description": "Pre-delivery gate - bounce the end of a turn once per edit batch when edits were never verified",
94
+ "id": "harness:stop:stop-gate"
95
+ }
96
+ ],
97
+ "PostToolUse": [
98
+ {
99
+ "matcher": "Bash|PowerShell",
100
+ "hooks": [
101
+ {
102
+ "type": "command",
103
+ "command": "node hooks/scripts/rule-of-3-tracker.js"
104
+ }
105
+ ],
106
+ "description": "Track error signatures for Rule of 3",
107
+ "id": "harness:post:rule-of-3-tracker"
108
+ },
109
+ {
110
+ "matcher": "Edit|Write|Bash|PowerShell",
111
+ "hooks": [
112
+ {
113
+ "type": "command",
114
+ "command": "node hooks/scripts/state-persist.js"
115
+ }
116
+ ],
117
+ "description": "Save skill transition state",
118
+ "id": "harness:post:state-persist"
119
+ },
120
+ {
121
+ "matcher": "Edit|Write",
122
+ "hooks": [
123
+ {
124
+ "type": "command",
125
+ "command": "node hooks/scripts/atomic-commit-check.js"
126
+ }
127
+ ],
128
+ "description": "Atomic commit enforcement",
129
+ "id": "harness:post:atomic-commit-check"
130
+ },
131
+ {
132
+ "matcher": "Bash|PowerShell",
133
+ "hooks": [
134
+ {
135
+ "type": "command",
136
+ "command": "node hooks/scripts/contract-test.js"
137
+ }
138
+ ],
139
+ "description": "Contract testing between sub-agents",
140
+ "id": "harness:post:contract-test"
141
+ },
142
+ {
143
+ "matcher": "Task",
144
+ "hooks": [
145
+ {
146
+ "type": "command",
147
+ "command": "node hooks/scripts/subagent-scope-guard.js"
148
+ }
149
+ ],
150
+ "description": "Diff the whole repo after a subagent burst finishes - catches scope creep past what the task briefed",
151
+ "id": "harness:post:subagent-scope-guard"
152
+ }
153
+ ]
154
+ }
155
+ }
@@ -1,68 +1,68 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Atomic Commit Check (PostToolUse: Edit|Write)
4
- * PostToolUse can't block - the edit/write already happened. So this counts
5
- * Edit/Write calls since the last commit and, once the count crosses a
6
- * threshold, feeds a strong reminder back to Claude (exit 2) to commit the
7
- * completed chunk before piling on more changes. Resets whenever HEAD moves.
8
- * Fails open on any error - this is a nudge, never a hard stop.
9
- */
10
- const { execSync } = require('child_process');
11
- const fs = require('fs');
12
- const path = require('path');
13
- const { getWorkspaceRoot, getSessionDir } = require('./lib/harness-state');
14
-
15
- const THRESHOLD = 6;
16
- const RENUDGE_EVERY = 3;
17
-
18
- function main(payload) {
19
- try {
20
- const root = getWorkspaceRoot();
21
- const head = execSync('git rev-parse HEAD', { cwd: root, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
22
-
23
- const stateFile = path.join(getSessionDir(root, payload && payload.session_id), 'atomic-commit-state.json');
24
-
25
- let state = { lastHead: head, editCount: 0 };
26
- if (fs.existsSync(stateFile)) {
27
- try { state = JSON.parse(fs.readFileSync(stateFile, 'utf8')); } catch (e) { /* use default */ }
28
- }
29
-
30
- if (state.lastHead !== head) {
31
- // A commit happened since we last checked - fresh start.
32
- state.lastHead = head;
33
- state.editCount = 0;
34
- }
35
-
36
- state.editCount += 1;
37
- fs.writeFileSync(stateFile, JSON.stringify(state, null, 2), 'utf8');
38
-
39
- const overThreshold = state.editCount >= THRESHOLD;
40
- const onNudgeBeat = overThreshold && (state.editCount - THRESHOLD) % RENUDGE_EVERY === 0;
41
-
42
- if (onNudgeBeat) {
43
- const statusRaw = execSync('git status --porcelain', { cwd: root, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
44
- const changedFiles = statusRaw ? statusRaw.split('\n').length : 0;
45
- console.error(`[Atomic Commit Check] ${state.editCount} Edit/Write calls since the last commit (${changedFiles} files currently changed).`);
46
- console.error(`If a logically complete chunk of work is done, commit it now before continuing - large uncommitted diffs are harder to review and harder to recover from.`);
47
- process.exit(2);
48
- }
49
-
50
- process.exit(0);
51
- } catch (err) {
52
- process.exit(0);
53
- }
54
- }
55
-
56
- let inputData = '';
57
- const timeout = setTimeout(() => { main(null); }, 200);
58
- process.stdin.on('data', chunk => { inputData += chunk; });
59
- process.stdin.on('end', () => {
60
- clearTimeout(timeout);
61
- let payload = null;
62
- try { payload = JSON.parse(inputData.trim()); } catch (err) { /* no payload */ }
63
- main(payload);
64
- });
65
- process.stdin.on('error', () => {
66
- clearTimeout(timeout);
67
- main(null);
68
- });
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Atomic Commit Check (PostToolUse: Edit|Write)
4
+ * PostToolUse can't block - the edit/write already happened. So this counts
5
+ * Edit/Write calls since the last commit and, once the count crosses a
6
+ * threshold, feeds a strong reminder back to Claude (exit 2) to commit the
7
+ * completed chunk before piling on more changes. Resets whenever HEAD moves.
8
+ * Fails open on any error - this is a nudge, never a hard stop.
9
+ */
10
+ const { execSync } = require('child_process');
11
+ const fs = require('fs');
12
+ const path = require('path');
13
+ const { getWorkspaceRoot, getSessionDir } = require('./lib/harness-state');
14
+
15
+ const THRESHOLD = 6;
16
+ const RENUDGE_EVERY = 3;
17
+
18
+ function main(payload) {
19
+ try {
20
+ const root = getWorkspaceRoot();
21
+ const head = execSync('git rev-parse HEAD', { cwd: root, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
22
+
23
+ const stateFile = path.join(getSessionDir(root, payload && payload.session_id), 'atomic-commit-state.json');
24
+
25
+ let state = { lastHead: head, editCount: 0 };
26
+ if (fs.existsSync(stateFile)) {
27
+ try { state = JSON.parse(fs.readFileSync(stateFile, 'utf8')); } catch (e) { /* use default */ }
28
+ }
29
+
30
+ if (state.lastHead !== head) {
31
+ // A commit happened since we last checked - fresh start.
32
+ state.lastHead = head;
33
+ state.editCount = 0;
34
+ }
35
+
36
+ state.editCount += 1;
37
+ fs.writeFileSync(stateFile, JSON.stringify(state, null, 2), 'utf8');
38
+
39
+ const overThreshold = state.editCount >= THRESHOLD;
40
+ const onNudgeBeat = overThreshold && (state.editCount - THRESHOLD) % RENUDGE_EVERY === 0;
41
+
42
+ if (onNudgeBeat) {
43
+ const statusRaw = execSync('git status --porcelain', { cwd: root, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
44
+ const changedFiles = statusRaw ? statusRaw.split('\n').length : 0;
45
+ console.error(`[Atomic Commit Check] ${state.editCount} Edit/Write calls since the last commit (${changedFiles} files currently changed).`);
46
+ console.error(`If a logically complete chunk of work is done, commit it now before continuing - large uncommitted diffs are harder to review and harder to recover from.`);
47
+ process.exit(2);
48
+ }
49
+
50
+ process.exit(0);
51
+ } catch (err) {
52
+ process.exit(0);
53
+ }
54
+ }
55
+
56
+ let inputData = '';
57
+ const timeout = setTimeout(() => { main(null); }, 200);
58
+ process.stdin.on('data', chunk => { inputData += chunk; });
59
+ process.stdin.on('end', () => {
60
+ clearTimeout(timeout);
61
+ let payload = null;
62
+ try { payload = JSON.parse(inputData.trim()); } catch (err) { /* no payload */ }
63
+ main(payload);
64
+ });
65
+ process.stdin.on('error', () => {
66
+ clearTimeout(timeout);
67
+ main(null);
68
+ });