mirror of
https://github.com/mvschwarz/openrig.git
synced 2026-11-07 05:56:21 -10:00
docs: carry 0.7.1's published release text to main (#1990)
Main now carries what 0.7.1 published. - `CHANGELOG.md`'s 0.7.1 entry is the published v0.7.1 Release body, word for word, reflowed to the file's line form. That includes the credits for all reporters and all 22 known issues. It replaces the earlier draft the tag carried. - `docs/reference/whats-new.md` carries 0.7.1's entry from the tag, with one line narrowed to what's true at source. - The root, cli, daemon and ui package versions and their lockfile entries move from 0.7.0 to 0.7.1, matching the v0.7.1 tag. The packaged whats-new must name the package's own version. No other changes.
This commit is contained in:
1 parent
802d44a2a9
commit
44676cb09c
7 files changed
+572
-122
No files matched your search
+400
@@ -8,6 +8,406 @@ deprecations, and behavioral changes. Breaking changes are called out explicitly
|
||||
|
||||
---
|
||||
|
||||
## [0.7.1] - 2026-10-25
|
||||
|
||||
Published 2026-10-25 as `@openrig/[email protected]`, built from the commit tagged
|
||||
`v0.7.1` (`1e392d56`). This entry is its release notes, as published on the
|
||||
[GitHub Release](https://github.com/mvschwarz/openrig/releases/tag/v0.7.1).
|
||||
|
||||
OpenRig 0.7.1 gives you more say over how much your team does on its own. You
|
||||
choose, per seat, how much automatic input reaches an agent's terminal and how
|
||||
far other agents may act on it, and you can see the permissions each seat will
|
||||
launch with. Questions to you land on the TUI's Feed, and Slack can carry every
|
||||
ask or only urgent ones. Team skills stay out of your project, assistants such
|
||||
as Claude Desktop can do much more through MCP, and a managed compaction
|
||||
survives a daemon restart.
|
||||
|
||||
### Before you upgrade
|
||||
|
||||
- **Restart the daemon after installing.** Eight database updates apply on its
|
||||
first start.
|
||||
```bash
|
||||
npm install -g @openrig/cli@0.7.1
|
||||
rig daemon stop && rig daemon start
|
||||
```
|
||||
- **Startup replaces OpenRig's own plugin and skill files** (openrig-core goes
|
||||
from 0.1.17 to 0.1.18). As in 0.7.0, it first copies each file it replaces
|
||||
under `$OPENRIG_HOME/backups/managed-refresh/` and logs where, edited or not.
|
||||
If you did edit one, reapply your change from the copy.
|
||||
- **Claude seats need Claude Code 2.1.280 or newer to see their team skills**
|
||||
(`claude --version`).
|
||||
- **If an earlier version reset your worktree's Claude permission mode, set it
|
||||
back once by hand.** Launching a managed Claude seat used to rewrite
|
||||
`defaultMode` in `.claude/settings.local.json` to `acceptEdits`; 0.7.1 stops,
|
||||
but doesn't repair files already changed.
|
||||
([#1776](https://github.com/mvschwarz/openrig/pull/1776))
|
||||
- **If you might go back to 0.7.0, undo Slack subscription choices first.**
|
||||
0.7.0 can't read a person file that holds one, so its people registry stops
|
||||
loading. Save each choice (`rig gateway human show <id> --json > <id>.json`),
|
||||
then run `rig gateway human set <id> slack-subscription unset`: someone on
|
||||
`urgent-only` gets every ask in Slack again, as 0.7.0 does. Set it again after
|
||||
you return to 0.7.1. The unset removes only the Slack subscription, so a
|
||||
person file that still holds 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.
|
||||
- **If you go back to 0.7.0 and then upgrade again,** old process evidence can
|
||||
keep a seat reading `running` instead of being relaunched.
|
||||
([#1906](https://github.com/mvschwarz/openrig/pull/1906))
|
||||
|
||||
### What's new and fixed
|
||||
|
||||
**How much your team does on its own**
|
||||
- `rig seat set-typing-guard <seat> --mode off|openrig-urgent|urgent-only|hold`
|
||||
sets how much automatic input reaches a seat. `rig send --urgent` or an urgent
|
||||
queue row marks a message urgent, naming who marked it. Held input stays
|
||||
readable and is never replayed.
|
||||
([#1770](https://github.com/mvschwarz/openrig/pull/1770),
|
||||
[#1781](https://github.com/mvschwarz/openrig/pull/1781))
|
||||
- `rig seat set-terminal-policy <seat> --preset no-peer-interventions|help-within-instructions|full-control`
|
||||
sets how far OpenRig and other agents may act on a seat, with exceptions for
|
||||
compaction and model changes. Existing seats keep full control.
|
||||
([#1846](https://github.com/mvschwarz/openrig/pull/1846))
|
||||
- `rig seat status` shows the permissions a seat's next fresh launch will use
|
||||
and where each comes from; `rig setup` asks before adding OpenRig's line to
|
||||
your shared guidance files.
|
||||
([#1843](https://github.com/mvschwarz/openrig/pull/1843))
|
||||
|
||||
**Asks to you.** An ask lands on the TUI's Feed. Every ask still posts to Slack
|
||||
by default; `rig gateway human set <id> slack-subscription urgent-only` keeps
|
||||
Slack for asks marked `--alert`, which stand out with a mention.
|
||||
([#1868](https://github.com/mvschwarz/openrig/pull/1868),
|
||||
[#1878](https://github.com/mvschwarz/openrig/pull/1878))
|
||||
|
||||
**Seats keep their setup out of your project**
|
||||
- Team skills live in each seat's own storage, not your project's
|
||||
`.claude/skills` or `.agents/skills`; `rig skill loadout --seat <seat>` shows
|
||||
them. ([#1008](https://github.com/mvschwarz/openrig/pull/1008), @puniserv)
|
||||
- A Claude member can bring its own agent file, system prompt file, plugin
|
||||
folders and Advisor model.
|
||||
([#1737](https://github.com/mvschwarz/openrig/pull/1737),
|
||||
[#1736](https://github.com/mvschwarz/openrig/pull/1736), @Aschenbath)
|
||||
- A seat's role no longer overwrites the others' in a shared `CLAUDE.md` or
|
||||
`AGENTS.md`, and `rig down` restores your guidance files byte for byte.
|
||||
([#1840](https://github.com/mvschwarz/openrig/pull/1840),
|
||||
[#1854](https://github.com/mvschwarz/openrig/pull/1854),
|
||||
[#1859](https://github.com/mvschwarz/openrig/pull/1859),
|
||||
[#1867](https://github.com/mvschwarz/openrig/pull/1867))
|
||||
|
||||
**Assistants and other agents**
|
||||
- OpenRig's MCP server grows from 23 to 34 tools, including identity, restore
|
||||
status, a rig's team and lead, following a handoff, reading a result and
|
||||
deciding inside a person's decision room. `rig mcp serve --http` serves an
|
||||
assistant on another machine, each caller acting as its own seat.
|
||||
([#1831](https://github.com/mvschwarz/openrig/pull/1831),
|
||||
[#1835](https://github.com/mvschwarz/openrig/pull/1835),
|
||||
[#1842](https://github.com/mvschwarz/openrig/pull/1842),
|
||||
[#1853](https://github.com/mvschwarz/openrig/pull/1853),
|
||||
[#1860](https://github.com/mvschwarz/openrig/pull/1860),
|
||||
[#1596](https://github.com/mvschwarz/openrig/pull/1596), @pdurlej)
|
||||
- `rig acp run <row>` hands a row's task to an ACP agent such as Hermes or
|
||||
OpenClaw; a new guide covers A2A agents.
|
||||
([#1823](https://github.com/mvschwarz/openrig/pull/1823),
|
||||
[#1829](https://github.com/mvschwarz/openrig/pull/1829))
|
||||
- Community harnesses can report, name and reopen conversations, with examples
|
||||
for Cursor, Hermes and OpenClaw.
|
||||
([#1768](https://github.com/mvschwarz/openrig/pull/1768),
|
||||
[#1769](https://github.com/mvschwarz/openrig/pull/1769),
|
||||
[#1771](https://github.com/mvschwarz/openrig/pull/1771),
|
||||
[#1783](https://github.com/mvschwarz/openrig/pull/1783),
|
||||
[#1784](https://github.com/mvschwarz/openrig/pull/1784),
|
||||
[#1826](https://github.com/mvschwarz/openrig/pull/1826),
|
||||
[#1870](https://github.com/mvschwarz/openrig/pull/1870))
|
||||
|
||||
**Running a team**
|
||||
- A daemon restart, such as an upgrade, picks up a managed compaction where it
|
||||
stopped. ([#1866](https://github.com/mvschwarz/openrig/pull/1866))
|
||||
- `rig edge add` and `rig edge remove` change one edge on a running rig.
|
||||
([#1733](https://github.com/mvschwarz/openrig/pull/1733),
|
||||
[#1746](https://github.com/mvschwarz/openrig/pull/1746))
|
||||
- `rig up <spec> --name <rig>` runs one spec as several rigs.
|
||||
([#1692](https://github.com/mvschwarz/openrig/pull/1692), @klueless-io)
|
||||
- `rig watchdog update` retunes a job in place; the context watch takes token or
|
||||
percent thresholds. ([#1803](https://github.com/mvschwarz/openrig/pull/1803),
|
||||
@AdamWhitehurst) ([#1735](https://github.com/mvschwarz/openrig/pull/1735),
|
||||
@akushonkamen)
|
||||
- `policies.claude_compaction.preparation_root` puts restore maps where seats
|
||||
may write. ([#1585](https://github.com/mvschwarz/openrig/pull/1585),
|
||||
@Aschenbath)
|
||||
- Herdr: tiles come back after a Herdr restart (one over SSH needs reopening),
|
||||
`--session` picks a Herdr session, and the TUI's terminal button works over
|
||||
SSH. ([#1796](https://github.com/mvschwarz/openrig/pull/1796),
|
||||
[#1076](https://github.com/mvschwarz/openrig/pull/1076), @Aschenbath)
|
||||
([#1748](https://github.com/mvschwarz/openrig/pull/1748))
|
||||
- New seats get the daemon's `OPENRIG_DB` and `TMUX_TMPDIR`.
|
||||
([#1812](https://github.com/mvschwarz/openrig/pull/1812))
|
||||
- `rig setup --providers` is remembered (`provider.selected`), so the kernel
|
||||
starts seats only for the harnesses you chose.
|
||||
([#1817](https://github.com/mvschwarz/openrig/pull/1817))
|
||||
- Optional `daemon.db_conflict: stop` keeps a second daemon off a database
|
||||
another live daemon holds; the default still only warns.
|
||||
([#1890](https://github.com/mvschwarz/openrig/pull/1890))
|
||||
- `rig stream subscribe <seat>` and `rig stream read` give a seat bounded pages
|
||||
of the observations meant for it, and `rig stream show <id>` says what became
|
||||
of one. ([#1891](https://github.com/mvschwarz/openrig/pull/1891),
|
||||
[#1888](https://github.com/mvschwarz/openrig/pull/1888))
|
||||
- Stream retention is on: items emitted after the upgrade are deleted after 30
|
||||
days, or beyond the newest 20,000, unless a record names them
|
||||
(`retention.stream_days`, `retention.stream_max_items`). History from before
|
||||
the upgrade is kept. ([#1891](https://github.com/mvschwarz/openrig/pull/1891),
|
||||
[#1897](https://github.com/mvschwarz/openrig/pull/1897))
|
||||
- Off by default: once decisions are enabled, `rig project wake --decide` lets
|
||||
your intake seat route stream observations with one bounded typed decision
|
||||
each, and hands anything uncertain back to that seat.
|
||||
([#1879](https://github.com/mvschwarz/openrig/pull/1879),
|
||||
[#1882](https://github.com/mvschwarz/openrig/pull/1882),
|
||||
[#1894](https://github.com/mvschwarz/openrig/pull/1894))
|
||||
|
||||
**Reliability**
|
||||
- `rig daemon start` waits for a slow daemon instead of stopping it, and warns
|
||||
rather than fails when only a secondary listener, such as Tailscale's, can't
|
||||
be verified. ([#1716](https://github.com/mvschwarz/openrig/pull/1716),
|
||||
@dajiaohuang) ([#1743](https://github.com/mvschwarz/openrig/pull/1743),
|
||||
[#1793](https://github.com/mvschwarz/openrig/pull/1793))
|
||||
- A Claude seat whose startup turn is refused reports its remaining startup
|
||||
context as owed; with an expired login, later startup inputs can still be
|
||||
submitted first (see Known issues).
|
||||
([#1869](https://github.com/mvschwarz/openrig/pull/1869))
|
||||
- On Ubuntu 22.04's tmux 3.2a, a closing session no longer sends the query that
|
||||
crashes tmux. ([#1755](https://github.com/mvschwarz/openrig/pull/1755))
|
||||
- A rebuilt Codex seat keeps its narrower sandbox, and read-only Codex profiles
|
||||
launch. ([#1779](https://github.com/mvschwarz/openrig/pull/1779),
|
||||
[#1791](https://github.com/mvschwarz/openrig/pull/1791),
|
||||
[#1825](https://github.com/mvschwarz/openrig/pull/1825), @bradvin)
|
||||
- Reminders and workflow keepalives survive a seat swap.
|
||||
([#1777](https://github.com/mvschwarz/openrig/pull/1777),
|
||||
[#1782](https://github.com/mvschwarz/openrig/pull/1782))
|
||||
- OpenRig's hooks run without Node on the seat's PATH.
|
||||
([#1727](https://github.com/mvschwarz/openrig/pull/1727),
|
||||
[#1728](https://github.com/mvschwarz/openrig/pull/1728),
|
||||
[#1729](https://github.com/mvschwarz/openrig/pull/1729))
|
||||
- After a daemon restart that can't see the seats' tmux server, running agents
|
||||
are no longer detached and relaunched beside themselves.
|
||||
([#1906](https://github.com/mvschwarz/openrig/pull/1906))
|
||||
- Provider credentials and the activity-hook token stay off tmux, shell and
|
||||
`env` command lines; @pr0xc3nt4ur1 first raised it in
|
||||
[#1360](https://github.com/mvschwarz/openrig/pull/1360).
|
||||
([#1907](https://github.com/mvschwarz/openrig/pull/1907))
|
||||
- An answer retried from Slack or Steering after an interrupted close is used
|
||||
once, and a replayed Slack reply stays absorbed.
|
||||
([#1896](https://github.com/mvschwarz/openrig/pull/1896),
|
||||
[#1898](https://github.com/mvschwarz/openrig/pull/1898))
|
||||
- One stuck row on a removed rig no longer stops the stuck sweep from flagging
|
||||
the rest, and stopped watchdog jobs release their old schedules.
|
||||
([#1903](https://github.com/mvschwarz/openrig/pull/1903),
|
||||
[#1900](https://github.com/mvschwarz/openrig/pull/1900))
|
||||
- Health diagnoses still list when an unrelated diagnosis row holds a malformed
|
||||
field. ([#1920](https://github.com/mvschwarz/openrig/pull/1920))
|
||||
- Upgrading OpenRig no longer stops a working Codex seat at "Hooks need review".
|
||||
OpenRig can renew approval of its own Codex plugin during an upgrade when the
|
||||
prior approval exactly matches the previous shipped bundle, nothing is
|
||||
disabled, and the installed bytes match the shipped bundle. Explicit disables
|
||||
and unrelated hooks are preserved.
|
||||
([#1948](https://github.com/mvschwarz/openrig/pull/1948))
|
||||
- A seat waiting at a prompt that only its pane shows, such as a Codex approval
|
||||
prompt, is shown as needing attention, with its reason, in the seat view,
|
||||
`rig ps`, the compact JSON and the rig count.
|
||||
([#1946](https://github.com/mvschwarz/openrig/pull/1946))
|
||||
- From contributors: launch probe evidence
|
||||
([#1499](https://github.com/mvschwarz/openrig/pull/1499), @Aschenbath);
|
||||
request IDs for creates and checked stops
|
||||
([#1790](https://github.com/mvschwarz/openrig/pull/1790),
|
||||
[#1792](https://github.com/mvschwarz/openrig/pull/1792), @bradvin); faster
|
||||
cost history, ordered stream replay, kept web-UI drafts and guarded sends at
|
||||
Claude's MCP prompts ([#1756](https://github.com/mvschwarz/openrig/pull/1756),
|
||||
[#1757](https://github.com/mvschwarz/openrig/pull/1757),
|
||||
[#1758](https://github.com/mvschwarz/openrig/pull/1758),
|
||||
[#1864](https://github.com/mvschwarz/openrig/pull/1864),
|
||||
[#1865](https://github.com/mvschwarz/openrig/pull/1865), @Nikhi00718); a
|
||||
non-blocking preflight
|
||||
([#1759](https://github.com/mvschwarz/openrig/pull/1759), @icey-zzz); clearer
|
||||
compact-plan output ([#1629](https://github.com/mvschwarz/openrig/pull/1629),
|
||||
@taljeri); exports keep culture files
|
||||
([#1657](https://github.com/mvschwarz/openrig/pull/1657), @Totopo27); no flash
|
||||
in terminal views ([#1663](https://github.com/mvschwarz/openrig/pull/1663),
|
||||
@Vaishnavi220506); pod startup files for added seats
|
||||
([#1701](https://github.com/mvschwarz/openrig/pull/1701), @AdamWhitehurst); Pi
|
||||
idle heartbeats ([#1702](https://github.com/mvschwarz/openrig/pull/1702),
|
||||
@okle100); the `rig ps` activity column
|
||||
([#1614](https://github.com/mvschwarz/openrig/pull/1614),
|
||||
@shravansumanthanan); full workflow trails
|
||||
([#1732](https://github.com/mvschwarz/openrig/pull/1732), @psbanka).
|
||||
|
||||
### Behaviour that changed
|
||||
|
||||
- `rig ps --nodes` separates every column with a space and adds an ATTN column
|
||||
before REASON; update scripts that read columns by position.
|
||||
([#1780](https://github.com/mvschwarz/openrig/pull/1780),
|
||||
[#1876](https://github.com/mvschwarz/openrig/pull/1876))
|
||||
- `rig queue show --json` drops `lastNudgeInputBox`, and send results no longer
|
||||
describe the input box.
|
||||
([#1738](https://github.com/mvschwarz/openrig/pull/1738))
|
||||
- `rig down` asks before stopping the rig you're in; without a terminal it stops
|
||||
nothing and prints the `--yes` command.
|
||||
([#1838](https://github.com/mvschwarz/openrig/pull/1838))
|
||||
- `rig up --plan` no longer starts a stopped daemon; it exits with
|
||||
`daemon_not_running`.
|
||||
([#1836](https://github.com/mvschwarz/openrig/pull/1836))
|
||||
- An urgent or critical row's wake starts with `Urgent (marked by …):`.
|
||||
([#1770](https://github.com/mvschwarz/openrig/pull/1770))
|
||||
- `rig provider moves` is back with a new job: filing and reading subscription
|
||||
move reports. It switches nothing.
|
||||
([#1847](https://github.com/mvschwarz/openrig/pull/1847),
|
||||
[#1849](https://github.com/mvschwarz/openrig/pull/1849))
|
||||
- `rig queue show` and `rig queue whoami` print human notices on stderr.
|
||||
([#1808](https://github.com/mvschwarz/openrig/pull/1808))
|
||||
- A seat joined with `rig attach` as an outside app stays attached through
|
||||
`rig down` and restore.
|
||||
([#1827](https://github.com/mvschwarz/openrig/pull/1827),
|
||||
[#1834](https://github.com/mvschwarz/openrig/pull/1834))
|
||||
- `rig send --dangerously-interact --reason` into a seat's input box stops and
|
||||
shows text already typed or pasted there, apart from suggestions, instead of
|
||||
pasting over it; clear it and retry, or pass `--type-without-checking`. Keys
|
||||
for a recognized native menu are sent as before.
|
||||
([#1892](https://github.com/mvschwarz/openrig/pull/1892))
|
||||
- `rig send` to a terminal seat types exactly your text, without the From/To
|
||||
lines, and queue wakes type nothing into it.
|
||||
([#1100](https://github.com/mvschwarz/openrig/pull/1100))
|
||||
- A stream body over 16 KiB is stored truncated and marked, and
|
||||
`rig stream list --after` from a pruned item returns `stream_cursor_expired`
|
||||
instead of an empty list.
|
||||
([#1891](https://github.com/mvschwarz/openrig/pull/1891))
|
||||
- A send held for a draft in the seat's input box reports
|
||||
`inputPhase: "not_reached"`, and a managed compaction prompt held that way
|
||||
counts as not sent. ([#1884](https://github.com/mvschwarz/openrig/pull/1884),
|
||||
[#1889](https://github.com/mvschwarz/openrig/pull/1889))
|
||||
|
||||
### Known issues
|
||||
|
||||
- **A new Claude agent's startup text can stay unsent in its input box.** Press
|
||||
Enter in its terminal.
|
||||
- **Claude seats on a macOS native install can read as needing attention after a
|
||||
restore** ([#86](https://github.com/mvschwarz/openrig/issues/86)). Check the
|
||||
seat's terminal before acting on it.
|
||||
- **A Slack channel-mapping change needs a daemon restart.** Don't use
|
||||
`rig slack disable` then `enable` for it, which marks waiting alerts as seen.
|
||||
- **Ubuntu 22.04's tmux 3.2a:** the known crashing query is gone, but a narrower
|
||||
race remains. Prefer another tmux.
|
||||
- **`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, run
|
||||
`rig daemon start` yourself first.
|
||||
- **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` for any other.
|
||||
- **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](https://github.com/mvschwarz/openrig/issues/14) remains open.
|
||||
- **Prompt-looking text in a seat's recent output can be mistaken for an active
|
||||
approval prompt, so OpenRig can refuse sends and queue wakes even while the
|
||||
seat is working.** Inspect the current native prompt and the refusal before
|
||||
retrying; do not assume that waiting 15 seconds clears it.
|
||||
- **`rig acp run --help` points to `reference/acp-agents.md`, which is not
|
||||
included in this release's reference context pack.** Read
|
||||
`daemon/docs/reference/acp-agents.md` inside the installed @openrig/cli
|
||||
package instead.
|
||||
- **The shared-database check needs `lsof`.** #1763's warning that another live
|
||||
daemon is using the same database, and the optional
|
||||
`daemon.db_conflict: stop`, find that daemon with `lsof`. On a host without a
|
||||
working `lsof` (each lsof call times out after 1 s), the check is skipped
|
||||
without a message, so neither the warning nor the stop happens. The warning
|
||||
for a database outside `OPENRIG_HOME` doesn't depend on `lsof`.
|
||||
- **Managed Claude restoration can require native approvals.** On a seat without
|
||||
bypass permissions, restoration can ask to read OpenRig files outside its
|
||||
working directory. In a representative `openrig-core` test on Claude Code
|
||||
2.1.309 (`acceptEdits`), the restore and audit completed after three one-time
|
||||
Read approvals (the restore marker, post-compaction instructions and
|
||||
refocusing skill) plus four approvals for read-only commands. Check the
|
||||
retained restore map and reported gaps before treating restoration as
|
||||
complete.
|
||||
- **A managed Claude restore can remain owed without showing why delivery is
|
||||
delayed.** If a seat remains idle after compaction, inspect
|
||||
`rig compact <seat> --state` and its saved restore map. Before sending a
|
||||
manual restore request, reconcile the native conversation and pending state to
|
||||
avoid a duplicate; do not repeat `/compact` merely because the restore request
|
||||
has not arrived.
|
||||
- **On Linux, workspaces containing very large checkout or build trees can cause
|
||||
severe daemon stalls and file-watch-limit failures.** The recursive
|
||||
proof-source watcher covers the workspace root. Keeping large checkout/build
|
||||
trees outside that root may reduce exposure; this mitigation has not yet been
|
||||
verified. ([#1813](https://github.com/mvschwarz/openrig/issues/1813))
|
||||
- **A Claude startup with an expired login can still submit later startup inputs
|
||||
before noticing the refusal.** The packaged whats-new
|
||||
(`reference/whats-new.md`) overstates the hold behavior. Resolve the login and
|
||||
follow the seat's reported continuation guidance; this test did not verify
|
||||
recovery. ([#1869](https://github.com/mvschwarz/openrig/pull/1869))
|
||||
- **On Claude Code 2.1.309, a seat configured with the model alias `haiku` and
|
||||
the plan permission answered on Sonnet in one observed run.** Configuring the
|
||||
full id `claude-haiku-5-5` gave a Haiku answer in the plan-mode follow-up.
|
||||
- **A Cursor seat's startup is assisted.** It reports `attention_required` and
|
||||
needs one operator acknowledgement:
|
||||
`rig seat clear-attention <seat> --reason "<why>"`. This wasn't rechecked
|
||||
natively on 0.7.1. ([#1870](https://github.com/mvschwarz/openrig/pull/1870))
|
||||
- **A resumed Codex seat can be misreported as not interactive when its header
|
||||
has scrolled off and its footer uses a multi-word model label such as GPT-6.1
|
||||
Sol medium; `rig up --existing` can then stop.** Reported on 0.7.0; the same
|
||||
recognition checks remain in 0.7.1.
|
||||
([#1764](https://github.com/mvschwarz/openrig/issues/1764))
|
||||
- **Cross-host queue creation can report failure after the row was created.** A
|
||||
`rig queue create --host` request can time out or return failure even though
|
||||
the destination host created the row. Check that host for the original row ID
|
||||
before retrying. If the row exists, do not create a replacement. If a retry is
|
||||
needed, reuse the same `--id` and payload; an unsuccessful read is not proof
|
||||
that the row is absent.
|
||||
- **Automatic Codex hook approval needs OpenRig's plugin folder to match what
|
||||
shipped.** If `$OPENRIG_HOME/plugins/openrig-core` holds files that didn't
|
||||
ship, the Codex plugin still installs or upgrades, but OpenRig approves
|
||||
nothing itself: an existing approval stays as it was, and Codex's own hook
|
||||
review applies. On a restart without a version change, if a hook file or the
|
||||
plugin manifest there differs from what this version shipped, OpenRig doesn't
|
||||
install or upgrade its Codex plugin. On a version upgrade, OpenRig's managed
|
||||
refresh replaces an edited plugin file with the shipped one and keeps your
|
||||
edited copy under `$OPENRIG_HOME/backups/managed-refresh/`; after upgrading,
|
||||
inspect those backups and reapply any deliberate customization.
|
||||
- **With `CODEX_HOME` set in a seat's environment,
|
||||
`rig seat restart --keep-conversation` can report that the resume was not
|
||||
proven and that nothing restarted, although the process actually restarted and
|
||||
resumed.** Inspect the seat's pane and native `/status` before retrying; a
|
||||
failed proof read is not proof that no restart occurred.
|
||||
- **`rig provider switch` does not switch a seat's account in 0.7.1.** Its
|
||||
precheck can refuse an unknown target, and its execution path is not yet
|
||||
wired. The separate home-level Codex auth-switch/restart path is not this
|
||||
command.
|
||||
|
||||
### Credits
|
||||
|
||||
Thank you to everyone whose work is in this release: @Aschenbath, @bradvin,
|
||||
@Nikhi00718, @AdamWhitehurst, @puniserv, @pdurlej, @klueless-io,
|
||||
@shravansumanthanan, @taljeri, @Totopo27, @Vaishnavi220506, @okle100,
|
||||
@dajiaohuang, @icey-zzz, @akushonkamen, @psbanka and @adampog, and to @lev-gpt,
|
||||
@XVVH, @Kero-66, @pr0xc3nt4ur1, @VltrnOne, @BillyOutlast, @gogabrielordonez,
|
||||
@geoff-dhango, @alexveli1, @aanestesia, @team-sudarshana, @oneandonlydean,
|
||||
@t1m3fr33d0m, @smota and @z4cc, whose reports and ideas led to fixes here.
|
||||
|
||||
Thanks also to @george661, who reported
|
||||
[#1710](https://github.com/mvschwarz/openrig/issues/1710) (partly addressed by
|
||||
[#1721](https://github.com/mvschwarz/openrig/pull/1721)); @m3ac-AllbrittenJ, who
|
||||
reported [#331](https://github.com/mvschwarz/openrig/issues/331) (partly
|
||||
addressed by [#1801](https://github.com/mvschwarz/openrig/pull/1801)); @shintaii
|
||||
and @gopinathrimc, who reported
|
||||
[#27](https://github.com/mvschwarz/openrig/issues/27) (partly addressed by
|
||||
[#1735](https://github.com/mvschwarz/openrig/pull/1735)); @kainne44 and
|
||||
@bobbiejaxn, who reported [#81](https://github.com/mvschwarz/openrig/issues/81)
|
||||
(partly addressed by [#1876](https://github.com/mvschwarz/openrig/pull/1876) and
|
||||
[#1946](https://github.com/mvschwarz/openrig/pull/1946)); and @haichongfu and
|
||||
@vadym-abstract-factory, who reported
|
||||
[#14](https://github.com/mvschwarz/openrig/issues/14) (partly addressed by
|
||||
[#1871](https://github.com/mvschwarz/openrig/pull/1871)).
|
||||
|
||||
## [0.7.0] - 2026-10-23
|
||||
|
||||
Published 2026-10-23 as `@openrig/[email protected]`, built from the commit tagged
|
||||
|
||||
+163
-113
@@ -1,7 +1,7 @@
|
||||
# What changed in OpenRig 0.7.0
|
||||
# What changed in OpenRig 0.7.1
|
||||
|
||||
This note is for an agent on an install that was just upgraded to 0.7.0. It lists only what behaves differently from
|
||||
0.6.14 and what to do about it. For everything OpenRig can do, read the capability map:
|
||||
This note is for an agent on an install that was just upgraded to 0.7.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
|
||||
@@ -9,134 +9,184 @@ 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`). Six migrations run on the first start (116, 118,
|
||||
119, 121, 122 and 123). Two settings are added, `terminal.history_limit` (default 10000) and
|
||||
`terminal.inherit_tmux_environment` (default false), and `provider.subscription_moves` is removed.
|
||||
- **The bundled openrig-core plugin goes from 0.1.15 to 0.1.17.** Startup replaces installed copies of managed plugins and
|
||||
marked global skills. It first copies every file it replaces under `$OPENRIG_HOME/backups/managed-refresh/<id>/`,
|
||||
whether or not anyone edited it, and logs `[plugin-vendor] preserved previous contents of <file> at <copy> before
|
||||
managed refresh` for each one. A stock upgrade from 0.6.14 copies about 22 files (about 250 KB), and a later start with
|
||||
no new version copies none. The copies matter only for files someone changed: the copy keeps the bytes, but the change
|
||||
may no longer be active after the refresh. Keep the log line, because it names the original file and the copy's folder
|
||||
doesn't. If a copy fails, that plugin or skill isn't refreshed, its files are kept, and the log says so. Copies aren't
|
||||
cleaned up.
|
||||
- **If you gave new agents accounts or API keys through tmux's global environment** (`tmux set-environment -g …`), new
|
||||
agents no longer inherit it (below). Put the values in the seat's `env`, pass `rig up --env KEY=VALUE`, or keep the old
|
||||
behaviour with `rig config set terminal.inherit_tmux_environment true`. Running agents aren't affected.
|
||||
- **If you write queue rows to another machine by its self-id** (`member@rig@<self-id>`), run `rig host doctor <alias>`
|
||||
once per host: bindings learned before 0.7.0 have no address.
|
||||
- **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.
|
||||
|
||||
## New things you can do
|
||||
|
||||
- **Hold a person's routine asks while they're away:** `rig gateway human quiet set <id> --daily HH:MM-HH:MM` or
|
||||
`--until <time>` (`--tz`), and `end`, `clear` or `show`. A held ask posts once, without a mention, when quiet ends.
|
||||
Asks tagged `escalation` or `wake-escalation` are not held.
|
||||
- **Apply a person's mode** ("asleep", "out of office"): `rig gateway human mode save <id> <name>` (with
|
||||
`--availability`, `--expected-back`, `--decision-room "<their words>"`, `--exclude`, `--quiet`), then `apply <id>
|
||||
<name> [--until …]`, `current`, `end` and `account`. Never tell the person "back to normal" while the account shows an
|
||||
effect `kept`, `pending` or `failed`.
|
||||
- **Decide an ask inside a person's decision room:** check `rig gateway human mode room <id>`, then `rig gateway human
|
||||
mode decide <qitemId> --application <id> --reason "…" --reversible|--irreversible`. It's recorded as delegated, never
|
||||
as their answer, and only the agent that asked can decide. Permission prompts are refused (`permission-prompt`).
|
||||
- **Pass a rig's name instead of its id** to `archive`, `unarchive`, `release`, `shrink`, `expand`, `snapshot`,
|
||||
`export` and `restore --rig`. A name two rigs share is refused and the matching ids are named: with `--json`,
|
||||
`archive`, `unarchive`, `release`, `shrink`, `expand` and `restore status --rig` return `rig_ambiguous`.
|
||||
- **Stop a managed compaction's follow-up after `/compact` was sent:** `rig compact --cancel` now also disarms the
|
||||
restore and audit prompts that would follow. It sends no input and can't undo the `/compact`.
|
||||
- **See your work candidates:** `rig queue whoami` adds `currentWorkChoice` when current work isn't settled.
|
||||
- **See why a wake didn't land:** `rig queue show --json` adds `lastNudgeInputBox`.
|
||||
- **See each seat's configured effort:** the TUI agent table's `CFG EFF` column, and `effort` and `effortSource` in
|
||||
`rig ps --nodes --full --json`. It's the configured level, not what the model ran.
|
||||
- **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.
|
||||
|
||||
## Behaviour that changed
|
||||
|
||||
- **New agents start from a clean environment, not tmux's global one.** A new seat or handover successor gets:
|
||||
- the launch environment: `PATH`, `HOME`, `USER`, `LOGNAME`, `CODEX_HOME`, `OPENRIG_HOME`, `OPENRIG_URL`,
|
||||
`OPENRIG_PORT`, `OPENRIG_HOST`, the seat's own identity values (such as `OPENRIG_SESSION_NAME`) and the allowed
|
||||
provider sign-in variables. Not `OPENRIG_DB` or `TMUX_TMPDIR` (see Known gaps);
|
||||
- the daemon's `LANG`, `LC_ALL`, `LC_CTYPE`, `TZ`, `TMPDIR`, `XDG_CONFIG_HOME`, `XDG_DATA_HOME`, `XDG_CACHE_HOME` and
|
||||
`CLAUDE_CONFIG_DIR`;
|
||||
- the values named in tmux's `update-environment`;
|
||||
- its own `env`.
|
||||
|
||||
Shell startup still runs. `rig setup` warns when it sees a custom tmux configuration.
|
||||
- **After a reboot, the daemon restores a kernel whose seats are all detached** (and still bound to their sessions), in
|
||||
the background, as `rig up kernel --existing` would. `OPENRIG_NO_KERNEL=1` still skips it, and `rig start --json` reports `kernelRestore`.
|
||||
- **A seat missing a required startup file no longer blocks its rig's restore:** `rig up <rig> --existing` holds that
|
||||
seat and restores the others (`partially_restored`).
|
||||
- **Seats added to a running rig** with `rig expand`, `rig grow` or add-member get its culture file and rig-level
|
||||
startup, for rigs created on 0.7.0 or later. Older rigs get no backfill.
|
||||
- **A busy daemon gets the real request.** The CLI refuses only when the daemon is stopped or stale, the connection is
|
||||
refused or blocked, or the daemon answering belongs to another OpenRig home. A slow daemon is no longer read as down.
|
||||
- **A new seat's first startup message** says it's OpenRig's identity context, not a task. A seat whose startup sends
|
||||
nothing else is asked to run `rig whoami --json` and say it's ready for an assignment.
|
||||
- **A new Claude seat's first startup text** waits briefly (about five seconds) for Claude's input box before it's
|
||||
sent.
|
||||
- **Codex seats that select openrig-core get the plugin installed into Codex.** While Codex hooks are on
|
||||
(`runtime.codex.hooks_enabled`, default on), OpenRig installs it with Codex's own marketplace and plugin commands at
|
||||
daemon start and at a fresh launch, unless the person's Codex configuration disables it.
|
||||
- **A first install only** (no earlier install or plugin cache): OpenRig checks the installed hook files against its own
|
||||
copy, then trusts the plugin's six shipped hooks by their exact definitions, so the seat starts without Codex's hook
|
||||
review.
|
||||
The file check happens only when trust is granted: a later edit to the cached hook scripts keeps that trust, as with any hook trusted in Codex.
|
||||
- **An existing install keeps the person's choices.** A plugin or hook they disabled stays disabled. One they left
|
||||
untrusted stays under Codex's review: Codex records nothing for "continue without trusting", so OpenRig doesn't read a
|
||||
missing trust record as permission.
|
||||
- **What it adds:** the four managed inline hooks stay the only activity reporters; the plugin adds refocus and its
|
||||
skills.
|
||||
- **Watchdog delivery is recorded as it happened:** `rig watchdog status` outcomes are `sent`, `refused`, `failed`,
|
||||
`skipped` or `terminal` (0.6.14 had `sent`, `skipped` or `terminal`). Every reminder carries "Delivery may repeat after
|
||||
an unconfirmed attempt." under its header line, and two refusals in a row at one seat's prompt raise that seat's prompt
|
||||
alert. A park wake shows the continuation its park recorded (`Recorded continuation: …`), so record one when you park.
|
||||
- **Slack:** a thread reply answers a parked question only if it was written after the question posted, and a message
|
||||
Slack rejects as `invalid_blocks` isn't posted again.
|
||||
- **Claude Code team agents are asked for permission less often.** Housekeeping commands such as `archive`, `attach`,
|
||||
`bind`, `release`, `reconcile-session`, `config set` and `seat continue` no longer prompt. `seat restart` and `policy
|
||||
permissions apply` now do.
|
||||
- **`rig up --plan` waits as long as an apply** (120 seconds). An unanswered plan exits 1 and is safe to run again.
|
||||
- **`rig setup` keeps 10,000 rows of tmux history**, down from 50,000 (`terminal.history_limit`, 2000 to 1000000).
|
||||
- **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.
|
||||
|
||||
## Output that changed shape
|
||||
|
||||
- **`rig gateway human list`** shows each person's availability (`available`, `focus`, `away` or `off`) where it showed
|
||||
`away` or `available`, plus a `quiet:` line; JSON adds `availability` and `quiet`.
|
||||
- **`rig attach`** prints `Sender:` (and `Tmux:` when the names differ), and `rig whoami` adds `identity.senderAddress`.
|
||||
A clashing member name is refused with `address_conflict`.
|
||||
- **Send results** carry `managedCompaction`, and the CLI prints a `Notice:` line.
|
||||
- **`rig ps --rig <unknown>`** exits 1, and `--host H --rig X` filters by rig.
|
||||
- **`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
|
||||
|
||||
- **Don't use `rig provider moves`:** it's gone with its setting. Report a subscription move as a queue item to whoever
|
||||
asked.
|
||||
- **Don't steer a new seat's account or keys through tmux globals.** Use the seat's `env` or `rig up --env`.
|
||||
- **Don't close a row `done` with `--closure-reason blocked_on`.** It's refused with `invalid_closure_reason`; use `rig
|
||||
queue block <id> --on <child>`.
|
||||
- **Don't treat "daemon did not respond" as down.** Check the effect before any retry or restart.
|
||||
- **Don't look up a rig id first** for the commands above; pass the name.
|
||||
- **Don't restart the daemon to stop a managed compaction's follow-up prompts.** Use `rig compact --cancel`.
|
||||
- **Don't run `rig up kernel --existing` by hand after a reboot** before checking `rig status`.
|
||||
- **Don't reuse a `deliveryId` to deduplicate a send,** and don't pass `--reason` or `--actor` to `rig slack verify`.
|
||||
- **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.
|
||||
|
||||
## Known gaps in 0.7.0
|
||||
|
||||
- **A new seat doesn't get the daemon's `OPENRIG_DB` or `TMUX_TMPDIR`.** A tool in the seat that reads `OPENRIG_DB`
|
||||
directly can fall back to the default database. If you rely on either, pass it in the seat's `env` or with `rig up
|
||||
--env`.
|
||||
- **A launch that warns "Scoped tmux environment unavailable; retaining the previous environment"** didn't give that seat
|
||||
the clean environment, and the seat may lack OpenRig's variables. Check `env` in the seat before relying on them.
|
||||
- **A Slack channel-mapping change needs a daemon restart** (`rig daemon stop`, then `rig daemon start`). Don't use `rig
|
||||
slack disable` then `enable` for it: enabling marks any alerts waiting to post to Slack as already seen, so open
|
||||
exchanges miss them.
|
||||
## Known gaps in 0.7.1
|
||||
|
||||
- **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.
|
||||
- **The TUI's terminal button refuses inside a Herdr pane reached over SSH.** Start the TUI with `env -u SSH_CONNECTION
|
||||
-u SSH_CLIENT -u SSH_TTY rig tui`, or run `rig terminal open '<view>' --provider herdr`.
|
||||
- **Claude seats on a macOS native install can read as needing attention after a restore.** Check the pane before
|
||||
acting on it.
|
||||
- **Ubuntu 22.04's stock tmux 3.2a can crash its whole server** when OpenRig checks a pane that has just closed. Avoid
|
||||
tmux 3.2a for OpenRig (`tmux -V`).
|
||||
- **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`.
|
||||
Generated
+5
-5
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "openrig",
|
||||
"version": "0.7.0",
|
||||
"version": "0.7.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "openrig",
|
||||
"version": "0.7.0",
|
||||
"version": "0.7.1",
|
||||
"license": "Apache-2.0",
|
||||
"workspaces": [
|
||||
"packages/daemon",
|
||||
@@ -7069,7 +7069,7 @@
|
||||
},
|
||||
"packages/cli": {
|
||||
"name": "@openrig/cli",
|
||||
"version": "0.7.0",
|
||||
"version": "0.7.1",
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
@@ -7104,7 +7104,7 @@
|
||||
},
|
||||
"packages/daemon": {
|
||||
"name": "@openrig/daemon",
|
||||
"version": "0.7.0",
|
||||
"version": "0.7.1",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@hono/node-server": "^1.13.0",
|
||||
@@ -7146,7 +7146,7 @@
|
||||
},
|
||||
"packages/ui": {
|
||||
"name": "@openrig/ui",
|
||||
"version": "0.7.0",
|
||||
"version": "0.7.1",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@fontsource-variable/jetbrains-mono": "^5.2.8",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "openrig",
|
||||
"version": "0.7.0",
|
||||
"version": "0.7.1",
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openrig/cli",
|
||||
"version": "0.7.0",
|
||||
"version": "0.7.1",
|
||||
"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/daemon",
|
||||
"version": "0.7.0",
|
||||
"version": "0.7.1",
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openrig/ui",
|
||||
"version": "0.7.0",
|
||||
"version": "0.7.1",
|
||||
"private": true,
|
||||
"license": "Apache-2.0",
|
||||
"type": "module",
|
||||
|
||||
Reference in new issue
Block a user