Practical Linux, Windows Server and cloud guides for IT pros.

How to Install OpenRig on Ubuntu and Use It for Website Development

OpenRig gives coding agents a shared way to organize work. A developer can assign a task to one agent, have another review the implementation, and keep the team running in separate terminal sessions on a Linux server. This is useful when a website change needs more than a single coding conversation: requirements, implementation, verification, and…

Filed under

Published

Written by

Last updated

Ubuntu logo sticker on a laptop

OpenRig gives coding agents a shared way to organize work. A developer can assign a task to one agent, have another review the implementation, and keep the team running in separate terminal sessions on a Linux server. This is useful when a website change needs more than a single coding conversation: requirements, implementation, verification, and a clear handoff all need attention.

This tutorial explains how to install OpenRig on Ubuntu, connect it to Codex, configure a two-agent team, and use that team to make a small website improvement. The example follows a normal Git workflow, with a feature branch, reviewable changes, and a release decision made by the developer.

The commands target Ubuntu Server 24.04 LTS, Node.js 22, and OpenRig 0.7.10. OpenRig released version 0.7.10 on 8 November 2026. When following the article with another release, check its documentation and the installed command’s --help output before reusing the configuration. GitHub

What OpenRig does

OpenRig runs and coordinates coding agents through tools such as Codex and Claude Code. Its command-line interface is called rig. A background daemon keeps coordination state, while tmux hosts the agents’ terminal sessions. A project team is a rig; an addressable agent role is a seat. GitHub

This tutorial’s configuration creates two seats. The builder implements the agreed change. The reviewer inspects the requirements, code, and verification evidence. Both work in one development checkout, with the builder responsible for implementation edits.

Software development still follows a familiar sequence: define the requirement, plan the change, implement it, test it, review it,t and release it. OpenRig helps coordinate the agents involved. The developer remains responsible for accepting the result and deciding what reaches production.

Prerequisites

Use a development server or virtual machine with SSH access and an administrative account for installing packages. The agents will run under a separate, unprivileged account.

ComponentStarting point for this tutorial
Operating systemUbuntu Server 24.04 LTS
Node.jsVersion 22
Terminal multiplexertmux 3.4 or later
Coding providerCodex CLI with a working account and available model
ProjectAn existing website repository or a disposable copy of one
Suggested capacityFour CPU cores, 8–16 GB RAM and enough disk for dependencies and builds

The capacity figures are practical suggestions, not published OpenRig minimums. Larger application builds and browser tests may need more memory. Cloud model inference doesn’t require a local GPU, but it still consumes provider usage and may send supplied code context to that provider.

OpenRig documents Node.js 22 or 24 as supported versions. Its setup reference also warns about a crash in tmux 3.2a on Ubuntu 22.04 and recommends tmux 3.4 or later. Check the installed version even when using an existing server. GitHub

Step 1: Prepare the Ubuntu development account

From the administrative account, install the supporting tools:

sudo apt update

sudo apt install -y \
  ca-certificates curl git tmux jq ripgrep \
  build-essential python3 pkg-config openssh-client bubblewrap

The package list includes bubblewrapwhich OpenAI recommends installing for Codex sandboxing on Linux. The troubleshooting section covers the additional AppArmor profile that Ubuntu 24.04 may need. learn.chatgpt.com

Keep the host patched through its normal maintenance process. Complete any required reboot before starting agent work.

Create a dedicated account:

sudo adduser --disabled-password --gecos "" rigdev
sudo chmod 700 /home/rigdev

sudo install -d -m 700 \
  -o rigdev -g rigdev \
  /home/rigdev/.ssh

sudoedit /home/rigdev/.ssh/authorized_keys

sudo chown rigdev:rigdev /home/rigdev/.ssh/authorized_keys
sudo chmod 600 /home/rigdev/.ssh/authorized_keys

