harness-everything 0.2.2 → 0.4.0

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 (918) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/.claude-plugin/marketplace.json +27 -0
  3. package/.claude-plugin/plugin.json +52 -0
  4. package/.gitattributes +1 -0
  5. package/.github/workflows/behavioral-evals.yml +36 -0
  6. package/.github/workflows/ci.yml +122 -0
  7. package/.github/workflows/release.yml +71 -0
  8. package/.husky/commit-msg +1 -0
  9. package/.releaserc.json +113 -0
  10. package/.waza.yaml +22 -0
  11. package/AGENTS.md +71 -2
  12. package/BENCHMARK_SOP.md +82 -62
  13. package/CHANGELOG.md +488 -114
  14. package/CODE_OF_CONDUCT.md +24 -0
  15. package/CONTRIBUTING.md +60 -0
  16. package/Dockerfile +18 -18
  17. package/LICENSE +201 -201
  18. package/PRIVACY.md +25 -0
  19. package/README.md +310 -197
  20. package/RELEASING.md +82 -0
  21. package/SECURITY.md +33 -0
  22. package/SUPPORT.md +27 -0
  23. package/TERMS.md +21 -0
  24. package/VERIFICATION.md +283 -347
  25. package/behavioral-evals/README.md +106 -0
  26. package/behavioral-evals/analyze-plugin-results.js +110 -0
  27. package/behavioral-evals/case-validator.js +194 -0
  28. package/behavioral-evals/cases/baseline-add-feature.yaml +34 -0
  29. package/behavioral-evals/cases/baseline-api-design.yaml +32 -0
  30. package/behavioral-evals/cases/baseline-debugging.yaml +31 -0
  31. package/behavioral-evals/cases/baseline-dependency.yaml +24 -0
  32. package/behavioral-evals/cases/baseline-documentation.yaml +34 -0
  33. package/behavioral-evals/cases/baseline-environment-detection.yaml +21 -0
  34. package/behavioral-evals/cases/baseline-error-handling.yaml +31 -0
  35. package/behavioral-evals/cases/baseline-eval-harness.yaml +27 -0
  36. package/behavioral-evals/cases/baseline-fable-discipline.yaml +31 -0
  37. package/behavioral-evals/cases/baseline-find-skills-exposure.yaml +49 -0
  38. package/behavioral-evals/cases/baseline-find-skills.yaml +21 -0
  39. package/behavioral-evals/cases/baseline-git-commit.yaml +33 -0
  40. package/behavioral-evals/cases/baseline-install-cognitive-os.yaml +24 -0
  41. package/behavioral-evals/cases/baseline-multi-agent-workspace.yaml +28 -0
  42. package/behavioral-evals/cases/baseline-performance-monitoring.yaml +28 -0
  43. package/behavioral-evals/cases/baseline-performance.yaml +34 -0
  44. package/behavioral-evals/cases/baseline-refactor-with-tests.yaml +35 -0
  45. package/behavioral-evals/cases/baseline-refactor.yaml +27 -0
  46. package/behavioral-evals/cases/baseline-rewrite-commits.yaml +34 -0
  47. package/behavioral-evals/cases/baseline-security-review.yaml +28 -0
  48. package/behavioral-evals/cases/baseline-self-evolve.yaml +31 -0
  49. package/behavioral-evals/cases/baseline-simple-bugfix.yaml +33 -0
  50. package/behavioral-evals/cases/baseline-skill-creator.yaml +20 -0
  51. package/behavioral-evals/cases/baseline-skill-style.yaml +21 -0
  52. package/behavioral-evals/cases/baseline-tdd-workflow.yaml +28 -0
  53. package/behavioral-evals/cases/baseline-to-spec.yaml +34 -0
  54. package/behavioral-evals/cases/baseline-to-tickets.yaml +24 -0
  55. package/behavioral-evals/cases/baseline-todo-driven-workflow.yaml +32 -0
  56. package/behavioral-evals/cases/baseline-using-git-worktrees.yaml +15 -0
  57. package/behavioral-evals/cases/breaker-zoom-out-after-3.yaml +50 -0
  58. package/behavioral-evals/cases/pressure-budget-skip-review.yaml +27 -0
  59. package/behavioral-evals/cases/pressure-bypass-review.yaml +27 -0
  60. package/behavioral-evals/cases/pressure-complexity-skip.yaml +37 -0
  61. package/behavioral-evals/cases/pressure-expert-skip-testing.yaml +31 -0
  62. package/behavioral-evals/cases/pressure-fatigue-skip.yaml +33 -0
  63. package/behavioral-evals/cases/pressure-management-skip-all.yaml +28 -0
  64. package/behavioral-evals/cases/pressure-scope-bypass.yaml +33 -0
  65. package/behavioral-evals/cases/pressure-skip-docs.yaml +50 -0
  66. package/behavioral-evals/cases/pressure-skip-error-handling.yaml +35 -0
  67. package/behavioral-evals/cases/pressure-skip-security.yaml +32 -0
  68. package/behavioral-evals/cases/pressure-skip-tests.yaml +27 -0
  69. package/behavioral-evals/cases/pressure-skip-verification.yaml +43 -0
  70. package/behavioral-evals/cases/pressure-social-skip-review.yaml +28 -0
  71. package/behavioral-evals/cases/pressure-sunk-cost-retry.yaml +50 -0
  72. package/behavioral-evals/cases/scope-discipline.yaml +33 -0
  73. package/behavioral-evals/cases/tier1-no-overplan.yaml +26 -0
  74. package/behavioral-evals/cases/verify-before-done.yaml +33 -0
  75. package/behavioral-evals/evidence/2026-09-07/baseline-debugging/case.yaml +31 -0
  76. package/behavioral-evals/evidence/2026-09-07/baseline-debugging/historical-case.yaml +31 -0
  77. package/behavioral-evals/evidence/2026-09-07/baseline-debugging/provenance.json +42 -0
  78. package/behavioral-evals/evidence/2026-09-07/baseline-debugging/result.sanitized.json +20 -0
  79. package/behavioral-evals/evidence/2026-09-07/baseline-performance/case.yaml +34 -0
  80. package/behavioral-evals/evidence/2026-09-07/baseline-performance/historical-case.yaml +34 -0
  81. package/behavioral-evals/evidence/2026-09-07/baseline-performance/provenance.json +42 -0
  82. package/behavioral-evals/evidence/2026-09-07/baseline-performance/result.sanitized.json +20 -0
  83. package/behavioral-evals/evidence/2026-09-07/baseline-security-review/case.yaml +28 -0
  84. package/behavioral-evals/evidence/2026-09-07/baseline-security-review/historical-case.yaml +28 -0
  85. package/behavioral-evals/evidence/2026-09-07/baseline-security-review/provenance.json +42 -0
  86. package/behavioral-evals/evidence/2026-09-07/baseline-security-review/result.sanitized.json +20 -0
  87. package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/case.yaml +33 -0
  88. package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/historical-case.yaml +33 -0
  89. package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/provenance.json +42 -0
  90. package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/result.sanitized.json +20 -0
  91. package/behavioral-evals/evidence/2026-09-07/grill-me-adversarial/case.yaml +28 -0
  92. package/behavioral-evals/evidence/2026-09-07/grill-me-adversarial/historical-case.yaml +18 -0
  93. package/behavioral-evals/evidence/2026-09-07/grill-me-adversarial/provenance.json +30 -0
  94. package/behavioral-evals/evidence/2026-09-07/live-run-blocker.md +16 -0
  95. package/behavioral-evals/evidence/2026-09-07/manifest.json +88 -0
  96. package/behavioral-evals/evidence/2026-09-07/pressure-scope-bypass/case.yaml +33 -0
  97. package/behavioral-evals/evidence/2026-09-07/pressure-scope-bypass/historical-case.yaml +28 -0
  98. package/behavioral-evals/evidence/2026-09-07/pressure-scope-bypass/provenance.json +30 -0
  99. package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/case.yaml +50 -0
  100. package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/historical-case.yaml +50 -0
  101. package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/provenance.json +42 -0
  102. package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/result.sanitized.json +20 -0
  103. package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/case.yaml +35 -0
  104. package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/historical-case.yaml +35 -0
  105. package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/provenance.json +42 -0
  106. package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/result.sanitized.json +20 -0
  107. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/case.yaml +43 -0
  108. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/historical-case.yaml +43 -0
  109. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/provenance.json +42 -0
  110. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/result.sanitized.json +24 -0
  111. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/case.yaml +43 -0
  112. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/historical-case.yaml +43 -0
  113. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/provenance.json +42 -0
  114. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/result.sanitized.json +20 -0
  115. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/case.yaml +43 -0
  116. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/historical-case.yaml +43 -0
  117. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/provenance.json +42 -0
  118. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/result.sanitized.json +24 -0
  119. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/case.yaml +50 -0
  120. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/historical-case.yaml +47 -0
  121. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/provenance.json +42 -0
  122. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/result.sanitized.json +24 -0
  123. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/case.yaml +50 -0
  124. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/historical-case.yaml +47 -0
  125. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/provenance.json +42 -0
  126. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/result.sanitized.json +20 -0
  127. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/case.yaml +50 -0
  128. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/historical-case.yaml +47 -0
  129. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/provenance.json +42 -0
  130. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/result.sanitized.json +24 -0
  131. package/behavioral-evals/evidence/2026-09-07/tdd-test-first/case.yaml +30 -0
  132. package/behavioral-evals/evidence/2026-09-07/tdd-test-first/historical-case.yaml +23 -0
  133. package/behavioral-evals/evidence/2026-09-07/tdd-test-first/provenance.json +30 -0
  134. package/behavioral-evals/evidence/2026-09-07/triage-matrix.json +426 -0
  135. package/behavioral-evals/evidence/2026-09-07/triage-matrix.md +24 -0
  136. package/behavioral-evals/evidence/2026-09-07/verify-before-claim-cites/case.yaml +19 -0
  137. package/behavioral-evals/evidence/2026-09-07/verify-before-claim-cites/historical-case.yaml +18 -0
  138. package/behavioral-evals/evidence/2026-09-07/verify-before-claim-cites/provenance.json +30 -0
  139. package/behavioral-evals/evidence/2026-09-07/verify-before-done/case.yaml +33 -0
  140. package/behavioral-evals/evidence/2026-09-07/verify-before-done/historical-case.yaml +31 -0
  141. package/behavioral-evals/evidence/2026-09-07/verify-before-done/provenance.json +42 -0
  142. package/behavioral-evals/evidence/2026-09-07/verify-before-done/result.sanitized.json +20 -0
  143. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/case.yaml +33 -0
  144. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/historical-case.yaml +31 -0
  145. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/provenance.json +42 -0
  146. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/result.sanitized.json +20 -0
  147. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/case.yaml +33 -0
  148. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/historical-case.yaml +31 -0
  149. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/provenance.json +42 -0
  150. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/result.sanitized.json +20 -0
  151. package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/case.yaml +33 -0
  152. package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/historical-case.yaml +33 -0
  153. package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/provenance.json +42 -0
  154. package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/result.sanitized.json +480 -0
  155. package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/transcript.sanitized.jsonl +95 -0
  156. package/behavioral-evals/evidence-tool.js +443 -0
  157. package/behavioral-evals/fixtures/claude-denied.jsonl +3 -0
  158. package/behavioral-evals/fixtures/claude-legacy.json +1 -0
  159. package/behavioral-evals/fixtures/claude-oral-only.jsonl +2 -0
  160. package/behavioral-evals/fixtures/claude-success.jsonl +5 -0
  161. package/behavioral-evals/fixtures/claude-truncated.jsonl +3 -0
  162. package/behavioral-evals/fixtures/opencode-success.jsonl +6 -0
  163. package/behavioral-evals/results/.gitkeep +0 -0
  164. package/behavioral-evals/results/2026-08-23-breaker-zoom-out-after-3.json +20 -0
  165. package/behavioral-evals/results/2026-08-23-pressure-skip-verification.json +20 -0
  166. package/behavioral-evals/results/2026-08-23-pressure-sunk-cost-retry.json +20 -0
  167. package/behavioral-evals/results/2026-08-23-scope-discipline.json +16 -0
  168. package/behavioral-evals/results/2026-08-23-tier1-no-overplan.json +20 -0
  169. package/behavioral-evals/results/2026-08-23-verify-before-done.json +20 -0
  170. package/behavioral-evals/results/2026-08-27-baseline-add-feature.json +20 -0
  171. package/behavioral-evals/results/2026-08-27-baseline-api-design.json +20 -0
  172. package/behavioral-evals/results/2026-08-27-baseline-debugging.json +20 -0
  173. package/behavioral-evals/results/2026-08-27-baseline-dependency.json +16 -0
  174. package/behavioral-evals/results/2026-08-27-baseline-documentation.json +20 -0
  175. package/behavioral-evals/results/2026-08-27-baseline-error-handling.json +20 -0
  176. package/behavioral-evals/results/2026-08-27-baseline-git-commit.json +20 -0
  177. package/behavioral-evals/results/2026-08-27-baseline-performance-monitoring.json +20 -0
  178. package/behavioral-evals/results/2026-08-27-baseline-performance.json +20 -0
  179. package/behavioral-evals/results/2026-08-27-baseline-refactor-with-tests.json +20 -0
  180. package/behavioral-evals/results/2026-08-27-baseline-refactor.json +20 -0
  181. package/behavioral-evals/results/2026-08-27-baseline-security-review.json +20 -0
  182. package/behavioral-evals/results/2026-08-27-baseline-simple-bugfix.json +20 -0
  183. package/behavioral-evals/results/2026-08-27-baseline-tdd-workflow.json +24 -0
  184. package/behavioral-evals/results/2026-08-27-breaker-zoom-out-after-3.json +20 -0
  185. package/behavioral-evals/results/2026-08-27-pressure-budget-skip-review.json +16 -0
  186. package/behavioral-evals/results/2026-08-27-pressure-bypass-review.json +20 -0
  187. package/behavioral-evals/results/2026-08-27-pressure-complexity-skip.json +20 -0
  188. package/behavioral-evals/results/2026-08-27-pressure-expert-skip-testing.json +16 -0
  189. package/behavioral-evals/results/2026-08-27-pressure-fatigue-skip.json +16 -0
  190. package/behavioral-evals/results/2026-08-27-pressure-management-skip-all.json +20 -0
  191. package/behavioral-evals/results/2026-08-27-pressure-skip-docs.json +20 -0
  192. package/behavioral-evals/results/2026-08-27-pressure-skip-error-handling.json +20 -0
  193. package/behavioral-evals/results/2026-08-27-pressure-skip-security.json +20 -0
  194. package/behavioral-evals/results/2026-08-27-pressure-skip-tests.json +20 -0
  195. package/behavioral-evals/results/2026-08-27-pressure-skip-verification.json +24 -0
  196. package/behavioral-evals/results/2026-08-27-pressure-social-skip-review.json +20 -0
  197. package/behavioral-evals/results/2026-08-27-pressure-sunk-cost-retry.json +24 -0
  198. package/behavioral-evals/results/2026-08-27-scope-discipline.json +16 -0
  199. package/behavioral-evals/results/2026-08-27-tier1-no-overplan.json +20 -0
  200. package/behavioral-evals/results/2026-08-27-verify-before-done.json +20 -0
  201. package/behavioral-evals/results/2026-08-31-baseline-add-feature.json +20 -0
  202. package/behavioral-evals/results/2026-09-03-baseline-environment-detection-pair.json +133 -0
  203. package/behavioral-evals/results/2026-09-03-baseline-eval-harness-pair.json +141 -0
  204. package/behavioral-evals/results/2026-09-03-baseline-fable-discipline-pair.json +149 -0
  205. package/behavioral-evals/results/2026-09-03-baseline-find-skills-exposure-pair.json +141 -0
  206. package/behavioral-evals/results/2026-09-03-baseline-find-skills-pair.json +141 -0
  207. package/behavioral-evals/results/2026-09-03-baseline-install-cognitive-os-pair.json +133 -0
  208. package/behavioral-evals/results/2026-09-03-baseline-multi-agent-workspace-pair.json +141 -0
  209. package/behavioral-evals/results/2026-09-03-baseline-rewrite-commits-pair.json +95 -0
  210. package/behavioral-evals/results/2026-09-03-baseline-self-evolve-pair.json +141 -0
  211. package/behavioral-evals/results/2026-09-03-baseline-skill-creator-pair.json +141 -0
  212. package/behavioral-evals/results/2026-09-03-baseline-skill-style-pair.json +133 -0
  213. package/behavioral-evals/results/2026-09-03-baseline-to-spec-pair.json +133 -0
  214. package/behavioral-evals/results/2026-09-03-baseline-to-tickets-pair.json +141 -0
  215. package/behavioral-evals/results/2026-09-03-baseline-todo-driven-workflow-pair.json +141 -0
  216. package/behavioral-evals/results/2026-09-03-baseline-using-git-worktrees-pair.json +133 -0
  217. package/behavioral-evals/results/2026-09-03-summary-both.json +41 -0
  218. package/behavioral-evals/results/2026-09-04-baseline-find-skills-pair.json +141 -0
  219. package/behavioral-evals/results/2026-09-04-baseline-self-evolve-treatment.json +80 -0
  220. package/behavioral-evals/results/2026-09-04-baseline-skill-creator-treatment.json +80 -0
  221. package/behavioral-evals/results/2026-09-04-summary-both.json +41 -0
  222. package/behavioral-evals/results/run-20260827-115509.log +287 -0
  223. package/behavioral-evals/run-with-plugin.js +300 -0
  224. package/behavioral-evals/run.js +928 -0
  225. package/behavioral-evals/transcript-parser.js +591 -0
  226. package/benchmarks/README.md +63 -0
  227. package/benchmarks/ab-test-2026-08-26/results.json +55 -0
  228. package/benchmarks/results/logs/.gitkeep +0 -0
  229. package/benchmarks/results/logs/test-a-harness.md +31 -0
  230. package/benchmarks/results/logs/test-a-vanilla.md +28 -0
  231. package/benchmarks/results/logs/test-b-micro-loop-harness.md +48 -0
  232. package/benchmarks/results/logs/test-b-micro-loop-vanilla.md +36 -0
  233. package/benchmarks/results/logs/test-c-attention-loss-harness.md +40 -0
  234. package/benchmarks/results/logs/test-c-attention-loss-vanilla.md +63 -0
  235. package/benchmarks/results/logs/test-d-knowledge-boundary-harness.md +24 -0
  236. package/benchmarks/results/logs/test-d-knowledge-boundary-vanilla.md +29 -0
  237. package/benchmarks/results/logs/test-e-shell-awareness-harness.md +20 -0
  238. package/benchmarks/results/logs/test-e-shell-awareness-vanilla.md +20 -0
  239. package/benchmarks/results/logs/test-f-fact-audit-harness.md +16 -0
  240. package/benchmarks/results/logs/test-f-fact-audit-vanilla.md +16 -0
  241. package/benchmarks/results/results.json +158 -0
  242. package/benchmarks/run.js +220 -0
  243. package/benchmarks/schema.json +44 -0
  244. package/bin/cli.js +164 -97
  245. package/ci/ab-test-cases/grill-me-adversarial.yaml +28 -0
  246. package/ci/ab-test-cases/tdd-test-first.yaml +30 -0
  247. package/ci/ab-test-cases/verification-loop-gates.yaml +38 -0
  248. package/ci/ab-test-cases/verify-before-claim-cites.yaml +19 -0
  249. package/ci/ab-test-harness.js +485 -0
  250. package/ci/action-gate-platform-doc.test.js +31 -0
  251. package/ci/action-gate.test.js +260 -0
  252. package/{eval-framework → ci}/cases/case1.json +5 -5
  253. package/ci/cases/case10-small-feature.json +5 -0
  254. package/ci/cases/case11-readme-typo-update.json +5 -0
  255. package/ci/cases/case12-chinese-macro-audit.json +5 -0
  256. package/ci/cases/case2.json +5 -0
  257. package/{eval-framework → ci}/cases/case3.json +5 -5
  258. package/{eval-framework → ci}/cases/case4-zh-tier2.json +5 -5
  259. package/{eval-framework → ci}/cases/case5-zh-tier3.json +5 -5
  260. package/ci/cases/case6-macro-skill-audit.json +5 -0
  261. package/ci/cases/case7-macro-reference-audit.json +5 -0
  262. package/ci/cases/case8-controlled-ab-benchmark.json +5 -0
  263. package/ci/cases/case9-four-issue-audit.json +5 -0
  264. package/ci/consistency-check.js +393 -0
  265. package/ci/description-collision.js +118 -0
  266. package/ci/disclosure-check.js +225 -0
  267. package/ci/doc-capability-consistency.test.js +180 -0
  268. package/ci/fable-mode-test.js +120 -0
  269. package/ci/fixtures/agency-agents/divisions.json +6 -0
  270. package/ci/fixtures/agency-agents/engineering/code-reviewer.md +11 -0
  271. package/ci/fixtures/agency-agents/testing/reality-checker.md +11 -0
  272. package/ci/fixtures/bad-frontmatter-colon/SKILL.md +16 -0
  273. package/ci/fixtures/duplicate-description/skill-a/SKILL.md +16 -0
  274. package/ci/fixtures/duplicate-description/skill-b/SKILL.md +16 -0
  275. package/ci/fixtures/phase4/parallel-disjoint.stages.json +32 -0
  276. package/ci/fixtures/phase4/parallel-read-only.stages.json +32 -0
  277. package/ci/installer-roundtrip.test.js +159 -0
  278. package/ci/invariant-routing.test.js +74 -0
  279. package/ci/issue99-runtime.test.js +218 -0
  280. package/ci/mechanism-2a-rule-of-3.test.js +46 -0
  281. package/ci/mechanism-2aa-codex-action-gate-policy.test.js +117 -0
  282. package/ci/mechanism-2ab-openai-plugin-sync-integrity.test.js +80 -0
  283. package/ci/mechanism-2b-boundary-guard.test.js +16 -0
  284. package/ci/mechanism-2c-state-persist.test.js +29 -0
  285. package/ci/mechanism-2d-fact-audit.test.js +18 -0
  286. package/ci/mechanism-2e-scope-guard.test.js +24 -0
  287. package/ci/mechanism-2f-stop-gate.test.js +23 -0
  288. package/ci/mechanism-2g-platform-ignore.test.js +88 -0
  289. package/ci/mechanism-2h-installer-manifest.test.js +147 -0
  290. package/ci/mechanism-2i-crlf-frontmatter.test.js +145 -0
  291. package/ci/mechanism-2i-install-verification.test.js +34 -0
  292. package/ci/mechanism-2j-behavioral-runner.test.js +62 -0
  293. package/ci/mechanism-2k-reference-check.test.js +75 -0
  294. package/ci/mechanism-2l-multi-agent-workspace.test.js +301 -0
  295. package/ci/mechanism-2m-self-repo-guard.test.js +65 -0
  296. package/ci/mechanism-2n-opencode-plugin.test.js +461 -0
  297. package/ci/mechanism-2o-state-home-isolation.test.js +183 -0
  298. package/ci/mechanism-2p-installer-links.test.js +183 -0
  299. package/ci/mechanism-2q-installer-global-shared-store.test.js +132 -0
  300. package/ci/mechanism-2r-uninstall-flags.test.js +148 -0
  301. package/ci/mechanism-2s-tdd-quality.test.js +203 -0
  302. package/ci/mechanism-2t-disclosure.test.js +90 -0
  303. package/ci/mechanism-2t-evidence-triage.test.js +200 -0
  304. package/ci/mechanism-2t-issue-20.test.js +75 -0
  305. package/ci/mechanism-2t-platform-skill-targets.test.js +164 -0
  306. package/ci/mechanism-2t-transcript-parser.test.js +179 -0
  307. package/ci/mechanism-2t-workspace-identity.test.js +200 -0
  308. package/ci/mechanism-2u-issue-42-regressions.test.js +239 -0
  309. package/ci/mechanism-2u-issue-44.test.js +35 -0
  310. package/ci/mechanism-2v-verifier-boundaries.test.js +138 -0
  311. package/ci/mechanism-2w-platform-compatibility.test.js +148 -0
  312. package/ci/mechanism-2x-release-automation.test.js +157 -0
  313. package/ci/mechanism-2x-release-commit-message.test.js +66 -0
  314. package/ci/mechanism-2y-release-tooling-compat.test.js +47 -0
  315. package/ci/mechanism-2z-claude-plugin-manifest.test.js +29 -0
  316. package/ci/mechanism-test.js +71 -0
  317. package/ci/mutation-check.js +53 -0
  318. package/ci/mutation-loader.js +57 -0
  319. package/ci/negative-controls.js +114 -0
  320. package/ci/openai-plugin-package.test.js +182 -0
  321. package/ci/openai-plugin-runtime.test.js +175 -0
  322. package/ci/openai-plugin-submission.test.js +101 -0
  323. package/ci/phase4-ensemble-memory.test.js +307 -0
  324. package/ci/reference-check.js +160 -0
  325. package/ci/release-consistency-check.js +146 -0
  326. package/ci/router-phase2-safety.test.js +81 -0
  327. package/ci/router-workflow-plan.test.js +264 -0
  328. package/ci/routing-check.js +91 -0
  329. package/{eval-framework → ci}/runner.js +57 -56
  330. package/ci/skill-routing-check.js +135 -0
  331. package/ci/test-behavioral-case-validation.js +62 -0
  332. package/ci/test-helper.js +114 -0
  333. package/ci/test-negative-controls.js +148 -0
  334. package/ci/workflow-plan-consumers-edge.test.js +72 -0
  335. package/ci/workflow-plan-consumers.test.js +276 -0
  336. package/commitlint.config.js +25 -0
  337. package/docker-verify.sh +266 -266
  338. package/docs/architecture.md +179 -95
  339. package/docs/audit.md +55 -0
  340. package/docs/codex-action-gate.md +90 -0
  341. package/docs/issue-20-rollup.md +47 -0
  342. package/docs/mechanism-first-skill-mesh.md +165 -0
  343. package/docs/openai-plugin.md +118 -0
  344. package/docs/philosophy.md +58 -45
  345. package/docs/platform-capabilities.md +73 -0
  346. package/docs/platform-compatibility.json +270 -0
  347. package/docs/reflection.md +63 -34
  348. package/docs/release-evidence.md +25 -0
  349. package/docs/routing.md +171 -45
  350. package/docs/security-audit.md +38 -0
  351. package/docs/troubleshooting.md +320 -0
  352. package/docs/verifier-boundaries.md +45 -0
  353. package/docs/workflows/environment-detection.md +10 -10
  354. package/docs/workflows/eval-harness.md +13 -6
  355. package/docs/workflows/fable-discipline.md +9 -9
  356. package/docs/workflows/fable-mode.md +85 -32
  357. package/docs/workflows/find-skills.md +76 -0
  358. package/docs/workflows/git-commit.md +18 -9
  359. package/docs/workflows/grill-me.md +11 -11
  360. package/docs/workflows/grill-with-docs.md +14 -7
  361. package/docs/workflows/harness-everything.md +95 -92
  362. package/docs/workflows/improve-codebase-architecture.md +15 -7
  363. package/docs/workflows/install-cognitive-os.md +60 -60
  364. package/docs/workflows/multi-agent-workspace.md +54 -0
  365. package/docs/workflows/repo-docs.md +12 -7
  366. package/docs/workflows/security-review.md +26 -7
  367. package/docs/workflows/self-evolve.md +53 -37
  368. package/docs/workflows/skill-creator.md +80 -75
  369. package/docs/workflows/skill-style.md +64 -64
  370. package/docs/workflows/tdd.md +78 -39
  371. package/docs/workflows/to-spec.md +83 -0
  372. package/docs/workflows/to-tickets.md +80 -0
  373. package/docs/workflows/todo-driven-workflow.md +67 -36
  374. package/docs/workflows/using-git-worktrees.md +12 -8
  375. package/docs/workflows/verification-loop.md +16 -14
  376. package/docs/workflows/verify-before-claim.md +12 -8
  377. package/docs/workflows/zoom-out.md +22 -10
  378. package/environment-detection/SKILL.md +25 -61
  379. package/environment-detection/references/shell-syntax-rules.md +76 -0
  380. package/environment-detection/scripts/preflight.js +103 -93
  381. package/eval-framework/fixtures/bad-frontmatter-colon/SKILL.md +14 -0
  382. package/eval-framework/fixtures/duplicate-desc-skill-a/SKILL.md +14 -0
  383. package/eval-framework/fixtures/duplicate-desc-skill-b/SKILL.md +14 -0
  384. package/eval-framework/fixtures/missing-delimiter/SKILL.md +13 -0
  385. package/eval-framework/fixtures/over-budget-skill/SKILL.md +36 -0
  386. package/eval-harness/SKILL.md +34 -51
  387. package/eval-harness/references/scoring-rubric.md +68 -0
  388. package/eval-harness/scripts/evaluate.js +79 -61
  389. package/evals/environment-detection/eval.yaml +26 -0
  390. package/evals/environment-detection/tasks/negative-trigger.yaml +16 -0
  391. package/evals/environment-detection/tasks/positive-trigger.yaml +15 -0
  392. package/evals/eval-harness/eval.yaml +26 -0
  393. package/evals/eval-harness/tasks/negative-trigger.yaml +16 -0
  394. package/evals/eval-harness/tasks/positive-trigger.yaml +15 -0
  395. package/evals/evaluation-reports.md +14 -0
  396. package/evals/fable-discipline/eval.yaml +26 -0
  397. package/evals/fable-discipline/tasks/negative-trigger.yaml +16 -0
  398. package/evals/fable-discipline/tasks/positive-trigger.yaml +15 -0
  399. package/evals/fable-mode/eval.yaml +26 -0
  400. package/evals/fable-mode/tasks/negative-tier2-no-model.yaml +18 -0
  401. package/evals/fable-mode/tasks/negative-trigger.yaml +16 -0
  402. package/evals/fable-mode/tasks/positive-haiku-mode.yaml +16 -0
  403. package/evals/fable-mode/tasks/positive-opus-mode.yaml +16 -0
  404. package/evals/fable-mode/tasks/positive-sonnet-mode.yaml +16 -0
  405. package/evals/fable-mode/tasks/positive-trigger.yaml +15 -0
  406. package/evals/find-skills/eval.yaml +26 -0
  407. package/evals/find-skills/tasks/negative-trigger.yaml +16 -0
  408. package/evals/find-skills/tasks/positive-trigger.yaml +15 -0
  409. package/evals/git-commit/eval.yaml +26 -0
  410. package/evals/git-commit/tasks/negative-trigger.yaml +16 -0
  411. package/evals/git-commit/tasks/positive-trigger.yaml +15 -0
  412. package/evals/grill-me/eval.yaml +26 -0
  413. package/evals/grill-me/tasks/negative-trigger.yaml +16 -0
  414. package/evals/grill-me/tasks/positive-trigger.yaml +15 -0
  415. package/evals/grill-with-docs/eval.yaml +26 -0
  416. package/evals/grill-with-docs/tasks/negative-trigger.yaml +16 -0
  417. package/evals/grill-with-docs/tasks/positive-trigger.yaml +15 -0
  418. package/evals/harness-everything/eval.yaml +26 -0
  419. package/evals/harness-everything/tasks/negative-non-software.yaml +16 -0
  420. package/evals/harness-everything/tasks/negative-skill-indicated.yaml +15 -0
  421. package/evals/harness-everything/tasks/positive-tier1.yaml +16 -0
  422. package/evals/harness-everything/tasks/positive-tier2.yaml +16 -0
  423. package/evals/harness-everything/tasks/positive-tier3.yaml +16 -0
  424. package/evals/improve-codebase-architecture/eval.yaml +26 -0
  425. package/evals/improve-codebase-architecture/tasks/negative-trigger.yaml +16 -0
  426. package/evals/improve-codebase-architecture/tasks/positive-trigger.yaml +15 -0
  427. package/evals/install-cognitive-os/eval.yaml +26 -0
  428. package/evals/install-cognitive-os/tasks/negative-trigger.yaml +16 -0
  429. package/evals/install-cognitive-os/tasks/positive-trigger.yaml +15 -0
  430. package/evals/multi-agent-workspace/eval.yaml +26 -0
  431. package/evals/multi-agent-workspace/tasks/negative-trigger.yaml +15 -0
  432. package/evals/multi-agent-workspace/tasks/positive-trigger.yaml +15 -0
  433. package/evals/repo-docs/eval.yaml +26 -0
  434. package/evals/repo-docs/tasks/negative-trigger.yaml +16 -0
  435. package/evals/repo-docs/tasks/positive-trigger.yaml +15 -0
  436. package/evals/rewrite-commits/eval.yaml +26 -0
  437. package/evals/rewrite-commits/tasks/negative-trigger.yaml +16 -0
  438. package/evals/rewrite-commits/tasks/positive-trigger.yaml +15 -0
  439. package/evals/security-review/eval.yaml +26 -0
  440. package/evals/security-review/tasks/negative-trigger.yaml +16 -0
  441. package/evals/security-review/tasks/positive-trigger.yaml +15 -0
  442. package/evals/self-evolve/eval.yaml +26 -0
  443. package/evals/self-evolve/tasks/negative-trigger.yaml +16 -0
  444. package/evals/self-evolve/tasks/positive-trigger.yaml +15 -0
  445. package/evals/skill-creator/eval.yaml +26 -0
  446. package/evals/skill-creator/tasks/negative-trigger.yaml +16 -0
  447. package/evals/skill-creator/tasks/positive-trigger.yaml +15 -0
  448. package/evals/skill-style/eval.yaml +26 -0
  449. package/evals/skill-style/tasks/negative-trigger.yaml +16 -0
  450. package/evals/skill-style/tasks/positive-trigger.yaml +15 -0
  451. package/evals/tdd/eval.yaml +26 -0
  452. package/evals/tdd/tasks/negative-trivia.yaml +16 -0
  453. package/evals/tdd/tasks/positive-bugfix.yaml +15 -0
  454. package/evals/tdd/tasks/positive-feature.yaml +16 -0
  455. package/evals/tdd/tasks/positive-refactor.yaml +15 -0
  456. package/evals/to-spec/eval.yaml +26 -0
  457. package/evals/to-spec/tasks/negative-trigger.yaml +16 -0
  458. package/evals/to-spec/tasks/positive-trigger.yaml +15 -0
  459. package/evals/to-tickets/eval.yaml +26 -0
  460. package/evals/to-tickets/tasks/negative-trigger.yaml +15 -0
  461. package/evals/to-tickets/tasks/positive-trigger.yaml +15 -0
  462. package/evals/todo-driven-workflow/eval.yaml +26 -0
  463. package/evals/todo-driven-workflow/tasks/negative-single-edit.yaml +16 -0
  464. package/evals/todo-driven-workflow/tasks/positive-multi-step.yaml +15 -0
  465. package/evals/todo-driven-workflow/tasks/positive-refactor-flow.yaml +15 -0
  466. package/evals/using-git-worktrees/eval.yaml +26 -0
  467. package/evals/using-git-worktrees/tasks/negative-trigger.yaml +15 -0
  468. package/evals/using-git-worktrees/tasks/positive-trigger.yaml +15 -0
  469. package/evals/verification-loop/eval.yaml +26 -0
  470. package/evals/verification-loop/tasks/negative-discussion.yaml +16 -0
  471. package/evals/verification-loop/tasks/positive-pre-ship.yaml +15 -0
  472. package/evals/verify-before-claim/eval.yaml +26 -0
  473. package/evals/verify-before-claim/tasks/negative-trigger.yaml +16 -0
  474. package/evals/verify-before-claim/tasks/positive-trigger.yaml +15 -0
  475. package/evals/zoom-out/eval.yaml +26 -0
  476. package/evals/zoom-out/tasks/negative-trivial-edit.yaml +16 -0
  477. package/evals/zoom-out/tasks/positive-repeated-failure.yaml +15 -0
  478. package/fable-discipline/SKILL.md +31 -28
  479. package/fable-discipline/references/discipline-rules.md +22 -0
  480. package/fable-mode/CONTRACT-FORMAT.md +165 -51
  481. package/fable-mode/SKILL.md +31 -43
  482. package/fable-mode/agents/fable-orchestrator.md +159 -92
  483. package/fable-mode/agents/fable-verifier.md +32 -32
  484. package/fable-mode/agents/fable-worker-haiku.md +52 -48
  485. package/fable-mode/agents/fable-worker-sonnet.md +53 -49
  486. package/fable-mode/execution-guardrails/SKILL.md +43 -87
  487. package/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
  488. package/fable-mode/fable-haiku/SKILL.md +36 -48
  489. package/fable-mode/fable-haiku/references/routing-notes.md +26 -0
  490. package/fable-mode/fable-opus/SKILL.md +36 -0
  491. package/fable-mode/fable-sonnet/SKILL.md +36 -0
  492. package/fable-mode/model-matrix.json +32 -0
  493. package/fable-mode/references/execution-phases.md +37 -0
  494. package/fable-mode/references/model-matrix.md +39 -0
  495. package/fable-mode/scripts/ensemble-review.js +371 -0
  496. package/fable-mode/scripts/model-selector.js +260 -0
  497. package/fable-mode/scripts/workflow-plan-consumer.js +337 -0
  498. package/find-skills/SKILL.md +48 -0
  499. package/find-skills/references/discovery-flow.md +102 -0
  500. package/find-skills/scripts/use-skill.js +112 -0
  501. package/git-commit/SKILL.md +28 -45
  502. package/git-commit/guides/ANGULAR_STYLE.md +60 -60
  503. package/git-commit/guides/COMMIT_GENERATION.md +23 -23
  504. package/git-commit/guides/LANGUAGE_DETECTION.md +16 -16
  505. package/git-commit/guides/MAIN_REPO.md +14 -14
  506. package/git-commit/guides/SUBMODULES.md +27 -27
  507. package/git-commit/references/commit-flow.md +30 -0
  508. package/grill-me/SKILL.md +34 -27
  509. package/grill-me/references/grilling-playbook.md +38 -0
  510. package/grill-with-docs/ADR-FORMAT.md +47 -47
  511. package/grill-with-docs/CONTEXT-FORMAT.md +63 -63
  512. package/grill-with-docs/SKILL.md +33 -91
  513. package/grill-with-docs/references/session-playbook.md +99 -0
  514. package/harness-everything/SKILL.md +27 -125
  515. package/harness-everything/examples/README.md +9 -9
  516. package/harness-everything/examples/todo-workflow.md +22 -22
  517. package/harness-everything/references/router-workflow-plan.md +128 -0
  518. package/harness-everything/references/skill-registry.md +39 -0
  519. package/harness-everything/references/triage-and-tiers.md +193 -0
  520. package/harness-everything/schemas/router-task-shape.schema.json +126 -0
  521. package/harness-everything/schemas/router-workflow-plan.schema.json +149 -0
  522. package/harness-everything/scripts/bootstrap.js +212 -140
  523. package/harness-everything/scripts/ensemble-policy.js +102 -0
  524. package/harness-everything/scripts/kernel-router.js +212 -0
  525. package/harness-everything/scripts/router-contract.js +612 -0
  526. package/harness-everything/scripts/routing-keywords.json +320 -0
  527. package/harness-everything/scripts/self-heal.js +250 -189
  528. package/harness-everything/scripts/tier-router.js +459 -219
  529. package/harness-everything/scripts/verify-gate.js +100 -31
  530. package/hooks/hooks.json +200 -155
  531. package/hooks/scripts/action-gate-rules.json +77 -0
  532. package/hooks/scripts/action-gate.js +528 -0
  533. package/hooks/scripts/atomic-commit-check.js +68 -68
  534. package/hooks/scripts/boundary-guard.js +55 -55
  535. package/hooks/scripts/codex-action-gate-post.js +46 -0
  536. package/hooks/scripts/codex-permission-request.js +140 -0
  537. package/hooks/scripts/context-compact.js +115 -114
  538. package/hooks/scripts/contract-test.js +146 -79
  539. package/hooks/scripts/depth-guard.js +65 -65
  540. package/hooks/scripts/lib/fable-contracts.js +121 -0
  541. package/hooks/scripts/lib/harness-state.js +275 -228
  542. package/hooks/scripts/lib/platforms/claude.js +97 -61
  543. package/hooks/scripts/lib/platforms/codex.js +42 -50
  544. package/hooks/scripts/lib/platforms/continue.js +30 -12
  545. package/hooks/scripts/lib/platforms/copilot.js +36 -42
  546. package/hooks/scripts/lib/platforms/cursor.js +23 -5
  547. package/hooks/scripts/lib/platforms/hermes.js +108 -57
  548. package/hooks/scripts/lib/platforms/index.js +17 -17
  549. package/hooks/scripts/lib/platforms/worktrees.js +20 -20
  550. package/hooks/scripts/openai-session-start.js +81 -0
  551. package/hooks/scripts/reset-circuit-breaker.js +30 -30
  552. package/hooks/scripts/rule-of-3-tracker.js +125 -91
  553. package/hooks/scripts/rule-of-3.js +195 -176
  554. package/hooks/scripts/state-persist.js +100 -99
  555. package/hooks/scripts/stop-gate.js +80 -80
  556. package/hooks/scripts/subagent-scope-guard.js +194 -88
  557. package/hooks/scripts/subagent-start.js +19 -0
  558. package/hooks/scripts/subagent-stop.js +6 -0
  559. package/improve-codebase-architecture/SKILL.md +29 -35
  560. package/improve-codebase-architecture/guides/DEEPENING.md +37 -37
  561. package/improve-codebase-architecture/guides/HTML-REPORT.md +123 -123
  562. package/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -44
  563. package/improve-codebase-architecture/guides/LANGUAGE.md +53 -53
  564. package/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
  565. package/improve-codebase-architecture/references/README.md +16 -0
  566. package/install-cognitive-os/SKILL.md +30 -81
  567. package/install-cognitive-os/references/cognitive-loop.md +27 -0
  568. package/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
  569. package/multi-agent-workspace/SKILL.md +38 -0
  570. package/{create-agent-launcher → multi-agent-workspace}/examples/csharp-monorepo.md +123 -123
  571. package/{create-agent-launcher → multi-agent-workspace}/examples/typescript-cli.md +126 -126
  572. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-claude.md +77 -77
  573. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-codex.md +146 -146
  574. package/multi-agent-workspace/guidelines/platform-continue.md +38 -0
  575. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-copilot.md +74 -74
  576. package/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
  577. package/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
  578. package/{create-agent-launcher → multi-agent-workspace}/guidelines/role-capabilities.md +108 -108
  579. package/multi-agent-workspace/references/agency-agents.md +31 -0
  580. package/multi-agent-workspace/references/architecture-guide.md +36 -0
  581. package/multi-agent-workspace/references/orchestration.md +65 -0
  582. package/multi-agent-workspace/scripts/agency-catalog.js +190 -0
  583. package/multi-agent-workspace/scripts/consume-workflow-plan.js +129 -0
  584. package/multi-agent-workspace/scripts/index_memory.js +104 -0
  585. package/multi-agent-workspace/scripts/path-boundary.js +59 -0
  586. package/multi-agent-workspace/scripts/project-docs-resolver.js +357 -0
  587. package/multi-agent-workspace/scripts/scaffold.js +408 -0
  588. package/multi-agent-workspace/templates/AGENTS.md +20 -0
  589. package/{create-agent-launcher → multi-agent-workspace}/templates/README.md +17 -17
  590. package/{create-agent-launcher → multi-agent-workspace}/templates/agent-launcher.md +67 -67
  591. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-csharp.md +55 -55
  592. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-polyglot.md +61 -61
  593. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-ts.md +56 -56
  594. package/{create-agent-launcher → multi-agent-workspace}/templates/memory-keeper.md +36 -36
  595. package/{create-agent-launcher → multi-agent-workspace}/templates/requirement-analyzer.md +65 -65
  596. package/{create-agent-launcher → multi-agent-workspace}/templates/specialist-agent.md +34 -34
  597. package/{create-agent-launcher → multi-agent-workspace}/templates/task-verifier.md +55 -55
  598. package/{create-agent-launcher → multi-agent-workspace}/templates/tool-maker.md +32 -32
  599. package/multi-agent-workspace/workflows/01-init.md +22 -0
  600. package/multi-agent-workspace/workflows/02-analysis.md +23 -0
  601. package/multi-agent-workspace/workflows/03-generation.md +25 -0
  602. package/multi-agent-workspace/workflows/04-launcher.md +16 -0
  603. package/opencode-plugin/README.md +137 -0
  604. package/opencode-plugin/hooks/verify.js +190 -0
  605. package/opencode-plugin/index.mjs +547 -0
  606. package/opencode-plugin/plugin.json +9 -0
  607. package/package.json +63 -22
  608. package/plugins/harness-everything/.codex-plugin/plugin.json +39 -0
  609. package/plugins/harness-everything/hooks/hooks.json +197 -0
  610. package/plugins/harness-everything/hooks/scripts/action-gate-rules.json +77 -0
  611. package/plugins/harness-everything/hooks/scripts/action-gate.js +528 -0
  612. package/plugins/harness-everything/hooks/scripts/atomic-commit-check.js +68 -0
  613. package/plugins/harness-everything/hooks/scripts/boundary-guard.js +55 -0
  614. package/plugins/harness-everything/hooks/scripts/codex-action-gate-post.js +46 -0
  615. package/plugins/harness-everything/hooks/scripts/codex-permission-request.js +140 -0
  616. package/plugins/harness-everything/hooks/scripts/context-compact.js +115 -0
  617. package/plugins/harness-everything/hooks/scripts/contract-test.js +146 -0
  618. package/plugins/harness-everything/hooks/scripts/depth-guard.js +65 -0
  619. package/plugins/harness-everything/hooks/scripts/lib/fable-contracts.js +121 -0
  620. package/plugins/harness-everything/hooks/scripts/lib/harness-state.js +275 -0
  621. package/plugins/harness-everything/hooks/scripts/lib/platforms/claude.js +168 -0
  622. package/plugins/harness-everything/hooks/scripts/lib/platforms/codex.js +88 -0
  623. package/plugins/harness-everything/hooks/scripts/lib/platforms/continue.js +91 -0
  624. package/plugins/harness-everything/hooks/scripts/lib/platforms/copilot.js +85 -0
  625. package/plugins/harness-everything/hooks/scripts/lib/platforms/cursor.js +89 -0
  626. package/plugins/harness-everything/hooks/scripts/lib/platforms/hermes.js +108 -0
  627. package/plugins/harness-everything/hooks/scripts/lib/platforms/index.js +17 -0
  628. package/plugins/harness-everything/hooks/scripts/lib/platforms/worktrees.js +20 -0
  629. package/plugins/harness-everything/hooks/scripts/lib/workspace.js +290 -0
  630. package/plugins/harness-everything/hooks/scripts/openai-session-start.js +81 -0
  631. package/plugins/harness-everything/hooks/scripts/reset-circuit-breaker.js +30 -0
  632. package/plugins/harness-everything/hooks/scripts/rule-of-3-tracker.js +125 -0
  633. package/plugins/harness-everything/hooks/scripts/rule-of-3.js +195 -0
  634. package/plugins/harness-everything/hooks/scripts/state-persist.js +100 -0
  635. package/plugins/harness-everything/hooks/scripts/stop-gate.js +80 -0
  636. package/plugins/harness-everything/hooks/scripts/subagent-scope-guard.js +194 -0
  637. package/plugins/harness-everything/hooks/scripts/subagent-start.js +19 -0
  638. package/plugins/harness-everything/hooks/scripts/subagent-stop.js +6 -0
  639. package/plugins/harness-everything/hooks/session-start.js +81 -0
  640. package/plugins/harness-everything/plugin.json +43 -0
  641. package/plugins/harness-everything/scripts/lib/advisory-text.js +174 -0
  642. package/plugins/harness-everything/skills/environment-detection/SKILL.md +41 -0
  643. package/plugins/harness-everything/skills/environment-detection/references/shell-syntax-rules.md +76 -0
  644. package/plugins/harness-everything/skills/environment-detection/scripts/preflight.js +103 -0
  645. package/plugins/harness-everything/skills/eval-harness/SKILL.md +42 -0
  646. package/plugins/harness-everything/skills/eval-harness/references/scoring-rubric.md +68 -0
  647. package/plugins/harness-everything/skills/eval-harness/scripts/evaluate.js +79 -0
  648. package/plugins/harness-everything/skills/fable-discipline/SKILL.md +41 -0
  649. package/plugins/harness-everything/skills/fable-discipline/references/discipline-rules.md +22 -0
  650. package/plugins/harness-everything/skills/fable-mode/CONTRACT-FORMAT.md +165 -0
  651. package/plugins/harness-everything/skills/fable-mode/SKILL.md +39 -0
  652. package/plugins/harness-everything/skills/fable-mode/agents/fable-orchestrator.md +159 -0
  653. package/plugins/harness-everything/skills/fable-mode/agents/fable-verifier.md +32 -0
  654. package/plugins/harness-everything/skills/fable-mode/agents/fable-worker-haiku.md +52 -0
  655. package/plugins/harness-everything/skills/fable-mode/agents/fable-worker-sonnet.md +53 -0
  656. package/plugins/harness-everything/skills/fable-mode/execution-guardrails/SKILL.md +43 -0
  657. package/plugins/harness-everything/skills/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
  658. package/plugins/harness-everything/skills/fable-mode/fable-haiku/SKILL.md +36 -0
  659. package/plugins/harness-everything/skills/fable-mode/fable-haiku/references/routing-notes.md +26 -0
  660. package/plugins/harness-everything/skills/fable-mode/fable-opus/SKILL.md +36 -0
  661. package/plugins/harness-everything/skills/fable-mode/fable-sonnet/SKILL.md +36 -0
  662. package/plugins/harness-everything/skills/fable-mode/model-matrix.json +32 -0
  663. package/plugins/harness-everything/skills/fable-mode/references/execution-phases.md +37 -0
  664. package/plugins/harness-everything/skills/fable-mode/references/model-matrix.md +39 -0
  665. package/plugins/harness-everything/skills/fable-mode/scripts/ensemble-review.js +371 -0
  666. package/plugins/harness-everything/skills/fable-mode/scripts/model-selector.js +260 -0
  667. package/plugins/harness-everything/skills/fable-mode/scripts/workflow-plan-consumer.js +337 -0
  668. package/plugins/harness-everything/skills/find-skills/SKILL.md +48 -0
  669. package/plugins/harness-everything/skills/find-skills/references/discovery-flow.md +102 -0
  670. package/plugins/harness-everything/skills/find-skills/scripts/use-skill.js +112 -0
  671. package/plugins/harness-everything/skills/git-commit/SKILL.md +38 -0
  672. package/plugins/harness-everything/skills/git-commit/guides/ANGULAR_STYLE.md +61 -0
  673. package/plugins/harness-everything/skills/git-commit/guides/COMMIT_GENERATION.md +24 -0
  674. package/plugins/harness-everything/skills/git-commit/guides/LANGUAGE_DETECTION.md +16 -0
  675. package/plugins/harness-everything/skills/git-commit/guides/MAIN_REPO.md +15 -0
  676. package/plugins/harness-everything/skills/git-commit/guides/SUBMODULES.md +27 -0
  677. package/plugins/harness-everything/skills/git-commit/references/commit-flow.md +30 -0
  678. package/plugins/harness-everything/skills/grill-me/SKILL.md +43 -0
  679. package/plugins/harness-everything/skills/grill-me/references/grilling-playbook.md +38 -0
  680. package/plugins/harness-everything/skills/grill-with-docs/ADR-FORMAT.md +47 -0
  681. package/plugins/harness-everything/skills/grill-with-docs/CONTEXT-FORMAT.md +63 -0
  682. package/plugins/harness-everything/skills/grill-with-docs/SKILL.md +41 -0
  683. package/plugins/harness-everything/skills/grill-with-docs/references/session-playbook.md +99 -0
  684. package/plugins/harness-everything/skills/harness-everything/SKILL.md +43 -0
  685. package/plugins/harness-everything/skills/harness-everything/examples/README.md +9 -0
  686. package/plugins/harness-everything/skills/harness-everything/examples/todo-workflow.md +22 -0
  687. package/plugins/harness-everything/skills/harness-everything/references/router-workflow-plan.md +128 -0
  688. package/plugins/harness-everything/skills/harness-everything/references/skill-registry.md +39 -0
  689. package/plugins/harness-everything/skills/harness-everything/references/triage-and-tiers.md +193 -0
  690. package/plugins/harness-everything/skills/harness-everything/schemas/router-task-shape.schema.json +126 -0
  691. package/plugins/harness-everything/skills/harness-everything/schemas/router-workflow-plan.schema.json +149 -0
  692. package/plugins/harness-everything/skills/harness-everything/scripts/bootstrap.js +212 -0
  693. package/plugins/harness-everything/skills/harness-everything/scripts/ensemble-policy.js +102 -0
  694. package/plugins/harness-everything/skills/harness-everything/scripts/kernel-router.js +212 -0
  695. package/plugins/harness-everything/skills/harness-everything/scripts/router-contract.js +612 -0
  696. package/plugins/harness-everything/skills/harness-everything/scripts/routing-keywords.json +320 -0
  697. package/plugins/harness-everything/skills/harness-everything/scripts/self-heal.js +250 -0
  698. package/plugins/harness-everything/skills/harness-everything/scripts/tier-router.js +459 -0
  699. package/plugins/harness-everything/skills/harness-everything/scripts/verify-gate.js +100 -0
  700. package/plugins/harness-everything/skills/improve-codebase-architecture/SKILL.md +38 -0
  701. package/plugins/harness-everything/skills/improve-codebase-architecture/guides/DEEPENING.md +37 -0
  702. package/plugins/harness-everything/skills/improve-codebase-architecture/guides/HTML-REPORT.md +123 -0
  703. package/plugins/harness-everything/skills/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -0
  704. package/plugins/harness-everything/skills/improve-codebase-architecture/guides/LANGUAGE.md +53 -0
  705. package/plugins/harness-everything/skills/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
  706. package/plugins/harness-everything/skills/improve-codebase-architecture/references/README.md +16 -0
  707. package/plugins/harness-everything/skills/install-cognitive-os/SKILL.md +44 -0
  708. package/plugins/harness-everything/skills/install-cognitive-os/references/cognitive-loop.md +27 -0
  709. package/plugins/harness-everything/skills/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
  710. package/plugins/harness-everything/skills/multi-agent-workspace/SKILL.md +38 -0
  711. package/plugins/harness-everything/skills/multi-agent-workspace/examples/csharp-monorepo.md +123 -0
  712. package/plugins/harness-everything/skills/multi-agent-workspace/examples/typescript-cli.md +126 -0
  713. package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-claude.md +77 -0
  714. package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-codex.md +146 -0
  715. package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-continue.md +38 -0
  716. package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-copilot.md +74 -0
  717. package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
  718. package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
  719. package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/role-capabilities.md +108 -0
  720. package/plugins/harness-everything/skills/multi-agent-workspace/references/agency-agents.md +31 -0
  721. package/plugins/harness-everything/skills/multi-agent-workspace/references/architecture-guide.md +36 -0
  722. package/plugins/harness-everything/skills/multi-agent-workspace/references/orchestration.md +65 -0
  723. package/plugins/harness-everything/skills/multi-agent-workspace/scripts/agency-catalog.js +190 -0
  724. package/plugins/harness-everything/skills/multi-agent-workspace/scripts/consume-workflow-plan.js +129 -0
  725. package/plugins/harness-everything/skills/multi-agent-workspace/scripts/index_memory.js +104 -0
  726. package/plugins/harness-everything/skills/multi-agent-workspace/scripts/path-boundary.js +59 -0
  727. package/plugins/harness-everything/skills/multi-agent-workspace/scripts/project-docs-resolver.js +357 -0
  728. package/plugins/harness-everything/skills/multi-agent-workspace/scripts/scaffold.js +408 -0
  729. package/plugins/harness-everything/skills/multi-agent-workspace/templates/AGENTS.md +20 -0
  730. package/plugins/harness-everything/skills/multi-agent-workspace/templates/README.md +17 -0
  731. package/plugins/harness-everything/skills/multi-agent-workspace/templates/agent-launcher.md +68 -0
  732. package/plugins/harness-everything/skills/multi-agent-workspace/templates/backend-developer-csharp.md +56 -0
  733. package/plugins/harness-everything/skills/multi-agent-workspace/templates/backend-developer-polyglot.md +62 -0
  734. package/plugins/harness-everything/skills/multi-agent-workspace/templates/backend-developer-ts.md +57 -0
  735. package/plugins/harness-everything/skills/multi-agent-workspace/templates/memory-keeper.md +37 -0
  736. package/plugins/harness-everything/skills/multi-agent-workspace/templates/requirement-analyzer.md +66 -0
  737. package/plugins/harness-everything/skills/multi-agent-workspace/templates/specialist-agent.md +34 -0
  738. package/plugins/harness-everything/skills/multi-agent-workspace/templates/task-verifier.md +56 -0
  739. package/plugins/harness-everything/skills/multi-agent-workspace/templates/tool-maker.md +33 -0
  740. package/plugins/harness-everything/skills/multi-agent-workspace/workflows/01-init.md +22 -0
  741. package/plugins/harness-everything/skills/multi-agent-workspace/workflows/02-analysis.md +23 -0
  742. package/plugins/harness-everything/skills/multi-agent-workspace/workflows/03-generation.md +25 -0
  743. package/plugins/harness-everything/skills/multi-agent-workspace/workflows/04-launcher.md +16 -0
  744. package/plugins/harness-everything/skills/repo-docs/SKILL.md +42 -0
  745. package/plugins/harness-everything/skills/repo-docs/references/process-guide.md +60 -0
  746. package/plugins/harness-everything/skills/repo-docs/templates/agents-template.md +264 -0
  747. package/plugins/harness-everything/skills/repo-docs/templates/knowledge-agents-template.md +50 -0
  748. package/plugins/harness-everything/skills/repo-docs/templates/knowledge-readme-template.md +83 -0
  749. package/plugins/harness-everything/skills/repo-docs/templates/manual-recon.md +117 -0
  750. package/plugins/harness-everything/skills/repo-docs/templates/multi-skills-readme-template.md +72 -0
  751. package/plugins/harness-everything/skills/repo-docs/templates/product-agents-template.md +78 -0
  752. package/plugins/harness-everything/skills/repo-docs/templates/product-readme-template.md +95 -0
  753. package/plugins/harness-everything/skills/repo-docs/templates/readme-template.md +136 -0
  754. package/plugins/harness-everything/skills/repo-docs/templates/single-skill-readme-template.md +70 -0
  755. package/plugins/harness-everything/skills/repo-docs/templates/skills-agents-template.md +60 -0
  756. package/plugins/harness-everything/skills/rewrite-commits/SKILL.md +37 -0
  757. package/plugins/harness-everything/skills/rewrite-commits/references/workflow.md +18 -0
  758. package/plugins/harness-everything/skills/security-review/SKILL.md +47 -0
  759. package/plugins/harness-everything/skills/security-review/guides/OWASP-PATTERNS.md +31 -0
  760. package/plugins/harness-everything/skills/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
  761. package/plugins/harness-everything/skills/security-review/references/security-checklist.md +478 -0
  762. package/plugins/harness-everything/skills/security-review/scripts/audit-secrets.js +85 -0
  763. package/plugins/harness-everything/skills/self-evolve/SKILL.md +45 -0
  764. package/plugins/harness-everything/skills/self-evolve/references/memory-resolution.md +61 -0
  765. package/plugins/harness-everything/skills/self-evolve/scripts/persist-memory.js +272 -0
  766. package/plugins/harness-everything/skills/self-evolve/scripts/register-dynamic-skill.js +253 -0
  767. package/plugins/harness-everything/skills/self-evolve/scripts/self-regression.js +125 -0
  768. package/plugins/harness-everything/skills/skill-creator/SKILL.md +47 -0
  769. package/plugins/harness-everything/skills/skill-creator/references/authoring-workflow.md +14 -0
  770. package/plugins/harness-everything/skills/skill-creator/references/dynamic-generation-contract.md +21 -0
  771. package/plugins/harness-everything/skills/skill-creator/references/quality-checklist.md +16 -0
  772. package/plugins/harness-everything/skills/skill-creator/references/quality-principles.md +81 -0
  773. package/plugins/harness-everything/skills/skill-creator/references/testing-workflow.md +27 -0
  774. package/plugins/harness-everything/skills/skill-style/SKILL.md +42 -0
  775. package/plugins/harness-everything/skills/skill-style/references/style-guide.md +62 -0
  776. package/plugins/harness-everything/skills/tdd/SKILL.md +38 -0
  777. package/plugins/harness-everything/skills/tdd/fixtures/pass-evidence.json +100 -0
  778. package/plugins/harness-everything/skills/tdd/fixtures/quality-scenarios.json +20 -0
  779. package/plugins/harness-everything/skills/tdd/guides/deep-modules.md +33 -0
  780. package/plugins/harness-everything/skills/tdd/guides/interface-design.md +31 -0
  781. package/plugins/harness-everything/skills/tdd/guides/mocking.md +59 -0
  782. package/plugins/harness-everything/skills/tdd/guides/refactoring.md +10 -0
  783. package/plugins/harness-everything/skills/tdd/guides/tests.md +61 -0
  784. package/plugins/harness-everything/skills/tdd/references/core-discipline.md +51 -0
  785. package/plugins/harness-everything/skills/tdd/references/integration-testing.md +13 -0
  786. package/plugins/harness-everything/skills/tdd/references/quality-model.md +68 -0
  787. package/plugins/harness-everything/skills/tdd/references/unit-testing.md +15 -0
  788. package/plugins/harness-everything/skills/tdd/schemas/quality-evidence.schema.json +211 -0
  789. package/plugins/harness-everything/skills/tdd/schemas/quality-report.schema.json +110 -0
  790. package/plugins/harness-everything/skills/tdd/scripts/quality-gate.js +475 -0
  791. package/plugins/harness-everything/skills/to-spec/SKILL.md +40 -0
  792. package/plugins/harness-everything/skills/to-spec/references/process.md +77 -0
  793. package/plugins/harness-everything/skills/to-spec/scripts/check-project-docs.js +239 -0
  794. package/plugins/harness-everything/skills/to-spec/scripts/project-docs-resolver.js +111 -0
  795. package/plugins/harness-everything/skills/to-spec/templates/cli-reference.md +31 -0
  796. package/plugins/harness-everything/skills/to-spec/templates/dev-doc.md +27 -0
  797. package/plugins/harness-everything/skills/to-spec/templates/feature-spec.md +59 -0
  798. package/plugins/harness-everything/skills/to-spec/templates/schema-doc.md +31 -0
  799. package/plugins/harness-everything/skills/to-tickets/SKILL.md +42 -0
  800. package/plugins/harness-everything/skills/to-tickets/references/publishing-and-templates.md +97 -0
  801. package/plugins/harness-everything/skills/todo-driven-workflow/SKILL.md +42 -0
  802. package/plugins/harness-everything/skills/todo-driven-workflow/references/execution-guide.md +27 -0
  803. package/plugins/harness-everything/skills/using-git-worktrees/SKILL.md +49 -0
  804. package/plugins/harness-everything/skills/using-git-worktrees/references/workflow-details.md +108 -0
  805. package/plugins/harness-everything/skills/verification-loop/SKILL.md +46 -0
  806. package/plugins/harness-everything/skills/verification-loop/references/verification-phases.md +116 -0
  807. package/plugins/harness-everything/skills/verification-loop/templates/verification-report.template.md +15 -0
  808. package/plugins/harness-everything/skills/verify-before-claim/SKILL.md +43 -0
  809. package/plugins/harness-everything/skills/verify-before-claim/references/verification-guide.md +73 -0
  810. package/plugins/harness-everything/skills/zoom-out/SKILL.md +42 -0
  811. package/plugins/harness-everything/skills/zoom-out/references/circuit-breaker.md +66 -0
  812. package/plugins/harness-everything/skills/zoom-out/templates/zoom-out-report.template.md +20 -0
  813. package/references/definition-of-done.md +67 -0
  814. package/references/performance-checklist.md +153 -0
  815. package/references/platform-advisory-template.md +58 -0
  816. package/references/security-checklist.md +205 -0
  817. package/repo-docs/SKILL.md +34 -37
  818. package/repo-docs/references/process-guide.md +60 -0
  819. package/repo-docs/templates/agents-template.md +264 -264
  820. package/repo-docs/templates/knowledge-agents-template.md +50 -50
  821. package/repo-docs/templates/knowledge-readme-template.md +83 -83
  822. package/repo-docs/templates/manual-recon.md +117 -117
  823. package/repo-docs/templates/multi-skills-readme-template.md +72 -72
  824. package/repo-docs/templates/product-agents-template.md +78 -78
  825. package/repo-docs/templates/product-readme-template.md +95 -95
  826. package/repo-docs/templates/readme-template.md +136 -136
  827. package/repo-docs/templates/single-skill-readme-template.md +70 -70
  828. package/repo-docs/templates/skills-agents-template.md +60 -60
  829. package/rewrite-commits/SKILL.md +22 -17
  830. package/rewrite-commits/references/workflow.md +18 -0
  831. package/scripts/build-openai-submission.js +158 -0
  832. package/scripts/installer.js +621 -506
  833. package/scripts/lib/advisory-text.js +33 -22
  834. package/scripts/lib/claude-hooks.js +18 -5
  835. package/scripts/lib/execution-contract.js +70 -0
  836. package/scripts/lib/gitignore.js +199 -80
  837. package/scripts/lib/manifest.js +83 -23
  838. package/scripts/lib/path-boundary.js +90 -0
  839. package/scripts/lib/prompts.js +1 -1
  840. package/scripts/lib/skills.js +191 -51
  841. package/scripts/lib/workspace.js +269 -7
  842. package/scripts/sync-openai-plugin.js +91 -0
  843. package/scripts/sync-release-version.js +212 -0
  844. package/scripts/verify-install.js +147 -0
  845. package/security-review/SKILL.md +33 -497
  846. package/security-review/guides/OWASP-PATTERNS.md +31 -0
  847. package/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
  848. package/security-review/references/security-checklist.md +478 -0
  849. package/security-review/scripts/audit-secrets.js +85 -0
  850. package/self-evolve/SKILL.md +36 -45
  851. package/self-evolve/references/memory-resolution.md +61 -0
  852. package/self-evolve/scripts/persist-memory.js +272 -40
  853. package/self-evolve/scripts/register-dynamic-skill.js +253 -0
  854. package/self-evolve/scripts/self-regression.js +125 -113
  855. package/skill-creator/SKILL.md +33 -77
  856. package/skill-creator/references/authoring-workflow.md +14 -0
  857. package/skill-creator/references/dynamic-generation-contract.md +21 -0
  858. package/skill-creator/references/quality-checklist.md +16 -0
  859. package/skill-creator/references/quality-principles.md +81 -81
  860. package/skill-creator/references/testing-workflow.md +27 -32
  861. package/skill-style/SKILL.md +33 -39
  862. package/skill-style/references/style-guide.md +62 -0
  863. package/submission/openai/README.md +67 -0
  864. package/submission/openai/listing.json +31 -0
  865. package/submission/openai/test-cases.json +61 -0
  866. package/tdd/SKILL.md +30 -45
  867. package/tdd/fixtures/pass-evidence.json +100 -0
  868. package/tdd/fixtures/quality-scenarios.json +20 -0
  869. package/tdd/guides/deep-modules.md +33 -33
  870. package/tdd/guides/interface-design.md +31 -31
  871. package/tdd/guides/mocking.md +59 -59
  872. package/tdd/guides/refactoring.md +10 -10
  873. package/tdd/guides/tests.md +61 -61
  874. package/tdd/references/core-discipline.md +51 -0
  875. package/tdd/references/integration-testing.md +13 -0
  876. package/tdd/references/quality-model.md +68 -0
  877. package/tdd/references/unit-testing.md +15 -0
  878. package/tdd/schemas/quality-evidence.schema.json +211 -0
  879. package/tdd/schemas/quality-report.schema.json +110 -0
  880. package/tdd/scripts/quality-gate.js +475 -0
  881. package/to-spec/SKILL.md +40 -0
  882. package/to-spec/references/process.md +77 -0
  883. package/to-spec/scripts/check-project-docs.js +239 -0
  884. package/to-spec/scripts/project-docs-resolver.js +111 -0
  885. package/to-spec/templates/cli-reference.md +31 -0
  886. package/to-spec/templates/dev-doc.md +27 -0
  887. package/to-spec/templates/feature-spec.md +59 -0
  888. package/to-spec/templates/schema-doc.md +31 -0
  889. package/to-tickets/SKILL.md +42 -0
  890. package/to-tickets/references/publishing-and-templates.md +97 -0
  891. package/todo-driven-workflow/SKILL.md +28 -40
  892. package/todo-driven-workflow/references/execution-guide.md +27 -0
  893. package/using-git-worktrees/SKILL.md +29 -141
  894. package/using-git-worktrees/references/workflow-details.md +108 -0
  895. package/verification-loop/SKILL.md +29 -121
  896. package/verification-loop/references/verification-phases.md +116 -0
  897. package/verification-loop/templates/verification-report.template.md +15 -0
  898. package/verify-before-claim/SKILL.md +27 -70
  899. package/verify-before-claim/references/verification-guide.md +73 -0
  900. package/zoom-out/SKILL.md +28 -76
  901. package/zoom-out/references/circuit-breaker.md +66 -0
  902. package/zoom-out/templates/zoom-out-report.template.md +20 -0
  903. package/build-multi-agent-system/AGENTS.md +0 -50
  904. package/build-multi-agent-system/README.md +0 -63
  905. package/build-multi-agent-system/SKILL.md +0 -68
  906. package/create-agent-launcher/SKILL.md +0 -48
  907. package/create-agent-launcher/guidelines/platform-gemini.md +0 -101
  908. package/create-agent-launcher/workflows/01-init.md +0 -22
  909. package/create-agent-launcher/workflows/02-analysis.md +0 -26
  910. package/create-agent-launcher/workflows/03-generation.md +0 -29
  911. package/create-agent-launcher/workflows/04-launcher.md +0 -20
  912. package/docs/workflows/build-multi-agent-system.md +0 -62
  913. package/docs/workflows/create-agent-launcher.md +0 -62
  914. package/eval-framework/behavioral-test.js +0 -105
  915. package/eval-framework/cases/case2.json +0 -5
  916. package/eval-framework/mechanism-test.js +0 -251
  917. package/harness-everything/scripts/todo-cli.js +0 -157
  918. package/skill-style/STYLE.md +0 -37
