@ours.network/fleet 1.2.0-nightly.9 → 2.0.1

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 (429) hide show
  1. package/README.md +280 -68
  2. package/dist/account-origin.d.ts +5 -0
  3. package/dist/account-origin.js +31 -0
  4. package/dist/agent-ours/bridge.js +26 -9
  5. package/dist/agent-ours/correspondence.d.ts +10 -0
  6. package/dist/agent-ours/correspondence.js +1 -0
  7. package/dist/agent-ours/file-rpc.d.ts +12 -0
  8. package/dist/agent-ours/file-rpc.js +18 -4
  9. package/dist/agent-ours/harness.js +9 -1
  10. package/dist/agent-ours/mcp-endpoint.d.ts +22 -0
  11. package/dist/agent-ours/mcp-endpoint.js +101 -25
  12. package/dist/agent-ours/runtime.d.ts +9 -1
  13. package/dist/agent-ours/runtime.js +50 -2
  14. package/dist/agent-ours/service.d.ts +27 -1
  15. package/dist/agent-ours/service.js +107 -13
  16. package/dist/application/codex-models.d.ts +15 -0
  17. package/dist/application/codex-models.js +56 -0
  18. package/dist/application/conversation-history.d.ts +31 -0
  19. package/dist/application/conversation-history.js +339 -0
  20. package/dist/application/conversation-role-observer.d.ts +62 -0
  21. package/dist/application/conversation-role-observer.js +206 -0
  22. package/dist/application/fleet-query-service.d.ts +1 -1
  23. package/dist/application/fleet-query-service.js +3 -3
  24. package/dist/application/log-service.js +8 -8
  25. package/dist/application/model-catalog.d.ts +1 -1
  26. package/dist/application/model-catalog.js +5 -2
  27. package/dist/application/preset-provenance.d.ts +19 -0
  28. package/dist/application/preset-provenance.js +59 -0
  29. package/dist/application/resource-observer.d.ts +43 -0
  30. package/dist/application/resource-observer.js +323 -0
  31. package/dist/application/role-creation-service.js +3 -2
  32. package/dist/application/role-removal-service.js +17 -3
  33. package/dist/application/role-repository.d.ts +3 -1
  34. package/dist/application/role-repository.js +89 -54
  35. package/dist/application/room-layout-definitions.d.ts +45 -0
  36. package/dist/application/room-layout-definitions.js +130 -0
  37. package/dist/application/session-control.d.ts +63 -17
  38. package/dist/application/session-control.js +221 -23
  39. package/dist/application/supervisor-ours-tools.js +5 -11
  40. package/dist/application/task-layouts.d.ts +91 -0
  41. package/dist/application/task-layouts.js +261 -0
  42. package/dist/application/task-room-service.d.ts +101 -3
  43. package/dist/application/task-room-service.js +286 -33
  44. package/dist/application/types.d.ts +2 -0
  45. package/dist/atomic-file.d.ts +34 -1
  46. package/dist/atomic-file.js +161 -18
  47. package/dist/briefing.d.ts +5 -1
  48. package/dist/briefing.js +138 -31
  49. package/dist/build-info.json +10 -5
  50. package/dist/capabilities.d.ts +9 -1
  51. package/dist/capabilities.js +13 -0
  52. package/dist/cli.js +391 -38
  53. package/dist/client-profile.d.ts +5 -17
  54. package/dist/client-profile.js +4 -127
  55. package/dist/config.d.ts +45 -0
  56. package/dist/config.js +57 -6
  57. package/dist/creation.d.ts +1 -1
  58. package/dist/creation.js +4 -4
  59. package/dist/daemon-recovery.d.ts +14 -9
  60. package/dist/daemon-recovery.js +124 -115
  61. package/dist/docs.d.ts +1 -1
  62. package/dist/docs.js +402 -20
  63. package/dist/doctor.d.ts +4 -1
  64. package/dist/doctor.js +75 -60
  65. package/dist/erased-resources.d.ts +9 -0
  66. package/dist/erased-resources.js +87 -0
  67. package/dist/file-delivery/reader.d.ts +15 -0
  68. package/dist/file-delivery/reader.js +63 -0
  69. package/dist/file-delivery/store.d.ts +15 -0
  70. package/dist/file-delivery/store.js +124 -0
  71. package/dist/file-delivery/types.d.ts +19 -0
  72. package/dist/file-delivery/types.js +1 -0
  73. package/dist/fleet-command-audit.d.ts +13 -0
  74. package/dist/fleet-command-audit.js +31 -9
  75. package/dist/harness/agent-session.d.ts +4 -0
  76. package/dist/harness/claude-code-session.js +1 -1
  77. package/dist/harness/claude-code.js +21 -11
  78. package/dist/harness/claude-runtime.d.ts +12 -0
  79. package/dist/harness/claude-runtime.js +43 -0
  80. package/dist/harness/codex-app-server-proxy.d.ts +4 -1
  81. package/dist/harness/codex-app-server-proxy.js +41 -5
  82. package/dist/harness/codex-reasoning.d.ts +5 -0
  83. package/dist/harness/codex-reasoning.js +12 -0
  84. package/dist/harness/codex-runtime.d.ts +11 -1
  85. package/dist/harness/codex-runtime.js +31 -4
  86. package/dist/harness/codex-session.js +2 -2
  87. package/dist/harness/codex.js +24 -12
  88. package/dist/init-wizard.d.ts +2 -0
  89. package/dist/init-wizard.js +38 -19
  90. package/dist/isolation/policy.js +6 -1
  91. package/dist/isolation/types.d.ts +5 -0
  92. package/dist/managed-cli.d.ts +253 -0
  93. package/dist/managed-cli.js +923 -0
  94. package/dist/managed-recovery.d.ts +13 -0
  95. package/dist/managed-recovery.js +31 -0
  96. package/dist/minimal-setup.d.ts +2 -0
  97. package/dist/minimal-setup.js +44 -0
  98. package/dist/monitor.d.ts +9 -34
  99. package/dist/monitor.js +90 -153
  100. package/dist/notifications/fleet-producer.d.ts +31 -0
  101. package/dist/notifications/fleet-producer.js +351 -0
  102. package/dist/notifications/outbox.d.ts +59 -0
  103. package/dist/notifications/outbox.js +199 -0
  104. package/dist/notifications/target-cleanup.d.ts +16 -0
  105. package/dist/notifications/target-cleanup.js +75 -0
  106. package/dist/notifications/task-producer.d.ts +20 -0
  107. package/dist/notifications/task-producer.js +100 -0
  108. package/dist/ops.d.ts +2 -0
  109. package/dist/ops.js +20 -3
  110. package/dist/owner-channel/channel.js +17 -6
  111. package/dist/owner-channel/commands.d.ts +4 -0
  112. package/dist/owner-channel/commands.js +8 -0
  113. package/dist/owner-channel/lifecycle-outbox.js +4 -3
  114. package/dist/owner-channel/ours-client.js +2 -17
  115. package/dist/paths.d.ts +5 -0
  116. package/dist/paths.js +5 -0
  117. package/dist/preset-migration.js +55 -0
  118. package/dist/process-incarnation.d.ts +23 -0
  119. package/dist/process-incarnation.js +42 -0
  120. package/dist/reminders/manager.d.ts +75 -0
  121. package/dist/reminders/manager.js +278 -0
  122. package/dist/reminders/runtime.d.ts +27 -0
  123. package/dist/reminders/runtime.js +32 -0
  124. package/dist/reminders/schedule.d.ts +37 -0
  125. package/dist/reminders/schedule.js +104 -0
  126. package/dist/reminders/store.d.ts +341 -0
  127. package/dist/reminders/store.js +762 -0
  128. package/dist/reminders/tools.d.ts +20 -0
  129. package/dist/reminders/tools.js +114 -0
  130. package/dist/resolved-plan.js +1 -0
  131. package/dist/rooms-tasks/add-member.d.ts +48 -0
  132. package/dist/rooms-tasks/add-member.js +84 -0
  133. package/dist/rooms-tasks/archived-absence.d.ts +4 -0
  134. package/dist/rooms-tasks/archived-absence.js +11 -0
  135. package/dist/rooms-tasks/cli.js +182 -5
  136. package/dist/rooms-tasks/close.d.ts +5 -2
  137. package/dist/rooms-tasks/close.js +224 -36
  138. package/dist/rooms-tasks/config.d.ts +1 -1
  139. package/dist/rooms-tasks/config.js +11 -4
  140. package/dist/rooms-tasks/cowork-adapter.d.ts +12 -5
  141. package/dist/rooms-tasks/cowork-adapter.js +15 -121
  142. package/dist/rooms-tasks/cowork-http.js +56 -6
  143. package/dist/rooms-tasks/deletion.d.ts +1 -1
  144. package/dist/rooms-tasks/deletion.js +66 -10
  145. package/dist/rooms-tasks/erasure.d.ts +6 -0
  146. package/dist/rooms-tasks/erasure.js +173 -0
  147. package/dist/rooms-tasks/external-worker.d.ts +1 -1
  148. package/dist/rooms-tasks/external-worker.js +3 -4
  149. package/dist/rooms-tasks/layout-binding-client.d.ts +11 -0
  150. package/dist/rooms-tasks/layout-binding-client.js +56 -0
  151. package/dist/rooms-tasks/layout-binding-grants.d.ts +21 -0
  152. package/dist/rooms-tasks/layout-binding-grants.js +128 -0
  153. package/dist/rooms-tasks/layout-cli.d.ts +4 -0
  154. package/dist/rooms-tasks/layout-cli.js +107 -0
  155. package/dist/rooms-tasks/layout-config.d.ts +11 -0
  156. package/dist/rooms-tasks/layout-config.js +89 -0
  157. package/dist/rooms-tasks/layout-control.d.ts +21 -0
  158. package/dist/rooms-tasks/layout-control.js +52 -0
  159. package/dist/rooms-tasks/layout-member-retirement.d.ts +10 -0
  160. package/dist/rooms-tasks/layout-member-retirement.js +90 -0
  161. package/dist/rooms-tasks/layout-service.d.ts +43 -0
  162. package/dist/rooms-tasks/layout-service.js +203 -0
  163. package/dist/rooms-tasks/layout.d.ts +121 -0
  164. package/dist/rooms-tasks/layout.js +286 -0
  165. package/dist/rooms-tasks/legacy-task-member.d.ts +19 -0
  166. package/dist/rooms-tasks/legacy-task-member.js +116 -0
  167. package/dist/rooms-tasks/live-readiness.d.ts +18 -0
  168. package/dist/rooms-tasks/live-readiness.js +85 -0
  169. package/dist/rooms-tasks/member-ownership.d.ts +5 -0
  170. package/dist/rooms-tasks/member-ownership.js +40 -0
  171. package/dist/rooms-tasks/member-startup.d.ts +1 -0
  172. package/dist/rooms-tasks/member-startup.js +2 -0
  173. package/dist/rooms-tasks/provision.d.ts +3 -0
  174. package/dist/rooms-tasks/provision.js +101 -49
  175. package/dist/rooms-tasks/recovery.d.ts +19 -0
  176. package/dist/rooms-tasks/recovery.js +110 -0
  177. package/dist/rooms-tasks/room-state.d.ts +4 -2
  178. package/dist/rooms-tasks/room-state.js +47 -8
  179. package/dist/rooms-tasks/task-review.d.ts +113 -0
  180. package/dist/rooms-tasks/task-review.js +561 -0
  181. package/dist/rooms-tasks/task-service-retirement.d.ts +11 -0
  182. package/dist/rooms-tasks/task-service-retirement.js +21 -0
  183. package/dist/rooms-tasks/task-state.d.ts +51 -5
  184. package/dist/rooms-tasks/task-state.js +358 -50
  185. package/dist/rooms-tasks/task-tools.d.ts +35 -0
  186. package/dist/rooms-tasks/task-tools.js +134 -0
  187. package/dist/rooms-tasks/types.d.ts +78 -0
  188. package/dist/rooms-tasks/workspace-artifacts.d.ts +6 -0
  189. package/dist/rooms-tasks/workspace-artifacts.js +93 -0
  190. package/dist/rooms-tasks/workspace.d.ts +35 -0
  191. package/dist/rooms-tasks/workspace.js +325 -0
  192. package/dist/runner.d.ts +23 -4
  193. package/dist/runner.js +409 -61
  194. package/dist/session/acp.d.ts +75 -2
  195. package/dist/session/acp.js +345 -82
  196. package/dist/session/arbiter.d.ts +98 -0
  197. package/dist/session/arbiter.js +272 -3
  198. package/dist/session/codex-app-server.d.ts +45 -1
  199. package/dist/session/codex-app-server.js +225 -32
  200. package/dist/session/control.d.ts +17 -3
  201. package/dist/session/control.js +219 -23
  202. package/dist/session/conversation-normalizer.d.ts +2 -1
  203. package/dist/session/conversation-normalizer.js +1 -1
  204. package/dist/session/conversation-observation.d.ts +25 -0
  205. package/dist/session/conversation-observation.js +100 -0
  206. package/dist/session/conversation-replay.d.ts +50 -0
  207. package/dist/session/conversation-replay.js +203 -0
  208. package/dist/session/conversation-store.d.ts +15 -1
  209. package/dist/session/conversation-store.js +213 -26
  210. package/dist/session/conversation-types.d.ts +57 -4
  211. package/dist/session/prompt-batch.d.ts +79 -0
  212. package/dist/session/prompt-batch.js +120 -0
  213. package/dist/session/task-notice.d.ts +14 -0
  214. package/dist/session/task-notice.js +13 -0
  215. package/dist/session/types.d.ts +42 -1
  216. package/dist/setup-tunnel-preflight.d.ts +34 -0
  217. package/dist/setup-tunnel-preflight.js +62 -0
  218. package/dist/socket-path.d.ts +2 -0
  219. package/dist/socket-path.js +22 -0
  220. package/dist/spawn.d.ts +5 -1
  221. package/dist/spawn.js +40 -4
  222. package/dist/startup-prompt.d.ts +15 -0
  223. package/dist/startup-prompt.js +71 -0
  224. package/dist/startup-readiness.d.ts +20 -1
  225. package/dist/startup-readiness.js +66 -3
  226. package/dist/startup-telemetry.d.ts +16 -0
  227. package/dist/startup-telemetry.js +46 -0
  228. package/dist/subscriptions/cli.d.ts +91 -0
  229. package/dist/subscriptions/cli.js +223 -0
  230. package/dist/subscriptions/launch.d.ts +37 -0
  231. package/dist/subscriptions/launch.js +93 -0
  232. package/dist/subscriptions/login.d.ts +77 -0
  233. package/dist/subscriptions/login.js +215 -0
  234. package/dist/subscriptions/observed.d.ts +7 -0
  235. package/dist/subscriptions/observed.js +44 -0
  236. package/dist/subscriptions/probe.d.ts +10 -0
  237. package/dist/subscriptions/probe.js +73 -0
  238. package/dist/subscriptions/service.d.ts +102 -0
  239. package/dist/subscriptions/service.js +364 -0
  240. package/dist/subscriptions/store.d.ts +71 -0
  241. package/dist/subscriptions/store.js +143 -0
  242. package/dist/supervisor/adoption.d.ts +8 -0
  243. package/dist/supervisor/adoption.js +78 -0
  244. package/dist/supervisor/catalog.d.ts +62 -0
  245. package/dist/supervisor/catalog.js +254 -0
  246. package/dist/supervisor/fleet.d.ts +8 -0
  247. package/dist/supervisor/fleet.js +89 -0
  248. package/dist/supervisor/index.js +3 -6
  249. package/dist/supervisor/launchd.d.ts +1 -1
  250. package/dist/supervisor/launchd.js +26 -13
  251. package/dist/supervisor/legacy.d.ts +35 -0
  252. package/dist/supervisor/legacy.js +524 -0
  253. package/dist/supervisor/manager.d.ts +15 -0
  254. package/dist/supervisor/manager.js +270 -0
  255. package/dist/supervisor/registration-refresh.d.ts +45 -0
  256. package/dist/supervisor/registration-refresh.js +266 -0
  257. package/dist/supervisor/scope.d.ts +4 -0
  258. package/dist/supervisor/scope.js +10 -0
  259. package/dist/supervisor/systemd.d.ts +2 -2
  260. package/dist/supervisor/systemd.js +18 -37
  261. package/dist/task-supervision.d.ts +9 -0
  262. package/dist/task-supervision.js +145 -0
  263. package/dist/temp-idle.d.ts +17 -0
  264. package/dist/temp-idle.js +42 -0
  265. package/dist/temp-lifecycle.d.ts +23 -8
  266. package/dist/temp-lifecycle.js +123 -66
  267. package/dist/temp-supervisor-recovery.d.ts +1 -1
  268. package/dist/temp-supervisor-recovery.js +2 -2
  269. package/dist/tunnel-setup-completion.d.ts +7 -0
  270. package/dist/tunnel-setup-completion.js +13 -0
  271. package/dist/tunnel-setup-input.d.ts +19 -0
  272. package/dist/tunnel-setup-input.js +130 -0
  273. package/dist/watchdog/query.d.ts +3 -1
  274. package/dist/watchdog/query.js +2 -1
  275. package/dist/web/agent-attachments.d.ts +29 -0
  276. package/dist/web/agent-attachments.js +162 -0
  277. package/dist/web/auth.d.ts +65 -2
  278. package/dist/web/auth.js +201 -11
  279. package/dist/web/available-port.d.ts +2 -0
  280. package/dist/web/available-port.js +23 -0
  281. package/dist/web/control.d.ts +3 -3
  282. package/dist/web/control.js +10 -8
  283. package/dist/web/conversation-stream-codec.d.ts +23 -0
  284. package/dist/web/conversation-stream-codec.js +110 -0
  285. package/dist/web/conversation-stream.d.ts +26 -0
  286. package/dist/web/conversation-stream.js +239 -0
  287. package/dist/web/events.d.ts +2 -0
  288. package/dist/web/events.js +9 -0
  289. package/dist/web/fleet-config-service.d.ts +7 -1
  290. package/dist/web/fleet-config-service.js +61 -16
  291. package/dist/web/prefix-gateway.d.ts +32 -0
  292. package/dist/web/prefix-gateway.js +248 -0
  293. package/dist/web/resource-views.d.ts +138 -0
  294. package/dist/web/resource-views.js +519 -0
  295. package/dist/web/runtime.d.ts +3 -1
  296. package/dist/web/runtime.js +132 -34
  297. package/dist/web/server.d.ts +19 -0
  298. package/dist/web/server.js +893 -71
  299. package/dist/web/service.d.ts +11 -2
  300. package/dist/web/service.js +30 -4
  301. package/dist/web/workspace-devices.d.ts +107 -0
  302. package/dist/web/workspace-devices.js +277 -0
  303. package/dist/web/workspace-tunnel.d.ts +1 -0
  304. package/dist/web/workspace-tunnel.js +34 -0
  305. package/dist/workspace-enrollment.d.ts +83 -0
  306. package/dist/workspace-enrollment.js +605 -0
  307. package/dist/workspace-replacement.d.ts +66 -0
  308. package/dist/workspace-replacement.js +238 -0
  309. package/docs/acp-files.md +146 -0
  310. package/docs/conversation-stream.md +216 -0
  311. package/docs/fleet-migration.md +54 -0
  312. package/docs/live-voice.md +13 -0
  313. package/docs/room-layouts.md +227 -0
  314. package/docs/self-reminders.md +374 -0
  315. package/docs/task-progress-review.md +143 -0
  316. package/docs/task-workspaces.md +225 -0
  317. package/docs/validation/managed-cli-permissions.md +421 -0
  318. package/examples/room-layouts/fresh.yaml +27 -0
  319. package/examples/room-layouts/scoped.yaml +21 -0
  320. package/examples/room-layouts/shared.yaml +19 -0
  321. package/package.json +25 -20
  322. package/presets/README.md +78 -0
  323. package/presets/brain-catalog.json +8 -2
  324. package/presets/fleet/agent_templates/Critic.yaml +1 -1
  325. package/presets/fleet/agent_templates/Developer.yaml +1 -1
  326. package/presets/fleet/agent_templates/Engineer.yaml +5 -0
  327. package/presets/fleet/agent_templates/LocalCoordinator.yaml +6 -3
  328. package/presets/fleet/agents/FleetCoordinator.yaml +1 -1
  329. package/presets/fleet/brains/claude-fable-5-1-high.yaml +5 -0
  330. package/presets/fleet/brains/claude-fable-5-1-low.yaml +5 -0
  331. package/presets/fleet/brains/claude-fable-5-1-max.yaml +5 -0
  332. package/presets/fleet/brains/claude-fable-5-1-medium.yaml +5 -0
  333. package/presets/fleet/brains/claude-fable-5-1-xhigh.yaml +5 -0
  334. package/presets/fleet/brains/claude-fable-5-high.yaml +1 -1
  335. package/presets/fleet/brains/claude-fable-5-low.yaml +1 -1
  336. package/presets/fleet/brains/claude-fable-5-max.yaml +1 -1
  337. package/presets/fleet/brains/claude-fable-5-medium.yaml +1 -1
  338. package/presets/fleet/brains/claude-fable-5-xhigh.yaml +1 -1
  339. package/presets/fleet/brains/claude-haiku-4-5-20251001-default.yaml +4 -0
  340. package/presets/fleet/brains/claude-opus-5-5-high.yaml +5 -0
  341. package/presets/fleet/brains/claude-opus-5-5-low.yaml +5 -0
  342. package/presets/fleet/brains/claude-opus-5-5-max.yaml +5 -0
  343. package/presets/fleet/brains/claude-opus-5-5-medium.yaml +5 -0
  344. package/presets/fleet/brains/claude-opus-5-5-xhigh.yaml +5 -0
  345. package/presets/fleet/brains/claude-opus-5-high.yaml +1 -1
  346. package/presets/fleet/brains/claude-opus-5-low.yaml +1 -1
  347. package/presets/fleet/brains/claude-opus-5-max.yaml +1 -1
  348. package/presets/fleet/brains/claude-opus-5-medium.yaml +1 -1
  349. package/presets/fleet/brains/claude-opus-5-xhigh.yaml +1 -1
  350. package/presets/fleet/brains/claude-sonnet-5-high.yaml +1 -1
  351. package/presets/fleet/brains/claude-sonnet-5-low.yaml +1 -1
  352. package/presets/fleet/brains/claude-sonnet-5-max.yaml +1 -1
  353. package/presets/fleet/brains/claude-sonnet-5-medium.yaml +1 -1
  354. package/presets/fleet/brains/claude-sonnet-5-xhigh.yaml +1 -1
  355. package/presets/fleet/brains/codex-gpt-5-3-codex-spark-high.yaml +1 -1
  356. package/presets/fleet/brains/codex-gpt-5-3-codex-spark-low.yaml +1 -1
  357. package/presets/fleet/brains/codex-gpt-5-3-codex-spark-medium.yaml +1 -1
  358. package/presets/fleet/brains/codex-gpt-5-3-codex-spark-xhigh.yaml +1 -1
  359. package/presets/fleet/brains/codex-gpt-5-4-high.yaml +1 -1
  360. package/presets/fleet/brains/codex-gpt-5-4-low.yaml +1 -1
  361. package/presets/fleet/brains/codex-gpt-5-4-medium.yaml +1 -1
  362. package/presets/fleet/brains/codex-gpt-5-4-mini-high.yaml +1 -1
  363. package/presets/fleet/brains/codex-gpt-5-4-mini-low.yaml +1 -1
  364. package/presets/fleet/brains/codex-gpt-5-4-mini-medium.yaml +1 -1
  365. package/presets/fleet/brains/codex-gpt-5-4-mini-xhigh.yaml +1 -1
  366. package/presets/fleet/brains/codex-gpt-5-4-xhigh.yaml +1 -1
  367. package/presets/fleet/brains/codex-gpt-5-5-high.yaml +1 -1
  368. package/presets/fleet/brains/codex-gpt-5-5-low.yaml +1 -1
  369. package/presets/fleet/brains/codex-gpt-5-5-medium.yaml +1 -1
  370. package/presets/fleet/brains/codex-gpt-5-5-xhigh.yaml +1 -1
  371. package/presets/fleet/brains/codex-gpt-5-6-luna-high.yaml +1 -1
  372. package/presets/fleet/brains/codex-gpt-5-6-luna-low.yaml +1 -1
  373. package/presets/fleet/brains/codex-gpt-5-6-luna-max.yaml +1 -1
  374. package/presets/fleet/brains/codex-gpt-5-6-luna-medium.yaml +1 -1
  375. package/presets/fleet/brains/codex-gpt-5-6-luna-xhigh.yaml +1 -1
  376. package/presets/fleet/brains/codex-gpt-5-6-sol-high.yaml +1 -1
  377. package/presets/fleet/brains/codex-gpt-5-6-sol-low.yaml +1 -1
  378. package/presets/fleet/brains/codex-gpt-5-6-sol-max.yaml +1 -1
  379. package/presets/fleet/brains/codex-gpt-5-6-sol-medium.yaml +1 -1
  380. package/presets/fleet/brains/codex-gpt-5-6-sol-ultra.yaml +1 -1
  381. package/presets/fleet/brains/codex-gpt-5-6-sol-xhigh.yaml +1 -1
  382. package/presets/fleet/brains/codex-gpt-5-6-terra-high.yaml +1 -1
  383. package/presets/fleet/brains/codex-gpt-5-6-terra-low.yaml +1 -1
  384. package/presets/fleet/brains/codex-gpt-5-6-terra-max.yaml +1 -1
  385. package/presets/fleet/brains/codex-gpt-5-6-terra-medium.yaml +1 -1
  386. package/presets/fleet/brains/codex-gpt-5-6-terra-ultra.yaml +1 -1
  387. package/presets/fleet/brains/codex-gpt-5-6-terra-xhigh.yaml +1 -1
  388. package/presets/fleet/brains/codex-gpt-6-1-sol-high.yaml +5 -0
  389. package/presets/fleet/brains/codex-gpt-6-1-sol-low.yaml +5 -0
  390. package/presets/fleet/brains/codex-gpt-6-1-sol-max.yaml +5 -0
  391. package/presets/fleet/brains/codex-gpt-6-1-sol-medium.yaml +5 -0
  392. package/presets/fleet/brains/codex-gpt-6-1-sol-ultra.yaml +5 -0
  393. package/presets/fleet/brains/codex-gpt-6-1-sol-xhigh.yaml +5 -0
  394. package/presets/fleet/brains/codex-gpt-6-astra-high.yaml +1 -1
  395. package/presets/fleet/brains/codex-gpt-6-astra-low.yaml +1 -1
  396. package/presets/fleet/brains/codex-gpt-6-astra-max.yaml +1 -1
  397. package/presets/fleet/brains/codex-gpt-6-astra-medium.yaml +1 -1
  398. package/presets/fleet/brains/codex-gpt-6-astra-ultra.yaml +1 -1
  399. package/presets/fleet/brains/codex-gpt-6-astra-xhigh.yaml +1 -1
  400. package/presets/fleet/brains/codex-gpt-6-luna-high.yaml +5 -0
  401. package/presets/fleet/brains/codex-gpt-6-luna-low.yaml +5 -0
  402. package/presets/fleet/brains/codex-gpt-6-luna-max.yaml +5 -0
  403. package/presets/fleet/brains/codex-gpt-6-luna-medium.yaml +5 -0
  404. package/presets/fleet/brains/codex-gpt-6-luna-xhigh.yaml +5 -0
  405. package/presets/fleet/brains/codex-gpt-6-sol-high.yaml +5 -0
  406. package/presets/fleet/brains/codex-gpt-6-sol-low.yaml +5 -0
  407. package/presets/fleet/brains/codex-gpt-6-sol-max.yaml +5 -0
  408. package/presets/fleet/brains/codex-gpt-6-sol-medium.yaml +5 -0
  409. package/presets/fleet/brains/codex-gpt-6-sol-ultra.yaml +5 -0
  410. package/presets/fleet/brains/codex-gpt-6-sol-xhigh.yaml +5 -0
  411. package/presets/fleet/roles/Coordinator.yaml +21 -13
  412. package/presets/fleet/roles/Critic.yaml +24 -0
  413. package/presets/fleet/roles/Developer.yaml +32 -0
  414. package/presets/fleet/roles/Engineer.yaml +72 -0
  415. package/presets/fleet/roles/LocalCoordinator.yaml +17 -0
  416. package/presets/fleet/room_layouts/engineering.yaml +25 -0
  417. package/presets/fleet/room_layouts/pair.yaml +24 -0
  418. package/presets/fleet/room_layouts/single.yaml +17 -0
  419. package/presets/fleet/room_layouts/team.yaml +30 -0
  420. package/presets/fleet/room_templates/engineering.yaml +19 -0
  421. package/presets/manifest.json +2 -2
  422. package/dist/web-app/assets/index-59GF-gsZ.css +0 -1
  423. package/dist/web-app/assets/index-C0h3ALvs.js +0 -10
  424. package/dist/web-app/icons/ours-fleet-maskable.svg +0 -4
  425. package/dist/web-app/icons/ours-fleet.svg +0 -4
  426. package/dist/web-app/index.html +0 -17
  427. package/dist/web-app/manifest.webmanifest +0 -15
  428. package/dist/web-app/offline.html +0 -18
  429. package/dist/web-app/sw.js +0 -51