Paste your laptop’s SSH public key into authorized_keys. Keep the private key on the laptop. The development account does not need sudo or Docker-group membership for the steps below.

Note: If you have any issues with your Local SSH key, remember you need to create an SSH key (Windows or Linux) and add the PUBLIC KEY to /home/rigdev/.ssh/authorized_keys

Test a separate connection before closing the administrative session:

ssh rigdev@YOUR_DEV_SERVER

Replace YOUR_DEV_SERVER with the server’s actual hostname or IP address.

Run the remaining server commands as rigdev, unless a step explicitly says otherwise.

Step 2: Install Node.js 22

Using nvm installs Node under the development account and avoids running global npm installation commands with sudo. The upstream installer currently uses nvm 0.41.0. github.com

touch ~/.bashrc

curl -fsSLo "$HOME/nvm-install.sh" \
  https://raw.githubusercontent.com/nvm-sh/nvm/v0.41.0/install.sh

less "$HOME/nvm-install.sh"
bash "$HOME/nvm-install.sh"

export NVM_DIR="$HOME/.nvm"
. "$NVM_DIR/nvm.sh"

nvm install 22
nvm alias default 22
nvm use 22

node --version
npm --version
tmux -V

Confirm that Node reports a version beginning with v22 and that tmux is suitable. If the account deliberately usesXDG_CONFIG_HOME, follow the location reported by the nvm installer rather than assuming.~/.nvm.

Open another SSH session and check that the tools remain on the path. Resolve shell startup problems before continuing; an installation that works only in the original terminal will cause problems when agents start in new sessions.

Step 3: Install and authenticate Codex

This example uses Codex for both agents, so it needs one coding-provider setup. Install the CLI and start device authentication:

npm install -g @openai/codex

codex --version
codex login --device-auth
codex login status

Open the URL Codex prints in a browser on your laptop and enter the one-time code. You may need to enable device authentication in the account’s security settings or workspace permissions. OpenAI documents this route for headless environments. github.com

If device authentication is unavailable, connect with a forwarded browser callback port:

ssh -L 1455:localhost:1455 rigdev@YOUR_DEV_SERVER

Run codex login inside that SSH session and open the printed URL in your local browser. learn.chatgpt.com

Check the native CLI before adding orchestration. Create an empty directory, launch. Confirm the selected model is available, then ask it to report the working directory. Exit after that check. Record the Codex version and model, so later troubleshooting has a useful baseline.

Authentication files belong in the provider’s protected configuration directory. Keep them outside the website repository. If you use API-key authentication, check its billing and usage limits separately.

Step 4: Install OpenRig

Install the release used by this tutorial:

npm install -g @openrig/[email protected]

rig --version

node "$(npm root -g)/@openrig/cli/scripts/check-abi.mjs"

The final command checks the installed Node and native SQLite combination. Resolve a failure before launching agents. After changing Node major versions, reinstall OpenRig under the selected version and repeat the check.

On a reused account, back up existing tmux and coding-provider configuration first. OpenRig setup and agent launch can write managed settings, hooks, workspace trust,t and guidance. Preserve repository instructions when these managed sections are added. GitHub

Preview the setup changes:

rig setup \
  --providers codex \
  --no-herdr \
  --router-line no \
  --dry-run

Apply them after reading the preview:

rig setup \
  --providers codex \
  --no-herdr \
  --router-line no

rig doctor

The flags have specific purposes:

  • --providers codex Selects the provider used here.
  • --no-herdr Keeps the interface on SSH and tmux.
  • --router-line no Declines an additional skills-router line; other setup configuration changes still apply. GitHub

Verify command discovery in a fresh SSH session:

command -v node npm codex rig tmux
bash -lc 'command -v node rig'

Step 5: Start OpenRig

Now that OpenRig and Codex are installed, start the OpenRig daemon:

rig daemon start --host 127.0.0.1 --port 7433

Check its status:

rig status
rig ps --nodes --rig kernel

