@jr2/orchestrator 0.4.1 → 0.6.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 (361) hide show
  1. package/README.md +20 -2
  2. package/console/components/app.ts +2 -0
  3. package/console/components/fleet.ts +14 -1
  4. package/console/components/machine-pane.ts +41 -2
  5. package/console/main.ts +13 -1
  6. package/console/store.ts +102 -6
  7. package/console/style.css +21 -0
  8. package/docs/agents-block.md +5 -0
  9. package/docs/concepts/agents-and-turns.md +478 -0
  10. package/docs/concepts/architecture.md +243 -0
  11. package/docs/concepts/charts.md +146 -0
  12. package/docs/concepts/composition.md +357 -0
  13. package/docs/concepts/converge.md +257 -0
  14. package/docs/concepts/durable-runs.md +189 -0
  15. package/docs/concepts/effects.md +658 -0
  16. package/docs/concepts/gates.md +208 -0
  17. package/docs/concepts/machines-and-workflows.md +298 -0
  18. package/docs/concepts/pools-and-sources.md +230 -0
  19. package/docs/concepts/secrets-and-trust.md +306 -0
  20. package/docs/concepts/the-menu.md +381 -0
  21. package/docs/concepts/workspaces.md +756 -0
  22. package/docs/get-started/a-model-decides.md +563 -0
  23. package/docs/get-started/an-agent-in-a-sandbox.md +383 -0
  24. package/docs/get-started/connect-a-model.md +248 -0
  25. package/docs/get-started/create-an-instance.md +194 -0
  26. package/docs/get-started/have-your-assistant-write-a-machine.md +993 -0
  27. package/docs/get-started/install.md +130 -0
  28. package/docs/guides/add-tools-to-the-sandbox.md +308 -0
  29. package/docs/guides/answer-a-gate.md +304 -0
  30. package/docs/guides/bind-open-parts.md +224 -0
  31. package/docs/guides/cancel-a-run.md +146 -0
  32. package/docs/guides/clean-up.md +206 -0
  33. package/docs/guides/cut-a-worktree.md +560 -0
  34. package/docs/guides/fix-a-failed-converge.md +361 -0
  35. package/docs/guides/give-the-cluster-git-credentials.md +222 -0
  36. package/docs/guides/iterate-on-a-machine-on-kind.md +190 -0
  37. package/docs/guides/let-an-agent-write-a-chart.md +230 -0
  38. package/docs/guides/look-inside-a-sandbox.md +177 -0
  39. package/docs/guides/mirror-the-kit-images.md +176 -0
  40. package/docs/guides/move-from-kind-to-a-shared-cluster.md +318 -0
  41. package/docs/guides/open-the-console.md +91 -0
  42. package/docs/guides/publish-a-machine-as-an-npm-package.md +350 -0
  43. package/docs/guides/push-and-sign-a-branch.md +532 -0
  44. package/docs/guides/run-a-chart-by-name.md +270 -0
  45. package/docs/guides/run-a-command-or-call-a-url.md +587 -0
  46. package/docs/guides/run-one-worker-per-item.md +322 -0
  47. package/docs/guides/set-an-agents-access-and-dials.md +420 -0
  48. package/docs/guides/size-a-workspace.md +217 -0
  49. package/docs/guides/start-a-run-from-a-run.md +237 -0
  50. package/docs/guides/start-a-run.md +207 -0
  51. package/docs/guides/upgrade-the-kit-version.md +240 -0
  52. package/docs/guides/use-a-hosted-provider.md +214 -0
  53. package/docs/guides/use-a-local-model.md +313 -0
  54. package/docs/guides/watch-a-run.md +349 -0
  55. package/docs/guides/write-a-workflow.md +318 -0
  56. package/docs/index.md +44 -0
  57. package/docs/llms.txt +237 -0
  58. package/docs/reference/authoring-surface/agent.md +151 -0
  59. package/docs/reference/authoring-surface/answer.md +156 -0
  60. package/docs/reference/authoring-surface/arg.md +82 -0
  61. package/docs/reference/authoring-surface/basic.md +62 -0
  62. package/docs/reference/authoring-surface/bearer.md +53 -0
  63. package/docs/reference/authoring-surface/branchname.md +15 -0
  64. package/docs/reference/authoring-surface/chartschema.md +23 -0
  65. package/docs/reference/authoring-surface/chartschemafor.md +48 -0
  66. package/docs/reference/authoring-surface/command.md +206 -0
  67. package/docs/reference/authoring-surface/customize.md +64 -0
  68. package/docs/reference/authoring-surface/defineconfig.md +41 -0
  69. package/docs/reference/authoring-surface/defineevent.md +114 -0
  70. package/docs/reference/authoring-surface/dispatch.md +126 -0
  71. package/docs/reference/authoring-surface/fail.md +96 -0
  72. package/docs/reference/authoring-surface/file.md +142 -0
  73. package/docs/reference/authoring-surface/frompick.md +277 -0
  74. package/docs/reference/authoring-surface/http.md +259 -0
  75. package/docs/reference/authoring-surface/isfailure.md +58 -0
  76. package/docs/reference/authoring-surface/isready.md +14 -0
  77. package/docs/reference/authoring-surface/jr2setup.md +237 -0
  78. package/docs/reference/authoring-surface/open.md +105 -0
  79. package/docs/reference/authoring-surface/openbody.md +86 -0
  80. package/docs/reference/authoring-surface/paramsof.md +143 -0
  81. package/docs/reference/authoring-surface/pool.md +186 -0
  82. package/docs/reference/authoring-surface/push.md +130 -0
  83. package/docs/reference/authoring-surface/readyof.md +21 -0
  84. package/docs/reference/authoring-surface/secret.md +139 -0
  85. package/docs/reference/authoring-surface/sentby.md +83 -0
  86. package/docs/reference/authoring-surface/source.md +51 -0
  87. package/docs/reference/authoring-surface/text.md +62 -0
  88. package/docs/reference/authoring-surface/type-agentdeclaration.md +27 -0
  89. package/docs/reference/authoring-surface/type-agentdefinition.md +80 -0
  90. package/docs/reference/authoring-surface/type-agentlogic.md +15 -0
  91. package/docs/reference/authoring-surface/type-agentslots.md +15 -0
  92. package/docs/reference/authoring-surface/type-answeraction.md +12 -0
  93. package/docs/reference/authoring-surface/type-anyframepath.md +14 -0
  94. package/docs/reference/authoring-surface/type-anyworktreepath.md +15 -0
  95. package/docs/reference/authoring-surface/type-arg.md +19 -0
  96. package/docs/reference/authoring-surface/type-argnames.md +12 -0
  97. package/docs/reference/authoring-surface/type-bindactors.md +14 -0
  98. package/docs/reference/authoring-surface/type-binding.md +61 -0
  99. package/docs/reference/authoring-surface/type-bindingof.md +12 -0
  100. package/docs/reference/authoring-surface/type-bodyacceptsdoor.md +15 -0
  101. package/docs/reference/authoring-surface/type-bodyacceptsslots.md +17 -0
  102. package/docs/reference/authoring-surface/type-ceilings.md +41 -0
  103. package/docs/reference/authoring-surface/type-chainlink.md +19 -0
  104. package/docs/reference/authoring-surface/type-chartaction.md +46 -0
  105. package/docs/reference/authoring-surface/type-chartagent.md +28 -0
  106. package/docs/reference/authoring-surface/type-chartevent.md +20 -0
  107. package/docs/reference/authoring-surface/type-chartguard.md +20 -0
  108. package/docs/reference/authoring-surface/type-chartinvoke.md +28 -0
  109. package/docs/reference/authoring-surface/type-chartjson.md +14 -0
  110. package/docs/reference/authoring-surface/type-chartstate.md +46 -0
  111. package/docs/reference/authoring-surface/type-charttext.md +40 -0
  112. package/docs/reference/authoring-surface/type-charttransition.md +22 -0
  113. package/docs/reference/authoring-surface/type-charttransitions.md +14 -0
  114. package/docs/reference/authoring-surface/type-chartvalue.md +15 -0
  115. package/docs/reference/authoring-surface/type-childat.md +12 -0
  116. package/docs/reference/authoring-surface/type-childslots.md +12 -0
  117. package/docs/reference/authoring-surface/type-commandenv.md +15 -0
  118. package/docs/reference/authoring-surface/type-commandinput.md +20 -0
  119. package/docs/reference/authoring-surface/type-commandoptions.md +56 -0
  120. package/docs/reference/authoring-surface/type-commandoutput.md +122 -0
  121. package/docs/reference/authoring-surface/type-customize.md +111 -0
  122. package/docs/reference/authoring-surface/type-dispatchdefinition.md +39 -0
  123. package/docs/reference/authoring-surface/type-dispatchinput.md +14 -0
  124. package/docs/reference/authoring-surface/type-dispatchopenparts.md +14 -0
  125. package/docs/reference/authoring-surface/type-dispatchoutput.md +72 -0
  126. package/docs/reference/authoring-surface/type-doorlessinput.md +19 -0
  127. package/docs/reference/authoring-surface/type-duration.md +15 -0
  128. package/docs/reference/authoring-surface/type-effectbinding.md +93 -0
  129. package/docs/reference/authoring-surface/type-effectlogic.md +12 -0
  130. package/docs/reference/authoring-surface/type-envopenparts.md +14 -0
  131. package/docs/reference/authoring-surface/type-eventaudience.md +27 -0
  132. package/docs/reference/authoring-surface/type-eventdef.md +45 -0
  133. package/docs/reference/authoring-surface/type-eventfrom.md +16 -0
  134. package/docs/reference/authoring-surface/type-eventsemantics.md +26 -0
  135. package/docs/reference/authoring-surface/type-execoutcome.md +34 -0
  136. package/docs/reference/authoring-surface/type-failslot.md +14 -0
  137. package/docs/reference/authoring-surface/type-failure.md +19 -0
  138. package/docs/reference/authoring-surface/type-failureinput.md +20 -0
  139. package/docs/reference/authoring-surface/type-filebody.md +37 -0
  140. package/docs/reference/authoring-surface/type-framepath.md +14 -0
  141. package/docs/reference/authoring-surface/type-frominput.md +14 -0
  142. package/docs/reference/authoring-surface/type-hostinjectedinput.md +56 -0
  143. package/docs/reference/authoring-surface/type-httpdefinition.md +104 -0
  144. package/docs/reference/authoring-surface/type-httpfileinput.md +20 -0
  145. package/docs/reference/authoring-surface/type-httpinput.md +12 -0
  146. package/docs/reference/authoring-surface/type-httpmethod.md +14 -0
  147. package/docs/reference/authoring-surface/type-httpopenparts.md +12 -0
  148. package/docs/reference/authoring-surface/type-httpoutput.md +95 -0
  149. package/docs/reference/authoring-surface/type-httprequestparts.md +33 -0
  150. package/docs/reference/authoring-surface/type-jr2config.md +126 -0
  151. package/docs/reference/authoring-surface/type-lateroutcome.md +21 -0
  152. package/docs/reference/authoring-surface/type-lends.md +38 -0
  153. package/docs/reference/authoring-surface/type-logicat.md +12 -0
  154. package/docs/reference/authoring-surface/type-markedif.md +12 -0
  155. package/docs/reference/authoring-surface/type-mergedactors.md +12 -0
  156. package/docs/reference/authoring-surface/type-namedsecret.md +25 -0
  157. package/docs/reference/authoring-surface/type-namestart.md +77 -0
  158. package/docs/reference/authoring-surface/type-noslotworkspaceoptions.md +27 -0
  159. package/docs/reference/authoring-surface/type-notworktreekeys.md +12 -0
  160. package/docs/reference/authoring-surface/type-openbodydeclaration.md +40 -0
  161. package/docs/reference/authoring-surface/type-openbodylogic.md +14 -0
  162. package/docs/reference/authoring-surface/type-openbodyoutput.md +42 -0
  163. package/docs/reference/authoring-surface/type-openbodyslot.md +18 -0
  164. package/docs/reference/authoring-surface/type-opencommandinput.md +22 -0
  165. package/docs/reference/authoring-surface/type-openeffect.md +12 -0
  166. package/docs/reference/authoring-surface/type-openeffectslots.md +12 -0
  167. package/docs/reference/authoring-surface/type-openof.md +12 -0
  168. package/docs/reference/authoring-surface/type-opensecret.md +23 -0
  169. package/docs/reference/authoring-surface/type-opensecretmark.md +12 -0
  170. package/docs/reference/authoring-surface/type-permissivenoslotworkspaceoptions.md +26 -0
  171. package/docs/reference/authoring-surface/type-permissiveworkspaceoptions.md +27 -0
  172. package/docs/reference/authoring-surface/type-poolmachine.md +28 -0
  173. package/docs/reference/authoring-surface/type-poolnextinput.md +22 -0
  174. package/docs/reference/authoring-surface/type-poolspec.md +60 -0
  175. package/docs/reference/authoring-surface/type-pushinput.md +34 -0
  176. package/docs/reference/authoring-surface/type-pushoptions.md +79 -0
  177. package/docs/reference/authoring-surface/type-pushoutput.md +149 -0
  178. package/docs/reference/authoring-surface/type-pushwireoutput.md +12 -0
  179. package/docs/reference/authoring-surface/type-quantity.md +14 -0
  180. package/docs/reference/authoring-surface/type-reached.md +12 -0
  181. package/docs/reference/authoring-surface/type-reposlot.md +70 -0
  182. package/docs/reference/authoring-surface/type-reposlotsof.md +16 -0
  183. package/docs/reference/authoring-surface/type-sandboxoptions.md +84 -0
  184. package/docs/reference/authoring-surface/type-secret.md +25 -0
  185. package/docs/reference/authoring-surface/type-sender.md +19 -0
  186. package/docs/reference/authoring-surface/type-sentbyguards.md +12 -0
  187. package/docs/reference/authoring-surface/type-size.md +85 -0
  188. package/docs/reference/authoring-surface/type-slothandles.md +24 -0
  189. package/docs/reference/authoring-surface/type-sourcenextresult.md +17 -0
  190. package/docs/reference/authoring-surface/type-sourcespec.md +44 -0
  191. package/docs/reference/authoring-surface/type-syncstate.md +12 -0
  192. package/docs/reference/authoring-surface/type-text.md +19 -0
  193. package/docs/reference/authoring-surface/type-textpart.md +24 -0
  194. package/docs/reference/authoring-surface/type-thinkinglevel.md +39 -0
  195. package/docs/reference/authoring-surface/type-toparameterizedobject.md +14 -0
  196. package/docs/reference/authoring-surface/type-toprovidedactor.md +14 -0
  197. package/docs/reference/authoring-surface/type-unknown.md +21 -0
  198. package/docs/reference/authoring-surface/type-usercontainer.md +77 -0
  199. package/docs/reference/authoring-surface/type-withoutemptyindex.md +20 -0
  200. package/docs/reference/authoring-surface/type-workflowevent.md +46 -0
  201. package/docs/reference/authoring-surface/type-workspaceaccess.md +16 -0
  202. package/docs/reference/authoring-surface/type-workspaced.md +115 -0
  203. package/docs/reference/authoring-surface/type-workspacehandles.md +22 -0
  204. package/docs/reference/authoring-surface/type-workspacemachine.md +29 -0
  205. package/docs/reference/authoring-surface/type-workspaceof.md +13 -0
  206. package/docs/reference/authoring-surface/type-workspaceoptions.md +27 -0
  207. package/docs/reference/authoring-surface/type-worktreefound.md +16 -0
  208. package/docs/reference/authoring-surface/type-worktreeinput.md +56 -0
  209. package/docs/reference/authoring-surface/type-worktreekey.md +14 -0
  210. package/docs/reference/authoring-surface/type-worktreeoptions.md +29 -0
  211. package/docs/reference/authoring-surface/type-worktreeoutput.md +45 -0
  212. package/docs/reference/authoring-surface/type-worktreepath.md +16 -0
  213. package/docs/reference/authoring-surface/type-worktreeready.md +37 -0
  214. package/docs/reference/authoring-surface/type-worktreerefused.md +21 -0
  215. package/docs/reference/authoring-surface/workspace.md +287 -0
  216. package/docs/reference/authoring-surface/worktree.md +71 -0
  217. package/docs/reference/authoring-surface.md +217 -0
  218. package/docs/reference/cli.md +433 -0
  219. package/docs/reference/config.md +765 -0
  220. package/docs/reference/decisions/0001-operator-owned-generic-sandbox.md +114 -0
  221. package/docs/reference/decisions/0002-duplex-streaming-actor.md +117 -0
  222. package/docs/reference/decisions/0004-worktree-provisioning-model.md +130 -0
  223. package/docs/reference/decisions/0005-sandbox-pod-composition.md +240 -0
  224. package/docs/reference/decisions/0006-agent-control-surface.md +50 -0
  225. package/docs/reference/decisions/0007-durable-machine-state.md +109 -0
  226. package/docs/reference/decisions/0008-orchestrator-as-deployed-app.md +60 -0
  227. package/docs/reference/decisions/0009-cli-and-instance-interface.md +275 -0
  228. package/docs/reference/decisions/0010-bdd-acceptance-tests.md +160 -0
  229. package/docs/reference/decisions/0011-workflow-defined-events.md +141 -0
  230. package/docs/reference/decisions/0012-workspace-wrapper-machine.md +103 -0
  231. package/docs/reference/decisions/0013-the-agent-reaches-its-machine-through-a-container-it-cannot-read.md +175 -0
  232. package/docs/reference/decisions/0014-observation-is-open-run-state-is-not.md +95 -0
  233. package/docs/reference/decisions/0015-authoring-surface-absorbs-the-mechanism.md +271 -0
  234. package/docs/reference/decisions/0016-agent-turn-mechanics-are-internal.md +126 -0
  235. package/docs/reference/decisions/0017-pool-over-a-source-port.md +71 -0
  236. package/docs/reference/decisions/0018-instance-agents-are-definitions-jr2-assembles-the-harness.md +111 -0
  237. package/docs/reference/decisions/0019-one-converging-command-against-the-current-context.md +287 -0
  238. package/docs/reference/decisions/0020-private-ca-trust-is-a-named-concept.md +60 -0
  239. package/docs/reference/decisions/0021-workspace-continuity-is-a-lease-that-answers-back.md +101 -0
  240. package/docs/reference/decisions/0022-observation-is-a-level-triggered-feed.md +103 -0
  241. package/docs/reference/decisions/0023-the-harness-prints-the-conversation.md +175 -0
  242. package/docs/reference/decisions/0024-an-agents-turn-ends-with-the-state-that-asked-for-it.md +436 -0
  243. package/docs/reference/decisions/0025-cancel-ends-a-run-stop-parks-it.md +65 -0
  244. package/docs/reference/decisions/0026-a-turn-that-is-over-is-never-prompted.md +62 -0
  245. package/docs/reference/decisions/0027-the-harness-is-jr2s-own-server-flue-retires-the-wire-stays.md +245 -0
  246. package/docs/reference/decisions/0028-what-an-agent-may-do-to-the-workspace-is-part-of-its-definition.md +90 -0
  247. package/docs/reference/decisions/0029-a-menu-is-fixed-for-a-conversation-and-a-turn-is-told-its-allowed-picks.md +154 -0
  248. package/docs/reference/decisions/0030-a-snapshot-names-the-machine-it-was-written-under.md +100 -0
  249. package/docs/reference/decisions/0031-menu-only-agents-run-on-the-instance-harness.md +193 -0
  250. package/docs/reference/decisions/0032-the-console-unlocks-with-the-instance-token.md +61 -0
  251. package/docs/reference/decisions/0033-a-machine-declares-the-input-that-starts-it.md +126 -0
  252. package/docs/reference/decisions/0034-the-console-renders-with-preact-and-the-server-erases-the-types.md +57 -0
  253. package/docs/reference/decisions/0035-a-runaway-turn-is-ended-rerolled-once-then-a-fault.md +92 -0
  254. package/docs/reference/decisions/0036-a-turn-compacts-its-own-context-mid-flight.md +138 -0
  255. package/docs/reference/decisions/0037-an-instance-builds-its-sandbox-images-jr2-injects-the-harness.md +196 -0
  256. package/docs/reference/decisions/0038-jr2-up-builds-every-image-it-deploys.md +170 -0
  257. package/docs/reference/decisions/0039-image-garbage-collects-by-reachability.md +115 -0
  258. package/docs/reference/decisions/0041-a-build-the-host-already-holds-is-not-spent-again.md +64 -0
  259. package/docs/reference/decisions/0042-ready-is-not-routable-an-admission-retries-its-connection.md +142 -0
  260. package/docs/reference/decisions/0043-the-kit-is-tested-as-installed-a-local-registry-stands-in-for-npm.md +170 -0
  261. package/docs/reference/decisions/0044-kit-images-live-at-a-canonical-home-a-self-host-mirrors-it.md +85 -0
  262. package/docs/reference/decisions/0045-the-platform-joins-the-image-address-and-the-cluster-chooses-it.md +82 -0
  263. package/docs/reference/decisions/0046-a-converge-failure-carries-its-diagnosis.md +34 -0
  264. package/docs/reference/decisions/0047-the-git-ssh-key-source-is-the-users-choice.md +47 -0
  265. package/docs/reference/decisions/0048-the-orchestrator-boots-without-its-repos.md +36 -0
  266. package/docs/reference/decisions/0049-a-machine-carries-its-parts-and-composes-by-invoke.md +126 -0
  267. package/docs/reference/decisions/0050-what-code-names-config-declares-what-the-cli-names-discovery-finds.md +73 -0
  268. package/docs/reference/decisions/0051-a-repo-is-a-slot-on-the-workspace-and-a-cache-on-the-node.md +238 -0
  269. package/docs/reference/decisions/0052-a-sandbox-lands-where-an-ordinary-pod-lands-and-the-cache-follows-it.md +86 -0
  270. package/docs/reference/decisions/0053-a-fetch-inside-the-pod-asks-the-node-cache-and-the-cache-asks-the-remote.md +123 -0
  271. package/docs/reference/decisions/0054-the-kit-ships-machines-and-a-shipped-machine-leaves-its-parts-open.md +126 -0
  272. package/docs/reference/decisions/0055-a-release-is-a-pushed-tag-and-the-publish-guard-is-the-credential.md +107 -0
  273. package/docs/reference/decisions/0056-a-global-jr2-hands-off-to-the-instances-own-and-an-instance-has-one-kit-version.md +62 -0
  274. package/docs/reference/decisions/0057-a-turn-is-its-frame-its-dials-and-whether-it-continues.md +152 -0
  275. package/docs/reference/decisions/0058-a-harness-answers-the-orchestrator-alone.md +108 -0
  276. package/docs/reference/decisions/0059-a-harness-holds-stand-ins-and-the-custodian-holds-the-keys.md +427 -0
  277. package/docs/reference/decisions/0060-a-workspace-states-its-size-and-jr2-reserves-all-of-it.md +111 -0
  278. package/docs/reference/decisions/0061-a-memory-kill-ends-the-agents-processes-not-the-harness.md +83 -0
  279. package/docs/reference/decisions/0062-jr2-briefs-the-agent-on-its-seat-never-on-its-task.md +239 -0
  280. package/docs/reference/decisions/0063-the-orchestrator-watches-the-cluster.md +82 -0
  281. package/docs/reference/decisions/0064-a-workspace-waits-for-capacity.md +79 -0
  282. package/docs/reference/decisions/0065-a-persist-survives-a-crash-and-history-is-a-week.md +65 -0
  283. package/docs/reference/decisions/0066-a-model-tier-runs-a-real-model-and-a-change-to-what-it-reads-runs-the-tier.md +552 -0
  284. package/docs/reference/decisions/0067-an-effect-is-an-actor-slot-and-runs-at-most-once-unless-marked-idempotent.md +458 -0
  285. package/docs/reference/decisions/0068-an-effector-holds-an-effects-secrets-and-signs-its-wire.md +475 -0
  286. package/docs/reference/decisions/0069-the-orchestrator-is-a-kit-image-and-an-instance-publishes-its-assembly.md +180 -0
  287. package/docs/reference/decisions/0070-a-machine-lends-its-parts-to-a-chart.md +334 -0
  288. package/docs/reference/decisions/0071-a-run-starts-a-run-through-a-dispatch-effect.md +183 -0
  289. package/docs/reference/decisions/0072-the-docs-ship-inside-the-kit-and-an-instances-agents-md-indexes-them.md +144 -0
  290. package/docs/reference/decisions/0073-a-machine-fails-a-run-with-fail-and-an-uncaught-failure-ends-it-failed.md +122 -0
  291. package/docs/reference/decisions/0074-an-unrouted-mechanism-event-is-refused-at-load-and-faults-the-run.md +76 -0
  292. package/docs/reference/decisions/0075-a-machine-cuts-a-worktree-and-the-workspace-only-clones.md +295 -0
  293. package/docs/reference/decisions/0076-an-agents-control-credential-lives-only-where-no-workspace-code-runs.md +320 -0
  294. package/docs/reference/decisions/0077-jr2-requires-landlock-on-every-sandbox-node.md +79 -0
  295. package/docs/reference/decisions.md +86 -0
  296. package/docs/reference/glossary.md +687 -0
  297. package/docs/reference/http-api.md +1386 -0
  298. package/docs/reference/machines.md +189 -0
  299. package/docs/reference/mechanism-events.md +72 -0
  300. package/docs/why.md +207 -0
  301. package/package.json +5 -3
  302. package/src/actor.ts +694 -106
  303. package/src/agent.ts +114 -38
  304. package/src/ambient.ts +3 -4
  305. package/src/assembly-checks.ts +189 -7
  306. package/src/cause.ts +234 -0
  307. package/src/chart.ts +345 -46
  308. package/src/charts.ts +43 -8
  309. package/src/config.ts +440 -178
  310. package/src/custodian.lua +17 -5
  311. package/src/custodian.ts +325 -99
  312. package/src/customize.ts +199 -49
  313. package/src/dispatch-effect.ts +945 -0
  314. package/src/door-compat.ts +217 -0
  315. package/src/durability.ts +11 -4
  316. package/src/effect-checks.ts +50 -3
  317. package/src/effect.ts +641 -128
  318. package/src/effector-wire.ts +165 -13
  319. package/src/fail.ts +222 -0
  320. package/src/harness-client.ts +587 -50
  321. package/src/harness-env.ts +33 -0
  322. package/src/held-secrets.ts +125 -16
  323. package/src/holds.ts +3 -0
  324. package/src/http-effect.ts +556 -58
  325. package/src/http.ts +480 -30
  326. package/src/index.ts +74 -82
  327. package/src/instance.ts +68 -8
  328. package/src/internal.ts +85 -0
  329. package/src/kube-client.ts +6 -3
  330. package/src/machine-doc.ts +24 -7
  331. package/src/mechanism-routes.ts +168 -0
  332. package/src/model-keys.generated.ts +53 -0
  333. package/src/model-keys.ts +42 -58
  334. package/src/names.ts +19 -6
  335. package/src/notices.ts +483 -41
  336. package/src/open-body.ts +242 -40
  337. package/src/open-effect.ts +81 -8
  338. package/src/open.ts +90 -6
  339. package/src/parts.ts +213 -30
  340. package/src/party.ts +101 -2
  341. package/src/pick.ts +497 -11
  342. package/src/pool.ts +282 -50
  343. package/src/registration.ts +133 -12
  344. package/src/repo-identity.ts +7 -3
  345. package/src/repos.ts +22 -3
  346. package/src/run-host.ts +665 -45
  347. package/src/run-output.ts +38 -0
  348. package/src/sandbox-effect.ts +457 -71
  349. package/src/sandbox-kube.ts +66 -17
  350. package/src/secret-placement.ts +59 -17
  351. package/src/server.ts +3 -0
  352. package/src/setup.ts +325 -62
  353. package/src/size.ts +121 -9
  354. package/src/snapshot-store.ts +54 -10
  355. package/src/stub-harness.ts +44 -16
  356. package/src/timers.ts +14 -1
  357. package/src/tokens.ts +107 -32
  358. package/src/vocabulary.ts +88 -14
  359. package/src/wire.ts +100 -26
  360. package/src/workspace.ts +771 -238
  361. package/src/worktree.ts +249 -0
