OpenRig

What's new

Every change in each OpenRig release, with the pull request behind it.

Latest release

OpenRig 0.7.15

OpenRig 0.7.15 is a steadiness release. When an OpenRig update changes its own Codex hooks, OpenRig now renews their approval itself, unless you've made your own choice about them, so your Codex agents don't stop at Codex's hook review. A slow daemon start gets three minutes before it's reported pending, a restart now picks up the saved conversation of an agent whose saved startup details are missing instead of stopping, and Slack link previews are off by default. There are fixes across delivery, Slack replies, terminal views and connected agents, many from people using OpenRig.

4 added16 changed9 fixed

· 9 people thanked · Release notes

Highlights

  • AddedWhen an OpenRig update changes its own Codex hooks, OpenRig renews their approval itself, so Codex agents don't stop at Codex's hook review; your own hook choices still get the review. A community contribution.

    OpenRig renews its own changed Codex hook approvals. When a new openrig-core changes one of OpenRig's six Codex hook declarations, the launch that installs it renews those approvals from OpenRig's own record instead of stopping at Codex's hook review. This runs at daemon start in the daemon's Codex home, when hooks are on and a Codex seat selected openrig-core, and at each such seat's launch in its own Codex home. It renews only when the installed plugin matches the shipped one and every current approval matches OpenRig's saved record. A person's own choice in any layer OpenRig reads keeps the review; profile files passed with -p aren't read. No real Codex seat ran in its tests.

    #3143 · thanks @KayhuskLink

  • ChangedA slow daemon start now gets three minutes, not 20 seconds, before it's reported pending, and rig daemon start shows its progress about every 20 seconds.

    A slow start: rig daemon start now gives the daemon child it started a 180-second readiness budget, instead of 20 s, and prints "Waiting for daemon child <PID> readiness (…s elapsed; 180s limit)" about every 20 s. A quick start still returns at once, and a child that exits ends the wait. Let the wait finish. The budget bounds scheduling: synchronous work can run past the budget. A child still not ready when that budget is exhausted is reported pending as before: "Daemon startup is pending after the readiness deadline". Readiness remains unconfirmed; the child keeps running and the startup reservation is retained. Inspect the address and log it prints, and don't start it again until its restart steps are done: stop the named child PID and wait for it to exit, inspect daemon-start.lock, and only when both recorded launcher and child PIDs are absent, archive the lock and run rig daemon start. rig daemon stop cannot stop that unpublished child.

    #3118Link

  • ChangedIn a rig with pods, restore now tries an agent's saved conversation when its saved startup details are missing, instead of stopping.

    For an eligible seat in a rig with pods that restore starts in its own pane, a resume token with no saved startup context now lets restore try the saved conversation with an empty plan. It records the startup_context gap. A successful resume with that gap makes the rig read partially_restored; a missing conversation or failed start keeps its own status. No saved startup plan is replayed or saved startup-context row written; the adapter's ordinary bootstrap and existing skill restoration still run. An external CLI attachment is kept, no-token seats still wait for a decision, and legacy seats are unchanged. restore-check reads an eligible seat with a token yellow; for one with no saved context and no eligible token, it points to the read-only rig up <rig> --existing --plan preview.

    #3177Link

  • ChangedSlack link and media previews on posts to a person are off by default; run rig slack setup --unfurl on to turn them back on. A community contribution.

    Slack previews: posts to a person no longer show link and media previews by default. An existing install stops showing them after its next connector rewire or daemon restart. Run rig slack setup --unfurl on to turn them back on; earlier previews aren't removed.

    #3157 · thanks @dajiaohuangLink

Before you upgrade 4

  • ChangedStop the daemon, back up the database, install 0.7.15, then start the daemon again; your agents keep running through the restart.

    Stop the daemon, back up the database, install 0.7.15, then start the daemon. Your agents keep running through a daemon restart; don't use rig down, which ends them.

    Link

  • ChangedOne database update runs before the daemon listens. Going back to 0.7.14 after it isn't established, so keep the backup. A community contribution.

    One migration runs before the daemon listens. Migration 165 adds four columns and two indexes to activity_grants, binding a runner's activity credentials to its actual launch. Going back to 0.7.14 after it isn't established; keep the backup.

    #3060 · thanks @smotaLink

  • ChangedA slow daemon start now gets three minutes, not 20 seconds, before it's reported pending, and rig daemon start shows its progress about every 20 seconds.

    A slow start: rig daemon start now gives the daemon child it started a 180-second readiness budget, instead of 20 s, and prints "Waiting for daemon child <PID> readiness (…s elapsed; 180s limit)" about every 20 s. A quick start still returns at once, and a child that exits ends the wait. Let the wait finish. The budget bounds scheduling: synchronous work can run past the budget. A child still not ready when that budget is exhausted is reported pending as before: "Daemon startup is pending after the readiness deadline". Readiness remains unconfirmed; the child keeps running and the startup reservation is retained. Inspect the address and log it prints, and don't start it again until its restart steps are done: stop the named child PID and wait for it to exit, inspect daemon-start.lock, and only when both recorded launcher and child PIDs are absent, archive the lock and run rig daemon start. rig daemon stop cannot stop that unpublished child.

    #3118Link

  • ChangedThe openrig plugin carries the CLI's version, 0.7.15, and openrig-core moves to 0.1.30.

    The plugins: the openrig plugin carries the CLI's version, 0.7.15. openrig-core moves to 0.1.30, because its skills changed.

    Link

Also in this release 22

Under load 4

  • AddedThe slow-operation log names more of what a slow queue call or nodes read was doing.

    The slow-operation log adds three queue sites and three selected steps of an ordinary nodes read: nodes.inventory.build, nodes.inventory.activity_sync and nodes.inventory.terminal_work. These nodes records are written after a slow call completes; a missing record does not rule out unfinished work or work outside those steps. This changes no behaviour.

    #3100, #3138Link

  • ChangedWhen OpenRig retries a wake, it looks for refused prompts among open tasks instead of scanning the whole history on every tick.

    The wake ladder reads its prompt-refusal candidates from the open rows, instead of scanning the whole transition log on every tick. It returns the same rows. This removes one repeated scan; it isn't a measured fix for every stall.

    #3098Link

  • ChangedThe execution view reads the queue in steps and lets other work run between them, so a mission filter that matches few tasks no longer holds up the daemon.

    The execution view's candidate read steps through the queue in windows and, on its cooperative path, yields to the event loop between them, so a mission filter that matches few rows no longer holds the loop for a whole history walk. One large row, or the history count, can still take time. Inside a transaction, on a memory or temporary database, or on a non-WAL file, the candidate read keeps its synchronous fallback.

    #3122Link

  • ChangedSnapshot refreshes share process listings between seats where they can. A community contribution.

    Snapshot refreshes share process listings where each seat's order and the 2 s freshness allow; each seat still gets its two ordered observations and its own fallback. The reduction is derived from the source, not measured.

    #3154 · thanks @dajiaohuangLink

Restore and seats 3

  • Addedrestore-check and a full restore warn when a snapshot's named Codex profile has since been cleared from the seat; restore uses the current one. A community contribution.

    restore-check and a full restore warn when a snapshot recorded a named Codex profile that the current seat has cleared; restore uses the current selection. Nothing is refused.

    #3155 · thanks @dajiaohuangLink

  • ChangedWhen rig seat restart --keep-conversation can't restart a seat whose tmux session is gone, it gives you the rig launch command that brings it back. A community contribution.

    When rig seat restart --keep-conversation refuses a recoverable seat whose tmux session is gone, it names the way back: rig launch '<rig>' '<node>' (add --plan to preview).

    #3135 · thanks @KayhuskLink

  • FixedA context-usage watchdog watches its seat's current agent, not an earlier one, and skips a tick it can't place instead of stopping.

    A context-usage watchdog reads its own seat's current occupant, not an archived generation's. A context watch whose seat can't be pinned, or has no recorded tenure, skips that tick with its reason instead of ending.

    #3027, #3139Link

Delivery and people 4

  • AddedSlack link previews on posts to a person are now a setting, rig slack setup --unfurl on|off, and they're off by default. A community contribution.

    Slack previews on posts to a person are a setting: rig slack setup --unfurl on|off, and rig slack status shows which is in effect from the connector's next rewire. The default is off; see "Behaviour that changed".

    #3157 · thanks @dajiaohuangLink

  • ChangedIn a seat with the draft-aware guard, OpenRig checks again for typing just before an automatic paste and holds the message if someone's active, as its own tests show; it isn't yet checked with the real programs. A community contribution.

    Right before an automatic paste into a seat with the draft-aware guard, OpenRig re-checks: it holds the paste after recent client activity, re-reads the input after a short wait, and holds when tmux can't be read. The message is held and retained; rig seat held-messages shows it. An ordinary guarded paste waits about 300 ms longer. This narrows #3076's window; it doesn't close it. This is shown by the change's own tests; it's not yet checked with the real programs on this release.

    #3097 · thanks @billbenettiLink

  • FixedA terminal seat whose tmux session has a different name now gets a send's exact text, and a queued wake no longer types OpenRig's From/To lines into its shell. A community contribution.

    A terminal seat whose tmux session runs under another name gets the exact text of a send, and a queued wake no longer types OpenRig's From/To envelope into its shell.

    #3074 · thanks @Nikhila-Dhevi-RLink

  • FixedA Slack answer to a reply in an older thread now posts back into that thread instead of as a new message. A community contribution.

    When the arrival note is recorded before the answer is routed, an answer to a reply in an older Slack thread posts back into that thread, not as a new top-level message; see Known limits for when it posts top-level. Only the conversation's newest thread answers a parked question, as before.

    #3120 · thanks @zichen0116Link

Connected assistants 4

  • ChangedAn agent that asks rig_team for its team by display name is told to leave rigId out, and a hosted member with no wake trigger is told when it picks up work.

    An assistant that passes its team's display name as rig_team's rigId is told to leave rigId out to see its own team, and a hosted member with no wake trigger is told it picks up work when its person asks, or on a schedule they set.

    #3104Link

  • ChangedAn external grant that works its own inbox is told only about the tools it's offered.

    An external grant that works its own inbox is told only about the tools it's offered.

    #3140Link

  • ChangedThe openrig plugin needs Claude Code 2.1.119 or later; on earlier versions, with its seat setting left blank, the skill loads but the agent has no OpenRig tools.

    The openrig plugin needs Claude Code 2.1.119 or later. On earlier versions, with the plugin's OpenRig seat setting left blank, Claude Code drops its MCP server: the skill loads, but the agent has no OpenRig tools.

    #3137Link

  • FixedThe TUI keeps connected agents' check-in lines when a rig's seat list can't be read, and shows the error beside them.

    The TUI keeps connected assistants' check-in lines when a rig's seat inventory can't be read, with the error beside them.

    #3105Link

Codex, runners and harnesses 6

  • ChangedRunner activity reports are tied to the launch OpenRig started, and a replacement's start revokes the old one's access. A community contribution.

    Runner activity grants are bound to the actual launch, and the replacement's activation revokes its predecessor's grant. A grant made before this release stays tied to the seat's occupant until then. A grant that can't be bound never blocks a launch or restore. This attributes reports to the run OpenRig selected; it doesn't prove a runner's identity.

    #3060 · thanks @smotaLink

  • FixedA Codex seat's resume command in the node inventory and detail panel now matches what a real resume runs, with a label when the launch differed. A community contribution.

    A Codex seat's resume command in the node inventory and detail panel is built from what a real resume uses, with a label when the recorded launch differs. Workspace options that aren't recorded per launch can still read as a match.

    #3043 · thanks @AummadourLink

  • FixedTerminal tiles find tmux again when its saved path is gone, instead of exiting until a daemon restart. A community contribution.

    Terminal views find tmux again when its cached path is gone, instead of tiles exiting 126 until a daemon restart.

    #3129 · thanks @vanducngLink

  • FixedA SKILL.md with Windows (CRLF) line endings is now found and reaches the seat's managed plugins. A community contribution.

    A SKILL.md with CRLF line endings is discovered and reaches a seat's managed plugin loadout.

    #3153 · thanks @dajiaohuangLink

  • Fixedrig context work-install --mission warns when the mission doesn't exist.

    rig context work-install --mission <missing> warns that the mission doesn't exist, and missionRoot reads null; the exit code is unchanged.

    #3141Link

  • FixedOpenRig's own transitions no longer count toward ceremony amplification, and the post-restore audit message matches the restore skill. A community contribution.

    OpenRig's own transitions (daemon@kernel and system:*) no longer count toward ceremony amplification, and the post-restore audit message matches the restore skill.

    #3124, #3127 · thanks @billbenettiLink

Behaviour that changed 1

  • ChangedRestoring an agent with a resume token but no startup context now tries its saved conversation, and reads partially_restored when it works, instead of stopping as not restorable.

    Restore of an eligible seat with a resume token and no startup context now tries its saved conversation, and a successful resume reads partially_restored. It used to stop with "Harness not started: no startup context" and read the rig not restorable.

    #3177Link

