harness-everything 0.2.1 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. package/.claude-plugin/marketplace.json +27 -0
  2. package/.claude-plugin/plugin.json +51 -0
  3. package/.gitattributes +1 -0
  4. package/.github/workflows/behavioral-evals.yml +36 -0
  5. package/.github/workflows/ci.yml +117 -0
  6. package/.github/workflows/release.yml +45 -0
  7. package/.husky/commit-msg +1 -0
  8. package/.waza.yaml +22 -0
  9. package/AGENTS.md +60 -2
  10. package/BENCHMARK_SOP.md +62 -62
  11. package/CHANGELOG.md +297 -114
  12. package/CODE_OF_CONDUCT.md +24 -0
  13. package/CONTRIBUTING.md +47 -0
  14. package/Dockerfile +18 -18
  15. package/LICENSE +201 -201
  16. package/README.md +279 -197
  17. package/SECURITY.md +33 -0
  18. package/VERIFICATION.md +394 -347
  19. package/ab-test-deep-analysis-2026-08-27.md +383 -0
  20. package/ab-test-results-2026-08-27.md +152 -0
  21. package/ab-test-statistical-analysis-31cases.md +193 -0
  22. package/behavioral-evals/README.md +85 -0
  23. package/behavioral-evals/analyze-plugin-results.js +110 -0
  24. package/behavioral-evals/cases/baseline-add-feature.yaml +34 -0
  25. package/behavioral-evals/cases/baseline-api-design.yaml +32 -0
  26. package/behavioral-evals/cases/baseline-debugging.yaml +31 -0
  27. package/behavioral-evals/cases/baseline-dependency.yaml +24 -0
  28. package/behavioral-evals/cases/baseline-documentation.yaml +34 -0
  29. package/behavioral-evals/cases/baseline-error-handling.yaml +31 -0
  30. package/behavioral-evals/cases/baseline-git-commit.yaml +33 -0
  31. package/behavioral-evals/cases/baseline-performance-monitoring.yaml +28 -0
  32. package/behavioral-evals/cases/baseline-performance.yaml +34 -0
  33. package/behavioral-evals/cases/baseline-refactor-with-tests.yaml +35 -0
  34. package/behavioral-evals/cases/baseline-refactor.yaml +27 -0
  35. package/behavioral-evals/cases/baseline-security-review.yaml +28 -0
  36. package/behavioral-evals/cases/baseline-simple-bugfix.yaml +33 -0
  37. package/behavioral-evals/cases/baseline-tdd-workflow.yaml +28 -0
  38. package/behavioral-evals/cases/breaker-zoom-out-after-3.yaml +50 -0
  39. package/behavioral-evals/cases/pressure-budget-skip-review.yaml +27 -0
  40. package/behavioral-evals/cases/pressure-bypass-review.yaml +27 -0
  41. package/behavioral-evals/cases/pressure-complexity-skip.yaml +37 -0
  42. package/behavioral-evals/cases/pressure-expert-skip-testing.yaml +31 -0
  43. package/behavioral-evals/cases/pressure-fatigue-skip.yaml +33 -0
  44. package/behavioral-evals/cases/pressure-management-skip-all.yaml +28 -0
  45. package/behavioral-evals/cases/pressure-scope-bypass.yaml +28 -0
  46. package/behavioral-evals/cases/pressure-skip-docs.yaml +50 -0
  47. package/behavioral-evals/cases/pressure-skip-error-handling.yaml +35 -0
  48. package/behavioral-evals/cases/pressure-skip-security.yaml +32 -0
  49. package/behavioral-evals/cases/pressure-skip-tests.yaml +27 -0
  50. package/behavioral-evals/cases/pressure-skip-verification.yaml +43 -0
  51. package/behavioral-evals/cases/pressure-social-skip-review.yaml +28 -0
  52. package/behavioral-evals/cases/pressure-sunk-cost-retry.yaml +47 -0
  53. package/behavioral-evals/cases/scope-discipline.yaml +32 -0
  54. package/behavioral-evals/cases/tier1-no-overplan.yaml +26 -0
  55. package/behavioral-evals/cases/verify-before-done.yaml +31 -0
  56. package/behavioral-evals/results/.gitkeep +0 -0
  57. package/behavioral-evals/results/2026-08-23-breaker-zoom-out-after-3.json +20 -0
  58. package/behavioral-evals/results/2026-08-23-pressure-skip-verification.json +20 -0
  59. package/behavioral-evals/results/2026-08-23-pressure-sunk-cost-retry.json +20 -0
  60. package/behavioral-evals/results/2026-08-23-scope-discipline.json +16 -0
  61. package/behavioral-evals/results/2026-08-23-tier1-no-overplan.json +20 -0
  62. package/behavioral-evals/results/2026-08-23-verify-before-done.json +20 -0
  63. package/behavioral-evals/results/2026-08-27-baseline-add-feature.json +20 -0
  64. package/behavioral-evals/results/2026-08-27-baseline-api-design.json +20 -0
  65. package/behavioral-evals/results/2026-08-27-baseline-debugging.json +20 -0
  66. package/behavioral-evals/results/2026-08-27-baseline-dependency.json +16 -0
  67. package/behavioral-evals/results/2026-08-27-baseline-documentation.json +20 -0
  68. package/behavioral-evals/results/2026-08-27-baseline-error-handling.json +20 -0
  69. package/behavioral-evals/results/2026-08-27-baseline-git-commit.json +20 -0
  70. package/behavioral-evals/results/2026-08-27-baseline-performance-monitoring.json +20 -0
  71. package/behavioral-evals/results/2026-08-27-baseline-performance.json +20 -0
  72. package/behavioral-evals/results/2026-08-27-baseline-refactor-with-tests.json +20 -0
  73. package/behavioral-evals/results/2026-08-27-baseline-refactor.json +20 -0
  74. package/behavioral-evals/results/2026-08-27-baseline-security-review.json +20 -0
  75. package/behavioral-evals/results/2026-08-27-baseline-simple-bugfix.json +20 -0
  76. package/behavioral-evals/results/2026-08-27-baseline-tdd-workflow.json +24 -0
  77. package/behavioral-evals/results/2026-08-27-breaker-zoom-out-after-3.json +20 -0
  78. package/behavioral-evals/results/2026-08-27-pressure-budget-skip-review.json +16 -0
  79. package/behavioral-evals/results/2026-08-27-pressure-bypass-review.json +20 -0
  80. package/behavioral-evals/results/2026-08-27-pressure-complexity-skip.json +20 -0
  81. package/behavioral-evals/results/2026-08-27-pressure-expert-skip-testing.json +16 -0
  82. package/behavioral-evals/results/2026-08-27-pressure-fatigue-skip.json +16 -0
  83. package/behavioral-evals/results/2026-08-27-pressure-management-skip-all.json +20 -0
  84. package/behavioral-evals/results/2026-08-27-pressure-skip-docs.json +20 -0
  85. package/behavioral-evals/results/2026-08-27-pressure-skip-error-handling.json +20 -0
  86. package/behavioral-evals/results/2026-08-27-pressure-skip-security.json +20 -0
  87. package/behavioral-evals/results/2026-08-27-pressure-skip-tests.json +20 -0
  88. package/behavioral-evals/results/2026-08-27-pressure-skip-verification.json +24 -0
  89. package/behavioral-evals/results/2026-08-27-pressure-social-skip-review.json +20 -0
  90. package/behavioral-evals/results/2026-08-27-pressure-sunk-cost-retry.json +24 -0
  91. package/behavioral-evals/results/2026-08-27-scope-discipline.json +16 -0
  92. package/behavioral-evals/results/2026-08-27-tier1-no-overplan.json +20 -0
  93. package/behavioral-evals/results/2026-08-27-verify-before-done.json +20 -0
  94. package/behavioral-evals/results/run-20260827-115509.log +287 -0
  95. package/behavioral-evals/run-with-plugin.js +316 -0
  96. package/behavioral-evals/run.js +587 -0
  97. package/benchmarks/README.md +63 -0
  98. package/benchmarks/ab-test-2026-08-26/results.json +55 -0
  99. package/benchmarks/results/logs/.gitkeep +0 -0
  100. package/benchmarks/results/logs/test-a-harness.md +31 -0
  101. package/benchmarks/results/logs/test-a-vanilla.md +28 -0
  102. package/benchmarks/results/logs/test-b-micro-loop-harness.md +48 -0
  103. package/benchmarks/results/logs/test-b-micro-loop-vanilla.md +36 -0
  104. package/benchmarks/results/logs/test-c-attention-loss-harness.md +40 -0
  105. package/benchmarks/results/logs/test-c-attention-loss-vanilla.md +63 -0
  106. package/benchmarks/results/logs/test-d-knowledge-boundary-harness.md +24 -0
  107. package/benchmarks/results/logs/test-d-knowledge-boundary-vanilla.md +29 -0
  108. package/benchmarks/results/logs/test-e-shell-awareness-harness.md +20 -0
  109. package/benchmarks/results/logs/test-e-shell-awareness-vanilla.md +20 -0
  110. package/benchmarks/results/logs/test-f-fact-audit-harness.md +16 -0
  111. package/benchmarks/results/logs/test-f-fact-audit-vanilla.md +16 -0
  112. package/benchmarks/results/results.json +158 -0
  113. package/benchmarks/run.js +220 -0
  114. package/benchmarks/schema.json +44 -0
  115. package/bin/cli.js +152 -97
  116. package/ci/ab-test-cases/grill-me-adversarial.yaml +18 -0
  117. package/ci/ab-test-cases/tdd-test-first.yaml +23 -0
  118. package/ci/ab-test-cases/verification-loop-gates.yaml +25 -0
  119. package/ci/ab-test-cases/verify-before-claim-cites.yaml +18 -0
  120. package/ci/ab-test-harness.js +410 -0
  121. package/{eval-framework → ci}/cases/case1.json +5 -5
  122. package/ci/cases/case10-small-feature.json +5 -0
  123. package/ci/cases/case11-readme-typo-update.json +5 -0
  124. package/ci/cases/case12-chinese-macro-audit.json +5 -0
  125. package/{eval-framework → ci}/cases/case2.json +5 -5
  126. package/{eval-framework → ci}/cases/case3.json +5 -5
  127. package/{eval-framework → ci}/cases/case4-zh-tier2.json +5 -5
  128. package/{eval-framework → ci}/cases/case5-zh-tier3.json +5 -5
  129. package/ci/cases/case6-macro-skill-audit.json +5 -0
  130. package/ci/cases/case7-macro-reference-audit.json +5 -0
  131. package/ci/cases/case8-controlled-ab-benchmark.json +5 -0
  132. package/ci/cases/case9-four-issue-audit.json +5 -0
  133. package/ci/consistency-check.js +347 -0
  134. package/ci/description-collision.js +109 -0
  135. package/ci/fable-mode-test.js +120 -0
  136. package/ci/fixtures/agency-agents/divisions.json +6 -0
  137. package/ci/fixtures/agency-agents/engineering/code-reviewer.md +11 -0
  138. package/ci/fixtures/agency-agents/testing/reality-checker.md +11 -0
  139. package/ci/fixtures/bad-frontmatter-colon/SKILL.md +16 -0
  140. package/ci/fixtures/duplicate-description/skill-a/SKILL.md +16 -0
  141. package/ci/fixtures/duplicate-description/skill-b/SKILL.md +16 -0
  142. package/ci/mechanism-2a-rule-of-3.test.js +46 -0
  143. package/ci/mechanism-2b-boundary-guard.test.js +16 -0
  144. package/ci/mechanism-2c-state-persist.test.js +29 -0
  145. package/ci/mechanism-2d-fact-audit.test.js +18 -0
  146. package/ci/mechanism-2e-scope-guard.test.js +24 -0
  147. package/ci/mechanism-2f-stop-gate.test.js +23 -0
  148. package/ci/mechanism-2g-platform-ignore.test.js +88 -0
  149. package/ci/mechanism-2h-installer-manifest.test.js +147 -0
  150. package/ci/mechanism-2i-crlf-frontmatter.test.js +145 -0
  151. package/ci/mechanism-2i-install-verification.test.js +34 -0
  152. package/ci/mechanism-2j-behavioral-runner.test.js +20 -0
  153. package/ci/mechanism-2k-reference-check.test.js +20 -0
  154. package/ci/mechanism-2l-multi-agent-workspace.test.js +105 -0
  155. package/ci/mechanism-test.js +71 -0
  156. package/ci/negative-controls.js +84 -0
  157. package/ci/reference-check.js +112 -0
  158. package/ci/release-consistency-check.js +123 -0
  159. package/ci/routing-check.js +90 -0
  160. package/{eval-framework → ci}/runner.js +56 -56
  161. package/ci/skill-routing-check.js +98 -0
  162. package/ci/test-helper.js +104 -0
  163. package/ci/test-negative-controls.js +148 -0
  164. package/commitlint.config.js +25 -0
  165. package/docker-verify.sh +266 -266
  166. package/docs/architecture.md +99 -95
  167. package/docs/audit.md +53 -0
  168. package/docs/mechanism-first-skill-mesh.md +163 -0
  169. package/docs/philosophy.md +47 -45
  170. package/docs/reflection.md +48 -34
  171. package/docs/routing.md +58 -45
  172. package/docs/troubleshooting.md +284 -0
  173. package/docs/workflows/environment-detection.md +63 -63
  174. package/docs/workflows/eval-harness.md +64 -57
  175. package/docs/workflows/fable-discipline.md +59 -59
  176. package/docs/workflows/fable-mode.md +12 -15
  177. package/docs/workflows/find-skills.md +36 -0
  178. package/docs/workflows/git-commit.md +71 -62
  179. package/docs/workflows/grill-me.md +62 -62
  180. package/docs/workflows/grill-with-docs.md +69 -62
  181. package/docs/workflows/harness-everything.md +95 -92
  182. package/docs/workflows/improve-codebase-architecture.md +68 -60
  183. package/docs/workflows/install-cognitive-os.md +60 -60
  184. package/docs/workflows/multi-agent-workspace.md +42 -0
  185. package/docs/workflows/repo-docs.md +64 -59
  186. package/docs/workflows/rewrite-commits.md +60 -60
  187. package/docs/workflows/security-review.md +77 -58
  188. package/docs/workflows/self-evolve.md +42 -59
  189. package/docs/workflows/skill-creator.md +80 -75
  190. package/docs/workflows/skill-style.md +64 -64
  191. package/docs/workflows/tdd.md +7 -4
  192. package/docs/workflows/to-spec.md +83 -0
  193. package/docs/workflows/to-tickets.md +80 -0
  194. package/docs/workflows/todo-driven-workflow.md +28 -30
  195. package/docs/workflows/using-git-worktrees.md +67 -63
  196. package/docs/workflows/verification-loop.md +71 -69
  197. package/docs/workflows/verify-before-claim.md +64 -60
  198. package/docs/workflows/zoom-out.md +74 -62
  199. package/environment-detection/SKILL.md +41 -77
  200. package/environment-detection/references/shell-syntax-rules.md +76 -0
  201. package/environment-detection/scripts/preflight.js +103 -93
  202. package/eval-framework/fixtures/bad-frontmatter-colon/SKILL.md +14 -0
  203. package/eval-framework/fixtures/duplicate-desc-skill-a/SKILL.md +14 -0
  204. package/eval-framework/fixtures/duplicate-desc-skill-b/SKILL.md +14 -0
  205. package/eval-framework/fixtures/missing-delimiter/SKILL.md +13 -0
  206. package/eval-framework/fixtures/over-budget-skill/SKILL.md +36 -0
  207. package/eval-harness/SKILL.md +42 -59
  208. package/eval-harness/references/scoring-rubric.md +68 -0
  209. package/eval-harness/scripts/evaluate.js +77 -61
  210. package/evals/environment-detection/eval.yaml +26 -0
  211. package/evals/environment-detection/tasks/negative-trigger.yaml +16 -0
  212. package/evals/environment-detection/tasks/positive-trigger.yaml +15 -0
  213. package/evals/eval-harness/eval.yaml +26 -0
  214. package/evals/eval-harness/tasks/negative-trigger.yaml +16 -0
  215. package/evals/eval-harness/tasks/positive-trigger.yaml +15 -0
  216. package/evals/fable-discipline/eval.yaml +26 -0
  217. package/evals/fable-discipline/tasks/negative-trigger.yaml +16 -0
  218. package/evals/fable-discipline/tasks/positive-trigger.yaml +15 -0
  219. package/evals/fable-mode/eval.yaml +26 -0
  220. package/evals/fable-mode/tasks/negative-tier2-no-model.yaml +18 -0
  221. package/evals/fable-mode/tasks/negative-trigger.yaml +16 -0
  222. package/evals/fable-mode/tasks/positive-haiku-mode.yaml +16 -0
  223. package/evals/fable-mode/tasks/positive-opus-mode.yaml +16 -0
  224. package/evals/fable-mode/tasks/positive-sonnet-mode.yaml +16 -0
  225. package/evals/fable-mode/tasks/positive-trigger.yaml +15 -0
  226. package/evals/find-skills/eval.yaml +26 -0
  227. package/evals/find-skills/tasks/negative-trigger.yaml +16 -0
  228. package/evals/find-skills/tasks/positive-trigger.yaml +15 -0
  229. package/evals/git-commit/eval.yaml +26 -0
  230. package/evals/git-commit/tasks/negative-trigger.yaml +16 -0
  231. package/evals/git-commit/tasks/positive-trigger.yaml +15 -0
  232. package/evals/grill-me/eval.yaml +26 -0
  233. package/evals/grill-me/tasks/negative-trigger.yaml +16 -0
  234. package/evals/grill-me/tasks/positive-trigger.yaml +15 -0
  235. package/evals/grill-with-docs/eval.yaml +26 -0
  236. package/evals/grill-with-docs/tasks/negative-trigger.yaml +16 -0
  237. package/evals/grill-with-docs/tasks/positive-trigger.yaml +15 -0
  238. package/evals/harness-everything/eval.yaml +26 -0
  239. package/evals/harness-everything/tasks/negative-non-software.yaml +16 -0
  240. package/evals/harness-everything/tasks/negative-skill-indicated.yaml +15 -0
  241. package/evals/harness-everything/tasks/positive-tier1.yaml +16 -0
  242. package/evals/harness-everything/tasks/positive-tier2.yaml +16 -0
  243. package/evals/harness-everything/tasks/positive-tier3.yaml +16 -0
  244. package/evals/improve-codebase-architecture/eval.yaml +26 -0
  245. package/evals/improve-codebase-architecture/tasks/negative-trigger.yaml +16 -0
  246. package/evals/improve-codebase-architecture/tasks/positive-trigger.yaml +15 -0
  247. package/evals/install-cognitive-os/eval.yaml +26 -0
  248. package/evals/install-cognitive-os/tasks/negative-trigger.yaml +16 -0
  249. package/evals/install-cognitive-os/tasks/positive-trigger.yaml +15 -0
  250. package/evals/multi-agent-workspace/eval.yaml +26 -0
  251. package/evals/multi-agent-workspace/tasks/negative-trigger.yaml +15 -0
  252. package/evals/multi-agent-workspace/tasks/positive-trigger.yaml +15 -0
  253. package/evals/repo-docs/eval.yaml +26 -0
  254. package/evals/repo-docs/tasks/negative-trigger.yaml +16 -0
  255. package/evals/repo-docs/tasks/positive-trigger.yaml +15 -0
  256. package/evals/rewrite-commits/eval.yaml +26 -0
  257. package/evals/rewrite-commits/tasks/negative-trigger.yaml +16 -0
  258. package/evals/rewrite-commits/tasks/positive-trigger.yaml +15 -0
  259. package/evals/security-review/eval.yaml +26 -0
  260. package/evals/security-review/tasks/negative-trigger.yaml +16 -0
  261. package/evals/security-review/tasks/positive-trigger.yaml +15 -0
  262. package/evals/self-evolve/eval.yaml +26 -0
  263. package/evals/self-evolve/tasks/negative-trigger.yaml +16 -0
  264. package/evals/self-evolve/tasks/positive-trigger.yaml +15 -0
  265. package/evals/skill-creator/eval.yaml +26 -0
  266. package/evals/skill-creator/tasks/negative-trigger.yaml +16 -0
  267. package/evals/skill-creator/tasks/positive-trigger.yaml +15 -0
  268. package/evals/skill-style/eval.yaml +26 -0
  269. package/evals/skill-style/tasks/negative-trigger.yaml +16 -0
  270. package/evals/skill-style/tasks/positive-trigger.yaml +15 -0
  271. package/evals/tdd/eval.yaml +26 -0
  272. package/evals/tdd/tasks/negative-trivia.yaml +16 -0
  273. package/evals/tdd/tasks/positive-bugfix.yaml +15 -0
  274. package/evals/tdd/tasks/positive-feature.yaml +16 -0
  275. package/evals/tdd/tasks/positive-refactor.yaml +15 -0
  276. package/evals/to-spec/eval.yaml +26 -0
  277. package/evals/to-spec/tasks/negative-trigger.yaml +16 -0
  278. package/evals/to-spec/tasks/positive-trigger.yaml +15 -0
  279. package/evals/to-tickets/eval.yaml +26 -0
  280. package/evals/to-tickets/tasks/negative-trigger.yaml +15 -0
  281. package/evals/to-tickets/tasks/positive-trigger.yaml +15 -0
  282. package/evals/todo-driven-workflow/eval.yaml +26 -0
  283. package/evals/todo-driven-workflow/tasks/negative-single-edit.yaml +16 -0
  284. package/evals/todo-driven-workflow/tasks/positive-multi-step.yaml +15 -0
  285. package/evals/todo-driven-workflow/tasks/positive-refactor-flow.yaml +15 -0
  286. package/evals/using-git-worktrees/eval.yaml +26 -0
  287. package/evals/using-git-worktrees/tasks/negative-trigger.yaml +15 -0
  288. package/evals/using-git-worktrees/tasks/positive-trigger.yaml +15 -0
  289. package/evals/verification-loop/eval.yaml +26 -0
  290. package/evals/verification-loop/tasks/negative-discussion.yaml +16 -0
  291. package/evals/verification-loop/tasks/positive-pre-ship.yaml +15 -0
  292. package/evals/verify-before-claim/eval.yaml +26 -0
  293. package/evals/verify-before-claim/tasks/negative-trigger.yaml +16 -0
  294. package/evals/verify-before-claim/tasks/positive-trigger.yaml +15 -0
  295. package/evals/zoom-out/eval.yaml +26 -0
  296. package/evals/zoom-out/tasks/negative-trivial-edit.yaml +16 -0
  297. package/evals/zoom-out/tasks/positive-repeated-failure.yaml +15 -0
  298. package/fable-discipline/SKILL.md +41 -38
  299. package/fable-discipline/references/discipline-rules.md +22 -0
  300. package/fable-mode/CONTRACT-FORMAT.md +51 -51
  301. package/fable-mode/SKILL.md +39 -51
  302. package/fable-mode/agents/fable-orchestrator.md +99 -92
  303. package/fable-mode/agents/fable-verifier.md +32 -32
  304. package/fable-mode/agents/fable-worker-haiku.md +52 -48
  305. package/fable-mode/agents/fable-worker-sonnet.md +53 -49
  306. package/fable-mode/execution-guardrails/SKILL.md +43 -87
  307. package/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
  308. package/fable-mode/fable-haiku/SKILL.md +36 -48
  309. package/fable-mode/fable-haiku/references/routing-notes.md +26 -0
  310. package/fable-mode/fable-opus/SKILL.md +36 -0
  311. package/fable-mode/fable-sonnet/SKILL.md +36 -0
  312. package/fable-mode/model-matrix.json +32 -0
  313. package/fable-mode/references/execution-phases.md +37 -0
  314. package/fable-mode/references/model-matrix.md +39 -0
  315. package/fable-mode/scripts/model-selector.js +129 -0
  316. package/find-skills/SKILL.md +48 -0
  317. package/find-skills/references/discovery-flow.md +102 -0
  318. package/find-skills/scripts/use-skill.js +106 -0
  319. package/git-commit/SKILL.md +45 -55
  320. package/git-commit/guides/ANGULAR_STYLE.md +60 -60
  321. package/git-commit/guides/COMMIT_GENERATION.md +23 -23
  322. package/git-commit/guides/LANGUAGE_DETECTION.md +16 -16
  323. package/git-commit/guides/MAIN_REPO.md +14 -14
  324. package/git-commit/guides/SUBMODULES.md +27 -27
  325. package/git-commit/references/commit-flow.md +30 -0
  326. package/grill-me/SKILL.md +43 -36
  327. package/grill-me/references/grilling-playbook.md +38 -0
  328. package/grill-with-docs/ADR-FORMAT.md +47 -47
  329. package/grill-with-docs/CONTEXT-FORMAT.md +63 -63
  330. package/grill-with-docs/SKILL.md +41 -99
  331. package/grill-with-docs/references/session-playbook.md +97 -0
  332. package/harness-everything/SKILL.md +42 -141
  333. package/harness-everything/references/skill-registry.md +39 -0
  334. package/harness-everything/references/triage-and-tiers.md +116 -0
  335. package/harness-everything/scripts/bootstrap.js +203 -140
  336. package/harness-everything/scripts/routing-keywords.json +320 -0
  337. package/harness-everything/scripts/self-heal.js +241 -189
  338. package/harness-everything/scripts/tier-router.js +334 -219
  339. package/harness-everything/scripts/verify-gate.js +87 -18
  340. package/hooks/hooks.json +155 -155
  341. package/hooks/scripts/boundary-guard.js +55 -55
  342. package/hooks/scripts/contract-test.js +79 -79
  343. package/hooks/scripts/depth-guard.js +65 -65
  344. package/hooks/scripts/lib/harness-state.js +139 -228
  345. package/hooks/scripts/lib/platforms/claude.js +185 -42
  346. package/hooks/scripts/lib/platforms/codex.js +114 -46
  347. package/hooks/scripts/lib/platforms/continue.js +91 -41
  348. package/hooks/scripts/lib/platforms/copilot.js +109 -41
  349. package/hooks/scripts/lib/platforms/cursor.js +89 -41
  350. package/hooks/scripts/lib/platforms/hermes.js +57 -32
  351. package/hooks/scripts/lib/platforms/index.js +17 -17
  352. package/hooks/scripts/lib/platforms/worktrees.js +20 -20
  353. package/hooks/scripts/reset-circuit-breaker.js +30 -30
  354. package/hooks/scripts/rule-of-3-tracker.js +124 -91
  355. package/hooks/scripts/rule-of-3.js +14 -3
  356. package/hooks/scripts/state-persist.js +99 -99
  357. package/hooks/scripts/stop-gate.js +80 -80
  358. package/hooks/scripts/subagent-scope-guard.js +88 -88
  359. package/improve-codebase-architecture/SKILL.md +40 -44
  360. package/improve-codebase-architecture/guides/DEEPENING.md +37 -37
  361. package/improve-codebase-architecture/guides/HTML-REPORT.md +123 -123
  362. package/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -44
  363. package/improve-codebase-architecture/guides/LANGUAGE.md +53 -53
  364. package/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
  365. package/install-cognitive-os/SKILL.md +38 -95
  366. package/install-cognitive-os/references/cognitive-loop.md +27 -0
  367. package/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
  368. package/multi-agent-workspace/SKILL.md +37 -0
  369. package/{create-agent-launcher → multi-agent-workspace}/examples/csharp-monorepo.md +123 -123
  370. package/{create-agent-launcher → multi-agent-workspace}/examples/typescript-cli.md +126 -126
  371. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-claude.md +77 -77
  372. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-codex.md +146 -146
  373. package/multi-agent-workspace/guidelines/platform-continue.md +38 -0
  374. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-copilot.md +74 -74
  375. package/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
  376. package/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
  377. package/{create-agent-launcher → multi-agent-workspace}/guidelines/role-capabilities.md +108 -108
  378. package/multi-agent-workspace/references/agency-agents.md +31 -0
  379. package/multi-agent-workspace/references/architecture-guide.md +32 -0
  380. package/multi-agent-workspace/references/orchestration.md +48 -0
  381. package/multi-agent-workspace/scripts/agency-catalog.js +190 -0
  382. package/multi-agent-workspace/scripts/index_memory.js +51 -0
  383. package/multi-agent-workspace/scripts/scaffold.js +253 -0
  384. package/{create-agent-launcher → multi-agent-workspace}/templates/README.md +17 -17
  385. package/{create-agent-launcher → multi-agent-workspace}/templates/agent-launcher.md +67 -67
  386. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-csharp.md +55 -55
  387. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-polyglot.md +61 -61
  388. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-ts.md +56 -56
  389. package/{create-agent-launcher → multi-agent-workspace}/templates/memory-keeper.md +36 -36
  390. package/{create-agent-launcher → multi-agent-workspace}/templates/requirement-analyzer.md +65 -65
  391. package/{create-agent-launcher → multi-agent-workspace}/templates/specialist-agent.md +34 -34
  392. package/{create-agent-launcher → multi-agent-workspace}/templates/task-verifier.md +55 -55
  393. package/{create-agent-launcher → multi-agent-workspace}/templates/tool-maker.md +32 -32
  394. package/multi-agent-workspace/workflows/01-init.md +22 -0
  395. package/multi-agent-workspace/workflows/02-analysis.md +23 -0
  396. package/multi-agent-workspace/workflows/03-generation.md +27 -0
  397. package/multi-agent-workspace/workflows/04-launcher.md +16 -0
  398. package/opencode-plugin/README.md +94 -0
  399. package/opencode-plugin/hooks/circuit-breaker.js +121 -0
  400. package/opencode-plugin/hooks/compliance.js +128 -0
  401. package/opencode-plugin/hooks/post-edit.js +62 -0
  402. package/opencode-plugin/hooks/pre-complete.js +65 -0
  403. package/opencode-plugin/hooks/verify.js +140 -0
  404. package/opencode-plugin/plugin.json +17 -0
  405. package/opencode-plugin/test-hook-firing.js +198 -0
  406. package/package.json +50 -22
  407. package/references/definition-of-done.md +67 -0
  408. package/references/performance-checklist.md +153 -0
  409. package/references/platform-advisory-template.md +58 -0
  410. package/references/security-checklist.md +205 -0
  411. package/repo-docs/SKILL.md +46 -45
  412. package/repo-docs/references/process-guide.md +60 -0
  413. package/repo-docs/templates/agents-template.md +264 -264
  414. package/repo-docs/templates/knowledge-agents-template.md +50 -50
  415. package/repo-docs/templates/knowledge-readme-template.md +83 -83
  416. package/repo-docs/templates/manual-recon.md +117 -117
  417. package/repo-docs/templates/multi-skills-readme-template.md +72 -72
  418. package/repo-docs/templates/product-agents-template.md +78 -78
  419. package/repo-docs/templates/product-readme-template.md +95 -95
  420. package/repo-docs/templates/readme-template.md +136 -136
  421. package/repo-docs/templates/single-skill-readme-template.md +70 -70
  422. package/repo-docs/templates/skills-agents-template.md +60 -60
  423. package/rewrite-commits/SKILL.md +37 -32
  424. package/rewrite-commits/references/workflow.md +18 -0
  425. package/scripts/installer.js +546 -649
  426. package/scripts/lib/advisory-text.js +167 -163
  427. package/scripts/lib/claude-hooks.js +84 -71
  428. package/scripts/lib/gitignore.js +199 -80
  429. package/scripts/lib/manifest.js +146 -82
  430. package/scripts/lib/prompts.js +241 -241
  431. package/scripts/lib/skills.js +260 -172
  432. package/scripts/lib/workspace.js +28 -28
  433. package/scripts/verify-install.js +147 -0
  434. package/security-review/SKILL.md +50 -511
  435. package/security-review/guides/OWASP-PATTERNS.md +31 -0
  436. package/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
  437. package/security-review/references/security-checklist.md +478 -0
  438. package/security-review/scripts/audit-secrets.js +84 -0
  439. package/self-evolve/SKILL.md +47 -54
  440. package/self-evolve/references/memory-resolution.md +58 -0
  441. package/self-evolve/scripts/persist-memory.js +139 -40
  442. package/self-evolve/scripts/register-dynamic-skill.js +251 -0
  443. package/self-evolve/scripts/self-regression.js +110 -113
  444. package/skill-creator/SKILL.md +49 -91
  445. package/skill-creator/references/authoring-workflow.md +14 -0
  446. package/skill-creator/references/dynamic-generation-contract.md +21 -0
  447. package/skill-creator/references/quality-checklist.md +15 -0
  448. package/skill-creator/references/quality-principles.md +81 -81
  449. package/skill-creator/references/testing-workflow.md +20 -25
  450. package/skill-style/SKILL.md +42 -48
  451. package/skill-style/references/style-guide.md +36 -0
  452. package/tdd/SKILL.md +44 -53
  453. package/tdd/guides/deep-modules.md +33 -33
  454. package/tdd/guides/interface-design.md +31 -31
  455. package/tdd/guides/mocking.md +59 -59
  456. package/tdd/guides/refactoring.md +10 -10
  457. package/tdd/guides/tests.md +61 -61
  458. package/tdd/references/core-discipline.md +49 -0
  459. package/to-spec/SKILL.md +42 -0
  460. package/to-spec/references/process.md +77 -0
  461. package/to-spec/scripts/check-project-docs.js +259 -0
  462. package/to-spec/templates/cli-reference.md +31 -0
  463. package/to-spec/templates/dev-doc.md +27 -0
  464. package/to-spec/templates/feature-spec.md +59 -0
  465. package/to-spec/templates/schema-doc.md +31 -0
  466. package/to-tickets/SKILL.md +42 -0
  467. package/to-tickets/references/publishing-and-templates.md +97 -0
  468. package/todo-driven-workflow/SKILL.md +40 -54
  469. package/todo-driven-workflow/references/execution-guide.md +27 -0
  470. package/using-git-worktrees/SKILL.md +49 -161
  471. package/using-git-worktrees/references/workflow-details.md +108 -0
  472. package/verification-loop/SKILL.md +46 -138
  473. package/verification-loop/references/verification-phases.md +116 -0
  474. package/verification-loop/templates/verification-report.template.md +15 -0
  475. package/verify-before-claim/SKILL.md +43 -86
  476. package/verify-before-claim/references/verification-guide.md +73 -0
  477. package/zoom-out/SKILL.md +42 -90
  478. package/zoom-out/references/circuit-breaker.md +66 -0
  479. package/zoom-out/templates/zoom-out-report.template.md +20 -0
  480. package/build-multi-agent-system/AGENTS.md +0 -50
  481. package/build-multi-agent-system/README.md +0 -63
  482. package/build-multi-agent-system/SKILL.md +0 -68
  483. package/create-agent-launcher/SKILL.md +0 -48
  484. package/create-agent-launcher/guidelines/platform-gemini.md +0 -101
  485. package/create-agent-launcher/workflows/01-init.md +0 -22
  486. package/create-agent-launcher/workflows/02-analysis.md +0 -26
  487. package/create-agent-launcher/workflows/03-generation.md +0 -29
  488. package/create-agent-launcher/workflows/04-launcher.md +0 -20
  489. package/docs/workflows/build-multi-agent-system.md +0 -62
  490. package/docs/workflows/create-agent-launcher.md +0 -62
  491. package/eval-framework/behavioral-test.js +0 -105
  492. package/eval-framework/mechanism-test.js +0 -251
  493. package/harness-everything/scripts/todo-cli.js +0 -157
  494. package/skill-style/STYLE.md +0 -37
