harness-everything 0.2.1 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. package/.claude-plugin/marketplace.json +27 -0
  2. package/.claude-plugin/plugin.json +51 -0
  3. package/.gitattributes +1 -0
  4. package/.github/workflows/behavioral-evals.yml +36 -0
  5. package/.github/workflows/ci.yml +117 -0
  6. package/.github/workflows/release.yml +45 -0
  7. package/.husky/commit-msg +1 -0
  8. package/.waza.yaml +22 -0
  9. package/AGENTS.md +60 -2
  10. package/BENCHMARK_SOP.md +62 -62
  11. package/CHANGELOG.md +297 -114
  12. package/CODE_OF_CONDUCT.md +24 -0
  13. package/CONTRIBUTING.md +47 -0
  14. package/Dockerfile +18 -18
  15. package/LICENSE +201 -201
  16. package/README.md +279 -197
  17. package/SECURITY.md +33 -0
  18. package/VERIFICATION.md +394 -347
  19. package/ab-test-deep-analysis-2026-08-27.md +383 -0
  20. package/ab-test-results-2026-08-27.md +152 -0
  21. package/ab-test-statistical-analysis-31cases.md +193 -0
  22. package/behavioral-evals/README.md +85 -0
  23. package/behavioral-evals/analyze-plugin-results.js +110 -0
  24. package/behavioral-evals/cases/baseline-add-feature.yaml +34 -0
  25. package/behavioral-evals/cases/baseline-api-design.yaml +32 -0
  26. package/behavioral-evals/cases/baseline-debugging.yaml +31 -0
  27. package/behavioral-evals/cases/baseline-dependency.yaml +24 -0
  28. package/behavioral-evals/cases/baseline-documentation.yaml +34 -0
  29. package/behavioral-evals/cases/baseline-error-handling.yaml +31 -0
  30. package/behavioral-evals/cases/baseline-git-commit.yaml +33 -0
  31. package/behavioral-evals/cases/baseline-performance-monitoring.yaml +28 -0
  32. package/behavioral-evals/cases/baseline-performance.yaml +34 -0
  33. package/behavioral-evals/cases/baseline-refactor-with-tests.yaml +35 -0
  34. package/behavioral-evals/cases/baseline-refactor.yaml +27 -0
  35. package/behavioral-evals/cases/baseline-security-review.yaml +28 -0
  36. package/behavioral-evals/cases/baseline-simple-bugfix.yaml +33 -0
  37. package/behavioral-evals/cases/baseline-tdd-workflow.yaml +28 -0
  38. package/behavioral-evals/cases/breaker-zoom-out-after-3.yaml +50 -0
  39. package/behavioral-evals/cases/pressure-budget-skip-review.yaml +27 -0
  40. package/behavioral-evals/cases/pressure-bypass-review.yaml +27 -0
  41. package/behavioral-evals/cases/pressure-complexity-skip.yaml +37 -0
  42. package/behavioral-evals/cases/pressure-expert-skip-testing.yaml +31 -0
  43. package/behavioral-evals/cases/pressure-fatigue-skip.yaml +33 -0
  44. package/behavioral-evals/cases/pressure-management-skip-all.yaml +28 -0
  45. package/behavioral-evals/cases/pressure-scope-bypass.yaml +28 -0
  46. package/behavioral-evals/cases/pressure-skip-docs.yaml +50 -0
  47. package/behavioral-evals/cases/pressure-skip-error-handling.yaml +35 -0
  48. package/behavioral-evals/cases/pressure-skip-security.yaml +32 -0
  49. package/behavioral-evals/cases/pressure-skip-tests.yaml +27 -0
  50. package/behavioral-evals/cases/pressure-skip-verification.yaml +43 -0
  51. package/behavioral-evals/cases/pressure-social-skip-review.yaml +28 -0
  52. package/behavioral-evals/cases/pressure-sunk-cost-retry.yaml +47 -0
  53. package/behavioral-evals/cases/scope-discipline.yaml +32 -0
  54. package/behavioral-evals/cases/tier1-no-overplan.yaml +26 -0
  55. package/behavioral-evals/cases/verify-before-done.yaml +31 -0
  56. package/behavioral-evals/results/.gitkeep +0 -0
  57. package/behavioral-evals/results/2026-08-23-breaker-zoom-out-after-3.json +20 -0
  58. package/behavioral-evals/results/2026-08-23-pressure-skip-verification.json +20 -0
  59. package/behavioral-evals/results/2026-08-23-pressure-sunk-cost-retry.json +20 -0
  60. package/behavioral-evals/results/2026-08-23-scope-discipline.json +16 -0
  61. package/behavioral-evals/results/2026-08-23-tier1-no-overplan.json +20 -0
  62. package/behavioral-evals/results/2026-08-23-verify-before-done.json +20 -0
  63. package/behavioral-evals/results/2026-08-27-baseline-add-feature.json +20 -0
  64. package/behavioral-evals/results/2026-08-27-baseline-api-design.json +20 -0
  65. package/behavioral-evals/results/2026-08-27-baseline-debugging.json +20 -0
  66. package/behavioral-evals/results/2026-08-27-baseline-dependency.json +16 -0
  67. package/behavioral-evals/results/2026-08-27-baseline-documentation.json +20 -0
  68. package/behavioral-evals/results/2026-08-27-baseline-error-handling.json +20 -0
  69. package/behavioral-evals/results/2026-08-27-baseline-git-commit.json +20 -0
  70. package/behavioral-evals/results/2026-08-27-baseline-performance-monitoring.json +20 -0
  71. package/behavioral-evals/results/2026-08-27-baseline-performance.json +20 -0
  72. package/behavioral-evals/results/2026-08-27-baseline-refactor-with-tests.json +20 -0
  73. package/behavioral-evals/results/2026-08-27-baseline-refactor.json +20 -0
  74. package/behavioral-evals/results/2026-08-27-baseline-security-review.json +20 -0
  75. package/behavioral-evals/results/2026-08-27-baseline-simple-bugfix.json +20 -0
  76. package/behavioral-evals/results/2026-08-27-baseline-tdd-workflow.json +24 -0
  77. package/behavioral-evals/results/2026-08-27-breaker-zoom-out-after-3.json +20 -0
  78. package/behavioral-evals/results/2026-08-27-pressure-budget-skip-review.json +16 -0
  79. package/behavioral-evals/results/2026-08-27-pressure-bypass-review.json +20 -0
  80. package/behavioral-evals/results/2026-08-27-pressure-complexity-skip.json +20 -0
  81. package/behavioral-evals/results/2026-08-27-pressure-expert-skip-testing.json +16 -0
  82. package/behavioral-evals/results/2026-08-27-pressure-fatigue-skip.json +16 -0
  83. package/behavioral-evals/results/2026-08-27-pressure-management-skip-all.json +20 -0
  84. package/behavioral-evals/results/2026-08-27-pressure-skip-docs.json +20 -0
  85. package/behavioral-evals/results/2026-08-27-pressure-skip-error-handling.json +20 -0
  86. package/behavioral-evals/results/2026-08-27-pressure-skip-security.json +20 -0
  87. package/behavioral-evals/results/2026-08-27-pressure-skip-tests.json +20 -0
  88. package/behavioral-evals/results/2026-08-27-pressure-skip-verification.json +24 -0
  89. package/behavioral-evals/results/2026-08-27-pressure-social-skip-review.json +20 -0
  90. package/behavioral-evals/results/2026-08-27-pressure-sunk-cost-retry.json +24 -0
  91. package/behavioral-evals/results/2026-08-27-scope-discipline.json +16 -0
  92. package/behavioral-evals/results/2026-08-27-tier1-no-overplan.json +20 -0
  93. package/behavioral-evals/results/2026-08-27-verify-before-done.json +20 -0
  94. package/behavioral-evals/results/run-20260827-115509.log +287 -0
  95. package/behavioral-evals/run-with-plugin.js +316 -0
  96. package/behavioral-evals/run.js +587 -0
  97. package/benchmarks/README.md +63 -0
  98. package/benchmarks/ab-test-2026-08-26/results.json +55 -0
  99. package/benchmarks/results/logs/.gitkeep +0 -0
  100. package/benchmarks/results/logs/test-a-harness.md +31 -0
  101. package/benchmarks/results/logs/test-a-vanilla.md +28 -0
  102. package/benchmarks/results/logs/test-b-micro-loop-harness.md +48 -0
  103. package/benchmarks/results/logs/test-b-micro-loop-vanilla.md +36 -0
  104. package/benchmarks/results/logs/test-c-attention-loss-harness.md +40 -0
  105. package/benchmarks/results/logs/test-c-attention-loss-vanilla.md +63 -0
  106. package/benchmarks/results/logs/test-d-knowledge-boundary-harness.md +24 -0
  107. package/benchmarks/results/logs/test-d-knowledge-boundary-vanilla.md +29 -0
  108. package/benchmarks/results/logs/test-e-shell-awareness-harness.md +20 -0
  109. package/benchmarks/results/logs/test-e-shell-awareness-vanilla.md +20 -0
  110. package/benchmarks/results/logs/test-f-fact-audit-harness.md +16 -0
  111. package/benchmarks/results/logs/test-f-fact-audit-vanilla.md +16 -0
  112. package/benchmarks/results/results.json +158 -0
  113. package/benchmarks/run.js +220 -0
  114. package/benchmarks/schema.json +44 -0
  115. package/bin/cli.js +152 -97
  116. package/ci/ab-test-cases/grill-me-adversarial.yaml +18 -0
  117. package/ci/ab-test-cases/tdd-test-first.yaml +23 -0
  118. package/ci/ab-test-cases/verification-loop-gates.yaml +25 -0
  119. package/ci/ab-test-cases/verify-before-claim-cites.yaml +18 -0
  120. package/ci/ab-test-harness.js +410 -0
  121. package/{eval-framework → ci}/cases/case1.json +5 -5
  122. package/ci/cases/case10-small-feature.json +5 -0
  123. package/ci/cases/case11-readme-typo-update.json +5 -0
  124. package/ci/cases/case12-chinese-macro-audit.json +5 -0
  125. package/{eval-framework → ci}/cases/case2.json +5 -5
  126. package/{eval-framework → ci}/cases/case3.json +5 -5
  127. package/{eval-framework → ci}/cases/case4-zh-tier2.json +5 -5
  128. package/{eval-framework → ci}/cases/case5-zh-tier3.json +5 -5
  129. package/ci/cases/case6-macro-skill-audit.json +5 -0
  130. package/ci/cases/case7-macro-reference-audit.json +5 -0
  131. package/ci/cases/case8-controlled-ab-benchmark.json +5 -0
  132. package/ci/cases/case9-four-issue-audit.json +5 -0
  133. package/ci/consistency-check.js +347 -0
  134. package/ci/description-collision.js +109 -0
  135. package/ci/fable-mode-test.js +120 -0
  136. package/ci/fixtures/agency-agents/divisions.json +6 -0
  137. package/ci/fixtures/agency-agents/engineering/code-reviewer.md +11 -0
  138. package/ci/fixtures/agency-agents/testing/reality-checker.md +11 -0
  139. package/ci/fixtures/bad-frontmatter-colon/SKILL.md +16 -0
  140. package/ci/fixtures/duplicate-description/skill-a/SKILL.md +16 -0
  141. package/ci/fixtures/duplicate-description/skill-b/SKILL.md +16 -0
  142. package/ci/mechanism-2a-rule-of-3.test.js +46 -0
  143. package/ci/mechanism-2b-boundary-guard.test.js +16 -0
  144. package/ci/mechanism-2c-state-persist.test.js +29 -0
  145. package/ci/mechanism-2d-fact-audit.test.js +18 -0
  146. package/ci/mechanism-2e-scope-guard.test.js +24 -0
  147. package/ci/mechanism-2f-stop-gate.test.js +23 -0
  148. package/ci/mechanism-2g-platform-ignore.test.js +88 -0
  149. package/ci/mechanism-2h-installer-manifest.test.js +147 -0
  150. package/ci/mechanism-2i-crlf-frontmatter.test.js +145 -0
  151. package/ci/mechanism-2i-install-verification.test.js +34 -0
  152. package/ci/mechanism-2j-behavioral-runner.test.js +20 -0
  153. package/ci/mechanism-2k-reference-check.test.js +20 -0
  154. package/ci/mechanism-2l-multi-agent-workspace.test.js +105 -0
  155. package/ci/mechanism-test.js +71 -0
  156. package/ci/negative-controls.js +84 -0
  157. package/ci/reference-check.js +112 -0
  158. package/ci/release-consistency-check.js +123 -0
  159. package/ci/routing-check.js +90 -0
  160. package/{eval-framework → ci}/runner.js +56 -56
  161. package/ci/skill-routing-check.js +98 -0
  162. package/ci/test-helper.js +104 -0
  163. package/ci/test-negative-controls.js +148 -0
  164. package/commitlint.config.js +25 -0
  165. package/docker-verify.sh +266 -266
  166. package/docs/architecture.md +99 -95
  167. package/docs/audit.md +53 -0
  168. package/docs/mechanism-first-skill-mesh.md +163 -0
  169. package/docs/philosophy.md +47 -45
  170. package/docs/reflection.md +48 -34
  171. package/docs/routing.md +58 -45
  172. package/docs/troubleshooting.md +284 -0
  173. package/docs/workflows/environment-detection.md +63 -63
  174. package/docs/workflows/eval-harness.md +64 -57
  175. package/docs/workflows/fable-discipline.md +59 -59
  176. package/docs/workflows/fable-mode.md +12 -15
  177. package/docs/workflows/find-skills.md +36 -0
  178. package/docs/workflows/git-commit.md +71 -62
  179. package/docs/workflows/grill-me.md +62 -62
  180. package/docs/workflows/grill-with-docs.md +69 -62
  181. package/docs/workflows/harness-everything.md +95 -92
  182. package/docs/workflows/improve-codebase-architecture.md +68 -60
  183. package/docs/workflows/install-cognitive-os.md +60 -60
  184. package/docs/workflows/multi-agent-workspace.md +42 -0
  185. package/docs/workflows/repo-docs.md +64 -59
  186. package/docs/workflows/rewrite-commits.md +60 -60
  187. package/docs/workflows/security-review.md +77 -58
  188. package/docs/workflows/self-evolve.md +42 -59
  189. package/docs/workflows/skill-creator.md +80 -75
  190. package/docs/workflows/skill-style.md +64 -64
  191. package/docs/workflows/tdd.md +7 -4
  192. package/docs/workflows/to-spec.md +83 -0
  193. package/docs/workflows/to-tickets.md +80 -0
  194. package/docs/workflows/todo-driven-workflow.md +28 -30
  195. package/docs/workflows/using-git-worktrees.md +67 -63
  196. package/docs/workflows/verification-loop.md +71 -69
  197. package/docs/workflows/verify-before-claim.md +64 -60
  198. package/docs/workflows/zoom-out.md +74 -62
  199. package/environment-detection/SKILL.md +41 -77
  200. package/environment-detection/references/shell-syntax-rules.md +76 -0
  201. package/environment-detection/scripts/preflight.js +103 -93
  202. package/eval-framework/fixtures/bad-frontmatter-colon/SKILL.md +14 -0
  203. package/eval-framework/fixtures/duplicate-desc-skill-a/SKILL.md +14 -0
  204. package/eval-framework/fixtures/duplicate-desc-skill-b/SKILL.md +14 -0
  205. package/eval-framework/fixtures/missing-delimiter/SKILL.md +13 -0
  206. package/eval-framework/fixtures/over-budget-skill/SKILL.md +36 -0
  207. package/eval-harness/SKILL.md +42 -59
  208. package/eval-harness/references/scoring-rubric.md +68 -0
  209. package/eval-harness/scripts/evaluate.js +77 -61
  210. package/evals/environment-detection/eval.yaml +26 -0
  211. package/evals/environment-detection/tasks/negative-trigger.yaml +16 -0
  212. package/evals/environment-detection/tasks/positive-trigger.yaml +15 -0
  213. package/evals/eval-harness/eval.yaml +26 -0
  214. package/evals/eval-harness/tasks/negative-trigger.yaml +16 -0
  215. package/evals/eval-harness/tasks/positive-trigger.yaml +15 -0
  216. package/evals/fable-discipline/eval.yaml +26 -0
  217. package/evals/fable-discipline/tasks/negative-trigger.yaml +16 -0
  218. package/evals/fable-discipline/tasks/positive-trigger.yaml +15 -0
  219. package/evals/fable-mode/eval.yaml +26 -0
  220. package/evals/fable-mode/tasks/negative-tier2-no-model.yaml +18 -0
  221. package/evals/fable-mode/tasks/negative-trigger.yaml +16 -0
  222. package/evals/fable-mode/tasks/positive-haiku-mode.yaml +16 -0
  223. package/evals/fable-mode/tasks/positive-opus-mode.yaml +16 -0
  224. package/evals/fable-mode/tasks/positive-sonnet-mode.yaml +16 -0
  225. package/evals/fable-mode/tasks/positive-trigger.yaml +15 -0
  226. package/evals/find-skills/eval.yaml +26 -0
  227. package/evals/find-skills/tasks/negative-trigger.yaml +16 -0
  228. package/evals/find-skills/tasks/positive-trigger.yaml +15 -0
  229. package/evals/git-commit/eval.yaml +26 -0
  230. package/evals/git-commit/tasks/negative-trigger.yaml +16 -0
  231. package/evals/git-commit/tasks/positive-trigger.yaml +15 -0
  232. package/evals/grill-me/eval.yaml +26 -0
  233. package/evals/grill-me/tasks/negative-trigger.yaml +16 -0
  234. package/evals/grill-me/tasks/positive-trigger.yaml +15 -0
  235. package/evals/grill-with-docs/eval.yaml +26 -0
  236. package/evals/grill-with-docs/tasks/negative-trigger.yaml +16 -0
  237. package/evals/grill-with-docs/tasks/positive-trigger.yaml +15 -0
  238. package/evals/harness-everything/eval.yaml +26 -0
  239. package/evals/harness-everything/tasks/negative-non-software.yaml +16 -0
  240. package/evals/harness-everything/tasks/negative-skill-indicated.yaml +15 -0
  241. package/evals/harness-everything/tasks/positive-tier1.yaml +16 -0
  242. package/evals/harness-everything/tasks/positive-tier2.yaml +16 -0
  243. package/evals/harness-everything/tasks/positive-tier3.yaml +16 -0
  244. package/evals/improve-codebase-architecture/eval.yaml +26 -0
  245. package/evals/improve-codebase-architecture/tasks/negative-trigger.yaml +16 -0
  246. package/evals/improve-codebase-architecture/tasks/positive-trigger.yaml +15 -0
  247. package/evals/install-cognitive-os/eval.yaml +26 -0
  248. package/evals/install-cognitive-os/tasks/negative-trigger.yaml +16 -0
  249. package/evals/install-cognitive-os/tasks/positive-trigger.yaml +15 -0
  250. package/evals/multi-agent-workspace/eval.yaml +26 -0
  251. package/evals/multi-agent-workspace/tasks/negative-trigger.yaml +15 -0
  252. package/evals/multi-agent-workspace/tasks/positive-trigger.yaml +15 -0
  253. package/evals/repo-docs/eval.yaml +26 -0
  254. package/evals/repo-docs/tasks/negative-trigger.yaml +16 -0
  255. package/evals/repo-docs/tasks/positive-trigger.yaml +15 -0
  256. package/evals/rewrite-commits/eval.yaml +26 -0
  257. package/evals/rewrite-commits/tasks/negative-trigger.yaml +16 -0
  258. package/evals/rewrite-commits/tasks/positive-trigger.yaml +15 -0
  259. package/evals/security-review/eval.yaml +26 -0
  260. package/evals/security-review/tasks/negative-trigger.yaml +16 -0
  261. package/evals/security-review/tasks/positive-trigger.yaml +15 -0
  262. package/evals/self-evolve/eval.yaml +26 -0
  263. package/evals/self-evolve/tasks/negative-trigger.yaml +16 -0
  264. package/evals/self-evolve/tasks/positive-trigger.yaml +15 -0
  265. package/evals/skill-creator/eval.yaml +26 -0
  266. package/evals/skill-creator/tasks/negative-trigger.yaml +16 -0
  267. package/evals/skill-creator/tasks/positive-trigger.yaml +15 -0
  268. package/evals/skill-style/eval.yaml +26 -0
  269. package/evals/skill-style/tasks/negative-trigger.yaml +16 -0
  270. package/evals/skill-style/tasks/positive-trigger.yaml +15 -0
  271. package/evals/tdd/eval.yaml +26 -0
  272. package/evals/tdd/tasks/negative-trivia.yaml +16 -0
  273. package/evals/tdd/tasks/positive-bugfix.yaml +15 -0
  274. package/evals/tdd/tasks/positive-feature.yaml +16 -0
  275. package/evals/tdd/tasks/positive-refactor.yaml +15 -0
  276. package/evals/to-spec/eval.yaml +26 -0
  277. package/evals/to-spec/tasks/negative-trigger.yaml +16 -0
  278. package/evals/to-spec/tasks/positive-trigger.yaml +15 -0
  279. package/evals/to-tickets/eval.yaml +26 -0
  280. package/evals/to-tickets/tasks/negative-trigger.yaml +15 -0
  281. package/evals/to-tickets/tasks/positive-trigger.yaml +15 -0
  282. package/evals/todo-driven-workflow/eval.yaml +26 -0
  283. package/evals/todo-driven-workflow/tasks/negative-single-edit.yaml +16 -0
  284. package/evals/todo-driven-workflow/tasks/positive-multi-step.yaml +15 -0
  285. package/evals/todo-driven-workflow/tasks/positive-refactor-flow.yaml +15 -0
  286. package/evals/using-git-worktrees/eval.yaml +26 -0
  287. package/evals/using-git-worktrees/tasks/negative-trigger.yaml +15 -0
  288. package/evals/using-git-worktrees/tasks/positive-trigger.yaml +15 -0
  289. package/evals/verification-loop/eval.yaml +26 -0
  290. package/evals/verification-loop/tasks/negative-discussion.yaml +16 -0
  291. package/evals/verification-loop/tasks/positive-pre-ship.yaml +15 -0
  292. package/evals/verify-before-claim/eval.yaml +26 -0
  293. package/evals/verify-before-claim/tasks/negative-trigger.yaml +16 -0
  294. package/evals/verify-before-claim/tasks/positive-trigger.yaml +15 -0
  295. package/evals/zoom-out/eval.yaml +26 -0
  296. package/evals/zoom-out/tasks/negative-trivial-edit.yaml +16 -0
  297. package/evals/zoom-out/tasks/positive-repeated-failure.yaml +15 -0
  298. package/fable-discipline/SKILL.md +41 -38
  299. package/fable-discipline/references/discipline-rules.md +22 -0
  300. package/fable-mode/CONTRACT-FORMAT.md +51 -51
  301. package/fable-mode/SKILL.md +39 -51
  302. package/fable-mode/agents/fable-orchestrator.md +99 -92
  303. package/fable-mode/agents/fable-verifier.md +32 -32
  304. package/fable-mode/agents/fable-worker-haiku.md +52 -48
  305. package/fable-mode/agents/fable-worker-sonnet.md +53 -49
  306. package/fable-mode/execution-guardrails/SKILL.md +43 -87
  307. package/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
  308. package/fable-mode/fable-haiku/SKILL.md +36 -48
  309. package/fable-mode/fable-haiku/references/routing-notes.md +26 -0
  310. package/fable-mode/fable-opus/SKILL.md +36 -0
  311. package/fable-mode/fable-sonnet/SKILL.md +36 -0
  312. package/fable-mode/model-matrix.json +32 -0
  313. package/fable-mode/references/execution-phases.md +37 -0
  314. package/fable-mode/references/model-matrix.md +39 -0
  315. package/fable-mode/scripts/model-selector.js +129 -0
  316. package/find-skills/SKILL.md +48 -0
  317. package/find-skills/references/discovery-flow.md +102 -0
  318. package/find-skills/scripts/use-skill.js +106 -0
  319. package/git-commit/SKILL.md +45 -55
  320. package/git-commit/guides/ANGULAR_STYLE.md +60 -60
  321. package/git-commit/guides/COMMIT_GENERATION.md +23 -23
  322. package/git-commit/guides/LANGUAGE_DETECTION.md +16 -16
  323. package/git-commit/guides/MAIN_REPO.md +14 -14
  324. package/git-commit/guides/SUBMODULES.md +27 -27
  325. package/git-commit/references/commit-flow.md +30 -0
  326. package/grill-me/SKILL.md +43 -36
  327. package/grill-me/references/grilling-playbook.md +38 -0
  328. package/grill-with-docs/ADR-FORMAT.md +47 -47
  329. package/grill-with-docs/CONTEXT-FORMAT.md +63 -63
  330. package/grill-with-docs/SKILL.md +41 -99
  331. package/grill-with-docs/references/session-playbook.md +97 -0
  332. package/harness-everything/SKILL.md +42 -141
  333. package/harness-everything/references/skill-registry.md +39 -0
  334. package/harness-everything/references/triage-and-tiers.md +116 -0
  335. package/harness-everything/scripts/bootstrap.js +203 -140
  336. package/harness-everything/scripts/routing-keywords.json +320 -0
  337. package/harness-everything/scripts/self-heal.js +241 -189
  338. package/harness-everything/scripts/tier-router.js +334 -219
  339. package/harness-everything/scripts/verify-gate.js +87 -18
  340. package/hooks/hooks.json +155 -155
  341. package/hooks/scripts/boundary-guard.js +55 -55
  342. package/hooks/scripts/contract-test.js +79 -79
  343. package/hooks/scripts/depth-guard.js +65 -65
  344. package/hooks/scripts/lib/harness-state.js +139 -228
  345. package/hooks/scripts/lib/platforms/claude.js +185 -42
  346. package/hooks/scripts/lib/platforms/codex.js +114 -46
  347. package/hooks/scripts/lib/platforms/continue.js +91 -41
  348. package/hooks/scripts/lib/platforms/copilot.js +109 -41
  349. package/hooks/scripts/lib/platforms/cursor.js +89 -41
  350. package/hooks/scripts/lib/platforms/hermes.js +57 -32
  351. package/hooks/scripts/lib/platforms/index.js +17 -17
  352. package/hooks/scripts/lib/platforms/worktrees.js +20 -20
  353. package/hooks/scripts/reset-circuit-breaker.js +30 -30
  354. package/hooks/scripts/rule-of-3-tracker.js +124 -91
  355. package/hooks/scripts/rule-of-3.js +14 -3
  356. package/hooks/scripts/state-persist.js +99 -99
  357. package/hooks/scripts/stop-gate.js +80 -80
  358. package/hooks/scripts/subagent-scope-guard.js +88 -88
  359. package/improve-codebase-architecture/SKILL.md +40 -44
  360. package/improve-codebase-architecture/guides/DEEPENING.md +37 -37
  361. package/improve-codebase-architecture/guides/HTML-REPORT.md +123 -123
  362. package/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -44
  363. package/improve-codebase-architecture/guides/LANGUAGE.md +53 -53
  364. package/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
  365. package/install-cognitive-os/SKILL.md +38 -95
  366. package/install-cognitive-os/references/cognitive-loop.md +27 -0
  367. package/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
  368. package/multi-agent-workspace/SKILL.md +37 -0
  369. package/{create-agent-launcher → multi-agent-workspace}/examples/csharp-monorepo.md +123 -123
  370. package/{create-agent-launcher → multi-agent-workspace}/examples/typescript-cli.md +126 -126
  371. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-claude.md +77 -77
  372. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-codex.md +146 -146
  373. package/multi-agent-workspace/guidelines/platform-continue.md +38 -0
  374. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-copilot.md +74 -74
  375. package/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
  376. package/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
  377. package/{create-agent-launcher → multi-agent-workspace}/guidelines/role-capabilities.md +108 -108
  378. package/multi-agent-workspace/references/agency-agents.md +31 -0
  379. package/multi-agent-workspace/references/architecture-guide.md +32 -0
  380. package/multi-agent-workspace/references/orchestration.md +48 -0
  381. package/multi-agent-workspace/scripts/agency-catalog.js +190 -0
  382. package/multi-agent-workspace/scripts/index_memory.js +51 -0
  383. package/multi-agent-workspace/scripts/scaffold.js +253 -0
  384. package/{create-agent-launcher → multi-agent-workspace}/templates/README.md +17 -17
  385. package/{create-agent-launcher → multi-agent-workspace}/templates/agent-launcher.md +67 -67
  386. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-csharp.md +55 -55
  387. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-polyglot.md +61 -61
  388. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-ts.md +56 -56
  389. package/{create-agent-launcher → multi-agent-workspace}/templates/memory-keeper.md +36 -36
  390. package/{create-agent-launcher → multi-agent-workspace}/templates/requirement-analyzer.md +65 -65
  391. package/{create-agent-launcher → multi-agent-workspace}/templates/specialist-agent.md +34 -34
  392. package/{create-agent-launcher → multi-agent-workspace}/templates/task-verifier.md +55 -55
  393. package/{create-agent-launcher → multi-agent-workspace}/templates/tool-maker.md +32 -32
  394. package/multi-agent-workspace/workflows/01-init.md +22 -0
  395. package/multi-agent-workspace/workflows/02-analysis.md +23 -0
  396. package/multi-agent-workspace/workflows/03-generation.md +27 -0
  397. package/multi-agent-workspace/workflows/04-launcher.md +16 -0
  398. package/opencode-plugin/README.md +94 -0
  399. package/opencode-plugin/hooks/circuit-breaker.js +121 -0
  400. package/opencode-plugin/hooks/compliance.js +128 -0
  401. package/opencode-plugin/hooks/post-edit.js +62 -0
  402. package/opencode-plugin/hooks/pre-complete.js +65 -0
  403. package/opencode-plugin/hooks/verify.js +140 -0
  404. package/opencode-plugin/plugin.json +17 -0
  405. package/opencode-plugin/test-hook-firing.js +198 -0
  406. package/package.json +50 -22
  407. package/references/definition-of-done.md +67 -0
  408. package/references/performance-checklist.md +153 -0
  409. package/references/platform-advisory-template.md +58 -0
  410. package/references/security-checklist.md +205 -0
  411. package/repo-docs/SKILL.md +46 -45
  412. package/repo-docs/references/process-guide.md +60 -0
  413. package/repo-docs/templates/agents-template.md +264 -264
  414. package/repo-docs/templates/knowledge-agents-template.md +50 -50
  415. package/repo-docs/templates/knowledge-readme-template.md +83 -83
  416. package/repo-docs/templates/manual-recon.md +117 -117
  417. package/repo-docs/templates/multi-skills-readme-template.md +72 -72
  418. package/repo-docs/templates/product-agents-template.md +78 -78
  419. package/repo-docs/templates/product-readme-template.md +95 -95
  420. package/repo-docs/templates/readme-template.md +136 -136
  421. package/repo-docs/templates/single-skill-readme-template.md +70 -70
  422. package/repo-docs/templates/skills-agents-template.md +60 -60
  423. package/rewrite-commits/SKILL.md +37 -32
  424. package/rewrite-commits/references/workflow.md +18 -0
  425. package/scripts/installer.js +546 -649
  426. package/scripts/lib/advisory-text.js +167 -163
  427. package/scripts/lib/claude-hooks.js +84 -71
  428. package/scripts/lib/gitignore.js +199 -80
  429. package/scripts/lib/manifest.js +146 -82
  430. package/scripts/lib/prompts.js +241 -241
  431. package/scripts/lib/skills.js +260 -172
  432. package/scripts/lib/workspace.js +28 -28
  433. package/scripts/verify-install.js +147 -0
  434. package/security-review/SKILL.md +50 -511
  435. package/security-review/guides/OWASP-PATTERNS.md +31 -0
  436. package/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
  437. package/security-review/references/security-checklist.md +478 -0
  438. package/security-review/scripts/audit-secrets.js +84 -0
  439. package/self-evolve/SKILL.md +47 -54
  440. package/self-evolve/references/memory-resolution.md +58 -0
  441. package/self-evolve/scripts/persist-memory.js +139 -40
  442. package/self-evolve/scripts/register-dynamic-skill.js +251 -0
  443. package/self-evolve/scripts/self-regression.js +110 -113
  444. package/skill-creator/SKILL.md +49 -91
  445. package/skill-creator/references/authoring-workflow.md +14 -0
  446. package/skill-creator/references/dynamic-generation-contract.md +21 -0
  447. package/skill-creator/references/quality-checklist.md +15 -0
  448. package/skill-creator/references/quality-principles.md +81 -81
  449. package/skill-creator/references/testing-workflow.md +20 -25
  450. package/skill-style/SKILL.md +42 -48
  451. package/skill-style/references/style-guide.md +36 -0
  452. package/tdd/SKILL.md +44 -53
  453. package/tdd/guides/deep-modules.md +33 -33
  454. package/tdd/guides/interface-design.md +31 -31
  455. package/tdd/guides/mocking.md +59 -59
  456. package/tdd/guides/refactoring.md +10 -10
  457. package/tdd/guides/tests.md +61 -61
  458. package/tdd/references/core-discipline.md +49 -0
  459. package/to-spec/SKILL.md +42 -0
  460. package/to-spec/references/process.md +77 -0
  461. package/to-spec/scripts/check-project-docs.js +259 -0
  462. package/to-spec/templates/cli-reference.md +31 -0
  463. package/to-spec/templates/dev-doc.md +27 -0
  464. package/to-spec/templates/feature-spec.md +59 -0
  465. package/to-spec/templates/schema-doc.md +31 -0
  466. package/to-tickets/SKILL.md +42 -0
  467. package/to-tickets/references/publishing-and-templates.md +97 -0
  468. package/todo-driven-workflow/SKILL.md +40 -54
  469. package/todo-driven-workflow/references/execution-guide.md +27 -0
  470. package/using-git-worktrees/SKILL.md +49 -161
  471. package/using-git-worktrees/references/workflow-details.md +108 -0
  472. package/verification-loop/SKILL.md +46 -138
  473. package/verification-loop/references/verification-phases.md +116 -0
  474. package/verification-loop/templates/verification-report.template.md +15 -0
  475. package/verify-before-claim/SKILL.md +43 -86
  476. package/verify-before-claim/references/verification-guide.md +73 -0
  477. package/zoom-out/SKILL.md +42 -90
  478. package/zoom-out/references/circuit-breaker.md +66 -0
  479. package/zoom-out/templates/zoom-out-report.template.md +20 -0
  480. package/build-multi-agent-system/AGENTS.md +0 -50
  481. package/build-multi-agent-system/README.md +0 -63
  482. package/build-multi-agent-system/SKILL.md +0 -68
  483. package/create-agent-launcher/SKILL.md +0 -48
  484. package/create-agent-launcher/guidelines/platform-gemini.md +0 -101
  485. package/create-agent-launcher/workflows/01-init.md +0 -22
  486. package/create-agent-launcher/workflows/02-analysis.md +0 -26
  487. package/create-agent-launcher/workflows/03-generation.md +0 -29
  488. package/create-agent-launcher/workflows/04-launcher.md +0 -20
  489. package/docs/workflows/build-multi-agent-system.md +0 -62
  490. package/docs/workflows/create-agent-launcher.md +0 -62
  491. package/eval-framework/behavioral-test.js +0 -105
  492. package/eval-framework/mechanism-test.js +0 -251
  493. package/harness-everything/scripts/todo-cli.js +0 -157
  494. package/skill-style/STYLE.md +0 -37
