@openrig/cli 0.6.9 → 0.6.11

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 (570) hide show
  1. package/README.md +2 -2
  2. package/daemon/assets/onboarding/02-self-and-competent-action.md +4 -3
  3. package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
  4. package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
  5. package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +42 -2
  6. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +1 -1
  7. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +7 -1
  8. package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +6 -1
  9. package/daemon/assets/skills/rigs/SKILL.md +7 -5
  10. package/daemon/context-packs/help/manifest.yaml +1 -1
  11. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
  12. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +64 -14
  13. package/daemon/context-packs/reference/getting-started.md +10 -6
  14. package/daemon/context-packs/reference/manifest.yaml +1 -1
  15. package/daemon/context-packs/reference/rig-spec.md +2 -2
  16. package/daemon/context-packs/reference/whats-new.md +151 -74
  17. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  18. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  19. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  20. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
  21. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  22. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  23. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  24. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  25. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  26. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  27. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  28. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  29. package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +1 -1
  30. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +3 -3
  31. package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  33. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  34. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  36. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/SKILL.md +2 -2
  38. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/openrig-user/SKILL.md +7 -1
  46. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  49. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  54. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  55. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  57. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  58. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  61. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  62. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  63. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  64. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  65. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  66. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  67. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  68. package/daemon/context-packs/skills/refocusing/scripts/trace-to-root.py +6 -1
  69. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  70. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  71. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  72. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  73. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  74. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  75. package/daemon/dist/adapters/claude-code-adapter.d.ts +0 -14
  76. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  77. package/daemon/dist/adapters/claude-code-adapter.js +43 -80
  78. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  79. package/daemon/dist/adapters/claude-resume-launch.d.ts +4 -0
  80. package/daemon/dist/adapters/claude-resume-launch.d.ts.map +1 -0
  81. package/daemon/dist/adapters/claude-resume-launch.js +13 -0
  82. package/daemon/dist/adapters/claude-resume-launch.js.map +1 -0
  83. package/daemon/dist/adapters/claude-resume.d.ts +2 -1
  84. package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
  85. package/daemon/dist/adapters/claude-resume.js +9 -4
  86. package/daemon/dist/adapters/claude-resume.js.map +1 -1
  87. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +35 -0
  88. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  89. package/daemon/dist/adapters/codex-runtime-adapter.js +94 -44
  90. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  91. package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
  92. package/daemon/dist/adapters/pi-runner.js +6 -3
  93. package/daemon/dist/adapters/pi-runner.js.map +1 -1
  94. package/daemon/dist/adapters/pi-runtime-adapter.js +1 -1
  95. package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
  96. package/daemon/dist/adapters/tmux-server.d.ts +15 -0
  97. package/daemon/dist/adapters/tmux-server.d.ts.map +1 -0
  98. package/daemon/dist/adapters/tmux-server.js +58 -0
  99. package/daemon/dist/adapters/tmux-server.js.map +1 -0
  100. package/daemon/dist/adapters/tmux.d.ts +26 -1
  101. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  102. package/daemon/dist/adapters/tmux.js +130 -7
  103. package/daemon/dist/adapters/tmux.js.map +1 -1
  104. package/daemon/dist/build-info.js +3 -3
  105. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  106. package/daemon/dist/db/all-migrations.js +6 -0
  107. package/daemon/dist/db/all-migrations.js.map +1 -1
  108. package/daemon/dist/db/migrations/099_queue_items_recovery_tags.d.ts +3 -0
  109. package/daemon/dist/db/migrations/099_queue_items_recovery_tags.d.ts.map +1 -0
  110. package/daemon/dist/db/migrations/099_queue_items_recovery_tags.js +19 -0
  111. package/daemon/dist/db/migrations/099_queue_items_recovery_tags.js.map +1 -0
  112. package/daemon/dist/db/migrations/101_claude_resume_rotation.d.ts +3 -0
  113. package/daemon/dist/db/migrations/101_claude_resume_rotation.d.ts.map +1 -0
  114. package/daemon/dist/db/migrations/101_claude_resume_rotation.js +19 -0
  115. package/daemon/dist/db/migrations/101_claude_resume_rotation.js.map +1 -0
  116. package/daemon/dist/db/migrations/103_session_stop_intent.d.ts +4 -0
  117. package/daemon/dist/db/migrations/103_session_stop_intent.d.ts.map +1 -0
  118. package/daemon/dist/db/migrations/103_session_stop_intent.js +9 -0
  119. package/daemon/dist/db/migrations/103_session_stop_intent.js.map +1 -0
  120. package/daemon/dist/domain/active-occupant.d.ts +14 -0
  121. package/daemon/dist/domain/active-occupant.d.ts.map +1 -1
  122. package/daemon/dist/domain/active-occupant.js +17 -0
  123. package/daemon/dist/domain/active-occupant.js.map +1 -1
  124. package/daemon/dist/domain/agent-activity-store.js +3 -0
  125. package/daemon/dist/domain/agent-activity-store.js.map +1 -1
  126. package/daemon/dist/domain/bootstrap-repository.js +1 -1
  127. package/daemon/dist/domain/bootstrap-repository.js.map +1 -1
  128. package/daemon/dist/domain/chat-repository.d.ts +3 -0
  129. package/daemon/dist/domain/chat-repository.d.ts.map +1 -1
  130. package/daemon/dist/domain/chat-repository.js +15 -4
  131. package/daemon/dist/domain/chat-repository.js.map +1 -1
  132. package/daemon/dist/domain/claude-managed-launch.d.ts +1 -1
  133. package/daemon/dist/domain/claude-managed-launch.d.ts.map +1 -1
  134. package/daemon/dist/domain/claude-managed-launch.js +3 -2
  135. package/daemon/dist/domain/claude-managed-launch.js.map +1 -1
  136. package/daemon/dist/domain/cmux-layout-service.d.ts.map +1 -1
  137. package/daemon/dist/domain/cmux-layout-service.js +2 -1
  138. package/daemon/dist/domain/cmux-layout-service.js.map +1 -1
  139. package/daemon/dist/domain/codex-git-add-dirs.js +1 -1
  140. package/daemon/dist/domain/codex-git-add-dirs.js.map +1 -1
  141. package/daemon/dist/domain/codex-network-default.d.ts +3 -0
  142. package/daemon/dist/domain/codex-network-default.d.ts.map +1 -1
  143. package/daemon/dist/domain/codex-network-default.js +1 -1
  144. package/daemon/dist/domain/codex-network-default.js.map +1 -1
  145. package/daemon/dist/domain/codex-pane-patterns.d.ts +2 -0
  146. package/daemon/dist/domain/codex-pane-patterns.d.ts.map +1 -0
  147. package/daemon/dist/domain/codex-pane-patterns.js +5 -0
  148. package/daemon/dist/domain/codex-pane-patterns.js.map +1 -0
  149. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  150. package/daemon/dist/domain/context-monitor.js +46 -22
  151. package/daemon/dist/domain/context-monitor.js.map +1 -1
  152. package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  153. package/daemon/dist/domain/context-usage-store.js +6 -1
  154. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  155. package/daemon/dist/domain/crash-cart-conductor.d.ts.map +1 -1
  156. package/daemon/dist/domain/crash-cart-conductor.js +3 -1
  157. package/daemon/dist/domain/crash-cart-conductor.js.map +1 -1
  158. package/daemon/dist/domain/cwd-resolution.d.ts +8 -0
  159. package/daemon/dist/domain/cwd-resolution.d.ts.map +1 -1
  160. package/daemon/dist/domain/cwd-resolution.js +24 -3
  161. package/daemon/dist/domain/cwd-resolution.js.map +1 -1
  162. package/daemon/dist/domain/files/file-read.d.ts.map +1 -1
  163. package/daemon/dist/domain/files/file-read.js +11 -3
  164. package/daemon/dist/domain/files/file-read.js.map +1 -1
  165. package/daemon/dist/domain/gateway/connections-projection.d.ts +1 -1
  166. package/daemon/dist/domain/gateway/slack/channel-recovery.d.ts.map +1 -1
  167. package/daemon/dist/domain/gateway/slack/channel-recovery.js +4 -3
  168. package/daemon/dist/domain/gateway/slack/channel-recovery.js.map +1 -1
  169. package/daemon/dist/domain/gateway/slack/inbound.d.ts +21 -2
  170. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  171. package/daemon/dist/domain/gateway/slack/inbound.js +70 -11
  172. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  173. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +4 -0
  174. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
  175. package/daemon/dist/domain/gateway/slack/slack-delivery.js +1 -1
  176. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
  177. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  178. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +7 -4
  179. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  180. package/daemon/dist/domain/history-query.d.ts.map +1 -1
  181. package/daemon/dist/domain/history-query.js +8 -6
  182. package/daemon/dist/domain/history-query.js.map +1 -1
  183. package/daemon/dist/domain/human-questions.d.ts +4 -1
  184. package/daemon/dist/domain/human-questions.d.ts.map +1 -1
  185. package/daemon/dist/domain/human-questions.js.map +1 -1
  186. package/daemon/dist/domain/install-engine.js +2 -2
  187. package/daemon/dist/domain/install-engine.js.map +1 -1
  188. package/daemon/dist/domain/native-process-lineage.d.ts +57 -4
  189. package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
  190. package/daemon/dist/domain/native-process-lineage.js +277 -42
  191. package/daemon/dist/domain/native-process-lineage.js.map +1 -1
  192. package/daemon/dist/domain/node-cmux-service.d.ts.map +1 -1
  193. package/daemon/dist/domain/node-cmux-service.js +2 -1
  194. package/daemon/dist/domain/node-cmux-service.js.map +1 -1
  195. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  196. package/daemon/dist/domain/node-inventory.js +71 -18
  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 +2 -1
  200. package/daemon/dist/domain/node-launcher.js.map +1 -1
  201. package/daemon/dist/domain/pane-cutover.d.ts +27 -0
  202. package/daemon/dist/domain/pane-cutover.d.ts.map +1 -0
  203. package/daemon/dist/domain/pane-cutover.js +37 -0
  204. package/daemon/dist/domain/pane-cutover.js.map +1 -0
  205. package/daemon/dist/domain/parent-session-env.d.ts +8 -0
  206. package/daemon/dist/domain/parent-session-env.d.ts.map +1 -0
  207. package/daemon/dist/domain/parent-session-env.js +37 -0
  208. package/daemon/dist/domain/parent-session-env.js.map +1 -0
  209. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts +11 -0
  210. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -1
  211. package/daemon/dist/domain/policies/parked-owner-consumer.js +81 -11
  212. package/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -1
  213. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  214. package/daemon/dist/domain/profile-resolver.js +2 -3
  215. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  216. package/daemon/dist/domain/progress/progress-indexer.d.ts.map +1 -1
  217. package/daemon/dist/domain/progress/progress-indexer.js +19 -0
  218. package/daemon/dist/domain/progress/progress-indexer.js.map +1 -1
  219. package/daemon/dist/domain/proof/judgments.d.ts +10 -5
  220. package/daemon/dist/domain/proof/judgments.d.ts.map +1 -1
  221. package/daemon/dist/domain/proof/judgments.js +27 -19
  222. package/daemon/dist/domain/proof/judgments.js.map +1 -1
  223. package/daemon/dist/domain/provider/codex-limit-banner.d.ts +40 -0
  224. package/daemon/dist/domain/provider/codex-limit-banner.d.ts.map +1 -0
  225. package/daemon/dist/domain/provider/codex-limit-banner.js +168 -0
  226. package/daemon/dist/domain/provider/codex-limit-banner.js.map +1 -0
  227. package/daemon/dist/domain/provider/codex-usage-reader.d.ts +31 -0
  228. package/daemon/dist/domain/provider/codex-usage-reader.d.ts.map +1 -0
  229. package/daemon/dist/domain/provider/codex-usage-reader.js +115 -0
  230. package/daemon/dist/domain/provider/codex-usage-reader.js.map +1 -0
  231. package/daemon/dist/domain/provider/codex-usage-windows.d.ts +78 -0
  232. package/daemon/dist/domain/provider/codex-usage-windows.d.ts.map +1 -0
  233. package/daemon/dist/domain/provider/codex-usage-windows.js +259 -0
  234. package/daemon/dist/domain/provider/codex-usage-windows.js.map +1 -0
  235. package/daemon/dist/domain/provider/provider-service-impl.d.ts +10 -0
  236. package/daemon/dist/domain/provider/provider-service-impl.d.ts.map +1 -1
  237. package/daemon/dist/domain/provider/provider-service-impl.js +27 -1
  238. package/daemon/dist/domain/provider/provider-service-impl.js.map +1 -1
  239. package/daemon/dist/domain/provider/provider-service.d.ts +5 -0
  240. package/daemon/dist/domain/provider/provider-service.d.ts.map +1 -1
  241. package/daemon/dist/domain/provider/provider-types.d.ts +65 -0
  242. package/daemon/dist/domain/provider/provider-types.d.ts.map +1 -1
  243. package/daemon/dist/domain/ps-projection.d.ts +5 -2
  244. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  245. package/daemon/dist/domain/ps-projection.js +29 -26
  246. package/daemon/dist/domain/ps-projection.js.map +1 -1
  247. package/daemon/dist/domain/queue-recovery.d.ts.map +1 -1
  248. package/daemon/dist/domain/queue-recovery.js +10 -3
  249. package/daemon/dist/domain/queue-recovery.js.map +1 -1
  250. package/daemon/dist/domain/queue-repository.d.ts +68 -13
  251. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  252. package/daemon/dist/domain/queue-repository.js +72 -43
  253. package/daemon/dist/domain/queue-repository.js.map +1 -1
  254. package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
  255. package/daemon/dist/domain/queue-stuck-sweep.js +26 -9
  256. package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
  257. package/daemon/dist/domain/queue-wake-ladder.d.ts +17 -0
  258. package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
  259. package/daemon/dist/domain/queue-wake-ladder.js +49 -3
  260. package/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
  261. package/daemon/dist/domain/restore-check-service.d.ts +8 -0
  262. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
  263. package/daemon/dist/domain/restore-check-service.js +12 -3
  264. package/daemon/dist/domain/restore-check-service.js.map +1 -1
  265. package/daemon/dist/domain/restore-guidance.d.ts +39 -0
  266. package/daemon/dist/domain/restore-guidance.d.ts.map +1 -0
  267. package/daemon/dist/domain/restore-guidance.js +163 -0
  268. package/daemon/dist/domain/restore-guidance.js.map +1 -0
  269. package/daemon/dist/domain/restore-orchestrator.d.ts +10 -1
  270. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  271. package/daemon/dist/domain/restore-orchestrator.js +192 -9
  272. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  273. package/daemon/dist/domain/restore-plan-preview.d.ts +4 -0
  274. package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
  275. package/daemon/dist/domain/restore-plan-preview.js +14 -3
  276. package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
  277. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  278. package/daemon/dist/domain/rigspec-preflight.js +7 -6
  279. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  280. package/daemon/dist/domain/runtime-adapter.d.ts +3 -0
  281. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  282. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  283. package/daemon/dist/domain/scope/scope-view-projection.d.ts +4 -2
  284. package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
  285. package/daemon/dist/domain/scope/scope-view-projection.js +11 -11
  286. package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
  287. package/daemon/dist/domain/seat-attention-reconciler.d.ts +5 -2
  288. package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
  289. package/daemon/dist/domain/seat-attention-reconciler.js +18 -4
  290. package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
  291. package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
  292. package/daemon/dist/domain/seat-identity-reconciler.js +7 -2
  293. package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
  294. package/daemon/dist/domain/seat-lifecycle-service.d.ts +117 -2
  295. package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  296. package/daemon/dist/domain/seat-lifecycle-service.js +335 -74
  297. package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  298. package/daemon/dist/domain/seat-restart-in-place.d.ts +292 -0
  299. package/daemon/dist/domain/seat-restart-in-place.d.ts.map +1 -0
  300. package/daemon/dist/domain/seat-restart-in-place.js +895 -0
  301. package/daemon/dist/domain/seat-restart-in-place.js.map +1 -0
  302. package/daemon/dist/domain/seat-status-service.d.ts +2 -1
  303. package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
  304. package/daemon/dist/domain/seat-status-service.js +1 -0
  305. package/daemon/dist/domain/seat-status-service.js.map +1 -1
  306. package/daemon/dist/domain/seat-structural-activity-service.d.ts +9 -1
  307. package/daemon/dist/domain/seat-structural-activity-service.d.ts.map +1 -1
  308. package/daemon/dist/domain/seat-structural-activity-service.js +27 -4
  309. package/daemon/dist/domain/seat-structural-activity-service.js.map +1 -1
  310. package/daemon/dist/domain/seat-switch-client-service.d.ts.map +1 -1
  311. package/daemon/dist/domain/seat-switch-client-service.js +2 -1
  312. package/daemon/dist/domain/seat-switch-client-service.js.map +1 -1
  313. package/daemon/dist/domain/session-fingerprinter.d.ts.map +1 -1
  314. package/daemon/dist/domain/session-fingerprinter.js +9 -5
  315. package/daemon/dist/domain/session-fingerprinter.js.map +1 -1
  316. package/daemon/dist/domain/session-registry.d.ts +49 -0
  317. package/daemon/dist/domain/session-registry.d.ts.map +1 -1
  318. package/daemon/dist/domain/session-registry.js +92 -5
  319. package/daemon/dist/domain/session-registry.js.map +1 -1
  320. package/daemon/dist/domain/session-transport.d.ts +46 -4
  321. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  322. package/daemon/dist/domain/session-transport.js +492 -26
  323. package/daemon/dist/domain/session-transport.js.map +1 -1
  324. package/daemon/dist/domain/startup-orchestrator.d.ts +10 -0
  325. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  326. package/daemon/dist/domain/startup-orchestrator.js +41 -4
  327. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  328. package/daemon/dist/domain/successor-session-launcher.d.ts +3 -7
  329. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  330. package/daemon/dist/domain/successor-session-launcher.js +6 -32
  331. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  332. package/daemon/dist/domain/terminal/terminal-service.d.ts +5 -1
  333. package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -1
  334. package/daemon/dist/domain/terminal/terminal-service.js +30 -4
  335. package/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
  336. package/daemon/dist/domain/terminal/view-composer.d.ts +6 -0
  337. package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -1
  338. package/daemon/dist/domain/terminal/view-composer.js +2 -1
  339. package/daemon/dist/domain/terminal/view-composer.js.map +1 -1
  340. package/daemon/dist/domain/transcript-store.js +1 -1
  341. package/daemon/dist/domain/transcript-store.js.map +1 -1
  342. package/daemon/dist/domain/types.d.ts +38 -0
  343. package/daemon/dist/domain/types.d.ts.map +1 -1
  344. package/daemon/dist/domain/types.js +5 -0
  345. package/daemon/dist/domain/types.js.map +1 -1
  346. package/daemon/dist/domain/usage-series.d.ts.map +1 -1
  347. package/daemon/dist/domain/usage-series.js +9 -4
  348. package/daemon/dist/domain/usage-series.js.map +1 -1
  349. package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  350. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  351. package/daemon/dist/domain/user-settings/settings-store.js +44 -0
  352. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  353. package/daemon/dist/domain/view-projector.d.ts +4 -0
  354. package/daemon/dist/domain/view-projector.d.ts.map +1 -1
  355. package/daemon/dist/domain/view-projector.js +19 -4
  356. package/daemon/dist/domain/view-projector.js.map +1 -1
  357. package/daemon/dist/domain/wake-resolver.js +2 -2
  358. package/daemon/dist/domain/wake-resolver.js.map +1 -1
  359. package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
  360. package/daemon/dist/domain/watchdog-jobs-repository.js +19 -3
  361. package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
  362. package/daemon/dist/domain/whoami-service.d.ts +4 -1
  363. package/daemon/dist/domain/whoami-service.d.ts.map +1 -1
  364. package/daemon/dist/domain/whoami-service.js +25 -19
  365. package/daemon/dist/domain/whoami-service.js.map +1 -1
  366. package/daemon/dist/domain/workflow-runtime.d.ts +1 -1
  367. package/daemon/dist/domain/workspace/project-read.d.ts +2 -0
  368. package/daemon/dist/domain/workspace/project-read.d.ts.map +1 -1
  369. package/daemon/dist/domain/workspace/project-read.js +19 -8
  370. package/daemon/dist/domain/workspace/project-read.js.map +1 -1
  371. package/daemon/dist/index.d.ts.map +1 -1
  372. package/daemon/dist/index.js +6 -0
  373. package/daemon/dist/index.js.map +1 -1
  374. package/daemon/dist/routes/activity.d.ts.map +1 -1
  375. package/daemon/dist/routes/activity.js +33 -1
  376. package/daemon/dist/routes/activity.js.map +1 -1
  377. package/daemon/dist/routes/chat.d.ts.map +1 -1
  378. package/daemon/dist/routes/chat.js +29 -4
  379. package/daemon/dist/routes/chat.js.map +1 -1
  380. package/daemon/dist/routes/projects.d.ts.map +1 -1
  381. package/daemon/dist/routes/projects.js +5 -1
  382. package/daemon/dist/routes/projects.js.map +1 -1
  383. package/daemon/dist/routes/proof.d.ts.map +1 -1
  384. package/daemon/dist/routes/proof.js +99 -10
  385. package/daemon/dist/routes/proof.js.map +1 -1
  386. package/daemon/dist/routes/provider.d.ts.map +1 -1
  387. package/daemon/dist/routes/provider.js +31 -0
  388. package/daemon/dist/routes/provider.js.map +1 -1
  389. package/daemon/dist/routes/query-limit.d.ts +19 -0
  390. package/daemon/dist/routes/query-limit.d.ts.map +1 -0
  391. package/daemon/dist/routes/query-limit.js +24 -0
  392. package/daemon/dist/routes/query-limit.js.map +1 -0
  393. package/daemon/dist/routes/queue.d.ts.map +1 -1
  394. package/daemon/dist/routes/queue.js +35 -12
  395. package/daemon/dist/routes/queue.js.map +1 -1
  396. package/daemon/dist/routes/rig-cmux.js +8 -10
  397. package/daemon/dist/routes/rig-cmux.js.map +1 -1
  398. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  399. package/daemon/dist/routes/rigs.js +11 -7
  400. package/daemon/dist/routes/rigs.js.map +1 -1
  401. package/daemon/dist/routes/scopes.d.ts.map +1 -1
  402. package/daemon/dist/routes/scopes.js +5 -3
  403. package/daemon/dist/routes/scopes.js.map +1 -1
  404. package/daemon/dist/routes/seat.d.ts.map +1 -1
  405. package/daemon/dist/routes/seat.js +32 -0
  406. package/daemon/dist/routes/seat.js.map +1 -1
  407. package/daemon/dist/routes/stream.d.ts.map +1 -1
  408. package/daemon/dist/routes/stream.js +5 -1
  409. package/daemon/dist/routes/stream.js.map +1 -1
  410. package/daemon/dist/routes/up.d.ts.map +1 -1
  411. package/daemon/dist/routes/up.js +2 -1
  412. package/daemon/dist/routes/up.js.map +1 -1
  413. package/daemon/dist/routes/views.d.ts.map +1 -1
  414. package/daemon/dist/routes/views.js +7 -1
  415. package/daemon/dist/routes/views.js.map +1 -1
  416. package/daemon/dist/startup.d.ts.map +1 -1
  417. package/daemon/dist/startup.js +30 -1
  418. package/daemon/dist/startup.js.map +1 -1
  419. package/daemon/docs/reference/agent-startup-guide.md +19 -0
  420. package/daemon/docs/reference/getting-started.md +10 -6
  421. package/daemon/docs/reference/keeping-a-watch.md +156 -0
  422. package/daemon/docs/reference/rig-spec.md +2 -2
  423. package/daemon/docs/reference/sdlc-conventions.md +11 -1
  424. package/daemon/docs/reference/slack-app-setup.md +12 -4
  425. package/daemon/docs/reference/whats-new.md +151 -74
  426. package/daemon/specs/agents/development/qa/guidance/role.md +9 -0
  427. package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +1 -1
  428. package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +2 -2
  429. package/daemon/specs/rigs/launch/factory/CULTURE.md +13 -0
  430. package/daemon/specs/rigs/launch/factory/guidance/lead-first-move.md +18 -5
  431. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +20 -1
  432. package/daemon/specs/rigs/launch/starter/CULTURE.md +13 -0
  433. package/daemon/specs/rigs/launch/starter/guidance/lead-first-move.md +18 -5
  434. package/dist/build-info.js +3 -3
  435. package/dist/cli-error.d.ts.map +1 -1
  436. package/dist/cli-error.js +2 -0
  437. package/dist/cli-error.js.map +1 -1
  438. package/dist/commands/add.d.ts.map +1 -1
  439. package/dist/commands/add.js +55 -4
  440. package/dist/commands/add.js.map +1 -1
  441. package/dist/commands/capture.d.ts +9 -0
  442. package/dist/commands/capture.d.ts.map +1 -1
  443. package/dist/commands/capture.js +93 -41
  444. package/dist/commands/capture.js.map +1 -1
  445. package/dist/commands/config.d.ts.map +1 -1
  446. package/dist/commands/config.js +6 -1
  447. package/dist/commands/config.js.map +1 -1
  448. package/dist/commands/daemon.d.ts.map +1 -1
  449. package/dist/commands/daemon.js +44 -3
  450. package/dist/commands/daemon.js.map +1 -1
  451. package/dist/commands/down.d.ts.map +1 -1
  452. package/dist/commands/down.js +1 -50
  453. package/dist/commands/down.js.map +1 -1
  454. package/dist/commands/env.d.ts.map +1 -1
  455. package/dist/commands/env.js +6 -0
  456. package/dist/commands/env.js.map +1 -1
  457. package/dist/commands/heartbeat.js +2 -2
  458. package/dist/commands/heartbeat.js.map +1 -1
  459. package/dist/commands/proof.d.ts.map +1 -1
  460. package/dist/commands/proof.js +11 -5
  461. package/dist/commands/proof.js.map +1 -1
  462. package/dist/commands/provider.d.ts.map +1 -1
  463. package/dist/commands/provider.js +72 -0
  464. package/dist/commands/provider.js.map +1 -1
  465. package/dist/commands/ps.d.ts +7 -0
  466. package/dist/commands/ps.d.ts.map +1 -1
  467. package/dist/commands/ps.js +20 -6
  468. package/dist/commands/ps.js.map +1 -1
  469. package/dist/commands/queue.d.ts +48 -5
  470. package/dist/commands/queue.d.ts.map +1 -1
  471. package/dist/commands/queue.js +215 -45
  472. package/dist/commands/queue.js.map +1 -1
  473. package/dist/commands/scope.d.ts.map +1 -1
  474. package/dist/commands/scope.js +57 -36
  475. package/dist/commands/scope.js.map +1 -1
  476. package/dist/commands/seat.d.ts.map +1 -1
  477. package/dist/commands/seat.js +167 -10
  478. package/dist/commands/seat.js.map +1 -1
  479. package/dist/commands/setup.d.ts +6 -0
  480. package/dist/commands/setup.d.ts.map +1 -1
  481. package/dist/commands/setup.js +100 -44
  482. package/dist/commands/setup.js.map +1 -1
  483. package/dist/commands/start.d.ts.map +1 -1
  484. package/dist/commands/start.js +9 -4
  485. package/dist/commands/start.js.map +1 -1
  486. package/dist/commands/up.d.ts.map +1 -1
  487. package/dist/commands/up.js +10 -0
  488. package/dist/commands/up.js.map +1 -1
  489. package/dist/commands/usage.d.ts.map +1 -1
  490. package/dist/commands/usage.js +10 -5
  491. package/dist/commands/usage.js.map +1 -1
  492. package/dist/commands/workflow.d.ts.map +1 -1
  493. package/dist/commands/workflow.js +8 -8
  494. package/dist/commands/workflow.js.map +1 -1
  495. package/dist/config-store.d.ts +8 -1
  496. package/dist/config-store.d.ts.map +1 -1
  497. package/dist/config-store.js +57 -0
  498. package/dist/config-store.js.map +1 -1
  499. package/dist/daemon-lifecycle.d.ts +4 -0
  500. package/dist/daemon-lifecycle.d.ts.map +1 -1
  501. package/dist/daemon-lifecycle.js +16 -4
  502. package/dist/daemon-lifecycle.js.map +1 -1
  503. package/dist/lib/scope/capability-delta.d.ts.map +1 -1
  504. package/dist/lib/scope/capability-delta.js +8 -0
  505. package/dist/lib/scope/capability-delta.js.map +1 -1
  506. package/dist/lib/scope/mission-composition.d.ts +5 -1
  507. package/dist/lib/scope/mission-composition.d.ts.map +1 -1
  508. package/dist/lib/scope/mission-composition.js +61 -1
  509. package/dist/lib/scope/mission-composition.js.map +1 -1
  510. package/dist/lib/scope/progress-edit.js +1 -1
  511. package/dist/lib/scope/progress-edit.js.map +1 -1
  512. package/dist/lib/scope/scope-fs.d.ts +2 -1
  513. package/dist/lib/scope/scope-fs.d.ts.map +1 -1
  514. package/dist/lib/scope/scope-fs.js +7 -7
  515. package/dist/lib/scope/scope-fs.js.map +1 -1
  516. package/dist/lib/scope/slice-claims.d.ts +8 -0
  517. package/dist/lib/scope/slice-claims.d.ts.map +1 -0
  518. package/dist/lib/scope/slice-claims.js +88 -0
  519. package/dist/lib/scope/slice-claims.js.map +1 -0
  520. package/dist/queue-receipt.d.ts +41 -0
  521. package/dist/queue-receipt.d.ts.map +1 -0
  522. package/dist/queue-receipt.js +272 -0
  523. package/dist/queue-receipt.js.map +1 -0
  524. package/dist/rig-handle.d.ts +45 -0
  525. package/dist/rig-handle.d.ts.map +1 -0
  526. package/dist/rig-handle.js +51 -0
  527. package/dist/rig-handle.js.map +1 -0
  528. package/dist/system-preflight.d.ts +5 -0
  529. package/dist/system-preflight.d.ts.map +1 -1
  530. package/dist/system-preflight.js +8 -0
  531. package/dist/system-preflight.js.map +1 -1
  532. package/dist/terminal-window.d.ts.map +1 -1
  533. package/dist/terminal-window.js +3 -1
  534. package/dist/terminal-window.js.map +1 -1
  535. package/package.json +1 -1
  536. package/tui/dist/config/config-model.d.ts.map +1 -1
  537. package/tui/dist/config/config-model.js +3 -0
  538. package/tui/dist/config/config-model.js.map +1 -1
  539. package/tui/dist/daemon-client.d.ts +3 -0
  540. package/tui/dist/daemon-client.d.ts.map +1 -1
  541. package/tui/dist/daemon-client.js +4 -1
  542. package/tui/dist/daemon-client.js.map +1 -1
  543. package/tui/dist/detail.d.ts.map +1 -1
  544. package/tui/dist/detail.js +6 -1
  545. package/tui/dist/detail.js.map +1 -1
  546. package/tui/dist/hydrate.d.ts.map +1 -1
  547. package/tui/dist/hydrate.js +30 -21
  548. package/tui/dist/hydrate.js.map +1 -1
  549. package/tui/dist/input.d.ts.map +1 -1
  550. package/tui/dist/input.js +15 -4
  551. package/tui/dist/input.js.map +1 -1
  552. package/tui/dist/local-reading.js +2 -2
  553. package/tui/dist/local-reading.js.map +1 -1
  554. package/tui/dist/pulse/pulse-model.d.ts +1 -0
  555. package/tui/dist/pulse/pulse-model.d.ts.map +1 -1
  556. package/tui/dist/pulse/pulse-model.js +7 -3
  557. package/tui/dist/pulse/pulse-model.js.map +1 -1
  558. package/tui/dist/pulse/render-pulse.d.ts.map +1 -1
  559. package/tui/dist/pulse/render-pulse.js +3 -1
  560. package/tui/dist/pulse/render-pulse.js.map +1 -1
  561. package/tui/dist/reading.d.ts.map +1 -1
  562. package/tui/dist/reading.js +14 -3
  563. package/tui/dist/reading.js.map +1 -1
  564. package/tui/dist/render.d.ts.map +1 -1
  565. package/tui/dist/render.js +26 -11
  566. package/tui/dist/render.js.map +1 -1
  567. package/tui/dist/types.d.ts +3 -0
  568. package/tui/dist/types.d.ts.map +1 -1
  569. package/ui/dist/assets/{index-D5n8EwkG.js → index-DhmxKuZf.js} +159 -159
  570. package/ui/dist/index.html +1 -1
