@openrig/cli 0.6.9 → 0.6.11
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/README.md +2 -2
- package/daemon/assets/onboarding/02-self-and-competent-action.md +4 -3
- package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
- package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
- package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +42 -2
- package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +1 -1
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +7 -1
- package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +6 -1
- package/daemon/assets/skills/rigs/SKILL.md +7 -5
- package/daemon/context-packs/help/manifest.yaml +1 -1
- package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
- package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +64 -14
- package/daemon/context-packs/reference/getting-started.md +10 -6
- package/daemon/context-packs/reference/manifest.yaml +1 -1
- package/daemon/context-packs/reference/rig-spec.md +2 -2
- package/daemon/context-packs/reference/whats-new.md +151 -74
- package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
- package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
- package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
- package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +1 -1
- package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +3 -3
- package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/SKILL.md +2 -2
- package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
- package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
- package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
- package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-user/SKILL.md +7 -1
- package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
- package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
- package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
- package/daemon/context-packs/skills/refocusing/scripts/trace-to-root.py +6 -1
- package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
- package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
- package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
- package/daemon/context-packs/world-example/manifest.yaml +1 -1
- package/daemon/context-packs/world-public/manifest.yaml +1 -1
- package/daemon/dist/adapters/claude-code-adapter.d.ts +0 -14
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +43 -80
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/claude-resume-launch.d.ts +4 -0
- package/daemon/dist/adapters/claude-resume-launch.d.ts.map +1 -0
- package/daemon/dist/adapters/claude-resume-launch.js +13 -0
- package/daemon/dist/adapters/claude-resume-launch.js.map +1 -0
- package/daemon/dist/adapters/claude-resume.d.ts +2 -1
- package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-resume.js +9 -4
- package/daemon/dist/adapters/claude-resume.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +35 -0
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +94 -44
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
- package/daemon/dist/adapters/pi-runner.js +6 -3
- package/daemon/dist/adapters/pi-runner.js.map +1 -1
- package/daemon/dist/adapters/pi-runtime-adapter.js +1 -1
- package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/tmux-server.d.ts +15 -0
- package/daemon/dist/adapters/tmux-server.d.ts.map +1 -0
- package/daemon/dist/adapters/tmux-server.js +58 -0
- package/daemon/dist/adapters/tmux-server.js.map +1 -0
- package/daemon/dist/adapters/tmux.d.ts +26 -1
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +130 -7
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/daemon/dist/db/all-migrations.js +6 -0
- package/daemon/dist/db/all-migrations.js.map +1 -1
- package/daemon/dist/db/migrations/099_queue_items_recovery_tags.d.ts +3 -0
- package/daemon/dist/db/migrations/099_queue_items_recovery_tags.d.ts.map +1 -0
- package/daemon/dist/db/migrations/099_queue_items_recovery_tags.js +19 -0
- package/daemon/dist/db/migrations/099_queue_items_recovery_tags.js.map +1 -0
- package/daemon/dist/db/migrations/101_claude_resume_rotation.d.ts +3 -0
- package/daemon/dist/db/migrations/101_claude_resume_rotation.d.ts.map +1 -0
- package/daemon/dist/db/migrations/101_claude_resume_rotation.js +19 -0
- package/daemon/dist/db/migrations/101_claude_resume_rotation.js.map +1 -0
- package/daemon/dist/db/migrations/103_session_stop_intent.d.ts +4 -0
- package/daemon/dist/db/migrations/103_session_stop_intent.d.ts.map +1 -0
- package/daemon/dist/db/migrations/103_session_stop_intent.js +9 -0
- package/daemon/dist/db/migrations/103_session_stop_intent.js.map +1 -0
- package/daemon/dist/domain/active-occupant.d.ts +14 -0
- package/daemon/dist/domain/active-occupant.d.ts.map +1 -1
- package/daemon/dist/domain/active-occupant.js +17 -0
- package/daemon/dist/domain/active-occupant.js.map +1 -1
- package/daemon/dist/domain/agent-activity-store.js +3 -0
- package/daemon/dist/domain/agent-activity-store.js.map +1 -1
- package/daemon/dist/domain/bootstrap-repository.js +1 -1
- package/daemon/dist/domain/bootstrap-repository.js.map +1 -1
- package/daemon/dist/domain/chat-repository.d.ts +3 -0
- package/daemon/dist/domain/chat-repository.d.ts.map +1 -1
- package/daemon/dist/domain/chat-repository.js +15 -4
- package/daemon/dist/domain/chat-repository.js.map +1 -1
- package/daemon/dist/domain/claude-managed-launch.d.ts +1 -1
- package/daemon/dist/domain/claude-managed-launch.d.ts.map +1 -1
- package/daemon/dist/domain/claude-managed-launch.js +3 -2
- package/daemon/dist/domain/claude-managed-launch.js.map +1 -1
- package/daemon/dist/domain/cmux-layout-service.d.ts.map +1 -1
- package/daemon/dist/domain/cmux-layout-service.js +2 -1
- package/daemon/dist/domain/cmux-layout-service.js.map +1 -1
- package/daemon/dist/domain/codex-git-add-dirs.js +1 -1
- package/daemon/dist/domain/codex-git-add-dirs.js.map +1 -1
- package/daemon/dist/domain/codex-network-default.d.ts +3 -0
- package/daemon/dist/domain/codex-network-default.d.ts.map +1 -1
- package/daemon/dist/domain/codex-network-default.js +1 -1
- package/daemon/dist/domain/codex-network-default.js.map +1 -1
- package/daemon/dist/domain/codex-pane-patterns.d.ts +2 -0
- package/daemon/dist/domain/codex-pane-patterns.d.ts.map +1 -0
- package/daemon/dist/domain/codex-pane-patterns.js +5 -0
- package/daemon/dist/domain/codex-pane-patterns.js.map +1 -0
- package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/context-monitor.js +46 -22
- package/daemon/dist/domain/context-monitor.js.map +1 -1
- package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
- package/daemon/dist/domain/context-usage-store.js +6 -1
- package/daemon/dist/domain/context-usage-store.js.map +1 -1
- package/daemon/dist/domain/crash-cart-conductor.d.ts.map +1 -1
- package/daemon/dist/domain/crash-cart-conductor.js +3 -1
- package/daemon/dist/domain/crash-cart-conductor.js.map +1 -1
- package/daemon/dist/domain/cwd-resolution.d.ts +8 -0
- package/daemon/dist/domain/cwd-resolution.d.ts.map +1 -1
- package/daemon/dist/domain/cwd-resolution.js +24 -3
- package/daemon/dist/domain/cwd-resolution.js.map +1 -1
- package/daemon/dist/domain/files/file-read.d.ts.map +1 -1
- package/daemon/dist/domain/files/file-read.js +11 -3
- package/daemon/dist/domain/files/file-read.js.map +1 -1
- package/daemon/dist/domain/gateway/connections-projection.d.ts +1 -1
- package/daemon/dist/domain/gateway/slack/channel-recovery.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/channel-recovery.js +4 -3
- package/daemon/dist/domain/gateway/slack/channel-recovery.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.d.ts +21 -2
- package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.js +70 -11
- package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +4 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.js +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js +7 -4
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/daemon/dist/domain/history-query.d.ts.map +1 -1
- package/daemon/dist/domain/history-query.js +8 -6
- package/daemon/dist/domain/history-query.js.map +1 -1
- package/daemon/dist/domain/human-questions.d.ts +4 -1
- package/daemon/dist/domain/human-questions.d.ts.map +1 -1
- package/daemon/dist/domain/human-questions.js.map +1 -1
- package/daemon/dist/domain/install-engine.js +2 -2
- package/daemon/dist/domain/install-engine.js.map +1 -1
- package/daemon/dist/domain/native-process-lineage.d.ts +57 -4
- package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
- package/daemon/dist/domain/native-process-lineage.js +277 -42
- package/daemon/dist/domain/native-process-lineage.js.map +1 -1
- package/daemon/dist/domain/node-cmux-service.d.ts.map +1 -1
- package/daemon/dist/domain/node-cmux-service.js +2 -1
- package/daemon/dist/domain/node-cmux-service.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +71 -18
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/node-launcher.js +2 -1
- package/daemon/dist/domain/node-launcher.js.map +1 -1
- package/daemon/dist/domain/pane-cutover.d.ts +27 -0
- package/daemon/dist/domain/pane-cutover.d.ts.map +1 -0
- package/daemon/dist/domain/pane-cutover.js +37 -0
- package/daemon/dist/domain/pane-cutover.js.map +1 -0
- package/daemon/dist/domain/parent-session-env.d.ts +8 -0
- package/daemon/dist/domain/parent-session-env.d.ts.map +1 -0
- package/daemon/dist/domain/parent-session-env.js +37 -0
- package/daemon/dist/domain/parent-session-env.js.map +1 -0
- package/daemon/dist/domain/policies/parked-owner-consumer.d.ts +11 -0
- package/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -1
- package/daemon/dist/domain/policies/parked-owner-consumer.js +81 -11
- package/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -1
- package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.js +2 -3
- package/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/daemon/dist/domain/progress/progress-indexer.d.ts.map +1 -1
- package/daemon/dist/domain/progress/progress-indexer.js +19 -0
- package/daemon/dist/domain/progress/progress-indexer.js.map +1 -1
- package/daemon/dist/domain/proof/judgments.d.ts +10 -5
- package/daemon/dist/domain/proof/judgments.d.ts.map +1 -1
- package/daemon/dist/domain/proof/judgments.js +27 -19
- package/daemon/dist/domain/proof/judgments.js.map +1 -1
- package/daemon/dist/domain/provider/codex-limit-banner.d.ts +40 -0
- package/daemon/dist/domain/provider/codex-limit-banner.d.ts.map +1 -0
- package/daemon/dist/domain/provider/codex-limit-banner.js +168 -0
- package/daemon/dist/domain/provider/codex-limit-banner.js.map +1 -0
- package/daemon/dist/domain/provider/codex-usage-reader.d.ts +31 -0
- package/daemon/dist/domain/provider/codex-usage-reader.d.ts.map +1 -0
- package/daemon/dist/domain/provider/codex-usage-reader.js +115 -0
- package/daemon/dist/domain/provider/codex-usage-reader.js.map +1 -0
- package/daemon/dist/domain/provider/codex-usage-windows.d.ts +78 -0
- package/daemon/dist/domain/provider/codex-usage-windows.d.ts.map +1 -0
- package/daemon/dist/domain/provider/codex-usage-windows.js +259 -0
- package/daemon/dist/domain/provider/codex-usage-windows.js.map +1 -0
- package/daemon/dist/domain/provider/provider-service-impl.d.ts +10 -0
- package/daemon/dist/domain/provider/provider-service-impl.d.ts.map +1 -1
- package/daemon/dist/domain/provider/provider-service-impl.js +27 -1
- package/daemon/dist/domain/provider/provider-service-impl.js.map +1 -1
- package/daemon/dist/domain/provider/provider-service.d.ts +5 -0
- package/daemon/dist/domain/provider/provider-service.d.ts.map +1 -1
- package/daemon/dist/domain/provider/provider-types.d.ts +65 -0
- package/daemon/dist/domain/provider/provider-types.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.d.ts +5 -2
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +29 -26
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-recovery.d.ts.map +1 -1
- package/daemon/dist/domain/queue-recovery.js +10 -3
- package/daemon/dist/domain/queue-recovery.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +68 -13
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +72 -43
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
- package/daemon/dist/domain/queue-stuck-sweep.js +26 -9
- package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
- package/daemon/dist/domain/queue-wake-ladder.d.ts +17 -0
- package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
- package/daemon/dist/domain/queue-wake-ladder.js +49 -3
- package/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
- package/daemon/dist/domain/restore-check-service.d.ts +8 -0
- package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
- package/daemon/dist/domain/restore-check-service.js +12 -3
- package/daemon/dist/domain/restore-check-service.js.map +1 -1
- package/daemon/dist/domain/restore-guidance.d.ts +39 -0
- package/daemon/dist/domain/restore-guidance.d.ts.map +1 -0
- package/daemon/dist/domain/restore-guidance.js +163 -0
- package/daemon/dist/domain/restore-guidance.js.map +1 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts +10 -1
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +192 -9
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/restore-plan-preview.d.ts +4 -0
- package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
- package/daemon/dist/domain/restore-plan-preview.js +14 -3
- package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.js +7 -6
- package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
- package/daemon/dist/domain/runtime-adapter.d.ts +3 -0
- package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/runtime-adapter.js.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.d.ts +4 -2
- package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.js +11 -11
- package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
- package/daemon/dist/domain/seat-attention-reconciler.d.ts +5 -2
- package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/seat-attention-reconciler.js +18 -4
- package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
- package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/seat-identity-reconciler.js +7 -2
- package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.d.ts +117 -2
- package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.js +335 -74
- package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
- package/daemon/dist/domain/seat-restart-in-place.d.ts +292 -0
- package/daemon/dist/domain/seat-restart-in-place.d.ts.map +1 -0
- package/daemon/dist/domain/seat-restart-in-place.js +895 -0
- package/daemon/dist/domain/seat-restart-in-place.js.map +1 -0
- package/daemon/dist/domain/seat-status-service.d.ts +2 -1
- package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-status-service.js +1 -0
- package/daemon/dist/domain/seat-status-service.js.map +1 -1
- package/daemon/dist/domain/seat-structural-activity-service.d.ts +9 -1
- package/daemon/dist/domain/seat-structural-activity-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-structural-activity-service.js +27 -4
- package/daemon/dist/domain/seat-structural-activity-service.js.map +1 -1
- package/daemon/dist/domain/seat-switch-client-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-switch-client-service.js +2 -1
- package/daemon/dist/domain/seat-switch-client-service.js.map +1 -1
- package/daemon/dist/domain/session-fingerprinter.d.ts.map +1 -1
- package/daemon/dist/domain/session-fingerprinter.js +9 -5
- package/daemon/dist/domain/session-fingerprinter.js.map +1 -1
- package/daemon/dist/domain/session-registry.d.ts +49 -0
- package/daemon/dist/domain/session-registry.d.ts.map +1 -1
- package/daemon/dist/domain/session-registry.js +92 -5
- package/daemon/dist/domain/session-registry.js.map +1 -1
- package/daemon/dist/domain/session-transport.d.ts +46 -4
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +492 -26
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.d.ts +10 -0
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +41 -4
- package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.d.ts +3 -7
- package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.js +6 -32
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/daemon/dist/domain/terminal/terminal-service.d.ts +5 -1
- package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/terminal-service.js +30 -4
- package/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
- package/daemon/dist/domain/terminal/view-composer.d.ts +6 -0
- package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/view-composer.js +2 -1
- package/daemon/dist/domain/terminal/view-composer.js.map +1 -1
- package/daemon/dist/domain/transcript-store.js +1 -1
- package/daemon/dist/domain/transcript-store.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +38 -0
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js +5 -0
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/usage-series.d.ts.map +1 -1
- package/daemon/dist/domain/usage-series.js +9 -4
- package/daemon/dist/domain/usage-series.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +44 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/view-projector.d.ts +4 -0
- package/daemon/dist/domain/view-projector.d.ts.map +1 -1
- package/daemon/dist/domain/view-projector.js +19 -4
- package/daemon/dist/domain/view-projector.js.map +1 -1
- package/daemon/dist/domain/wake-resolver.js +2 -2
- package/daemon/dist/domain/wake-resolver.js.map +1 -1
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-jobs-repository.js +19 -3
- package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
- package/daemon/dist/domain/whoami-service.d.ts +4 -1
- package/daemon/dist/domain/whoami-service.d.ts.map +1 -1
- package/daemon/dist/domain/whoami-service.js +25 -19
- package/daemon/dist/domain/whoami-service.js.map +1 -1
- package/daemon/dist/domain/workflow-runtime.d.ts +1 -1
- package/daemon/dist/domain/workspace/project-read.d.ts +2 -0
- package/daemon/dist/domain/workspace/project-read.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/project-read.js +19 -8
- package/daemon/dist/domain/workspace/project-read.js.map +1 -1
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +6 -0
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/routes/activity.d.ts.map +1 -1
- package/daemon/dist/routes/activity.js +33 -1
- package/daemon/dist/routes/activity.js.map +1 -1
- package/daemon/dist/routes/chat.d.ts.map +1 -1
- package/daemon/dist/routes/chat.js +29 -4
- package/daemon/dist/routes/chat.js.map +1 -1
- package/daemon/dist/routes/projects.d.ts.map +1 -1
- package/daemon/dist/routes/projects.js +5 -1
- package/daemon/dist/routes/projects.js.map +1 -1
- package/daemon/dist/routes/proof.d.ts.map +1 -1
- package/daemon/dist/routes/proof.js +99 -10
- package/daemon/dist/routes/proof.js.map +1 -1
- package/daemon/dist/routes/provider.d.ts.map +1 -1
- package/daemon/dist/routes/provider.js +31 -0
- package/daemon/dist/routes/provider.js.map +1 -1
- package/daemon/dist/routes/query-limit.d.ts +19 -0
- package/daemon/dist/routes/query-limit.d.ts.map +1 -0
- package/daemon/dist/routes/query-limit.js +24 -0
- package/daemon/dist/routes/query-limit.js.map +1 -0
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +35 -12
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/rig-cmux.js +8 -10
- package/daemon/dist/routes/rig-cmux.js.map +1 -1
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +11 -7
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/scopes.d.ts.map +1 -1
- package/daemon/dist/routes/scopes.js +5 -3
- package/daemon/dist/routes/scopes.js.map +1 -1
- package/daemon/dist/routes/seat.d.ts.map +1 -1
- package/daemon/dist/routes/seat.js +32 -0
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/stream.d.ts.map +1 -1
- package/daemon/dist/routes/stream.js +5 -1
- package/daemon/dist/routes/stream.js.map +1 -1
- package/daemon/dist/routes/up.d.ts.map +1 -1
- package/daemon/dist/routes/up.js +2 -1
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/routes/views.d.ts.map +1 -1
- package/daemon/dist/routes/views.js +7 -1
- package/daemon/dist/routes/views.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +30 -1
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-startup-guide.md +19 -0
- package/daemon/docs/reference/getting-started.md +10 -6
- package/daemon/docs/reference/keeping-a-watch.md +156 -0
- package/daemon/docs/reference/rig-spec.md +2 -2
- package/daemon/docs/reference/sdlc-conventions.md +11 -1
- package/daemon/docs/reference/slack-app-setup.md +12 -4
- package/daemon/docs/reference/whats-new.md +151 -74
- package/daemon/specs/agents/development/qa/guidance/role.md +9 -0
- package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +1 -1
- package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +2 -2
- package/daemon/specs/rigs/launch/factory/CULTURE.md +13 -0
- package/daemon/specs/rigs/launch/factory/guidance/lead-first-move.md +18 -5
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +20 -1
- package/daemon/specs/rigs/launch/starter/CULTURE.md +13 -0
- package/daemon/specs/rigs/launch/starter/guidance/lead-first-move.md +18 -5
- package/dist/build-info.js +3 -3
- package/dist/cli-error.d.ts.map +1 -1
- package/dist/cli-error.js +2 -0
- package/dist/cli-error.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +55 -4
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/capture.d.ts +9 -0
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +93 -41
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +6 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +44 -3
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/down.d.ts.map +1 -1
- package/dist/commands/down.js +1 -50
- package/dist/commands/down.js.map +1 -1
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +6 -0
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/heartbeat.js +2 -2
- package/dist/commands/heartbeat.js.map +1 -1
- package/dist/commands/proof.d.ts.map +1 -1
- package/dist/commands/proof.js +11 -5
- package/dist/commands/proof.js.map +1 -1
- package/dist/commands/provider.d.ts.map +1 -1
- package/dist/commands/provider.js +72 -0
- package/dist/commands/provider.js.map +1 -1
- package/dist/commands/ps.d.ts +7 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +20 -6
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts +48 -5
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +215 -45
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +57 -36
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +167 -10
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/setup.d.ts +6 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +100 -44
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +9 -4
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +10 -0
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/usage.d.ts.map +1 -1
- package/dist/commands/usage.js +10 -5
- package/dist/commands/usage.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +8 -8
- package/dist/commands/workflow.js.map +1 -1
- package/dist/config-store.d.ts +8 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +57 -0
- package/dist/config-store.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +4 -0
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +16 -4
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/lib/scope/capability-delta.d.ts.map +1 -1
- package/dist/lib/scope/capability-delta.js +8 -0
- package/dist/lib/scope/capability-delta.js.map +1 -1
- package/dist/lib/scope/mission-composition.d.ts +5 -1
- package/dist/lib/scope/mission-composition.d.ts.map +1 -1
- package/dist/lib/scope/mission-composition.js +61 -1
- package/dist/lib/scope/mission-composition.js.map +1 -1
- package/dist/lib/scope/progress-edit.js +1 -1
- package/dist/lib/scope/progress-edit.js.map +1 -1
- package/dist/lib/scope/scope-fs.d.ts +2 -1
- package/dist/lib/scope/scope-fs.d.ts.map +1 -1
- package/dist/lib/scope/scope-fs.js +7 -7
- package/dist/lib/scope/scope-fs.js.map +1 -1
- package/dist/lib/scope/slice-claims.d.ts +8 -0
- package/dist/lib/scope/slice-claims.d.ts.map +1 -0
- package/dist/lib/scope/slice-claims.js +88 -0
- package/dist/lib/scope/slice-claims.js.map +1 -0
- package/dist/queue-receipt.d.ts +41 -0
- package/dist/queue-receipt.d.ts.map +1 -0
- package/dist/queue-receipt.js +272 -0
- package/dist/queue-receipt.js.map +1 -0
- package/dist/rig-handle.d.ts +45 -0
- package/dist/rig-handle.d.ts.map +1 -0
- package/dist/rig-handle.js +51 -0
- package/dist/rig-handle.js.map +1 -0
- package/dist/system-preflight.d.ts +5 -0
- package/dist/system-preflight.d.ts.map +1 -1
- package/dist/system-preflight.js +8 -0
- package/dist/system-preflight.js.map +1 -1
- package/dist/terminal-window.d.ts.map +1 -1
- package/dist/terminal-window.js +3 -1
- package/dist/terminal-window.js.map +1 -1
- package/package.json +1 -1
- package/tui/dist/config/config-model.d.ts.map +1 -1
- package/tui/dist/config/config-model.js +3 -0
- package/tui/dist/config/config-model.js.map +1 -1
- package/tui/dist/daemon-client.d.ts +3 -0
- package/tui/dist/daemon-client.d.ts.map +1 -1
- package/tui/dist/daemon-client.js +4 -1
- package/tui/dist/daemon-client.js.map +1 -1
- package/tui/dist/detail.d.ts.map +1 -1
- package/tui/dist/detail.js +6 -1
- package/tui/dist/detail.js.map +1 -1
- package/tui/dist/hydrate.d.ts.map +1 -1
- package/tui/dist/hydrate.js +30 -21
- package/tui/dist/hydrate.js.map +1 -1
- package/tui/dist/input.d.ts.map +1 -1
- package/tui/dist/input.js +15 -4
- package/tui/dist/input.js.map +1 -1
- package/tui/dist/local-reading.js +2 -2
- package/tui/dist/local-reading.js.map +1 -1
- package/tui/dist/pulse/pulse-model.d.ts +1 -0
- package/tui/dist/pulse/pulse-model.d.ts.map +1 -1
- package/tui/dist/pulse/pulse-model.js +7 -3
- package/tui/dist/pulse/pulse-model.js.map +1 -1
- package/tui/dist/pulse/render-pulse.d.ts.map +1 -1
- package/tui/dist/pulse/render-pulse.js +3 -1
- package/tui/dist/pulse/render-pulse.js.map +1 -1
- package/tui/dist/reading.d.ts.map +1 -1
- package/tui/dist/reading.js +14 -3
- package/tui/dist/reading.js.map +1 -1
- package/tui/dist/render.d.ts.map +1 -1
- package/tui/dist/render.js +26 -11
- package/tui/dist/render.js.map +1 -1
- package/tui/dist/types.d.ts +3 -0
- package/tui/dist/types.d.ts.map +1 -1
- package/ui/dist/assets/{index-D5n8EwkG.js → index-DhmxKuZf.js} +159 -159
- package/ui/dist/index.html +1 -1
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Keeping a Watch for a Person
|
|
2
|
+
|
|
3
|
+
**How an operator turns "remind me in 20 minutes" or "tell me when X happens, check every hour" into a watch it
|
|
4
|
+
keeps, using today's queue commands.** The person speaks in sentences. They never see YAML, a job ID or a policy name
|
|
5
|
+
unless they ask.
|
|
6
|
+
|
|
7
|
+
> **Status (0.7.0, not on by default).** No agent's guidance points here yet, and no profile loads it. It's switched
|
|
8
|
+
> on by adding one line to the kernel operator's role guidance, after a native run on a real install shows the
|
|
9
|
+
> pattern holds. Until then, hand this page to an operator by hand (`docs/reference/keeping-a-watch.md`) to try it.
|
|
10
|
+
|
|
11
|
+
## The shape
|
|
12
|
+
|
|
13
|
+
A watch is a **queue task the operator owns**, set aside with a **one-shot timer**:
|
|
14
|
+
|
|
15
|
+
1. The person asks. The operator creates one task for itself and sets it aside with `--wake-after`.
|
|
16
|
+
2. The timer fires once and wakes the operator. The operator reads the task and checks the condition.
|
|
17
|
+
3. Then it tells the person, re-arms the timer, or both. **A timer fires once: a watch that isn't re-armed goes
|
|
18
|
+
quiet.**
|
|
19
|
+
|
|
20
|
+
OpenRig keeps the record and the timer. The operator does the judgment: what to check, and whether it's worth telling
|
|
21
|
+
the person.
|
|
22
|
+
|
|
23
|
+
## Before you set one: can you reach the person?
|
|
24
|
+
|
|
25
|
+
Run `rig gateway human list --json`. A watch tells the person through the registered human channel (Slack today,
|
|
26
|
+
also shown in the TUI Feed), at `<entityId>@external`. **A terminal is never a person's address.** If no human is
|
|
27
|
+
registered, say so now, before setting anything up: a watch that can't reach them is a watch they'll never hear from.
|
|
28
|
+
|
|
29
|
+
## Setting a watch
|
|
30
|
+
|
|
31
|
+
**1. Write the task body for a successor.** You may be restarted, compacted or replaced before the watch ends. A new
|
|
32
|
+
operator must be able to act from the task alone. Put these in the body:
|
|
33
|
+
|
|
34
|
+
```markdown
|
|
35
|
+
Person's words: "Tell me when the release PR merges; check every hour."
|
|
36
|
+
Check: `gh pr view <n> --json state` — met when state is MERGED.
|
|
37
|
+
Interval: 1h.
|
|
38
|
+
Tell them: <entityId>@external (human channel), once, when met.
|
|
39
|
+
Stop: after telling them once, or when they say stop.
|
|
40
|
+
Unknown: not said yet.
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**2. Create it for yourself,** with a `watch` tag so it can be listed later (tags can't be changed after creation).
|
|
44
|
+
`<your session>` is your session name from `rig whoami --json`:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
rig queue create --destination <your session> --tags watch \
|
|
48
|
+
--summary "Watch: tell <person> when the release PR merges (hourly)" --body-file <file>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**3. Set it aside with the timer.** A new pending task can be set aside directly; no claim is needed:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
rig queue block <task> --on external:<what you check> --wake-after 1h \
|
|
55
|
+
--continuation "check <what>; tell <person> if met, else re-arm 1h"
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`--on` is always required; `external:<what>` names the outside thing you're waiting on. The timer first fires after
|
|
59
|
+
the interval, not now.
|
|
60
|
+
|
|
61
|
+
**4. Say back what you set, in one or two plain lines:** what you'll check, how often, how they'll be told, and when
|
|
62
|
+
it stops. For example: "I'll check the release PR every hour and message you here once it merges. Then I'll stop."
|
|
63
|
+
|
|
64
|
+
A plain reminder ("remind me in 20 minutes to look at the release notes") is the same with no condition. Set it aside
|
|
65
|
+
with `--wake-after 20m`, and when it fires, tell them and close it.
|
|
66
|
+
|
|
67
|
+
## Every time the timer fires: read the record first
|
|
68
|
+
|
|
69
|
+
When the timer's message arrives, **run `rig queue show <task> --full --json` before doing anything.** A message already
|
|
70
|
+
on its way can still arrive after the watch was stopped or changed. If the task is no longer set aside (done, canceled, or replaced),
|
|
71
|
+
do nothing.
|
|
72
|
+
|
|
73
|
+
Otherwise, check the condition, then do exactly one of these:
|
|
74
|
+
|
|
75
|
+
| What you found | Do |
|
|
76
|
+
|---|---|
|
|
77
|
+
| **Met, and the watch was "once"** | Tell the person (below), then close: `rig queue update <task> --state done --closure-reason no-follow-on --note "<what you saw>"` |
|
|
78
|
+
| **Met, and it's "every time"** | Tell the person, then re-arm |
|
|
79
|
+
| **Not met** | Re-arm. Say nothing to the person: never send "nothing yet" |
|
|
80
|
+
| **Can't tell** (no fresh reading) | The first time, tell them once that you can't tell, and why. Record that in a note (`Unknown: said <time>`), then re-arm. **Never say "all fine" for an unknown.** Stay quiet on later unknowns until the reading returns or changes |
|
|
81
|
+
|
|
82
|
+
**Re-arm** by setting it aside again with a fresh timer:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
rig queue block <task> --on external:<what> --wake-after 1h --note "checked <time>: not met"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
A new set-aside replaces the old one and retires any earlier timer, so a task never carries two live timers.
|
|
89
|
+
|
|
90
|
+
**Put what changed in `--note` or `--continuation`, not both.** When `rig queue block` gets `--continuation`, that is
|
|
91
|
+
the note it records, and `--note` is dropped.
|
|
92
|
+
|
|
93
|
+
Each check costs one of your turns on the person's subscription. **Use the longest interval that serves the ask.**
|
|
94
|
+
|
|
95
|
+
## Telling the person
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
rig queue create --destination <entityId>@external --human-intent update \
|
|
99
|
+
--summary "<subject>" --body-file <brief> --evidence-ref <watch task id> --verify --json
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
- Always pass `--evidence-ref`; the watch task's ID is a durable pointer the person can open.
|
|
103
|
+
- Later messages about the same watch can thread with `--reply-to <earlier message's id>`.
|
|
104
|
+
- **`posted` means the connector posted it, not that they read it.** Don't say they saw it.
|
|
105
|
+
- **If delivery fails or is indeterminate,** inspect that task before anything else. Never resend blindly.
|
|
106
|
+
|
|
107
|
+
## "What are you watching for me?"
|
|
108
|
+
|
|
109
|
+
List **every active state**, not just set-aside ones. A watch being checked can be in progress, and a new one can be
|
|
110
|
+
pending:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
rig queue list --owned --state pending,in-progress,blocked --full --limit 200 -o json
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Then keep the tasks tagged `watch`. Two rules:
|
|
117
|
+
|
|
118
|
+
- **Check that the number of tasks returned is below the limit.** The limit applies before you filter by tag. If you got
|
|
119
|
+
exactly the limit, raise it and list again. **Never report "no watch" from a page that was cut off.**
|
|
120
|
+
- **Use `--full`.** Compact output leaves out the body and the waiting view.
|
|
121
|
+
|
|
122
|
+
For each watch, say what it checks, how often, how they'll be told, and the next check. The next check is
|
|
123
|
+
`waiting.nextBackstop.dueAt` when `waiting.nextBackstop.mechanism` starts with `watchdog:`. If a set-aside watch shows
|
|
124
|
+
no timed backstop instead, its timer has fired and wasn't re-armed. Check it now and re-arm it.
|
|
125
|
+
|
|
126
|
+
Answer from the records, so a second reader would give the same list.
|
|
127
|
+
|
|
128
|
+
## Changing or stopping a watch
|
|
129
|
+
|
|
130
|
+
| The person says | Do |
|
|
131
|
+
|---|---|
|
|
132
|
+
| **"Check every 2 hours instead"** | Re-arm with the new interval and a note saying what changed: `rig queue block <task> --on external:<what> --wake-after 2h --note "<person's words>"` |
|
|
133
|
+
| **"Watch Y instead"** (what's checked changes) | A task's body can't be edited. Create the new watch, then retire the old one: `rig queue update <old> --state canceled --closure-reason superseded --closure-target <new> --note "<person's words>"` |
|
|
134
|
+
| **"Stop watching that"** | `rig queue update <task> --state canceled --note "<person's words>"`. Leaving the set-aside state retires its timer. A plain cancel takes no other closure fields |
|
|
135
|
+
|
|
136
|
+
Tell the person in one line what changed. After a stop, take no further action for that watch.
|
|
137
|
+
|
|
138
|
+
## Across a restart or handover
|
|
139
|
+
|
|
140
|
+
A set-aside watch's current timer is **kept** when the operator is restarted or replaced, and it fires at whoever is
|
|
141
|
+
the operator next. That's why the body must stand alone.
|
|
142
|
+
|
|
143
|
+
**One gap:** a timer fires once. If the operator is replaced **after a fire and before the re-arm**, the successor
|
|
144
|
+
inherits a set-aside watch with no live timer. OpenRig's idle-owner check may remind the new operator once, but only
|
|
145
|
+
under some conditions, with no delay guarantee. So:
|
|
146
|
+
|
|
147
|
+
- **Re-arm promptly** after every fire.
|
|
148
|
+
- **After a restart or handover, list your watches** (above) and re-arm any that show no timed backstop.
|
|
149
|
+
|
|
150
|
+
## What not to use
|
|
151
|
+
|
|
152
|
+
- **`rig watchdog register --policy periodic-reminder` for a person's watch.** It repeats every interval until it's
|
|
153
|
+
stopped (the first fire comes one interval after you register it), and it stops when the agent that registered it
|
|
154
|
+
is replaced. It's fine for agent-to-agent reminders.
|
|
155
|
+
- **Transcript bytes as "usage".** `context-usage-threshold` measures an agent's transcript, not an account's
|
|
156
|
+
allowance.
|
|
@@ -397,7 +397,7 @@ directory's `CLAUDE.md`, including blocks written by other rigs.
|
|
|
397
397
|
| `profile` | string | yes | — | Profile name from the referenced AgentSpec. Use `default` for the default profile. Exception: `none` for terminal nodes. |
|
|
398
398
|
| `codex_config_profile` | string | no | — | Codex-only native profile passed as `-p <name>`; letters, numbers, `_`, `.`, `-`. Separate from the AgentSpec `profile`. With the normal launch mode, this replaces OpenRig's explicit workspace-write sandbox flag. A full-bypass policy instead emits danger-full-access and omits this profile argument. |
|
|
399
399
|
| `runtime` | string | yes | — | Agent runtime. Current supported values: `claude-code`, `codex`, `pi`, `omp`, `terminal`, `stub`. `stub` is a deterministic test harness, not an agent: a Node runner in the seat's tmux pane goes through the normal launch, skill projection, startup-file and readiness path, follows `<cwd>/.openrig/stub/script.json` when present, and calls no model. See "What a stub can and cannot prove" in `docs/as-built/test-layers.md`. |
|
|
400
|
-
| `cwd` | string | yes | — | Working directory for the agent. A relative path resolves against the rig root (the directory containing the rig spec)
|
|
400
|
+
| `cwd` | string | yes | — | Working directory for the agent. A relative path resolves against the rig root (the directory containing the rig spec). If that path exists as written, it is used. Otherwise a leading `~` or `~/` expands to the home directory (`~user` does not) and `$VAR` / `${VAR}` expand from the daemon host's environment; a relative result still resolves against the rig root. A reference to an unset variable stays as written, so the cwd is that literal path and works only if it exists. Use `"."` for the rig root itself. Can be overridden at launch time with `rig up --cwd`. A cwd inside the OpenRig installation fails preflight unless `--cwd` is given. |
|
|
401
401
|
| `label` | string | no | — | Human-readable member name. Shown in UI when present. |
|
|
402
402
|
| `model` | string | no | — | Model override. Runtime-specific (e.g., `claude-opus-4-6` for Claude Code). |
|
|
403
403
|
| `effort` | string | no | — | Reasoning effort override, trimmed. A non-string value is ignored with an advisory. |
|
|
@@ -406,7 +406,7 @@ directory's `CLAUDE.md`, including blocks written by other rigs.
|
|
|
406
406
|
| `restore_policy` | string | no | the AgentSpec's | Restore behavior. One of: `resume_if_possible`, `relaunch_fresh`, `checkpoint_only`. The default comes from the AgentSpec's `defaults.lifecycle` (else `resume_if_possible`) as narrowed by its profile; a member value may only narrow it further, in that order. |
|
|
407
407
|
| `compaction_strategy` | string | no | — | `default-compaction`, `managed-compaction`, `handover` or `apprentice-handover`; `harness_native` and `pod_continuity` are accepted as deprecated aliases, and `custom_prompt` is refused. |
|
|
408
408
|
| `mechanic` | string | no | — | A canonical `seat@rig` session address, for `apprentice-handover`. |
|
|
409
|
-
| `session_source` | object | no | — | Start the seat from an existing session: `fork` with `native_id`, `rebuild` with `artifact_set`, or `agent_image` with `image_name`. Not valid on terminal members. |
|
|
409
|
+
| `session_source` | object | no | — | Start the seat from an existing session: `fork` with `native_id`, `rebuild` with `artifact_set`, or `agent_image` with `image_name`. A Claude Code `fork` needs Claude Code 2.0.73 or later. Not valid on terminal members. |
|
|
410
410
|
| `starter_ref` | object | no | — | `{ name }` of an agent starter (`^[a-zA-Z0-9][a-zA-Z0-9_-]*$`) whose files lead the seat's startup. Not valid on terminal members or with a fork. |
|
|
411
411
|
| `startup` | StartupBlock | no | — | Member-level startup files and actions. Applied only to this member. |
|
|
412
412
|
|
|
@@ -121,7 +121,17 @@ When the owning scope selects `proofPolicy.judges`, use `rig proof judge` to
|
|
|
121
121
|
record an attributed accept, reject or withdraw decision on a contract item,
|
|
122
122
|
and `rig proof show` to read derived readiness up through slice, mission and
|
|
123
123
|
project. The nearest slice, mission or project policy selects authorized judges;
|
|
124
|
-
`rig proof --help` describes setup, selectors and evidence requirements.
|
|
124
|
+
`rig proof --help` describes setup, selectors and evidence requirements. In a
|
|
125
|
+
multi-project workspace catalog, name the project with `--project <id>` or a
|
|
126
|
+
`<id>:` scope prefix (`alpha:m0/slices/01-t001`); unqualified scopes use the
|
|
127
|
+
daemon's selected workspace. The prefix counts only when it names a catalogued
|
|
128
|
+
project and no scope exists at that literal path, so a mission folder with a
|
|
129
|
+
colon (`alpha:trial/slices/01-t001`) still resolves as written. The scopes views
|
|
130
|
+
read a catalog project's readiness against the same project root, so they agree
|
|
131
|
+
with `rig proof show`. A catalog-project read names the project
|
|
132
|
+
(`project: { id, root }`) and reports its source watcher as unavailable; a
|
|
133
|
+
judgment carries that root and is refused (409 `project_changed`) if the
|
|
134
|
+
catalog has since moved the project. A
|
|
125
135
|
correction preserves history and unrelated judgments without editing ancestor
|
|
126
136
|
status checklists. An artifact can identify non-code work without a fabricated
|
|
127
137
|
commit. Evidence capture (`proof add`), policy acceptance, higher outcome
|
|
@@ -98,6 +98,12 @@ questions by clicking a button (`rig queue create --human-questions-file`). In S
|
|
|
98
98
|
clicks arrive over the same socket, so no request URL is needed. An app created from an older
|
|
99
99
|
manifest has Interactivity off: turn it on under **Interactivity & Shortcuts**, or the buttons
|
|
100
100
|
will do nothing. A typed reply in the thread still answers the decision either way.
|
|
101
|
+
Each click gets one short reply in the decision's thread: what was recorded, or, when OpenRig
|
|
102
|
+
refuses the click or can't record it, why and what to do instead (the sender isn't registered, the
|
|
103
|
+
decision is no longer waiting for answers or was sent to someone else, the button no longer
|
|
104
|
+
matches its questions, or the message can't be matched to a decision). Slack's redelivery of a
|
|
105
|
+
click OpenRig already handled gets no second reply. The reply is best effort: while Slack is
|
|
106
|
+
rate-limiting OpenRig's posts it may not be posted, and the click is handled the same either way.
|
|
101
107
|
|
|
102
108
|
In the decision's `humanAnswers`, clicked answers remain option-id strings. A whole typed reply
|
|
103
109
|
is stored as `{kind: "typed-reply", text: "…", placement: "first-unanswered", unansweredCount: N}`
|
|
@@ -172,8 +178,9 @@ are not supported targets.
|
|
|
172
178
|
|
|
173
179
|
## Reconnect recovery and status
|
|
174
180
|
|
|
175
|
-
The daemon scans available top-level messages
|
|
176
|
-
Socket Mode connection and on its
|
|
181
|
+
The daemon scans available top-level messages and replies broadcast with **Also send to
|
|
182
|
+
channel** in the configured default channel after a Socket Mode connection and on its
|
|
183
|
+
existing five-minute retry cadence. Broadcast replies keep their thread's routing. Recovered
|
|
177
184
|
tasks say **Recovered after a gap** and show the original Slack posting time.
|
|
178
185
|
They use the same sender admission, routing, attachment handling, fixed identity
|
|
179
186
|
and dead-letter path as live messages. A durable dead letter is custody of a
|
|
@@ -198,8 +205,9 @@ When Slack reports a plan history limit, recovery still lands the available page
|
|
|
198
205
|
and advances normally, retaining an older-history limitation in status across restarts.
|
|
199
206
|
Missing bot credentials, history scope, membership, retention limits and API
|
|
200
207
|
failures appear as recovery limitations. No additional scope is required to keep
|
|
201
|
-
live delivery working.
|
|
202
|
-
|
|
208
|
+
live delivery working. Non-broadcast thread replies and other channels remain outside
|
|
209
|
+
this recovery scope; global chronological order is not promised. This change does not
|
|
210
|
+
replay intervals already checkpointed before broadcast-reply recovery was added.
|
|
203
211
|
|
|
204
212
|
`rig slack status` retains local configuration checks and adds a bounded daemon
|
|
205
213
|
snapshot: socket state/generation, last event, recovery interval/state/reason,
|
|
@@ -1,91 +1,168 @@
|
|
|
1
|
-
# What changed in OpenRig 0.6.
|
|
1
|
+
# What changed in OpenRig 0.6.11
|
|
2
2
|
|
|
3
|
-
This note is for an agent on an install that was just upgraded to 0.6.
|
|
4
|
-
0.6.
|
|
3
|
+
This note is for an agent on an install that was just upgraded to 0.6.11. It lists only what behaves differently from
|
|
4
|
+
0.6.10 and what to do about it. For everything OpenRig can do, read the capability map:
|
|
5
5
|
`rig context get onboarding-width/public-what-you-can-do.md`. Each release replaces this file, so
|
|
6
6
|
`rig context get reference/whats-new.md` describes the installed version once the upgraded daemon is running. Without
|
|
7
7
|
a running daemon, read `$OPENRIG_HOME/reference/whats-new.md`. The daemon refreshes that copy when it starts, so right
|
|
8
8
|
after an upgrade it can still hold the previous version's note.
|
|
9
9
|
|
|
10
|
-
##
|
|
11
|
-
|
|
12
|
-
- **
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
`
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
10
|
+
## After the upgrade
|
|
11
|
+
|
|
12
|
+
- **Restart the daemon** (`rig daemon stop`, then `rig daemon start`). One migration runs on the first start: `103`
|
|
13
|
+
adds one column to `sessions`, `intentionally_stopped`, which is 0 for every existing row. There are no migrations
|
|
14
|
+
`100` or `102`. The bundled openrig-core plugin stays at 0.1.9; two of its files changed.
|
|
15
|
+
- **Two new switches, both off by default:**
|
|
16
|
+
- `output.compact` (or `OPENRIG_OUTPUT_COMPACT`): the seven queue write commands (`rig queue create`, `claim`,
|
|
17
|
+
`unclaim`, `update`, `block`, `handoff` and `handoff-and-complete`) print a short receipt instead of the whole
|
|
18
|
+
row, and `--full` prints the whole row. While it's off their output is unchanged, `--full` is accepted, and
|
|
19
|
+
`rig config` lists the key.
|
|
20
|
+
- `provider.usage_windows` (or `OPENRIG_PROVIDER_USAGE_WINDOWS` in the daemon's environment): `rig provider status
|
|
21
|
+
--refresh` reads a Codex login's usage windows once. While it's off, `--refresh` says how to turn it on and exits 1.
|
|
22
|
+
|
|
23
|
+
## Output that changed shape
|
|
24
|
+
|
|
25
|
+
- **`rig queue create --verify` reports `outcome: "claimed"`** for a claimed row whose wake wasn't confirmed, instead
|
|
26
|
+
of `indeterminate`. A claim is pickup, not proof the body was read.
|
|
27
|
+
- **`rig queue create --verify` to a registered person who is also a seat with a pane reports the Slack side too.**
|
|
28
|
+
Beside the terminal wake it adds a `gateway` object: `posted` (`connectorAccepted: true`), `transport-failed` or
|
|
29
|
+
`never-posted` (`connectorAccepted: false`, with the detail), or `still-pending` (`connectorAccepted: null`). The
|
|
30
|
+
wait is still bounded by the existing 30-second default, and it can use all of it even when Slack isn't set up or the
|
|
31
|
+
row won't be posted; the Slack side then reads `still-pending`. Posted isn't read, and "This is not a failed handoff"
|
|
32
|
+
isn't shown when Slack reports a failed delivery. `GET /api/queue/:qitemId` returns `ownerNotificationLevel`, or
|
|
33
|
+
`null`.
|
|
34
|
+
- **`rig queue whoami --work-candidates` returns up to 50 held and 50 next rows,** with `heldTruncated` and
|
|
35
|
+
`nextTruncated`. `heldAndNextTruncated` now means either list was cut. With `OPENRIG_REFOCUS_WORK_PACKET` on (off by
|
|
36
|
+
default, as in 0.6.10), the refocus work packet lists held and next work separately, up to 50 each.
|
|
37
|
+
- **`rig ps --nodes --json` carries `intentionallyStopped`,** and `rig ps --nodes` shows `usage_limit` under REASON for a
|
|
38
|
+
Codex seat at its usage limit.
|
|
39
|
+
|
|
40
|
+
## Seats and restore
|
|
41
|
+
|
|
42
|
+
- **A restore no longer starts a seat fresh when an earlier occupant left a resume token.** If a seat wasn't running
|
|
43
|
+
when the snapshot was taken, but an earlier session recorded a resume token, `rig up --existing` and `rig launch`
|
|
44
|
+
stop that seat at `awaiting-decision` and start nothing, because the token doesn't prove that conversation can still
|
|
45
|
+
resume. `rig launch` of such a seat exits 1 where it used to start it fresh. The message names the command that
|
|
46
|
+
starts it fresh on purpose. See the known gap below for how this shows in the rig status API.
|
|
47
|
+
- **In a restore of a rig whose seats are in pods, a seat is rolled back as unresumable only when its runtime reports
|
|
48
|
+
the conversation missing.** When Claude, Codex or Pi reports that, the seat goes back to `awaiting-decision` and
|
|
49
|
+
nothing starts, instead of a failed launch that left the new pane behind. A rig where every seat ends this way reads
|
|
50
|
+
`partially_restored` instead of `failed`; the exit code is 1 either way. A Claude that exits to its shell for another
|
|
51
|
+
reason keeps 0.6.10's result: the seat is reported failed and its pane is kept, so you can read what happened. Restores
|
|
52
|
+
of rigs without pods keep their earlier handling.
|
|
53
|
+
- **`rig seat launch --fresh --stop` checks before it stops anything.** A seat with a still-live older session is
|
|
54
|
+
refused before the current agent is stopped; 0.6.10 stopped it first. `--plan` previews a fresh launch without
|
|
55
|
+
changing anything and exits 0 even when it would be blocked. `--reason` is required only to execute; leaving it out
|
|
56
|
+
reports `missing_reason`.
|
|
57
|
+
- **A seat you stop on purpose no longer makes its rig read `degraded`.** `rig seat stop` records the stop, and `rig ps`
|
|
58
|
+
and the TUI leave that seat out of the rig's state; running counts still exclude it. A rig whose seats were all
|
|
59
|
+
stopped this way reads `stopped`.
|
|
60
|
+
- **Restart one Codex seat in place, on Linux:** `rig seat restart <seat> --keep-conversation --reason "<why>"`
|
|
61
|
+
restarts it in its own pane on the same conversation, so it starts again on whatever account its Codex home now
|
|
62
|
+
holds. It doesn't switch accounts itself. Before it stops anything, it checks that the seat is a Codex seat OpenRig
|
|
63
|
+
launched, in a single pane, with a conversation it can prove, and that relaunching wouldn't change the running
|
|
64
|
+
settings; any doubt refuses with nothing stopped. `--plan` runs every check and stops nothing.
|
|
65
|
+
`--verify --expect-account <account>` reports `moved` only when a tool turn has completed in the same conversation
|
|
66
|
+
since the restart and Codex's status names that account.
|
|
67
|
+
On macOS, a request that gets as far as reading the running process refuses before stopping the seat, because that
|
|
68
|
+
reading depends on `/proc`.
|
|
69
|
+
- **A forked Claude seat launches with its own session ID** (`rig fork`, or `session_source: fork`), so strict restore
|
|
70
|
+
and clear-attention can verify it as its own conversation. Forking a Claude seat needs Claude Code 2.0.73 or later,
|
|
71
|
+
which OpenRig doesn't check. Forks launched before this keep reading `mismatch` until they're relaunched.
|
|
72
|
+
- **Seats no longer inherit the launching Claude Code or Herdr session's identity variables,** such as `CLAUDECODE`.
|
|
73
|
+
If removing them fails, the launch goes ahead with a warning.
|
|
74
|
+
- **A member's `cwd` in a rig spec can be `~`, start with `~/`, or use `$VAR` or `${VAR}`,** expanded from the daemon's
|
|
75
|
+
environment, when the path as written doesn't exist. `rig up` warns on stderr when it chose `/` as the launch folder
|
|
76
|
+
itself.
|
|
77
|
+
- **A late readiness result no longer overwrites a newer launch attempt.**
|
|
78
|
+
|
|
79
|
+
## Sends and wakes
|
|
80
|
+
|
|
81
|
+
- **`rig send --wait-for-idle N` waits before it takes the seat's delivery lease,** so other sends and queue wakes to
|
|
82
|
+
that seat aren't held behind a long wait. N is now a deadline from the start of the wait, including any time spent
|
|
83
|
+
waiting for the lease. A timeout names the wait you asked for.
|
|
84
|
+
- **A parked seat whose occupant is known isn't woken again for the same rows after a wake was delivered,** until it
|
|
85
|
+
updates one of them or one changes state. A failed, refused or unrecorded wake still repeats at the next park, and a
|
|
86
|
+
new occupant gets its first wake. "Delivered" means the wake was typed into the seat's terminal, not that the agent
|
|
87
|
+
read it.
|
|
88
|
+
- **`rig send --verify` confirms enveloped multi-line messages that the agent's screen indents,** and queue wakes use
|
|
89
|
+
the same check.
|
|
90
|
+
- **A Claude footer in auto, bypass or plan mode on the last line reads idle** when no activity hook is reporting.
|
|
91
|
+
- **A failed Pi or OMP turn shows the provider's own reason** when it gives one.
|
|
92
|
+
- **A `handed-off` closure with no visible successor** gets the same custody advisory and stuck-sweep finding as a
|
|
93
|
+
`done` closure.
|
|
94
|
+
|
|
95
|
+
## Status
|
|
96
|
+
|
|
97
|
+
- **A Codex seat at its usage limit stays `unknown` with reason `usage_limit`** while its screen redraws, instead of
|
|
98
|
+
reading `running`. It clears when a readable screen shows no banner, or when Codex shows it's working again. See the
|
|
99
|
+
known gap below.
|
|
100
|
+
- **`rig ps` takes a rig's running count and status from the same set of sessions as `rig ps --nodes`.**
|
|
101
|
+
- **`rig whoami --full --json` shows a Codex seat's `runtimeContext.threadId`** when its stored conversation ID was
|
|
102
|
+
verified resumable.
|
|
103
|
+
- **The TUI says when a queue sample hit its cap or failed to load:** counts read `N+`, a seat missing from the sample
|
|
104
|
+
shows `?`, and Pulse no longer lists a NEEDS YOU item a second time. The caps count the whole host, so a quiet rig can
|
|
105
|
+
read `?` while another rig is busy.
|
|
106
|
+
- **The TUI Topology table's Q, WORK and NOW columns fill again** on drilled views and on a seat's page.
|
|
107
|
+
|
|
108
|
+
## Smaller fixes
|
|
109
|
+
|
|
110
|
+
- A Slack reply sent with "Also send to channel" in the default channel is recovered after a connection gap.
|
|
111
|
+
- `rig config set daemon.port` refuses a port outside 0–65535, and a port like that from the environment or
|
|
112
|
+
`config.json` falls back to the file or default with a warning. `rig daemon start --port` refuses one too, with exit 1.
|
|
113
|
+
- Parallel `rig scope slice create` calls get different slice numbers. A number is never reused, and each create leaves
|
|
114
|
+
a hidden `slices/.nn-NN` claim file.
|
|
115
|
+
- `rig proof show` and `rig proof judge` take `--project <id>` or a `<project>:` scope prefix. Scope readiness for a
|
|
116
|
+
project selected in the TUI uses that project's own root.
|
|
117
|
+
- The chat send and topic routes return 400 before storing anything for payloads that used to fail with 500;
|
|
118
|
+
`/api/wake-resolve` answers a fractional or non-numeric generation with its usual "does not exist" reply; watchdog
|
|
119
|
+
registration refuses a `scan_interval_seconds` that can't be turned into a number (non-numeric text, a boolean, an
|
|
120
|
+
empty array); and unmanaged-pane discovery matches agent
|
|
121
|
+
process names exactly, plus `claude.exe` and names cut to 15 or 16 characters.
|
|
122
|
+
- The `rigs` and `openrig-skills` skill descriptions split by who is asking: a person in their own session, or an agent
|
|
123
|
+
inside a rig.
|
|
124
|
+
- A new reference page covers keeping a watch for a person with today's queue commands, installed at
|
|
125
|
+
`$OPENRIG_HOME/reference/keeping-a-watch.md`. See the known gap below.
|
|
70
126
|
|
|
71
127
|
## What to stop doing
|
|
72
128
|
|
|
73
|
-
- **Stop
|
|
74
|
-
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
129
|
+
- **Stop expecting a restore to start a seat fresh** when an earlier session left a resume token; decide at
|
|
130
|
+
`awaiting-decision`, or use the command the message names.
|
|
131
|
+
- **Stop reading `indeterminate` as the answer for a claimed row** from `rig queue create --verify`; 0.6.11 says
|
|
132
|
+
`claimed`.
|
|
133
|
+
- **Stop treating `degraded` as a stopped seat's doing** after `rig seat stop`; the rig leaves that seat out.
|
|
134
|
+
- **Stop counting a long `--wait-for-idle` as extra time after the lease;** N is a deadline from the start of the wait.
|
|
135
|
+
|
|
136
|
+
## Known gaps in 0.6.11
|
|
137
|
+
|
|
138
|
+
- **`rig seat restart --keep-conversation` supports Linux only.** Its automated tests are hermetic: they don't restart a
|
|
139
|
+
real Codex seat.
|
|
140
|
+
- **The rig status API can call a running rig `blocked` because of one seat that isn't running.** It happens when the
|
|
141
|
+
latest snapshot recorded no occupant for that seat, an earlier session of the seat left a resume token, and its newest
|
|
142
|
+
session's restore policy is `resume_if_possible`. A restore from that snapshot would stop at the seat for a decision,
|
|
143
|
+
and `GET /api/rigs/:id/status` folds that forecast into the rig's status, so it mixes current status with restore
|
|
144
|
+
readiness: no seat is halted. `rig status` and the TUI's rig list don't show it for a running rig.
|
|
145
|
+
- **A Codex seat can keep reading as at its usage limit** when an old usage-limit banner is followed by a submitted
|
|
146
|
+
prompt and the agent's reply, with no Codex working line and no input line below. It's recorded again every five
|
|
147
|
+
minutes, where 0.6.10 let it age out. The case was constructed from the source and hasn't been seen in a real
|
|
148
|
+
session.
|
|
149
|
+
- **The keeping-a-watch page says a timer fires once; a held-back wake uses up that fire.** When the typing guard holds
|
|
150
|
+
a one-shot `--wake-after` wake back (it shows as `retained`), that held-back attempt is recorded as the timer's one
|
|
151
|
+
fire and later wakes aren't, so the timer isn't retired: it can wake the owner again at each interval while the row
|
|
152
|
+
stays set aside. A row sharing the timer through `--wake-watchdog`, after the original row was handed off or stopped,
|
|
153
|
+
loses its one wake if that wake is held back. Read the row's transitions after each wake.
|
|
154
|
+
- **After `rig scope slice create` says it couldn't verify membership, the slice was kept.** Check `mission.yaml` before
|
|
155
|
+
creating it again: creating it again makes a second slice with the same name.
|
|
156
|
+
- **The latest first-install check before this release used 0.6.10 on Linux only.** macOS was last checked with 0.6.8,
|
|
157
|
+
and native Windows hasn't been checked.
|
|
83
158
|
- **Only one selected lifecycle-help command has been checked in a live Claude session;** source and parser coverage
|
|
84
159
|
is broader. If a help command still asks, report it.
|
|
85
160
|
- **Codex team seats aren't asked before lifecycle commands yet.**
|
|
86
161
|
- **The send gate trusts the most recently recorded hook.** If hooks are recorded out of order, it can hold a send for
|
|
87
162
|
a question that's already answered, or miss one that's waiting. `rig capture` shows the real screen.
|
|
88
163
|
- **A Codex seat whose permission request was approved automatically can still read "needs input".**
|
|
89
|
-
- **A launched team still writes
|
|
164
|
+
- **A launched team still writes into its working folder;** the operator says what changes before you agree.
|
|
90
165
|
- **After a restart, `rig status` shows `Kernel: skipped` whatever the kernel seats' state.** Read them with
|
|
91
166
|
`rig ps --nodes --rig kernel --full`.
|
|
167
|
+
- **`rig tui --shared` still attaches on the default tmux server,** so it can't find the dashboard when the daemon runs
|
|
168
|
+
on a non-default tmux socket. Use `rig tui` there instead.
|
|
@@ -21,3 +21,12 @@ A tiny change can have builder-held verification. When independent QA is selecte
|
|
|
21
21
|
the evaluator must not be the author. Load browser/dogfood skills only for a
|
|
22
22
|
relevant UI journey. Respect a read-only assignment; fix-and-retest requires that
|
|
23
23
|
scope, and changes make you an author of the repaired candidate.
|
|
24
|
+
|
|
25
|
+
Run checks the way your permissions expect, so the person isn't stopped for each
|
|
26
|
+
one. Run the project's own test command first: under a team's default
|
|
27
|
+
permissions, test runners such as `npm test` and `pytest` usually run without
|
|
28
|
+
asking, though an explicit permission choice can still require approval. To try
|
|
29
|
+
an input the tests don't cover, run one plain command at a time (for example
|
|
30
|
+
`python3 tip.py 1e30`), not a chained script with pipes, shell functions or
|
|
31
|
+
quoted braces. A new program may still ask the person once, and a plain command
|
|
32
|
+
is one they can allow for later runs.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: openrig-skills
|
|
3
|
-
description: "Use when
|
|
3
|
+
description: "Use when an agent running inside OpenRig needs the right skill or context for fleet recovery, seat handover, new-seat orientation, a watchdog wake, cross-host reach to an agent on another machine, rig packaging, an OpenRig upgrade, systematic debugging, queue triage, or implementation planning; also when the agent doesn't know what applies or nothing is projected on cold boot. Installing, starting or updating OpenRig, getting back to a team or bringing a stopped one back from a person's own session is the rigs skill."
|
|
4
4
|
allowed-tools: Bash(rig:*)
|
|
5
5
|
metadata:
|
|
6
6
|
openrig:
|
package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md
CHANGED
|
@@ -67,8 +67,8 @@ Write a fragment instead when a seat needs something `rig grow` does not set: an
|
|
|
67
67
|
explicit model, a permission policy, a different agent spec or role profile, a
|
|
68
68
|
per-seat runtime or working directory, or startup files. Use
|
|
69
69
|
`rig expand <rig-id> <pod-fragment-path>` to add a pod, or
|
|
70
|
-
`rig add <rig
|
|
71
|
-
existing pod.
|
|
70
|
+
`rig add <rig> <pod-namespace> <member-fragment-path>` to add one member to an
|
|
71
|
+
existing pod (`<rig>` is the rig id or its exact unique name).
|
|
72
72
|
|
|
73
73
|
## Don't use this when
|
|
74
74
|
|
|
@@ -94,3 +94,16 @@ Use `mission-slice-sop` for the active work's artifact and handoff conventions.
|
|
|
94
94
|
The selected components or wave determine checks and independence; locks and
|
|
95
95
|
Part B proof ceremony apply only when explicitly assigned. The scope audit is
|
|
96
96
|
advisory, not a permission gate.
|
|
97
|
+
|
|
98
|
+
## Commands that don't stop the person
|
|
99
|
+
|
|
100
|
+
Under the team's default permissions, `rig` commands, simple read-only commands such as `ls`, `cat` and `grep`, and the
|
|
101
|
+
project's test command usually run without asking. Other commands, and anything that looks like hidden shell code, can
|
|
102
|
+
stop for the person's approval. So keep commands plain:
|
|
103
|
+
- Run `rig` commands as they are: don't pipe their output into `python3` or another program, and don't put
|
|
104
|
+
`$VARIABLES` in them.
|
|
105
|
+
- Write files with your file-writing tool, not a shell heredoc. A file outside the project folder may still ask: tell
|
|
106
|
+
the person first.
|
|
107
|
+
- For a check, run the project's test command first. To try an input the tests don't cover, run one plain command at a
|
|
108
|
+
time (`python3 tip.py 1e30`), not a chained script. To give a program input, put it in a file with your file-writing
|
|
109
|
+
tool and redirect it (`python3 tip.py < input.txt`) rather than piping it in. A new program may still ask once.
|
|
@@ -4,6 +4,10 @@ The person's goal usually reaches you from the kernel operator as a queue row: t
|
|
|
4
4
|
how to reach them. Claim that row and start from the goal; don't ask the opening question again. If the goal is
|
|
5
5
|
unclear, ask the one question that changes what you would do.
|
|
6
6
|
|
|
7
|
+
Read the row with `rig queue show <id> --full`, which prints it as JSON (the goal is its `body` field), then run
|
|
8
|
+
`rig queue claim <id>` on its own. Keep these and later commands plain, as the team culture's "Commands that don't stop
|
|
9
|
+
the person" says, so they don't stop for the person's approval.
|
|
10
|
+
|
|
7
11
|
**When the goal is real continuing work** (something to build or change that takes more than one exchange), record it
|
|
8
12
|
lightly before you start:
|
|
9
13
|
- Run `rig scope mission ls` first. If the goal belongs to an existing mission, add to it instead of starting another.
|
|
@@ -19,6 +23,12 @@ You plan it and route the work to your team; independent review comes before any
|
|
|
19
23
|
|
|
20
24
|
When the goal is done, close the operator's row with the result.
|
|
21
25
|
|
|
26
|
+
**If a seat you're waiting on stops at a prompt,** for example a reviewer asking to run a command, tell the person in
|
|
27
|
+
your own pane which seat is waiting, exactly what it asks and how to reach it. In
|
|
28
|
+
`rig ps --nodes --json --fields canonicalSessionName,agentActivity,tmuxAttachCommand` that seat shows `needs_input`;
|
|
29
|
+
`rig capture <session>` with its `canonicalSessionName` shows the prompt, and its `tmuxAttachCommand` is the command to
|
|
30
|
+
give (if it has none, give its name). Don't answer another seat's prompt yourself.
|
|
31
|
+
|
|
22
32
|
`rig down` and `rig seat stop` end agents' sessions and any work in progress, and `rig up <spec>` on a stopped team's
|
|
23
33
|
name replaces it with a new team. Don't run them unless the person asked; check `rig ps --nodes` first.
|
|
24
34
|
|
|
@@ -30,15 +40,18 @@ alongside the goal, and never replace one that exists:
|
|
|
30
40
|
1. Take the rig's name from `rig whoami --json` (`identity.rigName`). It is `factory` unless this team was launched
|
|
31
41
|
under another name; `<rig>` below means that name. If it is null, the rig name is unavailable: skip the roster
|
|
32
42
|
for now and try again when identity is available.
|
|
33
|
-
2. Run `rig roster list`. If it shows a roster with id `<rig>`,
|
|
34
|
-
|
|
35
|
-
|
|
43
|
+
2. Run `rig roster list`. If it shows a roster with id `<rig>`, or warns about `<rig>.json` (a roster file it
|
|
44
|
+
couldn't read), stop here: never replace that file.
|
|
45
|
+
3. The file is `<workspace.root>/rosters/<rig>.json`; `rig config get workspace.root` gives the root. Step 2 already
|
|
46
|
+
told you whether this rig has a roster, so don't check the folder from the shell.
|
|
36
47
|
4. Run `rig ps --nodes --rig <rig> --json --fields canonicalSessionName,hostSelfId`. It gives each seat's exact address
|
|
37
48
|
and the host that serves it.
|
|
38
49
|
5. Match `orch-lead` (you) to lead, `orch-advisor` to advisor, `dev-build` to builder, `dev-qa` to QA,
|
|
39
50
|
`dev-design` to designer, and `review-r1` and `review-r2` to the two reviewers, using the actual addresses from step 4.
|
|
40
|
-
Write the file with those addresses and hosts, today's date, and yourself as curator
|
|
41
|
-
|
|
51
|
+
Write the file with those addresses and hosts, today's date, and yourself as curator; the template below is the
|
|
52
|
+
whole format. Write it with your file-writing tool, not a shell heredoc; if the tool can't create a missing
|
|
53
|
+
`rosters/` folder, create it first, which may also ask. The file is outside the project folder, so the person may be
|
|
54
|
+
asked to approve this write: say so in one line first.
|
|
42
55
|
|
|
43
56
|
```json
|
|
44
57
|
{
|