@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.
- package/daemon/assets/guidance/CULTURE-default.md +19 -0
- package/daemon/assets/guidance/openrig-start.md +20 -5
- package/daemon/assets/plugins/openrig-core/README.md +1 -1
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +9 -6
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +11 -72
- package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +34 -22
- package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +108 -0
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +11 -14
- package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +95 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +175 -105
- package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +26 -9
- package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +11 -9
- package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +162 -0
- package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +165 -0
- package/daemon/dist/adapters/cmux-transport.d.ts.map +1 -1
- package/daemon/dist/adapters/cmux-transport.js +8 -1
- package/daemon/dist/adapters/cmux-transport.js.map +1 -1
- package/daemon/dist/adapters/cmux.d.ts +9 -0
- package/daemon/dist/adapters/cmux.d.ts.map +1 -1
- package/daemon/dist/adapters/cmux.js +21 -0
- package/daemon/dist/adapters/cmux.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +3 -0
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +20 -4
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts +3 -0
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.js +19 -3
- package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
- package/daemon/dist/domain/cmux-layout-service.d.ts +36 -0
- package/daemon/dist/domain/cmux-layout-service.d.ts.map +1 -1
- package/daemon/dist/domain/cmux-layout-service.js +100 -28
- package/daemon/dist/domain/cmux-layout-service.js.map +1 -1
- package/daemon/dist/domain/context-monitor.d.ts +2 -0
- package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/context-monitor.js +14 -0
- package/daemon/dist/domain/context-monitor.js.map +1 -1
- package/daemon/dist/domain/feed/attention-aggregator.js +1 -1
- package/daemon/dist/domain/feed/attention-aggregator.js.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-reader.js +12 -10
- package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-writer.js +3 -2
- package/daemon/dist/domain/hosts/hosts-registry-writer.js.map +1 -1
- package/daemon/dist/domain/hosts/read-through.js +1 -1
- package/daemon/dist/domain/hosts/read-through.js.map +1 -1
- package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -1
- package/daemon/dist/domain/hosts/remote-daemon-http.js +8 -5
- package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +3 -12
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +55 -13
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/plugin-vendor-service.d.ts +2 -0
- package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
- package/daemon/dist/domain/plugin-vendor-service.js +23 -0
- package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
- package/daemon/dist/domain/projection-lane.d.ts +7 -0
- package/daemon/dist/domain/projection-lane.d.ts.map +1 -0
- package/daemon/dist/domain/projection-lane.js +28 -0
- package/daemon/dist/domain/projection-lane.js.map +1 -0
- package/daemon/dist/domain/ps-projection.d.ts +19 -0
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +46 -6
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +14 -10
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +33 -12
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/review/compose.d.ts +77 -4
- package/daemon/dist/domain/review/compose.d.ts.map +1 -1
- package/daemon/dist/domain/review/compose.js +152 -16
- package/daemon/dist/domain/review/compose.js.map +1 -1
- package/daemon/dist/domain/review/fleet-compose.js +1 -1
- package/daemon/dist/domain/review/fleet-compose.js.map +1 -1
- package/daemon/dist/domain/review/gather.d.ts +1 -1
- package/daemon/dist/domain/review/gather.d.ts.map +1 -1
- package/daemon/dist/domain/review/gather.js +92 -67
- package/daemon/dist/domain/review/gather.js.map +1 -1
- package/daemon/dist/domain/review/proof-io.d.ts +2 -0
- package/daemon/dist/domain/review/proof-io.d.ts.map +1 -0
- package/daemon/dist/domain/review/proof-io.js +38 -0
- package/daemon/dist/domain/review/proof-io.js.map +1 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +15 -2
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +8 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.js +57 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +38 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.js +98 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -0
- package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.js +22 -1
- package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.js +57 -20
- package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
- package/daemon/dist/domain/session-transport.d.ts +17 -0
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +44 -0
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/slices/qitem-membership.d.ts +17 -0
- package/daemon/dist/domain/slices/qitem-membership.d.ts.map +1 -0
- package/daemon/dist/domain/slices/qitem-membership.js +60 -0
- package/daemon/dist/domain/slices/qitem-membership.js.map +1 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts +5 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-detail-projector.js +157 -11
- package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/daemon/dist/domain/slices/slice-indexer.d.ts +86 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-indexer.js +422 -45
- package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.d.ts +9 -0
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +71 -3
- package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts +12 -11
- package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/cmux-provider-adapter.js +61 -28
- package/daemon/dist/domain/terminal/cmux-provider-adapter.js.map +1 -1
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts +27 -10
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/herdr-adapter.js +74 -33
- package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
- package/daemon/dist/domain/transcript-capture.d.ts +3 -0
- package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-capture.js +28 -0
- package/daemon/dist/domain/transcript-capture.js.map +1 -1
- package/daemon/dist/domain/transcript-store.d.ts +10 -0
- package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-store.js +26 -0
- package/daemon/dist/domain/transcript-store.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +4 -0
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js +9 -4
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.js +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
- package/daemon/dist/routes/mission-control.js +1 -1
- package/daemon/dist/routes/mission-control.js.map +1 -1
- package/daemon/dist/routes/missions.d.ts +7 -0
- package/daemon/dist/routes/missions.d.ts.map +1 -1
- package/daemon/dist/routes/missions.js +6 -1
- package/daemon/dist/routes/missions.js.map +1 -1
- package/daemon/dist/routes/ps.d.ts.map +1 -1
- package/daemon/dist/routes/ps.js +5 -1
- package/daemon/dist/routes/ps.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +9 -2
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +21 -10
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
- package/daemon/dist/routes/scope-audit.js +141 -135
- package/daemon/dist/routes/scope-audit.js.map +1 -1
- package/daemon/dist/routes/sessions.js +2 -1
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/slices.d.ts.map +1 -1
- package/daemon/dist/routes/slices.js +48 -38
- package/daemon/dist/routes/slices.js.map +1 -1
- package/daemon/dist/routes/transcripts.d.ts.map +1 -1
- package/daemon/dist/routes/transcripts.js +62 -33
- package/daemon/dist/routes/transcripts.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +25 -11
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-startup-guide.md +1 -0
- package/daemon/specs/agents/apps/vault-specialist/agent.yaml +2 -1
- package/daemon/specs/agents/conveyor/builder/agent.yaml +2 -1
- package/daemon/specs/agents/conveyor/lead/agent.yaml +2 -1
- package/daemon/specs/agents/conveyor/planner/agent.yaml +2 -1
- package/daemon/specs/agents/conveyor/reviewer/agent.yaml +2 -1
- package/daemon/specs/agents/design/product-designer/agent.yaml +12 -2
- package/daemon/specs/agents/development/implementer/agent.yaml +12 -2
- package/daemon/specs/agents/development/qa/agent.yaml +12 -2
- package/daemon/specs/agents/development/qa/guidance/role.md +1 -0
- package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +2 -1
- package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +2 -1
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +12 -2
- package/daemon/specs/agents/product-management/pm/agent.yaml +1 -2
- package/daemon/specs/agents/research/analyst/agent.yaml +2 -1
- package/daemon/specs/agents/research/synthesizer/agent.yaml +2 -1
- package/daemon/specs/agents/review/independent-reviewer/agent.yaml +12 -2
- package/daemon/specs/agents/shared/agent.yaml +5 -8
- package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +13 -1
- package/daemon/specs/agents/shared/skills/core/agent-starters/SKILL.md +132 -0
- package/daemon/{assets/plugins/openrig-core/skills → specs/agents/shared/skills/core}/agent-startup-and-context-ingestion/SKILL.md +27 -19
- package/daemon/specs/agents/shared/skills/core/attention-queue/SKILL.md +264 -0
- package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +190 -0
- package/daemon/specs/agents/shared/skills/core/human-in-the-loop/SKILL.md +104 -0
- package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +25 -8
- package/daemon/specs/agents/shared/skills/core/openrig-cmux/SKILL.md +0 -5
- package/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md +1 -6
- package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +460 -0
- package/daemon/specs/agents/shared/skills/core/rig-bundles-and-shareable-artifacts/SKILL.md +101 -0
- package/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md +22 -11
- package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +160 -0
- package/daemon/specs/agents/shared/skills/core/specification-system/SKILL.md +103 -0
- package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +118 -0
- package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +125 -0
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +4 -4
- package/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md +3 -0
- package/daemon/specs/agents/shared/skills/process/brainstorming/OPENRIG.md +3 -3
- package/daemon/specs/agents/shared/skills/process/executing-plans/OPENRIG.md +1 -1
- package/daemon/specs/agents/shared/skills/process/frontend-design/SKILL.md +6 -3
- package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +1 -1
- package/daemon/specs/agents/shared/skills/process/using-superpowers/OPENRIG.md +1 -1
- package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +12 -2
- package/daemon/specs/agents/shared/skills/process/writing-plans/OPENRIG.md +1 -1
- package/daemon/specs/rigs/focused/pm-team/CULTURE.md +1 -1
- package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/agent.yaml +2 -2
- package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +5 -4
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/agent.yaml +2 -2
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +3 -5
- package/daemon/specs/rigs/launch/kernel/agents/queue/worker/agent.yaml +2 -2
- package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +3 -4
- package/daemon/specs/rigs/preview/product-team/CULTURE.md +1 -1
- package/dist/bin-wrapper.d.ts.map +1 -1
- package/dist/bin-wrapper.js +3 -1
- package/dist/bin-wrapper.js.map +1 -1
- package/dist/build-info.js +3 -3
- package/dist/cli-error.d.ts +33 -0
- package/dist/cli-error.d.ts.map +1 -0
- package/dist/cli-error.js +94 -0
- package/dist/cli-error.js.map +1 -0
- package/dist/commands/config-init-workspace.js +1 -1
- package/dist/commands/doctor.d.ts +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +17 -11
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/host.d.ts.map +1 -1
- package/dist/commands/host.js +24 -10
- package/dist/commands/host.js.map +1 -1
- package/dist/commands/proof.js +1 -1
- package/dist/commands/proof.js.map +1 -1
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +16 -2
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +103 -24
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/rig.d.ts.map +1 -1
- package/dist/commands/rig.js +122 -0
- package/dist/commands/rig.js.map +1 -1
- package/dist/commands/scope.js +2 -2
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +118 -24
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/slack.d.ts +37 -0
- package/dist/commands/slack.d.ts.map +1 -0
- package/dist/commands/slack.js +274 -0
- package/dist/commands/slack.js.map +1 -0
- package/dist/commands/ui.d.ts +1 -0
- package/dist/commands/ui.d.ts.map +1 -1
- package/dist/commands/ui.js +2 -0
- package/dist/commands/ui.js.map +1 -1
- package/dist/commands/up.js +1 -1
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +3 -3
- package/dist/commands/whoami.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +45 -14
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/host-registry.d.ts +6 -1
- package/dist/host-registry.d.ts.map +1 -1
- package/dist/host-registry.js +15 -6
- package/dist/host-registry.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/scope/scaffold-placeholder.d.ts +38 -0
- package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -0
- package/dist/lib/scope/scaffold-placeholder.js +98 -0
- package/dist/lib/scope/scaffold-placeholder.js.map +1 -0
- package/dist/lib/scope/scope-audit.d.ts.map +1 -1
- package/dist/lib/scope/scope-audit.js +57 -20
- package/dist/lib/scope/scope-audit.js.map +1 -1
- package/dist/lib/scope-templates/backlog-deprecation.md +1 -1
- package/dist/lib/scope-templates/backlog-tech-debt.md +1 -1
- package/dist/lib/scope-templates/bug-fix.md +1 -1
- package/dist/lib/scope-templates/implementation-prd.md +1 -1
- package/dist/lib/scope-templates/mission-notes.md +7 -2
- package/dist/lib/scope-templates/mission-placeholder.md +1 -1
- package/dist/lib/scope-templates/mission-progress.md +1 -1
- package/dist/lib/scope-templates/mission-release.md +1 -1
- package/dist/lib/scope-templates/placeholder.md +1 -1
- package/dist/lib/scope-templates/proof.md +1 -1
- package/dist/lib/scope-templates/release-feature.md +1 -1
- package/dist/lib/scope-templates/research.md +1 -1
- package/dist/lib/scope-templates/slice-progress.md +1 -1
- package/dist/remote-host-ops.d.ts.map +1 -1
- package/dist/remote-host-ops.js +2 -2
- package/dist/remote-host-ops.js.map +1 -1
- package/dist/slack/config.d.ts +41 -0
- package/dist/slack/config.d.ts.map +1 -0
- package/dist/slack/config.js +60 -0
- package/dist/slack/config.js.map +1 -0
- package/dist/slack/inbound.d.ts +75 -0
- package/dist/slack/inbound.d.ts.map +1 -0
- package/dist/slack/inbound.js +133 -0
- package/dist/slack/inbound.js.map +1 -0
- package/dist/slack/message.d.ts +26 -0
- package/dist/slack/message.d.ts.map +1 -0
- package/dist/slack/message.js +60 -0
- package/dist/slack/message.js.map +1 -0
- package/dist/slack/outbound.d.ts +39 -0
- package/dist/slack/outbound.d.ts.map +1 -0
- package/dist/slack/outbound.js +52 -0
- package/dist/slack/outbound.js.map +1 -0
- package/dist/slack/queue-bridge.d.ts +56 -0
- package/dist/slack/queue-bridge.d.ts.map +1 -0
- package/dist/slack/queue-bridge.js +114 -0
- package/dist/slack/queue-bridge.js.map +1 -0
- package/dist/slack/secrets.d.ts +21 -0
- package/dist/slack/secrets.d.ts.map +1 -0
- package/dist/slack/secrets.js +73 -0
- package/dist/slack/secrets.js.map +1 -0
- package/dist/slack/slack-api.d.ts +49 -0
- package/dist/slack/slack-api.d.ts.map +1 -0
- package/dist/slack/slack-api.js +110 -0
- package/dist/slack/slack-api.js.map +1 -0
- package/dist/slack/state-store.d.ts +62 -0
- package/dist/slack/state-store.d.ts.map +1 -0
- package/dist/slack/state-store.js +132 -0
- package/dist/slack/state-store.js.map +1 -0
- package/package.json +1 -1
- package/ui/dist/assets/{index-zrFqS7gL.js → index-DkNi0RT8.js} +184 -184
- package/ui/dist/assets/index-N-SdPj-I.css +32 -0
- package/ui/dist/index.html +2 -2
- package/daemon/assets/plugins/openrig-core/skills/openrig-architect/SKILL.md +0 -361
- package/daemon/assets/plugins/openrig-core/skills/openrig-cmux/SKILL.md +0 -86
- package/daemon/assets/plugins/openrig-core/skills/openrig-herdr/SKILL.md +0 -158
- package/daemon/assets/plugins/openrig-core/skills/openrig-operator/SKILL.md +0 -222
- package/daemon/docs/reference/product-factory-vps-runbook.md +0 -132
- package/daemon/specs/agents/shared/skills/core/mission-slice-sop/SKILL.md +0 -113
- package/daemon/specs/agents/shared/skills/core/openrig-installer/SKILL.md +0 -142
- package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +0 -110
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +0 -1245
- package/daemon/specs/agents/shared/skills/core/openrig-user-settings/SKILL.md +0 -153
- package/ui/dist/assets/index-CFqxa0zW.css +0 -32
|
@@ -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
|
|
@@ -1,18 +1,28 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: openrig-architect
|
|
3
|
-
description: Use when designing multi-agent topologies that run ON OpenRig — authoring RigSpec and AgentSpec files for new rigs, creating agent startup content (guidance / skills / culture), or diagnosing why a launched rig's agents aren't behaving as intended. NOT for changing OpenRig itself (
|
|
3
|
+
description: Use when designing multi-agent topologies that run ON OpenRig — authoring RigSpec and AgentSpec files for new rigs, creating agent startup content (guidance / skills / culture), or diagnosing why a launched rig's agents aren't behaving as intended. NOT for changing OpenRig itself (use openrig-builder); NOT for ordinary CLI operation of an existing rig (use openrig-user). Covers the full authoring lifecycle from user intent to validated, launchable rig.
|
|
4
4
|
metadata:
|
|
5
|
+
cli_surfaces_referenced:
|
|
6
|
+
- agent validate
|
|
7
|
+
- capture
|
|
8
|
+
- daemon start
|
|
9
|
+
- ps
|
|
10
|
+
- send
|
|
11
|
+
- spec validate
|
|
12
|
+
- specs ls
|
|
13
|
+
- up
|
|
14
|
+
- whoami
|
|
5
15
|
openrig:
|
|
6
16
|
stage: factory-approved
|
|
7
|
-
last_verified: "2026-05-04"
|
|
8
|
-
distribution_scope: product-bound
|
|
9
|
-
source_evidence: |
|
|
10
|
-
Bootstrap skill — NPM install lands this in personal homes (~/.claude/skills/, ~/.agents/skills/) for users authoring their own rigs.
|
|
11
17
|
sibling_skills:
|
|
12
18
|
- openrig-user
|
|
13
19
|
- openrig-operator
|
|
20
|
+
- openrig-builder
|
|
21
|
+
- openrig-upgrade
|
|
14
22
|
- forming-an-openrig-mental-model
|
|
15
|
-
|
|
23
|
+
- ai-dev-workflows
|
|
24
|
+
notes: |
|
|
25
|
+
Description was already correct (starts with "Use when..."; lists specific authoring triggers including the diagnose-bad-rig case). Final sentence ("Covers the full authoring lifecycle from user intent to validated, launchable rig.") is workflow-summary-adjacent; on next iteration, consider trimming. For factory-adoption cycle, kept as-is to match product source-of-truth.
|
|
16
26
|
---
|
|
17
27
|
|
|
18
28
|
# OpenRig Architect
|
|
@@ -47,8 +57,13 @@ Load these before starting any design work. The quality of your output depends o
|
|
|
47
57
|
|
|
48
58
|
**Read if present on this host:**
|
|
49
59
|
|
|
50
|
-
4. **Host-level doctrine
|
|
51
|
-
|
|
60
|
+
4. **Host-level doctrine** in your host's topology doc, if it keeps one. If this file exists, it supersedes the baseline process below for complex or high-stakes rigs. Specifically:
|
|
61
|
+
- §3 defines the canonical rig classes (kernel, project, ephemeral, infra-build, managed-app). Classify before designing.
|
|
62
|
+
- §4 defines context-sharing patterns (pods as context domains, pair pattern, HA via mental-model-ha skill + substrate session logs, terminal nodes as common-room, chatroom/substrate/transcripts/Corpus).
|
|
63
|
+
- **§7 is the canonical 12-step rig-spec authoring SOP for high-stakes rigs — use it instead of the baseline "Design Process" below when the rig is ≥4 members, uses HA, is a managed-app, or will be shared/copied.** The baseline below still applies to small/focused rigs.
|
|
64
|
+
- §10 contains the host's bootstrap sequence so you know where your new rig fits.
|
|
65
|
+
- §12 has the naming canon and vocabulary mapping to shipped terms.
|
|
66
|
+
5. **`building-agent-software` skill** if available in your skill catalog. Design principles for agent-facing tools and surfaces. Relevant when your rig ships a new CLI, service, or managed app.
|
|
52
67
|
|
|
53
68
|
**Load as needed:**
|
|
54
69
|
- Domain-specific skills when designing specialist agents — find shipped skills inside the OpenRig installation under the `specs/agents/` tree
|
|
@@ -231,6 +246,8 @@ rig spec validate rig.yaml
|
|
|
231
246
|
rig agent validate agents/my-agent/agent.yaml
|
|
232
247
|
```
|
|
233
248
|
|
|
249
|
+
Then run `rig spec audit rig.yaml` for advisory checks such as stale seat references and other cross-file drift that schema validation cannot detect.
|
|
250
|
+
|
|
234
251
|
If validation fails, fix the errors. Do not try to launch an invalid spec — it will fail with a less helpful error.
|
|
235
252
|
|
|
236
253
|
## Diagnosis: When Things Go Wrong
|
|
@@ -9,11 +9,6 @@ description: >
|
|
|
9
9
|
metadata:
|
|
10
10
|
openrig:
|
|
11
11
|
stage: candidate
|
|
12
|
-
distribution_scope: product-bound
|
|
13
|
-
source_evidence: |
|
|
14
|
-
cmux is OpenRig's shipped terminal provider generalized onto `rig terminal <provider>` —
|
|
15
|
-
best-effort, not proof-gated. Authored clean-room.
|
|
16
|
-
transfer_test: pending
|
|
17
12
|
sibling_skills:
|
|
18
13
|
- openrig-herdr
|
|
19
14
|
- openrig-user
|
|
@@ -10,11 +10,6 @@ description: >
|
|
|
10
10
|
metadata:
|
|
11
11
|
openrig:
|
|
12
12
|
stage: candidate
|
|
13
|
-
distribution_scope: product-bound
|
|
14
|
-
source_evidence: |
|
|
15
|
-
Empirical herdr 0.7.1 hands-on findings + the ratified implementation PRD. Authored
|
|
16
|
-
clean-room (patterns only, no herdr source text; AGPL arm's-length).
|
|
17
|
-
transfer_test: pending
|
|
18
13
|
sibling_skills:
|
|
19
14
|
- openrig-cmux
|
|
20
15
|
- openrig-user
|
|
@@ -51,7 +46,7 @@ An agent asked "open all my rigs plus a mission as views" runs one `open` per ta
|
|
|
51
46
|
```bash
|
|
52
47
|
rig terminal open acme-web # a whole rig, live agents as tiles
|
|
53
48
|
rig terminal open mission:site-relaunch # exactly the agents working the mission
|
|
54
|
-
rig terminal open slice:
|
|
49
|
+
rig terminal open slice:search-filters # the agents working one slice
|
|
55
50
|
```
|
|
56
51
|
|
|
57
52
|
No hand-listing of seats: the mission/slice membership is derived from live topology at open time.
|
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: openrig-upgrade
|
|
3
|
+
description: Use when upgrading the OpenRig CLI/daemon on a host with running rigs, especially when preserving tmux-backed agent sessions through a daemon restart or documenting hot-upgrade SOP evidence.
|
|
4
|
+
metadata:
|
|
5
|
+
cli_surfaces_referenced:
|
|
6
|
+
- capture
|
|
7
|
+
- daemon adopt-state
|
|
8
|
+
- daemon start
|
|
9
|
+
- daemon status
|
|
10
|
+
- daemon stop
|
|
11
|
+
- down
|
|
12
|
+
- ps
|
|
13
|
+
- restore-check
|
|
14
|
+
- snapshot
|
|
15
|
+
- up
|
|
16
|
+
- upgrade backup
|
|
17
|
+
- upgrade preflight
|
|
18
|
+
- upgrade promote-runtime
|
|
19
|
+
- upgrade verify
|
|
20
|
+
- version
|
|
21
|
+
openrig:
|
|
22
|
+
stage: factory-approved
|
|
23
|
+
sibling_skills:
|
|
24
|
+
- openrig-user
|
|
25
|
+
- openrig-operator
|
|
26
|
+
- openrig-builder
|
|
27
|
+
- openrig-architect
|
|
28
|
+
- forming-an-openrig-mental-model
|
|
29
|
+
- ai-dev-workflows
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
# OpenRig Upgrade
|
|
33
|
+
|
|
34
|
+
## Core Principle
|
|
35
|
+
|
|
36
|
+
OpenRig has two different failure domains:
|
|
37
|
+
|
|
38
|
+
- **Agent process plane:** Claude/Codex/terminal seats running inside tmux.
|
|
39
|
+
- **Management plane:** the OpenRig daemon, CLI, SQLite DB, transcripts, node inventory,
|
|
40
|
+
send/capture APIs, restore metadata, and migrations.
|
|
41
|
+
|
|
42
|
+
A hot daemon upgrade is possible when the continuity seats remain alive in tmux and
|
|
43
|
+
the new daemon restarts against the same DB and transcript root. Do not run
|
|
44
|
+
`rig down` on continuity rigs unless the goal is a disruptive restore test; `rig down`
|
|
45
|
+
kills OpenRig-launched tmux sessions.
|
|
46
|
+
|
|
47
|
+
## Preferred Live-Cutover Operator Mode
|
|
48
|
+
|
|
49
|
+
For live production daemon cutovers, prefer an **out-of-band upgrade operator**:
|
|
50
|
+
a temporary host-local tmux seat outside the managed OpenRig topology, spawned
|
|
51
|
+
from the lifecycle/runtime-upgrade agent's current mental model.
|
|
52
|
+
|
|
53
|
+
Why: the managed rig stays in the agent process plane while a disposable sidecar
|
|
54
|
+
mutates the management plane. The sidecar inherits enough context to avoid a
|
|
55
|
+
cold handoff, but it is not inside the failure domain it is modifying.
|
|
56
|
+
|
|
57
|
+
Use this when all are true:
|
|
58
|
+
|
|
59
|
+
- the upgrade mutates the live daemon, CLI wrapper, DB, runtime worktree, tmux
|
|
60
|
+
lifecycle, or active control-plane truth;
|
|
61
|
+
- continuity seats should keep working during the upgrade;
|
|
62
|
+
- a lifecycle/runtime-upgrade seat has already prepared the packet or owns the
|
|
63
|
+
needed context;
|
|
64
|
+
- the human has granted an `operator auto window`.
|
|
65
|
+
|
|
66
|
+
In this SOP, `operator auto window` means a bounded operator-authorized upgrade lane. It does not
|
|
67
|
+
mean standing Codex `auto_review`, `--full-auto`, or approval-bypass mode. Use
|
|
68
|
+
`security-and-consequence-boundary-policy` skill for the current
|
|
69
|
+
security and consequence-boundary policy.
|
|
70
|
+
|
|
71
|
+
Do not use this pattern as a standing orchestration seat. The sidecar exists for
|
|
72
|
+
one cutover and then closes after handback.
|
|
73
|
+
|
|
74
|
+
### Sidecar Contract
|
|
75
|
+
|
|
76
|
+
The in-rig lifecycle/runtime-upgrade seat owns packet preparation and final
|
|
77
|
+
interpretation. The out-of-band sidecar owns only execution inside the approved
|
|
78
|
+
window.
|
|
79
|
+
|
|
80
|
+
Sidecar starter prompt shape:
|
|
81
|
+
|
|
82
|
+
```text
|
|
83
|
+
You are the host-local OpenRig runtime upgrade operator, outside the managed rig
|
|
84
|
+
topology. Execute the approved daemon-only cutover only after explicit human
|
|
85
|
+
approval. First read the upgrade preflight artifact and runtime-upgrade
|
|
86
|
+
decision. Prove you are outside the topology before mutation. Never run rig
|
|
87
|
+
down. Preserve tmux topology. Stop/start only the daemon, verify protected rigs,
|
|
88
|
+
write cutover evidence, unblock downstream artifacts only when the blocker is
|
|
89
|
+
truly closed, and rollback to <previous-wrapper-or-commit> if needed.
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Required handback:
|
|
93
|
+
|
|
94
|
+
- write the live cutover evidence under the lifecycle evidence shelf;
|
|
95
|
+
- include proof that the sidecar was outside the topology/failure domain it
|
|
96
|
+
mutated;
|
|
97
|
+
- update any blocked downstream dogfood/runtime task only when the blocking
|
|
98
|
+
condition is truly closed;
|
|
99
|
+
- preserve caveats as downstream material instead of using them to reopen a
|
|
100
|
+
closed cutover gate;
|
|
101
|
+
- report back to the in-rig lifecycle/runtime-upgrade seat or orch surface with
|
|
102
|
+
daemon provenance, topology verification, caveats, rollback state, and one
|
|
103
|
+
compact paragraph of operator judgment about ambiguous choices;
|
|
104
|
+
- close the sidecar after the original lifecycle owner has absorbed the result.
|
|
105
|
+
|
|
106
|
+
Stop conditions for the sidecar:
|
|
107
|
+
|
|
108
|
+
- preflight or runtime-upgrade decision is missing;
|
|
109
|
+
- human approval is absent or narrower than the requested cutover;
|
|
110
|
+
- protected topology is already degraded beyond the packet's expected caveats;
|
|
111
|
+
- target runtime cannot be verified by process path, port listener, and command
|
|
112
|
+
evidence;
|
|
113
|
+
- any step would require `rig down` or destructive DB restore without a new
|
|
114
|
+
explicit human decision.
|
|
115
|
+
|
|
116
|
+
Generic primitive: this upgrade specialization composes over the
|
|
117
|
+
`sidecar-operator` skill (the underlying out-of-band-operator pattern;
|
|
118
|
+
this skill is the upgrade-specific specialization).
|
|
119
|
+
|
|
120
|
+
## What Changed On 2026-04-27
|
|
121
|
+
|
|
122
|
+
Initial belief:
|
|
123
|
+
|
|
124
|
+
- All rigs had to be down before daemon restart.
|
|
125
|
+
- Live upgrade was research-gated because DB migrations might break session/node
|
|
126
|
+
state while sessions were running.
|
|
127
|
+
- A parallel isolated daemon/adoption path looked necessary before production use.
|
|
128
|
+
|
|
129
|
+
Observed result:
|
|
130
|
+
|
|
131
|
+
- A daemon-only hot cutover preserved the live `example-seat` tmux
|
|
132
|
+
sessions.
|
|
133
|
+
- The old daemon was stopped without running `rig down`.
|
|
134
|
+
- The new source-pinned daemon started against the same production DB.
|
|
135
|
+
- `rig ps --nodes --json`, `rig capture`, and `rig restore-check` could inspect the
|
|
136
|
+
still-running Velocity seats after restart.
|
|
137
|
+
|
|
138
|
+
The simpler model is now preferred for tmux-backed continuity rigs: snapshot and
|
|
139
|
+
back up state, stop only the daemon, start the new daemon, then verify that live
|
|
140
|
+
sessions are still observable and manageable.
|
|
141
|
+
|
|
142
|
+
## Proven Hot Path
|
|
143
|
+
|
|
144
|
+
Use this as the canonical first-choice workflow for a host where continuity rigs
|
|
145
|
+
are tmux-backed and the operator wants non-disruptive daemon upgrade.
|
|
146
|
+
|
|
147
|
+
0. **Spawn the out-of-band operator when live cutover is required.**
|
|
148
|
+
The sidecar must be host-local and outside the managed topology being
|
|
149
|
+
upgraded. Keep the lifecycle/runtime-upgrade owner inside the rig so it can
|
|
150
|
+
continue to observe, ask questions, and absorb the handback.
|
|
151
|
+
|
|
152
|
+
1. **Choose continuity targets.**
|
|
153
|
+
Name the exact rigs that must remain live. Everything else is source material.
|
|
154
|
+
Do not let "nice to resume later" rigs expand the success criteria.
|
|
155
|
+
|
|
156
|
+
2. **Freeze active work.**
|
|
157
|
+
Get continuity seats to a stable/idle checkpoint. Record resume commands if
|
|
158
|
+
available.
|
|
159
|
+
|
|
160
|
+
3. **Inventory with filters.**
|
|
161
|
+
Do not dump full `rig ps` output on this host. Use filtered JSON:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
rig ps --nodes --json \
|
|
165
|
+
| jq -r 'map(select(.rigName=="<rig>")) | sort_by(.canonicalSessionName)[] | "\(.canonicalSessionName) \(.sessionStatus) \(.startupStatus) \(.resumeToken // "none")"'
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
4. **Take a non-destructive snapshot of each continuity rig.**
|
|
169
|
+
This records rollback/recovery metadata without killing tmux sessions:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
rig snapshot <rigId>
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Verify the snapshot payload in SQLite has the expected nodes, sessions,
|
|
176
|
+
checkpoints, and resume tokens.
|
|
177
|
+
|
|
178
|
+
5. **Create a post-snapshot SQLite backup.**
|
|
179
|
+
Use SQLite's online backup API while the daemon is live. Then run
|
|
180
|
+
`PRAGMA integrity_check` on the backup and verify it contains the continuity
|
|
181
|
+
snapshot.
|
|
182
|
+
|
|
183
|
+
6. **Prepare a clean runtime artifact.**
|
|
184
|
+
Prefer a dedicated clean source worktree pinned to a commit:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
git worktree add --detach /path/to/openrig-runtime-<shortsha> <commit>
|
|
188
|
+
cd /path/to/openrig-runtime-<shortsha>
|
|
189
|
+
PATH=/path/to/node22/bin:$PATH npm ci
|
|
190
|
+
PATH=/path/to/node22/bin:$PATH npm run build
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Use even/LTS Node. The 2026-04-27 upgrade used Node `v22.22.1`.
|
|
194
|
+
|
|
195
|
+
7. **Stop only the daemon.**
|
|
196
|
+
First try:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
rig daemon stop
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
If the daemon state file is missing but the PID is known and verified as the
|
|
203
|
+
OpenRig daemon, gracefully terminate that PID:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
kill -TERM <daemonPid>
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Do not use `kill -9` unless recovering from a wedged process with human
|
|
210
|
+
approval. Do not run `rig down` on continuity rigs.
|
|
211
|
+
|
|
212
|
+
8. **Start the pinned daemon against the same production DB.**
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
PATH=/path/to/node22/bin:$PATH \
|
|
216
|
+
node packages/cli/dist/index.js daemon start \
|
|
217
|
+
--port 7433 \
|
|
218
|
+
--host 127.0.0.1 \
|
|
219
|
+
--db ~/.openrig/openrig.sqlite
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
9. **Verify management continuity.**
|
|
223
|
+
Required checks:
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
rig daemon status
|
|
227
|
+
lsof -nP -iTCP:7433 -sTCP:LISTEN
|
|
228
|
+
rig ps --nodes --json | jq -r 'map(select(.rigName=="<rig>")) | ...'
|
|
229
|
+
rig capture --rig <rig> --lines 1 --json
|
|
230
|
+
rig restore-check --rig <rig>
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Success means the daemon is healthy, continuity sessions remain running/ready,
|
|
234
|
+
capture works, transcripts are present, and `restore-check` reports no red
|
|
235
|
+
blockers.
|
|
236
|
+
|
|
237
|
+
10. **Align the default CLI with the new daemon.**
|
|
238
|
+
If `rig` is a wrapper, make sure it delegates to the new CLI. On the
|
|
239
|
+
2026-04-27 host this meant repointing the rigx real CLI via
|
|
240
|
+
`~/.openrig/bin/rig-real-17812d5`.
|
|
241
|
+
|
|
242
|
+
11. **Write evidence and hand back.**
|
|
243
|
+
The sidecar writes a cutover evidence packet with daemon provenance,
|
|
244
|
+
protected topology counts, representative capture/restore checks, smoke
|
|
245
|
+
results, caveats, and rollback state. Then it notifies the original in-rig
|
|
246
|
+
lifecycle/runtime-upgrade owner. Do not rely on chat as the only proof.
|
|
247
|
+
|
|
248
|
+
## 2026-04-27 Proof Point
|
|
249
|
+
|
|
250
|
+
Continuity target:
|
|
251
|
+
|
|
252
|
+
- `example-seat`
|
|
253
|
+
|
|
254
|
+
Pinned daemon:
|
|
255
|
+
|
|
256
|
+
- commit `17812d5d3bfe53dfdc5e202b1da3e8c91e2f4e54`
|
|
257
|
+
- subject `feat(agents): make runtime config spec-driven`
|
|
258
|
+
- committed `2026-04-26T18:30:08-07:00`
|
|
259
|
+
- runtime worktree `~/code/projects/openrig-runtime-17812d5`
|
|
260
|
+
|
|
261
|
+
Evidence:
|
|
262
|
+
|
|
263
|
+
- Velocity snapshot `01KQ84D3AF9YW6FQCM9SVSM5EG`
|
|
264
|
+
- post-snapshot DB backup
|
|
265
|
+
`db-backup/openrig-post-velocity-snapshot-20260427T185003Z.sqlite`
|
|
266
|
+
- backup integrity `ok`
|
|
267
|
+
- old daemon PID `62828`, Node 25 global npm install
|
|
268
|
+
- new daemon PID `39708`, Node 22 source runtime
|
|
269
|
+
- post-cutover `example-seat`: 4/4 seats `running` / `ready`
|
|
270
|
+
- `rig restore-check --rig example-seat`: `RESTORABLE WITH CAVEATS`,
|
|
271
|
+
`20 green | 9 yellow | 0 red`, `RECOVERY: NOT NEEDED`
|
|
272
|
+
|
|
273
|
+
Important caveat: this proves hot daemon cutover for tmux-backed Claude seats on
|
|
274
|
+
this host and commit range. It does not prove that arbitrary migrations,
|
|
275
|
+
non-tmux runtimes, service-backed rigs, or dead sessions can be recovered without
|
|
276
|
+
separate testing.
|
|
277
|
+
|
|
278
|
+
## 2026-05-02 Proof Point
|
|
279
|
+
|
|
280
|
+
Continuity targets:
|
|
281
|
+
|
|
282
|
+
- `kernel`
|
|
283
|
+
- `openrig-discovery`
|
|
284
|
+
- `openrig-dogfood`
|
|
285
|
+
- `openrig-lifecycle`
|
|
286
|
+
- `openrig-maintenance`
|
|
287
|
+
- `openrig-product-lab`
|
|
288
|
+
- `example-rig`
|
|
289
|
+
- `example-seat`
|
|
290
|
+
|
|
291
|
+
Pinned daemon:
|
|
292
|
+
|
|
293
|
+
- commit `6af2754824a07291562622ac019b68615fc41abe`
|
|
294
|
+
- runtime worktree `~/code/projects/openrig-runtime-6af2754`
|
|
295
|
+
- wrapper `~/.openrig/bin/rig-real-6af2754`
|
|
296
|
+
|
|
297
|
+
Pattern proven:
|
|
298
|
+
|
|
299
|
+
- lifecycle/runtime-upgrade prepared the decision and preflight artifacts;
|
|
300
|
+
- a host-local tmux sidecar (`host-upgrade-operator-6af2754`) was spawned
|
|
301
|
+
outside the managed topology with the current operator context;
|
|
302
|
+
- the sidecar stopped only the daemon, using verified PID fallback after
|
|
303
|
+
`rig daemon stop` refused due to missing daemon state;
|
|
304
|
+
- the sidecar started the target daemon on port `7433`, repointed the
|
|
305
|
+
config-layer wrapper default, verified protected topology, ran targeted
|
|
306
|
+
Agent Starter smoke/tests, wrote evidence, and unblocked Dogfood;
|
|
307
|
+
- Velocity delivery continued working throughout the cutover.
|
|
308
|
+
|
|
309
|
+
Evidence:
|
|
310
|
+
|
|
311
|
+
- preflight:
|
|
312
|
+
(internal upgrade-preflight evidence, 2026-05-01)
|
|
313
|
+
- live cutover:
|
|
314
|
+
(internal live-cutover evidence, 2026-05-02)
|
|
315
|
+
|
|
316
|
+
Important caveat: live `rig up --plan --json` accepted valid `starter_ref`
|
|
317
|
+
specs and rejected forbidden compositions, but plan-mode output did not emit the
|
|
318
|
+
`resolve_starter.detail.starterContent` stage expected by the Dogfood proof bar.
|
|
319
|
+
This is a product/dogfood caveat, not an upgrade failure.
|
|
320
|
+
|
|
321
|
+
## Brittle Edges Observed On 2026-04-27
|
|
322
|
+
|
|
323
|
+
Detailed field note:
|
|
324
|
+
|
|
325
|
+
(internal upgrade-brittleness field note, 2026-04-27)
|
|
326
|
+
|
|
327
|
+
Operator lessons from the daemon upgrade:
|
|
328
|
+
|
|
329
|
+
- `rig down` kills OpenRig-launched tmux sessions. Do not use it as a snapshot
|
|
330
|
+
primitive when resumability depends on keeping sessions alive.
|
|
331
|
+
- Old daemon/CLI combinations can be partially functional even when newer health
|
|
332
|
+
checks fail. A `/healthz` mismatch blocked `rig down --snapshot` even though
|
|
333
|
+
other daemon APIs still worked.
|
|
334
|
+
- `rig daemon stop` can fail when the daemon state file is missing. Operators
|
|
335
|
+
need a verified PID fallback, but the product should reconcile daemon state
|
|
336
|
+
automatically.
|
|
337
|
+
- If the sidecar has an operator auto window and `rig daemon stop` refuses only
|
|
338
|
+
because state is stale, a verified graceful PID termination is acceptable:
|
|
339
|
+
identify the daemon PID, verify its runtime path, send graceful `TERM`, and
|
|
340
|
+
verify the port is gone before starting the target daemon.
|
|
341
|
+
- CLI and daemon provenance can drift. Repointing or verifying the default
|
|
342
|
+
`rig` wrapper is part of the upgrade, not an afterthought.
|
|
343
|
+
- Raw `rig ps` is too noisy on this host. Use filtered JSON until the product
|
|
344
|
+
has compact first-class inventory views.
|
|
345
|
+
- Snapshot and backup verification is too manual. The SOP currently depends on
|
|
346
|
+
checking snapshot rows, resume tokens, SQLite backups, and integrity by hand.
|
|
347
|
+
|
|
348
|
+
Separate follow-on note, not part of the daemon-upgrade SOP:
|
|
349
|
+
|
|
350
|
+
(internal add-node-brittleness field note, 2026-04-27)
|
|
351
|
+
|
|
352
|
+
## Disruptive Restore Path
|
|
353
|
+
|
|
354
|
+
Use disruptive restore when the goal is to test recovery from killed sessions, or
|
|
355
|
+
when hot upgrade is blocked by incompatible migrations or corrupted management
|
|
356
|
+
state.
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
rig snapshot <rigId>
|
|
360
|
+
rig down <rigId>
|
|
361
|
+
# upgrade daemon/CLI
|
|
362
|
+
rig up <rigName>
|
|
363
|
+
rig restore-check --rig <rigName>
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
Expected restore results:
|
|
367
|
+
|
|
368
|
+
| Result | Meaning | Action |
|
|
369
|
+
|---|---|---|
|
|
370
|
+
| `fully_restored` | All nodes resumed or rebuilt | Resume normal work |
|
|
371
|
+
| `partially_restored` | Some nodes succeeded, some failed | Inspect failed nodes and relaunch manually |
|
|
372
|
+
| `failed` | Zero nodes restored | Check daemon logs, snapshot integrity, provider tokens |
|
|
373
|
+
| `not_attempted` | Pre-restore blockers | Fix blockers before retrying |
|
|
374
|
+
|
|
375
|
+
Do not confuse this path with hot upgrade. `rig down` is intentionally
|
|
376
|
+
disruptive.
|
|
377
|
+
|
|
378
|
+
## Stop Conditions
|
|
379
|
+
|
|
380
|
+
Do not proceed with hot upgrade if:
|
|
381
|
+
|
|
382
|
+
- continuity targets are mid-task and cannot checkpoint;
|
|
383
|
+
- continuity target tmux sessions are missing before upgrade;
|
|
384
|
+
- no verified DB backup exists after continuity snapshots;
|
|
385
|
+
- the target runtime cannot build under an even/LTS Node version;
|
|
386
|
+
- the daemon migration plan is known to rewrite session/binding semantics in a
|
|
387
|
+
way that has not been tested;
|
|
388
|
+
- disk space or DB integrity checks fail;
|
|
389
|
+
- the operator cannot identify the current daemon PID and runtime source.
|
|
390
|
+
|
|
391
|
+
## Rollback
|
|
392
|
+
|
|
393
|
+
Rollback means restoring the previous daemon runtime and, if necessary, the DB
|
|
394
|
+
backup.
|
|
395
|
+
|
|
396
|
+
For source runtime:
|
|
397
|
+
|
|
398
|
+
1. Stop the new daemon.
|
|
399
|
+
2. Start the previous runtime or npm/global daemon.
|
|
400
|
+
3. Verify `/healthz`, filtered continuity inventory, and `rig capture`.
|
|
401
|
+
4. Restore the DB backup only if migration or DB corruption is confirmed. Do not
|
|
402
|
+
replace the DB just because continuity sessions are still live but management
|
|
403
|
+
projection is degraded.
|
|
404
|
+
|
|
405
|
+
For npm runtime:
|
|
406
|
+
|
|
407
|
+
```bash
|
|
408
|
+
npm install -g @openrig/cli@<previous-version>
|
|
409
|
+
rig daemon stop
|
|
410
|
+
rig daemon start
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
## Roadmap: Better Hot Upgrades
|
|
414
|
+
|
|
415
|
+
The product should make the proven manual path boring and explicit.
|
|
416
|
+
|
|
417
|
+
Needed product surfaces:
|
|
418
|
+
|
|
419
|
+
- `rig upgrade preflight`:
|
|
420
|
+
daemon PID/runtime source, CLI source, DB path, migration plan, active rigs,
|
|
421
|
+
continuity targets, tmux liveness, disk space, DB integrity, backup target,
|
|
422
|
+
and rollback runtime.
|
|
423
|
+
- `rig daemon adopt-state` or equivalent:
|
|
424
|
+
recover a healthy daemon on a port when `daemon.json` is missing.
|
|
425
|
+
- `rig upgrade backup`:
|
|
426
|
+
online SQLite backup plus integrity and snapshot-presence verification.
|
|
427
|
+
- `rig upgrade promote-runtime <commit|artifact>`:
|
|
428
|
+
start from a clean worktree or packaged artifact under an even/LTS Node.
|
|
429
|
+
- `rig upgrade verify --rig <name>`:
|
|
430
|
+
filtered inventory, capture, transcript, restore-check, and honest continuity
|
|
431
|
+
classification.
|
|
432
|
+
- CLI/daemon provenance:
|
|
433
|
+
`rig version --json` should report CLI path, daemon path, commit/package
|
|
434
|
+
version, Node version, DB path, and started-at.
|
|
435
|
+
- Wrapper alignment:
|
|
436
|
+
rigx/default `rig` should clearly show which real CLI it delegates to.
|
|
437
|
+
- Compact inventory:
|
|
438
|
+
first-class `rig ps --rig <name> --nodes --compact` or equivalent, so
|
|
439
|
+
operators do not need ad hoc `jq` for routine safety checks.
|
|
440
|
+
|
|
441
|
+
Research still needed:
|
|
442
|
+
|
|
443
|
+
1. Migration-bearing hot upgrade on a throwaway rig.
|
|
444
|
+
2. Hot upgrade with non-critical live Codex seats.
|
|
445
|
+
3. Hot upgrade with service-backed rigs.
|
|
446
|
+
4. Adoption/reconciliation when daemon DB says sessions are running but tmux has
|
|
447
|
+
partially drifted.
|
|
448
|
+
5. Automated rollback on daemon startup failure or migration failure.
|
|
449
|
+
|
|
450
|
+
## Operator Summary
|
|
451
|
+
|
|
452
|
+
Hot upgrade rule:
|
|
453
|
+
|
|
454
|
+
**Snapshot continuity rigs, back up the DB, stop only the daemon, start the new
|
|
455
|
+
daemon against the same DB, then verify live tmux sessions through filtered
|
|
456
|
+
management surfaces.**
|
|
457
|
+
|
|
458
|
+
Disruptive restore rule:
|
|
459
|
+
|
|
460
|
+
**Use `rig down` only when testing or accepting session teardown.**
|