@openrig/cli 0.4.6 → 0.4.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 (352) hide show
  1. package/daemon/assets/guidance/CULTURE-default.md +19 -0
  2. package/daemon/assets/guidance/openrig-start.md +20 -5
  3. package/daemon/assets/plugins/openrig-core/README.md +1 -1
  4. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +9 -6
  5. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +11 -72
  6. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +34 -22
  7. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +108 -0
  8. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +11 -14
  9. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +95 -0
  10. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +175 -105
  11. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +26 -9
  12. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +11 -9
  13. package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +162 -0
  14. package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +165 -0
  15. package/daemon/dist/adapters/cmux-transport.d.ts.map +1 -1
  16. package/daemon/dist/adapters/cmux-transport.js +8 -1
  17. package/daemon/dist/adapters/cmux-transport.js.map +1 -1
  18. package/daemon/dist/adapters/cmux.d.ts +9 -0
  19. package/daemon/dist/adapters/cmux.d.ts.map +1 -1
  20. package/daemon/dist/adapters/cmux.js +21 -0
  21. package/daemon/dist/adapters/cmux.js.map +1 -1
  22. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +3 -0
  23. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  24. package/daemon/dist/adapters/codex-runtime-adapter.js +20 -4
  25. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  26. package/daemon/dist/build-info.js +3 -3
  27. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +3 -0
  28. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  29. package/daemon/dist/domain/claude-compaction-enforcer.js +19 -3
  30. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  31. package/daemon/dist/domain/cmux-layout-service.d.ts +36 -0
  32. package/daemon/dist/domain/cmux-layout-service.d.ts.map +1 -1
  33. package/daemon/dist/domain/cmux-layout-service.js +100 -28
  34. package/daemon/dist/domain/cmux-layout-service.js.map +1 -1
  35. package/daemon/dist/domain/context-monitor.d.ts +2 -0
  36. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  37. package/daemon/dist/domain/context-monitor.js +14 -0
  38. package/daemon/dist/domain/context-monitor.js.map +1 -1
  39. package/daemon/dist/domain/feed/attention-aggregator.js +1 -1
  40. package/daemon/dist/domain/feed/attention-aggregator.js.map +1 -1
  41. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -1
  42. package/daemon/dist/domain/hosts/hosts-registry-reader.js +12 -10
  43. package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
  44. package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts.map +1 -1
  45. package/daemon/dist/domain/hosts/hosts-registry-writer.js +3 -2
  46. package/daemon/dist/domain/hosts/hosts-registry-writer.js.map +1 -1
  47. package/daemon/dist/domain/hosts/read-through.js +1 -1
  48. package/daemon/dist/domain/hosts/read-through.js.map +1 -1
  49. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -1
  50. package/daemon/dist/domain/hosts/remote-daemon-http.js +8 -5
  51. package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -1
  52. package/daemon/dist/domain/node-inventory.d.ts +3 -12
  53. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  54. package/daemon/dist/domain/node-inventory.js +55 -13
  55. package/daemon/dist/domain/node-inventory.js.map +1 -1
  56. package/daemon/dist/domain/plugin-vendor-service.d.ts +2 -0
  57. package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
  58. package/daemon/dist/domain/plugin-vendor-service.js +23 -0
  59. package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
  60. package/daemon/dist/domain/projection-lane.d.ts +7 -0
  61. package/daemon/dist/domain/projection-lane.d.ts.map +1 -0
  62. package/daemon/dist/domain/projection-lane.js +28 -0
  63. package/daemon/dist/domain/projection-lane.js.map +1 -0
  64. package/daemon/dist/domain/ps-projection.d.ts +19 -0
  65. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  66. package/daemon/dist/domain/ps-projection.js +46 -6
  67. package/daemon/dist/domain/ps-projection.js.map +1 -1
  68. package/daemon/dist/domain/queue-repository.d.ts +14 -10
  69. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  70. package/daemon/dist/domain/queue-repository.js +33 -12
  71. package/daemon/dist/domain/queue-repository.js.map +1 -1
  72. package/daemon/dist/domain/review/compose.d.ts +77 -4
  73. package/daemon/dist/domain/review/compose.d.ts.map +1 -1
  74. package/daemon/dist/domain/review/compose.js +152 -16
  75. package/daemon/dist/domain/review/compose.js.map +1 -1
  76. package/daemon/dist/domain/review/fleet-compose.js +1 -1
  77. package/daemon/dist/domain/review/fleet-compose.js.map +1 -1
  78. package/daemon/dist/domain/review/gather.d.ts +1 -1
  79. package/daemon/dist/domain/review/gather.d.ts.map +1 -1
  80. package/daemon/dist/domain/review/gather.js +92 -67
  81. package/daemon/dist/domain/review/gather.js.map +1 -1
  82. package/daemon/dist/domain/review/proof-io.d.ts +2 -0
  83. package/daemon/dist/domain/review/proof-io.d.ts.map +1 -0
  84. package/daemon/dist/domain/review/proof-io.js +38 -0
  85. package/daemon/dist/domain/review/proof-io.js.map +1 -0
  86. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  87. package/daemon/dist/domain/rigspec-instantiator.js +15 -2
  88. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  89. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +8 -0
  90. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -0
  91. package/daemon/dist/domain/scope/plan-lock-artifacts.js +57 -0
  92. package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -0
  93. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +38 -0
  94. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -0
  95. package/daemon/dist/domain/scope/scaffold-placeholder.js +98 -0
  96. package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -0
  97. package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  98. package/daemon/dist/domain/scope/scope-approve.js +22 -1
  99. package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  100. package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  101. package/daemon/dist/domain/scope/scope-audit.js +57 -20
  102. package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  103. package/daemon/dist/domain/session-transport.d.ts +17 -0
  104. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  105. package/daemon/dist/domain/session-transport.js +44 -0
  106. package/daemon/dist/domain/session-transport.js.map +1 -1
  107. package/daemon/dist/domain/slices/qitem-membership.d.ts +17 -0
  108. package/daemon/dist/domain/slices/qitem-membership.d.ts.map +1 -0
  109. package/daemon/dist/domain/slices/qitem-membership.js +60 -0
  110. package/daemon/dist/domain/slices/qitem-membership.js.map +1 -0
  111. package/daemon/dist/domain/slices/slice-detail-projector.d.ts +5 -0
  112. package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
  113. package/daemon/dist/domain/slices/slice-detail-projector.js +157 -11
  114. package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
  115. package/daemon/dist/domain/slices/slice-indexer.d.ts +86 -0
  116. package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
  117. package/daemon/dist/domain/slices/slice-indexer.js +422 -45
  118. package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
  119. package/daemon/dist/domain/startup-orchestrator.d.ts +9 -0
  120. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  121. package/daemon/dist/domain/startup-orchestrator.js +71 -3
  122. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  123. package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts +12 -11
  124. package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts.map +1 -1
  125. package/daemon/dist/domain/terminal/cmux-provider-adapter.js +61 -28
  126. package/daemon/dist/domain/terminal/cmux-provider-adapter.js.map +1 -1
  127. package/daemon/dist/domain/terminal/herdr-adapter.d.ts +27 -10
  128. package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
  129. package/daemon/dist/domain/terminal/herdr-adapter.js +74 -33
  130. package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
  131. package/daemon/dist/domain/transcript-capture.d.ts +3 -0
  132. package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
  133. package/daemon/dist/domain/transcript-capture.js +28 -0
  134. package/daemon/dist/domain/transcript-capture.js.map +1 -1
  135. package/daemon/dist/domain/transcript-store.d.ts +10 -0
  136. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  137. package/daemon/dist/domain/transcript-store.js +26 -0
  138. package/daemon/dist/domain/transcript-store.js.map +1 -1
  139. package/daemon/dist/domain/types.d.ts +4 -0
  140. package/daemon/dist/domain/types.d.ts.map +1 -1
  141. package/daemon/dist/domain/types.js.map +1 -1
  142. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  143. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +9 -4
  144. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  145. package/daemon/dist/domain/workspace/workspace-doctor.js +1 -1
  146. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  147. package/daemon/dist/routes/mission-control.js +1 -1
  148. package/daemon/dist/routes/mission-control.js.map +1 -1
  149. package/daemon/dist/routes/missions.d.ts +7 -0
  150. package/daemon/dist/routes/missions.d.ts.map +1 -1
  151. package/daemon/dist/routes/missions.js +6 -1
  152. package/daemon/dist/routes/missions.js.map +1 -1
  153. package/daemon/dist/routes/ps.d.ts.map +1 -1
  154. package/daemon/dist/routes/ps.js +5 -1
  155. package/daemon/dist/routes/ps.js.map +1 -1
  156. package/daemon/dist/routes/queue.d.ts.map +1 -1
  157. package/daemon/dist/routes/queue.js +9 -2
  158. package/daemon/dist/routes/queue.js.map +1 -1
  159. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  160. package/daemon/dist/routes/rigs.js +21 -10
  161. package/daemon/dist/routes/rigs.js.map +1 -1
  162. package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  163. package/daemon/dist/routes/scope-audit.js +141 -135
  164. package/daemon/dist/routes/scope-audit.js.map +1 -1
  165. package/daemon/dist/routes/sessions.js +2 -1
  166. package/daemon/dist/routes/sessions.js.map +1 -1
  167. package/daemon/dist/routes/slices.d.ts.map +1 -1
  168. package/daemon/dist/routes/slices.js +48 -38
  169. package/daemon/dist/routes/slices.js.map +1 -1
  170. package/daemon/dist/routes/transcripts.d.ts.map +1 -1
  171. package/daemon/dist/routes/transcripts.js +62 -33
  172. package/daemon/dist/routes/transcripts.js.map +1 -1
  173. package/daemon/dist/startup.d.ts.map +1 -1
  174. package/daemon/dist/startup.js +25 -11
  175. package/daemon/dist/startup.js.map +1 -1
  176. package/daemon/docs/reference/agent-startup-guide.md +1 -0
  177. package/daemon/specs/agents/apps/vault-specialist/agent.yaml +2 -1
  178. package/daemon/specs/agents/conveyor/builder/agent.yaml +2 -1
  179. package/daemon/specs/agents/conveyor/lead/agent.yaml +2 -1
  180. package/daemon/specs/agents/conveyor/planner/agent.yaml +2 -1
  181. package/daemon/specs/agents/conveyor/reviewer/agent.yaml +2 -1
  182. package/daemon/specs/agents/design/product-designer/agent.yaml +12 -2
  183. package/daemon/specs/agents/development/implementer/agent.yaml +12 -2
  184. package/daemon/specs/agents/development/qa/agent.yaml +12 -2
  185. package/daemon/specs/agents/development/qa/guidance/role.md +1 -0
  186. package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +2 -1
  187. package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +2 -1
  188. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +12 -2
  189. package/daemon/specs/agents/product-management/pm/agent.yaml +1 -2
  190. package/daemon/specs/agents/research/analyst/agent.yaml +2 -1
  191. package/daemon/specs/agents/research/synthesizer/agent.yaml +2 -1
  192. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +12 -2
  193. package/daemon/specs/agents/shared/agent.yaml +5 -8
  194. package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +13 -1
  195. package/daemon/specs/agents/shared/skills/core/agent-starters/SKILL.md +132 -0
  196. package/daemon/{assets/plugins/openrig-core/skills → specs/agents/shared/skills/core}/agent-startup-and-context-ingestion/SKILL.md +27 -19
  197. package/daemon/specs/agents/shared/skills/core/attention-queue/SKILL.md +264 -0
  198. package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +190 -0
  199. package/daemon/specs/agents/shared/skills/core/human-in-the-loop/SKILL.md +104 -0
  200. package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +25 -8
  201. package/daemon/specs/agents/shared/skills/core/openrig-cmux/SKILL.md +0 -5
  202. package/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md +1 -6
  203. package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +460 -0
  204. package/daemon/specs/agents/shared/skills/core/rig-bundles-and-shareable-artifacts/SKILL.md +101 -0
  205. package/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md +22 -11
  206. package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +160 -0
  207. package/daemon/specs/agents/shared/skills/core/specification-system/SKILL.md +103 -0
  208. package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +118 -0
  209. package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +125 -0
  210. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +4 -4
  211. package/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md +3 -0
  212. package/daemon/specs/agents/shared/skills/process/brainstorming/OPENRIG.md +3 -3
  213. package/daemon/specs/agents/shared/skills/process/executing-plans/OPENRIG.md +1 -1
  214. package/daemon/specs/agents/shared/skills/process/frontend-design/SKILL.md +6 -3
  215. package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +1 -1
  216. package/daemon/specs/agents/shared/skills/process/using-superpowers/OPENRIG.md +1 -1
  217. package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +12 -2
  218. package/daemon/specs/agents/shared/skills/process/writing-plans/OPENRIG.md +1 -1
  219. package/daemon/specs/rigs/focused/pm-team/CULTURE.md +1 -1
  220. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/agent.yaml +2 -2
  221. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +5 -4
  222. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/agent.yaml +2 -2
  223. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +3 -5
  224. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/agent.yaml +2 -2
  225. package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +3 -4
  226. package/daemon/specs/rigs/preview/product-team/CULTURE.md +1 -1
  227. package/dist/bin-wrapper.d.ts.map +1 -1
  228. package/dist/bin-wrapper.js +3 -1
  229. package/dist/bin-wrapper.js.map +1 -1
  230. package/dist/build-info.js +3 -3
  231. package/dist/cli-error.d.ts +33 -0
  232. package/dist/cli-error.d.ts.map +1 -0
  233. package/dist/cli-error.js +94 -0
  234. package/dist/cli-error.js.map +1 -0
  235. package/dist/commands/config-init-workspace.js +1 -1
  236. package/dist/commands/doctor.d.ts +1 -1
  237. package/dist/commands/doctor.d.ts.map +1 -1
  238. package/dist/commands/doctor.js +17 -11
  239. package/dist/commands/doctor.js.map +1 -1
  240. package/dist/commands/host.d.ts.map +1 -1
  241. package/dist/commands/host.js +24 -10
  242. package/dist/commands/host.js.map +1 -1
  243. package/dist/commands/proof.js +1 -1
  244. package/dist/commands/proof.js.map +1 -1
  245. package/dist/commands/ps.d.ts.map +1 -1
  246. package/dist/commands/ps.js +16 -2
  247. package/dist/commands/ps.js.map +1 -1
  248. package/dist/commands/queue.d.ts.map +1 -1
  249. package/dist/commands/queue.js +103 -24
  250. package/dist/commands/queue.js.map +1 -1
  251. package/dist/commands/rig.d.ts.map +1 -1
  252. package/dist/commands/rig.js +122 -0
  253. package/dist/commands/rig.js.map +1 -1
  254. package/dist/commands/scope.js +2 -2
  255. package/dist/commands/scope.js.map +1 -1
  256. package/dist/commands/send.d.ts.map +1 -1
  257. package/dist/commands/send.js +118 -24
  258. package/dist/commands/send.js.map +1 -1
  259. package/dist/commands/slack.d.ts +37 -0
  260. package/dist/commands/slack.d.ts.map +1 -0
  261. package/dist/commands/slack.js +274 -0
  262. package/dist/commands/slack.js.map +1 -0
  263. package/dist/commands/ui.d.ts +1 -0
  264. package/dist/commands/ui.d.ts.map +1 -1
  265. package/dist/commands/ui.js +2 -0
  266. package/dist/commands/ui.js.map +1 -1
  267. package/dist/commands/up.js +1 -1
  268. package/dist/commands/up.js.map +1 -1
  269. package/dist/commands/whoami.d.ts.map +1 -1
  270. package/dist/commands/whoami.js +3 -3
  271. package/dist/commands/whoami.js.map +1 -1
  272. package/dist/daemon-lifecycle.d.ts.map +1 -1
  273. package/dist/daemon-lifecycle.js +45 -14
  274. package/dist/daemon-lifecycle.js.map +1 -1
  275. package/dist/host-registry.d.ts +6 -1
  276. package/dist/host-registry.d.ts.map +1 -1
  277. package/dist/host-registry.js +15 -6
  278. package/dist/host-registry.js.map +1 -1
  279. package/dist/index.d.ts +3 -0
  280. package/dist/index.d.ts.map +1 -1
  281. package/dist/index.js +6 -1
  282. package/dist/index.js.map +1 -1
  283. package/dist/lib/scope/scaffold-placeholder.d.ts +38 -0
  284. package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -0
  285. package/dist/lib/scope/scaffold-placeholder.js +98 -0
  286. package/dist/lib/scope/scaffold-placeholder.js.map +1 -0
  287. package/dist/lib/scope/scope-audit.d.ts.map +1 -1
  288. package/dist/lib/scope/scope-audit.js +57 -20
  289. package/dist/lib/scope/scope-audit.js.map +1 -1
  290. package/dist/lib/scope-templates/backlog-deprecation.md +1 -1
  291. package/dist/lib/scope-templates/backlog-tech-debt.md +1 -1
  292. package/dist/lib/scope-templates/bug-fix.md +1 -1
  293. package/dist/lib/scope-templates/implementation-prd.md +1 -1
  294. package/dist/lib/scope-templates/mission-notes.md +7 -2
  295. package/dist/lib/scope-templates/mission-placeholder.md +1 -1
  296. package/dist/lib/scope-templates/mission-progress.md +1 -1
  297. package/dist/lib/scope-templates/mission-release.md +1 -1
  298. package/dist/lib/scope-templates/placeholder.md +1 -1
  299. package/dist/lib/scope-templates/proof.md +1 -1
  300. package/dist/lib/scope-templates/release-feature.md +1 -1
  301. package/dist/lib/scope-templates/research.md +1 -1
  302. package/dist/lib/scope-templates/slice-progress.md +1 -1
  303. package/dist/remote-host-ops.d.ts.map +1 -1
  304. package/dist/remote-host-ops.js +2 -2
  305. package/dist/remote-host-ops.js.map +1 -1
  306. package/dist/slack/config.d.ts +41 -0
  307. package/dist/slack/config.d.ts.map +1 -0
  308. package/dist/slack/config.js +60 -0
  309. package/dist/slack/config.js.map +1 -0
  310. package/dist/slack/inbound.d.ts +75 -0
  311. package/dist/slack/inbound.d.ts.map +1 -0
  312. package/dist/slack/inbound.js +133 -0
  313. package/dist/slack/inbound.js.map +1 -0
  314. package/dist/slack/message.d.ts +26 -0
  315. package/dist/slack/message.d.ts.map +1 -0
  316. package/dist/slack/message.js +60 -0
  317. package/dist/slack/message.js.map +1 -0
  318. package/dist/slack/outbound.d.ts +39 -0
  319. package/dist/slack/outbound.d.ts.map +1 -0
  320. package/dist/slack/outbound.js +52 -0
  321. package/dist/slack/outbound.js.map +1 -0
  322. package/dist/slack/queue-bridge.d.ts +56 -0
  323. package/dist/slack/queue-bridge.d.ts.map +1 -0
  324. package/dist/slack/queue-bridge.js +114 -0
  325. package/dist/slack/queue-bridge.js.map +1 -0
  326. package/dist/slack/secrets.d.ts +21 -0
  327. package/dist/slack/secrets.d.ts.map +1 -0
  328. package/dist/slack/secrets.js +73 -0
  329. package/dist/slack/secrets.js.map +1 -0
  330. package/dist/slack/slack-api.d.ts +49 -0
  331. package/dist/slack/slack-api.d.ts.map +1 -0
  332. package/dist/slack/slack-api.js +110 -0
  333. package/dist/slack/slack-api.js.map +1 -0
  334. package/dist/slack/state-store.d.ts +62 -0
  335. package/dist/slack/state-store.d.ts.map +1 -0
  336. package/dist/slack/state-store.js +132 -0
  337. package/dist/slack/state-store.js.map +1 -0
  338. package/package.json +1 -1
  339. package/ui/dist/assets/{index-zrFqS7gL.js → index-DkNi0RT8.js} +184 -184
  340. package/ui/dist/assets/index-N-SdPj-I.css +32 -0
  341. package/ui/dist/index.html +2 -2
  342. package/daemon/assets/plugins/openrig-core/skills/openrig-architect/SKILL.md +0 -361
  343. package/daemon/assets/plugins/openrig-core/skills/openrig-cmux/SKILL.md +0 -86
  344. package/daemon/assets/plugins/openrig-core/skills/openrig-herdr/SKILL.md +0 -158
  345. package/daemon/assets/plugins/openrig-core/skills/openrig-operator/SKILL.md +0 -222
  346. package/daemon/docs/reference/product-factory-vps-runbook.md +0 -132
  347. package/daemon/specs/agents/shared/skills/core/mission-slice-sop/SKILL.md +0 -113
  348. package/daemon/specs/agents/shared/skills/core/openrig-installer/SKILL.md +0 -142
  349. package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +0 -110
  350. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +0 -1245
  351. package/daemon/specs/agents/shared/skills/core/openrig-user-settings/SKILL.md +0 -153
  352. package/ui/dist/assets/index-CFqxa0zW.css +0 -32
