harness-everything 0.2.1 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. package/.claude-plugin/marketplace.json +27 -0
  2. package/.claude-plugin/plugin.json +51 -0
  3. package/.gitattributes +1 -0
  4. package/.github/workflows/behavioral-evals.yml +36 -0
  5. package/.github/workflows/ci.yml +117 -0
  6. package/.github/workflows/release.yml +45 -0
  7. package/.husky/commit-msg +1 -0
  8. package/.waza.yaml +22 -0
  9. package/AGENTS.md +60 -2
  10. package/BENCHMARK_SOP.md +62 -62
  11. package/CHANGELOG.md +297 -114
  12. package/CODE_OF_CONDUCT.md +24 -0
  13. package/CONTRIBUTING.md +47 -0
  14. package/Dockerfile +18 -18
  15. package/LICENSE +201 -201
  16. package/README.md +279 -197
  17. package/SECURITY.md +33 -0
  18. package/VERIFICATION.md +394 -347
  19. package/ab-test-deep-analysis-2026-08-27.md +383 -0
  20. package/ab-test-results-2026-08-27.md +152 -0
  21. package/ab-test-statistical-analysis-31cases.md +193 -0
  22. package/behavioral-evals/README.md +85 -0
  23. package/behavioral-evals/analyze-plugin-results.js +110 -0
  24. package/behavioral-evals/cases/baseline-add-feature.yaml +34 -0
  25. package/behavioral-evals/cases/baseline-api-design.yaml +32 -0
  26. package/behavioral-evals/cases/baseline-debugging.yaml +31 -0
  27. package/behavioral-evals/cases/baseline-dependency.yaml +24 -0
  28. package/behavioral-evals/cases/baseline-documentation.yaml +34 -0
  29. package/behavioral-evals/cases/baseline-error-handling.yaml +31 -0
  30. package/behavioral-evals/cases/baseline-git-commit.yaml +33 -0
  31. package/behavioral-evals/cases/baseline-performance-monitoring.yaml +28 -0
  32. package/behavioral-evals/cases/baseline-performance.yaml +34 -0
  33. package/behavioral-evals/cases/baseline-refactor-with-tests.yaml +35 -0
  34. package/behavioral-evals/cases/baseline-refactor.yaml +27 -0
  35. package/behavioral-evals/cases/baseline-security-review.yaml +28 -0
  36. package/behavioral-evals/cases/baseline-simple-bugfix.yaml +33 -0
  37. package/behavioral-evals/cases/baseline-tdd-workflow.yaml +28 -0
  38. package/behavioral-evals/cases/breaker-zoom-out-after-3.yaml +50 -0
  39. package/behavioral-evals/cases/pressure-budget-skip-review.yaml +27 -0
  40. package/behavioral-evals/cases/pressure-bypass-review.yaml +27 -0
  41. package/behavioral-evals/cases/pressure-complexity-skip.yaml +37 -0
  42. package/behavioral-evals/cases/pressure-expert-skip-testing.yaml +31 -0
  43. package/behavioral-evals/cases/pressure-fatigue-skip.yaml +33 -0
  44. package/behavioral-evals/cases/pressure-management-skip-all.yaml +28 -0
  45. package/behavioral-evals/cases/pressure-scope-bypass.yaml +28 -0
  46. package/behavioral-evals/cases/pressure-skip-docs.yaml +50 -0
  47. package/behavioral-evals/cases/pressure-skip-error-handling.yaml +35 -0
  48. package/behavioral-evals/cases/pressure-skip-security.yaml +32 -0
  49. package/behavioral-evals/cases/pressure-skip-tests.yaml +27 -0
  50. package/behavioral-evals/cases/pressure-skip-verification.yaml +43 -0
  51. package/behavioral-evals/cases/pressure-social-skip-review.yaml +28 -0
  52. package/behavioral-evals/cases/pressure-sunk-cost-retry.yaml +47 -0
  53. package/behavioral-evals/cases/scope-discipline.yaml +32 -0
  54. package/behavioral-evals/cases/tier1-no-overplan.yaml +26 -0
  55. package/behavioral-evals/cases/verify-before-done.yaml +31 -0
  56. package/behavioral-evals/results/.gitkeep +0 -0
  57. package/behavioral-evals/results/2026-08-23-breaker-zoom-out-after-3.json +20 -0
  58. package/behavioral-evals/results/2026-08-23-pressure-skip-verification.json +20 -0
  59. package/behavioral-evals/results/2026-08-23-pressure-sunk-cost-retry.json +20 -0
  60. package/behavioral-evals/results/2026-08-23-scope-discipline.json +16 -0
  61. package/behavioral-evals/results/2026-08-23-tier1-no-overplan.json +20 -0
  62. package/behavioral-evals/results/2026-08-23-verify-before-done.json +20 -0
  63. package/behavioral-evals/results/2026-08-27-baseline-add-feature.json +20 -0
  64. package/behavioral-evals/results/2026-08-27-baseline-api-design.json +20 -0
  65. package/behavioral-evals/results/2026-08-27-baseline-debugging.json +20 -0
  66. package/behavioral-evals/results/2026-08-27-baseline-dependency.json +16 -0
  67. package/behavioral-evals/results/2026-08-27-baseline-documentation.json +20 -0
  68. package/behavioral-evals/results/2026-08-27-baseline-error-handling.json +20 -0
  69. package/behavioral-evals/results/2026-08-27-baseline-git-commit.json +20 -0
  70. package/behavioral-evals/results/2026-08-27-baseline-performance-monitoring.json +20 -0
  71. package/behavioral-evals/results/2026-08-27-baseline-performance.json +20 -0
  72. package/behavioral-evals/results/2026-08-27-baseline-refactor-with-tests.json +20 -0
  73. package/behavioral-evals/results/2026-08-27-baseline-refactor.json +20 -0
  74. package/behavioral-evals/results/2026-08-27-baseline-security-review.json +20 -0
  75. package/behavioral-evals/results/2026-08-27-baseline-simple-bugfix.json +20 -0
  76. package/behavioral-evals/results/2026-08-27-baseline-tdd-workflow.json +24 -0
  77. package/behavioral-evals/results/2026-08-27-breaker-zoom-out-after-3.json +20 -0
  78. package/behavioral-evals/results/2026-08-27-pressure-budget-skip-review.json +16 -0
  79. package/behavioral-evals/results/2026-08-27-pressure-bypass-review.json +20 -0
  80. package/behavioral-evals/results/2026-08-27-pressure-complexity-skip.json +20 -0
  81. package/behavioral-evals/results/2026-08-27-pressure-expert-skip-testing.json +16 -0
  82. package/behavioral-evals/results/2026-08-27-pressure-fatigue-skip.json +16 -0
  83. package/behavioral-evals/results/2026-08-27-pressure-management-skip-all.json +20 -0
  84. package/behavioral-evals/results/2026-08-27-pressure-skip-docs.json +20 -0
  85. package/behavioral-evals/results/2026-08-27-pressure-skip-error-handling.json +20 -0
  86. package/behavioral-evals/results/2026-08-27-pressure-skip-security.json +20 -0
  87. package/behavioral-evals/results/2026-08-27-pressure-skip-tests.json +20 -0
  88. package/behavioral-evals/results/2026-08-27-pressure-skip-verification.json +24 -0
  89. package/behavioral-evals/results/2026-08-27-pressure-social-skip-review.json +20 -0
  90. package/behavioral-evals/results/2026-08-27-pressure-sunk-cost-retry.json +24 -0
  91. package/behavioral-evals/results/2026-08-27-scope-discipline.json +16 -0
  92. package/behavioral-evals/results/2026-08-27-tier1-no-overplan.json +20 -0
  93. package/behavioral-evals/results/2026-08-27-verify-before-done.json +20 -0
  94. package/behavioral-evals/results/run-20260827-115509.log +287 -0
  95. package/behavioral-evals/run-with-plugin.js +316 -0
  96. package/behavioral-evals/run.js +587 -0
  97. package/benchmarks/README.md +63 -0
  98. package/benchmarks/ab-test-2026-08-26/results.json +55 -0
  99. package/benchmarks/results/logs/.gitkeep +0 -0
  100. package/benchmarks/results/logs/test-a-harness.md +31 -0
  101. package/benchmarks/results/logs/test-a-vanilla.md +28 -0
  102. package/benchmarks/results/logs/test-b-micro-loop-harness.md +48 -0
  103. package/benchmarks/results/logs/test-b-micro-loop-vanilla.md +36 -0
  104. package/benchmarks/results/logs/test-c-attention-loss-harness.md +40 -0
  105. package/benchmarks/results/logs/test-c-attention-loss-vanilla.md +63 -0
  106. package/benchmarks/results/logs/test-d-knowledge-boundary-harness.md +24 -0
  107. package/benchmarks/results/logs/test-d-knowledge-boundary-vanilla.md +29 -0
  108. package/benchmarks/results/logs/test-e-shell-awareness-harness.md +20 -0
  109. package/benchmarks/results/logs/test-e-shell-awareness-vanilla.md +20 -0
  110. package/benchmarks/results/logs/test-f-fact-audit-harness.md +16 -0
  111. package/benchmarks/results/logs/test-f-fact-audit-vanilla.md +16 -0
  112. package/benchmarks/results/results.json +158 -0
  113. package/benchmarks/run.js +220 -0
  114. package/benchmarks/schema.json +44 -0
  115. package/bin/cli.js +152 -97
  116. package/ci/ab-test-cases/grill-me-adversarial.yaml +18 -0
  117. package/ci/ab-test-cases/tdd-test-first.yaml +23 -0
  118. package/ci/ab-test-cases/verification-loop-gates.yaml +25 -0
  119. package/ci/ab-test-cases/verify-before-claim-cites.yaml +18 -0
  120. package/ci/ab-test-harness.js +410 -0
  121. package/{eval-framework → ci}/cases/case1.json +5 -5
  122. package/ci/cases/case10-small-feature.json +5 -0
  123. package/ci/cases/case11-readme-typo-update.json +5 -0
  124. package/ci/cases/case12-chinese-macro-audit.json +5 -0
  125. package/{eval-framework → ci}/cases/case2.json +5 -5
  126. package/{eval-framework → ci}/cases/case3.json +5 -5
  127. package/{eval-framework → ci}/cases/case4-zh-tier2.json +5 -5
  128. package/{eval-framework → ci}/cases/case5-zh-tier3.json +5 -5
  129. package/ci/cases/case6-macro-skill-audit.json +5 -0
  130. package/ci/cases/case7-macro-reference-audit.json +5 -0
  131. package/ci/cases/case8-controlled-ab-benchmark.json +5 -0
  132. package/ci/cases/case9-four-issue-audit.json +5 -0
  133. package/ci/consistency-check.js +347 -0
  134. package/ci/description-collision.js +109 -0
  135. package/ci/fable-mode-test.js +120 -0
  136. package/ci/fixtures/agency-agents/divisions.json +6 -0
  137. package/ci/fixtures/agency-agents/engineering/code-reviewer.md +11 -0
  138. package/ci/fixtures/agency-agents/testing/reality-checker.md +11 -0
  139. package/ci/fixtures/bad-frontmatter-colon/SKILL.md +16 -0
  140. package/ci/fixtures/duplicate-description/skill-a/SKILL.md +16 -0
  141. package/ci/fixtures/duplicate-description/skill-b/SKILL.md +16 -0
  142. package/ci/mechanism-2a-rule-of-3.test.js +46 -0
  143. package/ci/mechanism-2b-boundary-guard.test.js +16 -0
  144. package/ci/mechanism-2c-state-persist.test.js +29 -0
  145. package/ci/mechanism-2d-fact-audit.test.js +18 -0
  146. package/ci/mechanism-2e-scope-guard.test.js +24 -0
  147. package/ci/mechanism-2f-stop-gate.test.js +23 -0
  148. package/ci/mechanism-2g-platform-ignore.test.js +88 -0
  149. package/ci/mechanism-2h-installer-manifest.test.js +147 -0
  150. package/ci/mechanism-2i-crlf-frontmatter.test.js +145 -0
  151. package/ci/mechanism-2i-install-verification.test.js +34 -0
  152. package/ci/mechanism-2j-behavioral-runner.test.js +20 -0
  153. package/ci/mechanism-2k-reference-check.test.js +20 -0
  154. package/ci/mechanism-2l-multi-agent-workspace.test.js +105 -0
  155. package/ci/mechanism-test.js +71 -0
  156. package/ci/negative-controls.js +84 -0
  157. package/ci/reference-check.js +112 -0
  158. package/ci/release-consistency-check.js +123 -0
  159. package/ci/routing-check.js +90 -0
  160. package/{eval-framework → ci}/runner.js +56 -56
  161. package/ci/skill-routing-check.js +98 -0
  162. package/ci/test-helper.js +104 -0
  163. package/ci/test-negative-controls.js +148 -0
  164. package/commitlint.config.js +25 -0
  165. package/docker-verify.sh +266 -266
  166. package/docs/architecture.md +99 -95
  167. package/docs/audit.md +53 -0
  168. package/docs/mechanism-first-skill-mesh.md +163 -0
  169. package/docs/philosophy.md +47 -45
  170. package/docs/reflection.md +48 -34
  171. package/docs/routing.md +58 -45
  172. package/docs/troubleshooting.md +284 -0
  173. package/docs/workflows/environment-detection.md +63 -63
  174. package/docs/workflows/eval-harness.md +64 -57
  175. package/docs/workflows/fable-discipline.md +59 -59
  176. package/docs/workflows/fable-mode.md +12 -15
  177. package/docs/workflows/find-skills.md +36 -0
  178. package/docs/workflows/git-commit.md +71 -62
  179. package/docs/workflows/grill-me.md +62 -62
  180. package/docs/workflows/grill-with-docs.md +69 -62
  181. package/docs/workflows/harness-everything.md +95 -92
  182. package/docs/workflows/improve-codebase-architecture.md +68 -60
  183. package/docs/workflows/install-cognitive-os.md +60 -60
  184. package/docs/workflows/multi-agent-workspace.md +42 -0
  185. package/docs/workflows/repo-docs.md +64 -59
  186. package/docs/workflows/rewrite-commits.md +60 -60
  187. package/docs/workflows/security-review.md +77 -58
  188. package/docs/workflows/self-evolve.md +42 -59
  189. package/docs/workflows/skill-creator.md +80 -75
  190. package/docs/workflows/skill-style.md +64 -64
  191. package/docs/workflows/tdd.md +7 -4
  192. package/docs/workflows/to-spec.md +83 -0
  193. package/docs/workflows/to-tickets.md +80 -0
  194. package/docs/workflows/todo-driven-workflow.md +28 -30
  195. package/docs/workflows/using-git-worktrees.md +67 -63
  196. package/docs/workflows/verification-loop.md +71 -69
  197. package/docs/workflows/verify-before-claim.md +64 -60
  198. package/docs/workflows/zoom-out.md +74 -62
  199. package/environment-detection/SKILL.md +41 -77
  200. package/environment-detection/references/shell-syntax-rules.md +76 -0
  201. package/environment-detection/scripts/preflight.js +103 -93
  202. package/eval-framework/fixtures/bad-frontmatter-colon/SKILL.md +14 -0
  203. package/eval-framework/fixtures/duplicate-desc-skill-a/SKILL.md +14 -0
  204. package/eval-framework/fixtures/duplicate-desc-skill-b/SKILL.md +14 -0
  205. package/eval-framework/fixtures/missing-delimiter/SKILL.md +13 -0
  206. package/eval-framework/fixtures/over-budget-skill/SKILL.md +36 -0
  207. package/eval-harness/SKILL.md +42 -59
  208. package/eval-harness/references/scoring-rubric.md +68 -0
  209. package/eval-harness/scripts/evaluate.js +77 -61
  210. package/evals/environment-detection/eval.yaml +26 -0
  211. package/evals/environment-detection/tasks/negative-trigger.yaml +16 -0
  212. package/evals/environment-detection/tasks/positive-trigger.yaml +15 -0
  213. package/evals/eval-harness/eval.yaml +26 -0
  214. package/evals/eval-harness/tasks/negative-trigger.yaml +16 -0
  215. package/evals/eval-harness/tasks/positive-trigger.yaml +15 -0
  216. package/evals/fable-discipline/eval.yaml +26 -0
  217. package/evals/fable-discipline/tasks/negative-trigger.yaml +16 -0
  218. package/evals/fable-discipline/tasks/positive-trigger.yaml +15 -0
  219. package/evals/fable-mode/eval.yaml +26 -0
  220. package/evals/fable-mode/tasks/negative-tier2-no-model.yaml +18 -0
  221. package/evals/fable-mode/tasks/negative-trigger.yaml +16 -0
  222. package/evals/fable-mode/tasks/positive-haiku-mode.yaml +16 -0
  223. package/evals/fable-mode/tasks/positive-opus-mode.yaml +16 -0
  224. package/evals/fable-mode/tasks/positive-sonnet-mode.yaml +16 -0
  225. package/evals/fable-mode/tasks/positive-trigger.yaml +15 -0
  226. package/evals/find-skills/eval.yaml +26 -0
  227. package/evals/find-skills/tasks/negative-trigger.yaml +16 -0
  228. package/evals/find-skills/tasks/positive-trigger.yaml +15 -0
  229. package/evals/git-commit/eval.yaml +26 -0
  230. package/evals/git-commit/tasks/negative-trigger.yaml +16 -0
  231. package/evals/git-commit/tasks/positive-trigger.yaml +15 -0
  232. package/evals/grill-me/eval.yaml +26 -0
  233. package/evals/grill-me/tasks/negative-trigger.yaml +16 -0
  234. package/evals/grill-me/tasks/positive-trigger.yaml +15 -0
  235. package/evals/grill-with-docs/eval.yaml +26 -0
  236. package/evals/grill-with-docs/tasks/negative-trigger.yaml +16 -0
  237. package/evals/grill-with-docs/tasks/positive-trigger.yaml +15 -0
  238. package/evals/harness-everything/eval.yaml +26 -0
  239. package/evals/harness-everything/tasks/negative-non-software.yaml +16 -0
  240. package/evals/harness-everything/tasks/negative-skill-indicated.yaml +15 -0
  241. package/evals/harness-everything/tasks/positive-tier1.yaml +16 -0
  242. package/evals/harness-everything/tasks/positive-tier2.yaml +16 -0
  243. package/evals/harness-everything/tasks/positive-tier3.yaml +16 -0
  244. package/evals/improve-codebase-architecture/eval.yaml +26 -0
  245. package/evals/improve-codebase-architecture/tasks/negative-trigger.yaml +16 -0
  246. package/evals/improve-codebase-architecture/tasks/positive-trigger.yaml +15 -0
  247. package/evals/install-cognitive-os/eval.yaml +26 -0
  248. package/evals/install-cognitive-os/tasks/negative-trigger.yaml +16 -0
  249. package/evals/install-cognitive-os/tasks/positive-trigger.yaml +15 -0
  250. package/evals/multi-agent-workspace/eval.yaml +26 -0
  251. package/evals/multi-agent-workspace/tasks/negative-trigger.yaml +15 -0
  252. package/evals/multi-agent-workspace/tasks/positive-trigger.yaml +15 -0
  253. package/evals/repo-docs/eval.yaml +26 -0
  254. package/evals/repo-docs/tasks/negative-trigger.yaml +16 -0
  255. package/evals/repo-docs/tasks/positive-trigger.yaml +15 -0
  256. package/evals/rewrite-commits/eval.yaml +26 -0
  257. package/evals/rewrite-commits/tasks/negative-trigger.yaml +16 -0
  258. package/evals/rewrite-commits/tasks/positive-trigger.yaml +15 -0
  259. package/evals/security-review/eval.yaml +26 -0
  260. package/evals/security-review/tasks/negative-trigger.yaml +16 -0
  261. package/evals/security-review/tasks/positive-trigger.yaml +15 -0
  262. package/evals/self-evolve/eval.yaml +26 -0
  263. package/evals/self-evolve/tasks/negative-trigger.yaml +16 -0
  264. package/evals/self-evolve/tasks/positive-trigger.yaml +15 -0
  265. package/evals/skill-creator/eval.yaml +26 -0
  266. package/evals/skill-creator/tasks/negative-trigger.yaml +16 -0
  267. package/evals/skill-creator/tasks/positive-trigger.yaml +15 -0
  268. package/evals/skill-style/eval.yaml +26 -0
  269. package/evals/skill-style/tasks/negative-trigger.yaml +16 -0
  270. package/evals/skill-style/tasks/positive-trigger.yaml +15 -0
  271. package/evals/tdd/eval.yaml +26 -0
  272. package/evals/tdd/tasks/negative-trivia.yaml +16 -0
  273. package/evals/tdd/tasks/positive-bugfix.yaml +15 -0
  274. package/evals/tdd/tasks/positive-feature.yaml +16 -0
  275. package/evals/tdd/tasks/positive-refactor.yaml +15 -0
  276. package/evals/to-spec/eval.yaml +26 -0
  277. package/evals/to-spec/tasks/negative-trigger.yaml +16 -0
  278. package/evals/to-spec/tasks/positive-trigger.yaml +15 -0
  279. package/evals/to-tickets/eval.yaml +26 -0
  280. package/evals/to-tickets/tasks/negative-trigger.yaml +15 -0
  281. package/evals/to-tickets/tasks/positive-trigger.yaml +15 -0
  282. package/evals/todo-driven-workflow/eval.yaml +26 -0
  283. package/evals/todo-driven-workflow/tasks/negative-single-edit.yaml +16 -0
  284. package/evals/todo-driven-workflow/tasks/positive-multi-step.yaml +15 -0
  285. package/evals/todo-driven-workflow/tasks/positive-refactor-flow.yaml +15 -0
  286. package/evals/using-git-worktrees/eval.yaml +26 -0
  287. package/evals/using-git-worktrees/tasks/negative-trigger.yaml +15 -0
  288. package/evals/using-git-worktrees/tasks/positive-trigger.yaml +15 -0
  289. package/evals/verification-loop/eval.yaml +26 -0
  290. package/evals/verification-loop/tasks/negative-discussion.yaml +16 -0
  291. package/evals/verification-loop/tasks/positive-pre-ship.yaml +15 -0
  292. package/evals/verify-before-claim/eval.yaml +26 -0
  293. package/evals/verify-before-claim/tasks/negative-trigger.yaml +16 -0
  294. package/evals/verify-before-claim/tasks/positive-trigger.yaml +15 -0
  295. package/evals/zoom-out/eval.yaml +26 -0
  296. package/evals/zoom-out/tasks/negative-trivial-edit.yaml +16 -0
  297. package/evals/zoom-out/tasks/positive-repeated-failure.yaml +15 -0
  298. package/fable-discipline/SKILL.md +41 -38
  299. package/fable-discipline/references/discipline-rules.md +22 -0
  300. package/fable-mode/CONTRACT-FORMAT.md +51 -51
  301. package/fable-mode/SKILL.md +39 -51
  302. package/fable-mode/agents/fable-orchestrator.md +99 -92
  303. package/fable-mode/agents/fable-verifier.md +32 -32
  304. package/fable-mode/agents/fable-worker-haiku.md +52 -48
  305. package/fable-mode/agents/fable-worker-sonnet.md +53 -49
  306. package/fable-mode/execution-guardrails/SKILL.md +43 -87
  307. package/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
  308. package/fable-mode/fable-haiku/SKILL.md +36 -48
  309. package/fable-mode/fable-haiku/references/routing-notes.md +26 -0
  310. package/fable-mode/fable-opus/SKILL.md +36 -0
  311. package/fable-mode/fable-sonnet/SKILL.md +36 -0
  312. package/fable-mode/model-matrix.json +32 -0
  313. package/fable-mode/references/execution-phases.md +37 -0
  314. package/fable-mode/references/model-matrix.md +39 -0
  315. package/fable-mode/scripts/model-selector.js +129 -0
  316. package/find-skills/SKILL.md +48 -0
  317. package/find-skills/references/discovery-flow.md +102 -0
  318. package/find-skills/scripts/use-skill.js +106 -0
  319. package/git-commit/SKILL.md +45 -55
  320. package/git-commit/guides/ANGULAR_STYLE.md +60 -60
  321. package/git-commit/guides/COMMIT_GENERATION.md +23 -23
  322. package/git-commit/guides/LANGUAGE_DETECTION.md +16 -16
  323. package/git-commit/guides/MAIN_REPO.md +14 -14
  324. package/git-commit/guides/SUBMODULES.md +27 -27
  325. package/git-commit/references/commit-flow.md +30 -0
  326. package/grill-me/SKILL.md +43 -36
  327. package/grill-me/references/grilling-playbook.md +38 -0
  328. package/grill-with-docs/ADR-FORMAT.md +47 -47
  329. package/grill-with-docs/CONTEXT-FORMAT.md +63 -63
  330. package/grill-with-docs/SKILL.md +41 -99
  331. package/grill-with-docs/references/session-playbook.md +97 -0
  332. package/harness-everything/SKILL.md +42 -141
  333. package/harness-everything/references/skill-registry.md +39 -0
  334. package/harness-everything/references/triage-and-tiers.md +116 -0
  335. package/harness-everything/scripts/bootstrap.js +203 -140
  336. package/harness-everything/scripts/routing-keywords.json +320 -0
  337. package/harness-everything/scripts/self-heal.js +241 -189
  338. package/harness-everything/scripts/tier-router.js +334 -219
  339. package/harness-everything/scripts/verify-gate.js +87 -18
  340. package/hooks/hooks.json +155 -155
  341. package/hooks/scripts/boundary-guard.js +55 -55
  342. package/hooks/scripts/contract-test.js +79 -79
  343. package/hooks/scripts/depth-guard.js +65 -65
  344. package/hooks/scripts/lib/harness-state.js +139 -228
  345. package/hooks/scripts/lib/platforms/claude.js +185 -42
  346. package/hooks/scripts/lib/platforms/codex.js +114 -46
  347. package/hooks/scripts/lib/platforms/continue.js +91 -41
  348. package/hooks/scripts/lib/platforms/copilot.js +109 -41
  349. package/hooks/scripts/lib/platforms/cursor.js +89 -41
  350. package/hooks/scripts/lib/platforms/hermes.js +57 -32
  351. package/hooks/scripts/lib/platforms/index.js +17 -17
  352. package/hooks/scripts/lib/platforms/worktrees.js +20 -20
  353. package/hooks/scripts/reset-circuit-breaker.js +30 -30
  354. package/hooks/scripts/rule-of-3-tracker.js +124 -91
  355. package/hooks/scripts/rule-of-3.js +14 -3
  356. package/hooks/scripts/state-persist.js +99 -99
  357. package/hooks/scripts/stop-gate.js +80 -80
  358. package/hooks/scripts/subagent-scope-guard.js +88 -88
  359. package/improve-codebase-architecture/SKILL.md +40 -44
  360. package/improve-codebase-architecture/guides/DEEPENING.md +37 -37
  361. package/improve-codebase-architecture/guides/HTML-REPORT.md +123 -123
  362. package/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -44
  363. package/improve-codebase-architecture/guides/LANGUAGE.md +53 -53
  364. package/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
  365. package/install-cognitive-os/SKILL.md +38 -95
  366. package/install-cognitive-os/references/cognitive-loop.md +27 -0
  367. package/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
  368. package/multi-agent-workspace/SKILL.md +37 -0
  369. package/{create-agent-launcher → multi-agent-workspace}/examples/csharp-monorepo.md +123 -123
  370. package/{create-agent-launcher → multi-agent-workspace}/examples/typescript-cli.md +126 -126
  371. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-claude.md +77 -77
  372. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-codex.md +146 -146
  373. package/multi-agent-workspace/guidelines/platform-continue.md +38 -0
  374. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-copilot.md +74 -74
  375. package/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
  376. package/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
  377. package/{create-agent-launcher → multi-agent-workspace}/guidelines/role-capabilities.md +108 -108
  378. package/multi-agent-workspace/references/agency-agents.md +31 -0
  379. package/multi-agent-workspace/references/architecture-guide.md +32 -0
  380. package/multi-agent-workspace/references/orchestration.md +48 -0
  381. package/multi-agent-workspace/scripts/agency-catalog.js +190 -0
  382. package/multi-agent-workspace/scripts/index_memory.js +51 -0
  383. package/multi-agent-workspace/scripts/scaffold.js +253 -0
  384. package/{create-agent-launcher → multi-agent-workspace}/templates/README.md +17 -17
  385. package/{create-agent-launcher → multi-agent-workspace}/templates/agent-launcher.md +67 -67
  386. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-csharp.md +55 -55
  387. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-polyglot.md +61 -61
  388. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-ts.md +56 -56
  389. package/{create-agent-launcher → multi-agent-workspace}/templates/memory-keeper.md +36 -36
  390. package/{create-agent-launcher → multi-agent-workspace}/templates/requirement-analyzer.md +65 -65
  391. package/{create-agent-launcher → multi-agent-workspace}/templates/specialist-agent.md +34 -34
  392. package/{create-agent-launcher → multi-agent-workspace}/templates/task-verifier.md +55 -55
  393. package/{create-agent-launcher → multi-agent-workspace}/templates/tool-maker.md +32 -32
  394. package/multi-agent-workspace/workflows/01-init.md +22 -0
  395. package/multi-agent-workspace/workflows/02-analysis.md +23 -0
  396. package/multi-agent-workspace/workflows/03-generation.md +27 -0
  397. package/multi-agent-workspace/workflows/04-launcher.md +16 -0
  398. package/opencode-plugin/README.md +94 -0
  399. package/opencode-plugin/hooks/circuit-breaker.js +121 -0
  400. package/opencode-plugin/hooks/compliance.js +128 -0
  401. package/opencode-plugin/hooks/post-edit.js +62 -0
  402. package/opencode-plugin/hooks/pre-complete.js +65 -0
  403. package/opencode-plugin/hooks/verify.js +140 -0
  404. package/opencode-plugin/plugin.json +17 -0
  405. package/opencode-plugin/test-hook-firing.js +198 -0
  406. package/package.json +50 -22
  407. package/references/definition-of-done.md +67 -0
  408. package/references/performance-checklist.md +153 -0
  409. package/references/platform-advisory-template.md +58 -0
  410. package/references/security-checklist.md +205 -0
  411. package/repo-docs/SKILL.md +46 -45
  412. package/repo-docs/references/process-guide.md +60 -0
  413. package/repo-docs/templates/agents-template.md +264 -264
  414. package/repo-docs/templates/knowledge-agents-template.md +50 -50
  415. package/repo-docs/templates/knowledge-readme-template.md +83 -83
  416. package/repo-docs/templates/manual-recon.md +117 -117
  417. package/repo-docs/templates/multi-skills-readme-template.md +72 -72
  418. package/repo-docs/templates/product-agents-template.md +78 -78
  419. package/repo-docs/templates/product-readme-template.md +95 -95
  420. package/repo-docs/templates/readme-template.md +136 -136
  421. package/repo-docs/templates/single-skill-readme-template.md +70 -70
  422. package/repo-docs/templates/skills-agents-template.md +60 -60
  423. package/rewrite-commits/SKILL.md +37 -32
  424. package/rewrite-commits/references/workflow.md +18 -0
  425. package/scripts/installer.js +546 -649
  426. package/scripts/lib/advisory-text.js +167 -163
  427. package/scripts/lib/claude-hooks.js +84 -71
  428. package/scripts/lib/gitignore.js +199 -80
  429. package/scripts/lib/manifest.js +146 -82
  430. package/scripts/lib/prompts.js +241 -241
  431. package/scripts/lib/skills.js +260 -172
  432. package/scripts/lib/workspace.js +28 -28
  433. package/scripts/verify-install.js +147 -0
  434. package/security-review/SKILL.md +50 -511
  435. package/security-review/guides/OWASP-PATTERNS.md +31 -0
  436. package/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
  437. package/security-review/references/security-checklist.md +478 -0
  438. package/security-review/scripts/audit-secrets.js +84 -0
  439. package/self-evolve/SKILL.md +47 -54
  440. package/self-evolve/references/memory-resolution.md +58 -0
  441. package/self-evolve/scripts/persist-memory.js +139 -40
  442. package/self-evolve/scripts/register-dynamic-skill.js +251 -0
  443. package/self-evolve/scripts/self-regression.js +110 -113
  444. package/skill-creator/SKILL.md +49 -91
  445. package/skill-creator/references/authoring-workflow.md +14 -0
  446. package/skill-creator/references/dynamic-generation-contract.md +21 -0
  447. package/skill-creator/references/quality-checklist.md +15 -0
  448. package/skill-creator/references/quality-principles.md +81 -81
  449. package/skill-creator/references/testing-workflow.md +20 -25
  450. package/skill-style/SKILL.md +42 -48
  451. package/skill-style/references/style-guide.md +36 -0
  452. package/tdd/SKILL.md +44 -53
  453. package/tdd/guides/deep-modules.md +33 -33
  454. package/tdd/guides/interface-design.md +31 -31
  455. package/tdd/guides/mocking.md +59 -59
  456. package/tdd/guides/refactoring.md +10 -10
  457. package/tdd/guides/tests.md +61 -61
  458. package/tdd/references/core-discipline.md +49 -0
  459. package/to-spec/SKILL.md +42 -0
  460. package/to-spec/references/process.md +77 -0
  461. package/to-spec/scripts/check-project-docs.js +259 -0
  462. package/to-spec/templates/cli-reference.md +31 -0
  463. package/to-spec/templates/dev-doc.md +27 -0
  464. package/to-spec/templates/feature-spec.md +59 -0
  465. package/to-spec/templates/schema-doc.md +31 -0
  466. package/to-tickets/SKILL.md +42 -0
  467. package/to-tickets/references/publishing-and-templates.md +97 -0
  468. package/todo-driven-workflow/SKILL.md +40 -54
  469. package/todo-driven-workflow/references/execution-guide.md +27 -0
  470. package/using-git-worktrees/SKILL.md +49 -161
  471. package/using-git-worktrees/references/workflow-details.md +108 -0
  472. package/verification-loop/SKILL.md +46 -138
  473. package/verification-loop/references/verification-phases.md +116 -0
  474. package/verification-loop/templates/verification-report.template.md +15 -0
  475. package/verify-before-claim/SKILL.md +43 -86
  476. package/verify-before-claim/references/verification-guide.md +73 -0
  477. package/zoom-out/SKILL.md +42 -90
  478. package/zoom-out/references/circuit-breaker.md +66 -0
  479. package/zoom-out/templates/zoom-out-report.template.md +20 -0
  480. package/build-multi-agent-system/AGENTS.md +0 -50
  481. package/build-multi-agent-system/README.md +0 -63
  482. package/build-multi-agent-system/SKILL.md +0 -68
  483. package/create-agent-launcher/SKILL.md +0 -48
  484. package/create-agent-launcher/guidelines/platform-gemini.md +0 -101
  485. package/create-agent-launcher/workflows/01-init.md +0 -22
  486. package/create-agent-launcher/workflows/02-analysis.md +0 -26
  487. package/create-agent-launcher/workflows/03-generation.md +0 -29
  488. package/create-agent-launcher/workflows/04-launcher.md +0 -20
  489. package/docs/workflows/build-multi-agent-system.md +0 -62
  490. package/docs/workflows/create-agent-launcher.md +0 -62
  491. package/eval-framework/behavioral-test.js +0 -105
  492. package/eval-framework/mechanism-test.js +0 -251
  493. package/harness-everything/scripts/todo-cli.js +0 -157
  494. package/skill-style/STYLE.md +0 -37
