OpenRig

Run OpenRig across machines

Feed it ideas. Keep the work moving across machines.

You’re building your dream SaaS app. Your laptop is where you talk through ideas. An always-on team at home builds them. A dogfood rig on a VPS keeps using the app, looking for weird errors and security vulnerabilities, and turning what it finds into work for the build team.

OpenRig connects those teams. Your laptop can come and go while the home team keeps the project, the progress and the next action.

Three machines, different jobs

Machine What belongs there
Your laptop Your personal coordinator: ideas, planning and checking back in.
A Mac mini or home VM The continuing project owner and build team. Keep the machine hosting the VM on too.
A small always-on Linux VPS Your dogfood machine: agents repeatedly use the app and investigate what breaks.

This is one useful arrangement, not a required three-machine setup. Each machine runs its own OpenRig, with its own rigs and agents. In this example, all three connect through Tailscale.

From an idea to a better app

You ask for an easier invitation flow, then take your laptop away. The home team builds it. Dogfood finds an error when someone repeats an invitation, so it sends the finding back as a tracked task. The home owner opens a repair slice, fixes the problem and returns the revision for another check.

The result goes back to the home owner. When your laptop reconnects, your coordinator asks what changed and brings you the answer. You supply the ideas; the agents carry the work between machines.

Before you pair

This guide uses the commands in OpenRig 0.5.17 on macOS and Linux. Start with your first team if you haven’t run OpenRig yet.

Each machine needs OpenRig installed, its agents able to sign in to their harnesses, and access to the project files it will use. Pairing does not install those pieces for you.

Use a network you trust

OpenRig is not a security product, and cross-machine use isn’t built as a zero-trust system. It connects your own machines over a network you already trust.

We recommend Tailscale: it’s what Mike uses and has tested this setup on. Another trusted private network can work too, provided the machines can reach each other.

Never expose the OpenRig daemon to the public internet. Bind it to your private-network address. Pairing provides a token for calls between machines; treat your trusted network as the protection, rather than assuming the token makes the daemon safe to expose.

Pair the machines

For the story above, connect Laptop ↔ Home and Home ↔ Dogfood. Pair both directions so each team can send work and replies back. The laptop doesn’t need a direct connection to Dogfood.

The target daemon normally listens only on 127.0.0.1. For pairing, it needs to listen on an address the other machine can reach through your private network. When starting the target daemon, the command is:

Commands and reference
# On the home machine. Replace the placeholder with its private address.
rig daemon start --host <home-private-address> --port 7433

If the daemon is already running, check its current configuration and rig daemon --help before changing it; repeating a start command is not a substitute for configuring the running service. Keep existing agents and work in mind when arranging a restart.

From the laptop, pair with that private address:

# On the laptop
rig host pair http://<home-private-address>:7433 --id home

Replace the angle-bracketed address; don’t type it literally. home is the name this machine will use to route to the other host.

Pairing waits for an approval on the target machine. Use a target with a registered human approval recipient. The command prints the approval item and the exact command to run there:

# On the home machine, using the approval ID printed by pair
rig queue update <approval-qitem-id> --state done --closure-reason no-follow-on

Once approved, the laptop records the host and its token. If the target has several registered human recipients, supply the appropriate address with --human on the pair command.

Check the registration and connection:

rig host list
rig host doctor
rig ps --host home --nodes

Then pair the return route from Home to Laptop, using the laptop’s reachable private address and --id laptop. Repeat between Home and Dogfood: Home calls its VPS host dogfood, and the VPS calls its home host home. Each target needs its own approval. Host names are local registry names, so use them consistently in each machine’s commands.

You can also register SSH or HTTP hosts manually with rig host add. They have different prerequisites and command coverage; OpenRig does not silently switch from one transport to the other. Use rig host add --help for that alternative.

Send work across

Once the hosts are registered, an agent can find a teammate and send a message without asking you to carry it between terminals:

