Repository navigation
Releases
OpenRig 0.7.15
[0.7.15]
OpenRig 0.7.15 is a patch for steadier, more truthfully reported teams. A busy
daemon does less repeated synchronous work on a few read paths and names more
of what it was doing when it stalls. rig daemon start waits longer for a slow
start, and restore tries a saved conversation when an eligible seat has no
saved startup context. There are fixes across delivery, Slack replies, Codex seats and
connected assistants, many contributed by people using OpenRig. See Known
limits for what this release doesn't fix.
Before you upgrade
-
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.rig daemon stop cp "$(rig config get db.path)" "$(rig config get db.path).before-0.7.15" npm install -g @openrig/[email protected] # or your existing installation method rig daemon start
-
One migration runs before the daemon listens. Migration 165 adds four
columns and two indexes toactivity_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) -
A slow start:
rig daemon startnow gives the daemon child it started a
180-second readiness budget, instead of 20 s, and prints
"Waiting for daemon child 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, inspectdaemon-start.lock, and only when both recorded
launcher and child PIDs are absent, archive the lock and run
rig daemon start.rig daemon stopcannot stop that unpublished child. (#3118) -
The plugins: the
openrigplugin carries the CLI's version, 0.7.15.
openrig-core moves to 0.1.30, because its skills changed.
Under load
- 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. (#3098) - 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. (#3122) - 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) - The slow-operation log adds three queue sites and three selected steps of an
ordinary nodes read:nodes.inventory.build,
nodes.inventory.activity_syncandnodes.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, #3138)
Restore and seats
- 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 thestartup_contextgap. A
successful resume with that gap makes the rig readpartially_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-checkreads an eligible seat with a token
yellow; for one with no saved context and no eligible token, it points to the
read-onlyrig up <rig> --existing --planpreview. (#3177) - When
rig seat restart --keep-conversationrefuses a recoverable seat whose
tmux session is gone, it names the way back:rig launch '<rig>' '<node>'
(add--planto preview). (#3135) restore-checkand 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)- 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, #3139)
Delivery and people
- 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-messagesshows 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) - 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) - 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) - Slack previews on posts to a person are a setting:
rig slack setup --unfurl on|off,
andrig slack statusshows which is in effect from the connector's next
rewire. The default is off; see "Behaviour that changed". (#3157)
Connected assistants
- An assistant that passes its team's display name as
rig_team'srigIdis
told to leaverigIdout 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. (#3104) - An external grant that works its own inbox is told only about the tools it's
offered. (#3140) - The TUI keeps connected assistants' check-in lines when a rig's seat
inventory can't be read, with the error beside them. (#3105) - The
openrigplugin 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. (#3137)
Codex, runners and harnesses
- 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-paren't read. No real Codex
seat ran in its tests. (#3143) - 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) - 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) - Terminal views find tmux again when its cached path is gone, instead of
tiles exiting 126 until a daemon restart. (#3129) - A
SKILL.mdwith CRLF line endings is discovered and reaches a seat's
managed plugin loadout. ([#...
OpenRig 0.7.14
[0.7.14]
OpenRig 0.7.14 is a patch for steadier circulation on a busy team. A burst of node
reads now takes turns. In the change's own tests, a health check or a queue read
then waited for one step of it instead of the whole burst; a comparison under
load didn't attribute that gain to this change. Bounded queue listings over a
long retained history use indexes instead of scanning it. An assistant connected to
your team can reach a seat by the name its team shows, connected assistants
appear in rig ps and the TUI, and setup guidance tells the agent to fit a
first team to your logins. There are fixes across delivery, seats and the TUI,
many contributed by people using OpenRig. See Known limits for what this
release doesn't fix.
Before you upgrade
-
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.rig daemon stop cp "$(rig config get db.path)" "$(rig config get db.path).before-0.7.14" npm install -g @openrig/[email protected] # or your existing installation method rig daemon start
-
Three migrations run before the daemon listens. Migration 163 adds the
network_installationstable and four columns tonetwork_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, #3090) -
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, inspectdaemon-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 stopcannot stop that unpublished child. -
The
openrigplugin carries the CLI's version, 0.7.14; openrig-core stays
0.1.29.
Under load
- 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 --nodesshowed no change, and sends were
inconclusive. (#3101) - Bounded queue listings over retained history use indexes for their ordering
and for live and archived owner notifications. (#3090) - 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) - 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. (#3070) - 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)
Your team and the people it works for
- 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. (#3088) - Connected assistants appear, with their check-in, in
rig ps,rig_teamand
the TUI's tables, and their person sees plain tool titles. (#3057, #3058, #3092) rig doctorand setup say a login is needed when a seat you start runs on
that harness. The operator is taught to check each seat's runtime against
your logins before launch, name any missing sign-in and let you choose.
(#3077)- When the readable person registry holds nobody,
rig daemon startand
rig gateway participantstell 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, #3071) - 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, #3045) - A pairing request's description of itself is quoted wherever it's shown. (#3067)
rig queue listtakes exact--tag,--missionand--slicefilters, and
several tags must all match. (#3066)- A skill-only edition of the
openrigplugin, for Claude's plugin directory,
follows handed-on work and keeps its reply route. (#3056, #3075)
Fixes
- An ordinary send is refused as needing input while an open Claude Code or
Codex/modelpicker 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. (#3083) - 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 trackedAGENTS.mdwhen Codex is 0.164.0 or later, no guidance
file or developer instructions are configured, and the configuration and
block sources can be read. (#3039) - With
recovery.auto_drive_provider_promptson, Claude Code's gated-grants
trust check is never answered for you, and the plain trust prompt is answered
"Yes". (#3073) rig terminal open --provider herdrreuses a live Herdr workspace, and Rex
tiles show the seat's agent and its activity. (#3068, #2992)rig broadcastprints a held recipient as retained, not sent. (#3054)- Account erasure also removes OpenRig's own wakes and notices for that
account's seats. (#3089) - A snapshot without sessions returns its
invalid_snapshot_datablocker
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) - 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_recapsset to 0 lists all paths. (#3055) rig compact --statenames the input check that stopped a managed
compaction, and the TUI's graph shows a seat the daemon reads as unknown as
unknown. (#3053, #3046)- Setting a context-pressure threshold explains when an environment override
inverts the pair, andrig workflow validatewarns that harness pins aren't
checked against seats. (#2567, #3102) - The config browser's entries say each setting's type, choices, range, format
and write route. (#3050)
Experimental
rig networkis 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, #3084)- 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, #3008)
Behaviour that changed
- Node reads: a nodes response is ...
OpenRig 0.7.13
[0.7.13]
OpenRig 0.7.13 is a patch for people running their own agent teams. When you answer a runner's permission request, you now get a
note back saying who decides it, and the runner wakes on the decision. The
agent that reads your answers is told what an answer typed at your machine
means and how to ask you back. rig daemon start tells the agent setting
OpenRig up to offer to register you when nobody is registered yet, and a Claude
seat whose usage-limit message states a reset time waits for it instead of being
retried. There are fixes across delivery,
handover and recovery, the TUI and speed, many contributed by people using
OpenRig. In our tests, a first Claude user (with Codex absent) and a first Codex
user each went from a fresh install to a built, independently reviewed and
committed change. Two repairs aren't in this release: see Known limits.
Before you upgrade
- Back up the database, install 0.7.13, then restart the daemon:
rig daemon stop,
copy the database file (rig config get db.pathprints its path), install
OpenRig 0.7.13 using your existing installation method, thenrig daemon start. Your agents keep running through a daemon restart; don't
userig 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, #2997) - openrig-core is 0.1.29, and the
openrigplugin 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, #3064)
Answering your team
- A runner's permission answer gets a note back to you: who decides it and in
what state, or that it's kept and the tool hasn't run. A runner waiting on
the decision gets it within about half a second. Read that note before answering again. If
it says your answer couldn't be passed on, follow its retry instruction or use
therig seat decide-permissioncommand it names.
(#3001) - The answer a receiving agent reads now says what an answer typed at this
machine's terminal or TUI means, to act on a clear answer with the request's
own decision command, and how to ask you back with a new ask when it isn't
clear. When the default receiving agent asks you back, the question reaches
your Feed, and your reply decides. Closing a runner's request without
deciding permits nothing. (#3030) rig daemon startends by telling the agent setting OpenRig up to offer to
register you as the team's person, when the person registry can be read and
holds nobody. The rigs skill's start step makes the same offer, and asking to
be reachable registers you as the default person directly. In our
fresh-install tests the setup agent passed the offer on in 5 of 6 installs,
and a no registered nothing. Nobody is registered without your yes, and the
exit code is unchanged.
(#3028)- In the change's own tests, before a first team launches, the kernel operator
says which commands it will ask permission for and reuses a choice you've
already made. Otherwise it makes one offer: allow just the command families
your goal repeats, for this project only, applied on your yes. On a no, the
team's default stays and the offer isn't repeated. It hasn't been shown to
make a first team ask you fewer times. (#3029) - 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, orcheck_in_on_request: true): checking in, overdue, no
check-in yet, on request, or unknown.rig roster showandfindprint 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. (#3023)
Seats, handover and recovery
- A Claude seat stopped by a usage limit whose message states a reset time (for
example "resets Nov 10, 4pm") parks its pending work until then, instead of
being retried every few minutes. (#2917) - 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) - After
rig unclaim, the guidance for an adopted session says to end its
process and its tmux session, andrig seat stop's help matches. A fresh
launch afterrig unclaimended the server's last session reopens the server.
(#2996, #3006, #3014, #3009) - 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)
Fixes
- 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); acustody-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) - 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) - 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) - 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) - Guidance and plugins: guidance cleanup in a repository's
AGENTS.mdor
CLAUDE.mdremoves redundant recognized copies of an OpenRig-managed block,
including after an editor rewrapped a marker, and keeps distinct edited
copies. A saved write record lets OpenRig identify and keep your edits; on a
fresh start, a differing block with no write record is refreshed to OpenRig's
text and named, while an exact resume or restore keeps it; a bundled plugin's files,
including a binary icon, are copied byte for byte; the plugins carry https
repository URLs and a PNG icon for Claude's plugin directory, and the Codex
manifests link the privacy policy and terms. (#3020, #3025, #3021, #3064) - 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](https://gi...
OpenRig 0.7.12
OpenRig 0.7.12 is a patch for people running their own agent teams, cut from
main 16e8b7fb. When you answer your team, by typing, clicking or qualifying
an answer, the answer now goes to an agent that reads it with the question and
decides. When no receiving agent is available, your answer waits. Setup's
guidance asks your agent to offer to register you as the team's person, and
registering works when you ask for it. rig down no longer stops a terminal it
can't show belongs to the seat. There are fixes across delivery, Codex,
restore, the queue, Slack and speed, many contributed by people using
OpenRig. Two repairs aren't in this release, and some checks weren't run: see
Known limits.
Before you upgrade
-
rig downis more careful. It stops only a tmux session that carries the
seat's ownOPENRIG_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 downexits 2 naming it and how to stop it yourself. A seat joined with
rig attachas an external CLI is listed as not stopped, since OpenRig never
stops it; that alone doesn't makerig downexit 2. (#2962) -
Adopted tmux sessions:
rig downcan leave them running, even when
rig seat stopsuggests that route. To end only an adopted session, use
rig unclaim <session>to release it from OpenRig, then end that process
and its tmux session. Unclaim leaves the process running; closing only the
viewing window does not end it. -
openrig-core is 0.1.28. A Codex session kept running across the upgrade
can ask for hook approval until it's relaunched.
Answering your team
- 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 approveor
rig host denyfor a pairing request,rig seat decide-permissionfor a
runner's request. Closing an ask isn't permission, and words that were kept
aren't a default permit. (#2923) - 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, #2935) - 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, #2966) - 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, #2905)
Harnesses and connections
- 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) - 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=pullin the relay secrets file. Push stays the default.
A person's gateway binding can be unset. (#2844, #2812) rig terminal open <view> --provider herdr-appopens a Rig view inside the
herdr-app desktop window. (#2744, #2956, #2981)
Queue, scope and seats
- Queue content can be erased for closed-work retention and account deletion,
and a retried create can't bring erased work back. (#2837, #2843) - Each send records what's known about its delivery in one
transport.delivery_evidenceevent: what was admitted, what reached the
input, what the screen check showed, and for which occupant. (#2937, #2943) rig queue createadvises 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 shownames a handed-off
row's successor, and a custom blocker ID explains the wait.
(#2901, #2902, #2867, #2872, #2874, #2983)- Every seat's managed guidance points to its skills, help and project context.
rig seat statusshows 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, #2876)
Fixes
- 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) - 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) - 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 startarchives 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) - 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; an escalation keeps its owner through a handoff; findings route to the
seat's own fallback; a park on an outside condition with no wake says so;
rig workflow validateis read-only.
(#2864, #2957, #2790, [#2824](https://github.com/mvschwarz/open...
OpenRig 0.7.11
OpenRig 0.7.11 is a patch for people running their own agent teams. An ordinary send or work notice now goes into a person's typed draft by default instead of being refused (see Behaviour that changed). A person can work with their team from their own Claude Code or Codex through the new openrig plugin, or from an ACP app such as Zed or T3 Code, and, as an experiment that's off by default, answer the team's questions from an assistant connected through a grant service. A prepared managed compaction waits for an idle moment instead of asking again, and a restore stopped at a prompt clears itself. On Linux, a daemon run as a systemd user service no longer takes its seats down when its unit stops or restarts, and writable terminal tiles reflow text when the screen resizes, as in 0.7.10. There are fixes across the queue, workflows, launch and speed under load, many contributed or reported by people using OpenRig. The OpenShell worker's maintained cleanup now works on OpenShell 0.1.6, but a restored guest takes in its startup content again, so the worker still isn't end to end.
The runtime results below were earned on earlier builds of 0.7.11 and carried to this final package, whose changes since them are in terminal tiles and host pairing. This final package itself got archive and content checks of those changes, a code review, the release Tests, and checks of host pairing: real Slack with a real operator agent (4 of 4 answer paths, one run), the real TUI without a model, and 29 of 29 contained cases with synthetic credentials. The tile changes were checked on an earlier 0.7.11 build with the same tile code: typing and pasting into a tile on tmux 3.4, 3.3a and 3.6, a check of text reflowing in a terminal, and one run in real Herdr 0.9.5 on tmux 3.4 (one run each), which passed. What we tested on the CLI and the new @openrig/acp launcher: the private and stock content checks and the release Tests; an upgrade from 0.7.10 with Claude (continuity, relaunch, and event retention with no loss of data you'd act on); the speed and memory baseline (8 of 8 measures unchanged); the OpenShell worker on OpenShell 0.1.6 (its maintained cleanup, an exact restore, and its reports and exports passed; strict recall after a restore wasn't met, and finishing its task was assisted and time-boxed); ACP on Claude through a headless ACP client; managed compaction under Claude Code's update banner (3 of 3); Slack on a real workspace, including a button answer and a message in flight across hosts; messaging between 0.6.11 and 0.7.11 in both directions; a Claude first user from the website to a finished result with no help; and the selected regression cells (13 of 15 and 19 of 19 passed, none failed). Testing found four regressions against 0.7.10, all fixed in this package (archive file modes; Pi seats with their own account home not starting; typing into a writable tile not reaching the agent on tmux older than 3.5; and a tile someone was only viewing not fitting or reflowing to the screen), a probable fifth that it also fixes (a multi-line paste into a terminal tile could arrive split), and two accepted changes, disclosed below (a draft-aware send under the update banner, under Known issues, and a Pi upgrade stop, under Before you upgrade). Otherwise no regression or data loss was demonstrated. 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).
Before you upgrade
npm install -g @openrig/[email protected]
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_DBnames. Going back to 0.7.10 after these migrations isn't established. - 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. (#2756) - Sends now join a person's draft (
transport.draft_delivery=deliver). To keep the old refusal, runrig config set transport.draft_delivery refuse. (#2645) - A Pi seat that declares an absolute
PI_CODING_AGENT_DIRin itsenv:now uses it as its account home and needs a readableauth.jsonthere, 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) - 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)
What's new and fixed
Sends and drafts.
- 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-idlestill refuse or wait. (#2645) - A draft only the input box shows is caught by one read before pasting. (#2653)
- Claude seats showing a statusLine or the background task panel read as a normal composer under the draft-aware guard. (#2703)
- 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)
Compaction, restore and handover.
- A prepared managed compaction is held as
preparedand sends/compactat the next idle moment instead of asking the seat to prepare again.rig compact --stateshows it and--canceldisarms it. (#2698, #2716) - The final
/compactallows for the preparation's own fresh activity (23 seconds, against 9), so a seat that's already idle gets/compactinstead of a refusal. (#2764) - 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)
- A work notice refused at a prompt no longer goes in right after "Compacted" while the compaction still owes its restore request. (#2666)
- 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)
on_restore: follow_sourceon a skill refreshes it from its source when a seat is restored;keep_savedstays the default. (#2626)
Your own coding agent and ACP apps.
- The
openrigplugin, 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, #2719) 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, #2712)- The
@openrig/acplauncher runs the matching@openrig/cli'srig acp servefor the ACP registry'snpxlaunch, released at the same version. (#2655, #2715)
People and connected assistants (experimental, unsupported, off by default).
- Assistants connected through a grant service can list and answer the team's questions as a registered person, and
--task-destinationnames the receiver for new tasks. ([#2735](https://github.com/mvschwarz...
OpenRig 0.7.10
OpenRig 0.7.10 is a patch for people running their own agent teams. A step held after a managed compaction now goes in instead of waiting forever. Sends get through a pane in any tmux mode. rig exec runs a queue task on Claude Code or Codex as one finite run. Installs try a user-writable npm prefix first, and spec advisories show at launch. There are fixes across refocus, routing, status and speed, many from people using OpenRig. The OpenShell worker now does real work and exports results, but its cleanup still fails against OpenShell 0.1.6, so don't rely on cleanup or recreate yet.
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.
Before you upgrade
npm install -g @openrig/[email protected]
rig daemon stop && rig daemon start- There are no migrations.
- 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. - Run
rig agent validate <path>: a single-valueuses.<category>now selects that resource, so a member fails to resolve if the pool doesn't hold it. - OpenShell users: rebuild the guest image with this release's
guest.py(seedaemon/assets/openshell/README.md).
What's new and fixed
Finite runs.
rig exec run <row> --harness claude|codexruns one turn through the maintained ACP adapter, in a connector that outlives the command.- Use
--plan,--wait,statusandcancel. One run per row, and--againstarts another turn. - The outcome is the agent's report. Accepting the work stays with you.
Compaction, delivery and terminals.
- 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> --statesays the last one went in over a box it couldn't read. (#2576) - Delivery leaves every tmux mode, and a refusal says why. (#2594)
- A stale record naming a reused tmux pane no longer stops a send from leaving the mode. (#2644)
- Writable views size the pane they show. (#2614)
- 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. (#2634)
Coordination and status.
-
Routing and status:
- a send to
<seat>@<rig>@<this host's ID>stays local; rig broadcastsaysUNCONFIRMED, notFAILED, for an uncertain recipient;- refusals for seats handed over before 0.7.9 say why;
rig rosterreads conflicting activity as unknown;set-runtimefinds pod recaps.
- a send to
-
Refocus names a trace gap instead of failing (#2582, #2587).
-
The stuck sweep stops filing informational updates to people as unclaimed work (#2586).
-
rig slack statuscounts cross-host relays in flight (#2569). -
rig seat statusshows a Claude seat's latest permission request, with suggested rules labelled. Nothing is applied or approved. (#2562)
Install, specs and errors.
-
The rigs skill tries a user-writable npm prefix or a version manager's Node before a project-local install. (#2611)
-
Plain
rigworks in managed Codex seats however OpenRig was installed, with a Codex that supportsallow_login_shell: tool commands now run in a non-login shell, andrig config set launch.codex_login_shell truedefers to Codex's own setting. (#2613) -
Spec advisories show as launch warnings and never stop a launch, and an unknown
useskey gets one. (#2606, #2585, #2618) -
Errors are clearer:
- a refused terminal token says "Terminal auth failed";
- the TUI shows the daemon's launch refusal;
rig doctorgives up on a silent listener after 2 seconds.
Speed under load.
- 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.
OpenShell.
- 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. (#2602) - 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). (#2603)
Docs and tests. Codex named profiles (#2604), openrig-core skill loading (#2584), what the runner contract has run (#2592, #2595), telemetry's guarantee beside the separate, untested openrig-telemetry exporter (#2589), and a real-tmux test that waits for the prompt (#2559).
Behaviour that changed
- A held post-compaction step goes in over an unreadable box, so an unrecognised draft may receive the restore text.
- Sends leave any tmux mode a person has open.
rig upcan print advisory warnings.- 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: truegets Codex's refusal.
Known issues
- 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, runrig environment connectyourself. 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 withrig exec cancel, notrig 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. Runrig 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 updatebanner, 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 s...
OpenRig 0.7.9
OpenRig 0.7.9
OpenRig 0.7.9 follows through on 0.7.8. A person's typed words on a runner seat's permission ask now reach the agent,
each permit OpenRig grants a runner by default is recorded, and a runner can keep a long, quiet turn reading working.
New stream observations go to the queue worker by default. Fresh Pi seats, and fresh Codex seats on Codex 0.164.0 or
later, can keep OpenRig's guidance out of your repository's AGENTS.md. There are fixes across delivery, asks,
handover, install and recovery, many reported or contributed by people using OpenRig.
The OpenShell worker that wasn't usable in 0.7.8 still isn't usable in 0.7.9; read
The OpenShell worker before relying on it.
Before you upgrade
- Restart the daemon after installing:
Four migrations (146 to 149) run on the first start.
npm install -g @openrig/[email protected] rig daemon stop && rig daemon start
- Stream intake is on by default. Each
rig stream emitnow 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, by @Totopo27) - 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, #2554) - 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. (#2418)
Runner seats
- 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 assaid. Section 7 of
docs/reference/harness-runner-contract.mdlets a runner queue them for the agent "as an ordinary prompt" after the
current turn: "They're never the answer." (#2363, #2561) - 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, #2563) - 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)
The OpenShell worker
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.
(#2418, #2404)
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_BUNDLEandCURL_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.
Assistants connected through a grant service (experimental)
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. (#2384)
For client authors
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)
Seats, delivery and the TUI
- 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. - 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 orindeterminateinstead of delivered, lost or failed. - Guidance and handover: an edited culture or startup file reaches the next start, while your own edit to a managed
block is kept; sharedCLAUDE.mdandAGENTS.mdfiles stop growing; handover successors get their guidance and a
list of their startup files; several Claude rebuild and resume failures are repaired. - 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. - 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 findrig;rig host lsreads your ssh config withssh -G, which
runs anyMatch execcommand in it;rig doctorno longer hangs on a port held by a listener that never replies;
a scoped launch on tmux 3.4 keeps its default command. - Options and views:
specs.builtins_visible: falsehides built-in specs;plugin_channelspasses 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.
Every user-facing change, with its pull request, is in the CHANGELOG.
Behaviour that changed
- Stream intake is on by default (see Before you upgrade).
- 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 setsdeveloper_instructionsor can't be read. If only your shell startup
setsCODEX_HOME, OpenRig reads~/.codex, so adeveloper_instructionsin your home is replaced for that
session; declare the same absolute path asCODEX_HOMEin the member's or rig'senv:to have it checked.
(#2432, [#2441](htt...
OpenRig 0.7.8
OpenRig 0.7.8
OpenRig 0.7.8 lets a person answer a runner seat's permission requests, with a
conformance check and an example runner to build against. It includes 0.7.7's
fixes plus repairs across seats, tmux, Slack and the TUI. It also includes a
reference for running a Claude worker in an NVIDIA OpenShell sandbox, but that
worker isn't usable in this release: see the OpenShell reference.
Before you upgrade
- Restart the daemon after installing:
Four migrations (142 to 145) store a Claude seat's MCP opt-out, seat activity
npm install -g @openrig/[email protected] rig daemon stop && rig daemon start
grants, OpenShell environment bindings and the person chosen to answer a
seat's permission requests.
(#2177, #2295, #2296, #2301) - 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. (#2287) - 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.
(#2374)
Permissions for runner seats
-
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
ofdocs/reference/harness-runner-contract.mdnow 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."
(#2301) - With a default person, "They get an ordinary ask in the Feed and on
-
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, #2306) -
An example runner for DeepSeek Harness (
dsh), with its preset, is under
docs/reference/community-harness-examples/dsh/. OpenRig doesn't install it.
(#2305) -
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. (#2295)
The OpenShell reference isn't usable in 0.7.8
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, #2378)
Seats, delivery and the TUI
- Seats:
- an isolated tmux server per OpenRig home
(rig config set terminal.tmux_server isolated); claude_mcp: nonefor 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,
claudenot found, Codex restart refusals and failed unpins.
(#1260, #2177, #2269, #2342, #2344, #2337, #2338, #2190, #2297, #2287, #2255, #2282, #2330, #2332)
- an isolated tmux server per OpenRig home
- tmux:
- Wakes:
OPENRIG_WAKE_SUSPENDmatches destinations with a colon;- prompt escalations stay deliverable without a reachable person;
- reminders stop at a full quota;
human@kernelraises 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)
- Slack and usage:
- Hosts and setup:
- The TUI and views:
- Also:
Behaviour that changed
- A runner following section 7 gets answers or permits, not refusals.
--denykeeps a seat refusing. - On tmux older than 3.7c,
OPENRIG_TMUX_CONTROL=1uses spawned clients
instead of a control client.
Known limits
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_DSHandOPENRIG_DSH_HOMEaren't accepted in a
rig spec'senv:. 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
/abortin the pane. A/abortsent
withrig sendis 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_alwaysfro...
OpenRig 0.7.7
OpenRig 0.7.7
OpenRig 0.7.7 is 0.7.6 with three reliability fixes for managed Claude seats: an
idle prompt under Claude's "Update installed" line is recognized again, managed
compaction no longer types into a message you haven't sent, and a Claude seat
launched through a wrapper script can be rebuilt again.
Before you upgrade
- Restart the daemon after installing so the fixes take effect:
There are no database migrations. The bundled openrig-core plugin stays at
npm install -g @openrig/[email protected] rig daemon stop && rig daemon start
0.1.23 with unchanged files.
Fixed
- 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. (#2311) - 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,
/compactand 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 manualrig compactsays why it stopped,
to be retried once the box is empty. An empty box or Claude's own suggestion
goes ahead.
(#2347) - A Claude seat launched through a wrapper script can be rebuilt again. On
0.7.6,rig seat handover --source rebuildon a seat whoseclaudeis a#!
script that starts the real Claude withoutexecstopped 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.
(#2341, #2354) - A failed handover no longer moves the seat's resume target to the new,
unprimed conversation while the seat keeps its previous occupant.
(#2354)
Known limits
- 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
- @oneandonlydean for the report and the evidence in #2341.
OpenRig 0.7.6
OpenRig 0.7.6: follow a slice's work in one terminal workspace, plus steadier daemon start and delivery
OpenRig 0.7.6 lets one terminal workspace follow the agents actually working a slice. As work is handed off and completed, their tiles come and go, while drafts, focus and the agents themselves are kept. It also keeps more seat settings through expansion and restore, reports a dead pane as exited instead of idle, stops a slow-starting daemon from being killed by its own readiness deadline, and repairs several queue and Slack delivery paths.
Before you upgrade
npm install -g @openrig/[email protected]
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.
- 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. - On a large database,
rig daemon startmay now report that startup is still pending instead of failing. Follow the guidance it prints before trying any recovery.
Follow a slice's work
rig terminal open slice:<name-or-id> --follow --provider herdrshows 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 withrig queue create --slice <name-or-id>; handoffs keep the tag. (#2259)- New slice views start with four automatic tiles;
--max-tileschanges 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. - 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. (#2261) - 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. (#2271)
- Named Herdr sessions use their configured endpoint throughout, and the TUI's terminal action opens the agent, pod or rig in view. (#2205, #2232)
- Slice following targets Linux Herdr 0.9.5 / protocol 22. Following a whole mission isn't in this release.
Seats, accounts and harnesses
rig expandkeeps the member settingsrig upaccepts, including env, effort and startup settings, and a restore keeps a model set withrig seat set-model. (#2250, #2227, #2228)- 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) - 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 withclaude_token. (#2191, #2246) - Managed seats inherit the daemon's SSH agent for git over SSH. (#2222)
- Community-harness presets can opt into
runner: true(withlaunch_result: true) so the seat's activity follows its runner, andpasses_model: trueto receive the declared model asOPENRIG_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, #2272)
Delivery, Slack and status
- 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 --verifyreads the destination's receipt. (#2235, #2192, #2193) - 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 offstops acknowledgement emoji from waking agents. (#2245, #2241) - A verified exited process in a retained pane reads
pane_exited, not running and idle, and its work goes to the usual recovery finding. (#2248) - Smaller fixes cover inventory reads, UTC snapshot ages, TUI emoji, help text and test fixtures. The changelog lists every change.
Behaviour that changed
- Startup: when only the readiness deadline passes and the daemon is still starting,
rig daemon startexits 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 stopcan't reach that unpublished process; the message gives the manual restart. (#2267) - Viewer API:
POST /api/terminal/viewer/ensurereturns HTTP 400 forview_requiredandunknown_provider, where it returned 200 with an error body. Keep reading the body's code. (#2259)
Known issues
- 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 statusthen shows the kernel aspartial_ready, andrig psshows 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
humanAnswersdoesn'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-messagesbefore 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-conversationrefuses, 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.
Credits
Thank you to @seanmcn, @DeryFerd, @Aschenbath, @Vaishnavi220506, @bradvin, @jay23606, @rudycelekli and @Nikhi00718 for contributions in this release; 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.