| Name | Modified | Size | Downloads / 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 indemo.v2ran 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. Aneffortalready in a spec reaches Pi as--thinking <level>from each seat's next managed launch, restore or handover (#1528). rig restore-checkcan 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,XAUTHORITYand an absoluteWAYLAND_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>", orrig downthenrig up --existing). Agit commitwithout-minside 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 --jsonreports its role instead ofnot-declared, and refocus names the role file (#1522). - New output, nothing removed: plain
rig ps --nodesprints one model line per seat after the table (#1493);rig capturewrites an input-box note to stderr, with stdout unchanged (#1490); a send whose caller has gone away is refused withcaller_cancelled(#1513); and JSON gainsmodelObservation,inputBox, a provider row'ssignInand reading-history fields, the Codex restart report's gate fields and new/api/attentionupdate 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 arig 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 withINSTALLED, 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 theirFAILED [n/4]line (#1547). The README and getting-started now pin thev0.6.13script and describe this ending in place ofFAILED [4/4]: the CLI is installed,rig setuplists what's left, and the fix is to runrig setupagain rather than reinstall. - No dependency changes.
Everything else since 0.6.12
Seats, launch and restore.
- A Claude launched through a wrapper script (a
claudeonPATHthatexecs 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 psandrig seat statusstop showingattention_requiredfrom it, andrig seat clear-attentionno longer refuses (#1527, part of #116). - A Claude Code or Codex seat showing a complete idle screen reads
idlein JSON and filters even when the terminal repaints, instead ofrunning(#1521). - When
rig seat restart --keep-conversationstops at a Codex startup screen, the report names it (hook review, folder trust, model choice or update), says who decides, and points torig captureand 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
targetPathnames 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
roleblock that a kernel installed before 0.6.5 may have left inCLAUDE.mdorAGENTS.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-messageand 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 MCPrig_queue_listtool (#1501).
Status, the TUI and the web UI.
rig capturenotes 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--jsonand the MCP tool carry aninputBoxfield (#1490).- Each account row in
rig provider status, its JSON and the TUI usage view shows a sign-in fact (usable,needs sign-inorunknown) from evidence a refresh already holds; a signed-in Claude login never reads better thanunknown. A signed-out Codex login reportsnot_signed_ininstead ofrpc_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_windowson, 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 statusshows 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 addaccountHistory,lastObservedExhausted,retainedandsavedProfile(#1535). - The web UI shows an aborted workflow as
ABORTED, notCOMPLETED(#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>andrig 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 runrig doctoragain (#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
--forceflag (#1512). rig providerprints the daemon's error message instead of a bare code, andrig compact's refusal for an unrecorded protected pane namesrig 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
rigsskill 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.yamlname passes with a notice for the maintainer; and listing is the maintainer's decision (#1557). rig seat restart --keep-conversation --helpsays an adopted seat refuses withclaimed_sessionand which conversation a restart can prove (#1509); the capability map explains comparing token use across machines withrig 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, sha256e174be6e97617e03a50728549a2f505c5e8b129ed5b103fc32e9554792dd4f6c. 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
f5185f83plus 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
--verifywithin 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
rigcommands 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 sendwith "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 takerig 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 olderPATHcan 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.jsonisn'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 verifyon 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-cwdchecks 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 runrig down/rig upor 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 currentand plainrig psdon't show a policy stored withrig policy apply --seat;rig seat statusand pod-aware export do (#1285).env:and--envvalues aren't secret, members added later withrig growcan't carry a member-levelenv:, andrig up --envis 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
unknownwith usage windows on, and its sign-in fact never reads better thanunknown(#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-userskill's subscription section mentions apps that don't ship; don't look for them (#1450). - With
bundle.services_enabledon,rig up <file>.rigbundleinstalls into the current folder when you don't give--target(#1474). - Carried from earlier releases:
rig seat restart --keep-conversationsupports Linux only.- The rig status API can call a running rig
blockedbecause 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 createsays it couldn't verify membership, the slice was kept. Checkmission.yamlbefore 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 doctorchecks both harnesses;rig tui --sharedattaches 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/resumeor a hand-started process; Codex team seats don't ask before lifecycle commands; the send gate trusts the latest recorded hook; and after a restartrig statusshowsKernel: 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
claudealias defined only in a nushell rc doesn't resolve; after a reboot, start the daemon withrig daemon startand bring your rig back withrig 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:
- @ivanenev, in their first contributions;
- @1solomonwakhungu, @AdamWhitehurst, @alxledesma, @Nikhi00718, @rudycelekli, @Sethhhhhhh, @smota and @Vaishnavi220506.
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:
- @aanestesia (#514);
- @AdamWhitehurst (#1350, #1477, #1541 and #1544);
- @alexveli1 (#227);
- @bpamiri (#1530 and #1533);
- @d3fvxl (#762 and #800);
- @Hexgunner69 (#116);
- @reisalbuquerque (#64);
- @Vaishnavi220506 (#1516);
- @z4cc (#739).