Compare commits

...
3 Commits
Author SHA1 Message Date
dev-driverandClaude Opus 5.5 6d9e8e271a docs: correct the seat history and task view usage in the 0.7.4 notes
rig seat history takes --rig and --node-id, and checks one reference
with --snapshot-id and --history-session-id together; there is no
rig terminal preview command (open calls the daemon's preview). The
reboot troubleshooting row says a kernel already down stays down.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 06:56:21 +00:00
dev-driverandClaude Opus 5.5 0d1c4b3d3c docs: 0.7.4 release notes, what's new and the capability map
- CHANGELOG: the 0.7.4 section against published 0.7.3.
- docs/reference/whats-new.md (also served as reference/whats-new.md):
  what changed since 0.7.3.
- Capability map: hosted members, the webhook trigger, the grant
  service and OAuth discovery, the 2026-07-28 MCP revision, rig seat
  history, qitem task views and the kernel restore rule; marker
  capability-delta-v0.7.4.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 06:46:15 +00:00
dev-guard 18bf132ff6 chore(release): prepare 0.7.4 2026-10-27 06:37:28 +00:00
12 changed files with 505 additions and 197 deletions

No files matched your search

+337
View File
@@ -8,6 +8,343 @@ deprecations, and behavioral changes. Breaking changes are called out explicitly
---
## [0.7.4]
OpenRig 0.7.4 lets an assistant you already use work as a member of your team.
An assistant connected over MCP can be listed on its rig's team as a hosted
member, learns from the connection how to take, finish and hand on work, can
ask a person while keeping the item, and can be rung by a webhook when work
lands for it; when nothing can wake it, its person is told instead.
`rig mcp serve --http` can check each remote caller's key with an external
grant service, offer OAuth discovery, record whose grant acted, and serve MCP
clients on protocol revision 2026-07-28 beside 2025's. You can list the
conversations a seat could resume, and a client can resume the one a person
reviewed. Daemon start now brings back only a kernel that this start found
down. It is built from the commit tagged `v0.7.4`. The changes since 0.7.3:
### Before you upgrade
- **Restart the daemon after installing.** One database update applies on its
first start (migration 140). It adds a column, empty on earlier rows, that
records which grant's caller acted, to queue transitions and their archive,
inbox and outbox entries, and stream items.
```bash
npm install -g @openrig/cli@0.7.4
rig daemon stop && rig daemon start
```
- **The bundled openrig-core plugin goes from 0.1.20 to 0.1.21.** The
`queue-handoff` skill gains writing guidance, and the Claude hooks add
`StopFailure`, which reports a stop caused by a rate limit. As before,
startup first copies each file it replaces under
`$OPENRIG_HOME/backups/managed-refresh/<id>/`; if you edited one, reapply
your change from the copy. A Claude seat gets the new hook at its next
launch, resume, restore or handover. Codex sees its openrig-core plugin as
changed: if a Codex seat stops at "Hooks need review", review the hooks in
Codex.
- **Going back to 0.7.3** leaves migration 140's column in place, unread.
### What's new and fixed
**Assistants as team members**
- **A rig's team shows the members that live outside a terminal.** A roster
entry can mark a member as hosted (`"hosted": true`), such as an assistant
connected over MCP. `rig_team` lists a rig's hosted members with their
declared capabilities and caveat, no pane, and activity `unknown`: OpenRig
doesn't observe a hosted member between its calls, so it never reads idle.
A roster that can't be read gives a note, never "no members". `rig roster
show` and `find` say the member is hosted.
([#2095](https://github.com/mvschwarz/openrig/pull/2095))
- **The connection teaches the assistant how to work.** The MCP server's
instructions say that its inbox is the items addressed to its seat, that a
wake only points at the inbox, and to claim an item, do it, then close it
with the answer or hand it on. When an item needs a person's approval first,
it keeps the item and asks: it blocks the item on that person with the
question as the summary, and the answer returns the item in progress. A
hosted member can call `rig_whoami` to learn the seat it acts as.
([#2095](https://github.com/mvschwarz/openrig/pull/2095),
[#2127](https://github.com/mvschwarz/openrig/pull/2127))
- **When work waits for a member nothing can wake, the person is told.** The
stuck sweep used to address its finding to that same member. Now it goes to
the person, on Steering and the TUI's Feed, and to Slack under the default
subscription, saying to ask the member to check or to fix the address.
([#2110](https://github.com/mvschwarz/openrig/pull/2110))
- **A hosted member can be rung when work lands for it.** Its roster entry
declares a webhook trigger: `wake.webhook` with `url_ref`,
`authorization_ref` and optionally `secrets_env_file`. These are secret
names, read from the daemon's environment or a 0600 env file; values never
go in rosters or rows. OpenRig POSTs a pointer to the row (the event
`work-waiting`, the row id, destination, summary and sender, never the row's
body), waits up to 10 seconds and doesn't follow redirects. A 2xx is
recorded as the ring being accepted, not as the member waking. If the member
doesn't claim the work by the stuck sweep's unclaimed age, its person is
told. ([#2115](https://github.com/mvschwarz/openrig/pull/2115))
- **The team sees when a hosted member last showed up.** `rig_team` shows when
each hosted member last called the team's MCP server, and its latest ring
and how that went; `rig roster show` and `find` show the last call. With no
evidence it says unknown, never idle, and a claim on a row is still the only
pickup. ([#2121](https://github.com/mvschwarz/openrig/pull/2121))
**Remote MCP callers and grants**
- **`rig mcp serve --http --grant-service <url>`** checks each request's key
with an external grant service instead of the local token file, on every
request, with nothing cached. `--grant-service-header-file <path>` sends one
`Name: value` header with each lookup.
([#2096](https://github.com/mvschwarz/openrig/pull/2096),
[#2141](https://github.com/mvschwarz/openrig/pull/2141))
- **OAuth discovery:** `--oauth-resource <url>` with `--oauth-issuer <url>`
publishes OAuth protected-resource metadata (RFC 9728), so an MCP client
that signs in with OAuth can find out how to authenticate, and a request
with no credential or a bad one gets a standard challenge. The key and its
grant still decide what the caller may do.
([#2135](https://github.com/mvschwarz/openrig/pull/2135))
- **Whose grant acted is recorded.** The rows a granted caller's actions write
record the caller's principal (`principal:v1`): its source, its grant name
or id and, for a grant service, the grant's version. It's attribution, not
authentication, and never a credential.
([#2098](https://github.com/mvschwarz/openrig/pull/2098),
[#2141](https://github.com/mvschwarz/openrig/pull/2141))
- **A caller's seat that was created but never launched** (for example with
`rig import --materialize-only`) is served, instead of every request being
refused with `seat_unavailable`.
([#2125](https://github.com/mvschwarz/openrig/pull/2125))
- **A caller granted through a grant service** hands its tasks to the team it
was granted, never to its own caller seat or another caller's
([#2132](https://github.com/mvschwarz/openrig/pull/2132)), and can't attach
tags that claim OpenRig's own Slack provenance or a workflow's internal
sign-off, so a person asked about its task sees its whole text
([#2126](https://github.com/mvschwarz/openrig/pull/2126)).
**MCP protocol 2026-07-28**
- `rig mcp serve`, over stdio or `--http`, serves clients on MCP protocol
revision 2026-07-28, which has no `initialize` handshake, sends its version
on every request and may open with `server/discover`. They reach the same
tools and the same work loop. Clients that open with 2025's `initialize`
keep working unchanged, on the same endpoint and process.
([#2112](https://github.com/mvschwarz/openrig/pull/2112))
**Resuming the conversation you chose**
- **`rig seat history --rig <id> --node-id <id>`** lists the recorded Claude and Codex
conversations this exact node could resume, read-only and without native
tokens (`--json`; `--snapshot-id` with `--history-session-id` checks one
reference it returned). The rig ID is `rigId` in `rig ps --nodes --json`, and the
node ID is `identity.nodeId` in `rig whoami --session <seat> --json`. ([#2100](https://github.com/mvschwarz/openrig/pull/2100))
- **A client can resume the history a person reviewed** for an exact node,
through the daemon's startup review. Applying it rechecks the choice and the
settings through the existing restore path, and refuses, rather than
substituting another conversation or starting fresh, if the history changed
or became unavailable. A running or unverified terminal is left alone. With
0.7.3's saved seat settings by node id
([#2051](https://github.com/mvschwarz/openrig/pull/2051)), this completes
the three stages agreed in
[#1837](https://github.com/mvschwarz/openrig/issues/1837).
([#2109](https://github.com/mvschwarz/openrig/pull/2109))
**Task views**
- `rig terminal open` and the daemon's terminal preview accept `qitem:<id>`: the current local
owners of that task, meaning its pending, in-progress and blocked rows
through explicitly linked successors, without closed predecessors or past
senders. Stopped, missing, external and unresolved owners are named, and
incomplete lineage is reported rather than cut short. It's a read-only
membership view: it doesn't follow the task as it moves, and an explicit
open still has the provider's usual workspace effects. Preview and open
responses now carry `viewDescriptor` (`kind`, `name`).
([#2131](https://github.com/mvschwarz/openrig/pull/2131))
**The kernel at daemon start**
- **Startup brings back a kernel only when this start found it down,** which
is what a reboot leaves. A kernel that was already down before this start
stays down, with its old conversations. `rig start` and `rig daemon start
--wait-for-kernel` say why and how to bring it back (`rig up kernel
--existing`); `--wait-for-kernel` no longer prints a timeout and an
authentication hint for a kernel skipped on purpose, and still exits 1.
([#2146](https://github.com/mvschwarz/openrig/pull/2146),
[#2152](https://github.com/mvschwarz/openrig/pull/2152),
[#2156](https://github.com/mvschwarz/openrig/pull/2156))
**Seats and runtimes**
- **A Claude seat stopped by a rate limit is recognised** from Claude's
`StopFailure` hook, even when its status line shows no usage window, and
pending handoffs use the existing wake ladder and retry timer. A delayed
older Claude hook no longer replaces the current state in send readiness,
attention, review telemetry or the wake scheduler.
([#1908](https://github.com/mvschwarz/openrig/pull/1908),
[#2113](https://github.com/mvschwarz/openrig/pull/2113))
- **`rig handover --source fresh` on Claude** reports the restore packet
delivered only when Claude's composer shows it submitted. If it's still
staged after one retried Enter, the handover fails with
`context_delivery_failed`.
([#1863](https://github.com/mvschwarz/openrig/pull/1863))
- **A periodic snapshot between separate named-agent launches** keeps a down
agent's resume source, including its restore policy and community harness
selection, without claiming it was running.
([#2123](https://github.com/mvschwarz/openrig/pull/2123), fixes
[#1822](https://github.com/mvschwarz/openrig/issues/1822))
- **A resumed Pi seat** no longer prints `Entry not found` after `READY` on
every restart: a saved history cursor Pi doesn't hold is recovered.
([#2122](https://github.com/mvschwarz/openrig/pull/2122))
**People, parks and reviews**
- **A park on a registered person's own address** (`<id>@external`) resolves
only from a Slack reply written after its question was posted
([#2106](https://github.com/mvschwarz/openrig/pull/2106)), keeps its
`--summary` and `--evidence-ref`
([#2107](https://github.com/mvschwarz/openrig/pull/2107)), and shows in
NEEDS YOU in the slice, mission and rig reviews, with asks to that address,
instead of the person being listed as an agent holding work
([#2108](https://github.com/mvschwarz/openrig/pull/2108)).
- **The reviews' agents band** counts only open rows as held, and a seat with
work in progress reads as working even when it also has an older blocked
row. ([#2136](https://github.com/mvschwarz/openrig/pull/2136), fixes
[#2129](https://github.com/mvschwarz/openrig/issues/2129))
**TUI and CLI**
- `rig` or `rig tui` started in a terminal that reports 0 rows or columns
waits and draws on the next resize, instead of crashing on its first frame.
([#2099](https://github.com/mvschwarz/openrig/pull/2099))
- The TUI lists a host's rigs by name, in `rig ps`'s order.
([#2134](https://github.com/mvschwarz/openrig/pull/2134), fixes
[#2130](https://github.com/mvschwarz/openrig/issues/2130))
- Opening a seat whose runtime doesn't report effort no longer shows a failed
read in the TUI header. ([#2102](https://github.com/mvschwarz/openrig/pull/2102))
- `rig whoami`, `rig down`, `rig ask` and `rig health` in a tmux pane without
`OPENRIG_SESSION_NAME` no longer print tmux's `invalid option` errors.
([#2103](https://github.com/mvschwarz/openrig/pull/2103))
**Also:** an artifact whose frontmatter header isn't closed no longer wakes an
artifact-pool worker as ready
([#2016](https://github.com/mvschwarz/openrig/pull/2016)); with Pi cost
reporting on, a seat that now runs Claude or Codex shows its current cost, and
a charge lookup retried during a re-post finishes
([#2120](https://github.com/mvschwarz/openrig/pull/2120)); the
`queue-handoff` skill says to write a handoff that can be acted on after one
read, as guidance and not a filter
([#2154](https://github.com/mvschwarz/openrig/pull/2154),
[#2155](https://github.com/mvschwarz/openrig/pull/2155)); the harness preset
guide says to check that a harness answers on its own first
([#2116](https://github.com/mvschwarz/openrig/pull/2116)); seat environments
are exercised on Linux in CI
([#2101](https://github.com/mvschwarz/openrig/pull/2101)); and portability and
test fixes ([#2147](https://github.com/mvschwarz/openrig/pull/2147),
[#2148](https://github.com/mvschwarz/openrig/pull/2148),
[#2149](https://github.com/mvschwarz/openrig/pull/2149)).
### Behaviour that changed
- A kernel that was already down before daemon start is no longer restored on
that start; see "The kernel at daemon start".
- `rig daemon start --wait-for-kernel` for a kernel skipped on purpose prints
the reason and the way back instead of a timeout header and an
authentication fix. It still exits 1.
- Work waiting for a member nothing can wake is reported to its person, not
to that member.
- A caller granted through a grant service can't address its own or another
caller seat, or set OpenRig's Slack provenance or a workflow's internal
sign-off tags.
- A park on a registered person's address resolves only from a reply written
after its question.
### Known issues
- **A webhook ring proves only that the endpoint accepted it.** Whether the
member woke and took the work is its claim on the row. An ordinary chat app
can't receive unsolicited events, so a hosted assistant without a
webhook-capable runner sees work only when it checks.
([#2115](https://github.com/mvschwarz/openrig/pull/2115))
- **A recorded principal is attribution, not authentication.** The daemon
records what the MCP adapter tells it about the caller it checked.
([#2098](https://github.com/mvschwarz/openrig/pull/2098))
- **The task view (`qitem:<id>`) is membership only.** It doesn't follow a
task as it moves, keep a reusable viewer, or change who may type into a
seat. ([#2131](https://github.com/mvschwarz/openrig/pull/2131))
- **Resuming a reviewed history has no CLI yet.** `rig seat history` lists
and checks; applying a choice is through the daemon's startup review, for
clients. Choices are limited to this node's eligible Claude and Codex
histories in the current compatible snapshot.
([#2100](https://github.com/mvschwarz/openrig/pull/2100),
[#2109](https://github.com/mvschwarz/openrig/pull/2109))
- **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 finds it already down and leaves it down, saying so. Bring it
back with `rig up kernel --existing`. (0.7.3's issue of a long-gone kernel
returning on daemon start is fixed by
[#2146](https://github.com/mvschwarz/openrig/pull/2146).)
- **OpenClaw's interrupted local turns are still not recovered.** The seat
shows as needing attention, and a send submits a new turn: inspect the pane
with `rig capture` first. For an unattended seat, use the Gateway preset.
([#2092](https://github.com/mvschwarz/openrig/pull/2092))
- **Whether processes a community harness starts outside its pane survive is
still not exercised**, and `rig down` stops only the pane.
([#2088](https://github.com/mvschwarz/openrig/pull/2088),
[#2077](https://github.com/mvschwarz/openrig/pull/2077))
- **Hermes:** as in 0.7.3, the example preset doesn't declare `resume`, and
whether a seat's Hermes gateway exits once idle is unknown, although
`docs/reference/community-harness-presets.md` says it exits. Check with `ps`
before relying on it.
- **A Codex seat's own permission settings** were enforced natively in 0.7.3's
test with Codex 0.164.0; other Codex versions weren't tested.
([#2048](https://github.com/mvschwarz/openrig/pull/2048))
- **Upgrading doesn't restore Codex hook approvals that an earlier OpenRig
removed.** If Codex asks for hook review, approve the hooks you mean to
enable. ([#2035](https://github.com/mvschwarz/openrig/pull/2035))
- **After the last managed session ends, an empty tmux server may stay
running.** That alone doesn't mean an agent is still running.
- **Slack threads from before 0.7.3** keep 0.7.3's limits: a reply on an ask
parked before the fix can still reach the person asked, and a message
received before 0.7.3 can still show OpenRig's routing footer, policy text
and attachment paths when an agent asks a person about it.
([#2119](https://github.com/mvschwarz/openrig/pull/2119),
[#2124](https://github.com/mvschwarz/openrig/pull/2124))
- **Shared channels are Slack only**, and the primary user's authority in the
TUI is attribution, not authentication.
([#1992](https://github.com/mvschwarz/openrig/pull/1992),
[#2006](https://github.com/mvschwarz/openrig/pull/2006))
- **The cmux path wasn't tried in a real cmux**, and a remote host's rigs are
read over HTTP only. ([#2080](https://github.com/mvschwarz/openrig/pull/2080),
[#2052](https://github.com/mvschwarz/openrig/pull/2052))
- **Window sizing:** a browser that closes while the daemon is down leaves the
window at the browser's size until the next web-terminal visit, and a
`--readable` capture isn't atomic with a person's own edits.
([#2065](https://github.com/mvschwarz/openrig/pull/2065),
[#2075](https://github.com/mvschwarz/openrig/pull/2075))
- **The runtime-switch handover change** hasn't been shown to cure the
unsent-handover case that prompted it.
([#2054](https://github.com/mvschwarz/openrig/pull/2054))
- The community harness field keeps its name (`communityHarness`) and its
original database update; renaming them would break a return to 0.7.2.
- Not in this release: verified task viewers
([#2133](https://github.com/mvschwarz/openrig/pull/2133)), switching a seat
to an isolated account home
([#2138](https://github.com/mvschwarz/openrig/issues/2138),
[#2143](https://github.com/mvschwarz/openrig/pull/2143)), source evidence for
resolving stuck findings
([#2153](https://github.com/mvschwarz/openrig/pull/2153)), the stale-pane
repair message ([#2157](https://github.com/mvschwarz/openrig/pull/2157)),
current launch evidence for fresh handovers
([#2159](https://github.com/mvschwarz/openrig/pull/2159)), and a warning for
out-of-range MCP daemon ports
([#2160](https://github.com/mvschwarz/openrig/pull/2160)). Hermes resume and
measured idle exit, and OpenClaw interrupted-turn recovery, aren't in this
release either. The limits listed for 0.7.3 still apply unless a change
above names them fixed.
### Credits
Thank you to everyone whose work is in this release: @Aschenbath (#1908,
#2101, #2113), @Nikhi00718 (#1863, #2016, #2106, #2107, #2108), @bradvin
(#2100, #2109), @dajiaohuang (#2123) and @seanmcn (#2147, #2148, #2149). And
thank you to @pr0xc3nt4ur1 (#1822), @duncanleung (#2130), @ziadeh (#2129),
@alperta (#99), @smota (discussion #2117) and @oSquashBlossomo, whose reports
and reviews led to fixes here.
## [0.7.3]
OpenRig 0.7.3 lets a team work with several people. You can register more than
+5 -5
View File
@@ -26,9 +26,9 @@ use:
```sh
# Claude Code
npx skills add https://github.com/mvschwarz/openrig/tree/v0.7.0/skills/rigs --skill rigs --agent claude-code
npx skills add https://github.com/mvschwarz/openrig/tree/v0.7.4/skills/rigs --skill rigs --agent claude-code
# Codex
npx skills add https://github.com/mvschwarz/openrig/tree/v0.7.0/skills/rigs --skill rigs --agent codex
npx skills add https://github.com/mvschwarz/openrig/tree/v0.7.4/skills/rigs --skill rigs --agent codex
```
Then type `/rigs` in Claude Code, or `$rigs` in Codex, and say what you want built. The skill has your agent tell
@@ -68,11 +68,11 @@ Requires Node.js 22 or 24 and tmux, on macOS or Linux, and one working Claude Co
### Install it yourself
This runs OpenRig's install script from the `v0.7.0` release. It checks Node.js and npm, installs the latest published `@openrig/cli` with `npm install -g`, runs the Node.js and SQLite check, then runs `rig setup --dry-run` and `rig setup`. The first line prints that plan and changes nothing:
This runs OpenRig's install script from the `v0.7.4` release. It checks Node.js and npm, installs the latest published `@openrig/cli` with `npm install -g`, runs the Node.js and SQLite check, then runs `rig setup --dry-run` and `rig setup`. The first line prints that plan and changes nothing:
```bash
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.7.0/scripts/install.sh | sh -s -- --dry-run
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.7.0/scripts/install.sh | sh
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.7.4/scripts/install.sh | sh -s -- --dry-run
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.7.4/scripts/install.sh | sh
```
If a provider isn't signed in yet, the last step reports `FAILED [4/4]`, and `rig setup` lists the sign-in under "Some steps need attention". If the only remaining failures are provider sign-ins, the install steps finished; sign in to each selected provider as below and continue.
+3 -3
View File
@@ -191,11 +191,11 @@ You can also read [`skills/rigs/SKILL.md`](../../skills/rigs/SKILL.md) directly.
script will do and changes nothing:
```sh
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.7.0/scripts/install.sh | sh -s -- --dry-run
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.7.4/scripts/install.sh | sh -s -- --dry-run
```
The same command without `--dry-run`,
`curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.7.0/scripts/install.sh | sh`, installs the
`curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.7.4/scripts/install.sh | sh`, installs the
latest published `@openrig/cli` with `npm install -g`,
runs the Node.js and SQLite check, then `rig setup --dry-run` and `rig setup`. `rig setup` checks both Claude Code and
Codex and may install a missing one, as described below. A failed step prints
@@ -841,7 +841,7 @@ the lifecycle API without booting a new kernel, then stop the remaining rigs.
| Shared terminal is absent | Inspect the existing kernel binding and recovery state; use standalone `rig tui` while resolving it. |
| Viewing terminal was closed | Open the conversations again with `rig terminal open saved:kernel --window`; `rig tui --shared` is only the dashboard fallback if that window cannot open. Do not relaunch the team. |
| Daemon restarted but tmux survived | Re-read `rig status` and the existing queue; a daemon restart is not a fresh project. |
| Host reboot lost tmux sessions | Starting the daemon restores the kernel by itself when all of its seats were lost; check `rig status`, and if it reports the restore failed, run `rig up kernel --existing`. For other rigs, open `rig`, start the daemon if needed (press **S** if it opens on the work views), and select the existing rig and seats. Resume is the default; a fresh conversation needs a separate decision. |
| Host reboot lost tmux sessions | Starting the daemon restores the kernel by itself when that start finds all of its seats lost; a kernel that was already down before the reboot stays down, and `rig start` names `rig up kernel --existing`. Check `rig status`, and if it reports the restore failed, run `rig up kernel --existing`. For other rigs, open `rig`, start the daemon if needed (press **S** if it opens on the work views), and select the existing rig and seats. Resume is the default; a fresh conversation needs a separate decision. |
| Launch reports no usable snapshot | Inspect the existing rig and retained project files, then follow the same-seat recovery below. |
| Work is waiting on a prompt or decision | Read the row, transition and named prompt; preserve the obligation until the missing decision arrives. |
+1 -1
View File
@@ -17,7 +17,7 @@ npx skills add https://github.com/mvschwarz/openrig/tree/<release-tag>/skills/ri
npx skills add https://github.com/mvschwarz/openrig/tree/<release-tag>/skills/rigs --skill rigs --agent codex
```
For a new install, use the latest release's tag, for example `v0.7.0`. If OpenRig is already installed, use the tag
For a new install, use the latest release's tag, for example `v0.7.4`. If OpenRig is already installed, use the tag
that matches `rig --version`, or upgrade first. If the command fails with `npx: command not found`, Node.js isn't
installed or isn't on your PATH yet (see [What you need](#what-you-need)). Then type `/rigs` in Claude Code, or `$rigs` in Codex, and say what
you want built.
+109 -170
View File
@@ -1,7 +1,7 @@
# What changed in OpenRig 0.7.1
# What changed in OpenRig 0.7.4
This note is for an agent on an install that was just upgraded to 0.7.1. It lists only what behaves differently from
0.7.0 and what to do about it. For everything OpenRig can do, read the capability map:
This note is for an agent on an install that was just upgraded to 0.7.4. It lists only what behaves differently from
0.7.3 and what to do about it. For everything OpenRig can do, read the capability map:
`rig context get onboarding-width/public-what-you-can-do.md`. Each release replaces this file, so
`rig context get reference/whats-new.md` describes the installed version once the upgraded daemon is running. Without
a running daemon, read `$OPENRIG_HOME/reference/whats-new.md`. The daemon refreshes that copy when it starts, so right
@@ -9,184 +9,123 @@ after an upgrade it can still hold the previous version's note.
## After the upgrade
- **Restart the daemon** (`rig daemon stop`, then `rig daemon start`). Eight migrations run on the first start (124, 125,
127, 128, 129, 130, 131 and 135). Nine settings are added: `policies.claude_compaction.preparation_root` (unset),
`skills.router_line.enabled` (off), `decisions.enabled` (false), `decisions.consumers`, `decisions.template_dir`,
`retention.stream_days` (30), `retention.stream_max_items` (20000), `provider.selected` (empty) and
`daemon.db_conflict` (`warn`). None is removed.
- **Stream retention is on.** Stream items emitted after the upgrade are deleted after 30 days, or beyond the newest
20,000, unless a record names them (a classification, duplicate link, attempt or disposition). History from before the
upgrade is kept. Raise `retention.stream_days` or `retention.stream_max_items` to keep more.
- **The bundled openrig-core plugin goes from 0.1.17 to 0.1.18.** Startup replaces the installed plugin's changed files:
its Claude hook definitions, three hook scripts and the pre-compaction hook (so hooks start on a seat whose PATH has
no Node), and the `openrig-user`, `messaging-the-human` and `forming-an-openrig-mental-model` skills. As in
0.7.0, it first copies each file it replaces under `$OPENRIG_HOME/backups/managed-refresh/<id>/`, edited or not, and
logs `[plugin-vendor] preserved previous contents of <file> at <copy> before managed refresh`. A copy doesn't mean
anyone edited the file; if someone did, reapply the change from the copy.
- **Claude seats need Claude Code 2.1.280 or newer to see their team skills,** which now arrive as a per-seat plugin
through `CLAUDE_CODE_PLUGIN_DIRS` (below). OpenRig doesn't check the version. A running seat gets the new layout at its
next launch, restore or handover.
- **If a worktree's `.claude/settings.local.json` says `"defaultMode": "acceptEdits"` and the person didn't choose it,**
an earlier OpenRig wrote it when it added or freshly launched a managed Claude seat. 0.7.1 no longer writes it but
doesn't repair it; ask the person which mode they want and set it once.
- **Restart the daemon** (`rig daemon stop`, then `rig daemon start`). One migration runs on the first start (140). It
adds a nullable `identity_principal` column, empty on earlier rows, to queue transitions and their archive, inbox and
outbox entries, and stream items. Going back to 0.7.3 leaves the column in place, unread.
- **The bundled openrig-core plugin goes from 0.1.20 to 0.1.21.** The `queue-handoff` skill gains a paragraph on writing a
handoff that can be acted on after one read, and the Claude hooks add `StopFailure`, which reports a stop caused by a
rate limit. As before, startup first copies each file it replaces under `$OPENRIG_HOME/backups/managed-refresh/<id>/`,
edited or not, and logs where. A copy doesn't mean anyone edited the file; if someone did, reapply the change from
the copy.
- **Claude seats get the new hook at their next launch, resume, restore or handover,** not in a running process.
- **Codex seats:** OpenRig's Codex plugin is openrig-core, so Codex sees it as changed. As before, OpenRig renews its own
hook approval only where the installed plugin folder matches what shipped. If a Codex seat stops at Codex's "Hooks
need review" after the upgrade, review the hooks in Codex.
- **No setting is added or removed.**
## New things you can do
- **Choose how much automatic input reaches a seat:** `rig seat set-typing-guard <seat> --mode <mode> --reason "…"`, where
`<mode>` adds `openrig-urgent` (OpenRig's own notices and anything urgent) and `urgent-only` between `off` and `hold`.
Mark a message urgent with `rig send --urgent`, or create the row at priority `urgent` or `critical`. Held input stays
readable (`rig seat held-messages`) and is never replayed.
- **Choose how far OpenRig and peers may act on a seat:** `rig seat set-terminal-policy <seat> --preset
no-peer-interventions|help-within-instructions|full-control --reason "…"`, with `--helper <addresses…>`,
`--rig-default` (seats added later), and exceptions such as `--peer-compaction deny` or `--openrig-model allow`.
Managed compaction and saved model or effort changes are checked; a denial is `terminal_policy_refused`. Other
interventions are guidance only.
- **Read a seat's planned permissions:** `rig seat status <seat>` shows what its next fresh managed launch will pass and
where each part comes from, and its terminal policy. `rig setup --router-line yes|no` decides whether OpenRig adds its
one line to shared guidance files.
- **Let a person choose whether every ask reaches Slack:** `rig gateway human set <id> slack-subscription
every-ask|urgent-only|unset`. Every ask is on the TUI's Feed either way. Under `urgent-only`, only an ask
created or handed off with `--alert` posts. An ask marked `--alert` stands out in Slack (an interrupt with a mention)
under either setting, so use it only for something only they can do, or an approval whose wait costs now.
- **Give one Claude member its own setup** in the rig spec: `agent_file`, `append_system_prompt_file`, `plugin_dirs` and
`advisor` (an Advisor model). They're copied into that seat's storage, never the project.
- **See a seat's own skills:** `rig skill loadout --seat <session|self>`.
- **Reach the team from an assistant without a shell:** the MCP server has 34 tools, including `rig_whoami`,
`rig_restore_status`, `rig_team`, `rig_telemetry_events`, following a handoff, reading a finished item's artifact and
deciding inside a person's decision room. `rig mcp serve --http` serves them over HTTP; `rig mcp token add <name>
--seat <session>` gives each caller its own seat.
- **Hand a row's task to an outside agent:** `rig acp run <row>` for an ACP agent (Hermes, OpenClaw).
`docs/reference/a2a-agents.md` covers A2A agents.
- **Run a community harness that names, reports or reopens its conversations:** preset fields `launch_result`, `resume`,
`names_conversation` and `startup_assisted`, with examples for Cursor, Hermes and OpenClaw under
`docs/reference/community-harness-examples/`.
- **Change one edge on a running rig:** `rig edge add <rig> <from> <to> --kind <kind>` and `rig edge remove <rig>
<edge-id>` (`--plan`, `--json`). A `delegates_to` change says when it moves who work routes to.
- **Run one spec as several rigs:** `rig up <spec> --name <rig>`.
- **Retune a watchdog in place:** `rig watchdog update <jobId> [--interval-seconds n] [--message text] [--spec path]`
keeps its id and attachments. The context watch takes `--threshold-tokens` or `--threshold-percent`.
- **Put restore maps where seats may write:** `rig config set policies.claude_compaction.preparation_root <abs path>`.
- **Pick a Herdr session:** `rig terminal open <view> --provider herdr --session <name>`.
- **Close a row with its artifact:** `rig queue update <id> --state done --evidence-ref <path>`.
- **File and read subscription move reports:** `rig provider moves report` and `rig provider moves`. `--host <id>` and
`--codex-home <dir>` on `rig auth status|list|switch` and `rig seat restart` act on another machine's Codex home.
- **Route stream observations with typed decisions (opt-in, off by default):** once `decisions.enabled` is true,
`decisions.consumers` includes `stream` and the intake seat has `OPENROUTER_API_KEY`, `rig project wake --decide`
gives each eligible stream observation one bounded typed decision during that seat's wake: create a row for a supplied
owner, join supplied work, or record a duplicate or no action. Anything uncertain, refused or failed goes to the
intake seat as its own disposition, and the model isn't asked again. `rig project decisions status` shows the state
without making a call. Without `--decide`, or with decisions off, nothing changes; turning decisions off no longer
strands an accepted create or join whose effect hadn't landed.
- **Read the stream as a subscriber:** `rig stream subscribe <seat>` (`--tags`, `--type`; re-subscribing keeps the
place), then `rig stream read` returns the next bounded page for the calling seat (at most 20 items and 64 KiB, with
`more`, `unread` and any `gap`). `rig stream subscriptions` lists readers; `rig stream unsubscribe <seat>` stops one.
`rig stream show <id>` says what became of an observation.
- **Keep the kernel to the harnesses you chose:** `rig setup --providers <list>` is now saved as `provider.selected`, and
the kernel starts seats only for those.
- **Stop a second daemon on a live database:** `rig config set daemon.db_conflict stop` refuses a start whose database a
matching live daemon already holds (the default `warn` only warns). `rig daemon start --allow-db-conflict` allows one
deliberate start.
- **Put an assistant that lives outside a terminal on a team:** add a roster entry for its seat with `"hosted": true`
and connect the assistant to `rig mcp serve` under a grant for that seat (`rig mcp token add <name> --seat
<member>@<rig> --rig <rig>`, or a grant service, below). `rig_team` then lists it as a hosted member with its declared
capabilities and caveat, no pane, and activity `unknown`; `rig roster show` and `find` say it's hosted. The server's
instructions teach it the loop (inbox, claim, close or hand on, and asking a person while keeping the item), and it
can call `rig_whoami` to learn its seat.
- **Ring a hosted member when work lands for it:** declare `wake.webhook` on its roster entry, with `url_ref`,
`authorization_ref` and optionally `secrets_env_file` (an absolute path to a 0600 env file). The refs are secret names
read from the daemon's environment or that file; never put values in a roster. OpenRig POSTs `{source, schema_version,
event: "work-waiting", qitem_id, destination, summary, from}`, never the row's body, waits up to 10 seconds and
doesn't follow redirects.
- **See when a hosted member last showed up:** `rig_team` shows its last call to the team's MCP server and its latest
ring with how that went; `rig roster show` and `find` show the last call.
- **Check remote callers with an external grant service:** `rig mcp serve --http --grant-service <url>`, with
`--grant-service-header-file <path>` for one `Name: value` header on each lookup. Each request is checked; nothing is
cached.
- **Let OAuth clients discover how to sign in:** add `--oauth-resource <url>` (the public https URL clients reach, its
path ending in `/mcp`) and `--oauth-issuer <url>` to `--grant-service`. The server publishes OAuth protected-resource
metadata (RFC 9728) and answers a missing or bad credential with a standard challenge.
- **Serve newer MCP clients:** clients on protocol revision 2026-07-28 (no `initialize`, the version on every request,
possibly opening with `server/discover`) work with `rig mcp serve` over stdio or `--http`, beside clients on the 2025
revisions, on the same endpoint.
- **List the conversations a seat could resume:** `rig seat history --rig <id> --node-id <id>` (`--json`), read-only and
without native tokens; `--snapshot-id <id>` with `--history-session-id <id>` checks one reference it returned. The IDs
are `rigId` in `rig ps --nodes --json` and `identity.nodeId` in `rig whoami --session <seat> --json`. A client can then
ask the daemon's startup review for that node to resume the history the person reviewed.
- **Preview or open a task's current owners:** `rig terminal open qitem:<id>`; the daemon's preview,
`GET /api/terminal/preview?view=qitem:<id>`, returns the same view without opening it.
## Behaviour that changed
- **Team skills live in each seat's own storage** (`$OPENRIG_HOME/state/seats/<rig id>/<logical seat>/<runtime>/`), not
in the project's `.claude/skills` or `.agents/skills`. Claude seats get them as a generated plugin (`openrig:<id>`),
Codex seats as their own catalog. If a link sits in that path, the seat starts without them and the result names
what wasn't delivered.
- **Urgent wakes are labelled:** an urgent or critical row's wake starts with `Urgent (marked by …):` at every seat. A
seat on `hold` gets one held notice per wake instead of re-nudges, and lifecycle work is refused at the middle levels as
at `hold`.
- **A daemon restart picks up a managed compaction where it stopped.** An owed restore step resumes, a `/compact` that
may have been sent is never sent again, and `rig compact --state` shows anything stranded or owed.
- **A Claude seat whose startup turn is refused** (an expired login, say) holds the rest of its startup context as owed.
A startup input sent before the refusal is noticed can still be submitted (see Known issues in the
[0.7.1 release notes](https://github.com/mvschwarz/openrig/releases/tag/v0.7.1)).
- **`rig send` refuses with `target_needs_input`** when a Claude seat's hook has just reported it running and its screen
shows an MCP enablement menu, a question or a permission prompt.
- **`rig down` asks before stopping the caller's own rig.** Without a terminal it exits 1, stops nothing and prints the
`--yes` command.
- **`rig up --plan` doesn't start a stopped daemon:** it exits 1 with `daemon_not_running` and names `rig daemon start`
and `--no-kernel`.
- **`rig daemon start`** waits up to 20 seconds for a slow daemon, and starts with a warning when only a secondary
listener, such as Tailscale's, can't be verified.
- **A seat joined with `rig attach` as an outside app** (Claude Desktop) stays attached through `rig down` and restore
(`left_attached`). To replace it, `rig unclaim <name>`, then launch.
- **New seats get the daemon's `OPENRIG_DB` and `TMUX_TMPDIR`.**
- **A rebuilt Codex seat keeps its observed permissions,** and a read-only Codex profile launches without OpenRig's
writable roots.
- **A seat's own role** goes only to that seat, never into a shared `CLAUDE.md` or `AGENTS.md`, and `rig down` returns
guidance files byte for byte.
- **Workflow actions** (`project`, `route`, `resume`, `abort`) record the calling agent; a request with neither identity
nor actor gets the shared `actor_required` error.
- **`rig provider moves` is back** for subscription move reports. It switches nothing.
- **`--dangerously-interact` into a seat's input box stops first** when the box already holds typed or pasted text: it
shows that text (apart from suggestions) and types nothing. Clear the box and retry, or pass `--type-without-checking`,
which clears nothing. Keys for a recognized native menu are sent as before.
- **A terminal seat gets exactly the text sent to it,** without the From/To lines (the result says `envelopeOmitted`).
A queue wake to a terminal seat types nothing and fails `failed:terminal-seat`; the row stays queued.
- **A daemon restart that can't see the seats' tmux server** no longer detaches seats whose recorded process still
runs, so it doesn't relaunch them beside themselves.
- **Provider credentials and the activity-hook token stay off tmux, shell and `env` command lines** at launch and
handover. A launch whose staging fails stops instead of falling back.
- **An answer retried from Slack or Steering** after an interrupted close reuses the first reply and finishes the
request once.
- **One bad row no longer stops the stuck sweep** from flagging the others; **a malformed unrelated diagnosis row** no
longer stops health diagnoses from listing.
- **The kernel at daemon start:** startup restores a kernel only when this start's reconcile found its seats down (what
a reboot leaves). A kernel that was already down before this start stays down. `rig start` prints `Kernel auto-boot
skipped: kernel rig already managed; it was already down before this daemon start, so it was not restored. Bring it
back with: rig up kernel --existing`.
- **`rig daemon start --wait-for-kernel`** for a kernel skipped on purpose prints the same reason and way back that `rig
start` gives, instead of "did not reach ready / partial_ready within …ms" and a runtime-auth fix. It still exits 1. A
kernel still booting at the deadline, and the failure states, keep their wording.
- **Work waiting for a member nothing can wake** is reported to that member's person (Steering, the TUI's Feed, and Slack
under the default subscription), not to the member.
- **A rung hosted member that doesn't claim its work** by the stuck sweep's unclaimed age is reported to its person, as
for a member with no trigger.
- **A caller granted through a grant service** can address only its granted team, not its own or another caller seat,
and can't set OpenRig's Slack provenance tags or a workflow's internal sign-off.
- **A caller's seat that was created but never launched** is served by `rig mcp serve --http` instead of refused with
`seat_unavailable`.
- **A park on a registered person's own address** (`<id>@external`) resolves only from a Slack reply written after its
question; it keeps `--summary` and `--evidence-ref`; and it shows in NEEDS YOU in the reviews, with asks to that
address.
- **The reviews' agents band** counts only open rows as held, and a seat with work in progress reads as working.
- **A Claude seat stopped by a rate limit** is recognised from the `StopFailure` hook, and a delayed older Claude hook no
longer replaces a seat's current state.
- **`rig handover --source fresh` on Claude** reports delivery only when the packet is submitted, and fails with
`context_delivery_failed` if it's still staged after one retry.
- **A periodic snapshot** between separate named-agent launches keeps a down agent's resume source.
- **A resumed Pi seat** no longer prints `Entry not found` after `READY` on every restart.
- **The TUI** starts in a terminal that reports 0 rows or columns, lists rigs by name as `rig ps` does, and no longer
reports a refused effort read as a failure.
- **Identity lookup** (`rig whoami`, `rig down`, `rig ask`, `rig health`) no longer prints tmux's `invalid option` errors.
- **An artifact whose frontmatter isn't closed** no longer wakes an artifact-pool worker as ready.
## Output that changed shape
- **`rig ps --nodes`** separates every cell with one space (the default row is 5 columns wider), adds an `ATTN` column
(`yes`, `no` or `?`) before `REASON`, and marks a `running` seat whose tmux couldn't be reached as unconfirmed.
- **`rig queue show --json`** no longer has `lastNudgeInputBox`, and send results no longer describe the input box.
- **`rig queue show` and `rig queue whoami`** print their human notices on stderr, so stdout is the JSON.
- **A claimed row whose owner waits on a person** reads pickup `needs-input`, with the reason.
- **`rig down --json`** adds `leftRunning`; `rig reconcile-session` says whether resume metadata was recorded.
- **`rig compact-plan`** labels its thresholds as its own and says whether automatic compaction is on.
- **A send held for a draft** in the seat's input box reports `inputPhase: "not_reached"`: it was never typed.
- **A stream body over 16 KiB** is stored truncated, ending `[truncated by OpenRig: kept N of M bytes]`, and reads mark it
`bodyTruncated`. `rig stream list --after <sortKey>` from a pruned item returns 410 `stream_cursor_expired`, naming
`--since` to resume, instead of an empty list.
- **`rig_team`** can carry hosted members (activity `unknown`, their capabilities, caveat, last call and latest ring)
and `hostedMembersNote` when a roster can't be read.
- **Terminal preview and open responses** carry `viewDescriptor` (`kind`, `name`).
- **Rows written by a granted MCP caller's actions** carry `identity_principal` (`principal:v1`: source, id and, for a
grant service, grant and version).
- **A webhook ring** is recorded on the row as `wake-accepted:webhook (<url_ref>) answered <status>` for a 2xx.
- **`rig seat history`** is new, with `--json`.
## What to stop doing
- **Don't read `lastNudgeInputBox`.** It's gone.
- **Don't parse `rig ps --nodes` by column position.** Use `--json`, with `--fields` to pick fields.
- **Don't look for a team seat's skills in the project folders.** Use `rig skill loadout --seat`.
- **Don't stop and re-register a watchdog to change it.** Use `rig watchdog update`.
- **Don't take a rig down to fix one edge.** Use `rig edge add` or `remove`.
- **Don't print `OPENRIG_ACTIVITY_*` values** while looking for identity. Use `rig whoami`.
- **Don't use `--dangerously-interact` to type over a half-written input box.** It stops and shows the text; choose
explicitly, or use `rig send --urgent` where the seat's interruption level allows it.
- **Don't launch a remote caller's seat just to give it a session.** A created seat is served.
- **Don't read a webhook ring's 2xx as the member waking.** Its claim on the row is the pickup.
- **Don't read a hosted member's `unknown` activity as idle.** OpenRig doesn't observe it between calls.
- **Don't expect a long-gone kernel to come back on daemon start.** Run `rig up kernel --existing` when you want it.
- **Don't read `--wait-for-kernel`'s exit 1 for a skipped kernel as an auth problem.** Read the reason it prints.
## Known gaps in 0.7.1
## Known gaps in 0.7.4
- **A new Claude seat's startup text can stay in its input box unsent.** If a fresh Claude seat sits idle with text at
its prompt, press Enter in its pane, or ask the person to.
- **Claude seats on a macOS native install can read as needing attention after a restore.** Check the pane before
acting on it.
- **A Slack channel-mapping change needs a daemon restart.** Don't use `rig slack disable` then `enable` for it: enabling
marks any alerts waiting to post to Slack as already seen.
- **Ubuntu 22.04's tmux 3.2a:** the query known to crash its server is gone, but a narrower race remains. Avoid 3.2a
(`tmux -V`).
- **`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, start the daemon yourself first.
- **A launch that warns "Scoped tmux environment unavailable; retaining the previous environment"** didn't give that seat
the clean environment. Check `env` in the seat before relying on OpenRig's variables.
- **Going back to 0.7.0 with a Slack subscription set:** 0.7.0 can't read a person file that holds one, and its people
registry stops loading. Save the choice first (`rig gateway human show <id> --json > <id>.json`), then run
`rig gateway human set <id> slack-subscription unset` (`urgent-only` becomes every-ask, as on 0.7.0); set it again after
returning to 0.7.1. A person file still holding 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.
- **A Herdr tile over SSH** doesn't come back by itself after a Herdr restart. Reopen it with `rig terminal open <view>
--provider herdr`.
- **Delegated decisions:** the ask is created before the decision, so without quiet hours it can post to the person
first. Pair a decision room with quiet hours, or decide before asking.
- **`restore-check` still treats a missing startup file as rig-wide.** Trust `rig up --existing`'s per-seat result.
- **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.
- **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`.
- **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.
- **A recorded principal is attribution, not authentication.**
- **The `qitem:<id>` view is membership only:** it doesn't follow the task as it moves, keep a reusable viewer, or grant
input. 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, and limited to
this node's eligible Claude and Codex histories in the current compatible snapshot.
- **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.
- **OpenClaw's interrupted local turns aren't recovered** (#2092). 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** (#2088), and `rig down`
stops the pane only (#2077).
- **Hermes:** the preset doesn't declare `resume`, and whether a seat's gateway exits once idle is unknown; check with
`ps`.
- **A Codex seat's own permission settings** were enforced natively in 0.7.3's test with Codex 0.164.0; other versions
weren't tested.
- **Shared channels are Slack only,** and the primary user's authority in the TUI is attribution, not authentication.
- **The cmux path wasn't tried in a real cmux,** and a remote host's rigs are read over HTTP only.
- **Not in 0.7.4:** 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), a warning for out-of-range MCP daemon ports (#2160), Hermes resume and measured idle exit,
and OpenClaw interrupted-turn recovery. The gaps listed for 0.7.3 still apply unless a change above names them fixed.
+5 -5
View File
@@ -1,12 +1,12 @@
{
"name": "openrig",
"version": "0.7.1",
"version": "0.7.4",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openrig",
"version": "0.7.1",
"version": "0.7.4",
"license": "Apache-2.0",
"workspaces": [
"packages/daemon",
@@ -7346,7 +7346,7 @@
},
"packages/cli": {
"name": "@openrig/cli",
"version": "0.7.1",
"version": "0.7.4",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
@@ -7384,7 +7384,7 @@
},
"packages/daemon": {
"name": "@openrig/daemon",
"version": "0.7.1",
"version": "0.7.4",
"license": "Apache-2.0",
"dependencies": {
"@hono/node-server": "^1.13.0",
@@ -7426,7 +7426,7 @@
},
"packages/ui": {
"name": "@openrig/ui",
"version": "0.7.1",
"version": "0.7.4",
"license": "Apache-2.0",
"dependencies": {
"@fontsource-variable/jetbrains-mono": "^5.2.8",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "openrig",
"version": "0.7.1",
"version": "0.7.4",
"private": true,
"license": "Apache-2.0",
"type": "module",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@openrig/cli",
"version": "0.7.1",
"version": "0.7.4",
"type": "module",
"description": "Build your own network of agents from Claude Code, Codex and Pi: persistent teams with roles, shared context and owned work.",
"keywords": [
@@ -11,7 +11,7 @@ not know exists.** So the point of what follows is not skill. It is recognition:
lands, something rhymes, and you go check instead of building.
Ninety top-level verbs ship (capability canon refreshed through
`capability-delta-v0.7.3`). This marker describes the pack's teaching, not publication or live
`capability-delta-v0.7.4`). This marker describes the pack's teaching, not publication or live
adoption. Read this once for shape, and let it make you suspicious that a thing already exists.
What changed in the installed version, and what to do about it, is one read away:
`rig context get reference/whats-new.md`.
@@ -88,7 +88,10 @@ one command away. Your memory of the fleet is a claim about the past.
- **`rig roster list` / `show` / `find`** — who across your rigs and hosts is recommended for a
kind of work, from JSON rosters in `<workspace.root>/rosters`. Read-only: it dispatches nothing
and does not claim anyone is available. The built-in starter and factory leads publish their
team's roster at first start. `show` and `find` include each seat's last observed model.
team's roster at first start. `show` and `find` include each seat's last observed model. A
roster entry marked `"hosted": true` is a member that lives outside a terminal (an assistant
connected over MCP); `show` and `find` say so, and when it last called the team's MCP server.
With no evidence that reads unknown, never idle.
- **`rig telemetry events` / `transitions` / `tenures <node-id>`** — past events, queue
transitions and a seat's occupants, one bounded page at a time with gaps reported. Reach for it
before querying the database yourself.
@@ -210,6 +213,12 @@ unseen — which makes messages the one delivery channel that never gets skipped
existing view was reused, which is success. `--provider herdr` or `--provider cmux` opens the
view in a provider that is already running, without opening a window; each such open adds a new
workspace, so to come back to a view, focus its open space.
**`qitem:<id>` as the view** previews or opens the current local owners of that task: its
pending, in-progress and blocked rows through explicitly linked successors, without closed
predecessors or past senders. It's a read-only membership view: stopped, missing, external and
unresolved owners are named, and incomplete lineage is reported rather than cut short. It doesn't
follow the task as it moves, and an explicit open still has the provider's usual workspace
effects. Preview and open responses carry `viewDescriptor` (`kind`, `name`).
Add `--session <name>` to select a Herdr session for that request; `--session default`
explicitly selects its default session. `rig terminal status --session <name>` inspects
the same endpoint. Omitting the flag keeps the daemon's configured endpoint. Herdr tiles come
@@ -594,6 +603,12 @@ because someone lost work once.
When your user says OpenRig isn't working, start with **`rig context get help`**: the one help guide for the installed
version, from checking the environment to a useful report to the OpenRig team.
- **`rig seat history --rig <id> --node-id <id>`** — which recorded Claude or Codex conversations this exact node
could resume, read-only (`--json`; check one reference with `--snapshot-id` and `--history-session-id` together).
The IDs are `rigId` in `rig ps --nodes --json` and `identity.nodeId` in `rig whoami --session <seat> --json`.
A client can then ask the daemon's startup review for that node to resume
the history the person reviewed; it rechecks the choice and refuses rather than substitute another
conversation or start fresh.
- **`rig start`** — the box rebooted and everything is gone: bring the whole topology back in one
move, rather than hand-restoring rig by rig. Selected-rig recovery now demands positive runtime
evidence and refuses stale identity by name rather than substituting an occupant. `--last`
@@ -604,6 +619,9 @@ version, from checking the environment to a useful report to the OpenRig team.
Stop distinguishes process/listener exit from a clean asynchronous drain: inspect the matching
`daemon-shutdown.json` and log when completion is incomplete or unverified. No target is a
distinct no-op, and a timeout never proves down. Use command help for exact limits and recovery.
Startup brings back a kernel that this start found down (what a reboot leaves). A kernel that
was already down before this start stays down: `rig start` and `rig daemon start
--wait-for-kernel` say so, and `rig up kernel --existing` brings it back.
`/healthz` reports the daemon's effective UID as `euid`, beside `pid`. Running several OpenRig
homes on one machine on purpose: `rig config set daemon.db_conflict stop` refuses a start whose
database another live daemon already holds (the default, `warn`, only warns), and
@@ -1279,14 +1297,28 @@ your circumstances is configuration, and the ones that are not, another agent ca
shell command. Its queue tools (`rig_queue_create`, `rig_queue_show`, `rig_queue_list`,
`rig_queue_claim`, `rig_queue_update`, `rig_queue_handoff`, `rig_queue_unclaim`) act as the seat
named by `OPENRIG_SESSION_NAME`, so an agent with no shell can hand work to the team, read the
closing note as its answer, and pass on or put back work it holds. Nothing
wakes such an agent; it sees new work when it checks. Its tools cover the whole delegation loop:
closing note as its answer, and pass on or put back work it holds. Unless it declares a webhook
trigger (below), nothing wakes such an agent; it sees new work when it checks. Its tools cover
the whole delegation loop:
find its seat, team and lead (`rig_whoami`, `rig_team`), hand work on and follow the handoff's
successor, find finished work and read its artifact, decide inside a person's decision room,
follow a restore it started (`rig_restore_status`) and read the event log
(`rig_telemetry_events`). **`rig mcp serve --http`** serves the same tools to a client on another
host; `rig mcp token add <name> --seat <session>` gives each caller its own grant, acting as that
seat.
seat. `--grant-service <url>` checks each request's key with an external grant service instead
of the token file (`--grant-service-header-file` adds one header to each lookup), and
`--oauth-resource` with `--oauth-issuer` lets an OAuth client discover how to authenticate and
get a standard challenge; the key and its grant still decide what a caller may do. The rows a
granted caller's actions write record whose grant acted: attribution, not authentication.
Clients on MCP protocol revision 2026-07-28 and on the 2025 revisions share the same endpoint.
**An assistant connected this way can be a hosted member of a rig:** mark its roster entry
`"hosted": true` and `rig_team` lists it with its declared capabilities and caveat, activity
`unknown`. The server's instructions teach it the loop: its inbox, claiming, closing or handing
on, and asking a person while keeping the item (it blocks the item on that person, and the
answer returns it in progress). A roster entry can declare a webhook trigger (`wake.webhook`,
with secret names, never values): OpenRig then POSTs a pointer to the row when work lands, and a
2xx records only that the ring was accepted, not that anything woke. When work waits for a
member nothing can wake, or a rung member doesn't claim it in time, its person is told.
- **`rig skill loadout --runtime <claude-code|codex>`** — inspect the exact catalog revision,
selectors, target, and current/missing/shadowed/conflicting state for one working directory.
`--apply` writes only the managed ownership set, is idempotent, and refuses local edits or
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@openrig/daemon",
"version": "0.7.1",
"version": "0.7.4",
"private": true,
"license": "Apache-2.0",
"type": "module",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@openrig/ui",
"version": "0.7.1",
"version": "0.7.4",
"private": true,
"license": "Apache-2.0",
"type": "module",
@@ -1,10 +1,10 @@
{
"release": "0.7.2",
"archiveSha256": "42b4d4980c062f49f99db7e843a2ba96c0066a420cbaace381f435e22699d4c5",
"release": "0.7.3",
"archiveSha256": "cac4a448427697b7062c0f68fa56dcfebf5168cdcd8b57c8ad4b939a4d127d99",
"plugins": {
"openrig-core": {
"version": "0.1.19",
"sha256": "21343eb7a36b0726a50372edc781b8e5b344c819a456499552f2560fb9712cb1"
"version": "0.1.20",
"sha256": "b3b5f3d71b1343ae5c71752ea29d3e0db86bce585604562744e543e9ccbe7e44"
}
}
}