@@ -1,31 +1,100 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * Verification Gatekeeper
4
- * Forces the AI to run this script to prove quality gates before declaring a task done.
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.
5
15
  */
6
16
  const { execSync } = require('child_process');
17
+ const fs = require('fs');
18
+ const path = require('path');
7
19
 
8
20
  console.log("=== 🛡️ Harness Verification Gate ===");
9
21
 
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.");
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}).`);
19
62
  process.exit(1);
20
63
  }
21
-
22
- console.log("✅ Lint passed.");
23
- console.log("✅ Tests passed.");
24
- console.log("✅ Verification SUCCESS. You may now complete the task.");
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.");
25
78
  process.exit(0);
79
+ }
26
80
 
27
- } catch (err) {
28
- console.error("❌ Verification FAILED.");
29
- console.error(err.message);
30
- process.exit(1);
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
+ }
31
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,55 +1,55 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Boundary Guard (PreToolUse: Grep|Glob|Read)
4
- * Hard-blocks two concrete sources of context bloat / hallucination risk:
5
- * 1. Reading a large file whole instead of a scoped chunk (offset/limit).
6
- * 2. Searching inside known noise directories (node_modules, .git, build
7
- * output, etc.) that produce huge, low-signal result sets.
8
- * Fails open on any parse/lookup error - never blocks due to a bug here.
9
- */
10
- const fs = require('fs');
11
-
12
- const MAX_BYTES_WITHOUT_LIMIT = 512 * 1024; // 512KB
13
- const NOISE_DIRS = ['node_modules', '.git', 'dist', 'build', 'out', '.next', 'target', 'vendor', '__pycache__', '.venv', 'coverage'];
14
-
15
- let inputData = '';
16
- process.stdin.on('data', chunk => { inputData += chunk; });
17
- process.stdin.on('end', () => {
18
- try {
19
- const payload = JSON.parse(inputData);
20
- const toolName = payload.tool_name;
21
- const input = payload.tool_input || {};
22
-
23
- if (toolName === 'Read') {
24
- const filePath = input.file_path;
25
- if (filePath && !input.limit && fs.existsSync(filePath)) {
26
- const stat = fs.statSync(filePath);
27
- if (stat.isFile() && stat.size > MAX_BYTES_WITHOUT_LIMIT) {
28
- console.error(`[Boundary Guard] BLOCKED: "${filePath}" is ${(stat.size / 1024).toFixed(0)}KB.`);
29
- console.error(`Reading a file this large in one call risks context bloat and "lost in the middle" degradation.`);
30
- console.error(`Re-issue the Read with an explicit "offset"/"limit" to pull a targeted slice, or use Grep to locate the relevant section first.`);
31
- process.exit(2);
32
- }
33
- }
34
- }
35
-
36
- if (toolName === 'Grep' || toolName === 'Glob') {
37
- const searchPath = input.path || '';
38
- const pattern = input.pattern || '';
39
- const hitsNoiseDir = NOISE_DIRS.some(dir => {
40
- const asPathSegment = new RegExp(`(^|[\\\\/])${dir}($|[\\\\/])`);
41
- return asPathSegment.test(searchPath) || asPathSegment.test(pattern);
42
- });
43
- if (hitsNoiseDir) {
44
- console.error(`[Boundary Guard] BLOCKED: search targets a noise directory (${NOISE_DIRS.join(', ')}).`);
45
- console.error(`These produce huge, low-signal result sets and rarely contain what you're actually looking for.`);
46
- console.error(`Scope the search to source directories instead, or state explicitly why this directory must be searched.`);
47
- process.exit(2);
48
- }
49
- }
50
-
51
- process.exit(0);
52
- } catch (err) {
53
- process.exit(0);
54
- }
55
- });
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Boundary Guard (PreToolUse: Grep|Glob|Read)
4
+ * Hard-blocks two concrete sources of context bloat / hallucination risk:
5
+ * 1. Reading a large file whole instead of a scoped chunk (offset/limit).
6
+ * 2. Searching inside known noise directories (node_modules, .git, build
7
+ * output, etc.) that produce huge, low-signal result sets.
8
+ * Fails open on any parse/lookup error - never blocks due to a bug here.
9
+ */
10
+ const fs = require('fs');
11
+
12
+ const MAX_BYTES_WITHOUT_LIMIT = 512 * 1024; // 512KB
13
+ const NOISE_DIRS = ['node_modules', '.git', 'dist', 'build', 'out', '.next', 'target', 'vendor', '__pycache__', '.venv', 'coverage'];
14
+
15
+ let inputData = '';
16
+ process.stdin.on('data', chunk => { inputData += chunk; });
17
+ process.stdin.on('end', () => {
18
+ try {
19
+ const payload = JSON.parse(inputData);
20
+ const toolName = payload.tool_name;
21
+ const input = payload.tool_input || {};
22
+
23
+ if (toolName === 'Read') {
24
+ const filePath = input.file_path;
25
+ if (filePath && !input.limit && fs.existsSync(filePath)) {
26
+ const stat = fs.statSync(filePath);
27
+ if (stat.isFile() && stat.size > MAX_BYTES_WITHOUT_LIMIT) {
28
+ console.error(`[Boundary Guard] BLOCKED: "${filePath}" is ${(stat.size / 1024).toFixed(0)}KB.`);
29
+ console.error(`Reading a file this large in one call risks context bloat and "lost in the middle" degradation.`);
30
+ console.error(`Re-issue the Read with an explicit "offset"/"limit" to pull a targeted slice, or use Grep to locate the relevant section first.`);
31
+ process.exit(2);
32
+ }
33
+ }
34
+ }
35
+
36
+ if (toolName === 'Grep' || toolName === 'Glob') {
37
+ const searchPath = input.path || '';
38
+ const pattern = input.pattern || '';
39
+ const hitsNoiseDir = NOISE_DIRS.some(dir => {
40
+ const asPathSegment = new RegExp(`(^|[\\\\/])${dir}($|[\\\\/])`);
41
+ return asPathSegment.test(searchPath) || asPathSegment.test(pattern);
42
+ });
43
+ if (hitsNoiseDir) {
44
+ console.error(`[Boundary Guard] BLOCKED: search targets a noise directory (${NOISE_DIRS.join(', ')}).`);
45
+ console.error(`These produce huge, low-signal result sets and rarely contain what you're actually looking for.`);
46
+ console.error(`Scope the search to source directories instead, or state explicitly why this directory must be searched.`);
47
+ process.exit(2);
48
+ }
49
+ }
50
+
51
+ process.exit(0);
52
+ } catch (err) {
53
+ process.exit(0);
54
+ }
55
+ });