@openrig/cli 0.6.12 → 0.6.14
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 +69 -14
- 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/openrig-user/SKILL.md +11 -3
- package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +73 -48
- 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 +76 -16
- package/daemon/context-packs/reference/getting-started.md +135 -28
- 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 +65 -167
- 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/SKILL.md +11 -3
- 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 +73 -48
- 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/adapters/tmux.js +1 -1
- 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 +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/claim-service.d.ts +9 -18
- package/daemon/dist/domain/claim-service.d.ts.map +1 -1
- package/daemon/dist/domain/claim-service.js +83 -0
- package/daemon/dist/domain/claim-service.js.map +1 -1
- 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-compaction-enforcer.d.ts +2 -2
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.js +20 -14
- package/daemon/dist/domain/claude-compaction-enforcer.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 +45 -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/topology-converge.d.ts +1 -0
- package/daemon/dist/domain/topology-converge.d.ts.map +1 -1
- package/daemon/dist/domain/topology-converge.js +1 -0
- package/daemon/dist/domain/topology-converge.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/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 +4 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/wake-resolve-service.d.ts +1 -0
- package/daemon/dist/domain/wake-resolve-service.d.ts.map +1 -1
- package/daemon/dist/domain/wake-resolve-service.js +10 -0
- package/daemon/dist/domain/wake-resolve-service.js.map +1 -1
- package/daemon/dist/domain/wake-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/wake-resolver.js +7 -0
- package/daemon/dist/domain/wake-resolver.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 +42 -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 +7 -4
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +41 -118
- 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 +135 -28
- package/daemon/docs/reference/publishing-a-rig-bundle.md +5 -2
- package/daemon/docs/reference/quickstart.md +187 -0
- 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 +65 -167
- 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/client.d.ts +7 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +28 -0
- package/dist/client.js.map +1 -1
- package/dist/commands/ask.d.ts.map +1 -1
- package/dist/commands/ask.js +13 -3
- package/dist/commands/ask.js.map +1 -1
- 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/chatroom.d.ts.map +1 -1
- package/dist/commands/chatroom.js +1 -0
- package/dist/commands/chatroom.js.map +1 -1
- package/dist/commands/compact.d.ts.map +1 -1
- package/dist/commands/compact.js +5 -4
- package/dist/commands/compact.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +4 -2
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +47 -23
- 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/reconcile-session.d.ts.map +1 -1
- package/dist/commands/reconcile-session.js +25 -4
- package/dist/commands/reconcile-session.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/ui.d.ts.map +1 -1
- package/dist/commands/ui.js +8 -1
- package/dist/commands/ui.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/config-store.d.ts +2 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +5 -0
- package/dist/config-store.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +11 -3
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/front-door.d.ts.map +1 -1
- package/dist/front-door.js +3 -1
- package/dist/front-door.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/local-daemon-owner.d.ts +28 -0
- package/dist/local-daemon-owner.d.ts.map +1 -0
- package/dist/local-daemon-owner.js +98 -0
- package/dist/local-daemon-owner.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
|
@@ -1,26 +1,80 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
# OpenRig setup reference
|
|
2
|
+
|
|
3
|
+
This is the full reference for installing and running OpenRig, written for the agent doing the setup and for anyone
|
|
4
|
+
who wants the detail. The short version for people is [Getting started](quickstart.md).
|
|
5
|
+
|
|
6
|
+
## For the agent doing the setup
|
|
7
|
+
|
|
8
|
+
The `rigs` skill is the procedure: follow it in order. This page is what it looks things up in.
|
|
9
|
+
|
|
10
|
+
- **Done** means the person is talking to the operator in a visible OpenRig view. A healthy daemon, a started kernel
|
|
11
|
+
or an opened window isn't done on its own. If they'd rather talk later, the handoff is still pending: say so, and
|
|
12
|
+
leave them the exact command.
|
|
13
|
+
- **Read readiness; don't assume it:**
|
|
14
|
+
- **The kernel:** the `Kernel:` line in `rig status`, and `rig ps --nodes --rig kernel`.
|
|
15
|
+
- **A team:** `rig ps --nodes --rig <team>`.
|
|
16
|
+
- A missing or unknown signal isn't ready.
|
|
17
|
+
- `rig up` exiting 1 with `Status: partial` and `Startup attention` means a seat is waiting at a prompt. Answer it,
|
|
18
|
+
or ask the person to, then run the `rig seat continue <seat>` it names.
|
|
19
|
+
- **Prerequisites:** check the person's existing toolchain first (mise, nvm, Homebrew or the nodejs.org installer)
|
|
20
|
+
and the PATH. Use what's there. Don't change a shared Homebrew's ownership, and don't make a local workaround the
|
|
21
|
+
standard route. If Node.js is installed after your session started, check that new shells and the session's hooks
|
|
22
|
+
can find it. In one published-0.6.11 Mac run, OpenRig's Claude hooks reported `node: command not found` until the
|
|
23
|
+
PATH was fixed.
|
|
24
|
+
- **Ask once, then reuse the answer:** the provider (Claude Code, Codex or both), Herdr, Ghostty on macOS,
|
|
25
|
+
remembered command allowances, and the team.
|
|
26
|
+
- **Before changing their machine:** say what applies to their route, then wait for a yes. See
|
|
27
|
+
[what OpenRig changes on your machine](../../README.md#what-openrig-changes-on-your-machine).
|
|
28
|
+
- **When something stops:**
|
|
29
|
+
- [Incomplete setup and restart](#incomplete-setup-and-restart) maps what you see to the next action.
|
|
30
|
+
- [What can interrupt installation and the OpenRig view](#what-can-interrupt-installation-and-the-openrig-view)
|
|
31
|
+
covers the view.
|
|
32
|
+
- [Headless or SSH handoff](#headless-or-ssh-handoff) covers no-display cases.
|
|
33
|
+
- A timed-out command may still have taken effect. Read `rig ps` or `rig seat status <seat>` before you run it
|
|
34
|
+
again.
|
|
35
|
+
- **Don't:**
|
|
36
|
+
- relaunch a team to reopen its view;
|
|
37
|
+
- start another seat to clear a prompt;
|
|
38
|
+
- build the person's project yourself. Give the goal to the operator.
|
|
15
39
|
|
|
16
40
|
## Before you start
|
|
17
41
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
42
|
+
> **What OpenRig changes on your machine**
|
|
43
|
+
> - **Install:** `@openrig/cli` goes in globally with npm.
|
|
44
|
+
> - **Setup:** `rig setup` adds an OpenRig block to `~/.tmux.conf`. It can install tmux (with Homebrew on macOS), and
|
|
45
|
+
> Herdr unless you pass `--no-herdr`. Plain `rig setup`, which is what the one-command install runs, checks both
|
|
46
|
+
> Claude Code and Codex and may install a missing one; `rig setup --providers claude` (or `codex`) limits it to
|
|
47
|
+
> yours.
|
|
48
|
+
> - **Starting OpenRig, for the coding agent you use** (paths are the usual defaults):
|
|
49
|
+
> - Codex: hooks and trust in `~/.codex/config.toml`.
|
|
50
|
+
> - Claude Code: workspace trust in `~/.claude.json`, and activity hooks in the project's
|
|
51
|
+
> `.claude/settings.local.json`, plus a status line unless you already have your own.
|
|
52
|
+
> - Discovery skills go in `~/.claude/skills` and `~/.agents/skills`.
|
|
53
|
+
> - **Starting a team in your project:** adds managed guidance to `AGENTS.md` or `CLAUDE.md`, plus the team's skills
|
|
54
|
+
> and plugins.
|
|
55
|
+
> - **Permissions:** by default, OpenRig's own kernel gets broader permissions than a project team gets by default.
|
|
56
|
+
> On Codex that's full access with no approval prompts (`-s danger-full-access -a never`). On Claude Code, its file
|
|
57
|
+
> tools, web fetches and operational commands, including reads under your home folder, run without asking. A
|
|
58
|
+
> permission policy, per-agent choice or Codex profile changes that. What your team can do depends on the team you
|
|
59
|
+
> choose and your settings; `workshop`, for example, ships with broad access.
|
|
60
|
+
> - **Backups:** OpenRig doesn't guarantee it can preserve or roll back these files, so back them up first.
|
|
61
|
+
>
|
|
62
|
+
> [Everything OpenRig writes, and why →](https://github.com/mvschwarz/openrig#what-openrig-changes-on-your-machine)
|
|
63
|
+
|
|
64
|
+
You need Node.js 22 or 24 and tmux, on macOS or Linux, and one working Claude
|
|
65
|
+
Code or Codex account: one is enough, since the kernel operator adapts the
|
|
66
|
+
shipped `starter` team to whichever you have. On Linux, the distribution's own
|
|
67
|
+
Node.js can be older (Ubuntu 24.04's is 18); install a supported version with
|
|
68
|
+
[nvm](https://github.com/nvm-sh/nvm) (`nvm install 22`) or NodeSource. On a Mac
|
|
69
|
+
with Apple silicon, use Node.js 22 (see the [compatibility
|
|
70
|
+
history](../releases/v0.5.15.md#known-compatibility-limitation)). On a Mac where
|
|
71
|
+
you aren't an administrator, or where Homebrew belongs to another account (its
|
|
72
|
+
`brew install` is refused), install Node.js in your own home folder with
|
|
73
|
+
[nvm](https://github.com/nvm-sh/nvm): run `touch ~/.zshrc` (a new Mac account
|
|
74
|
+
has none, and nvm's installer only adds itself to a profile file that already
|
|
75
|
+
exists), then the install command on nvm's page, open a new terminal, and run
|
|
76
|
+
`nvm install 22`. That needs no administrator password, and `npm install -g`
|
|
77
|
+
then installs into your nvm folder. Native
|
|
24
78
|
Windows isn't supported. On Windows, use WSL2: it's the Windows route OpenRig
|
|
25
79
|
supports, though OpenRig's automated tests don't run on it yet. One user's
|
|
26
80
|
[working setup](#wsl2-a-reported-working-setup) is below. Node 20 and
|
|
@@ -123,19 +177,20 @@ You can also read [`skills/rigs/SKILL.md`](../../skills/rigs/SKILL.md) directly.
|
|
|
123
177
|
script will do and changes nothing:
|
|
124
178
|
|
|
125
179
|
```sh
|
|
126
|
-
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.
|
|
180
|
+
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.14/scripts/install.sh | sh -s -- --dry-run
|
|
127
181
|
```
|
|
128
182
|
|
|
129
183
|
The same command without `--dry-run`,
|
|
130
|
-
`curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.
|
|
184
|
+
`curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.14/scripts/install.sh | sh`, installs the
|
|
131
185
|
latest published `@openrig/cli` with `npm install -g`,
|
|
132
186
|
runs the Node.js and SQLite check, then `rig setup --dry-run` and `rig setup`. `rig setup` checks both Claude Code and
|
|
133
|
-
Codex and may install a missing one, as described below. A failed step prints
|
|
134
|
-
`FAILED [n/4] <command or check> (exit <code>)`.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
187
|
+
Codex and may install a missing one, as described below. A failed step among the first three prints
|
|
188
|
+
`FAILED [n/4] <command or check> (exit <code>)`. When `rig setup` (step 4) doesn't finish ready, for example because a
|
|
189
|
+
provider isn't signed in yet, the script ends with `INSTALLED, SETUP NOT COMPLETE (exit <code>)`: the CLI is
|
|
190
|
+
installed, and `rig setup` lists what's left under "Some steps need attention". If the only items left are provider
|
|
191
|
+
sign-ins, sign in to each selected provider as below, then continue at
|
|
192
|
+
[Start the kernel](#start-the-kernel-and-check-its-state); run `rig setup` again rather than reinstalling the CLI. To
|
|
193
|
+
install only what the selected providers need, go step by step instead:
|
|
139
194
|
|
|
140
195
|
### Choose your providers
|
|
141
196
|
|
|
@@ -249,6 +304,17 @@ same view and plan, or creates one if none matches, preserving its config and ex
|
|
|
249
304
|
caller's Herdr endpoint must match the daemon's endpoint; a mismatch is reported
|
|
250
305
|
without opening a window or putting the view in another session.
|
|
251
306
|
|
|
307
|
+
The shared TUI (`rig tui --shared`) runs in the daemon's tmux server, so its own environment never
|
|
308
|
+
carries the Herdr you are looking at; the markers are on the tmux client attached to it. When you
|
|
309
|
+
open a terminal view from it on Linux, the TUI passes the markers of the client that was active last
|
|
310
|
+
(normally the one that pressed the key) to the command, which then opens the view in that Herdr. The
|
|
311
|
+
chosen client may belong to a different viewer: tmux only counts keys a client types, so a key sent
|
|
312
|
+
by an agent (`send-keys`) or by a control-mode client doesn't count as any client's activity, and the
|
|
313
|
+
view opens in the Herdr of the interactive client that typed last, however long ago. With no client
|
|
314
|
+
attached, more than one client active in the same second, or a client that isn't in Herdr or can't be
|
|
315
|
+
read, nothing is passed and the result is what it was before. Other platforms, and every other way of
|
|
316
|
+
running `rig terminal open`, keep the previous result too.
|
|
317
|
+
|
|
252
318
|
On Linux, a local graphical display and a supported hosting terminal are required
|
|
253
319
|
(Ghostty, GNOME Terminal, Konsole or xterm). Linux reports a window request; verify
|
|
254
320
|
what actually appeared. SSH, headless, CI and unsupported Linux hosts get a
|
|
@@ -544,6 +610,16 @@ views. If the provider cannot open, each labelled fallback command joins a diffe
|
|
|
544
610
|
seat. Keep all returned commands
|
|
545
611
|
complete when sharing them; a created workspace alone does not confirm visibility.
|
|
546
612
|
|
|
613
|
+
### Built by the community
|
|
614
|
+
|
|
615
|
+
Tools built around OpenRig are maintained by their authors. We have not tested them;
|
|
616
|
+
this list does not promise support or compatibility with your OpenRig version.
|
|
617
|
+
|
|
618
|
+
- **[Rig HQ](https://github.com/dmelo/rig-hq)**, by [dmelo](https://github.com/dmelo):
|
|
619
|
+
a read-only pixel-office viewer for rigs, seats, attention and queue handoffs, as
|
|
620
|
+
described in the [author's introduction](https://github.com/mvschwarz/openrig/discussions/879).
|
|
621
|
+
The author reports testing it with OpenRig 0.6.5. See its repository for setup and support.
|
|
622
|
+
|
|
547
623
|
## Continue real project work
|
|
548
624
|
|
|
549
625
|
Return to the same owner with the next outcome, citing the earlier result.
|
|
@@ -965,6 +1041,37 @@ same-seat stop/resume path after checking its retained policy; do not erase the
|
|
|
965
1041
|
rig or start a duplicate to reset permissions. A resume can reapply the stored
|
|
966
1042
|
launch mode, so verify the native mode again before continuing work.
|
|
967
1043
|
|
|
1044
|
+
## Optional Mac local-user check
|
|
1045
|
+
|
|
1046
|
+
On a Mac shared by multiple OS accounts, `transport.local_user_guard` can reduce
|
|
1047
|
+
accidental CLI routing to another account's local daemon. It is **off by default**.
|
|
1048
|
+
Enable it with `rig config set transport.local_user_guard true`, or set
|
|
1049
|
+
`OPENRIG_TRANSPORT_LOCAL_USER_GUARD=true` in the CLI's environment. Set it to
|
|
1050
|
+
`false` to turn it off; no daemon restart is needed for the CLI check.
|
|
1051
|
+
|
|
1052
|
+
When enabled, automatic local CLI data requests compare the daemon's reported
|
|
1053
|
+
`/healthz` PID and effective UID (`euid`) with two `ps` UID/start observations and
|
|
1054
|
+
a second health response, with at most one second of observation per check.
|
|
1055
|
+
Only stable agreement on a foreign effective UID stops the request. This does
|
|
1056
|
+
not require visibility into another user's socket descriptors. It does not
|
|
1057
|
+
stop the daemon, choose another port or retry. Diagnostic health/status checks
|
|
1058
|
+
remain available. Older daemons without `euid` remain unknown and are permitted.
|
|
1059
|
+
`sudo rig …` uses the caller's **effective** UID, so an enabled check against a
|
|
1060
|
+
user-owned daemon refuses when its reported/observed UID differs from root.
|
|
1061
|
+
|
|
1062
|
+
Explicit `OPENRIG_URL`/`RIGGED_URL` targets and registered remote hosts retain
|
|
1063
|
+
their selected routing, including tunnels. An internally resolved local URL is
|
|
1064
|
+
still checked. Default UI and TUI openings are checked before launch; this does
|
|
1065
|
+
not police later browser or TUI connections.
|
|
1066
|
+
|
|
1067
|
+
Missing, disagreeing, restricted or timed-out evidence **continues today's
|
|
1068
|
+
behavior**. This is a partial accidental-routing check, not authenticated user
|
|
1069
|
+
isolation: it trusts the daemon's PID/UID report and corroborates that process;
|
|
1070
|
+
it does not establish the socket's owner. Identity can change between observation
|
|
1071
|
+
and connection, and equal UIDs do not distinguish separate instances belonging
|
|
1072
|
+
to one account. The check
|
|
1073
|
+
does not add authentication to the daemon or protect direct HTTP clients.
|
|
1074
|
+
|
|
968
1075
|
## Custom settings and precedence
|
|
969
1076
|
|
|
970
1077
|
- **OpenRig:** member `permission_policy` overrides rig `permission_policy`.
|
|
@@ -116,8 +116,11 @@ an issue there with the same three things. A maintainer then writes the full ent
|
|
|
116
116
|
defined in the [bundle formats reference](bundle-formats.md), with the parts only a review can produce, such as the
|
|
117
117
|
pinned commit and each configuration's package digest.
|
|
118
118
|
|
|
119
|
-
Rig names are unique on the site. If `registry/<your-team>.yaml` already exists, openrig-registry's registry check
|
|
120
|
-
choose a distinct one, for example
|
|
119
|
+
Rig names are unique on the site. If `registry/<your-team>.yaml` already exists, openrig-registry's registry check
|
|
120
|
+
still replies that your submission was received, and says the name is taken; choose a distinct one, for example
|
|
121
|
+
`<taken-name>-<your-name>`. A team whose `rig.yaml` name matches a listed team's, such as an unchanged copy of one,
|
|
122
|
+
passes the checks with a notice for the maintainer about the shared name. Whether it's listed is the maintainer's
|
|
123
|
+
review decision, not the checks'.
|
|
121
124
|
|
|
122
125
|
What happens next:
|
|
123
126
|
- a maintainer pins your link to an exact commit, runs the same check, and reads everything your bundle gives to an
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# Getting started
|
|
2
|
+
|
|
3
|
+
OpenRig runs a team of coding agents (Claude Code, Codex and others) on your project, each in its own terminal. You
|
|
4
|
+
talk to one agent, and it hands work to the others. The team keeps its tasks and messages between sessions.
|
|
5
|
+
|
|
6
|
+
Most people let their coding agent set it up. This page explains what happens either way, so nothing is a black
|
|
7
|
+
box, and shows how to do each step by hand if you'd rather.
|
|
8
|
+
|
|
9
|
+
## How the pieces fit
|
|
10
|
+
|
|
11
|
+
- **`rig`** is the command you and your agents use. It comes from the npm package `@openrig/cli`.
|
|
12
|
+
- **The daemon** is a small background service on your machine. It keeps tasks, messages and state in a local
|
|
13
|
+
database. `rig daemon start` starts it.
|
|
14
|
+
- **tmux** runs each agent in its own terminal session. Agents keep running when you close a window, and one agent
|
|
15
|
+
can type into another's terminal.
|
|
16
|
+
- **The kernel** is OpenRig's own small team, which starts with the daemon. You talk to its **operator**, which
|
|
17
|
+
starts and runs teams for you. Its **advisor** helps you think through what you want.
|
|
18
|
+
- **Your team** (a *rig*) is the set of agents that work on your project, such as `starter`.
|
|
19
|
+
- **The OpenRig view** is a terminal window with the operator and, beside it or on another page, a dashboard of your
|
|
20
|
+
agents.
|
|
21
|
+
|
|
22
|
+
## What you need
|
|
23
|
+
|
|
24
|
+
- macOS or Linux. On Windows, use WSL2 ([one person's working setup](getting-started.md#wsl2-a-reported-working-setup)).
|
|
25
|
+
- Node.js 22 or 24 (on Apple silicon, Node.js 22) and tmux.
|
|
26
|
+
- Claude Code or Codex, signed in. One is enough to start.
|
|
27
|
+
|
|
28
|
+
If `node --version` does not show a supported version, first check your existing Node installation and PATH.
|
|
29
|
+
Ask your coding agent to help use the toolchain already on your machine. On a Mac, a shared Homebrew installation
|
|
30
|
+
may belong to another user; do not change its ownership to complete this setup. After correcting PATH or installing
|
|
31
|
+
Node, open a new terminal and check `node --version` and `npx --version` before continuing.
|
|
32
|
+
|
|
33
|
+
## The quick way: let your coding agent do it
|
|
34
|
+
|
|
35
|
+
In your project folder, add OpenRig's `rigs` skill to the agent you use:
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
# Claude Code
|
|
39
|
+
npx skills add https://github.com/mvschwarz/openrig/tree/<release-tag>/skills/rigs --skill rigs --agent claude-code
|
|
40
|
+
# Codex
|
|
41
|
+
npx skills add https://github.com/mvschwarz/openrig/tree/<release-tag>/skills/rigs --skill rigs --agent codex
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
For a new install, use the latest release's tag, for example `v0.6.14`. If OpenRig is already installed, use the tag
|
|
45
|
+
that matches `rig --version`, or upgrade first. If the command fails with `npx: command not found`, Node.js isn't
|
|
46
|
+
installed or isn't on your PATH yet (see above). Then type `/rigs` in Claude Code, or `$rigs` in Codex, and say what
|
|
47
|
+
you want built.
|
|
48
|
+
|
|
49
|
+
The skill has your agent work through the steps below in order. It says what it will run and change before it runs
|
|
50
|
+
it, and it asks before installing anything on your system. It finishes when you're talking to the operator.
|
|
51
|
+
|
|
52
|
+
## What happens, step by step
|
|
53
|
+
|
|
54
|
+
Each step shows the command, so you can run it yourself.
|
|
55
|
+
|
|
56
|
+
### 1. Install the `rig` command
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
npm install -g @openrig/cli
|
|
60
|
+
rig --version
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
This installs the CLI globally under your npm prefix. `rig --version` prints the version and a commit, such as
|
|
64
|
+
`0.6.12 (9e5382dd)`. With npm 11 or later, an `npm warn install-scripts` line is expected: it means only the
|
|
65
|
+
Node.js and SQLite check was skipped.
|
|
66
|
+
|
|
67
|
+
### 2. Set up the tools around it
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
rig setup --providers claude # or codex, or both
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Add `--dry-run` first to see the plan without changing anything. Setup does four things:
|
|
74
|
+
- it checks Node.js, tmux and your sign-in;
|
|
75
|
+
- it installs a missing tmux (with Homebrew on macOS, if you have it) or the coding agent you chose;
|
|
76
|
+
- it installs Herdr, a terminal workspace app the OpenRig view can use, unless you add `--no-herdr`;
|
|
77
|
+
- it adds an OpenRig block to `~/.tmux.conf` (mouse support and longer scrollback).
|
|
78
|
+
|
|
79
|
+
It doesn't start anything. It ends with a summary of what's done and what still needs you. A missing sign-in shows
|
|
80
|
+
there: run `claude auth login` or `codex login`, then carry on.
|
|
81
|
+
|
|
82
|
+
### 3. Start OpenRig
|
|
83
|
+
|
|
84
|
+
```sh
|
|
85
|
+
rig daemon start
|
|
86
|
+
rig status
|
|
87
|
+
rig ps --nodes --rig kernel
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The daemon starts and boots the kernel with the coding agents you're signed in to, or both if you're signed in to both.
|
|
91
|
+
|
|
92
|
+
**What starting OpenRig changes, for the coding agents you use** (paths are the usual defaults):
|
|
93
|
+
- **For Codex:** hooks and trust in `~/.codex/config.toml`, when OpenRig or a Codex agent starts.
|
|
94
|
+
- **For Claude Code:** workspace trust in `~/.claude.json`, and activity hooks in the project's
|
|
95
|
+
`.claude/settings.local.json`, plus a status line unless you already have your own.
|
|
96
|
+
- **For both:** small discovery skills in `~/.claude/skills` and `~/.agents/skills`.
|
|
97
|
+
- **Kernel access:** by default the kernel gets broader permissions than a project team gets by default. On Codex
|
|
98
|
+
that's full access with no approval prompts. On Claude Code, its file tools, web fetches and operational commands,
|
|
99
|
+
including reads under your home folder, run without asking. A permission policy, per-agent choice or Codex profile
|
|
100
|
+
changes that.
|
|
101
|
+
|
|
102
|
+
OpenRig doesn't guarantee it can preserve or roll back these files, so back them up first. [Everything OpenRig writes, and why](../../README.md#what-openrig-changes-on-your-machine).
|
|
103
|
+
|
|
104
|
+
Started isn't the same as ready. `rig status` shows a `Kernel:` line, and `rig ps --nodes --rig kernel` shows each
|
|
105
|
+
kernel agent's state. They can take a moment after the daemon is up.
|
|
106
|
+
|
|
107
|
+
### 4. Open the OpenRig view
|
|
108
|
+
|
|
109
|
+
```sh
|
|
110
|
+
rig terminal open saved:kernel --window
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**What you'll see:**
|
|
114
|
+
- **Where it opens:** a new terminal window or tab. If your agent is already running inside Herdr, it opens a new
|
|
115
|
+
Herdr space instead. It uses Herdr when installed, plain tmux otherwise.
|
|
116
|
+
- **Layout:** in a narrow window, or when the width can't be measured, the operator fills the first page. From 120
|
|
117
|
+
columns, the dashboard and the operator share it. The advisor has its own tab.
|
|
118
|
+
- **On a Mac:** you may be asked to let your terminal app be controlled. Allowing it is fine.
|
|
119
|
+
- **Over SSH or with no display:** the window can't open. The command says why and, where it can, prints a command
|
|
120
|
+
to run in a new terminal. Otherwise your agent works out the exact command to join the operator.
|
|
121
|
+
|
|
122
|
+
You're installed when you're talking to the operator.
|
|
123
|
+
|
|
124
|
+
### 5. Start your first team
|
|
125
|
+
|
|
126
|
+
Tell the operator what you want built, and in which folder. It recommends one of three teams:
|
|
127
|
+
- `starter`: a builder and a reviewer, for one bounded change;
|
|
128
|
+
- `workshop`: a lead, a builder, QA and a reviewer, for ongoing work in one repository;
|
|
129
|
+
- `factory`: seven agents, for sustained product work.
|
|
130
|
+
|
|
131
|
+
Before it starts one, it tells you what starting a team in your folder changes: managed guidance in `AGENTS.md` or
|
|
132
|
+
`CLAUDE.md`, plus the team's skills. Then it waits for your yes. As shipped, `starter` uses both Claude Code and
|
|
133
|
+
Codex. With only one of them, ask the operator to adapt it.
|
|
134
|
+
|
|
135
|
+
By hand, from your repository:
|
|
136
|
+
|
|
137
|
+
```sh
|
|
138
|
+
rig up starter --cwd . --plan # check what it would start
|
|
139
|
+
rig up starter --cwd .
|
|
140
|
+
rig ps --nodes --rig starter
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
If an agent stops at a sign-in, trust or permission prompt, `rig up` reports `Status: partial` and names the prompt.
|
|
144
|
+
Answer it in that agent's terminal, then run the `rig seat continue <seat>` command it prints. The team is ready
|
|
145
|
+
for work once its agents show as ready in `rig ps --nodes --rig starter`.
|
|
146
|
+
|
|
147
|
+
### 6. Give the team work, and stop it
|
|
148
|
+
|
|
149
|
+
```sh
|
|
150
|
+
rig send dev-build@starter 'Fix <one useful thing>. Ask dev-review to check it, and record the result and how I can try it.'
|
|
151
|
+
rig queue list --destination dev-build@starter
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
The builder records the work as a task, so you can follow it with `rig queue`. When you're done, `rig down starter`
|
|
155
|
+
stops that team. `rig daemon stop` stops the background service and leaves agent sessions running.
|
|
156
|
+
|
|
157
|
+
## The one-command install
|
|
158
|
+
|
|
159
|
+
Instead of steps 1 and 2:
|
|
160
|
+
|
|
161
|
+
```sh
|
|
162
|
+
curl -fsSL https://openrig.dev/install.sh | sh -s -- --dry-run # shows the plan and changes nothing
|
|
163
|
+
curl -fsSL https://openrig.dev/install.sh | sh
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
It checks Node.js and npm, installs the latest `@openrig/cli`, then runs `rig setup`. It doesn't know which coding agent
|
|
167
|
+
you use, so it checks and may install both. For just one, use steps 1 and 2. If a sign-in is missing, setup reports
|
|
168
|
+
it as the step to finish: sign in, then continue at step 3.
|
|
169
|
+
|
|
170
|
+
## What these words mean
|
|
171
|
+
|
|
172
|
+
- **Rig:** a team of agents, started with one command. Your first one is usually `starter`.
|
|
173
|
+
- **Seat:** one agent's role and address in a team, such as `dev-build@starter`.
|
|
174
|
+
- **Harness:** the software around the model that an agent runs in: Claude Code, Codex or Pi.
|
|
175
|
+
- **Kernel:** OpenRig's own small team, which starts with OpenRig. It isn't your project's team.
|
|
176
|
+
- **Operator:** the kernel's agent you talk to first. It recommends a team for your goal and starts it when you say
|
|
177
|
+
yes.
|
|
178
|
+
- **Advisor:** the kernel's agent for thinking through what you want before a team starts. It has its own tab.
|
|
179
|
+
- **OpenRig view:** the terminal view that opens on the operator. In a wide window the dashboard sits beside it;
|
|
180
|
+
otherwise, or when the width can't be measured, the dashboard is on its own page. `saved:kernel` in
|
|
181
|
+
`rig terminal open saved:kernel` is the name of this saved view.
|
|
182
|
+
|
|
183
|
+
## More
|
|
184
|
+
|
|
185
|
+
- **Every detail of setup:** troubleshooting, permissions, headless and SSH use, and what can stop the view from
|
|
186
|
+
opening. See the [setup reference](getting-started.md).
|
|
187
|
+
- **Stuck?** Run `rig context get help`, or read [Help](help.md).
|
|
@@ -125,10 +125,14 @@ reports broken links as gaps rather than following pointers.
|
|
|
125
125
|
This automatic hook path is additive to one-shot manual injection through
|
|
126
126
|
`rig send --context`; neither mode substitutes for the other.
|
|
127
127
|
|
|
128
|
-
## The work packet (
|
|
128
|
+
## The work packet (off by default on every runtime, for now)
|
|
129
129
|
|
|
130
130
|
Set `OPENRIG_REFOCUS_WORK_PACKET=1` in a seat's harness environment so its
|
|
131
131
|
refocus carries the work it is actually doing as text rather than as pointers.
|
|
132
|
+
`=0` (or `off`, `false`, `no`) turns it off. Unset, each runtime's default
|
|
133
|
+
applies. A runtime's default becomes on only after a native run shows the
|
|
134
|
+
packet reaching the agent and leading to the right next action. No runtime has
|
|
135
|
+
been shown that yet, so today both Claude Code and Codex default to off.
|
|
132
136
|
With the switch on:
|
|
133
137
|
|
|
134
138
|
- The hook asks `rig queue whoami --work-candidates` for labelled evidence.
|
|
@@ -154,6 +158,12 @@ With the switch on:
|
|
|
154
158
|
`OPENRIG_REFOCUS_NOTES_MAX_AGE_DAYS` (default 14) is named with its age, the
|
|
155
159
|
age's source (`updated:` frontmatter, else mtime) and the threshold: a cue
|
|
156
160
|
for judgment, not a staleness verdict.
|
|
161
|
+
- Each field is bounded on its own, with no total cap. A held or next row's
|
|
162
|
+
summary and continuation are one line each (about 160 characters), with
|
|
163
|
+
`rig queue show <id>` named when one was shortened. At most 20 held and 10
|
|
164
|
+
next rows are shown, with how many there are and the `rig queue list` command
|
|
165
|
+
for the rest. A matched section's body is cut at about 1,500 characters,
|
|
166
|
+
pointing to `--depth full`.
|
|
157
167
|
|
|
158
168
|
`trace-to-root.py --packet --work-candidates <path|->` renders the same packet
|
|
159
169
|
by hand.
|
|
@@ -361,7 +361,7 @@ pods:
|
|
|
361
361
|
**Where the declared names reach, by runtime.** Declared values are handed to the seat's terminal as tmux environment, so most seats take them as given:
|
|
362
362
|
|
|
363
363
|
- Plain Claude Code (no permission mode selected), Codex and terminal seats take a spec `HOME`, `PATH` or `CLAUDE_CONFIG_DIR` as given.
|
|
364
|
-
- The cleared environment (`env -i`) belongs only to a managed Claude launch, which is the one used when a permission mode is selected for the seat (for example `permission_policy: builtin:auto`). It forwards the declared names through the cleared environment, except `PATH`, `HOME` and `CLAUDE_CONFIG_DIR`, which OpenRig sets for that launch itself, and `CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN`, for which it sets its own renderer setting. A spec value for any of those four is not forwarded. A seat that selected the shipped `openrig-core` plugin also has `CLAUDE_CODE_PLUGIN_DIRS` (the vendored plugin, added after a list the seat declares itself) among its declared names, so it is forwarded like the others and the plugin's hooks load in a seat with a permission mode as in one without; a seat that didn't select the plugin has no such name added.
|
|
364
|
+
- The cleared environment (`env -i`) belongs only to a managed Claude launch, which is the one used when a permission mode is selected for the seat (for example `permission_policy: builtin:auto`). It forwards the declared names through the cleared environment, except `PATH`, `HOME` and `CLAUDE_CONFIG_DIR`, which OpenRig sets for that launch itself, and `CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN`, for which it sets its own renderer setting. A spec value for any of those four is not forwarded. A seat that selected the shipped `openrig-core` plugin also has `CLAUDE_CODE_PLUGIN_DIRS` (the vendored plugin, added after a list the seat declares itself) among its declared names, so it is forwarded like the others and the plugin's hooks load in a seat with a permission mode as in one without; a seat that didn't select the plugin has no such name added. Beyond the declared names, the launch also forwards, by name and only when the seat's terminal has them set, the terminal and locale variables (`TERM`, `COLORTERM`, `TERM_PROGRAM`, `TERM_PROGRAM_VERSION`, `LANG` and the `LC_*` names) and the person's editor and display session: `EDITOR`, `VISUAL`, `DISPLAY`, `XAUTHORITY` and `WAYLAND_DISPLAY`. They let Claude's external-editor action open the person's editor and let image paste reach the clipboard, without a value in a spec. `WAYLAND_DISPLAY` is passed as an absolute path: an absolute value is kept, and a relative one is joined to the terminal's `XDG_RUNTIME_DIR`; if the terminal has no `XDG_RUNTIME_DIR` for it, the name is left out. `XDG_RUNTIME_DIR` itself is not forwarded, because D-Bus clients look for the session bus at `$XDG_RUNTIME_DIR/bus` and would reach the keyring and `systemctl --user`. `DBUS_SESSION_BUS_ADDRESS`, `XDG_SESSION_TYPE`, `XDG_CURRENT_DESKTOP` and `SSH_AUTH_SOCK` are not forwarded either. A running seat picks the names up at its next managed Claude launch, not before: `rig seat launch <seat> --fresh --stop --reason "<why>"` for that seat alone (a new conversation), or a restore of the whole rig (`rig down <rig>`, then `rig up <rig> --existing`, which resumes each conversation but restarts every seat in the rig), or a handover. A seat that is up keeps the environment it started with.
|
|
365
365
|
- Codex seats run OpenRig's own Codex executable whatever a spec `PATH` says, and use the daemon's `CODEX_HOME` when the daemon has one.
|
|
366
366
|
- On Pi and OMP seats the values reach the terminal. The agent process gets only what the runner passes on, so a spec or one-off value reaches it only for the names the runner always passes: `PATH`, `HOME`, `USER`, `LOGNAME`, `TERM`, `LANG`, `LC_ALL`, `SHELL` and `TMPDIR`. Pi's agent process receives the runner's `HOME`, so a spec or one-off `HOME` value that reaches the runner is passed to Pi; OMP's agent process gets its seat state directory (`$OPENRIG_HOME/state/omp/<seat>`, see Oh My Pi below) as `HOME`, so a `HOME` value does not reach it. The selected provider's variables are passed separately, as described under each runtime.
|
|
367
367
|
|
|
@@ -436,10 +436,10 @@ directory's `CLAUDE.md`, including blocks written by other rigs.
|
|
|
436
436
|
| `profile` | string | yes | — | Profile name from the referenced AgentSpec. Use `default` for the default profile. Exception: `none` for terminal nodes. |
|
|
437
437
|
| `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. |
|
|
438
438
|
| `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`. |
|
|
439
|
-
| `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. |
|
|
439
|
+
| `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. Editing this declaration does not update an existing seat; use [`rig seat set-cwd`](agent-startup-guide.md#change-an-existing-seats-working-directory) to save its future launch directory. |
|
|
440
440
|
| `label` | string | no | — | Human-readable member name. Shown in UI when present. |
|
|
441
441
|
| `model` | string | no | — | Model override. Runtime-specific (e.g., `claude-opus-4-6` for Claude Code). |
|
|
442
|
-
| `effort` | string | no | — | Reasoning effort override, trimmed. A non-string value is ignored with an advisory. |
|
|
442
|
+
| `effort` | string | no | — | Reasoning effort override, trimmed. Claude gets `--effort`, Codex `-c model_reasoning_effort=…`, Pi `--thinking` (see "Pi" below). A non-string value is ignored with an advisory. |
|
|
443
443
|
| `permission_policy` | string | no | — | Member-level permission policy; overrides the rig's. Not valid on terminal members. |
|
|
444
444
|
| `env` | map | no | — | Launch environment for this seat, laid over the rig's `env`. Same rules as the rig-level field. Valid on terminal members too. See "Launch environment" below. |
|
|
445
445
|
| `role` | string | no | — | The seat's role, letters, digits, `_`, `.` and `-`. Not valid on terminal members. |
|
|
@@ -455,7 +455,7 @@ directory's `CLAUDE.md`, including blocks written by other rigs.
|
|
|
455
455
|
`runtime: pi` launches the Pi coding agent (`pi --mode rpc`) through OpenRig's RPC runner.
|
|
456
456
|
|
|
457
457
|
- **State:** Each seat uses `$OPENRIG_HOME/state/pi/<session>/agent` as its Pi agent directory, with `sessions/` beside it, instead of your default `~/.pi/agent`. The runner sets `PI_CODING_AGENT_DIR` to that directory. `<session>` is the seat's session name, unchanged; for a pod member it is `{podId}-{memberId}@{rigName}`. `$OPENRIG_HOME` defaults to `~/.openrig`. OpenRig creates these directories at launch and does not copy anything from `~/.pi/agent`.
|
|
458
|
-
- **Thinking level:**
|
|
458
|
+
- **Thinking level:** A Pi seat's effort (the choice saved with `rig seat set-effort`, else the spec's `effort`) is sent to Pi as `--thinking <level>` on every managed launch and resume: fresh launch, successor and restore. Pi accepts `off`, `minimal`, `low`, `medium`, `high`, `xhigh` and `max`; OpenRig passes the value as written and does not translate it, so Codex's `none` is not mapped to `off`. Only a value of the shape `set-effort` accepts (a letter, then up to 31 letters, digits, `-` or `_`) is sent; any other spec value, such as one with a space or one that starts with `--`, is left out, and `rig seat effort` says so. An unfamiliar level gets an advisory (a warning from `set-effort`), never a refusal, and Pi itself ignores an unknown level with a warning and keeps the level it would use without the flag: a model suffix, the resumed session's level, or its default. With no effort resolved, no flag is sent. The effort wins over a model suffix, and the model string is never changed. `rig seat effort` reports the level sent at launch and, on Pi 0.99.0 or later, the `thinkingLevel` Pi records on this launch's latest successful assistant turn (error and aborted turns are skipped); that is the session's level after Pi's own cap, not proof the provider applied it, and it is shown apart from the level sent when they differ. On older Pi it is NOT VERIFIED. Without an effort, you can still set the level as a model suffix, for example `model: openrouter/x-ai/grok-4:high`. Pi first looks for a model whose id is the whole pin, and uses it when there is one, suffix included. Only when there is none does Pi read the suffix as the level and record the model without it. Any other suffix, such as OpenRouter's `:free`, stays part of the model id. The model-divergence check reads the pin literally when the seat's `models.json` defines a model with that exact id; otherwise it accepts the model with or without the suffix. If the seat's `models.json` can't be read, a pin with a suffix stays unchecked, with the usual warning, when the recorded model matches the whole pin or the pin without its suffix. A record that matches neither is reported.
|
|
459
459
|
- **Custom models:** Pi reads `models.json` from its agent directory, so a seat reads `$OPENRIG_HOME/state/pi/<session>/agent/models.json`, not `~/.pi/agent/models.json`. Custom provider and model definitions for a seat go in that file. A seat that uses only providers Pi already includes does not need one. OpenRig does not create or write `models.json`.
|
|
460
460
|
- **Credentials:** The Pi process receives only `PATH`, `HOME`, `USER`, `LOGNAME`, `TERM`, `LANG`, `LC_ALL`, `SHELL`, `TMPDIR`, a fixed set of OpenRig seat and instance variables, `PI_CODING_AGENT_DIR`, `PI_CODING_AGENT_SESSION_DIR`, and at most one provider key. That key is `OPENROUTER_API_KEY`, `ZAI_API_KEY`, `KIMI_API_KEY` or `MINIMAX_API_KEY`, passed only when it is set in the seat's environment and the seat's `model` is written as `openrouter/<id>`, `zai/<id>`, `kimi-coding/<id>` or `minimax/<id>`. Naming that variable in `recovery.provider_auth_env_allowlist` (empty by default) makes the daemon add it, when set in the daemon's environment, to the seat's launch environment. No other variable reaches Pi, including other providers' keys and a custom provider's own key variable.
|
|
461
461
|
|
|
@@ -466,7 +466,7 @@ directory's `CLAUDE.md`, including blocks written by other rigs.
|
|
|
466
466
|
- **State:** Each seat uses `$OPENRIG_HOME/state/omp/<seat>/agent` and `sessions/` instead of your default `~/.omp` profile, and runs with that seat directory as `HOME`. OpenRig does not copy OMP credentials. The runner finds the real `omp` binary before switching `HOME`, so a version-manager shim such as mise on the daemon's `PATH` still works.
|
|
467
467
|
- **Credentials:** Provision each seat separately, or put the provider's key variable in `recovery.provider_auth_env_allowlist` (for example `ANTHROPIC_API_KEY` or `MISTRAL_API_KEY`). The allowlist accepts the key variable of every provider in OpenRig's OMP provider map, from `anthropic` through `litellm`. A seat receives a key only when its `model` is written as `provider/id`, such as `anthropic/claude-sonnet-4-5`. Short names such as `opus` pass no key. A provider whose key is scoped to one endpoint also accepts that endpoint's variable: `anthropic`, `openai` and `litellm` each take their `<PROVIDER>_BASE_URL` — `ANTHROPIC_BASE_URL`, `OPENAI_BASE_URL`, `LITELLM_BASE_URL`. The allowlist admits each variable on its own, so an endpoint named without its key is admitted too, which suits a keyless local proxy. The launch gate admits these endpoint names for OMP seats; the match against the seat's declared `provider/id` happens at the OMP child, which forwards a matching endpoint already in the runner's environment just as it forwards a key. OMP also reads the launch directory's `.env`, so use a trusted working directory.
|
|
468
468
|
- **Approval posture:** The default floor is `--approval-mode always-ask`. Because the runner is headless, OMP approval requests are cancelled and the seat stays in needing-attention after the turn ends, until the next agent run starts. A `full_bypass` permission policy selects `--approval-mode yolo`.
|
|
469
|
-
- **Model errors:** A
|
|
469
|
+
- **Model errors:** Errors are printed in the pane. A completed assistant failure with a numeric `errorStatus` of 408, 429, 500, 502, 503, 504, or 529 returns to idle at terminal `agent_end`, allowing an ordinary retry. Until that terminal boundary it stays in needing-attention. Intermediate `agent_end(isTerminal:false)` events do not release attention. A statusless failed retry summary retains that classification only when its attempt matches an announced retry and its final error exactly matches the latest typed transient assistant failure in that attempt. New assistant/turn boundaries invalidate the previous failure; unmatched summaries remain runtime errors. Rejected prompts, auth/configuration failures, exhausted retries without a typed transient status, and untyped errors (including text such as `529 overloaded`) retain attention until the next agent run starts. The runner does not classify diagnostic text. A transient failure does not clear a denied approval or another unresolved runtime failure in the same turn.
|
|
470
470
|
- **Restore:** OMP creates its session file after the first persisted turn. A new seat with no persisted turn has no resume token; restoring it requires `rig up --existing <rig> --fresh <seat>`. After that file exists, OpenRig restores that exact session file. If a full rig restore leaves an OMP seat in `attention_required` or `failed`, `rig seat clear-attention` cannot yet reconcile it to `operator_recovered`, even with `--reason`, because restore reconciliation only verifies Claude Code and Codex processes ([#41](https://github.com/mvschwarz/openrig/issues/41)). Relaunch that seat with `rig up --existing <rig> --fresh <seat>`, or restore it manually.
|
|
471
471
|
|
|
472
472
|
### Terminal Nodes
|
|
@@ -49,8 +49,22 @@ Authored files contain recommendations, not runtime facts. Extra fields are igno
|
|
|
49
49
|
any authored runtime, model or activity. At read time the command joins by exact host self-id
|
|
50
50
|
and seat. Unmatched or conflicting observations are `unknown`; a seat not reported running is
|
|
51
51
|
`stale`, with current runtime/model unknown. The configured model is the registry declaration.
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
Daemon node listings, `rig ps --nodes --full` and roster members also carry the full
|
|
53
|
+
`modelObservation`: `status`, `model`, `source`, `observedAt`, `generation` and `reason`.
|
|
54
|
+
Compact JSON uses the smaller shape described below. The configured `model` stays separate; roster's
|
|
55
|
+
`live.observedModel` is the observation's model or null. Human output says **last observed**.
|
|
56
|
+
Claude (`claude-assistant-response`) and Pi (`pi-assistant-response`) name response evidence;
|
|
57
|
+
Codex (`codex-turn-context` or `codex-world-state`) names recorded turn configuration, not a
|
|
58
|
+
verified backend response. The timestamp is the native record's time, never file mtime or inventory
|
|
59
|
+
read time. None promises the model that will answer the next turn.
|
|
60
|
+
|
|
61
|
+
The daemon reuses the current-occupant record selectors and bounded readers used by divergence
|
|
62
|
+
monitoring, sharing a process census. Reporting does not need a configured model or comparator.
|
|
63
|
+
A changed or unverified occupant, a record predating its tenure, missing or invalid record time,
|
|
64
|
+
unreadable or ambiguous records, unsupported runtimes and older daemons report **UNKNOWN** with
|
|
65
|
+
a reason, never the configured value as a fallback. An older record from the same verified occupant
|
|
66
|
+
remains labelled last observed at its original time; this is not a freshness guarantee. No record
|
|
67
|
+
contents, transcript paths or credentials are returned. Activity includes its own sample time;
|
|
54
68
|
activity and running status do not promise that someone is available for new work.
|
|
55
69
|
|
|
56
70
|
The JSON `observations.readAt` is when the inventory read completed, not a native observation
|
|
@@ -59,3 +73,16 @@ valid rosters remain usable; duplicate IDs make `show` report ambiguity instead
|
|
|
59
73
|
Non-regular file targets, such as FIFOs and directories, are skipped with a warning; links to
|
|
60
74
|
regular files remain readable. Inventory uses `ps --no-cleanup` to preserve even stale local
|
|
61
75
|
daemon state files. Ordinary `rig ps` keeps its existing cleanup behavior unless given that flag.
|
|
76
|
+
|
|
77
|
+
The daemon reuses model facts only while the selected record's identity, size and
|
|
78
|
+
modification time and the occupant generation remain unchanged. Inventory reads
|
|
79
|
+
share two bulk pane snapshots and one process census; identity is checked after
|
|
80
|
+
the final snapshot. A different observation from duplicate host routes makes
|
|
81
|
+
only that observation UNKNOWN, preserving agreed registry fields.
|
|
82
|
+
|
|
83
|
+
`rig ps --nodes --json` keeps an observed model compact as
|
|
84
|
+
`modelObservation: ["literal-model-id", "evidence-source", "native-record-time"]`.
|
|
85
|
+
UNKNOWN is `{ "status": "unknown", "reason": "..." }`; older daemons may yield
|
|
86
|
+
`null`. `--full` and `--fields modelObservation` retain the full object, including
|
|
87
|
+
its status and occupant generation. Human output and roster reports use the full
|
|
88
|
+
labelled observation.
|