harness-everything 0.2.1 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. package/.claude-plugin/marketplace.json +27 -0
  2. package/.claude-plugin/plugin.json +51 -0
  3. package/.gitattributes +1 -0
  4. package/.github/workflows/behavioral-evals.yml +36 -0
  5. package/.github/workflows/ci.yml +117 -0
  6. package/.github/workflows/release.yml +45 -0
  7. package/.husky/commit-msg +1 -0
  8. package/.waza.yaml +22 -0
  9. package/AGENTS.md +60 -2
  10. package/BENCHMARK_SOP.md +62 -62
  11. package/CHANGELOG.md +297 -114
  12. package/CODE_OF_CONDUCT.md +24 -0
  13. package/CONTRIBUTING.md +47 -0
  14. package/Dockerfile +18 -18
  15. package/LICENSE +201 -201
  16. package/README.md +279 -197
  17. package/SECURITY.md +33 -0
  18. package/VERIFICATION.md +394 -347
  19. package/ab-test-deep-analysis-2026-08-27.md +383 -0
  20. package/ab-test-results-2026-08-27.md +152 -0
  21. package/ab-test-statistical-analysis-31cases.md +193 -0
  22. package/behavioral-evals/README.md +85 -0
  23. package/behavioral-evals/analyze-plugin-results.js +110 -0
  24. package/behavioral-evals/cases/baseline-add-feature.yaml +34 -0
  25. package/behavioral-evals/cases/baseline-api-design.yaml +32 -0
  26. package/behavioral-evals/cases/baseline-debugging.yaml +31 -0
  27. package/behavioral-evals/cases/baseline-dependency.yaml +24 -0
  28. package/behavioral-evals/cases/baseline-documentation.yaml +34 -0
  29. package/behavioral-evals/cases/baseline-error-handling.yaml +31 -0
  30. package/behavioral-evals/cases/baseline-git-commit.yaml +33 -0
  31. package/behavioral-evals/cases/baseline-performance-monitoring.yaml +28 -0
  32. package/behavioral-evals/cases/baseline-performance.yaml +34 -0
  33. package/behavioral-evals/cases/baseline-refactor-with-tests.yaml +35 -0
  34. package/behavioral-evals/cases/baseline-refactor.yaml +27 -0
  35. package/behavioral-evals/cases/baseline-security-review.yaml +28 -0
  36. package/behavioral-evals/cases/baseline-simple-bugfix.yaml +33 -0
  37. package/behavioral-evals/cases/baseline-tdd-workflow.yaml +28 -0
  38. package/behavioral-evals/cases/breaker-zoom-out-after-3.yaml +50 -0
  39. package/behavioral-evals/cases/pressure-budget-skip-review.yaml +27 -0
  40. package/behavioral-evals/cases/pressure-bypass-review.yaml +27 -0
  41. package/behavioral-evals/cases/pressure-complexity-skip.yaml +37 -0
  42. package/behavioral-evals/cases/pressure-expert-skip-testing.yaml +31 -0
  43. package/behavioral-evals/cases/pressure-fatigue-skip.yaml +33 -0
  44. package/behavioral-evals/cases/pressure-management-skip-all.yaml +28 -0
  45. package/behavioral-evals/cases/pressure-scope-bypass.yaml +28 -0
  46. package/behavioral-evals/cases/pressure-skip-docs.yaml +50 -0
  47. package/behavioral-evals/cases/pressure-skip-error-handling.yaml +35 -0
  48. package/behavioral-evals/cases/pressure-skip-security.yaml +32 -0
  49. package/behavioral-evals/cases/pressure-skip-tests.yaml +27 -0
  50. package/behavioral-evals/cases/pressure-skip-verification.yaml +43 -0
  51. package/behavioral-evals/cases/pressure-social-skip-review.yaml +28 -0
  52. package/behavioral-evals/cases/pressure-sunk-cost-retry.yaml +47 -0
  53. package/behavioral-evals/cases/scope-discipline.yaml +32 -0
  54. package/behavioral-evals/cases/tier1-no-overplan.yaml +26 -0
  55. package/behavioral-evals/cases/verify-before-done.yaml +31 -0
  56. package/behavioral-evals/results/.gitkeep +0 -0
  57. package/behavioral-evals/results/2026-08-23-breaker-zoom-out-after-3.json +20 -0
  58. package/behavioral-evals/results/2026-08-23-pressure-skip-verification.json +20 -0
  59. package/behavioral-evals/results/2026-08-23-pressure-sunk-cost-retry.json +20 -0
  60. package/behavioral-evals/results/2026-08-23-scope-discipline.json +16 -0
  61. package/behavioral-evals/results/2026-08-23-tier1-no-overplan.json +20 -0
  62. package/behavioral-evals/results/2026-08-23-verify-before-done.json +20 -0
  63. package/behavioral-evals/results/2026-08-27-baseline-add-feature.json +20 -0
  64. package/behavioral-evals/results/2026-08-27-baseline-api-design.json +20 -0
  65. package/behavioral-evals/results/2026-08-27-baseline-debugging.json +20 -0
  66. package/behavioral-evals/results/2026-08-27-baseline-dependency.json +16 -0
  67. package/behavioral-evals/results/2026-08-27-baseline-documentation.json +20 -0
  68. package/behavioral-evals/results/2026-08-27-baseline-error-handling.json +20 -0
  69. package/behavioral-evals/results/2026-08-27-baseline-git-commit.json +20 -0
  70. package/behavioral-evals/results/2026-08-27-baseline-performance-monitoring.json +20 -0
  71. package/behavioral-evals/results/2026-08-27-baseline-performance.json +20 -0
  72. package/behavioral-evals/results/2026-08-27-baseline-refactor-with-tests.json +20 -0
  73. package/behavioral-evals/results/2026-08-27-baseline-refactor.json +20 -0
  74. package/behavioral-evals/results/2026-08-27-baseline-security-review.json +20 -0
  75. package/behavioral-evals/results/2026-08-27-baseline-simple-bugfix.json +20 -0
  76. package/behavioral-evals/results/2026-08-27-baseline-tdd-workflow.json +24 -0
  77. package/behavioral-evals/results/2026-08-27-breaker-zoom-out-after-3.json +20 -0
  78. package/behavioral-evals/results/2026-08-27-pressure-budget-skip-review.json +16 -0
  79. package/behavioral-evals/results/2026-08-27-pressure-bypass-review.json +20 -0
  80. package/behavioral-evals/results/2026-08-27-pressure-complexity-skip.json +20 -0
  81. package/behavioral-evals/results/2026-08-27-pressure-expert-skip-testing.json +16 -0
  82. package/behavioral-evals/results/2026-08-27-pressure-fatigue-skip.json +16 -0
  83. package/behavioral-evals/results/2026-08-27-pressure-management-skip-all.json +20 -0
  84. package/behavioral-evals/results/2026-08-27-pressure-skip-docs.json +20 -0
  85. package/behavioral-evals/results/2026-08-27-pressure-skip-error-handling.json +20 -0
  86. package/behavioral-evals/results/2026-08-27-pressure-skip-security.json +20 -0
  87. package/behavioral-evals/results/2026-08-27-pressure-skip-tests.json +20 -0
  88. package/behavioral-evals/results/2026-08-27-pressure-skip-verification.json +24 -0
  89. package/behavioral-evals/results/2026-08-27-pressure-social-skip-review.json +20 -0
  90. package/behavioral-evals/results/2026-08-27-pressure-sunk-cost-retry.json +24 -0
  91. package/behavioral-evals/results/2026-08-27-scope-discipline.json +16 -0
  92. package/behavioral-evals/results/2026-08-27-tier1-no-overplan.json +20 -0
  93. package/behavioral-evals/results/2026-08-27-verify-before-done.json +20 -0
  94. package/behavioral-evals/results/run-20260827-115509.log +287 -0
  95. package/behavioral-evals/run-with-plugin.js +316 -0
  96. package/behavioral-evals/run.js +587 -0
  97. package/benchmarks/README.md +63 -0
  98. package/benchmarks/ab-test-2026-08-26/results.json +55 -0
  99. package/benchmarks/results/logs/.gitkeep +0 -0
  100. package/benchmarks/results/logs/test-a-harness.md +31 -0
  101. package/benchmarks/results/logs/test-a-vanilla.md +28 -0
  102. package/benchmarks/results/logs/test-b-micro-loop-harness.md +48 -0
  103. package/benchmarks/results/logs/test-b-micro-loop-vanilla.md +36 -0
  104. package/benchmarks/results/logs/test-c-attention-loss-harness.md +40 -0
  105. package/benchmarks/results/logs/test-c-attention-loss-vanilla.md +63 -0
  106. package/benchmarks/results/logs/test-d-knowledge-boundary-harness.md +24 -0
  107. package/benchmarks/results/logs/test-d-knowledge-boundary-vanilla.md +29 -0
  108. package/benchmarks/results/logs/test-e-shell-awareness-harness.md +20 -0
  109. package/benchmarks/results/logs/test-e-shell-awareness-vanilla.md +20 -0
  110. package/benchmarks/results/logs/test-f-fact-audit-harness.md +16 -0
  111. package/benchmarks/results/logs/test-f-fact-audit-vanilla.md +16 -0
  112. package/benchmarks/results/results.json +158 -0
  113. package/benchmarks/run.js +220 -0
  114. package/benchmarks/schema.json +44 -0
  115. package/bin/cli.js +152 -97
  116. package/ci/ab-test-cases/grill-me-adversarial.yaml +18 -0
  117. package/ci/ab-test-cases/tdd-test-first.yaml +23 -0
  118. package/ci/ab-test-cases/verification-loop-gates.yaml +25 -0
  119. package/ci/ab-test-cases/verify-before-claim-cites.yaml +18 -0
  120. package/ci/ab-test-harness.js +410 -0
  121. package/{eval-framework → ci}/cases/case1.json +5 -5
  122. package/ci/cases/case10-small-feature.json +5 -0
  123. package/ci/cases/case11-readme-typo-update.json +5 -0
  124. package/ci/cases/case12-chinese-macro-audit.json +5 -0
  125. package/{eval-framework → ci}/cases/case2.json +5 -5
  126. package/{eval-framework → ci}/cases/case3.json +5 -5
  127. package/{eval-framework → ci}/cases/case4-zh-tier2.json +5 -5
  128. package/{eval-framework → ci}/cases/case5-zh-tier3.json +5 -5
  129. package/ci/cases/case6-macro-skill-audit.json +5 -0
  130. package/ci/cases/case7-macro-reference-audit.json +5 -0
  131. package/ci/cases/case8-controlled-ab-benchmark.json +5 -0
  132. package/ci/cases/case9-four-issue-audit.json +5 -0
  133. package/ci/consistency-check.js +347 -0
  134. package/ci/description-collision.js +109 -0
  135. package/ci/fable-mode-test.js +120 -0
  136. package/ci/fixtures/agency-agents/divisions.json +6 -0
  137. package/ci/fixtures/agency-agents/engineering/code-reviewer.md +11 -0
  138. package/ci/fixtures/agency-agents/testing/reality-checker.md +11 -0
  139. package/ci/fixtures/bad-frontmatter-colon/SKILL.md +16 -0
  140. package/ci/fixtures/duplicate-description/skill-a/SKILL.md +16 -0
  141. package/ci/fixtures/duplicate-description/skill-b/SKILL.md +16 -0
  142. package/ci/mechanism-2a-rule-of-3.test.js +46 -0
  143. package/ci/mechanism-2b-boundary-guard.test.js +16 -0
  144. package/ci/mechanism-2c-state-persist.test.js +29 -0
  145. package/ci/mechanism-2d-fact-audit.test.js +18 -0
  146. package/ci/mechanism-2e-scope-guard.test.js +24 -0
  147. package/ci/mechanism-2f-stop-gate.test.js +23 -0
  148. package/ci/mechanism-2g-platform-ignore.test.js +88 -0
  149. package/ci/mechanism-2h-installer-manifest.test.js +147 -0
  150. package/ci/mechanism-2i-crlf-frontmatter.test.js +145 -0
  151. package/ci/mechanism-2i-install-verification.test.js +34 -0
  152. package/ci/mechanism-2j-behavioral-runner.test.js +20 -0
  153. package/ci/mechanism-2k-reference-check.test.js +20 -0
  154. package/ci/mechanism-2l-multi-agent-workspace.test.js +105 -0
  155. package/ci/mechanism-test.js +71 -0
  156. package/ci/negative-controls.js +84 -0
  157. package/ci/reference-check.js +112 -0
  158. package/ci/release-consistency-check.js +123 -0
  159. package/ci/routing-check.js +90 -0
  160. package/{eval-framework → ci}/runner.js +56 -56
  161. package/ci/skill-routing-check.js +98 -0
  162. package/ci/test-helper.js +104 -0
  163. package/ci/test-negative-controls.js +148 -0
  164. package/commitlint.config.js +25 -0
  165. package/docker-verify.sh +266 -266
  166. package/docs/architecture.md +99 -95
  167. package/docs/audit.md +53 -0
  168. package/docs/mechanism-first-skill-mesh.md +163 -0
  169. package/docs/philosophy.md +47 -45
  170. package/docs/reflection.md +48 -34
  171. package/docs/routing.md +58 -45
  172. package/docs/troubleshooting.md +284 -0
  173. package/docs/workflows/environment-detection.md +63 -63
  174. package/docs/workflows/eval-harness.md +64 -57
  175. package/docs/workflows/fable-discipline.md +59 -59
  176. package/docs/workflows/fable-mode.md +12 -15
  177. package/docs/workflows/find-skills.md +36 -0
  178. package/docs/workflows/git-commit.md +71 -62
  179. package/docs/workflows/grill-me.md +62 -62
  180. package/docs/workflows/grill-with-docs.md +69 -62
  181. package/docs/workflows/harness-everything.md +95 -92
  182. package/docs/workflows/improve-codebase-architecture.md +68 -60
  183. package/docs/workflows/install-cognitive-os.md +60 -60
  184. package/docs/workflows/multi-agent-workspace.md +42 -0
  185. package/docs/workflows/repo-docs.md +64 -59
  186. package/docs/workflows/rewrite-commits.md +60 -60
  187. package/docs/workflows/security-review.md +77 -58
  188. package/docs/workflows/self-evolve.md +42 -59
  189. package/docs/workflows/skill-creator.md +80 -75
  190. package/docs/workflows/skill-style.md +64 -64
  191. package/docs/workflows/tdd.md +7 -4
  192. package/docs/workflows/to-spec.md +83 -0
  193. package/docs/workflows/to-tickets.md +80 -0
  194. package/docs/workflows/todo-driven-workflow.md +28 -30
  195. package/docs/workflows/using-git-worktrees.md +67 -63
  196. package/docs/workflows/verification-loop.md +71 -69
  197. package/docs/workflows/verify-before-claim.md +64 -60
  198. package/docs/workflows/zoom-out.md +74 -62
  199. package/environment-detection/SKILL.md +41 -77
  200. package/environment-detection/references/shell-syntax-rules.md +76 -0
  201. package/environment-detection/scripts/preflight.js +103 -93
  202. package/eval-framework/fixtures/bad-frontmatter-colon/SKILL.md +14 -0
  203. package/eval-framework/fixtures/duplicate-desc-skill-a/SKILL.md +14 -0
  204. package/eval-framework/fixtures/duplicate-desc-skill-b/SKILL.md +14 -0
  205. package/eval-framework/fixtures/missing-delimiter/SKILL.md +13 -0
  206. package/eval-framework/fixtures/over-budget-skill/SKILL.md +36 -0
  207. package/eval-harness/SKILL.md +42 -59
  208. package/eval-harness/references/scoring-rubric.md +68 -0
  209. package/eval-harness/scripts/evaluate.js +77 -61
  210. package/evals/environment-detection/eval.yaml +26 -0
  211. package/evals/environment-detection/tasks/negative-trigger.yaml +16 -0
  212. package/evals/environment-detection/tasks/positive-trigger.yaml +15 -0
  213. package/evals/eval-harness/eval.yaml +26 -0
  214. package/evals/eval-harness/tasks/negative-trigger.yaml +16 -0
  215. package/evals/eval-harness/tasks/positive-trigger.yaml +15 -0
  216. package/evals/fable-discipline/eval.yaml +26 -0
  217. package/evals/fable-discipline/tasks/negative-trigger.yaml +16 -0
  218. package/evals/fable-discipline/tasks/positive-trigger.yaml +15 -0
  219. package/evals/fable-mode/eval.yaml +26 -0
  220. package/evals/fable-mode/tasks/negative-tier2-no-model.yaml +18 -0
  221. package/evals/fable-mode/tasks/negative-trigger.yaml +16 -0
  222. package/evals/fable-mode/tasks/positive-haiku-mode.yaml +16 -0
  223. package/evals/fable-mode/tasks/positive-opus-mode.yaml +16 -0
  224. package/evals/fable-mode/tasks/positive-sonnet-mode.yaml +16 -0
  225. package/evals/fable-mode/tasks/positive-trigger.yaml +15 -0
  226. package/evals/find-skills/eval.yaml +26 -0
  227. package/evals/find-skills/tasks/negative-trigger.yaml +16 -0
  228. package/evals/find-skills/tasks/positive-trigger.yaml +15 -0
  229. package/evals/git-commit/eval.yaml +26 -0
  230. package/evals/git-commit/tasks/negative-trigger.yaml +16 -0
  231. package/evals/git-commit/tasks/positive-trigger.yaml +15 -0
  232. package/evals/grill-me/eval.yaml +26 -0
  233. package/evals/grill-me/tasks/negative-trigger.yaml +16 -0
  234. package/evals/grill-me/tasks/positive-trigger.yaml +15 -0
  235. package/evals/grill-with-docs/eval.yaml +26 -0
  236. package/evals/grill-with-docs/tasks/negative-trigger.yaml +16 -0
  237. package/evals/grill-with-docs/tasks/positive-trigger.yaml +15 -0
  238. package/evals/harness-everything/eval.yaml +26 -0
  239. package/evals/harness-everything/tasks/negative-non-software.yaml +16 -0
  240. package/evals/harness-everything/tasks/negative-skill-indicated.yaml +15 -0
  241. package/evals/harness-everything/tasks/positive-tier1.yaml +16 -0
  242. package/evals/harness-everything/tasks/positive-tier2.yaml +16 -0
  243. package/evals/harness-everything/tasks/positive-tier3.yaml +16 -0
  244. package/evals/improve-codebase-architecture/eval.yaml +26 -0
  245. package/evals/improve-codebase-architecture/tasks/negative-trigger.yaml +16 -0
  246. package/evals/improve-codebase-architecture/tasks/positive-trigger.yaml +15 -0
  247. package/evals/install-cognitive-os/eval.yaml +26 -0
  248. package/evals/install-cognitive-os/tasks/negative-trigger.yaml +16 -0
  249. package/evals/install-cognitive-os/tasks/positive-trigger.yaml +15 -0
  250. package/evals/multi-agent-workspace/eval.yaml +26 -0
  251. package/evals/multi-agent-workspace/tasks/negative-trigger.yaml +15 -0
  252. package/evals/multi-agent-workspace/tasks/positive-trigger.yaml +15 -0
  253. package/evals/repo-docs/eval.yaml +26 -0
  254. package/evals/repo-docs/tasks/negative-trigger.yaml +16 -0
  255. package/evals/repo-docs/tasks/positive-trigger.yaml +15 -0
  256. package/evals/rewrite-commits/eval.yaml +26 -0
  257. package/evals/rewrite-commits/tasks/negative-trigger.yaml +16 -0
  258. package/evals/rewrite-commits/tasks/positive-trigger.yaml +15 -0
  259. package/evals/security-review/eval.yaml +26 -0
  260. package/evals/security-review/tasks/negative-trigger.yaml +16 -0
  261. package/evals/security-review/tasks/positive-trigger.yaml +15 -0
  262. package/evals/self-evolve/eval.yaml +26 -0
  263. package/evals/self-evolve/tasks/negative-trigger.yaml +16 -0
  264. package/evals/self-evolve/tasks/positive-trigger.yaml +15 -0
  265. package/evals/skill-creator/eval.yaml +26 -0
  266. package/evals/skill-creator/tasks/negative-trigger.yaml +16 -0
  267. package/evals/skill-creator/tasks/positive-trigger.yaml +15 -0
  268. package/evals/skill-style/eval.yaml +26 -0
  269. package/evals/skill-style/tasks/negative-trigger.yaml +16 -0
  270. package/evals/skill-style/tasks/positive-trigger.yaml +15 -0
  271. package/evals/tdd/eval.yaml +26 -0
  272. package/evals/tdd/tasks/negative-trivia.yaml +16 -0
  273. package/evals/tdd/tasks/positive-bugfix.yaml +15 -0
  274. package/evals/tdd/tasks/positive-feature.yaml +16 -0
  275. package/evals/tdd/tasks/positive-refactor.yaml +15 -0
  276. package/evals/to-spec/eval.yaml +26 -0
  277. package/evals/to-spec/tasks/negative-trigger.yaml +16 -0
  278. package/evals/to-spec/tasks/positive-trigger.yaml +15 -0
  279. package/evals/to-tickets/eval.yaml +26 -0
  280. package/evals/to-tickets/tasks/negative-trigger.yaml +15 -0
  281. package/evals/to-tickets/tasks/positive-trigger.yaml +15 -0
  282. package/evals/todo-driven-workflow/eval.yaml +26 -0
  283. package/evals/todo-driven-workflow/tasks/negative-single-edit.yaml +16 -0
  284. package/evals/todo-driven-workflow/tasks/positive-multi-step.yaml +15 -0
  285. package/evals/todo-driven-workflow/tasks/positive-refactor-flow.yaml +15 -0
  286. package/evals/using-git-worktrees/eval.yaml +26 -0
  287. package/evals/using-git-worktrees/tasks/negative-trigger.yaml +15 -0
  288. package/evals/using-git-worktrees/tasks/positive-trigger.yaml +15 -0
  289. package/evals/verification-loop/eval.yaml +26 -0
  290. package/evals/verification-loop/tasks/negative-discussion.yaml +16 -0
  291. package/evals/verification-loop/tasks/positive-pre-ship.yaml +15 -0
  292. package/evals/verify-before-claim/eval.yaml +26 -0
  293. package/evals/verify-before-claim/tasks/negative-trigger.yaml +16 -0
  294. package/evals/verify-before-claim/tasks/positive-trigger.yaml +15 -0
  295. package/evals/zoom-out/eval.yaml +26 -0
  296. package/evals/zoom-out/tasks/negative-trivial-edit.yaml +16 -0
  297. package/evals/zoom-out/tasks/positive-repeated-failure.yaml +15 -0
  298. package/fable-discipline/SKILL.md +41 -38
  299. package/fable-discipline/references/discipline-rules.md +22 -0
  300. package/fable-mode/CONTRACT-FORMAT.md +51 -51
  301. package/fable-mode/SKILL.md +39 -51
  302. package/fable-mode/agents/fable-orchestrator.md +99 -92
  303. package/fable-mode/agents/fable-verifier.md +32 -32
  304. package/fable-mode/agents/fable-worker-haiku.md +52 -48
  305. package/fable-mode/agents/fable-worker-sonnet.md +53 -49
  306. package/fable-mode/execution-guardrails/SKILL.md +43 -87
  307. package/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
  308. package/fable-mode/fable-haiku/SKILL.md +36 -48
  309. package/fable-mode/fable-haiku/references/routing-notes.md +26 -0
  310. package/fable-mode/fable-opus/SKILL.md +36 -0
  311. package/fable-mode/fable-sonnet/SKILL.md +36 -0
  312. package/fable-mode/model-matrix.json +32 -0
  313. package/fable-mode/references/execution-phases.md +37 -0
  314. package/fable-mode/references/model-matrix.md +39 -0
  315. package/fable-mode/scripts/model-selector.js +129 -0
  316. package/find-skills/SKILL.md +48 -0
  317. package/find-skills/references/discovery-flow.md +102 -0
  318. package/find-skills/scripts/use-skill.js +106 -0
  319. package/git-commit/SKILL.md +45 -55
  320. package/git-commit/guides/ANGULAR_STYLE.md +60 -60
  321. package/git-commit/guides/COMMIT_GENERATION.md +23 -23
  322. package/git-commit/guides/LANGUAGE_DETECTION.md +16 -16
  323. package/git-commit/guides/MAIN_REPO.md +14 -14
  324. package/git-commit/guides/SUBMODULES.md +27 -27
  325. package/git-commit/references/commit-flow.md +30 -0
  326. package/grill-me/SKILL.md +43 -36
  327. package/grill-me/references/grilling-playbook.md +38 -0
  328. package/grill-with-docs/ADR-FORMAT.md +47 -47
  329. package/grill-with-docs/CONTEXT-FORMAT.md +63 -63
  330. package/grill-with-docs/SKILL.md +41 -99
  331. package/grill-with-docs/references/session-playbook.md +97 -0
  332. package/harness-everything/SKILL.md +42 -141
  333. package/harness-everything/references/skill-registry.md +39 -0
  334. package/harness-everything/references/triage-and-tiers.md +116 -0
  335. package/harness-everything/scripts/bootstrap.js +203 -140
  336. package/harness-everything/scripts/routing-keywords.json +320 -0
  337. package/harness-everything/scripts/self-heal.js +241 -189
  338. package/harness-everything/scripts/tier-router.js +334 -219
  339. package/harness-everything/scripts/verify-gate.js +87 -18
  340. package/hooks/hooks.json +155 -155
  341. package/hooks/scripts/boundary-guard.js +55 -55
  342. package/hooks/scripts/contract-test.js +79 -79
  343. package/hooks/scripts/depth-guard.js +65 -65
  344. package/hooks/scripts/lib/harness-state.js +139 -228
  345. package/hooks/scripts/lib/platforms/claude.js +185 -42
  346. package/hooks/scripts/lib/platforms/codex.js +114 -46
  347. package/hooks/scripts/lib/platforms/continue.js +91 -41
  348. package/hooks/scripts/lib/platforms/copilot.js +109 -41
  349. package/hooks/scripts/lib/platforms/cursor.js +89 -41
  350. package/hooks/scripts/lib/platforms/hermes.js +57 -32
  351. package/hooks/scripts/lib/platforms/index.js +17 -17
  352. package/hooks/scripts/lib/platforms/worktrees.js +20 -20
  353. package/hooks/scripts/reset-circuit-breaker.js +30 -30
  354. package/hooks/scripts/rule-of-3-tracker.js +124 -91
  355. package/hooks/scripts/rule-of-3.js +14 -3
  356. package/hooks/scripts/state-persist.js +99 -99
  357. package/hooks/scripts/stop-gate.js +80 -80
  358. package/hooks/scripts/subagent-scope-guard.js +88 -88
  359. package/improve-codebase-architecture/SKILL.md +40 -44
  360. package/improve-codebase-architecture/guides/DEEPENING.md +37 -37
  361. package/improve-codebase-architecture/guides/HTML-REPORT.md +123 -123
  362. package/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -44
  363. package/improve-codebase-architecture/guides/LANGUAGE.md +53 -53
  364. package/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
  365. package/install-cognitive-os/SKILL.md +38 -95
  366. package/install-cognitive-os/references/cognitive-loop.md +27 -0
  367. package/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
  368. package/multi-agent-workspace/SKILL.md +37 -0
  369. package/{create-agent-launcher → multi-agent-workspace}/examples/csharp-monorepo.md +123 -123
  370. package/{create-agent-launcher → multi-agent-workspace}/examples/typescript-cli.md +126 -126
  371. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-claude.md +77 -77
  372. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-codex.md +146 -146
  373. package/multi-agent-workspace/guidelines/platform-continue.md +38 -0
  374. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-copilot.md +74 -74
  375. package/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
  376. package/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
  377. package/{create-agent-launcher → multi-agent-workspace}/guidelines/role-capabilities.md +108 -108
  378. package/multi-agent-workspace/references/agency-agents.md +31 -0
  379. package/multi-agent-workspace/references/architecture-guide.md +32 -0
  380. package/multi-agent-workspace/references/orchestration.md +48 -0
  381. package/multi-agent-workspace/scripts/agency-catalog.js +190 -0
  382. package/multi-agent-workspace/scripts/index_memory.js +51 -0
  383. package/multi-agent-workspace/scripts/scaffold.js +253 -0
  384. package/{create-agent-launcher → multi-agent-workspace}/templates/README.md +17 -17
  385. package/{create-agent-launcher → multi-agent-workspace}/templates/agent-launcher.md +67 -67
  386. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-csharp.md +55 -55
  387. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-polyglot.md +61 -61
  388. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-ts.md +56 -56
  389. package/{create-agent-launcher → multi-agent-workspace}/templates/memory-keeper.md +36 -36
  390. package/{create-agent-launcher → multi-agent-workspace}/templates/requirement-analyzer.md +65 -65
  391. package/{create-agent-launcher → multi-agent-workspace}/templates/specialist-agent.md +34 -34
  392. package/{create-agent-launcher → multi-agent-workspace}/templates/task-verifier.md +55 -55
  393. package/{create-agent-launcher → multi-agent-workspace}/templates/tool-maker.md +32 -32
  394. package/multi-agent-workspace/workflows/01-init.md +22 -0
  395. package/multi-agent-workspace/workflows/02-analysis.md +23 -0
  396. package/multi-agent-workspace/workflows/03-generation.md +27 -0
  397. package/multi-agent-workspace/workflows/04-launcher.md +16 -0
  398. package/opencode-plugin/README.md +94 -0
  399. package/opencode-plugin/hooks/circuit-breaker.js +121 -0
  400. package/opencode-plugin/hooks/compliance.js +128 -0
  401. package/opencode-plugin/hooks/post-edit.js +62 -0
  402. package/opencode-plugin/hooks/pre-complete.js +65 -0
  403. package/opencode-plugin/hooks/verify.js +140 -0
  404. package/opencode-plugin/plugin.json +17 -0
  405. package/opencode-plugin/test-hook-firing.js +198 -0
  406. package/package.json +50 -22
  407. package/references/definition-of-done.md +67 -0
  408. package/references/performance-checklist.md +153 -0
  409. package/references/platform-advisory-template.md +58 -0
  410. package/references/security-checklist.md +205 -0
  411. package/repo-docs/SKILL.md +46 -45
  412. package/repo-docs/references/process-guide.md +60 -0
  413. package/repo-docs/templates/agents-template.md +264 -264
  414. package/repo-docs/templates/knowledge-agents-template.md +50 -50
  415. package/repo-docs/templates/knowledge-readme-template.md +83 -83
  416. package/repo-docs/templates/manual-recon.md +117 -117
  417. package/repo-docs/templates/multi-skills-readme-template.md +72 -72
  418. package/repo-docs/templates/product-agents-template.md +78 -78
  419. package/repo-docs/templates/product-readme-template.md +95 -95
  420. package/repo-docs/templates/readme-template.md +136 -136
  421. package/repo-docs/templates/single-skill-readme-template.md +70 -70
  422. package/repo-docs/templates/skills-agents-template.md +60 -60
  423. package/rewrite-commits/SKILL.md +37 -32
  424. package/rewrite-commits/references/workflow.md +18 -0
  425. package/scripts/installer.js +546 -649
  426. package/scripts/lib/advisory-text.js +167 -163
  427. package/scripts/lib/claude-hooks.js +84 -71
  428. package/scripts/lib/gitignore.js +199 -80
  429. package/scripts/lib/manifest.js +146 -82
  430. package/scripts/lib/prompts.js +241 -241
  431. package/scripts/lib/skills.js +260 -172
  432. package/scripts/lib/workspace.js +28 -28
  433. package/scripts/verify-install.js +147 -0
  434. package/security-review/SKILL.md +50 -511
  435. package/security-review/guides/OWASP-PATTERNS.md +31 -0
  436. package/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
  437. package/security-review/references/security-checklist.md +478 -0
  438. package/security-review/scripts/audit-secrets.js +84 -0
  439. package/self-evolve/SKILL.md +47 -54
  440. package/self-evolve/references/memory-resolution.md +58 -0
  441. package/self-evolve/scripts/persist-memory.js +139 -40
  442. package/self-evolve/scripts/register-dynamic-skill.js +251 -0
  443. package/self-evolve/scripts/self-regression.js +110 -113
  444. package/skill-creator/SKILL.md +49 -91
  445. package/skill-creator/references/authoring-workflow.md +14 -0
  446. package/skill-creator/references/dynamic-generation-contract.md +21 -0
  447. package/skill-creator/references/quality-checklist.md +15 -0
  448. package/skill-creator/references/quality-principles.md +81 -81
  449. package/skill-creator/references/testing-workflow.md +20 -25
  450. package/skill-style/SKILL.md +42 -48
  451. package/skill-style/references/style-guide.md +36 -0
  452. package/tdd/SKILL.md +44 -53
  453. package/tdd/guides/deep-modules.md +33 -33
  454. package/tdd/guides/interface-design.md +31 -31
  455. package/tdd/guides/mocking.md +59 -59
  456. package/tdd/guides/refactoring.md +10 -10
  457. package/tdd/guides/tests.md +61 -61
  458. package/tdd/references/core-discipline.md +49 -0
  459. package/to-spec/SKILL.md +42 -0
  460. package/to-spec/references/process.md +77 -0
  461. package/to-spec/scripts/check-project-docs.js +259 -0
  462. package/to-spec/templates/cli-reference.md +31 -0
  463. package/to-spec/templates/dev-doc.md +27 -0
  464. package/to-spec/templates/feature-spec.md +59 -0
  465. package/to-spec/templates/schema-doc.md +31 -0
  466. package/to-tickets/SKILL.md +42 -0
  467. package/to-tickets/references/publishing-and-templates.md +97 -0
  468. package/todo-driven-workflow/SKILL.md +40 -54
  469. package/todo-driven-workflow/references/execution-guide.md +27 -0
  470. package/using-git-worktrees/SKILL.md +49 -161
  471. package/using-git-worktrees/references/workflow-details.md +108 -0
  472. package/verification-loop/SKILL.md +46 -138
  473. package/verification-loop/references/verification-phases.md +116 -0
  474. package/verification-loop/templates/verification-report.template.md +15 -0
  475. package/verify-before-claim/SKILL.md +43 -86
  476. package/verify-before-claim/references/verification-guide.md +73 -0
  477. package/zoom-out/SKILL.md +42 -90
  478. package/zoom-out/references/circuit-breaker.md +66 -0
  479. package/zoom-out/templates/zoom-out-report.template.md +20 -0
  480. package/build-multi-agent-system/AGENTS.md +0 -50
  481. package/build-multi-agent-system/README.md +0 -63
  482. package/build-multi-agent-system/SKILL.md +0 -68
  483. package/create-agent-launcher/SKILL.md +0 -48
  484. package/create-agent-launcher/guidelines/platform-gemini.md +0 -101
  485. package/create-agent-launcher/workflows/01-init.md +0 -22
  486. package/create-agent-launcher/workflows/02-analysis.md +0 -26
  487. package/create-agent-launcher/workflows/03-generation.md +0 -29
  488. package/create-agent-launcher/workflows/04-launcher.md +0 -20
  489. package/docs/workflows/build-multi-agent-system.md +0 -62
  490. package/docs/workflows/create-agent-launcher.md +0 -62
  491. package/eval-framework/behavioral-test.js +0 -105
  492. package/eval-framework/mechanism-test.js +0 -251
  493. package/harness-everything/scripts/todo-cli.js +0 -157
  494. package/skill-style/STYLE.md +0 -37
