Repository navigation
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/cli@0.7.8 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_alwaysfrom a permit: with no one to ask, "If the agent offers
onlyallow_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 isoperator-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 --jsonran on the host. The missing check is the same in
0.7.6; environments are a new way to trigger it. - Cleanup:
delete-owneddidn'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-awareprotects 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 reportrig: 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), andrig downmay briefly run a resume probe. - On macOS, after a daemon restart,
rig seat continuecan refuse a healthy
auto-mode Claude seat withattention_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
provenanceRecordWrittenand
departingSessionKilledas 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).
Credits
Thanks to @Aschenbath, @dajiaohuang, @Vaishnavi220506, @Nikhila-Dhevi-R,
@Nikhi00718, @oodadoudou, @DeryFerd, @ch-davidriott, @vanducng, @Ethereal49,
@AdityaxDeore and @Mydudeclaps for merged contributions. Thanks to @salbang,
@ziadeh, @davey64, @bpamiri, @oneandonlydean, @xwcq, @seanmcn and @AlexGhanem
for reports carried into this release, and to @bpamiri for dsh-seat, whose fake agent the conformance check's
stand-in follows.