@@ -0,0 +1,19 @@
1
+ # OpenRig default culture
2
+
3
+ This is the universal operating floor for every OpenRig team. A rig's own culture may add role- or domain-specific guidance on top of it.
4
+
5
+ ## Pragmatic truth-seeking
6
+
7
+ Be plain and forthcoming. Say when something is wrong, show the evidence that matters, and change your mind quickly when the evidence changes. Do not agree performatively, and do not manufacture objections to look rigorous.
8
+
9
+ ## Principles over rules
10
+
11
+ Use judgment from the goal in front of you. Keep hard rules for genuinely high-stakes boundaries: never destroy an authenticated owner environment, never push or publish without authorization, and never leak secrets.
12
+
13
+ ## Ship good, working product
14
+
15
+ Bias toward action and deliver what the user asked for. Guardrails, reviews, and proofs serve the product; they are not the product. A real blocker should be named precisely while unblocked work continues.
16
+
17
+ ## Match rigor to stakes
18
+
19
+ Use root-cause discipline, verify the real user path, and protect owner state. Be thorough where failure has real consequences and decisive on low-risk details. When process starts taking more attention than the product, simplify and get back to shipping.
@@ -5,6 +5,11 @@ You are running inside an OpenRig-managed topology.
5
5
  This file is the thin bootstrap overlay, not the full OpenRig manual.