Known limits: 12 for this release. Read them
  • Daemon start: the longer readiness budget doesn't identify or cure the cause of a slow start, synchronous work can run past the budget, and a child still not ready when that budget is exhausted stays pending. (#3118)
  • Daemon memory: 0.7.14's comparison under load established neither equal memory nor a regression against 0.7.13. This release makes no memory claim.
  • Restore's overall result: a rig can still read fully_restored while a seat restore didn't start (one claimed or added after its roster or snapshot was recorded), or a seat kept in its external CLI attachment, goes unnamed. A seat restore left as a bare shell after "Harness not started" still counts as running in rig ps. restore-check can also say "Restore tries …" for a self-attached member that restore leaves out; that member isn't restored.
  • Draft-aware delivery (#3076): typing after the guard's final check and before the paste can still leave the notice beside the person's draft. In the tested append-mode schedule Enter was refused and nothing was submitted or deleted; this is not a guarantee for every interleaving. The prior conditional-send Enter-window case is unchanged: characters typed during OpenRig's last checks before Enter submitted with OpenRig's text.
  • Draft-aware delivery with a wide Claude Code footer: with Claude Code's full-width auto-update-failure footer on screen (seen at 200x50), a seat in the opt-in draft-aware typing mode whose input is empty can hold an ordinary send instead of delivering it. The message is kept, not lost, and rig seat held-messages shows it. On 0.7.14, the clipped footer at 80x24 didn't do this.
  • Draft-aware delivery to a busy Codex seat: on Codex (seen with 0.167.1 and 0.167.2), a send to a seat in the opt-in draft-aware typing mode while it's busy can be pasted into its input without Enter. The message isn't delivered, and it isn't kept for rig seat held-messages. A deliberate send reports failed, and its text stays in the seat's input box. This was seen on 0.7.12 and 0.7.14, and there's no fix for it in this release.
  • Seats at the edit floor can stop for approval, OpenRig's own commands included. A Claude seat running at the harness's edit floor can ask for approval before shell commands, including OpenRig's own read-only rig commands such as rig whoami and rig queue show. Choosing a built-in policy such as standard when your team is set up doesn't change that at launch: the plan shows launch_posture=floor. Each prompt waits until someone approves it, in the seat or through your own agent, so a team can stall while nobody answers.
  • Approvals your agent recorded: In one Claude setup, your agent recorded approvals it made itself as "Person approved". Those entries alone do not establish your approval; check the conversation to see who actually decided.
  • A new Claude agent's startup text can stay unsent in its input box while the seat reads ready. Press Enter in its terminal.
  • Linked Codex config files: when a Codex seat's config.toml or hooks.json is a symbolic link, OpenRig records its hook trust under the link's target, as in 0.7.14. A change to key it by the file's own name isn't in this release, and such a seat may be asked to review hooks again. With a linked config.toml, OpenRig can also miss a setting stored for it that turns OpenRig's hooks off, and set those hooks up anyway when it moves them into hooks.json. (#3078)
  • Slack reply threads: recording the arrival note is best effort: a failed write is not retried and that answer posts top-level. Creating the message and recording the arrival note are separate writes, so a notification can also be posted before the note is recorded, with the same top-level outcome. The person's message is kept. (#3120)
  • From 0.7.14: its known limits still apply, except where this release changes them. #3105 fixes the TUI tables' dropped check-in line, and #3097 narrows the draft-aware paste window described above, as its own tests show. 0.7.14's other limits weren't re-checked for this release unless named here.

Thanks 9

Thank you to everyone whose work is in this release: @dajiaohuang, @Kayhusk, @billbenetti, @Aummadour, @smota, @vanducng, @zichen0116 and @Nikhila-Dhevi-R.

Thanks also for the reports behind these fixes: @Aummadour (#2989), @vanducng (#3128), @Alejandro-SJ (#2990), @billbenetti (#2976) and @Kayhusk (#3131).

Earlier releases

OpenRig 0.7.14A polish release with a smoother first setup: before your first team starts, OpenRig's operator agent now checks that you're signed in to each coding agent the team uses, and if one isn't, it tells you before launch and lets you sign in or adapt the team.8 added11 changed13 fixed

10 people thanked · Release notes

What you can do now

Your own subscriptionsImproved

Before your first team starts, setup and rig doctor say which logins it needs, and the operator lets you choose if one is missing.

Details

The queueImproved

rig queue list filters exactly by --tag, --mission and --slice, and several tags must all match. Thanks to @Aummadour.

Details

Terminal tilesImproved

rig terminal open --provider herdr reuses a live Herdr workspace, and Rex tiles show each agent and what it's doing. Thanks to @Kayhusk and @Tankard.

Details

Before you upgrade 4

  • ChangedStop the daemon, back up the database, install 0.7.14, then start the daemon again; your agents keep running through the restart.

    Stop the daemon, back up the database, install 0.7.14, then start the daemon. Your agents keep running through a daemon restart; don't use rig down, which ends them.

    Link

  • ChangedThree database updates run before the daemon listens, and one can take a while on a large database. Going back to 0.7.13 after them isn't established, so keep the backup.

    Three migrations run before the daemon listens. Migration 163 adds the network_installations table and four columns to network_bindings. Migrations 164 and 166 build indexes. The author's measurement of 166 took 3.47 s on 28,976 rows, not a real installation's size, so a large database can take longer. The write overhead, and going back to 0.7.13 after these three migrations, aren't established; keep the backup.

    #3007, #3008, #3090Link

  • ChangedIf the start is reported pending, don't start the daemon again until you've followed the restart steps the message prints; rig daemon stop can't stop that child.

    If the start is reported pending: the CLI waits 20 s, then may print "Daemon startup is pending after the readiness deadline". Readiness remains unconfirmed. It leaves the child running and the startup reservation retained, without recording the daemon. Inspect the address and log it prints. The child may later answer, and status can then report it running, but that does not finish this start's recording or release its reservation. Don't start it again until the steps below are done. The message's restart steps stop that child and clear the reservation: stop the named child PID and wait for it to exit, inspect daemon-start.lock, and only when both recorded launcher and child PIDs are absent, archive the lock and run rig daemon start. On a large database the new start can be reported pending again; reaching a recorded start this way hasn't been tested. rig daemon stop cannot stop that unpublished child.

    Link

  • ChangedThe openrig plugin now carries the CLI's version, 0.7.14; openrig-core stays 0.1.29.

    The openrig plugin carries the CLI's version, 0.7.14; openrig-core stays 0.1.29.

    Link

Also in this release 25

Under load 5

  • ChangedNode reads from rig ps --nodes, the TUI and busy agents now take turns, one step at a time, instead of arriving as one burst.

    Node reads (rig ps --nodes, the TUI, several agents at once) take turns, one step at a time. In the change's own tests, health checks and queue reads were no longer held behind a whole burst. A comparison under load didn't attribute a gain to this change: health checks and queue reads were faster for the release as a whole, rig ps --nodes showed no change, and sends were inconclusive.

    #3101Link

  • ChangedQueue listings over a long history use indexes instead of scanning all of it.

    Bounded queue listings over retained history use indexes for their ordering and for live and archived owner notifications.

    #3090Link

  • ChangedCodex agents checked in the same readiness poll share process listings instead of each reading their own. A community contribution.

    Codex seats re-checked in one readiness poll share process listings where each seat's observation order and the 2 s freshness allow; each keeps its own later observation and its own fallback.

    #3061 · thanks @KayhuskLink

  • ChangedNew tmux servers raise their open-file limit, so many panes and viewers are less likely to run out.

    New tmux servers raise their soft open-file limit to 8,192 or the hard limit where they can, keeping an already higher limit. This makes descriptor exhaustion less likely as panes and viewers add up; servers already running keep their limits.

    #3070Link

  • FixedAn agent that hands work to other agents gets one ongoing reminder per agent about its unclaimed work, not one per task. A community contribution.

    A delegation parent gets one standing notice per child seat for unclaimed rows, not one per row, and held work gets its notice back when its typing hold clears.

    #3049, #3082 · thanks @billbenettiLink

Your team and the people it works for 6

  • AddedAn agent connected through a grant service (experimental) reaches a seat by the name your team shows, and a wrong or ambiguous name says so.

    An assistant connected over MCP reaches a seat by its plain name, stored under the seat's actual session; an unknown name, or one several seats match, says so.

    This is for hosted agents connected through a grant service (experimental); seats OpenRig launches behave as before.

    #3088Link

  • AddedHosted members (experimental) now appear, with their check-in, in rig ps, rig_team and the TUI.

    Connected assistants appear, with their check-in, in rig ps, rig_team and the TUI's tables, and their person sees plain tool titles.

    #3057, #3058, #3092Link

  • AddedA team your agent hands work to knows how to ask you a question, and your answer wakes it.

    A team your agent hands work to knows how to ask you a question, and your answer wakes it. A click on an ask with several questions records that choice; the ask stays open until the last one.

    #3059, #3045Link

  • AddedThe skill-only openrig plugin for Claude's plugin directory follows handed-on work and keeps its reply route.

    A skill-only edition of the openrig plugin, for Claude's plugin directory, follows handed-on work and keeps its reply route.

    #3056, #3075Link

  • ChangedWhen nobody is registered, setup and the operator offer to register you as the team's person, and only your yes registers you.

    When the readable person registry holds nobody, rig daemon start and rig gateway participants tell the setup agent to offer registration. The kernel operator is taught to include that offer in its greeting and register only on your yes.

    #3041, #3071Link

  • FixedA pairing request's description of itself is now quoted wherever it's shown.

    A pairing request's description of itself is quoted wherever it's shown.

    #3067Link

Fixes 10

  • FixedAn ordinary send no longer types into an open /model picker in Claude Code or Codex: it's refused until you close the picker, though this hasn't been checked with the real programs yet.

    An ordinary send is refused as needing input while an open Claude Code or Codex /model picker is positively identified; nothing is typed. Close the picker before trying to deliver the message. This is shown by the change's own tests; it hasn't yet been checked with the real Claude Code and Codex programs on this release.

    #3083Link

  • FixedResuming a Codex agent's conversation, including with rig up --existing, no longer adds OpenRig's guidance to your tracked AGENTS.md on Codex 0.164.0 or later in a rig with pods.

    On a resume of a Codex seat's own conversation in a rig with pods, including rig up --existing, OpenRig avoids adding missing guidance blocks to the repository's tracked AGENTS.md when Codex is 0.164.0 or later, no guidance file or developer instructions are configured, and the configuration and block sources can be read.

    #3039Link

  • FixedWith automatic prompt answering on, Claude Code's gated-grants trust check is never answered for you. A community contribution.

    With recovery.auto_drive_provider_prompts on, Claude Code's gated-grants trust check is never answered for you, and the plain trust prompt is answered "Yes".

    #3073 · thanks @billbenettiLink

  • Fixedrig broadcast now shows a held recipient as retained, not sent.

    rig broadcast prints a held recipient as retained, not sent.

    #3054Link

  • FixedErasing an account also removes OpenRig's own wakes and notices for its agents.

    Account erasure also removes OpenRig's own wakes and notices for that account's seats.

    #3089Link

  • FixedA snapshot without sessions reports a clear blocker instead of crashing, and a retried import recovers the original rig. A community contribution.

    A snapshot without sessions returns its invalid_snapshot_data blocker instead of throwing a TypeError; the restore still stops there. A retried no-launch import recovers the original rig by its operation ID.

    #3069, #3042 · thanks @cavalcanticampos, @KayhuskLink

  • FixedA rebuilt agent's briefing lists only the newest three older recaps by default. A community contribution.

    A rebuilt briefing limits optional superseded recap paths to the newest three by default when one folder covers that history; the current recap and all artifact records remain. Other layouts keep the full list, and output.rebuild_recaps set to 0 lists all paths.

    #3055 · thanks @KayhuskLink

  • Fixedrig compact --state names the input check that stopped a managed compaction, and the TUI graph shows an unknown agent as unknown.

    rig compact --state names the input check that stopped a managed compaction, and the TUI's graph shows a seat the daemon reads as unknown as unknown.

    #3053, #3046Link

  • FixedSetting a context-pressure threshold explains an environment override that flips it, and rig workflow validate warns that harness pins aren't checked. A community contribution.

    Setting a context-pressure threshold explains when an environment override inverts the pair, and rig workflow validate warns that harness pins aren't checked against seats.

    #2567, #3102 · thanks @Totopo27, @cavalcanticamposLink

  • FixedThe config browser now shows each setting's type, choices, range and format. A community contribution.

    The config browser's entries say each setting's type, choices, range, format and write route.

    #3050 · thanks @w4rc0nLink

Experimental 2

  • Addedrig network is experimental and unsupported, and its connector runs even with nothing bound.

    rig network is experimental, unsupported and at your own risk. Its connector isn't inert: the daemon starts it, sweeps leftover credential folders and schedules local rounds even with no binding.

    #3007, #3084Link

  • AddedA grant service can hold back only new work under its fair-use limit, and an app can read what needs a person by link. Experimental.

    A grant service can hold back only new work under its fair-use limit, and an app can read what needs a person, and the answers to it, by link.

    #3048, #3008Link

Behaviour that changed 2

  • ChangedNode responses are no longer one snapshot, and in a burst each comes a little later: about 43 ms against 21 ms median.

    Node reads: a nodes response is no longer one snapshot across its steps, and in a burst each nodes response comes later: about 43 ms against 21 ms median in a 24-request burst. One very large rig is still one step.

    #3101Link

  • ChangedAn agent connected through a grant service now gets one of three clear errors when the name doesn't resolve: ambiguous, not found or unchecked.

    An assistant naming a seat now hears three errors: destination_ambiguous (several seats match; the candidates are listed), destination_not_found (no seat it can reach has that name) and destination_unchecked (the team couldn't be read; try again).

    #3088Link

Known limits: 7 for this release. Read them
  • Queue listings: the new indexes aren't a cure for every stall. Listings of active work showed no gain, one case was slower, and writes weren't measured. (#3090)
  • Daemon memory: in a before-and-after comparison under load, the daemon's resident anonymous memory and its memory when idle afterwards had medians about 23-25 MiB higher on 0.7.14 than on 0.7.13, but the two versions' runs overlapped. Neither equal memory nor a regression is established.
  • Draft-aware delivery (#3076): an automatic OpenRig notice can still be left beside a draft started during delivery. In the reproduced paste-window cases the person's draft stayed intact and no Enter was sent, but OpenRig's text stayed in the input. Those cases don't cover a later window. On a conditional send, one that names the conversation it expects, an isolated test with a scripted terminal showed characters typed while OpenRig ran its last checks before Enter submitted together with OpenRig's text, and the send reported success. The same test reproduces it on 0.7.13. It hasn't been tested with a real client or model.
  • The TUI's tables can drop a connected assistant's check-in line when its rig's seat inventory can't be read; rig roster still prints it. (#3105 isn't in this release)
  • Repository guidance on restore: rigs without pods, old or unknown Codex versions, configured guidance and unreadable configuration keep the existing file path. Fresh, fork and handover launches are outside this resume fix. Existing managed blocks may still refresh, and the seat-skills line still belongs to the file writer; check git status. A block whose source can't be read is reported missing.
  • Linked Codex config files: when a Codex seat's config.toml or hooks.json is a symbolic link, OpenRig records its hook trust under the link's target, as in 0.7.13. A change to key it by the file's own name isn't in this release, and such a seat may be asked to review hooks again. With a linked config.toml, OpenRig can also miss a setting stored for it that turns OpenRig's hooks off, and set those hooks up anyway when it moves them into hooks.json. (#3078)
  • From 0.7.13: its known limits still apply, except where this release fixes them. The runtime fixes cover adding missing guidance on the eligible Codex resumes described above (#3039) and the unquoted pairing description (#3067). The fix for recognized model pickers (#3083) is shown by the change's own tests and hasn't yet been checked with the real programs on this release. This release also changes the operator-first registration (#3041, #3071) and pre-launch login guidance (#3077). In a few test runs with real agents, the operator offered registration once in its greeting, on Claude Code and on Codex (one run each); a no registered nobody, and a yes registered the default person. The person saw the offer in 3 of 4 runs; in the fourth, the setup agent didn't pass the operator's offer on. The login guidance worked in both runs tested, once from the setup agent and once from the operator. 0.7.13's other limits weren't re-checked for this release unless named here.

Thanks 10

Thank you to everyone whose work is in this release: @Kayhusk, @billbenetti, @cavalcanticampos, @Aummadour, @Tankard, @w4rc0n and @Totopo27.

Thanks also for the reports behind these fixes: @Kayhusk (#3035), @Tankard (#2583), @dajiaohuang (#2529), @billbenetti (#2728), @emilio-gagliardi (#3087), @korallis (#161) and @w4rc0n (#3017).

OpenRig 0.7.13When you answer a permission request, you now get a note back saying who decides it, and the waiting agent gets the decision in about half a second. A Claude agent that hits its usage limit now waits for the stated reset instead of being retried.6 added9 changed8 fixed

14 people thanked · Release notes

What you can do now

Permission requestsImproved

When a runner agent asks permission, your answer now gets a note back: who decides it, and whether the tool ran. The waiting agent has the decision in about half a second. If what you typed isn't clear, the agent reading it asks you back in your Feed, and your reply decides. Closing a request without deciding permits nothing.

DetailsAlso: how the agent reads your answer

Usage limitsImproved

A Claude agent that hits its usage limit now waits for the reset time in Claude's message, for example "resets Nov 10, 4pm", and picks its work back up then. Before, it was retried every few minutes. Thanks to @cavalcanticampos, and to @alperta for the report.

Details

Permission postures for a first teamImproved

Before your first team starts, the operator tells you which commands it will ask about. It then makes one offer: allow the command families your goal repeats, for this project only. Say no and the team's defaults stay, and the offer isn't repeated.

Details

Being reachable

Setting up OpenRig now offers to register you as the team's person, so your agents' questions have somewhere to go. rig daemon start and the rigs skill both make the offer. Nothing is registered without your yes, and rig gateway human add registers you any time.

Details

Guidance filesImproved

OpenRig now keeps your edits to its blocks in AGENTS.md and CLAUDE.md, and removes duplicate copies it recognizes. You can tune its guidance for your project without the next update undoing it.

Details

Before you upgrade 2

  • ChangedBack up your database, install 0.7.13 the way you installed OpenRig, then restart the daemon; your agents keep running. Three database updates run on its first start, and going back to 0.7.12 after them isn't established.

    Back up the database, install 0.7.13, then restart the daemon: rig daemon stop, copy the database file (rig config get db.path prints its path), install OpenRig 0.7.13 using your existing installation method, then rig daemon start. Your agents keep running through a daemon restart; don't use rig down, which ends them. Three migrations run on the daemon's first start: 160 and 161 (for the experimental hub connector below) and 162 (indexes for session reads). Going back to 0.7.12 after them isn't established.

    #2993, #2997Link

  • Changedopenrig-core moves to 0.1.29, and the openrig plugin now shares the CLI's version number. If a Codex agent asks for hook approval after the upgrade, approve the hooks to continue.

    openrig-core is 0.1.29, and the openrig plugin now carries the CLI's version, 0.7.13. A Codex seat can ask for hook approval after the upgrade; see Codex hook review after an upgrade below.

    #3034, #3064Link

Also in this release 15

Answering your team 1

  • AddedA hosted member's roster entry shows whether it's checking in: checking in, overdue, no check-in yet, on request or unknown. Experimental and off by default.

    A connected assistant (a hosted member; experimental and off by default) shows whether it's checking in, against a cadence its roster entry states (check_in_minutes, or check_in_on_request: true): checking in, overdue, no check-in yet, on request, or unknown. rig roster show and find print it as a Check-in line. It's a status only: work for a member that isn't checking in still queues and rings as before.

    #3023Link

Seats, handover and recovery 3

  • FixedA handover whose new agent started but wasn't ready now says it may be running instead of telling you to retry, and it cleans up the old agent's claims and jobs. A community contribution.

    A handover whose successor was launched but not ready says it may be running, instead of "retry": look at the pane first. A handover also cleans up the retiring occupant's own claims and jobs.

    #3003, #3024 · thanks @billbenettiLink

  • FixedAfter rig unclaim, the guidance tells you to end the adopted session's process and tmux session, and a fresh launch reopens the tmux server when it needs to.

    After rig unclaim, the guidance for an adopted session says to end its process and its tmux session, and rig seat stop's help matches. A fresh launch after rig unclaim ended the server's last session reopens the server.

    #2996, #3006, #3014, #3009Link

  • FixedA handover into the seat's own tmux session can take over a claim left by an agent that was removed or archived, and an agent that can't be woken reports to whoever created the task. A community contribution.

    A handover whose successor was launched into the seat's own tmux session can reclaim a claim left by a removed owner, or by an archived owner whose latest session for that node is superseded, detached or exited; a live owner still refuses. When a seat with no declared route can't be woken, the finding goes to the item's creator, skipping a creator that is a terminal seat.

    #2869, #2987, #2995 · thanks @KayhuskLink

Fixes 6

  • ChangedThe daemon stays responsive while it reads a large project's proof.

    Speed: the daemon is much more responsive while it reads a project's proof, which now yields between missions; current-session reads for the node inventory use an index; the daemon's recorder and Linux clipboard discovery no longer wait on the main thread.

    #2970, #2997, #3019Link

  • ChangedThe docs now explain what rig seat clear-attention checks, how compaction notices are routed, and how to start one stopped kernel seat with rig launch. A community contribution.

    Docs: what rig seat clear-attention's check proves, how managed compaction notices are routed, when the keyboard moves in herdr-app, a complete periodic-reminder registration, and starting one stopped kernel seat with rig launch.

    #2964, #2984, #2991, #3002, #3031 · thanks @ziadeh, @dajiaohuang · reported by @todd-dhangoLink

  • FixedClaude's auto-update failure footer no longer holds a send, and a one-time wake that failed without typing anything is retried. A community contribution.

    Delivery: Claude's auto-update failure footers, including one clipped form, no longer hold a send to an idle Claude seat; an unrecognised wake result reads unknown, not delivered; an ordinary one-time park wake is kept and retried while its park is current and the failed attempt typed nothing into the seat (an attempt whose effect is unknown needs checking, and repeating waits and usage-limit expiry keep their own lifecycle); a custody-verified: note whose target is followed by a period, comma or other closing punctuation now verifies it; the Pi runner pane keeps the operator's draft out of the stream.

    #2948, #3016, #3011, #3038, #3004, #2842 · thanks @EZotoff · reported by @CaptObviousLink

  • FixedCompleted Codex 0.167 turns read idle, and a usage-limit banner with a curly apostrophe is detected. A community contribution.

    Codex and Claude: completed Codex 0.167 turns read idle, and unsupported versions stay unknown; a usage-limit banner with a curly apostrophe is detected; refocus bounds Codex context and records what it left out; an unreadable Claude status-line cache gets its own reason.

    #2954, #2879, #2951, #2880 · thanks @Kayhusk, @Coder8124 · reported by @jamesloosliLink

  • FixedThe TUI groups instances by rig and shows a quiet agent as unknown, not idle, and Feed times use your time zone. A community contribution.

    TUI and CLI: instance rows are grouped by rig; for a quiet seat the daemon explicitly reads as unknown, the list, explorer and agent-detail status rows show unknown, not idle (screen motion still shows active, a daemon that serves no activity keeps the screen fallback, and the topology graph is unchanged); Feed times use the configured time zone; the CLI doesn't call a daemon stopped when the shell can't see its process (a sandbox), and says not to start another; ssh options are separated from the target, and the generated attach command quotes the session name.

    #2857, #3012, #3022, #2913, #2973, #2971 · thanks @hgreene624, @Kayhusk, @DeryFerdLink

  • FixedSlice and proof reads stay within their mission, and workflow spec reads survive a restart. A community contribution.

    Scope and workflows: qualified slice reads and proof discovery are scoped by mission; workflow spec reads are recorded across restarts; the spec library skips synthetic alias entries.

    #2960, #2986, #2999 · thanks @Aummadour · reported by @ziadehLink

Experimental 1

  • Addedrig network connects one local seat to a hub you already have. Experimental and unsupported.

    rig network connects one local seat to a hub you already have. Experimental, unsupported and at your own risk. The connector uses the MCP SDK, which the installed package already included in 0.7.12.

    #2993Link

Behaviour that changed 4

  • ChangedYour answer to a runner's permission request is now confirmed with a note; through 0.7.12 none came back.

    A runner's answer is confirmed to you. Through 0.7.12 no note came back, and the runner waited for its next read.

    #3001Link

  • ChangedA usage-limited Claude agent waits for its stated reset, so don't release it on a timer, and look at the pane before retrying a failed handover. A community contribution.

    A usage-limited Claude seat waits for its stated reset; don't release it by hand on a timer. A failed handover may have left its successor running; look at the pane before retrying.

    #2917, #3003 · thanks @cavalcanticampos, @billbenetti · reported by @alpertaLink

  • ChangedRoutine host listings no longer probe SSH hosts, so they can't trip OpenSSH's login blocking; hosts read unknown until rig host doctor checks them. A community contribution.

    Passive SSH host status reads unknown. Routine host listings no longer open a TCP connection to SSH hosts, because repeated probes closed without a handshake can make OpenSSH block real logins for a while. Hosts that used to read reachable now read unknown; rig host doctor still checks actively.

    #2979 · thanks @AummadourLink

  • Changedrig package install leaves a guidance file with a damaged OpenRig block alone and lists it, instead of adding a second copy.

    rig package install leaves a guidance file alone when a recognized managed block has no complete marker pair, lists it under "Left as it is:" and installs the rest, instead of appending a second copy. Launch and restore name such a file (guidance_block_markers_damaged).

    #3020Link

Known limits: 23 for this release. Read them
  • Not in this release: a Codex snapshot restore or rig up --existing can write OpenRig's managed guidance into a tracked AGENTS.md, leaving the worktree modified; check git status after either operation.
  • Not in this release: a person who talks to the kernel operator first, with no other agent setting OpenRig up, isn't offered registration. rig up, rig start and rig context start the daemon without printing the offer either. Register with rig gateway human add. While nobody is registered, a later rig daemon start offers again, even after a no; nothing is registered without your yes. (#3028, #3041 isn't in this release)
  • The hub connector isn't inert: the daemon starts it, sweeps leftover credential folders and schedules local rounds even with no binding; only the pass to a hub is absent. Its migrations apply on upgrade. (#2993)
  • The recorder: a queued begin record can be lost before the durable append, and a stalled worker has no acknowledgement timeout. (#3019)
  • Speed and memory: On one performance host, whole rig queue create invocations had a median about 10.4% slower than 0.7.12 (about +29 ms). Send latency stayed within the comparison's unchanged range. The cause remains unidentified. The standard idle-memory comparison was inconclusive. A post-hoc analysis of the same six runs found 7.9–8.6 MiB (4.2–5.3%) higher daemon RSS across three matched idle windows, using the median of three arm medians per version. The cause and steady-state behavior remain unestablished.
  • Draft-aware delivery (#3076): an automatic OpenRig notice can be left beside a draft started during delivery. This also concerns notices admitted by openrig-urgent and urgent-only modes. In the reproduced 0.7.12 Claude Code and Codex cases, the person's draft remained intact and no Enter was sent, but OpenRig's text stayed in the input. The guard and paste path are unchanged in this cut; a native 0.7.13 reproduction has not run.
  • Native model pickers: with a /model picker open, an ordinary send can act on the picker instead of delivering the message. In 0.7.12 tests it confirmed Claude Code's already-selected default and advanced Codex's model selection; neither message reached the model. Close or deliberately resolve the picker before ordinary delivery. The native 0.7.13 case has not run.
  • Codex hook review after an upgrade: in one test whose Codex home already held earlier hook approvals, rig up --existing stopped for hook review in each Codex pane; approving the hooks resumed all three conversations. A separate test of the same upgrade on a fresh Codex home, on another host, restored without review. The cause of the difference is not established.
  • A first team with Codex installed but signed out: a Claude user's starter team includes a Codex reviewer that waits for a Codex sign-in, and you aren't told beforehand. If Codex is installed, tell the person about the possible sign-in wait before the team starts; signing in first was not tested as a remedy.
  • A first team's permission asks: a command joined with &&, ; or a pipe still asks unless every part is allowed, and OpenRig's own lifecycle commands still ask on Claude seats. (#3029)
  • Usage-limit parking was tested with the limit message from claude -p. If an interactive seat's limit report doesn't carry the message, the seat is retried as before. A reset in the past or more than 8 days away is ignored. (#2917)
  • Handover: two other failures can still say "retry" while a successor may be running: a context delivery failure, and a Codex launch failure after an update prompt wasn't dismissed. Look at the pane first. (#3003)
  • Answers: when a receiving agent asks you back, it can stop at Claude Code's own permission prompt, which you don't see. A receiving agent you choose can still decline to act on a clear answer. A pairing requester's description of itself is quoted for the receiving agent, but still shown unquoted in the request's summary and the notices about it. The TUI's one-line notice after you answer can clear within a frame. (#3030, #3001)
  • Proof reads still pause briefly, and a whole read takes slightly longer. Yielding isn't a hard bound on latency or a single atomic snapshot of the proof. (#2970)
  • rig down keeps no stored host or boot identity, doesn't guard against another program running as you, and a daemon restart between losing the tmux server and the stop wasn't exercised. (#2962)
  • Codex working counter: a capture that doesn't name its pane keeps the old comparison, a restart that keeps both the pane and its process id isn't seen, and a leftover live frame can count once until it expires. (#2980)
  • Custom blocker IDs explain the wait, but their progress gives no event wake; the timer remains. (#2983)
  • Delivery: delivery evidence records what was known, not that the agent read the message, and events are best effort. A footer row OpenRig doesn't recognize can still hold a delivery (#2925), and a held message's full envelope can stay held; clearing a draft doesn't deliver it (#2515).
  • Runner permission answers were run end to end with a real receiving agent and the example runner, whose requesting agent was a stand-in; a model-driven runner waiting on a person's answer hasn't been run. (#2934)
  • A receiving agent you choose (agents.operator_session) that runs in an explicit or auto permission mode gets no OpenRig allowance for rig host approve or rig host deny, so Claude's review can refuse them.
  • An already-running tmux server keeps its old environment, daemon credentials included, until it restarts. (#2850)
  • herdr-app views are one-shot; following isn't claimed. Pull relay needs a connector that implements pull. (#2744, #2844)
  • From 0.7.12: its known limits still apply, except that #2970 and #2948 are now in this release, runner answers are confirmed and reach a waiting runner at once (#3001), and rig seat stop no longer suggests rig down for an adopted session (#3006). They weren't re-checked for this release unless named here.

Thanks 14

Thank you to everyone whose work is in this release: @Aummadour, @Kayhusk, @Coder8124, @DeryFerd, @EZotoff, @hgreene624, @cavalcanticampos, @ziadeh, @dajiaohuang and @billbenetti.

Thanks also for the reports behind these fixes: @jamesloosli (#2879), @Kayhusk (#2880 and #2951), @CaptObvious (#2948 and #3016), @alperta (#2917), @ziadeh (#2960) and @todd-dhango (#2984).

OpenRig 0.7.12Answer your team in your own words. A reply like "only if it's the test file" now goes to an agent that reads it with the question and decides, instead of being taken as a plain yes.7 added11 changed8 fixed

20 people thanked · Release notes

Highlights

  • ChangedAnswer in your own words: a qualified answer goes to an agent that reads it with the question before anything acts. When no receiving agent is available, your answer waits.

    Your answer goes to an agent. Through 0.7.11 some answers acted on the request directly, and some had no receiver when no operator was set. Now these answers use the configured receiving agent or the kernel operator, with the question included. Answers wait when no receiver is available.

    #2923, #2931, #2934Link

  • Changedrig down now stops only the terminals it started, and names any it left running so you can stop them yourself.

    rig down is more careful. It stops only a tmux session that carries the seat's own OPENRIG_NODE_ID, on the server and session it read. A terminal OpenRig didn't create, a mismarked one or a replaced one is left running, and rig down exits 2 naming it and how to stop it yourself. A seat joined with rig attach as an external CLI is listed as not stopped, since OpenRig never stops it; that alone doesn't make rig down exit 2.

    #2962Link

  • ChangedCodex launches no longer stop at 'Hooks need review' with smol-toml 1.9.

    Codex "Hooks need review" with smol-toml 1.9 no longer needs a manual workaround.

    #2804 · reported by @djuntgenLink

  • AddedCommunity harnesses can speak Pi's protocol, presets can carry launch wrappers, and a seat can switch between Pi and another runtime. A community contribution.

    A community harness can declare protocol: pi-rpc, presets can carry launch wrappers, and a seat can switch between Pi and another runtime. The community-maintained nodecode runner is listed in the reference.

    #2870, #2759, #2669, #2859 · thanks @smota, @seanmcnLink

  • FixedTyped edits in Pi and Oh My Pi seats now submit in the right order on the affected Node releases.

    Pi and OMP: typed edits submit in order on the affected Node releases (22.21.x to 22.22.0, 24.9.0 to 24.11.1, 25.0.0 to 25.1.0) instead of appending an insertion at the end.

    #2847 · reported by @oodadoudouLink

Before you upgrade 2

  • Changedrig down now stops only the terminals it started, and names any it left running so you can stop them yourself.

    rig down is more careful. It stops only a tmux session that carries the seat's own OPENRIG_NODE_ID, on the server and session it read. A terminal OpenRig didn't create, a mismarked one or a replaced one is left running, and rig down exits 2 naming it and how to stop it yourself. A seat joined with rig attach as an external CLI is listed as not stopped, since OpenRig never stops it; that alone doesn't make rig down exit 2.

    #2962Link

  • Changedopenrig-core moves to 0.1.28. If a Codex session you kept running through the upgrade asks for hook approval, relaunch it.

    openrig-core is 0.1.28. A Codex session kept running across the upgrade can ask for hook approval until it's relaunched.

    Link

Also in this release 20

Answering your team 4

  • AddedRegister yourself as your team's person with rig gateway human add. Setup's guidance now asks your agent to offer it, and nothing is registered without your yes.

    Setup's guidance asks your agent to offer to register you as the team's person. In testing the agent didn't reliably make that offer (0 of 5 runs). Registering works when you ask for it: rig gateway human add. Nothing is registered without your yes, an existing default person is kept, and no person is chosen automatically. The empty-registry hint is right. A team you start from your own assistant fits your own logins, with a review before anything is committed.

    #2924, #2905Link

  • ChangedAnswers that used to go nowhere, such as a reply to a host pairing request, now go to your receiving agent or the kernel operator, and wait until one is available.

    Answers nothing else reads, such as a host pairing request or a mode's scheduled end, use the configured receiving agent or the kernel operator. Answers wait when no receiver is available, and nothing decides them meanwhile. To decide one yourself, use its own command: rig host approve or rig host deny for a pairing request, rig seat decide-permission for a runner's request. Closing an ask isn't permission, and words that were kept aren't a default permit.

    #2923Link

  • ChangedAnswer a pairing request in your own words, or decide it yourself in the TUI's pairing settings. The request shows who reads your answer.

    Pairing answers go to the receiving agent, and you can decide directly in the TUI's pairing settings. A pairing request says who it went to and who reads the answer.

    #2931, #2935Link

  • ChangedAnswer a runner's permission request in your own words: an agent reads "only if it's the test file" with the question and decides while the runner waits.

    A runner's permission answer goes to the receiving agent, which decides while the runner waits, so a qualified answer such as "only if it's the test file" is read before anything acts. Your answer is kept and an explicit decision works, but the runner's confirmation updates to you aren't written in this release. Don't expect a confirmation in the Feed, a notice of the receiver's state or an immediate wake: the decision reaches the runner at its next read (up to about 21 seconds in testing). To decide one yourself: rig seat decide-permission <askId> --option <id> --reason "…". This is the runner's path only: a pairing request says who reads the answer, as above.

    #2934, #2938, #2950, #2966Link

Harnesses and connections 2

  • AddedA relay connector that can't accept incoming connections can now pull your team's messages instead: set OPENRIG_RELAY_MODE=pull. A community contribution.

    A relay connector that can't accept incoming connections can pull pending messages for a person instead of being pushed to: set OPENRIG_RELAY_MODE=pull in the relay secrets file. Push stays the default. A person's gateway binding can be unset.

    #2844, #2812 · thanks @w4rc0nLink

  • AddedOpen a Rig view inside the herdr-app desktop window with rig terminal open <view> --provider herdr-app. A community contribution.

    rig terminal open <view> --provider herdr-app opens a Rig view inside the herdr-app desktop window.

    #2744, #2956, #2981 · thanks @w4rc0nLink

Queue, scope and seats 4

  • AddedErase queue content for retention or account deletion, and a retried create can't bring erased work back.

    Queue content can be erased for closed-work retention and account deletion, and a retried create can't bring erased work back.

    #2837, #2843Link

  • AddedEach message now leaves one record of how far its delivery got: what was admitted, what reached the input and what the screen showed.

    Each send records what's known about its delivery in one transport.delivery_evidence event: what was admitted, what reached the input, what the screen check showed, and for which occupant.

    #2937, #2943Link

  • AddedThe queue explains itself: rig queue create flags an unresolved scope, rig queue show names a handed-off task's successor, and a custom blocker says what it's waiting for. A community contribution.

    rig queue create advises on an unresolved scope, slice lists show observed queue counts, a proof policy can require every listed judge, the execution ladder shows each slice's recorded status, rig queue show names a handed-off row's successor, and a custom blocker ID explains the wait.

    #2901, #2902, #2867, #2872, #2874, #2983 · thanks @Aummadour, @dajiaohuangLink

  • ChangedEvery agent's guidance now points to its skills, help and project context, and rig seat status shows when that guidance was written.

    Every seat's managed guidance points to its skills, help and project context. rig seat status shows when guidance was written relative to the session's recorded moments, and what the seat's refocus hook recorded. A rebuilt seat's briefing lists older recaps as optional history.

    #2918, #2920, #2916, #2876Link

Fixes 8

  • ChangedQueue listings, rig queue show and rig parked are faster: they no longer re-read every item. A community contribution.

    Speed: queue listings, rig queue show and rig parked stop re-reading each item; the stuck sweep yields by elapsed time; Markdown section ends are found in one pass.

    #2825, #2926, #2833 · thanks @billbenetti, @oodadoudouLink

  • FixedMessages reach Claude agents more reliably: a custom status line or an update notice no longer blocks a send, and nothing is typed into an open Claude dialog. A community contribution.

    Delivery and drafts: Claude seats with a custom status line read idle and verify sends; a fresh idle hook doesn't type into a current Claude dialog; Claude's context hint and drawn cursor are read correctly; when the input can't be read, a deliberate override (--dangerously-interact) pastes with a warning and doesn't press Enter, so it isn't submitted; update notices beside the paste hint are recognized.

    #2807, #2813, #2947, #2942, #2933, #2800, #2786 · thanks @billbenetti, @KM199 · reported by @CaptObviousLink

  • FixedA message waiting on a Codex choice prompt is delivered once you answer it, and Codex launches no longer stop at "Hooks need review" with smol-toml 1.9. A community contribution.

    Codex: when you answer a Codex choice prompt, a message waiting on it is delivered instead of escalated; a working counter is compared only within one pane process; hook trust records are written under smol-toml 1.9, so launches no longer stop at "Hooks need review".

    #2952, #2980, #2804 · thanks @KM199 · reported by @djuntgenLink

  • FixedRestores and restarts finish cleanly: owed restore input arrives, rig daemon start clears a reservation left from an earlier boot, and a Claude agent resumes the right conversation. A community contribution.

    Restore, start and handover: owed restore input is delivered after a bounded wait on unknown readiness; compaction uses the draft defaults and reports repeated unsent preparation; rig daemon start archives a start reservation left from an earlier boot; the kernel restart guidance describes the existing recovery; an earlier occupant can't replace a Claude seat's resume target; token switches keep the Claude launch; rebuild continuity and Codex launch choices are explained.

    #2818, #2799, #2797, #2915, #2965, #2796, #2853, #2906 · thanks @ziadeh · reported by @KayhuskLink

  • FixedRecovery wastes less of your agents' time: unroutable tasks wake as soon as the agent is reachable, and the stuck sweep reports each finding once. A community contribution.

    Queue and recovery: a polling hosted member (an outside assistant on the team; experimental and off by default) gets one standing notice; a hosted member's ring that times out reads unknown, and durable recovery doesn't repeat that recorded wake (other recovery paths can still ring it again); unroutable items wake as soon as the seat is reachable; the stuck sweep counts a finding once; a handoff doesn't change an escalation's owner; findings route to the seat's own fallback; a park on an outside condition with no wake says so; rig workflow validate is read-only.

    #2864, #2957, #2790, #2824, #2946, #2865, #2851, #2852, #2817, #2763 · thanks @seanmcn, @billbenetti · reported by @todd-dhangoLink

  • FixedSlack is more dependable: threads come back when needed, an ask settles even after its message is deleted, and an unreadable reply says the message "may have posted". A community contribution.

    Slack and people: a Slack reply that can't be read says the message "may have posted"; threads are recovered when needed; an ask settles after its original message is deleted; eligible asks post when quiet hours can't be read, marked when OpenRig can't fully check them; a held ask whose person has no connector closes as no-connector; update delivery is described without assuming Slack.

    #2909, #2788, #2792, #2814, #2805, #2815, #2927 · thanks @seanmcnLink

  • FixedSmaller CLI fixes: rig context recap-write writes where every reader looks, the installer tells you how to fix PATH, and daemon credentials stay out of a tmux server's environment from its next start. A community contribution.

    CLI and config: rig context recap-write writes where every reader looks; config accepts two keys the daemon already resolves; rig whoami says the team is still being built during rig up; rigs with @ in the name find attention; a seat waiting on a person names its question; the installer reports PATH gaps with shell hints; daemon credentials stay out of a tmux server's environment from its next start (a server already running keeps its old environment until it restarts).

    #2914, #2969, #2955, #2949, #2891, #2888, #2883, #2850 · thanks @DeryFerd, @Vaishnavi220506 · reported by @nassersala, @pr0xc3nt4ur1Link

  • FixedA Herdr grid with blank filler cells no longer shows every agent as unconfirmed.

    Terminals: a Herdr grid whose blank filler cells have no label is confirmed, instead of reading every seat unconfirmed.

    #2849 · reported by @pr0xc3nt4ur1Link

Behaviour that changed 2

  • Changedrig down leaves alone any terminal it can't show belongs to the agent.

    rig down leaves terminals it can't show belong to the seat; see Before you upgrade.

    #2962Link

  • Changedrig daemon start now archives a start reservation left over from a reboot, so you no longer clear it by hand. A community contribution.

    A daemon start reservation left after a reboot is archived by rig daemon start; don't clear it by hand.

    #2915 · thanks @ziadehLink

Known limits: 12 for this release. Read them
  • Not in this release: the daemon can pause for up to about a second while reading proof on large mission trees (#2970), and delivery to a Claude seat showing Claude's auto-update failure footer can stall because that footer isn't recognized (#2948).
  • rig down: a terminal it leaves running stays running until you stop it. It doesn't keep a stored host or boot identity, doesn't guard against another program running as you, and a daemon restart between losing the tmux server and the stop wasn't exercised. (#2962)
  • Codex working counter: a capture that doesn't name its pane keeps the old comparison, a restart that keeps both the pane and its process id isn't seen, and a leftover live frame can count once until it expires. (#2980)
  • Custom blocker IDs explain the wait, but their progress gives no event wake; the timer remains. (#2983)
  • Delivery evidence records what was known, not that the agent read the message; where the input ended up can read unknown. Events are best effort, so a missing event isn't proof nothing was sent. (#2937, #2943)
  • Runner permission answers were run end to end with a real receiving agent and the example runner, whose requesting agent was a stand-in; a model-driven runner waiting on a person's answer hasn't been run. (#2934)
  • herdr-app views are one-shot; following isn't claimed. Pull relay needs a connector that implements pull. (#2744, #2844)
  • A receiving agent you choose (agents.operator_session) that runs in an explicit or auto permission mode gets no OpenRig allowance for rig host approve or rig host deny, so Claude's review can refuse them. A kernel receiver in auto mode is included. The default kernel with the default policy passed at its tested scope.
  • A receiver that was stopped and then started may not act on an answer that waited for it. In the tested case where it needed to ask you something back, the question appeared in its own conversation, not in the Feed or Steering.
  • Delivery isn't fixed in general: a footer row OpenRig doesn't recognize can still hold a delivery (#2925), and a held message's full envelope can stay held; clearing a draft doesn't deliver it (#2515).
  • Not run for this release (not run, not passed): the two-seat Codex journey with AGENTS.md restore; Codex account-home, upgrade and continuity checks; the OpenShell worker's second report; Pi model switches on real providers; ACP in a desktop app; Slack directory paging; some Slack setup cases (channel and thread precedence, a stopped receiver's delayed pickup, an inherited inbound default, a plain yes with no receiver); native checks of #2786, #2799, #2807 and #2813, with #2947 partly; a button-and-words answer, a non-pairing ask with an explicit owner, Steering's Approve page, and these answer and setup checks on a default model (the tested runs used smaller models); --wait-for-kernel (#2888), the installed effect of #2800, and #2720 beyond one platform.
  • From 0.7.11: its known limits still apply, except Codex hook setup with smol-toml 1.9.x (#2720), fixed by #2804. 0.7.12 changes openrig-core again, so the Codex hook note there applies to this upgrade too. They weren't re-checked for this release unless named here.

Thanks 20

Thank you to everyone whose work is in this release: @billbenetti, @oodadoudou, @DeryFerd, @Aummadour, @seanmcn, @w4rc0n, @ziadeh, @vanducng, @smota, @sn1thy, @dajiaohuang and @Vaishnavi220506; to @KM199, co-author of #2947 and #2952, which finish their #2513 and #2515.

Thanks also for the reports behind these fixes: @nassersala (#2955), @djuntgen (#2804), @todd-dhango (#2851), @Kayhusk (#2796), @pr0xc3nt4ur1 (#2849 and #2850), @amsayfi (#2776), @oodadoudou (#2847) and @CaptObvious (#2933 and #2942).

Verification and remaining limits

Late verification update: a real Codex lifecycle journey passed its tested launch, same-conversation snapshot restore, existing-rig resume, Core restart with native sessions retained, and fresh-handover task cases. The packaged notes still list that journey as not run because this result arrived after their seal. This does not establish all models or all bidirectional team workflows.

Known limitation: a Codex snapshot restore or rig up --existing can write OpenRig's managed guidance blocks into a tracked AGENTS.md, leaving the worktree modified. Check git status after either operation. Snapshot restore was already disclosed in 0.7.11; the existing-rig trigger is newly observed, and its regression status is not established. A repair is selected for 0.7.13.

The Codex account-home smoke is partial: launch passed, while the account switch was not run after its dry-run requested a named saved profile. Codex ring-2 upgrade coverage and the Codex half of the person-setup checks remain not run at this release decision. The other limitations and coverage omissions in the release notes still apply.

OpenRig 0.7.11Hand work to your OpenRig team from the coding agent you already use. The new openrig plugin works inside Claude Code and Codex, and Zed and T3 Code connect over ACP.12 added23 changed17 fixed

15 people thanked · Release notes

Highlights

  • AddedWork with your team from your own Claude Code or Codex: hand off a task, follow it, answer the team's questions and read the result, with the new openrig plugin.

    The openrig plugin, shipped beside openrig-core, lets a person hand work to their local team from their own Claude Code or Codex, follow it, answer the team's questions and read the result. The plugin's README has the steps. VS Code, Copilot CLI and Cursor install it with no seat. Answers are recorded exactly as typed.

    #2647, #2683, #2709, #2718, #2657, #2733, #2719Link

  • AddedUse your team from Zed or T3 Code: rig acp serve makes it an ACP agent, so a prompt becomes a task and the team's answer comes back as the reply.

    rig acp serve --to <member@rig> runs OpenRig as an agent in ACP apps such as Zed and T3 Code: a prompt becomes a queue task, each task the work reaches shows as a step, the closing resolution is the reply, and the team's questions reach the app while a turn is open.

    #2648, #2714, #2651, #2708, #2686, #2712Link

  • ChangedMessages no longer bounce off a half-typed prompt: they join what's there and go through. To keep the old refusal, rig config set transport.draft_delivery refuse.

    Under the default deliver, an ordinary send or work notice to a seat whose prompt holds a person's typed draft pastes the message at the cursor and submits the combined input, and the result says whether submission was confirmed. Menus, permission prompts, the typing guard, managed compaction and --wait-for-idle still refuse or wait.

    #2645Link

  • ChangedManaged compaction finishes on its own: once prepared, it sends /compact at the next idle moment instead of asking again. A community contribution.

    A prepared managed compaction is held as prepared and sends /compact at the next idle moment instead of asking the seat to prepare again. rig compact --state shows it and --cancel disarms it. Managed compaction also sends /compact under Claude Code's bare update banner.

    #2698, #2716, #2662 · thanks @billbenetti, @Nikhi00718Link

  • FixedOn Linux, restarting the daemon's systemd service no longer takes your agents down, once their tmux server next starts fresh. A community contribution.

    On Linux, a daemon run as a systemd user service starts the seats' tmux server in its own user scope, so stopping or restarting the daemon's unit no longer ends the seats. A daemon started from a login session starts the server as before.

    #2749 · thanks @billbenettiLink

Before you upgrade 5

  • ChangedBack up your database, then install 0.7.11 and restart the daemon: five database updates run on its first start, and going back to 0.7.10 after them isn't established.

    Run npm install -g @openrig/[email protected], then rig daemon stop && rig daemon start. Back up your database first. Five migrations run at the daemon's first start (150 to 154). With the daemon stopped, copy the file $OPENRIG_DB names. Going back to 0.7.10 after these migrations isn't established.

    Link

  • ChangedOpenRig's own plugin goes to 0.1.27, with updated activity and refocus hooks and three refreshed skills. If you edited its files, check them after upgrading.

    The openrig-core plugin moves from 0.1.26 to 0.1.27. Its activity relay and refocus hooks and three skills changed. The CHANGELOG says replaced files are kept under $OPENRIG_HOME/backups/managed-refresh/<id>/ for reapplying local edits; this release's checks didn't test that route.

    #2756Link

  • ChangedMessages now join a person's half-typed prompt by default. To keep the old refusal, run rig config set transport.draft_delivery refuse.

    Sends now join a person's draft (transport.draft_delivery = deliver). To keep the old refusal, run rig config set transport.draft_delivery refuse.

    #2645Link

  • ChangedA Pi seat can now have its own account home: an absolute PI_CODING_AGENT_DIR in its env: is used as one and needs an auth.json there. A Pi seat that already has its own login can stop at launch, so check those first. A community contribution.

    A Pi seat that declares an absolute PI_CODING_AGENT_DIR in its env: now uses it as its account home and needs a readable auth.json there, or the launch stops. A Pi seat that already has its own Pi login also stops at launch when its spec declares an absolute PI_CODING_AGENT_DIR, even if that folder has an auth.json; the seat's login is kept, and the error names a missing account file rather than the existing login. This is shown by source and function-level tests, not a native run.

    #2630 · thanks @seanmcnLink

  • ChangedOn Linux under a systemd user service, restarting the daemon leaves your agents running once their tmux server next starts fresh; until then, a restart still takes them down. A community contribution.

    Linux, with the daemon run as a systemd user service: the seats move into their own scope only when their tmux server next starts fresh. Until then, stopping or restarting the daemon's unit still takes the seats down.

    #2749 · thanks @billbenettiLink

Also in this release 42

Sends and drafts 3

  • FixedA draft that shows only in the input box is caught before a message is pasted in.

    A draft only the input box shows is caught by one read before pasting.

    #2653Link

  • FixedClaude seats showing a status line or the background task panel no longer confuse draft detection. A community contribution.

    Claude seats showing a statusLine or the background task panel read as a normal composer under the draft-aware guard.

    #2703 · thanks @billbenettiLink

  • FixedA full message backlog no longer drops a sender's later messages, and stopped seats aren't flooded with notices at each daemon start. A community contribution.

    A full held-message quota no longer drops a sender's later messages, and seats stopped while they owe work don't get a burst of undeliverable notices at each daemon start.

    #2701, #2620 · thanks @billbenettiLink

Compaction, restore and handover 5

  • AddedSkills can refresh from their source when a seat is restored: set on_restore: follow_source. A community contribution.

    on_restore: follow_source on a skill refreshes it from its source when a seat is restored; keep_saved stays the default.

    #2626 · thanks @seanmcnLink

  • FixedA seat that's already idle gets its /compact instead of a refusal.

    The final /compact allows for the preparation's own fresh activity (23 seconds, against 9), so a seat that's already idle gets /compact instead of a refusal.

    #2764Link

  • FixedA restore that stops at a prompt, such as Claude's resume picker, clears itself once the seat is back in its conversation. A community contribution.

    A restore stopped at a prompt, such as Claude's resume selection, clears itself once the seat runs the conversation it was restoring.

    #2711, #2674 · thanks @ziadehLink

  • FixedWork notices wait for a compaction's restore request instead of landing right after it. A community contribution.

    A work notice refused at a prompt no longer goes in right after "Compacted" while the compaction still owes its restore request.

    #2666 · thanks @Nikhi00718Link

  • FixedHandovers and restores pick the right conversation: a Codex helper inside a Claude seat no longer becomes its resume token, and Claude rebuilds check their priming packet (the context a rebuilt agent starts from). A community contribution.

    A Codex helper inside a Claude seat no longer becomes the seat's resume token; a Claude rebuild handover checks its priming packet; restoring activity hooks finds the agent's own source.

    #2740, #2650, #2617 · thanks @AummadourLink

Your own coding agent and ACP apps 1

  • AddedAdd OpenRig to an ACP app from the registry: the @openrig/acp launcher runs the matching CLI's rig acp serve through npx.

    The @openrig/acp launcher runs the matching @openrig/cli's rig acp serve for the ACP registry's npx launch, released at the same version.

    #2655, #2715Link

People and connected assistants (experimental, unsupported, off by default) 3

  • AddedAn agent connected through a grant service can see and answer your team's questions, experimental and off by default.

    Assistants connected through a grant service can list and answer the team's questions as a registered person, and --task-destination names the receiver for new tasks.

    #2735, #2638, #2750Link

  • AddedThe relay connector sends your team's questions and updates to a messenger bridge you run and brings replies back, experimental and off by default. A community contribution.

    The relay gateway connector sends questions, updates and notices to an operator-owned bridge over loopback HTTP and takes replies back. The bridge is yours.

    #2624 · thanks @smotaLink

  • AddedAnswer a question right on its card in the web UI's For You feed, experimental and off by default. A community contribution.

    The web UI's For You feed answers a local ask's questions on its card.

    #2612 · thanks @w4rc0nLink

Queue, workflows and status 5

  • AddedQueue commands work across machines with --host, and whoever held a task hears when another machine takes it over. A community contribution.

    rig queue show, list, transitions, update and block take --host <id>; cross-host handoffs that override a claim notify the claimer.

    #2678, #2734, #2621 · thanks @billbenettiLink

  • AddedA code result can name its commits, so rig queue artifact knows what to diff.

    An openrig.code-result/v1 manifest gives rig queue artifact the commit pair to diff.

    #2659Link

  • AddedWorkflows keep their own spec and goal, rig workflow unregister removes old versions, and trace --full shows the whole trail. A community contribution.

    Workflows keep their own spec and root objective, rig workflow unregister removes versions, and trace --full returns the whole trail.

    #2696, #2738, #2676, #2667 · thanks @billbenettiLink

  • ChangedA seat that reads its tasks without claiming them gets one backlog notice instead of one per task, and a claim shows as working while the Claude agent that claimed it runs a background shell. A community contribution.

    One backlog notice replaces a finding per task for a seat that reads without claiming; claims read working while a Claude owner has a live background shell or a managed restore is owed.

    #2752, #2675 · thanks @billbenettiLink

  • FixedA helper harness inside a seat no longer reports its turns as the seat's, and refocus finds projects outside workspace.root. A community contribution.

    A helper harness inside a seat no longer reports its turns as the seat's; refocus traces projects outside workspace.root.

    #2743, #2664, #2717, #2619, #2207 · thanks @MohsintlLink

Launch, install and setup 5

  • AddedMove a Pi seat to another account with rig provider switch, and Pi seats with their own account home start and resume again; the switch is new, so check the seat afterwards. A community contribution.

    rig provider switch --seat <pi seat> --to-account <name> --account-home <dir> --reason "<why>" moves a Pi seat to another account through a confirmed successor (--dry-run shows the plan); in our native run the successor started but the switch wasn't completed, so a completed switch is untested. A Pi seat whose spec declares its account home starts and resumes again.

    #2630, #2782 · thanks @seanmcnLink

  • FixedClaude seats launched with --settings JSON that contains spaces verify again, and launcher scripts that exec Claude's symlink are recognised. A community contribution.

    A Claude seat launched with --settings JSON written with spaces can be verified again, and a Claude launcher script that execs the native installer's symlink becomes ready, with --no-chrome recognised; in our test, 0.7.10 also became ready under the same chain, so this isn't a demonstrated fix.

    #2665, #2751 · thanks @Nikhi00718Link

  • Fixedlaunch_wrapper works for Claude Code, Pi and Codex seats, and a wrapped seat never starts without its wrapper. A community contribution.

    launch_wrapper works for local Claude Code, Pi and Codex seats, and a wrapped seat never starts unwrapped.

    #2746, #2609 · thanks @smotaLink

  • FixedClaude seats that load openrig-core themselves stop loading its skills twice.

    Claude seats that load openrig-core themselves stop loading its skills twice.

    #2660Link

  • FixedSmaller setup fixes: rig attach --self outside tmux, rig host pair --timeout, clearer rig config set warnings, and steadier daemon start and stop. A community contribution.

    Also: rig attach --self outside tmux, rig host pair --timeout, rig config set naming a masking variable, daemon start and stop treating a blocked probe as unknown.

    #2640, #2641, #2692, #2547, #2502, #2643 · thanks @seanmcn, @dajiaohuangLink

Host pairing 4

  • ChangedAnswers to a pairing request now go to the target machine's operator agent, which approves or denies on clear intent and asks back when it isn't sure.

    Answers to a pairing request now reach the target's kernel operator. When the target has an operator that can receive them, typed words and Approve or Deny choices in the TUI, Steering or Slack go to that agent as replies, and receiving one neither grants nor denies access. The operator acts on clear intent with rig host approve <code> or rig host deny <code> and asks back when the answer is unclear. Both commands also work from a plain terminal on the target, using its operator bearer (OPENRIG_AUTH_BEARER_TOKEN, or --bearer <token>). An Approve click on a request the operator owns waits for the operator to act; a stopped operator keeps the request, and the answer waits in its queue.

    Checked on this package: real Slack with a real operator agent in one run (a button or a typed yes approved, a no denied, and a qualified reply got a clarifying question before the refusal denied it); the real TUI without a model (answer credentials, typed answers asked again with no operator, plain-terminal approve and deny, and expiry); and 29 of 29 contained cases with synthetic credentials. Not run: an agent reading answers given in the TUI, Slack thread replies beyond the tested path, and Steering in a browser.

    #2900Link

  • ChangedWith no operator agent to receive answers, Approve and Deny decide directly, and a typed reply gets another ask instead of a denial.

    With no operator, one that can't receive answers, or one OpenRig can't determine, the request says so: Approve and Deny decide directly, and a typed reply gets another ask instead of a denial (the no-operator case was checked; the other two come from the source).

    #2900Link

  • ChangedPairing answers in the TUI use the daemon's operator bearer, and say what to set when it's missing.

    TUI answers use the daemon's operator bearer when one is configured; a missing or wrong one leaves the answer unrecorded and says what to set. Ordinary terminal calls keep their own credential.

    #2900Link

  • FixedSecurity fix: denying a host pairing request now gives the other machine no access. In 0.7.9 and 0.7.10 it could hand over the daemon's access token, so upgrade the machines you pair with.

    Denying or dropping a host pairing request in Steering now gives the requesting machine no access. The problem, that action returning the daemon access token, was found in the 0.7.9 and 0.7.10 source and reproduced with synthetic credentials on an earlier 0.7.11 build.

    #2884Link

Terminals and views 4

  • AddedHerdr follow views work on macOS too.

    Herdr follow views work on macOS too (protocol 22).

    #2663, #2706Link

  • FixedWritable terminal tiles reflow with your screen again, as in 0.7.10, and typing and paste go straight through.

    Writable tiles reflow with the screen: they attach as in 0.7.10, so the screen in use sizes the seat and text reflows on resize, and once attached tmux handles typing and paste directly. Read-only tiles keep showing the seat without attaching, typing into it or resizing it. Fixed web geometry is opt-in (terminal.fixed_geometry, off by default); that browser option wasn't exercised in our checks. Checked in one run in real Herdr 0.9.5 on tmux 3.4 (reflow while viewing, typing and paste once attached, and a tmux window fixed by hand at 80x24), with typing and paste also checked on tmux 3.4, 3.3a and 3.6; phone-size screens and tmux 3.3a weren't run in Herdr.

    #2868, #2757Link

  • FixedClosing the herdr-core terminal that started OpenRig no longer ends the daemon or your seats. A community contribution.

    Closing the herdr-core terminal that started OpenRig no longer ends the daemon or its seats. After merging, @w4rc0n ran a real close with herdr-app 0.1.13 in an isolated Linux sandbox: without the change the daemon, tmux server and seat ended, and with it they kept running. That sandbox had no systemd --user, so herdr-core's service-unit path wasn't run, and a tmux server started inside the terminal before the daemon still ends with it.

    #2737 · thanks @w4rc0nLink

  • FixedTerminal snapshots keep their colours, reattaching during a teardown works, and rig doctor says why tmux control mode is off. A community contribution.

    Terminal snapshots keep colours, a reattach during a broker teardown works, and rig doctor says why tmux control mode is off.

    #2654, #2671, #2633, #2707 · thanks @twotnguyen, @seanmcnLink

Speed under load 3

  • ChangedThe stuck sweep is much lighter on busy installs: each pass takes about half as long, with far shorter stalls. A community contribution.

    The stuck sweep batches its reads: on a copy of a busy 340 MB database, a pass went from about 11 s to about 5 s and the longest stall from about 10 s to 0.57 s.

    #2649 · thanks @billbenettiLink

  • ChangedFewer events pile up: view.changed isn't stored any more, and retention.events_days can prune history-only events, which can't be undone. A community contribution.

    view.changed events are no longer stored, and opt-in retention.events_days prunes eight history-only event types.

    #2695, #2699 · thanks @billbenettiLink

  • ChangedThe web UI loads the newest 100 events, and daemon.seat_poll_interval_ms lets you trade activity freshness for daemon CPU. A community contribution.

    The web UI loads the newest 100 events; daemon.seat_poll_interval_ms trades activity freshness for daemon CPU.

    #2704, #2688, #2636, #2690, #2713 · thanks @billbenetti, @seanmcn, @AummadourLink

Docs and tests 1

  • ChangedDocs and tests: daemon HTTP clients and bearer tokens, the 0.7.10 capability map, a neutral TUI demo snapshot, a web UI editor timer, and test and CI fixes. A community contribution.

    Docs and tests. Daemon HTTP clients and bearer tokens, the 0.7.10 capability map, a neutral TUI demo snapshot, a web UI editor timer, and test and CI fixes.

    #2652, #2736, #2724, #2689, #2753, #2681, #2685, #2673, #2628 · thanks @dajiaohuang, @seanmcnLink

Behaviour that changed 8

  • ChangedSends and work notices that meet a person's draft now join it instead of being refused; rig config set transport.draft_delivery refuse brings the refusal back.

    Sends and work notices that were refused with prompt_draft now go through by default, joined to the person's draft. rig config set transport.draft_delivery refuse restores the refusal from the next send, and under refuse a draft only the input box shows now refuses too.

    #2645, #2653Link

  • ChangedA Pi seat with an absolute PI_CODING_AGENT_DIR uses it as its account home, and won't launch without an auth.json there. A community contribution.

    A Pi seat with an absolute PI_CODING_AGENT_DIR uses it as its account home; no auth.json, no launch.

    #2630 · thanks @seanmcnLink

  • Changed/api/events no longer sends view.changed. A community contribution.

    /api/events no longer emits view.changed.

    #2695 · thanks @billbenettiLink

  • ChangedThe stuck sweep files one backlog notice where it used to file one per task.

    The stuck sweep files one backlog notice where it filed one per task.

    #2752Link

  • ChangedA prepared managed compaction shows as waiting, and a manual rig compact over it reports already_in_progress. A community contribution.

    A prepared managed compaction stays waiting, and a manual rig compact over it reads already_in_progress.

    #2698, #2716 · thanks @billbenettiLink

  • ChangedThe daemon and seats no longer inherit HC_SCOPE, HC_TERMINAL_ID or HC_TERMINAL_SOCKET. A community contribution.

    The daemon and seats no longer inherit HC_SCOPE, HC_TERMINAL_ID or HC_TERMINAL_SOCKET.

    #2737 · thanks @w4rc0nLink

  • ChangedRead-only tiles show a seat without attaching; writable tiles attach as in 0.7.10, and detaching ends only that viewer.

    Read-only terminal tiles show the seat without attaching; writable tiles attach as in 0.7.10, and detaching ends that viewer while the agent keeps running.

    #2757, #2868Link

  • ChangedWith an operator agent on the target, an answer to a pairing request no longer decides it: the operator does, with rig host approve or rig host deny.

    On a target with a kernel operator that can receive answers, an answer to a host pairing request no longer decides it: the operator decides with rig host approve <code> or rig host deny <code>.

    #2900Link

Known issues: 38 for this release. Read them
  • Draft-aware send under Claude Code's update banner: with the draft-aware typing guard, a send to a seat showing the bare ✔ Update installed banner can paste the message and not press Enter, leaving it typed but unsent. Look at the input box before sending again. A fix is on main (#2786) and isn't in 0.7.11. Managed compaction under the same banner sent /compact 3 of 3 times in our test.
  • Unsent compaction preparation: Managed compaction can repeatedly leave its preparation unsent when it cannot read a seat's input box. Inspect the seat; rig compact <seat> --skip-map is the supported manual recovery route, subject to its normal idle and delivery checks; this route was not exercised by the 0.7.11 release checks.
  • A post-compaction step can still hold when the box reads as typed, under draft-aware delivery or the typing guard, or after a lost /compact. Run rig compact <seat> --cancel, then send a restore request naming the newest restore map, marker and packet. A work notice refused at a prompt now waits for that step, but notices at daemon start and on a new handoff don't check for it yet. (#2575, #2666)
  • OpenShell: on OpenShell 0.1.6 the maintained cleanup (delete-owned) now works for a custom image, and recreate and an exact resume passed in our native run. A restored guest takes in its startup content again, so strict recall after a restore isn't met. In our run, finishing the guest's task was assisted and time-boxed, so whether it finishes unassisted is unknown. Never give the guest the daemon's main API port (normally 7433), and after a same-generation reconciled launch, run rig environment connect yourself. (#2755)
  • First users: in one of our three Claude first-user runs, the agent set up the starter team with a Codex reviewer without offering a choice, and a person with only Claude then reached a Codex sign-in. It depends on the agent's choice.
  • rig down can start a duplicate claude --resume for a moment. It's pre-existing and the same on 0.7.10, and we saw no conversation write from it.
  • Herdr follow views: closing a tile when an agent leaves still isn't confirmed, as in 0.7.10.
  • Drafts: detection isn't complete. Under refuse, an unreadable input box lets the send go ahead, so an undetected draft goes with the message; under deliver, a result may not mention a draft it joined. (#2645, #2653)
  • Draft-aware delivery to Claude: a message held as draft_input_unknown still isn't retried. (#2605)
  • Claude provider switch: the last report on #2341, on 0.7.9, fails before any probe pane with "The seat's agent spec (queue.worker) wasn't found where its last launch read it." Its cause isn't established, and 0.7.11 isn't shown to fix it.
  • Pi seats with their own Pi login can stop at launch after upgrading; see Before you upgrade.
  • Host pairing with no operator agent: on a target with no kernel operator that can receive answers, no agent reads a typed answer; it gets another ask, and Approve or Deny decides. An attachment-only reply, or the literal [file reply], keeps no words there and doesn't deny (from the source; not run). (#2900)
  • Host pairing requests live in the daemon's memory, so a daemon restart drops an open request. Receipts, repeat asks and outcomes from clicks reach the requesting machine only while it keeps polling; an explicit rig host approve or rig host deny sends its outcome directly. A request that expires unanswered gets no further update. This comes from the source; no restart case was run. (#2900)
  • Host pairing on older targets: the change is on the machine being paired with, so targets running 0.7.9 or 0.7.10 still treat a typed reply as approval. (#2900)
  • Pi account homes: launch and resume passed in our native run. An account switch didn't complete in that run (the successor started and answered, the test model never confirmed, and the original seat stayed intact), so a completed switch and whether its selection persists are untested. The fix's env -u ordering is tested in macOS CI; for GNU and BusyBox it rests on their documented behaviour, because the Linux CI job doesn't exercise that branch. (#2782)
  • Early writable-tile input: as in 0.7.10, Enter or Ctrl-C typed while a new tile is still attaching can close that viewer. The agent keeps running; reopen the view. This case wasn't exercised in our checks. (#2868)
  • Tiles kept from 0.7.8, 0.7.9 or an earlier 0.7.11 build keep their old client. To refresh one, close only its viewer and reopen the view with rig terminal open; for a --follow view, use --no-follow first, then open a fresh view. The agent and its conversation aren't touched. In our run, kept 0.7.8 and 0.7.9 views kept their process, session and history through the upgrade and the refresh, but they already reflowed before it, so this isn't shown to repair a frozen viewer, and the follow-view upgrade didn't confirm, so it isn't qualified. (#2868)
  • Pi and OMP input order: On Node 22.21.0–22.22.0, 24.9.0–24.11.1 or 25.0.0–25.1.0, cursor-edited text in a Pi or OMP seat can be submitted in the wrong order when keys arrive together, potentially changing its meaning. This also affects 0.7.10. Node fixes are available in 22.22.1, 24.12.0 and 25.2.0, respectively: our input-reader reproduction passed on 22.22.1; the Node 24 and 25 affected ranges and fixes were checked at source, not runtime-tested by us. Real-terminal frequency has not been measured. See #2834.
  • Claude account homes: our checks couldn't verify whether a Claude seat's own account home takes effect, so these notes make no claim about it.
  • keep_saved skills: a skill whose source changes between rig down and the restore comes back missing, named in the restore's warnings; an edited seat copy is kept. (#2626)
  • Read-only terminal tiles each run one tmux command a second while showing: 8 tiles used about 6–8% of one core on an Apple Silicon Mac mini, against about 0.2% for 0.7.10's attached tiles. Writable tiles don't poll. (#2757)
  • rig exec: checked with Claude Code and Codex through their ACP adapters. A cancel is acknowledged, not settled, and says nothing about further spend. Cancel with rig exec cancel, not rig acp cancel.
  • ACP apps: checked in T3 Code (Beta) 0.1.7 on a pre-release build and with a scripted client. The 0.7.11 release checks ran ACP on Claude through acpx 0.15.1, a headless client, not in a desktop app, and the unanswered-question notice hasn't run in a live app. A cancel stops waiting; the work carries on. (#2648, #2686, #2712)
  • The openrig plugin hasn't run in Claude Desktop, the Codex app or Copilot CLI. A seatless app can't claim, update, hand off or answer questions, and everyone using the app on a machine acts as its seat. (#2647, #2657, #2683)
  • Grant-service assistants still aren't notified: a task stays queued until its receiver claims it. Relay: "Accepted by bridge" means the bridge has it, not the person, and a failed send replays only at a restart. (#2735, #2624)
  • Event retention can't be undone, and the database file doesn't shrink. (#2699)
  • Claude launch_wrapper hasn't run with zsh, on macOS arm64 or with a real installed Claude, and an alias or shell function named claude stops the launch. (#2746)
  • Going back to 0.7.10: besides the migrations, an older permission hook gives named-policy Claude sessions no decision until relaunched. (#2640)
  • Codex hooks: a session kept running across an upgrade can show "Hook failed — plugin contents changed; hook approval required" until relaunched, and 0.7.11 changes openrig-core again. rig seat restart --keep-conversation refuses a Codex seat launched with developer instructions (settings_drift), and one started by a 0.6.x tmux-send script (#2200).
  • Codex hook setup: with smol-toml 1.9.x and an existing hooks.json, OpenRig can leave its activity hooks and trust records unchanged. The range (^1.8.0) still permits 1.9.x; the repository lockfile uses 1.8.0. Not fixed in 0.7.11; a fix is on main (#2804) and isn't in this release. (#2720)
  • A Codex snapshot restore writes OpenRig's guidance blocks into a tracked AGENTS.md. Check git status before committing.
  • A scheduled reminder whose delivery fails before input isn't retried; the next occurrence still arrives. (#2478 covers a reminder that never reached its seat; this case remains.)
  • Claude Code 2.1.319 starts in auto mode by default, so a new Claude seat may act without asking; manual mode restores asking.
  • Also: permission requests in seat status show only the latest, in memory for five minutes, and suggested rules can contain sensitive values; Slack private channels need the documented, untested route, direct messages aren't supported and directory reads haven't run live; SSH host status reads unknown behind ProxyJump or ProxyCommand; advisories don't show on a native resume; seats handed over before 0.7.9 refuse stop, restart and clean; after a project-local install, plain rig isn't found in the TUI's own shell; with Claude Code 2.1.319, rig up can wrongly say "Startup prompt still staged … press Enter"; two npm installs into one folder at once once left a partial install, cause unknown.
  • Not run: a Codex first user reaching a finished result (for the third release), the Codex upgrade and journey checks, a Codex account home, the ACP desktop app, an agent reading pairing answers given in the TUI, Slack directory paging, whether a switched Pi account's selection persists, and the 0.7.10 comparison for the tile fix (#2757).

Docs that are out of date in this package (fixed on main)

  • docs/reference/seat-delivery.md says drafts are protected without naming the setting. Under the default, transport.draft_delivery: deliver, an ordinary send that meets a person's draft is joined to it and submitted, unless the seat's typing guard holds input (draft-aware, openrig-urgent, urgent-only or hold).
  • --binding on rig gateway human add is optional, though the CLI reference marks it required.
  • The hosted-members register example needs --delivery-class (for example --delivery-class B).

Thanks 15

Thank you to everyone whose work is in this release: @billbenetti, @seanmcn, @smota, @Aummadour, @dajiaohuang, @w4rc0n, @Mohsintl, @twotnguyen, @ziadeh and @Nikhi00718; to @w4rc0n for running the real terminal close behind #2737.

Thanks to @billbenetti for the reports behind #2752, #2660, #2738, #2749, #2666 and #2665; to @pr0xc3nt4ur1 for the report behind #2740 and #2743; to @oneandonlydean for the process chain behind #2751; to @niklasbaldi for the reports and causes behind #2654 and #2671; to @vadym-abstract-factory for the report behind #2717; to @w4rc0n for the fix and root cause in #2821; to @ziadeh for the reports behind #2622 and #2486; and to @mlc-factory-bot for the reports behind #2605 and #2607.

OpenRig 0.7.10Run a Claude Code or Codex task straight from your queue with rig exec, and a step held after compaction now goes in instead of waiting forever.3 added13 changed11 fixed

13 people thanked · Release notes

Highlights

  • AddedHand one task from your queue to Claude Code or Codex with rig exec run: it runs one turn and reports back, and you decide whether to accept the work.

    rig exec run <row> --harness claude|codex runs one turn through the maintained ACP adapter, in a connector that outlives the command. Use --plan, --wait, status and cancel. One run per row, and --again starts another turn. The outcome is the agent's report. Accepting the work stays with you.

    #2597, #2601, #2596Link

  • FixedA step held after a managed compaction now goes in after two idle polls even when the input box can't be read, instead of waiting forever; rig compact <seat> --state says when that happened.

    After two idle polls that can't read the input box, the held step goes in, and while a later step is still owed, rig compact <seat> --state says the last one went in over a box it couldn't read.

    #2576Link

  • FixedSends now leave any tmux mode, including one a person has open, and a refusal says why.

    Delivery leaves every tmux mode, and a refusal says why.

    #2594Link

  • ChangedThe rigs skill tries a user-writable npm prefix, or a version manager's Node, before a project-local install.

    The rigs skill tries a user-writable npm prefix or a version manager's Node before a project-local install.

    #2611Link

  • AddedSpec advisories show as launch warnings and never stop a launch, and an unknown uses key gets one. A community contribution.

    Spec advisories show as launch warnings and never stop a launch, and an unknown uses key gets one.

    #2606, #2585, #2618 · thanks @dajiaohuangLink

Before you upgrade 4

  • ChangedAfter installing 0.7.10, restart the daemon. There are no database updates.

    Run npm install -g @openrig/[email protected], then rig daemon stop && rig daemon start. There are no migrations.

    Link

  • ChangedOpenRig's own plugin goes to 0.1.26: it adds a permission-request hook and changes the refocus hook. It keeps a copy of each file it replaces, so reapply any local edit you still need.

    The openrig-core plugin moves from 0.1.25 to 0.1.26. It adds a permission-request hook and changes the refocus hook. Replaced files are kept under $OPENRIG_HOME/backups/managed-refresh/<id>/, so reapply any local edits from there.

    Link

  • ChangedRun rig agent validate <path>: a single-value uses.<category> now selects that resource, so a member fails to resolve if its pool doesn't hold it.

    Run rig agent validate <path>: a single-value uses.<category> now selects that resource, so a member fails to resolve if the pool doesn't hold it.

    Link

  • ChangedIf you run an OpenShell environment, rebuild its guest image with this release's guest.py. Its cleanup still fails against OpenShell 0.1.6.

    OpenShell users: rebuild the guest image with this release's guest.py (see daemon/assets/openshell/README.md).

    Link

Also in this release 18

Compaction, delivery and terminals 3

  • FixedA stale record naming a reused tmux pane no longer stops a send from leaving the mode.

    A stale record naming a reused tmux pane no longer stops a send from leaving the mode.

    #2644Link

  • FixedWritable views size the pane they show.

    Writable views size the pane they show.

    #2614Link

  • FixedHerdr views kept from 0.7.5 to 0.7.9 keep working after upgrading (Linux Herdr 0.9.5): a kept viewer stays confirmed and a follow view goes on adding tiles. Closing a tile when a seat leaves wasn't confirmed.

    Herdr views kept from 0.7.5 through 0.7.9 keep working after upgrading (Linux Herdr 0.9.5 / protocol 22): when only OpenRig's tile script changed, a viewer stays confirmed and a follow view goes on adding and closing tiles. A kept viewer that's already running keeps its earlier sizing for as long as it runs, its own re-attaches included. With a live Herdr after upgrading from 0.7.9, a kept viewer and a follow view's join worked. Closing a tile when a seat leaves wasn't confirmed. It follows @natefaerber's approach in #2467.

    #2634Link

Coordination and status 5

  • Addedrig seat status shows a Claude seat's latest permission request, with suggested rules labelled. Nothing is applied or approved, and suggested rules can contain sensitive values. A community contribution.

    rig seat status shows a Claude seat's latest permission request, with suggested rules labelled. Nothing is applied or approved.

    #2562 · thanks @AummadourLink

  • FixedRouting and status: a send to this host's own ID stays local, rig broadcast says UNCONFIRMED instead of FAILED for an uncertain recipient, refusals for seats handed over before 0.7.9 say why, rig roster reads conflicting activity as unknown, and set-runtime finds pod recaps. A community contribution.

    Routing and status: a send to <seat>@<rig>@<this host's ID> stays local; rig broadcast says UNCONFIRMED, not FAILED, for an uncertain recipient; refusals for seats handed over before 0.7.9 say why; rig roster reads conflicting activity as unknown; set-runtime finds pod recaps.

    #2600, #2572, #2574, #2593 · thanks @Vaishnavi220506, @dajiaohuang, @Nikhila-Dhevi-RLink

  • FixedRefocus names a gap in its trace instead of failing. A community contribution.

    Refocus names a trace gap instead of failing.

    #2582, #2587 · thanks @dajiaohuang, @billbenettiLink

  • FixedThe stuck sweep stops filing informational updates to people as unclaimed work. A community contribution.

    The stuck sweep stops filing informational updates to people as unclaimed work.

    #2586 · thanks @AummadourLink

  • Fixedrig slack status counts cross-host relays still in flight. A community contribution.

    rig slack status counts cross-host relays in flight.

    #2569 · thanks @dajiaohuangLink

Install, specs and errors 2

  • FixedPlain rig works in managed Codex seats however OpenRig was installed, with a Codex that supports allow_login_shell, because tool commands now run in a non-login shell, so login-only shell setup may be missing.

    Plain rig works in managed Codex seats however OpenRig was installed, with a Codex that supports allow_login_shell: tool commands now run in a non-login shell, and rig config set launch.codex_login_shell true defers to Codex's own setting.

    #2613Link

  • FixedClearer errors: a refused terminal token says "Terminal auth failed", the TUI shows the daemon's launch refusal, and rig doctor gives up on a silent listener after 2 seconds. A community contribution.

    Errors are clearer: a refused terminal token says "Terminal auth failed"; the TUI shows the daemon's launch refusal; rig doctor gives up on a silent listener after 2 seconds.

    #2577, #2556, #2564 · thanks @Aummadour, @dajiaohuangLink

Speed under load 1

  • ChangedUnder load, the execution view reads the review registry once per request, queue listings build one recovery index instead of a scan per task, and the event drain reads at most 500 rows at a time. Full listings ran about 63% faster on a test fixture; on a live install that's unmeasured. A community contribution.

    The execution view reads the review registry once per request. Queue listings build one recovery index instead of a scan per listed task. The event drain reads at most 500 rows at a time. On a test fixture, full listings were about 63% faster with the same output. The listing and drain changes are unmeasured on a live install.

    #2578, #2588, #2610 · thanks @billbenettiLink

OpenShell 2

  • ChangedThe OpenShell worker still can't be cleaned up against OpenShell 0.1.6, so recreate and restore can't run yet; its guest now passes the exec's CA settings to Claude and does useful work and a verified export.

    The guest passes the exec's CA settings to Claude, so API calls stop failing with SELF_SIGNED_CERT_IN_CHAIN. TLS checks stay on. With OpenShell 0.1.6 the guest now authenticates, does useful work, makes a verified export and completes its task.

    #2602Link

  • ChangedOpenShell's maintained cleanup still fails against OpenShell 0.1.6. Deleting an environment OpenRig created now reads Podman's inventory, and an unconfirmed cleanup stops as environment_cleanup_unconfirmed.

    Owned-environment deletes read Podman's inventory, and an unconfirmed cleanup stops as environment_cleanup_unconfirmed. The maintained cleanup still fails against OpenShell 0.1.6 (see Known issues).

    #2603Link

Docs and tests 1

  • ChangedDocs and tests: Codex named profiles, openrig-core skill loading, what the runner contract has run, telemetry's guarantee beside the separate, untested openrig-telemetry exporter, and a real-tmux test that waits for the prompt. A community contribution.

    Docs and tests. Codex named profiles, openrig-core skill loading, what the runner contract has run, telemetry's guarantee beside the separate, untested openrig-telemetry exporter, and a real-tmux test that waits for the prompt.

    #2604, #2584, #2592, #2595, #2589, #2559 · thanks @dajiaohuang, @smotaLink

Behaviour that changed 4

  • ChangedA held post-compaction step goes in over an unreadable input box, so an unrecognised draft may receive the restore text.

    A held post-compaction step goes in over an unreadable box, so an unrecognised draft may receive the restore text.

    Link

  • ChangedSends leave any tmux mode a person has open.

    Sends leave any tmux mode a person has open.

    Link

  • Changedrig up can print advisory warnings.

    rig up can print advisory warnings.

    Link

  • ChangedManaged Codex seats run tool commands in a non-login shell, so login- or rc-only setup, shell functions and aliases may be missing, and a model request for login: true gets Codex's refusal.

    Managed Codex seats run tool commands in a non-login shell, so login- or rc-only setup, shell functions and aliases may be missing, and a model request for login: true gets Codex's refusal.

    Link

Known issues: 13 for this release. Read them
  • OpenShell: maintained cleanup (delete-owned) fails against OpenShell 0.1.6, which doesn't mount a workspace volume, so recreate and restore can't run. Never give the guest the daemon's main API port (normally 7433). After a same-generation reconciled launch, run rig environment connect yourself.
  • rig exec: it was checked with Claude Code and Codex through their ACP adapters. A cancel is acknowledged, not settled, and says nothing about further spend. Cancel with rig exec cancel, not rig acp cancel.
  • A post-compaction step can still hold: when the box reads as typed, under draft-aware delivery or the typing guard, or after a lost /compact. Run rig compact <seat> --cancel, then send a restore request naming the newest restore map, marker and packet. (#2575)
  • Draft-aware delivery to Claude still misses the bare ✔ Update installed · Restart to update banner, and a message held that way isn't replayed. Managed compaction can also stop before sending /compact (target_activity_unknown) on a Claude seat showing that banner; in our test, a freshly launched seat once let it through, which isn't a tested fix. (#2605)
  • Claude rebuild: on Linux, a launcher script that execs the native installer's symlink can still lead to a readiness timeout even though Claude is visible. The launch check also does not recognize --no-chrome. This pre-existing issue is not fixed in 0.7.10. (#2341)
  • Permission requests in seat status: only the latest shows, held in memory for five minutes and not persisted across a daemon restart. Suggested rules can contain sensitive values.
  • Codex hooks: sessions kept running across the 0.7.9 upgrade showed "Hook failed — plugin contents changed; hook approval required" until relaunched. 0.7.10 changes openrig-core again. After upgrading to 0.7.10, rig seat restart --keep-conversation refuses a Codex seat that was launched with developer instructions (settings_drift on developer_instructions) and stops nothing.
  • Codex hook setup: with smol-toml 1.9.x and an existing hooks.json in the Codex home, OpenRig can leave its activity hooks and trust records unchanged and log "its trust records couldn't be written exactly". The reporter saw Codex stop at "Hooks need review". The dependency range in this release permits the affected version; our repository lockfile uses 1.8.0. This is a pre-existing issue, not fixed in 0.7.10. (#2720)
  • Slack: private channels need the documented route, which we don't test, and direct messages aren't supported. Channel reads were checked on a live workspace; people (directory) reads weren't. Check errors for a short token fragment before sharing them.
  • Claude Code 2.1.319 starts in auto mode by default, so a new Claude seat may act without asking. In our first-user test, the builder committed after the person asked to be asked first. Switching that seat to manual mode restored asking.
  • A Codex snapshot restore writes OpenRig's guidance blocks into a tracked AGENTS.md, even on Codex 0.164 or later, leaving the working tree dirty. Check git status before committing.
  • A scheduled reminder whose delivery fails before input isn't retried. The next scheduled occurrence still arrives.
  • Also:
    • SSH host status reads unknown behind ProxyJump or ProxyCommand, which doesn't mean the connection is broken.
    • Advisories don't show on a native resume.
    • Seats handed over before 0.7.9 refuse stop, restart and clean until a later launched handover or managed launch.
    • After a project-local install, plain rig isn't found in the TUI's own shell (managed Codex seats are fine). Use the full path.
    • With Claude Code 2.1.319, rig up can wrongly say "Startup prompt still staged … press Enter". Pressing Enter on the empty box adds nothing.
    • In our Codex first-user test, two npm installs ran into the same folder at once and left a partial install (the kernel didn't start, and some files were missing). Which install wrote it, and whether it's new in 0.7.10, is unknown.

Thanks 13

Thank you to everyone whose work is in this release: @dajiaohuang, @Aummadour, @billbenetti, @smota, @Nikhila-Dhevi-R and @Vaishnavi220506; to @AlephCasara, whose work on a fork pointed us to the unpaged event notification drain (#2610), and to @natefaerber, whose approach in #2467 the Herdr view fix follows; and, for reports carried into this release, @billbenetti, @KM199, @ziadeh, @dajiaohuang, @jajabong, @george661 and @aanestesia.

Thanks also to @smota for the OpenTelemetry discussion behind #2589.

Before release we tested the exact package: the private and stock content checks and the release Tests; a real upgrade from 0.7.9 on our own servers; the speed and memory baseline (no worse, slightly faster); the OpenShell worker's sign-in, useful work, verified export and finished task (its cleanup still fails, and recreate and restore weren't run); Slack on a real workspace; a Claude first user from the website to a finished result; Codex first-user setup (plain rig in every Codex seat); and 98 selected broader regression cells (57 passed, 8 had other results, 14 were incomplete and 19 weren't run), with no product regression found. A Codex first user didn't reach a finished result in our test: both attempts stopped on errors in our test setup, so that path's end result is untested.

OpenRig 0.7.9Observations now open work on their own, and a person's typed words reach a runner agent while every default permit is recorded.6 added15 changed5 fixed

40 people thanked · Release notes

Highlights

  • ChangedStream intake is on by default: each rig stream emit opens a queue task for the kernel's queue worker. To keep 0.7.8's behaviour, run rig config set stream.intake off after installing. A community contribution.

    Stream intake is on by default. Each rig stream emit now opens an intake row for the kernel queue worker (queue.worker), or adds a note to the one still unclaimed. The row wakes the queue worker like any queue row, and earlier stream history isn't replayed. To keep 0.7.8's behaviour, with no intake rows, run this after installing: rig config set stream.intake off.

    #2321 · thanks @Totopo27Link

  • AddedA person's typed words on a runner seat's permission ask now count: a plain yes or no answers it; any other words choose nothing, so OpenRig's default permits the request when the agent offered an allow option, and a runner can pass the words to the agent after its turn, never as the answer.

    A person's typed words reach the agent, and the ask says what they do. A reply of just yes or no counts as the agent's allow or reject. "Any other words choose nothing": OpenRig's default permits the request when the agent offered an allow option, and the words come back whole in the read result as said. Section 7 of docs/reference/harness-runner-contract.md lets a runner queue them for the agent "as an ordinary prompt" after the current turn: "They're never the answer."

    #2363, #2561Link

  • AddedEach permit OpenRig grants a runner by default is now recorded, once, as a stream item: read them with rig stream list --tag runner-permission-permit.

    Each permit OpenRig grants by default is recorded, once, as a stream item from the seat: when no one can be asked, and when an ask is closed without a choice (a row passed to an agent seat included). The record names the tool call, why no person answered, the option the agent got with its kind, and the request or ask. Read them with rig stream list --tag runner-permission-permit. A record has no destination, and one that can't be written doesn't change the permit. Stream intake reads past it, so it opens no intake row and wakes no one.

    #2361, #2563Link

  • AddedA working beat keeps a runner's long, quiet turn reading working, and the conformance check no longer falsely fails a correct runner on a busy machine. A community contribution.

    A working beat keeps a long, quiet turn reading working (section 4); a runner that sends none behaves as before. The Pi runner and the dsh example post it, and the conformance check covers it and no longer falsely fails a correct runner on a busy machine.

    #2370, #2336, #2368, #2375, #2530 · thanks @porterchildLink

  • FixedDelivery: fewer messages are held or misdirected on Claude seats, held messages are announced when a seat starts, undelivered reminders retry, and a stalled tmux client ends after 30 seconds.

    Delivery: fewer deliveries held or misdirected on Claude seats (prompt suggestions, wrapped lines, a wake's own paste, the Theme picker, quoted permission questions); held messages are announced when a seat starts or changes occupant; undelivered reminders retry; a stalled tmux client is ended after 30 seconds.

    Link

Before you upgrade 4

  • ChangedAfter installing 0.7.9, restart the daemon: four database updates run on its first start.

    Restart the daemon after installing: run npm install -g @openrig/[email protected], then rig daemon stop && rig daemon start. Four migrations (146 to 149) run on the first start.

    Link

  • ChangedStream intake is on by default: each rig stream emit opens a queue task for the kernel's queue worker. To keep 0.7.8's behaviour, run rig config set stream.intake off after installing. A community contribution.

    Stream intake is on by default. Each rig stream emit now opens an intake row for the kernel queue worker (queue.worker), or adds a note to the one still unclaimed. The row wakes the queue worker like any queue row, and earlier stream history isn't replayed. To keep 0.7.8's behaviour, with no intake rows, run this after installing: rig config set stream.intake off.

    #2321 · thanks @Totopo27Link

  • ChangedOpenRig's own plugin goes to 0.1.25 and keeps a copy of each file it replaces. Reapply any local edit you still need.

    The bundled openrig-core plugin advances from 0.1.24 to 0.1.25: its seat-continuity-and-handover skill changed. Managed refresh preserves replaced files under $OPENRIG_HOME/backups/managed-refresh/<id>/; reapply local edits you still need from that copy.

    #2420, #2554Link

  • ChangedIf you run an OpenShell environment, rebuild its guest image with this release's helper. The OpenShell worker still doesn't work in 0.7.9.

    If you run an OpenShell environment, rebuild its guest image with this release's helper (daemon/assets/openshell/README.md). An older helper rejects the new startup step, and the error names the rebuild.

    #2418Link

Also in this release 18

Assistants connected through a grant service (experimental) 1

  • AddedExperimental and unsupported. Off by default. Use at your own risk. With a grant service you supply and run, a hosted agent connected over MCP can now work the tasks assigned to its seat in your rig: take one on, add progress notes, set it aside until what it's waiting on happens, and close it with an answer.

    Experimental and unsupported. Off by default. Use at your own risk. This path needs a grant service that you supply and run; ordinary use of OpenRig doesn't need one. With rig mcp serve --http --grant-service <url>, a connected assistant can now claim, update and park the rows addressed to its own seat, and see its team with rig_team, within the scope its existing tools have. Serving MCP over HTTP behind your own tunnel "is like opening a port in your firewall." See docs/reference/hosted-members.md.

    #2384Link

For client authors 1

  • AddedNew daemon reads let a client list people and the default person, read a person's open updates without Slack, and read a rig's messages in one request. A community contribution.

    New daemon reads, two of them by @dajiaohuang: people and the default person, a person's open updates without Slack, a rig's messages in one request, and Slack channels and people without the client holding the bot token. An opt-in decisionRevision lets a client settle exactly the decision its person reviewed. docs/reference/daemon-http-clients.md covers them. The people, updates and messages reads pass their route tests, but no real client used them in our release testing.

    #2495, #2497, #2496, #2501, #2448, #2490 · thanks @dajiaohuangLink

Seats, delivery and the TUI 5

  • AddedOptions and views: specs.builtins_visible: false hides built-in specs, a Claude member's plugin_channels pass to --channels (not yet run with a real channel plugin), and rig context add <url> installs into a new nested name. A community contribution.

    Options and views: specs.builtins_visible: false hides built-in specs; plugin_channels passes a Claude member's plugin channels to --channels (by @Aschenbath, carrying on @todie's fork work), warns beside claude_mcp: none, and hasn't been run with a real channel plugin; rig context add <url> installs into a new nested name; TUI and web UI display fixes.

    thanks @Aschenbath, @todieLink

  • FixedStatus: idle Claude and busy Codex seats read correctly in more layouts, an unreadable pane reads unknown rather than its last verdict, and uncertain sends read unconfirmed.

    Status and receipts: idle Claude and busy Codex seats read correctly in more layouts; stale window samples expire, so a seat whose pane can't be read reads unknown rather than its last verdict; uncertain sends read unconfirmed or indeterminate instead of delivered, lost or failed.

    Link

  • FixedGuidance and handover: an edited culture or startup file reaches the next start, shared CLAUDE.md and AGENTS.md files stop growing, and several Claude rebuild and resume failures are repaired.

    Guidance and handover: an edited culture or startup file reaches the next start, while your own edit to a managed block is kept; shared CLAUDE.md and AGENTS.md files stop growing; handover successors get their guidance and a list of their startup files; several Claude rebuild and resume failures are repaired.

    Link

  • FixedAsks: in a shared workspace, any registered person can settle another's ask and the first answer wins, and Slack records a click on an ask that went back to waiting.

    Asks: in a shared workspace, any registered person can settle another's ask and the first answer wins; a person may have no connector binding; Slack records a click on a re-parked ask and marks asks handled.

    Link

  • FixedInstall and hosts: preflight warns when a Codex seat's login shell can't find rig, rig doctor no longer hangs on a silent port, and upgrade backups work without the sqlite3 CLI.

    Install and hosts: the upgrade skill backs up without the sqlite3 CLI when Node has node:sqlite; preflight warns when a Codex seat's login shell can't find rig; rig host ls reads your ssh config with ssh -G, which runs any Match exec command in it; rig doctor no longer hangs on a port held by a listener that never replies; a scoped launch on tmux 3.4 keeps its default command.

    Link

The OpenShell worker 1

  • ChangedThe OpenShell worker still doesn't work in 0.7.9: in release testing it couldn't reach its model, and deleting an environment it created didn't run. Don't rely on this path.

    The OpenShell worker still doesn't work in 0.7.9. Don't rely on this path. 0.7.9 repairs the layer that stopped it in 0.7.8: in our release testing the guest's agent now starts and reaches its first input. Startup reaches the guest through a hash-checked first-input file, and nothing is typed through the host viewer; the case where the viewer exits wasn't run in our release testing. Readiness checks the guest's own execution, and a failed owned delete reports the stage that failed. Our release testing on 0.7.9 then found two more problems: The worker can't reach its model. The guest's Claude starts, but every API call fails with SELF_SIGNED_CERT_IN_CHAIN. The guest launcher builds a clean environment and leaves out the CA settings the OpenShell exec supplies (NODE_EXTRA_CA_CERTS, SSL_CERT_FILE, REQUESTS_CA_BUNDLE and CURL_CA_BUNDLE). Deleting an owned environment doesn't run. Its inventory step misreads a "Not Found" reply, so the delete is never sent and the owned resources stay. In our test they were removed with the vendor's own cleanup. Attached resources were kept, as intended, and the worker stopped cleanly. With the four CA settings passed through by hand, a worker did useful work; a verified export, an exact restore and a finished task weren't shown. Fixes for both problems are on main (#2602, #2603). They aren't in 0.7.9 and haven't been run end to end.

    #2418, #2404Link

Behaviour that changed 10

  • ChangedStream intake is on by default; rig config set stream.intake off keeps 0.7.8's behaviour.

    Stream intake is on by default (see Before you upgrade).

    Link

  • ChangedFresh Pi seats, and fresh Codex seats on 0.164.0 or later, get OpenRig's guidance outside your repository's AGENTS.md.

    Fresh Pi seats, and fresh Codex seats on 0.164.0 or later, get OpenRig's guidance outside the repository AGENTS.md: Pi in its own agent folder (unless that file or folder is a link), Codex as launch developer instructions. Codex still uses the repository file for a resume, fork, restore or handover successor, an older or unknown version, or a config layer that sets developer_instructions or can't be read. If only your shell startup sets CODEX_HOME, OpenRig reads ~/.codex, so a developer_instructions in your home is replaced for that session; declare the same absolute path as CODEX_HOME in the member's or rig's env: to have it checked.

    #2432, #2441, #2443Link

  • Changedrig down removes OpenRig's own additions from a working folder once no live seat uses them.

    rig down removes OpenRig's own additions from a working folder once no live seat uses them.

    #2387Link

  • ChangedAfter upgrading, the Slack connector marks asks that ended earlier as handled, at Slack's edit rate: about an hour for 450 asks.

    After upgrading, the Slack connector edits asks that ended earlier to show they were handled, at Slack's edit rate: about an hour for 450 asks. rig slack status shows pending edits.

    #2472Link

  • ChangedA later answer to a settled ask gets 409 qitem_already_terminal and records nothing.

    A later answer to a settled ask gets 409 qitem_already_terminal and records nothing.

    #2386Link

  • Changedrig send --verify reports unconfirmed and exits 1 when it can't see what its Enter did. A community contribution.

    rig send --verify reports unconfirmed and exits 1, not delivered, when it can't see what its Enter did.

    #2509 · thanks @dajiaohuangLink

  • Changedrig export with no -o writes rig-export.yaml beside an existing rig.yaml instead of replacing it. A community contribution.

    rig export with no -o writes rig-export.yaml beside an existing rig.yaml instead of replacing it.

    #2356 · thanks @Nikhi00718Link

  • Changedrig workspace validate exits 1 for malformed optional frontmatter. A community contribution.

    rig workspace validate exits 1 for malformed optional frontmatter.

    #2396 · thanks @oodadoudouLink

  • ChangedWhen an active rig name matches more than one rig, rig env lists the matching rig IDs and stops, and rig doctor --spec reports unknown, instead of using the first match. A community contribution.

    An active rig name that matches more than one rig makes rig env down, status and logs list the matching rig IDs and stop, and rig doctor --spec report conformance as unknown, instead of using the first match.

    #2548, #2550 · thanks @dajiaohuangLink

  • ChangedNew default kernels start in <workspace.root>/kernel; existing kernels stay where they are.

    New default kernels start in <workspace.root>/kernel. Existing kernels stay where they are; docs/reference/agent-startup-guide.md describes the optional move.

    #2402Link

Known limits: 16 for this release. Read them
  • OpenShell: the worker doesn't work in 0.7.9 (see The OpenShell worker). 0.7.8's requirements, cost note and cleanup limits still apply, including "Never grant the guest access to the daemon's main API port (normally 7433)." A same-generation reconciled launch opens no viewer, so run rig environment connect yourself; non-text startup actions aren't supported on environment seats.
  • Grant-service assistants aren't woken: "an item stays queued until its receiver claims it."
  • Open updates for a person read a 1,001-row window, so a page can come back short, marked truncated.
  • Slack: a private channel needs the documented route, which we don't test, and direct messages aren't supported. The channel and people reads, and a click on a re-parked ask, haven't been run against a live Slack workspace in our release testing. Redaction of the bot token from a transport error can still leave a malformed token fragment shorter than six characters, so review an error before sharing it. (#2503)
  • SSH host status reads unknown behind a ProxyJump or ProxyCommand; that isn't proof the connection is broken. (#2488)
  • Shared asks: "a click's option written before its answer row … can stand beside or inside the closer's answer without the first clicker's authorship."
  • Existing seats pick up Codex launch instructions and the single skill load at their next fresh launch. A CLAUDE.md or AGENTS.md that already grew isn't trimmed.
  • Permit records last as long as stream retention keeps them. A permit a runner makes on its own, when it can't reach OpenRig, is in its pane only. For an ask opened before 0.7.9, a record may omit the option's kind. (#2361)
  • Draft-aware delivery to Claude: on 0.7.8 with Claude Code 2.1.319, deliveries to idle Claude agents, queue wakes included, were reported held at an empty prompt when a narrow pane showed ✔ Update installed · Restart to update on its own line. 0.7.9 still doesn't recognize that bare banner, though it recognizes /rc and the full versioned banner. A message the draft-aware delivery path holds isn't replayed automatically by that path. (#2605)
  • After a managed compaction, the restore request can stay held. OpenRig delivers each post-compaction step only when it can read the seat's input box as empty. When it can't, it holds the restore request and keeps retrying on its polls, so the seat can sit idle at an empty prompt with its restore not yet requested. rig compact <seat> --state and rig seat status show the restore as owed, and from the second failed attempt the seat's owner gets a queue item naming it. To restore by hand, send the seat a restore request naming its newest restore map, its restore marker and its packet, then settle the owed attempt with rig compact <seat> --cancel; a poll can still race that step. Reported on 0.7.8, and 0.7.9 behaves the same way. (#2575)
  • Seats handed over before 0.7.9 keep their adopted origin until a later launched handover or managed launch records a new session, so until then rig seat stop, restart and clean refuse them as before. (#2440)
  • rig broadcast: an uncertain recipient's outbox receipt now reads indeterminate, but the broadcast's own output for that recipient still says FAILED. Check that seat with rig capture before resending. (#2507)
  • Codex hooks after an upgrade: Codex sessions kept running across the upgrade show "Hook failed — plugin contents changed; hook approval required" until relaunched. In our upgrade test from 0.7.8, one seat restarted with OpenRig's managed restart showed no review afterwards.
  • Codex seats can still report rig: command not found when rig isn't on the login shell's PATH: with Node outside it, or when npm can't install globally and OpenRig is installed inside the project instead. Preflight now warns at launch. In our testing the agents recovered by calling rig by its full path; the getting-started guide describes a ~/.profile fix, which we didn't run.
  • What we ran end to end under the runner contract: this release's dsh example runner, natively, with dsh 0.2.1-rc.2 on DeepSeek's deepseek/deepseek-v4-flash through dsh's pi-ai OpenRouter chat-completions profile, against 0.7.8 Core: two useful queue tasks, queued and multiline input, a quiet tool interval of about 26 seconds that still read working, allow-once and reject-once with their file effects, cancel, a return to the same conversation with recall, and shutdown. The permission answers came from an automated test operator, and the run's preset added resume: true, which the shipped preset doesn't declare. dsh's own DeepSeek Messages route through OpenRouter failed with HTTP 400, and the cause isn't established. Not run: a missing-conversation refusal, cross-host restore, OpenShell, and other adapters, models or providers. 0.7.8's release tests had already run its dsh example end to end, so the 0.7.8 CHANGELOG's "No harness has run end to end under the contract yet" was out of date.
  • Fixed or changed from 0.7.8's limits: the dsh example's env: names, the conformance check's false failures, a person's typed words, the README's operator address, a rebuild behind a symlink, the rebuild receipt, a click on a re-parked ask, and recording a permit made when no one can be asked: a person's answer is recorded on the ask, and a default permit as the stream item above. The other 0.7.8, 0.7.7 and 0.7.6 known limits still apply.
OpenRig 0.7.8A person now answers a runner agent's permission requests, and runners get a conformance check to build against.7 added5 changed5 fixed

20 people thanked · Release notes

Highlights

  • AddedA runner seat's permission requests now reach a person: the default person gets an ordinary ask in the Feed and on Slack, with no setup. rig seat set-permissions-to chooses someone else, a request is permitted when no one can be asked, and refusing is opt-in with --deny.

    A runner seat's permission requests now reach a person, and the default is permit. The runner contract's first version refused every request. Section 7 of docs/reference/harness-runner-contract.md now covers who is asked: With a default person, "They get an ordinary ask in the Feed and on Slack. No setup is needed." To choose someone else, run rig seat set-permissions-to <seat> --to <person> --reason "…". --clear returns to the default. When no one can be asked, the request is "Permitted at once, with the agent's own allow option." Refusal is opt-in, with --deny. "A person's no is never a grant." An unanswered request "stays pending and visible" until the agent's turn ends: "It's never timed out into a grant."

    #2301Link

  • AddedSeats: each OpenRig home can have its own tmux server, a Claude member can opt out of MCP, and rig launch --seats first-starts seats; skill copies, activity hooks and startup declarations are kept across rig down, resumes and exports; and stops are clearer. A community contribution.

    Seats: an isolated tmux server per OpenRig home (rig config set terminal.tmux_server isolated); claude_mcp: none for a Claude member; resuming with a new token file; first starts on rig launch --seats; an accurate account record and kept effort after rig provider switch; skill copies, activity hooks and startup declarations kept across rig down, resumes and exports; clearer stops for handover's fork:<seat>, a missing conversation, claude not found, Codex restart refusals and failed unpins.

    #1260, #2177, #2269, #2342, #2344, #2337, #2338, #2190, #2297, #2287, #2255, #2282, #2330, #2332 · thanks @Aschenbath, @Ethereal49, @AdityaxDeore, @dajiaohuang, @Vaishnavi220506Link

  • Fixedtmux: no crash with OPENRIG_TMUX_CONTROL=1 when control clients end together, and a submit key a read-only client blocks is pasted instead. A community contribution.

    tmux: with OPENRIG_TMUX_CONTROL=1, no crash on tmux 3.3a to 3.7c when the control client ends while another leaves; a submit key that a read-only client blocks is pasted instead.

    #2317, #2325, #2345 · thanks @Aschenbath, @dajiaohuangLink

  • FixedSlack: a typed reply to a decision waiting on you is recorded as the answer, task text renders as Markdown, and resolved decisions stop showing as live asks. A community contribution.

    Slack and usage: typed replies to parked decisions are recorded as answers; row bodies render Markdown; resolved decisions stop showing as live asks; OpenRouter charge retries aren't delayed.

    #2293, #2299, #2316, #2349, #2314 · thanks @dajiaohuang, @ch-davidriott, @Vaishnavi220506Link

  • FixedTUI: agent pages show health and recent work, pod, spec and instance-table views read correctly, and rig terminal open mission:<id> --follow --provider herdr follows a mission. Linux Herdr 0.9.5 only. A community contribution.

    The TUI and views: agent pages show health and recent work; pod, spec and instance-table views read correctly; rig terminal open mission:<id> --follow --provider herdr follows a mission.

    #2263, #2264, #2265, #2266, #2327, #2260, #2289 · thanks @Nikhila-Dhevi-R, @Nikhi00718, @vanducngLink

Before you upgrade 3

  • ChangedAfter installing 0.7.8, restart the daemon: four database updates store new seat settings, among them a Claude seat's MCP opt-out and who answers a seat's permission requests. A community contribution.

    Restart the daemon after installing: run npm install -g @openrig/[email protected], then rig daemon stop && rig daemon start. Four migrations (142 to 145) store a Claude seat's MCP opt-out, seat activity grants, OpenShell environment bindings and the person chosen to answer a seat's permission requests.

    #2177, #2295, #2296, #2301 · thanks @AschenbathLink

  • ChangedOpenRig's own plugin goes to 0.1.24 and keeps a copy of each file it replaces. Reapply any local edit you still need.

    The bundled openrig-core plugin advances from 0.1.23 to 0.1.24. One line of its seat-continuity skill changed. Managed refresh preserves replaced files under $OPENRIG_HOME/backups/managed-refresh/<id>/; reapply local edits you still need from that copy.

    #2287Link

  • ChangedThe install is larger because the MCP SDK is now needed at runtime, so a clean install runs.

    The install is larger: in the 5 November clean-install check, 0.7.8 resolves to 118 npm packages (including OpenRig itself), against 0.7.6's 32. The MCP SDK is now a runtime dependency.

    #2374Link

Also in this release 9

Permissions for runner seats 3

  • AddedA conformance check tests a runner's answered path. It needs Node and tmux, but no daemon, model, credentials or network.

    A runner conformance check: node docs/reference/runner-conformance/check-runner.mjs --runner '<runner command with {agent}>' --name <harness>. It covers the answered path, and needs Node and tmux but no daemon, model, credentials or network.

    #2303, #2306Link

  • AddedAn example runner for DeepSeek Harness (dsh) comes with its preset to build against. OpenRig doesn't install it.

    An example runner for DeepSeek Harness (dsh), with its preset, is under docs/reference/community-harness-examples/dsh/. OpenRig doesn't install it.

    #2305Link

  • AddedA seat activity grant lets a runner outside the host's hook setup report activity for one seat, without the install-wide hook token.

    A seat activity grant lets a runner outside the host's hook setup report activity for one seat and launch, without the install-wide hook token.

    #2295Link

The OpenShell reference isn't usable in 0.7.8 1

  • AddedThe NVIDIA OpenShell sandbox reference isn't usable in 0.7.8: in release testing its Claude worker never connected, so no work ran. Don't rely on it.

    0.7.8 includes rig environment (setup, create, attach) and a reference for binding a seat to an NVIDIA OpenShell sandbox (daemon/assets/openshell/README.md). In our release testing the worker never became usable: after the sandbox was created and the native process started, rig environment connect failed when its check timed out after 5 seconds, so no team work ran. Don't rely on this path in 0.7.8. The packaged CHANGELOG and What's new describe it as working; this release body replaces them on that point.

    #2296, #2300, #2378Link

Seats, delivery and the TUI 3

  • AddedHosts: rig host edit and rig host remove arrive, OpenRig warns when another user's daemon holds the port, and rig daemon status shows a pending start. A community contribution.

    Hosts and setup: rig host edit and rig host remove; a warning when another OS user's daemon holds the port; rig daemon status shows a pending start.

    #2310, #2346, #2302, #2348 · thanks @DeryFerd, @Vaishnavi220506Link

  • FixedWakes: reminders stop at a full quota, escalations stay deliverable with no person to reach, OpenRig's own Codex hooks are trusted when no choice is recorded, and refusals name their fix. A community contribution.

    Wakes: OPENRIG_WAKE_SUSPEND matches destinations with a colon; prompt escalations stay deliverable without a reachable person; reminders stop at a full quota; human@kernel raises no false finding; OpenRig's own Codex hooks are trusted when no choice is recorded; refusals name their fix.

    #2353, #2343, #2281, #2286, #2294, #2290, #2284, #2280, #2273, #2202 · thanks @dajiaohuangLink

  • FixedAlso: MCP text is cut between whole characters, an ACP cancel survives a failed note, long transcript lines read faster, and Pi and the kernel dashboard get recovery guides. A community contribution.

    Also: MCP text is cut between whole characters; an ACP cancel survives a failed note; long transcript lines read faster; there are Pi and kernel dashboard recovery guides.

    #2268, #2262, #2274, #2186, #2275 · thanks @Nikhi00718, @Vaishnavi220506, @oodadoudou, @dajiaohuangLink

Behaviour that changed 2

  • ChangedA runner that follows section 7 of the runner contract now gets answers or permits instead of refusals; --deny keeps a seat refusing.

    A runner following section 7 gets answers or permits, not refusals. --deny keeps a seat refusing.

    Link

  • ChangedOn tmux older than 3.7c, OPENRIG_TMUX_CONTROL=1 uses spawned clients instead of a control client.

    On tmux older than 3.7c, OPENRIG_TMUX_CONTROL=1 uses spawned clients instead of a control client.

    Link

Known limits: 26 for this release. Read them

Runner seats

  • What we ran end to end: Our Linux release tests exercised dsh-seat 0.3.0 with dsh 0.2.1-rc.2: useful work, a person's allow and deny through the answered path, and cancel. The same dsh-seat session resumed after a managed down/up. The shipped #2305 preset declares no resume; a fresh launch is a new conversation. We did not test another harness end to end under this contract for this release.
  • The dsh example's OPENRIG_DSH and OPENRIG_DSH_HOME aren't accepted in a rig spec's env:. A preset command wrapper that exports them was the route we observed. (Fixed on main, #2414; not in 0.7.8.)
  • Cancel a dsh turn by typing a bare /abort in the pane. A /abort sent with rig send is an ordinary prompt.
  • An in-place keep-conversation restart is Codex-only.
  • The answer owner is a registered person. "A colleague's answer is followed on this host. If the ask is handed to another host, the request waits, shown as needs input, until the agent's turn ends."
  • allow_always from a permit: with no one to ask, "If the agent offers only allow_always, the harness then remembers a permission nobody chose."
  • "Permits and answers aren't recorded beyond the runner's pane and the ask itself."
  • Coming as follow-ups: recording a permit made when no one can be asked, and passing a person's typed words that aren't a plain yes or no to the agent.
  • The dsh example keeps one hold per seat: "if dsh asks twice in one turn, settling one ask releases the hold while the other may still wait on a person."
  • The conformance check can falsely fail a correct runner on a busy machine (case 4b's pending count). Fixed on main; not in 0.7.8.

OpenShell

  • The worker isn't usable (above). The reference also requires NVIDIA OpenShell 0.1.6, a Linux image, and an API-backed provider using ANTHROPIC_API_KEY; subscription or OAuth credentials aren't supported. "Provider registration and image construction can incur costs."
  • The OpenShell README example uses operator@kernel; the actual kernel operator is operator-agent@kernel.
  • "Never grant the guest access to the daemon's main API port (normally 7433)." The guest-only listener is what confines a guest's reach. Its grant only authorizes requests for its own seat and launch.
  • When the viewer's command exits, OpenRig can type the seat's startup text into the host shell, and a line of it can run there as a command. In our test, rig whoami --json ran on the host. The missing check is the same in 0.7.6; environments are a new way to trigger it.
  • Cleanup: delete-owned didn't confirm its delete in our test, and the vendor's own delete cleaned up. A delete still finds the sandbox by name after reading its ID, so a deliberate name replacement in that gap is an open race.

Typing and delivery

  • With the typing guard off (the default for agent seats), an ordinary send submits whatever is in the input box, including a person's unsent draft. rig seat set-typing-guard <seat> --mode draft-aware protects an unsent draft.

Codex seats

  • The alert for a kernel Codex seat stopped at hook review doesn't fire. #2290 added it, but a managed Codex pane runs under a shell, so the check never matches and nobody is told. The review itself still shows in the pane.
  • After an upgrade, Codex seats that kept running show "Hook failed — plugin contents changed; hook approval required" and lose refocus until relaunched.
  • With Node installed outside the login PATH (seen with an /opt tarball), a kernel Codex seat can report rig: command not found. In our first-user test, asking the agent to fix PATH recovered it.

Claude seats

  • For a Claude installed at a custom path not named claude, a provider switch can't read the running effort (it uses the authored effort, and says so), and rig down may briefly run a resume probe.
  • On macOS, after a daemon restart, rig seat continue can refuse a healthy auto-mode Claude seat with attention_required. Ordinary sends still work.
  • A rebuild still waits when the running Claude's command is a symlink to the launched binary (the case reported in #2341). The repair is on main; not in 0.7.8.

Handover and Slack

  • The rebuild-handover receipt reports provenanceRecordWritten and departingSessionKilled as false even when both happened, so don't re-run a handover on those two fields alone. (Fixed on main, #2420.)
  • A button click on an ask its owner re-parked is answered "Already answered", and resumes the owner with the earlier answer without a wake; a typed reply records a new answer. (Fixed on main, #2421.)

The packaged notes

  • The packaged CHANGELOG and What's new still say 0.7.7 isn't published. It was published on November 2. They also describe the OpenShell reference as working (above), and the capability map says a typed reply to a question parked on its own person isn't recorded as the answer, which 0.7.8 now does (#2293).
  • The 0.7.7 and 0.7.6 known limits still apply.

Thanks 20

Thank you to everyone whose work is in this release: @Aschenbath, @dajiaohuang, @Vaishnavi220506, @Nikhila-Dhevi-R, @Nikhi00718, @oodadoudou, @DeryFerd, @ch-davidriott, @vanducng, @Ethereal49, @AdityaxDeore and @Mydudeclaps; to @bpamiri for dsh-seat, whose fake agent the conformance check's stand-in follows; and, for reports carried into this release, @salbang, @ziadeh, @davey64, @bpamiri, @oneandonlydean, @xwcq, @seanmcn and @AlexGhanem.

OpenRig 0.7.7Reliability fixes for Claude seats, including compaction that doesn't type over an unsent message.1 changed4 fixed

1 person thanked · Release notes

Highlights

  • FixedManaged compaction no longer types into a message you haven't sent: it checks the input box first and holds the step, saying why.

    Managed compaction no longer types into a draft. With the optional typing guard off (the default), compaction's preparation prompt could be pasted onto a message someone had typed but not sent. Now the preparation prompt, /compact and the restore prompts check the input box first: typed or unreadable input holds the step with a reason. A held restore prompt goes ahead on its own once the box is empty; a manual rig compact says why it stopped, to be retried once the box is empty. An empty box or Claude's own suggestion goes ahead.

    #2347Link

  • FixedA Claude agent at an empty prompt under Claude's 'Update installed' line reads idle again, so managed compaction no longer waits on it.

    A Claude seat under the "Update installed" line reads idle again. After Claude installs an update, it prints "✔ Update installed · /restart to apply" (or "Restart to apply") below its mode bar. OpenRig didn't recognize that line, so a seat at an empty prompt read unknown instead of idle, and managed compaction waited. Both spellings are now recognized; lines that only look similar still read unknown.

    #2311Link

  • FixedA Claude agent started through a wrapper script can be rebuilt with a handover again, instead of stopping after 30 seconds.

    A Claude seat launched through a wrapper script can be rebuilt again. On 0.7.6, rig seat handover --source rebuild on a seat whose claude is a #! script that starts the real Claude without exec stopped after 30 seconds with "Waiting to confirm the new Claude process in this pane", though the new Claude was running. The readiness check now also accepts the script's own direct child when it names this launch's conversation; every other check is unchanged.

    #2354 · reported by @oneandonlydeanLink

Before you upgrade 1

  • ChangedAfter installing 0.7.7, restart the daemon so the fixes take effect. There are no database updates, and OpenRig's own plugin is unchanged.

    Restart the daemon after installing so the fixes take effect: run npm install -g @openrig/[email protected], then rig daemon stop && rig daemon start. There are no database migrations. The bundled openrig-core plugin stays at 0.1.23 with unchanged files.

    Link

Also in this release 1

Claude 1

  • FixedA failed handover no longer moves the agent's resume target to the new, unprimed conversation.

    A failed handover no longer moves the seat's resume target to the new, unprimed conversation while the seat keeps its previous occupant.

    #2354Link

Known limits: 5 for this release. Read them
  • The symlink-launch case reported in #2341 is not covered by the wrapper fix. When the running Claude's command names a symlink but OpenRig recorded the resolved binary, source inspection shows that readiness still rejects that combination. The exact reported launch sequence has not been reproduced, and why it retains the symlink path is still under investigation. This is not a failure of every native-installer launch.
  • Other reasons managed compaction can wait are unchanged.
  • The draft check reads the input box just before pasting. Typing that starts in the same moment can still be appended to.
  • A Claude seat whose current occupant generation was never registered, such as an adopted Claude carrying another generation, or a managed launch whose tenure record failed to write, keeps its first conversation token, but later hooks don't move it.
  • The 0.7.6 known limits still apply.

Thanks 1

Thank you to @oneandonlydean for the report and the evidence in #2341.

OpenRig 0.7.6Move an agent to another account with a handover, and follow a whole slice's work in one terminal workspace.7 added6 changed7 fixed

16 people thanked · Release notes

Highlights

  • Addedrig provider switch moves a running agent to another account home, with a fresh conversation and a handover; it keeps its address and work. A community contribution.

    Move a running seat to another account home with rig provider switch --seat <seat> --to-account <name> --account-home <dir> (preview with --dry-run). It starts a fresh conversation with a handover, and the seat keeps its address and work.

    #2143 · thanks @seanmcnLink

  • AddedFollow a slice's work in one terminal workspace: rig terminal open slice:<name-or-id> --follow --provider herdr shows the agents with open work in that slice, each once. Linux Herdr 0.9.5 only.

    rig terminal open slice:<name-or-id> --follow --provider herdr shows the current owners of the slice's open work: pending, in-progress and blocked queue rows tagged with that slice. Each owner appears once, with all its obligations listed. Tag a row with rig queue create --slice <name-or-id>; handoffs keep the tag.

    Slice following targets Linux Herdr 0.9.5 / protocol 22. Following a whole mission isn't in this release.

    #2259Link

  • ChangedWhen only the readiness deadline passes, rig daemon start says startup is pending and leaves the daemon running, instead of killing it.

    Startup: when only the readiness deadline passes and the daemon is still starting, rig daemon start exits nonzero with a pending message naming the process, its endpoint and the log. The daemon is left running, and a second start stays blocked. rig daemon stop can't reach that unpublished process; the message gives the manual restart.

    #2267Link

  • FixedA queue wake refused at a selection prompt is retried once the prompt clears, and work sent to a terminal-only agent raises a finding for a person.

    A queue wake refused at a selection prompt is retried once the prompt clears. Work sent to a terminal-only seat raises a finding for a person. Cross-host rig queue create --verify reads the destination's receipt.

    #2235, #2192, #2193Link

  • FixedA Slack button answer now resumes a decision waiting on the person asked, and --reactions off stops acknowledgement emoji waking agents.

    A Slack button answer now resumes a decision parked on the person asked, which was 0.7.5's known issue. rig slack setup --reactions off stops acknowledgement emoji from waking agents.

    #2245, #2241Link

Before you upgrade 3

  • ChangedAfter installing 0.7.6, restart the daemon: two database updates record a seat's account home and whether a harness launch declared a runner.

    Restart the daemon after installing: run npm install -g @openrig/[email protected], then rig daemon stop && rig daemon start. Two database updates record a seat's selected account home and whether a community-harness launch declared a runner.

    Link

  • ChangedOpenRig's own plugin goes to 0.1.23 and keeps a copy of each file it replaces. Reapply any local edit you still need.

    The bundled openrig-core plugin goes to 0.1.23: its Claude activity hook now clears permission marks after a tool batch. Replaced files are preserved under $OPENRIG_HOME/backups/managed-refresh/<id>/; reapply any local edits you still need.

    Link

  • ChangedOn a large database, rig daemon start may report that startup is still pending. Follow the guidance it prints before any recovery.

    On a large database, rig daemon start may now report that startup is still pending instead of failing. Follow the guidance it prints before trying any recovery.

    Link

Also in this release 12

Follow a slice's work 5

  • AddedA slice view starts with four tiles, keeps following when the slice is empty, and keeps its viewers when a read is incomplete.

    New slice views start with four automatic tiles; --max-tiles changes that. A known empty slice keeps following and fills again. An incomplete read keeps the previous viewers, and missing or ambiguous slices are named, never shown as an empty team. Pins, drafts, unknown input and focus still protect a departed viewer, and closing a viewer never stops its agent.

    Link

  • AddedWhen a slice's name repeats across missions, tag its work with the slice's unique id, or the view reads incomplete.

    When a slice's folder name repeats across missions, tag its work with the slice's unique ID (or add --mission). A row tagged only with the shared name can't be placed, so the view reads incomplete until it is.

    #2261Link

  • ChangedSlice following is for Linux Herdr 0.9.5. Following a whole mission isn't in this release.

    Slice following targets Linux Herdr 0.9.5 / protocol 22. Following a whole mission isn't in this release.

    Link

  • FixedAn agent whose pane was refused before any split joins on a later refresh, and a viewer that hasn't attached yet can carry on.

    An owner whose join was refused before any pane split now joins on a later refresh, and a viewer that hasn't attached yet can carry on.

    #2271Link

  • FixedNamed Herdr sessions use their configured endpoint throughout, and the TUI's terminal action opens what's in view.

    Named Herdr sessions use their configured endpoint throughout, and the TUI's terminal action opens the agent, pod or rig in view.

    #2205, #2232Link

Seats, accounts and harnesses 4

  • AddedA Claude agent can switch between its subscription and an API key on the same conversation. The API-key path is not qualified yet, so check the result. A community contribution.

    A Claude seat can switch between subscription and API key on the same conversation (--to-account api --api-key-file <file>, back with --to-account plan --token-file <file>). In-flight work is interrupted. The API-key path is not qualified yet, so check the resulting account and conversation. A new Claude member can name its own token file in its spec with claude_token.

    #2191, #2246 · thanks @seanmcnLink

  • AddedManaged agents use the daemon's SSH agent for git over SSH.

    Managed seats inherit the daemon's SSH agent for git over SSH.

    #2222Link

  • AddedCommunity harnesses can opt into following their runner and receiving the declared model. New draft author contracts describe harness, runner and platform duties.

    Community-harness presets can opt into runner: true (with launch_result: true) so the seat's activity follows its runner, and passes_model: true to receive the declared model as OPENRIG_MODEL. That says which model was passed, not which one runs. New draft author contracts describe harness, runner and platform duties, marking what's implemented and what's proposed.

    #2239, #2243, #2272Link

  • Fixedrig expand keeps the member settings rig up accepts, and a restore keeps a model set with rig seat set-model.

    rig expand keeps the member settings rig up accepts, including env, effort and startup settings, and a restore keeps a model set with rig seat set-model.

    #2250, #2227, #2228Link

Behaviour that changed 1

  • ChangedThe viewer API returns HTTP 400 for view_required and unknown_provider, where it returned 200 with an error body.

    Viewer API: POST /api/terminal/viewer/ensure returns HTTP 400 for view_required and unknown_provider, where it returned 200 with an error body. Keep reading the body's code.

    #2259Link

Delivery, Slack and status 2

  • FixedAn exited process in a kept pane reads as exited, not idle, and its work goes to the usual recovery finding.

    A verified exited process in a retained pane reads pane_exited, not running and idle, and its work goes to the usual recovery finding.

    #2248Link

  • FixedSmaller fixes to inventory reads, UTC snapshot ages, TUI emoji, help text and test fixtures.

    Smaller fixes cover inventory reads, UTC snapshot ages, TUI emoji, help text and test fixtures.

    Link

Known issues: 7 for this release. Read them
  • Codex hooks on an older configuration (#17): if your Codex configuration came from an older OpenRig install that never trusted OpenRig's own plugin hooks, after a restart the kernel's Codex seats can stop at Codex's "Hooks need review" prompt. rig status then shows the kernel as partial_ready, and rig ps shows the seats needing attention. No message is sent. This also happens on 0.7.5.
  • An exited viewer isn't restarted: a viewer whose attach already ran and then exited back to a shell isn't restarted automatically, and the whole slice view can hold until that tile is resolved. No tested workaround is offered yet.
  • Later hold notices can show a generic reason; the original failure is in the journal. The changelog's and capability map's statement that hold notices retain the original reason holds for a seat's first notice, not for every later one.
  • A typed reply in the thread of a question parked on its own person resumes the question, but isn't recorded as the answer; the owner receives it as a message instead. Buttons work. The capability map's statement that a typed Slack reply is kept in humanAnswers doesn't hold for such a parked question.
  • Held is not delivered: with a Codex seat's typing guard on, a message OpenRig can't confirm will stay visible is held before it's pasted. That can happen in small tiles, and many wrapped messages are held even when they would have fit. Check rig seat held-messages before resending. A larger pane or a shorter message may help; turning the guard off removes draft protection and isn't a fix.
  • Codex restart refusal (#2200): it's still unresolved. If rig seat restart <seat> --keep-conversation refuses, nothing is stopped; leave the seat running and report it with your CLI and daemon versions.
  • Hosted members remain experimental, unsupported, off by default and at your own risk. Slice following doesn't need them.

Thanks 16

Thank you to everyone whose work is in this release: @seanmcn, @DeryFerd, @Aschenbath, @Vaishnavi220506, @bradvin, @jay23606, @rudycelekli and @Nikhi00718; to @akushonkamen, @jcmurrayii, @KM199 and @pdurlej for changes, reports and reproductions that shaped it; to @appleguy, @al-robertson-cto and @skv-io, whose reports led to fixes and documentation here; and to @bpamiri, whose runner-preset proposal on #43 shaped the runner field.

OpenRig 0.7.5Follow a task's agents as terminal tiles (preview), and escalations now reach someone who can act.3 added7 changed8 fixed

12 people thanked · Release notes

Highlights

  • AddedPreview, Linux Herdr 0.9.5; usually one agent: rig terminal open qitem:<id> --follow --provider herdr keeps the agents working on a task together in one Herdr workspace.

    rig terminal open qitem:<id> --follow --provider herdr shows the current owners of a task's open work as viewer tiles in one Herdr workspace. Joining agents get viewer tiles; departures close viewers, not agents or conversations. --pin, --suppress and --max-tiles adjust the view; --no-follow keeps a fixed layout. Defaults are eight tiles, four seconds of departure grace and twelve more seconds for a focused leaver.

    The preview is limited to Linux Herdr 0.9.5 / protocol 22 and requires no internet exposure.

    #2199Link

  • Fixedrig send waits up to 60 seconds for its result. An unconfirmed send may still have arrived, so check before sending again.

    rig send waits up to 60 seconds for its result, locally and over HTTP, plus a requested idle wait. A send can still read unconfirmed sooner, for example when a connection drops. An unconfirmed send may still have been delivered; input may be held off-screen by a busy recipient. Reconcile before resending. No automatic resend is added.

    #2198Link

  • FixedA protected Codex agent holds a message it can't show whole before typing it, so nothing is left typed and unsent.

    With a Codex seat's typing guard set to draft-aware or openrig-urgent, a message OpenRig can't confirm will stay visible in the composer is held before it's typed, so nothing is left typed and unsent. A message that fits is delivered and submitted once, and a person's draft stays protected. The default (guard off) and other runtimes are unchanged. Delivery's guards also recognize Codex 0.164's two-row composer footer, so a truly empty Codex 0.164 composer can receive typed delivery.

    #2242, #2206Link

  • FixedA wake that couldn't be routed is tried again once the agent has a pane, and stuck-work findings need evidence to close. A community contribution.

    A wake recorded as unroutable is retried through its existing intent once the seat has a pane; stuck findings require delivery or custody evidence to close.

    #2170, #2153 · thanks @AschenbathLink

  • FixedA fresh Claude handover waits for the new process, and rig down after a rolled-back launch stays down. A community contribution.

    Fresh Claude handovers wait for the new process and its current input frame. A rolled-back launch followed by rig down stays down on rig start --last.

    #2159, #2166 · thanks @AschenbathLink

Before you upgrade 3

  • ChangedAfter installing 0.7.5, restart the daemon: one database update keeps existing edges, and an escalates_to edge that did nothing before now takes part in recovery for an agent with no delegation parent (no agent that hands it work).

    Restart the daemon after installing: run npm install -g @openrig/[email protected], then rig daemon stop && rig daemon start. A database update stores deferred escalation addresses while preserving existing edges. Previously inert escalates_to edges now affect recovery for seats without a delegation parent.

    Link

  • ChangedStartup refreshes OpenRig's own plugin to 0.1.22, keeping a copy of each file it replaces. Reapply any local edit you still need.

    Startup refreshes openrig-core to 0.1.22. Its queue-handoff skill teaches agents to park long waits with a continuation and wake. Replaced files are preserved under $OPENRIG_HOME/backups/managed-refresh/; reapply local edits you still need. No setting is added or removed.

    Link

  • ChangedIf Codex asks for hook review, review the hooks you mean to enable, and read #2200 before relying on the restart remedy.

    If Codex requests hook review, review the hooks you intend to enable. The earlier hook-refresh remedy, rig seat restart <seat> --keep-conversation --reason "refresh hooks" (preview with --plan), has an unresolved refusal report; read #2200 below before relying on it. Upgrading does not restore approvals an earlier OpenRig removed.

    Link

Also in this release 10

Seats & restore 1

  • ChangedRecovery for an agent with no delegation parent (no agent that hands it work) can use an escalates_to address in another rig on the same daemon. A community contribution.

    Parentless recovery can use an escalates_to address in another rig on the same daemon. A delegation parent still wins; an open recovery keeps its recorded owner.

    #1772 · thanks @icey-zzzLink

Queue & messaging 1

  • ChangedRuntime send refusals answer 409 instead of 500, and a stale Claude pane names rig reconcile-session as the fix.

    Runtime send refusals return HTTP 409 instead of 500. A stale Claude pane names rig reconcile-session <seat> as the repair.

    #2157Link

TUI 2

  • ChangedFollowing keeps departed tiles that hold a draft or unreadable input, and stops once an empty task has no tiles left.

    Follow mode retains departed tiles with drafts or unreadable input. A completely empty task drains removable tiles and stops following once none remain; run --follow again to resume that workspace.

    Link

  • FixedThe Overview reads the selected rig's current setup, the TUI uses your local host name, and snapshot status matches the scheduler. A community contribution.

    The Overview reads the selected rig's current configuration; the TUI uses the configured local host name; snapshot status matches the scheduler.

    #2188, #2162, #2168 · thanks @dajiaohuang, @Aschenbath, @todieLink

CLI & hosts 1

  • FixedOpening terminals now says when a pane can't be confirmed, and an all-unconfirmed open fails so you check first.

    Terminal results distinguish pane_unconfirmed from opened and skipped panes. An all-unconfirmed open exits nonzero; inspect before retrying because something may have opened.

    #2173Link

Setup & platform 1

  • FixedSmaller fixes: a pi-tui example, clearer hosted-member guidance (hosted members stay experimental, unsupported, off by default and at your own risk), and tmux, capture, port and scope-folder repairs. A community contribution.

    The pi-tui example runs Pi's own terminal UI with a per-seat agent folder and startup input. Hosted-member guidance says how a member without a wake trigger gets work, that a listed tool is not a grant, and that finished work closes with no-follow-on. Other changes repair tmux separator parsing for attach --self replies, normalize capture/transcript line counts, warn on invalid MCP daemon ports, release unread notification response bodies, and accept scope folders numbered 100 and above.

    Hosted members retain 0.7.4's framing: experimental, unsupported, off by default and at your own risk. Local assistants can connect locally. Internet access requires your own TLS tunnel or proxy and a narrowly scoped token; anyone holding a valid token can act within its grant. Revoke it when finished with rig mcp token revoke <name>.

    #2182, #2187, #2178, #2164, #2160, #2172, #2194 · thanks @DeryFerd, @Nikhi00718, @rudycelekliLink

Preview: follow one task in one terminal workspace 4

  • AddedPreview, Linux Herdr 0.9.5; usually one agent: following an ordinary task shows the one agent working on it, then the next agent after a handoff.

    What you'll usually see is one agent. A queue item has one owner at a time, and handing it off closes it, so following an ordinary task shows its current owner, replaced by the next owner after a handoff. Several agents appear together only when several open rows descend from the task at the same time, by handoff or by naming it in their chain of record.

    Link

  • AddedPreview, Linux Herdr 0.9.5; usually one agent: a client can add or reuse a viewer without rearranging panes; being in the view grants no input.

    Clients can add or reuse a verified viewer without rearranging existing panes through POST /api/terminal/viewer/ensure. Membership grants no input authority.

    #2133Link

  • ChangedPreview: following a slice or a mission isn't in this release.

    Following larger scopes of work, such as a slice or a mission, isn't in this release.

    Link

  • FixedPreview, Linux Herdr 0.9.5; usually one agent: a departed Codex agent's empty composer no longer keeps its tile.

    The view recognizes Codex 0.164's two-row composer footer, so a departed Codex agent's empty composer no longer reads as unconfirmed input that keeps its tile.

    #2206Link

Known issues: 8 for this release. Read them
  • A protected Codex message can be held in a small tile (#2242): with a Codex seat's typing guard set to draft-aware or openrig-urgent, OpenRig holds a message before pasting it when it can't confirm the whole message will stay visible in the composer. That can happen in small task-following tiles, and many wrapped messages are held even when they would have fit. A held message is not delivered. Use a larger pane; a shorter message may also fit; turning the guard off removes draft protection and is not a fix. A very long message (over 1,000 characters) is held whatever the pane size, so shorten it.
  • A Slack button answer to a parked question isn't recorded. If a question waiting on you has been parked by its owner, a button answer to it isn't recorded, and the reply wrongly says the decision is no longer waiting. Other ways of answering a parked question weren't tested in this release. A repair is on main.
  • Codex restart refusal (#2200): reported on one upgraded Codex seat; the cause is unknown, and it is not fixed here. The inspected 0.7.4 check already accepts the reported process tree, so this is not an established refusal of all 0.6.x staged-script launches. If refused, leave the seat running and report the refusal with CLI and daemon versions; don't count it as a completed hook refresh.
  • A named Herdr session can miss a custom daemon endpoint. With --session <name>, OpenRig may resolve Herdr's default socket location rather than a custom endpoint your daemon is configured to use. The configured endpoint works without --session. To reach a specific endpoint, set HERDR_SOCKET_PATH to it explicitly; don't rely on XDG_CONFIG_HOME, which the default resolver doesn't read.
  • Unreadable composers keep departed tiles, including unconfirmed Pi, terminal and community-harness input. Unpinning does not override this. Other providers, platforms and selectors retain one-shot open. A viewer can resize its agent's terminal; ignore-size is not isolation.
  • Run pi-tui unattended, without typing into it: a wake can submit a draft someone is typing or enter an unrecognized dialog. Busy-turn wakes and native resume remain unqualified; a plain terminal receives no queue wakes. See the example's limits.
  • Cross-rig escalation is same-daemon only. Upgrade followed by snapshot restore of deferred targets remains unqualified.
  • Existing harness limits remain: OpenClaw's interrupted local turn is not recovered; use its Gateway preset for unattended work. Hermes declares no resume, and its idle gateway exit is unmeasured. rig down stops a community harness's pane; inspect any independently spawned processes before relying on their exit.

Thanks 12

Thank you to everyone whose work is in this release: @icey-zzz, @Aschenbath, @DeryFerd, @Nikhi00718 and @dajiaohuang; to @rudycelekli for the work completed in #2160 and @todie for the snapshot-status change followed in #2168; and, for reports, @agraubert, @AdamWhitehurst (#1544, #2049), @kevinhsykes (#2151), @aanestesia (#605), @todie (#1419) and @tgrundtvig (#21).

Verification limits

Task following was checked with real agents on Linux Herdr 0.9.5: tiles joined and left as genuine work moved (3 → 4 → 3), a focused leaver stayed briefly before closing, a person's typed draft survived a join, the tile cap, pins and suppression behaved as described, and turning following off and on again kept the same agents. The empty-task stop was confirmed from the recorded events, and on screen in a recorded run. Resource use was measured only as whole-machine CPU in one window, not for the daemon alone.

Performance against 0.7.4 was measured on an earlier build of this release, on one machine, with a synthetic workload: no measured change in command latency, memory or CPU.

Protected Codex delivery (#2242) was checked with real Codex agents: a fitting message at 80×24 was submitted once (a model reply was not checked), in a 30×9 pane it was held before paste in both guard modes, and at 32×9 a person's unsent draft was kept in both modes. The 65×9 tile, messages with hard line breaks, and very long messages were not run natively.

OpenRig 0.7.4OpenRig 0.7.4 takes a first, experimental step toward every agent you use working on one team.5 added1 expanded2 changed4 fixed

12 people thanked · Release notes

Highlights

  • AddedA first, experimental step toward hosted agents working on one team. Unsupported and off by default; only Grok was tried. Use at your own risk.

    Assistants on your machine can already reach OpenRig's MCP server locally. A cloud-hosted assistant can join a rig over MCP under a grant for its seat. Its roster entry declares "hosted": true; rig_team shows its capabilities, caveat and activity as unknown, never idle. The connection teaches it to check its inbox, claim work, return an answer or hand it on, and keep work that needs a person's approval until the answer arrives. This is experimental and unsupported. It's off by default. Nothing in OpenRig listens on the internet unless you set it up yourself. You serve rig mcp serve --http, put it behind your own TLS tunnel or proxy, and issue a token. Doing that is like opening a port in your firewall. Anyone with the URL and a valid token can act as that member within its grant. Treat the token like a password, give the member the narrowest grant, and revoke it when you're done (rig mcp token revoke <name>). We don't support, and take no responsibility for, an OpenRig reachable from the internet, just as with running OpenRig itself on the open internet. Use at your own risk. A real Grok claimed work, returned a useful note, came back in a new conversation and was refused after its grant was revoked, with its work kept. Other assistants weren't tried.

    #2095, #2127Link

  • AddedList the conversations a node could resume, and resume the exact Claude Code or Codex history a person reviewed, with no substitutes.

    Resume the exact Claude Code or Codex conversation you choose. rig seat history --rig <id> --node-id <id> lists the Claude and Codex conversations that exact node could resume. A client can then resume the history a person reviewed. It refuses rather than substitute another conversation or start fresh. Resuming a reviewed history has no CLI yet. It works only through the daemon's startup review, for clients. With Codex 0.164 on a low-effort model, the resumed conversation didn't recall an earlier fact, and the same happened outside OpenRig. This completes the three stages agreed in #1837.

    #2100, #2109 · thanks @bradvinLink

  • AddedNewer MCP clients can use the same server as existing clients.

    Clients on MCP protocol revision 2026-07-28, which has no initialize handshake, now work with rig mcp serve over stdio or --http. Existing 2025 clients still work on the same endpoint. A 2026-07-28 client (SDK 2.x) was shown working at installed scope. Serving over --http from the internet is experimental, unsupported and off by default. Anyone with the URL and a valid token can act within its grant. Give the narrowest grant, revoke it when you're done, and use it at your own risk.

    #2112Link

  • AddedOpen a terminal view of the agents working on a task on this machine.

    rig terminal open and the daemon's terminal preview accept qitem:<id> as a read-only membership view. It names stopped, missing and external owners. It doesn't follow a task as it moves, keep a reusable viewer or grant input. An explicit open still has the provider's usual workspace effects.

    #2131Link

  • FixedWork waiting on a person keeps its question and resolves from a later reply.

    Parks on a registered person's own address resolve only from a Slack reply written after the question. They keep their summary and evidence and show in NEEDS YOU.

    #2106, #2107, #2108Link

Before you upgrade 1

  • ChangedAfter installing 0.7.4, restart the daemon. The plugin refresh keeps backups, and a Codex seat running through the upgrade needs a restart.

    Install with npm install -g @openrig/[email protected], then run rig daemon stop && rig daemon start. On first start, a database update adds a column recording which grant's caller acted. Startup refreshes openrig-core 0.1.21: the queue-handoff skill and Claude hooks changed. It first copies replaced files under $OPENRIG_HOME/backups/managed-refresh/; reapply any edits from the copy. Claude seats get the new rate-limit hook at their next launch, resume, restore or handover. If a Codex seat stops at "Hooks need review", review the hooks in Codex. A Codex seat running through the upgrade warns "Hook failed … plugin contents changed; hook approval required", and some OpenRig hooks stop running in it. Codex 0.164's /permissions menu has no hook item. Preview with --plan, then restart the seat on its own conversation with rig seat restart <seat> --keep-conversation --reason "<why>": the warning goes away and OpenRig's hooks run again. This was tested on Linux with Codex 0.164; seats started after the upgrade aren't affected. Going back to 0.7.3 leaves the new column in place, unread.

    Link

Also in this release 6

Assistants as team members (experimental) 2

  • AddedExperimental hosted members can declare a webhook and show their last call.

    A hosted member's roster entry can declare a webhook trigger using secret names only. OpenRig sends a pointer to the work when it lands. A 2xx response means the endpoint accepted the ring, not that the member woke. If it doesn't claim the work in time, its person is told. rig_team and rig roster show show the member's last MCP call; rig_team also shows its latest ring. No webhook consumer was shown waking from a ring. An ordinary chat app cannot receive unsolicited events, so without a webhook-capable runner the assistant sees work only when it checks. Hosted members and internet-facing MCP are experimental, unsupported, off by default and used at your own risk. Only Grok was tried.

    #2115, #2121Link

  • ChangedWhen a member cannot be woken, its person is told.

    When work waits for a member nothing can wake, OpenRig tells its person on Steering, the TUI's Feed and Slack. The notice goes to the person, not the member. For hosted members, this notice wasn't shown with a registered person. Hosted members and internet-facing MCP are experimental, unsupported, off by default and used at your own risk. Only Grok was tried.

    #2110Link

MCP 1

  • ExpandedRemote MCP is experimental, unsupported and off by default. Use at your own risk.

    Rows record whose grant acted: attribution, not authentication. A caller's seat that was created but never launched is served instead of refused. A caller granted through a grant service hands work to its granted team, never to a caller seat, and cannot attach tags that hide text from a person asked about it. For advanced remote setups, rig mcp serve --http --grant-service <url> checks each request's key with an external grant service, with nothing cached. --oauth-resource and --oauth-issuer add OAuth protected-resource discovery (RFC 9728) and standard sign-in challenges; the key and grant still decide what a caller may do. This is experimental and unsupported. It's off by default. Nothing in OpenRig listens on the internet unless you set it up yourself. You serve rig mcp serve --http, put it behind your own TLS tunnel or proxy, and issue a token. Doing that is like opening a port in your firewall. Anyone with the URL and a valid token can act as that member within its grant. Treat the token like a password, give the member the narrowest grant, and revoke it when you're done (rig mcp token revoke <name>). We don't support, and take no responsibility for, an OpenRig reachable from the internet, just as with running OpenRig itself on the open internet. Use at your own risk.

    #2096, #2141, #2135, #2098, #2125, #2132, #2126Link

Also 2

  • FixedRate-limited Claude seats are recognised, handovers report delivery accurately, and resume sources survive snapshots.

    A Claude seat stopped by a rate limit is recognised from Claude's StopFailure hook, and a delayed older hook no longer replaces a seat's current state (#1908, #2113). A fresh Claude handover reports delivery only once the packet is submitted (#1863). Periodic snapshots keep a down agent's resume source (#2123). A resumed Pi seat no longer prints Entry not found on every restart (#2122).

    #1908, #2113, #1863, #2123, #2122Link

  • FixedThe TUI no longer crashes in a zero-size terminal and lists rigs by name; smaller fixes to reviews and identity lookup.

    The TUI starts in a terminal that reports 0 rows or columns (#2099) and lists rigs by name (#2134). The reviews count only open rows as held (#2136). Identity lookup no longer prints tmux errors (#2103). The packaged CHANGELOG.md lists every change.

    #2099, #2134, #2136, #2103Link

The kernel at daemon start 1

  • FixedA kernel already down before daemon start stays down.

    Startup brings back a kernel only when this start found it down, which is what a reboot leaves. A kernel already down before the start stays down. rig start and rig daemon start --wait-for-kernel explain why and show rig up kernel --existing as the way back. The wait-for-kernel command still exits 1 for a deliberately skipped kernel, but no longer reports a timeout and an authentication fix. This fixes 0.7.3's known issue of a long-gone kernel returning. Restore evidence lasts one daemon process: if the first daemon after a reboot exits before restore starts a seat, the next start leaves the kernel down and says so.

    #2146, #2152, #2156Link

Known issues: 16 for this release. Read them
  • A webhook ring proves only that the endpoint accepted it. An ordinary chat app can't receive unsolicited events, so a hosted assistant without a webhook-capable runner sees work only when it checks.
  • The task view is membership only. It doesn't follow a task, keep a reusable viewer or grant input, and an explicit open still has the provider's usual workspace effects.
  • Resuming a reviewed history has no CLI yet; it's through the daemon's startup review, for clients.
  • The kernel's restore evidence lasts one daemon process. If the first daemon after a reboot exits before the kernel's restore starts a seat, the next start leaves the kernel down and says so; run rig up kernel --existing.
  • An exported team isn't registry-ready by itself. rig export doesn't write a README, and openrig.dev/rigs' check fails until one is added and declared in rig.yaml docs. Add it, then run rig bundle check on the folder before you submit.
  • OpenClaw's interrupted local turns still aren't recovered. Capture the pane before sending; for an unattended seat, use the Gateway preset.
  • Whether processes a community harness starts outside its pane survive isn't exercised. rig down stops the pane only.
  • Hermes: the preset doesn't declare resume, and whether a seat's gateway exits once idle is unknown. Check with ps before relying on it.
  • A Codex seat's permission settings were enforced natively in 0.7.3's test with Codex 0.164.0; other versions weren't tested.
  • Upgrading doesn't restore Codex hook approvals an earlier OpenRig removed. Approve the hooks you mean to enable.
  • A session attached with rig attach --self can send, but replies to it may fail with transport_unavailable.
  • After a seat handover, check the successor if OpenRig reports its restore packet unconfirmed. The packet can be left typed but not sent in a Claude successor's prompt. In our test, the seat's next ordinary task got it consumed.
  • After the last managed session ends, an empty tmux server may remain running.
  • Slack threads and messages from before 0.7.3 keep 0.7.3's limits on reply routing and on what a person sees.
  • Shared channels are Slack only, the cmux path wasn't tried in a real cmux, and the TUI reads a remote host's rigs over HTTP only.
  • Not in this release: verified task viewers (#2133), switching a seat to an isolated account home (#2138, #2143), source evidence for resolving stuck findings (#2153), the stale-pane repair message (#2157), current launch evidence for fresh handovers (#2159), and a warning for out-of-range MCP daemon ports (#2160).

Thanks 12

Thank you to everyone whose work is in this release: @Aschenbath, @Nikhi00718, @bradvin, @dajiaohuang and @seanmcn, and, for reports and reviews, @pr0xc3nt4ur1 (#1822), @duncanleung (#2130), @ziadeh (#2129), @alperta (#99), @AdamWhitehurst (#1544), @smota (discussion #2117) and @oSquashBlossomo.

Verification limits
  • A real person's own Grok joined a 0.7.4 team over MCP under a revocable grant. It claimed a task, closed it with a useful note, came back to the same task, reported what it couldn't reach and when it can't be woken, and was refused after its grant was revoked, with its earlier result kept. The person drove Grok in its own app; other assistants weren't tried.
  • No webhook consumer was shown waking from a ring.
  • The notice to a hosted member's person when nothing can wake it wasn't shown with a registered person.
  • Resuming the exact conversation was shown on Claude Code and on Codex. With Codex 0.164 on a low-effort model, the resumed conversation didn't recall an earlier fact, and the same happened outside OpenRig.
  • An MCP 2026-07-28 client (SDK 2.x) was shown at installed scope.
OpenRig 0.7.3In OpenRig 0.7.3, the people you work with reach your agent teams through one gateway.11 added7 changed4 fixed

17 people thanked · Release notes

Highlights

  • AddedRegister more than one person and choose a default, who gets the last escalation step, the notice digest and workflow fallbacks.

    Register more than one person (rig gateway human add) and choose the default (rig gateway default <id>), who receives the last escalation step, the notice digest and workflow fallbacks.

    #1992Link

  • AddedA Slack shared channel joins as one participant: anyone writing there reaches your team, and each task names the channel, the sender and the policy.

    rig gateway channel add <id> --binding slack:… registers a Slack shared channel as one participant. Anyone writing there reaches the team, and each row names the channel, the sender and the policy. A channel's messages never answer or close an ask.

    #1992, #1998, #2068Link

  • AddedOrganizations and groups can carry a policy your agents can read, and rig gateway participants shows where it came from. It informs their judgment; nothing enforces it.

    rig gateway org set and group set give organizations and groups a readable policy, and rig gateway participants shows it with its source. It's context for your agents' judgment; nothing enforces it.

    #1992Link

  • Addedrig seat set-permissions <seat> --codex-permissions <file> gives a Codex seat its own sandbox and approval settings on every managed launch.

    rig seat set-permissions <seat> --codex-permissions <file> gives a Codex seat its own sandbox and approval settings, passed on every managed launch.

    #2048Link

  • AddedCommunity harness authors get a written contract: what a harness gets from OpenRig, how to write one, and how promotion is judged.

    docs/reference/community-harness-presets.md is the contract: what a harness gets from OpenRig and what it doesn't, how to write one, and how promotion is judged. Tests cover it.

    #2078, #2088Link

Before you upgrade 4

  • ChangedAfter installing 0.7.3, restart the daemon: one database update applies on its first start, and OpenRig's own plugin is refreshed with a copy kept of each file it replaces.

    Restart the daemon after installing: run npm install -g @openrig/[email protected], then rig daemon stop && rig daemon start. One database update applies on the daemon's first start. Startup refreshes OpenRig's own plugin (openrig-core 0.1.20; the messaging-the-human skill changed), first copying any file it replaces under $OPENRIG_HOME/backups/managed-refresh/. If you edited one, reapply your change from the copy.

    Link

  • ChangedIf you register a second person, choose a default with rig gateway default <id>. Until you do, the last escalation step and the notice digest wait.

    If you register a second person, choose a default: rig gateway default <id>. Until you do, the last escalation step and the notice digest wait.

    Link

  • ChangedIf a seat relied on the daemon's own environment, such as ANTHROPIC_BASE_URL, declare it in the rig's or member's env:.

    If a seat relied on the daemon's own environment (ANTHROPIC_BASE_URL, OPENAI_BASE_URL, CLAUDE_CODE_USE_BEDROCK), declare it in the rig's or member's env:. The first seat on a new tmux server now gets the same scoped environment as every other seat.

    #2047Link

  • ChangedGoing back to 0.7.2 keeps every registered person, but not the default person, shared channels, organizations, groups or policy, and it ignores a Codex seat's own permission settings.

    Going back to 0.7.2 keeps every registered person, but not the default person, shared channels, organizations, groups or policy. It keeps a Codex seat's permission settings without reading them, so its launches of that seat can be broader.

    Link

Also in this release 13

Seats & restore 1

  • FixedAn OpenClaw seat whose last local turn was refused shows as needing attention, rig down names community harness seats whose processes may outlive their pane, and a Hermes gateway runs per seat.

    An OpenClaw seat whose last local turn was refused shows as needing attention, rig down names community harness seats whose processes may outlive their pane, and a Hermes gateway runs per seat with the example launcher.

    #2092, #2077, #2097Link

Queue & messaging 1

  • ChangedA registered person can't settle an ask that was asked of someone else; from the TUI, the primary user can.

    A registered person can't settle an ask that was asked of someone else (answer_not_recorded); from the TUI, the primary user can.

    Link

Claude 1

  • ChangedA send to a Claude seat at its "Resume session" picker is refused with target_needs_input.

    A send to a Claude seat at its "Resume session" picker refuses with target_needs_input.

    Link

Codex 2

  • Addedrig seat set-permissions <seat> --codex-profile <name> picks which Codex configuration profile a seat uses on its future managed launches. Requested by @bpamiri.

    rig seat set-permissions <seat> --codex-profile <name> selects that seat's Codex configuration profile for future managed launches. Requested in #1534 by @bpamiri.

    #2048 · reported by @bpamiriLink

  • FixedCodex's own trust and config edits survive OpenRig's next launch, a duplicate trust table no longer stops Codex starting, and a seat started under a launcher gets its generation record. A community contribution.

    Codex's own trust and config edits survive OpenRig's next launch, and a single-quoted trust table no longer gains a duplicate that stopped Codex starting. Resume handles a path with a space, and a seat started under a launcher gets its generation record.

    #2034, #2035, #2046, #2038, #2084 · thanks @AschenbathLink

Slack 2

  • Addedrig slack post-open-asks posts the asks still open, and the reply hint on a person's message now answers in their Slack thread.

    rig slack post-open-asks posts the asks still open, and the reply hint on a person's message now answers in their Slack thread.

    #2086, #2055Link

  • FixedWhen an agent sets its question aside to wait on the person it asked, a colleague's reply in that Slack thread goes to the agent.

    When an agent parks its own ask on the person it asked, a colleague's reply in that thread goes to the agent. Incoming Slack messages are not automatically reposted to Slack as new asks; an agent can still deliberately ask a follow-up.

    #2119Link

TUI 2

  • AddedThe Feed's whose filter chooses whose queue you see, and settling someone else's ask from the TUI is recorded as the primary user's, with the person asked kept.

    The Feed's whose <person|all|default> chooses whose queue you see. Settling someone else's ask from the TUI is recorded as the primary user's, keeping the person asked: attribution on a trusted network, not a login.

    #2006, #2061Link

  • AddedThe TUI opens views in cmux when it runs inside cmux, and keeps a registered remote host in its tree.

    The TUI opens views in cmux when it runs inside cmux, and keeps a registered remote host in its tree on every tab.

    #2080, #2052Link

CLI & hosts 4

  • Addedrig capture --readable reads a small seat at a readable size, then gives its window back.

    rig capture --readable reads a small seat at a readable size and gives its window back, and a window gets its own size back after the web terminal.

    #2075, #2065Link

  • Addedrig doctor checks that tmux can capture a pane, and new seats keep Claude's Shift+Enter.

    rig doctor checks that tmux can capture a pane, and new seats keep tmux's TERM_PROGRAM for Claude's Shift+Enter.

    #2081, #2043Link

  • Changedrig scope --workspace <path> mission create refuses a path that doesn't exist.

    rig scope --workspace <path> mission create refuses a path that doesn't exist.

    Link

  • FixedSmaller fixes: long --wait-for-idle waits work, a dropped local send reads unconfirmed, rig export keeps pod startup files, and the delivery digest says why it sent nothing. A community contribution.

    Also: --wait-for-idle over 300 seconds works; a dropped local send reads unconfirmed; saved seat settings can target a node id; rig export keeps pod startup files; rig scope --workspace creates the first mission there; the delivery digest says why it sent nothing.

    #2020, #2024, #2060, #2051, #2087, #1093, #2063, #2066 · thanks @bradvin, @Aschenbath, @Coder8124Link

Known issues: 13 for this release. Read them
  • OpenClaw's interrupted local turns aren't recovered. The seat shows as needing attention; capture its pane before sending, since a send submits a new turn. For an unattended seat, use the Gateway preset.
  • Whether processes a community harness starts outside its pane survive isn't exercised. rig down stops the pane only; check the harness's own processes afterwards.
  • Hermes: the preset doesn't declare resume, and whether a seat's gateway exits once idle is unknown. The presets doc says it exits; check with ps before relying on it.
  • rig or rig tui started in a terminal that reports 0 rows or columns crashes on its first frame, as in 0.7.2. Start it in a terminal with a size. The fix (#2099) is on main for the next release.
  • A Codex seat's permission settings were enforced natively in our test with Codex 0.164.0, including after a managed restore and a restart. Other Codex versions weren't tested, and an older OpenRig ignores the settings.
  • Upgrading does not automatically restore missing Codex hook approvals. Earlier OpenRig versions could remove them while refreshing the managed hook block; 0.7.3 fixes that preservation bug (#2035). If Codex asks for hook review, review and approve the hooks you intend to enable. Later upgrades may ask again when the previous approval cannot be recognized.
  • A kernel whose terminals went away long ago can come back when the daemon starts. Startup restores a kernel whose seats were all left detached, which is what a reboot leaves, but it can't tell how long ago that was. A kernel gone for weeks can return from an old snapshot, including on the restart in "Before you upgrade", and offer to resume its old conversations. If you didn't expect it, decline those prompts and run rig down kernel; a kernel stopped that way stays down on later starts. rig daemon start --no-kernel skips kernel startup entirely. A fix is planned for a later release.
  • After the last managed session ends, an empty tmux server may remain running. This does not by itself mean an agent is still running.
  • Threads already affected by the parked-ask routing bug still send replies to the person asked, on their Steering, rather than to the agent. These incoming replies are no longer automatically echoed to Slack.
  • Slack messages received before this upgrade may still show OpenRig's routing footer, shared-channel policy text and attachment paths when an agent later asks a person about them. A handoff that changes the task text or replaces its Slack-origin tags also shows the text in full to avoid deleting the sender's words. Newly received messages with their original text and tags omit this generated routing, policy and attachment context.
  • Shared channels are Slack only.
  • The community harness field keeps its name (communityHarness) and its original database update; renaming them would break a return to 0.7.2.
  • The cmux path wasn't tried in a real cmux, and the TUI reads a remote host's rigs over HTTP only.

Thanks 17

Thank you to everyone whose work is in this release: @Aschenbath, @Coder8124, @bradvin, @sn1thy and @DeryFerd, and, for reports and diagnoses, @AdamWhitehurst (#2041, #2049, #2057), @borfast (#2029, #17), @jimallen (#17), @R14014 (#1069), @kainne44 (#70), @VltrnOne (#1653), @d3fvxl (#800), @fsafey (#1799), @MichelMabinuola (#980), @rakoort (#1679), @bpamiri (#1534) and @george661 (#1710).

Verification limits
  • The required five-measure performance comparison against 0.7.2 was not completed. One non-gating workload was slightly slower; it establishes neither a performance pass nor a regression. Publication proceeds with an explicit exception for 0.7.3, not a waiver for future releases.
  • Slack button interactions were not verified: the test clicks did not reach the receiving socket.
  • Registry sharing was not verified end to end. The maintainer round trip did not run, and the stranger check stopped at GitHub's first-time-contributor workflow-approval gate.
  • The Claude first-use check used a token rather than interactive sign-in; the Codex journey included assistance.
  • Some stored-copy attachment, cross-host terminal and isolation paths remain unverified. Kernel duplication, whole-database or native-session downgrade, and Windows were not exercised. Keeping already-running Codex seats through a daemon-only upgrade was not demonstrated natively.
OpenRig 0.7.2Switch a live agent between Claude Code and Codex without losing its work, and give each agent its own account.12 added2 expanded20 changed39 fixed

29 people thanked · Release notes

Highlights

  • Addedrig seat set-runtime <seat> --runtime claude-code|codex moves a live seat between Codex and Claude Code, keeping its address, its queued tasks and its claims. A community contribution.

    rig seat set-runtime <seat> --runtime claude-code|codex --reason "<why>" moves a live seat between Codex and Claude Code. The successor starts first, gets a handover and confirms it before the old runtime stops, and the seat keeps its address, queue rows and claims. --dry-run shows the settings, what is cleared and the costs; --recover finishes an interrupted switch. Built on @Aschenbath's design in #1214.

    #1895 · thanks @AschenbathLink

  • AddedA seat can run on its own Claude or Codex login: sign in to a separate home once, then name it in the seat's env:.

    A seat can run on its own Claude or Codex login. Sign in to a separate home once, natively, then name it as an absolute CLAUDE_CONFIG_DIR or CODEX_HOME in the member's or rig's env:. It applies at the seat's next launch, and rig seat status and rig provider status show which home a seat uses and where it comes from.

    #1937, #1945Link

  • AddedClaude members that share a project folder can keep their own tool rules, in the spec or with rig seat set-permissions <seat> --rules <file.json>.

    Claude tool rules per member. Claude members that share a project folder can keep their own tool rules: claude_permissions with allow and deny lists in the spec, or rig seat set-permissions <seat> --rules <file.json> --reason "<why>" for an existing seat. A change is audited and applies at the next managed launch or resume; OpenRig never writes the rules into the project's Claude settings. Checked natively on Claude Code 2.1.309: two seats in one folder enforce their own rules, a managed policy wins, and fresh, resume and fork launches enforce them. See Known issues for what isn't claimed.

    #1914Link

  • FixedA working Claude seat that quotes approval-prompt text in its own output no longer has sends and wakes refused. Real dialogs still refuse.

    A working Claude seat that quotes approval-prompt text in its own output, such as › 1. Yes, proceed (y), no longer has sends and queue wakes refused as if it were at a prompt, including when Claude draws its input box high in a tall pane. Real permission, question and MCP dialogs still refuse.

    #1955, #2005Link

  • FixedA Codex seat on the default sandbox can still commit after a resume, fork or restore, and keeps its LEARNED.md.

    A Codex seat on the default workspace-write sandbox can still commit after a resume, fork or restore, and can write its own topology folder, so it keeps its LEARNED.md. When the sandbox refuses its recap, the daemon saves it.

    #2000, #2023, #2018, #2008Link

Before you upgrade 5

  • ChangedAfter installing 0.7.2, restart the daemon: six database updates apply on its first start.

    Restart the daemon after installing. Six database updates apply on its first start: run npm install -g @openrig/[email protected], then rig daemon stop && rig daemon start.

    Link

  • ChangedOn its first start, 0.7.2 replaces OpenRig's own plugin and skill files and keeps a copy of each one. If you edited one, reapply your change from the copy.

    Startup replaces OpenRig's own plugin and skill files (openrig-core goes from 0.1.18 to 0.1.19; the delegating-work and openrig-user skills changed). As in 0.7.1, it first copies each file it replaces under $OPENRIG_HOME/backups/managed-refresh/ and logs where, edited or not. If you did edit one, reapply your change from the copy.

    Link

  • ChangedOn Linux, if a seat's tools use the session bus, set the bus address in the rig's or member's env:.

    On Linux, if a seat's tools use the session bus, set the bus address in the rig's or member's env:. Seats now start with an address that can't connect, even when a shell startup file sets XDG_RUNTIME_DIR (see Behaviour that changed and Known issues).

    #2036Link

  • ChangedName a seat's own CLAUDE_CONFIG_DIR or CODEX_HOME in the rig spec's env:. A one-off rig up --env no longer applies them.

    Declare a seat's own CLAUDE_CONFIG_DIR or CODEX_HOME in the rig spec's env:. A one-off rig up --env no longer applies those two, and says so.

    #1945Link

  • ChangedIf you might go back to an earlier version, set equivalent native Claude rules first: older code leaves per-member Claude tool rules out of launch.

    If you might go back to an earlier version, set equivalent native Claude rules first. Code from before #1914 opens the upgraded database but leaves per-member Claude tool rules out of launch, so a seat's denies stop applying. docs/reference/rig-spec.md has the details.

    #1914Link

Also in this release 63

Seats & restore 10

  • AddedAfter a person declines a Claude permission prompt, rig seat clear-attention <seat> clears it, and the send refusal says so.

    After a person declines a Claude permission prompt, rig seat clear-attention <seat> --reason "<what you saw>" clears the prompt the latest hook still names, and the send refusal says to.

    #1912Link

  • Addedrig launch <rig> <seat> first-starts one seat of a team imported with --materialize-only.

    rig launch <rig> <seat> first-starts one seat of a team imported with --materialize-only, without restoring the others.

    #1965Link

  • ChangedOn Linux, seats get the daemon's runtime directory with a session bus address that can't connect, unless a seat sets its own.

    On Linux, a seat launched by OpenRig now gets the daemon's XDG_RUNTIME_DIR, with DBUS_SESSION_BUS_ADDRESS=disabled:, a session bus address that can't connect. Tools whose sockets live in the runtime directory work in seats without per-tool setup, and a seat's D-Bus clients don't find or start the session bus on their own. A seat's own XDG_RUNTIME_DIR, from env: for example, leaves both as before, and its own bus address is kept. Unchanged: macOS, a daemon started without XDG_RUNTIME_DIR, and terminal.inherit_tmux_environment on. See Known issues.

    #2036 · reported by @borfastLink

  • ChangedIn a Pi seat OpenRig runs, an extension /command typed mid-turn runs at once instead of being refused.

    In a Pi seat that OpenRig runs, an extension /command typed mid-turn runs at once instead of being refused as a steer.

    #1943Link

  • FixedA pod seat that never launched starts fresh from its saved recipe after a daemon restart, instead of waiting at a shell. A community contribution.

    A pod seat that never launched starts fresh from its saved launch recipe after a daemon restart, instead of waiting at a shell.

    #1503 · thanks @Vaishnavi220506Link

  • FixedAfter a team's tmux server dies, rig down settles its seats, so rig archive and rig up can go ahead.

    After a team's tmux server dies, rig down settles its seats, so rig archive and rig up can proceed.

    #1999Link

  • FixedA team of terminal seats reads fully restored after rig start, and rig down names the terminals it stops.

    A team of terminal seats reads fully restored after rig start, and rig down names the terminals it stops.

    #1984Link

  • FixedA launch whose tmux made no session fails clearly instead of reading as launched.

    A launch whose tmux made no session fails as session_not_created or session_unconfirmed instead of reading launched.

    #1910Link

  • FixedA seat held at a choice prompt no hook announces, such as Claude's usage-limit dialog, now escalates while it holds work.

    A seat held at a choice prompt that no hook announces, such as Claude's usage-limit dialog, now escalates while it holds work.

    #1919Link

  • FixedA Pi or OMP seat's second startup block reaches the running turn instead of raising an error.

    A Pi or OMP seat's second startup block reaches the running turn instead of raising runtime_error.

    #1943 · reported by @astral-fleet-sessionsLink

Queue & messaging 18

  • Addedrig stream act <id> records what a reader did about a stream item, and rig stream show lists it.

    rig stream act <id> records what a reader did about a stream item: --work <row>, --decline "<reason>" or --duplicate <id>. rig stream show lists each reader's current action.

    #1899Link

  • Changedrig send to a Codex seat mid-turn says the message joins the running turn, and names --wait-for-idle for separate work.

    rig send to a mid-turn Codex seat says the message joins the running turn and may redirect it, and names --wait-for-idle for separate work.

    #2007Link

  • ChangedA rig send to a seat switching runtime is held, not typed; send it again after the switch.

    A rig send to a seat that is switching runtime is held, not typed (outcome: retained, reason: runtime_switch_in_progress); send it again after the switch.

    #1895Link

  • ChangedA task OpenRig creates itself wakes its seat from OpenRig's own sender, and a task the stuck sweep closes is recorded as closed by stuck-sweep@system. A community contribution.

    A row OpenRig creates itself, such as a stuck-sweep finding or a workflow escalation, wakes its seat from OpenRig's own sender with no reply line, instead of from the row's creator. A stuck-sweep closure is recorded as stuck-sweep@system.

    #1905, #1811 · thanks @AschenbathLink

  • ChangedWith agents.operator_session set, a dead seat's finding goes to that agent first, then the operator seat.

    With agents.operator_session set, a dead seat's finding goes to that agent first, then the operator seat (workspace.operator_seat_name), then the row's creator. Approvals still reach the person. With it unset, routing is as before.

    #2021Link

  • ChangedAn alert for a seat at a choice prompt follows queue.wake_human_rung, and only one reaches a person at a time.

    An alert for a seat at a choice prompt follows queue.wake_human_rung: under explicit-only it stays with the operator seat as a visible row, unless that seat is a person. Only one choice-prompt alert reaches a person at a time on a machine; the others wait as visible rows and post when it retires. Permission-prompt alerts post as before.

    #1919Link

  • ChangedCross-host queue writes wait 15 seconds, and a timeout gives the ID to reconcile by.

    Cross-host queue writes wait 15 seconds for the daemon's answer, and a timeout reads "queue request got no answer in time" with the ID to reconcile by.

    #1911Link

  • FixedA draft in a Claude seat's input box that starts with a blank line no longer reads as empty, so a send isn't typed into it.

    A draft in a Claude seat's input box that starts with a blank line no longer reads as an empty box, so a send isn't typed into it.

    #1977Link

  • FixedA draft-aware send to a Claude seat keeps its paste when Claude's footer changes to a hint such as "paste again to expand".

    A draft-aware send to a Claude seat keeps ownership of its paste when Claude's footer changes to a hint such as "paste again to expand" (see Known issues for #14).

    #1921Link

  • FixedA send to a Pi seat at a confirmation, input or editor dialog is refused and types nothing, instead of choosing the highlighted answer.

    An ordinary rig send to an adopted Pi window waiting at a confirmation dialog is refused with target_needs_input and types nothing, instead of choosing the highlighted answer (#2015). A later change extends that recognition to Pi's input and editor dialogs, including help rows that wrap in an 80-column pane (#2026). A Pi seat that OpenRig runs shows an extension dialog in its pane, cancels it and marks the seat as needing attention (#1996).

    #2015, #2026, #1996Link

  • FixedA queue wake refused at an approval prompt is tried once more when the seat's attention clears.

    A queue wake refused at an approval prompt is retried once when the seat's attention clears, instead of waiting for the stuck sweep.

    #1961Link

  • FixedA seat with an unrelated pane beside its own still gets sends and wakes in its own pane. A community contribution.

    A seat with an unrelated pane beside its own still gets sends and wakes, in its recorded pane.

    #1616 · thanks @Vaishnavi220506Link

  • Fixedrig queue resolve <qitemId> --decision "<evidence>" also releases a task held until a typed blocker such as external: clears. A community contribution.

    rig queue resolve <row> --decision "<evidence>" also releases a row parked on a typed blocker such as external:, fold: or auth:.

    #1809 · thanks @dajiaohuang · reported by @BillyOutlastLink

  • Fixedrig queue whoami and rig proof add find work in other catalogued projects, and rig scope mission create writes the mission's name. A community contribution.

    rig queue whoami resolves a project-tagged row against its catalogued project, rig proof add finds a slice in another catalogued project, and rig scope mission create writes the mission's name.

    #1526, #1938, #1936 · thanks @Vaishnavi220506Link

  • FixedA rig queue create whose outcome is unknown reads the task back once before reporting, and a timed-out cross-host write reads INDETERMINATE.

    A rig queue create whose outcome is unknown reads the row back once by its ID before reporting, and a cross-host write that times out reads INDETERMINATE instead of failed.

    #1978, #1911Link

  • FixedA dead seat's stuck-sweep finding goes to someone who can act, and says which rule chose them.

    A dead seat's stuck-sweep finding goes to someone who can act, not to the dead seat, and says which rule chose them.

    #2011, #2021, #2033Link

  • FixedThe reminder about work set aside to wait waits 5 minutes before reaching a seat that just started waiting.

    The parked-owner reminder no longer reaches a seat in the first 5 minutes after it starts waiting, such as just after a handoff or a question to a person. A seat at an approval or question prompt gets no grace.

    #1963Link

  • FixedA stalled-after-claim finding's age counts from the stall, not the claim.

    A stalled-after-claim finding's age counts from the stall, not the claim.

    #1959Link

Claude 3

  • AddedA Claude seat on the alias haiku with the plan permission is told that Claude Code answers its plan-mode turns with Sonnet, and how to set a full Haiku id.

    A Claude seat set to the alias haiku with the plan permission is told at launch, at restore and in rig seat status that Claude Code answers its plan-mode turns with Sonnet, and how to set a full Haiku id.

    #1942Link

  • FixedWhen Claude refuses a startup turn late, as on an expired login, OpenRig checks again before the next Enter and holds the rest.

    When Claude refuses a startup turn late, for example on an expired login, OpenRig checks again before the next startup input's Enter and holds the rest as owed.

    #1976Link

  • FixedThe model check no longer flags a Claude seat whose undated or Bedrock model id answers with its dated snapshot.

    The model-divergence monitor no longer flags a Claude seat pinned to an undated id that answers with its dated snapshot, or to a Bedrock inference-profile id.

    #1927, #1931Link

Codex 5

  • ChangedOn a Codex home with a hooks.json, OpenRig's activity hooks go there instead of config.toml.

    On a Codex home with a hooks.json, OpenRig's activity hooks go there, and its own old inline block moves out of config.toml.

    #1957Link

  • Fixedrig seat restart --keep-conversation on a Codex seat handles a path with a space, finds the resumed conversation, and says honestly when it can't prove the resume.

    rig seat restart --keep-conversation on a Codex seat keeps a writable root whose path holds a space, looks for the resumed conversation in the home the running Codex uses, and, when it can't prove the resume, says the pane restarted instead of "nothing was restarted".

    #2003, #2037, #1950, #1958Link

  • FixedWhen a Codex home has a hooks.json, OpenRig puts its activity hooks there. Your own hooks, their trust and your disables stay. A community contribution.

    When a Codex home has a hooks.json, OpenRig puts its activity hooks there and moves its own old inline block out of config.toml. Your hooks, their trust and your disables stay; @fsafey found the mixed-format problem in their fork. Inline hook trust is keyed by the managed group's actual position.

    #1957, #2028 · thanks @dajiaohuang · reported by @fsafeyLink

  • FixedA signed-out Codex seat reports login_required instead of waiting out the readiness timeout. A community contribution.

    A signed-out Codex seat at the sign-in chooser or API-key entry reports login_required instead of waiting out the readiness timeout (Codex 0.164.0 and 0.162.1).

    #1967, #1983 · thanks @AschenbathLink

Slack 2

  • ChangedEvery Slack post starts with From <seat> on <machine>, so update anything that read the sender from the last line.

    Every Slack post starts with From <seat> on <machine>, and an escalation's headline reads Waiting on <seat>: <summary>; update anything that read the sender from the last line.

    #1960Link

  • FixedSlack posts name their sender first, escalations name the seat the work waits on, and a reply from another person reaches the agent as their own message.

    Slack: every post names its sender first, an escalation names the seat the work waits on, a reply from another registered person reaches the agent as their own message instead of answering someone else's question, and Slack rows name who wrote.

    #1960, #1893Link

CLI & hosts 7

  • Addedrig capture says when a pane smaller than 80x24 may cut off a seat's prompt, with the command to resize it.

    rig capture says when a pane smaller than 80x24 may cut off the prompt a seat is at, with the command to resize it.

    #1969Link

  • ExpandedOpenRig's MCP server grows to 36 tools. A chat agent such as Claude Desktop can now pass a task it has taken on to another agent in one step, and that agent gets it as a new task. It can also hand back a task it won't finish, so the task goes back to the queue to be picked up again.

    OpenRig's MCP server adds rig_queue_handoff and rig_queue_unclaim (36 tools), so an assistant can pass held work on, or put it back, in one step.

    #1970Link

  • Changedrig up --env CLAUDE_CONFIG_DIR=… or CODEX_HOME=… isn't applied, and the CLI says so. Name a seat's home in the spec.

    rig up --env CLAUDE_CONFIG_DIR=… or CODEX_HOME=… isn't applied, and the CLI says so; other --env values work as before. Name a seat's home in the spec's env:.

    #1945Link

  • Changedrig seat status --json always carries permissions.account.advisories.

    rig seat status --json always carries permissions.account.advisories (empty unless there's an advisory).

    #1942Link

  • FixedThe ACP agents guide that rig acp run --help names now ships: rig context get reference/acp-agents.md.

    The guide that rig acp run --help names now ships: rig context get reference/acp-agents.md.

    #1930Link

  • FixedSmaller fixes from contributors: dropped input after a client disconnects, TUI health summaries and stream state, clearer kernel boot status and test docs. A community contribution.

    From contributors: queued terminal input is dropped after its client disconnects (#1636, @Vaishnavi220506); TUI focused summaries load their health findings (#1986, @Kero-66 and @Aschenbath); the TUI keeps the stream's connection state across pages (#2014, @Nikhi00718); the web dashboard reads a skipped kernel boot as "Boot not tracked", not "Unknown" (#1917, @Aschenbath, reported by @Kero-66); the compaction-and-restore scenario runs through a launch script, and the test-system docs state the CI job's real counts (#1924, #1925, @DeryFerd).

    #1636, #1986, #2014, #1917, #1924, #1925 · thanks @Vaishnavi220506, @Aschenbath, @Nikhi00718, @DeryFerd, @Kero-66Link

  • FixedClearer guidance: what setup writes to your home, how to cancel a queued task, help summaries for 14 subcommands, and all six typing-guard modes in the docs.

    Guidance: the installer guide says what setup and starting Codex seats write to your home configuration, and the operator puts project work on a team's queue; a Codex user who declines the remembered command rule is offered the operator conversation; rig queue update --help and its refusal say how to cancel a row (--state done --closure-reason canceled); rig skill audit says what its stale and hash findings mean; 14 subcommands that showed a blank help summary now have one; the openrig-user skill says a queue create's request ID isn't the row; delegating-work also applies when judging a delegated result; and docs/reference/seat-delivery.md lists all six typing-guard modes.

    #2001, #1973, #1956, #1966, #1923, #1909, #2012, #1989Link

Specs & bundles 2

  • FixedA service bundle install without Docker Compose v2 stops before it writes anything, and --plan warns that it would.

    A service bundle install on a machine without Docker Compose v2 stops with compose_missing before it writes the target or creates the team, and --plan warns that it would.

    #2025Link

  • Fixedrig export copies the team's culture file and names each seat whose agent ref points outside the export.

    rig export copies the team's culture file and names each seat whose agent ref points outside the exported folder.

    #1975Link

Context & skills 5

  • Expandedrig compact <seat> --state shows a restore that is still owed, and repeated failures open one queue item for whoever can act.

    rig compact <seat> --state and seat status show an owed restore stage and its last delivery result, and repeated failures open one queue item for whoever can act.

    #1953Link

  • FixedA managed Claude restore reads its own restore files without stopping at a Read approval, from the seat's next launch.

    A managed Claude restore reads its own restore files without stopping at a Read approval, including on macOS, through a symlinked home or project, and for the generic or configured post-compact-extra.md and preparation root. The grants apply from the seat's next launch or resume.

    #1940, #1952, #1962Link

  • FixedA restored Claude seat stopped at the resume chooser reads as waiting for a person, not as resumed.

    A seat restored with claude --resume that stops at Claude's resume chooser in a tall pane is reported as waiting for a person's choice instead of resumed, and a Codex model chooser there reads as model_selection_gate. An old chooser above a resumed session no longer reads as live.

    #2010Link

  • FixedAfter a managed compaction, a Claude seat's restore starts on the next poll instead of waiting for its screen to change.

    After a managed compaction, a Claude seat's restore starts on the next poll instead of waiting for something to change its screen.

    #1971Link

Setup & platform 11

  • Addedrig provider switch --seat <seat> moves one seat to another subscription login on the same conversation, and rig provider precheck shows what it would do.

    rig provider switch --seat <seat> now moves one seat to another subscription login on the same conversation. A Codex seat moves to a login saved in its own Codex home (--to-account <name>, Linux only), after its current login is saved as before-switch-<time>. A Claude seat moves to its own subscription token file (--token-file <path>, made with claude setup-token), and --stored-login moves it back; OpenRig keeps only the file's path and your label, never the token. rig provider precheck --seat <seat> shows what a switch would do, changing nothing.

    #1972, #1980, #1991Link

  • Addedrig provider status --refresh can read a Claude token's usage on request.

    rig provider status --refresh --provider claude --claude-token-file <path> --credential-label <label> reads a Claude token's usage on request, one model turn per refresh.

    #1901Link

  • AddedA community harness can take its first startup turn at launch. The Cursor example uses it, and OpenClaw seats keep named conversations.

    A community-harness preset can set first_input: true to hand the harness its first startup turn at launch instead of pasting it into the pane. The Cursor example uses it and is no longer startup-assisted, and OpenClaw seats keep named conversations as a local agent or a Gateway client.

    #1987, #2017, #2009Link

  • AddedRex is a terminal provider: from a Rex pane, rig terminal open <view> --window opens the team's view there. A community contribution.

    Rex is a terminal provider. From a Rex pane, rig terminal open <view> --window and the TUI open the team's view as a Rex session; --provider rex selects it.

    #1935 · thanks @vanducngLink

  • Changedrig provider switch now acts; it used to answer failed_safely every time.

    rig provider switch acts: it used to answer failed_safely every time.

    #1972, #1980Link

  • ChangedThe Cursor reference preset passes its first prompt at launch and is no longer startup-assisted.

    The Cursor reference preset is startup_assisted: false and passes its first prompt at launch.

    #2017Link

  • FixedAn open rig view keeps a seat's tile when its tmux session is replaced.

    An open rig view keeps a seat's tile when its tmux session is replaced, and a fresh replacement prints how to reopen the view.

    #1964, #1941Link

  • FixedThe daemon starts listening before it works through a backlog of queue notifications, so startup doesn't time out.

    The daemon starts listening before it works through a backlog of queue notifications, so startup doesn't time out behind them.

    #1993Link

  • FixedA database-conflict check at startup that gets no answer now says so, instead of reading as clean.

    A startup database-conflict check that can't get an answer now says so, instead of reading like a clean one.

    #1974 · reported by @calv-io-nLink

  • FixedProof-source monitoring watches the missions root, not the whole workspace.

    Proof-source monitoring watches the missions root, not the whole workspace.

    #1951Link

  • FixedQueue views, long health histories and send checks do less repeated work.

    Queue views, health reads with long histories and send checks do less repeated work.

    #2031, #2013, #1994Link

Known issues: 24 for this release. Read them
  • On Linux, seats now get the runtime directory with a session bus address that can't connect. This is an accepted trade-off, and default hygiene, not isolation. A shell startup file that sets only XDG_RUNTIME_DIR used to let a seat's clients find the session bus; now the seat keeps DBUS_SESSION_BUS_ADDRESS=disabled:. To use a session bus, set its address in the rig's or member's env:. systemctl --user reaches the person's user service manager from a seat, whatever the bus address. A Codex stdio MCP server still needs env_vars = ["XDG_RUNTIME_DIR"] in Codex's config.toml to see the variable. (#2036)
  • Per-member Claude tool rules have limits. Member denies aren't claimed to hold in bypass mode (full_bypass). Handover and restore carry the rules, but aren't proven to keep the same conversation. An allow list doesn't withdraw broader inherited grants, and these are Claude's own tool rules, not OS or credential isolation. A change applies at the next launch or resume, not in a running process. Going back to code from before #1914 drops the stored rules from launch (see Before you upgrade). (#1914)
  • Pi dialog recognition is a bounded screen check. #2015 refuses ordinary sends at an adopted Pi confirmation dialog, and #2026 later extended the same classifier to Pi's input and editor dialogs and wrapped help rows. Each was checked with a real Pi for its own case only. Layouts outside them keep the earlier behaviour, so an ordinary send can still type into them: more than six rows under a confirmation dialog's border, a widget that draws its own border, clipped or incomplete help, more than three wrapped help rows, and custom extension UIs. Neither check was repeated on the final 0.7.2 build.
  • Moving a seat's account or runtime has limits. A conversation saved under a seat's earlier home doesn't resume in its new one, and live usage refresh still reads only the daemon's own logins. A Codex login switch is Linux only; other seats on that Codex home keep their old login until their next token refresh, then stop with "signed in to another account" until you run the printed rig seat restart <peer> --keep-conversation for each. A runtime switch starts a new native conversation (only the handover carries over), clears the source runtime's model, effort and Codex profile, and doesn't apply Claude launch additions such as an agent file or run startup slash commands. Selected separate-home restart/restore and useful conversation-continuity cases passed. Runtime switching worked in both directions in a minimal setup; one direction required an extra Enter. See Verification and remaining limits below for the untested paths.
  • A new Claude agent's startup text can stay unsent in its input box. Press Enter in its terminal.
  • Claude seats on a macOS native install can read as needing attention after a restore (#86). Check the seat's terminal before acting on it.
  • A Slack channel-mapping change needs a daemon restart. Don't use rig slack disable then enable for it, which marks waiting alerts as seen.
  • Ubuntu 22.04's tmux 3.2a: the known crashing query is gone, but a narrower race remains. Prefer another tmux.
  • rig daemon start can take 20 to 40 seconds before its listener warning, longer than the TUI's 30-second "restore everything" wait. On a slow host, run rig daemon start yourself first.
  • A Claude seat signed in with a long-lived token (claude setup-token) still gets no automatic usage reading. The reader accepts only claude.ai subscription logins and reports not_subscription_login for any other. Read a token's usage on request with rig provider status --refresh --provider claude --claude-token-file <path> --credential-label <label>; the label is yours, not an account the provider confirmed.
  • Managed Claude launch requires /usr/bin/env support for -0 and -u (option support checked on GNU coreutils and macOS 15; BusyBox and older macOS unverified). Without the required option support, launch stops instead of falling back to credential-bearing command-line arguments.
  • In draft-aware mode, an agent's multi-line message to a Claude seat can remain unsubmitted when the paste changes Claude's footer hint. OpenRig withholds Enter, leaving the text in the composer and later sends waiting. Observed on Claude 2.1.309 with both 0.7.0 and the 0.7.1 pre-cut build. 0.7.2 reads Claude's recognized footer hints as part of the same composer (#1921), but the original failure didn't reproduce in a native check, so #14 remains open.
  • Prompt-looking text in a seat's recent output can still be mistaken for an active approval prompt in some layouts, so OpenRig can refuse sends and queue wakes. 0.7.2 lets sends through to a Claude seat whose running timer row sits directly above its empty, framed input box (checked natively on Claude Code 2.1.309, for the layouts exercised). An idle Claude seat with quoted prompt text above its input box, a draft in the box, a mode bar OpenRig doesn't recognize (such as ⏸ manual mode on), an unframed box, and Codex seats are unchanged. Inspect the current native prompt and the refusal before retrying; do not assume that waiting 15 seconds clears it.
  • The shared-database check needs lsof. Without a working lsof, the check can't tell whether another live daemon holds the database. The daemon now says so at startup and on /healthz, but the optional daemon.db_conflict: stop stops only on a confirmed conflict, so it doesn't stop then. The warning for a database outside OPENRIG_HOME doesn't depend on lsof. (#1974)
  • Managed Claude restoration can still ask for approvals. 0.7.2 lets a seat read its own restore files without asking, from its next launch or resume. A relative policies.claude_compaction.message_file_path still asks once, and a packet read can ask after the native conversation changes. In 0.7.1's representative test, the restore also asked to run four read-only commands, which these grants don't cover. Check the retained restore map and reported gaps before treating restoration as complete. (#1940, #1952, #1962) A native check on Claude 2.1.309 passed the Read grants with no approval prompt; a complete restore with no help isn't claimed.
  • A managed Claude restore can remain owed. If a seat stays idle after compaction, rig compact <seat> --state and seat status now show the owed stage and its last delivery result; also read its saved restore map. Before sending a manual restore request, reconcile the native conversation and pending state to avoid a duplicate; do not repeat /compact merely because the restore request has not arrived. (#1953)
  • On Linux, very large trees can still cause severe daemon stalls and file-watch-limit failures. Proof-source monitoring now recurses only at the configured missions root, so unrelated checkouts and build trees in the workspace aren't watched, but a large missions tree still is, and the stalls' cause hasn't been confirmed. (#1813, #1951)
  • A Claude startup refusal that arrives after OpenRig's last check can still race the next startup input's Enter. When OpenRig withholds Enter, the pasted input may stay in the input box: don't resend it, and follow the recovery step the seat reports. Recovery after signing in wasn't verified natively. (#1976)
  • Claude Code answers plan-mode turns with Sonnet when a seat's model is the alias haiku. That's Claude Code's own behaviour, and OpenRig now says so. Configuring the full id claude-haiku-5-5 gave a Haiku answer in a plan-mode follow-up on Claude Code 2.1.309. (#1942)
  • A cross-host queue create can still end with an unknown outcome. A timed-out rig queue create --host now reads INDETERMINATE, and the CLI reads the row back once by its ID. If it's still unknown, check that host for the original row ID before retrying. If the row exists, do not create a replacement. If a retry is needed, reuse the same --id and payload; an unsuccessful read is not proof that the row is absent. (#1911, #1978)
  • A Codex seat whose queue-state folder or team-workspace path contains a space can still be misread on an ordinary resume or restore, because those arguments come before the conversation id. An in-place restart is fixed. (#2037)
  • Automatic Codex hook approval needs OpenRig's plugin folder to match what shipped. If $OPENRIG_HOME/plugins/openrig-core holds files that didn't ship, the Codex plugin still installs or upgrades, but OpenRig approves nothing itself: an existing approval stays as it was, and Codex's own hook review applies. On a restart without a version change, if a hook file or the plugin manifest there differs from what this version shipped, OpenRig doesn't install or upgrade its Codex plugin. On a version upgrade, OpenRig's managed refresh replaces an edited plugin file with the shipped one and keeps your edited copy under $OPENRIG_HOME/backups/managed-refresh/; after upgrading, inspect those backups and reapply any deliberate customization.
  • Terminal views: a view opened before 0.7.2 needs closing and reopening to keep its tiles through a session replacement, and a replacement that takes too long can still need a reopen. This wasn't run in the Herdr, cmux or Rex apps or over SSH, so #1939 stays open. Rex wasn't run on Linux, and a Rex tile that fails 2 to 10 seconds after opening is still listed as opened. (#1964, #1935)
  • Herdr's own status for a seat can read idle or unknown while OpenRig shows it waiting (needs-input), because OpenRig doesn't feed Herdr a state. Use OpenRig's view or the Feed to find waiting seats. Reopening a view with --provider herdr adds a workspace each time; from inside Herdr, rig terminal open <view> --window reuses a matching one. (#2032)

Thanks 29

Thank you to everyone whose work is in this release: @Vaishnavi220506, @Aschenbath, @dajiaohuang, @DeryFerd, @vanducng, @Nikhila-Dhevi-R, @Nikhi00718 and @Kero-66, and, for reports, ideas and outside audit, @borfast, @BillyOutlast, @tianqizhao0704, @calv-io-n, @george661, @fsafey, @astral-fleet-sessions and the Heretek-AI team.

Thanks also to @alexveli1 and @george661, who reported #1764 (addressed by #1778 and #1944); @kainne44 and @bobbiejaxn, who reported #81 (partly addressed by #1919); @oneandonlydean, who reported #1813 (partly addressed by #1951); @todie, who reported #1419 (its closure attribution addressed by #1811); @reisalbuquerque, who reported #49 (partly addressed by #1503); @jimallen, who reported #17 (partly addressed by #2028); @parkingmeter, who reported #1933 (addressed by #1963); @vanducng, who reported #1939 (addressed by #1964 and #1941, open for confirmation); and @haichongfu and @vadym-abstract-factory, who reported #14 (worked on again in #1921; still open).

Thanks also to @reco for the runtime-switch request in #589; @pr0xc3nt4ur1 for the edge-preservation and update case in #1193; and @m3ac-AllbrittenJ and @lev-gpt for the stall-reporting and age evidence in #331.

Verification and remaining limits

This release's selected checks found no demonstrated regression against published 0.7.1 or data loss. This is not an all-paths pass. The sealed package, installed checks and a real 0.7.1 upgrade passed at their recorded scope; both first-user journeys completed.

  • Slack replies can land outside the originating thread when an agent follows the existing reply hint without --reply-to. This round trip failed in testing. The hint predates 0.7.2; the later fix #2055 is not in this release.
  • Abrupt power-loss recovery on 0.7.2 was not tested: the fixture hit its disk-growth cap before its power cut. The 0.7.1 comparison passed data and native-conversation recovery, but its separate terminal-team restore was partial. That baseline is not proof of 0.7.2 recovery.
  • Native account, home and runtime coverage is partial. Selected separate-home restart/restore and useful conversation-continuity cases passed. Runtime switching worked in both directions in a minimal setup; one direction required an extra Enter. The full home matrix, a second Claude subscription token, same-token handover and stored-home-change cases, native switch edge cases and full-kernel coverage, some Slack button cases, and the right-side agents' useful answers after resume remain untested. Controlled restart cases do not substitute for the full native matrix.
  • The named-risk managed compaction and restore exercise completed with useful continuation after about 46 minutes of work, but the adopted Claude home had no OpenRig hooks. Marker, packet and trace paths that depend on those hooks were not exercised by that run.
  • Comparable release-level speed, resource-use and provider usage/charge proof remain unavailable. No across-the-board performance improvement is claimed.

The long-paste issue #14 remains open; the Codex model-picker limitation #2010 and ordinary Codex resume/restore with a space in a workspace or queue-state path remain. The fixed in-place restart path is not proof for ordinary restore. Existing Linux session-bus, Claude member-rule, Pi recognition and other documented limits still apply.

Hermes, Cursor's plug-in work and the Codex member-permission counterpart are not included. Follow-up coverage review is scheduled for 2026-10-26 at 12:00 UTC; that is a review date, not a promise that every gap will be closed.

OpenRig 0.7.1Bring outside agents in: serve your team to apps on other machines, hand tasks to ACP agents, and start from Cursor, Hermes or OpenClaw presets.11 added5 expanded21 changed18 fixed

40 people thanked · Release notes

Highlights

  • ExpandedOpenRig's MCP server grows from 23 to 34 tools, so a chat agent such as Claude Desktop can do much more, and rig mcp serve --http serves one on another machine. A community contribution.

    OpenRig's MCP server grows from 23 to 34 tools, including identity, restore status, a rig's team and lead, following a handoff, reading a result and deciding inside a person's decision room. rig mcp serve --http serves an assistant on another machine, each caller acting as its own seat.

    #1831, #1835, #1842, #1853, #1860, #1596 · thanks @pdurlejLink

  • AddedChoose, per seat, how much automatic input reaches an agent's terminal with rig seat set-typing-guard. Input it holds stays readable and is never replayed.

    rig seat set-typing-guard <seat> --mode off|openrig-urgent|urgent-only|hold sets how much automatic input reaches a seat. rig send --urgent or an urgent queue row marks a message urgent, naming who marked it. Held input stays readable and is never replayed.

    #1770, #1781Link

  • ExpandedQuestions to you show up on the TUI's Feed. Slack still gets every ask by default, or only urgent ones if you choose.

    Asks to you. An ask lands on the TUI's Feed. Every ask still posts to Slack by default; rig gateway human set <id> slack-subscription urgent-only keeps Slack for asks marked --alert, which stand out with a mention.

    #1868, #1878Link

  • ChangedTeam skills live in each seat's own storage instead of your project, and rig skill loadout --seat <seat> shows them. A community contribution.

    Team skills live in each seat's own storage, not your project's .claude/skills or .agents/skills; rig skill loadout --seat <seat> shows them.

    #1008 · thanks @puniservLink

  • FixedA compaction OpenRig is managing picks up where it stopped after a daemon restart, such as an upgrade.

    A daemon restart, such as an upgrade, picks up a managed compaction where it stopped.

    #1866Link

Before you upgrade 6

  • ChangedAfter installing 0.7.1, restart the daemon: eight database updates apply on its first start.

    Restart the daemon after installing. Eight database updates apply on its first start: run npm install -g @openrig/[email protected], then rig daemon stop && rig daemon start.

    Link

  • ChangedOn its first start, 0.7.1 replaces OpenRig's own plugin and skill files and keeps a copy of each one. If you edited one, reapply your change from the copy.

    Startup replaces OpenRig's own plugin and skill files (openrig-core goes from 0.1.17 to 0.1.18). As in 0.7.0, it first copies each file it replaces under $OPENRIG_HOME/backups/managed-refresh/ and logs where, edited or not. If you did edit one, reapply your change from the copy.

    Link

  • ChangedClaude seats need Claude Code 2.1.280 or newer to see their team skills.

    Claude seats need Claude Code 2.1.280 or newer to see their team skills (claude --version).

    Link

  • ChangedIf an earlier version changed your worktree's Claude permission mode to acceptEdits, set it back once by hand. 0.7.1 stops changing it.

    If an earlier version reset your worktree's Claude permission mode, set it back once by hand. Launching a managed Claude seat used to rewrite defaultMode in .claude/settings.local.json to acceptEdits; 0.7.1 stops, but doesn't repair files already changed.

    #1776Link

  • ChangedIf you might go back to 0.7.0, undo any Slack subscription choice first: 0.7.0 can't read a person file that holds one.

    If you might go back to 0.7.0, undo Slack subscription choices first. 0.7.0 can't read a person file that holds one, so its people registry stops loading. Save each choice (rig gateway human show <id> --json > <id>.json), then run rig gateway human set <id> slack-subscription unset: someone on urgent-only gets every ask in Slack again, as 0.7.0 does. Set it again after you return to 0.7.1. The unset removes only the Slack subscription, so a person file that still holds a subscriptions: entry fails on 0.7.0 too. Don't restore an older gateway folder or database instead: that can lose newer people, bindings and delivery records.

    Link

  • ChangedIf you go back to 0.7.0 and then upgrade again, a seat can read as running instead of being relaunched.

    If you go back to 0.7.0 and then upgrade again, old process evidence can keep a seat reading running instead of being relaunched.

    #1906Link

Also in this release 44

Seats & restore 6

  • AddedChoose how far OpenRig and other agents may act on a seat with rig seat set-terminal-policy. Existing seats keep full control.

    rig seat set-terminal-policy <seat> --preset no-peer-interventions|help-within-instructions|full-control sets how far OpenRig and other agents may act on a seat, with exceptions for compaction and model changes. Existing seats keep full control.

    #1846Link

  • Addedrig edge add and rig edge remove change one edge on a running rig.

    rig edge add and rig edge remove change one edge on a running rig.

    #1733, #1746Link

  • ChangedA seat attached with rig attach as an outside app stays attached through rig down and restore.

    A seat joined with rig attach as an outside app stays attached through rig down and restore.

    #1827, #1834Link

  • FixedNew seats get the daemon's database and tmux folder settings.

    New seats get the daemon's OPENRIG_DB and TMUX_TMPDIR.

    #1812Link

  • FixedAfter a daemon restart that can't see the seats' tmux server, running agents are no longer detached and relaunched beside themselves.

    After a daemon restart that can't see the seats' tmux server, running agents are no longer detached and relaunched beside themselves.

    #1906Link

  • FixedA seat waiting at a prompt only its pane shows, such as a Codex approval, now shows as needing attention, with the reason.

    A seat waiting at a prompt that only its pane shows, such as a Codex approval prompt, is shown as needing attention, with its reason, in the seat view, rig ps, the compact JSON and the rig count.

    #1946Link

Queue & messaging 13

  • Addedrig watchdog update changes a job in place, and the context watch takes token or percent thresholds. A community contribution.

    rig watchdog update retunes a job in place; the context watch takes token or percent thresholds.

    #1803, #1735 · thanks @AdamWhitehurst, @akushonkamenLink

  • AddedA seat can read the observations meant for it a page at a time with rig stream subscribe and rig stream read, and rig stream show <id> says what became of one.

    rig stream subscribe <seat> and rig stream read give a seat bounded pages of the observations meant for it, and rig stream show <id> says what became of one.

    #1891, #1888Link

  • AddedOff by default: your intake seat can route stream observations one small decision at a time with rig project wake --decide, and gets back anything uncertain.

    Off by default: once decisions are enabled, rig project wake --decide lets your intake seat route stream observations with one bounded typed decision each, and hands anything uncertain back to that seat.

    #1879, #1882, #1894Link

  • ChangedStream items emitted after the upgrade are deleted after 30 days or beyond the newest 20,000, unless something refers to them. Older history is kept.

    Stream retention is on: items emitted after the upgrade are deleted after 30 days, or beyond the newest 20,000, unless a record names them (retention.stream_days, retention.stream_max_items). History from before the upgrade is kept.

    #1891, #1897Link

  • Changedrig queue show --json drops lastNudgeInputBox, and send results no longer describe the input box.

    rig queue show --json drops lastNudgeInputBox, and send results no longer describe the input box.

    #1738Link

  • ChangedAn urgent task's wake starts with "Urgent (marked by …):".

    An urgent or critical row's wake starts with Urgent (marked by …):.

    #1770Link

  • Changedrig queue show and rig queue whoami print notices for people on stderr.

    rig queue show and rig queue whoami print human notices on stderr.

    #1808Link

  • Changedrig send --dangerously-interact stops and shows you text already typed into a seat's input box instead of pasting over it.

    rig send --dangerously-interact --reason into a seat's input box stops and shows text already typed or pasted there, apart from suggestions, instead of pasting over it; clear it and retry, or pass --type-without-checking. Keys for a recognized native menu are sent as before.

    #1892Link

  • Changedrig send to a terminal seat types exactly your text, without the From and To lines, and queue wakes type nothing into it.

    rig send to a terminal seat types exactly your text, without the From/To lines, and queue wakes type nothing into it.

    #1100Link

  • ChangedA stream item over 16 KiB is stored shortened and marked, and reading after an item that was deleted says so instead of returning nothing.

    A stream body over 16 KiB is stored truncated and marked, and rig stream list --after from a pruned item returns stream_cursor_expired instead of an empty list.

    #1891Link

  • ChangedA send held because of a draft in the seat's input box reports that it wasn't delivered, and a compaction prompt held that way counts as not sent.

    A send held for a draft in the seat's input box reports inputPhase: "not_reached", and a managed compaction prompt held that way counts as not sent.

    #1884, #1889Link

  • FixedReminders and workflow keepalives survive a seat swap.

    Reminders and workflow keepalives survive a seat swap.

    #1777, #1782Link

  • FixedOne stuck task on a removed rig no longer stops the rest from being flagged, and stopped watchdog jobs let go of their schedules.

    One stuck row on a removed rig no longer stops the stuck sweep from flagging the rest, and stopped watchdog jobs release their old schedules.

    #1903, #1900Link

Claude 2

  • AddedA Claude member can bring its own agent file, system prompt, plugin folders and Advisor model. A community contribution.

    A Claude member can bring its own agent file, system prompt file, plugin folders and Advisor model.

    #1737, #1736 · thanks @AschenbathLink

  • FixedA Claude seat whose startup turn is refused reports the startup context it still owes. See Known issues for an expired login.

    A Claude seat whose startup turn is refused reports its remaining startup context as owed; with an expired login, later startup inputs can still be submitted first (see Known issues).

    #1869Link

Codex 2

  • FixedA rebuilt Codex seat keeps its narrower sandbox, and read-only Codex profiles launch. A community contribution.

    A rebuilt Codex seat keeps its narrower sandbox, and read-only Codex profiles launch.

    #1779, #1791, #1825 · thanks @bradvinLink

  • FixedUpgrading OpenRig no longer stops a working Codex seat at "Hooks need review", when its plugin is exactly what shipped.

    Upgrading OpenRig no longer stops a working Codex seat at "Hooks need review". OpenRig can renew approval of its own Codex plugin during an upgrade when the prior approval exactly matches the previous shipped bundle, nothing is disabled, and the installed bytes match the shipped bundle. Explicit disables and unrelated hooks are preserved.

    #1948Link

Slack 1

  • FixedAn answer retried from Slack or Steering after an interrupted close is used only once.

    An answer retried from Slack or Steering after an interrupted close is used once, and a replayed Slack reply stays absorbed.

    #1896, #1898Link

CLI & hosts 7

  • Addedrig acp run <qitemId> hands a task to an ACP agent such as Hermes or OpenClaw, and a new guide covers A2A agents.

    rig acp run <row> hands a row's task to an ACP agent such as Hermes or OpenClaw; a new guide covers A2A agents.

    #1823, #1829Link

  • Changedrig ps --nodes separates every column with a space and adds an ATTN column, so update scripts that read columns by position.

    rig ps --nodes separates every column with a space and adds an ATTN column before REASON; update scripts that read columns by position.

    #1780, #1876Link

  • Changedrig down asks before stopping the rig you're in, and without a terminal it stops nothing and prints the command with --yes.

    rig down asks before stopping the rig you're in; without a terminal it stops nothing and prints the --yes command.

    #1838Link

  • Changedrig up --plan no longer starts a stopped daemon; it exits with daemon_not_running.

    rig up --plan no longer starts a stopped daemon; it exits with daemon_not_running.

    #1836Link

  • Changedrig provider moves is back with a new job: filing and reading subscription move reports. It switches nothing.

    rig provider moves is back with a new job: filing and reading subscription move reports. It switches nothing.

    #1847, #1849Link

  • FixedHealth diagnoses still list when an unrelated entry has a malformed field.

    Health diagnoses still list when an unrelated diagnosis row holds a malformed field.

    #1920Link

  • FixedMany smaller fixes from contributors: faster cost history, kept drafts in the web UI, a clearer compaction plan, exports that keep culture files and more. A community contribution.

    From contributors: launch probe evidence (#1499, @Aschenbath); request IDs for creates and checked stops (#1790, #1792, @bradvin); faster cost history, ordered stream replay, kept web-UI drafts and guarded sends at Claude's MCP prompts (#1756, #1757, #1758, #1864, #1865, @Nikhi00718); a non-blocking preflight (#1759, @icey-zzz); clearer compact-plan output (#1629, @taljeri); exports keep culture files (#1657, @Totopo27); no flash in terminal views (#1663, @Vaishnavi220506); pod startup files for added seats (#1701, @AdamWhitehurst); Pi idle heartbeats (#1702, @okle100); the rig ps activity column (#1614, @shravansumanthanan); full workflow trails (#1732, @psbanka).

    #1499, #1790, #1792, #1756, #1757, #1758, #1864, #1865, #1759, #1629, #1657, #1663, #1701, #1702, #1614, #1732 · thanks @Aschenbath, @bradvin, @Nikhi00718, @icey-zzz, @taljeri, @Totopo27, @Vaishnavi220506, @AdamWhitehurst, @okle100, @shravansumanthanan, @psbankaLink

Specs & bundles 2

  • Addedrig up <spec> --name <rig> runs one spec as several rigs. A community contribution.

    rig up <spec> --name <rig> runs one spec as several rigs.

    #1692 · thanks @klueless-ioLink

  • ExpandedService bundles, off by default since 0.6.12, let a bundle bring its own services. New in 0.7.1, rig bundle install <bundle> --plan --target <folder> previews the services an install would run. Proven on Linux.

    Off by default since 0.6.12: with bundle.services_enabled on (rig config set bundle.services_enabled true), a bundle carries its Compose file, rig bundle inspect shows each service before anything runs, and rig bundle install <bundle> --target <folder> starts its services, then its seats, in that folder. In 0.7.1, --plan --target previews the services an install would run, the before-install view also names a Claude member's own agent, prompt and plugin folders, and the example secrets-manager team publishes Vault's port on the host's loopback only. Proven on Linux; not run on macOS.

    #1474, #1848, #1745, #1845Link

Context & skills 2

  • AddedA setting puts restore maps in a folder your seats are allowed to write to. A community contribution.

    policies.claude_compaction.preparation_root puts restore maps where seats may write.

    #1585 · thanks @AschenbathLink

  • FixedSeats sharing a CLAUDE.md or AGENTS.md no longer overwrite each other's role, and rig down puts your guidance files back exactly as they were.

    A seat's role no longer overwrites the others' in a shared CLAUDE.md or AGENTS.md, and rig down restores your guidance files byte for byte.

    #1840, #1854, #1859, #1867Link

Setup & platform 9

  • AddedAn optional setting stops a second daemon from using a database another daemon is already running on. By default it only warns.

    Optional daemon.db_conflict: stop keeps a second daemon off a database another live daemon holds; the default still only warns.

    #1890Link

  • Expandedrig seat status shows the permissions a seat's next launch will use and where each one comes from, and rig setup asks before adding to your shared guidance files.

    rig seat status shows the permissions a seat's next fresh launch will use and where each comes from; rig setup asks before adding OpenRig's line to your shared guidance files.

    #1843Link

  • ExpandedCommunity harnesses can report, name and reopen conversations, with examples for Cursor, Hermes and OpenClaw.

    Community harnesses can report, name and reopen conversations, with examples for Cursor, Hermes and OpenClaw.

    #1768, #1769, #1771, #1783, #1784, #1826, #1870Link

  • Changedrig setup --providers is remembered, so OpenRig starts seats only for the tools you chose.

    rig setup --providers is remembered (provider.selected), so the kernel starts seats only for the harnesses you chose.

    #1817Link

  • FixedHerdr tiles come back after a Herdr restart, you can pick a Herdr session, and the TUI's terminal button works over SSH. A community contribution.

    Herdr: tiles come back after a Herdr restart (one over SSH needs reopening), --session picks a Herdr session, and the TUI's terminal button works over SSH.

    #1796, #1076, #1748 · thanks @AschenbathLink

  • Fixedrig daemon start waits for a slow daemon instead of stopping it, and only warns when a secondary listener such as Tailscale's can't be checked. A community contribution.

    rig daemon start waits for a slow daemon instead of stopping it, and warns rather than fails when only a secondary listener, such as Tailscale's, can't be verified.

    #1716, #1743, #1793 · thanks @dajiaohuangLink

  • FixedOn Ubuntu 22.04's tmux 3.2a, closing a session no longer sends the query that crashed tmux.

    On Ubuntu 22.04's tmux 3.2a, a closing session no longer sends the query that crashes tmux.

    #1755Link

  • FixedOpenRig's hooks run even when Node isn't on the seat's PATH.

    OpenRig's hooks run without Node on the seat's PATH.

    #1727, #1728, #1729Link

  • FixedProvider credentials and the activity token no longer appear on tmux, shell or env command lines.

    Provider credentials and the activity-hook token stay off tmux, shell and env command lines; @pr0xc3nt4ur1 first raised it in #1360.

    #1907 · reported by @pr0xc3nt4ur1Link

Known issues: 22 for this release. Read them
  • A new Claude agent's startup text can stay unsent in its input box. Press Enter in its terminal.
  • Claude seats on a macOS native install can read as needing attention after a restore (#86). Check the seat's terminal before acting on it.
  • A Slack channel-mapping change needs a daemon restart. Don't use rig slack disable then enable for it, which marks waiting alerts as seen.
  • Ubuntu 22.04's tmux 3.2a: the known crashing query is gone, but a narrower race remains. Prefer another tmux.
  • rig daemon start can take 20 to 40 seconds before its listener warning, longer than the TUI's 30-second "restore everything" wait. On a slow host, run rig daemon start yourself first.
  • A Claude seat signed in with a long-lived token (claude setup-token) gets no usage reading. The reader accepts only claude.ai subscription logins and reports not_subscription_login for any other.
  • Managed Claude launch requires /usr/bin/env support for -0 and -u (option support checked on GNU coreutils and macOS 15; BusyBox and older macOS unverified). Without the required option support, launch stops instead of falling back to credential-bearing command-line arguments.
  • In draft-aware mode, an agent's multi-line message to a Claude seat can remain unsubmitted when the paste changes Claude's footer hint. OpenRig withholds Enter, leaving the text in the composer and later sends waiting. Observed on Claude 2.1.309 with both 0.7.0 and the 0.7.1 pre-cut build; #14 remains open.
  • Prompt-looking text in a seat's recent output can be mistaken for an active approval prompt, so OpenRig can refuse sends and queue wakes even while the seat is working. Inspect the current native prompt and the refusal before retrying; do not assume that waiting 15 seconds clears it.
  • rig acp run --help points to reference/acp-agents.md, which is not included in this release's reference context pack. Read daemon/docs/reference/acp-agents.md inside the installed @openrig/cli package instead.
  • The shared-database check needs lsof. #1763's warning that another live daemon is using the same database, and the optional daemon.db_conflict: stop, find that daemon with lsof. On a host without a working lsof (each lsof call times out after 1 s), the check is skipped without a message, so neither the warning nor the stop happens. The warning for a database outside OPENRIG_HOME doesn't depend on lsof.
  • Managed Claude restoration can require native approvals. On a seat without bypass permissions, restoration can ask to read OpenRig files outside its working directory. In a representative openrig-core test on Claude Code 2.1.309 (acceptEdits), the restore and audit completed after three one-time Read approvals (the restore marker, post-compaction instructions and refocusing skill) plus four approvals for read-only commands. Check the retained restore map and reported gaps before treating restoration as complete.
  • A managed Claude restore can remain owed without showing why delivery is delayed. If a seat remains idle after compaction, inspect rig compact <seat> --state and its saved restore map. Before sending a manual restore request, reconcile the native conversation and pending state to avoid a duplicate; do not repeat /compact merely because the restore request has not arrived.
  • On Linux, workspaces containing very large checkout or build trees can cause severe daemon stalls and file-watch-limit failures. The recursive proof-source watcher covers the workspace root. Keeping large checkout/build trees outside that root may reduce exposure; this mitigation has not yet been verified. (#1813)
  • A Claude startup with an expired login can still submit later startup inputs before noticing the refusal. The packaged whats-new (reference/whats-new.md) overstates the hold behavior. Resolve the login and follow the seat's reported continuation guidance; this test did not verify recovery. (#1869)
  • On Claude Code 2.1.309, a seat configured with the model alias haiku and the plan permission answered on Sonnet in one observed run. Configuring the full id claude-haiku-5-5 gave a Haiku answer in the plan-mode follow-up.
  • A Cursor seat's startup is assisted. It reports attention_required and needs one operator acknowledgement: rig seat clear-attention <seat> --reason "<why>". This wasn't rechecked natively on 0.7.1. (#1870)
  • A resumed Codex seat can be misreported as not interactive when its header has scrolled off and its footer uses a multi-word model label such as GPT-6.1 Sol medium; rig up --existing can then stop. Reported on 0.7.0; the same recognition checks remain in 0.7.1. (#1764)
  • Cross-host queue creation can report failure after the row was created. A rig queue create --host request can time out or return failure even though the destination host created the row. Check that host for the original row ID before retrying. If the row exists, do not create a replacement. If a retry is needed, reuse the same --id and payload; an unsuccessful read is not proof that the row is absent.
  • Automatic Codex hook approval needs OpenRig's plugin folder to match what shipped. If $OPENRIG_HOME/plugins/openrig-core holds files that didn't ship, the Codex plugin still installs or upgrades, but OpenRig approves nothing itself: an existing approval stays as it was, and Codex's own hook review applies. On a restart without a version change, if a hook file or the plugin manifest there differs from what this version shipped, OpenRig doesn't install or upgrade its Codex plugin. On a version upgrade, OpenRig's managed refresh replaces an edited plugin file with the shipped one and keeps your edited copy under $OPENRIG_HOME/backups/managed-refresh/; after upgrading, inspect those backups and reapply any deliberate customization.
  • With CODEX_HOME set in a seat's environment, rig seat restart --keep-conversation can report that the resume was not proven and that nothing restarted, although the process actually restarted and resumed. Inspect the seat's pane and native /status before retrying; a failed proof read is not proof that no restart occurred.
  • rig provider switch does not switch a seat's account in 0.7.1. Its precheck can refuse an unknown target, and its execution path is not yet wired. The separate home-level Codex auth-switch/restart path is not this command.

Thanks 40

Thank you to everyone whose work is in this release: @Aschenbath, @bradvin, @Nikhi00718, @AdamWhitehurst, @puniserv, @pdurlej, @klueless-io, @shravansumanthanan, @taljeri, @Totopo27, @Vaishnavi220506, @okle100, @dajiaohuang, @icey-zzz, @akushonkamen, @psbanka and @adampog, and, for reports and ideas, @lev-gpt, @XVVH, @Kero-66, @pr0xc3nt4ur1, @VltrnOne, @BillyOutlast, @gogabrielordonez, @geoff-dhango, @alexveli1, @aanestesia, @team-sudarshana, @oneandonlydean, @t1m3fr33d0m, @smota and @z4cc.

Thanks also to @george661, who reported #1710 (partly addressed by #1721); @m3ac-AllbrittenJ, who reported #331 (partly addressed by #1801); @shintaii and @gopinathrimc, who reported #27 (partly addressed by #1735); @kainne44 and @bobbiejaxn, who reported #81 (partly addressed by #1876 and #1946); and @haichongfu and @vadym-abstract-factory, who reported #14 (partly addressed by #1871).

OpenRig 0.7.0Restarting your machine brings the team back, and quiet hours hold questions until you're back.6 added16 changed8 fixed

16 people thanked · Release notes

Highlights

  • FixedAfter a reboot, the daemon brings its kernel back by itself. A community contribution.

    After a reboot, the daemon restores a kernel whose seats are all detached.

    #1081 · thanks @haralezLink

  • AddedSet quiet hours for a person: routine questions wait until they're back and arrive once. Escalations still go through.

    Quiet hours for the person. rig gateway human quiet set <id> --daily HH:MM-HH:MM (or --until) holds routine asks while the person is away and posts each one once when they're back. Escalations still go through.

    #1584, #1606, #1649, #1720Link

  • ChangedCommands like rig archive, rig snapshot, rig export and rig restore --rig now take a rig's name instead of its id, and say so when two rigs share a name. A community contribution.

    Rig names everywhere. archive, unarchive, release, shrink, expand, snapshot, export, restore --rig and the matching MCP tools take a rig's name. A name two rigs share says so.

    #1681 · thanks @Nikhi00718Link

  • FixedA rig with one seat missing a startup file still restores all the other seats.

    A seat missing a startup file no longer blocks the whole rig's restore; the other seats come back.

    #1696Link

  • FixedA busy daemon now gets your request instead of a refusal, and a write that timed out says its result is unknown.

    A busy daemon gets the real request; the CLI refuses only when it's confirmed down, and a timed-out write says its outcome is unknown.

    #1650Link

Before you upgrade 5

  • ChangedAfter installing 0.7.0, restart the daemon: six database updates apply on its first start.

    Restart the daemon after installing. Six database updates apply on its first start: run npm install -g @openrig/[email protected], then rig daemon stop && rig daemon start.

    Link

  • ChangedNew agents no longer inherit accounts or keys set in tmux's global environment. Put them in the seat's env, or turn the old behaviour back on.

    If you pass accounts or API keys to new agents through tmux's global environment (tmux set-environment -g …), new agents no longer inherit it. Put the values in the seat's env, pass rig up --env KEY=VALUE, or keep the old behaviour with rig config set terminal.inherit_tmux_environment true. rig setup warns when it sees a custom tmux configuration. Running agents aren't affected.

    Link

  • ChangedOn its first start, 0.7.0 replaces OpenRig's own plugin and skill files and keeps a copy of each one. A copy doesn't mean you changed anything.

    Startup replaces OpenRig's own plugin and skill files with 0.7.0's copies. It first copies each file it replaces under $OPENRIG_HOME/backups/managed-refresh/ and logs where, whether or not you edited it: about 22 copies on the first start after upgrading from 0.6.14, so a copy doesn't mean you changed anything. If you did edit one, your change may stop working until you reapply it from the copy; the log line names the original file.

    Link

  • ChangedIf you send tasks to another machine by its own id, run rig host doctor once for that host.

    If you write queue rows to another machine by its own id (member@rig@<self-id>), run rig host doctor <alias> once per host so the binding learns its address.

    Link

  • Changedrig provider moves is gone, so a script that calls it needs changing.

    If a script uses rig provider moves, change it: the command and its setting are gone.

    Link

Also in this release 20

Seats & restore 3

  • ChangedNew agents start from a clean environment instead of tmux's global one.

    New agents start from a clean environment, not tmux's global one.

    #1573Link

  • FixedSeats added to a running rig now get its culture and startup files, on rigs created with 0.7.0.

    Seats added to a running rig get its culture and startup files (rigs created on 0.7.0).

    #1632Link

  • Fixedrig up --env now reaches every way a seat can be launched.

    rig up --env reaches every launch shape.

    #1511Link

Queue & messaging 4

  • AddedSave modes such as "asleep" or "out of office" for a person, end them on a schedule, and see what each one changed.

    Modes for the person. rig gateway human mode saves and applies a person's modes, ends them on a schedule with --until, and reports what each one changed. Inside a mode's agreed "decision room", the agent that asked can record a delegated decision; permission prompts are never decided this way.

    #1656, #1715, #1705Link

  • Addedrig queue show --json says why a wake didn't get through. A community contribution.

    rig queue show --json says why a wake didn't land.

    #1555 · thanks @1solomonwakhunguLink

  • ChangedA task closed as done can no longer say it's blocked; block it on its follow-up instead. A community contribution.

    A done close can't use --closure-reason blocked_on; use rig queue block <id> --on <child>.

    #1704 · thanks @AschenbathLink

  • FixedWatchdog deliveries are recorded as they happened, and repeated refusals at a prompt raise an alert.

    Watchdog deliveries are recorded as they happened, and repeated refusals at a prompt raise an alert.

    #1713Link

Claude 1

  • ChangedBefore a new Claude agent's first message, OpenRig waits briefly for its input box. Delivery still isn't guaranteed; see Known issues.

    Before a new Claude agent's first startup message, OpenRig looks briefly (up to about five seconds) for Claude's input box, and keeps its checks on the submission. It doesn't guarantee delivery; see Known issues.

    A new Claude agent's startup text can stay in its input box unsent. If a fresh Claude seat sits idle with text at its prompt, open its terminal and press Enter.

    #1730Link

Codex 1

  • AddedCodex seats that use openrig-core now get its refocus and skills, and a fresh Codex seat starts without the hook review.

    Codex seats that select openrig-core get its refocus and skills: OpenRig installs the plugin into Codex and, on a first install, trusts its own six hooks after checking their files, so a fresh Codex seat starts without Codex's hook review. The file check happens only when trust is granted: a later edit to the cached hook scripts keeps that trust, as with any hook trusted in Codex. The trust covers that Codex home, so your own Codex sessions there load the plugin too; its hooks do nothing outside an OpenRig seat. A plugin or hook you already disabled, or left untrusted, keeps your choice.

    #1824Link

Slack 1

  • FixedIn Slack, a thread reply answers only a question asked before it, and a rejected message isn't posted again. A community contribution.

    Slack: a thread reply answers only a question posted before it, and a rejected message isn't re-posted.

    #1568, #1703 · thanks @AschenbathLink

TUI 2

  • AddedThe TUI's agent table shows each seat's effort setting. A community contribution.

    The TUI's agent table shows each seat's configured effort.

    #1529 · thanks @tianxingjian2406Link

  • ChangedA TUI left open says when it no longer matches the daemon's version, and refreshes less often.

    A long-open TUI says when its build differs from the daemon's, and refreshes less often.

    #1600Link

CLI & hosts 4

  • Changedrig provider moves and its setting are removed; report a subscription move as a task instead. rig slack verify drops --reason and --actor.

    rig provider moves and provider.subscription_moves are removed; report a subscription move as a queue item instead. rig slack verify lost --reason and --actor.

    #1672, #1674Link

  • Changedrig up --plan waits as long as a real launch, and rig seat restart and rig policy permissions apply now ask for permission.

    rig up --plan waits as long as an apply. rig seat restart, and policy permissions apply, now ask for permission.

    Link

  • ChangedSome output changed: rig gateway human list shows availability, rig attach prints Sender:, and a reused deliveryId no longer stops a send.

    Output shapes: rig gateway human list prints availability (available|focus|away|off); rig attach prints Sender:; a reused deliveryId no longer deduplicates a send.

    Link

  • Fixedrig ps --rig now filters correctly and says when it doesn't know a rig. A community contribution.

    rig ps --rig and --host --rig report an unknown rig and filter correctly.

    #1690, #1698, #1706 · thanks @Nikhi00718Link

Context & skills 2

  • Addedrig compact --cancel stops a compaction that's already under way, without restarting the daemon.

    rig compact --cancel stops a managed compaction that already sent /compact, with no daemon restart.

    #1660Link

  • ChangedA new agent's first message now says it's identity context, not a task, and an agent with nothing to start on waits for an assignment.

    A new agent's first startup message says it's OpenRig's identity context, not a task, and a seat with nothing else to start with is asked to confirm its identity and wait for an assignment.

    #1754Link

Setup & platform 2

  • ChangedTeam agents ask for permission less often: 15 housekeeping commands no longer prompt.

    Team agents are asked for permission less often: 15 housekeeping commands no longer prompt.

    #1665Link

  • Changedrig setup keeps 10,000 lines of tmux history, down from 50,000. A community contribution.

    rig setup keeps 10,000 rows of tmux history, down from 50,000.

    #1264 · thanks @Quentin-MLink

Known issues: 5 for this release. Read them
  • A new Claude agent's startup text can stay in its input box unsent. If a fresh Claude seat sits idle with text at its prompt, open its terminal and press Enter.
  • The TUI's terminal button refuses inside a Herdr pane reached over SSH (also in 0.6.14). Start the TUI with env -u SSH_CONNECTION -u SSH_CLIENT -u SSH_TTY rig tui, or run rig terminal open '<view>' --provider herdr. A fix is on its way.
  • Claude seats on a macOS native install can read as needing attention after a restore (#86). A fix is in progress and isn't in this release.
  • A Slack channel-mapping change needs a daemon restart (rig daemon stop && rig daemon start). Don't use rig slack disable then enable for it: enabling marks any alerts waiting to post to Slack as already seen, so open exchanges miss them.
  • Ubuntu 22.04's stock tmux 3.2a can crash its whole server when OpenRig checks a pane that has just closed, interrupting the other sessions on that server. Avoid tmux 3.2a for OpenRig; check your version with tmux -V. A replacement version has not been verified against this crash.

Thanks 16

Thank you to everyone whose work is in this release: @Nikhi00718, @Aschenbath, @PROACTIVA-US, @jayhemnani9910, @rudycelekli, @markankamaransheogarat-sys, @haralez, @tianxingjian2406, @1solomonwakhungu, @AdamWhitehurst, @Quentin-M, @arxh80, @DeryFerd, @okle100, @zichen0116 and @13pgpg.

Tested on our own machines, and with first-time setups on Claude and on Codex, before release. A first-time setup on a Mac wasn't completed.

OpenRig 0.6.140.6.14 is the last planned release of the 0.6 line: a small set of stability fixes on top of 0.6.13.3 added7 changed1 fixed

1 contributor · Release notes

Highlights

  • AddedAn agent an older OpenRig launched that stopped taking messages after an upgrade can be repaired in place, keeping its session and history.

    Agents with no recorded pane can be repaired. rig reconcile-session <seat> --repair-missing-pane --no-launch fills in only the missing pane after looking at the session twice. It keeps the seat's session, resume token and history, and adopts nothing. It refuses, changing nothing, when there's more than one pane or window, the pane changes between its two looks, a seat operation is running, or typing protection is on. If messages to an agent are refused with "Managed pane identity unavailable or changed; no input written." and that seat's pane was never recorded (seats an older OpenRig launched are often in this state), repair it in place, then send again; the repair needs typing protection off for that seat, so turn it off only if the person agrees, and back on afterwards.

    The in-place repair refuses adopted seats and ambiguous panes. For a confirmed live seat, plain rig reconcile-session <seat> --no-launch re-adopts it into a new session row and attempts to capture its resume token; conversation continuity is not verified. If the intended pane is unclear, use rig context get help.

    #1564Link

  • AddedA new getting-started page written for people: how the pieces fit, and the quick way in through the rigs skill.

    A getting-started page for people. docs/reference/quickstart.md explains how the pieces fit, the quick way in through the rigs skill, and what OpenRig changes on your machine. getting-started.md becomes the setup reference for the agent doing the setup.

    rig context get reference/quickstart.md doesn't resolve. Read the page on GitHub or in the package's docs/reference/.

    #1565Link

Also in this release 9

Queue & messaging 1

  • Changedrig ask --wake now refuses an agent it can't wake (Pi, custom or unrecorded) instead of trying a Claude wake.

    rig ask --wake refuses a runtime it can't wake (Pi, custom or unrecorded) instead of quietly trying a Claude wake. Upgrade the CLI and the daemon together to catch every case.

    #1561Link

TUI 1

  • Changedrig ps and the TUI read the list of agents through an index instead of scanning the whole event log.

    An indexed inventory read. The inventory read behind rig ps and each rig tui refresh now finds launch fences through an existing index instead of scanning the whole event log, and returns the same rows.

    #1617Link

CLI & hosts 2

  • ChangedWhen a message or a compaction is refused because an agent's terminal was never recorded, the error now names the repair command.

    The refusals name the fix. The send refusal and the compaction refusal for a seat with no recorded pane now name the repair command, and the compaction refusal explains how to turn typing protection off and on with the person's agreement. rig config --help lists the new Mac setting, rig ask --help explains its exit codes, and the CLI reference and the openrig-user skill list the repair.

    #1594Link

  • ChangedThe bundled openrig-core plugin moves to 0.1.15, and /healthz reports the daemon's user ID beside its process ID.

    The bundled openrig-core plugin goes from 0.1.14 to 0.1.15, and /healthz gains an euid field beside pid.

    Link

Context & skills 2

  • ChangedRefocus does less work on a busy machine.

    Refocus does less work on a busy machine. It finds each notes file itself instead of starting the CLI once per level.

    #1563Link

  • FixedA manual compaction keeps waiting while the agent sits at an approval, instead of giving up. OpenRig never answers the approval for you.

    A manual compaction waits through an approval. When a seat stops at an ordinary approval prompt while preparing, rig compact keeps waiting inside its deadline instead of giving up. OpenRig never answers the approval itself. A manual rig compact can take longer to answer: its preparation gets 180 seconds (was 120) and the request 240 seconds (was 180).

    After a compaction, confirm it ran by the restore request or the drop in context, and check that refocus showed the agent's current work.

    #1562Link

Setup & platform 3

  • AddedOn a Mac shared by several accounts, an optional check stops the CLI from reaching another account's daemon by accident.

    An optional Mac check, off by default. On a Mac shared by several accounts, rig config set transport.local_user_guard true makes the CLI refuse a local daemon that another account runs. It's a guard against reaching the wrong daemon by accident, not authentication.

    #1566Link

  • ChangedAfter upgrading the CLI, restart the daemon. No database change runs this time; coming from 0.6.12 or earlier, 0.6.13's runs on the first start.

    Restart the daemon after upgrading the CLI: run rig daemon stop, then rig daemon start. No database migration runs. Coming from 0.6.12 or earlier, read 0.6.13's notes first: its migration runs on the first start.

    Link

  • ChangedThe roadmap drops three finished items.

    The roadmap drops three finished items.

    #1560Link

Known issues: 11 for this release. Read them
  • The in-place repair refuses adopted seats and ambiguous panes. For a confirmed live seat, plain rig reconcile-session <seat> --no-launch re-adopts it into a new session row and attempts to capture its resume token; conversation continuity is not verified. If the intended pane is unclear, use rig context get help.
  • On a Mac with several user accounts, a second user's rig commands can reach the first user's daemon on the default port unless the Mac check above is on. Running each person's daemon on its own port lets both work, but doesn't keep them apart.
  • Restarting a Codex seat in place to switch its account works on Linux only. On a Mac it refuses and leaves the other seats alone.
  • A Pi seat can start on a row as soon as it's told about it, before a timed wake set for it. If timing matters, watch the row.
  • rig up <rig> --existing can refuse to restart a rig after one of its seats was stopped on purpose. Use rig restore <snapshot> --rig <rig> instead; the stopped seat stays awaiting your decision.
  • An open rig tui keeps the daemon busy, re-reading every 30 seconds, and keeps its old code after an upgrade. Quit it when you're done, and reopen it after upgrading.
  • After a compaction, confirm it ran by the restore request or the drop in context, and check that refocus showed the agent's current work.
  • A fresh in-place handover of a Claude seat can report ready early. Check that the new agent read its packet.
  • rig context get reference/quickstart.md doesn't resolve. Read the page on GitHub or in the package's docs/reference/.
  • Slack: missed replies in older open threads aren't caught up, and private channels and direct messages aren't recovered.
  • Known issues from 0.6.13 still apply.
OpenRig 0.6.13See the model each seat last reported using, give a seat its own working folder, and run a lighter daemon on Linux.5 added3 expanded17 changed20 fixed

12 contributors · Release notes

Highlights

  • AddedSee which model each agent was last seen using, beside the model it's configured for.

    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. Plain rig ps --nodes prints one model line per seat after the table, and JSON gains modelObservation.

    #1493Link

  • AddedMove an existing agent to a new working folder without recreating it; its address, tasks and history stay. A community member's earlier work, finished here, after a community member's report.

    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.

    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 · thanks @Aschenbath · reported by @d3fvxlLink

  • FixedHanding a Claude agent over in place now waits for the new Claude before typing its handover, in the common case. Reported by a community member.

    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.

    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 · reported by @AdamWhitehurstLink

  • ExpandedSlack now recovers missed messages in mapped channels, recent threads and channels relayed from another machine. Reported by a community member.

    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. 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.

    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 · reported by @z4ccLink

Also in this release 41

Seats & restore 3

  • ExpandedGrow a team or remove an agent by the team's name, not only its ID. A community contribution.

    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 · thanks @ivanenevLink

  • FixedAfter a failed restore, a fresh launch that comes up ready clears the old warning. Reported by a community member.

    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 · reported by @Hexgunner69Link

  • FixedAn idle Claude Code or Codex agent now reads idle even while its terminal redraws.

    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.

    #1521Link

Queue & messaging 4

  • ChangedSeveral reminders that come due together now arrive as one message, instead of one interruption each.

    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.

    #1507Link

  • FixedA message whose sender gave up waiting is never typed later.

    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, and is refused with caller_cancelled. The same holds for broadcast recipients not yet reached and for Enter-only sends.

    #1513Link

  • FixedWhen a task for a person is closed without a confirmed follow-up, the agent that closed it hears about it, not the person. A community member's earlier work, finished here, after a community member's report.

    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 · thanks @Aschenbath · reported by @aanestesiaLink

  • FixedFiltering tasks by several states now works with a space after the comma. A community contribution.

    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 · thanks @Nikhi00718Link

Claude 6

  • ChangedThe restore check can now report caveats about hooks where it used to show green. Reported by a community member.

    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 · reported by @bpamiriLink

  • ChangedClaude agents now get your editor and display, so Ctrl+G opens your editor and image paste can work. A community contribution.

    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 · thanks @AdamWhitehurstLink

  • ChangedThe refocus work packet stays off; when you turn it on, each part of it is now kept short.

    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.

    #1542Link

  • FixedClaude sessions with an older PATH stop showing "node: command not found" after each reply: OpenRig's hooks now call its own Node directly.

    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.

    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, and two plugin hook runs for the same seat aren't serialized.

    #1545Link

  • FixedA Claude Code approval menu for MCP servers now reads as needing you, so a message isn't pasted into it. Reported by a community member.

    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.

    A fresh running hook still sends into Claude's MCP approval menu.

    #1549 · reported by @AdamWhitehurstLink

  • FixedA Claude agent started through a wrapper script now restores as ready instead of needing attention. A community contribution.

    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 · thanks @AdamWhitehurstLink

Codex 4

  • ChangedWhen an in-place Codex restart stops at a startup screen, the report says which screen and who decides.

    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.

    #1502Link

  • ChangedThe in-place restart's help says when an adopted agent refuses and which conversation a restart can prove.

    rig seat restart --keep-conversation --help says an adopted seat refuses with claimed_session and which conversation a restart can prove.

    #1509Link

  • FixedCodex's folder-trust question now reads as a question, so startup text isn't typed into it. Reported by a community member.

    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 · reported by @alexveli1Link

  • FixedAn old menu in a Codex agent's scrollback no longer blocks a message. Reported by a community member.

    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.

    A send to a seat can still be refused for a quoted permission prompt that isn't really waiting, outside the Codex layout this covers.

    #1548 · reported by @bpamiriLink

Pi 3

  • ChangedPi ag