@openrig/cli 0.6.6 → 0.6.7

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 (591) hide show
  1. package/README.md +95 -28
  2. package/daemon/assets/claude-team-permissions.cjs +262 -0
  3. package/daemon/assets/onboarding/02-self-and-competent-action.md +20 -13
  4. package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
  5. package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
  6. package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus-health.cjs +41 -0
  7. package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +69 -12
  8. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +13 -2
  9. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +4 -0
  10. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +1 -1
  11. package/daemon/assets/plugins/openrig-core/skills/refocusing/SKILL.md +31 -4
  12. package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +24 -13
  13. package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/SKILL.md +3 -0
  14. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +42 -0
  15. package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +6 -0
  16. package/daemon/assets/skills/rigs/SKILL.md +133 -0
  17. package/daemon/context-packs/help/help.md +48 -19
  18. package/daemon/context-packs/help/manifest.yaml +1 -1
  19. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
  20. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +218 -39
  21. package/daemon/context-packs/reference/getting-started.md +356 -212
  22. package/daemon/context-packs/reference/manifest.yaml +4 -1
  23. package/daemon/context-packs/reference/rig-spec.md +36 -11
  24. package/daemon/context-packs/reference/whats-new.md +134 -0
  25. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  26. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  27. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  28. package/daemon/context-packs/skills/claude-compaction-restore/SKILL.md +13 -2
  29. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
  30. package/daemon/context-packs/skills/claude-compaction-restore/scripts/precompact-hook.mjs +4 -0
  31. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  33. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  34. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  36. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +1 -1
  40. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/core/openrig-software-factory/SKILL.md +19 -12
  42. package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/core/openrig-software-factory/references/worked-example.md +2 -2
  44. package/daemon/context-packs/skills/core/openrig-upgrade/SKILL.md +2 -0
  45. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  46. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  49. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  54. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  55. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  57. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  58. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  61. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  62. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  63. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  64. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  65. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  66. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  67. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  68. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  69. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  70. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  71. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  72. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  73. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  74. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  75. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  76. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  77. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  78. package/daemon/context-packs/skills/refocusing/SKILL.md +31 -4
  79. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  80. package/daemon/context-packs/skills/refocusing/scripts/trace-to-root.py +24 -13
  81. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/SKILL.md +3 -0
  82. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  83. package/daemon/context-packs/skills/seat-continuity-and-handover/SKILL.md +42 -0
  84. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  85. package/daemon/context-packs/skills/session-compaction-and-restore/SKILL.md +6 -0
  86. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  87. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  88. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  89. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  90. package/daemon/dist/adapters/claude-code-adapter.d.ts +1 -1
  91. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  92. package/daemon/dist/adapters/claude-code-adapter.js +23 -13
  93. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  94. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  95. package/daemon/dist/adapters/codex-resume.js +17 -0
  96. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  97. package/daemon/dist/adapters/codex-runtime-adapter.js +2 -2
  98. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  99. package/daemon/dist/adapters/kernel-authority.d.ts.map +1 -1
  100. package/daemon/dist/adapters/kernel-authority.js +29 -11
  101. package/daemon/dist/adapters/kernel-authority.js.map +1 -1
  102. package/daemon/dist/adapters/pi-readiness.d.ts +15 -0
  103. package/daemon/dist/adapters/pi-readiness.d.ts.map +1 -0
  104. package/daemon/dist/adapters/pi-readiness.js +90 -0
  105. package/daemon/dist/adapters/pi-readiness.js.map +1 -0
  106. package/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -1
  107. package/daemon/dist/adapters/pi-runner-protocol.js +1 -0
  108. package/daemon/dist/adapters/pi-runner-protocol.js.map +1 -1
  109. package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
  110. package/daemon/dist/adapters/pi-runner.js +13 -2
  111. package/daemon/dist/adapters/pi-runner.js.map +1 -1
  112. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  113. package/daemon/dist/adapters/tmux.js +9 -6
  114. package/daemon/dist/adapters/tmux.js.map +1 -1
  115. package/daemon/dist/build-info.js +3 -3
  116. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  117. package/daemon/dist/db/all-migrations.js +4 -0
  118. package/daemon/dist/db/all-migrations.js.map +1 -1
  119. package/daemon/dist/db/migrations/096_rig_install_root.d.ts +3 -0
  120. package/daemon/dist/db/migrations/096_rig_install_root.d.ts.map +1 -0
  121. package/daemon/dist/db/migrations/096_rig_install_root.js +5 -0
  122. package/daemon/dist/db/migrations/096_rig_install_root.js.map +1 -0
  123. package/daemon/dist/db/migrations/097_thread_part_map.d.ts +3 -0
  124. package/daemon/dist/db/migrations/097_thread_part_map.d.ts.map +1 -0
  125. package/daemon/dist/db/migrations/097_thread_part_map.js +20 -0
  126. package/daemon/dist/db/migrations/097_thread_part_map.js.map +1 -0
  127. package/daemon/dist/domain/activity-taxonomy.d.ts +7 -0
  128. package/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -1
  129. package/daemon/dist/domain/activity-taxonomy.js.map +1 -1
  130. package/daemon/dist/domain/agent-activity-store.d.ts +12 -0
  131. package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -1
  132. package/daemon/dist/domain/agent-activity-store.js +55 -30
  133. package/daemon/dist/domain/agent-activity-store.js.map +1 -1
  134. package/daemon/dist/domain/agent-images/agent-image-types.d.ts +1 -1
  135. package/daemon/dist/domain/agent-images/agent-image-types.d.ts.map +1 -1
  136. package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
  137. package/daemon/dist/domain/bootstrap-orchestrator.js +6 -4
  138. package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
  139. package/daemon/dist/domain/bundle-install-context.d.ts +2 -2
  140. package/daemon/dist/domain/bundle-install-context.d.ts.map +1 -1
  141. package/daemon/dist/domain/bundle-install-context.js +16 -3
  142. package/daemon/dist/domain/bundle-install-context.js.map +1 -1
  143. package/daemon/dist/domain/bundle-types.d.ts +1 -1
  144. package/daemon/dist/domain/bundle-types.d.ts.map +1 -1
  145. package/daemon/dist/domain/chat-repository.d.ts +5 -0
  146. package/daemon/dist/domain/chat-repository.d.ts.map +1 -1
  147. package/daemon/dist/domain/chat-repository.js +8 -0
  148. package/daemon/dist/domain/chat-repository.js.map +1 -1
  149. package/daemon/dist/domain/claim-service.d.ts.map +1 -1
  150. package/daemon/dist/domain/claim-service.js +5 -4
  151. package/daemon/dist/domain/claim-service.js.map +1 -1
  152. package/daemon/dist/domain/claude-activity-hooks.d.ts +3 -0
  153. package/daemon/dist/domain/claude-activity-hooks.d.ts.map +1 -1
  154. package/daemon/dist/domain/claude-activity-hooks.js +8 -1
  155. package/daemon/dist/domain/claude-activity-hooks.js.map +1 -1
  156. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +11 -0
  157. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  158. package/daemon/dist/domain/claude-compaction-enforcer.js +42 -13
  159. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  160. package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
  161. package/daemon/dist/domain/codex-thread-id.js +4 -2
  162. package/daemon/dist/domain/codex-thread-id.js.map +1 -1
  163. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  164. package/daemon/dist/domain/context-monitor.js +2 -0
  165. package/daemon/dist/domain/context-monitor.js.map +1 -1
  166. package/daemon/dist/domain/execution-view.d.ts.map +1 -1
  167. package/daemon/dist/domain/execution-view.js +57 -11
  168. package/daemon/dist/domain/execution-view.js.map +1 -1
  169. package/daemon/dist/domain/gateway/connections-projection.d.ts +4 -0
  170. package/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -1
  171. package/daemon/dist/domain/gateway/connections-projection.js +2 -0
  172. package/daemon/dist/domain/gateway/connections-projection.js.map +1 -1
  173. package/daemon/dist/domain/gateway/destination-resolver.d.ts.map +1 -1
  174. package/daemon/dist/domain/gateway/destination-resolver.js +7 -4
  175. package/daemon/dist/domain/gateway/destination-resolver.js.map +1 -1
  176. package/daemon/dist/domain/gateway/human-readiness.d.ts.map +1 -1
  177. package/daemon/dist/domain/gateway/human-readiness.js +23 -6
  178. package/daemon/dist/domain/gateway/human-readiness.js.map +1 -1
  179. package/daemon/dist/domain/gateway/human-registry.d.ts +2 -2
  180. package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  181. package/daemon/dist/domain/gateway/human-registry.js +2 -2
  182. package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  183. package/daemon/dist/domain/gateway/slack/capabilities.d.ts.map +1 -1
  184. package/daemon/dist/domain/gateway/slack/capabilities.js +3 -1
  185. package/daemon/dist/domain/gateway/slack/capabilities.js.map +1 -1
  186. package/daemon/dist/domain/gateway/slack/channel-map.d.ts +39 -0
  187. package/daemon/dist/domain/gateway/slack/channel-map.d.ts.map +1 -0
  188. package/daemon/dist/domain/gateway/slack/channel-map.js +114 -0
  189. package/daemon/dist/domain/gateway/slack/channel-map.js.map +1 -0
  190. package/daemon/dist/domain/gateway/slack/config.d.ts +7 -0
  191. package/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -1
  192. package/daemon/dist/domain/gateway/slack/config.js +19 -2
  193. package/daemon/dist/domain/gateway/slack/config.js.map +1 -1
  194. package/daemon/dist/domain/gateway/slack/inbound.d.ts +24 -1
  195. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  196. package/daemon/dist/domain/gateway/slack/inbound.js +104 -3
  197. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  198. package/daemon/dist/domain/gateway/slack/message.d.ts +7 -0
  199. package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -1
  200. package/daemon/dist/domain/gateway/slack/message.js +36 -0
  201. package/daemon/dist/domain/gateway/slack/message.js.map +1 -1
  202. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +30 -7
  203. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
  204. package/daemon/dist/domain/gateway/slack/slack-delivery.js +253 -51
  205. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
  206. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  207. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +90 -10
  208. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  209. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +2 -0
  210. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -1
  211. package/daemon/dist/domain/gateway/slack/socket-inbound.js +40 -0
  212. package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -1
  213. package/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -1
  214. package/daemon/dist/domain/gateway/slack/thread-routing.js +22 -2
  215. package/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -1
  216. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +14 -0
  217. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -1
  218. package/daemon/dist/domain/gateway/slack/thread-seat-map.js +27 -0
  219. package/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -1
  220. package/daemon/dist/domain/generated-file-hygiene.d.ts.map +1 -1
  221. package/daemon/dist/domain/generated-file-hygiene.js +7 -4
  222. package/daemon/dist/domain/generated-file-hygiene.js.map +1 -1
  223. package/daemon/dist/domain/managed-blocks.d.ts.map +1 -1
  224. package/daemon/dist/domain/managed-blocks.js +5 -2
  225. package/daemon/dist/domain/managed-blocks.js.map +1 -1
  226. package/daemon/dist/domain/markdown-address.d.ts.map +1 -1
  227. package/daemon/dist/domain/markdown-address.js +23 -6
  228. package/daemon/dist/domain/markdown-address.js.map +1 -1
  229. package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
  230. package/daemon/dist/domain/native-process-lineage.js +36 -1
  231. package/daemon/dist/domain/native-process-lineage.js.map +1 -1
  232. package/daemon/dist/domain/node-inventory.d.ts +2 -2
  233. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  234. package/daemon/dist/domain/node-inventory.js +30 -4
  235. package/daemon/dist/domain/node-inventory.js.map +1 -1
  236. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  237. package/daemon/dist/domain/node-launcher.js +1 -0
  238. package/daemon/dist/domain/node-launcher.js.map +1 -1
  239. package/daemon/dist/domain/pane-binding-observation.d.ts +1 -0
  240. package/daemon/dist/domain/pane-binding-observation.d.ts.map +1 -1
  241. package/daemon/dist/domain/pane-binding-observation.js +3 -1
  242. package/daemon/dist/domain/pane-binding-observation.js.map +1 -1
  243. package/daemon/dist/domain/plugin-vendor-service.d.ts +6 -0
  244. package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
  245. package/daemon/dist/domain/plugin-vendor-service.js +12 -0
  246. package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
  247. package/daemon/dist/domain/ps-projection.d.ts +11 -9
  248. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  249. package/daemon/dist/domain/ps-projection.js +15 -12
  250. package/daemon/dist/domain/ps-projection.js.map +1 -1
  251. package/daemon/dist/domain/queue-repository.d.ts +2 -0
  252. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  253. package/daemon/dist/domain/queue-repository.js +39 -14
  254. package/daemon/dist/domain/queue-repository.js.map +1 -1
  255. package/daemon/dist/domain/queue-retention.d.ts +2 -2
  256. package/daemon/dist/domain/queue-retention.js +4 -4
  257. package/daemon/dist/domain/queue-wait-backoff.d.ts.map +1 -1
  258. package/daemon/dist/domain/queue-wait-backoff.js +6 -2
  259. package/daemon/dist/domain/queue-wait-backoff.js.map +1 -1
  260. package/daemon/dist/domain/queue-waiting.d.ts.map +1 -1
  261. package/daemon/dist/domain/queue-waiting.js +7 -2
  262. package/daemon/dist/domain/queue-waiting.js.map +1 -1
  263. package/daemon/dist/domain/queue-wake-ladder.d.ts +15 -2
  264. package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
  265. package/daemon/dist/domain/queue-wake-ladder.js +29 -6
  266. package/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
  267. package/daemon/dist/domain/rehydrate-eligibility.d.ts.map +1 -1
  268. package/daemon/dist/domain/rehydrate-eligibility.js +5 -2
  269. package/daemon/dist/domain/rehydrate-eligibility.js.map +1 -1
  270. package/daemon/dist/domain/reply-to-choice.d.ts +6 -2
  271. package/daemon/dist/domain/reply-to-choice.d.ts.map +1 -1
  272. package/daemon/dist/domain/reply-to-choice.js +9 -6
  273. package/daemon/dist/domain/reply-to-choice.js.map +1 -1
  274. package/daemon/dist/domain/restore-check-service.d.ts +5 -1
  275. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
  276. package/daemon/dist/domain/restore-check-service.js +17 -3
  277. package/daemon/dist/domain/restore-check-service.js.map +1 -1
  278. package/daemon/dist/domain/rig-repository.d.ts +3 -1
  279. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  280. package/daemon/dist/domain/rig-repository.js +13 -4
  281. package/daemon/dist/domain/rig-repository.js.map +1 -1
  282. package/daemon/dist/domain/rigspec-instantiator.d.ts +1 -0
  283. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  284. package/daemon/dist/domain/rigspec-instantiator.js +1 -1
  285. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  286. package/daemon/dist/domain/rigspec-preflight.d.ts +1 -1
  287. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  288. package/daemon/dist/domain/rigspec-preflight.js +8 -4
  289. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  290. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  291. package/daemon/dist/domain/rigspec-schema.js +19 -4
  292. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  293. package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
  294. package/daemon/dist/domain/seat-activity-service.js +16 -6
  295. package/daemon/dist/domain/seat-activity-service.js.map +1 -1
  296. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  297. package/daemon/dist/domain/seat-handover-service.js +9 -1
  298. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  299. package/daemon/dist/domain/session-jsonl.d.ts.map +1 -1
  300. package/daemon/dist/domain/session-jsonl.js +10 -4
  301. package/daemon/dist/domain/session-jsonl.js.map +1 -1
  302. package/daemon/dist/domain/session-transport.d.ts +4 -20
  303. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  304. package/daemon/dist/domain/session-transport.js +37 -30
  305. package/daemon/dist/domain/session-transport.js.map +1 -1
  306. package/daemon/dist/domain/skill-audit.d.ts +19 -0
  307. package/daemon/dist/domain/skill-audit.d.ts.map +1 -1
  308. package/daemon/dist/domain/skill-audit.js +97 -5
  309. package/daemon/dist/domain/skill-audit.js.map +1 -1
  310. package/daemon/dist/domain/skill-catalog.d.ts.map +1 -1
  311. package/daemon/dist/domain/skill-catalog.js +9 -0
  312. package/daemon/dist/domain/skill-catalog.js.map +1 -1
  313. package/daemon/dist/domain/skill-mirror-drift.d.ts +6 -1
  314. package/daemon/dist/domain/skill-mirror-drift.d.ts.map +1 -1
  315. package/daemon/dist/domain/skill-mirror-drift.js +23 -12
  316. package/daemon/dist/domain/skill-mirror-drift.js.map +1 -1
  317. package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
  318. package/daemon/dist/domain/snapshot-repository.js +12 -32
  319. package/daemon/dist/domain/snapshot-repository.js.map +1 -1
  320. package/daemon/dist/domain/terminal/herdr-adapter.d.ts +4 -1
  321. package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
  322. package/daemon/dist/domain/terminal/herdr-adapter.js +14 -7
  323. package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
  324. package/daemon/dist/domain/terminal/terminal-provider.d.ts +9 -0
  325. package/daemon/dist/domain/terminal/terminal-provider.d.ts.map +1 -1
  326. package/daemon/dist/domain/terminal/terminal-service.d.ts +4 -0
  327. package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -1
  328. package/daemon/dist/domain/terminal/terminal-service.js +23 -11
  329. package/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
  330. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  331. package/daemon/dist/domain/transcript-store.js +21 -9
  332. package/daemon/dist/domain/transcript-store.js.map +1 -1
  333. package/daemon/dist/domain/types.d.ts +2 -0
  334. package/daemon/dist/domain/types.d.ts.map +1 -1
  335. package/daemon/dist/domain/types.js.map +1 -1
  336. package/daemon/dist/domain/usage-samples-store.js +2 -2
  337. package/daemon/dist/domain/usage-samples-store.js.map +1 -1
  338. package/daemon/dist/domain/usage-series.d.ts.map +1 -1
  339. package/daemon/dist/domain/usage-series.js +42 -10
  340. package/daemon/dist/domain/usage-series.js.map +1 -1
  341. package/daemon/dist/domain/user-settings/settings-browser.d.ts.map +1 -1
  342. package/daemon/dist/domain/user-settings/settings-browser.js +2 -0
  343. package/daemon/dist/domain/user-settings/settings-browser.js.map +1 -1
  344. package/daemon/dist/domain/user-settings/settings-store.js +1 -1
  345. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  346. package/daemon/dist/domain/watchdog-due.d.ts +17 -0
  347. package/daemon/dist/domain/watchdog-due.d.ts.map +1 -0
  348. package/daemon/dist/domain/watchdog-due.js +45 -0
  349. package/daemon/dist/domain/watchdog-due.js.map +1 -0
  350. package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -1
  351. package/daemon/dist/domain/watchdog-scheduler.js +3 -7
  352. package/daemon/dist/domain/watchdog-scheduler.js.map +1 -1
  353. package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
  354. package/daemon/dist/domain/workflow-projector.js +15 -5
  355. package/daemon/dist/domain/workflow-projector.js.map +1 -1
  356. package/daemon/dist/domain/workflow-runtime.js +1 -1
  357. package/daemon/dist/domain/workflow-runtime.js.map +1 -1
  358. package/daemon/dist/domain/workflow-step-trail-log.d.ts +6 -0
  359. package/daemon/dist/domain/workflow-step-trail-log.d.ts.map +1 -1
  360. package/daemon/dist/domain/workflow-step-trail-log.js +11 -0
  361. package/daemon/dist/domain/workflow-step-trail-log.js.map +1 -1
  362. package/daemon/dist/domain/workspace/project-catalog.js +1 -1
  363. package/daemon/dist/domain/workspace/project-catalog.js.map +1 -1
  364. package/daemon/dist/gateway-slack-surface.d.ts +1 -0
  365. package/daemon/dist/gateway-slack-surface.d.ts.map +1 -1
  366. package/daemon/dist/gateway-slack-surface.js +2 -1
  367. package/daemon/dist/gateway-slack-surface.js.map +1 -1
  368. package/daemon/dist/index.d.ts +1 -0
  369. package/daemon/dist/index.d.ts.map +1 -1
  370. package/daemon/dist/index.js +7 -7
  371. package/daemon/dist/index.js.map +1 -1
  372. package/daemon/dist/routes/agent-images.js +5 -5
  373. package/daemon/dist/routes/agent-images.js.map +1 -1
  374. package/daemon/dist/routes/bootstrap-failure-response.d.ts +13 -0
  375. package/daemon/dist/routes/bootstrap-failure-response.d.ts.map +1 -0
  376. package/daemon/dist/routes/bootstrap-failure-response.js +52 -0
  377. package/daemon/dist/routes/bootstrap-failure-response.js.map +1 -0
  378. package/daemon/dist/routes/bundles.d.ts.map +1 -1
  379. package/daemon/dist/routes/bundles.js +23 -36
  380. package/daemon/dist/routes/bundles.js.map +1 -1
  381. package/daemon/dist/routes/chat.d.ts.map +1 -1
  382. package/daemon/dist/routes/chat.js +16 -1
  383. package/daemon/dist/routes/chat.js.map +1 -1
  384. package/daemon/dist/routes/restore-check.d.ts.map +1 -1
  385. package/daemon/dist/routes/restore-check.js +2 -0
  386. package/daemon/dist/routes/restore-check.js.map +1 -1
  387. package/daemon/dist/routes/rigs.js +2 -2
  388. package/daemon/dist/routes/rigs.js.map +1 -1
  389. package/daemon/dist/routes/seat.js +13 -13
  390. package/daemon/dist/routes/seat.js.map +1 -1
  391. package/daemon/dist/routes/sessions.js +10 -10
  392. package/daemon/dist/routes/sessions.js.map +1 -1
  393. package/daemon/dist/routes/skills.d.ts.map +1 -1
  394. package/daemon/dist/routes/skills.js +15 -7
  395. package/daemon/dist/routes/skills.js.map +1 -1
  396. package/daemon/dist/routes/terminal-ws.js +15 -2
  397. package/daemon/dist/routes/terminal-ws.js.map +1 -1
  398. package/daemon/dist/routes/terminal.d.ts.map +1 -1
  399. package/daemon/dist/routes/terminal.js +6 -4
  400. package/daemon/dist/routes/terminal.js.map +1 -1
  401. package/daemon/dist/routes/up.d.ts.map +1 -1
  402. package/daemon/dist/routes/up.js +5 -56
  403. package/daemon/dist/routes/up.js.map +1 -1
  404. package/daemon/dist/startup.d.ts.map +1 -1
  405. package/daemon/dist/startup.js +32 -7
  406. package/daemon/dist/startup.js.map +1 -1
  407. package/daemon/dist/terminal/TerminalSessionBroker.d.ts.map +1 -1
  408. package/daemon/dist/terminal/TerminalSessionBroker.js +9 -1
  409. package/daemon/dist/terminal/TerminalSessionBroker.js.map +1 -1
  410. package/daemon/docs/reference/agent-spec.md +10 -10
  411. package/daemon/docs/reference/agent-startup-guide.md +7 -2
  412. package/daemon/docs/reference/bundle-formats.md +5 -3
  413. package/daemon/docs/reference/chain-file-convention.md +2 -2
  414. package/daemon/docs/reference/developing.md +1 -1
  415. package/daemon/docs/reference/edge-types.md +1 -1
  416. package/daemon/docs/reference/getting-started.md +356 -212
  417. package/daemon/docs/reference/help.md +48 -19
  418. package/daemon/docs/reference/non-interruptive-mode.md +7 -4
  419. package/daemon/docs/reference/project-workspace.md +2 -2
  420. package/daemon/docs/reference/publishing-a-rig-bundle.md +11 -8
  421. package/daemon/docs/reference/refocus-channel.md +14 -2
  422. package/daemon/docs/reference/rig-bundle.md +39 -19
  423. package/daemon/docs/reference/rig-spec.md +36 -11
  424. package/daemon/docs/reference/rosters.md +2 -1
  425. package/daemon/docs/reference/schemas/registry-entry.v1.schema.json +1 -1
  426. package/daemon/docs/reference/sdlc-conventions.md +4 -2
  427. package/daemon/docs/reference/slack-app-setup.md +65 -9
  428. package/daemon/docs/reference/whats-new.md +134 -0
  429. package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +1 -1
  430. package/daemon/specs/agents/shared/skills/core/openrig-software-factory/SKILL.md +19 -12
  431. package/daemon/specs/agents/shared/skills/core/openrig-software-factory/references/worked-example.md +2 -2
  432. package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +2 -0
  433. package/daemon/specs/rigs/launch/factory/guidance/lead-first-move.md +60 -0
  434. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +105 -19
  435. package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +5 -2
  436. package/daemon/specs/rigs/launch/starter/guidance/lead-first-move.md +44 -0
  437. package/dist/build-info.js +3 -3
  438. package/dist/cli-error.d.ts.map +1 -1
  439. package/dist/cli-error.js +11 -3
  440. package/dist/cli-error.js.map +1 -1
  441. package/dist/client.d.ts +2 -0
  442. package/dist/client.d.ts.map +1 -1
  443. package/dist/client.js +2 -0
  444. package/dist/client.js.map +1 -1
  445. package/dist/commands/agent-image.js +2 -2
  446. package/dist/commands/agent-image.js.map +1 -1
  447. package/dist/commands/bundle.d.ts.map +1 -1
  448. package/dist/commands/bundle.js +5 -4
  449. package/dist/commands/bundle.js.map +1 -1
  450. package/dist/commands/chatroom.d.ts.map +1 -1
  451. package/dist/commands/chatroom.js +21 -1
  452. package/dist/commands/chatroom.js.map +1 -1
  453. package/dist/commands/context.d.ts.map +1 -1
  454. package/dist/commands/context.js +4 -2
  455. package/dist/commands/context.js.map +1 -1
  456. package/dist/commands/doctor.d.ts +3 -1
  457. package/dist/commands/doctor.d.ts.map +1 -1
  458. package/dist/commands/doctor.js +14 -7
  459. package/dist/commands/doctor.js.map +1 -1
  460. package/dist/commands/down.d.ts.map +1 -1
  461. package/dist/commands/down.js +42 -0
  462. package/dist/commands/down.js.map +1 -1
  463. package/dist/commands/gateway.d.ts.map +1 -1
  464. package/dist/commands/gateway.js +4 -3
  465. package/dist/commands/gateway.js.map +1 -1
  466. package/dist/commands/package.d.ts.map +1 -1
  467. package/dist/commands/package.js +6 -3
  468. package/dist/commands/package.js.map +1 -1
  469. package/dist/commands/policy.d.ts.map +1 -1
  470. package/dist/commands/policy.js +6 -5
  471. package/dist/commands/policy.js.map +1 -1
  472. package/dist/commands/queue.d.ts.map +1 -1
  473. package/dist/commands/queue.js +6 -3
  474. package/dist/commands/queue.js.map +1 -1
  475. package/dist/commands/restore-packet.d.ts.map +1 -1
  476. package/dist/commands/restore-packet.js +6 -4
  477. package/dist/commands/restore-packet.js.map +1 -1
  478. package/dist/commands/scope.js +5 -5
  479. package/dist/commands/scope.js.map +1 -1
  480. package/dist/commands/setup.d.ts +6 -15
  481. package/dist/commands/setup.d.ts.map +1 -1
  482. package/dist/commands/setup.js +121 -332
  483. package/dist/commands/setup.js.map +1 -1
  484. package/dist/commands/skill.d.ts.map +1 -1
  485. package/dist/commands/skill.js +6 -1
  486. package/dist/commands/skill.js.map +1 -1
  487. package/dist/commands/slack.d.ts +5 -1
  488. package/dist/commands/slack.d.ts.map +1 -1
  489. package/dist/commands/slack.js +143 -6
  490. package/dist/commands/slack.js.map +1 -1
  491. package/dist/commands/stream.js +1 -1
  492. package/dist/commands/stream.js.map +1 -1
  493. package/dist/commands/terminal.d.ts +33 -0
  494. package/dist/commands/terminal.d.ts.map +1 -1
  495. package/dist/commands/terminal.js +30 -12
  496. package/dist/commands/terminal.js.map +1 -1
  497. package/dist/commands/tui.js +4 -4
  498. package/dist/commands/tui.js.map +1 -1
  499. package/dist/commands/workflow-follow.d.ts +1 -1
  500. package/dist/commands/workflow-follow.d.ts.map +1 -1
  501. package/dist/commands/workflow-follow.js +4 -3
  502. package/dist/commands/workflow-follow.js.map +1 -1
  503. package/dist/commands/workflow.d.ts.map +1 -1
  504. package/dist/commands/workflow.js +30 -18
  505. package/dist/commands/workflow.js.map +1 -1
  506. package/dist/config-store.js +1 -1
  507. package/dist/config-store.js.map +1 -1
  508. package/dist/front-door.d.ts.map +1 -1
  509. package/dist/front-door.js +4 -2
  510. package/dist/front-door.js.map +1 -1
  511. package/dist/herdr-launch-config.d.ts +3 -0
  512. package/dist/herdr-launch-config.d.ts.map +1 -0
  513. package/dist/herdr-launch-config.js +37 -0
  514. package/dist/herdr-launch-config.js.map +1 -0
  515. package/dist/index.d.ts.map +1 -1
  516. package/dist/index.js +2 -1
  517. package/dist/index.js.map +1 -1
  518. package/dist/lib/bundle-source.d.ts +2 -0
  519. package/dist/lib/bundle-source.d.ts.map +1 -1
  520. package/dist/lib/bundle-source.js +12 -1
  521. package/dist/lib/bundle-source.js.map +1 -1
  522. package/dist/lib/context-git.d.ts +2 -0
  523. package/dist/lib/context-git.d.ts.map +1 -1
  524. package/dist/lib/context-git.js +55 -5
  525. package/dist/lib/context-git.js.map +1 -1
  526. package/dist/lib/scope/scope-fs.d.ts +3 -2
  527. package/dist/lib/scope/scope-fs.d.ts.map +1 -1
  528. package/dist/lib/scope/scope-fs.js +97 -9
  529. package/dist/lib/scope/scope-fs.js.map +1 -1
  530. package/dist/lib/scope/templates.d.ts.map +1 -1
  531. package/dist/lib/scope/templates.js +28 -24
  532. package/dist/lib/scope/templates.js.map +1 -1
  533. package/dist/provider-auth.d.ts +32 -0
  534. package/dist/provider-auth.d.ts.map +1 -0
  535. package/dist/provider-auth.js +128 -0
  536. package/dist/provider-auth.js.map +1 -0
  537. package/dist/terminal-window.d.ts +19 -0
  538. package/dist/terminal-window.d.ts.map +1 -0
  539. package/dist/terminal-window.js +513 -0
  540. package/dist/terminal-window.js.map +1 -0
  541. package/package.json +1 -1
  542. package/tui/dist/commands/registry.js +1 -1
  543. package/tui/dist/commands/registry.js.map +1 -1
  544. package/tui/dist/config/config-model.d.ts.map +1 -1
  545. package/tui/dist/config/config-model.js +1 -0
  546. package/tui/dist/config/config-model.js.map +1 -1
  547. package/tui/dist/connections/connections-model.d.ts +5 -0
  548. package/tui/dist/connections/connections-model.d.ts.map +1 -1
  549. package/tui/dist/connections/connections-model.js +1 -1
  550. package/tui/dist/connections/connections-model.js.map +1 -1
  551. package/tui/dist/daemon-client.d.ts +5 -0
  552. package/tui/dist/daemon-client.d.ts.map +1 -1
  553. package/tui/dist/daemon-client.js.map +1 -1
  554. package/tui/dist/execution/workflow-model.d.ts.map +1 -1
  555. package/tui/dist/execution/workflow-model.js +3 -1
  556. package/tui/dist/execution/workflow-model.js.map +1 -1
  557. package/tui/dist/hydrate.d.ts +1 -1
  558. package/tui/dist/hydrate.d.ts.map +1 -1
  559. package/tui/dist/hydrate.js +3 -1
  560. package/tui/dist/hydrate.js.map +1 -1
  561. package/tui/dist/main.js +23 -11
  562. package/tui/dist/main.js.map +1 -1
  563. package/tui/dist/page-read.js +1 -1
  564. package/tui/dist/page-read.js.map +1 -1
  565. package/tui/dist/pending-address.d.ts +7 -0
  566. package/tui/dist/pending-address.d.ts.map +1 -0
  567. package/tui/dist/pending-address.js +11 -0
  568. package/tui/dist/pending-address.js.map +1 -0
  569. package/tui/dist/render.d.ts.map +1 -1
  570. package/tui/dist/render.js +9 -5
  571. package/tui/dist/render.js.map +1 -1
  572. package/tui/dist/socket-server.d.ts +3 -1
  573. package/tui/dist/socket-server.d.ts.map +1 -1
  574. package/tui/dist/socket-server.js +6 -0
  575. package/tui/dist/socket-server.js.map +1 -1
  576. package/tui/dist/state.d.ts.map +1 -1
  577. package/tui/dist/state.js +40 -13
  578. package/tui/dist/state.js.map +1 -1
  579. package/tui/dist/stylize.js +1 -1
  580. package/tui/dist/stylize.js.map +1 -1
  581. package/tui/dist/terminals/open-window.d.ts +5 -0
  582. package/tui/dist/terminals/open-window.d.ts.map +1 -0
  583. package/tui/dist/terminals/open-window.js +55 -0
  584. package/tui/dist/terminals/open-window.js.map +1 -0
  585. package/tui/dist/terminals/terminal-model.d.ts.map +1 -1
  586. package/tui/dist/terminals/terminal-model.js +16 -17
  587. package/tui/dist/terminals/terminal-model.js.map +1 -1
  588. package/tui/dist/types.d.ts +15 -0
  589. package/tui/dist/types.d.ts.map +1 -1
  590. package/ui/dist/assets/{index-HHSvwF97.js → index-D5n8EwkG.js} +1 -1
  591. package/ui/dist/index.html +1 -1