@@ -0,0 +1,349 @@
1
+ ---
2
+ title: Watch a run
3
+ description: "See where a run is and what its Agents do: in the CLI, in the Console, and in the pod log."
4
+ ---
5
+
6
+ # Watch a run
7
+
8
+ See where a run is and what its [Agents](../reference/glossary.md#agent) do, in the CLI, the
9
+ [Console](../reference/glossary.md#console) and the pod log of an Agent.
10
+
11
+ The CLI shows the status of a run: where its [Machine](../reference/glossary.md#machine) is, its context, and its open
12
+ [Gates](../reference/glossary.md#gate). The Console shows where the Machine is and, with the Instance token, the open
13
+ Gates. The pod log shows the conversation of each Agent: its prompts, its text, and its calls.
14
+
15
+ The examples on this page use a run of the [Workflow](../reference/glossary.md#workflow) `release`. Its Gate `review`
16
+ waits for `approve` or `reject`. [Answer a Gate](answer-a-gate.md) gives the file `workflows/release.ts`. In the
17
+ commands, replace these values:
18
+
19
+ - `<namespace>`: the namespace of your [Instance](../reference/glossary.md#instance). It is the
20
+ [`name`](../reference/config.md#name) in `jr2.config.ts`. When `jr2.config.ts` sets no `name`, it is the name of the
21
+ Instance folder.
22
+ - `<run id>`: the run id, or its first 4 characters or more. `jr2 run` prints the run id in the line
23
+ `run <run id> (<workflow>) — attached`. `kubectl` and the HTTP routes need the full run id.
24
+
25
+ Give each `jr2` command in the Instance folder.
26
+
27
+ ## Start a run to watch
28
+
29
+ Start a run of `release` with `--detach`. `jr2 run` prints the run id and returns, and the run waits at the Gate:
30
+
31
+ ```sh
32
+ jr2 run release --input '{"version":"2.0.0"}' --detach
33
+ ```
34
+
35
+ ```text
36
+ → context <context> / namespace <namespace>
37
+ {"runId":"a2d8b5b5-645c-44d2-8175-a949493e2320"}
38
+ ```
39
+
40
+ Your run ids, instance ids and `assembly` hash are different from the values on this page.
41
+
42
+ ## List the live runs
43
+
44
+ Run [`jr2 runs`](../reference/cli.md#runs):
45
+
46
+ ```sh
47
+ jr2 runs
48
+ ```
49
+
50
+ ```text
51
+ → context <context> / namespace <namespace>
52
+ workflows:
53
+ ping (machine)
54
+ release (machine)
55
+ [{"runId":"a2d8b5b5-645c-44d2-8175-a949493e2320","workflow":"release","instanceId":"6242963e-76d0-4acd-ac86-09359a29912f","status":"active","value":"review","context":{"version":"2.0.0"},"children":[],"waiting":[],"held":[],"assembly":"28c844453c20"}]
56
+ ```
57
+
58
+ `jr2 runs` prints a JSON array of the runs that did not end. On stderr, it first lists the Workflows that a run can
59
+ start, each with where it comes from: `machine`, `chart file` or `chart`. A Chart wrapper lists its named Charts under
60
+ it. `jr2 runs --workflows` prints that list as the JSON result. To read a run that ended, use `jr2 status <run id>`. A
61
+ run with a [Workspace](../reference/glossary.md#workspace) that waits for capacity also has `placing`: the path of each
62
+ such Workspace in the run. `jr2 status` tells why it waits. A run that a `dispatch`
63
+ [Effect](../reference/glossary.md#effect) started has `dispatchedBy` after its id: the run that started it, the slot of
64
+ the Effect, the id of the Effect (`effect`), and its `depth` in the chain.
65
+ [Start a run from a run](start-a-run-from-a-run.md) shows it.
66
+
67
+ ## Read the status of a run
68
+
69
+ Run [`jr2 status`](../reference/cli.md#status) with the run id. It reads a run that ended too:
70
+
71
+ ```sh
72
+ jr2 status a2d8
73
+ ```
74
+
75
+ ```text
76
+ → context <context> / namespace <namespace>
77
+ {"runId":"a2d8b5b5-645c-44d2-8175-a949493e2320","workflow":"release","instanceId":"6242963e-76d0-4acd-ac86-09359a29912f","status":"active","value":"review","context":{"version":"2.0.0"},"children":[],"waiting":[],"held":[],"assembly":"28c844453c20","gates":[{"gate":"review","path":["review"],"accepts":[{"name":"approve","description":"Release this version.","input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false}},{"name":"reject","description":"Do not release this version. Say why.","input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reason":{"type":"string"}},"required":["reason"],"additionalProperties":false}}],"acceptsNow":["approve","reject"],"meta":{"version":"2.0.0"}}]}
78
+ ```
79
+
80
+ The status is a [`RunStatus`](../reference/http-api.md#type-runstatus), with the open Gates of the run:
81
+
82
+ | Field | What it holds |
83
+ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
84
+ | `status` | `active` while the run continues. `done`, `failed`, `error` or `cancelled` when it ended. `drifted` when jr2 did not continue it. |
85
+ | `value` | The state of the root Machine. |
86
+ | `context` | The context of the root Machine. |
87
+ | `children` | The Machines that the run invokes now, such as its Workspaces, each with its state. |
88
+ | `waiting` | Each Workspace that waits for capacity: what it waits for, since when, and the words of the scheduler or the quota. |
89
+ | `held` | Each [outstanding](../reference/glossary.md#outstanding) pick of an Agent: the Agent, the pick, and since when. |
90
+ | `fault` | The error, when the status is `error`. |
91
+ | `output` | The output of the Machine, when the run ended. For `failed`, the Failure: `{ reason, detail? }`. |
92
+ | `reason` | Why jr2 set the status, when the Machine did not set it, such as `drifted`. |
93
+ | `assembly` | The hash of the [Assembly](../reference/glossary.md#assembly) that the run started under, and holds. |
94
+ | `gates` | Each open Gate. [Answer a Gate](answer-a-gate.md) explains its fields. |
95
+ | `worktrees` | Each [Worktree](../reference/glossary.md#worktree) that the run cut: its `slot`, its `path`, and its `branch`, which is `null` when the Worktree is detached. |
96
+
97
+ For a run that cut a Worktree, `jr2 status` also prints one line on stderr for each cut:
98
+ `worktree: <path> (<slot>), branch <branch>`, or `worktree: <path> (<slot>), detached`. jr2 reads each line from the
99
+ record of the cut, so these lines do not change when an Agent changes the branch in the Worktree.
100
+
101
+ [Durable runs](../concepts/durable-runs.md) tells how long jr2 keeps a run that ended.
102
+
103
+ `jr2 status` with no run id does not read a run. It prints the current Assembly, each Assembly that a live run holds,
104
+ and the [Repos](../reference/glossary.md#repo) of the Instance.
105
+
106
+ ## Follow a run
107
+
108
+ Run [`jr2 logs`](../reference/cli.md#logs) with `-f`. It prints the status now, then each change, until the run ends:
109
+
110
+ ```sh
111
+ jr2 logs -f a2d8
112
+ ```
113
+
114
+ While `jr2 logs -f` runs, send `approve` to the Gate in a second terminal:
115
+
116
+ ```sh
117
+ jr2 send a2d8 --gate review --event approve
118
+ ```
119
+
120
+ The run ends. `jr2 logs -f` prints the status when it attached, then the last status, and stops:
121
+
122
+ ```text
123
+ → context <context> / namespace <namespace>
124
+ {"runId":"a2d8b5b5-645c-44d2-8175-a949493e2320","workflow":"release","instanceId":"6242963e-76d0-4acd-ac86-09359a29912f","status":"active","value":"review","context":{"version":"2.0.0"},"children":[],"waiting":[],"held":[],"assembly":"28c844453c20"}
125
+ {"runId":"a2d8b5b5-645c-44d2-8175-a949493e2320","workflow":"release","instanceId":"6242963e-76d0-4acd-ac86-09359a29912f","status":"done","value":"released","context":{"version":"2.0.0"},"children":[],"waiting":[],"held":[],"assembly":"28c844453c20"}
126
+ ```
127
+
128
+ When the run ended before you attach, `jr2 logs -f` prints only its last status. Without `-f`, `jr2 logs` prints the
129
+ status now, and stops. `jr2 logs` exits with `0` when it reads the run, also when the run ended with the status `error`.
130
+ Read `status` in the last line.
131
+
132
+ `jr2 logs` prints each status as one JSON line on stdout. It prints the other activity of the run on stderr, one line
133
+ for each item of activity:
134
+
135
+ | Line | What happened |
136
+ | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
137
+ | `emit <emit>` | The Machine sent an [Emit](../reference/glossary.md#emit). `<emit>` is its JSON. |
138
+ | `retry <child> attempt <n> (<reason>)` | jr2 tries a [Turn](../reference/glossary.md#turn) of an Agent again. `<child>` names its Machine. `<reason>` says why. |
139
+ | `placing <child>: waits for a node — <message>` | The [Sandbox](../reference/glossary.md#sandbox) of a Workspace waits for a node. With a quota, the line says `waits for quota`. |
140
+ | `placed <child> after <n>s` | The Sandbox got its node after `<n>` seconds. |
141
+ | ``child-error: `<child>` failed below <agent>'s pick `<pick>` — <error>`` | A child that an Agent's pick started failed. The Agent does not get this error. |
142
+
143
+ A line about the root Workspace of the run has no `<child>`. `jr2 run` prints the same lines, with two spaces before
144
+ each line. It prints each change of status as `→ <status> <state>`.
145
+
146
+ ## Watch in the Console
147
+
148
+ [Open the Console](open-the-console.md) tells how to open it. With no token, the Console shows each run and its state:
149
+
150
+ - The Fleet rail on the left lists each Workflow. Click the name of a Workflow, or click `▸` beside it, to see its runs.
151
+ Each run shows the first 8 characters of its id and its status.
152
+ - Click a run. The diagram of its Machine shows the states that the run is in now.
153
+ - The `Activity` tab in the drawer lists the Emits of the runs of the Workflow that you selected. Each Emit shows the
154
+ first 8 characters of the run id, and only the type of the Emit.
155
+
156
+ To see more, type the Instance token in the `instance token` box in the nav. Push Enter. When the badge beside the box
157
+ shows `live`:
158
+
159
+ - In the Fleet rail, `⚑` and a number show the open Gates of each run.
160
+ - The `Attention` tab shows the open Gates, and you can answer them. See [Answer a Gate](answer-a-gate.md).
161
+ - For the run that you selected, the Console shows each Workspace that waits for capacity, and why. It also shows each
162
+ outstanding pick of an Agent, and since when.
163
+ - For a run that you selected that ended `failed`, the Console shows the reason of its
164
+ [Failure](../reference/glossary.md#failure): `failed: <reason>`, as `jr2 status` shows it. With no token, the rail
165
+ shows only the status `failed`, in orange.
166
+
167
+ ## Watch from a program
168
+
169
+ The [Orchestrator](../reference/glossary.md#orchestrator) sends the activity of a run as Server-Sent Events. A program
170
+ can read them:
171
+
172
+ | Route | Token | What it sends |
173
+ | ---------------------------------------------------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------------------------- |
174
+ | [`GET /runs/:runId/events`](../reference/http-api.md#get-runs-runid-events) | Instance token | The full status of one run, its Emits, and its other activity, until it ends. |
175
+ | [`GET /workflows/:name/runs/:runId/events`](../reference/http-api.md#get-workflows-name-runs-runid-events) | none | The state of one live run, and the type of each Emit, with no context. |
176
+ | [`GET /workflows/:name/events`](../reference/http-api.md#get-workflows-name-events) | none | A `runs` event with all the live runs, then the same events for each run. It stays open. |
177
+
178
+ The run of the steps above ended, and a feed of one run sends only a live run. Start a new run:
179
+
180
+ ```sh
181
+ jr2 run release --input '{"version":"2.0.0"}' --detach
182
+ ```
183
+
184
+ ```text
185
+ → context <context> / namespace <namespace>
186
+ {"runId":"2a009f09-13d4-44ba-9e17-fd665acc7aa8"}
187
+ ```
188
+
189
+ To read its feed, forward a port to the Orchestrator, as [Start a run](start-a-run.md#start-a-run-with-the-http-api)
190
+ shows. Then use the full run id of the new run:
191
+
192
+ ```sh
193
+ curl -s -N http://localhost:4000/workflows/release/runs/<run id>/events
194
+ ```
195
+
196
+ While `curl` runs, send `approve` to the Gate in a second terminal:
197
+
198
+ ```sh
199
+ jr2 send <run id> --gate review --event approve
200
+ ```
201
+
202
+ The feed sends the status when you attached, then the last status, and closes:
203
+
204
+ ```text
205
+ event: status
206
+ data: {"runId":"2a009f09-13d4-44ba-9e17-fd665acc7aa8","workflow":"release","status":"active","value":"review","children":[]}
207
+
208
+ event: status
209
+ data: {"runId":"2a009f09-13d4-44ba-9e17-fd665acc7aa8","workflow":"release","status":"done","value":"released","children":[]}
210
+ ```
211
+
212
+ The first event is the status when you attach. The feed of one run closes when the run ends. While the run waits, the
213
+ feed also sends a comment line, `:`, at intervals, to keep the connection open.
214
+
215
+ ## Read an Agent's conversation
216
+
217
+ The [Harness](../reference/glossary.md#harness) that runs an Agent's Turn prints the conversation to the log of its
218
+ container, `harness`. Read it with `kubectl logs`. Add `-f` to follow it.
219
+
220
+ For a [Menu](../reference/glossary.md#menu)-only Agent, an Agent with `workspace: "none"`, read the log of the
221
+ [Instance Harness](../reference/glossary.md#instance-harness):
222
+
223
+ ```sh
224
+ kubectl -n <namespace> logs -f statefulset/jr2-instance-harness -c harness
225
+ ```
226
+
227
+ The Instance Harness runs the Turns of all the Menu-only Agents of the Instance. Thus its log can hold the lines of more
228
+ than one run. Each line of a conversation holds its Instance ID, which starts with the run id. To read the lines of one
229
+ run, keep the lines that hold `[<run id>/`:
230
+
231
+ ```sh
232
+ kubectl -n <namespace> logs statefulset/jr2-instance-harness -c harness | grep -F '[<run id>/'
233
+ ```
234
+
235
+ For an Agent that works in a Workspace, read the log of its Sandbox. Find the Sandbox with the full run id, as
236
+ [Look inside a Sandbox](look-inside-a-sandbox.md) shows. The pod has the name of the Sandbox:
237
+
238
+ ```sh
239
+ kubectl -n <namespace> get sandboxes -l jr2.dev/run=<run id>
240
+ kubectl -n <namespace> logs -f <sandbox> -c harness
241
+ ```
242
+
243
+ For example, this is the log of a run of the `task` Workflow of
244
+ [An Agent in a Sandbox](../get-started/an-agent-in-a-sandbox.md), with the prompt
245
+ ``In docs/intro/repo, run `node bin/greet.js`. Then finish, with what it printed.``:
246
+
247
+ ```text
248
+ jr2 harness serving on :8080
249
+ [run] [status] running · body: cutting
250
+ [run] [status] running · body: cutting
251
+ [run] [status] running · body: working
252
+ [run] [status] running · body: working
253
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] [prompt] In docs/intro/repo, run `node bin/greet.js`. Then finish, with what it printed.
254
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder]
255
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] Work in /work/target/task, on branch jr2/task-84f810c8-dda7-4577-a57e-4a09a4e7f507 — your tools are rooted there, so a relative path lands inside it. Commit what you do there, then call finish.
256
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder]
257
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] <jr2-turn>
258
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] Working directory: /work/target/task
259
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] Allowed now: `mcp__jr2__finish`.
260
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] </jr2-turn>
261
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] [thinking] The user wants me to:
262
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] 1. Run `node bin/greet.js` from the `docs/intro/repo` directory within the worktree
263
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] 2. Report what it printed
264
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] 3. Commit my work and call finish
265
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder]
266
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] Let me first run the command.
267
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder]
268
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] [text]
269
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder]
270
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder]
271
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] [bash] cd /work/target/task && node docs/intro/repo/bin/greet.js
272
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] [thinking] The command printed "hello, world". Now I need to finish with that information.
273
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder]
274
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] [text]
275
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder]
276
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder]
277
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] [finish] {"summary":"Ran `node bin/greet.js` from docs/intro/repo. It printed: hello, world"}
278
+ [coder] [9501dd2f-95ba-479b-b384-307c736a8aad/body/coder] [finish answer] Delivered "finish" to the workflow (delivery 1b61fa16-50b7-4202-b7ed-b46a6ead5930). The workflow consumed it and moved on: your turn is over.
279
+ [run] [status] running · body: review
280
+ [run] [status] running · body: review
281
+ ```
282
+
283
+ The thinking, the calls and the text are the words of the model, so your log is different. Your ids are different too.
284
+
285
+ Each line of a conversation starts with the name of the Agent in brackets, then the
286
+ [Instance ID](../reference/glossary.md#instance-id) of the conversation in brackets. The Instance ID starts with the run
287
+ id. The first line of each message then has a label in brackets. The next lines of the same message have no label:
288
+
289
+ | Line | What it shows |
290
+ | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
291
+ | `[<agent>] [<iid>] [prompt] <text>` | A message that the model reads: the prompt of the Turn, or a message that jr2 adds to the Turn. |
292
+ | `[<agent>] [<iid>] [thinking] <text>` | The thinking of the model. |
293
+ | `[<agent>] [<iid>] [text] <text>` | The text of the model. |
294
+ | `[<agent>] [<iid>] [<call>] <input>` | A call of a [Working tool](../reference/glossary.md#working-tools), or a pick from the Menu. `<input>` is a path for read, write and edit, the command for `bash`, or else JSON. |
295
+ | `[<agent>] [<iid>] [<pick> answer] <text>` | The answer that the model got for a pick from its Menu. |
296
+ | `[<agent>] [<iid>] [<pick> error] <text>` | An answer to a pick that the model reads as an error, such as a refusal. |
297
+ | `[<agent>] [<iid>] [compacted] <text>` | The Harness made the context of the conversation smaller: `context <before> → ~<after> tokens (window <window>)`. |
298
+ | `[<agent>] [<iid>] [thinking level] <text>` | The model has no thinking level of the name that the Turn asked for, and the line names the level that the model ran at. The Harness prints it one time for each Turn. |
299
+
300
+ The log of a Sandbox also tells the story of its run, in lines that start with `[run]`. `[run] [status] <state>` gives
301
+ the state of the run, then the state of each Machine that it invokes, separated by `·`, such as
302
+ `running · body: working`. When the run ends, the line gives its status. `[run] [emit] <type> <payload>` gives an Emit.
303
+ A Turn that runs in a different Harness shows only as `[<agent>] [admitted] <prompt>` and
304
+ `[<agent>] [pick] <pick> <input>`. `<input>` is the JSON of the input of the pick, and it is absent for a pick with no
305
+ input. The lines of the story of the run have no Instance ID.
306
+
307
+ The Harness does not print the result of a Working tool. For example, it does not print the text of a file that the
308
+ Agent read, or the output of a command that the Agent ran.
309
+
310
+ The Harness cuts an input that is longer than 2000 characters at its end, and marks the cut with `…`. It cuts a long
311
+ answer to a pick in its middle, and marks the cut with `… [<n> characters cut] …`. The model reads the full text. The
312
+ Harness cuts only the log.
313
+
314
+ The log of a Sandbox goes away with its pod. The Workspace deletes its Sandbox when its body gets to its final state,
315
+ and when a [Failure](../reference/glossary.md#failure) goes up through it. `jr2 send <run id> --event CANCEL` without
316
+ `--keep` also deletes it. To keep the log, save it before then:
317
+
318
+ ```sh
319
+ kubectl -n <namespace> logs <sandbox> -c harness > <file>
320
+ ```
321
+
322
+ > **Caution**
323
+ >
324
+ > A person who can read the pod logs of the namespace can read each conversation, and the answers that jr2 gives to the
325
+ > picks. An answer can hold the output of a [`command`](../reference/authoring-surface/command.md) Effect. On a shared
326
+ > cluster, decide who can read the pod logs.
327
+
328
+ ## Rules
329
+
330
+ - A run id prefix of fewer than 4 characters is a usage error. The command exits with `2`:
331
+ `jr2: run id "<prefix>" is too short (need 4+ characters)`
332
+ - A prefix that no run id starts with is an error. The command exits with `1`: `no run "<prefix>"`
333
+ - A prefix that more than one run id starts with is an error. The command lists the run ids, and exits with `1`:
334
+ `error: run id "<prefix>" is ambiguous`
335
+ - `GET /runs/:runId/events` refuses a call without the Instance token, with the status code `401`: `unauthorized`.
336
+ - `GET /workflows/:name/runs/:runId/events` sends only a live run of that Workflow. For a different run, it refuses with
337
+ the status code `404`: `no live run "<run id>" of "<workflow>"`
338
+
339
+ ## Read next
340
+
341
+ - [Durable runs](../concepts/durable-runs.md)
342
+ - [ADR-0009](../reference/decisions/0009-cli-and-instance-interface.md): `jr2 runs`, `jr2 status`, `jr2 logs`, and run
343
+ id prefixes.
344
+ - [ADR-0014](../reference/decisions/0014-observation-is-open-run-state-is-not.md): what the Console and the feeds show
345
+ without the token.
346
+ - [ADR-0022](../reference/decisions/0022-observation-is-a-level-triggered-feed.md): the feeds.
347
+ - [ADR-0023](../reference/decisions/0023-the-harness-prints-the-conversation.md): the conversation in the pod log.
348
+ - [Architecture](../concepts/architecture.md): the Harness and the Instance Harness.
349
+ - [Look inside a Sandbox](look-inside-a-sandbox.md)