@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,132 @@
1
+ ---
2
+ name: agent-starters
3
+ description: Use when creating, refreshing, packaging, inspecting, promoting, or deprecating a named per-seat starting point — Agent Starter manifest authoring, the 6-state lifecycle (captured → named → inspectable → used → promoted → deprecated), provenance honesty, and refusal rules. NOT a VM image; a managed starting point composed from agent role + startup context + optional native session source + provenance.
4
+ metadata:
5
+ openrig:
6
+ stage: factory-approved
7
+ sibling_skills:
8
+ - claude-compaction-restore
9
+ - mental-model-ha
10
+ - scope-recovery
11
+ - session-compaction-and-restore
12
+ - agent-startup-and-context-ingestion
13
+ - composable-priming-packs
14
+ - session-source-fork
15
+ - seat-continuity-and-handover
16
+ - claude-compact-in-place
17
+ - pre-maintenance-agent-preservation
18
+ ---
19
+
20
+ # Agent Starters
21
+
22
+ A named, reusable per-seat starting point. Composes an agent role, startup
23
+ context, optional native session source, and provenance into something a
24
+ user or rig can choose when creating, refreshing, or packaging a seat.
25
+
26
+ "Agent image" is the analogy. **Agent Starter is the cleaner product
27
+ noun.** This is NOT a VM image — it is a managed starting point for an
28
+ agent seat, with provenance you can inspect.
29
+
30
+ ## Use this when
31
+
32
+ - Creating a new seat from a known-good starting context.
33
+ - Refreshing a seat with `rig expand` and `starter_ref`.
34
+ - Authoring a new starter (registry entry).
35
+ - Inspecting an existing starter's provenance, freshness, or recommended status.
36
+ - Promoting / deprecating starters in the registry.
37
+ - Composing a starter with a Composable Priming Pack (record manifest id/version, runtime, source session id or transcript path, ready-check evidence, freshness state).
38
+
39
+ ## Don't use this when
40
+
41
+ - You want VM-style deterministic state capture. Starters don't capture VM state.
42
+ - You want to copy provider auth material into a starter. **Starters refer to session sources and context; they do NOT copy credentials.**
43
+
44
+ ## What makes a starter valuable
45
+
46
+ A starter is valuable when it is **functional** — it carries the context the seat needs to do its task well. Functional is the *only* measure of a good starter. Size is not: a smaller starter is not a better one, and a bigger one is not worse. Whatever it took for the seat to become genuinely capable at its job is the right starter — 80K tokens or 800K.
47
+
48
+ Capture the seat as it naturally is at a functional, proven point. Don't pad it with context the seat doesn't use, and — just as important — don't strip context out to make it smaller. Size is an *outcome* of what the seat needed, never a target.
49
+
50
+ Never compact, summarize, or shrink a seat in order to make or "lean" a starter. There is nothing valuable in "smaller," and compaction is lossy — you would trade away the exact capability the starter exists to preserve. (Compaction is a separate last-resort step for a seat genuinely near its context limit, with its own before/after plan — never part of capturing a starter.)
51
+
52
+ ## State model — 6 states
53
+
54
+ 1. **Captured** — a useful seat/session/context pattern is identified.
55
+ 2. **Named** — it becomes an Agent Starter with stable id and owner.
56
+ 3. **Inspectable** — runtime, context inputs, session source, and provenance are visible.
57
+ 4. **Used** — a rig member or `rig expand` operation starts from it.
58
+ 5. **Promoted** — evidence shows it is recommended for a role or bundle.
59
+ 6. **Deprecated** — replaced, stale, unsafe, or incompatible.
60
+
61
+ ## Failure modes (5)
62
+
63
+ 1. **Overclaiming image semantics** — UI/docs imply deterministic VM-style state capture. Say "starter," name what's included, show provenance.
64
+ 2. **Hidden provenance** — users can't tell what session, context, or spec a starter came from. **Refuse promotion until provenance is inspectable.**
65
+ 3. **Stale starter** — points at outdated doctrine, missing files, or invalid native session source. **Inspect must report staleness honestly.**
66
+ 4. **Secret leakage** — starter packages or displays provider auth material. **Refuse.** Refer to session sources and context, never copy credentials.
67
+ 5. **Runtime mismatch** — starter used with unsupported runtime. **Refuse with a clear error.**
68
+
69
+ ## Manifest shape (v0+v1 shipped)
70
+
71
+ ```yaml
72
+ agent_starters:
73
+ - id: velocity-reviewer-v1
74
+ runtime: claude-code
75
+ agent_ref: local:reviewer
76
+ context_refs:
77
+ - doctrine:advisor-orchestrator-mode-judgment
78
+ - convention:workstream-continuity
79
+ session_source:
80
+ mode: fork
81
+ ref:
82
+ kind: native_id
83
+ value: "<prior-native-session-id>"
84
+ ```
85
+
86
+ Member usage:
87
+
88
+ ```yaml
89
+ members:
90
+ - id: reviewer
91
+ starter_ref:
92
+ name: velocity-reviewer-v1
93
+ ```
94
+
95
+ When a starter points at a primed session produced from a Composable
96
+ Priming Pack, record:
97
+ - manifest id/version
98
+ - runtime
99
+ - source session id or transcript path
100
+ - ready-check evidence
101
+ - freshness state
102
+
103
+ ## Proof matrix
104
+
105
+ | Surface | Test type | Authority |
106
+ |---|---|---|
107
+ | Registry schema accepts minimal starter | unit | daemon or config-layer prototype |
108
+ | Inspect shows provenance and included context | unit / snapshot | daemon or CLI |
109
+ | Member can use `starter_ref` | integration | daemon |
110
+ | Unsupported runtime or stale source refuses honestly | unit + integration | daemon |
111
+ | No secret material copied into starter artifact | grep / fixture | tester |
112
+ | Bundle can include or reference starter | package inspection | bundle layer |
113
+
114
+ ## Dependencies on other primitives
115
+
116
+ - **Firm**: `session-source-fork` — native conversation-source continuity for fork-based starters
117
+ - **Firm**: `specification-system` — declarative starter and member references
118
+ - **Soft**: `rig-bundles-and-shareable-artifacts` — shareable starter packaging
119
+ - **Soft**: `context-engineering-and-retrieval` — richer declarative context assembly
120
+ - **Soft**: `seat-continuity-and-handover` — refresh and swap workflows over starters
121
+
122
+ ## Required-before-RSI
123
+
124
+ Agent Starters need queryable provenance and honest inspect output before
125
+ RSI loops can rely on them for seat refresh. A workflow must be able to
126
+ answer: "what starter did this seat use, what source session or context was
127
+ included, and is that starter still recommended?"
128
+
129
+ ## See also
130
+
131
+ - `session-source-fork` skill — low-level fork primitive that makes native session-based starters possible
132
+ - `composable-priming-packs` skill — manifest-driven layer for producing primed sessions starters reference
@@ -2,17 +2,22 @@
2
2
  name: agent-startup-and-context-ingestion