@@ -63,9 +63,10 @@ groups:
63
63
  a member of, and reading channel details.
64
64
  `rig slack verify` checks these.
65
65
  - **Feature scopes**: `files:read` (download attachments people send), `files:write` (upload
66
- attachments to Slack), and `app_mentions:read` (receive @-mentions of the app). `rig slack verify`
67
- warns when one of these is missing (if Slack returns the granted scopes) but does not require
68
- them, so a READY from verify does not prove attachments or mentions will work.
66
+ attachments to Slack), `app_mentions:read` (receive @-mentions of the app), and `reactions:read`
67
+ (receive emoji reactions). `rig slack verify` warns when one of these is missing (if Slack returns
68
+ the granted scopes) but does not require them, so a READY from verify does not prove attachments,
69
+ mentions or reactions will work.
69
70
 
70
71
  If a feature scope was not granted, the effect differs by feature:
71
72
 
@@ -75,12 +76,22 @@ If a feature scope was not granted, the effect differs by feature:
75
76
  the failure appears only in the daemon log (`rig daemon logs`).
76
77
  - **Mentions** (`app_mentions:read`): Slack does not deliver `app_mention` events to the app.
77
78
  Only `rig slack verify` warns that the scope is missing; nothing reports the missing events.
79
+ - **Reactions** (`reactions:read`): Slack does not deliver `reaction_added` events, so a reaction
80
+ on an ask doesn't reach the asking agent. A reply in the ask's thread still does.
78
81
 
