@openrig/cli 0.4.6 → 0.4.8

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 (472) 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/applying-a-permission-policy/SKILL.md +120 -0
  5. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +9 -6
  6. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +11 -72
  7. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/restore-from-jsonl.mjs +0 -0
  8. package/daemon/assets/plugins/openrig-core/skills/delegating-work/SKILL.md +43 -0
  9. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +36 -22
  10. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +108 -0
  11. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +7 -13
  12. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +88 -0
  13. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +189 -105
  14. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +26 -9
  15. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +11 -9
  16. package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +162 -0
  17. package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +165 -0
  18. package/daemon/dist/adapters/claude-code-adapter.d.ts +0 -9
  19. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  20. package/daemon/dist/adapters/claude-code-adapter.js +13 -46
  21. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  22. package/daemon/dist/adapters/claude-resume.d.ts +1 -1
  23. package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
  24. package/daemon/dist/adapters/claude-resume.js +8 -2
  25. package/daemon/dist/adapters/claude-resume.js.map +1 -1
  26. package/daemon/dist/adapters/cmux-transport.d.ts.map +1 -1
  27. package/daemon/dist/adapters/cmux-transport.js +8 -1
  28. package/daemon/dist/adapters/cmux-transport.js.map +1 -1
  29. package/daemon/dist/adapters/cmux.d.ts +9 -0
  30. package/daemon/dist/adapters/cmux.d.ts.map +1 -1
  31. package/daemon/dist/adapters/cmux.js +21 -0
  32. package/daemon/dist/adapters/cmux.js.map +1 -1
  33. package/daemon/dist/adapters/codex-resume.d.ts +1 -1
  34. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  35. package/daemon/dist/adapters/codex-resume.js +4 -2
  36. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  37. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +3 -0
  38. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  39. package/daemon/dist/adapters/codex-runtime-adapter.js +30 -9
  40. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  41. package/daemon/dist/adapters/pi-resume.d.ts +1 -1
  42. package/daemon/dist/adapters/pi-resume.d.ts.map +1 -1
  43. package/daemon/dist/adapters/pi-resume.js +7 -2
  44. package/daemon/dist/adapters/pi-resume.js.map +1 -1
  45. package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -1
  46. package/daemon/dist/adapters/pi-runtime-adapter.js +4 -1
  47. package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
  48. package/daemon/dist/adapters/yolo-mode.d.ts +23 -0
  49. package/daemon/dist/adapters/yolo-mode.d.ts.map +1 -0
  50. package/daemon/dist/adapters/yolo-mode.js +49 -0
  51. package/daemon/dist/adapters/yolo-mode.js.map +1 -0
  52. package/daemon/dist/build-info.js +3 -3
  53. package/daemon/dist/db/migrations/055_node_permission_policy.d.ts +13 -0
  54. package/daemon/dist/db/migrations/055_node_permission_policy.d.ts.map +1 -0
  55. package/daemon/dist/db/migrations/055_node_permission_policy.js +17 -0
  56. package/daemon/dist/db/migrations/055_node_permission_policy.js.map +1 -0
  57. package/daemon/dist/db/migrations/056_rig_permission_policy.d.ts +13 -0
  58. package/daemon/dist/db/migrations/056_rig_permission_policy.d.ts.map +1 -0
  59. package/daemon/dist/db/migrations/056_rig_permission_policy.js +17 -0
  60. package/daemon/dist/db/migrations/056_rig_permission_policy.js.map +1 -0
  61. package/daemon/dist/db/migrations/057_node_policy_provenance.d.ts +19 -0
  62. package/daemon/dist/db/migrations/057_node_policy_provenance.d.ts.map +1 -0
  63. package/daemon/dist/db/migrations/057_node_policy_provenance.js +26 -0
  64. package/daemon/dist/db/migrations/057_node_policy_provenance.js.map +1 -0
  65. package/daemon/dist/db/migrations/058_rig_policy_provenance.d.ts +15 -0
  66. package/daemon/dist/db/migrations/058_rig_policy_provenance.d.ts.map +1 -0
  67. package/daemon/dist/db/migrations/058_rig_policy_provenance.js +22 -0
  68. package/daemon/dist/db/migrations/058_rig_policy_provenance.js.map +1 -0
  69. package/daemon/dist/domain/builtin-policy-reference.d.ts +13 -0
  70. package/daemon/dist/domain/builtin-policy-reference.d.ts.map +1 -0
  71. package/daemon/dist/domain/builtin-policy-reference.js +58 -0
  72. package/daemon/dist/domain/builtin-policy-reference.js.map +1 -0
  73. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +3 -0
  74. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  75. package/daemon/dist/domain/claude-compaction-enforcer.js +19 -3
  76. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  77. package/daemon/dist/domain/cmux-layout-service.d.ts +36 -0
  78. package/daemon/dist/domain/cmux-layout-service.d.ts.map +1 -1
  79. package/daemon/dist/domain/cmux-layout-service.js +100 -28
  80. package/daemon/dist/domain/cmux-layout-service.js.map +1 -1
  81. package/daemon/dist/domain/context-monitor.d.ts +2 -0
  82. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  83. package/daemon/dist/domain/context-monitor.js +14 -0
  84. package/daemon/dist/domain/context-monitor.js.map +1 -1
  85. package/daemon/dist/domain/feed/attention-aggregator.js +1 -1
  86. package/daemon/dist/domain/feed/attention-aggregator.js.map +1 -1
  87. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -1
  88. package/daemon/dist/domain/hosts/hosts-registry-reader.js +12 -10
  89. package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
  90. package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts.map +1 -1
  91. package/daemon/dist/domain/hosts/hosts-registry-writer.js +3 -2
  92. package/daemon/dist/domain/hosts/hosts-registry-writer.js.map +1 -1
  93. package/daemon/dist/domain/hosts/read-through.js +1 -1
  94. package/daemon/dist/domain/hosts/read-through.js.map +1 -1
  95. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -1
  96. package/daemon/dist/domain/hosts/remote-daemon-http.js +8 -5
  97. package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -1
  98. package/daemon/dist/domain/native-resume-probe.d.ts +1 -1
  99. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  100. package/daemon/dist/domain/native-resume-probe.js +11 -4
  101. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  102. package/daemon/dist/domain/node-inventory.d.ts +3 -12
  103. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  104. package/daemon/dist/domain/node-inventory.js +57 -15
  105. package/daemon/dist/domain/node-inventory.js.map +1 -1
  106. package/daemon/dist/domain/permission-policy/policy-ref.d.ts +89 -0
  107. package/daemon/dist/domain/permission-policy/policy-ref.d.ts.map +1 -0
  108. package/daemon/dist/domain/permission-policy/policy-ref.js +171 -0
  109. package/daemon/dist/domain/permission-policy/policy-ref.js.map +1 -0
  110. package/daemon/dist/domain/permission-policy/policy-spec.d.ts +34 -0
  111. package/daemon/dist/domain/permission-policy/policy-spec.d.ts.map +1 -0
  112. package/daemon/dist/domain/permission-policy/policy-spec.js +106 -0
  113. package/daemon/dist/domain/permission-policy/policy-spec.js.map +1 -0
  114. package/daemon/dist/domain/plugin-vendor-service.d.ts +2 -0
  115. package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
  116. package/daemon/dist/domain/plugin-vendor-service.js +23 -0
  117. package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
  118. package/daemon/dist/domain/projection-lane.d.ts +7 -0
  119. package/daemon/dist/domain/projection-lane.d.ts.map +1 -0
  120. package/daemon/dist/domain/projection-lane.js +28 -0
  121. package/daemon/dist/domain/projection-lane.js.map +1 -0
  122. package/daemon/dist/domain/ps-projection.d.ts +19 -0
  123. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  124. package/daemon/dist/domain/ps-projection.js +46 -6
  125. package/daemon/dist/domain/ps-projection.js.map +1 -1
  126. package/daemon/dist/domain/queue-repository.d.ts +14 -10
  127. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  128. package/daemon/dist/domain/queue-repository.js +33 -12
  129. package/daemon/dist/domain/queue-repository.js.map +1 -1
  130. package/daemon/dist/domain/restore-orchestrator.d.ts +14 -0
  131. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  132. package/daemon/dist/domain/restore-orchestrator.js +90 -6
  133. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  134. package/daemon/dist/domain/review/compose.d.ts +77 -4
  135. package/daemon/dist/domain/review/compose.d.ts.map +1 -1
  136. package/daemon/dist/domain/review/compose.js +152 -16
  137. package/daemon/dist/domain/review/compose.js.map +1 -1
  138. package/daemon/dist/domain/review/fleet-compose.js +1 -1
  139. package/daemon/dist/domain/review/fleet-compose.js.map +1 -1
  140. package/daemon/dist/domain/review/gather.d.ts +1 -1
  141. package/daemon/dist/domain/review/gather.d.ts.map +1 -1
  142. package/daemon/dist/domain/review/gather.js +92 -67
  143. package/daemon/dist/domain/review/gather.js.map +1 -1
  144. package/daemon/dist/domain/review/proof-io.d.ts +2 -0
  145. package/daemon/dist/domain/review/proof-io.d.ts.map +1 -0
  146. package/daemon/dist/domain/review/proof-io.js +38 -0
  147. package/daemon/dist/domain/review/proof-io.js.map +1 -0
  148. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  149. package/daemon/dist/domain/rig-expansion-service.js +10 -1
  150. package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  151. package/daemon/dist/domain/rig-repository.d.ts +45 -0
  152. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  153. package/daemon/dist/domain/rig-repository.js +75 -1
  154. package/daemon/dist/domain/rig-repository.js.map +1 -1
  155. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  156. package/daemon/dist/domain/rigspec-codec.js +6 -0
  157. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  158. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  159. package/daemon/dist/domain/rigspec-exporter.js +8 -0
  160. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  161. package/daemon/dist/domain/rigspec-instantiator.d.ts +18 -1
  162. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  163. package/daemon/dist/domain/rigspec-instantiator.js +202 -10
  164. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  165. package/daemon/dist/domain/rigspec-preflight.d.ts +11 -0
  166. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  167. package/daemon/dist/domain/rigspec-preflight.js +35 -1
  168. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  169. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  170. package/daemon/dist/domain/rigspec-schema.js +25 -0
  171. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  172. package/daemon/dist/domain/runtime-adapter.d.ts +5 -0
  173. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  174. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  175. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +8 -0
  176. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -0
  177. package/daemon/dist/domain/scope/plan-lock-artifacts.js +57 -0
  178. package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -0
  179. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +38 -0
  180. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -0
  181. package/daemon/dist/domain/scope/scaffold-placeholder.js +98 -0
  182. package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -0
  183. package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  184. package/daemon/dist/domain/scope/scope-approve.js +22 -1
  185. package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  186. package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  187. package/daemon/dist/domain/scope/scope-audit.js +57 -20
  188. package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  189. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  190. package/daemon/dist/domain/seat-handover-service.js +7 -1
  191. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  192. package/daemon/dist/domain/session-transport.d.ts +17 -0
  193. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  194. package/daemon/dist/domain/session-transport.js +44 -0
  195. package/daemon/dist/domain/session-transport.js.map +1 -1
  196. package/daemon/dist/domain/slices/qitem-membership.d.ts +17 -0
  197. package/daemon/dist/domain/slices/qitem-membership.d.ts.map +1 -0
  198. package/daemon/dist/domain/slices/qitem-membership.js +60 -0
  199. package/daemon/dist/domain/slices/qitem-membership.js.map +1 -0
  200. package/daemon/dist/domain/slices/slice-detail-projector.d.ts +5 -0
  201. package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
  202. package/daemon/dist/domain/slices/slice-detail-projector.js +157 -11
  203. package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
  204. package/daemon/dist/domain/slices/slice-indexer.d.ts +86 -0
  205. package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
  206. package/daemon/dist/domain/slices/slice-indexer.js +422 -45
  207. package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
  208. package/daemon/dist/domain/startup-orchestrator.d.ts +9 -0
  209. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  210. package/daemon/dist/domain/startup-orchestrator.js +71 -3
  211. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  212. package/daemon/dist/domain/successor-session-launcher.d.ts +4 -0
  213. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  214. package/daemon/dist/domain/successor-session-launcher.js +2 -0
  215. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  216. package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts +12 -11
  217. package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts.map +1 -1
  218. package/daemon/dist/domain/terminal/cmux-provider-adapter.js +61 -28
  219. package/daemon/dist/domain/terminal/cmux-provider-adapter.js.map +1 -1
  220. package/daemon/dist/domain/terminal/herdr-adapter.d.ts +27 -10
  221. package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
  222. package/daemon/dist/domain/terminal/herdr-adapter.js +74 -33
  223. package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
  224. package/daemon/dist/domain/transcript-capture.d.ts +3 -0
  225. package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
  226. package/daemon/dist/domain/transcript-capture.js +28 -0
  227. package/daemon/dist/domain/transcript-capture.js.map +1 -1
  228. package/daemon/dist/domain/transcript-store.d.ts +10 -0
  229. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  230. package/daemon/dist/domain/transcript-store.js +26 -0
  231. package/daemon/dist/domain/transcript-store.js.map +1 -1
  232. package/daemon/dist/domain/types.d.ts +21 -0
  233. package/daemon/dist/domain/types.d.ts.map +1 -1
  234. package/daemon/dist/domain/types.js.map +1 -1
  235. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  236. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +9 -4
  237. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  238. package/daemon/dist/domain/workspace/workspace-doctor.js +1 -1
  239. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  240. package/daemon/dist/routes/agent-images.d.ts.map +1 -1
  241. package/daemon/dist/routes/agent-images.js +2 -0
  242. package/daemon/dist/routes/agent-images.js.map +1 -1
  243. package/daemon/dist/routes/mission-control.js +1 -1
  244. package/daemon/dist/routes/mission-control.js.map +1 -1
  245. package/daemon/dist/routes/missions.d.ts +7 -0
  246. package/daemon/dist/routes/missions.d.ts.map +1 -1
  247. package/daemon/dist/routes/missions.js +6 -1
  248. package/daemon/dist/routes/missions.js.map +1 -1
  249. package/daemon/dist/routes/ps.d.ts.map +1 -1
  250. package/daemon/dist/routes/ps.js +5 -1
  251. package/daemon/dist/routes/ps.js.map +1 -1
  252. package/daemon/dist/routes/queue.d.ts.map +1 -1
  253. package/daemon/dist/routes/queue.js +9 -2
  254. package/daemon/dist/routes/queue.js.map +1 -1
  255. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  256. package/daemon/dist/routes/rigs.js +29 -10
  257. package/daemon/dist/routes/rigs.js.map +1 -1
  258. package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  259. package/daemon/dist/routes/scope-audit.js +141 -135
  260. package/daemon/dist/routes/scope-audit.js.map +1 -1
  261. package/daemon/dist/routes/sessions.js +2 -1
  262. package/daemon/dist/routes/sessions.js.map +1 -1
  263. package/daemon/dist/routes/slices.d.ts.map +1 -1
  264. package/daemon/dist/routes/slices.js +48 -38
  265. package/daemon/dist/routes/slices.js.map +1 -1
  266. package/daemon/dist/routes/transcripts.d.ts.map +1 -1
  267. package/daemon/dist/routes/transcripts.js +62 -33
  268. package/daemon/dist/routes/transcripts.js.map +1 -1
  269. package/daemon/dist/startup.d.ts.map +1 -1
  270. package/daemon/dist/startup.js +42 -12
  271. package/daemon/dist/startup.js.map +1 -1
  272. package/daemon/docs/reference/agent-startup-guide.md +1 -0
  273. package/daemon/docs/reference/rig-spec.md +19 -0
  274. package/daemon/policies/builtin/locked.policy.md +24 -0
  275. package/daemon/policies/builtin/open.policy.md +24 -0
  276. package/daemon/policies/builtin/standard.policy.md +25 -0
  277. package/daemon/policies/builtin/yolo.policy.md +20 -0
  278. package/daemon/policies/examples/my-cautious-dev.policy.md +40 -0
  279. package/daemon/specs/agents/apps/vault-specialist/agent.yaml +2 -1
  280. package/daemon/specs/agents/conveyor/builder/agent.yaml +2 -1
  281. package/daemon/specs/agents/conveyor/lead/agent.yaml +2 -1
  282. package/daemon/specs/agents/conveyor/planner/agent.yaml +2 -1
  283. package/daemon/specs/agents/conveyor/reviewer/agent.yaml +2 -1
  284. package/daemon/specs/agents/design/product-designer/agent.yaml +12 -2
  285. package/daemon/specs/agents/development/implementer/agent.yaml +12 -2
  286. package/daemon/specs/agents/development/qa/agent.yaml +12 -2
  287. package/daemon/specs/agents/development/qa/guidance/role.md +1 -0
  288. package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +2 -1
  289. package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +2 -1
  290. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +12 -2
  291. package/daemon/specs/agents/product-management/pm/agent.yaml +1 -2
  292. package/daemon/specs/agents/research/analyst/agent.yaml +2 -1
  293. package/daemon/specs/agents/research/synthesizer/agent.yaml +2 -1
  294. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +12 -2
  295. package/daemon/specs/agents/shared/agent.yaml +5 -8
  296. package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +1 -8
  297. package/daemon/specs/agents/shared/skills/core/agent-starters/SKILL.md +132 -0
  298. package/daemon/{assets/plugins/openrig-core/skills → specs/agents/shared/skills/core}/agent-startup-and-context-ingestion/SKILL.md +27 -19
  299. package/daemon/specs/agents/shared/skills/core/attention-queue/SKILL.md +264 -0
  300. package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +190 -0
  301. package/daemon/specs/agents/shared/skills/core/human-in-the-loop/SKILL.md +104 -0
  302. package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +23 -8
  303. package/daemon/specs/agents/shared/skills/core/openrig-cmux/SKILL.md +0 -5
  304. package/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md +1 -6
  305. package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +460 -0
  306. package/daemon/specs/agents/shared/skills/core/rig-bundles-and-shareable-artifacts/SKILL.md +101 -0
  307. package/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md +22 -11
  308. package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +160 -0
  309. package/daemon/specs/agents/shared/skills/core/specification-system/SKILL.md +103 -0
  310. package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +118 -0
  311. package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +125 -0
  312. package/daemon/specs/agents/shared/skills/process/brainstorming/OPENRIG.md +3 -3
  313. package/daemon/specs/agents/shared/skills/process/executing-plans/OPENRIG.md +1 -1
  314. package/daemon/specs/agents/shared/skills/process/frontend-design/SKILL.md +6 -3
  315. package/daemon/specs/agents/shared/skills/process/systematic-debugging/find-polluter.sh +0 -0
  316. package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +1 -1
  317. package/daemon/specs/agents/shared/skills/process/using-superpowers/OPENRIG.md +1 -1
  318. package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +13 -2
  319. package/daemon/specs/agents/shared/skills/process/writing-plans/OPENRIG.md +1 -1
  320. package/daemon/specs/rigs/focused/pm-team/CULTURE.md +1 -1
  321. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/agent.yaml +2 -2
  322. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +5 -4
  323. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/agent.yaml +2 -2
  324. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +3 -5
  325. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/agent.yaml +2 -2
  326. package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +3 -4
  327. package/daemon/specs/rigs/preview/product-team/CULTURE.md +1 -1
  328. package/dist/bin-wrapper.d.ts.map +1 -1
  329. package/dist/bin-wrapper.js +3 -1
  330. package/dist/bin-wrapper.js.map +1 -1
  331. package/dist/build-info.js +3 -3
  332. package/dist/cli-error.d.ts +33 -0
  333. package/dist/cli-error.d.ts.map +1 -0
  334. package/dist/cli-error.js +94 -0
  335. package/dist/cli-error.js.map +1 -0
  336. package/dist/commands/config-init-workspace.js +1 -1
  337. package/dist/commands/doctor.d.ts +1 -1
  338. package/dist/commands/doctor.d.ts.map +1 -1
  339. package/dist/commands/doctor.js +17 -11
  340. package/dist/commands/doctor.js.map +1 -1
  341. package/dist/commands/host.d.ts.map +1 -1
  342. package/dist/commands/host.js +24 -10
  343. package/dist/commands/host.js.map +1 -1
  344. package/dist/commands/proof.js +1 -1
  345. package/dist/commands/proof.js.map +1 -1
  346. package/dist/commands/ps.d.ts.map +1 -1
  347. package/dist/commands/ps.js +16 -2
  348. package/dist/commands/ps.js.map +1 -1
  349. package/dist/commands/queue.d.ts.map +1 -1
  350. package/dist/commands/queue.js +103 -24
  351. package/dist/commands/queue.js.map +1 -1
  352. package/dist/commands/rig.d.ts.map +1 -1
  353. package/dist/commands/rig.js +122 -0
  354. package/dist/commands/rig.js.map +1 -1
  355. package/dist/commands/scope.js +2 -2
  356. package/dist/commands/scope.js.map +1 -1
  357. package/dist/commands/send.d.ts.map +1 -1
  358. package/dist/commands/send.js +118 -24
  359. package/dist/commands/send.js.map +1 -1
  360. package/dist/commands/setup.d.ts +14 -0
  361. package/dist/commands/setup.d.ts.map +1 -1
  362. package/dist/commands/setup.js +131 -8
  363. package/dist/commands/setup.js.map +1 -1
  364. package/dist/commands/slack.d.ts +37 -0
  365. package/dist/commands/slack.d.ts.map +1 -0
  366. package/dist/commands/slack.js +274 -0
  367. package/dist/commands/slack.js.map +1 -0
  368. package/dist/commands/ui.d.ts +1 -0
  369. package/dist/commands/ui.d.ts.map +1 -1
  370. package/dist/commands/ui.js +2 -0
  371. package/dist/commands/ui.js.map +1 -1
  372. package/dist/commands/up.js +1 -1
  373. package/dist/commands/up.js.map +1 -1
  374. package/dist/commands/whoami.d.ts.map +1 -1
  375. package/dist/commands/whoami.js +3 -3
  376. package/dist/commands/whoami.js.map +1 -1
  377. package/dist/daemon-lifecycle.d.ts.map +1 -1
  378. package/dist/daemon-lifecycle.js +45 -14
  379. package/dist/daemon-lifecycle.js.map +1 -1
  380. package/dist/host-registry.d.ts +6 -1
  381. package/dist/host-registry.d.ts.map +1 -1
  382. package/dist/host-registry.js +15 -6
  383. package/dist/host-registry.js.map +1 -1
  384. package/dist/index.d.ts +3 -0
  385. package/dist/index.d.ts.map +1 -1
  386. package/dist/index.js +6 -1
  387. package/dist/index.js.map +1 -1
  388. package/dist/lib/scope/scaffold-placeholder.d.ts +38 -0
  389. package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -0
  390. package/dist/lib/scope/scaffold-placeholder.js +98 -0
  391. package/dist/lib/scope/scaffold-placeholder.js.map +1 -0
  392. package/dist/lib/scope/scope-audit.d.ts.map +1 -1
  393. package/dist/lib/scope/scope-audit.js +57 -20
  394. package/dist/lib/scope/scope-audit.js.map +1 -1
  395. package/dist/lib/scope-templates/backlog-deprecation.md +1 -1
  396. package/dist/lib/scope-templates/backlog-tech-debt.md +1 -1
  397. package/dist/lib/scope-templates/bug-fix.md +1 -1
  398. package/dist/lib/scope-templates/implementation-prd.md +1 -1
  399. package/dist/lib/scope-templates/mission-notes.md +7 -2
  400. package/dist/lib/scope-templates/mission-placeholder.md +1 -1
  401. package/dist/lib/scope-templates/mission-progress.md +1 -1
  402. package/dist/lib/scope-templates/mission-release.md +1 -1
  403. package/dist/lib/scope-templates/placeholder.md +1 -1
  404. package/dist/lib/scope-templates/proof.md +1 -1
  405. package/dist/lib/scope-templates/release-feature.md +1 -1
  406. package/dist/lib/scope-templates/research.md +1 -1
  407. package/dist/lib/scope-templates/slice-progress.md +1 -1
  408. package/dist/remote-host-ops.d.ts.map +1 -1
  409. package/dist/remote-host-ops.js +2 -2
  410. package/dist/remote-host-ops.js.map +1 -1
  411. package/dist/slack/config.d.ts +41 -0
  412. package/dist/slack/config.d.ts.map +1 -0
  413. package/dist/slack/config.js +60 -0
  414. package/dist/slack/config.js.map +1 -0
  415. package/dist/slack/inbound.d.ts +75 -0
  416. package/dist/slack/inbound.d.ts.map +1 -0
  417. package/dist/slack/inbound.js +133 -0
  418. package/dist/slack/inbound.js.map +1 -0
  419. package/dist/slack/message.d.ts +26 -0
  420. package/dist/slack/message.d.ts.map +1 -0
  421. package/dist/slack/message.js +60 -0
  422. package/dist/slack/message.js.map +1 -0
  423. package/dist/slack/outbound.d.ts +39 -0
  424. package/dist/slack/outbound.d.ts.map +1 -0
  425. package/dist/slack/outbound.js +52 -0
  426. package/dist/slack/outbound.js.map +1 -0
  427. package/dist/slack/queue-bridge.d.ts +56 -0
  428. package/dist/slack/queue-bridge.d.ts.map +1 -0
  429. package/dist/slack/queue-bridge.js +114 -0
  430. package/dist/slack/queue-bridge.js.map +1 -0
  431. package/dist/slack/secrets.d.ts +21 -0
  432. package/dist/slack/secrets.d.ts.map +1 -0
  433. package/dist/slack/secrets.js +73 -0
  434. package/dist/slack/secrets.js.map +1 -0
  435. package/dist/slack/slack-api.d.ts +49 -0
  436. package/dist/slack/slack-api.d.ts.map +1 -0
  437. package/dist/slack/slack-api.js +110 -0
  438. package/dist/slack/slack-api.js.map +1 -0
  439. package/dist/slack/state-store.d.ts +62 -0
  440. package/dist/slack/state-store.d.ts.map +1 -0
  441. package/dist/slack/state-store.js +132 -0
  442. package/dist/slack/state-store.js.map +1 -0
  443. package/package.json +1 -1
  444. package/ui/dist/assets/{index-zrFqS7gL.js → index-DkNi0RT8.js} +184 -184
  445. package/ui/dist/assets/index-N-SdPj-I.css +32 -0
  446. package/ui/dist/index.html +2 -2
  447. package/daemon/assets/plugins/openrig-core/skills/openrig-architect/SKILL.md +0 -361
  448. package/daemon/assets/plugins/openrig-core/skills/openrig-cmux/SKILL.md +0 -86
  449. package/daemon/assets/plugins/openrig-core/skills/openrig-herdr/SKILL.md +0 -158
  450. package/daemon/assets/plugins/openrig-core/skills/openrig-operator/SKILL.md +0 -222
  451. package/daemon/docs/reference/product-factory-vps-runbook.md +0 -132
  452. package/daemon/specs/agents/shared/skills/core/mission-slice-sop/SKILL.md +0 -113
  453. package/daemon/specs/agents/shared/skills/core/openrig-installer/SKILL.md +0 -142
  454. package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +0 -110
  455. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +0 -1245
  456. package/daemon/specs/agents/shared/skills/core/openrig-user-settings/SKILL.md +0 -153
  457. package/daemon/specs/agents/shared/skills/pm/backlog-capture/SKILL.md +0 -43
  458. package/daemon/specs/agents/shared/skills/pm/context-builder/SKILL.md +0 -87
  459. package/daemon/specs/agents/shared/skills/pm/exec-summary/SKILL.md +0 -84
  460. package/daemon/specs/agents/shared/skills/pm/office-hours/SKILL.md +0 -129
  461. package/daemon/specs/agents/shared/skills/pm/plan-review/SKILL.md +0 -98
  462. package/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md +0 -113
  463. package/daemon/specs/agents/shared/skills/pm/ui-mockup/SKILL.md +0 -76
  464. package/daemon/specs/agents/shared/skills/pods/development-team/SKILL.md +0 -148
  465. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +0 -266
  466. package/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md +0 -210
  467. package/daemon/specs/agents/shared/skills/process/systematic-debugging/CREATION-LOG.md +0 -119
  468. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-academic.md +0 -14
  469. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-1.md +0 -58
  470. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-2.md +0 -68
  471. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-3.md +0 -69
  472. package/ui/dist/assets/index-CFqxa0zW.css +0 -32
