Compare commits

...
Author SHA1 Message Date
dev60-review b69cc9295f docs(capability-map): rig network is one quiet experimental line
The capability map's 0.7.13 addition named rig network connect with its
flags. It now says what the release notes say: rig network connects one local
seat to a hub you already have, experimental and at your own risk, and the
daemon starts, sweeps and schedules the connector even with no binding, with
its migrations applied on upgrade.
2026-11-12 18:22:22 +00:00
dev60-review da3c334963 docs(release): 0.7.13 notes carry the release's tested limits
The CHANGELOG section and what's new now disclose the queue-create slowdown
and memory reading, a notice left beside a late draft (#3076), an ordinary
send acting on an open /model picker, and the Codex hook review after an
upgrade, each as selected. They qualify the registration offer (5 of 6 fresh
installs) and the ask-back, mark #3029's behaviour as the change's own tests
with no fewer-asks claim, and name the Codex-installed-but-signed-out first
team. The opening drops the cut hash, the backup step gives its commands, the
MCP SDK is described as already in the package, rig network is one quiet
line, and the 0.7.12 limits are linked.
2026-11-12 18:17:19 +00:00
dev60-review 551e6c06fc docs(release): 0.7.13 notes scoped to what the changes do
The TUI's unknown applies to the list, explorer and agent-detail status rows
for an explicit unknown from the daemon; screen motion, the screen fallback and
the topology graph are unchanged. Guidance cleanup removes redundant copies and
keeps distinct edits, and a write record decides whether an edit is kept on a
fresh start. The runner-answer note can ask for another answer. A stale pane
claim is reclaimed only by a handover launched into the seat's own session,
from a removed owner or an archived one whose session ended. A one-time park
wake is retried while its park is current and an attempt typed nothing.
2026-11-12 12:02:32 +00:00
dev60-review 5b704a7e03 docs(release): 0.7.13 notes wording
The opening says rig daemon start tells the setup agent to offer to register
the person, and that a Claude seat waits when its usage-limit message states a
reset time. Plainer words for a failed wake's finding, a parked item's kept
wake, the custody-verified note and workflow spec reads. A marked place at the
end of each limits section for the items still to be filled in before
publication.
2026-11-12 11:52:14 +00:00
dev60-review cd9714e46d docs(capability-map): teach what 0.7.13 added
The marker moves to capability-delta-v0.7.13, and the verb count to 93
(`rig network`). Beside the verbs they belong to: a person's runner answer gets
a note back and the receiving agent knows what a terminal answer means;
`rig daemon start`'s registration offer and the operator-direct gap; a hosted
member's check-in status; `rig network connect` as experimental; stopping an
adopted session after `rig unclaim`, and the fresh launch that reopens the
server; a handover whose successor may be running; and usage-limit parking for
Claude seats.
2026-11-12 11:43:11 +00:00
dev60-review 270b6defcd docs(release): describe 0.7.13
The [0.7.13] CHANGELOG section above 0.7.12's: a runner's answer is confirmed
to the person, the receiving agent is told what a terminal answer means and how
to ask back, rig daemon start offers to register the person, a usage-limited
Claude seat waits for its stated reset, and fixes across delivery, handover,
the TUI and speed, with the experimental hub connector, the behaviour that
changed, the known limits and the credits.

What's new describes 0.7.13 for an agent on an upgraded install. 0.7.12's page
follows one heading level down, then 0.7.11's and 0.7.10's; 0.7.9's section is
dropped. The context-pack copy is the same file.
2026-11-12 11:42:59 +00:00
dev60-review f860c2ffe0 chore(release): prepare 0.7.13
Set 0.7.13 in the root, cli, daemon, ui and acp packages and the lockfile,
the ACP launcher's @openrig/cli dependency and registry listing, and the
openrig plugin's four manifests, which carry the CLI's release version.

The install commands on the README, getting started and the quickstart name
v0.7.13: the rigs skill and the install script. Getting started and the
quickstart lead with the command for a new install and keep the matching
rig --version tag second, for an existing one.

The packaged-plugin baseline stays bound to published 0.7.12, and
openrig-core stays 0.1.29, above the published 0.1.28 for its changed hooks.
2026-11-12 11:31:20 +00:00
17 changed files with 1018 additions and 220 deletions

No files matched your search

+245
View File
@@ -8,6 +8,251 @@ deprecations, and behavioral changes. Breaking changes are called out explicitly
---
## [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, then restart the daemon:** `rig daemon stop`, copy the
database file (`rig config get db.path` prints its path), then
`rig daemon start`. Your agents keep running through a daemon restart; don't
use `rig down`, which ends them. Three migrations run on the daemon's first start: 160 and 161 (for the experimental hub connector below)
and 162 (indexes for session reads). Going back to 0.7.12 after them isn't
established. ([#2993](https://github.com/mvschwarz/openrig/pull/2993), [#2997](https://github.com/mvschwarz/openrig/pull/2997))
- **openrig-core is 0.1.29, and the `openrig` plugin now carries the CLI's
version, 0.7.13.** A Codex session kept running across the upgrade can ask
for hook approval until it's relaunched. ([#3034](https://github.com/mvschwarz/openrig/pull/3034), [#3064](https://github.com/mvschwarz/openrig/pull/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
the `rig seat decide-permission` command it names.
([#3001](https://github.com/mvschwarz/openrig/pull/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](https://github.com/mvschwarz/openrig/pull/3030))
- `rig daemon start` ends 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](https://github.com/mvschwarz/openrig/pull/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](https://github.com/mvschwarz/openrig/pull/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`, or `check_in_on_request: true`): checking in, overdue, no
check-in yet, on request, or unknown. `rig roster show` and `find` print it as
a Check-in line. It's a status only: work for a member that isn't checking in
still queues and rings as before. ([#3023](https://github.com/mvschwarz/openrig/pull/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](https://github.com/mvschwarz/openrig/pull/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](https://github.com/mvschwarz/openrig/pull/3003), [#3024](https://github.com/mvschwarz/openrig/pull/3024))
- After `rig unclaim`, the guidance for an adopted session says to end its
process and its tmux session, and `rig seat stop`'s help matches. A fresh
launch after `rig unclaim` ended the server's last session reopens the server.
([#2996](https://github.com/mvschwarz/openrig/pull/2996), [#3006](https://github.com/mvschwarz/openrig/pull/3006), [#3014](https://github.com/mvschwarz/openrig/pull/3014), [#3009](https://github.com/mvschwarz/openrig/pull/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](https://github.com/mvschwarz/openrig/pull/2869), [#2987](https://github.com/mvschwarz/openrig/pull/2987), [#2995](https://github.com/mvschwarz/openrig/pull/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); a `custody-verified:` note whose target is followed by a
period, comma or other closing punctuation now verifies it; the Pi runner pane keeps the operator's
draft out of the stream. ([#2948](https://github.com/mvschwarz/openrig/pull/2948), [#3016](https://github.com/mvschwarz/openrig/pull/3016), [#3011](https://github.com/mvschwarz/openrig/pull/3011), [#3038](https://github.com/mvschwarz/openrig/pull/3038), [#3004](https://github.com/mvschwarz/openrig/pull/3004), [#2842](https://github.com/mvschwarz/openrig/pull/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](https://github.com/mvschwarz/openrig/pull/2954), [#2879](https://github.com/mvschwarz/openrig/pull/2879), [#2951](https://github.com/mvschwarz/openrig/pull/2951), [#2880](https://github.com/mvschwarz/openrig/pull/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](https://github.com/mvschwarz/openrig/pull/2857), [#3012](https://github.com/mvschwarz/openrig/pull/3012), [#3022](https://github.com/mvschwarz/openrig/pull/3022), [#2913](https://github.com/mvschwarz/openrig/pull/2913), [#2973](https://github.com/mvschwarz/openrig/pull/2973), [#2971](https://github.com/mvschwarz/openrig/pull/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](https://github.com/mvschwarz/openrig/pull/2960), [#2986](https://github.com/mvschwarz/openrig/pull/2986), [#2999](https://github.com/mvschwarz/openrig/pull/2999))
- **Guidance and plugins:** guidance cleanup in a repository's `AGENTS.md` or
`CLAUDE.md` removes 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](https://github.com/mvschwarz/openrig/pull/3020), [#3025](https://github.com/mvschwarz/openrig/pull/3025), [#3021](https://github.com/mvschwarz/openrig/pull/3021), [#3064](https://github.com/mvschwarz/openrig/pull/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](https://github.com/mvschwarz/openrig/pull/2970), [#2997](https://github.com/mvschwarz/openrig/pull/2997), [#3019](https://github.com/mvschwarz/openrig/pull/3019))
- **Docs:** what `rig seat clear-attention`'s check proves, how managed
compaction notices are routed, when the keyboard moves in herdr-app, a
complete periodic-reminder registration, and starting one stopped kernel seat
with `rig launch`. ([#2964](https://github.com/mvschwarz/openrig/pull/2964), [#2984](https://github.com/mvschwarz/openrig/pull/2984), [#2991](https://github.com/mvschwarz/openrig/pull/2991), [#3002](https://github.com/mvschwarz/openrig/pull/3002), [#3031](https://github.com/mvschwarz/openrig/pull/3031))
### Experimental
- **`rig network`** connects one local seat to a hub you already have.
Experimental, unsupported and at your own risk. The connector uses the MCP
SDK, which the installed package already included in 0.7.12. ([#2993](https://github.com/mvschwarz/openrig/pull/2993))
### Behaviour that changed
- **A runner's answer is confirmed to you.** Through 0.7.12 no note came back,
and the runner waited for its next read. ([#3001](https://github.com/mvschwarz/openrig/pull/3001))
- **A usage-limited Claude seat waits for its stated reset**; don't release it
by hand on a timer. **A failed handover may have left its successor
running**; look at the pane before retrying. ([#2917](https://github.com/mvschwarz/openrig/pull/2917), [#3003](https://github.com/mvschwarz/openrig/pull/3003))
- **Passive SSH host status reads `unknown`.** Routine host listings no longer
open a TCP connection to SSH hosts, because repeated probes closed without a
handshake can make OpenSSH block real logins for a while. Hosts that used to
read reachable now read unknown; `rig host doctor` still checks actively.
([#2979](https://github.com/mvschwarz/openrig/pull/2979))
- **`rig package install` leaves a guidance file alone when a recognized
managed block has no complete marker pair,** lists it under "Left as it is:" and installs the rest, instead
of appending a second copy. Launch and restore name such a file
(`guidance_block_markers_damaged`). ([#3020](https://github.com/mvschwarz/openrig/pull/3020))
### Known limits
- **Not in this release:** a Codex snapshot restore or `rig up --existing` can
write OpenRig's managed guidance into a tracked `AGENTS.md`, leaving the
worktree modified; check `git status` after either operation.
- **Not in this release:** a person who talks to the kernel operator first, with
no other agent setting OpenRig up, isn't offered registration. `rig up`,
`rig start` and `rig context` start the daemon without printing the offer
either. Register with `rig gateway human add`. While nobody is registered, a
later `rig daemon start` offers again, even after a no; nothing is registered
without your yes. ([#3028](https://github.com/mvschwarz/openrig/pull/3028), [#3041](https://github.com/mvschwarz/openrig/pull/3041) isn't in this release)
- **The hub connector isn't inert:** the daemon starts it, sweeps leftover
credential folders and schedules local rounds even with no binding; only the
pass to a hub is absent. Its migrations apply on upgrade. ([#2993](https://github.com/mvschwarz/openrig/pull/2993))
- **The recorder:** a queued begin record can be lost before the durable append,
and a stalled worker has no acknowledgement timeout. ([#3019](https://github.com/mvschwarz/openrig/pull/3019))
- **Speed and memory:** On one performance host, whole `rig queue create`
invocations had a median about 10.4% slower than 0.7.12 (about +29 ms). Send
latency stayed within the comparison's unchanged range. The cause remains
unidentified. The standard idle-memory comparison was inconclusive. A post-hoc
analysis of the same six runs found 7.9–8.6 MiB (4.2–5.3%) higher daemon RSS
across three matched idle windows, using the median of three arm medians per
version. The cause and steady-state behavior remain unestablished.
- **Draft-aware delivery ([#3076](https://github.com/mvschwarz/openrig/issues/3076)):** an automatic OpenRig notice can be left beside a
draft started during delivery. This also concerns notices admitted by
openrig-urgent and urgent-only modes. In the reproduced 0.7.12 Claude Code and
Codex cases, the person's draft remained intact and no Enter was sent, but
OpenRig's text stayed in the input. The guard and paste path are unchanged in
this cut; a native 0.7.13 reproduction has not run.
- **Native model pickers:** with a /model picker open, an ordinary send can act
on the picker instead of delivering the message. In 0.7.12 tests it confirmed
Claude Code's already-selected default and advanced Codex's model selection;
neither message reached the model. Close or deliberately resolve the picker
before ordinary delivery. The native 0.7.13 case has not run.
- **Codex hook review after an upgrade:** in one test whose Codex home already
held earlier hook approvals, `rig up --existing` stopped for hook review in
each Codex pane; approving the hooks resumed all three conversations. A
separate test of the same upgrade on a fresh Codex home, on another host,
restored without review. The cause of the difference is not established.
- **A first team with Codex installed but signed out:** a Claude user's starter
team includes a Codex reviewer that waits for a Codex sign-in, and you aren't
told beforehand. If Codex is installed, sign in to it before starting a team.
- **A first team's permission asks:** a command joined with `&&`, `;` or a pipe
still asks unless every part is allowed, and OpenRig's own lifecycle commands
still ask on Claude seats. ([#3029](https://github.com/mvschwarz/openrig/pull/3029))
- **Usage-limit parking** was tested with the limit message from `claude -p`. If
an interactive seat's limit report doesn't carry the message, the seat is
retried as before. A reset in the past or more than 8 days away is ignored.
([#2917](https://github.com/mvschwarz/openrig/pull/2917))
- **Handover:** two other failures can still say "retry" while a successor may
be running: a context delivery failure, and a Codex launch failure after an
update prompt wasn't dismissed. Look at the pane first. ([#3003](https://github.com/mvschwarz/openrig/pull/3003))
- **Answers:** when a receiving agent asks you back, it can stop at Claude
Code's own permission prompt, which you don't see. A receiving agent you
choose can still decline to act on a clear answer. A pairing requester's
description of itself is quoted for the receiving agent, but still shown
unquoted in the request's summary and the notices about it. The TUI's
one-line notice after you answer can clear within a frame. ([#3030](https://github.com/mvschwarz/openrig/pull/3030), [#3001](https://github.com/mvschwarz/openrig/pull/3001))
- **Proof reads** still pause briefly, and a whole read takes slightly longer.
Yielding isn't a hard bound on latency or a single atomic snapshot of the
proof. ([#2970](https://github.com/mvschwarz/openrig/pull/2970))
- **`rig down`** keeps no stored host or boot identity, doesn't guard against
another program running as you, and a daemon restart between losing the tmux
server and the stop wasn't exercised. ([#2962](https://github.com/mvschwarz/openrig/pull/2962))
- **Codex working counter:** a capture that doesn't name its pane keeps the old
comparison, a restart that keeps both the pane and its process id isn't seen,
and a leftover live frame can count once until it expires. ([#2980](https://github.com/mvschwarz/openrig/pull/2980))
- **Custom blocker IDs** explain the wait, but their progress gives no event
wake; the timer remains. ([#2983](https://github.com/mvschwarz/openrig/pull/2983))
- **Delivery:** delivery evidence records what was known, not that the agent read
the message, and events are best effort. A footer row OpenRig doesn't
recognize can still hold a delivery ([#2925](https://github.com/mvschwarz/openrig/issues/2925)), and a held message's full envelope
can stay held; clearing a draft doesn't deliver it ([#2515](https://github.com/mvschwarz/openrig/pull/2515)).
- **Runner permission answers** were run end to end with a real receiving agent
and the example runner, whose requesting agent was a stand-in; a model-driven
runner waiting on a person's answer hasn't been run. ([#2934](https://github.com/mvschwarz/openrig/pull/2934))
- **A receiving agent you choose** (`agents.operator_session`) that runs in an
explicit or auto permission mode gets no OpenRig allowance for
`rig host approve` or `rig host deny`, so Claude's review can refuse them.
- **An already-running tmux server** keeps its old environment, daemon
credentials included, until it restarts. ([#2850](https://github.com/mvschwarz/openrig/pull/2850))
- **herdr-app views** are one-shot; following isn't claimed. **Pull relay** needs
a connector that implements pull. ([#2744](https://github.com/mvschwarz/openrig/pull/2744), [#2844](https://github.com/mvschwarz/openrig/pull/2844))
- **From 0.7.12:** [its known limits](https://github.com/mvschwarz/openrig/releases/tag/v0.7.12)
still apply, except that [#2970](https://github.com/mvschwarz/openrig/pull/2970) and [#2948](https://github.com/mvschwarz/openrig/pull/2948) are now in this release,
runner answers are confirmed and reach a waiting runner at once ([#3001](https://github.com/mvschwarz/openrig/pull/3001)),
and `rig seat stop` no longer suggests `rig down` for an adopted session
([#3006](https://github.com/mvschwarz/openrig/pull/3006)). They weren't re-checked for this release unless named here.
### Credits
Thanks to @Aummadour, @Kayhusk, @Coder8124, @DeryFerd, @EZotoff, @hgreene624,
@cavalcanticampos, @ziadeh, @dajiaohuang and @billbenetti for merged
contributions. Thanks also for the reports behind these fixes: @jamesloosli
([#2879](https://github.com/mvschwarz/openrig/pull/2879)), @Kayhusk ([#2880](https://github.com/mvschwarz/openrig/pull/2880) and [#2951](https://github.com/mvschwarz/openrig/pull/2951)), @CaptObvious ([#2948](https://github.com/mvschwarz/openrig/pull/2948) and
[#3016](https://github.com/mvschwarz/openrig/pull/3016)), @alperta ([#2917](https://github.com/mvschwarz/openrig/pull/2917)), @ziadeh ([#2960](https://github.com/mvschwarz/openrig/pull/2960)) and @todd-dhango ([#2984](https://github.com/mvschwarz/openrig/pull/2984)).
## [0.7.12]
OpenRig 0.7.12 is a patch for people running their own agent teams, cut from
+5 -5
View File
@@ -26,9 +26,9 @@ use:
```sh
# Claude Code
npx skills add https://github.com/mvschwarz/openrig/tree/v0.7.11/skills/rigs --skill rigs --agent claude-code
npx skills add https://github.com/mvschwarz/openrig/tree/v0.7.13/skills/rigs --skill rigs --agent claude-code
# Codex
npx skills add https://github.com/mvschwarz/openrig/tree/v0.7.11/skills/rigs --skill rigs --agent codex
npx skills add https://github.com/mvschwarz/openrig/tree/v0.7.13/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.11` 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.13` 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.11/scripts/install.sh | sh -s -- --dry-run
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.7.11/scripts/install.sh | sh
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.7.13/scripts/install.sh | sh -s -- --dry-run
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.7.13/scripts/install.sh | sh
```
If the last step isn't ready, the installer reports `INSTALLED, SETUP NOT COMPLETE` and points to the details from `rig setup` above. Follow that output and any reported Fix, then rerun `rig setup`; the CLI does not need reinstalling. If the only remaining failures are provider sign-ins, sign in to each selected provider as below and continue.
+11 -9
View File
@@ -180,20 +180,22 @@ user.
**Agents:** if you're setting OpenRig up for someone, load the `rigs` skill and follow it. It carries the install, the
OpenRig view and the handoff to the operator as one procedure. From 0.6.7, OpenRig installs it as `rigs` in
`~/.claude/skills` and `~/.agents/skills` when the daemon starts. To add it manually, use the release tag matching
your installed `rig --version`: replace `<release-tag>` below with that tag, including its `v` prefix.
`rig --version` prints the version and a commit, for example `0.6.11 (379f0a0d)`; the tag is `v0.6.11`.
The skill is in the repository from v0.6.6; on an older install, use the v0.6.6 tag or upgrade first.
Choose the command for the agent doing the setup:
`~/.claude/skills` and `~/.agents/skills` when the daemon starts. For a new install, add it with the command for the
agent doing the setup. Both use this release's tag:
```sh
# Claude Code
npx skills add "https://github.com/mvschwarz/openrig/tree/<release-tag>/skills/rigs" --skill rigs --agent claude-code
npx skills add "https://github.com/mvschwarz/openrig/tree/v0.7.13/skills/rigs" --skill rigs --agent claude-code
# Codex
npx skills add "https://github.com/mvschwarz/openrig/tree/<release-tag>/skills/rigs" --skill rigs --agent codex
npx skills add "https://github.com/mvschwarz/openrig/tree/v0.7.13/skills/rigs" --skill rigs --agent codex
```
If OpenRig is already installed, use the release tag matching your installed `rig --version` instead: replace the tag
after `tree/` with it, including its `v` prefix. `rig --version` prints the version and a commit, for example
`0.6.11 (379f0a0d)`; the tag is `v0.6.11`. The skill is in the repository from v0.6.6; on an older install, use the
v0.6.6 tag or upgrade first.
These are the pinned, per-agent forms used on the [rigs pages](https://openrig.dev/rigs).
You can also read [`skills/rigs/SKILL.md`](../../skills/rigs/SKILL.md) directly.
@@ -201,11 +203,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.11/scripts/install.sh | sh -s -- --dry-run
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.7.13/scripts/install.sh | sh -s -- --dry-run
```
The same command without `--dry-run`,
`curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.7.11/scripts/install.sh | sh`, installs the
`curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.7.13/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
+4 -4
View File
@@ -12,13 +12,13 @@ In your project folder, add OpenRig's `rigs` skill to the agent you use:
```sh
# Claude Code
npx skills add https://github.com/mvschwarz/openrig/tree/<release-tag>/skills/rigs --skill rigs --agent claude-code
npx skills add https://github.com/mvschwarz/openrig/tree/v0.7.13/skills/rigs --skill rigs --agent claude-code
# Codex
npx skills add https://github.com/mvschwarz/openrig/tree/<release-tag>/skills/rigs --skill rigs --agent codex
npx skills add https://github.com/mvschwarz/openrig/tree/v0.7.13/skills/rigs --skill rigs --agent codex
```
For a new install, use the latest release's tag, for example `v0.7.11`. 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
These use this release's tag, for a new install. If OpenRig is already installed, replace the tag after `tree/` with
the one that matches `rig --version` (`v` and its version number), 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.
+708 -178
View File
@@ -1,94 +1,486 @@
# What changed in OpenRig 0.7.1
# What changed in OpenRig 0.7.13
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:
`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
after an upgrade it can still hold the previous version's note.
This note is for an agent on an install that was just upgraded to 0.7.13.
OpenRig 0.7.13 writes a person a note after they answer a runner's permission
request and wakes the waiting runner on the decision. It tells a receiving agent
what an answer typed at the machine means and how to ask the person back.
`rig daemon start` tells the setup agent to offer to register the person when nobody is registered,
and a usage-limited Claude seat waits for the reset its message states. It adds
three database migrations. If you upgraded from 0.7.11 or earlier, also read
"What changed in OpenRig 0.7.12" below, and so on back. For the full capability
map, read `rig context get onboarding-width/public-what-you-can-do.md`. After the
upgraded daemon starts, `rig context get reference/whats-new.md` describes this
version. Without a running daemon, read the packaged
`daemon/docs/reference/whats-new.md`.
## 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.
- **Back up the database, then restart the daemon.** Three migrations run on the
daemon's first start: 160 and 161 (network bindings and receipts, for the
experimental hub connector) and 162 (indexes for current-session reads). If
`$OPENRIG_DB` isn't backed up yet: `rig daemon stop` (seats keep running, so
don't use `rig down`), copy that file (`rig config get db.path` shows it),
then `rig daemon start`. Going back to 0.7.12 after these migrations isn't
established.
- **The plugins:** openrig-core moves from 0.1.28 to 0.1.29 (its activity relay
and refocus hooks changed). The `openrig` plugin's manifests now carry the
CLI's version, 0.7.13. A Codex session kept running across the upgrade can ask
for hook approval until it's relaunched.
## New things you can do
## Answers, setup and seats
- **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.
- **A runner's permission answer gets a note back to the person:** who decides
it and in what state, or that it's kept and the tool hasn't run. A runner
already waiting sees the decision at once. If a person asks what happened to
an answer, read that note before asking them to answer again. If it says the
answer couldn't be passed on, follow its retry instruction or use the
`rig seat decide-permission` command it names.
([#3001](https://github.com/mvschwarz/openrig/pull/3001))
- **If you receive a person's answer**, the text you read now says what an answer
typed at this machine's terminal or TUI means (recorded as `human@host`): act
on a clear one with the request's own decision command, and don't ask them to
confirm. When it's unclear, ask them back with a new ask to them
(`rig queue create --destination <person> …`), never to `human@host`. When the
default receiving agent asks back, the question reaches the person's Feed and
their reply decides. Closing a runner's request without deciding permits nothing.
([#3030](https://github.com/mvschwarz/openrig/pull/3030))
- **Setup:** when the person registry can be read and holds nobody,
`rig daemon start` ends by telling the setup agent to offer to register the
person, with the command to run only on their yes; pass it on. Asking to be
reachable registers the person as the default directly. In fresh-install
tests the setup agent passed the offer on in 5 of 6 installs, and a no
registered nothing. `rig up`, `rig start` and `rig context` start the daemon
without printing it. A person who talks to the
kernel operator first isn't offered registration in this release: offer
`rig gateway human add` yourself. ([#3028](https://github.com/mvschwarz/openrig/pull/3028))
- **A first team's permissions:** in the change's own tests, before launch, the
kernel operator names the commands the team will ask for, reuses a choice the
person made, or makes one project-scoped offer, applied on their yes. Don't
tell the person it means fewer asks: that hasn't been shown. Chained commands
and OpenRig's own lifecycle commands still ask on Claude seats. ([#3029](https://github.com/mvschwarz/openrig/pull/3029))
- **A usage-limited Claude seat** whose limit message states a reset time parks
its pending work until then. Don't release it on a timer.
([#2917](https://github.com/mvschwarz/openrig/pull/2917))
## Behaviour that changed
## Other changes to act on
- **Handover:** a handover whose successor launched but isn't ready says it may
be running. Look at the pane (`rig capture '<seat>'`) before another handover
or a fresh launch, either of which ends it. A handover also cleans up the
retiring occupant's own claims and jobs. ([#3003](https://github.com/mvschwarz/openrig/pull/3003), [#3024](https://github.com/mvschwarz/openrig/pull/3024))
- **Adopted sessions:** release one with `rig unclaim <session>`, then end its
process and its tmux session. Closing its viewing window only detaches it. A
fresh launch after that ended the server's last session reopens the server.
([#2996](https://github.com/mvschwarz/openrig/pull/2996), [#3006](https://github.com/mvschwarz/openrig/pull/3006), [#3009](https://github.com/mvschwarz/openrig/pull/3009))
- **Connected assistants** show a check-in status against the cadence their
roster entry states (`check_in_minutes` or `check_in_on_request: true`), as a
Check-in line in `rig roster show` and `find`. It's a status, not a delivery
gate, and a cadence is the person's statement, not proof the assistant ran.
([#3023](https://github.com/mvschwarz/openrig/pull/3023))
- **Passive SSH host status reads `unknown`** now that routine listings don't
probe SSH hosts. Use `rig host doctor` to check one. ([#2979](https://github.com/mvschwarz/openrig/pull/2979))
- **Guidance files:** cleanup removes redundant recognized copies of a managed
block and keeps distinct edited copies. A saved write record lets OpenRig keep
a person's edits; on a fresh start, a differing block with no write record is
refreshed and named, while an exact resume or restore keeps it. A recognized
block whose marker pair is incomplete is named
(`guidance_block_markers_damaged`) and left as it is; repair the marker by
hand. If both marker words were changed, it can read as no block. ([#3020](https://github.com/mvschwarz/openrig/pull/3020))
- **Delivery reads truer:** Claude's auto-update failure footers (one clipped form
too) no longer hold a send, an unrecognised wake result reads unknown, and an
ordinary one-time park wake is kept and retried while its park is
current and the failed attempt typed nothing (an unknown effect needs checking;
repeating waits and usage-limit expiry keep their own lifecycle). ([#2948](https://github.com/mvschwarz/openrig/pull/2948), [#3016](https://github.com/mvschwarz/openrig/pull/3016), [#3011](https://github.com/mvschwarz/openrig/pull/3011), [#3038](https://github.com/mvschwarz/openrig/pull/3038))
- **The TUI:** for a quiet seat the daemon explicitly reads as unknown, the
list, explorer and agent-detail status rows show unknown. Screen motion still
shows active, a daemon that serves no activity keeps the screen fallback, and
the topology graph is unchanged. Feed times use `ui.timezone`. ([#3012](https://github.com/mvschwarz/openrig/pull/3012), [#3022](https://github.com/mvschwarz/openrig/pull/3022))
- **Experimental, at the person's own risk:** `rig network` connects one local
seat to a hub they already have. The connector uses the MCP SDK, which the
installed package already included in 0.7.12. The daemon starts it even with
no binding.
([#2993](https://github.com/mvschwarz/openrig/pull/2993))
## Limits to keep in view
- **Not in this release:** a Codex snapshot restore or `rig up --existing` can
write OpenRig's managed guidance into a tracked `AGENTS.md`, leaving the
worktree modified; check `git status` after either operation.
- **Not in this release:** the kernel operator's own registration offer, as above
([#3041](https://github.com/mvschwarz/openrig/pull/3041)). While nobody is registered, `rig daemon start` repeats its offer
even after a no; nothing is registered without a yes.
- **Speed and memory:** On one performance host, whole `rig queue create`
invocations had a median about 10.4% slower than 0.7.12 (about +29 ms). Send
latency stayed within the comparison's unchanged range. The cause remains
unidentified. The standard idle-memory comparison was inconclusive. A post-hoc
analysis of the same six runs found 7.9–8.6 MiB (4.2–5.3%) higher daemon RSS
across three matched idle windows, using the median of three arm medians per
version. The cause and steady-state behavior remain unestablished.
- **Draft-aware delivery ([#3076](https://github.com/mvschwarz/openrig/issues/3076)):** an automatic OpenRig notice can be left beside a
draft started during delivery. This also concerns notices admitted by
openrig-urgent and urgent-only modes. In the reproduced 0.7.12 Claude Code and
Codex cases, the person's draft remained intact and no Enter was sent, but
OpenRig's text stayed in the input. The guard and paste path are unchanged in
this cut; a native 0.7.13 reproduction has not run.
- **Native model pickers:** with a /model picker open, an ordinary send can act
on the picker instead of delivering the message. In 0.7.12 tests it confirmed
Claude Code's already-selected default and advanced Codex's model selection;
neither message reached the model. Close or deliberately resolve the picker
before ordinary delivery. The native 0.7.13 case has not run.
- **Codex hook review after an upgrade:** in one test whose Codex home already
held earlier hook approvals, `rig up --existing` stopped for hook review in
each Codex pane; approving the hooks resumed all three conversations. A
separate test of the same upgrade on a fresh Codex home, on another host,
restored without review. The cause of the difference is not established.
- **A first team with Codex installed but signed out:** a Claude person's starter
team includes a Codex reviewer that waits for a Codex sign-in, and the person
isn't told beforehand. If Codex is installed, have them sign in first.
- **The hub connector isn't inert:** it starts, sweeps leftover credential
folders and schedules local rounds even with no binding; only the hub pass is
absent. Don't describe it as off. ([#2993](https://github.com/mvschwarz/openrig/pull/2993))
- **The recorder:** a queued begin record can be lost before the durable append,
and a stalled worker has no acknowledgement timeout. ([#3019](https://github.com/mvschwarz/openrig/pull/3019))
- **Proof reads** are much more responsive, but still pause briefly, and a whole
read takes slightly longer. It isn't a hard latency bound or an atomic snapshot. ([#2970](https://github.com/mvschwarz/openrig/pull/2970))
- **Usage-limit parking** was tested with `claude -p`'s message; if an
interactive seat's report lacks it, the seat is retried as before. ([#2917](https://github.com/mvschwarz/openrig/pull/2917))
- **Handover:** a context delivery failure, and a Codex launch failure after an
undismissed update prompt, can still say "retry" while a successor runs.
([#3003](https://github.com/mvschwarz/openrig/pull/3003))
- **Answers:** an ask-back can stop at Claude Code's own permission prompt,
which the person doesn't see. A receiving agent the person chose can still
decline to act on a clear answer. A pairing requester's description is quoted
for the receiving agent but not yet in the request's summary or notices.
([#3030](https://github.com/mvschwarz/openrig/pull/3030))
- **0.7.12's limits below** still apply, except that [#2970](https://github.com/mvschwarz/openrig/pull/2970) and [#2948](https://github.com/mvschwarz/openrig/pull/2948)
are now in this release, runner answers are confirmed and reach a waiting
runner at once ([#3001](https://github.com/mvschwarz/openrig/pull/3001)), and `rig seat stop` no longer suggests `rig down`
for an adopted session ([#3006](https://github.com/mvschwarz/openrig/pull/3006)). 0.7.12's not-run list was for that release.
## What changed in OpenRig 0.7.12
This note is for an agent on an install that was just upgraded to 0.7.12.
OpenRig 0.7.12 routes a person's typed, clicked or qualified answers with the
question to the configured receiving agent or the kernel operator to decide.
Answers wait when no receiver is available. Setup's guidance asks the agent to
offer to register the person, which it didn't reliably do in testing. `rig down` stops
only terminals it can show belong to the seat. It adds five database
migrations. If you upgraded from 0.7.10 or earlier, also read "What changed in
OpenRig 0.7.11" below, and so on back. For the full capability map, read
`rig context get onboarding-width/public-what-you-can-do.md`. After the upgraded
daemon starts, `rig context get reference/whats-new.md` describes this version.
Without a running daemon, read the packaged `daemon/docs/reference/whats-new.md`.
### After the upgrade
- **Back up the database, then restart the daemon.** Five migrations run on the
daemon's first start: 155, 156 and 157 (queue erasure and its batches), 158
(queue inbox check-ins) and 159 (an index for handed-off rows). If
`$OPENRIG_DB` isn't backed up yet, copy that file (`rig config get db.path`
shows it) with the daemon stopped, then `rig daemon start`. Going back to
0.7.11 after these migrations isn't established.
- **New settings:** `retention.closed_content_days` (`0`, keeps closed work's
content), `retention.closed_metadata_days` (`0`) and `retention.erasure_ledger`
(empty, no ledger). Erasing closed work is opt-in. `rig config` shows each with
its source.
- **The openrig-core plugin moves from 0.1.27 to 0.1.28.** Its activity relay
and refocus hooks changed (with a new `refocus-state.cjs`), as did the
agent-operated-software, claude-compaction-restore, openrig-user,
retiring-and-inheriting-a-seat, seat-continuity-and-handover and
session-compaction-and-restore skills. A Codex session kept running across the
upgrade can ask for hook approval until it's relaunched.
- **`rig down` now leaves some terminals running.** It stops only a tmux session
carrying the seat's own `OPENRIG_NODE_ID`, on the server and session it read.
For a terminal OpenRig didn't create, or a mismarked or replaced one, it exits
2 and names the terminal and how to stop it. A seat joined with `rig attach` as
an external CLI is listed as not stopped, which alone doesn't make it exit 2.
Tell the person, and stop those by hand if they're theirs to stop.
([#2962](https://github.com/mvschwarz/openrig/pull/2962))
### Answers from a person reach an agent
- 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; a direct decision uses the request's own command (`rig host approve`
or `rig host deny`, `rig seat decide-permission`). An ordinary close isn't
permission, and kept words aren't a default permit. ([#2923](https://github.com/mvschwarz/openrig/pull/2923))
- Pairing answers go to the receiving agent, and a person can decide directly in
the TUI's pairing settings. ([#2931](https://github.com/mvschwarz/openrig/pull/2931), [#2935](https://github.com/mvschwarz/openrig/pull/2935))
- A runner's permission answer goes to the receiving agent, which decides while
the runner waits, so a qualified answer ("only if it's the test file") is
read before anything acts. The answer is kept and an explicit decision works,
but the runner's confirmation updates to the person aren't written in this
release: no Feed confirmation, receiver-state notice or immediate wake. The
decision reaches the runner at its next read (up to about 21 seconds in
testing). Decide one directly with `rig seat decide-permission`. ([#2934](https://github.com/mvschwarz/openrig/pull/2934))
- **What to do:** design for an agent to read the person's answer with its
question and decide. If no receiver is available, say the answer is waiting;
don't describe it as read or decided. Pairing settings in the TUI also offer
the direct decision described above.
- **A chosen receiver** (`agents.operator_session`) in an explicit or auto
permission mode gets no OpenRig allowance for `rig host approve` or `deny`, so
Claude's review can refuse them; a kernel receiver in auto mode is included.
The default kernel with the default policy passed at its tested scope.
- **A receiver that was stopped and then started** may not act on an answer
that waited for it. When it needed to ask back in testing, the question
appeared in its own conversation, not in the Feed or Steering.
### Other changes to act on
- **Setup's guidance** asks the agent to offer to register the person; in
testing it didn't reliably make the offer (0 of 5 runs). Registering works
when the person asks for it (`rig gateway human add`): nothing is registered
without their yes, an existing default is kept, and no person is chosen
automatically. A team started from the person's own assistant fits their
logins, with a review before commit. ([#2924](https://github.com/mvschwarz/openrig/pull/2924), [#2905](https://github.com/mvschwarz/openrig/pull/2905))
- **Harnesses:** `protocol: pi-rpc`, launch wrappers in presets, and Pi
cross-runtime switches. ([#2870](https://github.com/mvschwarz/openrig/pull/2870), [#2759](https://github.com/mvschwarz/openrig/pull/2759), [#2669](https://github.com/mvschwarz/openrig/pull/2669))
- **A relay connector** that can't accept incoming connections can pull
(`OPENRIG_RELAY_MODE=pull` in the relay secrets file); push stays the default.
([#2844](https://github.com/mvschwarz/openrig/pull/2844))
- **herdr-app:** `rig terminal open <view> --provider herdr-app` opens a view in
the herdr-app window. Following isn't claimed. ([#2744](https://github.com/mvschwarz/openrig/pull/2744))
- **Queue erasure** for closed-work retention and account deletion, off by
default. ([#2837](https://github.com/mvschwarz/openrig/pull/2837), [#2843](https://github.com/mvschwarz/openrig/pull/2843))
- **Delivery evidence:** each send records one `transport.delivery_evidence`
event. Read it as what was known about a delivery, not proof the agent read
it. ([#2937](https://github.com/mvschwarz/openrig/pull/2937), [#2943](https://github.com/mvschwarz/openrig/pull/2943))
- **Seat self-knowledge:** managed guidance points to skills, help and project
context; `rig seat status` shows when guidance was written relative to the session's recorded moments, and what the
refocus hook recorded. ([#2918](https://github.com/mvschwarz/openrig/pull/2918), [#2920](https://github.com/mvschwarz/openrig/pull/2920), [#2916](https://github.com/mvschwarz/openrig/pull/2916))
- **Codex "Hooks need review" with smol-toml 1.9** is fixed; stop working around
it by hand. ([#2804](https://github.com/mvschwarz/openrig/pull/2804))
- **A start reservation left after a reboot** is archived by `rig daemon start`;
don't clear it by hand. ([#2915](https://github.com/mvschwarz/openrig/pull/2915))
### Limits to keep in view
- **Not in this release:** daemon pauses of up to about a second while reading
proof on large mission trees ([#2970](https://github.com/mvschwarz/openrig/pull/2970)), and a delivery stall to a Claude seat
showing Claude's auto-update failure footer ([#2948](https://github.com/mvschwarz/openrig/pull/2948)). Don't tell a person
either is fixed.
- **`rig down`** keeps no stored host or boot identity, doesn't guard against
another program running as the person, and a daemon restart between losing the
tmux server and the stop wasn't exercised. ([#2962](https://github.com/mvschwarz/openrig/pull/2962))
- **Codex working counter:** a capture that doesn't name its pane keeps the old
comparison, and a restart that keeps the pane and its process id isn't seen.
([#2980](https://github.com/mvschwarz/openrig/pull/2980))
- **Custom blocker IDs** explain the wait but give no event wake; the timer
remains. ([#2983](https://github.com/mvschwarz/openrig/pull/2983))
- **Runner permission answers** were run end to end with a real receiving agent
and the example runner, whose requesting agent was a stand-in; a model-driven
runner waiting on a person's answer hasn't been run. ([#2934](https://github.com/mvschwarz/openrig/pull/2934))
- **An already-running tmux server** keeps its old environment, daemon
credentials included, until it restarts. ([#2850](https://github.com/mvschwarz/openrig/pull/2850))
- **Delivery:** events are best effort, so a missing event isn't proof nothing
was sent. A footer row OpenRig doesn't recognize can still hold a delivery ([#2925](https://github.com/mvschwarz/openrig/issues/2925)),
and a held message's full envelope can stay held; clearing a draft doesn't
deliver it ([#2515](https://github.com/mvschwarz/openrig/pull/2515)). With unreadable input, `--dangerously-interact` pastes
with a warning and doesn't press Enter ([#2800](https://github.com/mvschwarz/openrig/pull/2800)).
- **Not run for this release** (not run, not passed): the two-seat Codex journey
with `AGENTS.md` restore; Codex account-home, upgrade and continuity checks;
the OpenShell worker's second report; Pi model switches on real providers; ACP
in a desktop app; Slack directory paging; some Slack setup cases; native
checks of [#2786](https://github.com/mvschwarz/openrig/pull/2786), [#2799](https://github.com/mvschwarz/openrig/pull/2799), [#2807](https://github.com/mvschwarz/openrig/pull/2807) and [#2813](https://github.com/mvschwarz/openrig/pull/2813) ([#2947](https://github.com/mvschwarz/openrig/pull/2947) partly); a button-and-words
answer, a non-pairing ask with an explicit owner, Steering's Approve page, and
the answer and setup checks on a default model; `--wait-for-kernel` ([#2888](https://github.com/mvschwarz/openrig/pull/2888)),
[#2800](https://github.com/mvschwarz/openrig/pull/2800)'s installed effect, and [#2720](https://github.com/mvschwarz/openrig/issues/2720) beyond one platform. Don't tell a person
these work.
- **0.7.11's limits below** still apply, except Codex hook setup with smol-toml
1.9.x ([#2720](https://github.com/mvschwarz/openrig/issues/2720)), fixed by [#2804](https://github.com/mvschwarz/openrig/pull/2804).
## What changed in OpenRig 0.7.11
This note is for an agent on an install that was just upgraded to 0.7.11.
OpenRig 0.7.11 sends ordinary messages and work notices into a person's typed
draft by default instead of refusing them, lets a person reach the team from
their own coding agent (the `openrig` plugin) or an ACP app (`rig acp serve`),
holds a prepared managed compaction until the seat is idle, and clears a
restore that stopped at a prompt. On Linux, a daemon run as a systemd user
service keeps its seats when its unit restarts. It adds five database
migrations. On OpenShell 0.1.6 the worker's maintained cleanup now works, but
the worker still isn't end to end. If you upgraded
from 0.7.9 or earlier, also read "What changed in OpenRig 0.7.10" below, and
from 0.7.8 or earlier, "What changed in OpenRig 0.7.9" too. For the full
capability map, read `rig context get onboarding-width/public-what-you-can-do.md`.
After the upgraded daemon starts, `rig context get reference/whats-new.md`
describes this version. Without a running daemon, read the packaged
`daemon/docs/reference/whats-new.md`; `$OPENRIG_HOME/reference/whats-new.md` can
still be the previous copy until startup.
### After the upgrade
- **Back up the database, then restart the daemon.** Five migrations run on
the daemon's first start: 150 (node launch wrapper), 151 (Pi account
switches), 152 (workflow instance spec), 153 (events retention marks) and 154
(workflow instance root objective). If `$OPENRIG_DB` isn't backed up yet,
copy that file (`rig config get db.path` shows it) with the daemon stopped,
then `rig daemon start`. Going back to 0.7.10 after these migrations isn't
established.
- **New settings:** `transport.draft_delivery` (`deliver`), `acp.to` (empty),
`daemon.seat_poll_interval_ms` (1000) and `retention.events_days` (`0`, keeps
every event). `rig config` shows each with its source.
- **The openrig-core plugin moves from 0.1.26 to 0.1.27.**
Its activity relay and refocus hooks changed, as did the refocusing,
openrig-user and openrig-skills skills. Managed refresh preserves replaced
files under `$OPENRIG_HOME/backups/managed-refresh/<id>/`; reapply local edits
you still need from the preserved copy.
- **Linux, with the daemon 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 them down.
- **Tell the person sends now join their drafts** (below). To keep the refusal,
run `rig config set transport.draft_delivery refuse`; it applies from the
next send, with no restart.
- **Pi seats:** a Pi seat that declares an absolute `PI_CODING_AGENT_DIR` in its
`env:` now uses it as its account home and needs a readable `auth.json`
there, or the launch stops. Prepare one, or remove the declaration to keep
the managed seat login. Ask the person before changing their spec.
- **herdr-core terminals:** new starts no longer inherit `HC_SCOPE`,
`HC_TERMINAL_ID` or `HC_TERMINAL_SOCKET`; a daemon or tmux server already
running with them keeps them until it's restarted.
- **Claude seats that load openrig-core themselves** lose OpenRig's unchanged
copies of its skills at their next launch, so each skill loads once; the
launch result warns with the copies removed or kept.
### Sends and drafts
- **Under `deliver` (the default),** an ordinary `rig 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 as one prompt. The result says whether
submission was confirmed and, when OpenRig saw the draft, that it joined it.
An unset, unreadable or invalid value follows `deliver`.
- **Still refused or held under either value:** menus, permission prompts, a
seat's typing guard (`draft-aware`, `hold`), managed compaction's sends and
`--wait-for-idle`.
- **Under `refuse`,** a send is refused, and a work notice retried once the
prompt is clear, where OpenRig detects the draft. Claude Code and Codex sends
now also read the input box before pasting, so a draft only the box shows
refuses too (`target_needs_input` / `prompt_draft`).
- **The draft-aware typing guard** reads a Claude composer with a statusLine or
the background task panel, and Claude Code 2.1.319's bare
`✔ Update installed · Restart to update` row in a narrow pane, so an empty box
gets the wake instead of `draft_input_unknown`.
- **Held messages coalesce:** a sender's newest held message at a seat retires
its earlier ones. Read them with `rig seat held-messages <seat>` (each with
`--id <id>`); an older backlog clears at that sender's next held message or
with `rig seat retire-held-message`.
- **Stopped seats aren't woken at each daemon start:** their rows stay owed, and
the start-up log says `waiting=N (not replayed: …)`. That isn't delivery.
### Compaction, restore and handover
- **A prepared managed compaction is held, not re-requested.** When the map is
complete but `/compact` couldn't go in, the attempt stays `waiting`, marked
`prepared`, and sends `/compact` at the next idle moment with an empty box.
`rig compact <seat> --state` shows it; a manual `rig compact` reads
`already_in_progress`; `--cancel` disarms it. It ends on a context dip, a
conversation change, a stale map (`prepared_map_stale`: 15 points of growth or
2 hours) or a map that stops reading ready.
- **The final `/compact` waits out the preparation's own fresh activity** (up
to about 23 s, against 9 s), so an idle seat that ran out of context compacts
instead of being refused; a busy seat can wait up to about 14 s longer.
- **A queue wake refused at a prompt** no longer goes in right after
"Compacted" while the compaction still owes its turn boundary and restore
request; it goes in at the next idle moment after that step clears.
- **A full restore stopped at a prompt clears itself** once the seat runs the
conversation it was restoring. If a seat still reads `attention_required`, run
`rig seat clear-attention <seat>`, with `--reason` after a partial restore or
a community harness's assisted startup. `proof_superseded` means the restore
changed mid-check.
- **A Codex helper inside a Claude seat** no longer takes the seat's resume
token (`transcript_not_this_session`).
- **A Claude rebuild handover may report its priming packet unconfirmed.**
Submit the existing packet once, only if it's still staged. Never resend it
blindly or rerun the handover.
- **`on_restore: follow_source`** on a spec's `resources.skills[]` entry
refreshes that skill from its source on restore; `keep_saved` is the default.
### Working with the team from outside
- **The `openrig` plugin** lets a person use their own Claude Code or Codex
with their local team: hand it work, follow it, answer the team's questions
in their own words, and read the result. Install it from the package
(`claude plugin marketplace add "$(npm root -g)/@openrig/cli/daemon/assets/plugins/openrig"`,
then `claude plugin install openrig@openrig-app`) or from this repository on
GitHub. Everyone using the app on a machine acts as the seat it names.
- **VS Code, Copilot CLI and Cursor** start its server with no seat: add your
own `rig mcp serve --front-door` server with `OPENRIG_SESSION_NAME` set and
turn the plugin's off. A seatless app can create tasks, send and post as
`unknown-mcp-<8 hex>`, but can't claim, update, hand off or answer.
- **ACP apps:** `rig acp serve --to <member@rig>` (or the `acp.to` setting)
makes the team an agent in an app that launches a custom ACP agent, such as
Zed or T3 Code. Nothing runs until an app starts it, and it uses the daemon
`rig` uses. A question left unanswered in the app stays open in the TUI and
Slack. The `@openrig/acp` launcher is packed beside the CLI at the same
version. See `docs/reference/acp-agents.md`.
- **Assistants through a grant service** are experimental, unsupported and off
by default: they need your own internet-reachable `rig mcp serve --http
--grant-service <url>` and an outside grant service. A registered person can
answer the team's questions from one, and `--task-destination <member@rig>`
names where its tasks go (`docs/reference/hosted-members.md`).
- **The `relay` gateway connector** is off unless you add a relay binding. It
hands questions and updates to a bridge the operator runs on loopback;
"Accepted by bridge" isn't delivery (`docs/reference/gateway-relay.md`).
### OpenShell workers
On OpenShell 0.1.6 the maintained cleanup (`delete-owned`) now works for a
custom image, and recreate and an exact resume passed in our native run. A
restored guest still receives its startup text again, so strict recall after a
restore isn't met, and the worker isn't end to end. The CA fix holds on 0.1.6.
"Never grant the guest access to the daemon's main API
port (normally 7433)."
### Other changes to act on
- Denying or dropping a host pairing request in Steering now gives the requesting machine no access; in 0.7.9 and 0.7.10, that action could return the daemon access token. ([#2884](https://github.com/mvschwarz/openrig/pull/2884))
- **Pairing answers now reach the target's kernel operator.** On a 0.7.11 target with a receiving kernel operator, typed words and Approve or Deny choices in the TUI, Steering or Slack are replies for that agent to read. Receiving a reply neither grants nor denies access. The operator acts on clear intent with `rig host approve <code>` or `rig host deny <code>` and asks back when the answer is unclear. The commands also work from a plain terminal on the target; they use its operator bearer (`OPENRIG_AUTH_BEARER_TOKEN`, or `--bearer <token>`). ([#2900](https://github.com/mvschwarz/openrig/pull/2900))
- **An Approve click on an operator-owned request waits for the operator to act.** A stopped operator keeps ownership; the answer waits in its queue. A stopped or unknown running state is named with the terminal route, without claiming the answer was read. If there is no operator, it cannot receive answers, or OpenRig cannot determine one, the request names that case and uses the agent-free path: Approve and Deny decide directly, and replies lead to another ask rather than denial. File-only replies and the literal `[file reply]` have no words stored on the agent-free ask; they still do not deny it.
- **TUI answers use the daemon's operator bearer when configured.** Ordinary terminal calls keep their separate terminal credential. A missing or wrong action credential leaves the answer unrecorded and shows what to set; this does not weaken the daemon's authentication.
- **Receipt, clarification and outcome are separate steps.** Receipts, agent-free re-asks and outcomes inferred from clicks or closes need the requesting machine to keep polling. An explicit `rig host approve` or `rig host deny` attempts its outcome update directly. An expiry timer closes the ask even if polling stopped; an unanswered expired ask gets no further update. Requests and decisions live in daemon memory, so a restart drops an open request. Approval still must be collected before expiry. This target-side change does not change older targets.
- **Rows on another host:** `rig queue show`, `list`, `transitions`, `update`
and `block` take `--host <id>`; `claim` doesn't, since only the destination
seat on its own host claims. `--host` never follows `rig host select`.
- **A seat's unclaimed backlog:** a seat with no escalation route or delegation
parent gets one `unclaimed-backlog` notice. To route its findings to a
watching seat:
`rig edge add <rig> <root seat's logical id> <watching seat> --kind escalates_to`.
- **Claims read `working`** for up to 60 minutes while a Claude owner has a
live background shell, and 20 while a managed restore is owed.
- **A cross-host handoff that overrides your claim** wakes you with the
successor's id: stop and coordinate with that seat.
- **Code results:** set an `openrig.code-result/v1` manifest as `evidenceRef`;
`rig queue artifact <qitemId>` and `rig_artifact_read` return the commit pair.
- **Workflows:** runs keep their own spec; `rig workflow unregister
<name>[@<version>]` (or `--prune-missing`) removes registered versions;
`rig workflow trace <id> --full` returns the whole trail; `show`, `trace` and
`status` print `objective:`.
- **`rig stream emit` timeouts:** repeat with the same `--id`, or check with
`rig stream list` before emitting again.
- **Launch and setup:** `launch_wrapper` works for local Claude Code, Pi and
Codex seats; `rig provider switch --seat <pi seat> --to-account <name>
--account-home <dir> --reason "<why>"` switches a Pi seat's account (`--dry-run`
first), and a Pi seat with a declared account home starts again; `rig config set` says when
an environment variable masks the saved value.
- **Linux seats:** when the daemon runs as a systemd user service, the seats'
tmux server starts in its own user scope (`openrig-tmux-<id>.scope`), so the
daemon's unit can stop or restart without ending them. Otherwise the server
starts as before, with one log line giving the reason.
- **Writable terminal tiles** attach as in 0.7.10: the screen in use sizes the
seat and text reflows on resize. Read-only tiles keep showing without attaching
or resizing the seat. Web fixed geometry is opt-in through
`terminal.fixed_geometry` (off by default). As in 0.7.10, Enter or Ctrl-C while
the first attach is in flight can close that viewer; the agent keeps running,
so reopen the view. Kept writable tiles from 0.7.8, 0.7.9 or pre-reflow 0.7.11
need a manual refresh: close only the owned viewer and reopen with
`rig terminal open`; for `--follow`, use `--no-follow` first, then open a fresh
view. The agent and conversation are preserved; no automatic migration runs.
([#2868](https://github.com/mvschwarz/openrig/pull/2868), [#2757](https://github.com/mvschwarz/openrig/pull/2757), [#2821](https://github.com/mvschwarz/openrig/pull/2821))
- **A Claude seat launched with `--settings` JSON written with spaces** can be
verified again.
- **`view.changed` is no longer stored,** and `/api/events` no longer sends it.
- **Old history-only events can be pruned, if you choose to.** `retention.events_days` (default `0`, which keeps every
event) turns on a pass in the retention sweep (at daemon start and daily) that deletes `view.changed`,
`snapshot.created`, `watchdog.evaluation_fired` and the `queue.created`, `queue.updated`, `queue.claimed`,
@@ -107,105 +499,243 @@ after an upgrade it can still hold the previous version's note.
- **With pruning on, `rig telemetry events` reports the pruned ranges.** A page that spans pruned events inside the
retained window has a `retained_sequence_gap` for each missing seq range and `coverage.status` `partial` (it used to be
`retained_window`); events pruned from the start of the log show up as `before_retained_floor`.
- **Large fleets:** `daemon.seat_poll_interval_ms` (up to 2000) lowers CPU at
the cost of activity freshness; keep 1000 if tmux is slow.
- **Terminals:** Herdr follow views work on macOS (protocol 22) and open a
snapshot (`follow_unsupported`) where live following isn't supported.
- **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.
### Limits to keep in view
## Output that changed shape
- **OpenShell:** a restored guest gets its startup text again, strict recall
isn't met, and the worker isn't end to end (above).
- **Drafts:** detection isn't complete. Under `refuse`, an unreadable input box
lets the send go ahead; under `deliver`, a result may not mention a draft.
- **A post-compaction step can still hold** when the box reads as typed, under
draft-aware delivery or the typing guard, or after a lost `/compact`. Run
`rig compact <seat> --cancel`, then send a restore request naming the newest
restore map, marker and packet. A refused queue wake now waits for that step,
but recovery at daemon start and a new handoff's wake don't check yet.
- **`keep_saved` skills:** a skill whose source changes between `rig down` and
the restore comes back missing, named in the restore's warnings; an edited seat
copy is kept.
- **Terminal tiles** each run one tmux command a second while showing (8 tiles
used about 6–8% of one core on an Apple Silicon Mac mini).
- **A message held as `draft_input_unknown`** isn't retried, and whether
managed compaction gets past the update banner wasn't retested.
- **Claude provider switch:** the "probe pane returned to a shell" failure in
[#2341](https://github.com/mvschwarz/openrig/issues/2341) isn't shown fixed;
the launcher-script rebuild timeout and `--no-chrome` are fixed.
- **ACP apps** were checked in T3 Code (Beta) 0.1.7 and with a scripted client;
the unanswered-question notice hasn't run in a live app. A cancel stops
waiting; the team's work carries on.
- **The `openrig` plugin** hasn't run in Claude Desktop, the Codex app or
Copilot CLI. **Grant-service assistants** still aren't woken.
- **Claude `launch_wrapper`** hasn't run with zsh, on macOS arm64 or with a real
installed Claude; an alias or shell function named `claude` fails closed.
- **Going back to 0.7.10** isn't established; an older permission hook also
gives named-policy Claude sessions no decision until they're relaunched.
- **The other 0.7.10 limits below still apply:** `rig exec` cancels,
permission requests in seat status, Codex hooks (including
`rig seat restart --keep-conversation` refusing a Codex seat launched with
developer instructions), smol-toml 1.9.x, Slack, Claude Code 2.1.319's auto
mode, Codex snapshot restores and `AGENTS.md`, unretried reminders, SSH host
status, advisories on a native resume, seats handed over before 0.7.9, `rig`
in the TUI's shell after a project-local install, the "Startup prompt still
staged" message, and a partial install from two npm installs at once.
0.7.10's bare-banner and launcher-script limits are fixed, and its OpenShell
limit is replaced by the one above.
- **`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.
---
## What to stop doing
## What changed in OpenRig 0.7.10
- **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.
The changes from 0.7.9 to 0.7.10, published on 2026-11-08, for an install
upgrading from 0.7.9 or earlier. 0.7.10 added `rig exec` for finite runs on
Claude Code or Codex, sent a held post-compaction step after two idle polls that
can't read the input box, left every tmux mode before a delivery, and showed
agent spec advisories at launch. Its OpenShell line below is corrected.
## Known gaps in 0.7.1
### After the upgrade
- **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`.
- **Restart the daemon** to load the new code: `rig daemon stop`, then
`rig daemon start`. This release adds no migrations.
- **The bundled openrig-core plugin goes from 0.1.25 to 0.1.26.** Its Claude
hooks add a `PermissionRequest` hook that reports permission requests to seat
status, and its refocus hook and the refocusing skill's trace script changed.
Managed refresh preserves replaced files under
`$OPENRIG_HOME/backups/managed-refresh/<id>/`; reapply local edits you still
need from the preserved copy.
- **Check agent specs before relaunching seats:** run `rig agent validate <path>`
and read any `agent spec advisory` line. A profile's `uses.<category>` written
as a single value now selects that resource; if the resource pool doesn't hold
it, a member using that profile fails to resolve with "not found in resource
pool". Ask the person before you change their spec.
- **Codex hooks:** a Codex seat kept running across the upgrade can show "Hook
failed — plugin contents changed; hook approval required" until relaunched; in
0.7.9's upgrade test, one seat restarted with OpenRig's managed restart showed
no review afterwards.
- **OpenShell:** rebuild a guest image with this release's `guest.py` before
using it; the CA repair is in that file, which the image carries.
- **Codex tool commands use a non-login shell:** managed Codex seats now pass
Codex `-c allow_login_shell=false`, so plain `rig` works however OpenRig was
installed, with a Codex that supports `allow_login_shell` (checked in Codex's
source at 0.162.1 and 0.166); not yet run with a live Codex seat. Setup that lives only in login or rc files, and shell functions and
aliases, may be missing from tool commands, and a model request for
`login: true` gets Codex's refusal, "login shell is disabled by config". To
defer to Codex's own setting, run `rig config set launch.codex_login_shell
true`; a login file that sets `PATH` outright can then hide `rig`. It applies
at each seat's next launch, and a restart in place keeps the running choice.
([#2613](https://github.com/mvschwarz/openrig/pull/2613))
### Finite runs: `rig exec`
`docs/reference/acp-agents.md` is the rule. Read it before handing a row to
Claude Code or Codex.
- **Install the adapters first:** `@agentclientprotocol/claude-agent-acp`
0.101.0 and `@agentclientprotocol/codex-acp` 2.5.0, as that page shows.
`rig exec harnesses` reports the adapter and native versions it finds.
- **Run:** `rig exec run <row> --harness claude` (or `codex`). `--plan` shows
what would run and starts nothing; `--wait` waits for the outcome. A connector
owns the run, so leaving `--wait` or closing the terminal doesn't stop it.
Running it again returns the row's run instead of sending the task twice;
`--again` starts another turn once that run has ended.
- **Read the outcome** with `rig exec status <runId|row>`. `interrupted` means
the connector died without recording an outcome, so the outcome is unknown. A
`completed` turn is the agent's report, not finished work: check the work
before you close the row. `--wait` exits 0 for `completed`, 2 for any other
outcome and 3 when you stop waiting.
- **Cancel** with `rig exec cancel <runId>`, not `rig acp cancel`. An
acknowledgement isn't a settled shutdown, and it says nothing about further
spend.
- **Usage and cost** the agent reported are on the row's outcome note, for
`rig acp run` too, each with its source; what it didn't report reads unknown.
### Compaction and delivery
- **A held post-compaction step goes in.** After two idle polls in a row that
can't read a seat's input box, the next poll sends the step (the turn
boundary, the restore request or the audit). `rig compact <seat> --state` and
`rig seat status` say it went in over a box OpenRig couldn't read; they never
call that box empty. A draft OpenRig can't recognise in that box may receive
the restore text.
- **Still held:** a box that reads as typed, with or without a suggestion; a
seat whose draft-aware delivery or typing guard holds OpenRig's input; and the
step after a `/compact` whose result was lost. To take over a held restore by
hand, run `rig compact <seat> --cancel`, then send the seat a restore request
naming its newest restore map, its restore marker and its packet. A step
already being pasted can still land.
- **tmux modes:** a send or wake now leaves every tmux mode in a seat's pane,
including a chooser, customize or clock mode a person has open. If a send is
still refused for a tmux mode, the refusal names why leaving failed.
- **A scrolled pane with a stale record:** leaving the mode now goes through the
seat's address, so a stale binding naming the same reused tmux pane, from
another rig for example, no longer makes the send fail with nothing sent.
- **Herdr views kept across an upgrade keep working,** on Linux Herdr 0.9.5 /
protocol 22. A viewer or follow view kept from 0.7.5 through 0.7.9 now counts
as the same attachment when only OpenRig's tile script changed, and moves to
the current command, so the viewer stays confirmed and the 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; writable
viewers opened after the upgrade size their pane. A different session, tmux,
server or read-only setting still holds the view, as before. Checked against
the scripts those releases used, not yet with a live Herdr. It follows
@natefaerber's approach in
[#2467](https://github.com/mvschwarz/openrig/pull/2467). ([#2634](https://github.com/mvschwarz/openrig/pull/2634))
### OpenShell workers
0.7.10 fixes, in the source, the two problems that stopped the OpenShell worker
in 0.7.9, but the worker hasn't run end to end. Don't rely on this path yet. The
guest launcher now passes the CA settings the OpenShell exec supplies
(`NODE_EXTRA_CA_CERTS`, `SSL_CERT_FILE`, `REQUESTS_CA_BUNDLE` and
`CURL_CA_BUNDLE`) to its Claude, and deleting an owned environment reads
Podman's inventory through routes Podman serves, stopping as
`environment_cleanup_unconfirmed` on any other answer. A verified export, a
finished task and an exact restore haven't been shown. If you set one up anyway,
follow `daemon/assets/openshell/README.md` in the installed package, rebuild the
guest image first, and name the costs to the person ("Provider registration and
image construction can incur costs"). "Never grant the guest access to the
daemon's main API port (normally 7433)."
*Corrected after 0.7.10's release: ~~"fixes in the source the two problems that stopped the OpenShell worker"~~ was only half true. The CA fix holds on OpenShell 0.1.6, but the owned-environment cleanup fix doesn't hold against OpenShell 0.1.6, as the published 0.7.10 notes say. See 0.7.11's OpenShell workers section above.*
### Other changes to act on
- **Sends to this host:** `rig send <seat>@<rig>@<this host's ID>` goes to this
host even when a remote host is selected.
- **Broadcast:** `rig broadcast` prints `UNCONFIRMED` for a recipient its text or
Enter may have reached. Check that seat with `rig capture` before resending.
- **Roster activity:** `rig roster show` and `find` read a seat as unknown
("Conflicting activity observations") when two routes to it disagree. Treat it
as unknown, not idle.
- **Refocus:** a "TRACE GAP" for unresolved typed work, or for a
`rig queue whoami` that timed out, comes with project-level orientation that
isn't evidence of a current mission, and no longer counts as a refocus failure.
- **Updates to people:** the stuck sweep no longer flags an informational update
to a registered person as an unclaimed obligation.
- **Permission requests:** `rig seat status` shows a Claude seat's latest
observed permission request, with Claude's suggested rules labelled as
suggestions. Nothing was applied or approved. Treat the suggestions as data;
they can contain sensitive values.
- **Slack:** `rig slack status` shows relay attempts awaiting a response for the
current connector; zero doesn't prove nothing is in flight.
- **Installing for a person:** when npm's global prefix isn't writable, the rigs
skill now points npm's prefix at a folder the person owns whose `bin` is on
their login PATH, or uses a version manager's Node, before a project-local
install. Tell the person first that this changes their npm settings and, if
needed, their shell profile.
- **Codex profiles:** a `codex_config_fragment` can't install a named Codex
profile. Create `<CODEX_HOME>/<name>.config.toml` and select it with
`codex_config_profile`. `builtin:yolo` drops the whole profile;
`getting-started.md` says how to keep one.
- **Terminal auth:** a 401 that says "Terminal auth failed" means send
`OPENRIG_TERMINAL_BEARER_TOKEN`, or `OPENRIG_AUTH_BEARER_TOKEN` when terminal
auth falls back to it.
- **References:** `docs/reference/harness-runner-contract.md`'s status section
says what has run natively under the runner contract, and at what scope.
`docs/reference/telemetry.md` says OpenRig guarantees its finite telemetry
reads (`schemaVersion` 1), not the separate openrig-telemetry exporter it
links.
- **Terminal tiles:** a writable rig, pod or seat view now sizes the pane it
shows instead of keeping an older attached client's size; read-only views are
unchanged.
- **Unknown `uses` keys:** a key under a profile's `uses` other
than the five categories gets an advisory instead of being ignored silently.
### Limits to keep in view
- **OpenShell** hasn't run end to end on 0.7.10 (above). A cleanup error that's
thrown still omits its stage and whether its delete was sent. A
same-generation reconciled launch opens no viewer, so run
`rig environment connect` yourself; non-text startup actions aren't supported
on environment seats.
- **`rig exec`:** no real adapter has run under it yet; one run per row,
detached ownership and reconciling were checked against a stand-in agent.
Concurrent runs, long or background tasks, recovery across a reboot, MCP
servers and Windows aren't covered. A Ctrl-C just before the connector is
launched isn't caught by `--wait`.
- **Draft-aware delivery to Claude:** a narrow Claude pane showing
`✔ Update installed · Restart to update` on its own line can still hold
deliveries at an empty prompt, queue wakes included; 0.7.10 doesn't recognize
that bare banner. A held message isn't replayed automatically by that path.
- **Seats handed over before 0.7.9** keep their adopted origin until a later
launched handover or managed launch records a new session. Until then
`rig seat stop`, `clean` and in-place restart refuse them, and now say why.
Don't use `rig unclaim` to get around it: that ends OpenRig's management of
the seat.
- **Permission requests in seat status** show only the latest one, held in
memory for five minutes and lost on a daemon restart.
- **Agent spec advisories** don't show for a native resume that continues a
saved conversation.
- **The other 0.7.9 limits below still apply:** open updates for a person, Slack,
SSH host status, shared asks, permit records, existing seats, Codex hooks, and
grant-service assistants not being woken. 0.7.9's limits on a restore request
held after compaction, `rig broadcast`'s `FAILED`, what has run under the
runner contract, and Codex seats' `rig: command not found` are fixed or
changed. The 0.7.8 limits below that 0.7.9
didn't fix or change, and the
[0.7.7](https://github.com/mvschwarz/openrig/releases/tag/v0.7.7) and
[0.7.6](https://github.com/mvschwarz/openrig/releases/tag/v0.7.6) limits, still
apply.
---
+5 -5
View File
@@ -1,12 +1,12 @@
{
"name": "openrig",
"version": "0.7.1",
"version": "0.7.13",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openrig",
"version": "0.7.1",
"version": "0.7.13",
"license": "Apache-2.0",
"workspaces": [
"packages/daemon",
@@ -7298,7 +7298,7 @@
},
"packages/cli": {
"name": "@openrig/cli",
"version": "0.7.1",
"version": "0.7.13",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
@@ -7336,7 +7336,7 @@
},
"packages/daemon": {
"name": "@openrig/daemon",
"version": "0.7.1",
"version": "0.7.13",
"license": "Apache-2.0",
"dependencies": {
"@hono/node-server": "^1.13.0",
@@ -7380,7 +7380,7 @@
},
"packages/ui": {
"name": "@openrig/ui",
"version": "0.7.1",
"version": "0.7.13",
"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.13",
"private": true,
"license": "Apache-2.0",
"type": "module",
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@openrig/acp",
"version": "0.7.1",
"version": "0.7.13",
"description": "OpenRig as an agent in ACP apps: starts rig acp serve from the @openrig/cli it pins.",
"type": "module",
"bin": {
@@ -15,7 +15,7 @@
"node": ">=22"
},
"dependencies": {
"@openrig/cli": "0.7.1"
"@openrig/cli": "0.7.13"
},
"license": "Apache-2.0",
"author": {
+2 -2
View File
@@ -1,7 +1,7 @@
{
"id": "openrig",
"name": "OpenRig",
"version": "0.7.1",
"version": "0.7.13",
"description": "Send work to your OpenRig team of agents and follow it through to the result",
"repository": "https://github.com/mvschwarz/openrig",
"website": "https://openrig.dev",
@@ -12,7 +12,7 @@
"license_url": "https://github.com/mvschwarz/openrig/blob/main/LICENSE",
"distribution": {
"npx": {
"package": "@openrig/[email protected]"
"package": "@openrig/[email protected]3"
}
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@openrig/cli",
"version": "0.7.1",
"version": "0.7.13",
"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": [
@@ -1,6 +1,6 @@
{
"name": "openrig",
"version": "0.1.0",
"version": "0.7.13",
"description": "Work with your OpenRig team from your coding agent: hand it work, follow that work, answer its questions and read what it returns.",
"author": {
"name": "Mike Schwarz",
@@ -1,6 +1,6 @@
{
"name": "openrig",
"version": "0.1.0",
"version": "0.7.13",
"description": "Work with your OpenRig team from your coding agent: hand it work, follow that work, answer its questions and read what it returns.",
"author": {
"name": "Mike Schwarz",
@@ -1,6 +1,6 @@
{
"name": "openrig",
"version": "0.1.0",
"version": "0.7.13",
"description": "Work with your OpenRig team from your coding agent: hand it work, follow that work, answer its questions and read what it returns.",
"logo": "assets/logo.svg"
}
@@ -1,7 +1,7 @@
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "openrig",
"version": "0.1.0",
"version": "0.7.13",
"description": "Work with your OpenRig team from your coding agent: hand it work, follow that work, answer its questions and read what it returns.",
"author": {
"name": "Mike Schwarz",
@@ -10,8 +10,8 @@ already does it, or two verbs crossed already answer it. **You cannot look up a
not know exists.** So the point of what follows is not skill. It is recognition: that when a task
lands, something rhymes, and you go check instead of building.
Ninety-two top-level verbs ship (capability canon refreshed through
`capability-delta-v0.7.12`). This marker describes the pack's teaching, not publication or live
Ninety-three top-level verbs ship (capability canon refreshed through
`capability-delta-v0.7.13`). 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`.
@@ -747,7 +747,10 @@ not have to tear one down to change it, and you rarely have to start from nothin
conversation continuity stays unverified. Both refuse while typing protection is on.
- **`rig unclaim` / `rig release`** — stop managing one adopted session, or all of them,
**without killing the process or the agent inside it**. Handing something back to its human is a
first-class move, not an abandonment.
first-class move, not an abandonment. To stop an adopted session after unclaiming it, end its
process and its tmux session; closing only the viewing window detaches it. Since 0.7.13 a fresh
`rig launch` after `rig unclaim` ended the server's last session reopens the server (a released
session that's still running blocks it, as before).
> **Two words that mean different things at different altitudes.** `unclaim` and `release` each
> exist both here — *stop managing a live session* — and in the queue — *put a work row back down*.
@@ -861,7 +864,9 @@ version, from checking the environment to a useful report to the OpenRig team.
effectful handover path.** Both forms perform the operation by default; pass `--dry-run`
to plan without changing the seat. Check the selected source and continuity evidence first. A
seat can be handed over again into its own pane, so a seat left half-handed-over recovers by
running the handover again. A Claude seat started through a `#!` wrapper that runs Claude without
running the handover again. A handover whose successor was launched but not ready says it may be
running: look at the pane before retrying. A handover cleans up the retiring occupant's own claims
and jobs. A Claude seat started through a `#!` wrapper that runs Claude without
`exec`, or through the installer's `~/.local/bin/claude` symlink, rebuilds with `--source
rebuild`; a failed rebuild leaves the resume target on the earlier conversation, so rebuild again
rather than relaunching it fresh.
@@ -1226,6 +1231,9 @@ reaching them is ordinary work rather than an escalation.
see which host you are acting on, and check a registered host is *actually* usable end to end.
`rig host edit <id>` corrects an entry (its id and transport stay fixed), and `rig host remove <id>` deletes
only the registry entry: credential files, the learned identity and the selection stay as they are.
- **`rig network`** — **experimental, unsupported and at your own risk.** It connects one local seat
to a hub you already have. The daemon starts the connector, sweeps leftover credential folders and
schedules local rounds even with no binding, so it isn't inert, and its migrations apply on upgrade.
- **A cross-host queue write that times out reads INDETERMINATE, not failed.** The CLI waits 15
seconds for the daemon's answer, and `rig queue create` with no answer reads the row back once by
its ID. Reconcile by that ID before any retry; don't send the write twice.
@@ -1270,6 +1278,11 @@ reaching them is ordinary work rather than an escalation.
a person can decide directly in the TUI's pairing settings. A relay connector that can't accept
incoming connections can pull instead (`OPENRIG_RELAY_MODE=pull` in the relay secrets file); push
stays the default, and a person's connector binding can be unset.
**Since 0.7.13 a person's runner answer gets a note back:** who decides and in what state, or that
the answer is kept and the tool hasn't run, and a runner waiting on it wakes on the decision. Read
that note before asking the person to answer again. The answer a receiving agent reads says what an
answer typed at the machine's terminal means, to act on a clear one with the request's own decision
command, and how to ask the person back, with a new ask to them, when it's unclear.
- **`rig gateway channel add <id> --display-name <name> --binding
slack:<connectorRef>:<secretsRef>:<channelId>`** — a Slack shared channel as one participant,
`<id>@external` (Slack only). Anyone writing there reaches the team, registered or not. Each row
@@ -1402,7 +1415,8 @@ your circumstances is configuration, and the ones that are not, another agent ca
conversation it is in the middle of. **`provider signals` reports anomalies rather than a
listing** — unbound seats, accounts shared across several seats. A Codex seat showing its
usage-limit banner reads activity `unknown` with reason `usage_limit`, and keeps it while its
screen redraws; `provider signals` can show a provider-event signal for that seat's account that
screen redraws (a banner with a curly apostrophe included); a Claude seat whose usage-limit message
states a reset time is parked until then, instead of being retried every few minutes; `provider signals` can show a provider-event signal for that seat's account that
allows a switch decision. With `provider.usage_windows` on (off by default), `rig provider status`
shows Codex's windows and Claude's 5-hour and weekly windows from the seats' status lines, each
seat's configured account, and with `--all-hosts` or `--hosts <ids>` every registered machine's
@@ -1467,7 +1481,11 @@ your circumstances is configuration, and the ones that are not, another agent ca
(empty, the default, means every signed-in one). `--router-line yes|no` decides whether OpenRig
adds its one line to shared guidance files (`skills.router_line.enabled`).
Setup offers to register the person when none is registered, and a team started from the
person's own assistant fits their own logins, with a review before anything is committed.
person's own assistant fits their own logins, with a review before anything is committed. Since
0.7.13, `rig daemon start` ends with that offer, where the setup agent reads it, when the person
registry can be read and holds nobody. A person who talks to the kernel operator first, with no
other agent setting OpenRig up, isn't offered it yet; `rig gateway human add` always works, and
nobody is registered without their yes.
- **`rig usage series`** — what a seat's token curve has looked like over time: climbing steadily,
reset, or stopped reporting entirely. The last one is a signal, not a gap.
- **`rig usage top`** — which of this machine's seats used the most tokens over a window (`--window
@@ -1564,6 +1582,9 @@ your circumstances is configuration, and the ones that are not, another agent ca
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.
A hosted member's roster entry shows whether it's checking in: its expected cadence and its last
check-in, read as checking in, overdue, not yet checked in or checking in on request, and unknown
when that can't be read. It's a status, never a gate on delivery.
**Internet-facing hosted members are experimental, unsupported, off by default and at your
own risk.** Local assistants can connect locally. Internet access needs your own TLS tunnel or
proxy and a narrowly scoped, revocable token; see `reference/hosted-members.md`. Task terminal
@@ -1653,6 +1674,6 @@ deliberate writing.
**`rig --help`**, then `rig <verb> --help`.
Ninety-two verbs ship, and this page named most of them once. **You will not remember which — you
Ninety-three verbs ship, and this page named most of them once. **You will not remember which — you
are meant to remember only that the list is long enough to be worth reading before you build
anything.** The question is never *how do I write this*; it is **does this already exist**.
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@openrig/daemon",
"version": "0.7.1",
"version": "0.7.13",
"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.13",
"private": true,
"license": "Apache-2.0",
"type": "module",