@@ -1,251 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Harness Mechanism Test Suite (Claude Code hook contract)
4
- * Automates VERIFICATION.md Section 2 (mechanism check) so it runs on every
5
- * `npm test` instead of only when a human copy-pastes the recipes by hand.
6
- * That manual gap is exactly what let three independent 2026-07-23 audit
7
- * reports (see docs/reports/) misdiagnose working hooks as broken: they
8
- * piped JSON via `echo '...' | node script.js` in a Windows Git Bash shell,
9
- * which mangles stdin/TTY state and produced false negatives. This suite
10
- * uses execSync's `input` option instead (the same technique already proven
11
- * reliable in runner.js and behavioral-test.js) so it is a faithful,
12
- * cross-platform re-run of the exact payloads VERIFICATION.md documents.
13
- *
14
- * Each hook resolves its state directory via detectActivePlatform(), which
15
- * defaults to 'copilot' under a VS Code integrated terminal (TERM_PROGRAM=
16
- * vscode) unless CLAUDE is set - so every child process below is spawned
17
- * with CLAUDE=1 to force the Claude Code state path regardless of the host
18
- * running this test.
19
- *
20
- * All state is written under a dedicated, never-real session id so this
21
- * suite can never collide with or clobber an actual Claude Code session's
22
- * breaker/handoff state. The session directory (and any repo-root temp
23
- * files created along the way) is removed on exit, success or failure alike.
24
- */
25
- const { execSync } = require('child_process');
26
- const fs = require('fs');
27
- const path = require('path');
28
-
29
- process.env.CLAUDE = '1'; // so our own getSessionDir() calls resolve like the children's will
30
-
31
- const { getWorkspaceRoot, getSessionDir } = require('../hooks/scripts/lib/harness-state');
32
-
33
- const root = getWorkspaceRoot();
34
- const hooksDir = path.join(root, 'hooks', 'scripts');
35
- const SESSION_ID = '__mechanism_test__';
36
- const sessionDir = getSessionDir(root, SESSION_ID);
37
-
38
- console.log('=== 🔧 Harness Mechanism Test Suite (VERIFICATION.md §2) ===');
39
-
40
- const tempFiles = [];
41
- let failures = 0;
42
-
43
- function check(name, condition, detail) {
44
- if (condition) {
45
- console.log(`✅ ${name}`);
46
- } else {
47
- console.error(`❌ ${name}`);
48
- if (detail) console.error(` ${detail}`);
49
- failures++;
50
- }
51
- }
52
-
53
- function runHook(scriptName, payload, extraEnv) {
54
- const scriptPath = path.join(hooksDir, scriptName);
55
- try {
56
- const stdout = execSync(`node "${scriptPath}"`, {
57
- encoding: 'utf8',
58
- input: payload === null ? '' : JSON.stringify(payload),
59
- env: { ...process.env, ...extraEnv },
60
- });
61
- return { code: 0, stdout, stderr: '' };
62
- } catch (err) {
63
- return { code: err.status, stdout: err.stdout || '', stderr: err.stderr || '' };
64
- }
65
- }
66
-
67
- function writeState(file, obj) {
68
- fs.writeFileSync(path.join(sessionDir, file), JSON.stringify(obj, null, 2), 'utf8');
69
- }
70
- function readState(file) {
71
- return JSON.parse(fs.readFileSync(path.join(sessionDir, file), 'utf8'));
72
- }
73
- function stateExists(file) {
74
- return fs.existsSync(path.join(sessionDir, file));
75
- }
76
-
77
- // Registers a repo-root temp file for guaranteed cleanup even if an
78
- // assertion throws or the process is killed mid-suite.
79
- function tempFile(name) {
80
- const p = path.join(root, name);
81
- tempFiles.push(p);
82
- return p;
83
- }
84
-
85
- process.on('exit', () => {
86
- for (const f of tempFiles) {
87
- try { if (fs.existsSync(f)) fs.unlinkSync(f); } catch (e) { /* best-effort */ }
88
- }
89
- try { fs.rmSync(sessionDir, { recursive: true, force: true }); } catch (e) { /* best-effort */ }
90
- });
91
-
92
- // ---------------------------------------------------------------------------
93
- // 2a. Rule of 3 circuit breaker trips, releases via zoom-out report, and
94
- // hard-locks on a repeat trip of the same signature.
95
- // ---------------------------------------------------------------------------
96
- console.log('\n[2a] Rule of 3 circuit breaker...');
97
-
98
- writeState('rule-of-3-state.json', { count: 3, lastHash: 'mech-test', zoomOutResolved: false });
99
- const tripResult = runHook('rule-of-3.js', { session_id: SESSION_ID });
100
- check(
101
- '2a. Trips at count=3 (exit=2, CRITICAL banner)',
102
- tripResult.code === 2 && tripResult.stderr.includes('RULE OF 3 CIRCUIT BREAKER TRIGGERED'),
103
- `Got exit=${tripResult.code}, stderr="${tripResult.stderr.slice(0, 200)}"`
104
- );
105
-
106
- writeState('rule-of-3-state.json', {
107
- count: 3, lastHash: 'mech-test', zoomOutResolved: false, lastFailureAt: 0, zoomOutCycles: 0,
108
- });
109
- fs.writeFileSync(
110
- path.join(sessionDir, 'zoom-out-report.md'),
111
- '## Goal\nx\n## Failed Attempts\nx\n## Verified Facts\nx\n## Diagnosis\nx\n## Decision\nRESUME: new approach\n',
112
- 'utf8'
113
- );
114
- const releaseResult = runHook('rule-of-3.js', { session_id: SESSION_ID });
115
- const releasedState = readState('rule-of-3-state.json');
116
- check(
117
- '2a-bis. Valid zoom-out report releases the breaker (exit=0, count reset)',
118
- releaseResult.code === 0 &&
119
- releaseResult.stdout.includes('breaker released') &&
120
- releasedState.count === 0 &&
121
- releasedState.zoomOutResolved === true &&
122
- releasedState.zoomOutCycles === 1,
123
- `Got exit=${releaseResult.code}, state=${JSON.stringify(releasedState)}`
124
- );
125
-
126
- writeState('rule-of-3-state.json', {
127
- count: 3, lastHash: 'mech-test', zoomOutResolved: false,
128
- lastFailureAt: Date.now() + 60000, zoomOutCycles: 1,
129
- });
130
- const hardLockResult = runHook('rule-of-3.js', { session_id: SESSION_ID });
131
- check(
132
- '2a-ter. Second trip on same signature hard-locks (exit=2, repeat trip)',
133
- hardLockResult.code === 2 && hardLockResult.stderr.includes('repeat trip - hard lock'),
134
- `Got exit=${hardLockResult.code}, stderr="${hardLockResult.stderr.slice(0, 200)}"`
135
- );
136
-
137
- // ---------------------------------------------------------------------------
138
- // 2b. Boundary guard blocks an oversized Read
139
- // ---------------------------------------------------------------------------
140
- console.log('\n[2b] Boundary guard...');
141
-
142
- const bigFile = tempFile('.mechanism-test-big.tmp');
143
- fs.writeFileSync(bigFile, 'x'.repeat(600 * 1024));
144
- const boundaryResult = runHook('boundary-guard.js', { tool_name: 'Read', tool_input: { file_path: bigFile } });
145
- check(
146
- '2b. Blocks a 600KB Read without limit/offset (exit=2, BLOCKED)',
147
- boundaryResult.code === 2 && boundaryResult.stderr.includes('[Boundary Guard] BLOCKED'),
148
- `Got exit=${boundaryResult.code}, stderr="${boundaryResult.stderr.slice(0, 200)}"`
149
- );
150
- fs.unlinkSync(bigFile);
151
-
152
- // ---------------------------------------------------------------------------
153
- // 2c. State persistence (WAL) records a failure, then clears it on success
154
- // ---------------------------------------------------------------------------
155
- console.log('\n[2c] State persistence (WAL)...');
156
-
157
- runHook('state-persist.js', {
158
- session_id: SESSION_ID,
159
- tool_name: 'Bash',
160
- tool_response: { stdout: '', stderr: 'npm ERR! mech-test failure' },
161
- });
162
- const failedHandoff = readState('handoff-state.json');
163
- check(
164
- '2c. Failing Bash call is recorded as status=failed',
165
- failedHandoff.status === 'failed' && failedHandoff.errorSummary.includes('mech-test failure'),
166
- `Got ${JSON.stringify(failedHandoff)}`
167
- );
168
-
169
- runHook('state-persist.js', {
170
- session_id: SESSION_ID,
171
- tool_name: 'Bash',
172
- tool_response: { stdout: 'ok', exitCode: 0 },
173
- });
174
- const resolvedHandoff = readState('handoff-state.json');
175
- check(
176
- '2c. A subsequent successful command clears status back to idle',
177
- resolvedHandoff.status === 'idle' && !!resolvedHandoff.lastResolved,
178
- `Got ${JSON.stringify(resolvedHandoff)}`
179
- );
180
-
181
- // ---------------------------------------------------------------------------
182
- // 2d. Fact-audit reminder reaches the agent via tier-router.js stdin
183
- // ---------------------------------------------------------------------------
184
- console.log('\n[2d] Fact-audit reminder...');
185
-
186
- const tierRouterPath = path.join(root, 'harness-everything', 'scripts', 'tier-router.js');
187
- const factAuditOut = execSync(`node "${tierRouterPath}"`, {
188
- encoding: 'utf8',
189
- input: JSON.stringify({ prompt: 'what exit code does this hook use by default and is it documented' }),
190
- });
191
- check(
192
- '2d. tier-router.js reads {"prompt":...} from stdin and emits FACT-AUDIT REMINDER',
193
- factAuditOut.includes('FACT-AUDIT REMINDER'),
194
- `Output was:\n${factAuditOut.slice(0, 300)}`
195
- );
196
-
197
- // ---------------------------------------------------------------------------
198
- // 2e. Subagent scope guard catches an out-of-scope file change
199
- // ---------------------------------------------------------------------------
200
- console.log('\n[2e] Subagent scope guard...');
201
-
202
- runHook('subagent-scope-guard.js', {
203
- session_id: SESSION_ID, tool_name: 'Task', hook_event_name: 'PreToolUse', tool_input: {},
204
- });
205
- const scopeFile = tempFile('.mechanism-test-scope.tmp');
206
- fs.writeFileSync(scopeFile, 'unexpected change');
207
- const scopeResult = runHook('subagent-scope-guard.js', {
208
- session_id: SESSION_ID, tool_name: 'Task', hook_event_name: 'PostToolUse', tool_input: {},
209
- });
210
- check(
211
- '2e. Flags the newly-created file after a Task burst (exit=2, lists filename)',
212
- scopeResult.code === 2 &&
213
- scopeResult.stderr.includes('Subagent Scope Guard') &&
214
- scopeResult.stderr.includes(path.basename(scopeFile)),
215
- `Got exit=${scopeResult.code}, stderr="${scopeResult.stderr.slice(0, 300)}"`
216
- );
217
- fs.unlinkSync(scopeFile);
218
-
219
- // ---------------------------------------------------------------------------
220
- // 2f. Stop gate bounces an unverified-edit stop exactly once
221
- // ---------------------------------------------------------------------------
222
- console.log('\n[2f] Stop gate...');
223
-
224
- writeState('handoff-state.json', { status: 'idle', lastEditAt: Date.now(), lastVerifyAt: 0 });
225
- const dirtyFile = tempFile('.mechanism-test-dirty.tmp');
226
- fs.writeFileSync(dirtyFile, 'dirty');
227
- const firstStop = runHook('stop-gate.js', { session_id: SESSION_ID });
228
- check(
229
- '2f. First stop after an unverified edit bounces (exit=2)',
230
- firstStop.code === 2 && firstStop.stderr.includes('[Stop Gate]'),
231
- `Got exit=${firstStop.code}, stderr="${firstStop.stderr.slice(0, 200)}"`
232
- );
233
- const secondStop = runHook('stop-gate.js', { session_id: SESSION_ID });
234
- check(
235
- '2f. Same edit batch does not bounce twice (exit=0)',
236
- secondStop.code === 0,
237
- `Got exit=${secondStop.code}`
238
- );
239
- fs.unlinkSync(dirtyFile);
240
-
241
- // ---------------------------------------------------------------------------
242
- console.log('\n=================================================');
243
- if (failures > 0) {
244
- console.error(` ❌ ${failures} mechanism check(s) FAILED.`);
245
- console.log('=================================================');
246
- process.exit(1);
247
- } else {
248
- console.log(' 🎉 All VERIFICATION.md §2 mechanism checks passed.');
249
- console.log('=================================================');
250
- process.exit(0);
251
- }
@@ -1,157 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Harness Todo CLI
4
- * A strict state machine for task management.
5
- * Designed to slap the LLM with Exit Code 1 if it violates the Todo-Driven Workflow.
6
- */
7
- const fs = require('fs');
8
- const path = require('path');
9
- const { getWorkspaceRoot, getStateRoot } = require('../../hooks/scripts/lib/harness-state');
10
-
11
- // Shared across sessions (not scoped to one): todo-cli.js is invoked as a
12
- // plain CLI command by the agent, not a hook, so it never receives a
13
- // session_id to scope by.
14
- const harnessDir = getStateRoot(getWorkspaceRoot());
15
- const stateFile = path.join(harnessDir, 'todo-state.json');
16
-
17
- if (!fs.existsSync(harnessDir)) {
18
- fs.mkdirSync(harnessDir, { recursive: true });
19
- }
20
-
21
- function loadState() {
22
- if (fs.existsSync(stateFile)) {
23
- return JSON.parse(fs.readFileSync(stateFile, 'utf8'));
24
- }
25
- return { tasks: [], activeId: null };
26
- }
27
-
28
- function saveState(state) {
29
- // Atomic write (temp file + rename): todo-state.json is shared across the
30
- // whole workspace, not scoped per session_id like the hook state files
31
- // are, so parallel subagent Task bursts can genuinely call `todo-cli.js`
32
- // around the same time. A plain writeFileSync lets a reader observe a
33
- // truncated/partial JSON file if two writes interleave; rename is atomic
34
- // at the filesystem level, so readers only ever see the old or the new
35
- // file in full, never a half-written one. This doesn't resolve the
36
- // separate lost-update race (last writer still wins) - that needs real
37
- // cross-process locking, out of scope for what a CLI state file needs.
38
- const tmpFile = `${stateFile}.tmp.${process.pid}`;
39
- fs.writeFileSync(tmpFile, JSON.stringify(state, null, 2));
40
- fs.renameSync(tmpFile, stateFile);
41
- }
42
-
43
- function printList(state) {
44
- console.log('\n📋 Current Todo List:');
45
- if (state.tasks.length === 0) {
46
- console.log(' (Empty)');
47
- }
48
- state.tasks.forEach(t => {
49
- const status = t.id === state.activeId ? '[IN-PROGRESS]' : (t.completed ? '[COMPLETED]' : '[NOT-STARTED]');
50
- console.log(` ${t.id}. ${status} ${t.title}`);
51
- });
52
- console.log('');
53
- }
54
-
55
- const args = process.argv.slice(2);
56
- const command = args[0];
57
-
58
- if (!command) {
59
- console.error("❌ Error: Missing command. Use 'init', 'add', 'start', 'complete', or 'status'.");
60
- process.exit(1);
61
- }
62
-
63
- const state = loadState();
64
-
65
- switch (command) {
66
- case 'init':
67
- state.tasks = [];
68
- state.activeId = null;
69
- args.slice(1).forEach((title, idx) => {
70
- state.tasks.push({ id: idx + 1, title, completed: false });
71
- });
72
- saveState(state);
73
- console.log("✅ Todo list initialized.");
74
- printList(state);
75
- break;
76
-
77
- case 'add':
78
- const title = args.slice(1).join(' ');
79
- if (!title) {
80
- console.error("❌ Error: Missing task title.");
81
- process.exit(1);
82
- }
83
- const nextId = state.tasks.length > 0 ? Math.max(...state.tasks.map(t => t.id)) + 1 : 1;
84
- state.tasks.push({ id: nextId, title, completed: false });
85
- saveState(state);
86
- console.log(`✅ Added task ${nextId}.`);
87
- printList(state);
88
- break;
89
-
90
- case 'start':
91
- const startId = parseInt(args[1], 10);
92
- if (!startId) {
93
- console.error("❌ Error: Missing task ID. Usage: start <id>");
94
- process.exit(1);
95
- }
96
- if (state.activeId !== null && state.activeId !== startId) {
97
- console.error(`❌ [BLOCKED] Task ${state.activeId} is already IN-PROGRESS.`);
98
- console.error(`You MUST complete or un-start task ${state.activeId} before starting a new one. No multitasking.`);
99
- process.exit(1);
100
- }
101
- const taskToStart = state.tasks.find(t => t.id === startId);
102
- if (!taskToStart) {
103
- console.error(`❌ Error: Task ${startId} not found.`);
104
- process.exit(1);
105
- }
106
- if (taskToStart.completed) {
107
- console.error(`❌ Error: Task ${startId} is already completed.`);
108
- process.exit(1);
109
- }
110
- state.activeId = startId;
111
- saveState(state);
112
- console.log(`🚀 Started task ${startId}: ${taskToStart.title}`);
113
- break;
114
-
115
- case 'complete':
116
- const compId = parseInt(args[1], 10);
117
- if (!compId) {
118
- console.error("❌ Error: Missing task ID. Usage: complete <id>");
119
- process.exit(1);
120
- }
121
- if (state.activeId !== compId) {
122
- console.error(`❌ [BLOCKED] Task ${compId} is NOT currently in-progress.`);
123
- console.error(`You can only complete the active task. Active task is: ${state.activeId || 'None'}`);
124
- process.exit(1);
125
- }
126
-
127
- // ACTIONABLE RECOMMENDATION #1: Enforce State Transitions Programmatically
128
- // Do not rely on prompt obedience for running verify-gate.js. The CLI should block the complete command
129
- console.log("=== 🛡️ Executing Pre-Completion Verification Gate ===");
130
- try {
131
- const verifyScript = path.join(__dirname, 'verify-gate.js');
132
- if (fs.existsSync(verifyScript)) {
133
- require('child_process').execSync(`node "${verifyScript}"`, { stdio: 'inherit' });
134
- }
135
- } catch (err) {
136
- console.error(`\n❌ [BLOCKED] Verification Gate Failed (Exit Code 1).`);
137
- console.error(`You CANNOT complete this task. The code is broken.`);
138
- console.error(`Please fix the errors shown above and try again.`);
139
- process.exit(1);
140
- }
141
-
142
- const taskToComp = state.tasks.find(t => t.id === compId);
143
- taskToComp.completed = true;
144
- state.activeId = null;
145
- saveState(state);
146
- console.log(`✅ Completed task ${compId}: ${taskToComp.title}`);
147
- printList(state);
148
- break;
149
-
150
- case 'status':
151
- printList(state);
152
- break;
153
-
154
- default:
155
- console.error(`❌ Error: Unknown command '${command}'.`);
156
- process.exit(1);
157
- }
@@ -1,37 +0,0 @@
1
- # SKILL Document Writing Guidelines
2
-
3
- > Target: Markdown files read and executed as Prompts during SKILL execution (excludes Template files).
4
-
5
- ## [Language & Syntax]
6
- 1. All content MUST be in English (All English).
7
- 2. MUST exclusively use task-based syntax (Imperative verbs, numbered lists).
8
- 3. Vague tone is strictly forbidden. MUST use uppercase `MUST` or `MUST NOT` to define behaviors. Words like `should` or `may` are forbidden.
9
- 4. The length of each rule MUST NOT exceed 150 characters.
10
-
11
- ## [Skill Architecture: OS vs Domain]
12
- 5. **OS Skills (Process Control)**: e.g., `install-cognitive-os`, `harness-everything`. These dictate *how* to work. They MUST be strictly linear and MUST NOT exceed 60 lines per file.
13
- 6. **Domain Skills (Expertise)**: e.g., `api-design`, `security-review`. These provide *what* to write. They are EXEMPT from the 60-line and linearity limits. They are encouraged to be comprehensive, containing rich anti-patterns, code examples, and deep domain guardrails.
14
-
15
- ## [Flow & Linearity (Applies to OS Skills)]
16
- 7. The SKILL entry point (SKILL.md) MUST be executed only once.
17
- 8. The flow from OS SKILL.md to the end MUST be a flattened straight line. Infinite loops or branching trees are forbidden.
18
- 9. All OS files MUST form a logical closed loop. If split, the current file MUST end with a unique pointer to maintain linearity.
19
-
20
- ## [Cognitive Loop & Execution]
21
- 9. Steps MUST be written sequentially. Every SKILL file MUST explicitly include this declaration:
22
- ```markdown
23
- ## Core Principles
24
- - MUST operate using the cognitive loop: Think > Try > Summarize > Record.
25
- - [Think] MUST build a holistic mental router map before starting. Use elimination to discard impossible approaches. Perform forward prediction to simplify actions.
26
- - [Try] MUST verify current environment boundaries BEFORE taking action. Execute steps sequentially and NEVER combine commands, ensuring errors remain isolated and traceable.
27
- - [Summarize] MUST verify actual outcomes against initial intent; hallucinating success is forbidden. If an attempt fails, diagnose, zoom out, and backtrack.
28
- - [Record] MUST explicitly state variables and context to carry over.
29
- - [Reflect & Re-Think] MUST actively feed the `[Record]` (especially past failures and state changes) back into the next `[Think]` cycle. Use historical context to refine forward predictions and strictly avoid repeating previously diagnosed errors.
30
-
31
- ## Cognitive Foundation (Why we do this)
32
- - Recording is not the end; it is the absolute prerequisite for the next Think cycle.
33
- - Trying validates the predicted steps.
34
- - Summarizing confirms if the outcome aligns with the initial intent.
35
- - The loop is continuous. Converging the chain of thought is the absolute priority; divergent thinking causes attention loss. This cycle (Think > Try > Summarize > Record > Re-Think) drives self-adaptation and evolution.
36
- - Treat these rules as strict guardrails. Autonomous optimization within these boundaries is expected.
37
- ```