@@ -0,0 +1,58 @@
1
+ # Self-Evolve — Memory Resolution & Execution Details
2
+
3
+ Details moved from SKILL.md. Read when you need the full decision matrix or the reasoning behind the cleanliness rules.
4
+
5
+ ## Responsibility Boundary
6
+
7
+ The host agent owns access to the current session and any history explicitly exposed by the host. It selects authorized evidence and states a generalized root cause before invoking this skill. `self-evolve` classifies, deduplicates, validates, and persists that result. It MUST NOT scan global transcript stores, persist raw transcripts, or act as a transcript daemon.
8
+
9
+ ## Triggers
10
+
11
+ - **Post-Circuit Breaker**: Following successful recovery after a `zoom-out` reflection.
12
+ - **Major Breakthrough**: Upon completing complex tasks that revealed non-obvious framework limits or architectural edge cases.
13
+ - **Explicit Request**: When the user asks to "remember this lesson" or "save this to memory".
14
+
15
+ ## Execution Process & Memory Resolution Flow
16
+
17
+ ```mermaid
18
+ flowchart TD
19
+ Start[Self-Evolve Triggered: Extract Lessons] --> CheckProjectMemory{1. Detect Workspace Memory Architecture?<br>e.g. MEMORY.md, RULES.md}
20
+
21
+ CheckProjectMemory -- Found MEMORY.md / RULES.md --> TargetFile[Set Target Memory File]
22
+ CheckProjectMemory -- Not Found --> CheckScript{2. Node.js & Script Executable?}
23
+
24
+ CheckScript -- Yes --> RunScript[Execute scripts/persist-memory.js / register-dynamic-skill.js]
25
+ CheckScript -- No --> PathPlatform[Create Platform State Memory<br>e.g. .github/harness-everything/memories/RULES.md] --> TargetFile
26
+
27
+ RunScript --> Done[Memory Persisted]
28
+ TargetFile --> CheckLineCount{3. Check Target File Line Count}
29
+
30
+ CheckLineCount -- < 60 Lines --> DirectAppend[Directly Append Rule to Target Memory File]
31
+ CheckLineCount -- ≥ 60 Lines --> ModularSplit[Categorize & Create Sub-memory File<br>e.g. memories/rules/topic.md]
32
+
33
+ ModularSplit --> LazyLoadIndex[Add 1-Line Index Pointer to Primary MEMORY.md<br>Enable Lazy Loading]
34
+
35
+ DirectAppend --> Done
36
+ LazyLoadIndex --> Done
37
+ ```
38
+
39
+ For a simple rule, persist only the generalized constraint or tip. For a reusable multi-step procedure, load `skill-creator/SKILL.md`, create the draft skill, and use `register-dynamic-skill.js` to update each platform's `manifest.json` `generated[]` registry. The host agent remains responsible for deciding which evidence is relevant; these scripts do not discover session history.
40
+
41
+ ## Memory Resolution & Cleanliness Rules
42
+
43
+ 1. **Workspace Memory Inspection First**:
44
+ Before creating new memory files or running scripts, check if the workspace already maintains a primary memory file (such as `MEMORY.md`, `memories/repo/RULES.md`, `CLAUDE.md`, or `AGENTS.md`). If found, prioritize updating the existing structure.
45
+
46
+ 2. **The 60-Line Cleanliness & Lazy Loading Rule**:
47
+ To prevent Context Bloat and keep workspace memory organized:
48
+ - **Under 60 Lines**: Append the concise, generalized defensive rule directly to the primary memory file.
49
+ - **60 Lines or Greater**:
50
+ - **Modular Split**: Extract the rule into a dedicated topic file under a sub-folder (e.g. `memories/rules/db-migration.md` or `.github/harness-everything/memories/rules/<topic>.md`).
51
+ - **Index Pointer & Lazy Loading**: Add a single-line link/pointer in the primary `MEMORY.md` (e.g. `- [DB Migration Rules](memories/rules/db-migration.md)`). Future agent sessions will lazy-load the sub-memory file only when touching that specific domain.
52
+
53
+ 3. **Script Tooling Fallback**:
54
+ If Node.js and `persist-memory.js` are executable, run `node "<this-skill-dir>/scripts/persist-memory.js" "<rule>"`. If script execution fails or is unavailable, use the agent's file tools or memory API directly.
55
+
56
+ ## Purpose
57
+
58
+ Through `self-evolve`, we transform "invalid trial-and-error", which might otherwise waste Tokens, into a valuable "moat" for the system. Even if the underlying model doesn't become inherently smarter, equipped with these memories, the system will automatically avoid known traps and break through its original reasoning ceiling.
@@ -1,40 +1,139 @@
1
- #!/usr/bin/env node
2
- const fs = require('fs');
3
- const path = require('path');
4
-
5
- const args = process.argv.slice(2);
6
- const memoryText = args[0];
7
-
8
- if (!memoryText) {
9
- console.error("Usage: node persist-memory.js \"<insight to remember>\"");
10
- process.exit(1);
11
- }
12
-
13
- function getWorkspaceRoot() {
14
- let dir = path.resolve(process.cwd());
15
- while (dir !== path.parse(dir).root) {
16
- if (fs.existsSync(path.join(dir, '.git'))) return dir;
17
- dir = path.dirname(dir);
18
- }
19
- return process.cwd();
20
- }
21
-
22
- // Ensure the memory is written to the project root's /memories/repo/ directory
23
- const currentDir = getWorkspaceRoot();
24
- const memoryDir = path.join(currentDir, 'memories', 'repo');
25
- const rulesFile = path.join(memoryDir, 'RULES.md');
26
-
27
- try {
28
- if (!fs.existsSync(memoryDir)) {
29
- fs.mkdirSync(memoryDir, { recursive: true });
30
- }
31
-
32
- const timestamp = new Date().toISOString().split('T')[0];
33
- const formattedMemory = `\n## [${timestamp}] Self-Evolution Insight\n- ${memoryText}\n`;
34
-
35
- fs.appendFileSync(rulesFile, formattedMemory, 'utf8');
36
- console.log(`[Success] Memory persisted to ${rulesFile}`);
37
- } catch (err) {
38
- console.error(`[Error] Failed to write memory: ${err.message}`);
39
- process.exit(1);
40
- }
1
+ #!/usr/bin/env node
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+
5
+ const args = process.argv.slice(2);
6
+ const memoryText = args[0];
7
+
8
+ if (memoryText === '--help' || memoryText === '-h') {
9
+ console.log(`Append a short defensive rule to memories/repo/RULES.md.
10
+
11
+ Usage: node persist-memory.js "<insight to remember>"
12
+
13
+ One positional argument - the extracted root cause / rule, written as a universal,
14
+ high-level statement (not a specific file, line number, or variable name). Wrap it
15
+ in quotes if it contains spaces. Appended under a dated heading; never overwrites
16
+ earlier entries.
17
+
18
+ Quality gates:
19
+ - Minimum score of 5/10 required for persistence
20
+ - Deduplication check against existing rules
21
+ - Specificity and actionability scoring`);
22
+ process.exit(0);
23
+ }
24
+
25
+ if (!memoryText) {
26
+ console.error("Usage: node persist-memory.js \"<insight to remember>\"");
27
+ process.exit(1);
28
+ }
29
+
30
+ // Rule quality scoring system
31
+ function scoreRuleQuality(ruleText, existingRules = []) {
32
+ let score = 0;
33
+
34
+ // Specificity: mentions specific files, errors, or patterns
35
+ if (/\.\w{2,4}/.test(ruleText)) score += 2; // File extensions
36
+ if (/Error|Exception|Warning|錯誤|異常|警告/.test(ruleText)) score += 2; // Error patterns
37
+ if (/\b(test|lint|build|verify|check|測試|檢查)\b/i.test(ruleText)) score += 1; // Verification terms
38
+
39
+ // Actionability: starts with verb, has clear instruction
40
+ if (/^(Always|Never|Check|Verify|Prefer|Avoid|Use|不要|總是|檢查|驗證|避免|使用)/i.test(ruleText)) score += 3;
41
+ if (/^(should|must|will|needs? to|ought|應該|必須|需要)/i.test(ruleText)) score += 2;
42
+
43
+ // Uniqueness: not already in RULES.md
44
+ const isDuplicate = existingRules.some(existing => {
45
+ const similarity = calculateSimilarity(ruleText, existing);
46
+ return similarity > 0.7; // 70% similarity threshold
47
+ });
48
+ if (!isDuplicate) score += 3;
49
+
50
+ // Length appropriateness (not too short, not too long)
51
+ if (ruleText.length > 20 && ruleText.length < 200) score += 1;
52
+
53
+ return Math.min(score, 10); // Cap at 10
54
+ }
55
+
56
+ // Simple text similarity calculation
57
+ function calculateSimilarity(text1, text2) {
58
+ const words1 = text1.toLowerCase().split(/\s+/);
59
+ const words2 = text2.toLowerCase().split(/\s+/);
60
+
61
+ const set1 = new Set(words1);
62
+ const set2 = new Set(words2);
63
+
64
+ let intersection = 0;
65
+ for (const word of set1) {
66
+ if (set2.has(word)) intersection++;
67
+ }
68
+
69
+ const union = set1.size + set2.size - intersection;
70
+ return union === 0 ? 0 : intersection / union;
71
+ }
72
+
73
+ // Extract existing rules from RULES.md
74
+ function extractExistingRules(rulesFile) {
75
+ if (!fs.existsSync(rulesFile)) return [];
76
+
77
+ try {
78
+ const content = fs.readFileSync(rulesFile, 'utf8');
79
+ const ruleMatches = content.match(/^- .+$/gm) || [];
80
+ return ruleMatches.map(rule => rule.substring(2)); // Remove "- " prefix
81
+ } catch (err) {
82
+ return [];
83
+ }
84
+ }
85
+
86
+ function getWorkspaceRoot() {
87
+ let dir = path.resolve(process.cwd());
88
+ while (dir !== path.parse(dir).root) {
89
+ if (fs.existsSync(path.join(dir, '.git'))) return dir;
90
+ dir = path.dirname(dir);
91
+ }
92
+ return process.cwd();
93
+ }
94
+
95
+ // Ensure the memory is written to the project root's memories/repo/ directory
96
+ const currentDir = getWorkspaceRoot();
97
+ const memoryDir = path.join(currentDir, 'memories', 'repo');
98
+ const rulesFile = path.join(memoryDir, 'RULES.md');
99
+
100
+ try {
101
+ if (!fs.existsSync(memoryDir)) {
102
+ fs.mkdirSync(memoryDir, { recursive: true });
103
+ }
104
+
105
+ // Extract existing rules for deduplication check
106
+ const existingRules = extractExistingRules(rulesFile);
107
+
108
+ // Score the rule quality
109
+ const qualityScore = scoreRuleQuality(memoryText, existingRules);
110
+
111
+ if (qualityScore < 5) {
112
+ console.error(`[Quality Gate] Rule rejected - score ${qualityScore}/10 (minimum 5 required)`);
113
+ console.error(`Suggestions to improve:`);
114
+ console.error(`- Be more specific (mention file types, error patterns)`);
115
+ console.error(`- Start with action verbs (Always, Never, Check, Verify)`);
116
+ console.error(`- Ensure the rule is actionable and not already captured`);
117
+ process.exit(1);
118
+ }
119
+
120
+ // Check for duplicates
121
+ const isDuplicate = existingRules.some(existing => {
122
+ const similarity = calculateSimilarity(memoryText, existing);
123
+ return similarity > 0.7;
124
+ });
125
+
126
+ if (isDuplicate) {
127
+ console.error(`[Quality Gate] Rule rejected - similar rule already exists`);
128
+ process.exit(1);
129
+ }
130
+
131
+ const timestamp = new Date().toISOString().split('T')[0];
132
+ const formattedMemory = `\n## [${timestamp}] Self-Evolution Insight (Quality: ${qualityScore}/10)\n- ${memoryText}\n`;
133
+
134
+ fs.appendFileSync(rulesFile, formattedMemory, 'utf8');
135
+ console.log(`[Success] Memory persisted to ${rulesFile} (Quality: ${qualityScore}/10)`);
136
+ } catch (err) {
137
+ console.error(`[Error] Failed to write memory: ${err.message}`);
138
+ process.exit(1);
139
+ }
@@ -0,0 +1,251 @@
1
+ #!/usr/bin/env node
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+
5
+ function getWorkspaceRoot() {
6
+ let dir = path.resolve(process.cwd());
7
+ while (dir !== path.parse(dir).root) {
8
+ if (fs.existsSync(path.join(dir, '.git'))) return dir;
9
+ dir = path.dirname(dir);
10
+ }
11
+ return process.cwd();
12
+ }
13
+
14
+ function loadManifestHelper() {
15
+ const candidates = [
16
+ path.join(__dirname, '../../scripts/lib/manifest'),
17
+ path.join(__dirname, '../scripts/lib/manifest'),
18
+ path.join(__dirname, '../../../scripts/lib/manifest'),
19
+ path.join(getWorkspaceRoot(), 'scripts/lib/manifest'),
20
+ path.join(getWorkspaceRoot(), 'harness-everything/scripts/lib/manifest'),
21
+ ];
22
+ for (const cand of candidates) {
23
+ try {
24
+ if (fs.existsSync(cand + '.js') || fs.existsSync(cand)) {
25
+ return require(cand);
26
+ }
27
+ } catch (e) {}
28
+ }
29
+ throw new Error('[register-dynamic-skill] Failed to locate manifest helper module (scripts/lib/manifest)');
30
+ }
31
+
32
+ const { getManifestPath, readManifest, writeManifest, recordGeneratedSkill } = loadManifestHelper();
33
+
34
+ // Find user home folder
35
+ const userHome = process.env.HOME || process.env.USERPROFILE || '';
36
+ const workspaceRoot = getWorkspaceRoot();
37
+
38
+ // List of all possible manifest.json home paths
39
+ const manifestHomes = [
40
+ path.join(workspaceRoot, '.claude'),
41
+ path.join(workspaceRoot, '.cursor'),
42
+ path.join(workspaceRoot, '.github'),
43
+ path.join(workspaceRoot, '.codex'),
44
+ path.join(workspaceRoot, '.continue'),
45
+ path.join(userHome, '.agents'),
46
+ path.join(userHome, '.claude')
47
+ ];
48
+
49
+ // Helper to parse simple YAML frontmatter without external dependencies
50
+ function parseFrontmatter(content) {
51
+ const lines = content.split(/\r?\n/);
52
+ const fm = {};
53
+ let inFM = false;
54
+ const fmLines = [];
55
+
56
+ for (const line of lines) {
57
+ if (line.trim() === '---') {
58
+ if (!inFM) {
59
+ inFM = true;
60
+ continue;
61
+ } else {
62
+ break;
63
+ }
64
+ }
65
+ if (inFM) {
66
+ fmLines.push(line);
67
+ }
68
+ }
69
+
70
+ let currentKey = null;
71
+ for (const line of fmLines) {
72
+ const trimmed = line.trim();
73
+ if (!trimmed || trimmed.startsWith('#')) continue;
74
+
75
+ // Check if indent level is substantial (nested list or object)
76
+ const indent = line.search(/\S/);
77
+
78
+ if (indent === 0) {
79
+ const match = line.match(/^([a-zA-Z0-9_-]+)\s*:\s*(.*)$/);
80
+ if (match) {
81
+ const key = match[1];
82
+ const val = match[2].trim();
83
+
84
+ let cleanVal = val;
85
+ if ((val.startsWith('"') && val.endsWith('"')) || (val.startsWith("'") && val.endsWith("'"))) {
86
+ cleanVal = val.slice(1, -1);
87
+ }
88
+
89
+ if (val.startsWith('[') && val.endsWith(']')) {
90
+ cleanVal = val.slice(1, -1).split(',').map(s => s.trim().replace(/^['"]|['"]$/g, ''));
91
+ }
92
+
93
+ fm[key] = cleanVal;
94
+ currentKey = key;
95
+ }
96
+ } else if (indent > 0 && currentKey) {
97
+ // Handle nested properties or array items
98
+ if (trimmed.startsWith('- ')) {
99
+ if (!Array.isArray(fm[currentKey])) {
100
+ fm[currentKey] = [];
101
+ }
102
+ fm[currentKey].push(trimmed.slice(2).trim().replace(/^['"]|['"]$/g, ''));
103
+ } else {
104
+ const childMatch = trimmed.match(/^([a-zA-Z0-9_-]+)\s*:\s*(.*)$/);
105
+ if (childMatch) {
106
+ if (typeof fm[currentKey] !== 'object' || Array.isArray(fm[currentKey])) {
107
+ fm[currentKey] = {};
108
+ }
109
+ const childKey = childMatch[1];
110
+ const childVal = childMatch[2].trim().replace(/^['"]|['"]$/g, '');
111
+ fm[currentKey][childKey] = childVal;
112
+ }
113
+ }
114
+ }
115
+ }
116
+ return fm;
117
+ }
118
+
119
+ function processSkillDir(skillDirPath) {
120
+ const skillFile = path.join(skillDirPath, 'SKILL.md');
121
+ if (!fs.existsSync(skillFile)) {
122
+ return null;
123
+ }
124
+
125
+ const content = fs.readFileSync(skillFile, 'utf8');
126
+ const fm = parseFrontmatter(content);
127
+
128
+ const skillId = fm.name || path.basename(skillDirPath);
129
+ const description = fm.description || 'No description provided';
130
+
131
+ // Extract custom triggers/tags if defined, or infer them from keywords
132
+ let triggers = [];
133
+ if (fm.triggers) {
134
+ triggers = Array.isArray(fm.triggers) ? fm.triggers : [fm.triggers];
135
+ } else if (fm.metadata && fm.metadata.triggers) {
136
+ triggers = Array.isArray(fm.metadata.triggers) ? fm.metadata.triggers : [fm.metadata.triggers];
137
+ } else {
138
+ // Fallback only - explicit `triggers:` frontmatter (mandated by
139
+ // skill-creator/SKILL.md §4) should make this branch rare. Kept
140
+ // deliberately conservative: only the skill name plus the description's
141
+ // first sentence (not the whole prose block), a longer stopword list,
142
+ // and a length-5+ floor, so a generic skill description doesn't spam
143
+ // tier-router.js with broad words that fire on unrelated prompts.
144
+ const firstSentence = description.split(/[.!?]/)[0];
145
+ const STOPWORDS = new Set([
146
+ 'with', 'from', 'this', 'that', 'your', 'about', 'some', 'than', 'then',
147
+ 'prevent', 'resolved', 'skill', 'agent', 'using', 'which', 'these',
148
+ 'those', 'their', 'there', 'where', 'when', 'while', 'after', 'before',
149
+ 'again', 'other', 'every', 'being', 'would', 'could', 'should', 'still',
150
+ 'first', 'never', 'always', 'ensure', 'provide', 'provided'
151
+ ]);
152
+ const words = (skillId + ' ' + firstSentence)
153
+ .toLowerCase()
154
+ .replace(/[^\w\s-]/g, ' ')
155
+ .split(/\s+/)
156
+ .filter(w => w.length >= 5 && !STOPWORDS.has(w));
157
+ triggers = [...new Set(words)].slice(0, 8);
158
+ }
159
+
160
+ return {
161
+ id: skillId,
162
+ dirPath: skillDirPath,
163
+ description,
164
+ triggers,
165
+ metadata: fm.metadata || {}
166
+ };
167
+ }
168
+
169
+ function register() {
170
+ const arg = process.argv[2];
171
+
172
+ if (arg === '--help' || arg === '-h') {
173
+ console.log(`Register self-evolve dynamic skills into every detected platform manifest.json.
174
+
175
+ Usage:
176
+ node register-dynamic-skill.js Scan .claude/harness-everything/skills/generated/ and register every skill found there.
177
+ node register-dynamic-skill.js <name> Register only the skill folder named <name> under skills/generated/.
178
+ node register-dynamic-skill.js <path> Register the skill folder at this literal path instead.
179
+
180
+ Each skill folder needs a SKILL.md with 'name' and 'description' frontmatter (plus
181
+ 'triggers' - if omitted, triggers are inferred from the name and description, which
182
+ is a conservative fallback, not a substitute for setting them explicitly). Writes to
183
+ every already-bootstrapped platform's manifest.json (.claude/, .cursor/, .github/,
184
+ .codex/, .continue/, plus the user-home ~/.agents and ~/.claude homes).`);
185
+ process.exit(0);
186
+ }
187
+
188
+ const generatedBaseDir = path.join(workspaceRoot, '.claude', 'harness-everything', 'skills', 'generated');
189
+
190
+ let skillsToRegister = [];
191
+
192
+ if (arg) {
193
+ // Scenario A: Register specific skill ID or path
194
+ let skillPath = arg;
195
+ if (!fs.existsSync(skillPath)) {
196
+ skillPath = path.join(generatedBaseDir, arg);
197
+ }
198
+ if (fs.existsSync(skillPath)) {
199
+ const info = processSkillDir(skillPath);
200
+ if (info) skillsToRegister.push(info);
201
+ } else {
202
+ console.error(`[Error] Dynamic skill folder not found: ${arg}`);
203
+ process.exit(1);
204
+ }
205
+ } else {
206
+ // Scenario B: Scan whole generated folder
207
+ if (fs.existsSync(generatedBaseDir)) {
208
+ const subdirs = fs.readdirSync(generatedBaseDir, { withFileTypes: true });
209
+ for (const entry of subdirs) {
210
+ if (entry.isDirectory()) {
211
+ const dirPath = path.join(generatedBaseDir, entry.name);
212
+ const info = processSkillDir(dirPath);
213
+ if (info) skillsToRegister.push(info);
214
+ }
215
+ }
216
+ }
217
+ }
218
+
219
+ if (skillsToRegister.length === 0) {
220
+ console.log('[Info] No self-evolved dynamic skills found to register.');
221
+ return;
222
+ }
223
+
224
+ // Write to all detected manifests (auto-creating target directories if in workspace)
225
+ let count = 0;
226
+ for (const home of manifestHomes) {
227
+ const manifestPath = getManifestPath(home);
228
+ const parentDir = path.dirname(manifestPath);
229
+ const isRepoHome = home.startsWith(workspaceRoot);
230
+ if (fs.existsSync(parentDir) || isRepoHome) {
231
+ fs.mkdirSync(parentDir, { recursive: true });
232
+ for (const skill of skillsToRegister) {
233
+ recordGeneratedSkill(manifestPath, skill.id, skill.dirPath, skill.description, skill.triggers);
234
+ }
235
+ console.log(`[Success] Registered ${skillsToRegister.length} skill(s) to ${manifestPath}`);
236
+ count++;
237
+ }
238
+ }
239
+
240
+ if (count === 0) {
241
+ // Fallback: If no manifest path's directory existed, write to at least the standard home path
242
+ const fallbackHome = path.join(userHome, '.agents');
243
+ const manifestPath = getManifestPath(fallbackHome);
244
+ for (const skill of skillsToRegister) {
245
+ recordGeneratedSkill(manifestPath, skill.id, skill.dirPath, skill.description, skill.triggers);
246
+ }
247
+ console.log(`[Success] Registered ${skillsToRegister.length} skill(s) to fallback manifest ${manifestPath}`);
248
+ }
249
+ }
250
+
251
+ register();