@@ -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.)
@@ -0,0 +1,104 @@
1
+ ---
2
+ name: human-in-the-loop
3
+ description: Use when classifying a slice closeout (auto-continue / human gate / park), routing a real decision to a human, or designing a human queue/dashboard surface. Treats humans as durable network participants with attention surfaces, queues, and decision records — escalation lands as a durable attention item, not a chat message. Approval is NOT required for every clean closeout; the default RSI conveyor continues unless an explicit human gate is reached.
4
+ metadata:
5
+ openrig:
6
+ stage: factory-approved
7
+ sibling_skills:
8
+ - queue-handoff
9
+ - workflow-runtime
10
+ - watchdog
11
+ - alignment-trace
12
+ - looping-workflows
13
+ - intake-routing
14
+ - attention-queue
15
+ - dispatching-parallel-agents
16
+ - subagent-driven-development
17
+ - control-plane-capabilities
18
+ - status-not-chat-orchestrator
19
+ - control-plane-queue
20
+ - control-plane-watchdog
21
+ - control-plane-workflows
22
+ - control-plane-delivery-loop
23
+ - control-plane-rollout-manager
24
+ ---
25
+
26
+ # Human In The Loop
27
+
28
+ The primitive that treats humans as **durable network participants** —
29
+ attention surfaces, queues, decision records, routing semantics — not
30
+ as ad-hoc chat receivers.
31
+
32
+ **Autonomy is not the absence of humans; it is knowing when human
33
+ judgment is needed and making that handoff crisp.**
34
+
35
+ ## Use this when
36
+
37
+ - A slice closeout needs classifying: auto-continue, human gate, or park
38
+ - A real decision needs to land in front of a human (usage limits, provider auth, roadmap tradeoff, product-intent ambiguity)
39
+ - Designing a human queue/dashboard surface
40
+ - Returning a hot potato to orchestration after human approval
41
+
42
+ ## Don't use this when
43
+
44
+ - The slice closeout is clean and `PROGRESS.md` already names the next safe slice. **Default RSI conveyor continues; do NOT manufacture a human gate.**
45
+ - The escalation is just a status update. Humans are participants for *decisions*, not narration.
46
+ - The next owner is another agent. Use queue-handoff, not human-in-the-loop.
47
+
48
+ ## The 3-class closeout classification
49
+
50
+ In a productized daemon-backed version, closeout classifies the next
51
+ step BEFORE touching the human queue:
52
+
53
+ | Class | When | Action |
54
+ |---|---|---|
55
+ | **auto-continue** | Slice closes cleanly, next named slice in workstream plan | Mark closed; create next-owner qitem from plan |
56
+ | **human gate** | Genuine decision needed (usage limits, provider auth, product-intent ambiguity, roadmap tradeoff) | Create human queue item with proof + decision text + recommended default + action outcomes |
57
+ | **park** | Intentionally stop the conveyor (e.g., waiting on external) | Stop with reason + resumption path |
58
+
59
+ ## Failure modes (5)
60
+
61
+ 1. **Human decision needed, but the rig only mentions it in chat.** Decisions belong as durable attention items, not chat messages.
62
+ 2. **Human queue item lacks enough plain-English context for a decision.** Include proof + decision text + recommended default + action outcomes.
63
+ 3. **Human response updates a file but does not wake the next owner.** Approval should return the hot potato; feedback should create the next durable qitem.
64
+ 4. **The dashboard shows too much raw rig state and hides the actual decision queue.** Decision queue is the primary surface; rig state is secondary.
65
+ 5. **A clean closeout is parked on the human even though `PROGRESS.md` already names the next safe slice.** Don't manufacture human gates.
66
+
67
+ ## Proof standard (both paths)
68
+
69
+ A trustworthy human-in-the-loop system proves both directions:
70
+
71
+ - **Blocking gate path**: real item routed to human → human decision recorded through UI → resulting hot-potato handoff wakes correct next owner
72
+ - **Non-blocking closeout path**: proof inspectable by human, but orchestrator continues to next named slice without manufacturing a human gate
73
+
74
+ A primitive that only wakes humans is not trustworthy. It must also know when NOT to.
75
+
76
+ ## Product shape (SHIPPED — Mission Control, PL-005)
77
+
78
+ This surface has shipped as **Mission Control** (product UI, `/mission-control`
79
+ route; actions via `POST /api/mission-control/action`). The seven verbs the
80
+ human acts with:
81
+ - **approve** (returns the hot potato to orchestration or the chosen owner)
82
+ - **deny** (reject the item)
83
+ - **route** (send to a different owner)
84
+ - **annotate** (add context without action)
85
+ - **hold** (intentional pause with reason)
86
+ - **drop** (mark not-actionable)
87
+ - **handoff** (hand to a specific next owner — creates the next durable qitem)
88
+
89
+ **Approval returns the hot potato to orchestration or the chosen owner;
90
+ feedback creates the next durable qitem rather than only mutating the source
91
+ queue file** — enforced by the shipped verbs (handoff/route create qitems).
92
+ See `docs/as-built/architecture/mission-control.md`.
93
+
94
+ ## Long-term shape
95
+
96
+ Likely needs **multiple humans with different scopes**, not a singleton
97
+ human attention feed. Different humans own different decision
98
+ domains; queue items route by scope.
99
+
100
+ ## See also
101
+
102
+ - `queue-handoff` skill — durable handoff via queue items; human-in-the-loop is the human-side complement
103
+ - `watchdog` skill — when to wake (humans included) vs no-op
104
+ - `looping-workflows` (convention) — the looping-workflows convention covers loop closeouts; human-in-the-loop is the escape hatch