79
- So after installing, compare the granted scopes Slack shows for the app with all six scopes that
82
+ So after installing, compare the granted scopes Slack shows for the app with all seven scopes that
80
83
  `rig slack manifest --json` lists.
81
84
 
82
- The app subscribes to messages in public channels it is a member of (`message.channels`) and to
83
- mentions of the app (`app_mention`). It does not request direct-message or private-channel access.
85
+ The app subscribes to messages in public channels it is a member of (`message.channels`), to
86
+ mentions of the app (`app_mention`), and to emoji reactions (`reaction_added`). It does not request
87
+ direct-message or private-channel access.
88
+
89
+ A reaction added to an ask reaches the agent that asked, as a note naming who reacted and with
90
+ which emoji; the agent decides what it means. Every message OpenRig posted for the ask counts:
91
+ its first message, a long ask's numbered parts, and an ask posted as a reply in a thread. A
92
+ reaction on any other message, including a person's reply in the thread, is ignored. An app created from an older manifest has neither the `reactions:read` scope nor the
93
+ `reaction_added` event: add both under **OAuth & Permissions** and **Event Subscriptions**, then
94
+ reinstall the app to the workspace.
84
95
 
85
96
  The manifest also turns on **Interactivity**, so the human can answer a decision's structured
86
97
  questions by clicking a button (`rig queue create --human-questions-file`). In Socket Mode the