OpenRig starts its built-in kernel, which includes an operator agent. The operator helps create and manage project teams.

If you previously started the daemon with --no-kernel and have no running project teams, stop it and start it again without that option:

rig daemon stop
rig daemon start --host 127.0.0.1 --port 7433

The kernel starts with broader permissions than ordinary project agents. For this tutorial, use the dedicated rigdev account and a disposable project directory. Review the operator’s proposed commands and permissions before approving changes.

Once the kernel agents are ready, continue to the practical exercise.


Step 6: Create Your First Website Project

Instead of connecting OpenRig to an existing website, we’ll create one from scratch.

Our example will be a simple personal website with a homepage, navigation menu and a little CSS styling.

This gives us something real to work on without needing hosting, a domain name or a database.

6.1 Create the project directory

Connect to your Ubuntu server as rigdev and run:

mkdir -p ~/projects/my-first-website
cd ~/projects/my-first-website

This creates a directory for our website.

6.2 Create the homepage

Create an index.html file:

nano index.html

Paste the following HTML:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, initial-scale=1.0">
  <title>My First Website</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <header>
    <h1>My First Website</h1>
    <nav aria-label="Main navigation">
      <a href="#about">About</a>
      <a href="#contact">Contact</a>
    </nav>
  </header>

  <main id="main-content">
    <section id="about">
      <h2>About Me</h2>
      <p>
        Welcome to my website!
        I'm learning how to develop websites
        using OpenRig and AI coding agents.
      </p>
    </section>

    <section id="contact">
      <h2>Contact</h2>
      <p>More information coming soon.</p>
    </section>
  </main>

  <footer>
    <p>My First Website</p>
  </footer>
</body>
</html>

Save the file using Ctrl+O, press Enter, then exit nano using Ctrl+X.

6.3 Add some CSS

Create a stylesheet:

nano style.css

Paste:

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  font-family: Arial, sans-serif;
  line-height: 1.6;
  color: #222;
  background: #f4f6f8;
}

header {
  padding: 24px;
  background: #0077be;
  color: white;
  text-align: center;
}

nav a {
  display: inline-block;
  margin: 8px;
  padding: 4px;
  color: white;
}

main {
  max-width: 900px;
  margin: 30px auto;
  padding: 24px;
  background: white;
  border-radius: 8px;
}

section {
  margin-bottom: 30px;
}

footer {
  padding: 16px;
  text-align: center;
  background: #222;
  color: white;
}

Save and exit.

6.4 Check your website files

Run:

ls -lah

You should see:

index.html
style.css

That’s your first website!

There is no need to install WordPress, React, Next.js or any other framework for this exercise.

6.5 Create a local Git repository

Git allows us to track changes and undo mistakes. You don’t need a GitHub account to use it.

From the website directory, run:

git init -b main

Set a local identity for tutorial commits:

git config user.name "Tutorial Developer"
git config user.email "tutorial@localhost"

Add the two files and save the starting version:

git add index.html style.css
git commit -m "Create initial website"

Check the repository:

git status

You should see a clean working tree.

We’ve now created a baseline. Later, we’ll see precisely what OpenRig’s agents changed.


Step 7: View Your Website in a Browser

Before involving OpenRig, let’s confirm our website works.

7.1 Start a local web server

Ubuntu already has Python installed from the prerequisites earlier in this tutorial.

From your project directory, run:

python3 -m http.server 8000 --bind 127.0.0.1

Python starts a simple HTTP server on port 8000.

Leave that terminal running.

7.2 Connect from your computer

If Ubuntu is running on a remote server, open another terminal on your own computer and run:

ssh -N -L 8000:127.0.0.1:8000 rigdev@YOUR_SERVER_IP

Replace YOUR_SERVER_IP with your server’s address.

This creates an SSH tunnel, allowing your browser to connect to the website without exposing port 8000 publicly.

Open:

http://localhost:8000

