@openrig/cli 0.6.12 → 0.6.13
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 +19 -12
- 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/README.md +9 -2
- package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +25 -9
- package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +7 -4
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +5 -0
- package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +61 -16
- package/daemon/assets/skills/rigs/SKILL.md +8 -4
- 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 +60 -12
- package/daemon/context-packs/reference/getting-started.md +44 -14
- package/daemon/context-packs/reference/manifest.yaml +1 -1
- package/daemon/context-packs/reference/rig-spec.md +5 -5
- package/daemon/context-packs/reference/whats-new.md +90 -163
- 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/manifest.yaml +1 -1
- 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/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/SKILL.md +5 -0
- 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/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 +61 -16
- 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 +9 -1
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +110 -52
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +47 -6
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/pi-resume.d.ts +1 -1
- package/daemon/dist/adapters/pi-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/pi-resume.js +4 -1
- package/daemon/dist/adapters/pi-resume.js.map +1 -1
- package/daemon/dist/adapters/pi-runner-protocol.d.ts +9 -0
- package/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -1
- package/daemon/dist/adapters/pi-runner-protocol.js +16 -0
- package/daemon/dist/adapters/pi-runner-protocol.js.map +1 -1
- package/daemon/dist/adapters/pi-runner.d.ts +5 -2
- package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
- package/daemon/dist/adapters/pi-runner.js +72 -15
- package/daemon/dist/adapters/pi-runner.js.map +1 -1
- package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/pi-runtime-adapter.js +2 -0
- package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/stub-compaction.d.ts +1 -0
- package/daemon/dist/adapters/stub-compaction.d.ts.map +1 -1
- package/daemon/dist/adapters/stub-compaction.js +2 -0
- package/daemon/dist/adapters/stub-compaction.js.map +1 -1
- package/daemon/dist/adapters/stub-refocus.d.ts +6 -0
- package/daemon/dist/adapters/stub-refocus.d.ts.map +1 -0
- package/daemon/dist/adapters/stub-refocus.js +22 -0
- package/daemon/dist/adapters/stub-refocus.js.map +1 -0
- package/daemon/dist/adapters/stub-runner.d.ts +6 -0
- package/daemon/dist/adapters/stub-runner.d.ts.map +1 -1
- package/daemon/dist/adapters/stub-runner.js +18 -1
- package/daemon/dist/adapters/stub-runner.js.map +1 -1
- package/daemon/dist/adapters/stub-script.d.ts +2 -2
- package/daemon/dist/adapters/stub-script.d.ts.map +1 -1
- package/daemon/dist/adapters/stub-script.js +2 -2
- package/daemon/dist/adapters/stub-script.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 +2 -0
- package/daemon/dist/db/all-migrations.js.map +1 -1
- package/daemon/dist/db/migrations/117_provider_account_readings.d.ts +3 -0
- package/daemon/dist/db/migrations/117_provider_account_readings.d.ts.map +1 -0
- package/daemon/dist/db/migrations/117_provider_account_readings.js +32 -0
- package/daemon/dist/db/migrations/117_provider_account_readings.js.map +1 -0
- package/daemon/dist/domain/claude-activity-hooks.d.ts +6 -0
- package/daemon/dist/domain/claude-activity-hooks.d.ts.map +1 -1
- package/daemon/dist/domain/claude-activity-hooks.js +19 -1
- package/daemon/dist/domain/claude-activity-hooks.js.map +1 -1
- package/daemon/dist/domain/claude-core-plugin-env.d.ts +2 -0
- package/daemon/dist/domain/claude-core-plugin-env.d.ts.map +1 -1
- package/daemon/dist/domain/claude-core-plugin-env.js +6 -2
- package/daemon/dist/domain/claude-core-plugin-env.js.map +1 -1
- package/daemon/dist/domain/claude-managed-launch.d.ts +5 -0
- package/daemon/dist/domain/claude-managed-launch.d.ts.map +1 -1
- package/daemon/dist/domain/claude-managed-launch.js +48 -7
- package/daemon/dist/domain/claude-managed-launch.js.map +1 -1
- package/daemon/dist/domain/claude-mcp-menu.d.ts +5 -0
- package/daemon/dist/domain/claude-mcp-menu.d.ts.map +1 -0
- package/daemon/dist/domain/claude-mcp-menu.js +25 -0
- package/daemon/dist/domain/claude-mcp-menu.js.map +1 -0
- package/daemon/dist/domain/fresh-occupant-relation.d.ts +7 -0
- package/daemon/dist/domain/fresh-occupant-relation.d.ts.map +1 -1
- package/daemon/dist/domain/fresh-occupant-relation.js +44 -0
- package/daemon/dist/domain/fresh-occupant-relation.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/channel-recovery.d.ts +14 -2
- package/daemon/dist/domain/gateway/slack/channel-recovery.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/channel-recovery.js +128 -89
- package/daemon/dist/domain/gateway/slack/channel-recovery.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.d.ts +4 -0
- package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.js +5 -3
- package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/recovery-budget.d.ts +24 -0
- package/daemon/dist/domain/gateway/slack/recovery-budget.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/recovery-budget.js +18 -0
- package/daemon/dist/domain/gateway/slack/recovery-budget.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-recovery.d.ts +104 -0
- package/daemon/dist/domain/gateway/slack/slack-recovery.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-recovery.js +236 -0
- package/daemon/dist/domain/gateway/slack/slack-recovery.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js +29 -6
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/state-store.d.ts +34 -0
- package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/state-store.js +67 -0
- package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/thread-recovery.d.ts +37 -0
- package/daemon/dist/domain/gateway/slack/thread-recovery.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/thread-recovery.js +173 -0
- package/daemon/dist/domain/gateway/slack/thread-recovery.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +8 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/thread-seat-map.js +11 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts +6 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.js +4 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
- package/daemon/dist/domain/model-divergence/current-model-reader.d.ts +74 -0
- package/daemon/dist/domain/model-divergence/current-model-reader.d.ts.map +1 -0
- package/daemon/dist/domain/model-divergence/current-model-reader.js +246 -0
- package/daemon/dist/domain/model-divergence/current-model-reader.js.map +1 -0
- package/daemon/dist/domain/model-divergence/effective-model-readers.d.ts +18 -0
- package/daemon/dist/domain/model-divergence/effective-model-readers.d.ts.map +1 -1
- package/daemon/dist/domain/model-divergence/effective-model-readers.js +24 -8
- package/daemon/dist/domain/model-divergence/effective-model-readers.js.map +1 -1
- package/daemon/dist/domain/native-process-lineage.d.ts +8 -1
- package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
- package/daemon/dist/domain/native-process-lineage.js +40 -26
- package/daemon/dist/domain/native-process-lineage.js.map +1 -1
- package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
- package/daemon/dist/domain/native-resume-probe.js +34 -8
- package/daemon/dist/domain/native-resume-probe.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +1 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +84 -18
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/process-census.d.ts +1 -1
- package/daemon/dist/domain/process-census.d.ts.map +1 -1
- package/daemon/dist/domain/process-table.d.ts +26 -0
- package/daemon/dist/domain/process-table.d.ts.map +1 -0
- package/daemon/dist/domain/process-table.js +185 -0
- package/daemon/dist/domain/process-table.js.map +1 -0
- package/daemon/dist/domain/profile-resolver.d.ts +8 -0
- package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.js +11 -0
- package/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/daemon/dist/domain/projection-planner.js +1 -1
- package/daemon/dist/domain/projection-planner.js.map +1 -1
- package/daemon/dist/domain/provider/claude-usage-windows.d.ts +3 -1
- package/daemon/dist/domain/provider/claude-usage-windows.d.ts.map +1 -1
- package/daemon/dist/domain/provider/claude-usage-windows.js +48 -3
- package/daemon/dist/domain/provider/claude-usage-windows.js.map +1 -1
- package/daemon/dist/domain/provider/codex-usage-reader.d.ts +4 -1
- package/daemon/dist/domain/provider/codex-usage-reader.d.ts.map +1 -1
- package/daemon/dist/domain/provider/codex-usage-reader.js +3 -0
- package/daemon/dist/domain/provider/codex-usage-reader.js.map +1 -1
- package/daemon/dist/domain/provider/codex-usage-windows.d.ts +3 -1
- package/daemon/dist/domain/provider/codex-usage-windows.d.ts.map +1 -1
- package/daemon/dist/domain/provider/codex-usage-windows.js +1 -0
- package/daemon/dist/domain/provider/codex-usage-windows.js.map +1 -1
- package/daemon/dist/domain/provider/provider-account-readings.d.ts +42 -0
- package/daemon/dist/domain/provider/provider-account-readings.d.ts.map +1 -0
- package/daemon/dist/domain/provider/provider-account-readings.js +132 -0
- package/daemon/dist/domain/provider/provider-account-readings.js.map +1 -0
- package/daemon/dist/domain/provider/provider-types.d.ts +29 -0
- package/daemon/dist/domain/provider/provider-types.d.ts.map +1 -1
- package/daemon/dist/domain/provider/usage-across-hosts.d.ts.map +1 -1
- package/daemon/dist/domain/provider/usage-across-hosts.js +6 -0
- package/daemon/dist/domain/provider/usage-across-hosts.js.map +1 -1
- package/daemon/dist/domain/provider/usage-windows.d.ts +25 -0
- package/daemon/dist/domain/provider/usage-windows.d.ts.map +1 -1
- package/daemon/dist/domain/provider/usage-windows.js +100 -4
- package/daemon/dist/domain/provider/usage-windows.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +23 -0
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +59 -1
- 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 +47 -4
- package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
- package/daemon/dist/domain/restore-check-service.d.ts +10 -0
- package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
- package/daemon/dist/domain/restore-check-service.js +73 -10
- package/daemon/dist/domain/restore-check-service.js.map +1 -1
- package/daemon/dist/domain/restore-guidance.d.ts +6 -0
- package/daemon/dist/domain/restore-guidance.d.ts.map +1 -1
- package/daemon/dist/domain/restore-guidance.js +21 -5
- package/daemon/dist/domain/restore-guidance.js.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +1 -1
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.js +6 -29
- package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
- package/daemon/dist/domain/rig-repository.d.ts +3 -0
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +6 -0
- package/daemon/dist/domain/rig-repository.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +4 -2
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.d.ts +4 -0
- package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.js +12 -2
- package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
- package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-schema.js +11 -0
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/runtime-adapter.d.ts +13 -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/seat-attention-reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/seat-attention-reconciler.js +15 -1
- package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
- package/daemon/dist/domain/seat-cwd-preparation.d.ts +22 -0
- package/daemon/dist/domain/seat-cwd-preparation.d.ts.map +1 -0
- package/daemon/dist/domain/seat-cwd-preparation.js +107 -0
- package/daemon/dist/domain/seat-cwd-preparation.js.map +1 -0
- package/daemon/dist/domain/seat-effort.d.ts +4 -3
- package/daemon/dist/domain/seat-effort.d.ts.map +1 -1
- package/daemon/dist/domain/seat-effort.js +21 -3
- package/daemon/dist/domain/seat-effort.js.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.d.ts +36 -2
- package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.js +206 -15
- package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
- package/daemon/dist/domain/seat-restart-in-place.d.ts +14 -0
- package/daemon/dist/domain/seat-restart-in-place.d.ts.map +1 -1
- package/daemon/dist/domain/seat-restart-in-place.js +59 -3
- package/daemon/dist/domain/seat-restart-in-place.js.map +1 -1
- package/daemon/dist/domain/seat-status-service.d.ts +2 -0
- 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 +7 -1
- package/daemon/dist/domain/seat-structural-activity-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-structural-activity-service.js +9 -3
- package/daemon/dist/domain/seat-structural-activity-service.js.map +1 -1
- package/daemon/dist/domain/session-name.d.ts +8 -0
- package/daemon/dist/domain/session-name.d.ts.map +1 -1
- package/daemon/dist/domain/session-name.js +12 -0
- package/daemon/dist/domain/session-name.js.map +1 -1
- package/daemon/dist/domain/session-transport.d.ts +78 -3
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +306 -15
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.js +1 -1
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +14 -0
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/watchdog-delivery.d.ts +29 -0
- package/daemon/dist/domain/watchdog-delivery.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-delivery.js +113 -0
- package/daemon/dist/domain/watchdog-delivery.js.map +1 -0
- package/daemon/dist/domain/watchdog-policy-engine.d.ts +60 -1
- package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.js +154 -28
- package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
- package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-scheduler.js +6 -1
- package/daemon/dist/domain/watchdog-scheduler.js.map +1 -1
- package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-instance-store.js +6 -2
- package/daemon/dist/domain/workflow-instance-store.js.map +1 -1
- package/daemon/dist/routes/attention.d.ts.map +1 -1
- package/daemon/dist/routes/attention.js +41 -1
- package/daemon/dist/routes/attention.js.map +1 -1
- package/daemon/dist/routes/compaction.js +1 -1
- package/daemon/dist/routes/compaction.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +3 -1
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/restore-check.d.ts.map +1 -1
- package/daemon/dist/routes/restore-check.js +19 -1
- package/daemon/dist/routes/restore-check.js.map +1 -1
- package/daemon/dist/routes/seat.d.ts.map +1 -1
- package/daemon/dist/routes/seat.js +15 -2
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +7 -1
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/transport.d.ts.map +1 -1
- package/daemon/dist/routes/transport.js +13 -2
- package/daemon/dist/routes/transport.js.map +1 -1
- package/daemon/dist/server.d.ts +1 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +1 -0
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +39 -113
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-spec.md +1 -1
- package/daemon/docs/reference/agent-startup-guide.md +84 -0
- package/daemon/docs/reference/getting-started.md +44 -14
- package/daemon/docs/reference/publishing-a-rig-bundle.md +5 -2
- package/daemon/docs/reference/refocus-channel.md +11 -1
- package/daemon/docs/reference/rig-spec.md +5 -5
- package/daemon/docs/reference/rosters.md +29 -2
- package/daemon/docs/reference/slack-app-setup.md +47 -17
- package/daemon/docs/reference/whats-new.md +90 -163
- package/daemon/specs/agents/apps/vault-specialist/agent.yaml +1 -0
- package/daemon/specs/agents/conveyor/builder/agent.yaml +1 -0
- package/daemon/specs/agents/conveyor/lead/agent.yaml +1 -0
- package/daemon/specs/agents/conveyor/planner/agent.yaml +1 -0
- package/daemon/specs/agents/conveyor/reviewer/agent.yaml +1 -0
- package/daemon/specs/agents/design/product-designer/agent.yaml +1 -0
- package/daemon/specs/agents/development/implementer/agent.yaml +1 -0
- package/daemon/specs/agents/development/qa/agent.yaml +1 -0
- package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +1 -0
- package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +1 -0
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -0
- package/daemon/specs/agents/product-management/pm/agent.yaml +1 -0
- package/daemon/specs/agents/research/analyst/agent.yaml +1 -0
- package/daemon/specs/agents/research/synthesizer/agent.yaml +1 -0
- package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -0
- package/dist/build-info.js +3 -3
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +14 -0
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +3 -2
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +8 -7
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/grow.d.ts.map +1 -1
- package/dist/commands/grow.js +24 -7
- package/dist/commands/grow.js.map +1 -1
- package/dist/commands/provider.d.ts.map +1 -1
- package/dist/commands/provider.js +43 -7
- package/dist/commands/provider.js.map +1 -1
- package/dist/commands/ps.d.ts +2 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +12 -1
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +20 -1
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/roster.d.ts +2 -1
- package/dist/commands/roster.d.ts.map +1 -1
- package/dist/commands/roster.js +10 -5
- package/dist/commands/roster.js.map +1 -1
- package/dist/commands/scope.js +1 -1
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +75 -8
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/slack.d.ts.map +1 -1
- package/dist/commands/slack.js +14 -1
- package/dist/commands/slack.js.map +1 -1
- package/dist/commands/usage.d.ts.map +1 -1
- package/dist/commands/usage.js +4 -3
- package/dist/commands/usage.js.map +1 -1
- package/dist/lib/model-observation.d.ts +13 -0
- package/dist/lib/model-observation.d.ts.map +1 -0
- package/dist/lib/model-observation.js +25 -0
- package/dist/lib/model-observation.js.map +1 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +1 -0
- package/dist/mcp-server.js.map +1 -1
- package/package.json +1 -1
- package/tui/dist/attention/attention-model.js +6 -5
- package/tui/dist/attention/attention-model.js.map +1 -1
- package/tui/dist/attention/source-continuity.d.ts.map +1 -1
- package/tui/dist/attention/source-continuity.js +2 -0
- package/tui/dist/attention/source-continuity.js.map +1 -1
- package/tui/dist/terminals/open-window.d.ts +11 -1
- package/tui/dist/terminals/open-window.d.ts.map +1 -1
- package/tui/dist/terminals/open-window.js +47 -2
- package/tui/dist/terminals/open-window.js.map +1 -1
- package/tui/dist/usage/usage-model.d.ts +2 -0
- package/tui/dist/usage/usage-model.d.ts.map +1 -1
- package/tui/dist/usage/usage-model.js +38 -3
- package/tui/dist/usage/usage-model.js.map +1 -1
- package/ui/dist/assets/{index-Cfbtfd9G.js → index-CVgod3Pm.js} +1 -1
- package/ui/dist/index.html +1 -1
package/README.md
CHANGED
|
@@ -20,16 +20,16 @@ Not setting this up today? Get the next walkthrough and occasional OpenRig updat
|
|
|
20
20
|
|
|
21
21
|
## Install and first run
|
|
22
22
|
|
|
23
|
-
Requires Node.js 22 or 24 and tmux, on macOS or Linux. On Linux, the distribution's own Node.js can be older (Ubuntu 24.04's is 18); install a supported version with [nvm](https://github.com/nvm-sh/nvm) (`nvm install 22`) or NodeSource. On a Mac with Apple silicon, use Node.js 22 ([compatibility history](docs/releases/v0.5.15.md#known-compatibility-limitation)). On Windows, use WSL2, the Windows route OpenRig supports; native Windows isn't supported. OpenRig's automated tests don't run on WSL2 yet; see [one user's working setup](docs/reference/getting-started.md#wsl2-a-reported-working-setup). Launching a rig writes provider hooks and workspace trust settings. Before running the commands below, read [what OpenRig changes on your machine](#what-openrig-changes-on-your-machine) and back up the relevant files.
|
|
23
|
+
Requires Node.js 22 or 24 and tmux, on macOS or Linux, and one working Claude Code or Codex account: one is enough, since the kernel operator adapts the shipped `starter` team to whichever you have. On Linux, the distribution's own Node.js can be older (Ubuntu 24.04's is 18); install a supported version with [nvm](https://github.com/nvm-sh/nvm) (`nvm install 22`) or NodeSource. On a Mac with Apple silicon, use Node.js 22 ([compatibility history](docs/releases/v0.5.15.md#known-compatibility-limitation)). On a Mac where you aren't an administrator, or where Homebrew belongs to another account (its `brew install` is refused), install Node.js in your own home folder with [nvm](https://github.com/nvm-sh/nvm): run `touch ~/.zshrc` (a new Mac account has none, and nvm's installer only adds itself to a profile file that already exists), then the install command on nvm's page, open a new terminal, and run `nvm install 22`. That needs no administrator password, and `npm install -g` then installs into your nvm folder. On Windows, use WSL2, the Windows route OpenRig supports; native Windows isn't supported. OpenRig's automated tests don't run on WSL2 yet; see [one user's working setup](docs/reference/getting-started.md#wsl2-a-reported-working-setup). Launching a rig writes provider hooks and workspace trust settings. Before running the commands below, read [what OpenRig changes on your machine](#what-openrig-changes-on-your-machine) and back up the relevant files.
|
|
24
24
|
|
|
25
|
-
**One command.** This runs OpenRig's install script from the `v0.6.
|
|
25
|
+
**One command.** This runs OpenRig's install script from the `v0.6.13` release. It checks Node.js and npm, installs the latest published `@openrig/cli` with `npm install -g`, runs the Node.js and SQLite check, then runs `rig setup --dry-run` and `rig setup`. The first line prints that plan and changes nothing:
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.
|
|
29
|
-
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.
|
|
28
|
+
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.13/scripts/install.sh | sh -s -- --dry-run
|
|
29
|
+
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.13/scripts/install.sh | sh
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
If a provider isn't signed in yet, the
|
|
32
|
+
If `rig setup` doesn't finish ready, for example because a provider isn't signed in yet, the script ends with `INSTALLED, SETUP NOT COMPLETE`: the CLI is installed, and `rig setup` lists what's left under "Some steps need attention". If the only items left are provider sign-ins, sign in to each selected provider as below and continue; run `rig setup` again rather than reinstalling the CLI.
|
|
33
33
|
|
|
34
34
|
**Or step by step:**
|
|
35
35
|
|
|
@@ -161,7 +161,7 @@ using a published package, since repository guidance can be ahead of npm.
|
|
|
161
161
|
| --- | --- |
|
|
162
162
|
| **npm installation** | Installs the CLI (`rig` and `openrig-tui`), bundled components and dependencies under your npm prefix (with Bun, under Bun's global directory). OpenRig's postinstall checks the Node.js version and that the SQLite module loads; Bun may block this script. It does not run daemon or provider setup. |
|
|
163
163
|
| **`rig setup`** | Attempts missing tools and writes an OpenRig block in `~/.tmux.conf` for mouse support and scrollback. Installs herdr by default on macOS and Linux unless declined with `--no-herdr`; an unavailable herdr install is a warning. On macOS the installing agent offers Ghostty, and `--ghostty` attempts it after acceptance. Existing cmux settings are left unchanged. `--full` adds workstation tools. `--dry-run` shows setup's plan without applying it. |
|
|
164
|
-
| **Daemon startup** | Creates/updates instance state under `OPENRIG_HOME` (normally `~/.openrig`), including its database and managed plugin resources. Seeds the `openrig-skills` discovery skill, the `refocusing` skill and the person-facing `rigs` skill in `~/.claude/skills` and `~/.agents/skills`, subject to existing version ownership.
|
|
164
|
+
| **Daemon startup** | Creates/updates instance state under `OPENRIG_HOME` (normally `~/.openrig`), including its database and managed plugin resources. Seeds the `openrig-skills` discovery skill, the `refocusing` skill and the person-facing `rigs` skill in `~/.claude/skills` and `~/.agents/skills`, subject to existing version ownership. When a Codex seat is already recorded and `runtime.codex.hooks_enabled` is enabled (the default), ensures its hook configuration and trust records as described below. With no recorded Codex seat, enabled hooks wait for its first launch; disabled hooks still remove a stale OpenRig-managed hook block, if present. |
|
|
165
165
|
| **Rig/seat launch and attachment** | Creates tmux sessions, supplies seat identity and daemon connection environment, and projects selected guidance, skills, plugins and runtime resources into the workspace. Managed startup pre-trusts the workspace. Claude context collection can also be provisioned for attached sessions and refreshed during monitoring. In a Git repository, newly created files under `.codex/plugins/shared:openrig-core/` (or the unqualified `.codex/plugins/openrig-core/`) are added to the repository's Git `info/exclude` inside an `# BEGIN OpenRig generated files` block; new `AGENTS.md`, `CLAUDE.md` and `CLAUDE.local.md` files stay visible with a warning. |
|
|
166
166
|
| **Bundle install** (`rig bundle install`, or `rig up` with a `.rigbundle` or GitHub link) | Writes the bundle's files into the install target: `--target`, or the current directory for `rig up` and for a GitHub link. `rig bundle install` with a local archive needs `--target`. Routes its declared skills, plugins and context packs into your libraries. A GitHub link's archive is kept under `OPENRIG_HOME/bundle-imports/`, and installs are recorded in `OPENRIG_HOME/bundle-audit.jsonl`. A bundle that carries a project creates it under `workspace.projects_root` and records it, with the rig's association, in the workspace catalog. |
|
|
167
167
|
| **Explicit permission configuration** | The built-in bootstrap does **not** add `rig` command allow rules to your settings files; a team seat with no permission policy, per-seat choice or (for Codex) named profile gets the per-launch [team default](docs/reference/rig-spec.md#team-launch-defaults) instead. Agent-guided setup recommends keeping it and requires your actual answer before the agent [adds remembered rules at your chosen scope](docs/reference/getting-started.md#have-your-agent-configure-permissions). No/no answer keeps the team default and preserves settings; existing choices and stricter rules remain relevant. Broader access is separate. |
|
|
@@ -175,7 +175,9 @@ user's home; changing `OPENRIG_HOME` alone does not isolate provider configurati
|
|
|
175
175
|
writes `HOME/.claude.json`, and also `<CLAUDE_CONFIG_DIR>/.claude.json` when the
|
|
176
176
|
daemon has that variable set. In the workspace, `.claude/settings.local.json` receives
|
|
177
177
|
the context collector's `statusLine` command and selected activity hooks;
|
|
178
|
-
|
|
178
|
+
a user's own status-line command is preserved, so it can prevent collector
|
|
179
|
+
installation. Selected settings resources can still replace overlapping keys.
|
|
180
|
+
The collector script lives under `.openrig/`, and the activity-hook relay under
|
|
179
181
|
the instance's `state/claude-activity-hooks/`. Selected settings/MCP resources can also
|
|
180
182
|
change that settings file and `.mcp.json`. The shared settings resource sets
|
|
181
183
|
`permissions.defaultMode` to `acceptEdits` and enables Exa/Context7 MCP entries;
|
|
@@ -185,8 +187,10 @@ user's home; changing `OPENRIG_HOME` alone does not isolate provider configurati
|
|
|
185
187
|
To keep your own status line alongside the collector, see
|
|
186
188
|
[Custom Claude status line](docs/reference/claude-status-line.md).
|
|
187
189
|
- **Codex:** writes the daemon's `CODEX_HOME/config.toml` (normally
|
|
188
|
-
`~/.codex/config.toml`).
|
|
189
|
-
commands and
|
|
190
|
+
`~/.codex/config.toml`). With hooks enabled, daemon startup ensures the OpenRig
|
|
191
|
+
activity relay commands and their trust hashes when a Codex seat is already
|
|
192
|
+
recorded; otherwise the first Codex launch does so. With hooks disabled, startup
|
|
193
|
+
can remove a stale OpenRig-managed hook block even without a Codex seat. Seat startup adds
|
|
190
194
|
`trust_level = "trusted"` for the workspace; selected config resources can
|
|
191
195
|
add MCP settings. Managed launches pass `-c check_for_update_on_startup=false`,
|
|
192
196
|
which writes no config; a recognized update notice that still appears can be
|
|
@@ -252,9 +256,12 @@ separates the desired selection from the last launch arguments; neither proves
|
|
|
252
256
|
native enforcement. See the [permission guide](docs/reference/getting-started.md#per-seat-permission-mode).
|
|
253
257
|
|
|
254
258
|
Managed hook blocks target OpenRig's entries and retain unrelated hooks, but
|
|
255
|
-
trust entries
|
|
256
|
-
|
|
257
|
-
this is not a
|
|
259
|
+
trust entries and selected resource keys can be replaced. Claude's collector,
|
|
260
|
+
activity-hook and JSON resource writers leave unreadable or malformed settings
|
|
261
|
+
untouched; this is not a product-wide preservation guarantee. Codex's workspace
|
|
262
|
+
trust writer can treat an unreadable `config.toml` as empty and write a new trust
|
|
263
|
+
configuration. Read-modify-write operations can also race other writers; there
|
|
264
|
+
is no complete preservation or rollback guarantee. Back up relevant
|
|
258
265
|
files before first use. Daemon/bootstrap writes are automatic and do not each
|
|
259
266
|
have an interactive preview; `rig setup --dry-run` does not preview every later
|
|
260
267
|
startup effect.
|
|
@@ -26,8 +26,9 @@ This plugin ships dual-manifest packaging — both `.claude-plugin/` and `.codex
|
|
|
26
26
|
A seat that has OpenRig's activity relay in its own `settings.local.json` (the `claude-activity-hooks` runtime resource)
|
|
27
27
|
already reports activity from there, so the plugin's `activity-relay.cjs` (which the manifest starts with `--from-plugin`)
|
|
28
28
|
exits for an event the seat's settings register it for. It does so only when the entry is exactly the one OpenRig writes
|
|
29
|
-
(`node`
|
|
30
|
-
|
|
29
|
+
(legacy `node` or a quoted absolute Node executable, then one quoted path to
|
|
30
|
+
`state/claude-activity-hooks/activity-relay.cjs`), the interpreter is executable, and the script at that path is this same
|
|
31
|
+
script. A missing interpreter/script, a different script, or a wrapper around it never silences the plugin. A seat without
|
|
31
32
|
that resource, and a plugin installed outside OpenRig, report through the plugin's relay, so each event is reported once.
|
|
32
33
|
A relay entry written by an older install (a different path or quoting) doesn't match, so until the seat is relaunched and
|
|
33
34
|
its entry refreshed, both relays report and its events come twice. The plugin is not a Claude marketplace entry, so
|
|
@@ -43,6 +44,12 @@ This plugin ships dual-manifest packaging — both `.claude-plugin/` and `.codex
|
|
|
43
44
|
- **Codex CLI** — Codex has no directory option for plugins, so it does not load this plugin. A Codex seat gets only the hooks
|
|
44
45
|
the daemon writes into Codex's `config.toml` (the activity relay); `hooks/codex.json` is not read.
|
|
45
46
|
|
|
47
|
+
Generated Claude settings commands for the activity relay and context collector use the daemon's absolute Node
|
|
48
|
+
executable when its name is recognized (`node` or `node.exe`); other names keep the legacy bare `node` command and
|
|
49
|
+
its PATH requirement. Pinned commands do not require Node on the Claude process's inherited PATH. The executable must
|
|
50
|
+
remain installed; removing or moving it requires normal command refresh from a healthy runtime. This does not change the static plugin
|
|
51
|
+
manifest commands, which still use `node`, or prove that an already-running Claude reloaded changed settings.
|
|
52
|
+
|
|
46
53
|
One skill targets Claude Code's compaction behavior specifically:
|
|
47
54
|
- `claude-compaction-restore` — used to rebuild a Claude Code agent's working mental model after `/compact`, from JSONL transcripts and touched files
|
|
48
55
|
|
|
@@ -214,15 +214,30 @@ function uid() {
|
|
|
214
214
|
// each event once either way. Anything unreadable, missing or different counts as "not registered": a seat is never silent.
|
|
215
215
|
const SETTINGS_RELAY_TAIL = "state/claude-activity-hooks/activity-relay.cjs";
|
|
216
216
|
|
|
217
|
-
//
|
|
218
|
-
//
|
|
217
|
+
// Keep this finite generated-command grammar in parity with parseManagedClaudeNodeCommand.
|
|
218
|
+
// Bare-node legacy commands and a canonical quoted absolute Node path are recognised;
|
|
219
|
+
// extra arguments and user wrappers are not the settings relay.
|
|
219
220
|
function settingsRelayPath(command) {
|
|
220
|
-
|
|
221
|
-
const
|
|
222
|
-
if (!
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
221
|
+
if (/[\r\n]/.test(command)) return null;
|
|
222
|
+
const m = /^(node|'(?:[^']|'"'"')*')[ \t]+('(?:[^']|'"'"')*')$/.exec(command.trim());
|
|
223
|
+
if (!m) return null;
|
|
224
|
+
const decode = token => token.slice(1, -1).split(`'"'"'`).join("'");
|
|
225
|
+
const quote = value => "'" + value.replace(/'/g, `'"'"'`) + "'";
|
|
226
|
+
const executable = m[1] === "node" ? "node" : decode(m[1]);
|
|
227
|
+
const relay = decode(m[2]);
|
|
228
|
+
if (quote(relay) !== m[2] || !path.isAbsolute(relay) || !relay.endsWith(`/${SETTINGS_RELAY_TAIL}`)) return null;
|
|
229
|
+
if (m[1] !== "node" && (quote(executable) !== m[1] || !path.isAbsolute(executable) || !/^node(?:\.exe)?$/i.test(path.basename(executable)))) return null;
|
|
230
|
+
return { executable, relay };
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function interpreterAvailable(executable, env) {
|
|
234
|
+
const candidates = executable === "node"
|
|
235
|
+
? typeof env.PATH === "string" ? env.PATH.split(path.delimiter).map(dir => path.resolve(dir || ".", "node")) : []
|
|
236
|
+
: [executable];
|
|
237
|
+
return candidates.some(candidate => {
|
|
238
|
+
try { fs.accessSync(candidate, fs.constants.X_OK); return fs.statSync(candidate).isFile(); }
|
|
239
|
+
catch { return false; }
|
|
240
|
+
});
|
|
226
241
|
}
|
|
227
242
|
|
|
228
243
|
// A settings entry only silences this run if it would really report: the file it names is there and is this very script.
|
|
@@ -243,7 +258,7 @@ function settingsRelayReports(hookEvent, providerPayload, env = process.env) {
|
|
|
243
258
|
return Array.isArray(groups) && groups.some((group) => group && unrestricted(group) && Array.isArray(group.hooks)
|
|
244
259
|
&& group.hooks.some((hook) => {
|
|
245
260
|
const relay = hook && typeof hook.command === "string" ? settingsRelayPath(hook.command) : null;
|
|
246
|
-
return relay !== null && isThisScript(relay);
|
|
261
|
+
return relay !== null && interpreterAvailable(relay.executable, env) && isThisScript(relay.relay);
|
|
247
262
|
}));
|
|
248
263
|
} catch {
|
|
249
264
|
return false;
|
|
@@ -306,4 +321,5 @@ module.exports = {
|
|
|
306
321
|
resolveEndpoint,
|
|
307
322
|
pluginRunIsRedundant,
|
|
308
323
|
settingsRelayReports,
|
|
324
|
+
settingsRelayPath,
|
|
309
325
|
};
|
|
@@ -125,11 +125,14 @@ function readConfiguredContent(home) {
|
|
|
125
125
|
// current work, its basis travels to the trace script, which alone decides how to render it;
|
|
126
126
|
// a failed or unreadable answer is passed as UNKNOWN. Never guess a work node here: a guess
|
|
127
127
|
// would silently re-point the whole trace.
|
|
128
|
-
// OPR.0.7.0.12 — the work packet
|
|
129
|
-
//
|
|
130
|
-
//
|
|
128
|
+
// OPR.0.7.0.12 — the work packet: the trace receives the daemon's labelled work candidates and
|
|
129
|
+
// carries duties and notes as text. OPENRIG_REFOCUS_WORK_PACKET=1 turns it on and =0 off; unset, each
|
|
130
|
+
// runtime's default below applies. A runtime defaults on only once a native run has shown the packet
|
|
131
|
+
// reaching the agent and leading to the right next action; neither has yet. With it off, every path
|
|
132
|
+
// below is unchanged.
|
|
133
|
+
const WORK_PACKET_DEFAULT = { claude: false, codex: false };
|
|
131
134
|
function workPacketEnabled() {
|
|
132
|
-
return enabled(process.env.OPENRIG_REFOCUS_WORK_PACKET,
|
|
135
|
+
return enabled(process.env.OPENRIG_REFOCUS_WORK_PACKET, WORK_PACKET_DEFAULT[runtime()] === true);
|
|
133
136
|
}
|
|
134
137
|
|
|
135
138
|
function readQueueWhoami(timeout = lookupTimeout()) {
|
|
@@ -109,6 +109,11 @@ When you `rig capture` a pane, **greyed / ghost autocomplete suggestions are NOT
|
|
|
109
109
|
|
|
110
110
|
**Rule:** ignore ghost/autosuggest text entirely. Only *committed/rendered* pane output is real. When it matters, verify at source (git, the queue, the actual event) — never off a capture's ghost line.
|
|
111
111
|
|
|
112
|
+
A plain capture loses the grey, so `rig capture` reads it for you. For a Claude Code or Codex seat, a
|
|
113
|
+
`[rig capture: <seat>: input box: ...]` note on stderr (and `inputBox` in `--json`) says whether the input box's text
|
|
114
|
+
is likely a harness suggestion or typed, from where the cursor is and whether the text is drawn faint. Don't act on
|
|
115
|
+
`likely-suggestion` text as anyone's intent, and treat `unknown` as unknown: verify at source.
|
|
116
|
+
|
|
112
117
|
## Moment-of-truth checklist
|
|
113
118
|
|
|
114
119
|
- **Starting a slice?** → do you know what it's for and what done looks like? mockups attached (UI slices)? **Are you on the light path?** (You are, unless the mission owner assigned the overlay.)
|
|
@@ -157,6 +157,27 @@ DUTY_HEADINGS = ("my job here", "standing duties")
|
|
|
157
157
|
NOTES_STATE_HEADINGS = ("current state",)
|
|
158
158
|
HEADING = re.compile(r"^(#{1,6})\s+(.*?)\s*#*\s*$")
|
|
159
159
|
DEFAULT_NOTES_MAX_AGE_DAYS = 14
|
|
160
|
+
# Each packet field is bounded on its own; there is no total cap. A row's summary and continuation are one line each,
|
|
161
|
+
# the held and next lists show their newest rows with the full count, and a matched section's body is cut at a line.
|
|
162
|
+
FIELD_CHARS = 160
|
|
163
|
+
HELD_SHOWN = 20
|
|
164
|
+
NEXT_SHOWN = 10
|
|
165
|
+
SECTION_CHARS = 1500
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def one_line(text):
|
|
169
|
+
"""(text as one line, cut to FIELD_CHARS, whether it was shortened)."""
|
|
170
|
+
flat = " ".join(str(text).split())
|
|
171
|
+
if len(flat) <= FIELD_CHARS:
|
|
172
|
+
return flat, flat != str(text).strip()
|
|
173
|
+
return flat[:FIELD_CHARS - 1].rstrip() + "…", True
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def bounded_section(body):
|
|
177
|
+
if len(body) <= SECTION_CHARS:
|
|
178
|
+
return body
|
|
179
|
+
boundary = body.rfind("\n", 0, SECTION_CHARS)
|
|
180
|
+
return body[:boundary if boundary > 0 else SECTION_CHARS].rstrip() + "\n[… use --depth full for the rest]"
|
|
160
181
|
|
|
161
182
|
|
|
162
183
|
def heading_sections(text, wanted):
|
|
@@ -180,7 +201,7 @@ def heading_sections(text, wanted):
|
|
|
180
201
|
|
|
181
202
|
def by_section(text, wanted, path):
|
|
182
203
|
found = heading_sections(text, wanted)
|
|
183
|
-
shown = "\n\n".join(f"{title}\n{body}" if body else title for title, body in found)
|
|
204
|
+
shown = "\n\n".join(f"{title}\n{bounded_section(body)}" if body else title for title, body in found)
|
|
184
205
|
missing = [phrase for phrase in wanted if not any(title.lower().startswith(phrase) for title, _ in found)]
|
|
185
206
|
if not missing:
|
|
186
207
|
return shown
|
|
@@ -335,28 +356,51 @@ def candidate_line(candidate):
|
|
|
335
356
|
return line
|
|
336
357
|
|
|
337
358
|
|
|
359
|
+
def row_fields(row, *fields):
|
|
360
|
+
"""Each named field as one bounded line, and a pointer to the whole row when any was shortened."""
|
|
361
|
+
values, cut = [], False
|
|
362
|
+
for field, missing in fields:
|
|
363
|
+
value, shortened = one_line(row.get(field) or missing)
|
|
364
|
+
values.append(value)
|
|
365
|
+
cut = cut or shortened
|
|
366
|
+
pointer = f" — full row: rig queue show {row['qitemId']}" if cut and row.get("qitemId") else ""
|
|
367
|
+
return values, pointer
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
def cut_notice(name, state, rows, shown, daemon_cut):
|
|
371
|
+
"""The list's notice when it was cut here or by the daemon: how many are shown, of how many."""
|
|
372
|
+
if not daemon_cut and len(rows) <= shown:
|
|
373
|
+
return None
|
|
374
|
+
total = f"more than {len(rows)}" if daemon_cut else str(len(rows))
|
|
375
|
+
return (f"(the {name} list was cut: {min(len(rows), shown)} of {total} shown; "
|
|
376
|
+
f"`rig queue list --owned --state {state}` has the rest)")
|
|
377
|
+
|
|
378
|
+
|
|
338
379
|
def render_held_and_next(evidence):
|
|
339
380
|
output = []
|
|
381
|
+
per_list = "heldTruncated" in evidence or "nextTruncated" in evidence
|
|
340
382
|
held = evidence.get("held") or []
|
|
341
383
|
if held:
|
|
342
384
|
output.append("HELD WORK (blocked; this is not next):")
|
|
343
|
-
for row in held:
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
385
|
+
for row in held[:HELD_SHOWN]:
|
|
386
|
+
(summary, blocked_on, continuation), pointer = row_fields(
|
|
387
|
+
row, ("summary", "no summary"), ("blockedOn", "unknown"), ("continuation", "none recorded"))
|
|
388
|
+
output.append(f"- {row.get('qitemId') or 'a row'} — {summary} — blocked on {blocked_on} — "
|
|
389
|
+
f"continuation: {continuation}{pointer}")
|
|
347
390
|
following = evidence.get("next") or []
|
|
348
391
|
if following:
|
|
349
392
|
output.append("POSSIBLE NEXT WORK (pending; no order implied):")
|
|
350
|
-
for row in following:
|
|
393
|
+
for row in following[:NEXT_SHOWN]:
|
|
351
394
|
missions = ", ".join(row.get("missions") or [])
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
395
|
+
(summary,), pointer = row_fields(row, ("summary", "no summary"))
|
|
396
|
+
output.append(f"- {row.get('qitemId') or 'a row'} — {summary}"
|
|
397
|
+
+ (f" [mission: {missions}]" if missions else "") + pointer)
|
|
398
|
+
notices = [
|
|
399
|
+
cut_notice("held", "blocked", held, HELD_SHOWN, per_list and bool(evidence.get("heldTruncated"))),
|
|
400
|
+
cut_notice("next", "pending", following, NEXT_SHOWN, per_list and bool(evidence.get("nextTruncated"))),
|
|
401
|
+
]
|
|
402
|
+
output.extend(notice for notice in notices if notice)
|
|
403
|
+
if not per_list and evidence.get("heldAndNextTruncated"):
|
|
360
404
|
output.append("(held and next lists were cut; `rig queue list` has the rest)")
|
|
361
405
|
return "\n".join(output)
|
|
362
406
|
|
|
@@ -390,8 +434,9 @@ def render_candidates(evidence, root, depth, failures):
|
|
|
390
434
|
output.extend(candidate_line(candidate) for candidate in candidates)
|
|
391
435
|
if unknown:
|
|
392
436
|
output.append("In-progress rows the queue cannot place:")
|
|
393
|
-
|
|
394
|
-
|
|
437
|
+
for row in unknown:
|
|
438
|
+
(summary,), pointer = row_fields(row, ("summary", "no summary"))
|
|
439
|
+
output.append(f"- {row.get('qitemId') or 'a row'} — {summary}: {row.get('reason')}{pointer}")
|
|
395
440
|
if not candidates:
|
|
396
441
|
names = evidence.get("missionsOnHost") or []
|
|
397
442
|
if names:
|
|
@@ -15,9 +15,13 @@ building it yourself.
|
|
|
15
15
|
|
|
16
16
|
Tell the person what you're about to run and why before you run it. Don't install system packages or change their
|
|
17
17
|
machine without a yes. Starting OpenRig and a team writes files: Codex hooks and settings in
|
|
18
|
-
`~/.codex/config.toml`,
|
|
19
|
-
guidance in `AGENTS.md` or `CLAUDE.md
|
|
20
|
-
|
|
18
|
+
`~/.codex/config.toml`, Claude Code workspace trust in `~/.claude.json`, discovery skills in `~/.claude/skills` and
|
|
19
|
+
`~/.agents/skills`, and, in the repository, managed guidance in `AGENTS.md` or `CLAUDE.md`, activity hooks in
|
|
20
|
+
`.claude/settings.local.json` and a status line there unless the project already has its own, plus the team's skills
|
|
21
|
+
and plugins. Unless a permission policy, a per-seat choice or (for Codex) a named profile applies, the kernel's own
|
|
22
|
+
seats run with an operational default: Codex with `-s danger-full-access -a never`, and Claude Code with its file
|
|
23
|
+
tools, web fetches and operational commands, including reads under the home folder, allowed without asking. Say so
|
|
24
|
+
before you start OpenRig ([the full list](https://github.com/mvschwarz/openrig#what-openrig-changes-on-your-machine)).
|
|
21
25
|
|
|
22
26
|
## 1. Install OpenRig, if it isn't installed
|
|
23
27
|
|
|
@@ -178,4 +182,4 @@ offer, so the person sees the real file, not a placeholder:
|
|
|
178
182
|
- **Everything in the library:** `rig context list`.
|
|
179
183
|
- **Exact syntax:** `rig <command> --help` is always current for the installed version.
|
|
180
184
|
|
|
181
|
-
|
|
185
|
+
When something here and `rig <command> --help` disagree, `--help` wins.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Agent help: the single troubleshooting and escalation guide (docs/reference/help.md).
|
|
2
2
|
name: help
|
|
3
|
-
version: "0.6.
|
|
3
|
+
version: "0.6.13"
|
|
4
4
|
taxonomy: world
|
|
5
5
|
purpose: "What an agent does when its user says OpenRig isn't working: diagnose, fix within permissions, verify, and escalate to OpenRig support."
|
|
6
6
|
files:
|
|
@@ -11,7 +11,7 @@ not know exists.** So the point of what follows is not skill. It is recognition:
|
|
|
11
11
|
lands, something rhymes, and you go check instead of building.
|
|
12
12
|
|
|
13
13
|
Eighty-eight top-level verbs ship (capability canon refreshed through
|
|
14
|
-
`capability-delta-v0.6.
|
|
14
|
+
`capability-delta-v0.6.13`). This marker describes the pack's teaching, not publication or live
|
|
15
15
|
adoption. Read this once for shape, and let it make you suspicious that a thing already exists.
|
|
16
16
|
Model-divergence proclamations are live product (trust them; pins use canonical
|
|
17
17
|
model IDs).
|
|
@@ -32,6 +32,11 @@ one command away. Your memory of the fleet is a claim about the past.
|
|
|
32
32
|
filters to running and **hides detached, exited and attention states** — which are exactly the
|
|
33
33
|
cells you were scanning for. A seat whose tmux session is confirmed gone reads `detached`
|
|
34
34
|
(activity reason `session_missing`), and `rig ps --nodes` says to restore or relaunch it.
|
|
35
|
+
`rig ps --nodes` also shows the model each seat was last seen using (`modelObservation`, with its
|
|
36
|
+
source and time), or unknown; it never shows the configured model in its place. A Claude seat at
|
|
37
|
+
Claude Code's MCP-server approval menu reads as needing input (`mcp_gate`), a Codex seat at its
|
|
38
|
+
folder-trust panel reads `trust_gate`, and an OMP seat whose turn ended with a typed transient
|
|
39
|
+
provider failure reads idle and takes an ordinary retry.
|
|
35
40
|
**`rig ps --resources`** shows this host's load and transcript capture cost.
|
|
36
41
|
- **`rig ps --all-hosts --nodes -A`** — the same across every registered machine. Rollup-only
|
|
37
42
|
unless you ask for nodes.
|
|
@@ -74,7 +79,7 @@ one command away. Your memory of the fleet is a claim about the past.
|
|
|
74
79
|
- **`rig roster list` / `show` / `find`** — who across your rigs and hosts is recommended for a
|
|
75
80
|
kind of work, from JSON rosters in `<workspace.root>/rosters`. Read-only: it dispatches nothing
|
|
76
81
|
and does not claim anyone is available. The built-in starter and factory leads publish their
|
|
77
|
-
team's roster at first start.
|
|
82
|
+
team's roster at first start. `show` and `find` include each seat's last observed model.
|
|
78
83
|
- **`rig telemetry events` / `transitions` / `tenures <node-id>`** — past events, queue
|
|
79
84
|
transitions and a seat's occupants, one bounded page at a time with gaps reported. Reach for it
|
|
80
85
|
before querying the database yourself.
|
|
@@ -98,7 +103,9 @@ unseen — which makes messages the one delivery channel that never gets skipped
|
|
|
98
103
|
that seat aren't held behind it; N is a deadline from the start of the wait.
|
|
99
104
|
Over `--host` to an http-registered host, a send that may have reached the remote reads
|
|
100
105
|
`remote-outcome-unknown` ("Delivery UNCONFIRMED"): check the target with `rig capture <session>
|
|
101
|
-
--host <id>` before any resend. Only a host that was never reached reads as unreachable.
|
|
106
|
+
--host <id>` before any resend. Only a host that was never reached reads as unreachable. A send
|
|
107
|
+
whose caller goes away (Ctrl-C, or its own timeout) before input starts is refused with
|
|
108
|
+
`caller_cancelled` and never types later.
|
|
102
109
|
- **`rig send --raw`** — send exact text or keystrokes without the From/To envelope;
|
|
103
110
|
the interactive-prompt guard still applies. To deliberately drive an interactive prompt,
|
|
104
111
|
**`--dangerously-interact --reason "<why>"`** is the explicit override and implies raw text.
|
|
@@ -116,7 +123,9 @@ unseen — which makes messages the one delivery channel that never gets skipped
|
|
|
116
123
|
every seat in one call. `--lines N` is the last N lines (stderr says how many earlier lines were
|
|
117
124
|
cut); `--history-plus-pane` gives the older N history lines plus the whole pane. A short capture
|
|
118
125
|
doesn't prove a seat is idle: a capture that cut lines says activity is unknown (`activity:
|
|
119
|
-
"unknown"` in `--json`), so read `rig ps --nodes` for it.
|
|
126
|
+
"unknown"` in `--json`), so read `rig ps --nodes` for it. For a Claude Code or Codex seat, stderr
|
|
127
|
+
notes whether the input box's text looks typed or like a faint harness suggestion (`inputBox` in
|
|
128
|
+
`--json`); it's a heuristic, and `unknown` means unknown.
|
|
120
129
|
- **`rig transcript <seat>`** — what has been *said* in a seat, and **seat-scoped rather than
|
|
121
130
|
session-scoped**: one file spanning every agent generation that has occupied it, so it reaches
|
|
122
131
|
back through handovers. Capped (`transcripts.lines`, default 1000 — raise it for depth), and
|
|
@@ -170,7 +179,10 @@ unseen — which makes messages the one delivery channel that never gets skipped
|
|
|
170
179
|
- **`rig slack`** — inspect and manage one connector implementation. Use registered-human
|
|
171
180
|
readiness for the delivery decision and `queue create --verify` for its receipt; connector
|
|
172
181
|
setup or verification is not an outbound human message. After a connection gap the daemon
|
|
173
|
-
catches up on missed
|
|
182
|
+
catches up on missed messages in the channels this machine owns (its default channel, its
|
|
183
|
+
channel map's, and on a relayed machine each channel the hub has relayed to it) and on replies
|
|
184
|
+
in tracked threads whose root or close is within seven days; recovered replies are marked late
|
|
185
|
+
and never answer a decision. `rig slack status` shows the
|
|
174
186
|
connection, the catch-up state, and the count of retained retry records for inbound messages,
|
|
175
187
|
reactions and click answers (kept across restarts, not a distinct-message count). A retained alert whose row closed before its retry isn't
|
|
176
188
|
posted; the row says why. Its `Delivery:` line says whether events are confirmed arriving;
|
|
@@ -389,7 +401,8 @@ not have to tear one down to change it, and you rarely have to start from nothin
|
|
|
389
401
|
- **`rig up <source>`** — make a whole rig exist and run: from a spec you wrote, a shipped starter
|
|
390
402
|
by name, a bundle someone handed you, a GitHub folder link (pinned to one commit), or a stopped
|
|
391
403
|
rig. `rig up` with a pod-aware spec on a stopped team's name replaces that team (the earlier one
|
|
392
|
-
is archived), so check `rig ps --nodes` first.
|
|
404
|
+
is archived), so check `rig ps --nodes` first. A rig name containing a dot is refused before
|
|
405
|
+
launch, because tmux would rename its sessions. Launch-created `AGENTS.md` or `CLAUDE` files now show in `git status`.
|
|
393
406
|
`rig up <rig> --existing` puts back the OpenRig guidance blocks `rig down` removed before a
|
|
394
407
|
resumed seat starts. A seat still missing one makes the rig `partially_restored` (its node lists
|
|
395
408
|
`guidanceGaps`) and `rig up` exits 1. A seat that wasn't running at the snapshot, but whose
|
|
@@ -426,8 +439,13 @@ not have to tear one down to change it, and you rarely have to start from nothin
|
|
|
426
439
|
<account>` reports `moved` only when a tool turn has completed in the same conversation since
|
|
427
440
|
the restart and Codex's status names that account. Linux only: on macOS a
|
|
428
441
|
request that reaches the running-process check refuses before stopping the seat.
|
|
442
|
+
An adopted seat (one OpenRig didn't launch) refuses with `claimed_session`. "A conversation it
|
|
443
|
+
can prove" means the stored conversation matches the one the running Codex's command line names
|
|
444
|
+
(or, when it names none, the only one Codex has logged since it started); OpenRig can't tell
|
|
445
|
+
which conversation Codex is on now. If the conversation was changed inside the running Codex,
|
|
446
|
+
the restart may refuse or resume the earlier one, so look at the pane (`rig capture <seat>`) first.
|
|
429
447
|
- **`rig add`** / **`rig expand`** — graft one more member, or a whole new pod, onto a rig that is
|
|
430
|
-
already running. `rig add`
|
|
448
|
+
already running. `rig add`, `rig grow` and `rig remove` take the rig's name or ID; a name two active rigs share is refused
|
|
431
449
|
with `rig_ambiguous` and the candidates. `rig grow --new-pod` and `rig expand` are one ingress; choose by input shape.
|
|
432
450
|
- **`rig remove`** / **`rig shrink`** — take a seat, or an entire pod, out of a running topology.
|
|
433
451
|
If it holds active work, pass `--fallback <live-seat>` to reroute before mutation; without a
|
|
@@ -543,6 +561,16 @@ version, from checking the environment to a useful report to the OpenRig team.
|
|
|
543
561
|
Effective-model detection follows the identity-verified current occupant, not a retained
|
|
544
562
|
predecessor; a `<synthetic>` transcript record is skipped, so a PENDING model check is not a
|
|
545
563
|
divergence.
|
|
564
|
+
- **`rig seat set-cwd <seat> --cwd <absolute-path> --reason <text>`** — save an existing seat's
|
|
565
|
+
launch directory, audited, for its next fresh launch or rebuild handover. Its node, address, queue
|
|
566
|
+
and history stay intact. It creates the folder (on the daemon's host) and writes nothing else there: launch writes the
|
|
567
|
+
startup files, as today. Its preflight policy refuses, naming the paths, when the new directory
|
|
568
|
+
holds an edited, unrecorded-and-different or doubly sourced copy that launch would place. The
|
|
569
|
+
running process keeps its directory: adopt the new one with `rig seat launch <seat> --fresh
|
|
570
|
+
--stop --reason <text>` or a rebuild handover, promptly (background work, such as a Claude seat's
|
|
571
|
+
managed compaction, can use the saved directory before then; that's guidance, not a guard), and
|
|
572
|
+
before any `rig down`/`rig up` or fork handover. In-place Codex restart isn't adoption. `rig seat status` shows the
|
|
573
|
+
saved `launch_cwd`. Old-directory files are left.
|
|
546
574
|
- **`rig seat set-permissions <seat> --mode <mode> --reason <text>`** — select one seat's native
|
|
547
575
|
permission mode for its future managed launches; it relaunches nothing, and `inherit` clears the
|
|
548
576
|
selection. `rig seat status` reports the selection, but a status read does not prove the
|
|
@@ -551,7 +579,7 @@ version, from checking the environment to a useful report to the OpenRig team.
|
|
|
551
579
|
reasoning effort for its next launch, restore, handover or in-place Codex restart without
|
|
552
580
|
touching its spec or its peers; nothing restarts. **`rig seat effort <seat>`** reports what was
|
|
553
581
|
requested, what's saved, what the running process was launched with and what the session
|
|
554
|
-
recorded (NOT VERIFIED until the seat takes a turn).
|
|
582
|
+
recorded (NOT VERIFIED until the seat takes a turn). It works for Pi seats too, sent as `--thinking`.
|
|
555
583
|
- **`rig seat set-typing-guard <seat> --mode off|draft-aware|hold --reason <text>`** — choose
|
|
556
584
|
ordinary automatic delivery, immediate retention when input is busy/unreadable, or holding all automatic
|
|
557
585
|
input. `--enabled true|false` remains compatible: true selects hold, false selects off.
|
|
@@ -572,6 +600,8 @@ version, from checking the environment to a useful report to the OpenRig team.
|
|
|
572
600
|
`submitted, unconfirmed` (it reached the seat, not proof compaction ran), `uncertain` (not
|
|
573
601
|
replayed) or `not sent`, so confirm by effect. Claude seats that select `openrig-core` load its
|
|
574
602
|
hooks; a seat can give a slow refocus more time with `OPENRIG_REFOCUS_BUDGET_MS` (4500 to 52000).
|
|
603
|
+
The refocus work packet stays off by default for Claude Code and Codex;
|
|
604
|
+
`OPENRIG_REFOCUS_WORK_PACKET=1` turns it on, with each field bounded.
|
|
575
605
|
- **Know what compaction costs before you reach for it.** On some runtimes what comes back has
|
|
576
606
|
enough context left to believe it knows everything and not enough to actually know anything — and
|
|
577
607
|
**the compacted agent is the only one who knows it happened**, while every other seat keeps
|
|
@@ -848,9 +878,9 @@ your circumstances is configuration, and the ones that are not, another agent ca
|
|
|
848
878
|
permission policy: an explicit flag wins over it, and it wins over the operator default
|
|
849
879
|
`launch.non_interruptive`. The before-install view shows it as
|
|
850
880
|
`posture[].nonInterruptiveDefault`.
|
|
851
|
-
- **Smaller settings worth knowing:** per-seat `effort`, passed to Claude as `--effort
|
|
852
|
-
Codex as `model_reasoning_effort` (`rig seat set-effort` overrides it for
|
|
853
|
-
`runtime.readiness_timeout_seconds` for seats that start slowly.
|
|
881
|
+
- **Smaller settings worth knowing:** per-seat `effort`, passed to Claude as `--effort`, to
|
|
882
|
+
Codex as `model_reasoning_effort` and to Pi as `--thinking` (`rig seat set-effort` overrides it for
|
|
883
|
+
one seat); and `runtime.readiness_timeout_seconds` for seats that start slowly.
|
|
854
884
|
- **`rig policy cite` / `defaults`** — what posture the operator is in: how autonomous to be, how
|
|
855
885
|
loudly to report, whether to batch permission questions or block on them. **This declares a
|
|
856
886
|
posture; it does not grant or deny permissions** — the harness's own settings are the control
|
|
@@ -879,7 +909,12 @@ your circumstances is configuration, and the ones that are not, another agent ca
|
|
|
879
909
|
windows, listed once per allowance and never added up; `--refresh` (optionally `--provider
|
|
880
910
|
codex|claude`) reads the logins now. A Claude account's current availability reads `unknown`,
|
|
881
911
|
because nothing links a seat's reading to the login it used: read each window as that seat's
|
|
882
|
-
reading, and don't tell a person an account has room from it.
|
|
912
|
+
reading, and don't tell a person an account has room from it. Each account row also carries a
|
|
913
|
+
sign-in fact (`usable`, `needs sign-in` or `unknown`); a signed-in Claude login never reads
|
|
914
|
+
better than `unknown`. A Codex account's last reading, its reset and its last observed exhaustion
|
|
915
|
+
survive a daemon restart as history (`retained: "before_restart"`), never a current reading; a
|
|
916
|
+
window whose reset has passed shows an `expectation`, which is planning, not a reading. Run `rig provider status --refresh`
|
|
917
|
+
before telling anyone an account has room. With `provider.subscription_moves`
|
|
883
918
|
on (off by default), `rig provider moves` records and lists moves of a Codex home's seats between
|
|
884
919
|
subscriptions.
|
|
885
920
|
- **Codex configuration fragments** — a `codex_config_fragment` must open with a table header and
|
|
@@ -893,6 +928,19 @@ your circumstances is configuration, and the ones that are not, another agent ca
|
|
|
893
928
|
`both` sets which harnesses it installs and checks; one not chosen reads `skipped`, never failed.
|
|
894
929
|
- **`rig usage series`** — what a seat's token curve has looked like over time: climbing steadily,
|
|
895
930
|
reset, or stopped reporting entirely. The last one is a signal, not a gap.
|
|
931
|
+
- **`rig usage top`** — which of this machine's seats used the most tokens over a window (`--window
|
|
932
|
+
90m`, `1h`, `2d`; `--top <n>` caps the list). Each ranked seat shows its token delta and samples;
|
|
933
|
+
a seat that has reported usage before but has no usable samples in the window is listed as
|
|
934
|
+
unknown with its reason, never as zero.
|
|
935
|
+
To compare machines, run it on each machine, or against each machine's daemon with
|
|
936
|
+
`OPENRIG_URL=<that daemon's URL>`, back to back, with the same `--window`, no `--top`, and `--json`.
|
|
937
|
+
Show the results side by side in tokens. For each machine, give its host, the window and its
|
|
938
|
+
`sinceIso` (each daemon counts from its own clock), how many seats were ranked and over what span,
|
|
939
|
+
the unknown seats and their reasons, and each seat's runtime, declared `model` and last observed
|
|
940
|
+
model (`modelObservation`: model, source, time) from `rig ps --nodes -A --json` on that machine.
|
|
941
|
+
A seat that has never reported usage is in neither list: name each seat that `rig ps --nodes -A
|
|
942
|
+
--json` shows and `rig usage top` doesn't as not covered. Don't add machines into one total unless
|
|
943
|
+
they cover the same seats over the same span; where coverage differs, say so instead.
|
|
896
944
|
- **`rig usage cost [--seat <session>]`** — what each seat's harness reports it costs, beside its
|
|
897
945
|
tokens: Claude's own client-side estimate (not an invoice) and Codex's tokens with a note that it
|
|
898
946
|
reports no cost. A missing figure reads missing, never $0, and no setting gates it. With
|