mvschwarz/openrigPublic

Build your own network of agents from Claude Code, Codex and Pi: persistent teams with roles, shared context and owned work.

AI summary: An orchestration harness for booting and managing persistent, multi-agent AI coding teams from a YAML configuration.

Stars
4.9K
+450 today
Forks
353
Watchers
21
Open issues
39
Open PRs
13
Contributors
~14
Commits
3K
Branches
14

TypeScriptApache-2.0Created Apr 1, 2026Last push todayLatest release v0.5.17+3.2K stars this week+3.2K this month

Quick answers

What is openrig?
An orchestration harness for booting and managing persistent, multi-agent AI coding teams from a YAML configuration.
What does openrig do?
OpenRig is an orchestration tool that manages multiple AI coding agents, such as Claude Code and Codex, as a unified team. It allows developers to define complex agent hierarchies, complete with specific roles and shared contexts, using a simple YAML configuration. By wrapping individual model harnesses, it brings order to terminal-based AI tools, preventing them from being just isolated sessions. The system enables a lead agent to coordinate specialist agents, assign work, and return consolidated results to the user. This persistent setup ensures that the team's context and workflow remain intact across multiple coding sessions.
Who is openrig for?
Software engineers and researchers building complex applications who want to leverage multiple AI coding assistants simultaneously. It requires Node.js 20 and familiarity with command-line AI tools.
How popular is openrig on GitHub?
mvschwarz/openrig has 4,920 stars and 353 forks on GitHub, and gained 3,227 stars in the last 7 days.
What license does openrig use?
mvschwarz/openrig is released under the Apache-2.0 license.

Star history

since Sep 28, 2026
02K4KSep 2026Sep 2026Oct 2026Oct 2026
4.9K stars as of Oct 4, 2026. Measured daily since Sep 28, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 43 commits2026-03-24: 30 commits2026-03-25: 31 commits2026-03-26: 32 commits2026-03-27: 4 commits2026-03-28: 4 commits2026-03-29: 27 commits2026-03-30: 2 commits2026-03-31: 23 commits2026-04-01: 35 commits2026-04-02: 6 commits2026-04-03: 13 commits2026-04-04: 8 commits2026-04-05: 1 commit2026-04-06: 0 commits2026-04-07: 30 commits2026-04-08: 29 commits2026-04-09: 46 commits2026-04-10: 6 commits2026-04-11: 15 commits2026-04-12: 1 commit2026-04-13: 10 commits2026-04-14: 3 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 5 commits2026-04-19: 12 commits2026-04-20: 1 commit2026-04-21: 5 commits2026-04-22: 10 commits2026-04-23: 38 commits2026-04-24: 8 commits2026-04-25: 0 commits2026-04-26: 4 commits2026-04-27: 0 commits2026-04-28: 5 commits2026-04-29: 4 commits2026-04-30: 6 commits2026-05-01: 13 commits2026-05-02: 6 commits2026-05-03: 26 commits2026-05-04: 40 commits2026-05-05: 2 commits2026-05-06: 34 commits2026-05-07: 28 commits2026-05-08: 10 commits2026-05-09: 14 commits2026-05-10: 60 commits2026-05-11: 79 commits2026-05-12: 42 commits2026-05-13: 12 commits2026-05-14: 11 commits2026-05-15: 1 commit2026-05-16: 19 commits2026-05-17: 16 commits2026-05-18: 38 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 30 commits2026-06-01: 21 commits2026-06-02: 1 commit2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 1 commit2026-06-08: 18 commits2026-06-09: 5 commits2026-06-10: 14 commits2026-06-11: 14 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 28 commits2026-06-15: 20 commits2026-06-16: 0 commits2026-06-17: 23 commits2026-06-18: 74 commits2026-06-19: 21 commits2026-06-20: 26 commits2026-06-21: 19 commits2026-06-22: 6 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 1 commit2026-07-01: 1 commit2026-07-02: 0 commits2026-07-03: 1 commit2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 1 commit2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 1 commit2026-07-10: 3 commits2026-07-11: 9 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 3 commits2026-07-15: 2 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 14 commits2026-07-21: 2 commits2026-07-22: 5 commits2026-07-23: 5 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 1 commit2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 1 commit2026-07-30: 4 commits2026-07-31: 1 commit2026-08-01: 0 commits2026-08-02: 28 commits2026-08-03: 42 commits2026-08-04: 109 commits2026-08-05: 42 commits2026-08-06: 95 commits2026-08-07: 150 commits2026-08-08: 30 commits2026-08-09: 16 commits2026-08-10: 6 commits2026-08-11: 46 commits2026-08-12: 3 commits2026-08-13: 1 commit2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 5 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 55 commits2026-08-22: 21 commits2026-08-23: 38 commits2026-08-24: 69 commits2026-08-25: 36 commits2026-08-26: 61 commits2026-08-27: 75 commits2026-08-28: 57 commits2026-08-29: 97 commits2026-08-30: 63 commits2026-08-31: 20 commits2026-09-01: 40 commits2026-09-02: 57 commits2026-09-03: 31 commits2026-09-04: 26 commits2026-09-05: 20 commits2026-09-06: 17 commits2026-09-07: 32 commits2026-09-08: 10 commits2026-09-09: 35 commits2026-09-10: 24 commits2026-09-11: 14 commits2026-09-12: 4 commits2026-09-13: 0 commits2026-09-14: 1 commit2026-09-15: 0 commits2026-09-16: 0 commits2026-09-17: 0 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 0 commits2026-09-23: 2 commits2026-09-24: 7 commits2026-09-25: 17 commits2026-09-26: 15 commits2026-09-27: 1 commit2026-09-28: 3 commits2026-09-29: 0 commits2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 0 commits2026-10-03: 0 commits
2,845 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Rising fast

    +3,227 stars this week

  • Very active

    2,845 commits in 52 weeks

  • Well documented

    High community health score

  • Permissive license

    Apache-2.0

  • Continuous integration

    Automated checks passing

  • Repeat trending

    7 trending appearances

