@jr2/orchestrator 0.6.0 → 0.7.0

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 (301) hide show
  1. package/console/components/app.ts +55 -15
  2. package/console/components/bottom-drawer.ts +259 -0
  3. package/console/components/drawer.ts +14 -6
  4. package/console/components/fleet.ts +36 -13
  5. package/console/components/machine-pane.ts +61 -5
  6. package/console/components/nav.ts +54 -8
  7. package/console/conversation.ts +161 -0
  8. package/console/login.ts +123 -0
  9. package/console/main.ts +600 -60
  10. package/console/store.ts +611 -64
  11. package/console/style.css +231 -0
  12. package/docs/agents-block.md +2 -2
  13. package/docs/concepts/agents-and-turns.md +86 -9
  14. package/docs/concepts/architecture.md +41 -28
  15. package/docs/concepts/callers-and-hooks.md +205 -0
  16. package/docs/concepts/charts.md +7 -5
  17. package/docs/concepts/composition.md +10 -1
  18. package/docs/concepts/converge.md +4 -2
  19. package/docs/concepts/durable-runs.md +43 -16
  20. package/docs/concepts/effects.md +50 -22
  21. package/docs/concepts/gates.md +95 -25
  22. package/docs/concepts/machines-and-workflows.md +5 -4
  23. package/docs/concepts/pools-and-sources.md +187 -11
  24. package/docs/concepts/secrets-and-trust.md +73 -33
  25. package/docs/concepts/the-menu.md +11 -0
  26. package/docs/concepts/workspaces.md +6 -5
  27. package/docs/get-started/a-model-decides.md +14 -13
  28. package/docs/get-started/an-agent-in-a-sandbox.md +43 -34
  29. package/docs/get-started/connect-a-model.md +1 -1
  30. package/docs/get-started/create-an-instance.md +17 -14
  31. package/docs/guides/add-tools-to-the-sandbox.md +55 -11
  32. package/docs/guides/answer-a-gate-from-a-forge.md +304 -0
  33. package/docs/guides/answer-a-gate.md +74 -37
  34. package/docs/guides/bind-open-parts.md +24 -8
  35. package/docs/guides/call-an-mcp-tool-from-a-machine.md +572 -0
  36. package/docs/guides/cancel-a-run.md +26 -16
  37. package/docs/guides/fix-a-failed-converge.md +18 -6
  38. package/docs/guides/give-a-caller-a-scope.md +203 -0
  39. package/docs/guides/give-an-agent-mcp-tools.md +422 -0
  40. package/docs/guides/iterate-on-a-machine-on-kind.md +10 -9
  41. package/docs/guides/let-an-agent-write-a-chart.md +9 -6
  42. package/docs/guides/look-inside-a-sandbox.md +101 -31
  43. package/docs/guides/open-the-console.md +63 -14
  44. package/docs/guides/read-a-conversation.md +225 -0
  45. package/docs/guides/run-a-chart-by-name.md +17 -16
  46. package/docs/guides/run-one-worker-per-item.md +15 -9
  47. package/docs/guides/set-an-agents-access-and-dials.md +2 -0
  48. package/docs/guides/start-a-run-for-each-alert.md +290 -0
  49. package/docs/guides/start-a-run-from-a-run.md +18 -16
  50. package/docs/guides/start-a-run.md +24 -18
  51. package/docs/guides/steer-an-agent.md +332 -0
  52. package/docs/guides/use-a-hosted-provider.md +1 -1
  53. package/docs/guides/watch-a-run.md +127 -121
  54. package/docs/guides/write-a-hook-kind.md +238 -0
  55. package/docs/guides/write-a-tool-as-an-mcp-server.md +351 -0
  56. package/docs/guides/write-a-workflow.md +17 -7
  57. package/docs/llms.txt +81 -15
  58. package/docs/reference/authoring-surface/agent.md +1 -1
  59. package/docs/reference/authoring-surface/answer.md +1 -1
  60. package/docs/reference/authoring-surface/arg.md +1 -1
  61. package/docs/reference/authoring-surface/basic.md +1 -1
  62. package/docs/reference/authoring-surface/bearer.md +1 -1
  63. package/docs/reference/authoring-surface/branchname.md +1 -1
  64. package/docs/reference/authoring-surface/carry.md +23 -0
  65. package/docs/reference/authoring-surface/chartschema.md +1 -1
  66. package/docs/reference/authoring-surface/chartschemafor.md +1 -1
  67. package/docs/reference/authoring-surface/command.md +1 -1
  68. package/docs/reference/authoring-surface/customize.md +4 -1
  69. package/docs/reference/authoring-surface/defineconfig.md +1 -1
  70. package/docs/reference/authoring-surface/defineevent.md +1 -1
  71. package/docs/reference/authoring-surface/dispatch.md +5 -4
  72. package/docs/reference/authoring-surface/fail.md +1 -1
  73. package/docs/reference/authoring-surface/file.md +1 -1
  74. package/docs/reference/authoring-surface/frompick.md +1 -1
  75. package/docs/reference/authoring-surface/gate.md +118 -0
  76. package/docs/reference/authoring-surface/group-agents.md +15 -0
  77. package/docs/reference/authoring-surface/group-charts.md +16 -0
  78. package/docs/reference/authoring-surface/group-composition.md +25 -0
  79. package/docs/reference/authoring-surface/group-config.md +17 -0
  80. package/docs/reference/authoring-surface/group-effects.md +48 -0
  81. package/docs/reference/authoring-surface/group-failure.md +13 -0
  82. package/docs/reference/authoring-surface/group-gates.md +16 -0
  83. package/docs/reference/authoring-surface/group-machine-and-events.md +15 -0
  84. package/docs/reference/authoring-surface/group-steering.md +12 -0
  85. package/docs/reference/authoring-surface/group-types-these-signatures-name.md +137 -0
  86. package/docs/reference/authoring-surface/group-workspaces-and-repos.md +15 -0
  87. package/docs/reference/authoring-surface/http.md +1 -1
  88. package/docs/reference/authoring-surface/isfailure.md +1 -1
  89. package/docs/reference/authoring-surface/isready.md +1 -1
  90. package/docs/reference/authoring-surface/jr2setup.md +13 -3
  91. package/docs/reference/authoring-surface/mcp.md +107 -0
  92. package/docs/reference/authoring-surface/open.md +5 -3
  93. package/docs/reference/authoring-surface/openbody.md +1 -1
  94. package/docs/reference/authoring-surface/paramsof.md +1 -1
  95. package/docs/reference/authoring-surface/pool.md +77 -9
  96. package/docs/reference/authoring-surface/push.md +1 -1
  97. package/docs/reference/authoring-surface/readyof.md +1 -1
  98. package/docs/reference/authoring-surface/reread.md +19 -0
  99. package/docs/reference/authoring-surface/secret.md +1 -1
  100. package/docs/reference/authoring-surface/sentby.md +1 -1
  101. package/docs/reference/authoring-surface/skip.md +22 -0
  102. package/docs/reference/authoring-surface/source.md +56 -1
  103. package/docs/reference/authoring-surface/steer.md +93 -0
  104. package/docs/reference/authoring-surface/text.md +1 -1
  105. package/docs/reference/authoring-surface/type-agentdefinition.md +14 -1
  106. package/docs/reference/authoring-surface/type-agentmcpserver.md +54 -0
  107. package/docs/reference/authoring-surface/type-anyframepath.md +1 -1
  108. package/docs/reference/authoring-surface/type-anyworktreepath.md +1 -1
  109. package/docs/reference/authoring-surface/type-binding.md +1 -1
  110. package/docs/reference/authoring-surface/type-caller.md +40 -0
  111. package/docs/reference/authoring-surface/type-callerrecord.md +32 -0
  112. package/docs/reference/authoring-surface/type-carry.md +19 -0
  113. package/docs/reference/authoring-surface/type-chainlink.md +3 -3
  114. package/docs/reference/authoring-surface/type-commandoutput.md +1 -1
  115. package/docs/reference/authoring-surface/type-customize.md +16 -1
  116. package/docs/reference/authoring-surface/type-delivered.md +17 -0
  117. package/docs/reference/authoring-surface/type-deliveredevent.md +18 -0
  118. package/docs/reference/authoring-surface/type-dispatchdefinition.md +4 -3
  119. package/docs/reference/authoring-surface/type-dispatchoutput.md +1 -1
  120. package/docs/reference/authoring-surface/type-effectbinding.md +12 -2
  121. package/docs/reference/authoring-surface/type-framepath.md +1 -1
  122. package/docs/reference/authoring-surface/type-gatebinding.md +15 -0
  123. package/docs/reference/authoring-surface/type-gatehooks.md +12 -0
  124. package/docs/reference/authoring-surface/type-gatelook.md +37 -0
  125. package/docs/reference/authoring-surface/type-gateoutcome.md +32 -0
  126. package/docs/reference/authoring-surface/type-gatereply.md +19 -0
  127. package/docs/reference/authoring-surface/type-gateslot.md +21 -0
  128. package/docs/reference/authoring-surface/type-gateslotinput.md +13 -0
  129. package/docs/reference/authoring-surface/type-gateslotparts.md +18 -0
  130. package/docs/reference/authoring-surface/type-gateslots.md +12 -0
  131. package/docs/reference/authoring-surface/type-gatetypesat.md +13 -0
  132. package/docs/reference/authoring-surface/type-hostinjectedinput.md +1 -1
  133. package/docs/reference/authoring-surface/type-httpoutput.md +1 -1
  134. package/docs/reference/authoring-surface/type-jr2config.md +37 -2
  135. package/docs/reference/authoring-surface/type-lateroutcome.md +1 -1
  136. package/docs/reference/authoring-surface/type-lends.md +5 -1
  137. package/docs/reference/authoring-surface/type-lookoutput.md +14 -0
  138. package/docs/reference/authoring-surface/type-mcpcalloutput.md +78 -0
  139. package/docs/reference/authoring-surface/type-mcpnotreturned.md +42 -0
  140. package/docs/reference/authoring-surface/type-mcpoptions.md +47 -0
  141. package/docs/reference/authoring-surface/type-mcpoutput.md +50 -0
  142. package/docs/reference/authoring-surface/type-mcpreadoutput.md +53 -0
  143. package/docs/reference/authoring-surface/type-mcpremoteserver.md +50 -0
  144. package/docs/reference/authoring-surface/type-mcpserver.md +41 -0
  145. package/docs/reference/authoring-surface/type-mcpstdioserver.md +42 -0
  146. package/docs/reference/authoring-surface/type-namedsecret.md +4 -4
  147. package/docs/reference/authoring-surface/type-openbodydeclaration.md +1 -1
  148. package/docs/reference/authoring-surface/type-openbodyoutput.md +1 -1
  149. package/docs/reference/authoring-surface/type-poolnextinput.md +1 -1
  150. package/docs/reference/authoring-surface/type-poolspec.md +11 -6
  151. package/docs/reference/authoring-surface/type-pushoutput.md +1 -1
  152. package/docs/reference/authoring-surface/type-pushsourcespec.md +38 -0
  153. package/docs/reference/authoring-surface/type-readsourcespec.md +47 -0
  154. package/docs/reference/authoring-surface/type-reposlot.md +1 -1
  155. package/docs/reference/authoring-surface/type-reread.md +18 -0
  156. package/docs/reference/authoring-surface/type-runsconfig.md +41 -0
  157. package/docs/reference/authoring-surface/type-sender.md +26 -1
  158. package/docs/reference/authoring-surface/type-sendercallerfield.md +14 -0
  159. package/docs/reference/authoring-surface/type-size.md +1 -1
  160. package/docs/reference/authoring-surface/type-skip.md +19 -0
  161. package/docs/reference/authoring-surface/type-sourcehooks.md +23 -0
  162. package/docs/reference/authoring-surface/type-sourcein.md +25 -0
  163. package/docs/reference/authoring-surface/type-sourcereply.md +18 -0
  164. package/docs/reference/authoring-surface/type-sourcespec.md +16 -7
  165. package/docs/reference/authoring-surface/type-sourceverdict.md +49 -0
  166. package/docs/reference/authoring-surface/type-standingpoolmachine.md +12 -0
  167. package/docs/reference/authoring-surface/type-standingpoolspec.md +51 -0
  168. package/docs/reference/authoring-surface/type-steerargs.md +20 -0
  169. package/docs/reference/authoring-surface/type-thinkinglevel.md +1 -1
  170. package/docs/reference/authoring-surface/type-usercontainer.md +1 -1
  171. package/docs/reference/authoring-surface/type-workspaced.md +1 -1
  172. package/docs/reference/authoring-surface/type-worktreefound.md +3 -3
  173. package/docs/reference/authoring-surface/type-worktreeinput.md +1 -1
  174. package/docs/reference/authoring-surface/type-worktreeoptions.md +1 -1
  175. package/docs/reference/authoring-surface/type-worktreeoutput.md +1 -1
  176. package/docs/reference/authoring-surface/type-worktreepath.md +1 -1
  177. package/docs/reference/authoring-surface/type-worktreeready.md +1 -1
  178. package/docs/reference/authoring-surface/type-worktreerefused.md +4 -4
  179. package/docs/reference/authoring-surface/workspace.md +1 -1
  180. package/docs/reference/authoring-surface/worktree.md +1 -1
  181. package/docs/reference/authoring-surface.md +88 -167
  182. package/docs/reference/cli.md +413 -74
  183. package/docs/reference/config.md +235 -2
  184. package/docs/reference/decisions/0002-duplex-streaming-actor.md +71 -11
  185. package/docs/reference/decisions/0005-sandbox-pod-composition.md +14 -10
  186. package/docs/reference/decisions/0006-agent-control-surface.md +4 -4
  187. package/docs/reference/decisions/0007-durable-machine-state.md +1 -1
  188. package/docs/reference/decisions/0009-cli-and-instance-interface.md +150 -49
  189. package/docs/reference/decisions/0010-bdd-acceptance-tests.md +5 -3
  190. package/docs/reference/decisions/0011-workflow-defined-events.md +256 -12
  191. package/docs/reference/decisions/0012-workspace-wrapper-machine.md +9 -2
  192. package/docs/reference/decisions/0013-the-agent-reaches-its-machine-through-a-container-it-cannot-read.md +20 -14
  193. package/docs/reference/decisions/0014-observation-is-open-run-state-is-not.md +53 -27
  194. package/docs/reference/decisions/0015-authoring-surface-absorbs-the-mechanism.md +18 -14
  195. package/docs/reference/decisions/0017-pool-over-a-source-port.md +226 -12
  196. package/docs/reference/decisions/0018-instance-agents-are-definitions-jr2-assembles-the-harness.md +15 -7
  197. package/docs/reference/decisions/0019-one-converging-command-against-the-current-context.md +32 -18
  198. package/docs/reference/decisions/0021-workspace-continuity-is-a-lease-that-answers-back.md +14 -1
  199. package/docs/reference/decisions/0022-observation-is-a-level-triggered-feed.md +4 -4
  200. package/docs/reference/decisions/0023-the-harness-prints-the-conversation.md +116 -34
  201. package/docs/reference/decisions/0024-an-agents-turn-ends-with-the-state-that-asked-for-it.md +38 -37
  202. package/docs/reference/decisions/0025-cancel-ends-a-run-stop-parks-it.md +10 -5
  203. package/docs/reference/decisions/0027-the-harness-is-jr2s-own-server-flue-retires-the-wire-stays.md +7 -6
  204. package/docs/reference/decisions/0028-what-an-agent-may-do-to-the-workspace-is-part-of-its-definition.md +23 -7
  205. package/docs/reference/decisions/0029-a-menu-is-fixed-for-a-conversation-and-a-turn-is-told-its-allowed-picks.md +18 -10
  206. package/docs/reference/decisions/0030-a-snapshot-names-the-machine-it-was-written-under.md +3 -2
  207. package/docs/reference/decisions/0031-menu-only-agents-run-on-the-instance-harness.md +23 -18
  208. package/docs/reference/decisions/0032-the-console-unlocks-with-a-callers-credential.md +101 -0
  209. package/docs/reference/decisions/0033-a-machine-declares-the-input-that-starts-it.md +4 -3
  210. package/docs/reference/decisions/0034-the-console-renders-with-preact-and-the-server-erases-the-types.md +6 -6
  211. package/docs/reference/decisions/0037-an-instance-builds-its-sandbox-images-jr2-injects-the-harness.md +5 -4
  212. package/docs/reference/decisions/0049-a-machine-carries-its-parts-and-composes-by-invoke.md +19 -19
  213. package/docs/reference/decisions/0050-what-code-names-config-declares-what-the-cli-names-discovery-finds.md +6 -1
  214. package/docs/reference/decisions/0054-the-kit-ships-machines-and-a-shipped-machine-leaves-its-parts-open.md +55 -40
  215. package/docs/reference/decisions/0055-a-release-is-a-pushed-tag-and-the-publish-guard-is-the-credential.md +14 -13
  216. package/docs/reference/decisions/0057-a-turn-is-its-frame-its-dials-and-whether-it-continues.md +7 -0
  217. package/docs/reference/decisions/0058-a-harness-answers-the-orchestrator-alone.md +13 -7
  218. package/docs/reference/decisions/0059-a-harness-holds-stand-ins-and-the-custodian-holds-the-keys.md +38 -30
  219. package/docs/reference/decisions/0062-jr2-briefs-the-agent-on-its-seat-never-on-its-task.md +64 -17
  220. package/docs/reference/decisions/0063-the-orchestrator-watches-the-cluster.md +2 -1
  221. package/docs/reference/decisions/0064-a-workspace-waits-for-capacity.md +2 -2
  222. package/docs/reference/decisions/0065-a-persist-survives-a-crash-and-history-is-kept-for-a-set-time.md +109 -0
  223. package/docs/reference/decisions/0066-a-model-tier-runs-a-real-model-and-a-change-to-what-it-reads-runs-the-tier.md +51 -23
  224. package/docs/reference/decisions/0067-an-effect-is-an-actor-slot-and-runs-at-most-once-unless-marked-idempotent.md +94 -54
  225. package/docs/reference/decisions/0068-an-effector-holds-an-effects-secrets-and-signs-its-wire.md +101 -47
  226. package/docs/reference/decisions/0069-the-orchestrator-is-a-kit-image-and-an-instance-publishes-its-assembly.md +32 -9
  227. package/docs/reference/decisions/0070-a-machine-lends-its-parts-to-a-chart.md +17 -13
  228. package/docs/reference/decisions/0071-a-run-starts-a-run-through-a-dispatch-effect.md +56 -30
  229. package/docs/reference/decisions/0072-the-docs-ship-inside-the-kit-and-an-instances-agents-md-indexes-them.md +35 -25
  230. package/docs/reference/decisions/0075-a-machine-cuts-a-worktree-and-the-workspace-only-clones.md +4 -3
  231. package/docs/reference/decisions/0076-an-agents-control-credential-lives-only-where-no-workspace-code-runs.md +37 -10
  232. package/docs/reference/decisions/0078-a-caller-comes-from-one-authenticator-seam-and-acts-within-its-scopes.md +285 -0
  233. package/docs/reference/decisions/0079-an-agent-holds-mcp-tools-a-machine-calls-them-as-an-effect-and-the-machine-is-the-approval.md +198 -0
  234. package/docs/reference/decisions.md +6 -4
  235. package/docs/reference/glossary.md +96 -42
  236. package/docs/reference/hooks.md +1077 -0
  237. package/docs/reference/http-api.md +976 -149
  238. package/docs/why.md +2 -1
  239. package/package.json +10 -3
  240. package/src/actor.ts +36 -10
  241. package/src/agent.ts +50 -0
  242. package/src/assembly-checks.ts +530 -4
  243. package/src/callers.ts +245 -0
  244. package/src/chart.ts +52 -7
  245. package/src/config.ts +550 -1
  246. package/src/conversations.ts +453 -0
  247. package/src/custodian.ts +8 -2
  248. package/src/customize.ts +143 -4
  249. package/src/dispatch-effect.ts +142 -26
  250. package/src/durability.ts +2 -0
  251. package/src/duration.ts +20 -0
  252. package/src/effect-checks.ts +2 -1
  253. package/src/effect.ts +60 -7
  254. package/src/effector-wire.ts +272 -27
  255. package/src/gate-brand.ts +16 -0
  256. package/src/gate.ts +634 -48
  257. package/src/harness-client.ts +10 -4
  258. package/src/held-secrets.ts +72 -23
  259. package/src/holds.ts +2 -2
  260. package/src/hook-kinds/discord.ts +92 -0
  261. package/src/hook-kinds/door.ts +107 -0
  262. package/src/hook-kinds/github.ts +89 -0
  263. package/src/hook-kinds/gitlab.ts +72 -0
  264. package/src/hook-kinds/hook.ts +7 -0
  265. package/src/hook-kinds/index.ts +465 -0
  266. package/src/hook-kinds/slack.ts +151 -0
  267. package/src/hook-kinds/webhook.ts +113 -0
  268. package/src/hooks.ts +506 -0
  269. package/src/http-effect.ts +76 -38
  270. package/src/http.ts +889 -94
  271. package/src/index.ts +16 -5
  272. package/src/instance.ts +196 -26
  273. package/src/internal.ts +22 -3
  274. package/src/machine-doc.ts +26 -1
  275. package/src/mcp-effect.ts +424 -0
  276. package/src/mount-digest.ts +41 -7
  277. package/src/names.ts +64 -2
  278. package/src/notices.ts +138 -10
  279. package/src/open-body.ts +25 -11
  280. package/src/open-effect.ts +17 -4
  281. package/src/open.ts +4 -2
  282. package/src/parts.ts +87 -9
  283. package/src/party.ts +2 -1
  284. package/src/pick.ts +2 -2
  285. package/src/pool.ts +1142 -163
  286. package/src/registration.ts +203 -13
  287. package/src/run-host.ts +1509 -171
  288. package/src/run-list.ts +191 -0
  289. package/src/sandbox-kube.ts +53 -5
  290. package/src/secret-placement.ts +239 -33
  291. package/src/server.ts +53 -4
  292. package/src/setup.ts +72 -32
  293. package/src/snapshot-store.ts +565 -48
  294. package/src/steer.ts +111 -0
  295. package/src/stub-harness.ts +6 -2
  296. package/src/tokens.ts +263 -22
  297. package/src/wire.ts +17 -0
  298. package/src/workspace.ts +50 -6
  299. package/src/worktree.ts +3 -3
  300. package/docs/reference/decisions/0032-the-console-unlocks-with-the-instance-token.md +0 -61
  301. package/docs/reference/decisions/0065-a-persist-survives-a-crash-and-history-is-a-week.md +0 -65