3
3
  description: Use when designing or auditing how an agent becomes useful after launch — AGENTS.md overlays, role files, skills, rig specs, workflow specs, startup checklists, refocus messages, "rig context" surface. Covers the 4 failure modes that make startup context fail (old rig spec misses current operating mode; current agents never told about new guidance; startup file as dumping ground; orchestrator transmits implementation without preserving product intent).
4
4
  metadata:
5
+ cli_surfaces_referenced:
6
+ - context
7
+ - whoami
5
8
  openrig:
6
9
  stage: factory-approved
7
- last_verified: "2026-05-04"
8
- distribution_scope: product-bound
9
- source_evidence: |
10
- Cross-runtime restore/reentry packet standard + externalized memory
11
- surfaces convention. Load at agent start; revisit after compaction.
12
10
  sibling_skills:
13
11
  - claude-compaction-restore
12
+ - mental-model-ha
13
+ - scope-recovery
14
+ - session-compaction-and-restore
15
+ - agent-starters
16
+ - composable-priming-packs
17
+ - session-source-fork
14
18
  - seat-continuity-and-handover
15
- transfer_test: pending
19
+ - claude-compact-in-place
20
+ - pre-maintenance-agent-preservation
16
21
  ---
17
22
 
18
23
  # Agent Startup and Context Ingestion
@@ -43,8 +48,8 @@ is scattered or stale, agents execute the wrong thing very efficiently.
43
48
  ## Don't use this when
44
49
 
45
50
  - The agent is being created via Agent Starter — the starter's manifest carries startup context
46
- - The work is artifact-backed mental-model rebuild from a packet — that's `claude-compaction-restore`
47
- - The intent is to ship reusable startup content as a skill — write the skill against the agentskills.io specification, not as inline startup prose
51
+ - The work is artifact-backed mental-model rebuild from a packet — that's `session-compaction-and-restore`
52
+ - The intent is to ship reusable startup content as a skill — that's `writing-skills-for-openrig`
48
53
 
49
54
  ## Failure modes (4)
50
55
 
@@ -71,15 +76,14 @@ reentry case, distinct from reusable Agent Starters / priming packs):
71
76
 
72
77
  ## Memory surfaces consumed at startup
73
78
 
74
- The primary surfaces a startup ingestion path reads:
79
+ Per the externalized-memory-surfaces convention's 13-row inventory:
75
80
 
76
- - AGENTS / role / CULTURE / startup overlays (the per-seat identity layer)
77
- - startup replay context (what the agent did before the current boot)
78
- - restore / reentry packets and Agent Starters (cross-runtime startup path)
81
+ - **Row 7** AGENTS/role/CULTURE/startup overlays (primary)
82
+ - **Row 3** — startup replay context (primary)
83
+ - **Row 12** — restore/reentry packets and Agent Starters (cross-runtime startup path)
79
84
 