@@ -101,11 +112,55 @@ part of OpenRig.
101
112
  - `rig slack status` shows what is still missing, without contacting Slack.
102
113
  - `rig slack verify` checks the granted baseline scopes and channel membership with Slack.
103
114
 
115
+ ## One channel per rig or seat (optional)
116
+
117
+ By default every human-bound item posts to the one channel from `rig slack setup --channel`.
118
+ To follow each rig separately, post a rig's items, or a single seat's, to its own channel:
119
+
120
+ ```bash
121
+ rig slack channel-map set my-rig C0EXAMPLE1
122
+ rig slack channel-map set pr@my-rig C0EXAMPLE2
123
+ rig slack channel-map list
124
+ rig slack channel-map remove pr@my-rig
125
+ ```
126
+
127
+ - **Which channel an item posts to.** The item's seat is matched exactly first (`pr@my-rig`),
128
+ then its rig (`my-rig`). Anything unmapped posts to the default channel, so a config
129
+ without a map behaves exactly as before. Aggregate delivery digests have no single seat and
130
+ always post to the default channel.
131
+ - **Threads.** Updates, `--reply-to` and later notifications for an item stay in its thread.
132
+ With a map configured, if a seat's channel has changed since the thread was opened, the
133
+ next post opens a new thread in the seat's current channel, and `--reply-to` records the
134
+ fallback as `root-other-channel`. With no map, threads behave exactly as before: an item's
135
+ next notification reuses its open thread in whatever channel that thread was posted in.
136
+ - **Changing the map.** A change applies to new posts. A post already in flight (one being
137
+ retried after a failure or an unconfirmed send) finishes in the channel and thread it started
138
+ in, and its retry checks that channel first so it is not posted twice. This includes adding
139
+ the first map: a post first tried before any map existed finishes in the default channel.
140
+ Without a map, OpenRig records nothing about a post's channel, so if the default channel
141
+ changes while a post is being retried, the retry goes to the new default channel (as it always
142
+ has); that also applies to a post first tried before the map was added.
143
+ - **Replies and new messages.** A reply in an item's thread reaches that item's seat, in any
144
+ channel. A message the human starts (or a reply in a thread OpenRig does not know) goes to
145
+ the connector's inbound destination, whichever channel it is in. Missed-message recovery
146
+ (below) covers the default channel only.
147
+
148
+ Invite the app to every mapped channel (`/invite @OpenRig`). `rig slack verify` checks
149
+ membership in the default channel and every mapped channel, and reports NOT ready until the
150
+ app is in all of them. A saved change reaches a running connector when it next rewires:
151
+ `rig slack disable` then `rig slack enable`, or a daemon restart. The TUI's Connections page
152
+ says whether the running configuration matches the file.
153
+
154
+ The map is stored as `channelMap` in `slack-connector.json`, as a list of `{ "match", "channel" }`
155
+ entries. Saving refuses any other field. A field written by a newer OpenRig is ignored when the
156
+ connector reads the file, and `rig slack status` names it. Private channels and direct messages
157
+ are not supported targets.
158
+
104
159
  ## Reconnect recovery and status
