harness-everything 0.2.2 → 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 (496) 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 +10 -10
  174. package/docs/workflows/eval-harness.md +13 -6
  175. package/docs/workflows/fable-discipline.md +9 -9
  176. package/docs/workflows/fable-mode.md +29 -32
  177. package/docs/workflows/find-skills.md +36 -0
  178. package/docs/workflows/git-commit.md +18 -9
  179. package/docs/workflows/grill-me.md +11 -11
  180. package/docs/workflows/grill-with-docs.md +14 -7
  181. package/docs/workflows/harness-everything.md +95 -92
  182. package/docs/workflows/improve-codebase-architecture.md +15 -7
  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 +12 -7
  186. package/docs/workflows/security-review.md +26 -7
  187. package/docs/workflows/self-evolve.md +27 -44
  188. package/docs/workflows/skill-creator.md +80 -75
  189. package/docs/workflows/skill-style.md +64 -64
  190. package/docs/workflows/tdd.md +42 -39
  191. package/docs/workflows/to-spec.md +83 -0
  192. package/docs/workflows/to-tickets.md +80 -0
  193. package/docs/workflows/todo-driven-workflow.md +34 -36
  194. package/docs/workflows/using-git-worktrees.md +12 -8
  195. package/docs/workflows/verification-loop.md +16 -14
  196. package/docs/workflows/verify-before-claim.md +12 -8
  197. package/docs/workflows/zoom-out.md +22 -10
  198. package/environment-detection/SKILL.md +25 -61
  199. package/environment-detection/references/shell-syntax-rules.md +76 -0
  200. package/environment-detection/scripts/preflight.js +103 -93
  201. package/eval-framework/fixtures/bad-frontmatter-colon/SKILL.md +14 -0
  202. package/eval-framework/fixtures/duplicate-desc-skill-a/SKILL.md +14 -0
  203. package/eval-framework/fixtures/duplicate-desc-skill-b/SKILL.md +14 -0
  204. package/eval-framework/fixtures/missing-delimiter/SKILL.md +13 -0
  205. package/eval-framework/fixtures/over-budget-skill/SKILL.md +36 -0
  206. package/eval-harness/SKILL.md +34 -51
  207. package/eval-harness/references/scoring-rubric.md +68 -0
  208. package/eval-harness/scripts/evaluate.js +77 -61
  209. package/evals/environment-detection/eval.yaml +26 -0
  210. package/evals/environment-detection/tasks/negative-trigger.yaml +16 -0
  211. package/evals/environment-detection/tasks/positive-trigger.yaml +15 -0
  212. package/evals/eval-harness/eval.yaml +26 -0
  213. package/evals/eval-harness/tasks/negative-trigger.yaml +16 -0
  214. package/evals/eval-harness/tasks/positive-trigger.yaml +15 -0
  215. package/evals/fable-discipline/eval.yaml +26 -0
  216. package/evals/fable-discipline/tasks/negative-trigger.yaml +16 -0
  217. package/evals/fable-discipline/tasks/positive-trigger.yaml +15 -0
  218. package/evals/fable-mode/eval.yaml +26 -0
  219. package/evals/fable-mode/tasks/negative-tier2-no-model.yaml +18 -0
  220. package/evals/fable-mode/tasks/negative-trigger.yaml +16 -0
  221. package/evals/fable-mode/tasks/positive-haiku-mode.yaml +16 -0
  222. package/evals/fable-mode/tasks/positive-opus-mode.yaml +16 -0
  223. package/evals/fable-mode/tasks/positive-sonnet-mode.yaml +16 -0
  224. package/evals/fable-mode/tasks/positive-trigger.yaml +15 -0
  225. package/evals/find-skills/eval.yaml +26 -0
  226. package/evals/find-skills/tasks/negative-trigger.yaml +16 -0
  227. package/evals/find-skills/tasks/positive-trigger.yaml +15 -0
  228. package/evals/git-commit/eval.yaml +26 -0
  229. package/evals/git-commit/tasks/negative-trigger.yaml +16 -0
  230. package/evals/git-commit/tasks/positive-trigger.yaml +15 -0
  231. package/evals/grill-me/eval.yaml +26 -0
  232. package/evals/grill-me/tasks/negative-trigger.yaml +16 -0
  233. package/evals/grill-me/tasks/positive-trigger.yaml +15 -0
  234. package/evals/grill-with-docs/eval.yaml +26 -0
  235. package/evals/grill-with-docs/tasks/negative-trigger.yaml +16 -0
  236. package/evals/grill-with-docs/tasks/positive-trigger.yaml +15 -0
  237. package/evals/harness-everything/eval.yaml +26 -0
  238. package/evals/harness-everything/tasks/negative-non-software.yaml +16 -0
  239. package/evals/harness-everything/tasks/negative-skill-indicated.yaml +15 -0
  240. package/evals/harness-everything/tasks/positive-tier1.yaml +16 -0
  241. package/evals/harness-everything/tasks/positive-tier2.yaml +16 -0
  242. package/evals/harness-everything/tasks/positive-tier3.yaml +16 -0
  243. package/evals/improve-codebase-architecture/eval.yaml +26 -0
  244. package/evals/improve-codebase-architecture/tasks/negative-trigger.yaml +16 -0
  245. package/evals/improve-codebase-architecture/tasks/positive-trigger.yaml +15 -0
  246. package/evals/install-cognitive-os/eval.yaml +26 -0
  247. package/evals/install-cognitive-os/tasks/negative-trigger.yaml +16 -0
  248. package/evals/install-cognitive-os/tasks/positive-trigger.yaml +15 -0
  249. package/evals/multi-agent-workspace/eval.yaml +26 -0
  250. package/evals/multi-agent-workspace/tasks/negative-trigger.yaml +15 -0
  251. package/evals/multi-agent-workspace/tasks/positive-trigger.yaml +15 -0
  252. package/evals/repo-docs/eval.yaml +26 -0
  253. package/evals/repo-docs/tasks/negative-trigger.yaml +16 -0
  254. package/evals/repo-docs/tasks/positive-trigger.yaml +15 -0
  255. package/evals/rewrite-commits/eval.yaml +26 -0
  256. package/evals/rewrite-commits/tasks/negative-trigger.yaml +16 -0
  257. package/evals/rewrite-commits/tasks/positive-trigger.yaml +15 -0
  258. package/evals/security-review/eval.yaml +26 -0
  259. package/evals/security-review/tasks/negative-trigger.yaml +16 -0
  260. package/evals/security-review/tasks/positive-trigger.yaml +15 -0
  261. package/evals/self-evolve/eval.yaml +26 -0
  262. package/evals/self-evolve/tasks/negative-trigger.yaml +16 -0
  263. package/evals/self-evolve/tasks/positive-trigger.yaml +15 -0
  264. package/evals/skill-creator/eval.yaml +26 -0
  265. package/evals/skill-creator/tasks/negative-trigger.yaml +16 -0
  266. package/evals/skill-creator/tasks/positive-trigger.yaml +15 -0
  267. package/evals/skill-style/eval.yaml +26 -0
  268. package/evals/skill-style/tasks/negative-trigger.yaml +16 -0
  269. package/evals/skill-style/tasks/positive-trigger.yaml +15 -0
  270. package/evals/tdd/eval.yaml +26 -0
  271. package/evals/tdd/tasks/negative-trivia.yaml +16 -0
  272. package/evals/tdd/tasks/positive-bugfix.yaml +15 -0
  273. package/evals/tdd/tasks/positive-feature.yaml +16 -0
  274. package/evals/tdd/tasks/positive-refactor.yaml +15 -0
  275. package/evals/to-spec/eval.yaml +26 -0
  276. package/evals/to-spec/tasks/negative-trigger.yaml +16 -0
  277. package/evals/to-spec/tasks/positive-trigger.yaml +15 -0
  278. package/evals/to-tickets/eval.yaml +26 -0
  279. package/evals/to-tickets/tasks/negative-trigger.yaml +15 -0
  280. package/evals/to-tickets/tasks/positive-trigger.yaml +15 -0
  281. package/evals/todo-driven-workflow/eval.yaml +26 -0
  282. package/evals/todo-driven-workflow/tasks/negative-single-edit.yaml +16 -0
  283. package/evals/todo-driven-workflow/tasks/positive-multi-step.yaml +15 -0
  284. package/evals/todo-driven-workflow/tasks/positive-refactor-flow.yaml +15 -0
  285. package/evals/using-git-worktrees/eval.yaml +26 -0
  286. package/evals/using-git-worktrees/tasks/negative-trigger.yaml +15 -0
  287. package/evals/using-git-worktrees/tasks/positive-trigger.yaml +15 -0
  288. package/evals/verification-loop/eval.yaml +26 -0
  289. package/evals/verification-loop/tasks/negative-discussion.yaml +16 -0
  290. package/evals/verification-loop/tasks/positive-pre-ship.yaml +15 -0
  291. package/evals/verify-before-claim/eval.yaml +26 -0
  292. package/evals/verify-before-claim/tasks/negative-trigger.yaml +16 -0
  293. package/evals/verify-before-claim/tasks/positive-trigger.yaml +15 -0
  294. package/evals/zoom-out/eval.yaml +26 -0
  295. package/evals/zoom-out/tasks/negative-trivial-edit.yaml +16 -0
  296. package/evals/zoom-out/tasks/positive-repeated-failure.yaml +15 -0
  297. package/fable-discipline/SKILL.md +31 -28
  298. package/fable-discipline/references/discipline-rules.md +22 -0
  299. package/fable-mode/CONTRACT-FORMAT.md +51 -51
  300. package/fable-mode/SKILL.md +31 -43
  301. package/fable-mode/agents/fable-orchestrator.md +99 -92
  302. package/fable-mode/agents/fable-verifier.md +32 -32
  303. package/fable-mode/agents/fable-worker-haiku.md +52 -48
  304. package/fable-mode/agents/fable-worker-sonnet.md +53 -49
  305. package/fable-mode/execution-guardrails/SKILL.md +43 -87
  306. package/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
  307. package/fable-mode/fable-haiku/SKILL.md +36 -48
  308. package/fable-mode/fable-haiku/references/routing-notes.md +26 -0
  309. package/fable-mode/fable-opus/SKILL.md +36 -0
  310. package/fable-mode/fable-sonnet/SKILL.md +36 -0
  311. package/fable-mode/model-matrix.json +32 -0
  312. package/fable-mode/references/execution-phases.md +37 -0
  313. package/fable-mode/references/model-matrix.md +39 -0
  314. package/fable-mode/scripts/model-selector.js +129 -0
  315. package/find-skills/SKILL.md +48 -0
  316. package/find-skills/references/discovery-flow.md +102 -0
  317. package/find-skills/scripts/use-skill.js +106 -0
  318. package/git-commit/SKILL.md +35 -45
  319. package/git-commit/guides/ANGULAR_STYLE.md +60 -60
  320. package/git-commit/guides/COMMIT_GENERATION.md +23 -23
  321. package/git-commit/guides/LANGUAGE_DETECTION.md +16 -16
  322. package/git-commit/guides/MAIN_REPO.md +14 -14
  323. package/git-commit/guides/SUBMODULES.md +27 -27
  324. package/git-commit/references/commit-flow.md +30 -0
  325. package/grill-me/SKILL.md +34 -27
  326. package/grill-me/references/grilling-playbook.md +38 -0
  327. package/grill-with-docs/ADR-FORMAT.md +47 -47
  328. package/grill-with-docs/CONTEXT-FORMAT.md +63 -63
  329. package/grill-with-docs/SKILL.md +33 -91
  330. package/grill-with-docs/references/session-playbook.md +97 -0
  331. package/harness-everything/SKILL.md +29 -128
  332. package/harness-everything/examples/README.md +9 -9
  333. package/harness-everything/examples/todo-workflow.md +22 -22
  334. package/harness-everything/references/skill-registry.md +39 -0
  335. package/harness-everything/references/triage-and-tiers.md +116 -0
  336. package/harness-everything/scripts/bootstrap.js +203 -140
  337. package/harness-everything/scripts/routing-keywords.json +320 -0
  338. package/harness-everything/scripts/self-heal.js +241 -189
  339. package/harness-everything/scripts/tier-router.js +334 -219
  340. package/harness-everything/scripts/verify-gate.js +100 -31
  341. package/hooks/hooks.json +155 -155
  342. package/hooks/scripts/atomic-commit-check.js +68 -68
  343. package/hooks/scripts/boundary-guard.js +55 -55
  344. package/hooks/scripts/context-compact.js +114 -114
  345. package/hooks/scripts/contract-test.js +79 -79
  346. package/hooks/scripts/depth-guard.js +65 -65
  347. package/hooks/scripts/lib/harness-state.js +139 -228
  348. package/hooks/scripts/lib/platforms/claude.js +72 -19
  349. package/hooks/scripts/lib/platforms/codex.js +24 -6
  350. package/hooks/scripts/lib/platforms/continue.js +23 -5
  351. package/hooks/scripts/lib/platforms/copilot.js +23 -5
  352. package/hooks/scripts/lib/platforms/cursor.js +23 -5
  353. package/hooks/scripts/lib/platforms/hermes.js +57 -57
  354. package/hooks/scripts/lib/platforms/index.js +17 -17
  355. package/hooks/scripts/lib/platforms/worktrees.js +20 -20
  356. package/hooks/scripts/reset-circuit-breaker.js +30 -30
  357. package/hooks/scripts/rule-of-3-tracker.js +124 -91
  358. package/hooks/scripts/rule-of-3.js +187 -176
  359. package/hooks/scripts/state-persist.js +99 -99
  360. package/hooks/scripts/stop-gate.js +80 -80
  361. package/hooks/scripts/subagent-scope-guard.js +88 -88
  362. package/improve-codebase-architecture/SKILL.md +31 -35
  363. package/improve-codebase-architecture/guides/DEEPENING.md +37 -37
  364. package/improve-codebase-architecture/guides/HTML-REPORT.md +123 -123
  365. package/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -44
  366. package/improve-codebase-architecture/guides/LANGUAGE.md +53 -53
  367. package/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
  368. package/install-cognitive-os/SKILL.md +23 -80
  369. package/install-cognitive-os/references/cognitive-loop.md +27 -0
  370. package/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
  371. package/multi-agent-workspace/SKILL.md +37 -0
  372. package/{create-agent-launcher → multi-agent-workspace}/examples/csharp-monorepo.md +123 -123
  373. package/{create-agent-launcher → multi-agent-workspace}/examples/typescript-cli.md +126 -126
  374. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-claude.md +77 -77
  375. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-codex.md +146 -146
  376. package/multi-agent-workspace/guidelines/platform-continue.md +38 -0
  377. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-copilot.md +74 -74
  378. package/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
  379. package/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
  380. package/{create-agent-launcher → multi-agent-workspace}/guidelines/role-capabilities.md +108 -108
  381. package/multi-agent-workspace/references/agency-agents.md +31 -0
  382. package/multi-agent-workspace/references/architecture-guide.md +32 -0
  383. package/multi-agent-workspace/references/orchestration.md +48 -0
  384. package/multi-agent-workspace/scripts/agency-catalog.js +190 -0
  385. package/multi-agent-workspace/scripts/index_memory.js +51 -0
  386. package/multi-agent-workspace/scripts/scaffold.js +253 -0
  387. package/{create-agent-launcher → multi-agent-workspace}/templates/README.md +17 -17
  388. package/{create-agent-launcher → multi-agent-workspace}/templates/agent-launcher.md +67 -67
  389. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-csharp.md +55 -55
  390. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-polyglot.md +61 -61
  391. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-ts.md +56 -56
  392. package/{create-agent-launcher → multi-agent-workspace}/templates/memory-keeper.md +36 -36
  393. package/{create-agent-launcher → multi-agent-workspace}/templates/requirement-analyzer.md +65 -65
  394. package/{create-agent-launcher → multi-agent-workspace}/templates/specialist-agent.md +34 -34
  395. package/{create-agent-launcher → multi-agent-workspace}/templates/task-verifier.md +55 -55
  396. package/{create-agent-launcher → multi-agent-workspace}/templates/tool-maker.md +32 -32
  397. package/multi-agent-workspace/workflows/01-init.md +22 -0
  398. package/multi-agent-workspace/workflows/02-analysis.md +23 -0
  399. package/multi-agent-workspace/workflows/03-generation.md +27 -0
  400. package/multi-agent-workspace/workflows/04-launcher.md +16 -0
  401. package/opencode-plugin/README.md +94 -0
  402. package/opencode-plugin/hooks/circuit-breaker.js +121 -0
  403. package/opencode-plugin/hooks/compliance.js +128 -0
  404. package/opencode-plugin/hooks/post-edit.js +62 -0
  405. package/opencode-plugin/hooks/pre-complete.js +65 -0
  406. package/opencode-plugin/hooks/verify.js +140 -0
  407. package/opencode-plugin/plugin.json +17 -0
  408. package/opencode-plugin/test-hook-firing.js +198 -0
  409. package/package.json +50 -22
  410. package/references/definition-of-done.md +67 -0
  411. package/references/performance-checklist.md +153 -0
  412. package/references/platform-advisory-template.md +58 -0
  413. package/references/security-checklist.md +205 -0
  414. package/repo-docs/SKILL.md +38 -37
  415. package/repo-docs/references/process-guide.md +60 -0
  416. package/repo-docs/templates/agents-template.md +264 -264
  417. package/repo-docs/templates/knowledge-agents-template.md +50 -50
  418. package/repo-docs/templates/knowledge-readme-template.md +83 -83
  419. package/repo-docs/templates/manual-recon.md +117 -117
  420. package/repo-docs/templates/multi-skills-readme-template.md +72 -72
  421. package/repo-docs/templates/product-agents-template.md +78 -78
  422. package/repo-docs/templates/product-readme-template.md +95 -95
  423. package/repo-docs/templates/readme-template.md +136 -136
  424. package/repo-docs/templates/single-skill-readme-template.md +70 -70
  425. package/repo-docs/templates/skills-agents-template.md +60 -60
  426. package/rewrite-commits/SKILL.md +22 -17
  427. package/rewrite-commits/references/workflow.md +18 -0
  428. package/scripts/installer.js +546 -506
  429. package/scripts/lib/advisory-text.js +8 -4
  430. package/scripts/lib/claude-hooks.js +18 -5
  431. package/scripts/lib/gitignore.js +199 -80
  432. package/scripts/lib/manifest.js +68 -4
  433. package/scripts/lib/prompts.js +1 -1
  434. package/scripts/lib/skills.js +87 -1
  435. package/scripts/verify-install.js +147 -0
  436. package/security-review/SKILL.md +35 -496
  437. package/security-review/guides/OWASP-PATTERNS.md +31 -0
  438. package/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
  439. package/security-review/references/security-checklist.md +478 -0
  440. package/security-review/scripts/audit-secrets.js +84 -0
  441. package/self-evolve/SKILL.md +38 -45
  442. package/self-evolve/references/memory-resolution.md +58 -0
  443. package/self-evolve/scripts/persist-memory.js +139 -40
  444. package/self-evolve/scripts/register-dynamic-skill.js +251 -0
  445. package/self-evolve/scripts/self-regression.js +110 -113
  446. package/skill-creator/SKILL.md +34 -76
  447. package/skill-creator/references/authoring-workflow.md +14 -0
  448. package/skill-creator/references/dynamic-generation-contract.md +21 -0
  449. package/skill-creator/references/quality-checklist.md +15 -0
  450. package/skill-creator/references/quality-principles.md +81 -81
  451. package/skill-creator/references/testing-workflow.md +27 -32
  452. package/skill-style/SKILL.md +33 -39
  453. package/skill-style/references/style-guide.md +36 -0
  454. package/tdd/SKILL.md +34 -43
  455. package/tdd/guides/deep-modules.md +33 -33
  456. package/tdd/guides/interface-design.md +31 -31
  457. package/tdd/guides/mocking.md +59 -59
  458. package/tdd/guides/refactoring.md +10 -10
  459. package/tdd/guides/tests.md +61 -61
  460. package/tdd/references/core-discipline.md +49 -0
  461. package/to-spec/SKILL.md +42 -0
  462. package/to-spec/references/process.md +77 -0
  463. package/to-spec/scripts/check-project-docs.js +259 -0
  464. package/to-spec/templates/cli-reference.md +31 -0
  465. package/to-spec/templates/dev-doc.md +27 -0
  466. package/to-spec/templates/feature-spec.md +59 -0
  467. package/to-spec/templates/schema-doc.md +31 -0
  468. package/to-tickets/SKILL.md +42 -0
  469. package/to-tickets/references/publishing-and-templates.md +97 -0
  470. package/todo-driven-workflow/SKILL.md +27 -41
  471. package/todo-driven-workflow/references/execution-guide.md +27 -0
  472. package/using-git-worktrees/SKILL.md +29 -141
  473. package/using-git-worktrees/references/workflow-details.md +108 -0
  474. package/verification-loop/SKILL.md +29 -121
  475. package/verification-loop/references/verification-phases.md +116 -0
  476. package/verification-loop/templates/verification-report.template.md +15 -0
  477. package/verify-before-claim/SKILL.md +27 -70
  478. package/verify-before-claim/references/verification-guide.md +73 -0
  479. package/zoom-out/SKILL.md +28 -76
  480. package/zoom-out/references/circuit-breaker.md +66 -0
  481. package/zoom-out/templates/zoom-out-report.template.md +20 -0
  482. package/build-multi-agent-system/AGENTS.md +0 -50
  483. package/build-multi-agent-system/README.md +0 -63
  484. package/build-multi-agent-system/SKILL.md +0 -68
  485. package/create-agent-launcher/SKILL.md +0 -48
  486. package/create-agent-launcher/guidelines/platform-gemini.md +0 -101
  487. package/create-agent-launcher/workflows/01-init.md +0 -22
  488. package/create-agent-launcher/workflows/02-analysis.md +0 -26
  489. package/create-agent-launcher/workflows/03-generation.md +0 -29
  490. package/create-agent-launcher/workflows/04-launcher.md +0 -20
  491. package/docs/workflows/build-multi-agent-system.md +0 -62
  492. package/docs/workflows/create-agent-launcher.md +0 -62
  493. package/eval-framework/behavioral-test.js +0 -105
  494. package/eval-framework/mechanism-test.js +0 -251
  495. package/harness-everything/scripts/todo-cli.js +0 -157
  496. package/skill-style/STYLE.md +0 -37