80
- Authority-rank + read-vs-write posture governs which surfaces a
81
- startup-ingestion path can write vs only read; treat overlays as
82
- write-restricted unless your role explicitly authors them.
85
+ The umbrella's authority-rank + permission-posture columns govern which
86
+ surfaces a startup ingestion path can write vs only read.
83
87
 
84
88
  ## Startup files vs skills (the distinction)
85
89
 
@@ -89,7 +93,7 @@ Per `agent-startup-guide.md` (product reference doc) and the team handbook:
89
93
  |---|---|
90
94
  | Rig-specific, role-specific identity | Reusable SOPs / methodology / knowledge |
91
95
  | Tell agent WHO it is, WHAT it's working on, HOW this team operates | Tell agent HOW to do something (transferable across rigs) |
92
- | Examples: `role.md`, `CULTURE.md`, `startup/context.md` | Examples: `openrig-user`, `test-driven-development`, `dogfood` |
96
+ | Examples: `role.md`, `CULTURE.md`, `startup/context.md` | Examples: `openrig-user`, `test-driven-development`, `vault-user` |
93
97
  | Authored per-rig | Authored once, used everywhere |
94
98
 
95
99
  Don't put skill content in startup files. Don't put identity content
@@ -98,7 +102,11 @@ culture / pod / member / operator) handles the layering.
98
102
 
99
103
  ## See also
100
104
 