105
160
 
106
161
  The daemon scans available top-level messages in the configured channel after a
107
162
  Socket Mode connection and on its existing five-minute retry cadence. Recovered
108
- queue rows say **Recovered after a gap** and show the original Slack posting time.
163
+ tasks say **Recovered after a gap** and show the original Slack posting time.
109
164
  They use the same sender admission, routing, attachment handling, fixed identity
110
165
  and dead-letter path as live messages. A durable dead letter is custody of a
111
166
  failed delivery, not successful delivery.
@@ -121,8 +176,9 @@ not covered by that margin. A corrupt or unreadable checkpoint leaves recovery u
121
176
  and preserves the existing file; live inbound continues.
122
177
 
123
178
  Each pass admits at most four pages, 100 entries and 15 seconds of work, with a
124
- five-second history-request ceiling. An already admitted attachment/landing keeps
125
- its owner until it settles. Rate limits retain Slack's Retry-After across restart.
179
+ five-second history-request ceiling. Work already started on a message, such as
180
+ an attachment transfer, is not cancelled by these limits or by a stop, and a new
181
+ pass waits for it to finish. Rate limits retain Slack's Retry-After across restart.
126
182
  Transport and server failures use a five-second backoff unless Slack supplies Retry-After.
127
183
  When Slack reports a plan history limit, recovery still lands the available page
128
184
  and advances normally, retaining an older-history limitation in status across restarts.
@@ -0,0 +1,134 @@
1
+ # What changed in OpenRig 0.6.7
2
+
3
+ This note is for an agent on an install that was just upgraded to 0.6.7. It lists only what behaves differently from
4
+ 0.6.6 and what to do about it. For everything OpenRig can do, read the capability map:
5
+ `rig context get onboarding-width/public-what-you-can-do.md`. Each release replaces this file, so
6
+ `rig context get reference/whats-new.md` describes the installed version once the upgraded daemon is running. Without
7
+ a running daemon, read `$OPENRIG_HOME/reference/whats-new.md`. The daemon refreshes that copy when it starts, so right
8
+ after an upgrade it can still hold the previous version's note.
9
+
10
+ ## The OpenRig view is now the handoff
11
+
12
+ - **Open the view as the step after install or start; don't wait to be asked.** Say you're opening it, run
13
+ `rig terminal open saved:kernel --window`, then tell the person where it opened. Don't ask "Open the OpenRig view
14
+ now?", don't wait for a phrase like "show me my agents", and don't finish by printing a command for them to copy. The
15
+ same command brings their agents back later.
16
+ - **The layout follows the person's terminal width.** On a narrow terminal the operator gets the first tab. On a wide
17
+ one the dashboard and operator sit side by side and the advisor has its own tab. Inside herdr it opens a focused
18
+ `openrig kernel` space. A `kernel` view the person saved themselves still wins.
19
+ - **It opens where the caller is.** Terminal gets a window and Ghostty a tab. From Claude Desktop, iTerm or VS Code on a
20
+ Mac it opens a new Ghostty or Terminal window, and macOS may ask to allow it: mention that clicking Allow is fine only
21
+ in that case. Over SSH, in CI or with no display, it returns a definite no-window result with the reason. Relay the
22
+ `run:` command it prints exactly, or give `env -u TMUX tmux attach-session -t '=<canonicalSessionName>'` for the
23
+ operator.
24
+ - **`rig terminal open <view>` opens a window by default.** Pass `--provider herdr` or `--provider cmux` only to add
25
+ tiles to a workspace that's already visible. With `--json`, `reusedWorkspace` and `opened: []` mean an existing view
26
+ was reused, which is success.
27
+ - **The TUI's action is now "Open terminals ▸"** (it was `term ▸`). It opens a desktop window through the same
28
+ launcher, so the TUI must run on the daemon's desktop.
29
+ - **The `rigs` skill is installed for the person's own agent.** The daemon writes it to `~/.claude/skills/rigs` and
30
+ `~/.agents/skills/rigs` and refreshes it on every upgrade. It now triggers on any mention of OpenRig, rigs or a team
31
+ of coding agents. A copy added earlier with skills.sh is left alone and never refreshed.
32
+
33
+ ## Installing and setting up
34
+
35
+ - **Show the install preview first.** The published install command has a `--dry-run` preview
36
+ (`rig context get reference/getting-started.md` has both forms). Run the install when the person agrees. If the only
37
+ failures left are provider sign-ins, have them sign in and continue at "Start the kernel".
38
+ - **If your own harness refuses a tool call while installing,** say so and show the refusal: Claude Code's auto mode can
39
+ deny calls as well as approve them. Let the person review it in their harness or run that step themselves. A refused
40
+ call doesn't prove the OpenRig command failed.
41
+ - **`rig setup` installs herdr by default** on macOS and Linux; `--no-herdr` declines it. On a Mac, ask once about
42
+ Ghostty and on yes rerun `rig setup --ghostty`, keeping `--no-herdr` if it was chosen. Setup no longer installs cmux,
43
+ and an existing cmux still works. In `--json` output the `cmux_install` step is gone and `herdr_install` and
44
+ `ghostty_install` appear.
45
+ - **`rig doctor` checks Claude and Codex installs, and a login or configured provider credential,** the way setup does.
46
+ It exits 1 when either harness is missing or has neither, including one the person doesn't use, so ignore a failure
47
+ on an unused harness. A pass means a login or configured provider credential is available locally, not that a
48
+ provider accepts the credential or that an agent can work; no provider request or agent work is tested.
49
+ - **When setting up permissions,** recommend keeping the team default and offer remembered allowances only if the
50
+ person wants fewer prompts. People slowed by prompts can be pointed to the workshop listing.
51
+ - **Windows users go through WSL2.** For Pi seats there, offer either credential route; a global Pi login still isn't
52
+ shared with managed seats.
53
+
54
+ ## Fewer prompts
55
+
56
+ - **In Claude team seats, help on lifecycle commands runs without a prompt.** `rig down --help` and `-h` forms run;
57
+ the lifecycle actions themselves still ask. Pipelines, command substitutions, redirects and heredocs aren't allowed
58
+ automatically.
59
+ - **The kernel operator's Claude session runs routine inspection without prompts:** Python, command lookup, `cd`, text
60
+ helpers and WebFetch. Compound commands and redirects still go to Claude's own permission check.
61
+ - **Managed Codex seats no longer stop at the update menu on start.** Updating Codex is the operator's job: if a Codex
62
+ seat says its model needs a newer Codex, offer to update Codex and restart that seat, without stopping the team. If a
63
+ Codex seat shows a model-switch menu near a rate limit, ask the person; don't change the team's model.
64
+
65
+ ## Messages, wakes and Slack
66
+
67
+ - **A send or wake no longer answers a question that's waiting for a person.** It's refused with
68
+ `target_needs_input`, and the reason ends `; latest hook, pane unrecognized` when the screen can't be read, even if
69
+ the hook is minutes old. Read the seat with `rig capture` and get the question answered by whoever should answer it.
70
+ Don't retry the send.
71
+ - **Slack can post to a channel per rig or seat:** `rig slack channel-map list`, `set <match> <channel>` and
72
+ `remove <match>`. After a change, invite the app to each channel, run `rig slack verify`, then `rig slack disable`
73
+ and `rig slack enable` (or restart the daemon). Thread replies still reach the seat in any channel.
74
+ - **A reaction on any part of a Slack ask reaches the seat that asked,** as a task tagged `human-reaction`. Treat it as
75
+ a signal to interpret, not an answer; the ask stays open. An existing app needs the `reactions:read` scope, the
76
+ `reaction_added` event and a reinstall, and `rig slack verify` warns when the scope is missing.
77
+ - **A long Slack ask is posted in parts.** If it still can't be posted, you get a task `<ask id>-undeliverable`, tagged
78
+ `slack-undeliverable`: shorten the ask or link a file for the long part, and send it as a new ask.
79
+ - **Replies sent with "Also send to #channel" now arrive** at the seat that asked, like any other thread reply.
80
+
81
+ ## Running teams
82
+
83
+ - **`rig down` prints what each agent seemed to be doing before it stops them,** on one stderr line, or "unknown". It's
84
+ a best-effort snapshot, not a record of what was interrupted. `rig down --host` now exits 2 when the remote teardown
85
+ reports errors.
86
+ - **Before a handover or compaction, write the seat's recap** with
87
+ `rig context recap-write --rig <rig> --seat <seat> --file <draft.md>`, not a file tool, so earlier recaps are kept.
88
+ `rig seat handover <seat>` now works on the same seat again and again; a seat left half-handed-over recovers by
89
+ running it again.
90
+ - **After a managed compaction, read the `refocusing` skill and consume the current topology and work traces
91
+ delivered with the restore.** Don't rerun them just to duplicate the delivery; name a missing trace. For a new trace
92
+ outside that context, use the skill's one-command form. The daemon now installs the skill globally.
93
+ - **The built-in starter and factory leads publish their team's roster** at first start, so `rig roster list` and
94
+ `rig roster find <topic>` know those teams.
95
+ - **Claiming a parked queue item clears its `blocked_on`.** To park it again on the same gate, run
96
+ `rig queue update <id> --state blocked` without `--blocked-on`: it reuses the previous gate. Add the usual wake when
97
+ one is required.
98
+ - **A periodic reminder first fires one interval after you register it,** not immediately.
99
+ - **Workflows:** `rig workflow run` and `rig workflow watch` exit 3 for an aborted instance. When a step that was sent
100
+ back completes again, the steps that depend on it run again too, including ones that had passed.
101
+ - **Sharing teams:** `rig bundle create` and `rig up <link>` name the bundle after `rig.yaml`'s `name`, and
102
+ `rig bundle check` names the file in each finding. Submissions go to `mvschwarz/openrig-registry`. The bundle safety
103
+ check always runs, even with `--skip-version-check --force`.
104
+ - **`rig context add <url> --git` retrieves shallowly by default:** the initial retrieval fetches only the current
105
+ commit, and a server that refuses shallow retrieval falls back to a full clone with a warning. Use
106
+ `rig context source update` for later revisions.
107
+ - **Values that used to fail quietly are refused:** a bad `rig chatroom history --since` (fix the value; the room isn't
108
+ empty) and a `--wake-after` such as `7d` (use hours, for example `168h`).
109
+ - **Pi seats print a `[pi-runner] seat …:` line at start** saying whether a credential was found and, if not, how to
110
+ fix it. A MiniMax model gets `MINIMAX_API_KEY` when that name is in `recovery.provider_auth_env_allowlist`.
111
+ - **`agents.advisor_session` defaults to the kernel's advisor seat.**
112
+
113
+ ## What to stop doing
114
+
115
+ - **Stop asking whether to open the OpenRig view, or waiting for a phrase.** Open it after install or start.
116
+ - **Stop using `--provider herdr` for the first view,** and stop pre-warning about macOS prompts from Terminal or
117
+ Ghostty.
118
+ - **Stop suggesting `--skip-version-check --force` to get past a bundle pre-check failure.** The check always runs.
119
+ - **Stop retrying a send refused with `target_needs_input`.** Get the question answered instead.
120
+ - **Stop telling people to untick "Also send to #channel" when they answer in Slack.** Those replies now arrive.
121
+
122
+ ## Known gaps in 0.6.7
123
+
124
+ - **Not yet checked on a real machine:** opening the view from Claude Desktop, and the plain-tmux layout without herdr.
125
+ The full first install from nothing and a Linux run come after this release.
126
+ - **Only one selected lifecycle-help command has been checked in a live Claude session;** source and parser coverage
127
+ is broader. If a help command still asks, report it.
128
+ - **Codex team seats aren't asked before lifecycle commands yet.**
129
+ - **The send gate trusts the most recently recorded hook.** If hooks are recorded out of order, it can hold a send for
130
+ a question that's already answered, or miss one that's waiting. `rig capture` shows the real screen.
131
+ - **A Codex seat whose permission request was approved automatically can still read "needs input".**
132
+ - **A launched team still writes its skills into its working folder.**
133
+ - **After a restart, `rig status` shows `Kernel: skipped` whatever the kernel seats' state.** Read them with
134
+ `rig ps --nodes --rig kernel --full`.
@@ -57,7 +57,7 @@ These are auto-delivered to every rig; their name+description are already in you
57
57
  - **loading-addressable-markdown** — a task names Markdown as `path#h2-slug` or `path#h2-slug/h3-slug` outside the context-pack library.