@@ -0,0 +1,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 };
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: find-skills
3
+ description: Search the agent-skills ecosystem (skills.sh / npx skills) when no installed skill fits; verify quality, apply ephemerally via temp cache by default, and install permanently via npx skills add only with explicit user approval
4
+ license: Apache-2.0
5
+ metadata:
6
+ author: Miya Daniel
7
+ version: 0.3.4
8
+ ---
9
+
10
+ # Find Skills (External Skill Discovery)
11
+
12
+ ## 📋 Skill Contract
13
+
14
+ | Component | Specification |
15
+ | :--- | :--- |
16
+ | **Trigger / Input** | Request to find an external skill. |
17
+ | **Expected Output** | Skill pointer, applied skill, or fallback. |
18
+ | **State Mutations** | Temp cache (default); native install opt-in. |
19
+ | **Enforcement Gate** | Local first; explicit approval required before applying third-party code; graceful npx failure. |
20
+
21
+ ## Workflow
22
+
23
+ 0. Check local coverage (router registry, `generated[]`) before live installs:
24
+ ```bash
25
+ npx skills list --json # project scope
26
+ npx skills list -g --json # global scope
27
+ ```
28
+ 1. Identify domain/task, check [skills.sh](https://skills.sh/), then search `npx skills find [query] [--owner <owner>]`.
29
+ 2. Verify: prefer 1K+ installs, official sources; read the unaudited SKILL.md.
30
+ 3. Present name/source/count; NEVER fetch/apply without explicit approval.
31
+ 4. Apply ephemerally (default, zero footprint):
32
+ ```bash
33
+ node "<this-skill-dir>/scripts/use-skill.js" <owner/repo[@skill]>
34
+ ```
35
+ Apply the output; OS-temp cache (6h); nothing written to repo or manifest.json.
36
+ 5. Permanent install ONLY when the user says they will reuse it: `npx skills add <owner/repo[@skill]> --agent <agent> [-g] -y`
37
+ 6. Nothing exists? Help directly; suggest `npx skills init <name>` if recurring.
38
+
39
+ Deep dive: references/discovery-flow.md
40
+
41
+ ## USE FOR:
42
+ - finding an external skill when none installed fits
43
+ - vetting third-party skills before applying them
44
+ - ephemeral skill use without permanent installs
45
+
46
+ ## DO NOT USE FOR:
47
+ - authoring skills (`skill-creator`)
48
+ - installing anything without explicit user approval
@@ -0,0 +1,102 @@
1
+ # Find Skills — Full Discovery & Application Reference
2
+
3
+ ## Decision Flow
4
+
5
+ ```mermaid
6
+ flowchart TD
7
+ Start[User Asks for Skill / Capability X] --> CheckLocal{1. Covered by Static or Self-Evolved Skills?}
8
+
9
+ CheckLocal -- Yes --> UseLocal[Use Existing Harness Skill / Dynamic Generated Skill]
10
+ CheckLocal -- No --> CheckNet{2. Network & npx Executable?}
11
+
12
+ CheckNet -- Yes --> SearchSkills[Search via npx skills find / skills.sh]
13
+ SearchSkills -- Found & Approved --> ApplySkill[Apply Ephemerally via use-skill.js or npx skills add]
14
+ SearchSkills -- Network / Search Fails --> FallbackGeneral
15
+
16
+ CheckNet -- No --> FallbackGeneral{3. Offline / General Domain Capability Fallback}
17
+
18
+ FallbackGeneral --> ExecuteDirect[Apply Built-in Best Practices / Direct Solution]
19
+
20
+ UseLocal --> Done[Delivered Capabilities]
21
+ ApplySkill --> Done
22
+ ExecuteDirect --> Done
23
+ ```
24
+
25
+ ## 0. Check existing coverage first (full detail)
26
+
27
+ Confirm the capability doesn't already exist, in this order:
28
+
29
+ 1. **Static skills** — grep `harness-everything/SKILL.md` §5's registry table for a matching row. This is the reviewed, first-party skill set; `tier-router.js` also surfaces it automatically by keyword.
30
+ 2. **Self-evolved dynamic skills** (`generated[]`) — skills this workspace's own agent authored via `self-evolve` after a hard-won lesson. `tier-router.js` scans every reachable `manifest.json`'s `generated[]` array every turn and prints a `🎯 HIGH-RELEVANCE SELF-EVOLVED SKILL DETECTED` block when a skill's `triggers` match — check this turn's routing checkpoint output before doing anything else.
31
+ 3. **Third-party skills someone already chose to keep** — query live, don't guess:
32
+
33
+ ```bash
34
+ npx skills list --json # project scope
35
+ npx skills list -g --json # global scope
36
+ ```
37
+
38
+ This only ever finds something if a past session went through the rare permanent-install exception path — the default ephemeral path never shows up here, by design, because it never installs anything. Checked live rather than cached on purpose: unlike `generated[]` (which Harness fully owns — authored, quality-gated by `skill-creator`, lifecycle-tracked draft/active/deprecated), a third-party skill's content can change out from under a cache the moment its author updates it or the user runs `npx skills update`/`remove` — Harness has no way to govern that lifecycle, so it doesn't pretend to by caching a snapshot. `npx skills list` is already the CLI's own live, authoritative record. (Full reasoning: `docs/reflection.md`'s "External Skills" section.)
39
+
40
+ ## 1. Understand what they need
41
+
42
+ Identify: the domain (React, testing, deployment, design...), the specific task, and whether it's common enough that a published skill likely exists.
43
+
44
+ ## 2. Check the leaderboard first
45
+
46
+ Before running a CLI search, check the [skills.sh leaderboard](https://skills.sh/) for a well-known skill in the domain. Top sources: `vercel-labs/agent-skills` (React, Next.js, web design), `anthropics/skills` (frontend design, document processing).
47
+
48
+ ## 4. Verify quality before recommending (full criteria)
49
+
50
+ Don't recommend a skill from search results alone. Check:
51
+
52
+ - **Install count** — prefer 1K+ installs; be cautious under 100.
53
+ - **Source reputation** — official sources (`vercel-labs`, `anthropics`, `microsoft`) outrank unknown authors.
54
+ - **GitHub stars** — treat a source repo with <100 stars with skepticism.
55
+ - **Trust, not just quality** — a third-party `SKILL.md` is natural-language instructions that get loaded into agent context and followed, whether applied ephemerally or installed permanently. Unlike this repo's own skills (which pass `skill-creator`'s Quality Checklist and get reviewed via PR), it's unaudited. Read the actual `SKILL.md` content before applying it, the same way you'd review a dependency before adding it — not just its install count.
56
+
57
+ ## 5. Present options — example message
58
+
59
+ ```
60
+ I found a skill that might help! The "react-best-practices" skill provides
61
+ React and Next.js performance optimization guidelines from Vercel Engineering.
62
+ (185K installs)
63
+
64
+ Source: vercel-labs/agent-skills@react-best-practices
65
+ Learn more: https://skills.sh/vercel-labs/agent-skills/react-best-practices
66
+
67
+ Want me to apply it to this task? (It won't be installed anywhere unless you
68
+ tell me you'll want it again later.)
69
+ ```
70
+
71
+ Show the skill name, what it does, install count/source, and ask whether this is a one-off or something worth keeping. Never fetch or apply anything from search results without explicit confirmation.
72
+
73
+ ## 6. Apply ephemerally — how the wrapper works
74
+
75
+ Run this skill's own small wrapper instead of raw `npx skills use`:
76
+
77
+ ```bash
78
+ node "<this-skill-dir>/scripts/use-skill.js" <owner/repo[@skill]>
79
+ ```
80
+
81
+ It prints the skill's `SKILL.md` wrapped as a ready-to-follow prompt (identical to `npx skills use`'s own stdout format) — read that output and apply it to the current task. Behind that:
82
+
83
+ - **First lookup of a given `<source>`**: a real fetch via `npx skills use` (a few seconds), then the rendered output is cached under `os.tmpdir()/harness-find-skills-cache/<sha1-of-source>.md`.
84
+ - **Repeat lookups of the same `<source>`** (this session or a later one, same machine) within the freshness window (default 6h, override with `--max-age <hours>`): served straight from that cache file — no network call, near-instant.
85
+ - **Nothing is written to the repo, to any platform's native skill directory, or to `manifest.json`.** The cache lives entirely under the OS temp directory, so it needs no explicit cleanup and nothing for Harness to track — the OS reclaiming temp files on its own schedule is the only "expiry" this needs, and a reclaimed-or-past-freshness-window entry is just treated as a fresh cache miss.
86
+
87
+ This is the default for a reason: a skill applied through here costs real work on first fetch and effectively nothing on repeats, without ever growing a footprint that later sessions have to read through or a human has to remember to clean up.
88
+
89
+ ## 6b. Install permanently — full mapping
90
+
91
+ Only when the user says this is something they expect to reuse across many future sessions — not the default, and not implied by "yes, use it":
92
+
93
+ ```bash
94
+ npx skills add <owner/repo[@skill]> --agent <agent> [-g] -y
95
+ ```
96
+
97
+ Map whichever platform this session is actually running in to the CLI's own agent name: `claude` → `claude-code`, `cursor` → `cursor`, `copilot` → `github-copilot`, `codex` → `codex`, `continue` → `continue`. `-g` targets that platform's global skill directory instead of the project-local one — same local-vs-global convention `scripts/installer.js` uses. Nothing further to register: §0.3's live `npx skills list` finds it again next time.
98
+
99
+ ## Related mechanisms
100
+
101
+ - `self-evolve/SKILL.md` + `skill-creator/SKILL.md` §4 — the Dynamic Skill Generation Contract for `generated[]` skills. Deliberately a *different* mechanism from this skill, not a shared one: `generated[]` skills are self-authored and lifecycle-owned by Harness, so caching their triggers in `manifest.json` for `tier-router.js` to match is safe. Third-party skills fetched here default to a self-expiring OS-temp cache with no Harness bookkeeping at all (§6), or, in the rare §6b case, the CLI's own native install + lock file — never a second, driftable Harness-owned cache.
102
+ - `harness-everything/SKILL.md` §5 — the static skill registry to check before searching externally.
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Ephemeral third-party skill lookup: prints a skill's SKILL.md wrapped as a
4
+ * ready-to-apply prompt (the same shape `npx skills use` writes to stdout),
5
+ * backed by a content-addressed cache under the OS temp directory so
6
+ * repeat lookups of the same <source> cost zero network calls within the
7
+ * cache's freshness window.
8
+ *
9
+ * Deliberately writes nothing anywhere Harness owns - no manifest, no
10
+ * platform's native skill directory. The cache lives entirely under
11
+ * os.tmpdir() and needs no explicit cleanup: the OS reclaims temp files on
12
+ * its own schedule, and the freshness check below (default 6h) means a
13
+ * lingering entry just gets treated as a miss and re-fetched rather than
14
+ * served stale. That's the only "lifecycle" this needs - nothing for
15
+ * Harness to track or govern, unlike self-evolve's `generated[]`.
16
+ *
17
+ * Usage:
18
+ * node use-skill.js <owner/repo[@skill]> [--max-age <hours>]
19
+ */
20
+ const fs = require('fs');
21
+ const os = require('os');
22
+ const path = require('path');
23
+ const crypto = require('crypto');
24
+ const { execSync } = require('child_process');
25
+
26
+ const CACHE_DIR = path.join(os.tmpdir(), 'harness-find-skills-cache');
27
+ const DEFAULT_MAX_AGE_HOURS = 6;
28
+
29
+ // `source` is a third-party-supplied identifier (from a search result the
30
+ // agent picked) that ends up in a shell command line - `npx` is a `.cmd`
31
+ // shim on Windows, which CreateProcess can only launch through a shell, so
32
+ // there's no shell-free path here. Node's own child_process docs flag
33
+ // spawn/execFile's `{args: [...], shell: true}` form as unsafe (DEP0190: the
34
+ // array isn't actually escaped, just concatenated) - execSync's single
35
+ // pre-built string is the form Node expects the caller to have already
36
+ // validated, so this allow-list IS the injection defense, checked before the
37
+ // string is built. A package spec never legitimately needs spaces or shell
38
+ // metacharacters (`&|;$()<>\`"'`).
39
+ const SAFE_SOURCE_PATTERN = /^[A-Za-z0-9._/@:-]+$/;
40
+
41
+ function assertSafeSource(source) {
42
+ if (!SAFE_SOURCE_PATTERN.test(source)) {
43
+ console.error(`[Error] Refusing to run "npx skills use" with a source containing unexpected characters: ${JSON.stringify(source)}`);
44
+ process.exit(1);
45
+ }
46
+ }
47
+
48
+ function parseArgs(argv) {
49
+ const opts = { source: null, maxAgeHours: DEFAULT_MAX_AGE_HOURS };
50
+ const rest = [];
51
+ for (let i = 0; i < argv.length; i++) {
52
+ const a = argv[i];
53
+ if (a === '--max-age') opts.maxAgeHours = Number(argv[++i]);
54
+ else rest.push(a);
55
+ }
56
+ opts.source = rest[0] || null;
57
+ return opts;
58
+ }
59
+
60
+ function cachePathFor(source) {
61
+ const hash = crypto.createHash('sha1').update(source).digest('hex');
62
+ return path.join(CACHE_DIR, `${hash}.md`);
63
+ }
64
+
65
+ function readCacheIfFresh(cachePath, maxAgeHours) {
66
+ if (!fs.existsSync(cachePath)) return null;
67
+ const ageMs = Date.now() - fs.statSync(cachePath).mtimeMs;
68
+ if (ageMs > maxAgeHours * 60 * 60 * 1000) return null;
69
+ return fs.readFileSync(cachePath, 'utf8');
70
+ }
71
+
72
+ function main() {
73
+ const { source, maxAgeHours } = parseArgs(process.argv.slice(2));
74
+ if (!source) {
75
+ console.error('Usage: node use-skill.js <owner/repo[@skill]> [--max-age <hours>]');
76
+ process.exit(1);
77
+ }
78
+ assertSafeSource(source);
79
+
80
+ const cachePath = cachePathFor(source);
81
+ const cached = readCacheIfFresh(cachePath, maxAgeHours);
82
+ if (cached !== null) {
83
+ process.stderr.write(`[find-skills] cache hit (<${maxAgeHours}h old, no network call): ${cachePath}\n`);
84
+ process.stdout.write(cached);
85
+ return;
86
+ }
87
+
88
+ process.stderr.write(`[find-skills] cache miss - fetching "${source}" via npx skills use...\n`);
89
+ let prompt;
90
+ try {
91
+ // Safe to interpolate directly: assertSafeSource() already rejected
92
+ // anything outside [A-Za-z0-9._/@:-], so there's no metacharacter left
93
+ // for a shell to act on.
94
+ const npxCmd = os.platform() === 'win32' ? 'npx.cmd' : 'npx';
95
+ prompt = execSync(`${npxCmd} --yes skills use ${source}`, { encoding: 'utf8', shell: true });
96
+ } catch (err) {
97
+ console.error(`[Error] "npx skills use ${source}" failed:\n${(err.stderr || err.message || '').toString().trim()}`);
98
+ process.exit(1);
99
+ }
100
+
101
+ fs.mkdirSync(CACHE_DIR, { recursive: true });
102
+ fs.writeFileSync(cachePath, prompt, 'utf8');
103
+ process.stdout.write(prompt);
104
+ }
105
+
106
+ main();
@@ -1,55 +1,45 @@
1
- ---
2
- name: git-commit
3
- description: Generates Angular-style commit messages after verifying the environment and staged files.
4
- author: Miya Daniel | Harness Core Team
5
- version: 0.2.0
6
- ---
7
-
8
- # Git Commit (Angular Style)
9
-
10
- ## 📋 Skill Contract
11
-
12
- | Component | Specification |
13
- | :--- | :--- |
14
- | **Trigger / Input** | User explicitly requests a commit, or a task phase concludes. Input: Staged git diff. |
15
- | **Expected Output** | Execution of `git commit -m "..."`. |
16
- | **State Mutations** | Git tree is updated. Workspace becomes clean. |
17
- | **Enforcement Gate** | You MUST run `git status`. If there are no staged files, the terminal will exit 1 when you try to commit, or you MUST ask the user before staging. |
18
-
19
- This skill is automatically triggered by the `harness-everything` router upon task completion or when the user explicitly requests "commit" or "save changes".
20
-
21
- ## 1. Triggers
22
- - The final step of the TDD cycle (after Refactor is completed).
23
- - Sub-task milestones within `fable-mode`.
24
- - The user explicitly issues commands like "commit", "save changes", "git commit".
25
-
26
- ## 2. Environment Discovery & Prerequisite Defense `[Discover]`
27
- Before generating a commit message, you **MUST** execute the following discovery:
28
- - Run `git status` to check which files are staged or modified.
29
- - **Circuit Breaker**: If no files are staged, ask the user if they want to stage the currently modified files; fabricating commit messages out of thin air is PROHIBITED.
30
- - Check if working within a Submodule. If so, you MUST handle commits for the Main Repo and Sub Repo separately.
31
-
32
- ## 3. Master Routing Workflow (Order of Operations)
33
- When both the Main Repo and any Submodules have changes, you **MUST** prioritize and process Submodule changes first. Strictly follow this execution order:
34
- 1. **Detect Submodule Changes First**: Before processing the Main Repo, you MUST check if any submodules have changes (staged or unstaged).
35
- 2. **Prioritize Submodule Commits**: If any submodules have changes, you MUST halt Main Repo commit generation immediately. Run `git-commit/guides/SUBMODULES.md` first to commit all submodule changes and update their pointers in the Main Repo.
36
- 3. **Stage Submodule Pointers in Main Repo**: Ensure that updated submodule pointers are added (`git add <submodule_path>`) to the Main Repo staging area before generating the Main Repo commit.
37
- 4. **Execute Main Repo Commit Last**: Once all submodules are fully clean and their new pointers are staged in the Main Repo, you may then proceed with `git-commit/guides/MAIN_REPO.md` to commit the Main Repo changes.
38
-
39
- ## 4. Commit Generation Discipline (Angular Style)
40
- - Strictly follow the format: `<type>(<scope>): <subject>`.
41
- - **Type**: `feat`, `fix`, `refactor`, `docs`, `test`, `chore`, `perf`, `ci`.
42
- - **Subject**: Short and concise, use the imperative, present tense (e.g., "add user auth", not "added user auth"), no capitalized first letter, no dot (.) at the end.
43
- - **Body (if necessary)**: Explain "why" this change was made and the "root cause of the problem", and MUST include a clear, structured bulleted list detailing the exact modified parts (such as files, functions, or logical adjustments) extracted from the `git diff --cached` analysis.
44
-
45
- ## 5. Execution and Handoff `[Try] & [Summarize]`
46
- - After confirming the commit message, call the terminal tool to execute `git commit -m "..." -m "..."`.
47
- - Upon success, if still within the `fable-mode` workflow, hand control back to `fable-mode` to continue to the next milestone.
48
-
49
- ## Deep Reference Guides
50
- For comprehensive details on commit rules and submodule configurations, refer to:
51
- - `git-commit/guides/ANGULAR_STYLE.md` — Complete specification for commit messages
52
- - `git-commit/guides/COMMIT_GENERATION.md` — Generation patterns and strategies
53
- - `git-commit/guides/LANGUAGE_DETECTION.md` — Language-specific commit guidelines
54
- - `git-commit/guides/MAIN_REPO.md` — Committing within monorepos/main repo contexts
55
- - `git-commit/guides/SUBMODULES.md` — Advanced handling of submodules and nested repos
1
+ ---
2
+ name: git-commit
3
+ description: "Generate Angular-style commit messages after verifying the environment, submodules, and staged files; use for explicit commit requests or concluded task phases."
4
+ license: Apache-2.0
5
+ metadata:
6
+ author: Miya Daniel
7
+ version: 0.3.4
8
+ ---
9
+
10
+ # Git Commit (Angular Style)
11
+
12
+ ## 📋 Skill Contract
13
+
14
+ | Component | Specification |
15
+ | :--- | :--- |
16
+ | **Trigger / Input** | User requests a commit, or a task phase concludes. Input: staged git diff. |
17
+ | **Expected Output** | Clean Angular-style commit via `git commit -m` or temp file (`git commit -F`). |
18
+ | **State Mutations** | Git tree updated; working tree becomes clean. |
19
+ | **Enforcement Gate** | Run `git status` first; nothing staged → prompt user; non-git repo → offer `git init` or skip. |
20
+
21
+ ## Quick Workflow
22
+
23
+ 1. `git status`; no repo → offer `git init` or skip; submodules changed → commit first per `git-commit/guides/SUBMODULES.md`.
24
+ 2. `git diff --cached`; nothing staged → prompt user / stage targeted files.
25
+ 3. Format `<type>(<scope>): <subject>` per `git-commit/guides/ANGULAR_STYLE.md`. Multiline/Windows → `.git-commit-msg.txt` + `git commit -F`, clean up.
26
+ 4. `git commit -m "..."`, verify with `git log -1`.
27
+
28
+ Deep guides:
29
+ - `git-commit/guides/ANGULAR_STYLE.md` — Conventional structure, scopes
30
+ - `git-commit/guides/COMMIT_GENERATION.md` — Patterns, diff analysis
31
+ - `git-commit/guides/LANGUAGE_DETECTION.md` — Subject language rules
32
+ - `git-commit/guides/MAIN_REPO.md` — Monorepo commits
33
+ - `git-commit/guides/SUBMODULES.md` — Submodules, nested repos
34
+
35
+ ## USE FOR:
36
+ - Commit request from the user
37
+ - Formatting conventional commit messages
38
+ - Submodule or monorepo commits
39
+
40
+ ## DO NOT USE FOR:
41
+ - Staging without user confirmation
42
+ - Branching, rebasing, merging, pushing
43
+ - Non-git dirs where user declines `git init`
44
+
45
+ Deep dive: references/commit-flow.md