6
6
  Use it to recover identity, communicate, and regain context after launch or compaction.
7
7
 
8
+ When you are unsure which packaged skill applies, start with the global `openrig-skills` index. It routes to every shipped skill in one hop:
9
+
10
+ - Claude Code: `~/.claude/skills/openrig-skills/SKILL.md`
11
+ - Codex: `~/.agents/skills/openrig-skills/SKILL.md`
12
+
8
13
  For the full OpenRig command surface, load the packaged `openrig-user` skill now.
9
14
  If your runtime supports skills, use that mechanism.
10
15
  If it does not auto-load skills reliably, read the packaged copy directly from your current project or workspace:
@@ -14,14 +19,15 @@ If it does not auto-load skills reliably, read the packaged copy directly from y
14
19
 
15
20
  That skill covers the broader surface, including chatroom, discovery, adopt/bind/attach, lifecycle, specs, bundles, and richer operator workflows.
16
21
 
17
- Your per-session startup guidance may also name additional packaged skills for your role and pod.
18
- Load those too. This shared overlay is only the common bootstrap floor, not the full operating manual for your seat.
22
+ Your per-session startup guidance also names the process skills for your role and pod.
23
+ Load AND invoke those now, before proceeding with any work, using your runtime's supported skill mechanism.
24
+ This shared overlay is only the common bootstrap floor, not the full operating manual for your seat.
19
25
 
