repo-harness 0.25.1 → 0.25.4

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 (379) hide show
  1. package/README.md +21 -31
  2. package/agents/fleet/gatekeeper.md +1 -1
  3. package/assets/herdr/github-events/bot-event.d.mts +12 -0
  4. package/assets/herdr/{webhook-notify → github-events}/bot-event.mjs +1 -1
  5. package/assets/herdr/github-events/worker.mjs +2 -3
  6. package/assets/operator/{fleet-windows-job-controller.ps1 → windows-job-controller.ps1} +12 -12
  7. package/assets/reference-configs/agentic-development-flow.md +29 -19
  8. package/assets/reference-configs/external-tooling.md +30 -110
  9. package/assets/reference-configs/global-working-rules.md +11 -10
  10. package/assets/reference-configs/harness-overview.md +13 -8
  11. package/assets/reference-configs/herdr-notify.md +99 -95
  12. package/assets/reference-configs/herdr-skill-context.md +39 -49
  13. package/assets/reference-configs/hook-operations.md +4 -4
  14. package/assets/reference-configs/host-invariants.md +1 -1
  15. package/assets/reference-configs/issue-pipeline.md +2 -3
  16. package/assets/review-hazards.v1.json +57 -0
  17. package/assets/skill-commands/manifest.json +54 -143
  18. package/assets/skill-version.json +2 -2
  19. package/assets/skills/repo-harness-cross-review/SKILL.md +8 -5
  20. package/assets/skills/repo-harness-cross-review/references/generic-review.md +17 -10
  21. package/assets/skills/repo-harness-herdr-portal/SKILL.md +29 -22
  22. package/assets/skills/repo-harness-herdr-portal/references/messaging.md +14 -12
  23. package/assets/skills/repo-harness-herdr-portal/references/spawn.md +51 -68
  24. package/assets/skills/repo-harness-issue-flow/SKILL.md +21 -11
  25. package/assets/skills/repo-harness-issue-flow/references/acceptor.md +59 -9
  26. package/assets/skills/repo-harness-issue-flow/references/board.md +61 -51
  27. package/assets/skills/repo-harness-issue-flow/references/orchestrator.md +74 -43
  28. package/assets/skills/repo-harness-issue-flow/references/replan.md +10 -9
  29. package/assets/skills/repo-harness-issue-flow/references/templates.md +78 -39
  30. package/assets/skills/repo-harness-issue-flow/references/worker.md +26 -15
  31. package/assets/skills/repo-harness-test/references/authoring.md +2 -5
  32. package/assets/skills/repo-harness-test/references/running.md +5 -3
  33. package/assets/skills/repo-harness-test/references/verification-plan.md +7 -3
  34. package/assets/tool-catalog.v1.json +10 -15
  35. package/dist/hook-entry.js +200 -825
  36. package/dist/oar-review-host.js +34 -12
  37. package/dist/operator-ui/assets/{ArchitectureWorkspace-CY6MWVYK.js → ArchitectureWorkspace-BRP1rMMo.js} +2 -2
  38. package/dist/operator-ui/assets/{DocsPage-DnPRp8Bo.js → DocsPage-DLM6dzMb.js} +3 -3
  39. package/dist/operator-ui/assets/{abnfDiagram-VCTEODGH-FrczBTcM.js → abnfDiagram-VCTEODGH-B4_iXt3l.js} +1 -1
  40. package/dist/operator-ui/assets/architecture-7GRP2DOG-BaUpfaSR.js +1 -0
  41. package/dist/operator-ui/assets/{architectureDiagram-5GKGNRK7-B7YjW5cP.js → architectureDiagram-5GKGNRK7-D2vVdhRg.js} +1 -1
  42. package/dist/operator-ui/assets/{blockDiagram-I7D4REHJ-VlgsJiAG.js → blockDiagram-I7D4REHJ-BYZ8XsMJ.js} +1 -1
  43. package/dist/operator-ui/assets/{c4Diagram-7LVT6UL2-D7skC_rA.js → c4Diagram-7LVT6UL2-5ZFF7y_b.js} +1 -1
  44. package/dist/operator-ui/assets/channel-B2h48QWv.js +1 -0
  45. package/dist/operator-ui/assets/{chunk-4HAMMTFA-CmMSCuUx.js → chunk-4HAMMTFA-i3tlSxDP.js} +1 -1
  46. package/dist/operator-ui/assets/{chunk-75Z2AOVW-C2Xq_mi9.js → chunk-75Z2AOVW-BhcHGQX3.js} +1 -1
  47. package/dist/operator-ui/assets/{chunk-DU6HZSFF-c1GQqTNL.js → chunk-DU6HZSFF-ESwLEd7y.js} +1 -1
  48. package/dist/operator-ui/assets/{chunk-F27PBJKO-mKGGg2lc.js → chunk-F27PBJKO-DzgkUAaS.js} +1 -1
  49. package/dist/operator-ui/assets/{chunk-GMAD6QVW-BBvaMzz7.js → chunk-GMAD6QVW-CI3PzCBH.js} +1 -1
  50. package/dist/operator-ui/assets/{chunk-GVQU2GXP-Ciqkfb7x.js → chunk-GVQU2GXP-D7mVueL9.js} +1 -1
  51. package/dist/operator-ui/assets/{chunk-IMKFNOWR-lPRrJwGG.js → chunk-IMKFNOWR-6yCiE3Ny.js} +1 -1
  52. package/dist/operator-ui/assets/{chunk-L3NEJ4N5-ZCELMmfj.js → chunk-L3NEJ4N5-fDwT8vZ_.js} +1 -1
  53. package/dist/operator-ui/assets/{chunk-OSK3NFVY-C2FSyex1.js → chunk-OSK3NFVY-CYeI6Ngu.js} +1 -1
  54. package/dist/operator-ui/assets/{chunk-P2QGCYS3-BNCem-OE.js → chunk-P2QGCYS3-BR4LGVGe.js} +1 -1
  55. package/dist/operator-ui/assets/{chunk-POPQ4Y6H-DLkj1nb5.js → chunk-POPQ4Y6H-DGYaK5_M.js} +1 -1
  56. package/dist/operator-ui/assets/{chunk-PWAF6VOD-BPXpJW86.js → chunk-PWAF6VOD-CP0EqV5m.js} +1 -1
  57. package/dist/operator-ui/assets/{chunk-SHT3W25Y-C2LRo2LL.js → chunk-SHT3W25Y-CfBlFhVD.js} +1 -1
  58. package/dist/operator-ui/assets/{chunk-SVP7TREG-DzBTsX5k.js → chunk-SVP7TREG-BatRqPl3.js} +1 -1
  59. package/dist/operator-ui/assets/{chunk-TICWLB2K-Bcy59Hos.js → chunk-TICWLB2K-Bdzq3Pce.js} +1 -1
  60. package/dist/operator-ui/assets/classDiagram-ZZMXUADV-Bdi2GD7M.js +1 -0
  61. package/dist/operator-ui/assets/classDiagram-v2-VYDZK3BY-Bdi2GD7M.js +1 -0
  62. package/dist/operator-ui/assets/{cynefin-OW5HDTMX-ClBj8Ulr.js → cynefin-OW5HDTMX-DWFrsjEE.js} +1 -1
  63. package/dist/operator-ui/assets/{cynefinDiagram-5FMLGOSQ-Ds7Mibm4.js → cynefinDiagram-5FMLGOSQ-VHMt8H7p.js} +1 -1
  64. package/dist/operator-ui/assets/{dagre-GXQ25YYZ-BQdr4QZm.js → dagre-GXQ25YYZ-DcIZyQLZ.js} +1 -1
  65. package/dist/operator-ui/assets/{diagram-S7CK7UJ4-D2lmiWeD.js → diagram-S7CK7UJ4-CFmbsbnJ.js} +1 -1
  66. package/dist/operator-ui/assets/{diagram-UQ7AKVKN-O3oH4sVn.js → diagram-UQ7AKVKN-D7wxxWxp.js} +1 -1
  67. package/dist/operator-ui/assets/{diagram-VSXAHHWV-ChWUSpJM.js → diagram-VSXAHHWV-Kbacc4vb.js} +1 -1
  68. package/dist/operator-ui/assets/{diagram-VX7I27RA-Ch69HZTd.js → diagram-VX7I27RA-BFA0zXM3.js} +1 -1
  69. package/dist/operator-ui/assets/{diagram-Z3DM3KII-BrawDVH6.js → diagram-Z3DM3KII-C7XyRbul.js} +1 -1
  70. package/dist/operator-ui/assets/{ebnfDiagram-PWID7BFC-DmJK-kmd.js → ebnfDiagram-PWID7BFC-Cnqsrj6p.js} +1 -1
  71. package/dist/operator-ui/assets/{erDiagram-RLTQ6QDP-Q0HnvPDo.js → erDiagram-RLTQ6QDP-CRR1x5bo.js} +1 -1
  72. package/dist/operator-ui/assets/eventmodeling-NTZA5JFV-Brlm8U--.js +1 -0
  73. package/dist/operator-ui/assets/flowDiagram-HODETNUW-CETmahG6.js +1 -0
  74. package/dist/operator-ui/assets/{ganttDiagram-EL5Y4UJY-qvwdPHBY.js → ganttDiagram-EL5Y4UJY-DUf1_n-j.js} +1 -1
  75. package/dist/operator-ui/assets/{gitGraph-4MIJSDKK-Dx7BjZZV.js → gitGraph-4MIJSDKK-2kdiVAUn.js} +1 -1
  76. package/dist/operator-ui/assets/{gitGraphDiagram-WWUBYQGX-VMYWxpyb.js → gitGraphDiagram-WWUBYQGX-BmuNxcNU.js} +1 -1
  77. package/dist/operator-ui/assets/index-Df_LhKDl.css +2 -0
  78. package/dist/operator-ui/assets/index-GomJMfKU.js +27 -0
  79. package/dist/operator-ui/assets/{info-A6RAGUB7-CWmAbV2v.js → info-A6RAGUB7-nLuuS8_v.js} +1 -1
  80. package/dist/operator-ui/assets/{infoDiagram-27XIBGKW-CbdlBmQQ.js → infoDiagram-27XIBGKW-Bmj3Jlpp.js} +1 -1
  81. package/dist/operator-ui/assets/{ishikawaDiagram-5VMMS53U-DCFApDt3.js → ishikawaDiagram-5VMMS53U-FhYF1F0C.js} +1 -1
  82. package/dist/operator-ui/assets/{journeyDiagram-3NMN7TZE-JU9Lmrb8.js → journeyDiagram-3NMN7TZE-C3QJqY-3.js} +1 -1
  83. package/dist/operator-ui/assets/{kanban-definition-UXKFOSKX-BaFyfuHa.js → kanban-definition-UXKFOSKX-DZi1Wjno.js} +1 -1
  84. package/dist/operator-ui/assets/{line-B0IEL5-x.js → line-iqB75cyP.js} +1 -1
  85. package/dist/operator-ui/assets/{mermaid-parser.core-BY831mH1.js → mermaid-parser.core-DIArUF3d.js} +3 -3
  86. package/dist/operator-ui/assets/{mermaid.core-ButCc1lu.js → mermaid.core-BNDqdTtO.js} +4 -4
  87. package/dist/operator-ui/assets/{mindmap-definition-YA3MSWOX-BZ9lAvGW.js → mindmap-definition-YA3MSWOX-BOcVX1M-.js} +1 -1
  88. package/dist/operator-ui/assets/{packet-AYTQ26CC-B5-Y1eju.js → packet-AYTQ26CC-EiozlwqG.js} +1 -1
  89. package/dist/operator-ui/assets/{pegDiagram-XKGWAZYB-Ahet4paP.js → pegDiagram-XKGWAZYB-CWW7r51u.js} +1 -1
  90. package/dist/operator-ui/assets/{pie-WAS4IAKB-CMEA1YN5.js → pie-WAS4IAKB-C__OzaDl.js} +1 -1
  91. package/dist/operator-ui/assets/{pieDiagram-E7YTZNPT-BKoLuqEb.js → pieDiagram-E7YTZNPT-DbUDXHBG.js} +1 -1
  92. package/dist/operator-ui/assets/{quadrantDiagram-AXDQQJYC-Ba5lcmOU.js → quadrantDiagram-AXDQQJYC-CKI9LUcX.js} +1 -1
  93. package/dist/operator-ui/assets/{radar-RG4KPBEZ-DRKsFqgB.js → radar-RG4KPBEZ-CsRX-Fi6.js} +1 -1
  94. package/dist/operator-ui/assets/{railroad-74A4TZTK-UnJQj6WT.js → railroad-74A4TZTK-BQ58dawQ.js} +1 -1
  95. package/dist/operator-ui/assets/railroad-abnf-HS5TGJTU-DRTkqyLp.js +1 -0
  96. package/dist/operator-ui/assets/railroad-ebnf-LZEXJU2U-DZGX3DDS.js +1 -0
  97. package/dist/operator-ui/assets/railroad-peg-WCYAUIDC-CL-P4w1a.js +1 -0
  98. package/dist/operator-ui/assets/{railroadDiagram-O6MQD6OU-Ii3HCSET.js → railroadDiagram-O6MQD6OU-Abb-RJax.js} +1 -1
  99. package/dist/operator-ui/assets/{requirementDiagram-BXWQKSXE-GiUPpmpF.js → requirementDiagram-BXWQKSXE-DkznGHTE.js} +1 -1
  100. package/dist/operator-ui/assets/{sankeyDiagram-P5KCCOFB-CUfXBwpy.js → sankeyDiagram-P5KCCOFB-UKM5vqlg.js} +1 -1
  101. package/dist/operator-ui/assets/{sequenceDiagram-WJ2MYXX4-T3ZLlCgn.js → sequenceDiagram-WJ2MYXX4-BwIN13l-.js} +1 -1
  102. package/dist/operator-ui/assets/{stateDiagram-D77RDMKH-D2AphR6j.js → stateDiagram-D77RDMKH-BZTAWRZO.js} +1 -1
  103. package/dist/operator-ui/assets/stateDiagram-v2-MP3YSRHH-CkEudgGK.js +1 -0
  104. package/dist/operator-ui/assets/{swimlanes-42K2YHIH-DNQbbl88.js → swimlanes-42K2YHIH-jGl_hpZI.js} +1 -1
  105. package/dist/operator-ui/assets/swimlanesDiagram-VR7AAH4N-CPzqZPqV.js +8 -0
  106. package/dist/operator-ui/assets/{timeline-definition-24CTP7MA-Co0q_tCB.js → timeline-definition-24CTP7MA-B-4sBugD.js} +1 -1
  107. package/dist/operator-ui/assets/{treeView-Q6P3EWNA-B3AJbB6p.js → treeView-Q6P3EWNA-CgCjxhbn.js} +1 -1
  108. package/dist/operator-ui/assets/{treemap-WGGIJYW6-_H9SWbfT.js → treemap-WGGIJYW6-BwqVgmtt.js} +1 -1
  109. package/dist/operator-ui/assets/{vennDiagram-4TSXK5OY-CGfjaO6_.js → vennDiagram-4TSXK5OY-147aCcas.js} +1 -1
  110. package/dist/operator-ui/assets/{wardley-WFR3VGLG-NUDbyuOy.js → wardley-WFR3VGLG-DeN0guWh.js} +1 -1
  111. package/dist/operator-ui/assets/{wardleyDiagram-VM6X3IG4-COuGUrRm.js → wardleyDiagram-VM6X3IG4-D47xUeXU.js} +1 -1
  112. package/dist/operator-ui/assets/{xychartDiagram-S5SC5T6Z-DHG9QX-U.js → xychartDiagram-S5SC5T6Z-CDhILzlV.js} +1 -1
  113. package/dist/operator-ui/index.html +2 -2
  114. package/package.json +3 -3
  115. package/scripts/change-assessment.ts +16 -39
  116. package/scripts/check-agent-tooling.sh +47 -38
  117. package/scripts/check-ci.sh +7 -1
  118. package/scripts/check-state-boundaries.ts +2 -1
  119. package/scripts/check-tarball-install-smoke.sh +18 -26
  120. package/scripts/ci-documentation-consumers.ts +42 -13
  121. package/scripts/ci-path-consumers.ts +39 -0
  122. package/scripts/contract-worktree.sh +3 -3
  123. package/scripts/install-agent-fleet.sh +13 -19
  124. package/scripts/lib/path-values.ts +3 -1
  125. package/scripts/lib/project-init-lib.sh +9 -20
  126. package/scripts/report-ci.ts +3 -1
  127. package/scripts/run-harness-profile-benchmark.ts +3 -2
  128. package/scripts/run-skill-routing-eval.ts +36 -34
  129. package/scripts/select-ci-coverage.ts +56 -22
  130. package/scripts/ship-worktrees.sh +24 -9
  131. package/scripts/skill-surface-select.ts +33 -40
  132. package/scripts/sync-codex-installed-copies.sh +17 -16
  133. package/scripts/sync-helper-sources.ts +0 -9
  134. package/scripts/sync-reference-configs.ts +51 -18
  135. package/scripts/test-file-durations.json +3 -20
  136. package/src/cli/commands/architecture-debt.ts +1 -2
  137. package/src/cli/commands/architecture-projection.ts +3 -2
  138. package/src/cli/commands/board.ts +131 -0
  139. package/src/cli/commands/candidate-reconciliation.ts +24 -14
  140. package/src/cli/commands/capability-context.ts +1 -1
  141. package/src/cli/commands/doctor.ts +57 -54
  142. package/src/cli/commands/events.ts +1 -5
  143. package/src/cli/commands/fleet.ts +1 -143
  144. package/src/cli/commands/global-runtime.ts +116 -67
  145. package/src/cli/commands/herdr-skill-render.mjs +5 -7
  146. package/src/cli/commands/herdr-skill.ts +13 -7
  147. package/src/cli/commands/herdr.ts +103 -142
  148. package/src/cli/commands/init-hook.ts +37 -24
  149. package/src/cli/commands/init.ts +16 -20
  150. package/src/cli/commands/install.ts +1 -3
  151. package/src/cli/commands/publication.ts +15 -0
  152. package/src/cli/commands/retention.ts +2 -1
  153. package/src/cli/commands/review.ts +7 -5
  154. package/src/cli/commands/seats.ts +128 -0
  155. package/src/cli/commands/setup-snapshot.ts +1 -2
  156. package/src/cli/commands/state.ts +0 -25
  157. package/src/cli/commands/status.ts +34 -64
  158. package/src/cli/commands/tools.ts +16 -3
  159. package/src/cli/commands/upgrade.ts +9 -2
  160. package/src/cli/hook/agent-notice.ts +2 -2
  161. package/src/cli/hook/return-channel.ts +6 -34
  162. package/src/cli/hook/route-registry.ts +0 -7
  163. package/src/cli/hook/subagent-context.ts +0 -6
  164. package/src/cli/index.ts +252 -134
  165. package/src/cli/installer/install-profile.ts +771 -684
  166. package/src/cli/installer/install-state-migration.ts +295 -0
  167. package/src/cli/installer/managed-entries.ts +4 -9
  168. package/src/cli/installer/skill-projection.ts +8 -6
  169. package/src/cli/installer/targets/claude.ts +1 -1
  170. package/src/cli/installer/targets/codex.ts +1 -1
  171. package/src/cli/installer/types.ts +1 -3
  172. package/src/cli/installer/uninstall.ts +31 -18
  173. package/src/cli/installer/waza-rules.ts +20 -10
  174. package/src/cli/mcp/paths.ts +27 -11
  175. package/src/cli/mcp/policy.ts +1 -3
  176. package/src/cli/mcp/tools.ts +18 -12
  177. package/src/core/architecture/projection.ts +16 -0
  178. package/src/core/board/attention-delivery.ts +124 -0
  179. package/src/core/board/attention.ts +404 -0
  180. package/src/core/board/board.ts +338 -0
  181. package/src/core/board/dependency-migration.ts +258 -0
  182. package/src/core/board/hazards.ts +84 -0
  183. package/src/core/board/plan-block.ts +110 -0
  184. package/src/core/board/source.ts +335 -0
  185. package/src/core/decision/notify-relay-record.ts +52 -0
  186. package/src/core/decision/notify-secret-keys.ts +8 -0
  187. package/src/core/fleet/task-message-order.ts +11 -0
  188. package/src/core/operator/board-read.ts +16 -0
  189. package/src/core/operator/bot-access.ts +51 -106
  190. package/src/core/operator/execution-state.ts +38 -30
  191. package/src/core/operator/herdr-pin.ts +44 -10
  192. package/src/core/operator/notify-status.ts +28 -127
  193. package/src/core/operator/pane-prefix.ts +2 -0
  194. package/src/core/operator/repositories.ts +72 -0
  195. package/src/core/operator/runtime-status.ts +25 -25
  196. package/src/core/operator/seat-launch.ts +284 -0
  197. package/src/core/operator/seats-settings.ts +213 -0
  198. package/src/core/operator/slack-review.ts +278 -0
  199. package/src/core/operator/task-messages.ts +138 -0
  200. package/src/core/publication/feedback.ts +0 -4
  201. package/src/core/publication/merge-readiness.ts +2 -0
  202. package/src/core/review/check-records.ts +130 -0
  203. package/src/core/review/review-publish.ts +2 -2
  204. package/src/core/review/runner-port.ts +1 -2
  205. package/src/core/security/secret-patterns.ts +1 -0
  206. package/src/core/sessions/session-selector.ts +0 -33
  207. package/src/core/skill-surface/catalog.ts +62 -275
  208. package/src/core/skill-surface/plugin-manifest.ts +95 -0
  209. package/src/core/tools/catalog.ts +10 -14
  210. package/src/effects/admission/admission-source.ts +0 -11
  211. package/src/effects/admission/admission-store.ts +0 -15
  212. package/src/effects/adoption/standard-plan.ts +16 -20
  213. package/src/effects/architecture/archcontext-owners.ts +12 -49
  214. package/src/effects/architecture/archctx-provider.ts +12 -112
  215. package/src/effects/architecture/architecture-read.ts +186 -0
  216. package/src/effects/architecture/model-reader.ts +2 -2
  217. package/src/effects/architecture/projection-apply.ts +1 -2
  218. package/src/effects/board/attention-watch.ts +186 -0
  219. package/src/effects/board/collect.ts +233 -0
  220. package/src/effects/board/dependency-migration.ts +229 -0
  221. package/src/effects/dev-activity/collector.ts +3 -17
  222. package/src/effects/dsh-plugin-state.ts +57 -0
  223. package/src/effects/fleet/provider-feedback.ts +4 -78
  224. package/src/effects/fleet/task-inbox.ts +26 -106
  225. package/src/effects/github/issues.ts +14 -16
  226. package/src/effects/github/policy.ts +39 -11
  227. package/src/effects/host-skill-roots.ts +29 -5
  228. package/src/effects/operator/architecture-map-worker.ts +14 -40
  229. package/src/effects/operator/architecture.ts +2 -2
  230. package/src/effects/operator/board-read.ts +124 -0
  231. package/src/effects/operator/bot-access.ts +31 -45
  232. package/src/effects/operator/claude-agent-types.ts +123 -0
  233. package/src/effects/operator/cleanup-file-access.ts +2 -1
  234. package/src/effects/operator/doc-session-finalize-scope.ts +2 -1
  235. package/src/effects/operator/execution-collector.ts +13 -6
  236. package/src/effects/operator/execution-state-worker.ts +25 -6
  237. package/src/effects/operator/execution-state.ts +21 -28
  238. package/src/effects/operator/herdr-runtime-transport.ts +108 -70
  239. package/src/effects/operator/notify-collector.ts +3 -3
  240. package/src/effects/operator/notify-status.ts +27 -99
  241. package/src/effects/operator/repositories.ts +27 -0
  242. package/src/effects/operator/runtime-capture-pty.ts +8 -4
  243. package/src/effects/operator/runtime-capture.ts +7 -4
  244. package/src/effects/operator/runtime-service.ts +17 -14
  245. package/src/effects/operator/runtime-source.ts +19 -17
  246. package/src/effects/operator/runtime-status.ts +14 -11
  247. package/src/effects/operator/seats-configuration.ts +146 -0
  248. package/src/effects/operator/seats-settings-route.ts +66 -0
  249. package/src/effects/operator/server.ts +249 -393
  250. package/src/effects/operator/slack-review-collector.ts +254 -0
  251. package/src/effects/operator/task-diff.ts +1 -44
  252. package/src/effects/operator/task-messages.ts +31 -0
  253. package/src/effects/operator/task-read-process.ts +5 -18
  254. package/src/effects/publication/batch-build.ts +478 -0
  255. package/src/effects/publication/merge-executor.ts +3 -5
  256. package/src/effects/publication/merge-readiness.ts +6 -314
  257. package/src/effects/publication/test-execution-evidence.ts +1 -66
  258. package/src/effects/refactor/archctx-provider.ts +2 -2
  259. package/src/effects/refactor/recommendations.ts +1 -1
  260. package/src/effects/repo-registry.ts +37 -2
  261. package/src/effects/review/acceptance-receipt.ts +11 -9
  262. package/src/effects/review/change-assessment.ts +34 -4
  263. package/src/effects/review/generic-review.ts +6 -6
  264. package/src/effects/review-runner/task-oar-host.ts +20 -4
  265. package/src/effects/review-runner/task-pre-prompt-inbox-consumer.ts +1 -2
  266. package/src/effects/review-runner/task-pre-prompt-inbox.ts +1 -2
  267. package/src/effects/review-runner/task-review-runner.ts +12 -13
  268. package/src/effects/sessions/admitted-source.ts +1 -86
  269. package/src/effects/state/resolve-effective-state.ts +1 -1
  270. package/src/effects/strategy/skill.ts +1 -1
  271. package/src/effects/terminal/herdr-core.ts +566 -0
  272. package/src/effects/terminal/herdr-notify-install.ts +13 -63
  273. package/src/effects/terminal/herdr.ts +2 -1
  274. package/src/effects/terminal/native-task-session.ts +1 -12
  275. package/src/effects/terminal/notify-read.ts +138 -0
  276. package/src/effects/terminal/notify-relay.ts +206 -0
  277. package/src/effects/terminal/task-role-profiles.ts +1 -4
  278. package/src/effects/terminal/task-session-admission.ts +1 -1
  279. package/src/effects/terminal/task-session-record.ts +103 -29
  280. package/src/effects/terminal/task-session.ts +179 -409
  281. package/src/effects/terminal/task-worktree-runtime.ts +6 -4
  282. package/src/effects/upgrade/legacy-inventory.ts +8 -12
  283. package/src/operator-web/App.tsx +123 -202
  284. package/src/operator-web/ArchitectureMap.tsx +1 -1
  285. package/src/operator-web/BoardPage.tsx +319 -0
  286. package/src/operator-web/BotsPage.tsx +131 -80
  287. package/src/operator-web/Home.tsx +4 -6
  288. package/src/operator-web/NavRail.tsx +1 -1
  289. package/src/operator-web/NotifyStatus.tsx +1 -4
  290. package/src/operator-web/RepositoriesPage.tsx +95 -35
  291. package/src/operator-web/RuntimeBadges.tsx +3 -0
  292. package/src/operator-web/SeatsPage.tsx +269 -0
  293. package/src/operator-web/SettingsPage.tsx +38 -11
  294. package/src/operator-web/TaskDrawer.tsx +336 -0
  295. package/src/operator-web/ToolsPage.tsx +1 -1
  296. package/src/operator-web/WorktreesPage.tsx +2 -3
  297. package/src/operator-web/app.css +2 -66
  298. package/src/operator-web/board-view.ts +139 -0
  299. package/src/operator-web/bots.ts +46 -10
  300. package/src/operator-web/brand.tsx +1 -0
  301. package/src/operator-web/dev-activity.ts +2 -57
  302. package/src/operator-web/fixtures/architecture-map.json +5929 -8389
  303. package/src/operator-web/fixtures/board-1474.json +927 -0
  304. package/src/operator-web/fixtures/bots.ts +61 -35
  305. package/src/operator-web/fixtures/dev-activity.ts +43 -12
  306. package/src/operator-web/fixtures/index.ts +53 -27
  307. package/src/operator-web/fixtures/settings.ts +66 -1
  308. package/src/operator-web/fixtures/setup.ts +2 -9
  309. package/src/operator-web/i18n.ts +587 -617
  310. package/src/operator-web/labels.ts +0 -13
  311. package/src/operator-web/operator-api-error.ts +31 -0
  312. package/src/operator-web/repositories.ts +55 -0
  313. package/src/operator-web/repository-reads.ts +55 -1
  314. package/src/operator-web/seats.ts +89 -0
  315. package/src/operator-web/settings.ts +94 -57
  316. package/src/operator-web/ui.tsx +7 -2
  317. package/src/operator-web/workspace-location.ts +39 -12
  318. package/src/operator-web/worktrees.ts +2 -12
  319. package/agents/fleet/orchestrator.md +0 -36
  320. package/assets/herdr/webhook-notify/herdr-plugin.toml +0 -10
  321. package/assets/herdr/webhook-notify/notify.mjs +0 -373
  322. package/assets/herdr/webhook-notify/pane-status.mjs +0 -74
  323. package/assets/herdr/webhook-notify/worktree-location.mjs +0 -15
  324. package/dist/operator-ui/assets/architecture-7GRP2DOG-DJmhcRNc.js +0 -1
  325. package/dist/operator-ui/assets/channel-CH26DhuI.js +0 -1
  326. package/dist/operator-ui/assets/classDiagram-ZZMXUADV-CmP13vv6.js +0 -1
  327. package/dist/operator-ui/assets/classDiagram-v2-VYDZK3BY-CmP13vv6.js +0 -1
  328. package/dist/operator-ui/assets/eventmodeling-NTZA5JFV-BCV_9PCS.js +0 -1
  329. package/dist/operator-ui/assets/flowDiagram-HODETNUW-UuLvXIz-.js +0 -1
  330. package/dist/operator-ui/assets/index-BRqR1RMk.js +0 -25
  331. package/dist/operator-ui/assets/index-DDZqieYX.css +0 -2
  332. package/dist/operator-ui/assets/railroad-abnf-HS5TGJTU-BfLADly0.js +0 -1
  333. package/dist/operator-ui/assets/railroad-ebnf-LZEXJU2U-Dctjf-fQ.js +0 -1
  334. package/dist/operator-ui/assets/railroad-peg-WCYAUIDC-DC2Nq5l8.js +0 -1
  335. package/dist/operator-ui/assets/stateDiagram-v2-MP3YSRHH-DoOPJXWN.js +0 -1
  336. package/dist/operator-ui/assets/swimlanesDiagram-VR7AAH4N-FdvvbV9Z.js +0 -8
  337. package/src/cli/commands/external-source.ts +0 -143
  338. package/src/cli/hook/board-slice-context.ts +0 -44
  339. package/src/core/decision/pane-status.d.mts +0 -9
  340. package/src/core/decision/pane-status.mjs +0 -74
  341. package/src/core/external-sources/admitted-binding.ts +0 -76
  342. package/src/core/external-sources/binding.ts +0 -21
  343. package/src/core/external-sources/issue-observation.ts +0 -294
  344. package/src/core/external-sources/projection.ts +0 -75
  345. package/src/core/fleet/board.ts +0 -388
  346. package/src/core/operator/admitted-task-activity.ts +0 -88
  347. package/src/core/operator/admitted-task-context.ts +0 -35
  348. package/src/core/operator/fleet-snapshot.ts +0 -188
  349. package/src/core/operator/observation-identity.ts +0 -4
  350. package/src/core/operator/task-activity.ts +0 -41
  351. package/src/core/operator/task-diff.ts +0 -42
  352. package/src/core/sessions/task-sessions.ts +0 -41
  353. package/src/core/skill-surface/profile-components.ts +0 -39
  354. package/src/core/state/provider-board.ts +0 -55
  355. package/src/effects/external-sources/binding.ts +0 -101
  356. package/src/effects/external-sources/refresh.ts +0 -158
  357. package/src/effects/external-sources/store.ts +0 -406
  358. package/src/effects/fleet/board.ts +0 -619
  359. package/src/effects/operator/admitted-task-activity.ts +0 -39
  360. package/src/effects/operator/fleet-collector-process.ts +0 -125
  361. package/src/effects/operator/task-context.ts +0 -31
  362. package/src/effects/sessions/task-sessions.ts +0 -73
  363. package/src/effects/setup/pi-herdr-integration.ts +0 -58
  364. package/src/effects/state/collect-provider-board-inputs.ts +0 -43
  365. package/src/effects/state/collect-slice-inputs.ts +0 -21
  366. package/src/effects/terminal/herdr-decision.ts +0 -98
  367. package/src/effects/terminal/herdr-observation.ts +0 -127
  368. package/src/operator-web/AdmittedTaskActivity.tsx +0 -61
  369. package/src/operator-web/AdmittedTaskContext.tsx +0 -30
  370. package/src/operator-web/Board.tsx +0 -420
  371. package/src/operator-web/ItemDrawer.tsx +0 -208
  372. package/src/operator-web/RepositoryWorkspace.tsx +0 -749
  373. package/src/operator-web/TaskDiff.tsx +0 -103
  374. package/src/operator-web/fixture.ts +0 -323
  375. package/src/operator-web/fleet-api.ts +0 -88
  376. package/src/operator-web/task-context.ts +0 -9
  377. package/src/operator-web/task-location.ts +0 -34
  378. package/src/operator-web/types.ts +0 -683
  379. package/src/operator-web/worklist.ts +0 -132