Commands and reference
# On the laptop
rig ps --host home --nodes
rig send owner@project "What changed while I was away?" --host home
rig capture owner@project --host home

Use the real seat address from rig ps. The host chooses the machine; the seat address chooses the agent. capture reads that agent’s terminal screen. It does not copy the agent’s memory or conversation into yours.

For work that needs an owner, create a queue task on the destination host:

# On the home machine, as the project owner
rig queue create --host dogfood --destination dogfood@testing \
  --id invitation-check \
  --summary "Dogfood the new invitation flow" \
  --body "Use the invitation revision in your project checkout. Try awkward cases and return findings to owner@project on home."

Choose a fresh task ID for your own work. The destination agent reads and claims the task on its own machine:

# On the dogfood VPS, as dogfood@testing
rig queue show invitation-check --full
rig queue claim invitation-check

In 0.5.17, queue create accepts --host. Queue show, claim, list and handoff run on the machine that holds the task. Queue writes do not follow rig host select; selecting a remote host is not enough to move an assignment there.

Turn findings into fixes

The dogfood rig should return something the build team can act on: what it tried, what happened, which revision it used and how to reproduce the problem. Send that as a task to the home owner:

Commands and reference
# On the dogfood VPS
rig queue create --host home --destination owner@project \
  --id repeat-invite-fix \
  --summary "Fix the repeated-invitation error" \
  --body "On the invitation revision, invite the same address twice. The second attempt shows an error. Handle this case and return the new revision to dogfood@testing."

The home owner reads and claims that local task, then organizes the repair in the project’s existing mission:

# On the home machine, in the project workspace
rig queue show repeat-invite-fix --full
rig queue claim repeat-invite-fix
rig scope slice create dream-saas repeat-invite \
  --template bug-fix \
  --title "Handle repeated invitations" \
  --intent "Make repeated invitations behave usefully instead of returning an error."

Here dream-saas is an existing mission in the example project. Substitute your own mission. The slice is created on Home, where the project lives; the finding crossed the network as a task. Pairing did not synchronize a mission directory.

After the build team makes the fix, it makes the new revision available through the project’s normal source-sharing process and asks Dogfood to recheck. Dogfood reports back to the home owner, which records the outcome and the next action:

# On Home, after receiving the dogfood result
rig queue update repeat-invite-fix \
  --note "The repaired revision passed the repeated-invitation check; dogfood is continuing through the next flow."

A note records progress; it doesn’t change the task’s state. The home owner still decides whether more work remains. Keep the project assignment, the dogfood task and the repair task distinct.

Keep the loop useful while you’re away

Give the dogfood team a scope, a useful place to report findings, and a next action after each result. Its job is to keep using the application and investigating problems; the home team turns the findings into owned changes and returns revisions for another check.

Always-on machines give the agents somewhere to run. They still need a continuation when work waits or a turn ends. Use the existing park and wake guidance to arrange that deliberately. Pairing itself is not a scheduler.

The home owner retains progress while the laptop is away. When the laptop reconnects, its coordinator can ask for that progress. The overnight loop does not depend on a message reaching a sleeping laptop.

Keep files and access explicit

Cross-machine OpenRig supports messages, screen reads and queue tasks. It does not synchronize repositories, files, credentials, harness logins or agent context.

Each team needs the right checkout and access. Include the revision and the location of useful project information in its task. Use your normal repository or artifact-sharing process to deliver changes between machines.

If a connection needs attention

Start with rig host list and rig host doctor, then check the private address, port and transport. Check the return registration too if a request arrives but its reply cannot get back.

A delivered message is not a claimed task. Read the destination’s queue on that machine when you need to know who has picked up work. Over HTTP, rig send --verify cannot inspect the remote screen. If a cross-host write times out, check whether it landed before repeating it.

Get help, or give the troubleshooting guide to your agent. For the underlying commands, see the 0.5.17 cross-host skill.