package/dist/docs.js CHANGED
@@ -172,34 +172,29 @@ rollback; inspect host integration and private init stage/recovery evidence.
172
172
  Attachment also accepts \`/permit <permission-id> <option-id>\`, \`/interrupt\`,
173
173
  and \`/detach\`.
174
174
 
175
- ## Local web console
175
+ ## Local HTTP service
176
176
 
177
- The npm package includes the web console; installed users do not clone the repo
178
- or run \`npm run build\`:
177
+ Fleet runs an HTTP service for the App. It serves no pages and opens no
178
+ browser; every screen is in the App.
179
179
 
180
180
  \`\`\`sh
181
181
  npm i -g @ours.network/fleet
182
- ours-fleet init
183
- ours-fleet doctor
184
- ours-fleet web # install/update service, start, pair browser
182
+ ours-fleet setup-tunnel --file /private/setup.txt # connect host; prints QR and connection code
183
+ ours-fleet link-device # connect another browser or device
185
184
  \`\`\`
186
185
 
187
- The normal command uses stable \`http://127.0.0.1:49271/\`, installs an
188
- owner-level systemd user service (Linux) or LaunchAgent (macOS), and opens a
189
- five-minute one-use pairing link in the local browser. After pairing, bookmark
190
- the plain URL or install the PWA. To pair a new, signed-out, or revoked browser,
191
- run \`ours-fleet web open\`.
186
+ The service listens on \`http://127.0.0.1:49271/\` and is installed as an
187
+ owner-level systemd user service (Linux) or LaunchAgent (macOS).
192
188
 
193
189
  \`\`\`sh
194
190
  ours-fleet web status
195
191
  ours-fleet web start|stop|restart
196
- ours-fleet web open
197
- ours-fleet web revoke-all # revoke every browser and active session
192
+ ours-fleet web revoke-all # revoke every device and active session
198
193
  ours-fleet web uninstall
199
- ours-fleet web serve --port 0 --no-open # isolated foreground/testing mode
194
+ ours-fleet web serve --port 0 # isolated foreground/testing mode
200
195
  \`\`\`
201
196
 
202
- The console is IPv4-loopback-only by default. Both \`localhost\` and
197
+ The service is IPv4-loopback-only by default. Both \`localhost\` and
203
198
  \`127.0.0.1\` are accepted locally. For an nginx/TLS reverse proxy, keep the
204
199
  default bind and declare the exact browser origin:
205
200
 
@@ -271,6 +266,88 @@ the executor inside the role's existing OS sandbox, and ordinary CLI validation
271
266
  the source of truth. Hidden worker entry points remain internal; public lifecycle and
272
267
  operator commands are not restricted by the proxy.
273
268
 
269
+ ### Fleet commands from a command sandbox (\`managed_cli\`)
270
+
271
+ That supervisor connection is a Unix socket. A harness command sandbox (Codex
272
+ \`workspace-write\`, Claude's OS sandbox) can refuse it with \`connect EPERM\`
273
+ before any command, even \`--help\`, is parsed. Fleet prepares the native
274
+ harness policy for one declared workflow; you never write Codex rules or Claude
275
+ sandbox settings by hand.
276
+
277
+ Opt an Agent (or Agent Template) in explicitly. It is never inferred from a
278
+ role's name or persona and is not inherited by agents it spawns:
279
+
280
+ \`\`\`yaml
281
+ # fleet/agents/FleetCoordinator.yaml
282
+ role: { ref: Coordinator }
283
+ brain: { ref: codex-gpt-5-4-medium }
284
+ permissions: { approval: auto, filesystem: workspace, unattended: deny }
285
+ managed_cli: [task-workflow]
286
+ \`\`\`
287
+
288
+ \`ours-fleet managed-cli setup --enable FleetCoordinator\` adds that one key to
289
+ an existing Agent file and changes nothing else, permissions included.
290
+ \`ours-fleet managed-cli setup\` generates the policy for every declaring agent
291
+ and \`ours-fleet managed-cli status\` compares without writing. Neither starts a
292
+ session or a model. The same preparation runs at every agent start, so spawned
293
+ and task-room agents need no separate step.
294
+
295
+ \`task-workflow\` prepares: \`task create|start|finish|block|unblock|review\`,
296
+ \`task list|show\`, \`room show|members\`, \`template list|show|validate\`,
297
+ \`config\`, \`docs\` and \`--help\`. \`task start\` and \`task finish\`
298
+ provision and retire rooms and agents: this is real authority. Not prepared, and
299
+ still sandboxed: \`spawn\`, \`ours tools|call\`, \`status|peek|send\`, room
300
+ create/delete/close, task cancel/delete and service administration.
301
+
302
+ The agent invokes a prepared command through the pinned entry form shown in its
303
+ briefing:
304
+
305
+ \`\`\`sh
306
+ /abs/node /abs/fleet/dist/cli.js --managed-configuration /abs/fleet.yaml task create --title "..." --backlog --no-room
307
+ \`\`\`
308
+
309
+ What the native policy does and does not do:
310
+
311
+ - A rule fixes the Node executable, this Fleet CLI, the configuration and the
312
+ command. It matches an argv prefix and admits every trailing option and
313
+ argument. It is not argument validation, target authorization or per-agent
314
+ isolation.
315
+ - A later \`-c\`/\`--configuration\` naming another file is refused by the
316
+ Fleet CLI itself, after the process has started outside the sandbox. That is
317
+ Fleet validation, not a native policy denial.
318
+ - The supervisor audit and ordinary CLI validation are unchanged. The pinned
319
+ form is refused outside a managed session, where no supervisor would audit it.
320
+ - Compound, piped, redirected, \`$(...)\` and \`VAR=value\`-prefixed command
321
+ lines do not match and stay sandboxed.
322
+ - Codex: a Fleet-owned \`.codex/rules/ours-fleet-<id>.rules\` in the agent's
323
+ workspace. It applies to every trusted Codex session in that workspace, and
324
+ Codex must trust the workspace; Fleet does not change trust. Other files in
325
+ that directory are never touched.
326
+ - Claude: entries in the agent's own Fleet settings overlay
327
+ (\`permissions.allow\` and \`sandbox.excludedCommands\`). Your Claude settings
328
+ are not modified and Fleet never enables or disables Claude's OS sandbox.
329
+ - A Fleet CLI or configuration path containing spaces is spelled in single
330
+ quotes (Codex >= 0.160.0). The Node executable itself must be at a path that
331
+ needs no quoting: neither harness matches a quoted executable against a rule.
332
+ A path containing anything but letters, digits, spaces and \`_@%+=:,./-\`
333
+ (quotes, backslashes, \`*\` and other pattern characters), or located inside
334
+ the agent's workspace or a \`harness_options.add_dirs\` directory (also through
335
+ a symlink), is reported as unsupported; so is a Codex role with
336
+ \`harness_options.config\` or \`profile\`, whose sandbox Fleet does not inspect.
337
+ - Prepared for: Codex native app-server and bundled ACP, Claude bundled ACP, on
338
+ Linux and macOS. The generated setup was qualified end to end on Linux
339
+ (Codex 0.160.0, Claude Code 2.1.289); the macOS run of that matrix is
340
+ outstanding and \`managed-cli status\` says so there. Custom session
341
+ commands, other harnesses, roles declaring \`isolation:\` and other
342
+ platforms are reported as unsupported and left exactly as sandboxed as before.
343
+
344
+ \`ours-fleet doctor\` reports three separate facts per declaring agent: the
345
+ generated setup (static), whether the last launch loaded the current policy, and
346
+ what the supervisor audit ledger recorded since. A prepared setup is not
347
+ evidence of supervisor access, and a successful \`--help\` proves only its own
348
+ audited path, not the task lifecycle. See
349
+ \`docs/validation/managed-cli-permissions.md\`.
350
+
274
351
  Command invocation, raw argv, read-only work, validation failures, and generic
275
352
  outcomes are never forwarded to the Owner-visible channel. Fleet announces only
276
353
  confirmed Agent, Task, and Room lifecycle changes. Local diagnostics retain
@@ -492,6 +569,17 @@ Messenger-bound results are capped at 3,500 Unicode code points and 12,000 UTF-8
492
569
  bytes with structural omission notices. \`--json\` bypasses this presentation layer
493
570
  and retains the versioned machine schema and serialization order.
494
571
 
572
+ Active task \`show\` reports current readiness separately from lifecycle, also in
573
+ Owner commands. Start/work preserve the fail-closed \`task_not_ready\` behavior.
574
+ Unknown control health does not prove a dead agent or authorize replacement.
575
+ Before deliberate recovery, Fleet Coordinator inspects current seats and exact
576
+ old-launch worklogs/termination evidence in \`recovery/temporary\`, preserves
577
+ original records, and privately records verified old/new launch provenance.
578
+ A new inbox is not complete history: page scoped history to the end, authenticate
579
+ historical Owner authors, and compare completed actions and replies before resuming.
580
+ Do not restore archived identity state, reuse invites, adopt same-role seats or
581
+ blindly replay instructions. Ask the Owner if authority/completion is uncertain.
582
+
495
583
  Every task belongs to a named list. The built-in \`default\` list always exists,
496
584
  and legacy tasks or create calls without \`--list\` resolve to it. Use \`task lists\`,
497
585
  \`task list-create <name>\`, \`task list-rename <name> <new-name>\`, and
@@ -551,6 +639,214 @@ management API equivalent is \`DELETE /api/v1/tasks/<id>?confirm=<id>\` (200 whe
551
639
  settled, 202 while pending; \`GET /api/v1/tasks?includeDeleting=true\` exposes
552
640
  deletion-pending tasks to operators).
553
641
 
642
+ ### Task Progress and To review
643
+
644
+ A task can carry an append-only **Progress** milestone log and a self-contained
645
+ **To review** package (Markdown plus retained files). Agents launched for a task
646
+ use \`fleet_task_progress_list\`, \`fleet_task_progress_append\`,
647
+ \`fleet_task_review_show\`, \`fleet_task_review_set\` and
648
+ \`fleet_task_review_detach\`; files are attached from the task workspace with the CLI:
649
+
650
+ \`\`\`sh
651
+ ours-fleet task progress TASK [--text TEXT | --text-file FILE] [--request-key KEY] [--json]
652
+ ours-fleet task review-package TASK [--markdown-file FILE] [--attach PATH] [--detach ID] [--json]
653
+ \`\`\`
654
+
655
+ By default only the LocalCoordinator writes Progress, and every task role prepares
656
+ the To review package before a Review handoff without gaining lifecycle authority.
657
+ At Review the task description keeps only the clickable PR links, one per line (a task
658
+ without PRs links its actual deliverables, never an invented PR); the package holds the
659
+ rest, including the original description as an attached file.
660
+ Full contract: \`docs/task-progress-review.md\` in the package.
661
+
662
+ ### ours app help
663
+
664
+ Questions about using the ours app are answered from the public user guide at
665
+ \`https://app.ours.network/llms.txt\` (source: ours-app \`web/public/llms.txt\`). Every
666
+ Fleet-generated briefing carries an "ours app help" section with that pointer; if
667
+ the guide cannot be fetched, say so and answer only from what can be verified.
668
+ Rewriting a briefing does not change a running conversation: \`restart\` resumes
669
+ context, so tell an existing agent once to reread the changed section (or choose
670
+ \`force-restart\` for a fresh context).
671
+
672
+ ### Guided demo task
673
+
674
+ A Fleet Coordinator procedure that shows a user how a team task works while
675
+ producing something useful: a personalized getting-started guide and a one-page
676
+ quick reference built from the public user guide. It needs no external accounts
677
+ and changes nothing outside the task.
678
+
679
+ Rules: use the shipped \`team\` room template (LocalCoordinator, Developer, Critic)
680
+ and never a room layout: layout tasks have no "Add agent to task", and the app's New
681
+ task always uses a layout. Never add agents, or generate, view or accept invitations,
682
+ for the user; the user performs those clicks. Never finish or delete the task unless
683
+ the user explicitly asks. Inside the task, the room's LocalCoordinator explains each
684
+ step to the user and waits for their clicks.
685
+
686
+ 1. Explain before acting: you will create a team task named "Guided demo: getting
687
+ started with ours" with three agents (a LocalCoordinator who guides the user, a
688
+ Developer who writes the files, a Critic who checks them). It appears under
689
+ Navigate menu → "Tasks" (Active column) and in Chats with the Tasks filter. It
690
+ takes about 30 minutes, the user will click a few controls, and its files live in
691
+ the task folder on this host.
692
+ 2. Optionally ask how the user wants to use ours (no secrets). Write the brief
693
+ below, with placeholders filled, to a file outside any task folder, then:
694
+
695
+ \`\`\`sh
696
+ ours-fleet task create --title "Guided demo: getting started with ours" --brief-file FILE --backlog --no-room
697
+ ours-fleet task start TASK --template team
698
+ \`\`\`
699
+
700
+ Before \`task start\`, run \`ours-fleet template show team\`, which shows the
701
+ installed members' slot, Role and Agent Template. Look up each Agent Template's
702
+ Brain and permissions in \`ours-fleet config --json\` (template show does not
703
+ print them) and include them in the launch plan as for any task. The recipe
704
+ expects exactly one LocalCoordinator, one Developer and one Critic. If the
705
+ installed \`team\` differs, tell the user and stop rather than editing their
706
+ configuration.
707
+ 3. Then tell the user where everything is:
708
+ - Navigate menu → "Tasks" → the task → "Open room": the team's conversation. The
709
+ LocalCoordinator will guide them there, and they can write to the team in it.
710
+ - "Progress" shows real milestones; "To review" will hold the results.
711
+ - The task folder is \`~/.ours-fleet/workspaces/tasks/TASK\`.
712
+
713
+ Room posts do not wake you, and the room does not message you. Ask the user to come
714
+ back to this chat and say "check the demo" when the room shows "READY FOR REVIEW",
715
+ or whenever they want a status. Then read \`ours-fleet task progress TASK\` and the
716
+ To review package. Optionally set one \`fleet_reminder_create\` self-reminder
717
+ about 15 minutes ahead, renewed only while the demo is waiting. Never busy-poll.
718
+ 4. When the user says "check the demo" and Progress shows S5, follow the normal
719
+ Review handoff. Check that \`ours-fleet task review-package TASK\` lists all four
720
+ files (\`getting-started.md\`, \`quick-reference.md\`, \`tour-evidence.md\`,
721
+ \`original-description.md\`) and that its Markdown lets the user review without
722
+ the room; otherwise ask the user to tell the room what is missing.
723
+ - The task has no PRs, so the description becomes one clickable link to its actual
724
+ deliverables. Never invent a PR.
725
+ - Ask the user to open the task's "To review" page and copy the browser address
726
+ (an absolute https URL). Never guess a host or workspace.
727
+ - The description renders only absolute links, so use exactly
728
+ \`[To review: getting-started.md, quick-reference.md, tour-evidence.md](<copied URL>)\`.
729
+ - Fleet has no CLI command for descriptions, so the user applies it: task page →
730
+ "Edit description" → paste → "Save".
731
+ - Wait until the save succeeds, then run \`ours-fleet task review TASK\` and tell
732
+ the user: Navigate menu → "Tasks" → Review column → the task → "To review" →
733
+ "View" or "Download".
734
+ If the room instead shows "DEMO STOPPED (INCOMPLETE)", say plainly which steps
735
+ were not done and that the completion criteria were not met. Offer to start a new
736
+ demo later. Move this task to Review only if the user asks to inspect the partial
737
+ files. Use the same copy-and-save steps, but the link text names only the files
738
+ that really exist (for example \`[Incomplete demo, To review: getting-started.md](<copied URL>)\`).
739
+ 5. Explain closing: "Task actions" → "Finish task" completes the task, closes its
740
+ agents (including the added helper) and the task room, and keeps the task folder
741
+ and To review files. "Delete task" (retype the task ID) permanently deletes the
742
+ task folder, including uncommitted work, plus Progress and To review files. The
743
+ temporary agent the user created for the invitation exercise is not part of the
744
+ task; they can close it with "Finish chat" on its profile. Let the user click
745
+ "Finish task" themselves.
746
+
747
+ Brief (fill USER and GOALS; keep the rest verbatim):
748
+
749
+ \`\`\`text
750
+ Guided demo task for USER. Produce a short personalized getting-started guide and a
751
+ one-page quick reference to the ours app that the user keeps, while the user learns
752
+ how a team task works. Everything is local: no external accounts, services,
753
+ publishing or production changes.
754
+ Source of truth: https://app.ours.network/llms.txt. Fetch it; if it is unavailable, say
755
+ so in the room and use only what the user confirms seeing. Personalization: GOALS.
756
+ The user reads and writes in this room. Write to the user in plain language.
757
+
758
+ Roles
759
+ - local_coordinator: the user's guide in this room. Explain each step before it
760
+ happens, give exact clicks, wait for the user to report back, and never perform
761
+ their clicks or handle invitation codes. Sequence the team, write the Progress log
762
+ (request keys demo-s1..demo-s5, one entry per stage, only after its artifact or the
763
+ user's action exists) and write the To review Markdown.
764
+ - developer (the member whose name ends in -developer-1, present from the start):
765
+ owns the task workspace and writes getting-started.md, tour-evidence.md and
766
+ original-description.md. Attaches files to To review.
767
+ - critic: checks every file against llms.txt; posts "CHECK: OK" or numbered
768
+ corrections; one check and at most one re-check per file; edits no files.
769
+ - helper (added during the demo by the USER with "Add agent to task" and Member name
770
+ helper, so its name ends in -helper-1; it also has the Developer role): writes
771
+ quick-reference.md and edits no other file. If your name ends in -helper-1, this is
772
+ your only job; the developer duties above belong to the member whose name ends in
773
+ -developer-1.
774
+ - newcomer (a temporary agent the USER admits with a room invitation): a room
775
+ participant only. Posts one question and one suggestion; never requests files,
776
+ invitation codes or task actions.
777
+
778
+ Put every file in this task's workspace.
779
+ S1 Draft (developer): write getting-started.md with
780
+ (a) "Where things are": 6-10 checklist items, each with its exact path from
781
+ llms.txt (Tasks board, this task's page, Open room, Progress, To review,
782
+ Settings, Add or connect, Generate invite, Accept invite, Room participants);
783
+ (b) "This task, explained": task ID, where it appears, its folder path, and what
784
+ Finish task and Delete task do to that folder;
785
+ (c) "For you": personalization.
786
+ The critic checks it and the developer applies corrections. Progress: "S1:
787
+ getting-started.md drafted and checked (N items)".
788
+ S2 Add an agent (user click): local_coordinator explains that the user can add a
789
+ task-managed agent, which uses this task's folder and closes when the task
790
+ finishes. Steps: task page → "Task actions" (⋯) → "Add agent to task" → "Member
791
+ name" helper, "Agent Template" Developer, "Role" Developer, default "Brain" →
792
+ "Create and join room". The helper appears under "Participants" and in this room.
793
+ Never add agents yourselves. When the helper joins: helper writes
794
+ quick-reference.md (the five most common actions, each as one exact path from
795
+ llms.txt); the critic checks it. Progress: "S2: helper added by the user via Add
796
+ agent to task; quick-reference.md written and checked".
797
+ S3 Invite a collaborator (user clicks): local_coordinator explains real collaboration
798
+ first. A colleague or friend can join this room with their own ours identity or
799
+ agent when the user sends them a room invitation privately. Joining grants
800
+ conversation in this room only: no access to the task's files and no task
801
+ actions (an agent's own host permissions are separate). Then guide the exercise,
802
+ which plays the colleague with a temporary agent:
803
+ 1. "Open room" → "Room actions" (⋯) → "Room participants" → "Generate room
804
+ invite" → choose "Room role" (Participant) and "Invitation type" (One-time) →
805
+ "Generate one-time room invite" → "Copy invitation". Keep it private and
806
+ never paste it into this room.
807
+ 2. "Add or connect" → "New chat" → send this first message to start the agent:
808
+ "You will be invited to a room for a guided ours demo. After you join, post
809
+ exactly one message there: one question a newcomer would ask about the ours app
810
+ and one suggestion. Do not ask for files, invitation codes or task actions."
811
+ 3. On that chat, "Agent actions" (⋯) → "Accept invite" → paste → "Accept invite".
812
+ 4. Back in "Room participants", press "Refresh participants" until the new seat
813
+ shows active. It can stay pending until the connection completes; a successful
814
+ Accept alone is not membership.
815
+ When the newcomer posts, the developer adds "Questions from a newcomer" to
816
+ getting-started.md, answering from llms.txt and crediting the participant by
817
+ display name. Progress: "S3: newcomer joined via room invitation; question
818
+ answered".
819
+ S4 Evidence (developer): write tour-evidence.md: each stage, its time, what the user
820
+ did, the critic's results and any skipped step. Save this task's current
821
+ description (the brief above, the original requirements) unchanged as
822
+ original-description.md. The critic checks tour-evidence.md. Progress: "S4: tour
823
+ evidence written and checked".
824
+ S5 Ready: the developer attaches getting-started.md, quick-reference.md,
825
+ tour-evidence.md and original-description.md with
826
+ \`ours-fleet task review-package <task-id> --attach <path>\`. The local_coordinator
827
+ writes the To review Markdown with fleet_task_review_set: what was produced, how to
828
+ open it, what each stage showed, and Finish versus Delete. It links each file by
829
+ its retained path /api/v1/tasks/<task-id>/review/artifacts/<artifact-id>, using the
830
+ artifact IDs from \`ours-fleet task review-package <task-id> --json\`, and checks
831
+ that the package lists all four files. Progress: "S5: ready for review, 4 files in
832
+ To review". Post "READY FOR REVIEW" in the room and tell the user: go back to your
833
+ Fleet Coordinator chat and say "check the demo". Then stop.
834
+ If the user declines S2 or S3, pause: the local_coordinator says the demo is
835
+ incomplete without that step and asks whether to resume it now or stop the demo.
836
+ Nobody substitutes for the helper or the newcomer. To resume, continue from that
837
+ step. To stop, the local_coordinator records "Demo stopped by the user at S<n>; S<n>
838
+ and later not exercised" in Progress; the developer writes tour-evidence.md saying
839
+ the same and attaches only the files that really exist, together with
840
+ original-description.md; the local_coordinator writes To review Markdown headed
841
+ "Incomplete demo", posts "DEMO STOPPED (INCOMPLETE)" and tells the user to tell their
842
+ Fleet Coordinator. Never present work as done by a participant who did not do it. Never run task review, finish, cancel or delete: the
843
+ Fleet Coordinator moves the task to Review and the user finishes it.
844
+ Done when getting-started.md, quick-reference.md, tour-evidence.md and
845
+ original-description.md exist in the workspace and are attached to To review, every
846
+ Progress entry matches a real artifact or user action, and no invitation code or
847
+ secret appears anywhere.
848
+ \`\`\`
849
+
554
850
  ## Permissions
555
851
 
556
852
  Prefer the harness-neutral \`permissions\` block:
@@ -749,9 +1045,21 @@ the service waiting, with a diagnostic code in the journal. Each wait is bounded
749
1045
  and systemd retries it until the daemon is ready; stopping the service cancels it.
750
1046
  This does not consume the agent crash budget or discard its session context.
751
1047
  Once the runner starts, its normal crash circuit breaker still applies.
752
- After upgrading Fleet, rerun init to refresh the generated service template.
1048
+ After upgrading Fleet, run \`ours-fleet service refresh\` (\`ours-install\` does it for
1049
+ you). Service definitions start the exact release tree that wrote them, so an
1050
+ unrefreshed one starts the previous release after the next reboot.
1051
+ \`ours-fleet service check\` reports each supervisor, web and watchdog definition,
1052
+ and whether its running process uses another release, without changing anything.
1053
+ \`refresh\` only re-points the release paths in definitions Fleet generated, runs
1054
+ \`daemon-reload\`, and never creates, starts, stops or restarts a service. A running
1055
+ supervisor keeps its code until it is restarted.
753
1056
  Temporary agents and macOS services retain their existing lifecycle behavior.
754
1057
 
1058
+ After a supervisor restart or reboot, prompts a role had admitted but never
1059
+ started are dispatched only once its control socket is listening, so recovered
1060
+ work cannot reach the previous run's socket (\`connect ECONNREFUSED\`). Turns that
1061
+ had already started are closed as \`unknown_after_restart\` and never replayed.
1062
+
755
1063
  ## Reliable mail wake
756
1064
 
757
1065
  \`monitor.mode\` selects exactly one wake owner:
@@ -763,10 +1071,12 @@ Temporary agents and macOS services retain their existing lifecycle behavior.
763
1071
  - \`native\`: ours-fleet starts no supervisor monitor; the generated briefing
764
1072
  instructs Claude Code or Codex to arm its harness-native wake mechanism.
765
1073
 
766
- Set \`monitor.interrupt: true\` in fleet mode to cancel active work before every
767
- configured wake. Set it to \`after_tool\` to preserve an active ACP tool (and any
768
- pending permission), then steer the wake at the first tool-terminal boundary
769
- without cancellation. A hung boundary is bounded at 120 seconds and falls back
1074
+ \`monitor.interrupt\` defaults to \`after_tool\` for every harness except Hermes,
1075
+ which defaults to \`false\`; an explicit value always wins, and temporary snapshots
1076
+ written without one keep \`false\`. Set \`monitor.interrupt: true\` in fleet mode to
1077
+ cancel active work before every configured wake. \`after_tool\` preserves an active
1078
+ ACP tool (and any pending permission), then steers the wake at the first
1079
+ tool-terminal boundary without cancellation. A hung boundary is bounded at 120 seconds and falls back
770
1080
  to non-cancelling steering/queueing; adapters without authenticated tool events
771
1081
  use the same conservative fallback. Explicit human/control interrupts remain
772
1082
  immediate. The policy is content-blind because the supervisor cannot inspect
@@ -787,6 +1097,78 @@ selection.
787
1097
  Inspect \`ours-fleet status Name\`, \`peek Name\`, role logs, and
788
1098
  \`~/.ours-fleet/agents/Name/.monitor-status\` when diagnosing delivery.
789
1099
 
1100
+ ## Self-reminders
1101
+
1102
+ Every managed agent (\`session: acp\` or \`codex-app-server\`, Claude or Codex,
1103
+ persistent, temporary or task-owned) can schedule one-time wakes for ITSELF.
1104
+ The tools are on the agent's own fixed-identity ours MCP server, so there is no
1105
+ agent, identity or recipient argument and no setup, worker, service, chat or key:
1106
+
1107
+ - \`fleet_reminder_create\` — \`request_key\` (stable per decision; a repeat with
1108
+ the same input returns the same reminder, different input is refused),
1109
+ \`title\`, optional \`note\`, \`local_time\` (date and time WITHOUT an offset, e.g.
1110
+ \`2027-01-20T16:00\`), \`time_zone\` (IANA, e.g. \`Europe/London\`, \`UTC\`), optional
1111
+ \`fold\` (0/1, required only for a time that occurs twice when clocks go back;
1112
+ times skipped by a spring-forward gap are refused), \`late_window_seconds\`
1113
+ (60..604800, default 3600) and \`interrupt\` (default false; see below).
1114
+ - \`fleet_reminder_list\` — \`state\` \`open\` (default) | \`closed\` | \`all\`, \`limit\`, \`after\`.
1115
+ - \`fleet_reminder_update\` / \`fleet_reminder_cancel\` — \`id\` + \`expected_revision\`;
1116
+ every change bumps the revision and voids any wake issued for the old one.
1117
+ - \`fleet_reminder_inspect\` — \`event_id\` from a wake: the note, whether the
1118
+ wake is still current and eligible, and for an urgent one \`interrupt.state\`.
1119
+ - \`fleet_reminder_ack\` — \`event_id\` + \`expected_revision\`: records that the
1120
+ wake was handled. Idempotent; sends nothing and claims no external action.
1121
+
1122
+ When a reminder is due the supervisor starts one turn beginning \`[fleet-reminder]\`
1123
+ with the event id. It is the agent's own stored reminder, not an owner
1124
+ instruction or ours mail, and grants no authority. Fleet never sends anything
1125
+ on the agent's behalf; whether to message anyone is the agent's own decision
1126
+ under its existing tools and authorization.
1127
+
1128
+ Delivery: the supervisor process that runs the agent owns the timer — an idle
1129
+ agent with no open reminders costs nothing, and only a due reminder creates a
1130
+ model turn. By default a wake never interrupts or queues behind work: it is
1131
+ admitted at the next idle turn boundary after its due time and after the agent's
1132
+ startup turn.
1133
+
1134
+ Urgent (\`interrupt: true\`), only for a return genuinely bound to a time: when
1135
+ due and the agent is busy with an interruptible turn (mail wake, scheduled loop,
1136
+ local console), the supervisor durably records the request, asks that exact turn
1137
+ to stop once per revision, keeps the session and context, and releases the wake
1138
+ through the same fence. It never stops owner-channel or owner-console work,
1139
+ startup, stall recovery, another reminder, a pending permission, queued work or a
1140
+ turn it cannot identify; then it waits like an ordinary reminder and \`inspect\`
1141
+ shows \`interrupt_deferred\`. Due, interruption requested, its terminal
1142
+ (\`cancelled\` only when correlated; else \`ended\`/\`forced\`/\`failed\`/\`unknown\`),
1143
+ release, ack and any external action are separate facts. A forced or failed stop
1144
+ never queues the wake. It is not a hard real-time alarm and does nothing while
1145
+ the host or agent is down.
1146
+ If the host, Fleet or the agent is down, paused or busy, a reminder is still
1147
+ delivered when it comes back within its late window, and otherwise expires
1148
+ without a turn. Reminders survive supervisor, Fleet and host restarts and
1149
+ ordinary stop/start. They do not survive the agent: removing or retiring an
1150
+ agent or its task cancels them and deletes their state, and a replaced identity
1151
+ or same-named successor never inherits them.
1152
+
1153
+ Guarantees are at most once per reminder revision. Queue acceptance, release to
1154
+ the model, the agent's ack, and any external action are distinct facts. A wake
1155
+ is marked dispatched durably at the moment it is handed to the model; if the
1156
+ supervisor stops before that, the same event is retried. If it stops after, the
1157
+ event is held \`uncertain\` (shown by \`list\`/\`inspect\`, never re-sent): check your
1158
+ own records, then ack it or schedule something new.
1159
+
1160
+ Waiting on a peer (Developer/Critic/Engineer): before waiting on a specific
1161
+ review, answer or artifact, schedule ONE idle-only reminder about 20 minutes out
1162
+ naming the task/room and the expectation; cancel or reschedule it (with its
1163
+ revision) when the state changes; on the wake re-check, ack if resolved, else one
1164
+ follow-up in the same room and at most one more reminder, then report the
1165
+ nonresponse once. No polling, recurring chains, repeated follow-ups or automatic
1166
+ done.
1167
+
1168
+ Operators can read an agent's reminders with
1169
+ \`ours-fleet ours call Name fleet_reminder_list\`. Full guide, examples and the
1170
+ migration from the standalone \`self-reminders\` worker skill: \`docs/self-reminders.md\`.
1171
+
790
1172
  ## Trusted owner channel
791
1173
 
792
1174
  Any managed role may declare a separate ours identity which fleet — never the agent —
package/dist/doctor.d.ts CHANGED
@@ -1,9 +1,10 @@
1
+ import { type RefreshOptions } from './supervisor/registration-refresh.js';
1
2
  import { type AttachOursClientOptions, type OursClient } from '@ours.network/sdk/client';
2
3
  import { type Exec } from './exec.js';
3
4
  import type { YamlMode } from './config-yaml.js';
4
5
  import { type FetchLike } from './monitor.js';
5
6
  import type { PrereqReport } from './harness/types.js';
6
- type DoctorDaemonClient = Pick<OursClient, 'version' | 'close'>;
7
+ type DoctorDaemonClient = Pick<OursClient, 'version' | 'close'> & Partial<Pick<OursClient, 'identities'>>;
7
8
  type AttachDoctorDaemon = (options: AttachOursClientOptions) => Promise<DoctorDaemonClient>;
8
9
  /** Host-level + per-harness prerequisite report with actionable messages. */
9
10
  export declare function doctor(opts?: {
@@ -17,5 +18,7 @@ export declare function doctor(opts?: {
17
18
  };
18
19
  /** Override the local Codex model cache path (tests). */
19
20
  codexCatalogPath?: string;
21
+ /** Compare installed service definitions with this release (read-only). */
22
+ serviceRegistration?: Pick<RefreshOptions, 'binPath' | 'homeDir' | 'exists' | 'processArgv'>;
20
23
  }, exec?: Exec, platform?: NodeJS.Platform, fetchImpl?: FetchLike, attachDaemon?: AttachDoctorDaemon): Promise<PrereqReport>;
21
24
  export {};