You should see a simple blue header, a navigation menu, two sections and a footer.

Your starting website is now running.

If you’re working directly on the Ubuntu machine rather than using SSH, open that address in its local browser.


Step 8: Create Your First OpenRig Agent Team

Now comes the interesting part.

We’ll ask OpenRig to organise two coding agents to work on our website.

One agent will implement changes, and the other will review the work.

8.1 Connect to the OpenRig operator

Open another SSH terminal connected to your Ubuntu server.

Check the kernel agents:

rig ps --nodes --rig kernel

To find the operator’s terminal session, run:

rig ps --nodes --rig kernel --json \
  --fields logicalId,canonicalSessionName,tmuxAttachCommand

Find the entry identified as operator.agent.

It includes a tmuxAttachCommand value. Run that command in your SSH terminal to connect to the operator’s conversation.

If you are already inside tmux, detach or open a separate SSH connection before attaching to the operator.

8.2 Tell OpenRig about your website

Once you’re speaking to the operator, enter:

I’ve created a simple HTML and CSS website at /home/rigdev/projects/my-first-website.

I want to use OpenRig to improve it.

Please prepare a small starter team with one coding agent and one reviewer, using my existing Codex installation for both.

Show me the proposed team configuration and permissions before launching it.

Use normal workspace permissions with approval prompts where required. Do not enable unrestricted access or install another coding provider.

Keep all work within this tutorial project. Do not publish or deploy anything.

The operator should inspect the project and propose a suitable configuration.

Review its proposal before authorising the team to start. In particular, check which agents and models it plans to use, which directories they can modify and whether their permissions match your expectations.

OpenRig’s standard starter team may use different coding providers by default. The operator can adapt it to a single installed provider.

Once the team has started, check its status. If it is named starter, run:

Note: It may be easier to open another terminal

rig ps --nodes --rig starter

If the operator chose another name, use that name instead.

The team should contain an implementation agent and a review agent. Both must finish startup before we give them a development task.

Note: Since we didnt install HERDR, you will need to open the enviroments on new terminals logged into the rigdev@your_server_ip

For Example:

env -u TMUX '/usr/bin/tmux' attach -t 'dev-build@starter'
env -u TMUX '/usr/bin/tmux' attach -t 'dev-review@starter'

Top Top

If you hate having to give the agent permission to do anything everytime you can run this command to bypass permissions. USE WITH CAUTION – NEVER USE IN PRODUCTION

If you’re using the starter team, enable YOLO for its builder:

rig seat set-permissions dev-build@starter \
  --mode full_bypass \
  --reason "Isolated development environment" \
  --operator rigdev@local

And optionally its reviewer:

rig seat set-permissions dev-review@starter \
  --mode full_bypass \
  --reason "Isolated development environment" \
  --operator rigdev@local

Step 9: Give OpenRig Its First Development Task

Our basic website works, but it’s missing a useful accessibility feature.

We are going to ask the agents to add a Skip to main content link. This helps keyboard users bypass repeated navigation and reach the page’s main content.

It is a good first coding exercise because the change is small, easy to inspect and testable in a browser.

9.1 Describe the requirement

In the builder’s conversation, enter:

I want to improve the accessibility of our sample website.

Add a “Skip to main content” link that becomes visible when a keyboard user focuses on it.

It should allow users to bypass the header navigation and reach the main content.

First, inspect the existing HTML and CSS and explain what needs to change.

Implement the improvement using ordinary HTML and CSS. Avoid JavaScript and additional dependencies unless they’re genuinely necessary.

Ask the reviewer to check your changes.

Do not commit or deploy anything until I approve it.

This is an example of a small development requirement.

The builder should inspect the existing code and propose a change to the HTML, CSS or both.

9.2 Review the proposed changes

OpenRig can coordinate the implementation and review through its agents.

