mirror of
https://github.com/mvschwarz/openrig.git
synced 2026-11-08 08:11:17 -10:00
release: 0.6.11 version and release text (#1253)
Version 0.6.10 to 0.6.11 in package.json, packages/{cli,daemon,ui}/package.json and package-lock.json; the 0.6.11 CHANGELOG section, whats-new note and capability page. Refs #1252.
This commit is contained in:
1 parent
1a73ec57bc
commit
af1b61bf52
8 files changed
+413
-151
No files matched your search
+237
@@ -8,6 +8,243 @@ deprecations, and behavioral changes. Breaking changes are called out explicitly
|
||||
|
||||
---
|
||||
|
||||
## [0.6.11]
|
||||
|
||||
0.6.11 is a fix release about recovery and wasted agent time, most of it from
|
||||
the community. A send that waits for a seat to go idle no longer holds up every
|
||||
other send to that seat, a parked seat isn't woken again for rows that haven't
|
||||
changed, restore stops for a decision instead of starting a seat fresh when an
|
||||
earlier conversation may still be resumable, a Codex seat at its usage limit
|
||||
stays marked as limited while its screen redraws, and on Linux a Codex seat can
|
||||
be restarted in place on the same conversation. It is built from the commit
|
||||
tagged `v0.6.11`. The changes since 0.6.10:
|
||||
|
||||
### Before you upgrade
|
||||
|
||||
- Restart the daemon after upgrading the CLI (`rig daemon stop`, then `rig
|
||||
daemon start`). One migration runs on the first start: `103` adds one column
|
||||
to `sessions`, `intentionally_stopped`, which is 0 for every existing row
|
||||
([#1192](https://github.com/mvschwarz/openrig/pull/1192)). There are no
|
||||
migrations `100` or `102`. openrig-core stays at 0.1.9; two of its files
|
||||
changed ([#1174](https://github.com/mvschwarz/openrig/pull/1174),
|
||||
[#1066](https://github.com/mvschwarz/openrig/pull/1066)).
|
||||
- Expect a restore to stop a seat at `awaiting-decision` and start nothing when
|
||||
the seat wasn't running at the snapshot but an earlier session recorded a
|
||||
resume token, because the token doesn't prove that conversation can still
|
||||
resume. `rig up --existing` and `rig launch` no longer start it fresh, and
|
||||
`rig launch` of such a seat exits 1; the message names the command that
|
||||
starts it fresh on purpose
|
||||
([#1141](https://github.com/mvschwarz/openrig/pull/1141)).
|
||||
- Expect a restore of a rig whose seats are in pods to roll a seat back to
|
||||
`awaiting-decision` as unresumable only when Claude, Codex or Pi reports its
|
||||
conversation missing, starting nothing and leaving no new pane behind. A rig
|
||||
where every seat ends this way reads `partially_restored` instead of
|
||||
`failed`, with exit 1 either way. A Claude that exits to its shell for
|
||||
another reason is reported failed with its pane kept, as in 0.6.10. Restores
|
||||
of rigs without pods keep their earlier handling
|
||||
([#1191](https://github.com/mvschwarz/openrig/pull/1191),
|
||||
[#1218](https://github.com/mvschwarz/openrig/pull/1218)).
|
||||
- Read `outcome: "claimed"` from `rig queue create --verify` for a claimed row
|
||||
whose wake wasn't confirmed, instead of `indeterminate`
|
||||
([#1168](https://github.com/mvschwarz/openrig/pull/1168)).
|
||||
- Expect `rig send --wait-for-idle N` to wait before it takes the seat's
|
||||
delivery lease, so other sends and queue wakes to that seat aren't held
|
||||
behind it. N is now a deadline from the start of the wait, including any time
|
||||
spent waiting for the lease, and a timeout names the wait you asked for
|
||||
([#1103](https://github.com/mvschwarz/openrig/pull/1103),
|
||||
[#1183](https://github.com/mvschwarz/openrig/pull/1183)).
|
||||
- Expect `rig seat launch --fresh --stop` to refuse a seat with a still-live
|
||||
older session before it stops the current agent. `--plan` previews a fresh
|
||||
launch without changing anything and exits 0 even when it would be blocked;
|
||||
`--reason` is required only to execute
|
||||
([#1156](https://github.com/mvschwarz/openrig/pull/1156)).
|
||||
- Expect a seat stopped with `rig seat stop` to be left out of its rig's state,
|
||||
so the rig no longer reads `degraded` for it. `rig ps --nodes --json` carries
|
||||
`intentionallyStopped`, and a rig whose seats were all stopped this way reads
|
||||
`stopped` ([#1192](https://github.com/mvschwarz/openrig/pull/1192)).
|
||||
- Read `rig queue whoami --work-candidates` as up to 50 held and 50 next rows,
|
||||
with `heldTruncated` and `nextTruncated`; `heldAndNextTruncated` now means
|
||||
either list was cut. With `OPENRIG_REFOCUS_WORK_PACKET` on (off by default,
|
||||
as in 0.6.10), the refocus work packet lists held and next work separately,
|
||||
up to 50 each ([#1066](https://github.com/mvschwarz/openrig/pull/1066)).
|
||||
|
||||
### Highlights
|
||||
|
||||
- Restart one Codex seat in place on Linux with `rig seat restart <seat>
|
||||
--keep-conversation --reason "<why>"`: the same pane and conversation, on
|
||||
whatever account its Codex home now holds. It doesn't switch accounts itself.
|
||||
It refuses with nothing stopped unless the seat is a Codex seat OpenRig
|
||||
launched, in a single pane, with a conversation it can prove and unchanged
|
||||
running settings. `--plan` runs every check and stops nothing, and `--verify
|
||||
--expect-account <account>` reports `moved` only when a tool turn has
|
||||
completed in the same conversation since the restart and Codex's status names
|
||||
that account. On macOS, a request that gets as
|
||||
far as reading the running process refuses before stopping the seat
|
||||
([#1196](https://github.com/mvschwarz/openrig/pull/1196),
|
||||
[#1195](https://github.com/mvschwarz/openrig/pull/1195),
|
||||
[#1212](https://github.com/mvschwarz/openrig/pull/1212)).
|
||||
- Stop waking a parked seat whose occupant is known again for the same rows
|
||||
after a wake was delivered, until it updates one of them or one changes
|
||||
state. A failed, refused or unrecorded wake still repeats at the next park,
|
||||
and a new occupant gets its first wake. Delivered means typed into the
|
||||
seat's terminal, not read ([#1142](https://github.com/mvschwarz/openrig/pull/1142)).
|
||||
- Keep a Codex seat at its usage limit `unknown` with reason `usage_limit` while
|
||||
its screen redraws, instead of `running`, with `usage_limit` under REASON in
|
||||
`rig ps --nodes`. It clears when a readable screen shows no banner, or when
|
||||
Codex shows it's working again
|
||||
([#1185](https://github.com/mvschwarz/openrig/pull/1185)).
|
||||
- Report the Slack receipt beside the terminal wake from `rig queue create
|
||||
--verify` for a registered person who is also a seat with a pane, in a
|
||||
`gateway` object (`posted`, `transport-failed`, `never-posted` or
|
||||
`still-pending`); posted isn't read. It waits for that receipt up to the
|
||||
existing 30-second default, even when Slack isn't set up or the row won't be
|
||||
posted, and then reports the Slack side as pending.
|
||||
`GET /api/queue/:qitemId` returns `ownerNotificationLevel`
|
||||
([#1085](https://github.com/mvschwarz/openrig/pull/1085)).
|
||||
- Launch a forked Claude seat (`rig fork`, or `session_source: fork`) with its
|
||||
own session ID, so strict restore and clear-attention can verify it as its
|
||||
own conversation. Forking a Claude seat needs Claude Code 2.0.73 or later,
|
||||
which OpenRig doesn't check; forks launched before this read `mismatch` until
|
||||
they're relaunched ([#1144](https://github.com/mvschwarz/openrig/pull/1144)).
|
||||
|
||||
### Seats and restore
|
||||
|
||||
- Stop passing the launching Claude Code or Herdr session's identity variables,
|
||||
such as `CLAUDECODE`, to seats; if removing them fails, the launch goes ahead
|
||||
with a warning ([#1151](https://github.com/mvschwarz/openrig/pull/1151),
|
||||
finishing [#771](https://github.com/mvschwarz/openrig/pull/771)).
|
||||
- Warn on stderr when `rig up` chose `/` as the launch folder itself
|
||||
([#1150](https://github.com/mvschwarz/openrig/pull/1150), from
|
||||
[#226](https://github.com/mvschwarz/openrig/pull/226)).
|
||||
- Expand a member `cwd` that is `~`, starts with `~/` or uses `$VAR` or
|
||||
`${VAR}`, from the daemon's environment, when the path as written doesn't
|
||||
exist
|
||||
([#1153](https://github.com/mvschwarz/openrig/pull/1153)).
|
||||
- Keep a late readiness result from overwriting a newer launch attempt
|
||||
([#1188](https://github.com/mvschwarz/openrig/pull/1188)).
|
||||
- Show a Codex seat's `runtimeContext.threadId` in `rig whoami --full --json`
|
||||
when its stored conversation ID was verified resumable
|
||||
([#911](https://github.com/mvschwarz/openrig/pull/911)).
|
||||
|
||||
### Sends and queue
|
||||
|
||||
- Confirm enveloped multi-line messages that the agent's screen indents in
|
||||
`rig send --verify` and in queue wakes
|
||||
([#1145](https://github.com/mvschwarz/openrig/pull/1145)).
|
||||
- Read a Claude footer in auto, bypass or plan mode on the last line as idle
|
||||
when no activity hook is reporting
|
||||
([#1179](https://github.com/mvschwarz/openrig/pull/1179)).
|
||||
- Show the provider's own reason for a failed Pi or OMP turn when it gives one
|
||||
([#1181](https://github.com/mvschwarz/openrig/pull/1181)).
|
||||
- Give a `handed-off` closure with no visible successor the same custody
|
||||
advisory and stuck-sweep finding as a `done` closure
|
||||
([#1189](https://github.com/mvschwarz/openrig/pull/1189)).
|
||||
|
||||
### Status and TUI
|
||||
|
||||
- Take a rig's running count and status in `rig ps` from the same set of
|
||||
sessions as `rig ps --nodes`
|
||||
([#1186](https://github.com/mvschwarz/openrig/pull/1186)).
|
||||
- Say in the TUI when a queue sample hit its cap or failed to load: counts read
|
||||
`N+`, a seat missing from the sample shows `?`, and Pulse no longer lists a
|
||||
NEEDS YOU item a second time. The caps count the whole host
|
||||
([#1175](https://github.com/mvschwarz/openrig/pull/1175)).
|
||||
- Fill the TUI Topology table's Q, WORK and NOW columns again on drilled views
|
||||
and on a seat's page ([#1173](https://github.com/mvschwarz/openrig/pull/1173)).
|
||||
|
||||
### Slack and ports
|
||||
|
||||
- Recover a reply sent with "Also send to channel" in the default channel after
|
||||
a connection gap ([#1187](https://github.com/mvschwarz/openrig/pull/1187)).
|
||||
- Refuse a `daemon.port` outside 0–65535 in `rig config set`, and fall back to
|
||||
the file or default with a warning when the environment or `config.json`
|
||||
holds one ([#1140](https://github.com/mvschwarz/openrig/pull/1140)); refuse
|
||||
one in `rig daemon start --port`, with exit 1
|
||||
([#1201](https://github.com/mvschwarz/openrig/pull/1201)).
|
||||
|
||||
### Scope, proof and refused requests
|
||||
|
||||
- Give parallel `rig scope slice create` calls different slice numbers. A
|
||||
number is never reused, and each create leaves a hidden `slices/.nn-NN` claim
|
||||
file ([#1007](https://github.com/mvschwarz/openrig/pull/1007)).
|
||||
- Take `--project <id>` or a `<project>:` scope prefix in `rig proof show` and
|
||||
`rig proof judge`; scope readiness for a project selected in the TUI uses
|
||||
that project's own root
|
||||
([#1149](https://github.com/mvschwarz/openrig/pull/1149), finishing
|
||||
[#136](https://github.com/mvschwarz/openrig/pull/136)).
|
||||
- Return 400 before storing anything from the chat send and topic routes for
|
||||
payloads that used to fail with 500
|
||||
([#1122](https://github.com/mvschwarz/openrig/pull/1122)); answer a
|
||||
fractional or non-numeric generation in `/api/wake-resolve` with the usual
|
||||
"does not exist" reply ([#1129](https://github.com/mvschwarz/openrig/pull/1129));
|
||||
refuse a watchdog `scan_interval_seconds` that can't be turned into a number,
|
||||
such as non-numeric text, a boolean or an empty array
|
||||
([#1131](https://github.com/mvschwarz/openrig/pull/1131)); and match unmanaged
|
||||
agent process names exactly, plus `claude.exe` and names cut to 15 or 16
|
||||
characters ([#1133](https://github.com/mvschwarz/openrig/pull/1133)).
|
||||
|
||||
### Off by default
|
||||
|
||||
- Add `output.compact` (or `OPENRIG_OUTPUT_COMPACT`): the seven queue write
|
||||
commands print a short receipt instead of the whole row, and `--full` prints
|
||||
the whole row. While it's off, their output is unchanged
|
||||
([#1137](https://github.com/mvschwarz/openrig/pull/1137)).
|
||||
- Add `provider.usage_windows` (or `OPENRIG_PROVIDER_USAGE_WINDOWS` in the
|
||||
daemon's environment): `rig provider status --refresh` reads a Codex login's
|
||||
usage windows once. While it's off, `--refresh` says how to turn it on and
|
||||
exits 1 ([#1194](https://github.com/mvschwarz/openrig/pull/1194)).
|
||||
|
||||
### Guidance and docs
|
||||
|
||||
- Split the `rigs` and `openrig-skills` skill descriptions by who is asking: a
|
||||
person in their own session, or an agent inside a rig
|
||||
([#1174](https://github.com/mvschwarz/openrig/pull/1174)).
|
||||
- Add a reference page on keeping a watch for a person with today's queue
|
||||
commands ([#1064](https://github.com/mvschwarz/openrig/pull/1064)); see Known
|
||||
limitations.
|
||||
|
||||
### Dependency and install-script changes
|
||||
|
||||
- No npm dependency or lockfile change beyond OpenRig's own version, the same
|
||||
`postinstall`, and the same `node >=22`.
|
||||
|
||||
### Tests and repository checks
|
||||
|
||||
- Fix daemon and CLI tests that failed on some Linux machines: ext4 inode
|
||||
reuse, dash as `/bin/sh` and a 002 checkout umask
|
||||
([#1148](https://github.com/mvschwarz/openrig/pull/1148), finishing
|
||||
[#83](https://github.com/mvschwarz/openrig/pull/83)); clean up after the
|
||||
pane-isolation tests ([#1169](https://github.com/mvschwarz/openrig/pull/1169));
|
||||
keep the TUI default socket-path test from failing on macOS
|
||||
([#1182](https://github.com/mvschwarz/openrig/pull/1182)); and run the
|
||||
portability report when it's started through a symlinked path
|
||||
([#1109](https://github.com/mvschwarz/openrig/pull/1109)).
|
||||
|
||||
### Known limitations
|
||||
|
||||
- `rig seat restart --keep-conversation` supports Linux only. Its automated
|
||||
tests are hermetic: they don't restart a real Codex seat.
|
||||
- The rig status API (`GET /api/rigs/:id/status`) can call a running rig
|
||||
`blocked` because of one seat that isn't running: it folds a restore forecast
|
||||
(that seat would stop for a decision) into current status. No seat is halted,
|
||||
and `rig status` and the TUI's rig list don't show it for a running rig
|
||||
([#1141](https://github.com/mvschwarz/openrig/pull/1141)).
|
||||
- A Codex seat can keep reading as at its usage limit when an old banner is
|
||||
followed by a submitted prompt and the agent's reply, with no Codex working
|
||||
line and no input line below; it's recorded again every five minutes. The
|
||||
case was constructed from the source and hasn't been seen in a real session
|
||||
([#1185](https://github.com/mvschwarz/openrig/pull/1185)).
|
||||
- The keeping-a-watch page says a timer fires once. When the typing guard holds
|
||||
a one-shot `--wake-after` wake back (it shows as `retained`), that held-back
|
||||
attempt is recorded as the timer's one fire and later wakes aren't, so the
|
||||
timer isn't retired: it can wake the owner again at each interval while the
|
||||
row stays set aside. A row sharing the timer through `--wake-watchdog`, after
|
||||
the original row was handed off or stopped, loses its one wake if that wake
|
||||
is held back.
|
||||
|
||||
Thanks to everyone whose pull requests are in this release; they are listed in
|
||||
the release notes, with how it was tested.
|
||||
|
||||
## [0.6.10]
|
||||
|
||||
0.6.10 is a fix release, most of it from the community. Setup can be told
|
||||
|
||||
+131
-130
@@ -1,7 +1,7 @@
|
||||
# What changed in OpenRig 0.6.10
|
||||
# What changed in OpenRig 0.6.11
|
||||
|
||||
This note is for an agent on an install that was just upgraded to 0.6.10. It lists only what behaves differently from
|
||||
0.6.9 and what to do about it. For everything OpenRig can do, read the capability map:
|
||||
This note is for an agent on an install that was just upgraded to 0.6.11. It lists only what behaves differently from
|
||||
0.6.10 and what to do about it. For everything OpenRig can do, read the capability map:
|
||||
`rig context get onboarding-width/public-what-you-can-do.md`. Each release replaces this file, so
|
||||
`rig context get reference/whats-new.md` describes the installed version once the upgraded daemon is running. Without
|
||||
a running daemon, read `$OPENRIG_HOME/reference/whats-new.md`. The daemon refreshes that copy when it starts, so right
|
||||
@@ -9,158 +9,159 @@ after an upgrade it can still hold the previous version's note.
|
||||
|
||||
## After the upgrade
|
||||
|
||||
- **Restart the daemon** (`rig daemon stop`, then `rig daemon start`). Two migrations run on the first start: `099`
|
||||
adds one partial index to the queue table, and `101` adds four empty columns to `sessions`. Neither changes existing
|
||||
data. There is no migration `100`. The bundled openrig-core plugin goes from 0.1.8 to 0.1.9.
|
||||
- **Restart the daemon** (`rig daemon stop`, then `rig daemon start`). One migration runs on the first start: `103`
|
||||
adds one column to `sessions`, `intentionally_stopped`, which is 0 for every existing row. There are no migrations
|
||||
`100` or `102`. The bundled openrig-core plugin stays at 0.1.9; two of its files changed.
|
||||
- **Two new switches, both off by default:**
|
||||
- `output.compact` (or `OPENRIG_OUTPUT_COMPACT`): the seven queue write commands (`rig queue create`, `claim`,
|
||||
`unclaim`, `update`, `block`, `handoff` and `handoff-and-complete`) print a short receipt instead of the whole
|
||||
row, and `--full` prints the whole row. While it's off their output is unchanged, `--full` is accepted, and
|
||||
`rig config` lists the key.
|
||||
- `provider.usage_windows` (or `OPENRIG_PROVIDER_USAGE_WINDOWS` in the daemon's environment): `rig provider status
|
||||
--refresh` reads a Codex login's usage windows once. While it's off, `--refresh` says how to turn it on and exits 1.
|
||||
|
||||
## Output that changed shape
|
||||
|
||||
- **`rig capture --lines N` is the last N lines,** after blank rows at the bottom are dropped. When earlier lines are
|
||||
cut, stderr says `[rig capture: <session>: N earlier lines not shown; last M shown]`. In `--json`, `lines` is then
|
||||
the count returned, and `requestedLines` and `omittedLines` are new (per seat under `--rig` or `--pod`). For the old
|
||||
output, N history lines plus the whole pane, add `--history-plus-pane`; it keeps the old JSON too, without
|
||||
`requestedLines` or `omittedLines`. Without `--lines`, or with a non-numeric or zero `--lines`, nothing changed. A
|
||||
short capture doesn't prove a seat is idle.
|
||||
- **Compact `rig queue list` rows carry `summary`,** and so do `overdue` and `undelivered`. The fields they leave out
|
||||
(`body`, `evidenceRef`, `humanDetail`, `waiting`, `chainOfRecord`, `replyTo`, `humanQuestions`, `humanAnswers`) are
|
||||
now absent, not `null` or `""`, and `fieldsElided` names them. A filter that tested those fields for null must test
|
||||
for presence. Read a full row with `rig queue show <id> --full --json`.
|
||||
- **`lastNudgeResult` reads `claimed`** on a claimed row whose wake was recorded as `delivered-ack-pending` or
|
||||
`indeterminate:…`. The recorded value is unchanged and shows in the new `lastNudgeWireResult`; unclaiming brings it
|
||||
back. `claimed` is never promoted to `verified`.
|
||||
- **`rig chatroom history` returns the newest messages** when you give neither `--after` nor `--since`, still listed
|
||||
oldest first. Before, a room longer than the limit returned its oldest messages. `--after` and `--since` still page
|
||||
forward from that point, and `rig chatroom wait` is unchanged.
|
||||
- **`rig queue create --verify` reports `outcome: "claimed"`** for a claimed row whose wake wasn't confirmed, instead
|
||||
of `indeterminate`. A claim is pickup, not proof the body was read.
|
||||
- **`rig queue create --verify` to a registered person who is also a seat with a pane reports the Slack side too.**
|
||||
Beside the terminal wake it adds a `gateway` object: `posted` (`connectorAccepted: true`), `transport-failed` or
|
||||
`never-posted` (`connectorAccepted: false`, with the detail), or `still-pending` (`connectorAccepted: null`). The
|
||||
wait is still bounded by the existing 30-second default, and it can use all of it even when Slack isn't set up or the
|
||||
row won't be posted; the Slack side then reads `still-pending`. Posted isn't read, and "This is not a failed handoff"
|
||||
isn't shown when Slack reports a failed delivery. `GET /api/queue/:qitemId` returns `ownerNotificationLevel`, or
|
||||
`null`.
|
||||
- **`rig queue whoami --work-candidates` returns up to 50 held and 50 next rows,** with `heldTruncated` and
|
||||
`nextTruncated`. `heldAndNextTruncated` now means either list was cut. With `OPENRIG_REFOCUS_WORK_PACKET` on (off by
|
||||
default, as in 0.6.10), the refocus work packet lists held and next work separately, up to 50 each.
|
||||
- **`rig ps --nodes --json` carries `intentionallyStopped`,** and `rig ps --nodes` shows `usage_limit` under REASON for a
|
||||
Codex seat at its usage limit.
|
||||
|
||||
## Seats and restore
|
||||
|
||||
- **`rig launch <rigId> <seat>` no longer calls an exited agent running.** When a seat's kept pane is at an idle shell,
|
||||
the launch returns `attention_required` (HTTP 409, exit 1) with `Session alive, agent not running for '<seat>'` and
|
||||
the ways back: resume it with `--snapshot-id <id>` when a snapshot can, `rig seat launch <session> --fresh --stop`, or
|
||||
restart the agent in the pane. The pane and its history are kept. This covers Claude Code, Codex, Pi and OMP seats.
|
||||
- **`rig up <rig> --existing` puts back the guidance `rig down` removed.** Before a resumed seat starts, the missing
|
||||
OpenRig managed blocks go back into the rig's Claude file (`CLAUDE.md`, or `CLAUDE.local.md`) or `AGENTS.md` for
|
||||
Codex. Existing blocks and the person's own text are untouched, and nothing is sent to the conversation. The
|
||||
warnings say `Restore guidance: <seat>: put back missing blocks …`. A seat still missing a block keeps running, its
|
||||
node lists `guidanceGaps`, the rig reads `partially_restored` instead of `fully_restored`, and `rig up` exits 1.
|
||||
- **A resumed Claude seat whose session ID changed can prove.** When Claude continues `--resume T1` under a new ID T2,
|
||||
and the first SessionStart hook from the process OpenRig launched reports `source: "resume"`, OpenRig records T2. The
|
||||
seat restores as `resumed`, `rig seat clear-attention` can clear it, and sends stop warning that the launch identity
|
||||
differs. Resume commands now start with `OPENRIG_RESUME_LAUNCH='<T1>'`. It needs openrig-core 0.1.9; `/clear`, an
|
||||
in-process `/resume`, or a hand-started process still keep the refusal.
|
||||
- **A restore no longer proves a seat from a launcher's token** when the launcher isn't Claude and the Claude it
|
||||
started names a different conversation. That seat reads `mismatch` and the restore returns `attention_required`.
|
||||
- **A seat whose tmux session is confirmed gone reads `detached`,** with activity `unknown` and reason
|
||||
`session_missing`. `rig ps --nodes` shows `tmux session missing; restore or relaunch the seat`, `rig seat status`
|
||||
prints a `Reason:` line, and `--full --json` adds `storedSessionStatus`. The stored status isn't rewritten.
|
||||
- **A Codex seat at its usage limit reads `unknown` with reason `usage_limit`,** not idle, when its screen ends with
|
||||
the `■ You've hit your usage limit` banner. For a seat bound to a known Codex account, `rig provider signals` can show
|
||||
a provider-event signal for that account that allows a switch decision.
|
||||
- **`rig add <rig> …` takes the rig's name as well as its ID.** A name two active rigs share is refused with
|
||||
`rig_ambiguous` and the candidates. `rig launch` still takes an ID only.
|
||||
- **`rig start` says why it skipped an existing kernel:** `Kernel auto-boot skipped (kernel rig already managed).` and,
|
||||
if its seats aren't running, `rig up kernel --existing`.
|
||||
- **A restore no longer starts a seat fresh when an earlier occupant left a resume token.** If a seat wasn't running
|
||||
when the snapshot was taken, but an earlier session recorded a resume token, `rig up --existing` and `rig launch`
|
||||
stop that seat at `awaiting-decision` and start nothing, because the token doesn't prove that conversation can still
|
||||
resume. `rig launch` of such a seat exits 1 where it used to start it fresh. The message names the command that
|
||||
starts it fresh on purpose. See the known gap below for how this shows in the rig status API.
|
||||
- **In a restore of a rig whose seats are in pods, a seat is rolled back as unresumable only when its runtime reports
|
||||
the conversation missing.** When Claude, Codex or Pi reports that, the seat goes back to `awaiting-decision` and
|
||||
nothing starts, instead of a failed launch that left the new pane behind. A rig where every seat ends this way reads
|
||||
`partially_restored` instead of `failed`; the exit code is 1 either way. A Claude that exits to its shell for another
|
||||
reason keeps 0.6.10's result: the seat is reported failed and its pane is kept, so you can read what happened. Restores
|
||||
of rigs without pods keep their earlier handling.
|
||||
- **`rig seat launch --fresh --stop` checks before it stops anything.** A seat with a still-live older session is
|
||||
refused before the current agent is stopped; 0.6.10 stopped it first. `--plan` previews a fresh launch without
|
||||
changing anything and exits 0 even when it would be blocked. `--reason` is required only to execute; leaving it out
|
||||
reports `missing_reason`.
|
||||
- **A seat you stop on purpose no longer makes its rig read `degraded`.** `rig seat stop` records the stop, and `rig ps`
|
||||
and the TUI leave that seat out of the rig's state; running counts still exclude it. A rig whose seats were all
|
||||
stopped this way reads `stopped`.
|
||||
- **Restart one Codex seat in place, on Linux:** `rig seat restart <seat> --keep-conversation --reason "<why>"`
|
||||
restarts it in its own pane on the same conversation, so it starts again on whatever account its Codex home now
|
||||
holds. It doesn't switch accounts itself. Before it stops anything, it checks that the seat is a Codex seat OpenRig
|
||||
launched, in a single pane, with a conversation it can prove, and that relaunching wouldn't change the running
|
||||
settings; any doubt refuses with nothing stopped. `--plan` runs every check and stops nothing.
|
||||
`--verify --expect-account <account>` reports `moved` only when a tool turn has completed in the same conversation
|
||||
since the restart and Codex's status names that account.
|
||||
On macOS, a request that gets as far as reading the running process refuses before stopping the seat, because that
|
||||
reading depends on `/proc`.
|
||||
- **A forked Claude seat launches with its own session ID** (`rig fork`, or `session_source: fork`), so strict restore
|
||||
and clear-attention can verify it as its own conversation. Forking a Claude seat needs Claude Code 2.0.73 or later,
|
||||
which OpenRig doesn't check. Forks launched before this keep reading `mismatch` until they're relaunched.
|
||||
- **Seats no longer inherit the launching Claude Code or Herdr session's identity variables,** such as `CLAUDECODE`.
|
||||
If removing them fails, the launch goes ahead with a warning.
|
||||
- **A member's `cwd` in a rig spec can be `~`, start with `~/`, or use `$VAR` or `${VAR}`,** expanded from the daemon's
|
||||
environment, when the path as written doesn't exist. `rig up` warns on stderr when it chose `/` as the launch folder
|
||||
itself.
|
||||
- **A late readiness result no longer overwrites a newer launch attempt.**
|
||||
|
||||
## Sends and wakes
|
||||
|
||||
- **Codex seats behind a launcher receive sends.** When a seat's `codex` is a launcher that starts Codex as a child,
|
||||
`rig send` and queue wakes used to refuse with "reports sh as the foreground command". The deepest `codex` on one
|
||||
process chain now counts as the seat. Codex processes on separate branches, or naming different conversations, are
|
||||
still refused.
|
||||
- **Claude's faint suggested prompt isn't a person's draft.** A send to an idle Claude seat whose empty input box shows
|
||||
only that suggestion is no longer refused as `prompt_draft`. OpenRig takes one styled capture to tell; real typed or
|
||||
pasted text is still refused, and a suggestion that wraps onto a second row still reads as a draft.
|
||||
- **`rig queue create --verify` reports a seat's wake and claim.** For an agent destination it returns as soon as a
|
||||
wake result or a claim is recorded, bounded at 30 seconds, with `receiptSource: "terminal"`, `outcome`, `wakeResult`
|
||||
and `claim {observed, claimedAt, pickup}`. An unconfirmed receipt is not a failed handoff. See the known gap below
|
||||
for a row the seat already claimed.
|
||||
- **Keep agent-to-agent escalations off the person's Slack (off by default).** `rig config set queue.wake_human_rung
|
||||
explicit-only` (or `OPENRIG_QUEUE_WAKE_HUMAN_RUNG`) stops the wake ladder's last step at `rig view show escalations`
|
||||
unless the row is addressed to a person: an `@external` address or a registered human. A seat stuck at a prompt only
|
||||
a person can clear still reaches one, and an unreadable human registry posts everything. The default, `always`,
|
||||
changes nothing.
|
||||
- **`rig send --wait-for-idle N` waits before it takes the seat's delivery lease,** so other sends and queue wakes to
|
||||
that seat aren't held behind a long wait. N is now a deadline from the start of the wait, including any time spent
|
||||
waiting for the lease. A timeout names the wait you asked for.
|
||||
- **A parked seat whose occupant is known isn't woken again for the same rows after a wake was delivered,** until it
|
||||
updates one of them or one changes state. A failed, refused or unrecorded wake still repeats at the next park, and a
|
||||
new occupant gets its first wake. "Delivered" means the wake was typed into the seat's terminal, not that the agent
|
||||
read it.
|
||||
- **`rig send --verify` confirms enveloped multi-line messages that the agent's screen indents,** and queue wakes use
|
||||
the same check.
|
||||
- **A Claude footer in auto, bypass or plan mode on the last line reads idle** when no activity hook is reporting.
|
||||
- **A failed Pi or OMP turn shows the provider's own reason** when it gives one.
|
||||
- **A `handed-off` closure with no visible successor** gets the same custody advisory and stuck-sweep finding as a
|
||||
`done` closure.
|
||||
|
||||
## Slack
|
||||
## Status
|
||||
|
||||
- **A decision click that isn't recorded gets one reply in the thread** saying why: the clicker isn't registered, the
|
||||
decision was sent to someone else or is no longer waiting, the button no longer matches, or OpenRig can't find the
|
||||
decision. Where it helps, the reply asks for an answer in words. A recorded click still gets its usual reply, and a
|
||||
redelivered click gets no second one. It's best effort and needs the bot token. A successful press doesn't exercise
|
||||
these replies.
|
||||
|
||||
## Terminals and attach
|
||||
|
||||
- **Attach commands name the daemon's tmux server.** When the daemon was started inside tmux on a non-default socket,
|
||||
every attach command OpenRig prints carries `-L <name>` or `-S <path>`, including `tmuxAttachCommand` in `rig ps
|
||||
--json`. From inside tmux, run it as `env -u TMUX <tmuxAttachCommand>`. On the default server nothing changed.
|
||||
- **When a caller of the daemon's terminal API names no provider, the daemon uses cmux if Herdr isn't available** and
|
||||
cmux is, and says so. A named `--provider` is used as named. `rig terminal open` without `--provider`, and the TUI's
|
||||
"Open terminals", open Herdr, or plain tmux when Herdr is missing, never cmux. The TUI's preview now asks for the
|
||||
same provider as the window it opens, so it isn't refused when cmux is running.
|
||||
- **A tmux started inside a Herdr pane is recognised** by Herdr's markers (`HERDR_ENV`, `HERDR_PANE_ID`,
|
||||
`HERDR_SOCKET_PATH`), so `rig terminal open --window` opens in that Herdr.
|
||||
|
||||
## Setup
|
||||
|
||||
- **`rig setup --providers claude|codex|both`** (or a comma list) sets which harnesses it installs and checks. One not
|
||||
chosen reads `skipped` with `Not selected: …`, never failed. Without the flag, setup is unchanged. `rig doctor` still
|
||||
checks both.
|
||||
- **A first `rig daemon start` after a timed-out probe goes ahead when the port is free,** as on WSL2. A port that's
|
||||
really held is refused with `Address already in use (EADDRINUSE)` and the `--port` advice.
|
||||
|
||||
## Teams
|
||||
|
||||
- **Starter and factory teams run their own first steps and checks without stopping for approval** where they can:
|
||||
plain `rig` commands, the file tool instead of a heredoc, the project's test command first. Their leads read the goal
|
||||
from `rig queue show <id> --full`.
|
||||
- **The operator says what a team launch changes in the person's folder before asking** (`CLAUDE.md`, skills,
|
||||
`.mcp.json`, `.openrig/`, and an accept-edits `.claude/settings.local.json`), and offers a separate copy such as a git
|
||||
worktree. When a seat shows `needs_input`, the operator or lead tells the person which seat, what it asks, and its
|
||||
attach command.
|
||||
- **A Codex seat at its usage limit stays `unknown` with reason `usage_limit`** while its screen redraws, instead of
|
||||
reading `running`. It clears when a readable screen shows no banner, or when Codex shows it's working again. See the
|
||||
known gap below.
|
||||
- **`rig ps` takes a rig's running count and status from the same set of sessions as `rig ps --nodes`.**
|
||||
- **`rig whoami --full --json` shows a Codex seat's `runtimeContext.threadId`** when its stored conversation ID was
|
||||
verified resumable.
|
||||
- **The TUI says when a queue sample hit its cap or failed to load:** counts read `N+`, a seat missing from the sample
|
||||
shows `?`, and Pulse no longer lists a NEEDS YOU item a second time. The caps count the whole host, so a quiet rig can
|
||||
read `?` while another rig is busy.
|
||||
- **The TUI Topology table's Q, WORK and NOW columns fill again** on drilled views and on a seat's page.
|
||||
|
||||
## Smaller fixes
|
||||
|
||||
- `_` and `%` in a `rig view show <lens> --rig <name>` rig name are no longer wildcards, in all seven lenses that
|
||||
filter by rig.
|
||||
- `rig ask` matches chat keywords such as `config.json` or `C++` literally.
|
||||
- `rig heartbeat` reads CRLF queue files and reads a zone-less proof timestamp as UTC when picking the latest.
|
||||
- `rig usage top` reads every sample in its window; `rig usage top|series --json` prints the daemon's error as JSON.
|
||||
- A `?limit=` that isn't a number returns 400, not 500.
|
||||
- `rig workflow instantiate` and `project` print the instance and packet the daemon returned.
|
||||
- `rig transcript --tail` keeps a line ending in `%` and drops a repeated prompt.
|
||||
- `--json` after `--` no longer turns an error into JSON; `rig env` prints the daemon's error.
|
||||
- A file read over 1 MiB ends at a whole UTF-8 character, and `truncatedAtBytes` says where.
|
||||
- The TUI counts CR+LF as one Enter, keeps an emoji whole at a wrap, pages Local reading directories by 10, and skips
|
||||
fenced examples when opening a file at a heading.
|
||||
- Scope progress rows go only under a matching `##` heading, frontmatter updates stay inside the exact `---`
|
||||
delimiters, a capability delta expires only with a readable successor file, and fenced examples no longer count as
|
||||
slice sections or progress tasks.
|
||||
- `rig package install` looks for a guidance block's closing marker only after its opening one.
|
||||
- A Codex seat keeps its last context reading across quota-only usage records, and a fresh Codex launch keeps git
|
||||
metadata paths that end in whitespace.
|
||||
- A Slack reply sent with "Also send to channel" in the default channel is recovered after a connection gap.
|
||||
- `rig config set daemon.port` refuses a port outside 0–65535, and a port like that from the environment or
|
||||
`config.json` falls back to the file or default with a warning. `rig daemon start --port` refuses one too, with exit 1.
|
||||
- Parallel `rig scope slice create` calls get different slice numbers. A number is never reused, and each create leaves
|
||||
a hidden `slices/.nn-NN` claim file.
|
||||
- `rig proof show` and `rig proof judge` take `--project <id>` or a `<project>:` scope prefix. Scope readiness for a
|
||||
project selected in the TUI uses that project's own root.
|
||||
- The chat send and topic routes return 400 before storing anything for payloads that used to fail with 500;
|
||||
`/api/wake-resolve` answers a fractional or non-numeric generation with its usual "does not exist" reply; watchdog
|
||||
registration refuses a `scan_interval_seconds` that can't be turned into a number (non-numeric text, a boolean, an
|
||||
empty array); and unmanaged-pane discovery matches agent
|
||||
process names exactly, plus `claude.exe` and names cut to 15 or 16 characters.
|
||||
- The `rigs` and `openrig-skills` skill descriptions split by who is asking: a person in their own session, or an agent
|
||||
inside a rig.
|
||||
- A new reference page covers keeping a watch for a person with today's queue commands, installed at
|
||||
`$OPENRIG_HOME/reference/keeping-a-watch.md`. See the known gap below.
|
||||
|
||||
## What to stop doing
|
||||
|
||||
- **Stop reading "already running" from `rig launch` as healthy** for a seat whose agent may have exited; 0.6.10 says
|
||||
`attention_required`.
|
||||
- **Stop reading `rig capture --lines N` as N history lines plus the pane.** Add `--history-plus-pane` for that.
|
||||
- **Stop testing compact queue rows for null fields.** They're absent; check `fieldsElided`.
|
||||
- **Stop attaching to the default tmux server** when the printed command names `-L` or `-S`.
|
||||
- **Stop expecting a restore to start a seat fresh** when an earlier session left a resume token; decide at
|
||||
`awaiting-decision`, or use the command the message names.
|
||||
- **Stop reading `indeterminate` as the answer for a claimed row** from `rig queue create --verify`; 0.6.11 says
|
||||
`claimed`.
|
||||
- **Stop treating `degraded` as a stopped seat's doing** after `rig seat stop`; the rig leaves that seat out.
|
||||
- **Stop counting a long `--wait-for-idle` as extra time after the lease;** N is a deadline from the start of the wait.
|
||||
|
||||
## Known gaps in 0.6.10
|
||||
## Known gaps in 0.6.11
|
||||
|
||||
- **`rig queue create --verify` can report `outcome: "indeterminate"` for a row the seat already claimed,** with
|
||||
"Terminal receipt unconfirmed (claimed)." Read `claim` for pickup: neither the claim nor this outcome shows the
|
||||
message was displayed or read. It isn't a failed handoff, so don't re-run the create.
|
||||
- **The latest first-install check used 0.6.9 on Linux only.** macOS was last checked with 0.6.8, and native Windows
|
||||
hasn't been checked.
|
||||
- **`rig seat restart --keep-conversation` supports Linux only.** Its automated tests are hermetic: they don't restart a
|
||||
real Codex seat.
|
||||
- **The rig status API can call a running rig `blocked` because of one seat that isn't running.** It happens when the
|
||||
latest snapshot recorded no occupant for that seat, an earlier session of the seat left a resume token, and its newest
|
||||
session's restore policy is `resume_if_possible`. A restore from that snapshot would stop at the seat for a decision,
|
||||
and `GET /api/rigs/:id/status` folds that forecast into the rig's status, so it mixes current status with restore
|
||||
readiness: no seat is halted. `rig status` and the TUI's rig list don't show it for a running rig.
|
||||
- **A Codex seat can keep reading as at its usage limit** when an old usage-limit banner is followed by a submitted
|
||||
prompt and the agent's reply, with no Codex working line and no input line below. It's recorded again every five
|
||||
minutes, where 0.6.10 let it age out. The case was constructed from the source and hasn't been seen in a real
|
||||
session.
|
||||
- **The keeping-a-watch page says a timer fires once; a held-back wake uses up that fire.** When the typing guard holds
|
||||
a one-shot `--wake-after` wake back (it shows as `retained`), that held-back attempt is recorded as the timer's one
|
||||
fire and later wakes aren't, so the timer isn't retired: it can wake the owner again at each interval while the row
|
||||
stays set aside. A row sharing the timer through `--wake-watchdog`, after the original row was handed off or stopped,
|
||||
loses its one wake if that wake is held back. Read the row's transitions after each wake.
|
||||
- **After `rig scope slice create` says it couldn't verify membership, the slice was kept.** Check `mission.yaml` before
|
||||
creating it again: creating it again makes a second slice with the same name.
|
||||
- **The latest first-install check before this release used 0.6.10 on Linux only.** macOS was last checked with 0.6.8,
|
||||
and native Windows hasn't been checked.
|
||||
- **Only one selected lifecycle-help command has been checked in a live Claude session;** source and parser coverage
|
||||
is broader. If a help command still asks, report it.
|
||||
- **Codex team seats aren't asked before lifecycle commands yet.**
|
||||
- **The send gate trusts the most recently recorded hook.** If hooks are recorded out of order, it can hold a send for
|
||||
a question that's already answered, or miss one that's waiting. `rig capture` shows the real screen.
|
||||
- **A Codex seat whose permission request was approved automatically can still read "needs input".**
|
||||
- **A launched team still writes into its working folder;** the operator now says what changes before you agree.
|
||||
- **A launched team still writes into its working folder;** the operator says what changes before you agree.
|
||||
- **After a restart, `rig status` shows `Kernel: skipped` whatever the kernel seats' state.** Read them with
|
||||
`rig ps --nodes --rig kernel --full`.
|
||||
- **`rig tui --shared` still attaches on the default tmux server,** so it can't find the dashboard when the daemon runs
|
||||
|
||||
Generated
+5
-5
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "openrig",
|
||||
"version": "0.6.10",
|
||||
"version": "0.6.11",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "openrig",
|
||||
"version": "0.6.10",
|
||||
"version": "0.6.11",
|
||||
"license": "Apache-2.0",
|
||||
"workspaces": [
|
||||
"packages/daemon",
|
||||
@@ -7068,7 +7068,7 @@
|
||||
},
|
||||
"packages/cli": {
|
||||
"name": "@openrig/cli",
|
||||
"version": "0.6.10",
|
||||
"version": "0.6.11",
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
@@ -7103,7 +7103,7 @@
|
||||
},
|
||||
"packages/daemon": {
|
||||
"name": "@openrig/daemon",
|
||||
"version": "0.6.10",
|
||||
"version": "0.6.11",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@hono/node-server": "^1.13.0",
|
||||
@@ -7144,7 +7144,7 @@
|
||||
},
|
||||
"packages/ui": {
|
||||
"name": "@openrig/ui",
|
||||
"version": "0.6.10",
|
||||
"version": "0.6.11",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@fontsource-variable/jetbrains-mono": "^5.2.8",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "openrig",
|
||||
"version": "0.6.10",
|
||||
"version": "0.6.11",
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openrig/cli",
|
||||
"version": "0.6.10",
|
||||
"version": "0.6.11",
|
||||
"type": "module",
|
||||
"description": "Build your own network of agents from Claude Code, Codex and Pi: persistent teams with roles, shared context and owned work.",
|
||||
"keywords": [
|
||||
|
||||
@@ -11,7 +11,7 @@ not know exists.** So the point of what follows is not skill. It is recognition:
|
||||
lands, something rhymes, and you go check instead of building.
|
||||
|
||||
Eighty-seven top-level verbs ship (capability canon refreshed through
|
||||
`capability-delta-v0.6.10`). This marker describes the pack's teaching, not publication or live
|
||||
`capability-delta-v0.6.11`). 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.
|
||||
Model-divergence proclamations are live product (trust them; pins use canonical
|
||||
model IDs).
|
||||
@@ -90,6 +90,8 @@ unseen — which makes messages the one delivery channel that never gets skipped
|
||||
confirm by effect, never relaunch on it. A send or wake to a seat whose latest hook is a
|
||||
question waiting for a person is refused with `target_needs_input`, even when its screen
|
||||
can't be read: read it with `rig capture` and get the question answered instead of retrying.
|
||||
`--wait-for-idle N` waits before it takes the seat's delivery lease, so other sends and wakes to
|
||||
that seat aren't held behind it; N is a deadline from the start of the wait.
|
||||
Over `--host` to an http-registered host, a send that may have reached the remote reads
|
||||
`remote-outcome-unknown` ("Delivery UNCONFIRMED"): check the target with `rig capture <session>
|
||||
--host <id>` before any resend. Only a host that was never reached reads as unreachable.
|
||||
@@ -184,10 +186,11 @@ your context, your compaction and your replacement — and it is the only thing
|
||||
`handoff`'s, confirms the row was saved; the owner is woken after that. Before you say they were
|
||||
told, read the row's transitions, or use `--verify`. For a seat it reports the wake's terminal
|
||||
receipt and any claim separately: an unconfirmed receipt is not a failed handoff, and a claim is
|
||||
pickup, not proof the body was read. For a row the seat already claimed, `outcome` can read
|
||||
`indeterminate` while `claim` is accurate: read `claim`. It isn't a failed handoff, so don't
|
||||
re-run the create. For a registered person who is also a seat with a pane, it also waits,
|
||||
bounded, for the Slack receipt and reports it on its own.
|
||||
pickup, not proof the body was read. For a claimed row whose wake wasn't confirmed, `outcome`
|
||||
reads `claimed`; it isn't a failed handoff, so don't re-run the create. For a registered person
|
||||
who is also a seat with a pane, it also waits for the Slack receipt and reports it on its own,
|
||||
up to the 30-second default, even when Slack isn't set up or the row won't be posted. With `output.compact` on (off by default), the queue write commands print a short
|
||||
receipt and `--full` prints the whole row.
|
||||
- **`rig queue show`** — what a row *actually says*. The header is not the body.
|
||||
- **`rig queue claim` / `unclaim`** — is this mine and running, or still pending where two agents
|
||||
might double-work it. Put it down honestly when it is not yours.
|
||||
@@ -202,7 +205,11 @@ your context, your compaction and your replacement — and it is the only thing
|
||||
visible**, with a plain-language summary and a pointer to what a human must judge; `resolve`
|
||||
writes their decision onto the durable record and wakes the owner. **Closing it would be a lie
|
||||
and sitting on it silently is indistinguishable from a crash.** `--wake-after <duration>` arms
|
||||
one wake for this park episode; a new park supersedes it and every exit route retires it.
|
||||
one wake for this park episode; a new park supersedes it and every exit route retires it. In
|
||||
this release a wake the typing guard holds back (`retained`) is recorded as that one fire and
|
||||
later wakes aren't, so the timer isn't retired: it can wake the owner again at each interval
|
||||
while the row stays parked. A row attached to a shared timer with `--wake-watchdog` loses its
|
||||
one wake if that wake is held back.
|
||||
- **`rig queue overdue`** — what was claimed and never closed in time. **Defaults to the current
|
||||
rig**; ask for more if you mean more.
|
||||
- **`rig queue undelivered`** — pending create-path nudge failures only. For gateway or human
|
||||
@@ -360,7 +367,11 @@ not have to tear one down to change it, and you rarely have to start from nothin
|
||||
is archived), so check `rig ps --nodes` first. Launch-created `AGENTS.md` or `CLAUDE` files now show in `git status`.
|
||||
`rig up <rig> --existing` puts back the OpenRig guidance blocks `rig down` removed before a
|
||||
resumed seat starts. A seat still missing one makes the rig `partially_restored` (its node lists
|
||||
`guidanceGaps`) and `rig up` exits 1.
|
||||
`guidanceGaps`) and `rig up` exits 1. A seat that wasn't running at the snapshot, but whose
|
||||
earlier session left a resume token, stops at `awaiting-decision` instead of starting fresh, in
|
||||
`rig up --existing` and in `rig launch` (exit 1); the message names the command that starts it
|
||||
fresh on purpose. In a pod-aware rig, a seat is rolled back as unresumable only when its runtime
|
||||
reports the conversation missing.
|
||||
- **`rig down`** — stop a rig's seats and take it out of the running set. It ends the agents'
|
||||
sessions and any work in progress; don't run it on a live team unless the person asked. In
|
||||
human mode it first prints one line with each agent's last known activity, or “unknown”: a
|
||||
@@ -373,7 +384,16 @@ not have to tear one down to change it, and you rarely have to start from nothin
|
||||
`rig seat launch <session> --fresh --stop`.
|
||||
- **`rig seat launch <seat> --fresh --reason <why>`** — deliberately create a blank occupant for
|
||||
exactly one existing seat. It uses no resume, fork, rebuild, snapshot, or restore packet;
|
||||
siblings and durable work stay put, and unmanaged ambiguity refuses.
|
||||
siblings and durable work stay put, and unmanaged ambiguity refuses. With `--stop`, a seat with a
|
||||
still-live older session is refused before anything is stopped; `--plan` previews it.
|
||||
- **`rig seat restart <seat> --keep-conversation --reason <why>`** — restart one Codex seat in its
|
||||
own pane on the same conversation, so it starts again on whatever account its Codex home now
|
||||
holds; it doesn't switch accounts itself. It refuses with nothing stopped unless the seat is a
|
||||
Codex seat OpenRig launched, in a single pane, with a conversation it can prove and unchanged
|
||||
running settings. `--plan` runs every check and stops nothing; `--verify --expect-account
|
||||
<account>` reports `moved` only when a tool turn has completed in the same conversation since
|
||||
the restart and Codex's status names that account. Linux only: on macOS a
|
||||
request that reaches the running-process check refuses before stopping the seat.
|
||||
- **`rig add`** / **`rig expand`** — graft one more member, or a whole new pod, onto a rig that is
|
||||
already running. `rig add` takes the rig's name or ID; a name two active rigs share is refused
|
||||
with `rig_ambiguous` and the candidates. `rig grow --new-pod` and `rig expand` are one ingress; choose by input shape.
|
||||
@@ -481,7 +501,8 @@ version, from checking the environment to a useful report to the OpenRig team.
|
||||
updating Codex is the operator's job.
|
||||
- **`rig seat set-model` / `stop` / `clean`** — persist the model for later managed resumes, stop
|
||||
exactly one live seat (ending its session and any work in progress), or clear a dead seat's
|
||||
stale binding. When the topology is right and only
|
||||
stale binding. A stop is recorded, so the rig doesn't read `degraded` for that seat, and a rig
|
||||
whose seats were all stopped this way reads `stopped`. When the topology is right and only
|
||||
the occupant is wrong, use these seat lifecycle verbs or `rig handover`, not a rig down/up cycle.
|
||||
Effective-model detection follows the identity-verified current occupant, not a retained
|
||||
predecessor; a `<synthetic>` transcript record is skipped, so a PENDING model check is not a
|
||||
@@ -569,7 +590,8 @@ scheme, and nothing downstream can see it.
|
||||
source actually bound. When someone later asks where the contract items came from, the drop's
|
||||
own echo is the answer — not a re-read of the files.
|
||||
- **`rig proof judge` / `rig proof show`** — record an attributed judgment on a contract item once,
|
||||
then read derived proof, slice, mission and project readiness. The owning scope selects
|
||||
then read derived proof, slice, mission and project readiness. Both take `--project <id>` or a
|
||||
`<project>:` scope prefix. The owning scope selects
|
||||
`proofPolicy.judges` (nearest slice, mission or project policy wins); consult `rig proof --help`
|
||||
for that setup and the item/evidence selectors. Accept, reject or withdraw against readable
|
||||
evidence; corrections preserve history and unrelated judgments without ancestor status edits.
|
||||
@@ -796,8 +818,10 @@ your circumstances is configuration, and the ones that are not, another agent ca
|
||||
accounts, what the usage signals say, and whether a seat can be moved without stranding the
|
||||
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 `provider signals` can
|
||||
show a provider-event signal for that seat's account that allows a switch decision.
|
||||
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
|
||||
allows a switch decision. With `provider.usage_windows` on (off by default), `rig provider status
|
||||
--refresh` reads a Codex login's usage windows once.
|
||||
- **Codex configuration fragments** — a `codex_config_fragment` must open with a table header and
|
||||
never overrides a user-declared table; see `docs/reference/agent-spec.md`.
|
||||
- **`rig env`** — the real services behind a rig: are they up, what are they saying, how do you
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openrig/daemon",
|
||||
"version": "0.6.10",
|
||||
"version": "0.6.11",
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openrig/ui",
|
||||
"version": "0.6.10",
|
||||
"version": "0.6.11",
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
|
||||
Reference in new issue
Block a user