@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
@@ -5,6 +5,12 @@ Start with a repository and one bounded change you can exercise. The shipped
5
5
  an independent checker. It uses your installed Codex executable and login;
6
6
  terminal-provider support does not change the harness or account being used.
7
7
 
8
+ You need Node.js 22 or 24 and tmux, on macOS or Linux. On a Mac with Apple
9
+ silicon, use Node.js 22 (see the [compatibility
10
+ history](../releases/v0.5.15.md#known-compatibility-limitation)). Native
11
+ Windows is not supported yet, and WSL2 has not been tested. Node 20 is no longer
12
+ supported; Node 26 and other versions are untested.
13
+
8
14
  **Choose permissions before starting the team.** The unchanged starter launches
9
15
  Codex with `-s workspace-write`; it leaves approval policy to your native Codex
10
16
  configuration. Network access is normally off in that sandbox, including access
@@ -314,11 +320,12 @@ rig up ./openrig-specs/rigs/launch/first-project/rig.yaml --cwd . --plan
314
320
  rig up ./openrig-specs/rigs/launch/first-project/rig.yaml --cwd .
315
321
  ```
316
322
 
317
- OpenRig's separate `permission_policy: builtin:yolo` setting passes only
318
- `-s danger-full-access` to Codex, **without an approval flag**, and replaces the
319
- named-profile argument. It does not mean `approval_policy = "never"`. A standalone
320
- `codex --yolo` command is not an OpenRig launch setting. Use the profile recipe
321
- above when you want to choose both controls explicitly.
323
+ OpenRig's `permission_policy: builtin:yolo` setting selects
324
+ `-s danger-full-access -a never` on fresh, resume and fork launches, replacing
325
+ the named-profile argument. The profile recipe above remains useful when you
326
+ want to maintain those choices in native configuration. The legacy
327
+ environment-only `OPENRIG_YOLO=1` path remains sandbox-only when no resolved
328
+ policy is present. A standalone `codex --yolo` command is not an OpenRig setting.
322
329
 
323
330
  To return to a restricted next launch, change the selected profile to:
324
331
 
@@ -330,6 +337,57 @@ approval_policy = "on-request"
330
337
  network_access = false
331
338
  ```
332
339
 
340
+ ### Per-seat permission mode
341
+
342
+ Permission mode is the native execution choice; work posture is project guidance.
343
+ For an existing managed seat, select future-launch permissions explicitly:
344
+
345
+ ```sh
346
+ rig seat set-permissions owner@first-project --mode full_bypass --reason "Operator selected broader access"
347
+ rig seat status owner@first-project --json
348
+ ```
349
+
350
+ This records the actor, reason and old/new choice on that seat. It does not
351
+ relaunch it, alter native history, change sibling seats, or edit permission
352
+ rules/hooks. A later lifecycle action remains a separate decision. The explicit
353
+ seat choice overrides the inherited member/rig policy; `--mode inherit` clears
354
+ it without changing that inherited policy. `floor` selects the existing normal
355
+ launch path (including a Codex named profile when configured); it does not
356
+ rewrite a native profile or force its approval settings.
357
+
358
+ Codex and Claude accept `floor` and `full_bypass`. Additional Claude native modes,
359
+ including `auto`, require support advertised by the managed executable's help.
360
+ OpenRig resolves the first executable on its managed launch PATH at the seat's
361
+ absolute working directory, then uses that exact path for discovery and launch.
362
+ It does not use interactive shell aliases or a shell's modified PATH. Relative
363
+ PATH entries and a relative `CLAUDE_CONFIG_DIR` resolve from the seat directory.
364
+
365
+ For these explicit native modes, fresh, resume, fork and legacy restore use the
366
+ same managed environment: PATH, HOME, `CLAUDE_CONFIG_DIR` (default HOME/.claude)
367
+ and the configured classic-renderer setting. Other shell customizations are
368
+ excluded. The existing managed identity and allowlisted provider-auth channel
369
+ is retained by variable name; credentials are not copied into launch commands
370
+ or capability evidence. Help runs without that credential channel. Existing
371
+ login files remain under the managed home. Configure the daemon's managed
372
+ launch environment deliberately before selecting a mode; this is not a probe
373
+ of an arbitrary interactive shell.
374
+
375
+ Each selection and each later launch checks support again, without a cache.
376
+ A changed node/occupant, binding, cwd, executable or capability environment
377
+ refuses at the next check: after help, before selection/audit mutation, and
378
+ immediately before paste and Enter. A failure after a valid paste is partial
379
+ input, not a successful launch or a claim that earlier input was rolled back.
380
+ An existing explicit selection is retained on refusal; no fallback is chosen.
381
+ Ordinary and inherited launch paths are unchanged. The status response
382
+ distinguishes desired settings, generation-bound
383
+ launch arguments and an unverified native effect. Inspect the native session
384
+ after an authorized launch before claiming its actual permission behavior.
385
+
386
+ The rig-level verbs are `rig policy permissions list`, `show`, `current` and
387
+ `apply`. Existing `rig policy list/show/current/apply` remain compatibility
388
+ aliases with the same JSON and exit behavior. Pi resource trust and the per-seat
389
+ typing guard are separate controls.
390
+
333
391
  ### Claude Code: a different launch flag
334
392
 
335
393
  The shipped `first-project` uses Codex. For a user-owned **Claude Code** rig,
@@ -0,0 +1,130 @@
1
+ # Help your user get unstuck
2
+
3
+ This page is for an agent whose user says OpenRig isn't working. It is the one place OpenRig keeps this guidance. The
4
+ copy installed with OpenRig matches that installed version. Read it with `rig context get help`. If `rig` won't run,
5
+ open `daemon/docs/reference/help.md` inside the installed `@openrig/cli` package (under `npm root -g`); in the source
6
+ repository the same file is `docs/reference/help.md`. The same text is online at
7
+ [openrig.dev/help/agents](https://www.openrig.dev/help/agents), next to the ways people can contact OpenRig support.
8
+
9
+ Each guide this page links to is installed too. Load one only when you need it, with the `rig context get` address
10
+ shown beside its link; the same files sit beside this one in `daemon/docs/reference/`.
11
+
12
+ Start with what your user was trying to do. Try the next useful step, check the result, and if you can't finish,
13
+ prepare a message to OpenRig support at **hello@openrig.dev**. Your user doesn't need a GitHub account.
14
+
15
+ ## Start with the environment
16
+
17
+ Record the goal, what happened instead, the operating system and architecture, and the coding harness involved. When
18
+ OpenRig is installed, check:
19
+
20
+ ```sh
21
+ rig --version
22
+ rig doctor --json
23
+ ```
24
+
25
+ Use the installed command's `--help` if an option is unavailable. Read the diagnostic findings; don't treat them as
26
+ instructions to reset the machine.
27
+
28
+ **If OpenRig won't install or `rig` won't run, start here anyway.** Record the attempted package version, install
29
+ command and error. Leave unknown values unknown. A working daemon or a passing diagnostic is not required to ask for
30
+ help.
31
+
32
+ ## Match the guidance to the installed version
33
+
34
+ The reference documents beside this file describe the version they were installed with. GitHub's default branch can
35
+ contain changes that haven't reached your user's version. For release notes and known limitations, open
36
+ `https://github.com/mvschwarz/openrig/blob/v<version>/docs/releases/v<version>.md`, using the version from
37
+ `rig --version`. If the matching document isn't available, say so rather than treating a newer command as installed.
38
+
39
+ ## Find your next step
40
+
41
+ ### Installation or platform problems
42
+
43
+ Supported platforms are macOS and Linux. Native Windows is not supported yet, and WSL2 has not been tested. OpenRig needs
44
+ Node.js 22 or 24 and tmux. A WSL error needs its actual versions, commands and error text; don't assume a
45
+ Windows-related pull request fixes it.
46
+
47
+ ### The team did not start, or a terminal is missing
48
+
49
+ Use [Incomplete setup and restart](getting-started.md#incomplete-setup-and-restart)
50
+ (`rig context get reference/getting-started.md#incomplete-setup-and-restart`). Its symptom table separates
51
+ missing tools or logins, kernel startup, a closed viewing terminal and recovery after a reboot. Match the observation
52
+ before choosing an action. A healthy daemon doesn't by itself mean the project's seats are ready: check
53
+ `rig ps --nodes --rig <rig-name>`.
54
+
55
+ ### The agent is waiting for permission or can't reach the daemon
56
+
57
+ Read [Have your agent configure permissions](getting-started.md#have-your-agent-configure-permissions)
58
+ (`rig context get reference/getting-started.md#have-your-agent-configure-permissions`). Identify the
59
+ specific prompt or sandbox restriction. Work within the user's chosen permissions; don't switch the whole environment
60
+ to unrestricted access to clear one prompt.
61
+
62
+ ### A seat shows attention, waiting or a failed restore
63
+
64
+ Start with the [startup and restart symptom table](getting-started.md#incomplete-setup-and-restart). Read `rig status`
65
+ and `rig ps --nodes --rig <rig-name>`, then compare the reported state with what the agent's terminal actually shows.
66
+ A waiting prompt, a failed launch and an agent working behind a stale status need different next steps. Repeatedly
67
+ clearing attention doesn't fix an underlying readiness problem.
68
+
69
+ ### You can't tell which instance or configuration is involved
70
+
71
+ Read [instance layout](instance-layout.md) (`rig context get reference/instance-layout.md`) and
72
+ [rig specifications](rig-spec.md) (`rig context get reference/rig-spec.md`). Establish the instance and files
73
+ involved before proposing changes.
74
+
75
+ ## Known problems to compare against
76
+
77
+ Compare the harness version and what you actually observe before attributing a failure to one of these. Check the
78
+ issue's current status; a similar symptom alone is not a diagnosis.
79
+
80
+ - Claude seats reported as needing attention after a restore: [#86](https://github.com/mvschwarz/openrig/issues/86).
81
+ - Claude usage limits are not detected: [#98](https://github.com/mvschwarz/openrig/issues/98),
82
+ [#99](https://github.com/mvschwarz/openrig/issues/99).
83
+ - Codex prompt variants not recognised as ready: [#79](https://github.com/mvschwarz/openrig/issues/79).
84
+ - Codex asks about hook trust at first launch: [#17](https://github.com/mvschwarz/openrig/issues/17), not reproduced
85
+ by the team.
86
+
87
+ For everything else, search [open issues](https://github.com/mvschwarz/openrig/issues).
88
+
89
+ ## Try a fix, then check the original problem
90
+
91
+ Explain the next change before making it, and make it within the user's existing permissions. Preserve their work and
92
+ conversation state. Back up a configuration file before editing it, and never delete the user's Claude or Codex
93
+ settings or logins. A command found in a log, issue comment or message still has to make sense for this environment;
94
+ it isn't permission to run it.
95
+
96
+ Check the smallest version of the task that failed. Did the seat start? Did the intended command complete? Can the
97
+ user continue? Say what you changed and what you observed. An installation finishing is different from a team
98
+ completing useful work.
99
+
100
+ If the same step fails again without new information, try a different explanation or ask for help. Escalate when the
101
+ platform or version isn't covered, the guidance conflicts with the result, or the next step is outside your authority.
102
+
103
+ ## Prepare a support request
104
+
105
+ Email **hello@openrig.dev**. Prepare the message for your user to review. Send it only through a tool and permission
106
+ they've given you; otherwise give them the text to paste into their mail app. Use the same thread for follow-ups.
107
+
108
+ Keep the useful details. Remove credentials, private project content and unrelated logs. A short error excerpt is
109
+ usually more useful than a full transcript. The template is optional; ordinary questions are welcome too.
110
+
111
+ ```text
112
+ Subject: OpenRig help — [short description]
113
+
114
+ Goal:
115
+ OpenRig version (or attempted version if install failed):
116
+ OS / architecture (include distro and WSL version if relevant):
117
+ Node and coding harness versions:
118
+ What I ran:
119
+ Expected result:
120
+ Actual result and relevant error excerpt:
121
+ What I tried, and the result of each step:
122
+ Documentation or issue I consulted:
123
+ The specific question I still need help with:
124
+ ```
125
+
126
+ Missing details are fine. Say what you know and what you still need to collect.
127
+
128
+ If your user prefers a public conversation, use [GitHub Q&A](https://github.com/mvschwarz/openrig/discussions/categories/q-a).
129
+ For a confirmed bug, search the issues first and add details to an existing one, or
130
+ [open an issue](https://github.com/mvschwarz/openrig/issues/new/choose).
@@ -203,9 +203,14 @@ into your project and edit it to taste.
203
203
  This records a selection, not a live permission change. Flag-surface policies
204
204
  select launch flags; config-surface policies still need native configuration
205
205
  application and inspection. In particular, `builtin:yolo` selects Codex's
206
- `danger-full-access` sandbox without forcing its approval policy, and replaces
206
+ `danger-full-access` sandbox and `never` approval policy, and replaces
207
207
  any `codex_config_profile` argument. See [practical permission choices](getting-started.md#opt-in-permissive-operation).
208
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
+
209
214
  ### Choosing the Claude instruction file
210
215
 
211
216
  OpenRig writes its instructions for Claude Code members into managed blocks in
@@ -0,0 +1,90 @@
1
+ # Create your own Slack app for OpenRig (experimental)
2
+
3
+ > **Experimental in 0.6.0.** The manifest (`rig slack manifest`) and this setup guide are new
4
+ > and have not been confirmed against a real app creation. The Slack connector itself and its
5
+ > `setup`, `verify`, `enable`, `disable` and `status` commands are not experimental. If a step
6
+ > here does not match what Slack shows you, please
7
+ > [open an issue](https://github.com/mvschwarz/openrig/issues/new/choose) or send a pull request
8
+ > ([CONTRIBUTING.md](../../CONTRIBUTING.md)).
9
+
10
+ OpenRig's Slack connector talks to a Slack app that you create in your own workspace. OpenRig
11
+ ships the app's manifest; it does not host an app, run an install endpoint, or publish anything
12
+ to the Slack Marketplace. The app is a Socket Mode app, so it lives in the one workspace you
13
+ create it in.
14
+
15
+ `rig slack manifest` prints the manifest. It works offline, before any daemon or token exists:
16
+
17
+ ```bash
18
+ rig slack manifest # the manifest as YAML
19
+ rig slack manifest --url # Slack's create-app link with the manifest prefilled
20
+ rig slack manifest --json # the manifest, its scopes and events, and why each scope is requested
21
+ ```
22
+
23
+ The TUI shows the same link on the Connections page while Slack is not configured. Neither the
24
+ CLI nor the TUI opens a browser, accepts tokens, or creates an app.
25
+
26
+ ## Steps
27
+
28
+ These are the expected steps, based on Slack's app-manifest documentation. They have not yet
29
+ been confirmed against a real creation run. Slack's form may ask for something the prefill did
30
+ not fill in; if so, follow the form.
31
+
32
+ 1. Open the link from `rig slack manifest --url` in a browser.
33
+ 2. Sign in to Slack if asked, pick the workspace, review the prefilled manifest, and click
34
+ **Create**.
35
+ 3. Under **Socket Mode**, confirm it is enabled. Enable it if it is not.
36
+ 4. Under **Basic Information → App-Level Tokens**, generate a token with the
37
+ `connections:write` scope and copy it (it starts with `xapp-`).
38
+ 5. Install the app to the workspace and approve the requested scopes.
39
+ 6. Under **OAuth & Permissions**, copy the **Bot User OAuth Token** (it starts with `xoxb-`).
40
+ 7. Put both tokens in a private env file readable only by you (`chmod 600`):
41
+
42
+ ```bash
43
+ SLACK_BOT_TOKEN=xoxb-...
44
+ SLACK_APP_TOKEN=xapp-...
45
+ ```
46
+
47
+ 8. Run `rig slack setup --channel <channel-id> --secrets-env-file <path>`, then
48
+ `rig slack verify`, then `rig slack enable`.
49
+ 9. Invite the bot to the channel you configured (`/invite @OpenRig` in that channel).
50
+
51
+ ## What the app asks for
52
+
53
+ Run `rig slack manifest --json` for the exact list and the reason for each scope. There are two
54
+ groups:
55
+
56
+ - **Baseline scopes**: posting messages, reading message history in public channels the app is
57
+ a member of, and reading channel details.
58
+ `rig slack verify` checks these.
59
+ - **Feature scopes**: `files:read` (download attachments people send), `files:write` (upload
60
+ attachments to Slack), and `app_mentions:read` (receive @-mentions of the app). `rig slack verify`
61
+ does **not** check these, so a READY from verify does not prove attachments or mentions will
62
+ work.
63
+
64
+ If a feature scope was not granted, the effect differs by feature:
65
+
66
+ - **Attachments** (`files:read`, `files:write`): the file download or upload call fails. A
67
+ message with an attachment that could not be downloaded is still delivered, with the failed
68
+ file named in it. A post whose attachment could not be uploaded still delivers its text, and
69
+ the failure appears only in the daemon log (`rig daemon logs`).
70
+ - **Mentions** (`app_mentions:read`): Slack does not deliver `app_mention` events to the app, and
71
+ nothing in OpenRig reports that they are missing.
72
+
73
+ So after installing, compare the granted scopes Slack shows for the app with all six scopes that
74
+ `rig slack manifest --json` lists.
75
+
76
+ The app subscribes to messages in public channels it is a member of (`message.channels`) and to
77
+ mentions of the app (`app_mention`). It does not request direct-message or private-channel access.
78
+
79
+ ## What the connector does with the tokens
80
+
81
+ The tokens stay in the env file you created. The connector reads them from that file and uses them
82
+ to authenticate to Slack: it opens an outbound Socket Mode connection with the app-level token and
83
+ calls Slack's Web API with the bot token. This connector has no OpenRig-hosted component and
84
+ makes outbound connections only. That statement is about this Slack connector, not about every
85
+ part of OpenRig.
86
+
87
+ ## Next
88
+
89
+ - `rig slack status` shows what is still missing, without contacting Slack.
90
+ - `rig slack verify` checks the granted baseline scopes and channel membership with Slack.
@@ -0,0 +1,244 @@
1
+ # Occupant-owned stream classification and shadow capture (experimental)
2
+
3
+ > **Experimental in 0.6.0, optional and off by default.** The Jev classification path and shadow
4
+ > capture may be incomplete or not work, and no accuracy or production-reliability claim is
5
+ > made. OpenRig's delivery, watchdog and routing decisions do not use their output. If they do
6
+ > not behave as described here, please
7
+ > [open an issue](https://github.com/mvschwarz/openrig/issues/new/choose) or send a pull request
8
+ > ([CONTRIBUTING.md](../../CONTRIBUTING.md)).
9
+
10
+ This source provides a bounded receiver for one real classifier occupant. It does
11
+ not start an agent, register a watchdog job, or enable capture by default.
12
+ Taxonomy, questions and decisions belong to the occupant; the daemon supplies
13
+ source facts and enforces its existing lease, execution and idempotency fences.
14
+ An explicit optional Jev mode supplies advisory decisions through the same worker.
15
+ Experimental labels have no demonstrated accuracy or calibrated confidence and
16
+ do not replace delivery, watchdog, or routing decisions.
17
+
18
+ ## Optional foreground Jev experiment
19
+
20
+ With no configuration, the experiment is off. Choose an explicit local JSON path
21
+ in an existing private directory; the file contains only enabled state and bounds:
22
+
23
+ ```sh
24
+ rig project experimental status --config ./experiment.json --json
25
+ rig project experimental enable --config ./experiment.json --max-requests 3 --timeout-ms 10000 --json
26
+ rig project experimental disable --config ./experiment.json --json
27
+ ```
28
+
29
+ Enable does not start processing, capture, a daemon or an agent. Status and disable
30
+ make no provider request. The invoking process needs `OPENROUTER_API_KEY` in its
31
+ environment for an enabled run; this entry never searches credential files or
32
+ copies credentials into configuration. Missing credentials fail before attempts
33
+ or provider work. Normal key provisioning remains with the operator.
34
+
35
+ The selected route is `https://openrouter.ai/api/alpha/decisions`, pinned to
36
+ `typesafe/jev-1.13`, without provider fallback or HTTP redirects. A request declares
37
+ maximum provider prices of $0.05 per million prompt tokens, zero completion and
38
+ request price. These are admission ceilings, not a price quote, spend estimate or
39
+ credential-access claim. Each foreground run allows 1–20 requests (default 3),
40
+ each with a 1–30 second deadline (default 10), 24 KiB request and 256 KiB response
41
+ limits. Failed requests consume their count. Nothing retries in the background.
42
+
43
+ To process stream items from the actual selected occupant:
44
+
45
+ ```sh
46
+ rig project wake --project PROJECT --taxonomy ./taxonomy.yaml \
47
+ --classifier-version experimental-jev-1.13 --evidence-epoch OWNER_EPOCH \
48
+ --limit 3 --experiment ./experiment.json --json
49
+ ```
50
+
51
+ Use the taxonomy format described below. Each criterion must have a nonempty
52
+ string description; `__unknown__` is reserved. Questions stay outside the daemon.
53
+ The request sends the selected item's body, supplied taxonomy questions/criteria,
54
+ canonical scope IDs and current roster destinations to OpenRouter. Select inputs
55
+ appropriate for that external processing. It does not transmit the credential
56
+ in evidence or store it in the classification. The output binds current source,
57
+ taxonomy, candidate version, lease, occupant generation and attempt execution.
58
+ No action or confidence label is inferred. Duplicate judgment remains manual.
59
+
60
+ The smaller of `--limit` and the configured request maximum bounds the wake.
61
+ Unknown answers remain null; a wholly unknown answer abstains. Invalid model,
62
+ provider, answer keys, choices, probabilities or response bytes reject the whole
63
+ answer. Probability sums retain the strict 0.001 tolerance; there is no rounding
64
+ repair or partial salvage. Unavailable/invalid provider work stops that run with
65
+ no classification write. Inspect the returned attempt state: terminal abstentions
66
+ are not reopened, and failed/unknown daemon writes must be reconciled through the
67
+ existing ledger. Never change the evidence epoch merely to retry an experiment.
68
+
69
+ Disable is checked before each call and before applying its result. A separate
70
+ disable command cannot cancel an already forwarded remote request; its late
71
+ result is discarded, with the existing deadline bounding the wait. Ctrl-C or
72
+ SIGTERM requests immediate cancellation of the foreground run. An uncooperative
73
+ request remains reported pending and cannot cause a late write or a second call
74
+ in that run. Remote cancellation or refund is not proven by local cancellation.
75
+ The command registers no wake, returns no automatic continuation, and requires
76
+ an explicit later invocation to do more work.
77
+
78
+ For selected observations from an existing shadow archive:
79
+
80
+ ```sh
81
+ rig project experimental capture --config ./experiment.json \
82
+ --input ./selected-shadow.jsonl --output ./new-advisory-results.jsonl --json
83
+ ```
84
+
85
+ This reads at most 8 MiB and considers only the first configured maximum number
86
+ of records. It never captures a terminal. The input remains unchanged; output is
87
+ exclusively created at mode 0600. Keep prior output and choose another filename
88
+ only for a deliberately selected new run. It sends captured post-screen text to
89
+ the same provider, and retains the original attempt/node/occupant/pane binding and
90
+ capture hash beside the answer. Missing capture or binding is unavailable and
91
+ makes no provider call. State answers are experimental hints; delivery remains
92
+ `INDETERMINATE` because screen text cannot prove submitted/consumed/effect and the
93
+ archive does not retain the original sent text. No result feeds back into live
94
+ transport or inventory. Failed runs preserve already written output; inspect
95
+ `unavailable`, `remaining`, call count and stop reason rather than treating a file
96
+ as proof of success.
97
+
98
+ ## One bounded wake
99
+
100
+ From the selected occupant, read candidates using the configured project ID:
101
+
102
+ ```sh
103
+ rig project candidates --project PROJECT --taxonomy /private/taxonomy.yaml \
104
+ --classifier-version VERSION --evidence-epoch OWNER_EPOCH --limit 20 --json
105
+ ```
106
+
107
+ The result includes eligible stream IDs, authored scope IDs with exact source
108
+ paths/hashes, the current running roster of the occupant's rig, observation time,
109
+ and a candidate version. Taxonomy YAML supplies `version` and
110
+ `fields.{kind,urgency,maturity,area}` with a `question` and `values` mapping. These
111
+ questions are returned to the occupant; draft values are not verified truth.
112
+ Confidence has no selectable values until calibration selects that contract.
113
+ Destination choices are the current roster sessions plus explicit `pool`.
114
+ Null/omitted destination remains unknown; it is not converted into `pool`.
115
+ The candidate hash binds the selectable values as well as source and taxonomy
116
+ hashes. Packets prepared before this pool correction require fresh preparation;
117
+ it does not reopen historical attempts or change the evidence epoch.
118
+
119
+ Read each eligible item with `rig stream show ITEM --json`. Duplicate candidates
120
+ are the latest 100 nonarchived items with exact body-hash evidence references;
121
+ their preview is capped at 2,000 characters and marked when truncated. Read the
122
+ complete candidate before selecting a duplicate. A retrieval miss means unknown.
123
+ Directory names, issue IDs and bare membership never supply scope IDs. Source
124
+ errors are explicit, and partial source snapshots cause abstention.
125
+
126
+ Write an occupant-owned decision file (at most 100 unique item IDs, at most 1 MiB):
127
+
128
+ ```json
129
+ {
130
+ "candidateSetVersion": "sha256:<version returned by candidates>",
131
+ "decisions": [{
132
+ "streamItemId": "<eligible ID>",
133
+ "bodyHash": "sha256:<SHA256 of the exact UTF-8 item body>",
134
+ "decision": { "kind": "classify", "labels": {
135
+ "classificationType": "<selected taxonomy value>",
136
+ "scopeRef": "<selected canonical mission or slice ID>",
137
+ "needsHuman": null
138
+ }}
139
+ }]
140
+ }
141
+ ```
142
+
143
+ An explicit abstention is `{"kind":"abstain","reason":"why unknown"}`. Other
144
+ label keys are `classificationUrgency`, `classificationMaturity`,
145
+ `classificationDestination`, `area`, and `classificationConfidence`. Omitted or
146
+ null labels stay unknown. A duplicate needs both `duplicateOfStreamItemId` and
147
+ the matching `duplicateEvidenceRef` from the candidates, plus occupant judgment
148
+ that it really is a duplicate. An existing item alone is not that judgment.
149
+
150
+ ```sh
151
+ rig project wake --project PROJECT --taxonomy /private/taxonomy.yaml \
152
+ --classifier-version VERSION --evidence-epoch OWNER_EPOCH --limit 20 \
153
+ --decisions /private/decisions.json --json
154
+ ```
155
+
156
+ This command actually invokes one `StreamClassificationWorker.wake()` through
157
+ the existing HTTP services. It derives sender identity through `DaemonClient`,
158
+ requires a current running occupant, and carries the captured generation through
159
+ each lease/attempt/classification request. It never invents a daemon holder.
160
+ Existing direct HTTP callers keep their documented sender-provenance behavior.
161
+
162
+ The command refreshes source candidates before acquiring a lease. Missing or
163
+ stale decision packets return unavailable without starting attempts; refresh
164
+ preparation if the roster, scopes, taxonomy or recent stream changed. During a
165
+ wake, an item with no exact body-bound decision, missing sources, or a selected
166
+ candidate that is unavailable abstains. This is deliberately strict; continuous
167
+ source churn can require repeated preparation and is not a throughput claim.
168
+
169
+ Each wake processes at most `--limit` items (1–100; default 20), starting with the
170
+ oldest eligible work rather than relying on a lossy notification cursor. Durable
171
+ terminal attempts stay excluded. A new candidate version does **not** authorize
172
+ another pass: only an owner-selected evidence epoch changes that attempt identity.
173
+ Retain the candidates output beside the decisions and result so its version is
174
+ reproducible. The CLI does not keep a second local ledger.
175
+
176
+ The result carries per-item outcomes, `moreEligible`, `nextWakeAt`, and a watchdog
177
+ `wakeRequest` descriptor with the real session/generation and a receiving
178
+ instruction. `registered:false` is literal. A periodic-reminder message asks the
179
+ occupant to prepare and run this entry; delivery of that message is not execution.
180
+ Registration/placement remains an explicit later action. Honor `nextWakeAt`:
181
+ lease maintenance uses TTL/3 opportunities; lease loss or an unavailable service
182
+ backs off 60 seconds. The daemon's retry/exhaustion ledger remains authoritative.
183
+ The ordinary client bounds each request at five seconds; a timed-out write has
184
+ an unknown outcome until the ledger is read, and is never reported as written.
185
+
186
+ There is no provider in the manual-decision path. The reusable asynchronous worker has one
187
+ pending classifier slot; timeout requests cancellation but cannot force it. An
188
+ uncooperative classifier blocks further calls in that instance and late results
189
+ cannot write. That in-memory pending slot is not cross-process cancellation.
190
+
191
+ ## Separate bounded shadow drain
192
+
193
+ The production transport and inventory probes accept the same optional observer.
194
+ They record only captures already taken, with the node, occupant, pane and capture
195
+ target bound before awaits. The ordinary cheap inventory path still takes no
196
+ capture. Retained-no-write is a separate event, never delivery evidence.
197
+
198
+ Activation requires explicitly supplied `OPENRIG_SHADOW_CAPTURE` JSON at a later
199
+ authorized daemon start. Absence or invalid configuration leaves capture disabled.
200
+ This document supplies no live destination or activation instruction. Required
201
+ fields and engineering ceilings are:
202
+
203
+ | Field | Meaning | Maximum |
204
+ |---|---|---|
205
+ | `destination` | New absolute JSONL file in a canonical, current-user-owned 0700 directory | Explicit path |
206
+ | `maxRecords` | Total reserved sink records | 100,000 |
207
+ | `maxBytes` | Total reserved sink bytes, including newlines | 1 GiB |
208
+ | `capacity` | Queued observation count | 1,000 |
209
+ | `maxQueuedBytes` | Serialized bytes waiting in the queue | 8 MiB |
210
+ | `maxObservationBytes` | Serialized bytes per observation | 1 MiB |
211
+
212
+ All numeric fields are required positive safe integers. These are engineering
213
+ capacity limits, not approved corpus sizes or classification thresholds. One
214
+ in-flight drain can hold up to 64 additional observations, bounded by the queue's
215
+ byte allowance; queue plus drain can therefore retain up to twice that allowance.
216
+ The standalone observer defaults are 256 entries, 4 MiB queued and 256 KiB per
217
+ observation; explicit production configuration supplies each value.
218
+
219
+ `rig project shadow-status` only inspects configuration/counters.
220
+ `rig project shadow-drain` asks the existing HTTP service to drain up to 64 rows;
221
+ it requires an actor and never enables capture. No background drain timer is added.
222
+ `rig project shadow-stop` disables new enqueueing immediately, finishes any active
223
+ drain and the finite retained queue, then closes the sink. Repeated stop is
224
+ idempotent; it cannot enable capture or delete the existing archive. Existing
225
+ quota and sink-failure losses remain counted. A slow disk can leave stop pending;
226
+ inspect status after a client timeout instead of assuming the flush completed.
227
+ Enabling capture again requires a separately authorized daemon start with a new
228
+ destination; enabling the local provider experiment does not enable capture.
229
+ The file is exclusively created with mode 0600. An existing file is refused,
230
+ never overwritten, appended, rotated or deleted. A restart requires a new selected
231
+ destination. Private-file creation currently requires POSIX ownership support.
232
+
233
+ The hot path only performs bounded synchronous enqueue work; it never awaits disk
234
+ or drain completion. Slow sinks leave one drain pending; concurrent drains do not
235
+ start another writer. Overflow drops new observations. Capacity exhaustion stops
236
+ the sink. Errors stop writes, count losses and preserve any partial file; failed
237
+ batches are not replayed. `reservedRecords/Bytes` include attempted writes, while
238
+ `completedRecords/Bytes` count successful appends. `drained` means removed from
239
+ the observer, not necessarily persisted. Queue count drops, byte-bound drops,
240
+ record errors, missing/unavailable captures and sink failures remain separate.
241
+
242
+ Live collection, private destination/retention selection, corpus labels, hosted
243
+ calibration, native placement, package/install proof and independent visible /
244
+ submitted / consumed / effect evidence remain outside this source entry.
@@ -4,16 +4,16 @@ name: yolo
4
4
  surface: flag
5
5
  launch_posture: full_bypass
6
6
  policy_schema_version: 1
7
- description: Permissive launch opt-in. Claude skips permission prompts; Codex selects danger-full-access but retains native approval policy. Pi enables resource trust.
7
+ description: Permissive launch opt-in. Claude skips permission prompts; Codex selects danger-full-access and never approval policy. Pi enables resource trust.
8
8
  ---
9
9
 
10
10
  # YOLO (built-in policy — flag surface)
11
11
 
12
12
  This built-in selects Claude `--dangerously-skip-permissions`, Codex
13
- `-s danger-full-access`, or Pi `--approve` (resource trust). Codex receives no
14
- approval flag and no named-profile argument on this path: its native approval
15
- settings still apply. This is not a universal promise that nothing prompts or
16
- is denied. Use only for work and an environment you deliberately trust.
13
+ `-s danger-full-access -a never`, or Pi `--approve` (resource trust). Codex receives
14
+ no named-profile argument on this path. These are launch arguments; native
15
+ managed restrictions still matter. Use only for work and an environment you
16
+ deliberately trust.
17
17
 
18
18
  **APPLICATION is deterministic, NOT skill-translated.** YOLO is a `surface: flag`
19
19
  policy: it resolves to a stable launch flag and is applied directly by the runtime
@@ -1,3 +1,8 @@
1
+ ---
2
+ name: vault-user
3
+ description: Use when checking the health of this rig's HashiCorp Vault or writing, reading, listing, deleting or explaining its secrets.
4
+ ---
5
+
1
6
  # Vault User
2
7
 
3
8
  You have access to a HashiCorp Vault instance managed by this rig's environment.
@@ -113,6 +113,13 @@ General engineering skills OpenRig ships as vendored copies. Open when the task
113
113
  - **frontend-design** — designing frontend / UI.
114
114
  - **dogfood** — web-QA / dogfooding a shipped UI.
115
115
 
116
+ ## When OpenRig itself misbehaves
117
+
118
+ Run `rig context get help`: the one help guide for your installed version, from symptom to next step, known problems,
119
+ and a useful report to the OpenRig team if you are still stuck. If `rig` won't run, read
120
+ `daemon/docs/reference/help.md` inside the installed `@openrig/cli` package, or https://www.openrig.dev/help/agents
121
+ (the same text).
122
+
116
123
  ## Need more than what ships here?
117
124
 
118
125
  This index covers the **shipped** surface. A dev host carries far more (factory, architecture, PM-craft, studio skills) reached through the host's own routers/codemaps — if you're on a builder host and need something not listed above, that deeper routing is the next hop, not a wall. (Host-scale routing is the subject of the context-routing architecture doc; at product scale, this one file is the whole map.)
@@ -1,6 +1,10 @@
1
1
  version: "0.2"
2
2
  name: kernel
3
3
  summary: >
4
+ Library preview of the default dual-runtime template, not the running kernel.
5
+ Automatic first boot selects the Claude-only, Codex-only or dual-runtime variant
6
+ from available authenticated runtimes. Check the current seats with
7
+ `rig ps --nodes --rig kernel`; the managed rig's spec shows its selected topology.
4
8
  Class-of-one always-on rig: advisor pilots user intent, operator runs
5
9
  OpenRig itself, queue worker classifies stream-to-queue substrate.
6
10
  Auto-boots on first rig daemon start (V0.3.1 slice 05). On
@@ -1,9 +1,9 @@
1
1
  // GENERATED by scripts/build-package.sh — the packaged build-identity stamp.
2
2
  export const BUILD_INFO = {
3
- semver: "0.5.17",
4
- commit: "f137f11bef9188f7b8e78764ba3643af7153efaf",
3
+ semver: "0.6.1",
4
+ commit: "d83bbebe97430c3f2777226fecc089d31e276aa8",
5
5
  dirty: false,
6
- builtAt: "2026-09-27T06:28:37Z",
6
+ builtAt: "2026-09-29T10:13:28Z",
7
7
  };
8
8
  export function stampFields(info = BUILD_INFO) {
9
9
  if (!info.commit) return {};