The reviewer should examine whether:

  • The new link is keyboard-accessible.
  • The link becomes clearly visible when focused.
  • The destination points to the correct main-content element.
  • Keyboard focus behaves correctly after activating the link.
  • Existing navigation continues working.
  • The change introduces no unnecessary dependencies.

The reviewer may identify problems and request corrections.

Let the agents finish their work before testing the result yourself.

9.3 Inspect the code changes

From another SSH terminal, navigate to the project:

cd ~/projects/my-first-website

Run:

git status --short
git diff

Git displays the changes made since the original commit.

You should expect a small number of changes related to the accessibility feature.

Check for any unrelated modifications. If the agents changed files beyond the agreed task, ask them to explain those changes.


Step 10: Test the Updated Website

Return to your browser:

http://localhost:8000

Refresh the page.

Because we’re using a simple Python web server, there is no compilation or application rebuild required. The server reads the updated HTML and CSS files.

10.1 Test the improvement

Use the keyboard to test the new feature:

  1. Reload the page and start keyboard navigation using Tab.
  2. Confirm the skip link becomes visible when focused.
  3. Press Enter to activate the link.
  4. Confirm focus reaches the main content and the next Tab press follows the expected content order.
  5. Verify that the About and Contact links still work.
  6. Check the page at a narrow browser width.

A successful visual change is only part of the verification. The keyboard interaction must work as intended.

10.2 Review the results

You can ask the builder:

Summarise the changes made to the website.

Explain how the new skip link works, what the reviewer found and which checks were actually completed.

Identify anything that remains untested.

Do not make any further changes.

The response should make clear which checks the agents performed and which checks you performed manually.

This is the verification stage of our development exercise.


Step 11: Save Your First Completed Change

If you’re happy with the updated website, record the improvement using Git.

From the project directory:

git status
git diff --check
git diff

Review the changed files.

When everything is satisfactory, stage only the intended files:

git add index.html style.css
git diff --cached

Commit the change:

git commit -m "Add accessible skip navigation"

You now have two local versions of the website:

  • The original HTML and CSS website.
  • The updated website containing the accessibility improvement.

View the history:

git log --oneline

You haven’t needed GitHub, a domain name or a production server.

The entire exercise was completed on your Ubuntu development machine.


Step 12: Stop or Continue Your OpenRig Team

When you’ve finished the exercise, you can inspect the running agents:

rig status
rig ps --nodes

To stop the project team, use its actual name. For example:

rig down starter

You can keep the OpenRig daemon and kernel running if you intend to continue experimenting.

To shut everything down, stop the remaining kernel team and daemon after saving your work:

rig down kernel
rig daemon stop

Remember that stopping the daemon alone does not necessarily stop existing agent terminal sessions.

Stop the Python web server by returning to its terminal and pressing Ctrl+C.

What have we achieved?

In this tutorial, you’ve:

  1. Installed OpenRig and connected a coding provider.
  2. Created a website from scratch using HTML and CSS.
  3. Previewed the website through a local HTTP server.
  4. Created a development team using OpenRig.
  5. Given the team a real coding requirement.
  6. Had another agent review the implementation.
  7. Tested the result in your browser.
  8. Saved the approved change using local Git.

This is a small example of a software development lifecycle, covering requirements, implementation, review, testing and version control.

Where to go next

With the basic workflow established, you can try more substantial tasks.

For example, ask the agents to make the layout responsive, introduce a mobile navigation menu, improve colour contrast or create a second page.

As the project grows, you can add automated tests, connect a remote Git repository and introduce a formal release process.

The important starting point is to keep each task small enough to inspect and verify. OpenRig provides coordination between the coding agents, while you retain control over the requirements and the finished code.

Did this solve it?

Leave a Reply

Your email address will not be published. Required fields are marked *

Find more on the site

Keep reading by topic.

If this post was useful, the fastest way to keep going is to pick the topic you work in most often.

Want another useful post?

Browse the latest posts, or support TurboGeek if the site saves you time regularly.