20
26
  ## Working missions and slices (the SDLC)
21
27
 
22
28
  If your seat works missions or slices, load the packaged `mission-slice-sop` skill BEFORE authoring or building — it teaches the flow the Living Notes UI projects: intent → mini-requirements + proof contract (→ mockups for UI slices) → plan-lock (`rig scope slice approve --scope spec`) → build the locked set → QA visual compare → `rig proof add … --media` drops (the C1 drop verb — never hand-place proof files) → proof-lock (`--scope delivery`).
23
29
 
24
- The conventions themselves (section names, proof-contract format, the two locks, C1 proof headers) live in ONE shipped document: `docs/reference/sdlc-conventions.md` (in the CLI package). `rig scope slice create` scaffolds the convention sections for every template kind; `rig scope audit` is the advisory backstop — it records and advises, it never blocks your work.
30
+ The conventions themselves (section names, proof-contract format, the two locks, C1 proof headers) live in ONE shipped document: `docs/reference/sdlc-conventions.md` in the repo, materialized at `$OPENRIG_HOME/reference/sdlc-conventions.md` (default `~/.openrig/reference/sdlc-conventions.md`) on an installed package. `rig scope slice create` scaffolds the convention sections for every template kind; `rig scope audit` is the advisory backstop — it records and advises, it never blocks your work.
25
31
 
26
32
  ## Identity
27
33
 
@@ -50,7 +56,12 @@ Broadcast to all peers in your rig:
50
56
  rig broadcast --rig <name> "message"
51
57
  ```
52
58
 
53
- ## Transcript Recovery
59
+ ## Secondary Transcript Check
60
+
61
+ After compaction, recover work from durable artifacts first: the restore map,
62
+ current `MISSION_NOTES.md`, and your owned queue items. Transcript output is a
63
+ secondary check and may be unavailable or incomplete for some runtimes. Little
64
+ or no output does not mean the session was quiet.
54
65
 
55
66
  Read recent transcript output:
56
67
  ```bash
@@ -64,4 +75,8 @@ rig transcript <session> --grep "pattern"
64
75
 
65
76
  ## After Compaction
66
77
 
67
- If you lose context, run `rig whoami --json` immediately. It tells you who you are, who your peers are, and how to reach them. Then use `rig transcript` to recover recent history.
78
+ If you lose context, run `rig whoami --json` immediately. It tells you who you
79
+ are, who your peers are, and how to reach them. Rebuild the work from the
80
+ restore map, current `MISSION_NOTES.md`, and your owned queue items. Use
81
+ `rig transcript` only as a secondary check; if it returns little or nothing,
82
+ do not conclude that the session was quiet.
@@ -4,7 +4,7 @@ Canonical OpenRig skills and hooks for cross-runtime agent topology coordination
4
4
 
5
5
  ## What this plugin ships
6
6
 
7
- **Skills (8):** the canonical OpenRig operating knowledge — how to use the `rig` CLI, how to design rig topologies, how to recover from compaction, how to hand work off durably between agents, and how to maintain seat continuity across handovers and restarts.
7
+ **Skills (10):** the canonical OpenRig operating knowledge — how to use the `rig` CLI, how to design rig topologies, how to recover from compaction, how to hand work off durably between agents, and how to maintain seat continuity across handovers and restarts.
8
8
 
9
9
  **Hooks:** activity-tracking hooks (Claude Code: 4 events; Codex: 3 events) that POST agent state to the OpenRig daemon for real-time UI seat-status updates.
10
10
 
@@ -4,15 +4,17 @@ description: Use when a Claude Code session has just compacted, is about to comp
4
4
  metadata:
5
5
  openrig:
6
6
  stage: factory-approved
7
- last_verified: "2026-05-04"
8
- distribution_scope: product-bound
9
- source_evidence: |
10
- Load-bearing for any OpenRig seat that may compact. PreCompact hook
11
- is wired into Claude Code's settings (e.g. ~/.claude/settings.json)
12
- so the restore packet is generated automatically before compaction.
13
7
  sibling_skills:
8
+ - mental-model-ha
9
+ - scope-recovery
10
+ - session-compaction-and-restore
14
11
  - agent-startup-and-context-ingestion
12
+ - agent-starters
13
+ - composable-priming-packs
14
+ - session-source-fork
15
15
  - seat-continuity-and-handover
16
+ - claude-compact-in-place
17
+ - pre-maintenance-agent-preservation
16
18
  ---
17
19
 
18
20
  # Claude Compaction Restore
@@ -105,6 +107,7 @@ After the first restore pass, audit yourself before continuing.
105
107
 
106
108
  ## Guardrails
107
109
 
110
+ - Compaction is survival, not housekeeping — never compact to free space, "lean" a seat, or capture/prepare an agent starter (the `rig agent-image` library). It is lossy (a compacted Claude is confident-but-hollow); compact only when a seat is genuinely near its context limit, with a before/after plan. A starter's value is being *functional*, not small — see the `agent-starters` skill.
108
111
  - Do not silently launch fresh after compaction.
109
112
  - Do not continue from memory when restore evidence exists.
110
113
  - Do not defer required restore reading until a later user task. The restore is
@@ -41,10 +41,6 @@ function readInstructionFile(filePath) {
41
41
  return fs.readFileSync(expanded, "utf8");
42
42
  }
43
43
 