package/README.md CHANGED
@@ -43,7 +43,7 @@ files let Claude and Codex resume work across sessions.
43
43
 
44
44
  ### 1. Install the CLI
45
45
 
46
- Prerequisites: a Git working tree, `bun`, and usable `herdr` >=0.9.5 for host readiness; macOS/Linux also require `bash`,
46
+ Prerequisites: a Git working tree, `bun`, and `hc` (herdr-core) >= `external_tooling.herdr_core.min_version` for host readiness; macOS/Linux also require `bash`,
47
47
  while Windows requires Git for Windows (including its Bash and `usr/bin`
48
48
  tools). `jq` is optional. No Node.js required — the installer uses Bun >=
49
49
  1.4.0 as the runtime, installing or upgrading Bun first when needed.
@@ -67,9 +67,10 @@ repo-harness install
67
67
  npx -y repo-harness@latest install # npx fallback; the CLI still runs on Bun
68
68
  ```
69
69
 
70
- Install herdr from [herdr.dev](https://herdr.dev/) and verify `herdr --version`.
70
+ Install `hc` through Herdr.app or a herdr-core release. Verify that `hc --version`
71
+ reports at least `.ai/harness/policy.json#external_tooling.herdr_core.min_version`.
71
72
  Persistent review hosting requires POSIX process groups; on Windows use WSL.