@@ -0,0 +1,156 @@
1
+ # Keeping a Watch for a Person
2
+
3
+ **How an operator turns "remind me in 20 minutes" or "tell me when X happens, check every hour" into a watch it
4
+ keeps, using today's queue commands.** The person speaks in sentences. They never see YAML, a job ID or a policy name
5
+ unless they ask.
6
+
7
+ > **Status (0.7.0, not on by default).** No agent's guidance points here yet, and no profile loads it. It's switched
8
+ > on by adding one line to the kernel operator's role guidance, after a native run on a real install shows the
9
+ > pattern holds. Until then, hand this page to an operator by hand (`docs/reference/keeping-a-watch.md`) to try it.
10
+
11
+ ## The shape
12
+
13
+ A watch is a **queue task the operator owns**, set aside with a **one-shot timer**:
14
+
15
+ 1. The person asks. The operator creates one task for itself and sets it aside with `--wake-after`.
16
+ 2. The timer fires once and wakes the operator. The operator reads the task and checks the condition.
17
+ 3. Then it tells the person, re-arms the timer, or both. **A timer fires once: a watch that isn't re-armed goes
18
+ quiet.**
19
+
20
+ OpenRig keeps the record and the timer. The operator does the judgment: what to check, and whether it's worth telling
21
+ the person.
22
+
23
+ ## Before you set one: can you reach the person?
24
+
25
+ Run `rig gateway human list --json`. A watch tells the person through the registered human channel (Slack today,
26
+ also shown in the TUI Feed), at `<entityId>@external`. **A terminal is never a person's address.** If no human is
27
+ registered, say so now, before setting anything up: a watch that can't reach them is a watch they'll never hear from.
28
+
29
+ ## Setting a watch
30
+
31
+ **1. Write the task body for a successor.** You may be restarted, compacted or replaced before the watch ends. A new
32
+ operator must be able to act from the task alone. Put these in the body:
33
+
34
+ ```markdown
35
+ Person's words: "Tell me when the release PR merges; check every hour."
36
+ Check: `gh pr view <n> --json state` — met when state is MERGED.
37
+ Interval: 1h.
38
+ Tell them: <entityId>@external (human channel), once, when met.
39
+ Stop: after telling them once, or when they say stop.
40
+ Unknown: not said yet.
41
+ ```
42
+
43
+ **2. Create it for yourself,** with a `watch` tag so it can be listed later (tags can't be changed after creation).
44
+ `<your session>` is your session name from `rig whoami --json`:
45
+
46
+ ```bash
47
+ rig queue create --destination <your session> --tags watch \
48
+ --summary "Watch: tell <person> when the release PR merges (hourly)" --body-file <file>
49
+ ```
50
+
51
+ **3. Set it aside with the timer.** A new pending task can be set aside directly; no claim is needed:
52
+
53
+ ```bash
54
+ rig queue block <task> --on external:<what you check> --wake-after 1h \
55
+ --continuation "check <what>; tell <person> if met, else re-arm 1h"
56
+ ```
57
+
58
+ `--on` is always required; `external:<what>` names the outside thing you're waiting on. The timer first fires after
59
+ the interval, not now.
60
+
61
+ **4. Say back what you set, in one or two plain lines:** what you'll check, how often, how they'll be told, and when
62
+ it stops. For example: "I'll check the release PR every hour and message you here once it merges. Then I'll stop."
63
+
64
+ A plain reminder ("remind me in 20 minutes to look at the release notes") is the same with no condition. Set it aside
65
+ with `--wake-after 20m`, and when it fires, tell them and close it.
66
+
67
+ ## Every time the timer fires: read the record first
68
+
69
+ When the timer's message arrives, **run `rig queue show <task> --full --json` before doing anything.** A message already
70
+ on its way can still arrive after the watch was stopped or changed. If the task is no longer set aside (done, canceled, or replaced),
71
+ do nothing.
72
+
73
+ Otherwise, check the condition, then do exactly one of these:
74
+
75
+ | What you found | Do |
76
+ |---|---|
77
+ | **Met, and the watch was "once"** | Tell the person (below), then close: `rig queue update <task> --state done --closure-reason no-follow-on --note "<what you saw>"` |
78
+ | **Met, and it's "every time"** | Tell the person, then re-arm |
79
+ | **Not met** | Re-arm. Say nothing to the person: never send "nothing yet" |
80
+ | **Can't tell** (no fresh reading) | The first time, tell them once that you can't tell, and why. Record that in a note (`Unknown: said <time>`), then re-arm. **Never say "all fine" for an unknown.** Stay quiet on later unknowns until the reading returns or changes |
81
+
82
+ **Re-arm** by setting it aside again with a fresh timer:
83
+
84
+ ```bash
85
+ rig queue block <task> --on external:<what> --wake-after 1h --note "checked <time>: not met"
86
+ ```
87
+
88
+ A new set-aside replaces the old one and retires any earlier timer, so a task never carries two live timers.
89
+
90
+ **Put what changed in `--note` or `--continuation`, not both.** When `rig queue block` gets `--continuation`, that is
91
+ the note it records, and `--note` is dropped.
92
+
93
+ Each check costs one of your turns on the person's subscription. **Use the longest interval that serves the ask.**
94
+
95
+ ## Telling the person
96
+
97
+ ```bash
98
+ rig queue create --destination <entityId>@external --human-intent update \
99
+ --summary "<subject>" --body-file <brief> --evidence-ref <watch task id> --verify --json
100
+ ```
101
+
102
+ - Always pass `--evidence-ref`; the watch task's ID is a durable pointer the person can open.
103
+ - Later messages about the same watch can thread with `--reply-to <earlier message's id>`.
104
+ - **`posted` means the connector posted it, not that they read it.** Don't say they saw it.
105
+ - **If delivery fails or is indeterminate,** inspect that task before anything else. Never resend blindly.
106
+
107
+ ## "What are you watching for me?"
108
+
109
+ List **every active state**, not just set-aside ones. A watch being checked can be in progress, and a new one can be
110
+ pending:
111
+
112
+ ```bash
113
+ rig queue list --owned --state pending,in-progress,blocked --full --limit 200 -o json
114
+ ```
115
+
116
+ Then keep the tasks tagged `watch`. Two rules:
117
+
118
+ - **Check that the number of tasks returned is below the limit.** The limit applies before you filter by tag. If you got
119
+ exactly the limit, raise it and list again. **Never report "no watch" from a page that was cut off.**
120
+ - **Use `--full`.** Compact output leaves out the body and the waiting view.
121
+
122
+ For each watch, say what it checks, how often, how they'll be told, and the next check. The next check is
123
+ `waiting.nextBackstop.dueAt` when `waiting.nextBackstop.mechanism` starts with `watchdog:`. If a set-aside watch shows
124
+ no timed backstop instead, its timer has fired and wasn't re-armed. Check it now and re-arm it.
125
+
126
+ Answer from the records, so a second reader would give the same list.
127
+
128
+ ## Changing or stopping a watch
129
+
130
+ | The person says | Do |
131
+ |---|---|
132
+ | **"Check every 2 hours instead"** | Re-arm with the new interval and a note saying what changed: `rig queue block <task> --on external:<what> --wake-after 2h --note "<person's words>"` |
133
+ | **"Watch Y instead"** (what's checked changes) | A task's body can't be edited. Create the new watch, then retire the old one: `rig queue update <old> --state canceled --closure-reason superseded --closure-target <new> --note "<person's words>"` |
134
+ | **"Stop watching that"** | `rig queue update <task> --state canceled --note "<person's words>"`. Leaving the set-aside state retires its timer. A plain cancel takes no other closure fields |
135
+
136
+ Tell the person in one line what changed. After a stop, take no further action for that watch.
137
+
138
+ ## Across a restart or handover
139
+
140
+ A set-aside watch's current timer is **kept** when the operator is restarted or replaced, and it fires at whoever is
141
+ the operator next. That's why the body must stand alone.
142
+
143
+ **One gap:** a timer fires once. If the operator is replaced **after a fire and before the re-arm**, the successor
144
+ inherits a set-aside watch with no live timer. OpenRig's idle-owner check may remind the new operator once, but only
145
+ under some conditions, with no delay guarantee. So:
146
+
147
+ - **Re-arm promptly** after every fire.
148
+ - **After a restart or handover, list your watches** (above) and re-arm any that show no timed backstop.
149
+
150
+ ## What not to use
151
+
152
+ - **`rig watchdog register --policy periodic-reminder` for a person's watch.** It repeats every interval until it's
153
+ stopped (the first fire comes one interval after you register it), and it stops when the agent that registered it
154
+ is replaced. It's fine for agent-to-agent reminders.
155
+ - **Transcript bytes as "usage".** `context-usage-threshold` measures an agent's transcript, not an account's
156
+ allowance.
@@ -397,7 +397,7 @@ directory's `CLAUDE.md`, including blocks written by other rigs.
397
397
  | `profile` | string | yes | — | Profile name from the referenced AgentSpec. Use `default` for the default profile. Exception: `none` for terminal nodes. |
398
398
  | `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. |
399
399
  | `runtime` | string | yes | — | Agent runtime. Current supported values: `claude-code`, `codex`, `pi`, `omp`, `terminal`, `stub`. `stub` is a deterministic test harness, not an agent: a Node runner in the seat's tmux pane goes through the normal launch, skill projection, startup-file and readiness path, follows `<cwd>/.openrig/stub/script.json` when present, and calls no model. See "What a stub can and cannot prove" in `docs/as-built/test-layers.md`. |
400
- | `cwd` | string | yes | — | Working directory for the agent. A relative path resolves against the rig root (the directory containing the rig spec); an absolute path is used as is. Use `"."` for the rig root itself. Can be overridden at launch time with `rig up --cwd`. A cwd inside the OpenRig installation fails preflight unless `--cwd` is given. |
400
+ | `cwd` | string | yes | — | Working directory for the agent. A relative path resolves against the rig root (the directory containing the rig spec). If that path exists as written, it is used. Otherwise a leading `~` or `~/` expands to the home directory (`~user` does not) and `$VAR` / `${VAR}` expand from the daemon host's environment; a relative result still resolves against the rig root. A reference to an unset variable stays as written, so the cwd is that literal path and works only if it exists. Use `"."` for the rig root itself. Can be overridden at launch time with `rig up --cwd`. A cwd inside the OpenRig installation fails preflight unless `--cwd` is given. |
401
401
  | `label` | string | no | — | Human-readable member name. Shown in UI when present. |
402
402
  | `model` | string | no | — | Model override. Runtime-specific (e.g., `claude-opus-4-6` for Claude Code). |
403
403
  | `effort` | string | no | — | Reasoning effort override, trimmed. A non-string value is ignored with an advisory. |
@@ -406,7 +406,7 @@ directory's `CLAUDE.md`, including blocks written by other rigs.
406
406
  | `restore_policy` | string | no | the AgentSpec's | Restore behavior. One of: `resume_if_possible`, `relaunch_fresh`, `checkpoint_only`. The default comes from the AgentSpec's `defaults.lifecycle` (else `resume_if_possible`) as narrowed by its profile; a member value may only narrow it further, in that order. |
407
407
  | `compaction_strategy` | string | no | — | `default-compaction`, `managed-compaction`, `handover` or `apprentice-handover`; `harness_native` and `pod_continuity` are accepted as deprecated aliases, and `custom_prompt` is refused. |
408
408
  | `mechanic` | string | no | — | A canonical `seat@rig` session address, for `apprentice-handover`. |
409
- | `session_source` | object | no | — | Start the seat from an existing session: `fork` with `native_id`, `rebuild` with `artifact_set`, or `agent_image` with `image_name`. Not valid on terminal members. |
409
+ | `session_source` | object | no | — | Start the seat from an existing session: `fork` with `native_id`, `rebuild` with `artifact_set`, or `agent_image` with `image_name`. A Claude Code `fork` needs Claude Code 2.0.73 or later. Not valid on terminal members. |
410
410
  | `starter_ref` | object | no | — | `{ name }` of an agent starter (`^[a-zA-Z0-9][a-zA-Z0-9_-]*$`) whose files lead the seat's startup. Not valid on terminal members or with a fork. |
411
411
  | `startup` | StartupBlock | no | — | Member-level startup files and actions. Applied only to this member. |
412
412
 
@@ -121,7 +121,17 @@ When the owning scope selects `proofPolicy.judges`, use `rig proof judge` to
121
121
  record an attributed accept, reject or withdraw decision on a contract item,
122
122
  and `rig proof show` to read derived readiness up through slice, mission and
123
123
  project. The nearest slice, mission or project policy selects authorized judges;
124
- `rig proof --help` describes setup, selectors and evidence requirements. A
124
+ `rig proof --help` describes setup, selectors and evidence requirements. In a
125
+ multi-project workspace catalog, name the project with `--project <id>` or a
126
+ `<id>:` scope prefix (`alpha:m0/slices/01-t001`); unqualified scopes use the
127
+ daemon's selected workspace. The prefix counts only when it names a catalogued
128
+ project and no scope exists at that literal path, so a mission folder with a
129
+ colon (`alpha:trial/slices/01-t001`) still resolves as written. The scopes views
130
+ read a catalog project's readiness against the same project root, so they agree
131
+ with `rig proof show`. A catalog-project read names the project
132
+ (`project: { id, root }`) and reports its source watcher as unavailable; a
133
+ judgment carries that root and is refused (409 `project_changed`) if the
134
+ catalog has since moved the project. A
125
135
  correction preserves history and unrelated judgments without editing ancestor
126
136
  status checklists. An artifact can identify non-code work without a fabricated
127
137
  commit. Evidence capture (`proof add`), policy acceptance, higher outcome
@@ -98,6 +98,12 @@ questions by clicking a button (`rig queue create --human-questions-file`). In S
98
98
  clicks arrive over the same socket, so no request URL is needed. An app created from an older
99
99
  manifest has Interactivity off: turn it on under **Interactivity & Shortcuts**, or the buttons
100
100
  will do nothing. A typed reply in the thread still answers the decision either way.
101
+ Each click gets one short reply in the decision's thread: what was recorded, or, when OpenRig
102
+ refuses the click or can't record it, why and what to do instead (the sender isn't registered, the
103
+ decision is no longer waiting for answers or was sent to someone else, the button no longer
104
+ matches its questions, or the message can't be matched to a decision). Slack's redelivery of a
105
+ click OpenRig already handled gets no second reply. The reply is best effort: while Slack is
106
+ rate-limiting OpenRig's posts it may not be posted, and the click is handled the same either way.
101
107
 
102
108
  In the decision's `humanAnswers`, clicked answers remain option-id strings. A whole typed reply
103
109
  is stored as `{kind: "typed-reply", text: "…", placement: "first-unanswered", unansweredCount: N}`
@@ -172,8 +178,9 @@ are not supported targets.
172
178
 
173
179
  ## Reconnect recovery and status
174
180
 
175
- The daemon scans available top-level messages in the configured channel after a
176
- Socket Mode connection and on its existing five-minute retry cadence. Recovered
181
+ The daemon scans available top-level messages and replies broadcast with **Also send to
182
+ channel** in the configured default channel after a Socket Mode connection and on its
183
+ existing five-minute retry cadence. Broadcast replies keep their thread's routing. Recovered
177
184
  tasks say **Recovered after a gap** and show the original Slack posting time.
178
185
  They use the same sender admission, routing, attachment handling, fixed identity
179
186
  and dead-letter path as live messages. A durable dead letter is custody of a
@@ -198,8 +205,9 @@ When Slack reports a plan history limit, recovery still lands the available page
198
205
  and advances normally, retaining an older-history limitation in status across restarts.
199
206
  Missing bot credentials, history scope, membership, retention limits and API
200
207
  failures appear as recovery limitations. No additional scope is required to keep
201
- live delivery working. Thread-reply catch-up and dead-connection detection remain
202
- outside this recovery scope; global chronological order is not promised.
208
+ live delivery working. Non-broadcast thread replies and other channels remain outside
209
+ this recovery scope; global chronological order is not promised. This change does not
210
+ replay intervals already checkpointed before broadcast-reply recovery was added.
203
211
 
204
212
  `rig slack status` retains local configuration checks and adds a bounded daemon
205
213
  snapshot: socket state/generation, last event, recovery interval/state/reason,
@@ -1,91 +1,168 @@
1
- # What changed in OpenRig 0.6.9
1
+ # What changed in OpenRig 0.6.11
2
2
 
3
- This note is for an agent on an install that was just upgraded to 0.6.9. It lists only what behaves differently from
4
- 0.6.8 and what to do about it. For everything OpenRig can do, read the capability map:
3
+ This note is for an agent on an install that was just upgraded to 0.6.11. It lists only what behaves differently from
4
+ 0.6.10 and what to do about it. For everything OpenRig can do, read the capability map:
5
5
  `rig context get onboarding-width/public-what-you-can-do.md`. Each release replaces this file, so
6
6
  `rig context get reference/whats-new.md` describes the installed version once the upgraded daemon is running. Without
7
7
  a running daemon, read `$OPENRIG_HOME/reference/whats-new.md`. The daemon refreshes that copy when it starts, so right
8
8
  after an upgrade it can still hold the previous version's note.
9
9
 
10
- ## Slack
11
-
12
- - **A typed reply to a decision with structured questions is kept.** It's recorded on the row in `humanAnswers` as a
13
- tagged entry (`kind: "typed-reply"`), placed under the first unanswered question, with the count of questions still
14
- unanswered. A clicked answer is still the option's ID. Typed text that matches an option's ID is never read as clicking
15
- it. The decision still closes, and closing doesn't mean approval: read the reply and its placement before acting. The
16
- `messaging-the-human` skill says how.
17
- - **`rig slack status` shows the inbound retry backlog:** how many retained records for inbound messages, reactions
18
- and click answers are waiting to be retried, kept across restarts. This counts records, not distinct messages.
19
- If the records can't be read, the line says the count is unknown and why; it never reads as an empty backlog.
20
- - **An alert retried after its row closed isn't posted.** A Slack post that failed is kept and retried when the gateway
21
- next starts. If the row has left the active states by then, the alert is dropped and the row records
22
- `slack-owner-notification-dropped … reason=row-not-active`. Alerts for rows still open, decision-resolved notices and
23
- digests still post. `rig slack enable` says how many earlier undelivered posts wait to be retried.
24
- - **"Connected" is no longer the only word about the Slack connection.** OpenRig now notices a connection that stays
25
- open while Slack stops delivering events to it, and replaces it: a new connection opens first, then the old one
26
- closes. Two signals catch it, each counted only once the connection has shown it: Slack's server pings stopping for
27
- 30 seconds, and two of OpenRig's own posts not coming back as events within a minute. Automatic replacements are at
28
- most one every 5 minutes; Slack's own refresh requests are exempt.
29
- - **Read delivery beside the socket state.** `rig slack status` adds a `Delivery:` line (`delivering`, `not yet
30
- confirmed`, `events missing since …`, `no server pings since …`, or Socket Mode disabled), the last automatic
31
- reconnect and why, a held-back reconnect and until when, and Slack's connection count when it's more than ours. The
32
- connections view shows `connected; delivering` or `connected; delivery not yet confirmed`. Report "not yet
33
- confirmed" as that, never as working.
34
-
35
- ## Sends and waits
36
-
37
- - **A cross-host send that may have arrived reads as unconfirmed, not failed.** `rig send <session> --host <id>` to an
38
- http-registered host now has a 30-second request budget, plus any `--wait-for-idle` time. When the answer doesn't come back, or the connection drops after the
39
- request went out, the send exits 1 with `failedStep: "remote-outcome-unknown"` and "Delivery UNCONFIRMED". **Check the
40
- target with `rig capture <session> --host <id>` before any resend**; a blind resend can deliver twice. Only a host
41
- that was never reached reads as unreachable.
42
- - **`rig chatroom wait` keeps waiting through a slow or restarting daemon.** Poll timeouts, connection refusals, and
43
- reset or closed connections are retried until your `--timeout`; the first failure in a run prints a line on stderr.
44
- Other errors, including an error answer from the daemon such as a removed rig, still end the wait. If the last
45
- recorded poll failure remains unresolved at the deadline, the timeout says new messages may have arrived unseen.
46
-
47
- ## Kernel status
48
-
49
- - **A kernel that recovered from a failed start reads ready.** When every declared kernel seat reports ready, for
50
- example after `rig seat continue`, `rig status` says so and adds an indented line naming the earlier failure and
51
- when it happened. `GET /api/kernel/status` returns that as `last_boot_failure`. The kernel's agent list shows each
52
- seat once, with its runtime.
53
-
54
- ## Scope approval
55
-
56
- - **`rig scope <tier> approve --workspace <path>` stamps the work tree you named.** Before, it reported success while
57
- the stamp landed in the daemon's own work tree. A named workspace with no `missions/` folder is now refused instead
58
- of falling back to the configured one. The approval record names the root it wrote under.
59
-
60
- ## Claude seats on NixOS
61
-
62
- - **A Claude Code installed from nixpkgs is recognised as the seat's runtime,** so its seats read `running` and sends
63
- no longer warn that the runtime couldn't be established. A seat that still carries an attention marker from an
64
- earlier failed launch keeps it: clear it with `rig seat clear-attention <seat>`.
65
-
66
- ## A correction to the 0.6.8 note
67
-
68
- - **`rig launch` takes a rig ID, not a rig name.** The 0.6.8 note wrote `rig launch <rig> <seat> --plan`. Read the ID
69
- from `rig ps --json`; a name gives `rig_not_found`.
10
+ ## After the upgrade
11
+
12
+ - **Restart the daemon** (`rig daemon stop`, then `rig daemon start`). One migration runs on the first start: `103`
13
+ adds one column to `sessions`, `intentionally_stopped`, which is 0 for every existing row. There are no migrations
14
+ `100` or `102`. The bundled openrig-core plugin stays at 0.1.9; two of its files changed.
15
+ - **Two new switches, both off by default:**
16
+ - `output.compact` (or `OPENRIG_OUTPUT_COMPACT`): the seven queue write commands (`rig queue create`, `claim`,
17
+ `unclaim`, `update`, `block`, `handoff` and `handoff-and-complete`) print a short receipt instead of the whole
18
+ row, and `--full` prints the whole row. While it's off their output is unchanged, `--full` is accepted, and
19
+ `rig config` lists the key.
20
+ - `provider.usage_windows` (or `OPENRIG_PROVIDER_USAGE_WINDOWS` in the daemon's environment): `rig provider status
21
+ --refresh` reads a Codex login's usage windows once. While it's off, `--refresh` says how to turn it on and exits 1.
22
+
23
+ ## Output that changed shape
24
+
25
+ - **`rig queue create --verify` reports `outcome: "claimed"`** for a claimed row whose wake wasn't confirmed, instead
26
+ of `indeterminate`. A claim is pickup, not proof the body was read.
27
+ - **`rig queue create --verify` to a registered person who is also a seat with a pane reports the Slack side too.**
28
+ Beside the terminal wake it adds a `gateway` object: `posted` (`connectorAccepted: true`), `transport-failed` or
29
+ `never-posted` (`connectorAccepted: false`, with the detail), or `still-pending` (`connectorAccepted: null`). The
30
+ wait is still bounded by the existing 30-second default, and it can use all of it even when Slack isn't set up or the
31
+ row won't be posted; the Slack side then reads `still-pending`. Posted isn't read, and "This is not a failed handoff"
32
+ isn't shown when Slack reports a failed delivery. `GET /api/queue/:qitemId` returns `ownerNotificationLevel`, or
33
+ `null`.
34
+ - **`rig queue whoami --work-candidates` returns up to 50 held and 50 next rows,** with `heldTruncated` and
35
+ `nextTruncated`. `heldAndNextTruncated` now means either list was cut. With `OPENRIG_REFOCUS_WORK_PACKET` on (off by
36
+ default, as in 0.6.10), the refocus work packet lists held and next work separately, up to 50 each.
37
+ - **`rig ps --nodes --json` carries `intentionallyStopped`,** and `rig ps --nodes` shows `usage_limit` under REASON for a
38
+ Codex seat at its usage limit.
39
+
40
+ ## Seats and restore
41
+
42
+ - **A restore no longer starts a seat fresh when an earlier occupant left a resume token.** If a seat wasn't running
43
+ when the snapshot was taken, but an earlier session recorded a resume token, `rig up --existing` and `rig launch`
44
+ stop that seat at `awaiting-decision` and start nothing, because the token doesn't prove that conversation can still
45
+ resume. `rig launch` of such a seat exits 1 where it used to start it fresh. The message names the command that
46
+ starts it fresh on purpose. See the known gap below for how this shows in the rig status API.
47
+ - **In a restore of a rig whose seats are in pods, a seat is rolled back as unresumable only when its runtime reports
48
+ the conversation missing.** When Claude, Codex or Pi reports that, the seat goes back to `awaiting-decision` and
49
+ nothing starts, instead of a failed launch that left the new pane behind. A rig where every seat ends this way reads
50
+ `partially_restored` instead of `failed`; the exit code is 1 either way. A Claude that exits to its shell for another
51
+ reason keeps 0.6.10's result: the seat is reported failed and its pane is kept, so you can read what happened. Restores
52
+ of rigs without pods keep their earlier handling.
53
+ - **`rig seat launch --fresh --stop` checks before it stops anything.** A seat with a still-live older session is
54
+ refused before the current agent is stopped; 0.6.10 stopped it first. `--plan` previews a fresh launch without
55
+ changing anything and exits 0 even when it would be blocked. `--reason` is required only to execute; leaving it out
56
+ reports `missing_reason`.
57
+ - **A seat you stop on purpose no longer makes its rig read `degraded`.** `rig seat stop` records the stop, and `rig ps`
58
+ and the TUI leave that seat out of the rig's state; running counts still exclude it. A rig whose seats were all
59
+ stopped this way reads `stopped`.
60
+ - **Restart one Codex seat in place, on Linux:** `rig seat restart <seat> --keep-conversation --reason "<why>"`
61
+ restarts it in its own pane on the same conversation, so it starts again on whatever account its Codex home now
62
+ holds. It doesn't switch accounts itself. Before it stops anything, it checks that the seat is a Codex seat OpenRig
63
+ launched, in a single pane, with a conversation it can prove, and that relaunching wouldn't change the running
64
+ settings; any doubt refuses with nothing stopped. `--plan` runs every check and stops nothing.
65
+ `--verify --expect-account <account>` reports `moved` only when a tool turn has completed in the same conversation
66
+ since the restart and Codex's status names that account.
67
+ On macOS, a request that gets as far as reading the running process refuses before stopping the seat, because that
68
+ reading depends on `/proc`.
69
+ - **A forked Claude seat launches with its own session ID** (`rig fork`, or `session_source: fork`), so strict restore
70
+ and clear-attention can verify it as its own conversation. Forking a Claude seat needs Claude Code 2.0.73 or later,
71
+ which OpenRig doesn't check. Forks launched before this keep reading `mismatch` until they're relaunched.
72
+ - **Seats no longer inherit the launching Claude Code or Herdr session's identity variables,** such as `CLAUDECODE`.
73
+ If removing them fails, the launch goes ahead with a warning.
74
+ - **A member's `cwd` in a rig spec can be `~`, start with `~/`, or use `$VAR` or `${VAR}`,** expanded from the daemon's
75
+ environment, when the path as written doesn't exist. `rig up` warns on stderr when it chose `/` as the launch folder
76
+ itself.
77
+ - **A late readiness result no longer overwrites a newer launch attempt.**
78
+
79
+ ## Sends and wakes
80
+
81
+ - **`rig send --wait-for-idle N` waits before it takes the seat's delivery lease,** so other sends and queue wakes to
82
+ that seat aren't held behind a long wait. N is now a deadline from the start of the wait, including any time spent
83
+ waiting for the lease. A timeout names the wait you asked for.
84
+ - **A parked seat whose occupant is known isn't woken again for the same rows after a wake was delivered,** until it
85
+ updates one of them or one changes state. A failed, refused or unrecorded wake still repeats at the next park, and a
86
+ new occupant gets its first wake. "Delivered" means the wake was typed into the seat's terminal, not that the agent
87
+ read it.
88
+ - **`rig send --verify` confirms enveloped multi-line messages that the agent's screen indents,** and queue wakes use
89
+ the same check.
90
+ - **A Claude footer in auto, bypass or plan mode on the last line reads idle** when no activity hook is reporting.
91
+ - **A failed Pi or OMP turn shows the provider's own reason** when it gives one.
92
+ - **A `handed-off` closure with no visible successor** gets the same custody advisory and stuck-sweep finding as a
93
+ `done` closure.
94
+
95
+ ## Status
96
+
97
+ - **A Codex seat at its usage limit stays `unknown` with reason `usage_limit`** while its screen redraws, instead of
98
+ reading `running`. It clears when a readable screen shows no banner, or when Codex shows it's working again. See the
99
+ known gap below.
100
+ - **`rig ps` takes a rig's running count and status from the same set of sessions as `rig ps --nodes`.**
101
+ - **`rig whoami --full --json` shows a Codex seat's `runtimeContext.threadId`** when its stored conversation ID was
102
+ verified resumable.
103
+ - **The TUI says when a queue sample hit its cap or failed to load:** counts read `N+`, a seat missing from the sample
104
+ shows `?`, and Pulse no longer lists a NEEDS YOU item a second time. The caps count the whole host, so a quiet rig can
105
+ read `?` while another rig is busy.
106
+ - **The TUI Topology table's Q, WORK and NOW columns fill again** on drilled views and on a seat's page.
107
+
108
+ ## Smaller fixes
109
+
110
+ - A Slack reply sent with "Also send to channel" in the default channel is recovered after a connection gap.
111
+ - `rig config set daemon.port` refuses a port outside 0–65535, and a port like that from the environment or
112
+ `config.json` falls back to the file or default with a warning. `rig daemon start --port` refuses one too, with exit 1.
113
+ - Parallel `rig scope slice create` calls get different slice numbers. A number is never reused, and each create leaves
114
+ a hidden `slices/.nn-NN` claim file.
115
+ - `rig proof show` and `rig proof judge` take `--project <id>` or a `<project>:` scope prefix. Scope readiness for a
116
+ project selected in the TUI uses that project's own root.
117
+ - The chat send and topic routes return 400 before storing anything for payloads that used to fail with 500;
118
+ `/api/wake-resolve` answers a fractional or non-numeric generation with its usual "does not exist" reply; watchdog
119
+ registration refuses a `scan_interval_seconds` that can't be turned into a number (non-numeric text, a boolean, an
120
+ empty array); and unmanaged-pane discovery matches agent
121
+ process names exactly, plus `claude.exe` and names cut to 15 or 16 characters.
122
+ - The `rigs` and `openrig-skills` skill descriptions split by who is asking: a person in their own session, or an agent
123
+ inside a rig.
124
+ - A new reference page covers keeping a watch for a person with today's queue commands, installed at
125
+ `$OPENRIG_HOME/reference/keeping-a-watch.md`. See the known gap below.
70
126
 
71
127
  ## What to stop doing
72
128
 
73
- - **Stop resending a cross-host message after a timeout.** Check the target first; the first send may have arrived.
74
- - **Stop restarting a kernel whose status read `bootstrap_failed` after its seats recovered.** Read `rig status`
75
- again on 0.6.9; a recovered kernel reads ready.
76
- - **Stop passing a rig's name to `rig launch`.** Pass its ID.
77
-
78
- ## Known gaps in 0.6.9
79
-
80
- - **The latest first-install check used 0.6.8 on a fresh Mac account in Terminal,** with assistance to install the
81
- candidate. It reached setup, the kernel window and a team plan; team launch and work weren't exercised.
82
- Linux and Windows first installs remain unchecked in the evidence behind this note.
129
+ - **Stop expecting a restore to start a seat fresh** when an earlier session left a resume token; decide at
130
+ `awaiting-decision`, or use the command the message names.
131
+ - **Stop reading `indeterminate` as the answer for a claimed row** from `rig queue create --verify`; 0.6.11 says
132
+ `claimed`.
133
+ - **Stop treating `degraded` as a stopped seat's doing** after `rig seat stop`; the rig leaves that seat out.
134
+ - **Stop counting a long `--wait-for-idle` as extra time after the lease;** N is a deadline from the start of the wait.
135
+
136
+ ## Known gaps in 0.6.11
137
+
138
+ - **`rig seat restart --keep-conversation` supports Linux only.** Its automated tests are hermetic: they don't restart a
139
+ real Codex seat.
140
+ - **The rig status API can call a running rig `blocked` because of one seat that isn't running.** It happens when the
141
+ latest snapshot recorded no occupant for that seat, an earlier session of the seat left a resume token, and its newest
142
+ session's restore policy is `resume_if_possible`. A restore from that snapshot would stop at the seat for a decision,
143
+ and `GET /api/rigs/:id/status` folds that forecast into the rig's status, so it mixes current status with restore
144
+ readiness: no seat is halted. `rig status` and the TUI's rig list don't show it for a running rig.
145
+ - **A Codex seat can keep reading as at its usage limit** when an old usage-limit banner is followed by a submitted
146
+ prompt and the agent's reply, with no Codex working line and no input line below. It's recorded again every five
147
+ minutes, where 0.6.10 let it age out. The case was constructed from the source and hasn't been seen in a real
148
+ session.
149
+ - **The keeping-a-watch page says a timer fires once; a held-back wake uses up that fire.** When the typing guard holds
150
+ a one-shot `--wake-after` wake back (it shows as `retained`), that held-back attempt is recorded as the timer's one
151
+ fire and later wakes aren't, so the timer isn't retired: it can wake the owner again at each interval while the row
152
+ stays set aside. A row sharing the timer through `--wake-watchdog`, after the original row was handed off or stopped,
153
+ loses its one wake if that wake is held back. Read the row's transitions after each wake.
154
+ - **After `rig scope slice create` says it couldn't verify membership, the slice was kept.** Check `mission.yaml` before
155
+ creating it again: creating it again makes a second slice with the same name.
156
+ - **The latest first-install check before this release used 0.6.10 on Linux only.** macOS was last checked with 0.6.8,
157
+ and native Windows hasn't been checked.
83
158
  - **Only one selected lifecycle-help command has been checked in a live Claude session;** source and parser coverage
84
159
  is broader. If a help command still asks, report it.
85
160
  - **Codex team seats aren't asked before lifecycle commands yet.**
86
161
  - **The send gate trusts the most recently recorded hook.** If hooks are recorded out of order, it can hold a send for
87
162
  a question that's already answered, or miss one that's waiting. `rig capture` shows the real screen.
88
163
  - **A Codex seat whose permission request was approved automatically can still read "needs input".**
89
- - **A launched team still writes its skills into its working folder.**
164
+ - **A launched team still writes into its working folder;** the operator says what changes before you agree.
90
165
  - **After a restart, `rig status` shows `Kernel: skipped` whatever the kernel seats' state.** Read them with
91
166
  `rig ps --nodes --rig kernel --full`.
167
+ - **`rig tui --shared` still attaches on the default tmux server,** so it can't find the dashboard when the daemon runs
168
+ on a non-default tmux socket. Use `rig tui` there instead.
@@ -21,3 +21,12 @@ A tiny change can have builder-held verification. When independent QA is selecte
21
21
  the evaluator must not be the author. Load browser/dogfood skills only for a
22
22
  relevant UI journey. Respect a read-only assignment; fix-and-retest requires that
23
23
  scope, and changes make you an author of the repaired candidate.
24
+
25
+ Run checks the way your permissions expect, so the person isn't stopped for each
26
+ one. Run the project's own test command first: under a team's default
27
+ permissions, test runners such as `npm test` and `pytest` usually run without
28
+ asking, though an explicit permission choice can still require approval. To try
29
+ an input the tests don't cover, run one plain command at a time (for example
30
+ `python3 tip.py 1e30`), not a chained script with pipes, shell functions or
31
+ quoted braces. A new program may still ask the person once, and a plain command
32
+ is one they can allow for later runs.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: openrig-skills
3
- description: "Use when you're operating OpenRig and need the right skill or context for fleet recovery, seat handover, new-seat orientation, a watchdog wake, cross-host reach to an agent on another machine, rig packaging, an OpenRig upgrade, systematic debugging, queue triage, or implementation planning; also use when you don't know what applies or nothing is projected on cold boot."
3
+ description: "Use when an agent running inside OpenRig needs the right skill or context for fleet recovery, seat handover, new-seat orientation, a watchdog wake, cross-host reach to an agent on another machine, rig packaging, an OpenRig upgrade, systematic debugging, queue triage, or implementation planning; also when the agent doesn't know what applies or nothing is projected on cold boot. Installing, starting or updating OpenRig, getting back to a team or bringing a stopped one back from a person's own session is the rigs skill."
4
4
  allowed-tools: Bash(rig:*)
5
5
  metadata:
6
6
  openrig:
@@ -67,8 +67,8 @@ Write a fragment instead when a seat needs something `rig grow` does not set: an
67
67
  explicit model, a permission policy, a different agent spec or role profile, a
68
68
  per-seat runtime or working directory, or startup files. Use
69
69
  `rig expand <rig-id> <pod-fragment-path>` to add a pod, or
70
- `rig add <rig-id> <pod-namespace> <member-fragment-path>` to add one member to an
71
- existing pod.
70
+ `rig add <rig> <pod-namespace> <member-fragment-path>` to add one member to an
71
+ existing pod (`<rig>` is the rig id or its exact unique name).
72
72
 
73
73
  ## Don't use this when
74
74
 
@@ -94,3 +94,16 @@ Use `mission-slice-sop` for the active work's artifact and handoff conventions.
94
94
  The selected components or wave determine checks and independence; locks and
95
95
  Part B proof ceremony apply only when explicitly assigned. The scope audit is
96
96
  advisory, not a permission gate.
97
+
98
+ ## Commands that don't stop the person
99
+
100
+ Under the team's default permissions, `rig` commands, simple read-only commands such as `ls`, `cat` and `grep`, and the
101
+ project's test command usually run without asking. Other commands, and anything that looks like hidden shell code, can
102
+ stop for the person's approval. So keep commands plain:
103
+ - Run `rig` commands as they are: don't pipe their output into `python3` or another program, and don't put
104
+ `$VARIABLES` in them.
105
+ - Write files with your file-writing tool, not a shell heredoc. A file outside the project folder may still ask: tell
106
+ the person first.
107
+ - For a check, run the project's test command first. To try an input the tests don't cover, run one plain command at a
108
+ time (`python3 tip.py 1e30`), not a chained script. To give a program input, put it in a file with your file-writing
109
+ tool and redirect it (`python3 tip.py < input.txt`) rather than piping it in. A new program may still ask once.
@@ -4,6 +4,10 @@ The person's goal usually reaches you from the kernel operator as a queue row: t
4
4
  how to reach them. Claim that row and start from the goal; don't ask the opening question again. If the goal is
5
5
  unclear, ask the one question that changes what you would do.
6
6
 
7
+ Read the row with `rig queue show <id> --full`, which prints it as JSON (the goal is its `body` field), then run
8
+ `rig queue claim <id>` on its own. Keep these and later commands plain, as the team culture's "Commands that don't stop
9
+ the person" says, so they don't stop for the person's approval.
10
+
7
11
  **When the goal is real continuing work** (something to build or change that takes more than one exchange), record it
8
12
  lightly before you start:
9
13
  - Run `rig scope mission ls` first. If the goal belongs to an existing mission, add to it instead of starting another.
@@ -19,6 +23,12 @@ You plan it and route the work to your team; independent review comes before any
19
23
 
20
24
  When the goal is done, close the operator's row with the result.
21
25
 
26
+ **If a seat you're waiting on stops at a prompt,** for example a reviewer asking to run a command, tell the person in
27
+ your own pane which seat is waiting, exactly what it asks and how to reach it. In
28
+ `rig ps --nodes --json --fields canonicalSessionName,agentActivity,tmuxAttachCommand` that seat shows `needs_input`;
29
+ `rig capture <session>` with its `canonicalSessionName` shows the prompt, and its `tmuxAttachCommand` is the command to
30
+ give (if it has none, give its name). Don't answer another seat's prompt yourself.
31
+
22
32
  `rig down` and `rig seat stop` end agents' sessions and any work in progress, and `rig up <spec>` on a stopped team's
23
33
  name replaces it with a new team. Don't run them unless the person asked; check `rig ps --nodes` first.
24
34
 
@@ -30,15 +40,18 @@ alongside the goal, and never replace one that exists:
30
40
  1. Take the rig's name from `rig whoami --json` (`identity.rigName`). It is `factory` unless this team was launched
31
41
  under another name; `<rig>` below means that name. If it is null, the rig name is unavailable: skip the roster
32
42
  for now and try again when identity is available.
33
- 2. Run `rig roster list`. If it shows a roster with id `<rig>`, stop here.
34
- 3. The file is `<workspace.root>/rosters/<rig>.json`; `rig config get workspace.root` gives the root. If the file
35
- exists, stop here too. Create the `rosters/` folder if it is missing.
43
+ 2. Run `rig roster list`. If it shows a roster with id `<rig>`, or warns about `<rig>.json` (a roster file it
44
+ couldn't read), stop here: never replace that file.
45
+ 3. The file is `<workspace.root>/rosters/<rig>.json`; `rig config get workspace.root` gives the root. Step 2 already
46
+ told you whether this rig has a roster, so don't check the folder from the shell.
36
47
  4. Run `rig ps --nodes --rig <rig> --json --fields canonicalSessionName,hostSelfId`. It gives each seat's exact address
37
48
  and the host that serves it.
38
49
  5. Match `orch-lead` (you) to lead, `orch-advisor` to advisor, `dev-build` to builder, `dev-qa` to QA,
39
50
  `dev-design` to designer, and `review-r1` and `review-r2` to the two reviewers, using the actual addresses from step 4.
40
- Write the file with those addresses and hosts, today's date, and yourself as curator (format: OpenRig's
41
- `$OPENRIG_HOME/reference/rosters.md`):
51
+ Write the file with those addresses and hosts, today's date, and yourself as curator; the template below is the
52
+ whole format. Write it with your file-writing tool, not a shell heredoc; if the tool can't create a missing
53
+ `rosters/` folder, create it first, which may also ask. The file is outside the project folder, so the person may be
54
+ asked to approve this write: say so in one line first.
42
55
 
43
56
  ```json
44
57
  {