44
- function sanitizeKey(value) {
45
- return value.replace(/[^a-zA-Z0-9_.@-]/g, "_");
46
- }
47
-
48
44
  function sessionKey(input) {
49
45
  const raw = [
50
46
  process.env.OPENRIG_SESSION_NAME,
@@ -55,65 +51,13 @@ function sessionKey(input) {
55
51
  input.sessionName,
56
52
  input.transcript_path ? path.basename(input.transcript_path, ".jsonl") : "",
57
53
  ].find((value) => typeof value === "string" && value.trim().length > 0) || "unknown-session";
58
- return sanitizeKey(raw);
59
- }
60
-
61
- // OPR.0.4.1.09 (rev1-r2 hook-path leak fix): MUST match claude-compaction-enforcer.ts
62
- // declaredSeatOf EXACTLY — a seat is authoritative ONLY inside a WELL-FORMED leading
63
- // frontmatter fence (opened AND closed `---`); the body is NEVER scanned; malformed/absent
64
- // frontmatter -> null (generic). Duplicated (not imported) because this hook is a standalone
65
- // portable plugin asset that cannot import the compiled daemon TS; semantics are kept
66
- // identical so the enforcer and hook paths refuse wrong-seat extras the same way.
67
- function declaredSeatOf(content) {
68
- const fm = /^\s*---\s*\n([\s\S]*?)\n---/.exec(content);
69
- if (!fm) return null;
70
- const m = /^[ \t]*(?:target[_-]?seat|seat|session(?:[_-]?name)?)[ \t]*:[ \t]*["']?([^"'\n#]+?)["']?[ \t]*$/im.exec(fm[1]);
71
- return m ? m[1].trim() : null;
72
- }
73
-
74
- // OPR.0.4.1.09 (rev1-r2): resolve the seat-safe EXTRA-FILE CONTENT for
75
- // postCompactInstruction, mirroring the enforcer resolvePostCompactExtra: (1) prefer the
76
- // PER-SEAT extra post-compact-extra/<seat>.md; (2) else the GLOBAL messageFilePath. In
77
- // EITHER case a file whose WELL-FORMED frontmatter declares a DIFFERENT seat is REFUSED
78
- // (returns "") so a foreign-seat extra never leaks into the marker via the hook path
79
- // (the enforcer path already refused it). Generic/this-seat/malformed -> inject.
80
- function readSeatSafeExtraFile(input, globalFilePath) {
81
- const seatKey = sessionKey(input);
82
- const refusedIfForeign = (content) => {
83
- const declared = declaredSeatOf(content);
84
- return declared && sanitizeKey(declared) !== seatKey ? "" : content;
85
- };
86
- // 1. Per-seat extra preferred (seat-keyed path; still defensively seat-checked to match
87
- // the enforcer, which refuses a per-seat file declaring a different seat).
88
- const perSeatPath = path.join(getOpenRigHome(), "compaction", "post-compact-extra", `${seatKey}.md`);
89
- if (fs.existsSync(perSeatPath)) {
90
- return refusedIfForeign(fs.readFileSync(perSeatPath, "utf8"));
91
- }
92
- // 2. Global messageFilePath fallback, seat-checked.
93
- if (!globalFilePath) return "";
94
- const content = readInstructionFile(globalFilePath);
95
- if (!content) return "";
96
- return refusedIfForeign(content);
54
+ return raw.replace(/[^a-zA-Z0-9_.@-]/g, "_");
97
55
  }
98
56
 
99
57
  function pendingMarkerPath(input) {
100
58
  return path.join(getOpenRigHome(), "compaction", "restore-pending", `${sessionKey(input)}.json`);
101
59
  }
102
60
 
103
- // OPR.0.4.1.09: pointer to this seat's per-seat post-compaction extra
104
- // (compaction/post-compact-extra/<seat>.md), surfaced by the bridge reader.
105
- // Returned ONLY when it EXISTS, so the marker never points at an unresolvable
106
- // restoreMapPath; null otherwise.
107
- function perSeatRestoreMapPath(input) {
108
- const p = path.join(getOpenRigHome(), "compaction", "post-compact-extra", `${sessionKey(input)}.md`);
109
- try {
110
- fs.accessSync(p);
111
- return p;
112
- } catch {
113
- return null;
114
- }
115
- }
116
-
117
61
  function writePendingRestoreMarker(input, parsed, restoreInstruction, customMessage) {
118
62
  const markerPath = pendingMarkerPath(input);
119
63
  fs.mkdirSync(path.dirname(markerPath), { recursive: true });
@@ -130,8 +74,6 @@ function writePendingRestoreMarker(input, parsed, restoreInstruction, customMess
130
74
  expectedAck: "restored from packet at <path>; resumed at step <X>",
131
75
  deliveredAt: null,
132
76
  deliveryCount: 0,
133
- // OPR.0.4.1.09: per-seat restore-map pointer (post-compact-extra/<seat>.md) or null.
134
- restoreMapPath: perSeatRestoreMapPath(input),
135
77
  };
136
78
  fs.writeFileSync(markerPath, `${JSON.stringify(payload, null, 2)}\n`, "utf8");
137
79
  return markerPath;
@@ -144,7 +86,7 @@ function writePendingRestoreMarker(input, parsed, restoreInstruction, customMess
144
86
  // enabled but restore text has not been written yet, use OpenRig's default
145
87
  // instruction to load the canonical restore skill. Inline instructions and
146
88
  // file-path content are both included when both are configured.
147
- function readClaudeCompactionMessage(input) {
89
+ function readClaudeCompactionMessage() {
148
90
  const configPath = path.join(getOpenRigHome(), "config.json");
149
91
  let inline = "";
150
92
  let filePath = "";
@@ -173,20 +115,17 @@ function readClaudeCompactionMessage(input) {
173
115
 
174
116
  const parts = [];
175
117
  if (inline && inline.length > 0) {
176
- // Inline has no file/seat to declare; keep as-is.
177
118
  parts.push(`Inline restore instruction:\n${inline}`);
178
119
  }
179
- // OPR.0.4.1.09 (rev1-r2): the FILE portion is SEAT-SAFE — per-seat extra preferred, a
180
- // foreign-seat global refused (mirrors the enforcer). Checked even when messageFilePath
181
- // is unset, because the per-seat extra is an independent mechanism (the enforcer also
182
- // checks the per-seat path regardless of the global config).
183
- try {
184
- const fileText = readSeatSafeExtraFile(input, filePath);
185
- if (fileText) {
186
- parts.push(`Additional restore instruction file:\n${fileText}`);
120
+ if (filePath && filePath.length > 0) {
121
+ try {
122
+ const fileText = readInstructionFile(filePath);
123
+ if (fileText) {
124
+ parts.push(`Additional restore instruction file (${filePath}):\n${fileText}`);
125
+ }
126
+ } catch {
127
+ // Keep any inline instruction; unreadable extra files degrade quietly.
187
128
  }
188
- } catch {
189
- // Keep any inline instruction; unreadable extra files degrade quietly.
190
129
  }
191
130
  if (parts.length > 0) return parts.join("\n\n");
192
131
  if (policyEnabled && !inlineConfigured && !filePathConfigured) {
@@ -208,7 +147,7 @@ try {
208
147
  args.push(input.transcript_path);
209
148
  }
210
149
 
211
- const customMessage = readClaudeCompactionMessage(input);
150
+ const customMessage = readClaudeCompactionMessage();
212
151
 
213
152
  const result = spawnSync("node", args, { encoding: "utf8" });
214
153
  if (result.status !== 0) {
@@ -1,22 +1,27 @@
1
1
  ---
2
2
  name: forming-an-openrig-mental-model
3
3
  description: |
4
- Use when an agent is newly oriented to OpenRig and needs to form an accurate mental model of the system fast — what rigs are, how skills load, what the topology shapes mean, what the product loop is. For agents booting into a new seat or returning to OpenRig work after time away. NOT for HA-pair compaction recovery (that's the pair-of-seats coordination pattern; orientation is a solo task) or for specific operational procedures.
4
+ Use when an agent is newly oriented to OpenRig and needs to form an accurate mental model of the system fast — what rigs are, how skills load, what the topology shapes mean, what the product loop is. For agents booting into a new seat or returning to OpenRig work after time away. NOT for compaction recovery (use claude-compaction-restore for that) or for specific operational procedures.
5
5
  metadata:
6
+ cli_surfaces_referenced:
7
+ - ask
8
+ - capture
9
+ - down
10
+ - ps
11
+ - send
12
+ - transcript
13
+ - up
14
+ - whoami
6
15
  openrig:
7
16
  stage: factory-approved
8
- last_verified: "2026-05-04"
9
- distribution_scope: product-bound
10
- source_evidence: |
11
- Authored 2026-05-02 in response to founder-observed pattern: agents
12
- Distinct from HA-pair mental-model preservation (which is a
13
- pair-of-seats coordination pattern). This skill serves the legitimate
14
- need to form an initial mental model of OpenRig as a system.
15
17
  sibling_skills:
16
18
  - openrig-user
17
19
  - openrig-operator
20
+ - openrig-builder
18
21
  - openrig-architect
19
- transfer_test: pending
22
+ - openrig-upgrade
23
+ - ai-dev-workflows
24
+ - software-for-agents
20
25
  ---
21
26
 
22
27
  # Forming an OpenRig Mental Model
@@ -165,13 +170,14 @@ cost when you reach for one.
165
170
  | Home | Purpose |
166
171
  |---|---|
167
172
  | `<rig-cwd>/.claude/skills/`, `<rig-cwd>/.agents/skills/` | Where the harness actually loads from. Populated by `rig up`. |
168
- | `~/.claude/skills/`, `~/.agents/skills/` | Your personal/global skills + the OpenRig bootstrap set (openrig-user, openrig-operator, openrig-architect, forming-an-openrig-mental-model, plus the rest of the openrig-core plugin skills). |
169
- | openrig-core plugin skills | Product built-in skills that ship with OpenRig (installed via the openrig-core plugin). |
170
- | `~/.openrig/skills/` | Runtime install home for OpenRig-shipped skills. |
173
+ | `~/.claude/skills/`, `~/.agents/skills/` | Your personal / user-installed global skills, loaded by the harness itself (independent of OpenRig). NOT where OpenRig's own bootstrap skills live those ship in the product (below) and project into the cwd `.claude/skills/` at `rig up`. |
174
+ | `openrig/packages/daemon/{specs/agents/shared/skills,assets/plugins/*/skills}/` | Product skills that ship with OpenRig the spec pool + the bundled plugin assets (openrig-user, openrig-operator, openrig-architect, forming-an-openrig-mental-model, queue-handoff, claude-compaction-restore, …). |
175
+ | `~/.openrig/skills/` | Future runtime install home for OpenRig-shipped skills. |
176
+ | the skills authoring workspace | Skill authoring source (not runtime-loaded). |
171
177
 
172
- The harness only sees the first two. Other locations are shipping and
173
- source-of-truth — they reach the harness via projection or NPM install,
174
- not directly.
178
+ The harness only sees the first two. Other locations are authoring,
179
+ shipping, and source-of-truth — they reach the harness via projection or
180
+ NPM install, not directly.
175
181
 
176
182
  ---
177
183
 
@@ -250,19 +256,25 @@ For real depth, these are the load-bearing canonical docs:
250
256
  | `openrig/docs/reference/rig-spec.md` | The RigSpec YAML format — pods, members, edges, all fields |
251
257
  | `openrig/docs/reference/agent-spec.md` | The AgentSpec YAML format — resources, profiles, imports |
252
258
  | `openrig/docs/reference/agent-startup-guide.md` | The 7-layer startup layering model; delivery hints |
259
+ | the product taxonomy | Canonical vocabulary (read literally) |
260
+ | `substrate/shared-docs/HOST-TOPOLOGY.md` | Host-level doctrine — rig classes, context patterns, lifecycle, authoring SOP |
261
+ | `substrate/shared-docs/SUBSTRATE-CONVENTIONS.md` | Filesystem layout doctrine for substrate |
253
262
  | `https://agentskills.io/specification` | The cross-runtime skill standard |
254
263
 
255
- If your team maintains a host-level topology doc (rig classes, context
256
- patterns, authoring SOPs), read its rig-authoring section before
257
- touching YAML for high-stakes rigs.
264
+ If you're going to be authoring rigs, read `HOST-TOPOLOGY.md` §7 (the
265
+ authoring SOP) before touching YAML.
266
+
267
+ If you're going to be doing skill work, read
268
+ the factory-design reference and the
269
+ `operating-the-skill-library` skill that lives in
270
+ `substrate/shared-docs/rigs/skill-library/agents/shared/skills/`.
258
271
 
259
272
  ---
260
273
 
261
274
  ## What this skill is NOT for
262
275
 
263
- - **HA pair compaction recovery.** Forming an initial mental model is a
264
- solo orientation task — different from the pair-of-seats coordination
265
- pattern that preserves a shared mental model across compactions.
276
+ - **Compaction recovery.** That's `claude-compaction-restore`. Different
277
+ skill, different scenario.
266
278
  - **Operating a specific rig.** Specific rigs have their own DESIGN.md and
267
279
  CULTURE.md. Read those.
268
280
  - **Authoring a new rig.** Use the `openrig-architect` skill for that.
@@ -285,7 +297,7 @@ that fit your actual work.
285
297
  | "I should manage Codex's compaction the way I manage Claude's" | No. Codex auto-compacts cleanly; Claude doesn't. Different runtimes, different lifecycles. |
286
298
  | "MEMORY.md auto-loads, so I don't need to read it" | Maybe. Sometimes MEMORY.md auto-loads via system reminders; sometimes not. Don't assume. If your work touches the topics it covers, read it explicitly. |
287
299
  | "Skills inherit from a parent or compose like classes" | No. Skills are flat artifacts; composition happens via AgentSpec `profile.uses.skills` (structural) or soft cross-references in skill bodies (advisory). Not via OO-style inheritance. |
288
- | "Any folder I keep skill files in is the canonical runtime path" | No. The harness only loads from `<rig-cwd>/.claude/skills/`, `<rig-cwd>/.agents/skills/`, and the runtime-installed plugin skills. Other folders are authoring or source-of-truth. |
300
+ | "The substrate `shared-docs/skills/` folder is the canonical runtime path" | No. The harness doesn't read there. It's an authoring workspace. Runtime loads from `.claude/skills/`, `.agents/skills/`, and product built-in. |
289
301
 
290
302
  ---
291
303
 
@@ -0,0 +1,108 @@
1
+ ---
2
+ name: messaging-the-human
3
+ description: |
4
+ When and who should send a message to the human operator, at
5
+ operator-human@your-rig — which routes straight to his Slack. Role-gated:
6
+ orchestrators and PMs use discretion to send anything worth his attention
7
+ (blockers, ships/completions, changes, good news); every other agent may
8
+ message him ONLY for a real blocker he can personally unblock, and routes
9
+ everything else through an orchestrator. Use to protect a scarce human's
10
+ manage-by-exception attention. NOT for agent-to-agent coordination (send/queue
11
+ a peer) or durable agent work-handoffs (use the queue to the owning seat).
12
+ metadata:
13
+ openrig:
14
+ stage: provisional # operator-directed, freshly authored 2026-07-30; hardens as agents use it
15
+ audience: ALL agents (universal); orchestrators + PMs are the primary discretionary senders
16
+ sibling_skills:
17
+ - queue-handoff
18
+ - status-not-chat-orchestrator
19
+ - human-in-the-loop
20
+ - openrig-user
21
+ ---
22
+
23
+ # Messaging the Human
24
+
25
+ ## The one-line mechanism
26
+
27
+ ```bash
28
+ rig send operator-human@your-rig "your message"
29
+ ```
30
+
31
+ That goes straight to the human's Slack. That is the entire *how*. Everything
32
+ below is the *when* and the *who* — which is the part that actually matters.
33
+
34
+ ## The mental model: the human is a scarce attention resource managing by exception
35
+
36
+ There is one human. He is single-threaded across many agents, so his attention
37
+ is the bottleneck of the whole system. He operates **by exception**: he wants to
38
+ be pulled in when it genuinely matters and left alone when it doesn't. Every
39
+ message you send spends a slice of that scarce attention.
40
+
41
+ So the rule is not "can I reach him" (you can, trivially — one `rig send`). The
42
+ rule is **should this reach him, coming from me**. Two things decide that: **who
43
+ you are** (your role sets how much of his attention you're trusted to spend) and
44
+ **what it is** (does it clear the bar for that role). Get the altitude wrong in
45
+ either direction and you fail him: spam his Slack with noise, or sit silently on
46
+ something he needed to know or could have unblocked.
47
+
48
+ ## WHO sends WHAT
49
+
50
+ ### If you are an ORCHESTRATOR or a PRODUCT MANAGER — use discretion
51
+
52
+ You are the primary channel to the human. You may send **more than blockers** —
53
+ anything you judge he would want to know:
54
+
55
+ - something **shipped**, **completed**, or a **milestone** was hit
56
+ - something **important happened**, or something **changed**
57
+ - **environmental** changes (infra, hosts, tools, external state)
58
+ - **good news**
59
+ - anything that needs his attention, or is simply **good for him to know**
60
+
61
+ There is no hard trigger here — it is judgment, and you are trusted with it. The
62
+ test is: **"would he want to know this?"** If yes, send it. Lean toward sending
63
+ genuine signal and real good news; do not manufacture noise or narrate routine
64
+ churn. Discernment is the skill: you are curating his attention, not flooding it.
65
+
66
+ ### If you are ANY OTHER agent — blockers only
67
+
68
+ You may message the human **only** when you are **blocked** and **he** is the one
69
+ who can unblock you. That authority is universal — you do **not** have to be an
70
+ orchestrator to raise a real blocker. But a blocker is the **only** thing you may
71
+ send him directly.
72
+
73
+ For anything that is **not** a blocker — an update, an idea, a question, an
74
+ interesting finding — do **not** message the human. Send it to your
75
+ **orchestrator**, who decides whether it is the human's role to handle or whether
76
+ it is handled another way. The orchestrator/PM layer is the filter that protects
77
+ the human's attention; routing through it is how the system keeps his queue at
78
+ manage-by-exception altitude.
79
+
80
+ ## What counts as a real blocker (for non-orchestrator / non-PM agents)
81
+
82
+ You are **blocked** AND **only the human** can clear it:
83
+
84
+ - a **decision** only he can make,
85
+ - **access / a credential / an authority** only he holds,
86
+ - an **external action** only he can take (something in the real world, an
87
+ account or service he owns).
88
+
89
+ Not a blocker: "I'd like a second opinion," "which approach do you prefer,"
90
+ "here's a cool thing I found." Those go to your **orchestrator**. And if an
91
+ orchestrator or PM *could* unblock you, route to them first — reserve the human
92
+ for what genuinely only he can do.
93
+
94
+ ## How to write it (so it earns the interruption)
95
+
96
+ - **Lead with the point.** Blocker: what is blocked + exactly what you need from
97
+ him. Update: the headline first, detail after.
98
+ - **Full absolute paths.** No internal jargon he can't parse. **No backticks** in
99
+ `rig send` bodies (they trigger shell substitution).
100
+ - `rig send` is an **ephemeral conversation** to his Slack. For a durable *agent*
101
+ work-handoff, use the queue to the owning seat — not the human.
102
+
103
+ ## Quick reference
104
+
105
+ | You are… | You may send the human… |
106
+ |---|---|
107
+ | Orchestrator / PM | anything worth his attention — blockers, ships, completions, changes, good news (your discretion) |
108
+ | Any other agent | a real blocker only he can unblock — **and nothing else** (everything else → your orchestrator) |
@@ -1,18 +1,9 @@
1
1
  ---
2
2
  name: mission-slice-sop
3
- description: Use when working a mission or slice the full SDLC flow (intent mini-requirements + proof contract mockups plan-lock build QA visual compare → `rig proof` drops proof-lock) plus how to track, prove, hand off, and carry state across agents and compaction via the canonical files (PROGRESS.md / PROOF.md / MISSION_NOTES.md / MISSION_BRIEF.md / README.md / IMPLEMENTATION-PRD.md). Covers the convention sections the Living Notes UI projects, the two locks, the three role contracts, per-file WHO/WHEN/HOW rules, the four-legs lifecycle, hot-potato queue handoffs, the moment-of-truth checklist, the deterministic `rig scope audit` backstop, and the ghost-text capture gotcha.
3
+ description: "Use when working a mission or slice: the SDLC flow (intent -> mini-requirements + proof contract -> mockups -> plan-lock -> build -> QA -> `rig proof` drops -> proof-lock), and how to track, prove, and hand off state across agents and compaction via PROGRESS.md / PROOF.md / MISSION_NOTES.md. Covers the two locks, role contracts, hot-potato queue handoff, and the `rig scope audit` backstop."
4
4
  metadata:
5
5
  openrig:
6
6
  stage: shipped
7
- last_verified: "2026-07-06"
8
- distribution_scope: product-bound
9
- source_evidence: |
10
- The canonical product SDLC skill: it teaches the full SDLC flow the
11
- Living Notes UI projects — the convention sections, the proof-contract
12
- pairing, the two staged-approval locks, C1 proof drops, and the three
13
- role contracts. Conventions SSOT: docs/reference/sdlc-conventions.md
14
- (shipped with the CLI package). The deterministic backstop is the
15
- `rig scope audit` classifier.
16
7
  sibling_skills:
17
8
  - queue-handoff
18
9
  - seat-continuity-and-handover
@@ -21,7 +12,10 @@ metadata:
21
12
 
22
13
  # Mission/Slice SOP — how you work a mission & slice
23
14
 
24
- Use this skill to actually **do** mission/slice work the way OpenRig expects: author the convention sections, track on the canonical files, prove on them, hand off through them, and survive compaction on them. **Do the work described here; do not merely explain the protocol.** The deterministic backstop is `rig scope audit` — the audit classifier is the source of truth for adherence. The conventions themselves live in ONE place: **`docs/reference/sdlc-conventions.md`** (shipped with the CLI package) — this skill teaches the flow; the SSOT defines the formats.
15
+ Use this skill to actually **do** mission/slice work the way OpenRig expects: author the convention sections, track on the canonical files, prove on them, hand off through them, and survive compaction on them. **Do the work described here; do not merely explain the protocol.** The deterministic backstop is `rig scope audit` — an **advisory, fail-open** check (it records and advises, never blocks a write; see Proportionality below), not an authority you serve. The conventions themselves live in ONE document: **`docs/reference/sdlc-conventions.md`** in the repo, materialized by the daemon at **`$OPENRIG_HOME/reference/sdlc-conventions.md`** (default `~/.openrig/reference/sdlc-conventions.md`) on an installed package — this skill teaches the flow; the SSOT defines the formats.
16
+
17
+ ## Proportionality — this SOP serves shipping; it is not the work itself
18
+ The working product is the deliverable. This bookkeeping exists so the work survives handoff, compaction, and review — nothing more. **Match it to stakes:** OpenRig core = full ceremony; Studio Box / SDK / app slices = pragmatic — the mini-requirements may BE the whole PRD, and a couple of honest, LOOKed proof lines beat an elaborate contract. The `rig scope audit` backstop is **advisory and fail-open** (its own SSOT says so): it never blocks a build and is not a gate you clear before proceeding. If you're spending more time on the convention files or the audit than on the running product, stop and go build. Running the full apparatus on a small change is the letter-worship failure, not diligence.
25
19
 
26
20
  ## The SDLC flow (intent → proof)
27
21
 
@@ -36,7 +30,10 @@ intent → mini-requirements + proof contract → (UI slices: mockups)
36
30
 
37
31
  1. **Record intent** verbatim in the slice's `## Intent` section (`rig scope slice create` scaffolds it — every template kind).
38
32
  2. **Author the mini-requirements + proof contract**: `## Mini-requirements` is the concise one-glance tier (approval starts there); `## Proof contract` is a checkbox list of promised deliverables, each written as an observable outcome. UI deliverables name their planned mockup. The IMPLEMENTATION-PRD opens with the mini-requirements; everything between intent and proof is **elastic** — for a small slice the mini-requirements may BE the whole PRD.
33
+ - **PARSER CONTRACT (README AND IMPLEMENTATION-PRD, from first draft — a parser contract, not stylistic):** each doc carries a verbatim, **undecorated** `## Mini-requirements` heading with a **numbered list**, and a verbatim, **undecorated** `## Proof contract` heading whose checkbox (`- [ ]`) lines are **character-identical** across the two files. `rig scope audit` parses the PRD's `## Proof contract`; a prose rollup (e.g. `## Required proof …`) or any renamed/decorated heading trips **`proof_contract_missing_or_malformed`** and forces a post-lock format patch. Never rename or decorate these two headings, and keep the PRD's checkbox lines byte-for-byte equal to the README's.
34
+ - **REFERENCE-NOT-RESTATE (public / runnable examples — an honesty rail, from first draft):** any example that shows output or a value the referenced file/command **derives** — repo/runtime counts, current-state totals, hashes, timestamps — must **reference the source/derivation, omit the volatile value, or pin an explicitly stable fixture**; never hardcode the live count/state in a public or shipped doc. "Illustrative" derived output is a lie on a timer: `OK registry (2 manifests)` goes false the instant an entry lands. Write the invariant form (`OK registry (<N> manifests)`, N = entries in `registry.json`) or name the fixture instead of the momentary number. Restated derivable state in a public doc is a defect `rig scope audit` will not catch — the author owns it.
39
35
  3. **Plan-lock**: `rig scope slice approve <slice> --scope spec` — "the PRD matches the intent; THIS artifact set is what gets built." One daemon-side write: frontmatter stamp + append-only audit row.
36
+ - **PRE-PLAN-LOCK SELF-CHECK (advisory, not a gate):** before requesting `--scope spec`, it's worth running `rig scope audit --mission <mission> --json` and clearing any real **format** defect (e.g. `proof_contract_missing_or_malformed`) so the parser can read your proof contract — that's a genuine machine-parsing need, cheap to fix. But the audit is fail-open: findings do NOT block the lock or the build, and you do NOT need a zero-findings score to proceed. Fix what's real, skip what isn't, keep moving.
40
37
  4. **Build the locked set** — look at the mockups, not just the spec text.
41
38
  5. **QA visual compare**: for each deliverable, load the planned mockup, produce the real artifact in a test/demo environment, visually compare, and record the verdict.
42
39
  6. **Drop proof**: `rig proof add <slice> --artifact-type qa --verdict PASS --candidate-sha <tip> --money-evidence "…" --evidences "1,3" --media "walk.webm,panel.png" --self-check "…"` — the C1 header's closed sets validate at drop time; `--evidences` joins the drop to its proof-contract items and `--media` names the curated proof/-relative media the drop stands behind (that pairing + media set is what the UI's DELIVERED section renders).
@@ -50,7 +47,7 @@ intent → mini-requirements + proof contract → (UI slices: mockups)
50
47
 
51
48
  ## The canonical files (the operating surface)
52
49
 
53
- > The canonical files below are the **operating surface of the work** — you track on them, prove on them, hand off through them, and survive compaction on them. They are NOT side-artifacts to "maintain"; keeping them current *is* the work.
50
+ > The canonical files below are the **operating surface of the work** — you track on them, prove on them, hand off through them, and survive compaction on them. Keep them current because that is what lets the work survive handoff, compaction, and review — but they **serve** the product, they are not the product. If you're polishing these files while the actual thing isn't shipping, you've inverted it: go build, then update them.
54
51
 
55
52
  - **README.md** (mission + slice) — the overview, OPENING with the convention sections (`## Intent` / `## Mini-requirements` / `## Proof contract`). The **mission README carries this SOP at its bottom.**
56
53
  - **IMPLEMENTATION-PRD.md** — the full PRD; opens with the mini-requirements; the `## Proof contract` here is what the UI's DELIVERED pairing joins proof against.
@@ -106,8 +103,8 @@ When you `rig capture` a pane, **greyed / ghost autocomplete suggestions are NOT
106
103
 
107
104
  ## Moment-of-truth checklist
108
105
 
109
- - **Starting a slice?** → intent recorded verbatim? mini-requirements + proof contract authored? mockups attached (UI slices)? plan locked (`--scope spec`)?
106
+ - **Starting a slice?** → intent recorded verbatim? **PRD carries a verbatim numbered `## Mini-requirements` + a verbatim `## Proof contract` whose `- [ ]` lines are character-identical to the README's** (parser contract)? **no example restates derivable state** — counts/hashes/timestamps referenced, omitted, or pinned to a stable fixture, never hardcoded (reference-not-restate)? mockups attached (UI slices)? ran `rig scope audit` and fixed any real **format** defect so the parser reads the proof contract (advisory — a clean score is NOT required to lock)?
110
107
  - **Finishing a slice?** → every proof-contract item has curated evidence via `rig proof add … --evidences --media` (C1 drops — never only hand-placed files)? PROGRESS updated? MISSION_NOTES `§1` refreshed? proof locked (`--scope delivery`)? Handed off via queue?
111
108
  - **Committing?** → PROGRESS updated?
112
109
  - **Compacting?** → filed your state in MISSION_NOTES?
113
- - **Starting on a mission?** → read the mission README (incl. this SOP) + MISSION_NOTES + `docs/reference/sdlc-conventions.md`?
110
+ - **Starting on a mission?** → read the mission README (incl. this SOP) + MISSION_NOTES + the conventions SSOT (`docs/reference/sdlc-conventions.md` in the repo, `$OPENRIG_HOME/reference/sdlc-conventions.md` on an installed package)?