What openrig does

OpenRig is an orchestration tool that manages multiple AI coding agents, such as Claude Code and Codex, as a unified team. It allows developers to define complex agent hierarchies, complete with specific roles and shared contexts, using a simple YAML configuration. By wrapping individual model harnesses, it brings order to terminal-based AI tools, preventing them from being just isolated sessions. The system enables a lead agent to coordinate specialist agents, assign work, and return consolidated results to the user. This persistent setup ensures that the team's context and workflow remain intact across multiple coding sessions.

Software engineers and researchers building complex applications who want to leverage multiple AI coding assistants simultaneously. It requires Node.js 20 and familiarity with command-line AI tools.

  • YAML team definition: Configure complex multi-agent setups, roles, and relationships using simple declarative files.
  • Multi-model orchestration: Run different AI models like Claude Code and Codex simultaneously within the same rig.
  • Persistent context: Maintains shared context and working state across the entire agent team over time.
  • Hierarchical delegation: Enables lead agents to assign specific tasks to specialized sub-agents.
  • Unified booting: Starts an entire network of configured AI agents with a single command.

Where teams use it

Managing complex codebases

Deploy a team of agents where specialists handle frontend, backend, and testing concurrently.

Continuous agent workflows

Maintain a persistent team of AI assistants that retain context across multiple development sessions.

Cross-model collaboration

Combine the strengths of Claude Code for reasoning and Codex for specific syntax generation.

Declarative agent configuration

Store and version-control your AI team structure using standard YAML files.

README

main branch

OpenRig

npm version npm downloads License: Apache 2.0 GitHub stars

A harness wraps a model. A rig wraps your harnesses. Define your agent team in YAML, boot it with one command. Claude Code and Codex in the same rig, managed as one system.

OpenRig turns AI coding agents from a pile of terminal sessions into a persistent, organized team. Talk to a lead agent about the outcome you want; it can coordinate specialists across teams and bring you results and decisions that need your attention. Start with a repository and one useful change, then keep the team's work and context at the same addresses.

Install and first run

Requires Node.js 20, 22 or 24 and tmux, on macOS or Linux. On a Mac with Apple silicon, use Node.js 22 (why). Native Windows is not supported yet, and WSL2 has not been tested. Launching a rig writes provider hooks and workspace trust settings. Before running the commands below, read what OpenRig changes on your machine and back up the relevant files.

npm install -g @openrig/cli
rig setup --dry-run

To install with Bun instead, run bun add -g @openrig/cli. OpenRig still runs on Node.js, so install Node.js 22 as well. Bun may block this package's postinstall script, in which case the Node.js and SQLite check described under what OpenRig changes on your machine does not run at install time.

Review setup's plan before applying rig setup: it checks both native harnesses and cmux. This starter requires tmux and authenticated Codex; the other harness and terminal provider are optional for its repository task.

Before launching, ask your agent to configure your chosen permissions: keep prompts, remember selected commands, or deliberately choose broader access. The agent handles setup and verification; OpenRig's shipped defaults stay unchanged.

Check prerequisites in your launch shell:

tmux -V
codex --version
codex login status

Resolve missing tools or login before continuing. From your repository, inspect the plan before launching the two Codex seats, an owner and a checker:

cd /path/to/your/repository
rig up first-project --cwd . --plan
rig up first-project --cwd .
rig tui --shared

The kernel provides separate operational support and the shared dashboard. To detach without stopping the dashboard, press Ctrl-b then d; rig tui --shared returns to that view. Plain rig tui opens an independent view. Closing a viewing terminal does not mean you should relaunch the team.

Check project-seat readiness with rig ps --nodes --rig first-project and resolve any authentication, trust or permission prompt before assigning work. Then give the owner one bounded outcome from your repository:

