Download Latest Version OpenRig 0.6.14 source code.zip (14.5 MB) Google Add to Preferred Sources
Home / v0.6.13
Name Modified Size InfoDownloads / Week
Parent folder
OpenRig 0.6.13 source code.tar.gz 2026-10-20 11.8 MB
OpenRig 0.6.13 source code.zip 2026-10-20 14.4 MB
README.md 2026-10-20 36.0 kB
Totals: 3 Items   26.2 MB 0

OpenRig 0.6.13

0.6.13 is the quick follow-up to 0.6.12: fixes found by running teams on it every day, plus documentation, and 15 of its 46 changes come from 10 outside contributors. A Claude seat handed over in place now waits for the new Claude before its packet is typed. Slack's missed-message recovery reaches mapped channels, recent threads and the channels a hub relays to another machine. Pi seats honour their reasoning effort, an OMP seat can be retried after a provider hiccup, and you can move an existing seat to a new working folder without recreating it. rig ps --nodes and the roster show which model each seat was last seen using, a Codex account's last reading survives a daemon restart, a send whose caller has gone away never types later, and the Linux daemon lists processes without forking ps.

npm install -g @openrig/cli

It's built from 9eeb2e42: main at f5185f83 plus the version, the release text, and the README and getting-started now describing the installer's new ending. After 0.6.12's base 48fe7827, main holds 54 changes. Eight of them (#1491, #1488, #1492, #1496, #1483, #1504, #1506 and #1518) already shipped in 0.6.12. The other 46 are new here: 43 that change what you use or read, two to tests, and one that carried 0.6.12's release text onto main. If something breaks for you, please open an issue.

Before you upgrade

Restart the daemon after upgrading the CLI. The running daemon keeps its old build until it restarts: run rig daemon stop, then rig daemon start. One database migration runs on every upgrade: 117 adds an empty, Codex-only provider_account_readings table. It fills only with provider.usage_windows on (off by default), and then keeps each resolved Codex account's usage readings across a restart (#1535). There's no migration 116. If you're coming from 0.6.11 or earlier, read 0.6.12's notes first: its twelve migrations run on the first start.