@@ -1,87 +1,43 @@
1
- ---
2
- name: execution-guardrails
3
- description: >
4
- Always-on operational guardrails, model-independent. Apply on EVERY task and
5
- EVERY model (Opus, Sonnet, Haiku, and any future tier) whether or not
6
- fable-mode's staged loop is running. Three rules: (1) verify-before-flag —
7
- never raise a warning about a problem that hasn't been confirmed present by a
8
- direct check; (2) warning batching — accumulate minor concerns and surface
9
- them together at a threshold instead of interrupting piecemeal; (3)
10
- find-and-replace safety — word-boundary anchoring on sed/substring edits plus
11
- a corruption grep afterward. Trigger whenever a response would flag a
12
- problem, raise a warning, or edit files with search-and-replace. These are
13
- behavioral contracts with the user, not capability aids — they do not depend
14
- on model strength.
15
- ---
16
-
17
- # Execution Guardrails
18
-
19
- ## 📋 Skill Contract
20
-
21
- | Component | Specification |
22
- | :--- | :--- |
23
- | **Trigger / Input** | Any turn about to flag a problem, raise a warning, or perform a search-and-replace file edit — regardless of tier or model, whether `fable-mode`'s staged loop is running or not. |
24
- | **Expected Output** | Warnings issued only for confirmed (grepped/diffed/run) problems; minor concerns batched and surfaced together at a 3-item threshold instead of one at a time; sed/substring edits anchored on word boundaries with a post-edit corruption grep. |
25
- | **State Mutations** | None of its own — governs how other file-editing actions in the same turn are performed. |
26
- | **Enforcement Gate** | An unverified flag (no grep/diff/run backing it) **MUST NOT** be surfaced. Any find-and-replace pass **MUST** be followed by a corruption grep before the result is presented. |
27
-
28
- Three rules extracted from fable-mode's operational section so they apply everywhere,
29
- not only inside the staged loop. A frontier model doesn't need a stage map for a simple
30
- task, but it still needs these — they encode the user's preferences, and no model ships
31
- knowing them.
32
-
33
- ## 1. Verify before flag
34
-
35
- Before flagging any problem — verify it actually exists. Grep, diff, run it, or check
36
- the source directly. Never report a problem that hasn't been confirmed present.
37
-
38
- An unverified flag — a warning raised because evidence wasn't *found*, rather than
39
- because a fault was *found* — is itself an error. It manufactures doubt where none is
40
- warranted and sends the user chasing ghosts. Absence of evidence is not the finding.
41
- Confirm, then flag.
42
-
43
- The known failure this rule exists to stop: run a web search on something from the
44
- user's firsthand world, find thin or no results, and convert that silence into a warning
45
- against the user's own sourcing. Web silence is never grounds for a warning. For facts
46
- about the user's own world, conversation history outranks the web (see the
47
- source-of-truth skill).
48
-
49
- A capability flag follows the same standard. "This may be beyond me" must name what was
50
- attempted and where it failed — not a vague appeal to difficulty.
51
-
52
- ## 2. Warning threshold
53
-
54
- Across any run, minor concerns accumulate that aren't worth halting on individually.
55
- Keep a running count. At the threshold — **default three, tunable if the user sets a
56
- different number** — stop and surface all of them to the user at once before continuing.
57
-
58
- Rationale: three small things pointing the same direction usually mean one real problem
59
- worth a decision. Below threshold, keep working; a drip of trivial caveats is noise.
60
- At threshold, batch them — one interruption with full context beats three fragmentary
61
- ones.
62
-
63
- A concern that independently meets the verify-before-flag bar and is material on its own
64
- does not wait for the threshold. The threshold governs minor concerns only.
65
-
66
- ## 3. Find-and-replace safety
67
-
68
- When editing files with sed (or any substring replace), always anchor on word boundaries
69
- to avoid corrupting compound words — a bare `edge` replace will mangle `Ledger` into
70
- garbage. Use `\bword\b`, not bare `word`.
71
-
72
- After any sed pass on a file, grep for glued or malformed compound words before
73
- presenting the result. A replace that silently corrupts neighboring tokens is the most
74
- common self-inflicted error in file edits. The check is cheap; the silent corruption is
75
- not.
76
-
77
- Preferred order of tools: targeted string-replace on a unique anchor > word-boundary
78
- sed > bare sed (never). If the string to replace isn't unique in the file, widen the
79
- anchor until it is — do not replace-all and hope.
80
-
81
- ## Relationship to fable-mode
82
-
83
- fable-mode's staged loop is optional and gated on task size. These guardrails are not
84
- optional and not gated. When fable-mode runs, its step 4 (self-critique) and all file
85
- edits inherit these rules. When fable-mode doesn't run, these rules apply anyway. In v3
86
- the per-model runners route to frontmatter-defined agents (`agents/*.md`) whose system
87
- prompts carry these rules inline, because spawned agents cannot see this skill.
1
+ ---
2
+ name: execution-guardrails
3
+ description: >-
4
+ Always-on guardrails: verify findings before flagging warnings, batch
5
+ minor caveats, and anchor search-and-replace edits with post-write checks.
6
+ Use when raising warnings or performing search-and-replace file edits.
7
+ license: Apache-2.0
8
+ metadata:
9
+ author: Miya Daniel
10
+ version: 0.3.5
11
+ ---
12
+
13
+ # Execution Guardrails
14
+
15
+ **USE FOR**: Raising warnings or flagging problems, search-and-replace/regex file edits, batching minor caveats, reporting capability limits.
16
+
17
+ | Component | Spec |
18
+ | :--- | :--- |
19
+ | **Trigger / Input** | Turn raising a warning or performing search-and-replace edits. |
20
+ | **Expected Output** | Verified warnings; batched caveats (3-item threshold); corruption-checked edits. |
21
+ | **State Mutations** | None — governs execution quality for file-editing turns. |
22
+ | **Enforcement Gate** | Verify before flagging; validate edits post-write. |
23
+
24
+ ## USE FOR:
25
+ - Raising a warning or flagging a suspected problem
26
+ - Search-and-replace or regex file edits
27
+ - Batching multiple minor caveats during a run
28
+ - Reporting capability limits ("this may be beyond me")
29
+
30
+ ## DO NOT USE FOR:
31
+ - Task planning, staging, or fable-mode's staged loop itself
32
+ - Git history rewriting (see `rewrite-commits`)
33
+ - Skills that never raise warnings or edit files
34
+
35
+ ## Core Rules
36
+
37
+ 1. **Verify before flag** — Confirm a problem exists before reporting it. Never convert absence of evidence into a warning.
38
+ 2. **Warning threshold** — Batch minor concerns; surface them together at three (default). Material concerns do not wait.
39
+ 3. **Find-and-replace safety** — Prefer structured edit tools over shell `sed`; anchor with unique context or `\bword\b` boundaries; verify file integrity post-edit. Never replace-all blindly.
40
+
41
+ These rules are always-on, even when `fable-mode`'s staged loop is not running.
42
+
43
+ Deep dive: references/guardrail-rules.md
@@ -0,0 +1,56 @@
1
+ # Guardrail Rules — Full Detail
2
+
3
+ Three rules extracted from fable-mode's operational section so they apply everywhere,
4
+ not only inside the staged loop. A frontier model doesn't need a stage map for a simple
5
+ task, but it still needs these — they encode the user's preferences, and no model ships
6
+ knowing them.
7
+
8
+ ## 1. Verify before flag
9
+
10
+ Before flagging any problem — verify it actually exists. Grep, diff, run it, or check
11
+ the source directly. Never report a problem that hasn't been confirmed present.
12
+
13
+ An unverified flag — a warning raised because evidence wasn't *found*, rather than
14
+ because a fault was *found* — is itself an error. It manufactures doubt where none is
15
+ warranted and sends the user chasing ghosts. Absence of evidence is not the finding.
16
+ Confirm, then flag.
17
+
18
+ The known failure this rule exists to stop: run a web search on something from the
19
+ user's firsthand world, find thin or no results, and convert that silence into a warning
20
+ against the user's own sourcing. Web silence is never grounds for a warning. For facts
21
+ about the user's own world, conversation history outranks the web (see the
22
+ source-of-truth skill).
23
+
24
+ A capability flag follows the same standard. "This may be beyond me" must name what was
25
+ attempted and where it failed — not a vague appeal to difficulty.
26
+
27
+ ## 2. Warning threshold
28
+
29
+ Across any run, minor concerns accumulate that aren't worth halting on individually.
30
+ Keep a running count. At the threshold — **default three, tunable if the user sets a
31
+ different number** — stop and surface all of them to the user at once before continuing.
32
+
33
+ Rationale: three small things pointing the same direction usually mean one real problem
34
+ worth a decision. Below threshold, keep working; a drip of trivial caveats is noise.
35
+ At threshold, batch them — one interruption with full context beats three fragmentary
36
+ ones.
37
+
38
+ A concern that independently meets the verify-before-flag bar and is material on its own
39
+ does not wait for the threshold. The threshold governs minor concerns only.
40
+
41
+ ## 3. Find-and-replace safety
42
+
43
+ When editing files via substring or regex replacement:
44
+ - **Prefer IDE/Harness Native Tools**: Use specialized file edit tools (e.g., `replace_string_in_file`) or language-native scripts (Node.js/Python) rather than shell `sed`. Raw `sed` invocations behave inconsistently across platforms (macOS BSD sed vs Linux GNU sed vs Windows lack of native sed) and risk subtle file corruption.
45
+ - **Context Anchoring**: Always anchor replacement strings with unique surrounding code/context or word boundaries (`\bword\b`) to avoid corrupting compound words — a bare `edge` replace will mangle `Ledger` into garbage.
46
+ - **Post-Edit Integrity Check**: After any find-and-replace pass, verify the file structure or syntax (e.g. via linter/compiler or targeted search) before presenting the result.
47
+
48
+ Preferred order of tools: IDE native structured replace tool (`replace_string_in_file`) with 3+ lines of context > word-boundary anchored script > raw regexreplace (use with caution). If the string to replace isn't unique in the file, widen the surrounding context until it is — NEVER replace-all blindly.
49
+
50
+ ## Relationship to fable-mode
51
+
52
+ fable-mode's staged loop is optional and gated on task size. These guardrails are not
53
+ optional and not gated. When fable-mode runs, its step 4 (self-critique) and all file
54
+ edits inherit these rules. When fable-mode doesn't run, these rules apply anyway. In v3
55
+ the per-model runners route to frontmatter-defined agents (`agents/*.md`) whose system
56
+ prompts carry these rules inline, because spawned agents cannot see this skill.
@@ -1,48 +1,36 @@
1
- ---
2
- name: fable-haiku
3
- description: >
4
- Run fable-mode execution discipline on Claude Haiku. Routes the task to the
5
- @fable-worker-haiku agent, whose definition carries the staged loop with
6
- tightened verification (no bare "unverified" allowed) and an
7
- escalate-don't-improvise rule. Trigger when the user explicitly asks for
8
- thorough/systematic handling run cheaply or fast ("fable on haiku", "deep work
9
- mode but cheap", "stage this on haiku"). For bulk mechanical work. Do NOT use
10
- for tasks needing synthesis — benchmark note: at n=1 the skill's effect on
11
- Haiku swung both directions (+25 / −17); route quality-critical work to
12
- fable-sonnet instead.
13
- ---
14
-
15
- # Fable Mode — Haiku (v3, agent-routed)
16
-
17
- ## 📋 Skill Contract
18
-
19
- | Component | Specification |
20
- | :--- | :--- |
21
- | **Trigger / Input** | User explicitly asks for staged/thorough execution run cheaply or fast on Haiku ("fable on haiku", "stage this on haiku") for bulk mechanical work. |
22
- | **Expected Output** | Task delegated to the `fable-worker-haiku` agent (or an inline fallback carrying the same rules verbatim), optionally fanned out across multiple concurrent workers, followed by a `fable-verifier` pass before any unsupervised delivery. |
23
- | **State Mutations** | None directly — spawns/manages Task-tool subagents and whatever file edits they perform. |
24
- | **Enforcement Gate** | Every worker brief **MUST** name the pass condition explicitly (no benefit of the doubt on verification for Haiku). A worker that escalates "needs synthesis" **MUST** be re-routed to `fable-worker-sonnet`, never retried on Haiku with a louder prompt. |
25
-
26
- v3 change: the worker is a real agent definition (`agents/fable-worker-haiku.md`)
27
- invoked by name. Its system prompt carries the loop, the tightened verification
28
- rule, and the operational rules; this skill only routes.
29
-
30
- If a task has one obvious correct approach and fits in a single pass, skip this
31
- loop and do it directly.
32
-
33
- ## How to run it
34
-
35
- 1. Confirm `fable-worker-haiku` appears in the available agent types. If not,
36
- fall back to inline: spawn a general-purpose Haiku agent and pass it the
37
- rules verbatim from `agents/fable-worker-haiku.md`.
38
- 2. Spawn **@fable-worker-haiku** via the Task tool (`subagent_type:
39
- "fable-worker-haiku"`). Brief it with: the task, the exact output path(s),
40
- and the pass condition — name the check explicitly; Haiku gets no benefit of
41
- the doubt on verification.
42
- 3. Haiku is cheap: for independent sub-parts, fan out one worker per part and
43
- merge. Set a ceiling on concurrent workers.
44
- 4. Follow with **@fable-verifier** (a second Haiku is cheap; fresh eyes can't
45
- inherit the worker's blind spots) for anything that will be delivered
46
- without human review.
47
- 5. If a worker escalates ("needs synthesis"), re-route that part to
48
- fable-worker-sonnet rather than retrying Haiku with a louder prompt.
1
+ ---
2
+ name: fable-haiku
3
+ description: "Run staged fable work on Haiku for bulk mechanical tasks with explicit pass conditions, visible fallback handling, and a cold verifier pass."
4
+ license: Apache-2.0
5
+ metadata:
6
+ author: Miya Daniel
7
+ version: 0.3.5
8
+ ---
9
+
10
+ # Fable Mode — Haiku
11
+
12
+ ## Skill Contract
13
+
14
+ | Component | Specification |
15
+ | :--- | :--- |
16
+ | **Trigger / Input** | Explicit `fable on haiku` for bulk mechanical or format work. |
17
+ | **Expected Output** | A bounded worker artifact, audit record, and verifier result. |
18
+ | **State Mutations** | Native host TODO tracker or Markdown checklist. |
19
+ | **Enforcement Gate** | Worker pass condition plus `fable-verifier`; unsupported runtime must be visible. |
20
+
21
+ ## USE FOR:
22
+ - File processing, format conversion, boilerplate, and structured extraction
23
+ - Cheap parallel stages with independently verifiable artifacts
24
+
25
+ ## DO NOT USE FOR:
26
+ - Synthesis-heavy or high-stakes architecture decisions
27
+ - Delivery without a named pass condition and verifier result
28
+
29
+ ## Run it
30
+
31
+ 1. Resolve `haiku` through `../scripts/model-selector.js`.
32
+ 2. Spawn `fable-worker-haiku` when available; otherwise use an inline fallback only when the audit record says so.
33
+ 3. Brief one bounded output path and a named check; workers do not spawn workers.
34
+ 4. Route synthesis blockers to Sonnet/Opus and cold-review unsupervised delivery with `fable-verifier`.
35
+
36
+ Use `../references/model-matrix.md` for the audit fields and fallback policy.
@@ -0,0 +1,26 @@
1
+ # Fable Haiku — v3 Routing Notes
2
+
3
+ Details moved from SKILL.md.
4
+
5
+ ## v3 change: agent-routed
6
+
7
+ The worker is a real agent definition (`../agents/fable-worker-haiku.md`)
8
+ invoked by name. Its system prompt carries the loop, the tightened verification
9
+ rule, and the operational rules; this skill only routes.
10
+
11
+ ## Full run procedure
12
+
13
+ 1. Confirm `fable-worker-haiku` appears in the available agent types. If not,
14
+ fall back to inline: spawn a general-purpose Haiku agent and pass it the
15
+ rules verbatim from `../agents/fable-worker-haiku.md`.
16
+ 2. Spawn **@fable-worker-haiku** via the Task tool (`subagent_type:
17
+ "fable-worker-haiku"`). Brief it with: the task, the exact output path(s),
18
+ and the pass condition — name the check explicitly; Haiku gets no benefit of
19
+ the doubt on verification.
20
+ 3. Haiku is cheap: for independent sub-parts, fan out one worker per part and
21
+ merge. Set a ceiling on concurrent workers.
22
+ 4. Follow with **@fable-verifier** (a second Haiku is cheap; fresh eyes can't
23
+ inherit the worker's blind spots) for anything that will be delivered
24
+ without human review.
25
+ 5. If a worker escalates ("needs synthesis"), re-route that part to
26
+ the main Orchestrator model context rather than retrying Haiku with a louder prompt.
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: fable-opus
3
+ description: "Run staged fable orchestration on Opus for cross-stage synthesis, high-stakes architecture, and final decisions with named workers, cold verification, and visible fallback handling."
4
+ license: Apache-2.0
5
+ metadata:
6
+ author: Miya Daniel
7
+ version: 0.3.5
8
+ ---
9
+
10
+ # Fable Mode — Opus
11
+
12
+ ## Skill Contract
13
+
14
+ | Component | Specification |
15
+ | :--- | :--- |
16
+ | **Trigger / Input** | Explicit `fable on opus` for macro orchestration or high-stakes decisions. |
17
+ | **Expected Output** | A staged orchestration record, worker artifacts, and cold-verifier results. |
18
+ | **State Mutations** | Native host TODO tracker or Markdown checklist; stage contracts remain auditable. |
19
+ | **Enforcement Gate** | `fable-orchestrator`, named worker checks, `fable-verifier`, and visible blocker/escalation status. |
20
+
21
+ ## USE FOR:
22
+ - Cross-stage synthesis, architecture decisions, and final macro-task review
23
+ - Tasks that need the Write-less orchestrator to delegate artifact production
24
+
25
+ ## DO NOT USE FOR:
26
+ - One obvious single-pass task
27
+ - Bulk mechanical work (use `fable-haiku`) or bounded reasoning (use `fable-sonnet`)
28
+
29
+ ## Run it
30
+
31
+ 1. Resolve `opus` through `../scripts/model-selector.js`.
32
+ 2. Spawn `fable-orchestrator` when the runtime exposes it; otherwise report the inline fallback explicitly.
33
+ 3. The orchestrator owns scope lock, at most two replans, stage contracts, named worker delegation, and escalation; it never produces artifacts itself.
34
+ 4. Cold-review high-stakes deliverables with `fable-verifier`; report every unverified stage.
35
+
36
+ Use `../references/model-matrix.md` for the audit fields and fallback policy.
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: fable-sonnet
3
+ description: "Run staged fable work on Sonnet for non-trivial implementation, research synthesis, or bounded reasoning with explicit pass conditions and visible fallback handling."
4
+ license: Apache-2.0
5
+ metadata:
6
+ author: Miya Daniel
7
+ version: 0.3.5
8
+ ---
9
+
10
+ # Fable Mode — Sonnet
11
+
12
+ ## Skill Contract
13
+
14
+ | Component | Specification |
15
+ | :--- | :--- |
16
+ | **Trigger / Input** | Explicit `fable on sonnet` or the accepted typo `fable on sonnect`. |
17
+ | **Expected Output** | A bounded reasoning artifact, audit record, and verifier result. |
18
+ | **State Mutations** | Native host TODO tracker or Markdown checklist. |
19
+ | **Enforcement Gate** | Named pass condition, actual verification command, and visible unsupported-model handling. |
20
+
21
+ ## USE FOR:
22
+ - Non-trivial implementation, analysis, document drafting, and research synthesis
23
+ - Bounded stages that need stronger reasoning than bulk processing
24
+
25
+ ## DO NOT USE FOR:
26
+ - One obvious single-pass task
27
+ - Macro orchestration or final high-stakes decisions (use `fable-opus`)
28
+
29
+ ## Run it
30
+
31
+ 1. Resolve `sonnet` through `../scripts/model-selector.js`; normalize `sonnect` to Sonnet.
32
+ 2. Spawn `fable-worker-sonnet` when available, otherwise use a visible inline fallback.
33
+ 3. Brief the exact artifact path, context, and pass condition; workers do not spawn workers.
34
+ 4. Send high-stakes artifacts to `fable-verifier` and escalate contradictions instead of guessing.
35
+
36
+ Use `../references/model-matrix.md` for the audit fields and fallback policy.
@@ -0,0 +1,32 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "modes": {
4
+ "haiku": {
5
+ "role": "bulk mechanical / format conversion",
6
+ "agent": "fable-worker-haiku",
7
+ "aliases": ["haiku"]
8
+ },
9
+ "sonnet": {
10
+ "role": "non-trivial implementation / research synthesis / bounded stage reasoning",
11
+ "agent": "fable-worker-sonnet",
12
+ "aliases": ["sonnet", "sonnect"]
13
+ },
14
+ "opus": {
15
+ "role": "macro orchestration / cross-stage synthesis / high-stakes architecture and final decision",
16
+ "agent": "fable-orchestrator",
17
+ "aliases": ["opus"]
18
+ }
19
+ },
20
+ "fallbacks": {
21
+ "inline": {
22
+ "status": "fallback",
23
+ "effectiveModel": "host-model",
24
+ "reason": "requested model is unavailable; run inline on the declared host model"
25
+ },
26
+ "stop": {
27
+ "status": "blocked",
28
+ "effectiveModel": null,
29
+ "reason": "requested model is unavailable and inline fallback was not authorized"
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,37 @@
1
+ # Fable Mode — Execution Phases
2
+
3
+ ```mermaid
4
+ flowchart TD
5
+ Start[Qualifying Tier 3 task] --> Discover[Discover sources, runtime, and authorized scope]
6
+ Discover --> Plan[Write stage map and pass conditions]
7
+ Plan --> Select[Resolve requested model and write audit record]
8
+ Select --> Delegate[Delegate to named agent or visible inline fallback]
9
+ Delegate --> Contract[Write stage contract]
10
+ Contract --> Verify[Run the named failable check]
11
+ Verify --> Review[Cold-review high-stakes deliverables]
12
+ Review --> Done[Record result or escalate blocker]
13
+ ```
14
+
15
+ ## Discovery and planning
16
+
17
+ Read the relevant files and sources before producing an artifact. Lock the
18
+ authorized write scope in the handoff. Number the stages, assign one artifact
19
+ and one pass condition to each, and allow no more than two full replans.
20
+
21
+ ## Delegation
22
+
23
+ Use `fable-orchestrator` for Opus macro work, `fable-worker-sonnet` for
24
+ reasoning and synthesis, and `fable-worker-haiku` for mechanical work. Brief
25
+ each worker with its exact output path, context, audit record, and check.
26
+ Workers do not spawn workers. If the named agent is unavailable, choose the
27
+ explicit inline fallback or stop and escalate; do not silently change models.
28
+
29
+ ## Verification and handoff
30
+
31
+ Before each spot-check, create `.claude/harness-everything/state/contracts/<stage>.json`
32
+ using `CONTRACT-FORMAT.md`, then run the exact command in that contract. A
33
+ stage is not complete until the command passes and the audit record contains
34
+ the verifier result. Use `fable-verifier` with only the spec and artifact for
35
+ high-stakes or unsupervised delivery. Review scope-guard output before merging.
36
+
37
+ When macro scaffolding ends, transition to `tdd` for focused implementation.
@@ -0,0 +1,39 @@
1
+ # Fable model matrix and execution audit
2
+
3
+ Issue #27 defines three explicit execution modes. The mode selector is the
4
+ machine-readable gate; this document is the human-facing contract.
5
+
6
+ | Mode | Use for | Named agent |
7
+ |---|---|---|
8
+ | Haiku | Bulk mechanical work and format conversion | `fable-worker-haiku` |
9
+ | Sonnet | Non-trivial implementation, research synthesis, bounded reasoning | `fable-worker-sonnet` |
10
+ | Opus | Macro orchestration, cross-stage synthesis, high-stakes architecture and final decisions | `fable-orchestrator` |
11
+
12
+ Use the explicit entrypoints `fable-haiku`, `fable-sonnet`, and `fable-opus`.
13
+ The accepted input `sonnect` normalizes to Sonnet. A normal Tier 2 prompt does
14
+ not select a fable model.
15
+
16
+ ## Deterministic selection
17
+
18
+ Before each stage, run `fable-mode/scripts/model-selector.js` with the requested
19
+ mode, the runtime's available modes, the host model, and the stage contract:
20
+
21
+ ```text
22
+ node fable-mode/scripts/model-selector.js --requested opus --available opus,sonnet,haiku --available-agents fable-orchestrator,fable-worker-sonnet,fable-worker-haiku --fallback stop --host-model opus --stage-brief "Synthesize the architecture" --pass-condition "ADR and dependency map exist" --verification-command "npm test" --verifier-result pending
23
+ ```
24
+
25
+ The JSON result always records `requestedModel`, `effectiveModel`,
26
+ `fallbackReason`, `stageBrief`, `passCondition`, `verificationCommand`, and
27
+ `verifierResult`, plus available agents, status, agent, and escalation state. The
28
+ CLI appends the same record as one JSON line to
29
+ `.claude/harness-everything/state/fable-mode/audit.jsonl` (or the path supplied by
30
+ `--audit-file`).
31
+
32
+ If the requested model is unavailable, `--fallback inline` records the declared
33
+ host model and a visible reason. `--fallback stop` emits `status: blocked`, a
34
+ null effective model, and exit code 2. Neither path silently downgrades.
35
+
36
+ The orchestrator still owns scope lock, at most two full replans, stage
37
+ contracts, worker non-recursion, cold verification, and escalation. The native
38
+ host TODO tracker or a Markdown checklist records stage progress; no CLI TODO
39
+ state machine is part of this contract.
@@ -0,0 +1,129 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+
6
+ const MATRIX_PATH = path.join(__dirname, '..', 'model-matrix.json');
7
+ const REQUIRED = ['stageBrief', 'passCondition', 'verificationCommand', 'verifierResult'];
8
+ const VALID_VERIFIER_RESULTS = new Set(['pending', 'pass', 'fail', 'not-run', 'blocked']);
9
+
10
+ function loadMatrix() {
11
+ return JSON.parse(fs.readFileSync(MATRIX_PATH, 'utf8'));
12
+ }
13
+
14
+ function normalizeModel(value, matrix) {
15
+ const input = String(value || '').trim().toLowerCase();
16
+ for (const [model, definition] of Object.entries(matrix.modes)) {
17
+ if (definition.aliases.includes(input)) return model;
18
+ }
19
+ return null;
20
+ }
21
+
22
+ function parseArgs(argv) {
23
+ const args = {};
24
+ for (let i = 0; i < argv.length; i += 1) {
25
+ const token = argv[i];
26
+ if (token === '--help' || token === '-h') return { help: true };
27
+ if (!token.startsWith('--')) throw new Error(`unknown argument: ${token}`);
28
+ const key = token.slice(2).replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
29
+ const value = argv[i + 1];
30
+ if (typeof value === 'undefined' || value.startsWith('--')) throw new Error(`missing value for --${key}`);
31
+ args[key] = value;
32
+ i += 1;
33
+ }
34
+ return args;
35
+ }
36
+
37
+ function resolveMode(input, matrix = loadMatrix()) {
38
+ const requestedModel = normalizeModel(input.requested, matrix);
39
+ if (!requestedModel) throw new Error('requested model must be one of haiku, sonnet, sonnect, or opus');
40
+
41
+ const availableModels = String(input.available || '')
42
+ .split(/[\s,]+/)
43
+ .map(model => normalizeModel(model, matrix))
44
+ .filter(Boolean);
45
+ const availableAgents = String(input.availableAgents || '')
46
+ .split(/[\s,]+/)
47
+ .map(agent => agent.trim())
48
+ .filter(Boolean);
49
+ const fallback = input.fallback || 'stop';
50
+ if (!Object.prototype.hasOwnProperty.call(matrix.fallbacks, fallback)) {
51
+ throw new Error('fallback must be inline or stop');
52
+ }
53
+
54
+ for (const field of REQUIRED) {
55
+ if (!String(input[field] || '').trim()) throw new Error(`${field} is required for an auditable stage`);
56
+ }
57
+ if (!VALID_VERIFIER_RESULTS.has(input.verifierResult)) {
58
+ throw new Error(`verifierResult must be one of ${[...VALID_VERIFIER_RESULTS].join(', ')}`);
59
+ }
60
+
61
+ const requestedAgent = matrix.modes[requestedModel].agent;
62
+ const modelAvailable = availableModels.includes(requestedModel);
63
+ const agentAvailable = availableAgents.includes(requestedAgent);
64
+ const selected = modelAvailable && agentAvailable;
65
+ const hostModel = String(input.hostModel || 'current-host').trim();
66
+ const fallbackDefinition = matrix.fallbacks[fallback];
67
+ const status = selected ? 'selected' : fallbackDefinition.status;
68
+ const effectiveModel = selected
69
+ ? requestedModel
70
+ : fallback === 'inline'
71
+ ? hostModel
72
+ : fallbackDefinition.effectiveModel;
73
+ const missing = [];
74
+ if (!modelAvailable) missing.push(`${requestedModel} is not in availableModels`);
75
+ if (!agentAvailable) missing.push(`${requestedAgent} is not in availableAgents`);
76
+ const fallbackReason = selected
77
+ ? 'none'
78
+ : `${fallbackDefinition.reason}: ${missing.join('; ')}`;
79
+
80
+ return {
81
+ schemaVersion: matrix.schemaVersion,
82
+ status,
83
+ requestedModel,
84
+ requestedInput: String(input.requested).trim(),
85
+ effectiveModel,
86
+ availableModels: [...new Set(availableModels)],
87
+ availableAgents: [...new Set(availableAgents)],
88
+ fallbackPolicy: fallback,
89
+ fallbackReason,
90
+ agent: selected ? requestedAgent : null,
91
+ modelRole: matrix.modes[requestedModel].role,
92
+ stageBrief: String(input.stageBrief).trim(),
93
+ passCondition: String(input.passCondition).trim(),
94
+ verificationCommand: String(input.verificationCommand).trim(),
95
+ verifierResult: input.verifierResult,
96
+ escalationRequired: status === 'blocked'
97
+ };
98
+ }
99
+
100
+ function printHelp() {
101
+ console.log('Usage: node fable-mode/scripts/model-selector.js --requested <haiku|sonnet|sonnect|opus> --available <models> --available-agents <agent names> --stage-brief <text> --pass-condition <text> --verification-command <command> --verifier-result <pending|pass|fail|not-run|blocked> [--fallback <inline|stop>] [--host-model <model>] [--audit-file <path>]');
102
+ }
103
+
104
+ function appendAuditRecord(record, auditFile) {
105
+ const target = auditFile || process.env.FABLE_AUDIT_FILE || path.join(process.cwd(), '.claude', 'harness-everything', 'state', 'fable-mode', 'audit.jsonl');
106
+ fs.mkdirSync(path.dirname(path.resolve(target)), { recursive: true });
107
+ fs.appendFileSync(target, `${JSON.stringify(record)}\n`, 'utf8');
108
+ }
109
+
110
+ function main(argv = process.argv.slice(2)) {
111
+ try {
112
+ const input = parseArgs(argv);
113
+ if (input.help) {
114
+ printHelp();
115
+ return 0;
116
+ }
117
+ const record = resolveMode(input);
118
+ appendAuditRecord(record, input.auditFile);
119
+ console.log(JSON.stringify(record, null, 2));
120
+ return record.status === 'blocked' ? 2 : 0;
121
+ } catch (error) {
122
+ console.error(`[fable-mode/model-selector] ${error.message}`);
123
+ return 2;
124
+ }
125
+ }
126
+
127
+ if (require.main === module) process.exitCode = main();
128
+
129
+ module.exports = { loadMatrix, normalizeModel, parseArgs, resolveMode, main };