@ours.network/fleet 1.2.0-nightly.6 → 1.2.0-nightly.61

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 (389) hide show
  1. package/README.md +287 -65
  2. package/dist/account-origin.d.ts +2 -0
  3. package/dist/account-origin.js +6 -0
  4. package/dist/agent-ours/bridge.js +35 -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 +4 -0
  11. package/dist/agent-ours/mcp-endpoint.js +5 -0
  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 +21 -1
  15. package/dist/agent-ours/service.js +94 -14
  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 +27 -0
  19. package/dist/application/conversation-history.js +212 -0
  20. package/dist/application/fleet-query-service.d.ts +1 -1
  21. package/dist/application/fleet-query-service.js +2 -2
  22. package/dist/application/legacy-supervisor-identity.d.ts +7 -0
  23. package/dist/application/legacy-supervisor-identity.js +43 -0
  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/role-creation-service.js +3 -2
  30. package/dist/application/role-removal-service.js +9 -1
  31. package/dist/application/role-repository.js +19 -2
  32. package/dist/application/room-layout-definitions.d.ts +45 -0
  33. package/dist/application/room-layout-definitions.js +130 -0
  34. package/dist/application/session-control.d.ts +30 -0
  35. package/dist/application/session-control.js +72 -3
  36. package/dist/application/supervisor-ours-tools.d.ts +159 -0
  37. package/dist/application/supervisor-ours-tools.js +115 -0
  38. package/dist/application/task-layouts.d.ts +91 -0
  39. package/dist/application/task-layouts.js +259 -0
  40. package/dist/application/task-room-service.d.ts +99 -3
  41. package/dist/application/task-room-service.js +285 -32
  42. package/dist/application/types.d.ts +2 -0
  43. package/dist/atomic-file.d.ts +5 -0
  44. package/dist/atomic-file.js +62 -1
  45. package/dist/briefing.d.ts +3 -1
  46. package/dist/briefing.js +70 -30
  47. package/dist/build-info.json +7 -4
  48. package/dist/capabilities.d.ts +6 -1
  49. package/dist/capabilities.js +8 -0
  50. package/dist/cli.js +407 -37
  51. package/dist/client-profile.d.ts +5 -17
  52. package/dist/client-profile.js +4 -127
  53. package/dist/config.d.ts +45 -0
  54. package/dist/config.js +57 -6
  55. package/dist/creation.d.ts +1 -1
  56. package/dist/creation.js +4 -4
  57. package/dist/daemon-recovery.d.ts +1 -8
  58. package/dist/daemon-recovery.js +8 -113
  59. package/dist/docs.d.ts +1 -1
  60. package/dist/docs.js +123 -19
  61. package/dist/doctor.d.ts +1 -1
  62. package/dist/doctor.js +55 -60
  63. package/dist/erased-resources.d.ts +9 -0
  64. package/dist/erased-resources.js +87 -0
  65. package/dist/file-delivery/reader.d.ts +15 -0
  66. package/dist/file-delivery/reader.js +63 -0
  67. package/dist/file-delivery/store.d.ts +15 -0
  68. package/dist/file-delivery/store.js +124 -0
  69. package/dist/file-delivery/types.d.ts +19 -0
  70. package/dist/file-delivery/types.js +1 -0
  71. package/dist/fleet-command-audit.d.ts +7 -0
  72. package/dist/fleet-command-audit.js +26 -9
  73. package/dist/harness/agent-session.d.ts +2 -0
  74. package/dist/harness/claude-code-session.js +1 -1
  75. package/dist/harness/claude-code.js +20 -11
  76. package/dist/harness/claude-runtime.d.ts +12 -0
  77. package/dist/harness/claude-runtime.js +43 -0
  78. package/dist/harness/codex-app-server-proxy.d.ts +4 -1
  79. package/dist/harness/codex-app-server-proxy.js +41 -5
  80. package/dist/harness/codex-reasoning.d.ts +5 -0
  81. package/dist/harness/codex-reasoning.js +12 -0
  82. package/dist/harness/codex-runtime.d.ts +11 -1
  83. package/dist/harness/codex-runtime.js +31 -4
  84. package/dist/harness/codex-session.js +2 -2
  85. package/dist/harness/codex.js +23 -12
  86. package/dist/init-wizard.d.ts +2 -0
  87. package/dist/init-wizard.js +38 -19
  88. package/dist/isolation/policy.js +6 -1
  89. package/dist/isolation/types.d.ts +5 -0
  90. package/dist/managed-cli.d.ts +253 -0
  91. package/dist/managed-cli.js +923 -0
  92. package/dist/managed-recovery.d.ts +13 -0
  93. package/dist/managed-recovery.js +31 -0
  94. package/dist/minimal-setup.d.ts +2 -0
  95. package/dist/minimal-setup.js +44 -0
  96. package/dist/monitor.d.ts +8 -34
  97. package/dist/monitor.js +89 -152
  98. package/dist/notifications/fleet-producer.d.ts +19 -0
  99. package/dist/notifications/fleet-producer.js +208 -0
  100. package/dist/notifications/outbox.d.ts +46 -0
  101. package/dist/notifications/outbox.js +158 -0
  102. package/dist/notifications/target-cleanup.d.ts +8 -0
  103. package/dist/notifications/target-cleanup.js +41 -0
  104. package/dist/notifications/task-producer.d.ts +18 -0
  105. package/dist/notifications/task-producer.js +67 -0
  106. package/dist/ops.d.ts +2 -0
  107. package/dist/ops.js +20 -3
  108. package/dist/owner-channel/channel.js +17 -6
  109. package/dist/owner-channel/commands.d.ts +4 -0
  110. package/dist/owner-channel/commands.js +8 -0
  111. package/dist/owner-channel/lifecycle-outbox.js +4 -3
  112. package/dist/owner-channel/ours-client.js +2 -17
  113. package/dist/paths.d.ts +2 -0
  114. package/dist/paths.js +2 -0
  115. package/dist/preset-migration.js +25 -0
  116. package/dist/resolved-plan.js +1 -0
  117. package/dist/rooms-tasks/add-member.d.ts +48 -0
  118. package/dist/rooms-tasks/add-member.js +83 -0
  119. package/dist/rooms-tasks/archived-absence.d.ts +8 -0
  120. package/dist/rooms-tasks/archived-absence.js +48 -0
  121. package/dist/rooms-tasks/cli.js +65 -5
  122. package/dist/rooms-tasks/close.d.ts +6 -2
  123. package/dist/rooms-tasks/close.js +246 -37
  124. package/dist/rooms-tasks/config.d.ts +1 -1
  125. package/dist/rooms-tasks/config.js +11 -4
  126. package/dist/rooms-tasks/cowork-adapter.d.ts +2 -4
  127. package/dist/rooms-tasks/cowork-adapter.js +7 -121
  128. package/dist/rooms-tasks/cowork-http.js +29 -1
  129. package/dist/rooms-tasks/deletion.d.ts +1 -1
  130. package/dist/rooms-tasks/deletion.js +84 -5
  131. package/dist/rooms-tasks/erasure.d.ts +6 -0
  132. package/dist/rooms-tasks/erasure.js +173 -0
  133. package/dist/rooms-tasks/external-worker.d.ts +1 -1
  134. package/dist/rooms-tasks/external-worker.js +3 -4
  135. package/dist/rooms-tasks/layout-binding-client.d.ts +11 -0
  136. package/dist/rooms-tasks/layout-binding-client.js +56 -0
  137. package/dist/rooms-tasks/layout-binding-grants.d.ts +21 -0
  138. package/dist/rooms-tasks/layout-binding-grants.js +128 -0
  139. package/dist/rooms-tasks/layout-cli.d.ts +4 -0
  140. package/dist/rooms-tasks/layout-cli.js +107 -0
  141. package/dist/rooms-tasks/layout-config.d.ts +11 -0
  142. package/dist/rooms-tasks/layout-config.js +89 -0
  143. package/dist/rooms-tasks/layout-control.d.ts +21 -0
  144. package/dist/rooms-tasks/layout-control.js +52 -0
  145. package/dist/rooms-tasks/layout-member-retirement.d.ts +10 -0
  146. package/dist/rooms-tasks/layout-member-retirement.js +90 -0
  147. package/dist/rooms-tasks/layout-service.d.ts +43 -0
  148. package/dist/rooms-tasks/layout-service.js +203 -0
  149. package/dist/rooms-tasks/layout.d.ts +121 -0
  150. package/dist/rooms-tasks/layout.js +285 -0
  151. package/dist/rooms-tasks/legacy-task-member.d.ts +19 -0
  152. package/dist/rooms-tasks/legacy-task-member.js +116 -0
  153. package/dist/rooms-tasks/live-readiness.d.ts +18 -0
  154. package/dist/rooms-tasks/live-readiness.js +85 -0
  155. package/dist/rooms-tasks/member-ownership.d.ts +5 -0
  156. package/dist/rooms-tasks/member-ownership.js +40 -0
  157. package/dist/rooms-tasks/member-startup.d.ts +1 -0
  158. package/dist/rooms-tasks/member-startup.js +2 -0
  159. package/dist/rooms-tasks/provision.d.ts +3 -0
  160. package/dist/rooms-tasks/provision.js +101 -49
  161. package/dist/rooms-tasks/recovery.d.ts +19 -0
  162. package/dist/rooms-tasks/recovery.js +110 -0
  163. package/dist/rooms-tasks/room-state.d.ts +4 -2
  164. package/dist/rooms-tasks/room-state.js +47 -8
  165. package/dist/rooms-tasks/task-service-retirement.d.ts +11 -0
  166. package/dist/rooms-tasks/task-service-retirement.js +21 -0
  167. package/dist/rooms-tasks/task-state.d.ts +51 -8
  168. package/dist/rooms-tasks/task-state.js +245 -25
  169. package/dist/rooms-tasks/types.d.ts +40 -0
  170. package/dist/rooms-tasks/workspace-artifacts.d.ts +6 -0
  171. package/dist/rooms-tasks/workspace-artifacts.js +93 -0
  172. package/dist/rooms-tasks/workspace.d.ts +35 -0
  173. package/dist/rooms-tasks/workspace.js +325 -0
  174. package/dist/runner.d.ts +25 -3
  175. package/dist/runner.js +291 -49
  176. package/dist/session/acp.d.ts +53 -1
  177. package/dist/session/acp.js +216 -40
  178. package/dist/session/arbiter.d.ts +11 -0
  179. package/dist/session/arbiter.js +43 -2
  180. package/dist/session/codex-app-server.d.ts +32 -0
  181. package/dist/session/codex-app-server.js +137 -23
  182. package/dist/session/control.d.ts +12 -1
  183. package/dist/session/control.js +68 -3
  184. package/dist/session/conversation-normalizer.d.ts +2 -1
  185. package/dist/session/conversation-normalizer.js +1 -1
  186. package/dist/session/conversation-store.d.ts +1 -1
  187. package/dist/session/conversation-store.js +7 -11
  188. package/dist/session/conversation-types.d.ts +28 -3
  189. package/dist/session/prompt-batch.d.ts +63 -0
  190. package/dist/session/prompt-batch.js +86 -0
  191. package/dist/session/task-notice.d.ts +14 -0
  192. package/dist/session/task-notice.js +13 -0
  193. package/dist/session/types.d.ts +14 -0
  194. package/dist/setup-tunnel-preflight.d.ts +34 -0
  195. package/dist/setup-tunnel-preflight.js +62 -0
  196. package/dist/socket-path.d.ts +2 -0
  197. package/dist/socket-path.js +22 -0
  198. package/dist/spawn.d.ts +5 -1
  199. package/dist/spawn.js +40 -4
  200. package/dist/startup-prompt.d.ts +4 -0
  201. package/dist/startup-prompt.js +36 -0
  202. package/dist/startup-readiness.d.ts +13 -0
  203. package/dist/startup-readiness.js +38 -0
  204. package/dist/startup-telemetry.d.ts +16 -0
  205. package/dist/startup-telemetry.js +46 -0
  206. package/dist/subscriptions/cli.d.ts +91 -0
  207. package/dist/subscriptions/cli.js +223 -0
  208. package/dist/subscriptions/launch.d.ts +37 -0
  209. package/dist/subscriptions/launch.js +93 -0
  210. package/dist/subscriptions/login.d.ts +75 -0
  211. package/dist/subscriptions/login.js +182 -0
  212. package/dist/subscriptions/observed.d.ts +7 -0
  213. package/dist/subscriptions/observed.js +44 -0
  214. package/dist/subscriptions/probe.d.ts +10 -0
  215. package/dist/subscriptions/probe.js +73 -0
  216. package/dist/subscriptions/service.d.ts +102 -0
  217. package/dist/subscriptions/service.js +364 -0
  218. package/dist/subscriptions/store.d.ts +71 -0
  219. package/dist/subscriptions/store.js +140 -0
  220. package/dist/supervisor/adoption.d.ts +8 -0
  221. package/dist/supervisor/adoption.js +78 -0
  222. package/dist/supervisor/catalog.d.ts +62 -0
  223. package/dist/supervisor/catalog.js +254 -0
  224. package/dist/supervisor/fleet.d.ts +8 -0
  225. package/dist/supervisor/fleet.js +89 -0
  226. package/dist/supervisor/index.js +3 -6
  227. package/dist/supervisor/launchd.d.ts +1 -1
  228. package/dist/supervisor/launchd.js +26 -13
  229. package/dist/supervisor/legacy.d.ts +35 -0
  230. package/dist/supervisor/legacy.js +524 -0
  231. package/dist/supervisor/manager.d.ts +15 -0
  232. package/dist/supervisor/manager.js +270 -0
  233. package/dist/supervisor/scope.d.ts +4 -0
  234. package/dist/supervisor/scope.js +10 -0
  235. package/dist/supervisor/systemd.d.ts +2 -2
  236. package/dist/supervisor/systemd.js +19 -33
  237. package/dist/task-supervision.d.ts +9 -0
  238. package/dist/task-supervision.js +145 -0
  239. package/dist/temp-idle.d.ts +17 -0
  240. package/dist/temp-idle.js +42 -0
  241. package/dist/temp-lifecycle.d.ts +23 -8
  242. package/dist/temp-lifecycle.js +113 -65
  243. package/dist/temp-supervisor-recovery.d.ts +1 -1
  244. package/dist/temp-supervisor-recovery.js +2 -2
  245. package/dist/tunnel-setup-completion.d.ts +7 -0
  246. package/dist/tunnel-setup-completion.js +13 -0
  247. package/dist/tunnel-setup-input.d.ts +19 -0
  248. package/dist/tunnel-setup-input.js +124 -0
  249. package/dist/web/agent-attachments.d.ts +29 -0
  250. package/dist/web/agent-attachments.js +162 -0
  251. package/dist/web/auth.d.ts +63 -2
  252. package/dist/web/auth.js +191 -10
  253. package/dist/web/available-port.d.ts +2 -0
  254. package/dist/web/available-port.js +23 -0
  255. package/dist/web/control.d.ts +3 -3
  256. package/dist/web/control.js +10 -8
  257. package/dist/web/fleet-config-service.d.ts +4 -1
  258. package/dist/web/fleet-config-service.js +46 -15
  259. package/dist/web/prefix-gateway.d.ts +32 -0
  260. package/dist/web/prefix-gateway.js +238 -0
  261. package/dist/web/runtime.d.ts +3 -1
  262. package/dist/web/runtime.js +116 -31
  263. package/dist/web/server.d.ts +16 -0
  264. package/dist/web/server.js +654 -55
  265. package/dist/web/service.d.ts +11 -2
  266. package/dist/web/service.js +30 -4
  267. package/dist/web/workspace-devices.d.ts +107 -0
  268. package/dist/web/workspace-devices.js +277 -0
  269. package/dist/web/workspace-tunnel.d.ts +1 -0
  270. package/dist/web/workspace-tunnel.js +34 -0
  271. package/dist/workspace-enrollment.d.ts +82 -0
  272. package/dist/workspace-enrollment.js +566 -0
  273. package/dist/workspace-replacement.d.ts +66 -0
  274. package/dist/workspace-replacement.js +220 -0
  275. package/docs/acp-files.md +146 -0
  276. package/docs/fleet-migration.md +54 -0
  277. package/docs/live-voice.md +13 -0
  278. package/docs/room-layouts.md +227 -0
  279. package/docs/task-workspaces.md +225 -0
  280. package/docs/validation/managed-cli-permissions.md +421 -0
  281. package/examples/room-layouts/fresh.yaml +27 -0
  282. package/examples/room-layouts/scoped.yaml +21 -0
  283. package/examples/room-layouts/shared.yaml +19 -0
  284. package/package.json +20 -19
  285. package/presets/README.md +78 -0
  286. package/presets/brain-catalog.json +8 -2
  287. package/presets/fleet/agent_templates/Critic.yaml +1 -1
  288. package/presets/fleet/agent_templates/Developer.yaml +1 -1
  289. package/presets/fleet/agent_templates/Engineer.yaml +5 -0
  290. package/presets/fleet/agent_templates/LocalCoordinator.yaml +1 -1
  291. package/presets/fleet/agents/FleetCoordinator.yaml +1 -1
  292. package/presets/fleet/brains/claude-fable-5-1-high.yaml +5 -0
  293. package/presets/fleet/brains/claude-fable-5-1-low.yaml +5 -0
  294. package/presets/fleet/brains/claude-fable-5-1-max.yaml +5 -0
  295. package/presets/fleet/brains/claude-fable-5-1-medium.yaml +5 -0
  296. package/presets/fleet/brains/claude-fable-5-1-xhigh.yaml +5 -0
  297. package/presets/fleet/brains/claude-fable-5-high.yaml +1 -1
  298. package/presets/fleet/brains/claude-fable-5-low.yaml +1 -1
  299. package/presets/fleet/brains/claude-fable-5-max.yaml +1 -1
  300. package/presets/fleet/brains/claude-fable-5-medium.yaml +1 -1
  301. package/presets/fleet/brains/claude-fable-5-xhigh.yaml +1 -1
  302. package/presets/fleet/brains/claude-haiku-4-5-20251001-default.yaml +4 -0
  303. package/presets/fleet/brains/claude-opus-5-5-high.yaml +5 -0
  304. package/presets/fleet/brains/claude-opus-5-5-low.yaml +5 -0
  305. package/presets/fleet/brains/claude-opus-5-5-max.yaml +5 -0
  306. package/presets/fleet/brains/claude-opus-5-5-medium.yaml +5 -0
  307. package/presets/fleet/brains/claude-opus-5-5-xhigh.yaml +5 -0
  308. package/presets/fleet/brains/claude-opus-5-high.yaml +1 -1
  309. package/presets/fleet/brains/claude-opus-5-low.yaml +1 -1
  310. package/presets/fleet/brains/claude-opus-5-max.yaml +1 -1
  311. package/presets/fleet/brains/claude-opus-5-medium.yaml +1 -1
  312. package/presets/fleet/brains/claude-opus-5-xhigh.yaml +1 -1
  313. package/presets/fleet/brains/claude-sonnet-5-high.yaml +1 -1
  314. package/presets/fleet/brains/claude-sonnet-5-low.yaml +1 -1
  315. package/presets/fleet/brains/claude-sonnet-5-max.yaml +1 -1
  316. package/presets/fleet/brains/claude-sonnet-5-medium.yaml +1 -1
  317. package/presets/fleet/brains/claude-sonnet-5-xhigh.yaml +1 -1
  318. package/presets/fleet/brains/codex-gpt-5-3-codex-spark-high.yaml +1 -1
  319. package/presets/fleet/brains/codex-gpt-5-3-codex-spark-low.yaml +1 -1
  320. package/presets/fleet/brains/codex-gpt-5-3-codex-spark-medium.yaml +1 -1
  321. package/presets/fleet/brains/codex-gpt-5-3-codex-spark-xhigh.yaml +1 -1
  322. package/presets/fleet/brains/codex-gpt-5-4-high.yaml +1 -1
  323. package/presets/fleet/brains/codex-gpt-5-4-low.yaml +1 -1
  324. package/presets/fleet/brains/codex-gpt-5-4-medium.yaml +1 -1
  325. package/presets/fleet/brains/codex-gpt-5-4-mini-high.yaml +1 -1
  326. package/presets/fleet/brains/codex-gpt-5-4-mini-low.yaml +1 -1
  327. package/presets/fleet/brains/codex-gpt-5-4-mini-medium.yaml +1 -1
  328. package/presets/fleet/brains/codex-gpt-5-4-mini-xhigh.yaml +1 -1
  329. package/presets/fleet/brains/codex-gpt-5-4-xhigh.yaml +1 -1
  330. package/presets/fleet/brains/codex-gpt-5-5-high.yaml +1 -1
  331. package/presets/fleet/brains/codex-gpt-5-5-low.yaml +1 -1
  332. package/presets/fleet/brains/codex-gpt-5-5-medium.yaml +1 -1
  333. package/presets/fleet/brains/codex-gpt-5-5-xhigh.yaml +1 -1
  334. package/presets/fleet/brains/codex-gpt-5-6-luna-high.yaml +1 -1
  335. package/presets/fleet/brains/codex-gpt-5-6-luna-low.yaml +1 -1
  336. package/presets/fleet/brains/codex-gpt-5-6-luna-max.yaml +1 -1
  337. package/presets/fleet/brains/codex-gpt-5-6-luna-medium.yaml +1 -1
  338. package/presets/fleet/brains/codex-gpt-5-6-luna-xhigh.yaml +1 -1
  339. package/presets/fleet/brains/codex-gpt-5-6-sol-high.yaml +1 -1
  340. package/presets/fleet/brains/codex-gpt-5-6-sol-low.yaml +1 -1
  341. package/presets/fleet/brains/codex-gpt-5-6-sol-max.yaml +1 -1
  342. package/presets/fleet/brains/codex-gpt-5-6-sol-medium.yaml +1 -1
  343. package/presets/fleet/brains/codex-gpt-5-6-sol-ultra.yaml +1 -1
  344. package/presets/fleet/brains/codex-gpt-5-6-sol-xhigh.yaml +1 -1
  345. package/presets/fleet/brains/codex-gpt-5-6-terra-high.yaml +1 -1
  346. package/presets/fleet/brains/codex-gpt-5-6-terra-low.yaml +1 -1
  347. package/presets/fleet/brains/codex-gpt-5-6-terra-max.yaml +1 -1
  348. package/presets/fleet/brains/codex-gpt-5-6-terra-medium.yaml +1 -1
  349. package/presets/fleet/brains/codex-gpt-5-6-terra-ultra.yaml +1 -1
  350. package/presets/fleet/brains/codex-gpt-5-6-terra-xhigh.yaml +1 -1
  351. package/presets/fleet/brains/codex-gpt-6-1-sol-high.yaml +5 -0
  352. package/presets/fleet/brains/codex-gpt-6-1-sol-low.yaml +5 -0
  353. package/presets/fleet/brains/codex-gpt-6-1-sol-max.yaml +5 -0
  354. package/presets/fleet/brains/codex-gpt-6-1-sol-medium.yaml +5 -0
  355. package/presets/fleet/brains/codex-gpt-6-1-sol-ultra.yaml +5 -0
  356. package/presets/fleet/brains/codex-gpt-6-1-sol-xhigh.yaml +5 -0
  357. package/presets/fleet/brains/codex-gpt-6-astra-high.yaml +1 -1
  358. package/presets/fleet/brains/codex-gpt-6-astra-low.yaml +1 -1
  359. package/presets/fleet/brains/codex-gpt-6-astra-max.yaml +1 -1
  360. package/presets/fleet/brains/codex-gpt-6-astra-medium.yaml +1 -1
  361. package/presets/fleet/brains/codex-gpt-6-astra-ultra.yaml +1 -1
  362. package/presets/fleet/brains/codex-gpt-6-astra-xhigh.yaml +1 -1
  363. package/presets/fleet/brains/codex-gpt-6-luna-high.yaml +5 -0
  364. package/presets/fleet/brains/codex-gpt-6-luna-low.yaml +5 -0
  365. package/presets/fleet/brains/codex-gpt-6-luna-max.yaml +5 -0
  366. package/presets/fleet/brains/codex-gpt-6-luna-medium.yaml +5 -0
  367. package/presets/fleet/brains/codex-gpt-6-luna-xhigh.yaml +5 -0
  368. package/presets/fleet/brains/codex-gpt-6-sol-high.yaml +5 -0
  369. package/presets/fleet/brains/codex-gpt-6-sol-low.yaml +5 -0
  370. package/presets/fleet/brains/codex-gpt-6-sol-max.yaml +5 -0
  371. package/presets/fleet/brains/codex-gpt-6-sol-medium.yaml +5 -0
  372. package/presets/fleet/brains/codex-gpt-6-sol-ultra.yaml +5 -0
  373. package/presets/fleet/brains/codex-gpt-6-sol-xhigh.yaml +5 -0
  374. package/presets/fleet/roles/Coordinator.yaml +34 -11
  375. package/presets/fleet/roles/Engineer.yaml +40 -0
  376. package/presets/fleet/room_layouts/engineering.yaml +25 -0
  377. package/presets/fleet/room_layouts/pair.yaml +24 -0
  378. package/presets/fleet/room_layouts/single.yaml +17 -0
  379. package/presets/fleet/room_layouts/team.yaml +30 -0
  380. package/presets/fleet/room_templates/engineering.yaml +19 -0
  381. package/presets/manifest.json +2 -2
  382. package/dist/web-app/assets/index-59GF-gsZ.css +0 -1
  383. package/dist/web-app/assets/index-C0h3ALvs.js +0 -10
  384. package/dist/web-app/icons/ours-fleet-maskable.svg +0 -4
  385. package/dist/web-app/icons/ours-fleet.svg +0 -4
  386. package/dist/web-app/index.html +0 -17
  387. package/dist/web-app/manifest.webmanifest +0 -15
  388. package/dist/web-app/offline.html +0 -18
  389. package/dist/web-app/sw.js +0 -51