The bundled openrig-core plugin goes from 0.1.13 to 0.1.14. The Claude activity-relay and context-collector hooks OpenRig writes into a project's .claude/settings.local.json now call the daemon's own Node by its absolute path instead of bare node, so a Claude session with an older PATH stops showing "node: command not found" after each reply. Existing bare-node entries are refreshed automatically, and your own wrappers are kept (#1545).

Behaviour that changed:

  • A rig name with a dot is refused before anything launches. tmux turns . into _ in a session name, so a seat in demo.v2 ran as …@demo_v2, where OpenRig couldn't reach it, and its tmux session was left behind. rig up, adding a member, a first-start retry, bundle install, expand and the preflight preview now refuse with a message naming the name tmux would create. An existing rig whose name has a dot gets this refusal when you add a member or retry its first start (#1500).
  • Pi seats now use their effort. An effort already in a spec reaches Pi as --thinking <level> from each seat's next managed launch, restore or handover (#1528).
  • rig restore-check can report caveats where it used to be green. Its hook check now tells apart a saved hooks resource, the core plugin's relay, and neither, and reads a broken or unknown plugin selection as a caveat. It still exits 0 (#1537).
  • Slack recovery scans more on its first start. Threads inside the seven-day window are scanned once from their root; replies that already landed are recognised and not delivered twice (#1536).
  • Managed Claude seats get your editor and display. Seats launched with a native permission mode now receive EDITOR, VISUAL, DISPLAY, XAUTHORITY and an absolute WAYLAND_DISPLAY, so Ctrl+G opens your editor and image paste can work. A running seat picks it up at its next launch (rig seat launch <seat> --fresh --stop --reason "<why>", or rig down then rig up --existing). A git commit without -m inside such a seat now opens your editor (#1546).
  • The shipped agent specs mark their role file as the seat's role. After a seat's next fresh launch, rig queue whoami --json reports its role instead of not-declared, and refocus names the role file (#1522).
  • New output, nothing removed: plain rig ps --nodes prints one model line per seat after the table (#1493); rig capture writes an input-box note to stderr, with stdout unchanged (#1490); a send whose caller has gone away is refused with caller_cancelled (#1513); and JSON gains modelObservation, inputBox, a provider row's signIn and reading-history fields, the Codex restart report's gate fields and new /api/attention update items (#1493, #1490, #1508, #1502, #1054).

Highlights

A Claude seat handed over in place waits for the new Claude. A fresh handover that reuses the old occupant's pane could read the old Claude's screen as the successor being ready, and type the handover packet into a shell before the new Claude had started. A ready result taken from that history is now checked against the current screen, so the packet waits. This corrects the common case; the cases it doesn't cover are in Known issues (#1553, reported in #1544).

Slack recovers what it missed in more places. Missed-message recovery used to read only the configured channel's top-level history, so a reply in an older thread or a message in a mapped channel was lost for good. It now also recovers the channel map's channels from when each was adopted, replies in tracked threads whose root was posted or which closed in the last seven days, and, on a machine without its own Socket Mode connection, each channel the hub has relayed to it, from that channel's first relayed event. A recovered reply lands as a late row in its thread and never answers a decision; the seat reads it and decides. A Slack rate limit now holds that method for every channel, or every thread, and is kept across a restart. rig slack status shows a line per channel and a thread line (#1536, reported in #739).

Pi and OMP seats. A Pi seat's effort is sent as --thinking on every managed launch and resume, and rig seat set-effort and rig seat effort now work for Pi: the report shows what was requested, saved, sent and, on Pi 0.99.0 or later, recorded (#1528, proposed in discussion [#1428]). An OMP seat whose turn ended with a typed transient provider failure (status 408, 429, 500, 502, 503, 504 or 529) can take an ordinary rig send retry instead of staying in needs-input; the error stays visible in its pane, and nothing retries on its own (#1550).

Move a seat to a new working folder. rig seat set-cwd <seat> --cwd <absolute-path> --reason <text> saves an existing seat's working folder for its next fresh launch or rebuild handover, and keeps its address, queue and history. It refuses when files already in the new folder would clash with the startup files the next launch writes. The running agent doesn't move: switch with rig seat launch <seat> --fresh --stop --reason "<why>" or a rebuild handover. rig seat status shows the saved folder (#1498, finishing #1154).

See which model a seat was actually using. rig ps --nodes, rig roster show and rig roster find show the model each seat's current agent was last seen using, beside its configured model, with where and when it was read. Claude and Pi readings come from the agent's own responses; Codex's come from its recorded turn settings. Missing or stale evidence reads unknown, never the configured model (#1493).

Sends that can't type later, and prompts read correctly. A rig send --wait-for-idle whose caller went away (Ctrl-C, or its own timeout) used to keep waiting in the daemon and type once the seat went idle; if no input has started, it now types nothing, then or later. The same holds for broadcast recipients not yet reached and for Enter-only sends (#1513). Claude Code 2.1.303's MCP-server approval menu now reads as needing input, so a restore doesn't call that seat ready and an ordinary send no longer pastes into the menu (#1549, reported in #1541). Codex's current "Trust this folder?" panel reads as a folder-trust gate instead of booting or ready, so startup text and Enter don't reach it (#1494). And an old numbered menu in a Codex pane's scrollback no longer blocks a send when a complete empty input box sits below the status row (#1548, reported in #1533).

Lighter on Linux. The daemon reads /proc itself, on a worker thread, instead of forking ps to list processes. The author measured CPU per listing dropping from about 69 ms to 8.4 ms, about 1.5 s of CPU a minute less at rest. macOS still uses ps (#1385).

Off by default

  • The refocus work packet stays off for both Claude Code and Codex. With OPENRIG_REFOCUS_WORK_PACKET=1, each field is now bounded: one-line summaries of about 160 characters with a rig queue show <id> pointer, at most 20 held and 10 next rows with a count of how many are shown, and section bodies cut at about 1,500 characters. There's no total size cap (#1542).

Dependency and install-script changes

  • The one-line installer no longer calls an unfinished setup a failed install. When rig setup (step 4) doesn't finish ready, it now ends with INSTALLED, SETUP NOT COMPLETE (exit N)., the CLI's path, whether the Node.js and SQLite check passed, a pointer to setup's "Some steps need attention" list, and "run rig setup again; the CLI does not need reinstalling". Setup's exit status is kept, and steps 1 to 3 keep their FAILED [n/4] line (#1547). The README and getting-started now pin the v0.6.13 script and describe this ending in place of FAILED [4/4]: the CLI is installed, rig setup lists what's left, and the fix is to run rig setup again rather than reinstall.
  • No dependency changes.

Everything else since 0.6.12

Seats, launch and restore.

  • A Claude launched through a wrapper script (a claude on PATH that execs the real binary) is now proven by its executable path, so a restored auto-mode seat whose banner has scrolled away resumes ready instead of needing attention (#1540, from #1477).
  • After a failed restore, a fresh launch that reports ready clears the old restore warning: rig ps and rig seat status stop showing attention_required from it, and rig seat clear-attention no longer refuses (#1527, part of #116).
  • A Claude Code or Codex seat showing a complete idle screen reads idle in JSON and filters even when the terminal repaints, instead of running (#1521).
  • When rig seat restart --keep-conversation stops at a Codex startup screen, the report names it (hook review, folder trust, model choice or update), says who decides, and points to rig capture and the recovery command (#1502).
  • A Pi or OMP seat's runner prints its READY line once per ready transition (#1401).
  • The node-detail API's targetPath names the file a guidance block is really in, and only while that file holds the block, instead of echoing the spec's declared target (#1523, part of #64).
  • The agent startup guide shows how to remove a leftover shared role block that a kernel installed before 0.6.5 may have left in CLAUDE.md or AGENTS.md (#1522).

Sends, wakes and the queue.

  • Parked rows for one seat whose wake timers fall due in the same pass now arrive as one message naming every row, instead of one interruption each. A single reminder, a custom --wake-message and repeating waits keep their own message (#1507).
  • When an agent closes an item addressed to a person and the follow-up can't be verified, the stuck-item finding goes to the agent that closed it instead of to the person (#1495, finishing #1177).
  • rig queue list --state "pending, in-progress" with a space after the comma now matches both states, as does the MCP rig_queue_list tool (#1501).

Status, the TUI and the web UI.

  • rig capture notes on stderr whether the text in a Claude Code or Codex input box looks typed or looks like a faint harness suggestion; stdout is unchanged, and --json and the MCP tool carry an inputBox field (#1490).
  • Each account row in rig provider status, its JSON and the TUI usage view shows a sign-in fact (usable, needs sign-in or unknown) from evidence a refresh already holds; a signed-in Claude login never reads better than unknown. A signed-out Codex login reports not_signed_in instead of rpc_error (#1508).
  • The TUI's Feed shows open updates addressed to a person as "No action needed" cards, critical first, even without a Slack delivery receipt, and no longer shows one twice (#1054, part of #800).
  • On Linux, opening a seat's terminal from the shared TUI viewed in a Herdr pane opens it in that Herdr instead of failing (#1356, reported in #1350).
  • With provider.usage_windows on, a Codex account's last reading, its reset and its last observed exhaustion survive a daemon restart and a login switch. After a restart, rig provider status shows the last reading as history ("kept from before the daemon restarted; not a current reading") with availability unknown until a fresh read; when a window's reset has passed, it shows an expectation that the window is full again, which is planning, never a reading. Rows add accountHistory, lastObservedExhausted, retained and savedProfile (#1535).
  • The web UI shows an aborted workflow as ABORTED, not COMPLETED (#1276).

Workflows. A redriven workflow no longer keeps its old completion time while it runs again (#1517, reported in #1516).

Commands and messages.

  • rig grow <rig> and rig remove <rig> <node> accept a rig name as well as its id; a name two active rigs share is refused with the candidate ids (#1407).
  • rig doctor's cmux warnings give a fix that works: set Socket Control Mode to "Automation mode" in cmux, then run rig doctor again (#1514).
  • The warning for an edited projected file gives remedies that exist: fold the edit into the spec, or move the file aside before the next projection. There's no --force flag (#1512).
  • rig provider prints the daemon's error message instead of a bare code, and rig compact's refusal for an unrecorded protected pane names rig reconcile-session <session> --no-launch (#1510).

Docs.

  • The README's "What OpenRig changes on your machine" says when Codex hook configuration is written, that your own Claude status line is kept, and which settings files are preserved (#1510).
  • Getting started and the README: one working Claude Code or Codex account is enough, and the rigs skill lists what starting OpenRig writes (#1539); on a Mac where you aren't an administrator, or where Homebrew belongs to another account, install Node.js with nvm in your own home (#1557).
  • The publishing guide says what the registry's checks decide: a submission whose name is taken is still received, with a hint; a team sharing a listed team's rig.yaml name passes with a notice for the maintainer; and listing is the maintainer's decision (#1557).
  • rig seat restart --keep-conversation --help says an adopted seat refuses with claimed_session and which conversation a restart can prove (#1509); the capability map explains comparing token use across machines with rig usage top (#1505).
  • Getting started lists Rig HQ, a community-built read-only viewer for rigs; OpenRig hasn't tested it (#1515).

Tests and repository checks. Regression checks tie a managed /compact to its hook effect and parked work to the refocus context (#1538); a test fixture no longer expires on a calendar date (#1559); and development main carries 0.6.12's versions and release text (#1558).

How it was tested

The overall result is mixed, not all green: most of what was tested worked, some first-user paths were only partly reached, refocus after a compaction failed, and the gaps below weren't run. These are the results we're publishing with.

  • The final package: built from 9eeb2e42: 7,707,335 bytes and 4,486 archive entries, sha256 e174be6e97617e03a50728549a2f505c5e8b129ed5b103fc32e9554792dd4f6c. Its contents were checked against the release's source before testing.
  • Compared with 0.6.12: the package is 7,707,335 bytes, against 0.6.12's 7,594,843.
  • The source: an independent read confirmed the release's source is exactly main at f5185f83 plus the version, the release text and the README and getting-started installer-ending text. That's a check of what's in the release, not of how it behaves.
  • Each change ran the repository's automated tests, merged into the main of its day, before it merged. On the release commit itself, 1,061 selected tests passed (830 daemon, 231 CLI), with the build, the generators, the CLI's type check, the audit and three packaged help screens.
  • Upgraded installs and teams at work:
  • Two current installs upgraded and recovered their core work, as reported by their operators.
  • A long-lived production install upgraded with its records preserved. After a daemon restart and a named restore, three seats resumed their original conversations with new turns. A deliberately stopped Codex seat stayed stopped, awaiting a decision, and the restore reported partially_restored. A fresh launch of that seat worked, but it isn't its original conversation.
  • Two Codex seats sent, replied and handed queue work to each other both ways.
  • Older installs weren't qualified: a 0.5.0-era install that hit the missing-pane send break in Known issues stays rolled back, and a 0.4.6 install's upgrade was held, not run. Nothing upgrades an older install automatically.
  • Across versions, both directions were exercised with an install on 0.6.11. From 0.6.11 to this release, send, receipt, handoff with the exact body, claim and closure were checked independently. The other direction was reported by its operator, with gaps in the raw output, and the senders' headers weren't checked.
  • Compaction and restore: on three installs, a manual Claude compaction and restore ran in the expected order. On two of them, someone had to answer approvals during preparation, and on one, the restored seat didn't read all of its onboarding and map. The automatic compaction threshold wasn't run.
  • Refocus after a compaction failed on Claude seats. On two installs its trace reported a gap; on the third, parked work got the general fallback. Codex refocus and the work packet weren't run.
  • A Pi seat launched, replied and was woken. What it did after the wake was mixed.
  • The first-user and registry checks:
  • Claude Code on a Mac: a useful team was reached. The Mac account was reused and reset, not new, and approvals were relayed and setup adapted along the way.
  • Codex on a Mac: the install and the kernel worked, but the team wasn't reached. The person declined full access, chose restricted network settings, then worked in their own session, which doesn't show a team working. That restricted path wasn't compared with 0.6.12.
  • The registry: a real public submission, check and close passed, done with help, using a public stand-in workshop and the published 0.6.12 validator. The check of this release's own folder was read from the screen, and a person's own submission wasn't run.
  • Compared with 0.6.12: a supplemental test suite gave the same result on both (163 of 165, with the same two failures). This covers the paths compared, not everything.
  • Not run on this release: the automatic compaction threshold and a working-day soak; Codex refocus and the work packet; a new Mac; native Windows; a shared-server restart on a Mac; packaged --verify within 30 seconds; Slack across two real machines; and two macOS users on one Mac (the test kept one daemon owner at a time). Other behaviour described in these notes comes from each change's own tests and reviews; several of them (#1549, #1548, #1494, #1502, #1553, #1550) were checked against recorded or modelled screens, not a live agent.

Known issues

  • On a Mac with more than one user account, a second user's rig commands can reach the first user's OpenRig. A second user's commands can reach the first user's daemon on its default port (7433). Running each user's daemon on its own port lets both people work, but it doesn't keep them apart. This release doesn't change it.
  • After an upgrade from an older install, some managed seats can refuse rig send with "Managed pane identity unavailable or changed; no input written." Nothing is typed into the seat. Seats that 0.5.x launched recorded their tmux session but not its pane, and 0.6.x needs the pane before it sends. This was seen upgrading one install from 0.5.0 to 0.6.12; that install stays rolled back, and older installs weren't qualified for this release. Not every older seat is affected: one that was adopted or rebound since can already hold its pane. The same code is in 0.6.12, so it isn't new in this release, and this release doesn't include a repair. Don't upgrade an install whose seats a 0.5.x or older OpenRig launched without checking that they still take rig send.
  • A fresh in-place handover of a Claude seat can still report ready early in some cases: a screen without a header whose process list can't be read, a Claude process seen but not proven, or a pane or screen that can't be read. Check that the successor read its packet (#1553, #1544).
  • Managed compaction failed in two of six runs on 0.6.12 (an approval stopped the recap save; the restore map arrived after the preparation deadline), and the code involved is unchanged here. On this release's tests a manual compaction ran in order on three installs, two of them needing approvals answered during preparation; the automatic threshold wasn't run. Confirm that a compaction ran by the restore request or the drop in context. Its command budget is still 600 characters, set from one Claude Code comparison (#1483).
  • After a compaction, refocus may not show the agent's current work. On this release's tests it failed on Claude seats: for active work its trace reported a gap, and for parked work it showed a general fallback. Codex refocus wasn't run. The work packet that would carry it stays off (#1542).
  • A restore can report partially_restored: on 0.6.12 and again on this release's tests, the seats meant to be running came back (three with their original conversations here), and a deliberately stopped seat was left awaiting a decision. Launching that seat fresh works, but it starts a new conversation.
  • Two plugin hook runs for the same seat aren't serialized, and the plugin's own manifest hooks still call bare node, so a Claude session with an older PATH can still show a Stop-hook error from them (#1344, #1475, #1545).
  • Slack recovery: missed replies in older open threads aren't caught up; slack-thread-coverage.json isn't pruned yet; a default-channel backlog can drain at up to about half its earlier rate while threads also need calls; and a downgrade to an older release and back inside a rate-limit window can let other channels call Slack during that window (#1536).
  • One Slack app across machines hasn't run on two real machines. Relayed events are trusted from the calling daemon, a relay that keeps being refused is retried with no limit, rig slack verify on the hub doesn't check relayed channels, and an answer from a seat other than the one the message reached still posts at the top level (#1436).
  • rig seat set-cwd checks the new folder once: a refusal can leave the folder created, and background work, such as a Claude seat's collector files or a managed compaction's restore map, can use the saved folder before you switch. Switch promptly, and don't run rig down/rig up or a fork handover first (#1498).
  • An OMP seat releases needs-input for any failure carrying one of the seven transient statuses, including an authentication failure that carries one; untyped errors and Pi seats keep attention (#1550).
  • A send to a seat can still be refused for a quoted permission prompt that isn't really waiting, outside the Codex layout #1548 covers; and a fresh running hook still sends into Claude's MCP approval menu (#1549).
  • rig policy current and plain rig ps don't show a policy stored with rig policy apply --seat; rig seat status and pod-aware export do (#1285).
  • env: and --env values aren't secret, members added later with rig grow can't carry a member-level env:, and rig up --env is not forwarded for flat-node specs or v1 bundles (#1294).
  • The draft-aware typing guard waits for idle inside the seat's delivery lease when the input box is empty, which can delay other work for that seat, and it can't guard text a person types in the instant before OpenRig types (#1481).
  • A Claude account's availability reads unknown with usage windows on, and its sign-in fact never reads better than unknown (#1504, #1508).
  • A restore starts seats one after another, so each seat that never draws its screen adds about the readiness timeout (#1359).
  • A delivery already in transport when its watchdog stops still completes, with its records (#1325).
  • The openrig-user skill's subscription section mentions apps that don't ship; don't look for them (#1450).
  • With bundle.services_enabled on, rig up <file>.rigbundle installs into the current folder when you don't give --target (#1474).
  • Carried from earlier releases:
  • rig seat restart --keep-conversation supports Linux only.
  • The rig status API can call a running rig blocked because of one seat that isn't running (#1141).
  • A Codex seat can keep reading as at its usage limit in a constructed screen case that hasn't been seen in a real session (#1185).
  • After rig scope slice create says it couldn't verify membership, the slice was kept. Check mission.yaml before creating it again (#1007).
  • The first-install check is limited: Claude Code reached a team on a reused Mac account, not a new Mac; Codex installed but didn't reach a team after the person chose restricted settings; and a person's own registry submission wasn't run.
  • A second session in the same folder can misread a running team; the operator can point a person without a display at the shared dashboard without saying how to open it; the skill installer may not select Claude Code when it detects another agent; rig doctor checks both harnesses; rig tui --shared attaches on the default tmux server; a team's first steps can still ask for approval; a seat waiting at a permission prompt shows no product notice of its own; a launched team writes into its working folder; a resumed Claude seat can't be confirmed after /clear, an in-process /resume or a hand-started process; Codex team seats don't ask before lifecycle commands; the send gate trusts the latest recorded hook; and after a restart rig status shows Kernel: skipped.
  • A Claude Code seat whose permission request was approved automatically can still read "needs input"; the Codex case is fixed (#943, #896).
  • Slack recovery doesn't cover private channels or direct messages.
  • Older issues: the starter's Codex reviewer needs a Codex newer than 0.145; a restore can report a problem with a seat that works (#273); a claude alias defined only in a nushell rc doesn't resolve; after a reboot, start the daemon with rig daemon start and bring your rig back with rig up <name> --existing; the web UI's file preview runs scripts, so preview only files you trust; browser access isn't complete browser isolation; and Codex network inside the sandbox hasn't been checked with real logins, managed policy bundles or on Linux.

Thanks

To the people whose pull requests are in this release:

To the person whose earlier work was finished here: @Aschenbath (#1154 in #1498, #1177 in #1495, and the Feed's critical-first ordering from #1055 in #1054).

To @dmelo, for building Rig HQ.

And to the people whose reports shaped fixes here:

Source: README.md, updated 2026-10-20