58
58
  - **session-compaction-and-restore** — preparing for, or recovering from, compaction (any runtime). The write- and read-side protocol.
59
59
  - **queue-handoff** — you're passing durable work to another seat or ending your turn. The queue is the work ledger, not chat.
60
- - **refocusing** — a long-running seat may have lost the product outcome, crossed a major boundary, or compacted and needs a fresh path-based trace.
60
+ - **refocusing** — invoke as `refocusing` when a long-running seat may have lost the product outcome, crossed a major boundary, or compacted and needs a fresh path-based trace.
61
61
  - **seat-continuity-and-handover** — handing your seat's work across a restart or to another owner.
62
62
  - **orienting-to-an-inherited-seat** — you just inherited an existing seat through a planned handover and need to verify its identity, state, and testimony.
63
63
  - **retiring-and-inheriting-a-seat** — you're planning a seat transition and need to retire the current occupant into a fresh successor without losing continuity.
@@ -51,7 +51,7 @@ or `codex login` once when that selected login is missing. No credential copying
51
51
  unused provider prerequisite or silent model/provider fallback.
52
52
 
53
53
  Read the compatible getting-started guide's **Choose your providers** and
54
- **Kernel startup stays automatic** sections before launch. The choice selects
54
+ **Start the kernel and check its state** sections before launch. The choice selects
55
55
  the two project agents. Kernel auto-boot independently uses available
56
56
  authenticated accounts, so it may use both even when the project uses one.
57
57
  Do not add an unused-provider login gate or manual kernel setup to this path.
@@ -63,7 +63,8 @@ Show the chosen team, resolved runtimes/models and exact
63
63
  retain `gpt-6-astra`; Claude seats use the configured native default without an
64
64
  OpenRig model override. Confirm that model with the user and its availability;
65
65
  verify the native session's actual model before consequential work. Use the
66
- chosen rig name in owner/checker addresses throughout the same task and return.
66
+ chosen rig name in owner/checker addresses (in the starter, `dev-build@<rig>` and
67
+ `dev-review@<rig>`) throughout the same task and return.
67
68
 
68
69
  ## Establish the working agreement
69
70
 
@@ -79,16 +80,21 @@ model turns, but delivered wakes and resumed work **can spend tokens**. Prefer
79
80
  an event-driven wait to frequent empty reminders. Wakes cannot answer a user
80
81
  question, clear a permission prompt or guarantee progress.
81
82
 