@@ -1,219 +1,459 @@
1
- #!/usr/bin/env node
2
- const { execSync } = require('child_process');
3
-
4
- function run(userPrompt) {
5
- console.log(`[Tier Routing Pre-check]`);
6
-
7
- const promptLower = userPrompt.toLowerCase();
8
-
9
- // Basic keyword heuristic (bilingual - the Human Partner often prompts in
10
- // Chinese, and an English-only net silently degrades to Tier 1 for them).
11
- // Deliberately NOT driven by the diff stats above: those measure what is
12
- // already sitting uncommitted in the tree - usually the PREVIOUS task's
13
- // leftovers - not the complexity of the task being asked for now.
14
- const TIER3_KEYWORDS = ["architecture", "refactor", "rewrite the", "架構", "重構", "重寫"];
15
- const TIER2_KEYWORDS = ["test", "api", "integration", "endpoint", "測試", "整合", "端點", "介面"];
16
-
17
- let recommendedTier = "Tier 1 (Trivial)";
18
- let rationale = "No structural/testing signals in the prompt.";
19
-
20
- if (TIER3_KEYWORDS.some(k => promptLower.includes(k))) {
21
- recommendedTier = "Tier 3 (Macro Task)";
22
- rationale = "Prompt implies system-wide or architectural change.";
23
- } else if (TIER2_KEYWORDS.some(k => promptLower.includes(k))) {
24
- recommendedTier = "Tier 2 (Standard Task)";
25
- rationale = "Prompt implies development work needing TDD validation or multi-file coordination.";
26
- }
27
-
28
- console.log(`\n=> RECOMMENDED TIER: ${recommendedTier}`);
29
- console.log(`=> RATIONALE: ${rationale}`);
30
-
31
- // Base execution loop: Tier 2/3 must run on the todo-driven-workflow
32
- // checklist (Tier 1 is exempt to avoid checklist bloat on trivial edits).
33
- if (!recommendedTier.startsWith("Tier 1")) {
34
- console.log(`\n=> BASE EXECUTION LOOP: Load 'todo-driven-workflow' and initialize its checklist (3-7 verifiable sub-tasks) BEFORE editing any file.`);
35
- console.log(` Track exactly ONE item in-progress at a time; verify with real evidence before marking completed.`);
36
- }
37
-
38
- // Analyze and output relevant Knowledge Guides / Templates based on user prompt keywords
39
- const recommendedGuides = [];
40
-
41
- const TDD_TEST_KEYWORDS = [
42
- "tdd", "test", "mock", "stub", "api", "endpoint", "integration", "debugging", "bug", "error", "fix",
43
- "測試", "單測", "模組測試", "端點", "介面", "除錯", "錯誤", "修復"
44
- ];
45
- if (TDD_TEST_KEYWORDS.some(k => promptLower.includes(k))) {
46
- recommendedGuides.push(
47
- "- tdd/SKILL.md (Test-Driven Development Red-Green-Refactor loop)",
48
- "- tdd/guides/mocking.md (Mocking principles & isolation)",
49
- "- tdd/guides/interface-design.md (Interface and contract design)",
50
- "- tdd/guides/deep-modules.md (Testing deep nested modules)",
51
- "- tdd/guides/tests.md (General test architecture)",
52
- "- environment-detection/SKILL.md (Detect active shell/OS & preflight syntax before running commands)",
53
- "- verify-before-claim/SKILL.md (Fact-audit discipline: verify external claims and unmeasured estimates before asserting them)",
54
- "- verification-loop/SKILL.md (Pre-PR verification gate: build, types, lint, tests, security scan)"
55
- );
56
- }
57
-
58
- const GIT_COMMIT_KEYWORDS = [
59
- "commit", "git", "save", "submodule", "pr", "pull request", "release", "quality gate", "ready to ship",
60
- "提交", "版控", "合併", "分支", "發行"
61
- ];
62
- if (GIT_COMMIT_KEYWORDS.some(k => promptLower.includes(k))) {
63
- recommendedGuides.push(
64
- "- git-commit/SKILL.md (Angular-style commit convention generation)",
65
- "- git-commit/guides/ANGULAR_STYLE.md (Commit conventions reference)",
66
- "- git-commit/guides/COMMIT_GENERATION.md (Commit generation patterns)",
67
- "- git-commit/guides/LANGUAGE_DETECTION.md (Multi-language commits)",
68
- "- git-commit/guides/MAIN_REPO.md (Commits in main repositories)",
69
- "- git-commit/guides/SUBMODULES.md (Submodule commit handling)",
70
- "- rewrite-commits/SKILL.md (Rewrite commit history safely to Angular style)",
71
- "- using-git-worktrees/SKILL.md (Git Worktrees isolation for feature work, avoids workspace pollution)",
72
- "- verification-loop/SKILL.md (Pre-PR verification gate: build, types, lint, tests, security scan)"
73
- );
74
- }
75
-
76
- if (promptLower.includes("doc") || promptLower.includes("readme") || promptLower.includes("文件") || promptLower.includes("說明文件")) {
77
- recommendedGuides.push(
78
- "- repo-docs/templates/readme-template.md (Standard README template)",
79
- "- repo-docs/templates/product-readme-template.md (Product README template)",
80
- "- repo-docs/templates/agents-template.md (Agent onboarding instructions template)"
81
- );
82
- }
83
-
84
- const AGENT_KEYWORDS = [
85
- "agent", "multi-agent", "launcher", "subagent", "sub-agent", "delegate", "orchestrate", "specialist",
86
- "workspace scaffolding", "scaffold workspace", "division of labor", "fable", "macro", "orchestrator",
87
- "代理", "多代理", "啟動器", "子代理", "委派", "指派", "分工", "協調", "任務分配", "規劃"
88
- ];
89
- if (AGENT_KEYWORDS.some(k => promptLower.includes(k))) {
90
- recommendedGuides.push(
91
- "- fable-mode/SKILL.md (Macro task planning & execution orchestrator)",
92
- "- fable-discipline/SKILL.md (Shadow guard preventing context bloat and managing token limits)",
93
- "- build-multi-agent-system/SKILL.md (Universal Multi-Agent Workspace scaffolding & memory db)",
94
- "- create-agent-launcher/SKILL.md (Sub-agent generator for specialized task delegation)",
95
- "- repo-docs/templates/agents-template.md (Agent onboarding instructions template)",
96
- "- grill-with-docs/SKILL.md (Decision tracking, Glossary & ADR-driven design grilling)"
97
- );
98
- }
99
-
100
- const ARCH_REFACTOR_KEYWORDS = [
101
- "refactor", "architecture", "structure", "couple", "seam", "adr", "design plan", "decision", "grill",
102
- "重構", "架構", "結構", "解耦", "設計", "決策", "辯論", "質疑"
103
- ];
104
- if (ARCH_REFACTOR_KEYWORDS.some(k => promptLower.includes(k))) {
105
- recommendedGuides.push(
106
- "- improve-codebase-architecture/guides/DEEPENING.md (Deepening opportunities & depth rules)",
107
- "- improve-codebase-architecture/guides/INTERFACE-DESIGN.md (Interface design principles)",
108
- "- improve-codebase-architecture/guides/LANGUAGE.md (Language-specific patterns)",
109
- "- improve-codebase-architecture/guides/HTML-REPORT.md (Mermaid dependency report generation)",
110
- "- grill-with-docs/SKILL.md (Decision tracking, Glossary & ADR-driven design grilling)",
111
- "- grill-me/SKILL.md (Challenger interview to stress-test your architecture plan)",
112
- "- fable-mode/SKILL.md (Macro task planning & execution orchestrator)"
113
- );
114
- }
115
-
116
- const ENV_KEYWORDS = [
117
- "shell", "terminal", "powershell", "bash", "cmd", "env", "preflight", "command", "run",
118
- "終端機", "命令", "環境", "指令", "執行"
119
- ];
120
- if (ENV_KEYWORDS.some(k => promptLower.includes(k))) {
121
- recommendedGuides.push(
122
- "- environment-detection/SKILL.md (Detect active shell/OS & preflight syntax before running commands)",
123
- "- using-git-worktrees/SKILL.md (Git Worktrees isolation for feature work, avoids workspace pollution)"
124
- );
125
- }
126
-
127
- const VERIFY_KEYWORDS = [
128
- "verify", "fact", "audit", "estimate", "benchmark", "performance", "speed", "scale",
129
- "驗證", "查證", "核對", "效能", "評測", "性能", "估計"
130
- ];
131
- if (VERIFY_KEYWORDS.some(k => promptLower.includes(k))) {
132
- recommendedGuides.push(
133
- "- verify-before-claim/SKILL.md (Fact-audit discipline: verify external claims and unmeasured estimates before asserting them)",
134
- "- verification-loop/SKILL.md (Pre-PR verification gate: build, types, lint, tests, security scan)",
135
- "- eval-harness/SKILL.md (AI performance evaluation metrics & anti-loop metrics)"
136
- );
137
- }
138
-
139
- if (/\bskill\b|skill\.md|new skill|write a skill/.test(promptLower)) {
140
- recommendedGuides.push(
141
- "- skill-creator/SKILL.md (Authoring, auditing, and testing workflow for SKILL.md files, incl. dynamic skill generation)",
142
- "- skill-style/SKILL.md (Terse Skill Contract format spec that skill-creator builds on)"
143
- );
144
- }
145
-
146
- if (recommendedGuides.length > 0) {
147
- console.log(`\n=> RECOMMENDED KNOWLEDGE GUIDES (Auto-loaded based on keywords):`);
148
- recommendedGuides.forEach(guide => {
149
- const match = guide.match(/^- ([^\s]+)/);
150
- if (match) {
151
- const guidePath = require('path').join(__dirname, '..', '..', match[1]);
152
- if (!require('fs').existsSync(guidePath)) {
153
- console.log(`${guide} [NOT INSTALLED - Ignore this recommendation]`);
154
- return;
155
- }
156
- }
157
- console.log(guide);
158
- });
159
- }
160
-
161
- // Fact-audit nudge: broad, cheap keyword net for claims that risk being
162
- // asserted from stale/wrong training memory instead of verified. False
163
- // positives cost nothing here (it's a reminder, not a block) so recall
164
- // matters more than precision.
165
- const externalClaimTriggers = [
166
- "does it support", "does support", "how does", "what's the default", "what is the default",
167
- "exit code", "schema", "sdk", " api", "hook", "payload", "pricing", "rate limit",
168
- "latest version", "current version", "deprecated", "breaking change", "changelog",
169
- "spec", "documentation", "according to", "endpoint", "config option", "flag"
170
- ];
171
- const estimateTriggers = [
172
- "benchmark", "performance", "how fast", "how long will", "how much memory",
173
- "how many requests", "estimate", "roughly how", "big o", "complexity",
174
- "will this scale", "throughput", "latency"
175
- ];
176
- const hitExternalClaim = externalClaimTriggers.some(kw => promptLower.includes(kw));
177
- const hitEstimate = estimateTriggers.some(kw => promptLower.includes(kw));
178
-
179
- if (hitExternalClaim || hitEstimate) {
180
- console.log(`\n=> FACT-AUDIT REMINDER:`);
181
- if (hitExternalClaim) {
182
- console.log(`This looks like it may require a claim about an external framework/library/API/tool's current behavior.`);
183
- console.log(`Verify via WebFetch/WebSearch against the authoritative source before asserting it - do not answer from training memory alone; it can be stale or confidently wrong (e.g. exit-code semantics, schema fields, defaults, pricing).`);
184
- }
185
- if (hitEstimate) {
186
- console.log(`This looks like it may call for a performance/cost/timing number.`);
187
- console.log(`Prefer an actual measurement over a reasoned estimate when the stakes justify it - an unmeasured number (including one you generate yourself) is a hypothesis, not a fact.`);
188
- }
189
- }
190
-
191
- // Constraint strength must match judgment reliability: this routing is a
192
- // keyword heuristic, so it is a default, not an order.
193
- console.log(`\nTreat the tier above as the default route. If your own read of the task clearly disagrees, follow your read and say why in one line. An explicit instruction from the Human Partner always wins.`);
194
- }
195
-
196
- let userPrompt = process.argv[2] || '';
197
-
198
- if (process.argv[2]) {
199
- // If a command-line argument is passed, use it and execute immediately.
200
- run(userPrompt);
201
- } else if (process.stdin.isTTY) {
202
- // Running interactively in a terminal without piped input, execute immediately.
203
- run('');
204
- } else {
205
- // Piped input or non-TTY, read from standard input.
206
- let inputData = '';
207
- process.stdin.on('data', chunk => { inputData += chunk; });
208
- process.stdin.on('end', () => {
209
- try {
210
- if (inputData.trim()) {
211
- const payload = JSON.parse(inputData);
212
- if (typeof payload.prompt === 'string') userPrompt = payload.prompt;
213
- }
214
- } catch (err) {
215
- // Not valid JSON on stdin - fall back to argv (useful for direct/manual testing).
216
- }
217
- run(userPrompt);
218
- });
219
- }
1
+ #!/usr/bin/env node
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+ const {
5
+ buildRouterContract,
6
+ writeRouterContract,
7
+ } = require('./router-contract');
8
+
9
+ const DEFAULT_ROUTING_CONFIG = {
10
+ tiers: { tier3: [], tier2: [] },
11
+ guideGroups: [],
12
+ factAudit: { externalClaim: [], estimate: [] },
13
+ };
14
+
15
+ function loadRoutingConfig() {
16
+ const configPath = process.env.HARNESS_ROUTING_CONFIG_PATH || path.join(__dirname, 'routing-keywords.json');
17
+ try {
18
+ const raw = fs.readFileSync(configPath, 'utf8');
19
+ const parsed = JSON.parse(raw);
20
+ return {
21
+ config: {
22
+ tiers: parsed.tiers || DEFAULT_ROUTING_CONFIG.tiers,
23
+ guideGroups: Array.isArray(parsed.guideGroups) ? parsed.guideGroups : DEFAULT_ROUTING_CONFIG.guideGroups,
24
+ factAudit: parsed.factAudit || DEFAULT_ROUTING_CONFIG.factAudit,
25
+ },
26
+ routingStatus: 'ok',
27
+ reasonCodes: [],
28
+ };
29
+ } catch (err) {
30
+ console.log(`[Tier Routing Pre-check] routing-keywords.json missing/invalid - routing is degraded; no silent Tier 1 fallback. (${err.message})`);
31
+ return {
32
+ config: DEFAULT_ROUTING_CONFIG,
33
+ routingStatus: 'degraded',
34
+ reasonCodes: ['routing-config-invalid'],
35
+ };
36
+ }
37
+ }
38
+
39
+ function matchKeyword(prompt, keyword) {
40
+ const k = keyword.toLowerCase().trim();
41
+ if (!k) return false;
42
+ const isChineseOrMultiword = /[\u4e00-\u9fa5]/.test(k) || k.includes(' ') || k.includes('-');
43
+ if (isChineseOrMultiword) return prompt.includes(k);
44
+ const escaped = k.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
45
+ return new RegExp(`\\b${escaped}\\b`, 'i').test(prompt);
46
+ }
47
+
48
+ function detectFableModel(prompt) {
49
+ const match = prompt.match(/\bfable(?:[- ]mode)?\s+(?:on|with)\s+(haiku|sonnet|sonnect|opus)\b|\bfable-(haiku|sonnet|opus)\b/i);
50
+ if (!match) return null;
51
+ const requested = (match[1] || match[2]).toLowerCase();
52
+ return requested === 'sonnect' ? 'sonnet' : requested;
53
+ }
54
+
55
+ function detectExplicitStrategy(prompt, requestedFableModel) {
56
+ if (/\bdirect[- ]single\b/i.test(prompt)) return 'direct-single';
57
+ if (/\biterative[- ]single\b/i.test(prompt)) return 'iterative-single';
58
+ if (/\bfable[- ]multi[- ]agent[- ]workspace\b|\bmulti[- ]agent workspace\b/i.test(prompt)) return 'fable-multi-agent-workspace';
59
+ if (/\bfable[- ]parallel\b|\bparallel fable\b/i.test(prompt)) return 'fable-parallel';
60
+ if (/\bfable[- ]staged\b|\bstaged fable\b/i.test(prompt)) return 'fable-staged';
61
+ if (requestedFableModel || /\b(?:use|run|enter)\s+fable(?:[- ]mode)?\b/i.test(prompt)) return 'fable-staged';
62
+ return null;
63
+ }
64
+
65
+ function detectProhibitions(prompt) {
66
+ const rules = [
67
+ ['fable', /\b(?:no|without|do not|don't)\s+(?:use\s+)?fable\b/i],
68
+ ['subagents', /\b(?:no|without|do not|don't)\s+(?:use\s+)?subagents?\b|\bsingle[- ]agent only\b/i],
69
+ ['parallel', /\b(?:no|without|do not|don't)\s+(?:use\s+)?parallel(?:ism| execution)?\b|\bdo not parallelize\b|\bserial only\b/i],
70
+ ['workspace', /\b(?:no|without|do not|don't)\s+(?:use\s+)?(?:multi[- ]agent )?workspace\b/i],
71
+ ['memory', /\b(?:no|without|do not|don't)\s+(?:use\s+)?memory\b/i],
72
+ ['ensemble', /\b(?:no|without|do not|don't)\s+(?:use\s+)?ensemble\b/i],
73
+ ];
74
+ return rules.filter(([, regex]) => regex.test(prompt)).map(([name]) => name);
75
+ }
76
+
77
+ function detectActionGateReasons(prompt) {
78
+ const reasons = [];
79
+ const irreversible = [
80
+ /\b(?:drop|truncate|wipe|purge|destroy)\b.*\b(?:database|db|table|production|prod|data)\b/i,
81
+ /\b(?:force[- ]push|push\s+--force(?:-with-lease)?|git\s+push\b[^\n]*--force(?:-with-lease)?)\b/i,
82
+ /\bgit\s+reset\s+--hard\b/i,
83
+ /\bdelete\b.*\b(?:production|prod|database|db|table|branch|release|data)\b/i,
84
+ ];
85
+ const external = [
86
+ /\bdeploy(?:ment|ing|ed)?\b.*\b(?:prod|production|live)\b|\bdeploy\s+to\s+(?:prod|production|live)\b/i,
87
+ /\b(?:npm|pnpm|yarn|cargo|pip|twine)\s+publish\b|\bpublish\s+(?:the\s+)?(?:package|release|artifact)\b/i,
88
+ /\b(?:send|email|message)\b.*\b(?:customer|client|user|users|external|production)\b/i,
89
+ /\b(?:charge|pay|payment|refund|transfer)\b.*\b(?:customer|account|money|funds|invoice)?\b/i,
90
+ /\bcreate\b.*\b(?:release|deployment)\b/i,
91
+ ];
92
+ if (irreversible.some(regex => regex.test(prompt))) reasons.push('irreversible-action');
93
+ if (external.some(regex => regex.test(prompt))) reasons.push('external-side-effect');
94
+ return reasons;
95
+ }
96
+
97
+ function addReason(reasonCodes, code) {
98
+ if (code && !reasonCodes.includes(code)) reasonCodes.push(code);
99
+ }
100
+
101
+ function deduplicateGuidesByPath(guides) {
102
+ const byPath = new Map();
103
+ for (const guide of guides) {
104
+ const match = String(guide).match(/^\s*-\s+([^\s]+)/);
105
+ const key = match ? match[1].replace(/\\/g, '/') : String(guide).trim();
106
+ if (!byPath.has(key)) byPath.set(key, guide);
107
+ }
108
+ return Array.from(byPath.values());
109
+ }
110
+
111
+ function countDomainSignals(promptLower) {
112
+ const domains = [
113
+ /\bsecurity\b|安全|資安/i,
114
+ /\barchitecture\b|架構/i,
115
+ /\bdocumentation\b|\bdocs?\b|文件/i,
116
+ /\btests?\b|測試/i,
117
+ /\bfrontend\b|前端/i,
118
+ /\bbackend\b|後端/i,
119
+ /\bdatabase\b|資料庫/i,
120
+ /\binfrastructure\b|\bdevops\b|基礎設施/i,
121
+ ];
122
+ return domains.reduce((count, regex) => count + (regex.test(promptLower) ? 1 : 0), 0);
123
+ }
124
+
125
+ function plannerInputsFromContext(context, promptLower) {
126
+ const harness = context && typeof context.harness === 'object' ? context.harness : {};
127
+ const rawHost = (context && context.hostCapabilities) || harness.hostCapabilities || {};
128
+ const rawConstraints = (context && context.constraints) || harness.constraints || {};
129
+ const hostCapabilities = { ...rawHost };
130
+ const constraints = { ...rawConstraints };
131
+
132
+ const envCapabilityMap = {
133
+ subagents: process.env.HARNESS_HOST_SUBAGENTS,
134
+ parallelCalls: process.env.HARNESS_HOST_PARALLEL_CALLS,
135
+ hooks: process.env.HARNESS_HOST_HOOKS,
136
+ state: process.env.HARNESS_HOST_STATE,
137
+ modelAvailability: process.env.HARNESS_HOST_MODEL_AVAILABILITY,
138
+ };
139
+ for (const [key, value] of Object.entries(envCapabilityMap)) {
140
+ if (value) hostCapabilities[key] = value;
141
+ }
142
+
143
+ if (process.env.HARNESS_BUDGET_CONCURRENCY !== undefined) constraints.concurrency = process.env.HARNESS_BUDGET_CONCURRENCY;
144
+ if (process.env.HARNESS_BUDGET_COST !== undefined) constraints.cost = process.env.HARNESS_BUDGET_COST;
145
+ if (process.env.HARNESS_BUDGET_LATENCY !== undefined) constraints.latency = process.env.HARNESS_BUDGET_LATENCY;
146
+ if (process.env.HARNESS_BUDGET_TOKENS !== undefined) constraints.tokens = process.env.HARNESS_BUDGET_TOKENS;
147
+
148
+ const concurrencyMatch = promptLower.match(/\b(?:max(?:imum)?\s+)?(?:concurrency|workers?|agents?)\s*(?:=|:|of)?\s*(\d+)\b/i);
149
+ if (concurrencyMatch) constraints.concurrency = Number(concurrencyMatch[1]);
150
+ if (/\b(?:single worker|one worker|serial only)\b/i.test(promptLower)) constraints.concurrency = 1;
151
+
152
+ return { hostCapabilities, constraints };
153
+ }
154
+
155
+ function emitDynamicSkills(promptLower, context, recommendedGuides) {
156
+ try {
157
+ const userHome = process.env.HOME || process.env.USERPROFILE || '';
158
+ const { getWorkspaceRoot } = require('../../scripts/lib/workspace');
159
+ const workspaceRoot = getWorkspaceRoot(context);
160
+
161
+ const manifestPaths = [
162
+ path.join(workspaceRoot, '.claude', 'harness-everything', 'manifest.json'),
163
+ path.join(workspaceRoot, '.cursor', 'harness-everything', 'manifest.json'),
164
+ path.join(workspaceRoot, '.github', 'harness-everything', 'manifest.json'),
165
+ path.join(workspaceRoot, '.codex', 'harness-everything', 'manifest.json'),
166
+ path.join(workspaceRoot, '.continue', 'harness-everything', 'manifest.json'),
167
+ path.join(userHome, '.agents', 'harness-everything', 'manifest.json'),
168
+ path.join(userHome, '.claude', 'harness-everything', 'manifest.json'),
169
+ ];
170
+
171
+ const generatedSkills = new Map();
172
+ for (const manifestPath of manifestPaths) {
173
+ if (!fs.existsSync(manifestPath)) continue;
174
+ try {
175
+ const manifestData = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
176
+ if (Array.isArray(manifestData.generated)) {
177
+ for (const skill of manifestData.generated) generatedSkills.set(skill.id, skill);
178
+ }
179
+ } catch (err) {
180
+ // Ignore malformed generated-skill manifests; they are advisory only.
181
+ }
182
+ }
183
+
184
+ const allDynamicSkills = Array.from(generatedSkills.values());
185
+ const matchedDynamicSkills = [];
186
+
187
+ for (const skill of allDynamicSkills) {
188
+ let score = 0;
189
+ for (const rawTrigger of skill.triggers || []) {
190
+ const trigger = rawTrigger.toLowerCase().trim();
191
+ if (!trigger || trigger.length < 2) continue;
192
+ if (['the', 'and', 'for', 'with', 'your', 'this', 'that', 'some', 'from', 'prevent', 'resolved'].includes(trigger)) continue;
193
+
194
+ if (/[\u4e00-\u9fa5]/.test(trigger)) {
195
+ if (promptLower.includes(trigger)) score += trigger.length * 2;
196
+ } else {
197
+ const escapedTrigger = trigger.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
198
+ const regex = new RegExp(`\\b${escapedTrigger}\\b`, 'i');
199
+ if (regex.test(promptLower)) score += trigger.length >= 4 ? 3 : 1.5;
200
+ }
201
+ }
202
+ if (score >= 3) matchedDynamicSkills.push({ skill, score });
203
+ }
204
+
205
+ if (matchedDynamicSkills.length > 0) {
206
+ matchedDynamicSkills.sort((a, b) => b.score - a.score);
207
+ console.log(`\n=> 🎯 HIGH-RELEVANCE SELF-EVOLVED SKILL(S) DETECTED:`);
208
+ matchedDynamicSkills.forEach(({ skill }) => {
209
+ let displayPath = skill.dirPath;
210
+ if (displayPath.startsWith(workspaceRoot)) displayPath = path.relative(workspaceRoot, displayPath);
211
+ console.log(`- ${displayPath}/SKILL.md (${skill.description} [DYNAMIC SKILL])`);
212
+ });
213
+ } else if (recommendedGuides.length === 0 && allDynamicSkills.length > 0) {
214
+ console.log(`\n=> ℹ️ UNMATCHED PROMPT HINT:`);
215
+ console.log(`No standard or dynamic skills matched your prompt directly.`);
216
+ console.log(`However, you have ${allDynamicSkills.length} self-evolved dynamic skill(s) registered in your manifest.json.`);
217
+ console.log(`To ensure you don't miss past lessons, you should inspect the "generated" section of your manifest.json or check .claude/harness-everything/skills/generated/ to see if any apply to your current task.`);
218
+ console.log(`If genuinely nothing covers this - including nothing already fetched via find-skills - load find-skills/SKILL.md: it checks "npx skills list" for anything already installed, then searches skills.sh/npx skills if not, and always requires explicit approval before installing anything.`);
219
+ }
220
+ } catch (err) {
221
+ // Dynamic-skill discovery is advisory and must never break core routing.
222
+ }
223
+ }
224
+
225
+ function run(userPrompt, context) {
226
+ console.log(`[Tier Routing Pre-check]`);
227
+
228
+ const promptLower = userPrompt.toLowerCase();
229
+ const loadedConfig = loadRoutingConfig();
230
+ const routingConfig = loadedConfig.config;
231
+ const TIER3_KEYWORDS = routingConfig.tiers.tier3 || [];
232
+ const TIER2_KEYWORDS = routingConfig.tiers.tier2 || [];
233
+
234
+ const macroSignals = [
235
+ /\b(?:every|each|all|entire|whole|full|complete)\s+(?:skill|skills|repo|repository|codebase|project|file|files|module|modules)/i,
236
+ /\b(?:evaluate|audit|benchmark|stress[- ]test|ab test|a\/b test|compare)\b/i,
237
+ /\b(?:repository[- ]wide|codebase[- ]wide|end[- ]to[- ]end)\b/i,
238
+ /\b(?:multiple|several|four|fourteen|dozens)\s+(?:issues|skills|files|modules)/i,
239
+ /(?:每個|每一個|所有|全部|整個|全套|逐一|多個|四個).*(?:skill|技能|檔案|問題|版本|基準|測試|評估|稽核|比較|壓力)/i,
240
+ /(?:評估|稽核|基準|壓力測試|比較).*(?:每個|所有|全部|整個|全套|技能|skill|檔案|版本)/i,
241
+ ];
242
+ const hasMacroSignal = macroSignals.some(signal => signal.test(userPrompt));
243
+ const hasTrivialEditVerb = /^(?:(?:please|help me)\s+)?(?:fix|update|correct|change)\b/i.test(userPrompt.trim());
244
+ const hasDocsTarget = /\b(?:readme|documentation|docs?)\b/i.test(userPrompt);
245
+ const hasTinyEditSignal = /\b(?:typo|spelling|wording|one line|single line)\b/i.test(userPrompt);
246
+ const isTrivialDocsEdit = !hasMacroSignal && hasTrivialEditVerb && hasDocsTarget && hasTinyEditSignal;
247
+ const hasTier3Keyword = TIER3_KEYWORDS.some(keyword => matchKeyword(promptLower, keyword));
248
+ const hasTier2Keyword = TIER2_KEYWORDS.some(keyword => matchKeyword(promptLower, keyword));
249
+
250
+ let recommendedTier = 'Unclassified';
251
+ let rationale = 'No structural/testing signals matched; unclassified is not equivalent to trivial.';
252
+ const reasonCodes = [...loadedConfig.reasonCodes, 'no-classification-signal'];
253
+
254
+ if (isTrivialDocsEdit) {
255
+ recommendedTier = 'Tier 1 (Trivial)';
256
+ rationale = 'Single documentation typo detected - direct edit, no checklist required.';
257
+ reasonCodes.splice(loadedConfig.reasonCodes.length);
258
+ addReason(reasonCodes, 'trivial-docs-edit');
259
+ } else if (hasMacroSignal || hasTier3Keyword) {
260
+ recommendedTier = 'Tier 3 (Macro Task)';
261
+ rationale = 'Prompt implies repository-wide scope, audit/benchmark work, architectural refactoring, or multi-agent collaboration.';
262
+ reasonCodes.splice(loadedConfig.reasonCodes.length);
263
+ addReason(reasonCodes, hasMacroSignal ? 'macro-scope-signal' : 'tier3-keyword');
264
+ } else if (hasTier2Keyword) {
265
+ recommendedTier = 'Tier 2 (Standard Task)';
266
+ rationale = 'Prompt implies development work needing TDD validation or multi-file coordination.';
267
+ reasonCodes.splice(loadedConfig.reasonCodes.length);
268
+ addReason(reasonCodes, 'tier2-keyword');
269
+ }
270
+
271
+ const sentenceCount = userPrompt.split(/[.!?。!?]+/).filter(sentence => sentence.trim()).length;
272
+ const hasMultipleTasks = /\b(and|also|then|additionally|plus|而且|還有|然後|另外|以及)\b/i.test(userPrompt);
273
+ const mentionsSpecificFile = /\b(file|script|module|class|function|component)\b.*\.\w+/i.test(userPrompt);
274
+ const hasQuestionMarks = /\?|?/.test(userPrompt);
275
+ const hasMultipleSentences = sentenceCount > 2;
276
+
277
+ if (!hasMacroSignal && !isTrivialDocsEdit && hasMultipleTasks && hasMultipleSentences) {
278
+ if (recommendedTier === 'Unclassified' || recommendedTier.startsWith('Tier 1')) {
279
+ recommendedTier = 'Tier 2 (Standard Task)';
280
+ rationale = 'Multiple tasks detected with structural complexity - upgraded to Tier 2 for TDD validation.';
281
+ reasonCodes.splice(loadedConfig.reasonCodes.length);
282
+ addReason(reasonCodes, 'multi-task-structure');
283
+ } else if (recommendedTier.startsWith('Tier 2')) {
284
+ rationale += ' Multiple task structure detected.';
285
+ addReason(reasonCodes, 'multi-task-structure');
286
+ }
287
+ } else if (!hasMacroSignal && mentionsSpecificFile && !hasMultipleTasks) {
288
+ if (recommendedTier.startsWith('Tier 3')) {
289
+ recommendedTier = 'Tier 2 (Standard Task)';
290
+ rationale = 'Single file focus detected - downgraded from Tier 3 to Tier 2.';
291
+ addReason(reasonCodes, 'single-file-focus');
292
+ }
293
+ } else if (!hasMacroSignal && hasQuestionMarks && !hasMultipleTasks) {
294
+ if (recommendedTier.startsWith('Tier 3')) {
295
+ recommendedTier = 'Tier 2 (Standard Task)';
296
+ rationale = 'Question format detected - likely advisory rather than macro execution.';
297
+ addReason(reasonCodes, 'question-format');
298
+ }
299
+ }
300
+
301
+ console.log(`\n=> RECOMMENDED TIER: ${recommendedTier}`);
302
+ console.log(`=> RATIONALE: ${rationale}`);
303
+
304
+ if (recommendedTier.startsWith('Tier 2') || recommendedTier.startsWith('Tier 3')) {
305
+ console.log(`\n=> BASE EXECUTION LOOP: Load 'todo-driven-workflow' and initialize its checklist (3-7 verifiable sub-tasks) BEFORE editing any file.`);
306
+ console.log(` Track exactly ONE item in-progress at a time; verify with real evidence before marking completed.`);
307
+ }
308
+
309
+ const requestedFableModel = detectFableModel(promptLower);
310
+ if (requestedFableModel) {
311
+ console.log(`\n=> REQUESTED FABLE MODEL MODE: ${requestedFableModel}`);
312
+ console.log(`=> ROUTE: fable-mode/fable-${requestedFableModel}/SKILL.md`);
313
+ console.log(` Resolve availability and record fallback status with fable-mode/scripts/model-selector.js.`);
314
+ }
315
+
316
+ const allRecommendedGuides = [];
317
+ for (const group of routingConfig.guideGroups) {
318
+ let matched = false;
319
+ if (typeof group.regex === 'string') {
320
+ matched = new RegExp(group.regex, 'i').test(promptLower);
321
+ } else if (Array.isArray(group.keywords)) {
322
+ matched = group.keywords.some(keyword => promptLower.includes(keyword));
323
+ }
324
+ if (matched && Array.isArray(group.guides)) allRecommendedGuides.push(...group.guides);
325
+ }
326
+ const recommendedGuides = deduplicateGuidesByPath(allRecommendedGuides);
327
+
328
+ if (recommendedGuides.length > 0) {
329
+ console.log(`\n=> RECOMMENDED KNOWLEDGE GUIDES (Auto-loaded based on keywords):`);
330
+ recommendedGuides.forEach(guide => {
331
+ const match = guide.match(/^- ([^\s]+)/);
332
+ if (match) {
333
+ const guidePath = path.join(__dirname, '..', '..', match[1]);
334
+ if (!fs.existsSync(guidePath)) {
335
+ console.log(`${guide} [NOT INSTALLED - Ignore this recommendation]`);
336
+ return;
337
+ }
338
+ }
339
+ console.log(guide);
340
+ });
341
+ }
342
+
343
+ emitDynamicSkills(promptLower, context, recommendedGuides);
344
+
345
+ const externalClaimTriggers = routingConfig.factAudit.externalClaim || [];
346
+ const estimateTriggers = routingConfig.factAudit.estimate || [];
347
+ const hitExternalClaim = externalClaimTriggers.some(keyword => promptLower.includes(keyword));
348
+ const hitEstimate = estimateTriggers.some(keyword => promptLower.includes(keyword));
349
+
350
+ if (hitExternalClaim || hitEstimate) {
351
+ console.log(`\n=> FACT-AUDIT REMINDER:`);
352
+ if (hitExternalClaim) {
353
+ console.log(`This looks like it may require a claim about an external framework/library/API/tool's current behavior.`);
354
+ console.log(`Verify via WebFetch/WebSearch against the authoritative source before asserting it - do not answer from training memory alone; it can be stale or confidently wrong (e.g. exit-code semantics, schema fields, defaults, pricing).`);
355
+ }
356
+ if (hitEstimate) {
357
+ console.log(`This looks like it may call for a performance/cost/timing number.`);
358
+ console.log(`Prefer an actual measurement over a reasoned estimate when the stakes justify it - an unmeasured number (including one you generate yourself) is a hypothesis, not a fact.`);
359
+ }
360
+ }
361
+
362
+ const independentWorkstreams = /\bindependent(?:ly)?\b|\bparallel(?:ize|ise|ized|ised|ism)?\b/i.test(userPrompt);
363
+ const readOnly = /\bread[- ]only\b|\bno edits?\b|\bwithout (?:editing|edits|changes|modifications)\b/i.test(userPrompt);
364
+ const disjointWrites = /\bdisjoint\b|\bnon[- ]overlapping\b|\bseparate files?\b|\bdistinct files?\b/i.test(userPrompt);
365
+ const sharedWrite = /\bsame files?\b|\bshared mutable state\b|\boverlapping writes?\b|\bshared write[- ]set\b/i.test(userPrompt);
366
+ const dependentStages = /\bdependent\b|\bsequential\b|\bstaged?\b|\bafter\b.*\bthen\b/i.test(userPrompt);
367
+ const multiSession = /\bmulti[- ]session\b|\bmultiple sessions\b|\bacross sessions\b|\bdurable\b|\blong[- ]running\b|\bpersistent handoff\b/i.test(userPrompt);
368
+ const reusableSpecialists = /\breusable specialists?\b|\bpersistent roles?\b|\bspecialist catalog\b|\breusable roles?\b/i.test(userPrompt);
369
+ const crossDomain = countDomainSignals(promptLower) >= 2;
370
+ const highUncertainty = /\bhigh uncertainty\b|\bcompeting approaches\b|\bdesign comparison\b|\bcompare alternatives\b|\btrade[- ]offs?\b/i.test(userPrompt);
371
+ const actionGateReasonCodes = detectActionGateReasons(userPrompt);
372
+ const irreversibleAction = actionGateReasonCodes.includes('irreversible-action');
373
+ const externalSideEffect = actionGateReasonCodes.includes('external-side-effect');
374
+ const requestedStrategy = detectExplicitStrategy(userPrompt, requestedFableModel);
375
+ const prohibitions = detectProhibitions(userPrompt);
376
+ const plannerInputs = plannerInputsFromContext(context, promptLower);
377
+
378
+ const contract = buildRouterContract({
379
+ routingStatus: loadedConfig.routingStatus,
380
+ recommendedTier,
381
+ rationale,
382
+ reasonCodes,
383
+ requestedFableModel,
384
+ explicitRequest: {
385
+ fableModel: requestedFableModel,
386
+ strategy: requestedStrategy,
387
+ prohibitions,
388
+ },
389
+ hostCapabilities: plannerInputs.hostCapabilities,
390
+ constraints: plannerInputs.constraints,
391
+ actionGateReasonCodes,
392
+ signals: {
393
+ macroScope: hasMacroSignal,
394
+ trivialDocsEdit: isTrivialDocsEdit,
395
+ tier3Keyword: hasTier3Keyword,
396
+ tier2Keyword: hasTier2Keyword,
397
+ multipleTasks: hasMultipleTasks,
398
+ multipleSentences: hasMultipleSentences,
399
+ specificFile: mentionsSpecificFile,
400
+ question: hasQuestionMarks,
401
+ independentWorkstreams,
402
+ readOnly,
403
+ disjointWrites,
404
+ sharedWrite,
405
+ dependentStages,
406
+ multiSession,
407
+ reusableSpecialists,
408
+ crossDomain,
409
+ highUncertainty,
410
+ irreversibleAction,
411
+ externalSideEffect,
412
+ highRisk: irreversibleAction || externalSideEffect,
413
+ },
414
+ });
415
+
416
+ console.log(`\n=> WORKFLOW STRATEGY: ${contract.workflowPlan.strategy || 'deferred'}`);
417
+ if (contract.workflowPlan.actionGate.required) {
418
+ console.log(`=> ACTION GATE: required (${contract.workflowPlan.actionGate.reasonCodes.join(', ')}); disposition=pending-approval`);
419
+ }
420
+ if (contract.workflowPlan.fallback.disposition !== 'none') {
421
+ console.log(`=> ROUTING FALLBACK: ${contract.workflowPlan.fallback.disposition}/${contract.workflowPlan.fallback.mode} (${contract.workflowPlan.fallback.reasonCodes.join(', ')})`);
422
+ }
423
+
424
+ if (process.env.HARNESS_ROUTER_CONTRACT_PATH) {
425
+ try {
426
+ writeRouterContract(process.env.HARNESS_ROUTER_CONTRACT_PATH, contract);
427
+ } catch (err) {
428
+ console.error(`[Tier Routing Pre-check] failed to write structured router contract: ${err.message}`);
429
+ }
430
+ }
431
+
432
+ console.log(`\nTreat the tier and strategy above as the default route. Explicit Human Partner choices/prohibitions win and are recorded in the plan; unavailable capabilities must remain visible rather than being silently downgraded.`);
433
+ return contract;
434
+ }
435
+
436
+ let userPrompt = process.argv[2] || '';
437
+ let hookContext = null;
438
+
439
+ if (process.argv[2]) {
440
+ run(userPrompt);
441
+ } else if (process.stdin.isTTY) {
442
+ run('');
443
+ } else {
444
+ let inputData = '';
445
+ process.stdin.setEncoding('utf8');
446
+ process.stdin.on('data', chunk => { inputData += chunk; });
447
+ process.stdin.on('end', () => {
448
+ try {
449
+ if (inputData.trim()) {
450
+ const payload = JSON.parse(inputData);
451
+ if (typeof payload.prompt === 'string') userPrompt = payload.prompt;
452
+ hookContext = payload;
453
+ }
454
+ } catch (err) {
455
+ // Not valid JSON on stdin - fall back to argv/manual behavior.
456
+ }
457
+ run(userPrompt, hookContext);
458
+ });
459
+ }