@openrig/cli 0.5.17 → 0.6.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 (430) hide show
  1. package/daemon/assets/guidance/openrig-start.md +7 -0
  2. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +7 -0
  3. package/daemon/context-packs/help/help.md +130 -0
  4. package/daemon/context-packs/help/manifest.yaml +9 -0
  5. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
  6. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +3 -0
  7. package/daemon/context-packs/reference/getting-started.md +454 -0
  8. package/daemon/context-packs/reference/instance-layout.md +106 -0
  9. package/daemon/context-packs/reference/manifest.yaml +16 -0
  10. package/daemon/context-packs/reference/rig-spec.md +580 -0
  11. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  12. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  13. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  14. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
  15. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  16. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  17. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  18. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  19. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  20. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  21. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  22. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  23. package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +7 -0
  24. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  25. package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
  26. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  27. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  28. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  29. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  30. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  31. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  33. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  34. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  36. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  46. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  49. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  54. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  55. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  57. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  58. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  61. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  62. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  63. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  64. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  65. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  66. package/daemon/dist/adapters/claude-code-adapter.d.ts +3 -0
  67. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  68. package/daemon/dist/adapters/claude-code-adapter.js +36 -14
  69. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  70. package/daemon/dist/adapters/claude-resume.d.ts +3 -1
  71. package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
  72. package/daemon/dist/adapters/claude-resume.js +20 -6
  73. package/daemon/dist/adapters/claude-resume.js.map +1 -1
  74. package/daemon/dist/adapters/codex-resume.d.ts +4 -1
  75. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  76. package/daemon/dist/adapters/codex-resume.js +8 -2
  77. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  78. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +6 -0
  79. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  80. package/daemon/dist/adapters/codex-runtime-adapter.js +25 -4
  81. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  82. package/daemon/dist/adapters/pi-runner.d.ts +1 -0
  83. package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
  84. package/daemon/dist/adapters/pi-runner.js +7 -1
  85. package/daemon/dist/adapters/pi-runner.js.map +1 -1
  86. package/daemon/dist/adapters/tmux.d.ts +21 -1
  87. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  88. package/daemon/dist/adapters/tmux.js +141 -3
  89. package/daemon/dist/adapters/tmux.js.map +1 -1
  90. package/daemon/dist/adapters/yolo-mode.d.ts +3 -2
  91. package/daemon/dist/adapters/yolo-mode.d.ts.map +1 -1
  92. package/daemon/dist/adapters/yolo-mode.js +10 -2
  93. package/daemon/dist/adapters/yolo-mode.js.map +1 -1
  94. package/daemon/dist/build-info.js +3 -3
  95. package/daemon/dist/db/all-migrations.d.ts +1 -1
  96. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  97. package/daemon/dist/db/all-migrations.js +10 -2
  98. package/daemon/dist/db/all-migrations.js.map +1 -1
  99. package/daemon/dist/db/migrations/086_classification_fields_and_attempts.d.ts +26 -0
  100. package/daemon/dist/db/migrations/086_classification_fields_and_attempts.d.ts.map +1 -0
  101. package/daemon/dist/db/migrations/086_classification_fields_and_attempts.js +66 -0
  102. package/daemon/dist/db/migrations/086_classification_fields_and_attempts.js.map +1 -0
  103. package/daemon/dist/db/migrations/087_seat_delivery_guard.d.ts +3 -0
  104. package/daemon/dist/db/migrations/087_seat_delivery_guard.d.ts.map +1 -0
  105. package/daemon/dist/db/migrations/087_seat_delivery_guard.js +31 -0
  106. package/daemon/dist/db/migrations/087_seat_delivery_guard.js.map +1 -0
  107. package/daemon/dist/db/migrations/088_node_permission_selections.d.ts +3 -0
  108. package/daemon/dist/db/migrations/088_node_permission_selections.d.ts.map +1 -0
  109. package/daemon/dist/db/migrations/088_node_permission_selections.js +16 -0
  110. package/daemon/dist/db/migrations/088_node_permission_selections.js.map +1 -0
  111. package/daemon/dist/db/migrations/089_classification_identity_provenance.d.ts +3 -0
  112. package/daemon/dist/db/migrations/089_classification_identity_provenance.d.ts.map +1 -0
  113. package/daemon/dist/db/migrations/089_classification_identity_provenance.js +6 -0
  114. package/daemon/dist/db/migrations/089_classification_identity_provenance.js.map +1 -0
  115. package/daemon/dist/domain/applied-launch-observation-store.d.ts +1 -1
  116. package/daemon/dist/domain/applied-launch-observation-store.d.ts.map +1 -1
  117. package/daemon/dist/domain/applied-launch-observation-store.js +6 -4
  118. package/daemon/dist/domain/applied-launch-observation-store.js.map +1 -1
  119. package/daemon/dist/domain/capture-observer.d.ts +130 -0
  120. package/daemon/dist/domain/capture-observer.d.ts.map +1 -0
  121. package/daemon/dist/domain/capture-observer.js +113 -0
  122. package/daemon/dist/domain/capture-observer.js.map +1 -0
  123. package/daemon/dist/domain/claim-service.d.ts.map +1 -1
  124. package/daemon/dist/domain/claim-service.js +24 -3
  125. package/daemon/dist/domain/claim-service.js.map +1 -1
  126. package/daemon/dist/domain/classification-attempts.d.ts +143 -0
  127. package/daemon/dist/domain/classification-attempts.d.ts.map +1 -0
  128. package/daemon/dist/domain/classification-attempts.js +316 -0
  129. package/daemon/dist/domain/classification-attempts.js.map +1 -0
  130. package/daemon/dist/domain/classification-sources.d.ts +44 -0
  131. package/daemon/dist/domain/classification-sources.d.ts.map +1 -0
  132. package/daemon/dist/domain/classification-sources.js +102 -0
  133. package/daemon/dist/domain/classification-sources.js.map +1 -0
  134. package/daemon/dist/domain/classifier-lease-manager.d.ts +15 -4
  135. package/daemon/dist/domain/classifier-lease-manager.d.ts.map +1 -1
  136. package/daemon/dist/domain/classifier-lease-manager.js +63 -21
  137. package/daemon/dist/domain/classifier-lease-manager.js.map +1 -1
  138. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +3 -1
  139. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  140. package/daemon/dist/domain/claude-compaction-enforcer.js +36 -7
  141. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  142. package/daemon/dist/domain/claude-managed-launch.d.ts +28 -0
  143. package/daemon/dist/domain/claude-managed-launch.d.ts.map +1 -0
  144. package/daemon/dist/domain/claude-managed-launch.js +111 -0
  145. package/daemon/dist/domain/claude-managed-launch.js.map +1 -0
  146. package/daemon/dist/domain/codex-daemon-support.d.ts +16 -0
  147. package/daemon/dist/domain/codex-daemon-support.d.ts.map +1 -0
  148. package/daemon/dist/domain/codex-daemon-support.js +52 -0
  149. package/daemon/dist/domain/codex-daemon-support.js.map +1 -0
  150. package/daemon/dist/domain/codex-git-add-dirs.d.ts +16 -0
  151. package/daemon/dist/domain/codex-git-add-dirs.d.ts.map +1 -0
  152. package/daemon/dist/domain/codex-git-add-dirs.js +43 -0
  153. package/daemon/dist/domain/codex-git-add-dirs.js.map +1 -0
  154. package/daemon/dist/domain/context-usage-store.d.ts +2 -2
  155. package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  156. package/daemon/dist/domain/context-usage-store.js +4 -3
  157. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  158. package/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -1
  159. package/daemon/dist/domain/gateway/connections-projection.js +6 -3
  160. package/daemon/dist/domain/gateway/connections-projection.js.map +1 -1
  161. package/daemon/dist/domain/gateway/slack/capabilities.d.ts +19 -0
  162. package/daemon/dist/domain/gateway/slack/capabilities.d.ts.map +1 -0
  163. package/daemon/dist/domain/gateway/slack/capabilities.js +24 -0
  164. package/daemon/dist/domain/gateway/slack/capabilities.js.map +1 -0
  165. package/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -1
  166. package/daemon/dist/domain/gateway/slack/config.js +2 -1
  167. package/daemon/dist/domain/gateway/slack/config.js.map +1 -1
  168. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  169. package/daemon/dist/domain/gateway/slack/inbound.js +2 -1
  170. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  171. package/daemon/dist/domain/gateway/slack/manifest.d.ts +54 -0
  172. package/daemon/dist/domain/gateway/slack/manifest.d.ts.map +1 -0
  173. package/daemon/dist/domain/gateway/slack/manifest.js +55 -0
  174. package/daemon/dist/domain/gateway/slack/manifest.js.map +1 -0
  175. package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
  176. package/daemon/dist/domain/model-divergence/current-generation-record.js +6 -3
  177. package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
  178. package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts +3 -2
  179. package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts.map +1 -1
  180. package/daemon/dist/domain/model-divergence/model-divergence-monitor.js +9 -5
  181. package/daemon/dist/domain/model-divergence/model-divergence-monitor.js.map +1 -1
  182. package/daemon/dist/domain/native-permission-selection.d.ts +13 -0
  183. package/daemon/dist/domain/native-permission-selection.d.ts.map +1 -0
  184. package/daemon/dist/domain/native-permission-selection.js +30 -0
  185. package/daemon/dist/domain/native-permission-selection.js.map +1 -0
  186. package/daemon/dist/domain/native-permission-store.d.ts +17 -0
  187. package/daemon/dist/domain/native-permission-store.d.ts.map +1 -0
  188. package/daemon/dist/domain/native-permission-store.js +36 -0
  189. package/daemon/dist/domain/native-permission-store.js.map +1 -0
  190. package/daemon/dist/domain/native-resume-probe.d.ts +3 -1
  191. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  192. package/daemon/dist/domain/native-resume-probe.js +22 -7
  193. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  194. package/daemon/dist/domain/node-inventory.d.ts +3 -0
  195. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  196. package/daemon/dist/domain/node-inventory.js +2 -0
  197. package/daemon/dist/domain/node-inventory.js.map +1 -1
  198. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  199. package/daemon/dist/domain/node-launcher.js +6 -0
  200. package/daemon/dist/domain/node-launcher.js.map +1 -1
  201. package/daemon/dist/domain/outbox-handler.d.ts +25 -2
  202. package/daemon/dist/domain/outbox-handler.d.ts.map +1 -1
  203. package/daemon/dist/domain/outbox-handler.js +70 -1
  204. package/daemon/dist/domain/outbox-handler.js.map +1 -1
  205. package/daemon/dist/domain/permission-drift-observer.d.ts +1 -0
  206. package/daemon/dist/domain/permission-drift-observer.d.ts.map +1 -1
  207. package/daemon/dist/domain/permission-drift-observer.js +1 -1
  208. package/daemon/dist/domain/permission-drift-observer.js.map +1 -1
  209. package/daemon/dist/domain/permission-drift.d.ts +10 -0
  210. package/daemon/dist/domain/permission-drift.d.ts.map +1 -1
  211. package/daemon/dist/domain/permission-drift.js +29 -18
  212. package/daemon/dist/domain/permission-drift.js.map +1 -1
  213. package/daemon/dist/domain/project-classifier.d.ts +43 -0
  214. package/daemon/dist/domain/project-classifier.d.ts.map +1 -1
  215. package/daemon/dist/domain/project-classifier.js +141 -25
  216. package/daemon/dist/domain/project-classifier.js.map +1 -1
  217. package/daemon/dist/domain/proof/judgments.d.ts +16 -0
  218. package/daemon/dist/domain/proof/judgments.d.ts.map +1 -1
  219. package/daemon/dist/domain/proof/judgments.js +17 -1
  220. package/daemon/dist/domain/proof/judgments.js.map +1 -1
  221. package/daemon/dist/domain/queue-repository.d.ts +8 -0
  222. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  223. package/daemon/dist/domain/queue-repository.js +41 -14
  224. package/daemon/dist/domain/queue-repository.js.map +1 -1
  225. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  226. package/daemon/dist/domain/restore-orchestrator.js +28 -1
  227. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  228. package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
  229. package/daemon/dist/domain/resume-metadata-refresher.js +3 -1
  230. package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
  231. package/daemon/dist/domain/rig-lifecycle-service.d.ts.map +1 -1
  232. package/daemon/dist/domain/rig-lifecycle-service.js +7 -0
  233. package/daemon/dist/domain/rig-lifecycle-service.js.map +1 -1
  234. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
  235. package/daemon/dist/domain/rig-teardown.js +4 -0
  236. package/daemon/dist/domain/rig-teardown.js.map +1 -1
  237. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  238. package/daemon/dist/domain/rigspec-instantiator.js +36 -22
  239. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  240. package/daemon/dist/domain/runtime-adapter.d.ts +6 -0
  241. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  242. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  243. package/daemon/dist/domain/seat-delivery-guard.d.ts +64 -0
  244. package/daemon/dist/domain/seat-delivery-guard.d.ts.map +1 -0
  245. package/daemon/dist/domain/seat-delivery-guard.js +224 -0
  246. package/daemon/dist/domain/seat-delivery-guard.js.map +1 -0
  247. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  248. package/daemon/dist/domain/seat-handover-service.js +19 -1
  249. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  250. package/daemon/dist/domain/seat-lifecycle-service.d.ts +16 -2
  251. package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  252. package/daemon/dist/domain/seat-lifecycle-service.js +70 -0
  253. package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  254. package/daemon/dist/domain/seat-status-service.d.ts +10 -0
  255. package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
  256. package/daemon/dist/domain/seat-status-service.js +13 -0
  257. package/daemon/dist/domain/seat-status-service.js.map +1 -1
  258. package/daemon/dist/domain/session-transport.d.ts +19 -1
  259. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  260. package/daemon/dist/domain/session-transport.js +221 -23
  261. package/daemon/dist/domain/session-transport.js.map +1 -1
  262. package/daemon/dist/domain/shadow-capture.d.ts +97 -0
  263. package/daemon/dist/domain/shadow-capture.d.ts.map +1 -0
  264. package/daemon/dist/domain/shadow-capture.js +147 -0
  265. package/daemon/dist/domain/shadow-capture.js.map +1 -0
  266. package/daemon/dist/domain/sqlite-time.d.ts +5 -0
  267. package/daemon/dist/domain/sqlite-time.d.ts.map +1 -0
  268. package/daemon/dist/domain/sqlite-time.js +7 -0
  269. package/daemon/dist/domain/sqlite-time.js.map +1 -0
  270. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  271. package/daemon/dist/domain/startup-orchestrator.js +11 -0
  272. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  273. package/daemon/dist/domain/stream-classification-worker.d.ts +106 -0
  274. package/daemon/dist/domain/stream-classification-worker.d.ts.map +1 -0
  275. package/daemon/dist/domain/stream-classification-worker.js +265 -0
  276. package/daemon/dist/domain/stream-classification-worker.js.map +1 -0
  277. package/daemon/dist/domain/successor-session-launcher.d.ts +1 -0
  278. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  279. package/daemon/dist/domain/successor-session-launcher.js +4 -2
  280. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  281. package/daemon/dist/domain/terminal/herdr-adapter.d.ts +7 -0
  282. package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
  283. package/daemon/dist/domain/terminal/herdr-adapter.js +119 -12
  284. package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
  285. package/daemon/dist/domain/terminal/terminal-provider.d.ts +5 -0
  286. package/daemon/dist/domain/terminal/terminal-provider.d.ts.map +1 -1
  287. package/daemon/dist/domain/terminal/terminal-service.js +6 -6
  288. package/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
  289. package/daemon/dist/domain/terminal/view-composer.d.ts +6 -4
  290. package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -1
  291. package/daemon/dist/domain/terminal/view-composer.js +5 -5
  292. package/daemon/dist/domain/terminal/view-composer.js.map +1 -1
  293. package/daemon/dist/domain/types.d.ts +10 -0
  294. package/daemon/dist/domain/types.d.ts.map +1 -1
  295. package/daemon/dist/domain/types.js.map +1 -1
  296. package/daemon/dist/domain/watchdog-policy-engine.d.ts +3 -1
  297. package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  298. package/daemon/dist/domain/watchdog-policy-engine.js +5 -3
  299. package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  300. package/daemon/dist/gateway-slack-surface.d.ts +2 -0
  301. package/daemon/dist/gateway-slack-surface.d.ts.map +1 -1
  302. package/daemon/dist/gateway-slack-surface.js +2 -0
  303. package/daemon/dist/gateway-slack-surface.js.map +1 -1
  304. package/daemon/dist/routes/activity.d.ts.map +1 -1
  305. package/daemon/dist/routes/activity.js +28 -2
  306. package/daemon/dist/routes/activity.js.map +1 -1
  307. package/daemon/dist/routes/down.d.ts.map +1 -1
  308. package/daemon/dist/routes/down.js +3 -0
  309. package/daemon/dist/routes/down.js.map +1 -1
  310. package/daemon/dist/routes/gateway.d.ts.map +1 -1
  311. package/daemon/dist/routes/gateway.js +3 -0
  312. package/daemon/dist/routes/gateway.js.map +1 -1
  313. package/daemon/dist/routes/projects.d.ts.map +1 -1
  314. package/daemon/dist/routes/projects.js +205 -18
  315. package/daemon/dist/routes/projects.js.map +1 -1
  316. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  317. package/daemon/dist/routes/rigs.js +13 -5
  318. package/daemon/dist/routes/rigs.js.map +1 -1
  319. package/daemon/dist/routes/seat.d.ts.map +1 -1
  320. package/daemon/dist/routes/seat.js +78 -1
  321. package/daemon/dist/routes/seat.js.map +1 -1
  322. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  323. package/daemon/dist/routes/sessions.js +6 -2
  324. package/daemon/dist/routes/sessions.js.map +1 -1
  325. package/daemon/dist/routes/transport.d.ts.map +1 -1
  326. package/daemon/dist/routes/transport.js +9 -1
  327. package/daemon/dist/routes/transport.js.map +1 -1
  328. package/daemon/dist/server.d.ts +5 -0
  329. package/daemon/dist/server.d.ts.map +1 -1
  330. package/daemon/dist/server.js +3 -0
  331. package/daemon/dist/server.js.map +1 -1
  332. package/daemon/dist/startup.d.ts.map +1 -1
  333. package/daemon/dist/startup.js +32 -8
  334. package/daemon/dist/startup.js.map +1 -1
  335. package/daemon/dist/stream-classifier-surface.d.ts +6 -0
  336. package/daemon/dist/stream-classifier-surface.d.ts.map +1 -0
  337. package/daemon/dist/stream-classifier-surface.js +6 -0
  338. package/daemon/dist/stream-classifier-surface.js.map +1 -0
  339. package/daemon/dist/terminal/TerminalSessionBroker.d.ts +1 -0
  340. package/daemon/dist/terminal/TerminalSessionBroker.d.ts.map +1 -1
  341. package/daemon/dist/terminal/TerminalSessionBroker.js +10 -6
  342. package/daemon/dist/terminal/TerminalSessionBroker.js.map +1 -1
  343. package/daemon/docs/reference/getting-started.md +63 -5
  344. package/daemon/docs/reference/help.md +130 -0
  345. package/daemon/docs/reference/rig-spec.md +6 -1
  346. package/daemon/docs/reference/slack-app-setup.md +90 -0
  347. package/daemon/docs/reference/stream-classifier-worker.md +244 -0
  348. package/daemon/policies/builtin/yolo.policy.md +5 -5
  349. package/daemon/specs/agents/apps/vault-specialist/skills/vault-user/SKILL.md +5 -0
  350. package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +7 -0
  351. package/daemon/specs/rigs/launch/kernel/rig.yaml +4 -0
  352. package/dist/build-info.js +3 -3
  353. package/dist/commands/doctor.d.ts.map +1 -1
  354. package/dist/commands/doctor.js +9 -6
  355. package/dist/commands/doctor.js.map +1 -1
  356. package/dist/commands/policy.d.ts.map +1 -1
  357. package/dist/commands/policy.js +8 -1
  358. package/dist/commands/policy.js.map +1 -1
  359. package/dist/commands/preflight.d.ts.map +1 -1
  360. package/dist/commands/preflight.js +2 -0
  361. package/dist/commands/preflight.js.map +1 -1
  362. package/dist/commands/project-jev.d.ts +115 -0
  363. package/dist/commands/project-jev.d.ts.map +1 -0
  364. package/dist/commands/project-jev.js +239 -0
  365. package/dist/commands/project-jev.js.map +1 -0
  366. package/dist/commands/project-worker.d.ts +96 -0
  367. package/dist/commands/project-worker.d.ts.map +1 -0
  368. package/dist/commands/project-worker.js +125 -0
  369. package/dist/commands/project-worker.js.map +1 -0
  370. package/dist/commands/project.d.ts +5 -1
  371. package/dist/commands/project.d.ts.map +1 -1
  372. package/dist/commands/project.js +161 -0
  373. package/dist/commands/project.js.map +1 -1
  374. package/dist/commands/seat.d.ts.map +1 -1
  375. package/dist/commands/seat.js +79 -0
  376. package/dist/commands/seat.js.map +1 -1
  377. package/dist/commands/send.d.ts.map +1 -1
  378. package/dist/commands/send.js +18 -5
  379. package/dist/commands/send.js.map +1 -1
  380. package/dist/commands/slack.d.ts +4 -1
  381. package/dist/commands/slack.d.ts.map +1 -1
  382. package/dist/commands/slack.js +41 -2
  383. package/dist/commands/slack.js.map +1 -1
  384. package/dist/commands/terminal.d.ts.map +1 -1
  385. package/dist/commands/terminal.js +2 -0
  386. package/dist/commands/terminal.js.map +1 -1
  387. package/dist/commands/view.d.ts.map +1 -1
  388. package/dist/commands/view.js +3 -0
  389. package/dist/commands/view.js.map +1 -1
  390. package/dist/commands/walk.d.ts.map +1 -1
  391. package/dist/commands/walk.js +6 -0
  392. package/dist/commands/walk.js.map +1 -1
  393. package/dist/node-support.d.ts +12 -0
  394. package/dist/node-support.d.ts.map +1 -0
  395. package/dist/node-support.js +37 -0
  396. package/dist/node-support.js.map +1 -0
  397. package/dist/system-preflight.d.ts +2 -0
  398. package/dist/system-preflight.d.ts.map +1 -1
  399. package/dist/system-preflight.js +9 -10
  400. package/dist/system-preflight.js.map +1 -1
  401. package/package.json +3 -3
  402. package/scripts/check-abi.mjs +119 -65
  403. package/tui/dist/commands/registry.d.ts.map +1 -1
  404. package/tui/dist/commands/registry.js +3 -0
  405. package/tui/dist/commands/registry.js.map +1 -1
  406. package/tui/dist/connections/connections-model.d.ts +11 -1
  407. package/tui/dist/connections/connections-model.d.ts.map +1 -1
  408. package/tui/dist/connections/connections-model.js +28 -1
  409. package/tui/dist/connections/connections-model.js.map +1 -1
  410. package/tui/dist/daemon-client.d.ts +2 -0
  411. package/tui/dist/daemon-client.d.ts.map +1 -1
  412. package/tui/dist/daemon-client.js +1 -0
  413. package/tui/dist/daemon-client.js.map +1 -1
  414. package/tui/dist/hydrate.d.ts.map +1 -1
  415. package/tui/dist/hydrate.js +5 -0
  416. package/tui/dist/hydrate.js.map +1 -1
  417. package/tui/dist/main.js +16 -2
  418. package/tui/dist/main.js.map +1 -1
  419. package/tui/dist/print-for-copy.d.ts +36 -0
  420. package/tui/dist/print-for-copy.d.ts.map +1 -0
  421. package/tui/dist/print-for-copy.js +92 -0
  422. package/tui/dist/print-for-copy.js.map +1 -0
  423. package/tui/dist/render.d.ts.map +1 -1
  424. package/tui/dist/render.js +4 -1
  425. package/tui/dist/render.js.map +1 -1
  426. package/tui/dist/state.d.ts.map +1 -1
  427. package/tui/dist/state.js +2 -0
  428. package/tui/dist/state.js.map +1 -1
  429. package/tui/dist/types.d.ts +8 -0
  430. package/tui/dist/types.d.ts.map +1 -1