@@ -70,8 +70,8 @@ _Avoid_: agent (unqualified), coding agent (a `coder` Agent codes too), copilot,
70
70
 
71
71
  **Console**:
72
72
  The browser surface that the Orchestrator serves, where a person sees the Workflows, their runs and their Machines.
73
- Observation needs no token; the Instance token unlocks control, so that a person can start runs and see and answer the
74
- open Gates.
73
+ Observation needs no token; a Caller's credential unlocks the control that its scopes allow, so that a person can start
74
+ runs and see and answer the open Gates.
75
75
  _Avoid_: visualizer (only one panel of it), dashboard, UI (unqualified), viz
76
76
 
77
77
  <a id="kit-image"></a>
@@ -147,9 +147,9 @@ _Avoid_: agent actor
147
147
  <a id="agent"></a>
148
148
 
149
149
  **Agent**:
150
- A configured worker, such as a coder or a reviewer: a model, instructions, Working tools and access to the Workspace.
151
- It is a data definition that a Machine carries in a named Actor slot, so its name is the slot's name and its scope is
152
- that Machine; a Turn can set its Dials but never its identity.
150
+ A configured worker, such as a coder or a reviewer: a model, instructions, Working tools, MCP tools and access to the
151
+ Workspace. It is a data definition that a Machine carries in a named Actor slot, so its name is the slot's name and its
152
+ scope is that Machine; a Turn can set its Dials but never its identity.
153
153
  _Avoid_: role, persona, roster entry
