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,163 +1,167 @@
1
- // Prompt-injection-only guidance for platforms with no hook/execution
2
- // mechanism (Cursor, Copilot, Codex, Continue, Hermes). Single source of
3
- // truth for the advisory block - it used to be duplicated verbatim inside
4
- // installer.js's top level and again inside main().
5
- const fs = require('fs');
6
- const path = require('path');
7
-
8
- const MARKER = "Harness OS Guidance (Advisory)";
9
-
10
- const advisoryInstructions = [
11
- `\n# ${MARKER}`,
12
- `This file is advisory only - this platform has no hook/execution mechanism to`,
13
- `enforce it mechanically (unlike Claude Code's hook-based circuit breaker). Treat`,
14
- `these as strong defaults, not guarantees.`,
15
- ``,
16
- `## 🚦 MANDATORY ENTRY TRIAGE & ROUTING (ALWAYS RUN FIRST)`,
17
- `Every time you receive a new prompt, you MUST load the \`harness-everything\` skill and immediately do the following:`,
18
- `1. Run the Tier Router script: \`node harness-everything/scripts/tier-router.js "<Brief summary of user's prompt>"\` (or simulate its routing logic if terminal is not initialized yet).`,
19
- `2. Output a clear, stylized routing checkpoint block at the VERY BEGINNING of your response to the user:`,
20
- ` \`\`\`markdown`,
21
- ` ## 🚦 Harness OS Routing Checkpoint`,
22
- ` - **Active Tier**: Tier 1 (Trivial) | Tier 2 (Standard) | Tier 3 (Macro)`,
23
- ` - **Rationale**: <1-sentence rationale from the tier router output>`,
24
- ` - **Routed Skills, Guides & Actions**:`,
25
- ` - \`path/to/skill/or/guide.md\` (<Brief reason why this guide/skill is loaded/used>)`,
26
- ` \`\`\``,
27
- ``,
28
- `## 🤖 COGNITIVE COMPLIANCE (NO SILENT DEGRADES FOR NEW FEATURES)`,
29
- `- **Newly Added Features / Extensions**: Copilot is highly prone to treating new feature requests as Tier 1 direct edits. If a task introduces *any* new logic, a new API endpoint, or a new file/module, you **MUST NOT** treat it as Tier 1. It **MUST** be treated as a **Tier 2 (Standard Task)** or **Tier 3 (Macro Task)**.`,
30
- `- **Tier 2 Activation**: Initialize the \`todo-driven-workflow\` checklist first. Summon Domain Experts based on tech stack. Load and execute the \`tdd\` (Test-Driven Development) skill (write tests first, implement, refactor).`,
31
- `- **Tier 3 Activation**: Initialize the \`todo-driven-workflow\` checklist, load \`fable-mode\` and \`fable-discipline\`, run sub-agents via \`create-agent-launcher\`, and write global docs using \`repo-docs\`.`,
32
- `- **Memory Summarization (Self-Evolve)**: Upon task completion, you **MUST** run the \`self-evolve\` skill (running \`node self-evolve/scripts/self-regression.js\` or writing memories) to record key insights, lessons learned, and error boundaries so your context builds across sessions.`,
33
- `- **Environment Discovery**: Discover the environment (OS, shell, package manager) before running commands - don't assume.`,
34
- `- **Rule of 3**: If the same error repeats 3 times in a row, STOP retrying. Explain what's failing and ask the human for direction instead of continuing to guess.`,
35
- `- **Prefer Editing**: Prefer editing over rewriting; commit logically complete chunks rather than one giant diff.`,
36
- ``
37
- ].join('\n');
38
-
39
- function injectAdvisoryText(targetFile, header, label) {
40
- const dir = path.dirname(targetFile);
41
- if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
42
-
43
- if (fs.existsSync(targetFile)) {
44
- const content = fs.readFileSync(targetFile, 'utf8');
45
- if (!content.includes(MARKER)) {
46
- fs.appendFileSync(targetFile, advisoryInstructions, 'utf8');
47
- console.log(` ✅ Augmented existing ${label} with Harness guidance (advisory-only)`);
48
- }
49
- } else {
50
- fs.writeFileSync(targetFile, `${header}\n${advisoryInstructions}`, 'utf8');
51
- console.log(` ✅ Created ${label} with Harness guidance (advisory-only)`);
52
- }
53
- }
54
-
55
- function removeAdvisoryText(targetFile) {
56
- if (!fs.existsSync(targetFile)) return;
57
- try {
58
- let content = fs.readFileSync(targetFile, 'utf8');
59
- const markerIndex = content.indexOf(MARKER);
60
- if (markerIndex !== -1) {
61
- let cleanContent = content;
62
- const hashMarkerIndex = content.lastIndexOf('#', markerIndex);
63
- if (hashMarkerIndex !== -1) {
64
- cleanContent = content.substring(0, hashMarkerIndex).trim() + '\n';
65
- } else {
66
- cleanContent = content.substring(0, markerIndex).trim() + '\n';
67
- }
68
-
69
- const lines = cleanContent.trim().split('\n').map(l => l.trim()).filter(l => l !== '');
70
- if (lines.length === 0 || (lines.length === 1 && (lines[0] === '# Cursor Project Rules' || lines[0] === '# AGENTS.md' || lines[0] === '# Copilot Instructions' || lines[0] === '# .hermes.md'))) {
71
- fs.unlinkSync(targetFile);
72
- console.log(` ✅ Removed empty advisory file: ${targetFile}`);
73
- } else {
74
- fs.writeFileSync(targetFile, cleanContent.trim() + '\n', 'utf8');
75
- console.log(` ✅ Removed Harness guidance from: ${targetFile}`);
76
- }
77
- }
78
- } catch (e) {
79
- console.warn(` ⚠️ Error removing advisory text from ${targetFile}: ${e.message}`);
80
- }
81
- }
82
-
83
- // Continue.dev reads project rules as individual Markdown files (with YAML
84
- // frontmatter) from a `.continue/rules/` folder rather than one shared file,
85
- // so - unlike the shared-file platforms above - Harness gets its own
86
- // dedicated `harness.md` rule file instead of appending into an arbitrary
87
- // pre-existing one.
88
- function installContinueRule(targetFile, label) {
89
- const dir = path.dirname(targetFile);
90
- if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
91
- if (fs.existsSync(targetFile) && fs.readFileSync(targetFile, 'utf8').includes(MARKER)) {
92
- return;
93
- }
94
- const content = [
95
- `---`,
96
- `name: Harness OS Guidance`,
97
- `alwaysApply: true`,
98
- `description: "Harness OS routing, circuit-breaker awareness, and environment-discovery guidance (advisory only on Continue - no hook mechanism)"`,
99
- `---`,
100
- advisoryInstructions.replace(/^\n/, '')
101
- ].join('\n');
102
- fs.writeFileSync(targetFile, content, 'utf8');
103
- console.log(` ✅ Installed Continue rule file with Harness guidance (advisory-only): ${label}`);
104
- }
105
-
106
- function removeContinueRule(targetFile) {
107
- if (!fs.existsSync(targetFile)) return;
108
- try {
109
- const content = fs.readFileSync(targetFile, 'utf8');
110
- if (content.includes(MARKER)) {
111
- fs.unlinkSync(targetFile);
112
- console.log(` ✅ Removed Harness rule file: ${targetFile}`);
113
- }
114
- } catch (e) {
115
- console.warn(` ⚠️ Error removing ${targetFile}: ${e.message}`);
116
- }
117
- }
118
-
119
- function buildCopilotGlobalContent() {
120
- return [
121
- `---`,
122
- `description: "Harness OS Guidance (Advisory)"`,
123
- `applyTo: "**"`,
124
- `---`,
125
- `# Copilot Instructions`,
126
- ``,
127
- advisoryInstructions.replace(/^\n/, '')
128
- ].join('\n');
129
- }
130
-
131
- function buildCodexGlobalContent() {
132
- return [
133
- `---`,
134
- `description: "Harness OS Guidance - Global custom agent for orchestrating multi-agent workflows"`,
135
- `name: "Harness"`,
136
- `user-invocable: true`,
137
- `---`,
138
- `# AGENTS.md`,
139
- ``,
140
- `This file is advisory only - this platform has no hook/execution mechanism to`,
141
- `enforce it mechanically (unlike Claude Code's hook-based circuit breaker). Treat`,
142
- `these as strong defaults, not guarantees.`,
143
- ``,
144
- `- Discover the environment (OS, shell, package manager) before running commands - don't assume.`,
145
- `- Triage tasks: trivial fixes need no plan; standard features need tests; large refactors need`,
146
- ` an explicit plan reviewed with the human before implementation.`,
147
- `- If the same error repeats 3 times in a row, STOP retrying. Explain what's failing and ask the`,
148
- ` human for direction instead of continuing to guess.`,
149
- `- Prefer editing over rewriting; commit logically complete chunks rather than one giant diff.`,
150
- ``
151
- ].join('\n');
152
- }
153
-
154
- module.exports = {
155
- MARKER,
156
- advisoryInstructions,
157
- injectAdvisoryText,
158
- removeAdvisoryText,
159
- installContinueRule,
160
- removeContinueRule,
161
- buildCopilotGlobalContent,
162
- buildCodexGlobalContent,
163
- };
1
+ // Prompt-injection-only guidance for platforms with no hook/execution
2
+ // mechanism (Cursor, Copilot, Codex, Continue, Hermes). Single source of
3
+ // truth for the advisory block - it used to be duplicated verbatim inside
4
+ // installer.js's top level and again inside main().
5
+ const fs = require('fs');
6
+ const path = require('path');
7
+
8
+ const MARKER = "Harness OS Guidance (Advisory)";
9
+
10
+ const advisoryInstructions = [
11
+ `\n# ${MARKER}`,
12
+ `This file is advisory only - this platform has no hook/execution mechanism to`,
13
+ `enforce it mechanically (unlike Claude Code's hook-based circuit breaker). Treat`,
14
+ `these as strong defaults, not guarantees.`,
15
+ ``,
16
+ `## 🚦 MANDATORY ENTRY TRIAGE & ROUTING (ALWAYS RUN FIRST)`,
17
+ `Every time you receive a new prompt, you MUST load the \`harness-everything\` skill and immediately do the following:`,
18
+ `1. Run \`npx github:dyphn1/Harness-everything next "<Brief summary of user's prompt>"\` (this prints the same routing recommendation tier-router.js produces - it works from any directory and does not depend on where a local copy of the skill was installed). If the terminal is not available yet, simulate its routing logic from the rules below instead of skipping this step.`,
19
+ `2. Output a clear, stylized routing checkpoint block at the VERY BEGINNING of your response to the user:`,
20
+ ` \`\`\`markdown`,
21
+ ` ## 🚦 Harness OS Routing Checkpoint`,
22
+ ` - **Active Tier**: Tier 1 (Trivial) | Tier 2 (Standard) | Tier 3 (Macro)`,
23
+ ` - **Rationale**: <1-sentence rationale from the tier router output>`,
24
+ ` - **Routed Skills, Guides & Actions**:`,
25
+ ` - \`path/to/skill/or/guide.md\` (<Brief reason why this guide/skill is loaded/used>)`,
26
+ ` \`\`\``,
27
+ ``,
28
+ `## 🤖 COGNITIVE COMPLIANCE (NO SILENT DEGRADES FOR NEW FEATURES)`,
29
+ `- **Newly Added Features / Extensions**: Copilot is highly prone to treating new feature requests as Tier 1 direct edits. If a task introduces *any* new logic, a new API endpoint, or a new file/module, you **MUST NOT** treat it as Tier 1. It **MUST** be treated as a **Tier 2 (Standard Task)** or **Tier 3 (Macro Task)**.`,
30
+ `- **Tier 2 Activation**: Initialize the \`todo-driven-workflow\` checklist first. Summon Domain Experts based on tech stack. Load and execute the \`tdd\` (Test-Driven Development) skill (write tests first, implement, refactor).`,
31
+ `- **Tier 3 Activation**: Initialize the \`todo-driven-workflow\` checklist, load \`fable-mode\` and \`fable-discipline\`, run sub-agents via \`multi-agent-workspace\`, and write global docs using \`repo-docs\`.`,
32
+ `- **Pre-Completion Verification Gate**: Before telling the human the task is done, run \`npx github:dyphn1/Harness-everything verify\` in the project root. If it exits non-zero, fix the failures and run it again before declaring completion. On Claude Code this same check is mechanically enforced by a stop hook; here nothing blocks you from skipping it, so treat it as a real requirement, not a suggestion.`,
33
+ `- **Memory Summarization (Self-Evolve)**: Upon task completion, you **MUST** run the \`self-evolve\` skill (running \`node self-evolve/scripts/self-regression.js\` or writing memories) to record key insights, lessons learned, and error boundaries so your context builds across sessions.`,
34
+ `- **Environment Discovery**: Discover the environment (OS, shell, package manager) before running commands - don't assume.`,
35
+ `- **Rule of 3**: If the same error repeats 3 times in a row, STOP retrying. Explain what's failing and ask the human for direction instead of continuing to guess.`,
36
+ `- **Prefer Editing**: Prefer editing over rewriting; commit logically complete chunks rather than one giant diff.`,
37
+ ``
38
+ ].join('\n');
39
+
40
+ function injectAdvisoryText(targetFile, header, label) {
41
+ const dir = path.dirname(targetFile);
42
+ if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
43
+
44
+ if (fs.existsSync(targetFile)) {
45
+ const content = fs.readFileSync(targetFile, 'utf8');
46
+ if (!content.includes(MARKER)) {
47
+ fs.appendFileSync(targetFile, advisoryInstructions, 'utf8');
48
+ console.log(` ✅ Augmented existing ${label} with Harness guidance (advisory-only)`);
49
+ }
50
+ } else {
51
+ fs.writeFileSync(targetFile, `${header}\n${advisoryInstructions}`, 'utf8');
52
+ console.log(` ✅ Created ${label} with Harness guidance (advisory-only)`);
53
+ }
54
+ }
55
+
56
+ function removeAdvisoryText(targetFile) {
57
+ if (!fs.existsSync(targetFile)) return;
58
+ try {
59
+ let content = fs.readFileSync(targetFile, 'utf8');
60
+ const markerIndex = content.indexOf(MARKER);
61
+ if (markerIndex !== -1) {
62
+ let cleanContent = content;
63
+ const hashMarkerIndex = content.lastIndexOf('#', markerIndex);
64
+ if (hashMarkerIndex !== -1) {
65
+ cleanContent = content.substring(0, hashMarkerIndex).trim() + '\n';
66
+ } else {
67
+ cleanContent = content.substring(0, markerIndex).trim() + '\n';
68
+ }
69
+
70
+ const lines = cleanContent.trim().split('\n').map(l => l.trim()).filter(l => l !== '');
71
+ if (lines.length === 0 || (lines.length === 1 && (lines[0] === '# Cursor Project Rules' || lines[0] === '# AGENTS.md' || lines[0] === '# Copilot Instructions' || lines[0] === '# .hermes.md'))) {
72
+ fs.unlinkSync(targetFile);
73
+ console.log(` ✅ Removed empty advisory file: ${targetFile}`);
74
+ } else {
75
+ fs.writeFileSync(targetFile, cleanContent.trim() + '\n', 'utf8');
76
+ console.log(` ✅ Removed Harness guidance from: ${targetFile}`);
77
+ }
78
+ }
79
+ } catch (e) {
80
+ console.warn(` ⚠️ Error removing advisory text from ${targetFile}: ${e.message}`);
81
+ }
82
+ }
83
+
84
+ // Continue.dev reads project rules as individual Markdown files (with YAML
85
+ // frontmatter) from a `.continue/rules/` folder rather than one shared file,
86
+ // so - unlike the shared-file platforms above - Harness gets its own
87
+ // dedicated `harness.md` rule file instead of appending into an arbitrary
88
+ // pre-existing one.
89
+ function installContinueRule(targetFile, label) {
90
+ const dir = path.dirname(targetFile);
91
+ if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
92
+ if (fs.existsSync(targetFile) && fs.readFileSync(targetFile, 'utf8').includes(MARKER)) {
93
+ return;
94
+ }
95
+ const content = [
96
+ `---`,
97
+ `name: Harness OS Guidance`,
98
+ `alwaysApply: true`,
99
+ `description: "Harness OS routing, circuit-breaker awareness, and environment-discovery guidance (advisory only on Continue - no hook mechanism)"`,
100
+ `---`,
101
+ advisoryInstructions.replace(/^\n/, '')
102
+ ].join('\n');
103
+ fs.writeFileSync(targetFile, content, 'utf8');
104
+ console.log(` ✅ Installed Continue rule file with Harness guidance (advisory-only): ${label}`);
105
+ }
106
+
107
+ function removeContinueRule(targetFile) {
108
+ if (!fs.existsSync(targetFile)) return;
109
+ try {
110
+ const content = fs.readFileSync(targetFile, 'utf8');
111
+ if (content.includes(MARKER)) {
112
+ fs.unlinkSync(targetFile);
113
+ console.log(` ✅ Removed Harness rule file: ${targetFile}`);
114
+ }
115
+ } catch (e) {
116
+ console.warn(` ⚠️ Error removing ${targetFile}: ${e.message}`);
117
+ }
118
+ }
119
+
120
+ function buildCopilotGlobalContent() {
121
+ return [
122
+ `---`,
123
+ `description: "Harness OS Guidance (Advisory)"`,
124
+ `applyTo: "**"`,
125
+ `---`,
126
+ `# Copilot Instructions`,
127
+ ``,
128
+ advisoryInstructions.replace(/^\n/, '')
129
+ ].join('\n');
130
+ }
131
+
132
+ function buildCodexGlobalContent() {
133
+ return [
134
+ `---`,
135
+ `description: "Harness OS Guidance - Global custom agent for orchestrating multi-agent workflows"`,
136
+ `name: "Harness"`,
137
+ `user-invocable: true`,
138
+ `---`,
139
+ `# AGENTS.md`,
140
+ ``,
141
+ `This file is advisory only - this platform has no hook/execution mechanism to`,
142
+ `enforce it mechanically (unlike Claude Code's hook-based circuit breaker). Treat`,
143
+ `these as strong defaults, not guarantees.`,
144
+ ``,
145
+ `- Discover the environment (OS, shell, package manager) before running commands - don't assume.`,
146
+ `- Triage tasks: run \`npx github:dyphn1/Harness-everything next "<summary>"\` for a routing recommendation`,
147
+ ` (trivial fixes need no plan; standard features need tests; large refactors need an explicit plan`,
148
+ ` reviewed with the human before implementation).`,
149
+ `- Before declaring a task done, run \`npx github:dyphn1/Harness-everything verify\` and fix any failures`,
150
+ ` it reports - nothing here blocks you from skipping this, so treat it as a real requirement.`,
151
+ `- If the same error repeats 3 times in a row, STOP retrying. Explain what's failing and ask the`,
152
+ ` human for direction instead of continuing to guess.`,
153
+ `- Prefer editing over rewriting; commit logically complete chunks rather than one giant diff.`,
154
+ ``
155
+ ].join('\n');
156
+ }
157
+
158
+ module.exports = {
159
+ MARKER,
160
+ advisoryInstructions,
161
+ injectAdvisoryText,
162
+ removeAdvisoryText,
163
+ installContinueRule,
164
+ removeContinueRule,
165
+ buildCopilotGlobalContent,
166
+ buildCodexGlobalContent,
167
+ };
@@ -1,71 +1,84 @@
1
- // Merge/remove Harness's hook entries in a Claude Code settings.json without
2
- // disturbing anything else a user (or another tool) put there.
3
- const fs = require('fs');
4
-
5
- // Every hook this package ships is namespaced "harness:<phase>:<name>" (see
6
- // hooks/hooks.json) specifically so removal can match on that prefix alone -
7
- // never on loose text like "does the command mention harness", which could
8
- // false-positive on someone else's unrelated hook (e.g. a script whose path
9
- // or name happens to contain "harness").
10
- function isHarnessHook(hook) {
11
- return !!(hook && hook.id && hook.id.startsWith('harness:'));
12
- }
13
-
14
- function mergeHarnessHooks(claudeConfig, resolvedHooks) {
15
- claudeConfig.hooks = claudeConfig.hooks || {};
16
- for (const [hookType, hookList] of Object.entries(resolvedHooks)) {
17
- const existingList = claudeConfig.hooks[hookType] || [];
18
- const mergedList = [...existingList];
19
- hookList.forEach(newHook => {
20
- const existsIdx = mergedList.findIndex(h => h.id === newHook.id);
21
- if (existsIdx !== -1) {
22
- mergedList[existsIdx] = newHook;
23
- } else {
24
- mergedList.push(newHook);
25
- }
26
- });
27
- claudeConfig.hooks[hookType] = mergedList;
28
- }
29
- return claudeConfig;
30
- }
31
-
32
- function removeHarnessHooks(claudeSettingsFile) {
33
- if (!fs.existsSync(claudeSettingsFile)) return false;
34
- try {
35
- const content = fs.readFileSync(claudeSettingsFile, 'utf8');
36
- let config = JSON.parse(content);
37
- if (!config.hooks) return false;
38
-
39
- let modified = false;
40
- for (const [hookType, hookList] of Object.entries(config.hooks)) {
41
- if (!Array.isArray(hookList)) continue;
42
- const originalLength = hookList.length;
43
- config.hooks[hookType] = hookList.filter(hook => !isHarnessHook(hook));
44
- if (config.hooks[hookType].length !== originalLength) {
45
- modified = true;
46
- }
47
- if (config.hooks[hookType].length === 0) {
48
- delete config.hooks[hookType];
49
- }
50
- }
51
- if (Object.keys(config.hooks || {}).length === 0) {
52
- delete config.hooks;
53
- }
54
-
55
- if (modified) {
56
- if (Object.keys(config).length === 0) {
57
- fs.unlinkSync(claudeSettingsFile);
58
- console.log(` ✅ Cleaned up and removed empty Claude settings file: ${claudeSettingsFile}`);
59
- } else {
60
- fs.writeFileSync(claudeSettingsFile, JSON.stringify(config, null, 2), 'utf8');
61
- console.log(` ✅ Safely removed Harness hooks from Claude settings: ${claudeSettingsFile}`);
62
- }
63
- return true;
64
- }
65
- } catch (e) {
66
- console.warn(` ⚠️ Error cleaning Claude settings file ${claudeSettingsFile}: ${e.message}`);
67
- }
68
- return false;
69
- }
70
-
71
- module.exports = { isHarnessHook, mergeHarnessHooks, removeHarnessHooks };
1
+ // Merge/remove Harness's hook entries in a Claude Code settings.json without
2
+ // disturbing anything else a user (or another tool) put there.
3
+ const fs = require('fs');
4
+
5
+ // Every hook this package ships is namespaced "harness:<phase>:<name>" (see
6
+ // hooks/hooks.json) specifically so removal can match on that prefix alone.
7
+ // To handle legacy installations (pre-0.3.0 or older) where hooks were installed
8
+ // without an "id" field, we also check if any command contains keywords like
9
+ // "harness-everything" or "harness-skills".
10
+ function isHarnessHook(hook) {
11
+ if (!hook) return false;
12
+ if (hook.id && hook.id.startsWith('harness:')) {
13
+ return true;
14
+ }
15
+ if (Array.isArray(hook.hooks)) {
16
+ return hook.hooks.some(h => {
17
+ return h && typeof h.command === 'string' && (
18
+ h.command.includes('harness-everything') ||
19
+ h.command.includes('harness-skills') ||
20
+ h.command.includes('harness-state')
21
+ );
22
+ });
23
+ }
24
+ return false;
25
+ }
26
+
27
+ function mergeHarnessHooks(claudeConfig, resolvedHooks) {
28
+ claudeConfig.hooks = claudeConfig.hooks || {};
29
+ for (const [hookType, hookList] of Object.entries(resolvedHooks)) {
30
+ const existingList = claudeConfig.hooks[hookType] || [];
31
+ const mergedList = [...existingList];
32
+ hookList.forEach(newHook => {
33
+ const existsIdx = mergedList.findIndex(h => h.id === newHook.id);
34
+ if (existsIdx !== -1) {
35
+ mergedList[existsIdx] = newHook;
36
+ } else {
37
+ mergedList.push(newHook);
38
+ }
39
+ });
40
+ claudeConfig.hooks[hookType] = mergedList;
41
+ }
42
+ return claudeConfig;
43
+ }
44
+
45
+ function removeHarnessHooks(claudeSettingsFile) {
46
+ if (!fs.existsSync(claudeSettingsFile)) return false;
47
+ try {
48
+ const content = fs.readFileSync(claudeSettingsFile, 'utf8');
49
+ let config = JSON.parse(content);
50
+ if (!config.hooks) return false;
51
+
52
+ let modified = false;
53
+ for (const [hookType, hookList] of Object.entries(config.hooks)) {
54
+ if (!Array.isArray(hookList)) continue;
55
+ const originalLength = hookList.length;
56
+ config.hooks[hookType] = hookList.filter(hook => !isHarnessHook(hook));
57
+ if (config.hooks[hookType].length !== originalLength) {
58
+ modified = true;
59
+ }
60
+ if (config.hooks[hookType].length === 0) {
61
+ delete config.hooks[hookType];
62
+ }
63
+ }
64
+ if (Object.keys(config.hooks || {}).length === 0) {
65
+ delete config.hooks;
66
+ }
67
+
68
+ if (modified) {
69
+ if (Object.keys(config).length === 0) {
70
+ fs.unlinkSync(claudeSettingsFile);
71
+ console.log(` ✅ Cleaned up and removed empty Claude settings file: ${claudeSettingsFile}`);
72
+ } else {
73
+ fs.writeFileSync(claudeSettingsFile, JSON.stringify(config, null, 2), 'utf8');
74
+ console.log(` ✅ Safely removed Harness hooks from Claude settings: ${claudeSettingsFile}`);
75
+ }
76
+ return true;
77
+ }
78
+ } catch (e) {
79
+ console.warn(` ⚠️ Error cleaning Claude settings file ${claudeSettingsFile}: ${e.message}`);
80
+ }
81
+ return false;
82
+ }
83
+
84
+ module.exports = { isHarnessHook, mergeHarnessHooks, removeHarnessHooks };