@@ -0,0 +1,421 @@
1
+ # Managed Fleet CLI from Codex and Claude Code workspace sandboxes
2
+
3
+ > **Use the generated setup.** Since `managed-cli.setup-v1`, Fleet prepares the
4
+ > native policy for the packaged task workflow itself. The hand-written rules
5
+ > further down remain as background and for operations outside that workflow
6
+ > (for example `room delete`).
7
+
8
+ ## Fleet-generated setup (issue #233)
9
+
10
+ Declare the workflow on the Agent, or let Fleet add the one key for you:
11
+
12
+ ```sh
13
+ ours-fleet managed-cli setup --enable FleetCoordinator # adds managed_cli: [task-workflow]
14
+ ours-fleet managed-cli setup # generate / reconcile, starts nothing
15
+ ours-fleet managed-cli status # compare only, exit 1 when not current
16
+ ```
17
+
18
+ The declaration is explicit configuration. It is never inferred from a role or
19
+ display name, and `--enable` changes no permission. The same preparation runs at
20
+ every agent start (`up`, `restart`, `spawn`, task-room agents), so newly created
21
+ agents need no separate step. `ours-install` runs `managed-cli setup` from the
22
+ exact Fleet it installed after `init` and on update.
23
+
24
+ An agent invokes a prepared command through the pinned entry form printed in its
25
+ briefing:
26
+
27
+ ```sh
28
+ /abs/node /abs/fleet/dist/cli.js --managed-configuration /abs/fleet.yaml task create --title "..." --backlog --no-room
29
+ ```
30
+
31
+ ### What is prepared
32
+
33
+ | Prepared (runs outside the command sandbox) | Not prepared (stays sandboxed) |
34
+ | --- | --- |
35
+ | `task create`, `task start`, `task finish`, `task block`, `task unblock`, `task review`, `task list`, `task show` | `task cancel`, `task delete` |
36
+ | `room show`, `room members` | `room create`, `room delete`, `room close` |
37
+ | `template list`, `template show`, `template validate`, `config`, `docs` | `spawn`, `ours tools`, `ours call`, `status`, `peek`, `send` |
38
+ | `--help`, `task --help`, `room --help`, `template --help` | service administration, identity and contact commands, oversight |
39
+
40
+ `task start` and `task finish` provision and retire rooms and agents. That is
41
+ real authority, and it is disclosed by `setup`, `status` and the installer.
42
+
43
+ ### Actual invocation boundary
44
+
45
+ - The native rule fixes four things: the Node executable, this Fleet CLI, the
46
+ pinned configuration and the command words. It is an argv **prefix** and admits
47
+ every trailing option and argument. It is not argument validation, target
48
+ authorization or per-agent isolation.
49
+ - A later `-c`/`--configuration` naming another file is refused by the Fleet CLI
50
+ after the process has already started outside the sandbox and been audited.
51
+ That is Fleet runtime validation, not a native policy denial.
52
+ - The pinned form requires a managed session. Outside one, where no supervisor
53
+ would audit it, the CLI refuses it. Commands outside the inventory are refused
54
+ by the CLI even if a hand-written rule would admit them.
55
+ - The supervisor audit, CLI validation, confirmations, SDK credential checks and
56
+ any outer container or host sandbox are unchanged. There is no blanket
57
+ Node/Bash/Fleet grant, no sandbox is disabled, and no new transport exists.
58
+ - Compound (`&&`, `;`), piped, redirected, `$(...)`, backslash-escaped and
59
+ `VAR=value`-prefixed command lines do not match and stay sandboxed.
60
+
61
+ ### Quoting, measured natively
62
+
63
+ Measured with real Codex 0.160.0 and Claude Code 2.1.289 on Linux:
64
+
65
+ | Spelling | Codex | Claude |
66
+ | --- | --- | --- |
67
+ | Single-quoted CLI / configuration path or option value containing spaces | matches | matches |
68
+ | Double-quoted later token | matches | does not match |
69
+ | Quoted **executable** token | never matches | never matches |
70
+ | Unquoted symlinked executable | matches | matches |
71
+
72
+ Fleet therefore spells a CLI or configuration path containing spaces in single
73
+ quotes (Codex >= 0.160.0 required; older or unreadable versions are reported as
74
+ unsupported for such paths), and requires the Node executable at a path needing
75
+ no quoting. A path containing anything but letters, digits, spaces and
76
+ `_@%+=:,./-` (so no quotes, backslashes, `*` or other pattern characters, which
77
+ Claude's entries would not treat literally), or one that is or resolves
78
+ inside the agent's workspace, is reported as unsupported rather than widened.
79
+
80
+ ### What is written, and ownership
81
+
82
+ - **Codex**: `<workspace>/.codex/rules/ours-fleet-<id>.rules`, one file per Fleet
83
+ configuration, carrying a Fleet marker header. It applies to every trusted
84
+ Codex session in that workspace, not to one identity, and Codex must already
85
+ trust the workspace: Fleet reports missing trust and never changes it. A file
86
+ shared by several agents is held in `~/.ours-fleet/managed-cli/registry.json`
87
+ and removed only when its last holder is gone. Files without the Fleet marker,
88
+ including a hand-written `ours-fleet.rules`, are never modified; one occupying
89
+ the generated name is reported as a conflict.
90
+ - **Claude**: `permissions.allow` and `sandbox.excludedCommands` entries in the
91
+ agent's own Fleet settings overlay, delivered to the bundled ACP adapter. The
92
+ operator's Claude settings are not modified. Fleet never sets
93
+ `sandbox.enabled`; if no readable settings file enables the OS sandbox, or a
94
+ `deny` rule would override the entries, `status` and `doctor` say so.
95
+ - Setup is idempotent. Changed Node/CLI/configuration paths rewrite the Fleet
96
+ entries; entries for agents or configurations that no longer exist are removed
97
+ and listed.
98
+
99
+ ### Diagnostics
100
+
101
+ `ours-fleet doctor` and `managed-cli status` report three separate facts:
102
+
103
+ | Row | Source | Meaning |
104
+ | --- | --- | --- |
105
+ | setup | generated files compared with this installation | static configuration only |
106
+ | session | the role's launch record | whether the last start loaded the current policy, or a restart is required |
107
+ | observed | the supervisor audit ledger | which pinned forms actually completed since that start |
108
+
109
+ A prepared setup is not evidence of supervisor access. An observed `--help`
110
+ proves only its own audited path; lifecycle forms that were never observed are
111
+ listed as such. `task create --help` is reported as `task create --help`, a help
112
+ call, not as `task create`. Rows from before the current launch are reported as
113
+ historical. The ledger stores the pinned configuration as a fingerprint, never
114
+ as its path; a row pinned to another configuration, or to none that can be told,
115
+ is counted separately and is not evidence for this policy. Rows whose content
116
+ was erased with their task or room keep what they prove.
117
+
118
+ A launch also gives up what the role held before: opting out, losing support or
119
+ moving to another workspace or configuration removes that role's Codex rules at
120
+ the next start, without touching a file another agent still holds.
121
+
122
+ ### Unsupported combinations
123
+
124
+ Reported, with the reason, and left exactly as sandboxed as before: Windows and
125
+ other platforms; Hermes and other harnesses; custom ACP or app-server session
126
+ commands; roles declaring `isolation:`; unspellable paths; a Node path needing
127
+ quotes; Codex older than 0.160.0 with quoted paths; and any pinned file the
128
+ agent could replace — inside its workspace or a `harness_options.add_dirs`
129
+ directory, lexically or through a symlink. Codex roles with
130
+ `harness_options.profile` or uninspected `harness_options.config` remain unsupported:
131
+ those can change the native sandbox (for example extra writable roots) in ways
132
+ Fleet does not inspect. The only accepted nonempty config is
133
+ `model_reasoning_effort` with a supported value (`low`, `medium`, `high`, `xhigh`,
134
+ `max`, `ultra`). This includes the config generated by Codex Brain `effort` (#235).
135
+ The chosen effort remains in native launch config and ACP reasoning selection;
136
+ adding any unknown or security-bearing config key still prevents policy setup.
137
+ Native user settings Fleet cannot read are outside this check.
138
+
139
+ ### Qualification
140
+
141
+ `test/managed-cli-workflow.integration.mjs` runs real Codex / Claude Code through
142
+ Fleet's own adapters and launch preparation against a real supervisor control
143
+ server and audit ledger. A scripted local provider only requests commands; no
144
+ external model, account, production identity or room is used.
145
+
146
+ ```sh
147
+ FLEET_TEST_HARNESS=codex FLEET_CODEX_BIN=/absolute/codex FLEET_TEST_SESSION=codex-app-server \
148
+ FLEET_TEST_TMP_PREFIX=/absolute/private-test-parent/fleet-mc- \
149
+ node test/managed-cli-workflow.integration.mjs
150
+ ```
151
+
152
+ Use `FLEET_TEST_SESSION=acp` for bundled Codex ACP, and
153
+ `FLEET_TEST_HARNESS=claude FLEET_CLAUDE_BIN=/absolute/claude` for bundled Claude
154
+ ACP. `FLEET_TEST_QUOTED=1` installs the CLI and configuration under paths
155
+ containing spaces. `FLEET_TEST_CLAUDE_SANDBOX=0` checks the diagnostics when the
156
+ operator has not enabled Claude's sandbox. `FLEET_TEST_NESTED_SANDBOX=1` is for
157
+ unprivileged containers only. `FLEET_TEST_EVIDENCE=/file.json` records every
158
+ command, exit code and output.
159
+
160
+ Each run checks: unpinned `--help` denied at the socket; an unrelated write
161
+ outside the workspace still denied by the OS; pinned help; `task create` with
162
+ quoted variable options, `task list|show|block|unblock`, template and plan
163
+ inspection completing with audit rows; `task review|start|finish` and
164
+ `room show|members` reaching the supervisor and Fleet validation (their
165
+ successful run is the lifecycle fixture below); `template show|validate` and
166
+ `docs`; a late
167
+ `--configuration` refused by Fleet; unprepared commands, a missing or different
168
+ pin, preload injection, chaining and redirection staying sandboxed; and `status`
169
+ listing exactly the forms the audit ledger observed.
170
+
171
+ `test/managed-cli-lifecycle.integration.mjs` is the full stack: the real role
172
+ runner (`ours-fleet _run`) launches the Coordinator, with a real local ours
173
+ daemon and Cowork service (`FLEET_COWORK_CLI=/abs/cowork/dist/cli.js`). From
174
+ inside the command sandbox the Coordinator's session creates a task, starts it —
175
+ a Cowork room is provisioned and a room member agent is really spawned through
176
+ the supervisor — runs `task show`, `room show`, `room members`, `task block`,
177
+ `task unblock`, `task review` and `task finish`, which retires the member and
178
+ the room. Every command is typed in the pinned form and must have a successful
179
+ audit row; the task must end `done`. `FLEET_TEST_HARNESS=claude` puts the
180
+ Coordinator on bundled Claude ACP with its OS sandbox enabled (the member stays
181
+ on Codex). Only the model provider is scripted; the daemon runs without a broker.
182
+
183
+ Two outcomes of that run are Fleet's existing lifecycle behaviour, not policy,
184
+ and are recorded rather than hidden: the first `task start` can answer
185
+ "readiness is unknown" while the member's session is still starting, and the
186
+ first `task finish` can report that the member's live state disappeared while it
187
+ is still stopping. In both cases the task is already durably in the right state
188
+ and re-running the same command, as its message says, succeeds.
189
+
190
+ Linux x86_64 host (kernel 7.0, Node 22.23.1, Codex 0.160.0, Claude Code 2.1.289):
191
+
192
+ | Harness / session | Plain paths | Paths with spaces |
193
+ | --- | --- | --- |
194
+ | Codex native app-server | PASS | PASS |
195
+ | Bundled Codex ACP | PASS | PASS |
196
+ | Bundled Claude ACP, OS sandbox enabled | PASS | PASS |
197
+ | Bundled Claude ACP, OS sandbox not enabled (diagnostic) | PASS | not run |
198
+
199
+ | Full-stack lifecycle (real runner, room, spawned member) | Result |
200
+ | --- | --- |
201
+ | Codex native app-server Coordinator, Codex native member | PASS |
202
+ | Bundled Codex ACP Coordinator, Codex ACP member | PASS |
203
+ | Bundled Claude ACP Coordinator (OS sandbox enabled), Codex native member | PASS |
204
+
205
+ Across repeated runs the re-runs described above occurred zero or one time per
206
+ command; each run prints how many. The spawned member's Agent Template declares
207
+ `managed_cli` itself, and the run asserts what that member's own launch
208
+ prepared: a Codex native member gets its own record, rules in its own workspace
209
+ and a temporary holder; a Codex ACP member with `approval: allow` has no command
210
+ sandbox, so its launch records `not-required` and generates nothing. After
211
+ `task finish` the run asserts that the member's live state, Fleet's room record
212
+ and the Cowork room are gone, and that the member's rules were removed.
213
+
214
+ Not qualified, and not claimed:
215
+
216
+ - **macOS.** The generated setup has not been run there. `managed-cli status`
217
+ discloses this on macOS. The mechanisms are the ones the hand-written policy
218
+ below used on macOS, but that is not a run of this matrix.
219
+ - **Service-managed supervisors and a real model.** The lifecycle run starts
220
+ the runner directly (`OURS_FLEET_SUPERVISOR=none`), not through systemd or
221
+ launchd, uses a scripted provider, attaches no owner to the room and has no
222
+ broker. The spawned member only starts and stops; it does no work.
223
+ - Paths with spaces in the full-stack lifecycle run (covered by the matrix
224
+ above), Claude standalone, Hermes, Windows and isolated roles.
225
+
226
+ A managed Fleet CLI invocation sends `fleet_audit_begin` to the supervisor's Unix
227
+ socket before parsing commands, including `--help`. A socket that exists and is
228
+ owned by the current user can still return `connect EPERM` from a restricted
229
+ command sandbox. This is not evidence that the supervisor is down or Fleet needs
230
+ reinstallation. Check filesystem permissions too: `EACCES`/`EPERM` alone does not
231
+ identify which policy denied access.
232
+
233
+ ## Background: hand-written native execution rules
234
+
235
+ Keep the role's `approval: auto`, `filesystem: workspace`, and `unattended: deny`.
236
+ For an operator authorized to manage rooms, explicitly approve the necessary CLI
237
+ operations using Codex's standard execution rules. A matching operation executes
238
+ outside Codex's command sandbox, retaining the normal CLI, supervisor audit,
239
+ configuration, credentials, and confirmation checks. Other shell commands remain
240
+ sandboxed. This does not override an outer container or host sandbox.
241
+
242
+ In the **trusted workspace** create `.codex/rules/ours-fleet.rules`, substituting
243
+ absolute paths to the installed Node binary, installed Fleet CLI, and approved
244
+ configuration. Example for an operator allowed to delete rooms in this Fleet:
245
+
246
+ ```python
247
+ prefix_rule(
248
+ pattern=["/opt/node/bin/node", "/opt/fleet/dist/cli.js", "room", "delete",
249
+ "--configuration", "/srv/fleet/fleet.yaml", "--json", "--"],
250
+ decision="allow",
251
+ )
252
+ ```
253
+
254
+ Invoke exactly that prefix, followed by the room ID and the confirmation ID:
255
+
256
+ ```sh
257
+ /opt/node/bin/node /opt/fleet/dist/cli.js room delete --configuration /srv/fleet/fleet.yaml --json -- ROOM_ID ROOM_ID
258
+ ```
259
+
260
+ To authorize only one room, append both concrete IDs to the rule's pattern.
261
+ The `--` terminator prevents trailing arguments from changing the fixed options.
262
+ Do not approve the entire Node executable or the entire Fleet CLI. Do not add
263
+ `spawn`, `ours call`, arbitrary scripts, or configuration overrides to this rule.
264
+ A separate fixed `[NODE, CLI, "--help"]` rule can authorize managed help.
265
+
266
+ Restart the Codex session after changing rules. Native Fleet and bundled Codex ACP
267
+ use the same workspace rules. Codex must trust that workspace; configure trust
268
+ through the normal operator workflow rather than enabling it from an agent tool.
269
+ No runtime services or installed packages need restarting for this policy change.
270
+
271
+ ## Boundaries
272
+
273
+ - A rule grants the named operation real authority. The repeated room ID is CLI
274
+ confirmation, not a substitute for user authorization.
275
+ - Rules apply to trusted Codex sessions in this workspace, not exclusively to one
276
+ Fleet identity. They depend on the launcher's inherited environment. Keep the
277
+ executable, CLI installation, credentials, and configuration outside the
278
+ agent-writable workspace. Do not treat this as an identity isolation feature.
279
+ - User/organization denied-read rules or an outer sandbox may forbid execution
280
+ outside the command sandbox. These restrictions take precedence; do not remove
281
+ them implicitly to make Fleet work.
282
+ - On tested Codex 0.159.0, quoting the executable/script tokens prevented the rule
283
+ from granting execution outside the sandbox. For hand-written rules use the
284
+ canonical simple-token invocation above. The generated setup qualifies quoted
285
+ script and argument paths on Codex 0.160.0; see "Quoting, measured natively".
286
+ - Merely enabling network inside the Linux command sandbox was insufficient:
287
+ its user namespace maps ancestor directory owners to UID 65534, which the SDK's
288
+ strict credential ancestry checks reject. Approved CLI execution avoids that
289
+ namespace; SDK security checks remain unchanged.
290
+
291
+ ## Reproduction and regression checks
292
+
293
+ The [issue author’s validation matrix](https://github.com/adapt-toolkit/ours-fleet/issues/231)
294
+ used Codex 0.159.0 on macOS/Linux, native and ACP. Those results are not new runs
295
+ on every revision of this fixture. Build Fleet and supply the complete installed
296
+ Codex distribution (including its adjacent helper binaries) and a built Cowork CLI.
297
+ Run from the Fleet repo:
298
+
299
+ ```sh
300
+ FLEET_CODEX_BIN=/absolute/codex \
301
+ FLEET_COWORK_CLI=/absolute/cowork/dist/cli.js \
302
+ FLEET_TEST_SESSION=codex-app-server \
303
+ FLEET_TEST_TMP_PREFIX=/absolute/private-test-parent/fleet-ipc- \
304
+ node test/fleet-cli-permissions.integration.mjs
305
+ ```
306
+
307
+ Repeat with `FLEET_TEST_SESSION=acp`. The test parent must be writable, outside
308
+ `/tmp` and outside the tested workspace: ACP may allow `/tmp` independently.
309
+ Omit `FLEET_TEST_SESSION` to test standalone `codex exec`.
310
+
311
+ The local scripted Responses provider supplies only command requests. Real Codex,
312
+ Fleet adapters, CLI, control socket, audit store, daemon, and Cowork perform the
313
+ operations. No external model or production identities/rooms are used. Child processes are stopped and temporary state is removed afterward. To retain
314
+ fixture evidence, set `FLEET_TEST_KEEP_ARTIFACTS=1`. The fixture allowlists its
315
+ launcher environment and uses a disposable HOME; no provider keys, preloads, or
316
+ user configuration are inherited.
317
+
318
+ Checks: baseline network-denied `--help`; permitted help; wrong confirmation
319
+ leaves the room intact; correct confirmation deletes the actual empty test room
320
+ from Fleet and Cowork; caller audit remains present; unrelated outside-workspace
321
+ write, `NODE_OPTIONS` injection, and a different configuration remain denied.
322
+ The fixture uses `OURS_FLEET_SUPERVISOR=none`: launchctl/systemd workers and deletion
323
+ of a live room containing agents are outside this test's coverage.
324
+
325
+ Reference: [Codex execution rules](https://learn.chatgpt.com/docs/agent-configuration/rules).
326
+
327
+ ## Claude Code: the same CLI path, different permission settings
328
+
329
+ The issue author verified Claude Code 2.1.284 on macOS and Linux, both standalone and through
330
+ Fleet's bundled Claude ACP adapter (0.63.0). Fleet `approval: auto` maps to
331
+ `acceptEdits`, which is not blanket permission for Bash. Fleet's `filesystem:
332
+ workspace` also does not by itself enable Claude's OS sandbox. Explicitly enable
333
+ it and configure both the execution exclusion and the command permission:
334
+
335
+ ```json
336
+ {
337
+ "sandbox": {
338
+ "enabled": true,
339
+ "failIfUnavailable": true,
340
+ "allowUnsandboxedCommands": false,
341
+ "excludedCommands": [
342
+ "/opt/node/bin/node /opt/fleet/dist/cli.js room delete --configuration /srv/fleet/fleet.yaml --json -- *"
343
+ ]
344
+ },
345
+ "permissions": {
346
+ "allow": [
347
+ "Bash(/opt/node/bin/node /opt/fleet/dist/cli.js room delete --configuration /srv/fleet/fleet.yaml --json -- *)"
348
+ ]
349
+ }
350
+ }
351
+ ```
352
+
353
+ Use operator-controlled Claude settings. The fixture uses an isolated settings
354
+ file delivered with `--settings` (standalone) or Fleet's supported settings overlay
355
+ metadata (bundled ACP). It does not modify the user's settings. As with the Codex
356
+ rule, append exact room IDs instead of `*` to restrict this to one room.
357
+
358
+ `excludedCommands` controls placement outside the command sandbox;
359
+ `permissions.allow` authorizes the action. Neither should be replaced with global
360
+ `bypassPermissions`, blanket `Bash(*)`, or an exception for all Node programs.
361
+ An external sandbox or managed policy can still override this configuration.
362
+
363
+ Linux inside an unprivileged Docker container additionally needed
364
+ `sandbox.enableWeakerNestedSandbox: true`: otherwise bubblewrap failed to mount
365
+ `/proc` before any CLI command ran. This documented setting bind-mounts the
366
+ container's existing `/proc`, weakening that part of the nested isolation. It is
367
+ specific to the nested test environment, not an unconditional Linux requirement.
368
+ The tests still prove Unix-socket denial and filesystem write denial. The outer
369
+ Docker seccomp profile was unconfined to support nesting, as in the Codex tests.
370
+
371
+ Run the same integration scenario with:
372
+
373
+ ```sh
374
+ FLEET_CLAUDE_BIN=/absolute/claude \
375
+ FLEET_COWORK_CLI=/absolute/cowork/dist/cli.js \
376
+ FLEET_TEST_TMP_PREFIX=/absolute/private-test-parent/fleet-claude- \
377
+ FLEET_TEST_SESSION=claude-acp \
378
+ node test/fleet-cli-permissions.integration.mjs
379
+ ```
380
+
381
+ Omit `FLEET_TEST_SESSION` for standalone Claude. In the nested Linux fixture add
382
+ `FLEET_TEST_NESTED_SANDBOX=1` explicitly. A scripted local Anthropic Messages/SSE
383
+ provider requests the real Bash call and captures the actual tool result. The
384
+ negative baseline grants Bash permission without an exclusion and verifies that
385
+ the supervisor socket is still blocked. The write probe is separately authorized
386
+ inside the sandbox; it must execute and report an OS denial, not merely fail an
387
+ approval prompt. No real model/account credentials are used.
388
+
389
+ All other limits above apply: empty room, isolated audit/control server,
390
+ `supervisor=none` workers, and adapter coverage rather than full production runner.
391
+
392
+ Reference: [Claude sandbox exclusions and permissions](https://code.claude.com/docs/en/sandboxing#run-commands-outside-the-sandbox-with-excludedcommands).
393
+
394
+
395
+ ## Port validation for issue #231
396
+
397
+ The separate upstream port was rerun on Linux amd64 in a disposable Node 22.23.1
398
+ container with Codex 0.160.0 and Claude Code 2.1.289:
399
+
400
+ | Harness execution | Result |
401
+ | --- | --- |
402
+ | Codex native app-server | PASS |
403
+ | Bundled Codex ACP | PASS |
404
+ | Claude standalone | PASS |
405
+ | Bundled Claude ACP | PASS |
406
+
407
+ Each complete run checks actual socket denial, permitted help, wrong-confirmation
408
+ refusal, deletion of its own empty Fleet/Cowork room, preserved caller audit, and
409
+ OS denial of an unrelated write, preload injection, and alternate configuration.
410
+ The scripted providers and all state are local; external network access is disabled.
411
+ For these nested tests only, the outer Docker seccomp and AppArmor profiles were
412
+ unconfined and Claude used `enableWeakerNestedSandbox: true`. No host policies or
413
+ production services were changed. The inner command sandbox remains enforced by
414
+ the negative checks. These are container results, not a qualification of normal
415
+ host settings. Initial missing-helper and outer-policy failures were retained
416
+ alongside the passing runs; they are not counted as passing tests.
417
+
418
+ The port also passed 88 diagnostic/conversation/audit unit checks, a build, and an
419
+ npm package dry-run check for this document. The diagnostic preserves the prior
420
+ error kinds and audited CLI failure before parsing. This does not claim a fresh
421
+ macOS run, full production runner coverage, or live-agent room deletion.
@@ -0,0 +1,27 @@
1
+ version: 1
2
+ description: Separate participant keys create independent agent sessions for each room
3
+ participants:
4
+ productArchitect:
5
+ agent_template: Architect
6
+ productReviewer:
7
+ agent_template: Reviewer
8
+ designArchitect:
9
+ agent_template: Architect
10
+ designDeveloper:
11
+ agent_template: Developer
12
+ designReviewer:
13
+ agent_template: Reviewer
14
+ deliveryDeveloper:
15
+ agent_template: Developer
16
+ deliveryReviewer:
17
+ agent_template: Reviewer
18
+ rooms:
19
+ product:
20
+ goal: Agree on the problem and acceptance criteria
21
+ members: [productArchitect, productReviewer]
22
+ design:
23
+ goal: Design the accepted solution
24
+ members: [designArchitect, designDeveloper, designReviewer]
25
+ delivery:
26
+ goal: Implement and verify the accepted design
27
+ members: [deliveryDeveloper, deliveryReviewer]
@@ -0,0 +1,21 @@
1
+ version: 1
2
+ description: Shared specialists and one independent reviewer per room
3
+ participants:
4
+ architect:
5
+ agent_template: Architect
6
+ instance_scope: layout
7
+ developer:
8
+ agent_template: Developer
9
+ reviewer:
10
+ agent_template: Reviewer
11
+ instance_scope: room
12
+ rooms:
13
+ product:
14
+ goal: Agree on the problem and acceptance criteria
15
+ members: [architect, reviewer]
16
+ design:
17
+ goal: Design the accepted solution
18
+ members: [architect, developer, reviewer]
19
+ delivery:
20
+ goal: Implement and verify the accepted design
21
+ members: [developer, reviewer]
@@ -0,0 +1,19 @@
1
+ version: 1
2
+ description: Same agents retain their sessions across rooms
3
+ participants:
4
+ architect:
5
+ agent_template: Architect
6
+ developer:
7
+ agent_template: Developer
8
+ reviewer:
9
+ agent_template: Reviewer
10
+ rooms:
11
+ product:
12
+ goal: Agree on the problem and acceptance criteria
13
+ members: [architect, reviewer]
14
+ design:
15
+ goal: Design the accepted solution
16
+ members: [architect, developer, reviewer]
17
+ delivery:
18
+ goal: Implement and verify the accepted design
19
+ members: [developer, reviewer]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ours.network/fleet",
3
- "version": "1.2.0-nightly.6",
3
+ "version": "1.2.0-nightly.61",
4
4
  "description": "Harness-agnostic fleet of persistent, identity-bound AI agents. Declarative fleet.yaml, managed native/ACP sessions, supervision, and ours.network messaging.",
5
5
  "type": "module",
6
6
  "license": "FSL-1.1-Apache-2.0",
@@ -18,36 +18,40 @@
18
18
  "examples",
19
19
  "presets",
20
20
  "README.md",
21
- "LICENSE"
21
+ "docs/task-workspaces.md",
22
+ "docs/live-voice.md",
23
+ "docs/room-layouts.md",
24
+ "docs/validation/managed-cli-permissions.md",
25
+ "docs/fleet-migration.md",
26
+ "LICENSE",
27
+ "docs/acp-files.md"
22
28
  ],
23
29
  "engines": {
24
- "node": ">=22"
30
+ "node": ">=22.13.0"
25
31
  },
26
32
  "scripts": {
27
33
  "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
28
- "build": "npm run clean && tsc -p tsconfig.json && vite build && node scripts/build-info.mjs",
29
- "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p web/tsconfig.json --noEmit",
34
+ "build": "npm run clean && tsc -p tsconfig.json && node scripts/build-info.mjs",
35
+ "typecheck": "tsc -p tsconfig.json --noEmit",
30
36
  "lint": "npm run typecheck",
31
37
  "test": "vitest run",
32
38
  "test:web": "vitest run test/web",
33
39
  "test:pack": "vitest run --config vitest.integration.config.ts",
34
- "test:e2e": "npm run build && playwright test",
35
- "dev:web": "vite",
36
40
  "prepack": "npm run build",
37
41
  "prepublishOnly": "npm run build && npm test",
42
+ "test:task-recovery": "node test/task-runtime-recovery.integration.mjs",
43
+ "test:fleet-recovery": "node test/fleet-manager-recovery.integration.mjs",
38
44
  "test:v1-recovery": "node test/fleet-v1-recovery.integration.mjs retry && node test/fleet-v1-recovery.integration.mjs terminal-after-failure && node test/fleet-v1-recovery.integration.mjs terminal-release-failure"
39
45
  },
40
46
  "dependencies": {
41
47
  "@agentclientprotocol/sdk": "^1.3.0",
42
- "@fastify/static": "^10.1.2",
43
48
  "@fastify/websocket": "^11.2.0",
44
- "@ours.network/cli": "2.8.1-nightly.9",
45
- "@ours.network/mcp": "1.2.0-nightly.7",
46
- "@ours.network/sdk": "3.8.1-nightly.11",
49
+ "@ours.network/cli": "2.8.1-nightly.16",
50
+ "@ours.network/mcp": "1.2.0-nightly.14",
51
+ "@ours.network/sdk": "3.8.1-nightly.18",
47
52
  "commander": "^12.1.0",
48
53
  "fastify": "^5.4.0",
49
- "react": "^19.1.1",
50
- "react-dom": "^19.1.1",
54
+ "qrcode": "1.5.4",
51
55
  "secure-json-parse": "^4.1.0",
52
56
  "ws": "^8.18.3",
53
57
  "yaml": "^2.5.0"
@@ -57,14 +61,11 @@
57
61
  "@agentclientprotocol/codex-acp": "1.10.0"
58
62
  },
59
63
  "devDependencies": {
60
- "@ours.network/daemon": "3.8.1-nightly.3",
61
- "@playwright/test": "^1.54.1",
62
- "@types/node": "^20.14.0",
63
- "@types/react": "^19.1.9",
64
- "@types/react-dom": "^19.1.7",
64
+ "@ours.network/daemon": "3.8.1-nightly.10",
65
+ "@types/node": "^22.20.4",
66
+ "@types/qrcode": "^1.5.6",
65
67
  "@types/ws": "^8.18.1",
66
68
  "typescript": "^5.5.0",
67
- "vite": "^7.0.6",
68
69
  "vitest": "^2.0.0"
69
70
  }
70
71
  }
@@ -0,0 +1,78 @@
1
+ # Predefined Brains
2
+
3
+ `brain-catalog.json` is the source for generated `fleet/brains/*.yaml` files.
4
+ Run `node scripts/generate-brain-presets.mjs` after changing it, and run the same
5
+ command with `--check` to verify generated files. An empty `efforts` array generates
6
+ one `-default` preset with no `effort` field. Bootstrap adds missing presets and
7
+ preserves existing user files. Existing model presets remain available.
8
+
9
+ ## GPT-6.1 Sol (added 2026-09-29)
10
+
11
+ The Codex presets `codex-gpt-6-1-sol-{low,medium,high,xhigh,max,ultra}`
12
+ use the exact model ID `gpt-6.1-sol` with ACP sessions. The init wizard offers
13
+ GPT-6.1 Sol for development, review, and coordination.
14
+
15
+ [Official OpenAI documentation](https://developers.openai.com/api/docs/models/gpt-6.1-sol)
16
+ supports low, medium, high, xhigh, and max API reasoning efforts. The local
17
+ Codex `models_cache.json` inspected on 2026-09-29 additionally advertises
18
+ `ultra`, a Codex harness mode. These presets reflect that six-effort Codex
19
+ catalog; no inference or ACP launch was performed for this addition.
20
+
21
+ ## Current model additions (verified 2026-09-24)
22
+
23
+ | Harness | Exact model ID | Preset efforts |
24
+ | --- | --- | --- |
25
+ | Codex | `gpt-6-sol` | low, medium, high, xhigh, max, ultra |
26
+ | Codex | `gpt-6-luna` | low, medium, high, xhigh, max |
27
+ | Claude Code | `claude-fable-5-1` | low, medium, high, xhigh, max |
28
+ | Claude Code | `claude-opus-5-5` | low, medium, high, xhigh, max |
29
+ | Claude Code (retained) | `claude-sonnet-5` | low, medium, high, xhigh, max |
30
+ | Claude Code | `claude-haiku-4-5-20251001` | default, with no effort setting |
31
+
32
+ For example, select `codex-gpt-6-sol-ultra`, `claude-opus-5-5-max`, or
33
+ `claude-haiku-4-5-20251001-default` as a Brain reference. The init wizard offers
34
+ models supporting its Quick/Balanced/Thorough (low/medium/high) choices; use the
35
+ named Brain directly for Haiku, which does not support effort.
36
+
37
+ ### Runtime requirements and evidence
38
+
39
+ Codex CLI **0.155.0** freshly queried through `app-server` `initialize` then
40
+ `model/list` advertised the GPT rows above. A previously populated
41
+ `~/.codex/models_cache.json` did not contain these models; refresh runtime discovery
42
+ before concluding a model is unavailable. `ours-fleet doctor` compares presets to
43
+ the local cache. The catalog is not an account entitlement guarantee.
44
+
45
+ The [Sol](https://developers.openai.com/api/docs/models/gpt-6-sol) and
46
+ [Luna](https://developers.openai.com/api/docs/models/gpt-6-luna) API model pages
47
+ also support `none`, but the verified Codex runtime does not advertise it.
48
+ Consequently there are no `none` presets. Sol's `ultra` is an advertised Codex
49
+ harness mode, not an additional API reasoning level; Luna does not advertise it.
50
+
51
+ Claude Code **2.1.281** was verified using the Agent SDK `supportedModels()`
52
+ control request, with `pathToClaudeCodeExecutable` pointing to the installed
53
+ Claude CLI, without sending an inference prompt. It reports Fable 5.1, Opus 5.5,
54
+ Sonnet 5 and Haiku 4.5 with the capabilities above. These are verified versions,
55
+ not asserted minimum versions. Provider references:
56
+ [model IDs](https://platform.claude.com/docs/en/models/overview) and
57
+ [Claude Code effort support](https://code.claude.com/docs/en/model-config#adjust-effort-level).
58
+
59
+ **Check the executable used by ACP before selecting the new Claude presets.**
60
+ The inspected `claude-agent-acp` **0.63.0** installation bundles Agent SDK
61
+ **0.3.220**, whose default executable reports older models. To use the verified
62
+ installed Claude CLI, set `CLAUDE_CODE_EXECUTABLE` to its absolute path in the
63
+ launch environment (for example `/usr/bin/claude` on the verification host).
64
+ Otherwise use a bundled SDK whose runtime advertises these models and efforts.
65
+ The presets do not change your executable or restart agents. An older bundled
66
+ runtime alone is not evidence of support for the new models.
67
+
68
+ No-prompt ACP startup and `session/set_config_option` probes also verified all
69
+ new GPT and Claude effort combinations, including Sol `ultra` and Claude `max`;
70
+ Haiku startup advertises no effort option. The probes used Codex ACP 1.10.0
71
+ with the installed Codex executable and Claude ACP 0.63.0 with the native override.
72
+
73
+ ACP builds effort options from the selected model's `supportedEffortLevels` and
74
+ applies the selection through the SDK's session flag settings. This supports
75
+ `max` without writing it to persistent `effortLevel` settings. Fleet verifies
76
+ that ACP applied the requested effort and fails on rejection. `ultracode` is a
77
+ separate Claude orchestration setting and is not a model effort preset. Account
78
+ and organization restrictions still apply at launch; no fallback model is added.