OpenRig

Other machines, and people

Documented against OpenRig 0.5.14. Help text uses "node" where these pages say seat, for a seat's position in the running rig.

What it is for

The world does not end at this machine. Other instances run on other machines and are reached through a declared registry, not a guessed hostname. rig host manages that registry, rig file copy moves one file between hosts without hand-rolling the address, and many verbs take --host <id> to act on a registered machine. People are addressed the same way as seats: rig gateway human registers a person and their connector, and a queue row created with that person's external address is the durable way to ask them for a decision. rig slack is one connector implementation.

The three commands you will use first

Register a machine and check it works end to end.

rig host add --id vps-b --transport ssh --target vps-b.example.net --user ops
rig host list
rig host doctor

Act on it. The same verbs, with --host.

rig capture --host vps-b dev-impl@my-rig --lines 50
rig transcript --host vps-b dev-impl@my-rig --tail 100
rig file copy ./brief.md vps-b:/home/ops/brief.md --dry-run

Reach a person durably. Register the human, check readiness, then create a row to their external address; the row's transitions are the receipt.

rig gateway human add sam --display "Sam, product owner"
rig gateway human list
rig queue create --destination sam@external --body-file decision.md --verify

Slack as a connector

rig slack setup records the channel, the inbound destination seat and the notification levels; secrets stay in a 0600 env file, never in config. status says whether it is configured and resolvable without touching the network; verify live-checks granted scopes and channel membership; enable and disable switch the daemon's delivery path. Notification levels are RECORD, NOTICE and ALERT, and the posting and interrupting thresholds are set separately.

rig slack setup --channel C0123 --inbound-destination direction-lead@my-rig --secrets-env-file ~/.openrig/slack.env
rig slack status
rig slack verify
rig slack enable

The host, file, gateway and slack families

Command What it does (from help) Help source
rig file Cross-host file movement over ssh/rsync (v0: one explicit verb , copy) file.txt
rig file copy Copy one file. <hostId>:<absolute-path> = remote (ssh registry entry); bare path = local; local files with a colon need the ./ prefix. Valid shapes: local→remote, remote→local, local→local. An existing destination is OVERWRITTEN , preview with --dry-run. file.copy.txt
rig gateway Gateway: the human registry + connector surfaces gateway.txt
rig gateway human Manage human specs (file-per-human fragments under gateway/humans/) gateway.human.txt
rig gateway human add Add a human fragment (verb-add-only; the fragment is truth, the registry is a GENERATED projection) gateway.human.add.txt
rig gateway human list Show the configured human (single-human surface per A1/R5; several fragments render honestly with a 0.5.7 advisory) gateway.human.list.txt
rig gateway human remove Remove a human: refuses while open conversations or non-terminal rows exist (--force archives and records what was orphaned; the fragment is archived, never deleted) gateway.human.remove.txt
rig gateway human set Edit one field through the verb (same validation as add; re-projection immediate). Fields: display-name, delivery-class, away, binding.<n> gateway.human.set.txt
rig gateway human show Show the effective record: fragment values + which defaults filled the rest, with provenance gateway.human.show.txt
rig host Manage the multi-host registry (~/.openrig/hosts.yaml) host.txt
rig host add Add a host entry (validated with the registry loader's own rules) host.add.txt
rig host doctor Stepwise host verification (+ --posture for the product-factory-vps baseline) host.doctor.txt
rig host list List registered hosts w/ status + selected marker (config pointers only , never secret values) host.list.txt
rig host pair Pair with a remote host from one pasted address , one approval on the target, done (FR-6) host.pair.txt
rig host rename Rename THIS host's display name (renders in dashboard, explorer, ls, whoami) host.rename.txt
rig host select Select which host you are viewing/acting on (persisted; 'local' returns to this host) host.select.txt
rig slack Slack connector: configuration + in-daemon subsystem admin (S10) slack.txt
rig slack disable Disable the connector (the daemon rewires to an inert delivery path) slack.disable.txt
rig slack enable Enable the connector (daemon seeds the current backlog as history , no replay storm , then rewires) slack.enable.txt
rig slack inbound [RETIRED , S10] the in-daemon subsystem owns Socket Mode inbound slack.inbound.txt
rig slack outbound [RETIRED , S10] the in-daemon subsystem owns outbound delivery slack.outbound.txt
rig slack setup Configure the connector (first-class config; secrets stay in the env file, never here) slack.setup.txt
rig slack status Show the connector's configured + resolvable state (honest; no network) slack.status.txt
rig slack verify Live-verify GRANTED Slack scopes (from response headers) + channel membership slack.verify.txt

What it does not do

  • Across a host boundary, "it didn't work" has four shapes: unreachable machine, permission gate, remote runtime down, or the remote command itself failed. A successful transport says nothing about the operation.
  • Transports differ by host: an ssh entry carries send and capture; an http entry carries lifecycle verbs; the registry entry says which.
  • Registering a human or configuring a connector does not send anything. A posted receipt proves posting, not that anyone read it.
  • rig file copy overwrites an existing destination; preview with --dry-run.

Where it goes next

  • Messaging: the seat-to-seat channel that --host extends.
  • Coordination: the queue row that carries a human request and its receipt.