rig send dev-owner@first-project 'Implement <one useful change>. Track the task in the queue and return its ID. Keep it local, verify the behavior, ask dev-check@first-project to check the exact candidate, and record the result and how I can try it.'
rig queue list --destination dev-owner@first-project --limit 1000

Sending a message does not itself create a queue item; the owner records the task. Read the final artifact and the review of its exact candidate, then return to the same owner for the next change. The guided first-use path covers readiness, a useful task, a reviewed result, Herdr/cmux terminals and recovery.

See it running

The OpenRig TUI: the build rig as a graph, then as a table of seats with runtime, model, context and state, then one seat in detail (real recording, 10 seconds)

Community

We aim to acknowledge issues and pull requests within one day; see CONTRIBUTING.md for review targets.

What OpenRig changes on your machine

OpenRig writes instance state, provider integration and workspace files as part of setup and operation. These include trust settings and executable hooks. The summary below follows this source revision; check rig --version when using a published package, since repository guidance can be ahead of npm.

When What changes and why
npm installation Installs the CLI, bundled components and dependencies under your npm prefix (with Bun, under Bun's global directory). OpenRig's postinstall checks the Node.js version and that the SQLite module loads; Bun may block this script. It does not run daemon or provider setup.
rig setup Attempts missing tools and writes an OpenRig block in ~/.tmux.conf for mouse support and scrollback. On macOS it can install cmux and enable its automation socket control in ~/.config/cmux/settings.json. --full adds workstation tools. --dry-run shows setup's plan without applying it.
Daemon startup Creates/updates instance state under OPENRIG_HOME (normally ~/.openrig), including its database and managed plugin resources. Seeds the openrig-skills discovery skill in ~/.claude/skills and ~/.agents/skills, subject to existing version ownership. With runtime.codex.hooks_enabled enabled (the default), writes Codex hook configuration and trust records as described below—even before a rig launches.
Rig/seat launch and attachment Creates tmux sessions, supplies seat identity and daemon connection environment, and projects selected guidance, skills, plugins and runtime resources into the workspace. Managed startup pre-trusts the workspace. Claude context collection can also be provisioned for attached sessions and refreshed during monitoring.
Explicit permission configuration The built-in bootstrap does not add rig command allow rules. Ask your agent to apply your chosen project or user scope; existing rules remain relevant. Broader access is a separate choice.

The provider files are separate from instance state. Here ~ means the daemon user's home; changing OPENRIG_HOME alone does not isolate provider configuration.

  • Claude Code: managed startup writes workspace trust and onboarding completion to ~/.claude.json. In the workspace, .claude/settings.local.json receives the context collector's statusLine command and selected activity hooks; helper scripts live under .openrig/. Selected settings/MCP resources can also change that settings file and .mcp.json. The shared settings resource sets permissions.defaultMode to acceptEdits and enables Exa/Context7 MCP entries; selected MCP resources configure those external services. Built-in bootstrap no longer writes a command allowlist to ~/.claude/settings.json or removes older allowances. The trust writer uses the daemon home, so a custom CLAUDE_CONFIG_DIR is not a general relocation of these writes.
  • Codex: writes the daemon's CODEX_HOME/config.toml (normally ~/.codex/config.toml). Startup enables hooks, adds the OpenRig activity relay commands and pre-writes trust hashes for those commands. Seat startup adds trust_level = "trusted" for the workspace; selected config resources can add MCP settings. Recognized update notices can be skipped during launch, recording the skipped version in Codex's cache; this is not an update install.

Activity relays send event type/subtype, seat/runtime identity, timestamps and native session identity to the configured OpenRig daemon's /api/activity/hooks endpoint, using its activity token. That payload excludes prompt text and tool arguments. Claude's collector writes context/token usage, session/transcript-path metadata and available rate-limit data to the instance's state/context-usage and state/provider-usage. Provider and selected MCP connections have their own data flows. Daemon plugin initialization also checks the OpenRig plugin release endpoint on GitHub.

Managed launches supply HOME, CODEX_HOME and OPENRIG_* identity/connection variables. Claude uses --permission-mode acceptEdits and defaults to the classic renderer for terminal scrollback. Codex uses -s workspace-write unless a named profile governs its sandbox; OpenRig does not force an approval-policy flag. Fresh Codex launches also add writable access to the workspace's .git and the pod's shared queue-state directory with --add-dir; the shared root comes from OPENRIG_SHARED_DOCS_ROOT or ~/.openrig/shared-docs. YOLO is off by default. Explicit OPENRIG_YOLO=1 or a full-bypass seat policy selects Claude's --dangerously-skip-permissions or Codex's -s danger-full-access; a resolved seat policy takes precedence over the environment setting.

Managed hook blocks target OpenRig's entries and retain unrelated hooks, but trust entries, selected resource keys and Claude's existing status-line command can be replaced. Some writers recover unreadable settings as empty objects; this is not a complete preservation or rollback guarantee. Back up relevant files before first use. Daemon/bootstrap writes are automatic and do not each have an interactive preview; rig setup --dry-run does not preview every later startup effect.

What It Does

OpenRig is a multi-agent harness — it manages the system that coding agents form when you run them together. Not the agents themselves, but the team they create: which sessions are running, how they relate, how to recover after a reboot, and how to stop it from becoming terminal sprawl.

  • Define topologies in YAML (RigSpec) with pods, edges, and continuity policies
  • Boot everything with rig up — tmux sessions, harnesses, startup files, readiness checks
  • See rigs, pods, and seats in the TUI topology table and graph; inspect projects, specs, feeds, and instance health
  • Discover existing Claude Code and Codex sessions in tmux and adopt them into a managed rig
  • Snapshot the topology with rig down --snapshot, restore by name with rig up <name>
  • Communicate across agents with rig send, rig broadcast, and rig chatroom
  • Evolve running topologies with rig grow, rig shrink, rig launch, rig remove

Every agent runs in a tmux session you can attach to, inspect, and work with directly.

Starter Rigs

Use first-project for the focused first-use path. product-team is an optional larger product-development example:

rig specs preview product-team --kind rig
rig up product-team

Use it when you want a larger product squad: two orchestrators, implementation, QA, design, and two independent reviewers.

For a smaller starter, use conveyor:

rig specs preview conveyor --kind rig
rig up conveyor

conveyor is a four-seat starter mixing Claude Code and Codex. It shows a handoff path through intake, planning, build, and review; first-project remains the smaller two-seat starting point.

Also ships: implementation-pair, adversarial-review, research-team, and secrets-manager (HashiCorp Vault managed by a specialist agent).

Browse the library:

rig specs ls

How It Works

OpenRig is a local daemon + CLI + terminal UI + MCP server, built on tmux. The older React web UI remains in maintenance mode with best-effort support.

CLI / TUI / MCP
      |
Hono HTTP daemon
      |
  Domain services
      |
  SQLite + tmux + runtime adapters
  • CLI: Commands for both humans and agents to launch teams, inspect state, send messages, track owned work, and manage context.
  • TUI: Topology explorer, table and graph views, seat details, Specs, Projects, Terminals, Feed, and System. Navigate with the keyboard, mouse, or command bar.
  • MCP: Tools so agents can manage their own topology (rig_up, rig_ps, rig_send, rig_chatroom_send, etc.)
  • Runtimes: Native Claude Code and Codex sessions, terminal nodes, and a Pi adapter using an RPC runner inside a terminal pane.

Terminal UI and Workspaces

The TUI shows the team's coordination state; herdr and cmux show the actual agent terminals alongside it. Use rig tui commands to list the TUI's command-bar navigation, or try the interactive TUI tour.

OpenRig TUI topology graph showing seven agent seats grouped into product, development, and QA pods

Captured from the interactive TUI demo using fictional project data.

With herdr installed and connected, open the starter's terminals together:

rig terminal open first-project --provider herdr

For cmux, use --provider cmux. The underlying sessions remain accessible through tmux. See the terminal workspace guide for setup and returning to an existing view.

Key Concepts

  • RigSpec: Declarative multi-agent harness definition in YAML. Pods, members, edges, continuity policies, culture file.
  • AgentSpec: Reusable agent blueprint with skills, guidance, hooks, profiles, and startup contracts.
  • Seat: A stable role and address in a rig, such as dev-owner@first-project. The conversation occupying it can change while its identity and authored context remain.
  • Pod: A group of related seats with shared guidance and context. Each agent still has its own context window.
  • Discovery: rig discover fingerprints existing tmux sessions. rig adopt brings them under management.
  • Snapshot/Restore: rig down --snapshot captures full state. rig up <name> restores from latest snapshot. Restore reports per-node outcomes (resumed, fresh, or failed).
  • RigBundle: Portable archive with vendored AgentSpecs and SHA-256 integrity. Share topologies across machines.
  • Culture: CULTURE.md sets coordination norms for the group. Research rigs get exploratory culture. Implementation rigs get conservative, trust-but-verify culture.

Agent-Managed Software

A rig can package actual software alongside the agents that manage it. The shipped example is secrets-manager: a HashiCorp Vault instance operated by a specialist agent.

rig up secrets-manager
rig env status secrets-manager
rig send vault-specialist@secrets-manager "Check Vault health and report status." --verify

Requires Docker for service-backed rigs.

Upgrading an existing instance

For an existing installation, follow the upgrade procedure and the 0.5.14 release notes. Preserve live seats during the upgrade; rig down is not an upgrade step.

Crossing the 0.5.9 layout boundary

The migration below still applies when upgrading from a pre-0.5.9 instance.

0.5.9 makes $OPENRIG_HOME/context the addressable context library, writes Claude telemetry to state/context-usage (and provider telemetry to state/provider-usage), and installs the default System World at context/system/system-world.yaml. Existing instances cross this boundary by an Agent-Operated Migration from the shipped openrig-upgrade skill. The target runtime reads canonical-first with legacy-fallback while new writes use the canonical roots; a custom context-library root stays stable during activation. This is not a directory rename to do while an old collector writes.

# SKILL_DIR is the installed openrig-upgrade skill directory.
node "$SKILL_DIR/scripts/migrate-telemetry-state-0.5.9.mjs" --help
node "$SKILL_DIR/scripts/migrate-telemetry-state-0.5.9.mjs" --home "$OPENRIG_HOME"
node "$SKILL_DIR/scripts/migrate-telemetry-state-0.5.9.mjs" --home "$OPENRIG_HOME" --apply-state --preimage /safe/path/layout-0.5.9-before

# Activate the exact target runtime separately. After every bounded legacy tail is followed by newer paired samples at both new state roots:
node "$SKILL_DIR/scripts/migrate-telemetry-state-0.5.9.mjs" --home "$OPENRIG_HOME" --verify --preimage /safe/path/layout-0.5.9-before > /safe/path/layout-0.5.9-verify.json

# Run the separately invoked non-destructive finalizer only with that exact receipt:
node "$SKILL_DIR/scripts/migrate-telemetry-state-0.5.9.mjs" --home "$OPENRIG_HOME" --apply-library --preimage /safe/path/layout-0.5.9-before --verification /safe/path/layout-0.5.9-verify.json

# Restore only helper-owned preparation/finalizer effects if the observed upgrade must be reversed:
node "$SKILL_DIR/scripts/migrate-telemetry-state-0.5.9.mjs" --home "$OPENRIG_HOME" --rollback /safe/path/layout-0.5.9-before

--help prints the phase grammar without inventorying the instance. No phase flag intentionally runs the read-only plan; unknown options fail nonzero before plan or mutation.

Every phase emits JSON. Stop on any issue or incomplete receipt and follow its next action; do not continue from copied legacy telemetry or retry a partial mutation blindly. Preparation leaves legacy state and collector settings in place. Verification accepts exact tail bytes only when that same seat has newer paired context and provider samples under state/; finalization revalidates the accepted tails, copies the library without overwrite, and switches config last. The helper never removes the legacy telemetry or library. Retirement follows separate stable runtime, writer, reader, and recovery proof. Daemon, database, seat, plugin, and release lifecycle actions remain agent-owned.

Requirements

  • Node.js 20, 22, or 24 (the supported versions in this release). On a Mac with Apple silicon, use Node.js 22: see the known compatibility limitation
  • tmux
  • macOS or Linux. Native Windows is not supported yet, and WSL2 has not been tested

Optional:

  • herdr or cmux for terminal workspaces showing the agents together
  • Docker for service-backed rigs and managed apps

Setup and Troubleshooting

  • rig setup attempts core machine preparation: tmux, cmux, Claude Code, Codex, and tmux defaults. It reports what it tried and what actually succeeded. If something fails, it gives the local agent enough context to finish the job.
  • rig setup --full attempts a broader operator workstation setup (jq, gh) on top of core.
  • rig doctor inspects current system health and helps diagnose problems after setup. Use it when something stops working or after machine changes.

Both commands support --json for agent-driven workflows.

Before setup or managed launch, review what OpenRig changes on your machine, including provider trust, hooks and selected runtime resources.

Already-running adopted sessions may need restart before they pick up newly written runtime config.

For agents: Ask the user whether they want core setup (rig setup) or the fuller workstation path (rig setup --full) before choosing the invocation. Inspect the result with --json and use rig doctor to finish any remaining machine-specific issues.

Comparison with Claude Managed Agents

OpenRig is open source and self-hosted, with Claude Code and Codex in the same team. You operate it on your own infrastructure; the selected providers' model usage costs still apply.

Full comparison

Links

Star History

Star History Chart

License

Apache 2.0

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

33 total
  1. # OpenRig v0.5.17 — install with Bun Changes for version **0.5.17**. Publication status and date are recorded on the [GitHub release](https://github.com/mvschwarz/openrig/releases/tag/v0.5.17) and npm. OpenRig 0.5.17 can be installed with Bun as well as npm. ## Install with Bun ```sh bun add -g @openrig/cli ``` Earlier versions listed the unpublished `@openrig/daemon` package as a dependency. npm used the copy bundled in the package, but Bun looked it up in the registry and failed with a 404. The package now imports the daemon copy it already ships and no longer depends on `@openrig/daemon`, which also makes it smaller. npm installation is unchanged. OpenRig still runs on Node.js, so install Node.js 22 as well. Bun may block this package's postinstall script. In that case the Node.js version and SQLite check does not run at install time. See [what OpenRig changes on your machine](../../README.md#what-openrig-changes-on-your-machine). The installation fix was verified with Bun 1.4.0 and npm on macOS arm64 with Node.js 22. Other combinations are not verified. ## Contributors and included pull requests Thanks to [@drewpayment](https://github.com/drewpayment) for reporting the

  2. # OpenRig v0.5.16 — choose the Claude instruction file Changes for version **0.5.16**. Publication status and date are recorded on the [GitHub release](https://github.com/mvschwarz/openrig/releases/tag/v0.5.16) and npm. OpenRig 0.5.16 lets a rig keep its managed Claude Code instructions out of a tracked `CLAUDE.md`, and adds an advisory portability report for pull requests. ## Keep a tracked CLAUDE.md unchanged OpenRig writes its instructions for Claude Code members into managed blocks in each member's working directory. By default that file is `CLAUDE.md`. If your repository tracks `CLAUDE.md`, select `CLAUDE.local.md` in the rig spec: ```yaml managed_blocks: claude-code: CLAUDE.local.md ``` Claude Code loads `CLAUDE.local.md` from the working directory as well; keep it out of git, for example with a `.gitignore` entry. The selection applies when members launch, restore, relaunch or are added, and it is kept by `rig export` and rig bundles. `rig down` removes OpenRig's blocks only from the selected file. OpenRig never edits, moves or deletes blocks in the other file. Only the `claude-code` key is accepted, with `CLAUDE.md` or `CLAUDE.local.md`; any other key or value is r

  3. # OpenRig v0.5.15 — first-use recovery, software factory guidance and Pi fixes Changes for version **0.5.15**. Publication status and date are recorded on the [GitHub release](https://github.com/mvschwarz/openrig/releases/tag/v0.5.15) and npm. OpenRig 0.5.15 improves startup and recovery, adds public guidance for a continuing software team and user-chosen command permissions, and fixes Pi reply visibility, shell context and terminal input handling. ## Start and return with clearer guidance Before launching, read [what OpenRig changes on your machine](../../README.md#what-openrig-changes-on-your-machine). Provider integration can configure executable hooks and workspace trust; changing only `OPENRIG_HOME` does not isolate provider configuration. The [getting-started guide](../reference/getting-started.md) walks through your first task and explains these setup effects. Check the commands available in your installation: ```sh rig --version rig --help rig up --help ``` Startup and recovery recognize native Codex through shell and Node launchers, and report uncertainty when process identity cannot be established. Recognized update notices are skipped without installing provider u

  4. OpenRig 0.5.14 makes reading more predictable when opened or refreshed, keeps human requests distinct from informational updates, and groups instance settings and health where they are easier to find. ## Enter and keep reading Bare interactive `rig` enters the ordinary TUI after confirming a running rig. An instance without running rigs keeps the startup chooser. Help, Skip and Local remain responsive during slow or unverified detection; a late observation does not take navigation away after the user has chosen another route. Pages distinguish initial loading, successful empty results, refresh and failure. The navigator remains usable through page and rig changes. A previously read page can stay visible with its original scope label while the selected page loads; that prior content has no action targets. Same-scope refresh retains useful content, with the previous read time and Retry. A failed Feed source retains its own data while healthy sibling sources update. Confirmed denial, empty results and removals clear affected content, and late replies cannot replace the current selection. First visits retain navigation and local feedback. Topology first offers rig selection, then r

  5. OpenRig v0.5.13v0.5.13Sep 10, 2026

    **Status:** published. The source, the annotated `v0.5.13` tag, this GitHub Release, and `@openrig/[email protected]` on npm are all published. npm publication completed on 2026-09-10 and the registry lists `0.5.13` as `latest`; the published tarball was verified byte-identical to the accepted release archive. Exact-cut substance review and release verification are complete for this cut. Adoption so far is **VM-only**; no parent or general adoption is established or authorized. > Note: the in-repo `docs/releases/v0.5.13.md` and `CHANGELOG.md` carry > "release candidate, unpublished" wording. That text is frozen inside the > published commit and is historical, not the current public status. OpenRig 0.5.13 connects the human TUI journey: enter the instance, choose a project, read its current instructions, understand what needs your decision, and deliberately open the terminals you need. Scoped oversight and explicit Git context updates help agents work from the right instructions while keeping authority, evidence and local authorship visible. ## Start with something useful Bare interactive `rig` exposes Help, Skip and local reading while startup checks are running, when the daemon is

Code frequency

additions and deletions
+91.6K-91.6KWeek of 2026-03-22: +59,911 linesWeek of 2026-03-22: -3,709 linesWeek of 2026-03-29: +44,807 linesWeek of 2026-03-29: -5,646 linesWeek of 2026-04-05: +42,748 linesWeek of 2026-04-05: -14,474 linesWeek of 2026-04-12: +3,561 linesWeek of 2026-04-12: -492 linesWeek of 2026-04-19: +17,733 linesWeek of 2026-04-19: -913 linesWeek of 2026-04-26: +25,391 linesWeek of 2026-04-26: -986 linesWeek of 2026-05-03: +81,832 linesWeek of 2026-05-03: -13,862 linesWeek of 2026-05-10: +57,722 linesWeek of 2026-05-10: -17,171 linesWeek of 2026-05-17: +16,340 linesWeek of 2026-05-17: -2,619 linesWeek of 2026-05-24: +0 linesWeek of 2026-05-24: -0 linesWeek of 2026-05-31: +9,185 linesWeek of 2026-05-31: -314 linesWeek of 2026-06-07: +10,201 linesWeek of 2026-06-07: -471 linesWeek of 2026-06-14: +22,135 linesWeek of 2026-06-14: -2,548 linesWeek of 2026-06-21: +3,359 linesWeek of 2026-06-21: -625 linesWeek of 2026-06-28: +30,490 linesWeek of 2026-06-28: -2,663 linesWeek of 2026-07-05: +65,790 linesWeek of 2026-07-05: -2,191 linesWeek of 2026-07-12: +1,182 linesWeek of 2026-07-12: -265 linesWeek of 2026-07-19: +7,091 linesWeek of 2026-07-19: -751 linesWeek of 2026-07-26: +6,025 linesWeek of 2026-07-26: -65 linesWeek of 2026-08-02: +91,606 linesWeek of 2026-08-02: -19,403 linesWeek of 2026-08-09: +11,432 linesWeek of 2026-08-09: -5,376 linesWeek of 2026-08-16: +13,627 linesWeek of 2026-08-16: -5,255 linesWeek of 2026-08-23: +65,491 linesWeek of 2026-08-23: -15,026 linesWeek of 2026-08-30: +51,636 linesWeek of 2026-08-30: -11,157 linesWeek of 2026-09-06: +26,931 linesWeek of 2026-09-06: -6,850 linesWeek of 2026-09-13: +36 linesWeek of 2026-09-13: -22 linesWeek of 2026-09-20: +6,784 linesWeek of 2026-09-20: -1,649 linesWeek of 2026-09-27: +468 linesWeek of 2026-09-27: -12 linesMar 22, 2026Sep 27, 2026
+773.5K lines added, -134.5K removed over the last year.

Commits per week

last 52 weeks
4960Week of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 144 commitsWeek of 2026-03-29: 114 commitsWeek of 2026-04-05: 127 commitsWeek of 2026-04-12: 19 commitsWeek of 2026-04-19: 74 commitsWeek of 2026-04-26: 38 commitsWeek of 2026-05-03: 154 commitsWeek of 2026-05-10: 224 commitsWeek of 2026-05-17: 54 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 52 commitsWeek of 2026-06-07: 52 commitsWeek of 2026-06-14: 192 commitsWeek of 2026-06-21: 25 commitsWeek of 2026-06-28: 3 commitsWeek of 2026-07-05: 14 commitsWeek of 2026-07-12: 5 commitsWeek of 2026-07-19: 26 commitsWeek of 2026-07-26: 7 commitsWeek of 2026-08-02: 496 commitsWeek of 2026-08-09: 72 commitsWeek of 2026-08-16: 81 commitsWeek of 2026-08-23: 433 commitsWeek of 2026-08-30: 257 commitsWeek of 2026-09-06: 136 commitsWeek of 2026-09-13: 1 commitsWeek of 2026-09-20: 41 commitsWeek of 2026-09-27: 4 commitsOct 5, 2025Sep 27, 2026
2.8K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 30 commitsSun 1:00 — 25 commitsSun 2:00 — 21 commitsSun 3:00 — 39 commitsSun 4:00 — 19 commitsSun 5:00 — 14 commitsSun 6:00 — 5 commitsSun 7:00 — 4 commitsSun 8:00 — 5 commitsSun 9:00 — 4 commitsSun 10:00 — 17 commitsSun 11:00 — 9 commitsSun 12:00 — 13 commitsSun 13:00 — 12 commitsSun 14:00 — 0 commitsSun 15:00 — 8 commitsSun 16:00 — 11 commitsSun 17:00 — 20 commitsSun 18:00 — 23 commitsSun 19:00 — 29 commitsSun 20:00 — 14 commitsSun 21:00 — 18 commitsSun 22:00 — 26 commitsSun 23:00 — 24 commitsMon 0:00 — 15 commitsMon 1:00 — 15 commitsMon 2:00 — 20 commitsMon 3:00 — 19 commitsMon 4:00 — 33 commitsMon 5:00 — 27 commitsMon 6:00 — 18 commitsMon 7:00 — 30 commitsMon 8:00 — 17 commitsMon 9:00 — 17 commitsMon 10:00 — 20 commitsMon 11:00 — 11 commitsMon 12:00 — 19 commitsMon 13:00 — 16 commitsMon 14:00 — 27 commitsMon 15:00 — 19 commitsMon 16:00 — 14 commitsMon 17:00 — 12 commitsMon 18:00 — 7 commitsMon 19:00 — 15 commitsMon 20:00 — 19 commitsMon 21:00 — 51 commitsMon 22:00 — 13 commitsMon 23:00 — 12 commitsTue 0:00 — 19 commitsTue 1:00 — 25 commitsTue 2:00 — 26 commitsTue 3:00 — 12 commitsTue 4:00 — 12 commitsTue 5:00 — 21 commitsTue 6:00 — 14 commitsTue 7:00 — 13 commitsTue 8:00 — 20 commitsTue 9:00 — 25 commitsTue 10:00 — 16 commitsTue 11:00 — 21 commitsTue 12:00 — 17 commitsTue 13:00 — 6 commitsTue 14:00 — 5 commitsTue 15:00 — 7 commitsTue 16:00 — 19 commitsTue 17:00 — 24 commitsTue 18:00 — 17 commitsTue 19:00 — 9 commitsTue 20:00 — 22 commitsTue 21:00 — 18 commitsTue 22:00 — 13 commitsTue 23:00 — 17 commitsWed 0:00 — 20 commitsWed 1:00 — 18 commitsWed 2:00 — 14 commitsWed 3:00 — 16 commitsWed 4:00 — 10 commitsWed 5:00 — 12 commitsWed 6:00 — 11 commitsWed 7:00 — 25 commitsWed 8:00 — 22 commitsWed 9:00 — 14 commitsWed 10:00 — 9 commitsWed 11:00 — 9 commitsWed 12:00 — 25 commitsWed 13:00 — 16 commitsWed 14:00 — 14 commitsWed 15:00 — 26 commitsWed 16:00 — 11 commitsWed 17:00 — 20 commitsWed 18:00 — 8 commitsWed 19:00 — 8 commitsWed 20:00 — 16 commitsWed 21:00 — 14 commitsWed 22:00 — 28 commitsWed 23:00 — 35 commitsThu 0:00 — 37 commitsThu 1:00 — 22 commitsThu 2:00 — 24 commitsThu 3:00 — 34 commitsThu 4:00 — 32 commitsThu 5:00 — 18 commitsThu 6:00 — 15 commitsThu 7:00 — 24 commitsThu 8:00 — 27 commitsThu 9:00 — 30 commitsThu 10:00 — 21 commitsThu 11:00 — 9 commitsThu 12:00 — 20 commitsThu 13:00 — 9 commitsThu 14:00 — 15 commitsThu 15:00 — 9 commitsThu 16:00 — 11 commitsThu 17:00 — 16 commitsThu 18:00 — 21 commitsThu 19:00 — 21 commitsThu 20:00 — 16 commitsThu 21:00 — 20 commitsThu 22:00 — 18 commitsThu 23:00 — 29 commitsFri 0:00 — 35 commitsFri 1:00 — 28 commitsFri 2:00 — 25 commitsFri 3:00 — 19 commitsFri 4:00 — 14 commitsFri 5:00 — 8 commitsFri 6:00 — 8 commitsFri 7:00 — 1 commitsFri 8:00 — 17 commitsFri 9:00 — 28 commitsFri 10:00 — 20 commitsFri 11:00 — 13 commitsFri 12:00 — 16 commitsFri 13:00 — 12 commitsFri 14:00 — 9 commitsFri 15:00 — 6 commitsFri 16:00 — 6 commitsFri 17:00 — 9 commitsFri 18:00 — 26 commitsFri 19:00 — 25 commitsFri 20:00 — 34 commitsFri 21:00 — 13 commitsFri 22:00 — 13 commitsFri 23:00 — 16 commitsSat 0:00 — 29 commitsSat 1:00 — 23 commitsSat 2:00 — 20 commitsSat 3:00 — 17 commitsSat 4:00 — 6 commitsSat 5:00 — 1 commitsSat 6:00 — 1 commitsSat 7:00 — 18 commitsSat 8:00 — 10 commitsSat 9:00 — 6 commitsSat 10:00 — 6 commitsSat 11:00 — 7 commitsSat 12:00 — 7 commitsSat 13:00 — 7 commitsSat 14:00 — 10 commitsSat 15:00 — 4 commitsSat 16:00 — 3 commitsSat 17:00 — 11 commitsSat 18:00 — 13 commitsSat 19:00 — 25 commitsSat 20:00 — 11 commitsSat 21:00 — 16 commitsSat 22:00 — 22 commitsSat 23:00 — 20 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits1,484 (49%)
Community commits1,551 (51%)

3,035 commits in total over the last year.

DateListRankStars gained
Oct 4, 2026weekly#17+4,245
Oct 3, 2026daily#9+691
Oct 2, 2026daily#9+691
Oct 1, 2026daily#3+640
Sep 30, 2026daily#3+622
Sep 29, 2026daily#6+733
Sep 28, 2026daily#7+781
  • freeCodeCamp/freeCodeCamp

    freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.

    456.7K stars · TypeScript

  • openclaw/openclaw

    The AI that really does things. Any OS. Any Platform. The lobster way. 🦞

    391.3K stars · TypeScript

  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    272.8K stars · JavaScript

  • NousResearch/hermes-agent

    The agent that grows with you

    251.2K stars · Python

  • anomalyco/opencode

    The open source coding agent.

    211.7K stars · TypeScript

  • n8n-io/n8n

    Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

    206.7K stars · TypeScript