82
- **Ask once before launching or assigning work:** “Allow your agents to run
83
- OpenRig commands without repeated permission prompts?” **Yes — recommended** /
84
- **No — keep prompts**. Reuse an existing explicit choice for this scope. Explain
85
- that this covers all `rig` verbs, including starting/stopping agents and changing
86
- configuration, at personal project scope unless the user explicitly chooses
87
- user-wide sessions. It is not global YOLO or permission to invent work.
83
+ **Ask once before launching or assigning work.** For a team with no permission
84
+ policy, seat choice or named Codex profile, recommend keeping the team default:
85
+ Claude team seats run ordinary `rig` commands, project reads and common tests
86
+ without prompts, and lifecycle commands such as `rig up` and `rig down` still
87
+ ask. Only if they want more, offer: “Remember these selected OpenRig commands in
88
+ your native settings for this project?” **Yes** / **No — keep the team default**.
89
+ Reuse an existing explicit choice for this scope.
90
+ Explain that a remembered allowance can cover all `rig` verbs, but Claude team
91
+ seats still ask before lifecycle commands, at personal project scope unless the
92
+ user explicitly chooses user-wide sessions. It is not global YOLO or permission
93
+ to invent work.
88
94
  On an actual Yes, follow [Applying a permission policy](#find-the-compatible-permission-guide)
89
95
  to add existing native rules, preserve stricter/unrelated settings, and verify
90
- the target conversation. No or no answer leaves settings alone and continues
91
- with existing prompts. Remember the explicit choice and exact additions in the
96
+ the target conversation. No or no answer leaves settings alone and keeps the
97
+ team default. Remember the explicit choice and exact additions in the
92
98
  existing onboarding context; “Undo the OpenRig command allowances added by this
93
99
  setup” removes only those additions. Broader access remains a separate opt-in.
94
100
 
@@ -102,8 +108,9 @@ or explicitly reports none. Preserve work and custody before a supported stop.
102
108
 
103
109
  Choose the team size separately from the coordination method above:
104
110
 
105
- 1. **Use the two-agent starter.** Keep the existing owner and independent checker
106
- while that pair meets the workload. The owner can implement and coordinate.
111
+ 1. **Use the two-agent starter.** Keep its builder (the owner) and independent
112
+ reviewer (the checker) while that pair meets the workload. The builder can
113
+ implement and coordinate.
107
114
  2. **Add one or two seats to the running rig.** This is the usual next step.
108
115
  Follow [Grow the running team](references/worked-example.md#grow-the-running-team)
109
116
  for `rig grow` commands, readiness/context/work
@@ -86,8 +86,8 @@ permissions, supplies a missing product decision or authorizes more work.
86
86
 
87
87
  ## Permissions at the point of work
88
88
 
89
- Before the first task, ask the agent to configure your choice: keep prompts,
90
- remember selected commands, or deliberately select broader access. Use
89
+ Before the first task, ask the agent to configure your choice: keep the team
90
+ default, remember selected commands, or deliberately select broader access. Use
91
91
  `rig context get skills/applying-a-permission-policy/SKILL.md`, or the
92
92
  [compatible source/package paths](../SKILL.md#find-the-compatible-permission-guide).
93
93
  The agent handles setup and verifies the actual conversation; the user need not
@@ -239,6 +239,8 @@ host in front of you.
239
239
  mechanism; this skill does not rewrite launchers.
240
240
  11. Record the observed result, remaining local preservation decisions, and the
241
241
  exact rollback runtime and backup.
242
+ 12. Read what changed in the new version, `rig context get reference/whats-new.md`,
243
+ and tell your user anything in it that changes how they work.
242
244
 
243
245
  ## Stop and hand back when
244
246
 
@@ -21,3 +21,63 @@ When the goal is done, close the operator's row with the result.
21
21
 
22
22
  `rig down` and `rig seat stop` end agents' sessions and any work in progress, and `rig up <spec>` on a stopped team's
23
23
  name replaces it with a new team. Don't run them unless the person asked; check `rig ps --nodes` first.
24
+
25
+ ## Publish the team's roster
26
+
27
+ A roster tells anyone who uses `rig roster find` who to ask on this team and why. Write one the first time you start,
28
+ alongside the goal, and never replace one that exists:
29
+
30
+ 1. Take the rig's name from `rig whoami --json` (`identity.rigName`). It is `factory` unless this team was launched
31
+ under another name; `<rig>` below means that name. If it is null, the rig name is unavailable: skip the roster
32
+ 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.
36
+ 4. Run `rig ps --nodes --rig <rig> --json --fields canonicalSessionName,hostSelfId`. It gives each seat's exact address
37
+ and the host that serves it.
38
+ 5. Match `orch-lead` (you) to lead, `orch-advisor` to advisor, `dev-build` to builder, `dev-qa` to QA,
39
+ `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`):
42
+
43
+ ```json
44
+ {
45
+ "version": 1,
46
+ "id": "<rig>",
47
+ "name": "Factory",
48
+ "purpose": "Plan, build, design and check software in this repository as a full team",
49
+ "curator": { "seat": "<your address>", "host": "<your host>" },
50
+ "updated_at": "<YYYY-MM-DD>",
51
+ "members": [
52
+ { "seat": "<lead>", "host": "<host>", "capabilities": ["planning", "routing work"],
53
+ "engagement": ["consult", "delegate"], "use_when": "Deciding what to build next, or who should take a piece",
54
+ "why": "Leads this team, talks to the person and routes the work" },
55
+ { "seat": "<advisor>", "host": "<host>", "capabilities": ["product intent", "ideas"],
56
+ "engagement": ["consult"], "use_when": "Shaping an idea, or checking that work still serves the goal",
57
+ "why": "The lead's idea and intent partner" },
58
+ { "seat": "<builder>", "host": "<host>", "capabilities": ["implementation"],
59
+ "engagement": ["delegate"], "use_when": "A planned piece needs building",
60
+ "why": "Builds the changes the lead routes to it" },
61
+ { "seat": "<QA seat>", "host": "<host>", "capabilities": ["testing", "verification"],
62
+ "engagement": ["review"], "use_when": "A change needs its checks run and reported",
63
+ "why": "Runs the checks a change calls for and says what each one proved" },
64
+ { "seat": "<designer>", "host": "<host>", "capabilities": ["product design", "user experience"],
65
+ "engagement": ["consult", "review"], "use_when": "A change affects what people see or how they use it",
66
+ "why": "Designs and reviews the user-facing side" },
67
+ { "seat": "<reviewer 1>", "host": "<host>", "capabilities": ["code review"],
68
+ "engagement": ["review"], "use_when": "A change needs an independent review",
69
+ "why": "One of two independent reviewers" },
70
+ { "seat": "<reviewer 2>", "host": "<host>", "capabilities": ["code review"],
71
+ "engagement": ["review"], "use_when": "A change needs an independent review",
72
+ "why": "The second independent reviewer; ask both for important changes" }
73
+ ]
74
+ }
75
+ ```
76
+
77
+ 6. Run `rig roster list` to see it listed, then tell the person in one line.
78
+
79
+ Running this again, after `rig seat continue` or a restore, changes nothing. When a seat takes on a capability worth
80
+ asking it about, add it to that seat's `capabilities` and set `updated_at` to today; starting again never replaces the
81
+ file.
82
+
83
+ Need expertise your team lacks? `rig roster find <topic>` lists who to ask and why.
@@ -5,12 +5,30 @@ and the affected work before acting. You already own these operational
5
5
  diagnoses; the queue worker retains intake classification. Never report an
6
6
  unknown activity signal as idle or a persisted running record as process proof.
7
7
 
8
- The shared dashboard is the kernel's `operator.human` terminal. The human can enter with
9
- `rig tui --shared`, or through `rig terminal open saved:kernel --provider herdr`
10
- (cmux is also supported). It is an ordinary TUI in a terminal, not an agent
11
- or human-message inbox. Capture it before driving it, preserve the user's view
12
- unless the task calls for navigation, and use the registered human channel for
13
- decisions. If the TUI has exited, its shell remains; run `rig tui` there once.
8
+ For the kernel's first-boot health check, run `rig daemon status` and
9
+ `rig ps --nodes --rig kernel` as separate shell tool calls and read their output
10
+ directly. Claude Code can ask for approval for a compound command containing
11
+ pipes, redirects or subshells even when its individual commands are allowed;
12
+ these plain commands let the health check finish without that extra prompt.
13
+
14
+ When the person wants to see their agents or OpenRig in a terminal, in any words, run
15
+ `rig terminal open saved:kernel --window` on the daemon's desktop. It opens the
16
+ OpenRig TUI and operator in a new terminal tab/window, or a space in the current Herdr session:
17
+ below 120 measured columns, operator alone first;
18
+ from 120, dashboard and operator equally side by side. The advisor has a separate tab or tmux window. Inspect its result and visible content, or state what you cannot confirm. On a desktop, do
19
+ not end by showing a table or suggesting a command for the person to type. Herdr is visible
20
+ only inside a terminal the person can see; changing the shared TUI to `:terminals`
21
+ does not open one. Over headless SSH, explain that limitation, ask the person to
22
+ open a new terminal window or tab, and give one exact connection and attachment
23
+ command using the current Herdr endpoint or operator binding from the
24
+ getting-started guide. Do not report a window as visible without confirming it.
25
+ Only if that window cannot open, `rig tui --shared` is the named dashboard-only
26
+ fallback. Explain the window failure and help with the chosen fallback.
27
+ The shared dashboard is the kernel's `operator.human` terminal, an ordinary TUI,
28
+ not an agent or human-message inbox. Capture it before driving it, preserve the
29
+ user's view unless the task calls for navigation, and use the registered human
30
+ channel for decisions. If the TUI has exited, its shell remains; run `rig tui`
31
+ there once.
14
32
 
15
33
  You run OpenRig on behalf of the user. The operator pod's `operator.human`
16
34
  member holds their shared terminal view. Human decisions use the registered
@@ -21,6 +39,15 @@ human channel; a terminal attachment is not a person's address.
21
39
  - Bring rigs up and down (`rig up <spec>`, `rig down <rigId>`). `rig down` and `rig seat stop`
22
40
  end agents' sessions and any work in progress: check `rig ps --nodes --rig <name>` first, and
23
41
  stop a team or seat only when the person asked for it.
42
+ For "stop everything", list the rigs with `rig ps --json`, then run `rig down`
43
+ for each rig they want stopped while the daemon is available. Stop kernel last
44
+ if it is included, since that ends your own session too. `rig daemon stop`
45
+ stops the service but leaves agent sessions running; it comes after the rigs
46
+ when the person also wants the service stopped.
47
+ If the service should also stop and kernel is included, before running
48
+ `rig down kernel` tell the person to run `rig daemon stop` in their own shell
49
+ once kernel is down and check its result. That hands off the final service
50
+ stop before your own session ends.
24
51
  - Restart selected work after a reboot. Bare `rig` starts only the daemon;
25
52
  the TUI recommends kernel first and lets the user select individual seats.
26
53
  When the user says "bring my rigs back online":
@@ -43,6 +70,13 @@ After install, the person usually talks to you first. When they are talking to
43
70
  you in this pane, their answers here are their decisions; don't send a launch
44
71
  question through the human channel instead.
45
72
 
73
+ For a team's `/rigs` listing page, use `WebFetch` when available. It returns
74
+ page text and is already allowed by the kernel's Claude defaults, avoiding
75
+ approval for an HTML-cleanup shell pipeline. If it is unavailable or fails,
76
+ use a plain `curl -fsSL <listing-url>` call and read the response directly.
77
+ Fetch the raw registry YAML separately for the installation commit and
78
+ configurations, as below; do not take the pin from a cached page summary.
79
+
46
80
  1. **Goal first.** Use a goal and folder already supplied, including a handoff
47
81
  from the installing agent; do not ask for them again. If the goal is missing,
48
82
  ask once: "What would you like to build or change?" If they already named a
@@ -52,30 +86,70 @@ question through the human channel instead.
52
86
  own working directory is OpenRig's workspace, not their project, so never launch with
53
87
  `--cwd .` from here.
54
88
  3. **Three teams, one recommendation.** Present starter, workshop and factory,
55
- recommend one with a short reason tied to their goal, and draw each:
89
+ recommend one with a short reason tied to their goal, and show each graph
90
+ in the shared TUI as you explain it (step 4):
56
91
  - `starter`: a builder and a reviewer (`dev-build`, `dev-review`) for one
57
92
  bounded change. Built in; `first-project` is its old name.
58
93
  - `workshop`: a lead, a builder, a QA seat and a reviewer for ongoing work
59
94
  in one repository. Not built in: it installs from its listing on
60
95
  openrig.dev/rigs, a GitHub folder link pinned to a reviewed commit. Read
61
96
  the commit and its configurations from
62
- https://raw.githubusercontent.com/mvschwarz/openrig-world/main/registry/workshop.yaml,
97
+ https://raw.githubusercontent.com/mvschwarz/openrig-registry/main/registry/workshop.yaml,
63
98
  fetched fresh, for example with `curl -fsSL <that link>`. A web tool's cached
64
99
  copy can be older than the current pin and would launch an older workshop;
65
100
  the raw link itself can trail a new pin by a few minutes (it is cached for
66
- 300 seconds).
101
+ 300 seconds). If permission prompts are slowing the person down, point
102
+ them to https://openrig.dev/rigs/workshop: the bundle ships with broad
103
+ access and non-interruptive mode, bypassing permission prompts and
104
+ supported harness warning dialogs. Its listing and before-install view
105
+ explain that access so they can choose it knowingly.
67
106
  - `factory`: seven agents (a lead, an advisor, build, QA, design and two
68
107
  independent reviewers) for sustained product work. Built in; it uses the
69
108
  most concurrent capacity.
70
109
  Offer the shelf only when the goal asks for it: `code-review` (two
71
110
  independent reviews), `research` (an analyst and a synthesizer) and `pm` (a
72
111
  product lead, a researcher and a builder for prototypes).
73
- 4. **Draw from the real spec, before anything starts.** For a built-in team,
74
- run `rig specs preview <team> --kind rig --json` and draw members and
75
- runtimes from `graph.nodes` and edges from `graph.edges`, for example
76
- `[dev.build, Claude] --delegates_to--> [dev.review, Codex]`, with one line
77
- on what each role does. For workshop, draw from its `rig.yaml` at the pinned
78
- commit.
112
+ 4. **Show the real spec, before anything starts.** Find the shared TUI's
113
+ `canonicalSessionName` on the kernel's `operator.human` member with
114
+ `rig ps --nodes --rig kernel --json`, then capture that pane with
115
+ `tmux capture-pane -p -t '=<session>:'`, substituting that canonical name
116
+ for `<session>` and keeping the trailing colon. When it shows
117
+ the TUI's normal view and an empty command line, type the TUI command
118
+ `spec starter` and Enter with `tmux send-keys -t '=<session>:'`. A rig spec
119
+ opens on its graph tab; capture again and confirm the named spec and its graph
120
+ are visible while you explain its roles. Do the same with `spec workshop`
121
+ and `spec factory` as you present those choices. These are TUI commands,
122
+ not shell commands. Previewing does not launch a team; leave the Launch
123
+ action for after the person's choice and approval.
124
+ - **Workshop's preview:** first inspect `rig specs ls --kind rig --json`.
125
+ If exactly one workshop entry is listed, show it and add nothing; say if
126
+ its source differs from the pinned install you are offering. If several
127
+ entries share that name, explain the ambiguity and use the text fallback
128
+ rather than letting `spec workshop` pick the first one. Otherwise, create
129
+ a temporary directory with `mktemp -d` and put a clean checkout of the
130
+ exact commit in the fresh registry listing from step 3 inside it.
131
+ Verify `git -C <checkout> rev-parse HEAD` equals that commit and
132
+ `git -C <checkout> status --porcelain -- rigs/workshop` is empty; use its
133
+ complete `rigs/workshop` folder. Tell the person: "Showing workshop
134
+ adds this version to your team library; it doesn't start any agents."
135
+ Run `rig specs add <pinned-workshop-folder> --json`; once it succeeds,
136
+ the temporary checkout can be removed because the library has its own
137
+ copy. Refresh the TUI and open `spec workshop`. Keep that same commit in
138
+ the later install link: the preview is a library copy, while installation
139
+ still uses the pinned link and `--target ~/rigs/workshop`, not the bare
140
+ library name.
141
+ Do not overwrite an existing workshop entry. If you cannot bind the
142
+ copy to that commit or the preview copy prevents the pinned install,
143
+ explain why workshop needs the text fallback below.
144
+ - **If the graph cannot be shown:** at the shared pane's shell prompt,
145
+ start `rig tui` there once, then capture before navigating. If it has a
146
+ startup screen, a dialog, unfinished input or another program, preserve
147
+ it. Name the unavailable preview and draw that team in the conversation
148
+ instead; use this fallback only when the TUI or that exact graph cannot
149
+ be driven. For a built-in team, read
150
+ `rig specs preview <team> --kind rig --json`: draw members and runtimes
151
+ from `graph.nodes` and edges from `graph.edges`, with one line on each
152
+ role. For workshop, draw from its `rig.yaml` at the pinned commit.
79
153
  5. **Fit it to their providers.** Infer which tools they have from the
80
154
  kernel's own runtimes (`rig ps --nodes --rig kernel --json`), or ask. Check
81
155
  only the providers the team needs (`claude auth status` or
@@ -120,12 +194,24 @@ question through the human channel instead.
120
194
  person or a fix. If `rig up` reports `Status: partial` with
121
195
  `Startup attention (<seat>): <reason>`, tell them what that seat is waiting
122
196
  for and the command its reason ends with.
197
+ Relay any untracked-file warnings from `rig up` to the person, including the
198
+ paths and suggested local exclude lines. Those files were created by the
199
+ launch, so describe them as OpenRig additions rather than pre-existing work.
200
+ - **A Codex seat says its model requires a newer version of Codex:** their
201
+ Codex is older than the model the team pins (the starter's reviewer uses
202
+ `gpt-6-astra`, which Codex 0.145 can't run). Tell them, and offer to update
203
+ Codex the way it was installed, for example
204
+ `npm install -g @openai/codex`. On their yes, update it, then start
205
+ that seat again. It's context for them, not a reason to stop or change the
206
+ team.
123
207
  8. **Show them the team.** Capture the shared TUI: its session is the
124
208
  `operator.human` member's `canonicalSessionName` in
125
- `rig ps --nodes --rig kernel --json`. Only when the capture shows the TUI's
126
- own view, type the TUI command `rig <team>` and Enter into that pane (tmux
127
- send-keys to its session), and capture again to confirm it shows the team's
128
- table.
209
+ `rig ps --nodes --rig kernel --json`. Use
210
+ `tmux capture-pane -p -t '=<session>:'`, substituting that canonical name
211
+ for `<session>` and keeping the trailing colon. Only when the capture shows
212
+ the TUI's own view, type the TUI command `rig <team>` and Enter into that pane
213
+ with `tmux send-keys -t '=<session>:'`, and capture again to confirm it shows
214
+ the team's table.
129
215
  At a shell prompt, run `rig tui` there first or tell them the command; if a
130
216
  startup view or another mode holds the keys, leave it and tell them the
131
217
  command instead. Then open the team's terminals as a new space with
@@ -16,8 +16,11 @@ machine and have things happen.
16
16
  acts on behalf of the operator.human; ops decisions needing human
17
17
  approval escalate.
18
18
  - **operator.human** is the shared mission-control terminal. A fresh kernel
19
- starts `rig tui` there. `rig tui --shared` attaches another client to that
20
- same terminal; detaching preserves navigation. It is a screen, not proof a
19
+ starts `rig tui` there. When the person wants to see their agents or OpenRig in a terminal, run
20
+ `rig terminal open saved:kernel --window`: below 120 measured columns, operator first; from 120,
21
+ dashboard and operator equally side by side. The advisor keeps a separate tab or tmux window. Only if
22
+ the window cannot open, `rig tui --shared` is the dashboard-only fallback;
23
+ detaching preserves navigation. It is a screen, not proof a
21
24
  person is watching or a destination that can answer a queue item. Use the
22
25
  registered human delivery channel when a decision is required.
23
26
  - **queue.worker** classifies stream-to-queue substrate. New stream