154
154
 
155
155
  <a id="dials"></a>
@@ -219,11 +219,38 @@ _Avoid_: origin, Caller (the holder of the credential behind a Gate's answer)
219
219
 
220
220
  **Caller**:
221
221
  The holder of a credential that acts on an Instance from outside its Machines, such as a person, a CI job or a bridge
222
- to a chat service: it starts a run, answers a Gate or cancels a run. A Caller can act **on behalf of** another party,
223
- but that is the Caller's claim, which jr2 does not check.
222
+ to a chat service: it starts a run, answers a Gate, sends a **Steering message** or cancels a run. A Caller can act
223
+ **on behalf of** another party, but that is the Caller's claim, which jr2 does not check, except where a **Hook**'s
224
+ signature covers it.
224
225
  _Avoid_: principal (it brings policies and roles that an Instance does not have), user (a CI job is a Caller), actor
225
226
  (xstate's word), Sender (a party inside the run)
226
227
 
228
+ <a id="steering-message"></a>
229
+
230
+ **Steering message**:
231
+ Free text that a Caller, or the Machine, sends to one Agent of a run, named by its slot, which the Agent hears once,
232
+ without an interrupt. A Caller's is an instruction from outside the run; the Machine's can carry what another Agent said, which is
233
+ a peer's word, not an instruction. It is not a fact from jr2, and it is not a pick.
234
+ _Avoid_: steer (as a noun), notice (a fact that jr2 knows and the Agent cannot find), prompt (the Turn's, from the
235
+ Machine), interrupt (`abort` is the terminal act)
236
+
237
+ <a id="hook"></a>
238
+
239
+ **Hook**:
240
+ An Instance's door, at a stable address, for one outside service that sends it deliveries, such as a forge or an alert
241
+ service. A Hook checks that a delivery is the service's and decides nothing: it is a Caller that can only answer a Gate
242
+ or bring items to a Source. Its Hook kind, such as `github` or `slack`, is the service's protocol.
243
+ _Avoid_: webhook (the service's request, not the door), endpoint, trigger, listener, subscription, intake; not an engine
244
+ hook or a git hook
245
+
246
+ <a id="hook-kind"></a>
247
+
248
+ **Hook kind**:
249
+ One outside service's protocol, as code that an Instance imports: what the service signed, how to read a delivery and
250
+ its payloads, the service's handshake, and the envelope of an answer that a person reads. It never holds a secret, and
251
+ one kind serves every Hook of that service.
252
+ _Avoid_: plugin, adapter (a Source's word), integration, driver
253
+
227
254
  <a id="emit"></a>
228
255
 
229
256
  **Emit**:
@@ -234,9 +261,9 @@ _Avoid_: event (what a Gate or an Agent delivers), log (not a diagnostic)
234
261
  <a id="effect"></a>
235
262
 
236
263
  **Effect**:
237
- Work that a Machine does outside itself: it runs a command, calls a URL, pushes a branch or starts a run. A run that
238
- an Effect started is **dispatched by** the run that started it, and the two are independent: an in-run child is a
239
- nested Machine, never a dispatched run.
264
+ Work that a Machine does outside itself: it runs a command, calls a URL, calls an MCP server, pushes a branch
265
+ or starts a run. A run that an Effect started is **dispatched by** the run that started it, and the two are independent:
266
+ an in-run child is a nested Machine, never a dispatched run.
240
267
  _Avoid_: action (xstate's word), side effect, job, task, step, operation, errand, tool; sub-run, child run, nested run,
241
268
  spawned run (a dispatched run is a run of its own)
242
269
 
@@ -244,8 +271,9 @@ spawned run (a dispatched run is a run of its own)
244
271
 
245
272
  **Open**:
246
273
  A part that a Machine declares but does not bind, so that its composer binds it: for example, a Repo Slot with no url,
247
- an Agent with no model, or an Effect with no url, program or secret. It is the shape that a packaged Machine ships in,
248
- `jr2 up` refuses an Open part that nobody bound, and a run never sees one, except an Open body, which a run binds.
274
+ an Agent with no model, or an Effect with no url, program, MCP server or tool, or secret. It is the shape that a
275
+ packaged Machine ships in, `jr2 up` refuses an Open part that nobody bound, and a run never sees one, except an Open
276
+ body, which a run binds, and a Gate's Open look, about which `jr2 up` only warns.
249
277
  _Avoid_: unset, default (an Open part has none), placeholder
250
278
 
251
279
  <a id="open-body"></a>
@@ -283,6 +311,13 @@ _Avoid_: template, expression, interpolation, variable, placeholder (the `{{ }}`
283
311
 
284
312
  ### Turns and conversations
285
313
 
314
+ <a id="conversation"></a>
315
+
316
+ **Conversation**:
317
+ One Agent's exchange with its model, from its first Turn to its end: the prompts, the model's words, its tool calls and
318
+ their results. An Instance ID names it, and one conversation spans one or more Turns.
319
+ _Avoid_: session, transcript, chat, log
320
+
286
321
  <a id="turn"></a>
287
322
 
288
323
  **Turn**:
@@ -336,8 +371,9 @@ _Avoid_: result, status
336
371
  **Sweep**:
337
372
  The Turn's sweep: the Orchestrator's end of an Agent's Submissions when the state that asked for the Turn stops
338
373
  waiting. It settles the running Submission and every one queued behind it. It says how the Turn ended: by the Turn's
339
- own pick, or by something else. Two other sweeps are not this one: the image sweep of `jr2 up` (ADR-0039,
340
- "swept N image(s)"), and the Repo sweep of `jr2 gc` (ADR-0051).
374
+ own pick, or by something else. Other sweeps are not this one: the image sweep of `jr2 up` (ADR-0039,
375
+ "swept N image(s)"), the Repo sweep of `jr2 gc` (ADR-0051), and the run sweep of the Orchestrator, which deletes the
376
+ ended runs older than `runs.retain` and, when the state volume is more than 80% full, the oldest kept conversations (ADR-0065).
341
377
  _Avoid_: abort (the wire's route, not the act), cancel (the end of a run)
342
378
 
343
379
  <a id="runaway"></a>
@@ -351,7 +387,7 @@ _Avoid_: degeneration (the model behavior, not the fault class), loop, hang, sta
351
387
 
352
388
  **step**:
353
389
  One tool call of a model answer that the engine starts while a Turn is live, whether or not it runs: a call of a
354
- Working tool or a pick, a call of an unknown tool or with invalid arguments, a pick that the Harness blocks as the
390
+ Working tool, of an MCP tool or a pick, a call of an unknown tool or with invalid arguments, a pick that the Harness blocks as the
355
391
  second pick of its model answer, each call of a model answer that hit the output limit, and the call that trips the
356
392
  Runaway watch. A call after a pick that ended the Turn is not a step. The Harness counts steps to find a Runaway. A
357
393
  **step boundary** is the point after a model answer and the results of all its calls, and before the next model
@@ -423,10 +459,20 @@ re-prompt of an open Turn)
423
459
 
424
460
  **Working tools**:
425
461
  The file and shell tools that the Harness runs in its own container: what an Agent may do, as its Menu is what it may
426
- say. Every program that they run, and their file I/O, is confined, so it cannot reach what the Harness itself holds. The Agent's access to
427
- the Workspace decides which of them it gets, and a Menu-only Agent gets none.
462
+ say. Every program that they run, and their file I/O, is confined, so it cannot reach what the Harness itself holds. The
463
+ Agent's access to the Workspace decides which of them it gets, and a Menu-only Agent gets none.
428
464
  _Avoid_: tools (unqualified), sandbox tools
429
465
 
466
+ <a id="mcp-tools"></a>
467
+
468
+ **MCP tools**:
469
+ The tools of the MCP servers that an Agent's definition names: what an Agent may do through a service, beside its
470
+ Working tools and its Menu. The Instance's config declares each server by a name of the author's, and the Agent names
471
+ the servers and, for a remote server, the tools that it may call. They are fixed for a conversation, and a call to one
472
+ is never a pick. A call that needs a person's approval is not made with an MCP tool: the Machine makes it as an Effect,
473
+ after a Gate.
474
+ _Avoid_: connector, plugin, integration, extension, tools (unqualified)
475
+
430
476
  ### Sandboxes, Harnesses and secrets
431
477
 
432
478
  <a id="sandbox"></a>
@@ -439,9 +485,9 @@ _Avoid_: worker pod, container
439
485
  <a id="harness"></a>
440
486
 
441
487
  **Harness**:
442
- jr2's own long-running server that hosts the conversations of Agents and executes their Working tools, in every Sandbox
443
- and once per Instance as the Instance Harness. It holds no Agent of its own: each Submission carries the definition
444
- that it runs.
488
+ jr2's own long-running server that hosts the conversations of Agents and executes their Working tools and calls their
489
+ MCP tools, in every Sandbox and once per Instance as the Instance Harness. It holds no Agent of its own: each Submission
490
+ carries the definition that it runs.
445
491
  _Avoid_: flue agent, server, `local()`
446
492
 
447
493
  <a id="engine"></a>
@@ -472,9 +518,10 @@ firewall
472
518
  <a id="held-secret"></a>
473
519
 
474
520
  **Held secret**:
475
- A credential that the Harness uses through its pod's Custodian but never holds: a model API key above all, and the
476
- Sandbox tokens. The Harness holds only its Stand-in, so no Agent can take the secret out of the pod. Workspace code can
477
- spend it through the Custodian, while the pod lives, only when its Workspace grants that secret.
521
+ A credential that the Harness uses through its pod's Custodian but never holds: a model API key above all, the token of
522
+ an MCP server that an Agent names, and the Sandbox tokens. The Harness holds only its Stand-in, so no Agent can take the
523
+ secret out of the pod. Workspace code can spend it through the Custodian, while the pod lives, only when its Workspace
524
+ grants that secret.
478
525
  _Avoid_: masked secret, injected secret, proxied key, secret (unqualified)
479
526
 
480
527
  <a id="stand-in"></a>
@@ -499,29 +546,32 @@ _Avoid_: pod token, agent token, slot token, Instance token (the Caller's creden
499
546
 
500
547
  **Workspace code**:
501
548
  Each process in a Sandbox whose program or input comes from the Workspace's shared files: what an Agent's Working tools
502
- run, tests and builds, git and what a repository's own config makes it run, and a command that a Machine runs there. Any
503
- Agent can run what another Agent wrote, so jr2 trusts none of it, and no credential that acts for an Agent is where
504
- Workspace code runs.
549
+ run, tests and builds, git and what a repository's own config makes it run, a stdio MCP server, and a command that a
550
+ Machine runs there. Any Agent can run what another Agent wrote, so jr2 trusts none of it, and no credential that acts
551
+ for an Agent is where Workspace code runs.
505
552
  _Avoid_: agent code (any Agent can run another's), user code, untrusted code (unqualified), tool process
506
553
 
507
554
  <a id="check-pod"></a>
508
555
 
509
556
  **Check pod**:
510
- The one-shot pod in which the provider preflight of `jr2 up` checks the models of one class of Harness pod, before the
511
- converge writes an object that the Instance reads. It has a Custodian, its own copies of the objects that it reads, and
512
- labels that no Harness pod has. Its check container calls each model as a Turn calls it. The preflight is the step of
513
- `jr2 up`, and a check is what the check container does for one model: one call, and at most a second one after an
514
- answer in text. `jr2 check` is not this check: it runs the typecheck and the Machine walk of `jr2 up`, with no pod and no
515
- cluster.
557
+ The one-shot pod in which the provider preflight of `jr2 up` checks the models of one class of Harness pod, and the tool
558
+ list of each remote MCP server that an Agent of the class names, before the converge writes an object that the Instance
559
+ reads. It has a Custodian, its own copies of the objects that it reads, and labels that no Harness pod has. Its check
560
+ container calls each model as a Turn calls it. The preflight is the step of `jr2 up`, and a check is what the check
561
+ container does for one model: one call, and at most a second one after an answer in text; for an MCP server, it reads
562
+ its tool list once through the Custodian. `jr2 check` is not this check: it runs the typecheck and the Machine walk of
563
+ `jr2 up`, with no pod and no cluster.
516
564
  _Avoid_: probe, probe pod, preflight pod, test pod, Harness (it runs none)
517
565
 
518
566
  <a id="effector"></a>
519
567
 
520
568
  **Effector**:
521
- The container where jr2's own process runs a Machine's Effects and holds their secrets, and where the Agent executes
522
- nothing: a Sandbox Effector or the Instance Effector. Every Effect runs in it except a command that names no secret,
523
- which runs beside the Agent, and a dispatch that names no target, which runs in the Orchestrator's own process; a
524
- command that runs in it sees a pinned commit, never the live Worktree.
569
+ The container where jr2's own process holds the secrets that the Orchestrator must not hold and makes the calls to the
570
+ outside that jr2 makes for a Machine or a Hook, and where the Agent executes nothing: a Sandbox Effector or the Instance
571
+ Effector. It serves a Machine's Effects and, in the Instance Effector, the Hook door, and it knows no Hook kind or
572
+ service. Every Effect runs in it except a command that names no secret, which runs beside the Agent, and a dispatch that
573
+ names no target, which runs in the Orchestrator's own process; a command that runs in it sees a pinned commit, never the
574
+ live Worktree.
525
575
  _Avoid_: Courier, Actuator, Clerk, machine container, tool image
526
576
 
527
577
  <a id="sandbox-effector"></a>
@@ -536,7 +586,9 @@ _Avoid_: sidecar, worker, runner
536
586
 
537
587
  **Instance Effector**:
538
588
  The Effector as a stateless pod of its own, one per Instance, for an Effect that calls a URL and reads no Worktree file,
539
- and for a dispatch that starts a run on another Orchestrator.
589
+ for an Effect that calls an MCP server, for a dispatch that starts a run on another Orchestrator, and for the Hook
590
+ door's two operations: it checks an HMAC with a Hook's secret, which the Orchestrator never holds, and makes the door's
591
+ one call out.
540
592
  _Avoid_: sidecar, worker, runner
541
593
 
542
594
  <a id="effect-secret"></a>
@@ -549,7 +601,7 @@ _Avoid_: secret (unqualified), injected secret
549
601
  <a id="sandbox-image"></a>
550
602
 
551
603
  **Sandbox Image**:
552
- The user-owned image that a Sandbox's Harness runs in: the tools that the Agent's Working tools can reach, and the shell
604
+ The user-owned image that a Sandbox's Harness runs in: the tools that the Agent's Working tools can reach, the program of each stdio MCP server, and the shell
553
605
  that a human gets where the Harness runs. A Workspace names it as a fact of its Machine, built by `jr2 up` or brought
554
606
  from a registry, and it carries no part of jr2.
555
607
  _Avoid_: workspace image (a Workspace is a Machine; the image is the pod's), agent image, harness image (the kit's own),
@@ -588,15 +640,17 @@ _Avoid_: sidecar (its deployment shape), debug container (a one-off attach, not
588
640
 
589
641
  **Source**:
590
642
  The port from which a Pool gets its work items. A queue, a generator or a re-queried set can be a Source, and a Work
591
- Source is one Source adapter.
643
+ Source is one Source adapter. A Source can pull (read its set again) and be pushed (hear a Hook, which either tells it to
644
+ read again or carries an item to it); when it can read, the read is the truth.
592
645
  _Avoid_: queue (one possible backing, and not FIFO), feed
593
646
 
594
647
  <a id="pool"></a>
595
648
 
596
649
  **Pool**:
597
- The Machine that the kit supplies to run one worker Machine for each Source item, with a limit on how many run at the
598
- same time.
599
- _Avoid_: scheduler, work loop
650
+ The Machine that the kit supplies to run one worker for each Source item, with a limit on how many run at the same
651
+ time. A worker is a child Machine inside the Pool's run, or a run of another Workflow that the Pool dispatches. A Pool
652
+ of runs can be **standing**: jr2 keeps it live for the Instance, and it parks when it has no work instead of ending.
653
+ _Avoid_: scheduler, work loop, intake, router
600
654
 
601
655
  <a id="work-source"></a>
602
656