72
- Missing or unusable herdr blocks host readiness. Before upgrading from tmux,
73
+ Missing, unusable or older hc blocks host readiness. Before upgrading from tmux,
73
74
  drain existing reviewers using the previous version and explicitly rebind terminal
74
75
  endpoints. See [runtime cutover](https://github.com/Ancienttwo/repo-harness/blob/archive/docs-researches-20261004/docs/researches/20260909-herdr-runtime-cutover.md).
75
76
 
@@ -118,11 +119,14 @@ helpers do not rediscover tools from a caller's `PATH`; rerun
118
119
  `repo-harness update` after relocating or replacing Git for Windows.
119
120
 
120
121
  The global bootstrap: installs the npm package as the global CLI, refreshes
121
- repo-harness skill aliases, installs user-level hook adapters, and records an
122
- explicit install profile. It is idempotent and does not apply repo-local workflow
123
- files to the current directory. `--dry-run --json` lists components to install,
124
- skip, and remove first. Profiles, native Codex delegation authority, refresh commands, and the
125
- read-only `setup check` audit:
122
+ repo-harness skill aliases, installs user-level hook adapters, and records the
123
+ plugin selection. With no flag it installs core and every plugin that the host
124
+ can run; `--plugins <ids>` selects exactly those plugins, and `--no-plugins`
125
+ installs core only. It is idempotent and does not apply repo-local workflow
126
+ files to the current directory. `--dry-run --json` lists the plugins to install,
127
+ keep, remove and skip first. Plugins, the protocol 2 to 3 migration, native
128
+ Codex delegation authority, refresh commands, and the read-only `setup check`
129
+ audit:
126
130
  [`install-profiles.md`](docs/reference-configs/install-profiles.md).
127
131
 
128
132
  ### 3. Preview the repo-local contract
@@ -244,7 +248,7 @@ task queue.
244
248
  | --- | --- | --- |
245
249
  | Issue and PR | Scope, ownership, dependencies, status and review evidence | The assigned GitHub issue |
246
250
  | Session support | Repository context, hooks and handoffs | `repo-harness init` |
247
- | Existing observations | Read retained task and runtime records | `repo-harness fleet board --json` |
251
+ | Board | Read the sub-issues, pull requests, plan block and seat terminals of one parent issue | `repo-harness board --parent <n> --json` |
248
252
 
249
253
  New work uses a bounded issue brief and the current repository rules. Historical
250
254
  Sprint, binding and Lease records remain readable for operator and closeout
@@ -322,15 +326,15 @@ Keep the issue, branch, verification result and next action in the handoff.
322
326
  Re-read the issue and PR before continuing. Use the approved OAR and Herdr host
323
327
  paths for an assigned agent. repo-harness has no PM or Engineer scheduling API.
324
328
 
325
- ### Existing task observations
329
+ ### Board of a parent issue
326
330
 
327
331
  ```bash
328
- repo-harness fleet board --json
332
+ repo-harness board --parent <n> --json
329
333
  ```
330
334
 
331
- The board reads retained task, Lease, publication, inbox and runtime evidence.
332
- It does not claim work or create an Engineer binding. Completion and cleanup
333
- helpers remain for existing records.
335
+ The board reads the sub-issues, pull requests, plan block and hc seat terminals
336
+ of one parent issue. It does not claim work or create an Engineer binding.
337
+ Completion and cleanup helpers remain for existing records.
334
338
 
335
339
  Use [repo-harness](SKILL.md) for scope and worker ownership,
336
340
  [repo-harness-product](assets/skills/repo-harness-product/SKILL.md) for requested
@@ -350,20 +354,6 @@ violations. repo-harness shows each suggestion with its metrics, bounded evidenc
350
354
  and module statistics, and records the user decision. It never executes a refactor; an
351
355
  accepted suggestion goes through the normal plan and pull request workflow.
352
356
 
353
- ### External source intake
354
-
355
- ```bash
356
- repo-harness external-source refresh # one bounded, explicitly enabled GitHub observation
357
- repo-harness external-source bind --repo <id> --source-revision <digest> --session <selector.json>
358
- repo-harness external-source bindings # binding edges and current drift attention
359
- ```
360
-
361
- Intake is inert by design. An observed Issue mints no execution authority and
362
- does not become a runnable task on its own; binding attaches an immutable source
363
- revision to an existing admitted session selected by its provider issue, immutable
364
- claim, approved grant and session binding digest. The selector comes from task
365
- session discovery. Binding never creates a claim or approval.
366
-
367
357
  ### Persistent acceptance review
368
358
 
369
359
  Before review, configure the repository's manual `external_sources` policy and
@@ -593,7 +583,7 @@ dependencies.
593
583
  | [Hylarucoder](https://x.com/hylarucoder) / Geju | P1/P2/P3 due-diligence method and Geju practice that shaped the planning, tracing, and decision-rationale discipline in this workflow | Methodology contribution and acknowledgement; not a bundled dependency |
594
584
  | Waza by [TW93](https://x.com/HiTw93), including `think`, `hunt`, `check`, and `health` | Daily planning, bug hunts, verification, health checks, and Codex-first skill sync | Installed through the skills CLI into host skill roots |
595
585
  | `mermaid` | Authoring and readability review for Mermaid architecture and system-flow source | Runtime-referenced review skill, not vendored into generated repos and never an HTML artifact generator |
596
- | [herdr](https://herdr.dev/) | Required peer-terminal runtime: notification dispatch, peer collaboration, and hosting the persistent acceptance reviewer | Externally installed binary, checksum-pinned in `.ai/harness/policy.json`; replaces the retired tmux runtime |
586
+ | [herdr](https://herdr.dev/) (`hc`, herdr-core) | Required peer-terminal runtime: notification dispatch, peer collaboration, and hosting the persistent acceptance reviewer | Externally installed `hc` binary, pinned in `.ai/harness/policy.json#external_tooling.herdr_core` (`min_version` floor and checksum-verified CI release asset); replaces the retired tmux runtime |
597
587
  | [`reverse-skill-router`](https://github.com/zhaoxuya520/reverse-skill) | Routes reverse-engineering and security tasks to specialist playbooks | Recommended explicit-only Skill (`--with-reverse-skill`); not profile-selected because upstream's target-mention authorization assumption requires independent scope review |
598
588
  | CodeGraph (`@colbymchenry/codegraph`) | Symbol-aware navigation, impact tracing, and readiness checks for this self-host repo | Dev dependency in this repo; generated repos stay global-MCP-first unless policy opts in |
599
589
  | OpenAI Codex | Primary execution agent for repo-local implementation, verification, and GitHub contributor attribution when a commit materially includes Codex-authored work | External agent runtime; attribution is an explicit commit trailer, not hidden hook automation |
@@ -612,8 +602,8 @@ repo-harness commit scripts or hooks unless that repo adopts the same policy.
612
602
 
613
603
  ## Current Release
614
604
 
615
- - npm package: `repo-harness@0.25.1`
616
- - Generated workflow stamp: `repo-harness@0.25.1+template@0.25.1`
605
+ - npm package: `repo-harness@0.25.4`
606
+ - Generated workflow stamp: `repo-harness@0.25.4+template@0.25.4`
617
607
  - GitHub repository: `Ancienttwo/repo-harness`
618
608
  - Release notes and history: [`docs/CHANGELOG.md`](docs/CHANGELOG.md)
619
609
 
@@ -9,7 +9,7 @@ effort: high
9
9
  Review only a medium or high tier diff under Review by risk in the development flow; a low tier gets no review.
10
10
  When `agents/fleet/known-gaps.md` is present, read the row for the PR's producer and run its named checks in addition to the tier's review. The table rules govern how the row combines with the review.
11
11
  Read the current diff only. A defect in untouched code is a non-blocking note, not a finding.
12
- From the second round, read only the hunks that changed after the previous round.
12
+ Take the scope of each round from the round rules in `repo-harness-issue-flow`, `references/acceptor.md` §2.2.
13
13
  Keep review read-only. The Bot owns fixes and publication.
14
14
  Return `VERDICT: PASS`, `VERDICT: FAIL`, or `VERDICT: BLOCKED` first.
15
15
  Record branch, HEAD, dirty scope and the assigned goal. Preserve unrelated work.
@@ -0,0 +1,12 @@
1
+ export declare const BOT_EVENT_PROTOCOL: 'repo-harness.bot-event/v1';
2
+ export declare const NAME_PATTERN: RegExp;
3
+ export interface BotEvent {
4
+ readonly protocol: 'repo-harness.bot-event/v1';
5
+ readonly source: 'herdr' | 'github';
6
+ readonly repository: string | null;
7
+ readonly kind: string;
8
+ readonly ts: string;
9
+ readonly data: Readonly<Record<string, unknown>>;
10
+ }
11
+ export declare function assertBotEvent(value: unknown): BotEvent;
12
+ export declare function botEvent(input: Omit<BotEvent, 'protocol'>): BotEvent;
@@ -1,4 +1,4 @@
1
- // The one bot event envelope. Herdr notify and the GitHub event Worker both send it, so it
1
+ // The one bot event envelope. The notify relay and the GitHub event Worker both send it, so it
2
2
  // stays plain ESM with no dependency and no Node-only API.
3
3
  export const BOT_EVENT_PROTOCOL = 'repo-harness.bot-event/v1';
4
4
  export const NAME_PATTERN = /^[\w.-]{1,128}$/;
@@ -1,8 +1,7 @@
1
1
  // GitHub App webhook receiver. It filters GitHub events in code and sends a short bot event
2
2
  // to the Bot routine webhook. It never calls a GitHub API and makes no decision.
3
- // `repo-harness events install` stages this directory and ../webhook-notify/bot-event.mjs in the same
4
- // layout, and wrangler bundles them.
5
- import { botEvent } from '../webhook-notify/bot-event.mjs';
3
+ // `repo-harness events install` stages this directory, and wrangler bundles it.
4
+ import { botEvent } from './bot-event.mjs';
6
5
  import { classify } from './filter.mjs';
7
6
 
8
7
  const DEBOUNCE_SECONDS = 60;
@@ -6,7 +6,7 @@ using System.Diagnostics;
6
6
  using System.Runtime.InteropServices;
7
7
  using System.Text;
8
8
 
9
- public static class RepoHarnessFleetJob {
9
+ public static class RepoHarnessOperatorJob {
10
10
  [StructLayout(LayoutKind.Sequential)]
11
11
  public struct BasicLimitInformation {
12
12
  public long PerProcessUserTimeLimit;
@@ -137,9 +137,9 @@ public static class RepoHarnessFleetJob {
137
137
  }
138
138
  '@
139
139
 
140
- $job = [RepoHarnessFleetJob]::CreateJobObject([IntPtr]::Zero, $null)
140
+ $job = [RepoHarnessOperatorJob]::CreateJobObject([IntPtr]::Zero, $null)
141
141
  if ($job -eq [IntPtr]::Zero) { throw 'CreateJobObject failed' }
142
- [RepoHarnessFleetJob]::ConfigureKillOnClose($job)
142
+ [RepoHarnessOperatorJob]::ConfigureKillOnClose($job)
143
143
 
144
144
  function Write-Response([string]$type) {
145
145
  [Console]::Out.WriteLine((@{ type = $type } | ConvertTo-Json -Compress))
@@ -149,26 +149,26 @@ function Write-Response([string]$type) {
149
149
  function Wait-ForZeroActiveProcesses([IntPtr]$handle) {
150
150
  $deadline = [DateTime]::UtcNow.AddSeconds(5)
151
151
  while ([DateTime]::UtcNow -lt $deadline) {
152
- if ([RepoHarnessFleetJob]::ActiveProcesses($handle) -eq 0) { return $true }
152
+ if ([RepoHarnessOperatorJob]::ActiveProcesses($handle) -eq 0) { return $true }
153
153
  Start-Sleep -Milliseconds 10
154
154
  }
155
- return ([RepoHarnessFleetJob]::ActiveProcesses($handle) -eq 0)
155
+ return ([RepoHarnessOperatorJob]::ActiveProcesses($handle) -eq 0)
156
156
  }
157
157
 
158
158
  function Close-CleanJob([IntPtr]$handle, [bool]$terminate) {
159
- if ($terminate -and -not [RepoHarnessFleetJob]::TerminateJobObject($handle, 1)) {
159
+ if ($terminate -and -not [RepoHarnessOperatorJob]::TerminateJobObject($handle, 1)) {
160
160
  throw 'TerminateJobObject failed'
161
161
  }
162
162
  if (-not (Wait-ForZeroActiveProcesses $handle)) { return $false }
163
- if (-not [RepoHarnessFleetJob]::CloseHandle($handle)) { throw 'CloseHandle failed' }
163
+ if (-not [RepoHarnessOperatorJob]::CloseHandle($handle)) { throw 'CloseHandle failed' }
164
164
  return $true
165
165
  }
166
166
 
167
167
  function Close-FailedJob([IntPtr]$handle) {
168
168
  if ($handle -eq [IntPtr]::Zero) { return }
169
- try { [void][RepoHarnessFleetJob]::TerminateJobObject($handle, 1) } catch { }
169
+ try { [void][RepoHarnessOperatorJob]::TerminateJobObject($handle, 1) } catch { }
170
170
  try { [void](Wait-ForZeroActiveProcesses $handle) } catch { }
171
- try { [void][RepoHarnessFleetJob]::CloseHandle($handle) } catch { }
171
+ try { [void][RepoHarnessOperatorJob]::CloseHandle($handle) } catch { }
172
172
  }
173
173
 
174
174
  function Stop-ExactCollector([System.Diagnostics.Process]$process) {
@@ -207,7 +207,7 @@ try {
207
207
  }
208
208
  $startInfo = New-Object System.Diagnostics.ProcessStartInfo
209
209
  $startInfo.FileName = [string]$request.executable
210
- $startInfo.Arguments = [RepoHarnessFleetJob]::QuoteArgument([string]$request.collector_path)
210
+ $startInfo.Arguments = [RepoHarnessOperatorJob]::QuoteArgument([string]$request.collector_path)
211
211
  $startInfo.UseShellExecute = $false
212
212
  $startInfo.RedirectStandardInput = $true
213
213
  $startInfo.RedirectStandardOutput = $true
@@ -228,12 +228,12 @@ try {
228
228
  }
229
229
  # This is the exact kernel handle returned for the child this controller
230
230
  # created. No PID is ever accepted or reopened across this boundary.
231
- if (-not [RepoHarnessFleetJob]::AssignProcessToJobObject($job, $collector.Handle)) {
231
+ if (-not [RepoHarnessOperatorJob]::AssignProcessToJobObject($job, $collector.Handle)) {
232
232
  if (-not (Stop-ExactCollector $collector)) { throw 'collector assignment failed and exact collector did not exit' }
233
233
  Write-Response 'cleanup_failed'
234
234
  break
235
235
  }
236
- [RepoHarnessFleetJob]::BeginForwarding($collector)
236
+ [RepoHarnessOperatorJob]::BeginForwarding($collector)
237
237
  $assigned = $true
238
238
  Write-Response 'assigned'
239
239
  continue
@@ -16,10 +16,10 @@
16
16
  ## CI cost
17
17
  Size PR CI by the diff, the same as step 4. A full suite on each small PR spends runner time and adds no evidence that the affected tests and the daily run do not already give. The repo-harness source repository uses this shape in `.github/workflows/ci.yml`.
18
18
 
19
- - Triggers: run PR checks on `pull_request`. Do not also trigger `push` on feature branches; that runs each commit twice. A `push` to the default branch runs the affected selection for the merged diff, not the full suite.
19
+ - Triggers: run PR checks on `pull_request`. Do not also trigger `push` on feature branches; that runs each commit twice. A `push` to the default branch runs only the selection job in report mode, with no tests.
20
20
  - Superseded runs: set `concurrency` to one group per PR number with `cancel-in-progress: true` for `pull_request` events only. Do not cancel scheduled runs.
21
21
  - Selection: a first job reads the diff against the PR base and outputs a mode. Later jobs read the mode in a job-level `if:`.
22
- - A docs-only diff (`docs/**/*.md`, README, CHANGELOG) skips build and test jobs when no test or script reads the changed files. Keep link and format checks. A document that is program input, such as a projected copy, a parsed contract or a generated region, runs its consumer tests.
22
+ - A docs-only diff runs only the tests that name a changed document, including a deleted one. With no such test, it skips build and test jobs, and the required aggregate check still reports. One function names the documentation paths; in the repo-harness source repository it is `isDocumentationPath` in `scripts/select-ci-coverage.ts`. Keep link, format and advisory document checks. A document that is program input, such as a projected copy, a parsed contract or a generated region, is outside the documentation rule or has a test that names it, so a change to it runs its consumer tests.
23
23
  - A code diff runs typecheck plus the tests that the diff affects. Use the runner's change detection (`vitest --changed`, `jest --changedSince`, `nx affected`, `turbo run --filter=...[<base>]`, `pytest --testmon`) or an import-graph selector.
24
24
  - A change to a shared input (lockfile, root build or test config, CI workflow, a test helper with no mapped consumer) runs the full suite on that PR. A selector that cannot map a changed file widens the run; it never shrinks it.
25
25
  - Required checks: skip a job with a job-level `if:`, not with workflow-level `paths` or `paths-ignore`. GitHub counts a skipped job as passing for a required check. A workflow that never starts leaves its required check pending and blocks the merge.
@@ -104,14 +104,18 @@ breakdown, dispatch, follow-up and evidence-based reports. Coding agents own
104
104
  source edits, tests and repairs. Follow the shared PM boundary in the
105
105
  `repo-harness` Skill for the permitted tool surface and reporting duties.
106
106
  Keep direct development sessions and explicitly assigned coding workers outside
107
- that PM restriction. OAR owns coding-agent execution. Herdr owns panes and
108
- visibility. A new Bot host adapts to that path; it does not add a new coding
107
+ that PM restriction. OAR owns coding-agent execution. herdr-core (`hc`) owns
108
+ terminals, and Herdr.app owns panes and visibility. A new Bot host adapts to that path; it does not add a new coding
109
109
  runtime or task authority.
110
110
 
111
- The `orchestrator` fleet role is the long-lived coordinator and integrator seat
112
- of `repo-harness-issue-flow`. Start it with `claude --agent orchestrator`. The
113
- fleet projects it to Claude only. It dispatches work and follows PRs and CI. It
114
- edits no product code and dispatches no subagents.
111
+ The orchestrator seat is the long-lived coordinator and integrator seat of
112
+ `repo-harness-issue-flow`. Start it with the argv that
113
+ `repo-harness seats argv orchestrator` prints. It dispatches work and follows
114
+ PRs and CI. It edits no product code. It may call the read-only roles
115
+ `gatekeeper`, `explorer` and `deep-reasoner` as sub-agents. The writers
116
+ (`fast-worker`, `deep-worker`, `root-cause-prover`) and the Codex
117
+ cross-review never run as its sub-agents: they run in Herdr seats, for
118
+ worktree isolation and one writer per file.
115
119
 
116
120
  The bot selects scope, worker and verification by risk. Use independent gatekeeper/cross-model review for large changes, security/permissions or model uncertainty; do not rerun a passing check or require multiple re-gates.
117
121
 
@@ -119,13 +123,19 @@ The bot selects scope, worker and verification by risk. Use independent gatekeep
119
123
 
120
124
  A hazard is a change that runs or exposes code, secrets, data or network access on a machine or in CI. One hit on any item sets an internal PR to High under [Review by risk](#review-by-risk). An external PR stops and escalates under its protocol; that behavior does not change.
121
125
 
122
- - Changes a workflow or other CI configuration under `.github/`.
123
- - Changes a release, publish, update or install script, or a package script that runs at install or release.
124
- - Changes a `Dockerfile` or another container build file.
125
- - Adds a network address, endpoint or telemetry.
126
- - Reads credentials, such as tokens, keys, `~/.ssh`, `~/.npmrc` or credential environment variables.
127
- - Adds or changes a dependency or a lockfile entry. A lockfile-only bump is still a hit; its source does not lower the tier.
128
- - Adds a binary, or an encoded or opaque blob, such as base64, long hex, minified or otherwise unreadable content.
126
+ <!-- review-hazards:list:begin -->
127
+ The board rule R3 reads only the rows with `path_visible: true`: a changed path that matches one of their patterns is a hit. Reviewers apply every row.
128
+
129
+ | Hazard | Paths that R3 reads |
130
+ | --- | --- |
131
+ | Changes a workflow or other CI configuration under `.github/`. | `.github/**` |
132
+ | Changes a release, publish, update or install script, or a package script that runs at install or release. | None (`path_visible: false`) |
133
+ | Changes a `Dockerfile` or another container build file. | `**/Dockerfile`, `**/Dockerfile.*`, `**/*.Dockerfile`, `**/Containerfile`, `**/Containerfile.*` |
134
+ | Adds a network address, endpoint or telemetry. | None (`path_visible: false`) |
135
+ | Reads credentials, such as tokens, keys, `~/.ssh`, `~/.npmrc` or credential environment variables. | None (`path_visible: false`) |
136
+ | Adds or changes a dependency or a lockfile entry. A lockfile-only bump is still a hit; its source does not lower the tier. | `**/bun.lock`, `**/bun.lockb`, `**/package-lock.json`, `**/npm-shrinkwrap.json`, `**/yarn.lock`, `**/pnpm-lock.yaml`, `**/Cargo.lock`, `**/go.sum`, `**/poetry.lock`, `**/uv.lock`, `**/Pipfile.lock`, `**/Gemfile.lock`, `**/composer.lock` |
137
+ | Adds a binary, or an encoded or opaque blob, such as base64, long hex, minified or otherwise unreadable content. | None (`path_visible: false`) |
138
+ <!-- review-hazards:list:end -->
129
139
 
130
140
  ### Review by risk
131
141
  The diff sets the tier. The author does not: a human change and a model change with the same diff get the same tier. One hit on a higher signal sets the higher tier.
@@ -136,7 +146,7 @@ The diff sets the tier. The author does not: a human change and a model change w
136
146
  | Medium | Cross-module behavior changes; public API changes; more than 10 non-generated implementation files; shared runtime changes; authentication-adjacent changes; or unresolved behavior uncertainty. |
137
147
  | High | Any hit on the [change hazard list](#change-hazards); permissions or sandbox grants; hooks and the mutation guard; deletion paths; `deploy/sql/`; code that writes to GitHub; or a change across more than one capability boundary in `.archcontext/model/`. |
138
148
 
139
- Review follows the `repo-harness-issue-flow` skill, [references/acceptor.md](../../assets/skills/repo-harness-issue-flow/references/acceptor.md). The tier selects the depth: no independent review for Low, one fresh-context review for Medium, and the gatekeeper plus one cross-model review for High, one round each. The Acceptor SOP owns the round, findings and publish steps.
149
+ Review follows the `repo-harness-issue-flow` skill, [references/acceptor.md](../../assets/skills/repo-harness-issue-flow/references/acceptor.md). The tier selects the depth: no independent review for Low, one fresh-context review for Medium, and the gatekeeper plus one review, preferably cross-model, for High. The round rules (who reviews each round, the claims of a round, the round-2 scope and the convergence rule) are only in [references/acceptor.md §2.2](../../assets/skills/repo-harness-issue-flow/references/acceptor.md#22-rounds). The Acceptor SOP owns the round, findings and publish steps.
140
150
 
141
151
  Low accept-seat skip: a Low PR whose `Required / CI` is SUCCESS on the PR head and whose PR body holds the author verification evidence (the commands and their outcomes) takes no accept seat and no acceptance record. Do not dispatch a Codex, Herdr or OAR accept seat for it. `Required / CI` and that evidence are the proof surface. A Low PR that lacks either condition is not eligible to merge until both hold. Medium and High keep the full Acceptor SOP.
142
152
 
@@ -144,19 +154,19 @@ Worked example (docs-only Low path): the PR edits `docs/bot-onboarding.md` only.
144
154
 
145
155
  Rules for every tier:
146
156
  - The reviewer reads the current diff only. A defect in code the diff did not touch is a non-blocking note; open an issue for it, do not add a finding.
147
- - From the second round, the reviewer reads only the hunks that changed after the previous round. The three-round limit stays.
157
+ - Review rounds follow [references/acceptor.md §2.2](../../assets/skills/repo-harness-issue-flow/references/acceptor.md#22-rounds). The reviewer reads CI on the exact head and the recorded evidence, and does not rerun a passing check ([references/acceptor.md §2.1](../../assets/skills/repo-harness-issue-flow/references/acceptor.md#21-evidence)).
148
158
  - When an independent review ran, the PR description lists each finding with its disposition: fixed, or closed with the reason.
149
159
  - A low tier adds no review. A new test file or a rebase does not raise the tier.
150
160
  - Changing implementation and test assertions together does not raise the tier. Within the tier's existing review, check whether assertions preserve the intended behavior and whether removed or weakened coverage has a valid requirement-based reason. At Low, the author performs this check in self-review. Record the reason for each assertion change in the PR; never change assertions only to make a test pass. Do not dispatch a separate test-review gate.
151
161
  - A parent, coordinator or merge session reuses recorded acceptance when the reviewed diff, relevant base context, verification inputs and environment still match, and the review meets the current tier. The PR records the reviewed revision or diff, commands, results and finding dispositions. A change of session or reviewer is not a reason to repeat acceptance.
152
162
  - A batch integration PR (`repo-harness-issue-flow`, [references/orchestrator.md](../../assets/skills/repo-harness-issue-flow/references/orchestrator.md) §9.3) reuses the acceptance record of each member when every member merged without conflict and the batch adds no commit of its own. It needs no new review round. A Low member has no acceptance record to reuse. Required checks on the batch head still apply.
153
- - After a change, verify the affected behavior and review the changed hunks with their affected context. Retain valid evidence for unchanged scope; add only missing tier coverage. A rebase alone does not require a new full review, but changed base behavior or conflict resolution can invalidate affected evidence. Reuse never substitutes for required checks on the current head or the current-main merge requirement.
163
+ - After a change, verify the affected behavior. The review scope of each round after a change is in [references/acceptor.md §2.2](../../assets/skills/repo-harness-issue-flow/references/acceptor.md#22-rounds). Retain valid evidence for unchanged scope; add only missing tier coverage. A rebase alone does not require a new full review, but changed base behavior or conflict resolution can invalidate affected evidence. Reuse never substitutes for required checks on the current head or the current-main merge requirement.
154
164
  - A downstream repository maps its own release surfaces, for example public API, wire format, DDL/SQL and permissions, to the High tier.
155
165
 
156
166
  The bot measures progress by side effects only: commits, pushes, evidence events and PR or check changes. It does not resume a worker to check liveness. A worker past its timebox with no new side effect is stalled; stop it or ask the user.
157
167
  Retry by failure mode. Reduce scope after a limit or out-of-memory stop. Move a tool error to another model. A network drop or an unknown failure gets one retry only for a read-only or idempotent call. For a call that can change remote state, check the original request and the provider receipt first; do not retry an unknown effect. After two failures of one task, stop and ask the user.
158
168
  Clear conflicts first. Once conflicts are clear, triage review threads and watch CI in parallel. Classify a CI failure before a retry. A suspected flake gets one fresh build; an identical second failure is not a flake. Classify each review comment as fix, dismiss or ask by the review-comment triage reference of the installed `repo-harness-check` skill.
159
- Stop and ask the user when a command or result names `unknown`, `ambiguous`, `pending`, `unproven`, `identity_lost`, `reconciliation_required` or `recovery_required`, or says `inspect the same`, `inspect same`, `never replay`, `do not resend` or `do not launch again`; when a lease directory is empty or malformed; before a third review round; when a review thread concerns security, authentication, data or migrations; or when a written rule conflicts with observed state.
169
+ Stop and ask the user when a command or result names `unknown`, `ambiguous`, `pending`, `unproven`, `identity_lost`, `reconciliation_required` or `recovery_required`, or says `inspect the same`, `inspect same`, `never replay`, `do not resend` or `do not launch again`; when a lease directory is empty or malformed; when a review thread concerns security, authentication, data or migrations; or when a written rule conflicts with observed state.
160
170
 
161
171
  Pending main push CI follows Daily Flow step 5, not the stop-and-ask rule above.
162
172
 
@@ -1,72 +1,5 @@
1
1
  # External Tooling
2
2
 
3
- ## External Source Intake P0
4
-
5
- `.ai/harness/policy.json#external_sources` is absent by default and is equivalent to the only default, `{ "version": 1, "mode": "off" }`. Refresh never auto-enables from a repository URL, installed `gh`, labels, or registry access mode.
6
-
7
- To enable one manual GitHub evidence refresh, use one exact closed selection shape. Every limit is positive. A label scan requires sorted non-empty `labels_all` and accepts a sorted optional `assignees_any` restriction. Unknown fields and provider values fail closed.
8
-
9
- ```json
10
- {
11
- "external_sources": {
12
- "version": 1,
13
- "mode": "manual",
14
- "github": {
15
- "enabled": true,
16
- "repository": "owner/repository",
17
- "selection": {
18
- "kind": "labels",
19
- "labels_all": ["ready"],
20
- "assignees_any": []
21
- },
22
- "limits": {
23
- "max_pages": 5,
24
- "max_issues": 500,
25
- "max_body_bytes": 65536,
26
- "max_total_bytes": 1048576,
27
- "deadline_ms": 30000
28
- }
29
- }
30
- }
31
- }
32
- ```
33
-
34
- For an explicitly reviewed one-shot batch, select exact Issue numbers instead of requiring provider labels or scanning the whole repository:
35
-
36
- ```json
37
- {
38
- "external_sources": {
39
- "version": 1,
40
- "mode": "manual",
41
- "github": {
42
- "enabled": true,
43
- "repository": "Ancienttwo/byok-sdk",
44
- "selection": {
45
- "kind": "issue_numbers",
46
- "issue_numbers": [102, 103, 104, 105, 106, 107, 108, 109, 110, 111]
47
- },
48
- "limits": {
49
- "max_pages": 1,
50
- "max_issues": 10,
51
- "max_body_bytes": 65536,
52
- "max_total_bytes": 1048576,
53
- "deadline_ms": 30000
54
- }
55
- }
56
- }
57
- }
58
- ```
59
-
60
- Exact-batch refresh resolves only those Issue endpoints and fails the whole attempt if any selected Issue is missing, malformed, a pull request, or exceeds a limit. GitHub assignees, labels, and open/closed state are evidence only: they do not prove whether local work has already been dispatched. Dispatch deduplication belongs to an authenticated binding against canonical repo-harness task identity. The triage, reproduce and fix stage contract for observed issues is in [issue pipeline](issue-pipeline.md).
61
-
62
- `repo-harness external-source refresh --repo <registered-repo-id>` invokes the locally authenticated `gh` client once and records immutable observations plus an attempt receipt under the repository Git common directory. `list` performs no provider call. These records are inert evidence: they do not create or change review admission, priority, provider claims, collaboration, or Agent Runtime state.
63
-
64
- ## External Source Binding WP2
65
-
66
- Binding needs an existing admitted session for the same provider issue. Save one session `selector` object from `repo-harness state board --repository-id <id> --json` as a JSON file. Then run `repo-harness external-source bind --repo <id> --source-revision <digest> --session <file>`. The command requires a strict `read_write` registry grant. The observation's provider repository and issue must match the session admission. The command persists one immutable provenance edge with the exact observation, authorization revision, session selector and admission digest.
67
-
68
- `external-source bindings` reports source, session and authorization drift without mutating work. Retired V1 receipts remain stored without a runtime reader. `external-source context` is the sole provider-content renderer and wraps canonical JSON in `[ExternalSourceUntrusted]`. A binding does not create work or admission. Human acceptance stays at PR merge; only a true `installation_blocker` may pause earlier.
69
-
70
3
  Generated repos route external tooling by host/runtime shape. Task-level
71
4
  skill routing lives in `docs/reference-configs/agentic-development-flow.md`.
72
5
 
@@ -75,7 +8,7 @@ skill routing lives in `docs/reference-configs/agentic-development-flow.md`.
75
8
  - `hai-stack` supplies `geju` for live, pre-contract exploration; only its frozen output enters a contract
76
9
  - Codex automation requires `health`, `check`, and `mermaid` from `~/.codex/skills`
77
10
  - `CodeGraph` is required agent readiness for code navigation and impact tracing
78
- - repo-harness's packaged `agent_fleet` supplies the delegation loop's global agent definitions (`explorer`, `deep-reasoner`, `fast-worker`, `gatekeeper`, `root-cause-prover`, `harness-evaluator`) for both hosts, plus the Claude-only `orchestrator`
11
+ - repo-harness's packaged `agent_fleet` supplies the delegation loop's global agent definitions (`explorer`, `deep-reasoner`, `fast-worker`, `gatekeeper`, `root-cause-prover`, `harness-evaluator`) for both hosts
79
12
 
80
13
  Waza is Codex-first in this contract. `~/.codex/skills` is the Codex runtime
81
14
  source, while `~/.agents/skills` is only the skills CLI staging/cache path used
@@ -221,12 +154,13 @@ number of registered repos that have pending project upgrade work.
221
154
 
222
155
  The cross-review skill is **harness-owned**; its routing source lives in
223
156
  `assets/skills/repo-harness-cross-review/`. Explicit independent review uses
224
- the persistent fleet deep-reasoner task-agent and existing OAR host in Herdr.
157
+ a persistent task session in Herdr: the existing OAR host runs a reviewer with
158
+ the `deep-reasoner` role.
225
159
  The full profile installs this Skill on both hosts; generic-review file Result
226
160
  and typed Receipt own acceptance. The direct advisory runtime is retired.
227
161
  Plugin install/discovery/readiness is not a repo-harness runtime dependency;
228
162
  user-managed plugins remain untouched. Plan consultation uses persistent
229
- task-agent collaborators in Herdr. Review Markdown remains projection only.
163
+ collaborator sessions in Herdr. Review Markdown remains projection only.
230
164
 
231
165
  Reverse Skill is registered from `zhaoxuya520/reverse-skill` as the recommended
232
166
  but explicit-only `reverse-skill-router`. It is not part of either install
@@ -374,8 +308,7 @@ boundary explicit:
374
308
 
375
309
  | Capability | Owner | Required for |
376
310
  |---|---|---|
377
- | `herdr` | user install (herdr.dev) | required at the version pinned in `.ai/harness/policy.json#external_tooling.herdr`; peer terminals and persistent task reviewer hosting |
378
- | `herdr_core` (`hc`) | user install (Herdr.app or a herdr-core release) | optional, at least the version pinned in `.ai/harness/policy.json#external_tooling.herdr_core`; persistent terminals and agent messaging; no repo-harness automation uses it yet |
311
+ | `herdr_core` (`hc`) | user install (Herdr.app or a herdr-core release) | required, at least the version pinned in `.ai/harness/policy.json#external_tooling.herdr_core`; persistent agent terminals, task sessions, review hosting and the notify relay |
379
312
  | `bun` | repo-harness | repo-harness-owned global installs, local dependency install, tests, and runtime execution |
380
313
  | `bash` | repo-harness | helper scripts, migration, setup checks, and contract verification wrappers; Git-for-Windows Bash is the Windows platform contract |
381
314
  | `npm` | npm registry | registry readbacks, publish gates, and opt-in update checks; not repo-harness-owned global install repair |
@@ -383,45 +316,39 @@ boundary explicit:
383
316
  | `rsync` | platform filesystem | installed-copy runtime mirroring |
384
317
  | `symlink` | platform filesystem | link-mode aliases; copy mode is the fallback |
385
318
 
386
- `.ai/harness/policy.json#external_tooling.herdr` is the single herdr pin: it owns
387
- the `min_version` floor and the checksum-verified `release_assets` entry that CI
388
- installs. Install herdr through its official installer or platform package manager
389
- and verify `herdr --version` reports at least that pinned `min_version`.
390
- `check-agent-tooling.sh --strict-readiness` reads the same key and fails if herdr is
391
- missing, unusable, or older than the pin; `setup check` projects `runtime.herdr`. Repo-harness does not install it or edit user Herdr config.
319
+ `.ai/harness/policy.json#external_tooling.herdr_core` is the single herdr pin: it
320
+ owns the `min_version` floor and the checksum-verified `release_assets` entry that
321
+ CI installs. Install hc through Herdr.app or a herdr-core release and verify
322
+ `hc --version` reports at least that pinned `min_version`.
323
+ `check-agent-tooling.sh --strict-readiness` reads the same key and fails if hc is
324
+ missing, unusable, or older than the pin. A missing or malformed pin is a
325
+ `configuration-error`. `setup check` projects `runtime.herdr_core`. Repo-harness
326
+ does not install hc or edit user Herdr config. Herdr.app is not a readiness
327
+ requirement: it has no Intel macOS build.
392
328
  The root `repo-harness` skill requires the `herdr` skill on Codex and Claude.
393
- `repo-harness install` and `repo-harness update` combine the CLI reference from
394
- `herdr --skill` with the caller-context policy in
395
- `assets/reference-configs/herdr-skill-context.md`. The shared renderer replaces
396
- the binary's introductory environment gate and rejects an unknown section layout.
397
- Both hosts receive the same generated skill. When Codex is selected, an existing
329
+ `repo-harness install` and `repo-harness update` put the caller-context policy in
330
+ `assets/reference-configs/herdr-skill-context.md` before the hc manual from
331
+ `hc --skill`. The shared renderer keeps the manual verbatim and rejects output
332
+ that is not the hc manual. Both hosts receive the same generated skill. When Codex is selected, an existing
398
333
  shared copy at `~/.agents/skills/herdr` is also updated and checked because Codex
399
334
  can discover it. Claude-only operations leave that shared copy unchanged.
400
335
  Install refuses to replace a
401
336
  user-edited or unowned copy. Strict readiness compares against the same renderer.
402
337
  Missing tool environment variables do not prove that the user is outside Herdr.
403
- Read-only discovery lists running sessions and panes by the task's exact path.
404
- Reuse a suitable task reviewer or create a new pane in the matched workspace.
338
+ Read-only discovery lists live hc terminals (`hc ls --json`) by the task's exact path.
339
+ Reuse a suitable task reviewer or start a new terminal at the task path.
405
340
  Path matching selects a location; it does not transfer another agent's task.
406
- Use explicit session and pane IDs for control after discovery.
341
+ Use explicit hc terminal addresses for control after discovery.
407
342
  The persistent reviewer still requires POSIX process groups: use macOS/Linux or
408
343
  WSL. Native Windows review lifecycle support is not implied by Herdr support.
409
- Admitted task sessions start only in a Herdr pane, so they and their Task Inbox and operator diff consumers are POSIX-only; on Windows, session start fails closed with `herdr_endpoint_platform_unsupported`.
344
+ Admitted task sessions start only in an hc terminal, so they and their Task Inbox and operator diff consumers are POSIX-only.
410
345
  Drain old tmux reviewers with the previous repo-harness version before upgrading.
411
346
  No runtime or collaboration path automatically falls back to tmux.
412
347
 
413
- herdr-core (`hc`) is a separate product with its own pin. It has persistent
414
- terminals and a JSON-RPC API, and it has built-in remote host access
415
- (`hc machine`, `hc run --on <machine>`). It has no sessions, panes,
416
- workspaces or plugins. `check-agent-tooling.sh` reports it as the optional
417
- `runtime_capabilities.herdr_core`; `setup check` projects `runtime.herdr_core`.
418
- `hc --version` must report at least the `min_version` at
419
- `.ai/harness/policy.json#external_tooling.herdr_core`. CI does not install hc.
420
- The two checks are independent: `hc` never satisfies `runtime.herdr`, the
421
- `herdr` skill or strict readiness. The transport, task sessions,
422
- `review --launch herdr`, operator collectors, the `herdr notify` plugin, the
423
- `herdr` skill, doctor and CI stay classic-only. No runtime falls back to the
424
- other.
348
+ herdr-core (`hc`) has persistent terminals and a JSON-RPC API, and it has
349
+ built-in remote host access (`hc machine`, `hc run --on <machine>`). It has no
350
+ sessions, panes, workspaces or plugins. Doctor has no Herdr Pi integration
351
+ check: Pi reports its terminal status to hc natively.
425
352
  The native protected-helper tool contract below remains a separate boundary.
426
353
 
427
354
  The policy is Bun-first, not Bun-only. Repo-harness-owned install/repair commands
@@ -705,8 +632,7 @@ bun add -g @colbymchenry/codegraph@1.6.2 && codegraph sync . && codegraph status
705
632
  `check-agent-tooling.sh`. The single authored source is
706
633
  `package:agents/fleet`; it ships inside the npm package and never requires a
707
634
  network fetch. The managed list is `explorer`, `deep-reasoner`, `fast-worker`,
708
- `deep-worker`, `gatekeeper`, `root-cause-prover`, `harness-evaluator`, and
709
- `orchestrator`.
635
+ `deep-worker`, `gatekeeper`, `root-cause-prover`, and `harness-evaluator`.
710
636
 
711
637
  ### Two targets, one source
712
638
 
@@ -714,14 +640,9 @@ network fetch. The managed list is `explorer`, `deep-reasoner`, `fast-worker`,
714
640
  is installed byte-for-byte.
715
641
  - Codex: `~/.codex/agents/<agent>.toml` — generated deterministically from the
716
642
  same packaged `.md`; there is no second authored copy for Codex.
717
- - `orchestrator` is projected to Claude only (`CLAUDE_ONLY_AGENTS` in
718
- `src/effects/terminal/task-role-profiles.ts`). The installer writes no
719
- `~/.codex/agents/orchestrator.toml`, and the checker does not expect one.
720
- Start it as a long-lived session with `claude --agent orchestrator`. It is
721
- the coordinator and integrator seat of `repo-harness-issue-flow`
722
- (`opus/xhigh`, read-only tools plus `gh` and `herdr agent prompt`). It has no
723
- Codex target because a Codex fleet TOML runs in a read-only sandbox without
724
- network access, which cannot run `gh`.
643
+ - The fleet holds sub-agent roles only. The orchestrator seat is not a fleet
644
+ role: `repo-harness seats argv orchestrator` prints its launch argv from the
645
+ `seats` section of `~/.repo-harness/config.json`.
725
646
 
726
647
  ### `.md` -> `.toml` mapping
727
648
 
@@ -1004,7 +925,6 @@ managed files by hand:
1004
925
  ~/.claude/agents/gatekeeper.md
1005
926
  ~/.claude/agents/root-cause-prover.md
1006
927
  ~/.claude/agents/harness-evaluator.md
1007
- ~/.claude/agents/orchestrator.md
1008
928
  ~/.codex/agents/explorer.toml
1009
929
  ~/.codex/agents/deep-reasoner.toml
1010
930
  ~/.codex/agents/fast-worker.toml