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. OpenRig's smallest built-in team, starter, gives you that pair: a Claude Code builder and a Codex reviewer. 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 22 or 24, tmux, and Claude Code or Codex signed in. On Apple silicon, use Node 22.
Install the version this guide covers, inspect the setup plan and start OpenRig. These commands go in your own terminal.
npm install -g @openrig/cli@0.6.6
rig setup --dry-run
rig daemon start
rig status
Install any missing prerequisites and complete claude auth login or 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.
Talk to the operator. rig daemon start also starts OpenRig's own agents, including the operator, which sets up and runs teams for you. In its pane, it asks "What would you like to build or change?" Give it the outcome you wrote down and the repository to work in. It recommends starter, workshop or factory and fits the team to the logins you have. For this guide, take starter. When you say yes, the operator launches it and hands your goal to the team's lead, dev-build@starter.
Or start it by hand. In your terminal, change into the repository you chose. Then preview and launch the team there.
rig specs preview starter --kind rig
rig up starter --cwd . --plan
rig up starter --cwd .
rig ps --nodes --rig starter
A direct rig up starter uses Claude Code and Codex, so it needs both logins. With only one, ask the operator to adapt the team; its copy keeps the name starter.
You're ready when Both project seats report ready. Resolve any named login or trust prompt before sending work. If a seat stops at a prompt, rig up reports Status: partial and names the seat; answer the prompt in that seat's terminal, then run the rig seat continue <seat> command it shows.
Meet your team
dev-build builds the change and owns the outcome. dev-review independently reviews it. 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, such as dev-build. It keeps its name, role and task history when the agent in it is restarted or replaced, so you can give your next piece of work to the same seat instead of setting the team up again.
Open the team view with rig tui. Your first message goes to dev-build@starter; if the operator launched the team, it has already passed your goal there. You don't need to relay the builder's conversation with the reviewer.
Look for Two named seats with different jobs, both working in the repository you selected.
Start with the pair
Tell the builder what you want to happen. It handles the independent review 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 builder’s conversation or send it from your terminal:
rig send dev-build@starter '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 builder asks the reviewer:
rig send dev-review@starter 'Please try dark mode across the app and send findings directly to me.'
The reviewer sees who sent the message and who it is addressed to:
From: dev-build@starter
To: dev-review@starter
Please try dark mode across the app and send findings directly to me.
The reviewer replies to dev-build@starter with its findings. The builder 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 reviewer for its answer yourself.
Return to the same team
After the first task, come back to the same builder with a related request. Ask why it made a tradeoff, or give it a small extension that builds on the earlier change. Use the previous decisions and project notes to pick up the work. That second task is where keeping a team becomes useful.
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 starter's builder, dev-build, takes on coordination. You can name the seats whatever you want. The built-in factory team starts with seven seats in roles like these; growing the starter shows how a pair gets there.
Try this with your team
The builder 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 builder choose a useful division of work. Here, the builder takes coordination, a new designer designs and builds the theme editor, a new QA seat tries the user paths, and the existing reviewer keeps examining the code independently. Agree the added capacity and model cost before growing the team.
| Seat | Responsibility now |
|---|---|
dev-build@starter |
Plan and coordinate. Own integration and bring decisions back to you. |
dev-design@starter |
Design and build the assigned slice against its spec. |
dev-qa@starter |
Try the new user paths against each spec. |
dev-review@starter |
Keep what it learned in the first review and examine the implementation independently from QA. |
The builder inspects the running team:
rig ps --json
rig ps --nodes --rig starter --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 builder sets. With unused member names design and qa in the existing dev pod, it runs:
rig grow "$RIG_ID" design qa \
--pod dev --runtime codex --cwd "$PROJECT_ROOT"
rig ps --nodes --rig starter --json
This is the expanded version of the rig grow operation in the demo, with the repository and runtime selected explicitly. To add Claude Code seats instead, use --runtime claude-code. It adds seats to the running rig. It doesn't copy the builder's conversation into them or give them a job just because they're named design and qa.
The builder sends each new colleague its responsibility and relevant project sources, then gets a response before assigning work. The reviewer stays on the team with the knowledge it has already built up.
To watch the four seats together:
rig terminal status
rig terminal open starter
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, dev-build, 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-DESIGN.md under the project's .openrig/factory/ directory, including the actual slice path, the designer's file or worktree boundary and the next check.
rig queue create --id theme-001 --destination dev-design@starter \
--body-file "$PROJECT_ROOT/.openrig/factory/TASK-DESIGN.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 designer 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 new designer asks the original reviewer what its earlier check uncovered. A short rig send exchange saves the designer from repeating that investigation.
Try this with your team
From the designer's own terminal:
rig send dev-review@starter 'What did your earlier testing uncover that needs special attention?'
The reviewer answers directly to the designer:
From: dev-review@starter
To: dev-design@starter
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 designer 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 designer 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 designer has reached the end of its implementation task. QA now needs to own the next step, so the designer uses a handoff, with a request that identifies the candidate, its spec and the case the reviewer called out:
rig queue handoff theme-001 --to dev-qa@starter \
--body-file "$PROJECT_ROOT/.openrig/factory/REVIEW-REQUEST.md"
The designer 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 reviewer:
rig queue create --id theme-review --destination dev-review@starter \
--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 designer 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-qa@starter}
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-qa@starter \
--interval-seconds 1800 \
--registered-by dev-build@starter
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 designer is waiting on another queue item, it can mark its task as waiting 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 have only one login
starteruses Claude Code and Codex. Ask the operator to adapt a copy for the provider you have; the copy keeps the namestarter.first-project, starter's old name, still works. To see the other built-in teams, runrig specs ls --kind rigandrig specs preview <name>. - 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. - Growth partly succeeds. Inspect
rig ps --nodes --rig starter --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.6.6 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.