@@ -0,0 +1,580 @@
1
+ # RigSpec Reference
2
+
3
+ Version: 0.2 (pod-aware)
4
+ Last validated against code: 2026-04-11
5
+ Source of truth: `packages/daemon/src/domain/rigspec-schema.ts`, `packages/daemon/src/domain/types.ts`
6
+
7
+ This is the canonical reference for the pod-aware RigSpec YAML format. Every field, validation rule, and default documented here was traced from the actual parser and validator code, not from prior documentation.
8
+
9
+ ---
10
+
11
+ ## Minimal Valid Example
12
+
13
+ ```yaml
14
+ version: "0.2"
15
+ name: my-rig
16
+
17
+ pods:
18
+ - id: dev
19
+ label: Development
20
+ members:
21
+ - id: impl
22
+ agent_ref: "local:agents/impl"
23
+ profile: default
24
+ runtime: claude-code
25
+ cwd: "."
26
+ edges: []
27
+
28
+ edges: []
29
+ ```
30
+
31
+ ## Complete Example (all features)
32
+
33
+ ```yaml
34
+ version: "0.2"
35
+ name: my-product-team
36
+ summary: A full product squad with orchestration, development, and review pods.
37
+
38
+ culture_file: culture/CULTURE.md
39
+
40
+ docs:
41
+ - path: SETUP.md
42
+ - path: README.md
43
+
44
+ startup:
45
+ files:
46
+ - path: guidance/team-norms.md
47
+ delivery_hint: guidance_merge
48
+ required: true
49
+ actions: []
50
+
51
+ services:
52
+ kind: compose
53
+ compose_file: docker-compose.yaml
54
+ project_name: my-product
55
+ profiles: [core]
56
+ down_policy: down
57
+ wait_for:
58
+ - url: http://127.0.0.1:5432/health
59
+ - service: redis
60
+ condition: healthy
61
+ surfaces:
62
+ urls:
63
+ - name: App
64
+ url: http://127.0.0.1:3000
65
+ commands:
66
+ - name: psql
67
+ command: "psql postgresql://app:dev@127.0.0.1:5432/app"
68
+ checkpoints:
69
+ - id: postgres
70
+ export: "docker compose exec -T postgres pg_dump -U app > {{artifacts_dir}}/postgres.sql"
71
+ import: "cat {{artifacts_dir}}/postgres.sql | docker compose exec -T postgres psql -U app"
72
+
73
+ pods:
74
+ - id: orch
75
+ label: Orchestration
76
+ members:
77
+ - id: lead
78
+ agent_ref: "local:agents/orchestrator"
79
+ profile: default
80
+ runtime: claude-code
81
+ cwd: "."
82
+ - id: peer
83
+ agent_ref: "local:agents/orchestrator"
84
+ profile: default
85
+ runtime: codex
86
+ cwd: "."
87
+ edges: []
88
+
89
+ - id: dev
90
+ label: Development
91
+ summary: Implementation and quality assurance pair.
92
+ continuity_policy:
93
+ enabled: true
94
+ sync_triggers: [pre_compaction, pre_shutdown]
95
+ artifacts:
96
+ session_log: true
97
+ restore_brief: true
98
+ restore_protocol:
99
+ peer_driven: true
100
+ verify_via_quiz: false
101
+ startup:
102
+ files:
103
+ - path: guidance/dev-sop.md
104
+ delivery_hint: guidance_merge
105
+ required: true
106
+ actions: []
107
+ members:
108
+ - id: impl
109
+ agent_ref: "local:agents/impl"
110
+ profile: default
111
+ runtime: claude-code
112
+ cwd: "."
113
+ label: "Implementation Lead"
114
+ model: claude-opus-4-6
115
+ restore_policy: resume_if_possible
116
+ startup:
117
+ files:
118
+ - path: guidance/impl-specific.md
119
+ delivery_hint: send_text
120
+ required: false
121
+ applies_on: [fresh_start]
122
+ actions:
123
+ - type: send_text
124
+ value: "Load the implementation-pair skill and begin."
125
+ phase: after_ready
126
+ idempotent: true
127
+ - id: qa
128
+ agent_ref: "local:agents/qa"
129
+ profile: default
130
+ runtime: codex
131
+ cwd: "."
132
+ edges:
133
+ - kind: delegates_to
134
+ from: impl
135
+ to: qa
136
+
137
+ - id: rev
138
+ label: Review
139
+ members:
140
+ - id: r1
141
+ agent_ref: "local:agents/reviewer"
142
+ profile: default
143
+ runtime: claude-code
144
+ cwd: "."
145
+ - id: r2
146
+ agent_ref: "local:agents/reviewer"
147
+ profile: default
148
+ runtime: codex
149
+ cwd: "."
150
+ edges: []
151
+
152
+ edges:
153
+ - kind: delegates_to
154
+ from: orch.lead
155
+ to: dev.impl
156
+ - kind: delegates_to
157
+ from: orch.peer
158
+ to: dev.qa
159
+ - kind: can_observe
160
+ from: rev.r1
161
+ to: dev.impl
162
+ - kind: can_observe
163
+ from: rev.r2
164
+ to: dev.qa
165
+ ```
166
+
167
+ ---
168
+
169
+ ## Top-Level Fields
170
+
171
+ | Field | Type | Required | Default | Description |
172
+ |-------|------|----------|---------|-------------|
173
+ | `version` | string | yes | — | Must be `"0.2"` for pod-aware specs. |
174
+ | `name` | string | yes | — | Rig name. Used in session naming (`{pod}-{member}@{name}`), snapshot identification, and spec library lookup. |
175
+ | `summary` | string | no | — | Human-readable description. Shown in spec library, review surfaces, and `rig specs show`. |
176
+ | `culture_file` | string | no | — | Relative path to a rig-wide culture/constitution file. Must be a safe relative path (no `..`, no absolute). |
177
+ | `permission_policy` | string | no | — | Permission policy attached to the rig. Either a built-in (`builtin:locked`, `builtin:standard`, `builtin:open`, `builtin:yolo`) or a safe relative path to a custom policy file (resolved from this spec's directory; no `..`, no absolute). Absent leaves the default floor. A member may set its own `permission_policy`, which takes precedence over the rig-level one. See "Attaching a permission policy" below. |
178
+ | `managed_blocks` | map | no | `CLAUDE.md` | File that receives OpenRig's managed instruction blocks for Claude Code members. Only the `claude-code` key is accepted, with `CLAUDE.md` or `CLAUDE.local.md`. Codex members always use `AGENTS.md`. See "Choosing the Claude instruction file" below. |
179
+ | `docs` | Doc[] | no | — | Documentation files that should travel with the rig. Included in rig bundles. Each entry has a `path` field (safe relative path). The engine does not consume these — they are for humans and agents setting up the environment before launch. |
180
+ | `startup` | StartupBlock | no | — | Rig-level startup files and actions. Applied to all members via the startup layering model. |
181
+ | `services` | ServicesBlock | no | — | Optional managed services (Docker Compose). When present, services boot before any agent launches. |
182
+ | `pods` | Pod[] | yes | — | At least one pod required. Each pod is a bounded context containing members and pod-local edges. |
183
+ | `edges` | CrossPodEdge[] | no | `[]` | Cross-pod edges connecting members in different pods. Must use fully-qualified `pod.member` IDs. |
184
+
185
+ ### Attaching a permission policy
186
+
187
+ Attach a policy to a rig with `permission_policy`, either at the rig level or on a member:
188
+
189
+ ```yaml
190
+ # a built-in, by name:
191
+ permission_policy: builtin:standard
192
+
193
+ # or a custom policy file, by relative path (resolved from this spec's directory):
194
+ permission_policy: policies/my-cautious-dev.policy.md
195
+ ```
196
+
197
+ Built-in policies (`locked` / `standard` / `open` / `yolo`) are read-only and are
198
+ referenced as `builtin:<name>`. A custom policy lives in your own project and is
199
+ referenced by a safe relative path (no `..`, no absolute). A shipped example of the
200
+ custom shape is `packages/daemon/policies/examples/my-cautious-dev.policy.md` — copy it
201
+ into your project and edit it to taste.
202
+
203
+ This records a selection, not a live permission change. Flag-surface policies
204
+ select launch flags; config-surface policies still need native configuration
205
+ application and inspection. In particular, `builtin:yolo` selects Codex's
206
+ `danger-full-access` sandbox and `never` approval policy, and replaces
207
+ any `codex_config_profile` argument. See [practical permission choices](getting-started.md#opt-in-permissive-operation).
208
+
209
+ An explicit `rig seat set-permissions` choice overrides member/rig policy for
210
+ future managed launches of that stable seat; it does not rewrite this spec or
211
+ its inherited policy provenance. `inherit` removes that override. See
212
+ [per-seat permission mode](getting-started.md#per-seat-permission-mode).
213
+
214
+ ### Choosing the Claude instruction file
215
+
216
+ OpenRig writes its instructions for Claude Code members into managed blocks in
217
+ the member's working directory. By default the file is `CLAUDE.md`. If your
218
+ repository tracks `CLAUDE.md`, write the blocks to `CLAUDE.local.md` instead:
219
+
220
+ ```yaml
221
+ managed_blocks:
222
+ claude-code: CLAUDE.local.md
223
+ ```
224
+
225
+ Claude Code loads `CLAUDE.local.md` from the working directory as well. By
226
+ convention the file is kept out of git, for example with a `.gitignore` entry.
227
+
228
+ - Accepted values are `CLAUDE.md` and `CLAUDE.local.md`. Any other value or
229
+ runtime key is rejected before a member launches.
230
+ - The setting applies to launch, restore, relaunch, handover, adding members,
231
+ and export. `rig down` removes OpenRig's blocks from the selected file only.
232
+ - OpenRig never edits, moves or deletes blocks in the other file.
233
+
234
+ A rig that already wrote blocks into `CLAUDE.md` keeps them there after you
235
+ switch. Until you remove them, `CLAUDE.md` stays modified and Claude Code loads
236
+ both copies. Delete each `<!-- BEGIN OpenRig MANAGED BLOCK: … -->` …
237
+ `<!-- END OpenRig MANAGED BLOCK: … -->` section by hand and keep the rest of the
238
+ file. If `CLAUDE.md` has no other uncommitted edits you need to keep, you can
239
+ instead run `git restore CLAUDE.md`; that command discards every unstaged change
240
+ to the file, not only OpenRig's blocks. Running `rig down` on a rig that still uses
241
+ the default is not a substitute: it strips every OpenRig block from that
242
+ directory's `CLAUDE.md`, including blocks written by other rigs.
243
+
244
+ ---
245
+
246
+ ## Pod
247
+
248
+ | Field | Type | Required | Default | Description |
249
+ |-------|------|----------|---------|-------------|
250
+ | `id` | string | yes | — | Pod identifier. Must not contain dots. Must be unique within the rig. Used as the first segment of session names and logical IDs. |
251
+ | `label` | string | yes | — | Human-readable pod name. Shown in UI explorer, graph groupings, and detail surfaces. |
252
+ | `summary` | string | no | — | Pod description. |
253
+ | `continuity_policy` | ContinuityPolicy | no | — | Pod-level continuity/restore policy. Controls compaction recovery, artifact management, and peer-driven restoration. |
254
+ | `startup` | StartupBlock | no | — | Pod-level startup files and actions. Applied to all members in this pod via the startup layering model. |
255
+ | `members` | Member[] | yes | — | At least one member required (enforced by pods needing content). |
256
+ | `edges` | PodLocalEdge[] | no | `[]` | Edges between members within this pod. Must use unqualified member IDs (not `pod.member`). |
257
+
258
+ ### Pod ID Rules
259
+
260
+ - Must not contain dots (`.`)
261
+ - Must be unique across all pods in the rig
262
+ - Becomes the first segment of the qualified logical ID: `{podId}.{memberId}`
263
+ - Becomes the first segment of the canonical session name: `{podId}-{memberId}@{rigName}`
264
+
265
+ ---
266
+
267
+ ## Member
268
+
269
+ | Field | Type | Required | Default | Description |
270
+ |-------|------|----------|---------|-------------|
271
+ | `id` | string | yes | — | Member identifier. Must not contain dots. Must be unique within the pod. |
272
+ | `agent_ref` | string | yes | — | Reference to an AgentSpec. Must start with `local:` (relative) or `path:` (absolute). Exception: `builtin:terminal` for infrastructure nodes. |
273
+ | `profile` | string | yes | — | Profile name from the referenced AgentSpec. Use `default` for the default profile. Exception: `none` for terminal nodes. |
274
+ | `codex_config_profile` | string | no | — | Codex-only native profile passed as `-p <name>`; letters, numbers, `_`, `.`, `-`. Separate from the AgentSpec `profile`. With the normal launch mode, this replaces OpenRig's explicit workspace-write sandbox flag. A full-bypass policy instead emits danger-full-access and omits this profile argument. |
275
+ | `runtime` | string | yes | — | Agent runtime. Current supported values: `claude-code`, `codex`, `terminal`. |
276
+ | `cwd` | string | yes | — | Working directory for the agent. Resolved relative to the rig root (the directory containing the rig spec). Use `"."` for the rig root itself. Can be overridden at launch time with `rig up --cwd`. |
277
+ | `label` | string | no | — | Human-readable member name. Shown in UI when present. |
278
+ | `model` | string | no | — | Model override. Runtime-specific (e.g., `claude-opus-4-6` for Claude Code). |
279
+ | `restore_policy` | string | no | `resume_if_possible` | Restore behavior. One of: `resume_if_possible`, `relaunch_fresh`, `checkpoint_only`. |
280
+ | `startup` | StartupBlock | no | — | Member-level startup files and actions. Applied only to this member. |
281
+
282
+ ### Terminal Nodes
283
+
284
+ Terminal nodes are infrastructure processes (servers, log tails, build watchers) that are not agent runtimes. They require an exact triple:
285
+
286
+ ```yaml
287
+ runtime: terminal
288
+ agent_ref: "builtin:terminal"
289
+ profile: none
290
+ ```
291
+
292
+ All three must be present together. Any partial combination is a validation error.
293
+
294
+ ### agent_ref Rules
295
+
296
+ - Must start with `local:` or `path:`
297
+ - `local:` paths are relative to the rig spec file's directory (the rig root)
298
+ - `path:` paths are absolute filesystem paths
299
+ - The referenced path must contain an `agent.yaml` file
300
+ - Exception: `builtin:terminal` for terminal nodes
301
+
302
+ ### Session Naming
303
+
304
+ The canonical session name is derived from the pod ID, member ID, and rig name:
305
+
306
+ ```
307
+ {podId}-{memberId}@{rigName}
308
+ ```
309
+
310
+ Example: pod `dev`, member `impl`, rig `my-team` → session `dev-impl@my-team`
311
+
312
+ This is human-authored (you choose the pod/member IDs) and system-validated (the system enforces the format).
313
+
314
+ ---
315
+
316
+ ## Edges
317
+
318
+ ### Edge Kinds
319
+
320
+ | Kind | Meaning | Use When |
321
+ |------|---------|----------|
322
+ | `delegates_to` | Source delegates work to target. Constrains launch order. | Orchestrator → implementer, lead → worker |
323
+ | `spawned_by` | Target was spawned by source. Constrains launch order. | Parent → child in hierarchical topologies |
324
+ | `can_observe` | Source can observe target's output. Does NOT constrain launch order. | Reviewer → implementer, monitor → worker |
325
+ | `collaborates_with` | Peer collaboration relationship. Does NOT constrain launch order. | Co-equal peers working together |
326
+ | `escalates_to` | Source escalates to target for decisions. Does NOT constrain launch order. | Worker → lead for escalation |
327
+
328
+ ### Pod-Local Edges
329
+
330
+ Edges within a pod use **unqualified member IDs** (just the member `id`, not `pod.member`):
331
+
332
+ ```yaml
333
+ pods:
334
+ - id: dev
335
+ members:
336
+ - id: impl
337
+ # ...
338
+ - id: qa
339
+ # ...
340
+ edges:
341
+ - kind: delegates_to
342
+ from: impl # NOT dev.impl
343
+ to: qa # NOT dev.qa
344
+ ```
345
+
346
+ Both `from` and `to` must reference members that exist in the same pod.
347
+
348
+ ### Cross-Pod Edges
349
+
350
+ Edges between pods use **fully-qualified `pod.member` IDs**:
351
+
352
+ ```yaml
353
+ edges:
354
+ - kind: delegates_to
355
+ from: orch.lead # pod.member format
356
+ to: dev.impl # pod.member format
357
+ ```
358
+
359
+ Cross-pod edges must reference different pods. An edge where both `from` and `to` are in the same pod is a validation error — use pod-local edges instead.
360
+
361
+ ---
362
+
363
+ ## Startup Block
364
+
365
+ Startup blocks can appear at three levels: rig, pod, and member. They are merged additively via the startup layering model (see `docs/reference/startup-layering.md`).
366
+
367
+ ### Files
368
+
369
+ | Field | Type | Required | Default | Description |
370
+ |-------|------|----------|---------|-------------|
371
+ | `path` | string | yes | — | Relative path to the file. Must be a safe relative path. |
372
+ | `delivery_hint` | string | no | `auto` | How the file is delivered. One of: `auto`, `guidance_merge`, `skill_install`, `send_text`. |
373
+ | `required` | boolean | no | `true` | Whether startup fails if this file cannot be delivered. |
374
+ | `applies_on` | string[] | no | `[fresh_start, restore]` | When this file is delivered. Subset of: `fresh_start`, `restore`. |
375
+
376
+ #### Delivery Hints
377
+
378
+ | Hint | Behavior |
379
+ |------|----------|
380
+ | `auto` | System chooses based on file type and context. |
381
+ | `guidance_merge` | Merged into the runtime's guidance file (`CLAUDE.md` or `AGENTS.md`) as a managed block. Delivered before harness boot. |
382
+ | `skill_install` | Installed as a skill in the runtime's skill directory. Delivered before harness boot. |
383
+ | `send_text` | Sent as text to the agent's terminal after the harness is ready. Requires the agent TUI to be active. |
384
+
385
+ ### Actions
386
+
387
+ | Field | Type | Required | Default | Description |
388
+ |-------|------|----------|---------|-------------|
389
+ | `type` | string | yes | — | Action type. One of: `slash_command`, `send_text`, `startup_proof`. Note: `shell` is explicitly NOT supported in v1. |
390
+ | `value` | string | yes | — | Command/text to send, or `authenticated` / `none` for `startup_proof`. |
391
+ | `phase` | string | no | `after_files` | When to execute text/commands. One of: `after_files` (after startup files are delivered), `after_ready` (after harness readiness check passes). Proof selection is resolved before projection regardless of phase. |
392
+ | `idempotent` | boolean | yes | — | Whether this action is safe to replay on restore. **Required field.** Non-idempotent actions must NOT include `restore` in `applies_on`. |
393
+ | `applies_on` | string[] | no | `[fresh_start, restore]` | When this action runs. Subset of: `fresh_start`, `restore`. |
394
+
395
+ ### Startup proof selection
396
+
397
+ Startup adds no orientation exercise by default. To select the authenticated
398
+ startup challenge, declare an action in an agent, profile, rig, pod, member, or
399
+ operator startup block:
400
+
401
+ ```yaml
402
+ startup:
403
+ actions:
404
+ - type: startup_proof
405
+ value: authenticated
406
+ idempotent: true
407
+ ```
408
+
409
+ Use `value: none` in a later layer to select lean startup explicitly. The last
410
+ applicable declaration wins in agent → profile → rig → pod → member → operator
411
+ order. Culture contributes files, not a proof selection. With no applicable
412
+ declaration, the result is `none`; the number of startup files never selects
413
+ proof. Invalid values and non-idempotent proof declarations fail validation,
414
+ including declarations overridden later. These actions declare policy and are
415
+ never typed into a terminal.
416
+
417
+ An authenticated selection challenges only a fresh or fresh-fallback managed
418
+ agent launch. Resumed, forked, rebuilt, and adopted sessions receive no new
419
+ challenge; terminal nodes never receive one. `applies_on` follows the requested
420
+ startup context, so a fresh fallback during restore uses `restore` selections.
421
+ Keep the default `[fresh_start, restore]` to cover both fresh launch paths.
422
+
423
+ Identity delivery, projection, readiness, and ordinary startup actions still
424
+ run. `startup_status: ready` means startup completed, while `oriented: missing`
425
+ means a selected proof awaits authenticated submission. Omission/`none` yields
426
+ `oriented: n-a` on a new fresh launch and retires an older challenge without
427
+ deleting its audit history. Retirement follows successful harness launch,
428
+ before readiness checks, so attention, timeout, or a readiness exception cannot
429
+ retain the preceding proof. A replacement that fails to launch does not retire
430
+ the current proof; resume/adoption also preserves existing proof history.
431
+ The effective selection is recorded on `node.startup_pending`; actions are
432
+ persisted in startup context for restore and fresh relaunch.
433
+
434
+ ---
435
+
436
+ ## Services Block
437
+
438
+ The services block is optional. When present, services boot before any agent node launches. If service health checks fail, agent launch is blocked.
439
+
440
+ | Field | Type | Required | Default | Description |
441
+ |-------|------|----------|---------|-------------|
442
+ | `kind` | string | yes | — | Service backend. Only `compose` is supported in v1. |
443
+ | `compose_file` | string | yes | — | Relative path to the Docker Compose file. Must be a safe relative path. Resolved relative to rig root. |
444
+ | `project_name` | string | no | derived from rig name | Docker Compose project name. Must match `[a-z0-9][a-z0-9_-]*`. If omitted, derived by sanitizing the rig name. |
445
+ | `profiles` | string[] | no | — | Compose profiles to activate. |
446
+ | `down_policy` | string | no | `down` | What happens on `rig down`. One of: `leave_running`, `down`, `down_and_volumes`. |
447
+ | `wait_for` | WaitTarget[] | no | — | Health targets that must pass before agent launch. |
448
+ | `surfaces` | Surfaces | no | — | Metadata about accessible URLs and commands. Not executed — informational only. |
449
+ | `checkpoints` | CheckpointHook[] | no | — | Shell commands for checkpoint export/import during snapshot/restore. |
450
+
451
+ ### Wait Targets
452
+
453
+ Each target must define exactly one of `service`, `url`, or `tcp`:
454
+
455
+ ```yaml
456
+ wait_for:
457
+ # HTTP probe — hits the URL, expects 2xx
458
+ - url: http://127.0.0.1:8200/v1/sys/health
459
+
460
+ # TCP probe — connects to host:port
461
+ - tcp: "127.0.0.1:5432"
462
+
463
+ # Compose health check — requires Docker health to report "healthy"
464
+ - service: postgres
465
+ condition: healthy
466
+ ```
467
+
468
+ | Field | Type | Required | Description |
469
+ |-------|------|----------|-------------|
470
+ | `url` | string | one of three | HTTP URL to probe. |
471
+ | `tcp` | string | one of three | `host:port` for TCP probe. |
472
+ | `service` | string | one of three | Compose service name. Requires `condition: healthy`. |
473
+ | `condition` | string | only with `service` | Must be `healthy`. Only valid with `service` targets. |
474
+
475
+ ### Surfaces
476
+
477
+ ```yaml
478
+ surfaces:
479
+ urls:
480
+ - name: Vault UI
481
+ url: http://127.0.0.1:8200/ui
482
+ commands:
483
+ - name: Vault status
484
+ command: "vault status -address=http://127.0.0.1:8200"
485
+ ```
486
+
487
+ Surfaces are metadata only. They are displayed in the UI and in `rig env status` output but are NOT executed by OpenRig.
488
+
489
+ ### Checkpoint Hooks
490
+
491
+ ```yaml
492
+ checkpoints:
493
+ - id: postgres
494
+ export: "docker compose exec -T postgres pg_dump -U app > {{artifacts_dir}}/postgres.sql"
495
+ import: "cat {{artifacts_dir}}/postgres.sql | docker compose exec -T postgres psql -U app"
496
+ ```
497
+
498
+ | Field | Type | Required | Description |
499
+ |-------|------|----------|-------------|
500
+ | `id` | string | yes | Unique identifier for this checkpoint. |
501
+ | `export` | string | yes | Shell command to export state. `{{artifacts_dir}}` is replaced with a daemon-managed path. |
502
+ | `import` | string | no | Shell command to import state on restore. |
503
+
504
+ Checkpoint hooks are shell commands run by the daemon. They are best-effort — a failed export does not block snapshot, but continuity is classified as `receipt_only` instead of `checkpointed`.
505
+
506
+ ---
507
+
508
+ ## Continuity Policy
509
+
510
+ Optional pod-level configuration for compaction recovery behavior.
511
+
512
+ ```yaml
513
+ continuity_policy:
514
+ enabled: true
515
+ sync_triggers: [pre_compaction, pre_shutdown, manual, milestone]
516
+ artifacts:
517
+ session_log: true
518
+ restore_brief: true
519
+ quiz: false
520
+ restore_protocol:
521
+ peer_driven: true
522
+ verify_via_quiz: false
523
+ ```
524
+
525
+ | Field | Type | Required | Default | Description |
526
+ |-------|------|----------|---------|-------------|
527
+ | `enabled` | boolean | yes | — | Whether continuity is active for this pod. |
528
+ | `sync_triggers` | string[] | no | — | When to sync. Values: `pre_compaction`, `pre_shutdown`, `manual`, `milestone`. |
529
+ | `artifacts.session_log` | boolean | no | — | Whether to maintain a session log. |
530
+ | `artifacts.restore_brief` | boolean | no | — | Whether to maintain a restore brief. |
531
+ | `artifacts.quiz` | boolean | no | — | Whether to use quiz-based verification. |
532
+ | `restore_protocol.peer_driven` | boolean | no | — | Whether peers drive the restore process. |
533
+ | `restore_protocol.verify_via_quiz` | boolean | no | — | Whether to verify restoration via quiz. |
534
+
535
+ ---
536
+
537
+ ## Validation Rules Summary
538
+
539
+ These rules are enforced by the validator. A spec that violates any of these will be rejected by `rig spec validate` and `rig up`.
540
+
541
+ 1. `version` and `name` are required non-empty strings.
542
+ 2. `pods` must be a non-empty array.
543
+ 3. Pod IDs must not contain dots and must be unique.
544
+ 4. Pod labels are required.
545
+ 5. Member IDs must not contain dots and must be unique within their pod.
546
+ 6. `agent_ref`, `profile`, `runtime`, and `cwd` are required for every member.
547
+ 7. Terminal nodes require the exact triple: `runtime: terminal`, `agent_ref: builtin:terminal`, `profile: none`.
548
+ 8. `agent_ref` must start with `local:` (relative) or `path:` (absolute), except `builtin:terminal`.
549
+ 9. `local:` refs must be relative paths. `path:` refs must be absolute paths.
550
+ 10. `restore_policy` must be one of: `resume_if_possible`, `relaunch_fresh`, `checkpoint_only`.
551
+ 11. Pod-local edges use unqualified member IDs. Cross-pod edges use `pod.member` format.
552
+ 12. Cross-pod edges must reference different pods.
553
+ 13. Edge kinds must be one of: `delegates_to`, `spawned_by`, `can_observe`, `collaborates_with`, `escalates_to`.
554
+ 14. All file paths (`culture_file`, startup file paths, `compose_file`) must be safe relative paths.
555
+ 15. `services.kind` must be `compose`.
556
+ 16. `services.compose_file` is required when services is present.
557
+ 17. `services.project_name` must match `[a-z0-9][a-z0-9_-]*`.
558
+ 18. `services.down_policy` must be one of: `leave_running`, `down`, `down_and_volumes`.
559
+ 19. Each wait target must define exactly one of: `service`, `url`, `tcp`.
560
+ 20. `condition` is only valid on `service` targets and must be `healthy`.
561
+ 21. Startup file `delivery_hint` must be one of: `auto`, `guidance_merge`, `skill_install`, `send_text`.
562
+ 22. Startup action `type` must be one of: `slash_command`, `send_text`, `startup_proof`. (`shell` is explicitly rejected.) Proof selection requires `value: authenticated` or `none` and `idempotent: true`.
563
+ 23. Startup action `phase` must be one of: `after_files`, `after_ready`.
564
+ 24. Startup action `idempotent` is a required boolean.
565
+ 25. Non-idempotent actions must not include `restore` in `applies_on`.
566
+ 26. `applies_on` values must be from: `fresh_start`, `restore`.
567
+
568
+ ---
569
+
570
+ ## Shipped Examples
571
+
572
+ These are the built-in specs shipped with OpenRig. Read them as worked examples.
573
+
574
+ | Spec | Location | Pods | Members | Services |
575
+ |------|----------|------|---------|----------|
576
+ | `product-team` | `packages/daemon/specs/rigs/preview/product-team/rig.yaml` | orch1, dev1, rev1 | 7 (lead, peer, impl, qa, design, r1, r2) | no |
577
+ | `implementation-pair` | `packages/daemon/specs/rigs/launch/implementation-pair/rig.yaml` | dev | 2 (impl, qa) | no |
578
+ | `adversarial-review` | `packages/daemon/specs/rigs/focused/adversarial-review/rig.yaml` | orch, review | 3 (lead, r1, r2) | no |
579
+ | `research-team` | `packages/daemon/specs/rigs/focused/research-team/rig.yaml` | orch, research | 3 (lead, analyst, synthesizer) | no |
580
+ | `secrets-manager` | `packages/daemon/specs/rigs/launch/secrets-manager/rig.yaml` | vault | 1 (specialist) | yes (Vault) |
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "agent-operated-software"
4
- version: "0.5.17"
4
+ version: "0.6.1"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when designing, building, operating, or diagnosing an ongoing application whose live backend or control loop includes OpenRig agents, including applications with a Markdown, YAML, or JSON agent control plane or a thin surface over specialist agent roles."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "agent-operated-workflows"
4
- version: "0.5.17"
4
+ version: "0.6.1"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when a bounded real-world procedure has a deterministic happy path but brownfield, variable, or partially knowable state; when an operation must resume from verified evidence; or when deciding whether agent judgment or ordinary code should own a procedure's control loop."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "applying-a-permission-policy"
4
- version: "0.5.17"
4
+ version: "0.6.1"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when a user asks an agent to configure OpenRig command permissions, reduce repeated native approval prompts, or apply a selected rig/seat permission policy."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "claude-compaction-restore"
4
- version: "0.5.17"
4
+ version: "0.6.1"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when a Claude Code session has just compacted, is about to compact, reached context limit, resumed after /compact, or needs to rebuild its working mental model from Claude JSONL transcripts and touched files."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "agent-starters"
4
- version: "0.5.17"
4
+ version: "0.6.1"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when creating, refreshing, packaging, inspecting, promoting, or deprecating a named per-seat starting point — Agent Starter manifest authoring, the 6-state lifecycle (captured → named → inspectable → used → promoted → deprecated), provenance honesty, and refusal rules. NOT a VM image; a managed starting point composed from agent role + startup context + optional native session source + provenance."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "agent-startup-and-context-ingestion"
4
- version: "0.5.17"
4
+ version: "0.6.1"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when designing or auditing how an agent becomes useful after launch — AGENTS.md overlays, role files, skills, rig specs, workflow specs, startup checklists, refocus messages, \"rig context\" surface. Covers the 4 failure modes that make startup context fail (old rig spec misses current operating mode; current agents never told about new guidance; startup file as dumping ground; orchestrator transmits implementation without preserving product intent)."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "cross-host-rig-commands"
4
- version: "0.5.17"
4
+ version: "0.6.1"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when addressing a registered remote OpenRig host, choosing its transport, or interpreting a cross-host result."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "human-in-the-loop"
4
- version: "0.5.17"
4
+ version: "0.6.1"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when classifying a slice closeout (auto-continue / human gate / park), routing a real decision to a human, or designing a human queue/dashboard surface. Treats humans as durable network participants with attention surfaces, queues, and decision records — escalation lands as a durable attention item, not a chat message. Approval is NOT required for every clean closeout; the default RSI conveyor continues unless an explicit human gate is reached."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "messaging-the-human"
4
- version: "0.5.17"
4
+ version: "0.6.1"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when project policy calls for a human decision or update, a human delivery is pending or failed, or a reply must resume the right work."
7
7
  files: