YOUR FIRST TEAM / A WORKED EXAMPLE
From your first pair to a team of your own
My OpenRig setup in the AI civilizations video has a heavily customized config layer. The public product is much leaner by design, but advanced configs can be shared easily. A good way to start is two agents with the Software Factory recipe and then grow it from there. The guide has the steps and workarounds.
You give the goal. Your agents organize the work. The simulations follow one illustrative project; expand “Try this with your team” for the commands behind each example. The later commands show what the agents do, not a checklist you have to run in every terminal.
Already have the pair running? Start with the first example.
Launch your first team
Find your first task
Pick one small change you can try yourself. A dark-mode toggle in an existing web app is one example. Choose something equally small in your own repository.
The first result you're looking for is a change made by one agent and checked by another. The shipped first-project starter gives you that pair. The examples below build on that first change.
Start here Choose a repository and write down the outcome in one sentence. If you're still getting a feel for the idea, see how a team coordinates in the illustrative tour.
Ready to launch
You'll need Node, tmux and a logged-in Codex CLI for this starter. On Apple Silicon, use Node 22. OpenRig supports Claude Code too; this particular starter uses two Codex agents.
Install the version this guide covers, then inspect the setup plan. These commands go in your own terminal.
npm install -g @openrig/cli@0.5.17
rig setup --dry-run
tmux -V
codex --version
codex login status
Install any missing prerequisites and complete codex login if needed. Choose the access you want your agents to have before launching. You can start with prompts and approve intended operations as they come up. The getting-started guide explains setup and permission choices.
In your terminal, change into the repository you chose. Then preview and launch the team there.
rig up first-project --cwd . --plan
rig up first-project --cwd .
rig ps --nodes --rig first-project
You're ready when Both project seats report ready. Resolve any named login or trust prompt before sending work.
Meet your team
dev-owner owns the outcome. dev-check independently checks the change. They're separate coding agents with their own working context, and they can talk directly to each other.
A seat is a named position on the team. Its address and work record can outlast the conversation occupying it. That gives you someone to come back to with the next piece of work, rather than starting the whole coordination process again.
Open the team view with rig tui. Your first message goes to dev-owner@first-project. You don't need to relay its conversation with the checker.
Look for Two named seats with different jobs, both working in the repository you selected.
Start with the pair
Tell the owner what you want to happen. It handles the independent check and returns a result you can try. You stay in one conversation while the two agents work together.
Try this with your team
To ask for a change, type into the owner’s conversation or send it from your terminal:
rig send dev-owner@first-project 'Add dark mode to this app.'
Set the working agreement once: which repository they're changing, what access they have, and what should wait for you. In this walkthrough, changes stay local and publication is outside the task. You don't need to repeat the internal review steps in every request.
Let the agents talk
From its own terminal, the owner asks the checker:
rig send dev-check@first-project 'Please try dark mode across the app and send findings directly to me.'
The checker sees who sent the message and who it is addressed to:
From: dev-owner@first-project
To: dev-check@first-project
Please try dark mode across the app and send findings directly to me.
The checker replies to dev-owner@first-project with its findings. The owner handles any repair and comes back with a result you can try. You aren't copying messages between their terminals, and you don't have to ask the checker for its answer yourself.
Add the roles the work needs
When the work gets more ambitious, an OpenRig agent can look up the starter Software Factory recipe to learn to scale your rig into a larger team. You provide your intent, the agent uses rig grow to add the necessary agents to do it.
In the example, the agent is called "owner" because it owns the outcome. You can name them whatever you want.
Try this with your team
The owner can use the Software Factory recipe to organize that effort. The recipe is guidance your agent loads, not a separate service or a team that starts automatically:
rig context get skills/core/openrig-software-factory/SKILL.md
It helps the owner choose a useful division of work. Here, the owner takes coordination, a new builder implements, the existing checker keeps QA, and a new reviewer examines the code independently. Agree the added capacity and model cost before growing the team.
| Seat | Responsibility now |
|---|---|
dev-owner@first-project |
Plan and coordinate. Own integration and bring decisions back to you. |
dev-builder@first-project |
Build the assigned slice against its spec. |
dev-check@first-project |
Keep the earlier testing knowledge and check the new user paths. |
dev-review@first-project |
Review the implementation independently from QA. |
The owner inspects the running team:
rig ps --json
rig ps --nodes --rig first-project --json
It sets RIG_ID to the team's rigId from that output and PROJECT_ROOT to your repository's absolute path. These are shell variables the owner sets. With unused member names builder and review in the existing dev pod, it runs:
rig grow "$RIG_ID" builder review \
--pod dev --runtime codex --cwd "$PROJECT_ROOT"
rig ps --nodes --rig first-project --json
This is the expanded version of the rig grow operation in the demo, with the repository and runtime selected explicitly. It adds seats to the running rig. It doesn't copy the owner's conversation into them or give them a job just because they're named builder and review.
The owner sends each new colleague its responsibility and relevant project sources, then gets a response before assigning work. The checker stays on the team with the knowledge it has already built up.
To watch the four seats together:
rig terminal status
rig terminal open first-project
Open the view after the new seats are ready, then use your terminal provider's split controls for a two-by-two arrangement. rig grow changes the team; the terminal view is how you look at it. rig terminal open has no layout flag.
Turn the request into a plan
A team needs a shared workspace in the file system and a simple way to track the work. In OpenRig, a mission holds the goal, slices are the tasks, and the queue gives work an owner. Here the coordinator organizes the first useful piece without asking the human to manage the task list.
Try this with your team
The coordinator creates the mission and first slice in the selected project:
mkdir -p "$PROJECT_ROOT/missions"
rig scope --workspace "$PROJECT_ROOT" mission create custom-themes \
--intent 'Let users create, share and sync custom themes.'
rig scope --workspace "$PROJECT_ROOT" slice create custom-themes theme-editor \
--intent 'Create and save a custom theme.'
These are the same scaffold operations shown in the demo, with an explicit project path. Creating missions/ first is the workaround for the current first-mission path issue. Inspect the paths returned by the commands, then write the first slice's SPEC.md. The scaffold creates a place for the plan; the agent supplies its meaning.
A short spec can make the boundary clear:
Intent: create and save themes.
Out of this slice: sharing and sync.
The coordinator adds the project-specific details and how the result will be checked. It then writes TASK-BUILDER.md under the project's .openrig/factory/ directory, including the actual slice path, the builder's file or worktree boundary and the next check.
rig queue create --id theme-001 --destination dev-builder@first-project \
--body-file "$PROJECT_ROOT/.openrig/factory/TASK-BUILDER.md" \
--summary 'Build the theme-editor slice from its spec'
theme-001 is the example ID used in the demo. Choose an unused ID for your own work. The builder receives the queue notification, then reads and claims the assignment in its own seat:
rig queue show theme-001 --full
rig queue claim theme-001
Give each specialist useful context
A new OpenRig agent can ask an existing agent about the stuff its worked on, instead of guessing from a search. Here the builder asks the original checker what its earlier testing uncovered. A short rig send exchange saves the builder from repeating that investigation.
Try this with your team
From the builder's own terminal:
rig send dev-check@first-project 'What did your earlier testing uncover that needs special attention?'
The checker answers directly to the builder:
From: dev-check@first-project
To: dev-builder@first-project
Settings was the exception. It needed separate testing and a fix;
the other screens followed the shared theme.
Use the reply in the work and in what the builder returns for QA. Ask the relevant colleague from your own seat; you don't need a new queue item for a question.
Keep what the team learns
The builder needs the slice spec and code. The reviewer needs the candidate and the project's conventions. The coordinator needs enough of the whole picture to decide what happens next.
Keep shared decisions in project files as well as in the conversations. Those files give agents something to recover from when a session changes. As the sources grow, rig context get world-example gives your agent a starting template for a project context pack. This is part of building your own configuration layer around the lean core.
Give the work an owner
Use rig queue handoff when the next agent needs to own the next step. Here implementation passes to QA, while a separately assigned reviewer examines the code. Trying the feature and reviewing its implementation contribute different answers.
Try this with your team
The builder has reached the end of its implementation task. QA now needs to own the next step, so the builder uses a handoff, with a request that identifies the candidate, its spec and the case the checker called out:
rig queue handoff theme-001 --to dev-check@first-project \
--body-file "$PROJECT_ROOT/.openrig/factory/REVIEW-REQUEST.md"
The builder writes that request file before handing off. The handoff returns a successor task for QA. In the demo it is shown as theme-qa; in your project, use the actual returned ID. QA reads and claims that successor in its own terminal:
rig queue show <qa-id> --full
rig queue claim <qa-id>
QA tries the user paths against the spec. Alongside that, the coordinator assigns code review to the other specialist:
rig queue create --id theme-review --destination dev-review@first-project \
--body-file "$PROJECT_ROOT/.openrig/factory/CODE-REVIEW-REQUEST.md" \
--summary 'Review the theme-editor implementation against its spec'
The coordinator writes the code-review request against the same candidate. As with theme-001, choose an unused ID for your project. The reviewer reads and claims it:
rig queue show theme-review --full
rig queue claim theme-review
These are two different questions. QA asks whether the result does what the spec requires. The reviewer examines how the implementation fits the codebase. Both return their findings to the coordinator and record their results on the work. If something needs repair, it goes back to the builder and the affected check runs again.
Arrange what happens when work waits
Your OpenRig team can keep working while you’re away. When a task must wait, its owner records why, where to resume and when to wake. The wake brings the agent back to check the blocker and continue.
Try this with your team
You can ask the coordinator:
I’m going to bed. Can you keep working on this while I’m away?
An agent works during its active turn. When that turn ends, it is idle: it isn't thinking in the background. A new message or wake can bring its attention back to unfinished work.
In the demo, the coordinator writes qa-wake.yaml:
policy: periodic-reminder
target: {session: dev-check@first-project}
message: >-
Check your queue. Continue unfinished work
or hand it to its next owner.
It registers the reminder from the directory containing that file:
rig watchdog register --spec qa-wake.yaml \
--policy periodic-reminder \
--target-session dev-check@first-project \
--interval-seconds 1800 \
--registered-by dev-owner@first-project
This sends the configured message every 30 minutes. The timer doesn't detect idle agents or unfinished work; QA checks its queue after receiving the reminder. It reads its owned task and resumes from the recorded state. Use the returned QA task ID in your project:
rig queue show <qa-id> --full
Choose an interval that fits the work and agreed spending limits. Stop the recurring reminder when it is no longer useful, using the job ID returned by registration:
rig watchdog stop <job-id> --reason "Overnight work finished"
When work has a specific blocker
If the builder is waiting on another queue item, it can park its own work on that dependency. From the seat that owns the waiting task:
rig queue block <owned-id> --on <blocker-id> \
--continuation 'Read the dependency result, then resume this slice.'
Replace both placeholders with actual queue IDs. When that local dependency resolves, OpenRig can return the waiting work to its owner. For an external wait, name the blocker and arrange a reminder when one is useful:
rig queue block <owned-id> --on external:preview-environment \
--wake-after 2h \
--continuation 'Check whether the preview environment is available; resume QA if it is.'
That is an example of a real wait, not a timer to add to every task. The continuation tells the returning agent what to do. A wake brings its attention back; it doesn't resolve the dependency or answer a permission prompt.
Agree the work and spending limits before leaving the team running. Agents can keep working overnight or while you're away, and reach out when they need a decision. Delivered wakes can spend tokens, so prefer a dependency resolving over repeated reminders with nothing new to act on.
Ask for the result, not a terminal tour
You shouldn’t need to inspect every terminal to find out where your team got to. Ask the OpenRig coordinator. It combines tracked work with the specialists’ results and tells you what you can use and what happens next.
Try this with your team
The coordinator reads the QA successor and the separately assigned review before summarizing. Replace <qa-id> with the actual successor ID, and use your project's review ID:
rig queue show <qa-id> --full
rig queue show theme-review --full
Rough edges and ways around them
None of these needs to block the lesson. They're annoying setup details your agents can help fix.
- Installing on an Apple Silicon Mac Use Node 22. The 0.5.17 release notes call out SQLite install trouble with Node 24.
- You use Claude Code The commands above launch a Codex pair. Ask your agent to inspect the shipped starters with
rig specs ls --kind rigandrig specs preview <name>, or help adapt a team for your Claude setup. Replace<name>with a starter from that list. Don't assume this starter switches runtime just because Claude is logged in. - An agent is waiting on local daemon access Read the prompt and allow the intended local operation. If it keeps failing, ask your agent to check the sandbox's network access as well as approval settings. You don't need to turn every permission off.
- The first mission lands in the wrong place. Create the project's
missions/directory first, pass the explicit--workspace, and inspect the returned paths. Keep existing project configuration intact. - A scaffolded mission appears unknown or has no slices. Ask the agent to inspect the
metadatamappings inmission.yamlandslice.yaml. Missing metadata is a known scaffold issue. Follow the mission setup reports for that repair; a passing scope audit alone doesn't establish that the readiness view can read it. - Growth partly succeeds. Inspect
rig ps --nodes --rig first-project --jsonbefore retrying. A seat may already exist even if its launch failed. Fix the reported cause and launch the existing seat rather than adding it again. - The four terminals don't form a grid. Use the terminal provider's own layout controls. If that provider isn't available, keep working through the existing terminals and
rig tui.
This walkthrough uses the queue for coordination. You don't need a Workflow graph to start. For the recipe available in your installed version, ask your agent to run rig context get skills/core/openrig-software-factory/SKILL.md. Use its matching guidance when you want to save a custom team definition or add an explicit Workflow.
This guide follows the public 0.5.17 path. Getting started covers the installation basics.
Questions or want to discuss? Reply on this X thread. I'm reading and answering there.
Stuck or confused? Start here in GitHub Q&A for what to include in your question. Found a bug? Open an issue.
Next: Run OpenRig across machines to keep work with an always-on home team while your laptop comes and goes.