105
+ - `mission-slice-sop` skill — the universal operating procedure for working a mission/slice (the canonical PROGRESS/PROOF/MISSION_NOTES/MISSION_BRIEF files); every agent should reach for it at startup, so this general reading contract points at it here (do NOT duplicate the SOP into seat-specific startup files).
106
+ - `writing-skills-for-openrig` skill — authoring discipline for skill content (what doesn't belong in startup)
101
107
  - `forming-an-openrig-mental-model` skill — orientation for new agents
102
- - `claude-compaction-restore` skill — restore-time startup ingestion after compaction
103
- - `seat-continuity-and-handover` skill — packet shape that survives seat resets
104
- - https://agentskills.io/specification — the cross-runtime skill standard (what skill content should and shouldn't be)
108
+ - `session-compaction-and-restore` skill — restore-time startup ingestion
109
+ - `agent-starters` skill — reusable starter manifests that compose startup context
110
+ - `composable-priming-packs` skill manifests that produce primed sessions
111
+ - `externalized-memory-surfaces` skill — umbrella convention for memory surfaces this primitive consumes
112
+ - `openrig/docs/reference/agent-startup-guide.md` (product reference doc; not a skill) — the 7-layer additive startup model + delivery hints
@@ -0,0 +1,264 @@
1
+ ---
2
+ name: attention-queue
3
+ description: Coordination primitive for OpenRig. Per-agent queue files tracking in-flight work with explicit state transitions + handoff semantics + cross-agent composition. Prevents memory-loss drops; surfaces stalls mechanically; closes the feedback loop on handed-off work. Applied liberally by every agent on every kernel-supervised rig; composed views serve human attention, orch pod-load, rig pending-work.
4
+ status: L4-insight
5
+ authored-by: advisor-peer-observer@your-rig
6
+ date: 2026-04-13
7
+ cited-captures:
8
+ - improvements-inbox.md 2026-04-13T12:54:50Z — broadcast primitive RSI (same batching-by-theme cluster)
9
+ - Mission 4 cmux stall (2026-04-13 midday) — packet-design + queue-for-cross-rig coordination
10
+ metadata:
11
+ cli_surfaces_referenced:
12
+ - chatroom
13
+ - send
14
+ openrig:
15
+ stage: factory-approved
16
+ sibling_skills:
17
+ - queue-handoff
18
+ - workflow-runtime
19
+ - watchdog
20
+ - alignment-trace
21
+ - looping-workflows
22
+ - intake-routing
23
+ - human-in-the-loop
24
+ - dispatching-parallel-agents
25
+ - subagent-driven-development
26
+ - control-plane-capabilities
27
+ - status-not-chat-orchestrator
28
+ - control-plane-queue
29
+ - control-plane-watchdog
30
+ - control-plane-workflows
31
+ - control-plane-delivery-loop
32
+ - control-plane-rollout-manager
33
+ ---
34
+
35
+ # Attention queue
36
+
37
+ Use this skill when coordinating work that must survive compaction, cross-agent handoffs, or multi-hour stall detection. Applies when you'd otherwise narrate status to chat or rely on memory for pending items.
38
+
39
+ ## Live protocol override
40
+
41
+ Current live routing protocol:
42
+
43
+ - **Known target / explicit owner that should wake now**: `rigx queue handoff <destination> "<body>" --type handoff --urgency soon`
44
+ - **Passive durable assignment without wake-up**: `rigx queue create <destination> "<body>" --type handoff --urgency soon`
45
+ - **Ambiguous or raw intake**: `rigx stream emit "<body>" ...`
46
+ - **Direct dialogue / urgent 1:1 conversation**: `rig send ...`
47
+ - **Summoned 3+ party roundtable**: `rig chatroom ...`
48
+
49
+ Do not cargo-cult the earlier "stream everything with `--destination`" prototype shape into the
50
+ live control-plane. Stream is now the ambiguous-intake lane, not the universal lane.
51
+
52
+ ## Core shape (minimum-viable discipline)
53
+
54
+ 1. **Author a queue file at** `substrate/shared-docs/rigs/<your-rig>/state/<your-pod>/<your-member>.queue.md`. Same per-pod directory as your session log.
55
+ 2. **Every known-target hot-potato work handoff** should arrive via `rigx queue handoff`, not via `rig send`. Use `rigx queue create` only when you intentionally want a passive durable item without wake-up.
56
+ 3. **State transitions** (start → promote; finish → complete; stuck → block; hand off → handoff; completed handed-off work notifies source → handoff-complete) are appended to the entry body with timestamp. Never in-place rewrites.
57
+ 4. **Cross-rig reads permitted; cross-rig writes forbidden.** Pod-as-authority-boundary doctrine.
58
+
59
+ ### Live command surface note
60
+
61
+ When the queue control-plane wrapper is installed, treat queue identity as command-resolved, not
62
+ seat-name-guessed:
63
+
64
+ - `rigx queue whoami` resolves the durable queue that belongs to your current seat
65
+ - `rigx queue list --mine` shows your queue without guessing from member name
66
+
67
+ This matters for continuity successors such as `lead2` or `lead5`, which may intentionally share
68
+ the canonical `lead.queue.md` file instead of owning a separate `lead2.queue.md` or `lead5.queue.md`.
69
+
70
+ Known-target direct handoff on the live wrapper:
71
+
72
+ ```bash
73
+ rigx queue handoff orch-lead5@your-rig "Need PM shaping on queue attention loop" --type handoff --urgency soon
74
+ ```
75
+
76
+ Passive durable write without wake-up:
77
+
78
+ ```bash
79
+ rigx queue create orch-lead5@your-rig "Need PM shaping on queue attention loop" --type handoff --urgency soon
80
+ ```
81
+
82
+ ## Six operations
83
+
84
+ | Op | Effect |
85
+ |---|---|
86
+ | append | New entry (state=pending) on inbound request |
87
+ | promote | state=in-progress when you start work |
88
+ | complete | state=done with optional result |
89
+ | block | state=blocked + blocked-on=<id or condition> |
90
+ | handoff | state=handed-off + handed-off-to=<target>/<new-id>; send rig-send with `[queue-handoff:]` prefix to target |
91
+ | handoff-complete | target signals source that handed-off work finished (closes feedback loop) |
92
+ | escalate | walk authority chain when blocked past tier threshold |
93
+ | defer / drop | push-to-later or drop-with-rationale |
94
+
95
+ ## When is something a queue handoff?
96
+
97
+ **Queue handoff** (`rigx queue handoff`):
98
+ - Asks a known recipient to do new work
99
+ - Transfers ownership of pending work
100
+ - Names a deliverable + acceptance criteria
101
+
102
+ **NOT a queue handoff**:
103
+ - Wake-ping `1`
104
+ - PSA / broadcast / status update
105
+ - Ack / courtesy notification / diagnostic ping / reply to question
106
+ - Raw idea or bug where you do not yet know the right owner
107
+
108
+ If you do not know the correct owner, emit to stream instead of guessing.
109
+
110
+ ## Tier-based ack + notification rules
111
+
112
+ - **human-gate tier** (gated items; human-watching): mandatory ack on handoff; mandatory notification on completion
113
+ - **agent-coordination tier** (standard inter-agent work): recommended ack + notification
114
+ - **internal-self tier** (your own to-dos): optional
115
+
116
+ ## Read discipline
117
+
118
+ - Read your own queue at turn start before picking up new work
119
+ - Orchestrators read pod-member queues on wake cadence (`1` ping)
120
+ - Advisor-pod reads cross-rig queues for composed views + human-attention
121
+ - Past-threshold blocked entries surface during sweeps; execute escalate op if you can't self-unblock
122
+
123
+ Recommended turn-start queue commands on the live wrapper:
124
+
125
+ ```bash
126
+ rigx queue whoami
127
+ rigx queue list --mine
128
+ ```
129
+
130
+ ### Resume-from-idle state sweep
131
+
132
+ Agents returning from idle-standby (supervisor-wake-only pings; no substantive dispatch during the window) MUST sweep adjacent state before pulling new work. Minimum sweep:
133
+
134
+ - Supervisor-log tail (~200 lines) at `rigs/kernel/state/supervisor-log.md`
135
+ - human-attention.md at `substrate/shared-docs/human-attention.md`
136
+ - Any doctrine-decisions added since last-active (`rigs/kernel/state/doctrine-decisions/`)
137
+ - Partner queue files at `rigs/kernel/state/<pod>/<peer-member>.queue.md` (peer load-tracking for pairs)
138
+ - **Fleet-changes-feed** at `substrate/shared-docs/fleet-changes-feed.md` (pull-native rollout surface; catches any fleet-wide doctrine / skill / convention / operational changes that landed during idle; filter by scope = fleet-wide + your rig/pod)
139
+
140
+ **Trigger:** first active turn after ≥3 consecutive wake-only cycles OR on peer HA-check request. Sweep before responding to HA-check so the response is grounded in current reality, not stale memory.
141
+
142
+ **Rationale:** own-queue-at-turn-start catches own-queue drift; adjacent-state drift is a separate failure class that requires its own read discipline. Composable with own-queue sweep (both at same reading point); adds ~2-5 minutes of read time; cheap insurance against peer-driven HA-check round-trips.
143
+
144
+ **Worked example (genesis):** advisor-co-observer@your-rig after ~2h idle-standing-by on 2026-04-13 — 5-of-7 HA-check items out-of-sync when peer queried. Rule addition would have caught the drift pre-query via adjacent sweep on wake-to-active transition.
145
+
146
+ ## Status-not-chat corollary
147
+
148
+ Your chat pane is for operational work + ad-hoc human exchanges. Your STATUS lives in queue files + composed views. If you finish work + hit a gate-requiring next-action, do NOT narrate to chat + idle-wait. Queue-handoff to advisor-pod with `tier: human-gate`. The operator doesn't watch agent panes; they watch human-attention.md (composed from human-gate queue entries).
149
+
150
+ ## Composed views (4 layers)
151
+
152
+ - **Pod-load view** — who's loaded / blocked (orch reads)
153
+ - **Rig pending-work** — cross-pod roll-up
154
+ - **Fleet cross-rig** — host-wide
155
+ - **human-attention** — human-gate-tier items across all queues (advisor-pod composes)
156
+
157
+ v0: manual regen by orchestrators + advisor-pod.
158
+ v0.5: terminal-node watch scripts auto-regen.
159
+ v1: generative UI consuming structured queue data.
160
+
161
+ ## Codex-sandbox proxy-write pattern (sanctioned workaround)
162
+
163
+ Codex members whose sandbox blocks substrate writes can still participate via proxy-write:
164
+ - Codex authors content locally (e.g., `/tmp/<rig>-attention-queue/<member>.queue.md`)
165
+ - Claude counterpart physically writes to substrate with sha256-verified integrity check
166
+ - Subsequent state transitions via `[queue-update: <id> <new-state> <reason>]` rig-send from Codex to Claude-writer
167
+ - Authorship preserved; only write-access delegated. Distinct from peer-injection (which is forbidden).
168
+
169
+ ## Escalation mechanics
170
+
171
+ When entry stays blocked past tier threshold AND agent can't self-unblock:
172
+
173
+ 1. Identify escalation target per authority chain:
174
+ - Pod member → pod orchestrator
175
+ - Pod orch → rig orch-lead
176
+ - Rig orch-lead → kernel orch-lead OR advisor-pod (if human-gate)
177
+ - Skip-levels allowed when agent KNOWS correct target
178
+ 2. Create new entry in escalation-target's queue with `escalated-from: <source-id>`; state=pending; priority elevated
179
+ 3. Send handoff-shape rig-send: `[queue-escalate: <new-id>] <title> — blocked <Nh> on <reason>`
180
+ 4. Update own entry: state=escalated; escalated-to=<target>/<new-id>; transitions-log appended
181
+
182
+ Threshold guidance: 1h human-gate / 4h agent-coordination / 24h internal-self. Rigs may tighten.
183
+
184
+ ## Task-close RSI-check (flywheel trigger)
185
+
186
+ Every `complete` op on substantive work reflects briefly: "what did we learn? is this worth filing as L2 capture to improvements-inbox?"
187
+
188
+ Two outcomes; both leave evidence in the transition trail:
189
+
190
+ - **Novel observation worth filing:** append L2 capture entry to `rigs/kernel/state/improvements-inbox.md` per the v1 queue template (`state: pending` + transition trail started). Transition line in your own queue: `<ts> — RSI-check: filed <capture-id>`.
191
+ - **Nothing novel:** transition line in your own queue: `<ts> — RSI-check: none`.
192
+
193
+ Applies to substantive work-streams. Does NOT apply to:
194
+ - Wake-pings (`1`) — not a work-stream
195
+ - Trivial status updates — nothing to reflect on
196
+ - Pure acks / routing-map updates — no work done
197
+
198
+ Rationale: task-close is the deterministic interval that makes recursive-self-improvement mechanical rather than ad-hoc. Pattern named in skill-maturity-convention.md §"Task-close RSI-check discipline".
199
+
200
+ ## Push vs pull — when to use rig-send vs queue-write
201
+
202
+ Not every communication belongs in the receiver's chat pane. The discipline mirrors status-not-chat: most inter-agent signals can flow through queue files (pull) rather than rig-sends (push). Reduces noise; respects receiver's attention cycle.
203
+
204
+ **Sender's test:** *Does my message need the receiver's attention within their next turn cycle?*
205
+ - **Yes → push** via `rig send` (lands in chat; receiver processes on next turn)
206
+ - **No → pull** via queue-write (write to own queue OR receiver's queue via handoff; receiver sweeps at cadence)
207
+
208
+ ### Push (rig-send to chat) when:
209
+
210
+ - Receiver needs info NOW to unblock their work
211
+ - Question requires specific answer to proceed
212
+ - Handoff is past ack-threshold + tier=human-gate (mandatory-ack window)
213
+ - Blocker surfacing (can't self-unblock; need help from target)
214
+ - human-gate item needing surface to advisor-pod
215
+ - Destructive or time-critical coordination
216
+
217
+ ### Pull (queue-write only) when:
218
+
219
+ - Status update / adoption signal / cascade-complete ack
220
+ - Non-urgent ack (within tier threshold)
221
+ - Information that can batch in receiver's curator sweep
222
+ - Broadcast-receipt confirmation (receiver's cadence catches it)
223
+ - Observed patterns or captures with no time pressure
224
+ - Resync material for HA peers (they sweep on resume-from-idle)
225
+
226
+ ### Why this matters
227
+
228
+ Push-as-default floods the receiver's chat pane with status that could be pulled. Today's rollout volume proved this: during attention-queue + EMM cascades, most acks arrived as push (rig-sends) when they could have been pull (queue-writes). Receiver (advisor-pod) had to process each ping; most were status signals needing no action.
229
+
230
+ Pull-over-push is the queue primitive's whole point. Status lives in queue files; readers sweep at cadence; only genuine unblockers + gate-surfaces push to chat.
231
+
232
+ ### Worked example
233
+
234
+ orch-lead@your-rig ack'd attention-queue cascade:
235
+ - **Push version (what happened):** `rig send advisor-peer-observer@your-rig "[queue-handoff-ack: ...] ... cascaded to 8 pod members ..."` → lands in my chat; I read immediately; process the status
236
+ - **Pull version (what should happen):** write ack-receipt to `rigs/openrig-build/state/orch/lead.queue.md` as state-transition on their adoption entry; I sweep their queue on my curator cadence; pick up the ack without chat-ping
237
+
238
+ Ack-receipts for status are pull-native. Handoff-complete notifications for human-gate items stay push (they close feedback loops on time-sensitive work).
239
+
240
+ ### Corollary — orchestrator-to-advisor cadence
241
+
242
+ Orchestrators writing to their own queue files lets advisor-pod read without being interrupted. The curator-sweep pattern (advisor reads pod queues on their cadence) is the canonical pull mechanism. Push only when time-matters.
243
+
244
+ ## Anti-patterns (don't do these)
245
+
246
+ - **Chat-as-status** — narrating status/gates to your chat pane + idle-waiting. Use queue + human-attention instead.
247
+ - **Duplicate-storage** — writing the same fact in queue + session-log + chat + mission-control. Queue is authoritative for in-flight state.
248
+ - **Peer-injection** — writing directly to another agent's queue without their authorship. Only handoff op moves work cross-queue.
249
+ - **Silent drops** — don't leave items in pending forever without state transitions. defer or drop with rationale.
250
+ - **Global queue** — don't try to make one queue for everyone. Per-agent primary; compose for views.
251
+
252
+ ## Maturity status
253
+
254
+ **L4-insight** per skill-maturity-convention. Applied liberally across the host; evolving via observation. Feedback loop: RSI filings reshape this skill; demotion valid if convention reveals wrong shape; promotion to L5-canon requires architect+reviewer pair-review per HOST-TOPOLOGY §7 SOP.
255
+
256
+ Rollout date: 2026-04-13 host-wide adoption. 48h observation cycle active; RSI with learnings due ~2026-04-15.
257
+
258
+ ## Related
259
+
260
+ - Spec (full reference): the internal attention-queue spec
261
+ - Skill-maturity convention: `substrate/shared-docs/skill-maturity-convention.md`
262
+ - Config-wrapper-code loop doctrine: `config-wrapper-code-loop` skill
263
+ - HOST-TOPOLOGY §4 context-sharing patterns — attention queue is a new pattern here
264
+ - SUBSTRATE-CONVENTIONS §7 HA session logs — queue lives in same per-pod directory
@@ -0,0 +1,190 @@
1
+ ---
2
+ name: cross-host-rig-commands
3
+ description: Use when issuing `rig` commands against a remote host via `--host <id>` flag (single-hop SSH to a host declared in `~/.openrig/hosts.yaml`). Covers the 4 structured failure modes (ssh-unreachable / permission-gate / remote-daemon-unreachable / remote-command-failed), the `--verify` honest pass-through (SSH success is NOT verify success), and the host-registry shape. v0 supports `rig send / capture / ps / whoami --host <id>`.
4
+ metadata:
5
+ cli_surfaces_referenced:
6
+ - capture
7
+ - daemon start
8
+ - host list
9
+ - host show
10
+ - ps
11
+ - send
12
+ - whoami
13
+ openrig:
14
+ stage: factory-approved
15
+ sibling_skills:
16
+ - rig-lifecycle
17
+ - topology-mutation-and-seat-management
18
+ - seat-scaling-and-specialization
19
+ - sidecar-operator
20
+ - rig-bundles-and-shareable-artifacts
21
+ - specification-system
22
+ - extension-and-user-workspace
23
+ ---
24
+
25
+ # Cross-Host Rig Commands
26
+
27
+ A first-class OpenRig surface for issuing `rig` commands against a
28
+ remote host via single-hop SSH. v0 productizes the existing SSH-envelope
29
+ operator pattern (`ssh <host> rig <cmd>`) with declared host identity,
30
+ explicit cross-host invocation path, preserved `--verify` semantics, and
31
+ 4 named failure modes.
32
+
33
+ **Current-host note (2026-07-14):** this skill still preserves the original
34
+ SSH-v0 doctrine below, but the live host registry may also contain HTTP
35
+ read-through/tunnel entries such as `your-vm` and `your-other-vm`. Use the
36
+ host registry entry as ground truth for transport shape, and use
37
+ `conventions/multi-host-naming/README.md` for host-id naming. HTTP entries
38
+ require `url` plus exactly one of `bearer_file` or `bearer_env`.
39
+
40
+ **v0 is CLI-side shell-out only — `packages/daemon/` is NOT touched.**
41
+ The remote host has its own managed `rig` available on `$PATH`.
42
+
43
+ ## Use this when
44
+
45
+ - Driving a Tart VM from the host (the immediate cross-host consumer)
46
+ - Operating Mac host A against Mac host B
47
+ - Reading remote state via `rig ps --host` / `rig whoami --host`
48
+ - Sending or capturing on a remote rig session (`rig send/capture --host <id>`)
49
+ - Authoring a `~/.openrig/hosts.yaml` registry entry
50
+
51
+ ## Don't use this when
52
+
53
+ - The target is local. Don't pass `--host` for local commands.
54
+ - You need multi-hop SSH (host A → host B → host C). v0 is single-hop only.
55
+ - You want reverse direction (remote initiates back to local). v0 is originator-pull only.
56
+ - Cross-host **seat handover** (moving a durable owned seat across hosts) — deferred to higher-level primitives. (Cross-host **queue writes**, by contrast, now ship — see "Cross-host queue writes" below.)
57
+ - The transport isn't SSH. v0 supports `transport: ssh` only.
58
+
59
+ ## Cross-host queue writes (updated 2026-07-21 vs main d37a08ad)
60
+
61
+ Cross-host **queue writes** are no longer deferred — they ship — but the rule
62
+ differs from the interactive verbs (`send`/`capture`/`ps`/`whoami`):
63
+
64
+ - **Queue writes are EXPLICIT-only.** Address the target host explicitly with
65
+ `--host <id>` or the `member@rig@<host>` form. A queue write **never** follows a
66
+ persisted host selection.
67
+ - **`host select` stickiness does NOT apply to queue.** `host select` affects the
68
+ `resolveEffectiveHost` verbs (`send`/`capture`/`ps`/`whoami`) — those follow the
69
+ selected host — but a queue write ignores it and requires explicit addressing.
70
+ - **Host address parsing differs** between the interactive verbs and the queue
71
+ verbs; do not assume the interactive form carries over. When unsure, address the
72
+ host explicitly.
73
+
74
+ ## Host registry shape (`~/.openrig/hosts.yaml`)
75
+
76
+ Host ids should follow the OpenRig-work multi-host naming convention:
77
+ `conventions/multi-host-naming/README.md`. In this environment that means
78
+ physical hosts such as `your-vm`, local OpenRig development VMs such as
79
+ `your-vm`, persistent product VMs such as `your-other-vm`, and VPS hosts such
80
+ as `your-vps`. Keep old aliases during migration until no live routing
81
+ depends on them.
82
+
83
+ ```yaml
84
+ hosts:
85
+ - id: a-test-vm
86
+ transport: ssh # v0 supports "ssh" only
87
+ target: a-test-vm.local # DNS name, SSH config alias, or IP
88
+ user: wrandom # optional
89
+ notes: "Tart VM" # optional
90
+ - id: laptop-b
91
+ transport: ssh
92
+ target: laptop-b.tail-scale-net
93
+ user: wrandom
94
+ ```
95
+
96
+ Validation rules:
97
+
98
+ - `hosts` required, non-null array
99
+ - Each entry: `id` required (non-empty, unique), `transport` required (`ssh` only), `target` required
100
+ - `user` and `notes` optional
101
+ - Operator-managed file; v0 does NOT include any sub-command to add/remove/list hosts (operators edit YAML directly)
102
+ - Missing or invalid file returns a clear error pointing at the canonical path
103
+
104
+ ## CLI surface (v0 shipped)
105
+
106
+ ```bash
107
+ rig send <session> "msg" --host <id> --verify
108
+ rig capture <session> --host <id>
109
+ rig ps --host <id> [--nodes] [...]
110
+ rig whoami --host <id>
111
+ ```
112
+
113
+ Forwards every shaping flag (`--nodes`, `--full`, `--limit`, `--fields`,
114
+ `--summary`, `--filter`, `--json`) to the remote `rig` invocation. The
115
+ remote rig's output is verbatim passthrough on success.
116
+
117
+ ## The 4 structured failure modes (load-bearing API contract)
118
+
119
+ The CLI distinguishes 4 failure modes; operators get an actionable error
120
+ per mode; JSON output preserves the `failedStep` enum:
121
+
122
+ | Mode | Cause | Action |
123
+ |---|---|---|
124
+ | `ssh-unreachable` | SSH itself failed (connection refused, host key mismatch, DNS failure, timeout) | Verify SSH access and the registry entry |
125
+ | `permission-gate` | SSH hit auth/permission gate (Permission denied, Keychain) | Error includes hint to keychain-over-SSH field note (L4-3 D6) |
126
+ | `remote-daemon-unreachable` | SSH succeeded but remote `rig` reported the remote daemon was not reachable | `ssh <target> rig daemon start` |
127
+ | `remote-command-failed` | SSH succeeded but remote `rig` exited non-zero for some other reason; remote stderr is surfaced | Read remote stderr; debug remote command |
128
+
129
+ Each is distinct and routable. Don't conflate them.
130
+
131
+ ## `--verify` honest pass-through (load-bearing)
132
+
133
+ `--verify` against a remote target must:
134
+
135
+ - **Propagate** the verification request to the remote daemon (or remote `rig` invocation that talks to it)
136
+ - **Bring back a structured verification result** (true/false + reason if false), NOT just SSH exit code 0
137
+ - **Distinguish "SSH succeeded but verify returned false" from "SSH itself failed"** — these are different operator actions
138
+
139
+ **SSH success is NOT verify success.** The remote rig is authoritative
140
+ on `--verify`; its `Verified: yes/no` line is surfaced verbatim. Verified
141
+ at 3 layers (executor unit, command integration, source impl).
142
+
143
+ ## Hard boundaries (do-not list)
144
+
145
+ - **Do NOT collapse `--verify` honest result into SSH exit code.** Operators and agents rely on the distinction.
146
+ - **Do NOT silently retry SSH failures inside the primitive.** Surface them; let the caller decide.
147
+ - **Do NOT introduce non-SSH transports in v0.** Goal is productizing the existing shipped pattern, not replacing it.
148
+ - **Do NOT touch host-side daemon code as part of v0.** Cross-host shape is on the originator side.
149
+
150
+ ## Cross-host annotation
151
+
152
+ Every cross-host invocation is observable as cross-host:
153
+
154
+ - **Operator output**: `[via host=<id> (<target>)]` annotation
155
+ - **JSON output**: `cross_host: { host, target }` field
156
+
157
+ Annotation is PRESENT when `--host` is set and ABSENT otherwise
158
+ (compat regression).
159
+
160
+ ## Currently shipped (v0) vs deferred
161
+
162
+ Shipped at openrig `cdce3a6` (2026-04-30):
163
+ - `--host <id>` flag on `rig send / capture / ps / whoami` (initial 2 commands; promoted to 4 at `6b7043a` same day)
164
+ - Read-only host registry validation
165
+ - Single-hop SSH executor with 4-mode `failedStep` enum
166
+ - `--verify` honest pass-through
167
+ - Cross-host annotation (operator + JSON)
168
+ - Daemon untouched
169
+
170
+ Deferred:
171
+ - Tier 2 real-runtime cross-host proof (disposable Tart VM cycle)
172
+ - `rig host list / show` read-only sub-namespace (only if host count grows past comfortable manual editing)
173
+ - Non-SSH transports
174
+ - Multi-hop SSH
175
+ - Reverse direction (remote initiates)
176
+ - Connection pooling/caching
177
+
178
+ ## See also
179
+
180
+ - `seat-continuity-and-handover` skill — host-aware seat-binding semantics for cross-host handover (deferred to v1 on top of this v0 baseline)
181
+ - `openrig-user` skill — the local CLI surface that cross-host commands wrap
182
+
183
+ ## Sender identity is ASYMMETRIC (verified vs current main, 2026-07-25)
184
+
185
+ The `@host` sugar is **target-addressing only**, not sender-identity. A cross-host
186
+ message's **From:** is `member@rig` — the sender carries **NO `@host` suffix**. The target
187
+ supports `member@rig@<host>` for addressing; the sender does not reflect its own host in
188
+ `From:`. **Do NOT teach or expect a host-qualified `from`** (in openrig-user / operator send
189
+ docs or anywhere) until that core gap is fixed. (pm@your-rig verified this against
190
+ current main, 2026-07-25 — a known asymmetry, not a doc error to paper over.)