@openrig/cli 0.6.13 → 0.6.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -6
- package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
- package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +11 -3
- package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +12 -32
- package/daemon/context-packs/help/manifest.yaml +1 -1
- package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
- package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +17 -5
- package/daemon/context-packs/reference/getting-started.md +93 -16
- package/daemon/context-packs/reference/manifest.yaml +1 -1
- package/daemon/context-packs/reference/whats-new.md +64 -93
- package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
- package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
- package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
- package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
- package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
- package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
- package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-user/SKILL.md +11 -3
- package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
- package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
- package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
- package/daemon/context-packs/skills/refocusing/scripts/trace-to-root.py +12 -32
- package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
- package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
- package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
- package/daemon/context-packs/world-example/manifest.yaml +1 -1
- package/daemon/context-packs/world-public/manifest.yaml +1 -1
- package/daemon/dist/adapters/tmux.js +1 -1
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/domain/claim-service.d.ts +9 -18
- package/daemon/dist/domain/claim-service.d.ts.map +1 -1
- package/daemon/dist/domain/claim-service.js +83 -0
- package/daemon/dist/domain/claim-service.js.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts +2 -2
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.js +20 -14
- package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
- package/daemon/dist/domain/fresh-occupant-relation.d.ts.map +1 -1
- package/daemon/dist/domain/fresh-occupant-relation.js +2 -1
- package/daemon/dist/domain/fresh-occupant-relation.js.map +1 -1
- package/daemon/dist/domain/topology-converge.d.ts +1 -0
- package/daemon/dist/domain/topology-converge.d.ts.map +1 -1
- package/daemon/dist/domain/topology-converge.js +1 -0
- package/daemon/dist/domain/topology-converge.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +4 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/wake-resolve-service.d.ts +1 -0
- package/daemon/dist/domain/wake-resolve-service.d.ts.map +1 -1
- package/daemon/dist/domain/wake-resolve-service.js +10 -0
- package/daemon/dist/domain/wake-resolve-service.js.map +1 -1
- package/daemon/dist/domain/wake-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/wake-resolver.js +7 -0
- package/daemon/dist/domain/wake-resolver.js.map +1 -1
- package/daemon/dist/routes/compaction.js +1 -1
- package/daemon/dist/routes/compaction.js.map +1 -1
- package/daemon/dist/routes/sessions.js +35 -0
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +6 -4
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +2 -5
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/getting-started.md +93 -16
- package/daemon/docs/reference/quickstart.md +187 -0
- package/daemon/docs/reference/whats-new.md +64 -93
- package/dist/build-info.js +3 -3
- package/dist/client.d.ts +7 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +28 -0
- package/dist/client.js.map +1 -1
- package/dist/commands/ask.d.ts.map +1 -1
- package/dist/commands/ask.js +13 -3
- package/dist/commands/ask.js.map +1 -1
- package/dist/commands/chatroom.d.ts.map +1 -1
- package/dist/commands/chatroom.js +1 -0
- package/dist/commands/chatroom.js.map +1 -1
- package/dist/commands/compact.d.ts.map +1 -1
- package/dist/commands/compact.js +5 -4
- package/dist/commands/compact.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +1 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +39 -16
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/reconcile-session.d.ts.map +1 -1
- package/dist/commands/reconcile-session.js +25 -4
- package/dist/commands/reconcile-session.js.map +1 -1
- package/dist/commands/ui.d.ts.map +1 -1
- package/dist/commands/ui.js +8 -1
- package/dist/commands/ui.js.map +1 -1
- package/dist/config-store.d.ts +2 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +5 -0
- package/dist/config-store.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +11 -3
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/front-door.d.ts.map +1 -1
- package/dist/front-door.js +3 -1
- package/dist/front-door.js.map +1 -1
- package/dist/local-daemon-owner.d.ts +28 -0
- package/dist/local-daemon-owner.d.ts.map +1 -0
- package/dist/local-daemon-owner.js +98 -0
- package/dist/local-daemon-owner.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,25 +8,71 @@ OpenRig is open-source software for building and running your own network of age
|
|
|
8
8
|
|
|
9
9
|
It's the open-source system behind my AI civilization experiments.
|
|
10
10
|
|
|
11
|
-
**Guide:** [Getting started](docs/reference/
|
|
11
|
+
**Guide:** [Getting started](docs/reference/quickstart.md) · **Stuck?** [Help](docs/reference/help.md) · **Questions:** [Q&A](https://github.com/mvschwarz/openrig/discussions/92) · **Updates and demos:** [@_feralmachine on X](https://x.com/_feralmachine)
|
|
12
12
|
|
|
13
13
|
## See it running
|
|
14
14
|
|
|
15
15
|

|
|
16
16
|
|
|
17
|
-
**Start here:** [the guided first-use path](docs/reference/
|
|
17
|
+
**Start here:** [the guided first-use path](docs/reference/quickstart.md): install, talk to the kernel operator, then choose a team for your first useful change.
|
|
18
18
|
|
|
19
19
|
Not setting this up today? Get the next walkthrough and occasional OpenRig updates → https://openrig.dev/follow
|
|
20
20
|
|
|
21
21
|
## Install and first run
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
**Let your coding agent set it up.** First check that `node --version` shows 22 or 24: the command below needs
|
|
24
|
+
Node.js and the `npx` that comes with it. Then, in your project folder, add OpenRig's `rigs` skill to the agent you
|
|
25
|
+
use:
|
|
24
26
|
|
|
25
|
-
|
|
27
|
+
```sh
|
|
28
|
+
# Claude Code
|
|
29
|
+
npx skills add https://github.com/mvschwarz/openrig/tree/v0.6.14/skills/rigs --skill rigs --agent claude-code
|
|
30
|
+
# Codex
|
|
31
|
+
npx skills add https://github.com/mvschwarz/openrig/tree/v0.6.14/skills/rigs --skill rigs --agent codex
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Then type `/rigs` in Claude Code, or `$rigs` in Codex, and say what you want built. The skill has your agent tell
|
|
35
|
+
you what it will run and change before it does, install OpenRig, open the OpenRig view and pass your goal to
|
|
36
|
+
OpenRig's operator.
|
|
37
|
+
|
|
38
|
+
You need Node.js 22 or 24 (22 on Apple silicon), tmux, macOS or Linux (WSL2 on Windows), and Claude Code or Codex
|
|
39
|
+
signed in. One provider is enough to start.
|
|
40
|
+
|
|
41
|
+
Already have OpenRig? Use the tag that matches `rig --version`, or upgrade first.
|
|
42
|
+
|
|
43
|
+
Prefer to type the commands yourself? [Install it yourself ↓](#install-it-yourself)
|
|
44
|
+
|
|
45
|
+
Requires Node.js 22 or 24 and tmux, on macOS or Linux, and one working Claude Code or Codex account: one is enough, since the kernel operator adapts the shipped `starter` team to whichever you have. On Linux, the distribution's own Node.js can be older (Ubuntu 24.04's is 18); install a supported version with [nvm](https://github.com/nvm-sh/nvm) (`nvm install 22`) or NodeSource. On a Mac with Apple silicon, use Node.js 22 ([compatibility history](docs/releases/v0.5.15.md#known-compatibility-limitation)). On a Mac where you aren't an administrator, or where Homebrew belongs to another account (its `brew install` is refused), install Node.js in your own home folder with [nvm](https://github.com/nvm-sh/nvm): run `touch ~/.zshrc` (a new Mac account has none, and nvm's installer only adds itself to a profile file that already exists), then the install command on nvm's page, open a new terminal, and run `nvm install 22`. That needs no administrator password, and `npm install -g` then installs into your nvm folder. On Windows, use WSL2, the Windows route OpenRig supports; native Windows isn't supported. OpenRig's automated tests don't run on WSL2 yet; see [one user's working setup](docs/reference/getting-started.md#wsl2-a-reported-working-setup).
|
|
46
|
+
|
|
47
|
+
> **What OpenRig changes on your machine**
|
|
48
|
+
> - **Install:** `@openrig/cli` goes in globally with npm.
|
|
49
|
+
> - **Setup:** `rig setup` adds an OpenRig block to `~/.tmux.conf`. It can install tmux (with Homebrew on macOS), and
|
|
50
|
+
> Herdr unless you pass `--no-herdr`. Plain `rig setup`, which is what the one-command install runs, checks both
|
|
51
|
+
> Claude Code and Codex and may install a missing one; `rig setup --providers claude` (or `codex`) limits it to
|
|
52
|
+
> yours.
|
|
53
|
+
> - **Starting OpenRig, for the coding agent you use** (paths are the usual defaults):
|
|
54
|
+
> - Codex: hooks and trust in `~/.codex/config.toml`.
|
|
55
|
+
> - Claude Code: workspace trust in `~/.claude.json`, and activity hooks in the project's
|
|
56
|
+
> `.claude/settings.local.json`, plus a status line unless you already have your own.
|
|
57
|
+
> - Discovery skills go in `~/.claude/skills` and `~/.agents/skills`.
|
|
58
|
+
> - **Starting a team in your project:** adds managed guidance to `AGENTS.md` or `CLAUDE.md`, plus the team's skills
|
|
59
|
+
> and plugins.
|
|
60
|
+
> - **Permissions:** by default, OpenRig's own kernel gets broader permissions than a project team gets by default.
|
|
61
|
+
> On Codex that's full access with no approval prompts (`-s danger-full-access -a never`). On Claude Code, its file
|
|
62
|
+
> tools, web fetches and operational commands, including reads under your home folder, run without asking. A
|
|
63
|
+
> permission policy, per-agent choice or Codex profile changes that. What your team can do depends on the team you
|
|
64
|
+
> choose and your settings; `workshop`, for example, ships with broad access.
|
|
65
|
+
> - **Backups:** OpenRig doesn't guarantee it can preserve or roll back these files, so back them up first.
|
|
66
|
+
>
|
|
67
|
+
> [Everything OpenRig writes, and why →](https://github.com/mvschwarz/openrig#what-openrig-changes-on-your-machine)
|
|
68
|
+
|
|
69
|
+
### Install it yourself
|
|
70
|
+
|
|
71
|
+
This runs OpenRig's install script from the `v0.6.14` release. It checks Node.js and npm, installs the latest published `@openrig/cli` with `npm install -g`, runs the Node.js and SQLite check, then runs `rig setup --dry-run` and `rig setup`. The first line prints that plan and changes nothing:
|
|
26
72
|
|
|
27
73
|
```bash
|
|
28
|
-
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.
|
|
29
|
-
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.
|
|
74
|
+
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.14/scripts/install.sh | sh -s -- --dry-run
|
|
75
|
+
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.14/scripts/install.sh | sh
|
|
30
76
|
```
|
|
31
77
|
|
|
32
78
|
If `rig setup` doesn't finish ready, for example because a provider isn't signed in yet, the script ends with `INSTALLED, SETUP NOT COMPLETE`: the CLI is installed, and `rig setup` lists what's left under "Some steps need attention". If the only items left are provider sign-ins, sign in to each selected provider as below and continue; run `rig setup` again rather than reinstalling the CLI.
|
|
@@ -342,6 +388,8 @@ For cmux, use `--provider cmux`. In the TUI, a rig's detail view has an `Open te
|
|
|
342
388
|
|
|
343
389
|
## Key Concepts
|
|
344
390
|
|
|
391
|
+
The first words you meet, in plain language: [What these words mean](docs/reference/quickstart.md#what-these-words-mean).
|
|
392
|
+
|
|
345
393
|
- **RigSpec**: Declarative multi-agent harness definition in YAML. Pods, members, edges, continuity policies, culture file.
|
|
346
394
|
- **AgentSpec**: Reusable agent blueprint with skills, guidance, hooks, profiles, and startup contracts.
|
|
347
395
|
- **Seat**: A stable role and address in a rig, such as `dev-build@starter`. The conversation occupying it can change while its identity and authored context remain.
|
|
@@ -384,11 +384,19 @@ rig reconcile-session <session>
|
|
|
384
384
|
rig reconcile-session <session> --rig <rigId> --node <logicalId>
|
|
385
385
|
rig reconcile-session <session> --no-launch
|
|
386
386
|
rig reconcile-session <session> --json
|
|
387
|
+
rig reconcile-session <session> --repair-missing-pane --no-launch
|
|
387
388
|
```
|
|
388
389
|
|
|
389
|
-
This is a no-launch, no-input adopt
|
|
390
|
-
|
|
391
|
-
|
|
390
|
+
This is a no-launch, no-input adopt: it records a new claimed session row for
|
|
391
|
+
the seat (any running row is superseded); it re-captures the resume token if
|
|
392
|
+
it can, and conversation continuity stays unverified. `--rig`/`--node`
|
|
393
|
+
disambiguate when the canonical session name does not uniquely resolve.
|
|
394
|
+
`--no-launch` is accepted for explicitness.
|
|
395
|
+
|
|
396
|
+
`--repair-missing-pane --no-launch` is different: for a running launched seat
|
|
397
|
+
whose tmux pane was never recorded, it fills in the pane and keeps the
|
|
398
|
+
session, resume token and generation. It never adopts. Both forms refuse
|
|
399
|
+
while the seat's typing protection is on.
|
|
392
400
|
|
|
393
401
|
### Five-term restore status vocabulary
|
|
394
402
|
|
|
@@ -75,39 +75,19 @@ def read(path):
|
|
|
75
75
|
return None
|
|
76
76
|
|
|
77
77
|
|
|
78
|
+
# Contract twin of CLI scope-fs.ts and daemon scope/node-file.ts; parity is tested.
|
|
79
|
+
NOTES_FILE_PRECEDENCE = ("NOTES.md", "MISSION_NOTES.md")
|
|
80
|
+
|
|
81
|
+
|
|
78
82
|
def resolve_notes(node):
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
except subprocess.TimeoutExpired:
|
|
88
|
-
return None, "resolver command timed out"
|
|
89
|
-
except OSError as error:
|
|
90
|
-
return None, f"resolver command could not start: {error}"
|
|
91
|
-
if result.returncode != 0:
|
|
92
|
-
detail = (result.stderr or result.stdout or "").strip().splitlines()
|
|
93
|
-
suffix = f": {detail[0]}" if detail else ""
|
|
94
|
-
return None, f"resolver command exited {result.returncode}{suffix}"
|
|
95
|
-
try:
|
|
96
|
-
payload = json.loads(result.stdout)
|
|
97
|
-
except (json.JSONDecodeError, TypeError):
|
|
98
|
-
return None, "resolver command returned malformed JSON"
|
|
99
|
-
if not isinstance(payload, dict) or payload.get("ok") is not True or "resolution" not in payload:
|
|
100
|
-
return None, "resolver command returned an invalid success shape"
|
|
101
|
-
resolution = payload["resolution"]
|
|
102
|
-
if resolution is None:
|
|
103
|
-
return None, None
|
|
104
|
-
if not isinstance(resolution, dict):
|
|
105
|
-
return None, "resolver command returned an invalid resolution shape"
|
|
106
|
-
resolved_path = resolution.get("path")
|
|
107
|
-
resolved_name = resolution.get("name")
|
|
108
|
-
if not isinstance(resolved_path, str) or not isinstance(resolved_name, str):
|
|
109
|
-
return None, "resolver command returned an invalid resolution shape"
|
|
110
|
-
return (Path(resolved_path), resolved_name), None
|
|
83
|
+
for name in NOTES_FILE_PRECEDENCE:
|
|
84
|
+
candidate = node / name
|
|
85
|
+
try:
|
|
86
|
+
if candidate.is_file() and os.access(candidate, os.R_OK):
|
|
87
|
+
return (candidate, name), None
|
|
88
|
+
except OSError:
|
|
89
|
+
pass
|
|
90
|
+
return None, None
|
|
111
91
|
|
|
112
92
|
|
|
113
93
|
def intent(text):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Agent help: the single troubleshooting and escalation guide (docs/reference/help.md).
|
|
2
2
|
name: help
|
|
3
|
-
version: "0.6.
|
|
3
|
+
version: "0.6.14"
|
|
4
4
|
taxonomy: world
|
|
5
5
|
purpose: "What an agent does when its user says OpenRig isn't working: diagnose, fix within permissions, verify, and escalate to OpenRig support."
|
|
6
6
|
files:
|
|
@@ -11,7 +11,7 @@ not know exists.** So the point of what follows is not skill. It is recognition:
|
|
|
11
11
|
lands, something rhymes, and you go check instead of building.
|
|
12
12
|
|
|
13
13
|
Eighty-eight top-level verbs ship (capability canon refreshed through
|
|
14
|
-
`capability-delta-v0.6.
|
|
14
|
+
`capability-delta-v0.6.14`). This marker describes the pack's teaching, not publication or live
|
|
15
15
|
adoption. Read this once for shape, and let it make you suspicious that a thing already exists.
|
|
16
16
|
Model-divergence proclamations are live product (trust them; pins use canonical
|
|
17
17
|
model IDs).
|
|
@@ -135,7 +135,8 @@ unseen — which makes messages the one delivery channel that never gets skipped
|
|
|
135
135
|
read something, do not ask it. Look.**
|
|
136
136
|
- **`rig ask`** — search what was said or decided, across *every generation that ever sat in a
|
|
137
137
|
seat*. It reaches back past a handover that erased your predecessor's context, and costs no
|
|
138
|
-
runtime tokens.
|
|
138
|
+
runtime tokens. `--wake` asks a Claude or Codex seat itself; any other runtime (Pi, custom, or
|
|
139
|
+
none recorded) is refused before a wake starts.
|
|
139
140
|
- **`rig chatroom wait`** — block until a peer actually says something, instead of polling
|
|
140
141
|
`capture` in a loop. Also `history`, `watch`, `topic` for a named thread that stays retrievable.
|
|
141
142
|
Its `--timeout` is in seconds and ignores a suffix, so `2m` means 2 seconds. Poll timeouts,
|
|
@@ -460,7 +461,12 @@ not have to tear one down to change it, and you rarely have to start from nothin
|
|
|
460
461
|
to a node. **`rig adopt`** does the whole thing at once: create the structure and bind the
|
|
461
462
|
running sessions into it.
|
|
462
463
|
- **`rig reconcile-session`** — you resumed a seat by hand and the daemon still shows it down; make
|
|
463
|
-
the system see the live process **without launching anything**.
|
|
464
|
+
the system see the live process **without launching anything**. A running seat that refuses every
|
|
465
|
+
send because its tmux pane was never recorded (one launched by an older OpenRig) takes
|
|
466
|
+
`rig reconcile-session <seat> --repair-missing-pane --no-launch`: it fills only the missing pane,
|
|
467
|
+
keeps the session and resume token, never adopts, and refuses while typing protection is on.
|
|
468
|
+
Plain reconcile adopts the seat into a new session without its resume token; use the repair even
|
|
469
|
+
where a protected seat's compaction refusal still suggests plain reconcile.
|
|
464
470
|
- **`rig unclaim` / `rig release`** — stop managing one adopted session, or all of them,
|
|
465
471
|
**without killing the process or the agent inside it**. Handing something back to its human is a
|
|
466
472
|
first-class move, not an abandonment.
|
|
@@ -487,6 +493,7 @@ version, from checking the environment to a useful report to the OpenRig team.
|
|
|
487
493
|
Stop distinguishes process/listener exit from a clean asynchronous drain: inspect the matching
|
|
488
494
|
`daemon-shutdown.json` and log when completion is incomplete or unverified. No target is a
|
|
489
495
|
distinct no-op, and a timeout never proves down. Use command help for exact limits and recovery.
|
|
496
|
+
`/healthz` reports the daemon's effective UID as `euid`, beside `pid`.
|
|
490
497
|
- **`rig doctor`** — is the *installation* wired up correctly, or are you chasing a bug that is
|
|
491
498
|
really a broken install. It checks Claude and Codex installs, and a login or configured provider
|
|
492
499
|
credential, the way setup does; it fails for a harness the person doesn't use, which they can
|
|
@@ -590,7 +597,9 @@ version, from checking the environment to a useful report to the OpenRig team.
|
|
|
590
597
|
- **`rig compact-plan`** → **`rig compact`** — who is near the context wall, then act on it.
|
|
591
598
|
**Ordering matters: running `compact` without the plan is guessing which seat needed it.**
|
|
592
599
|
Managed compaction waits for the seat's restore map before compacting; `rig compact --state`,
|
|
593
|
-
`--cancel` and `--skip-map` inspect, stop or skip that wait.
|
|
600
|
+
`--cancel` and `--skip-map` inspect, stop or skip that wait. If preparation stops at an ordinary
|
|
601
|
+
approval, a manual `rig compact` keeps waiting for someone to answer it, within its 180-second
|
|
602
|
+
budget; OpenRig never answers it, and the request times out after 240 seconds. The `claude-compaction-restore`
|
|
594
603
|
skill covers writing and reading the map; `claude-compact-in-place` no longer ships. After a
|
|
595
604
|
managed compaction, refocus waits for the restore request, which names the `refocusing` skill
|
|
596
605
|
(the daemon installs it globally); three failed refocus attempts in a row for one occupant post
|
|
@@ -840,7 +849,10 @@ your circumstances is configuration, and the ones that are not, another agent ca
|
|
|
840
849
|
- **`rig config get` / `reset` / `init-workspace`** — read one value, change a system-wide setting
|
|
841
850
|
and put it back exactly as it was, or additively lay down the canonical project scaffold on a
|
|
842
851
|
box that has none. Instance startup uses the same additive initializer for the surrounding
|
|
843
|
-
`state`, `context`, `skills`, `topology`, and operational roots.
|
|
852
|
+
`state`, `context`, `skills`, `topology`, and operational roots. With `transport.local_user_guard`
|
|
853
|
+
on (off by default; `rig config set transport.local_user_guard true`), a Mac's local `rig` requests
|
|
854
|
+
stop only when the daemon's reported, `ps`-corroborated user differs from yours; unknown evidence
|
|
855
|
+
lets the call through. It isn't authentication or isolation.
|
|
844
856
|
- **`rig policy permissions list` / `show` / `current` / `apply`** — what permission policy is
|
|
845
857
|
actually in effect: discovers custom policy specs, validates refs (malformed can never read as
|
|
846
858
|
valid OR absent), shows what would apply. The older `rig policy list|show|current|apply` forms
|
|
@@ -1,20 +1,66 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
# OpenRig setup reference
|
|
2
|
+
|
|
3
|
+
This is the full reference for installing and running OpenRig, written for the agent doing the setup and for anyone
|
|
4
|
+
who wants the detail. The short version for people is [Getting started](quickstart.md).
|
|
5
|
+
|
|
6
|
+
## For the agent doing the setup
|
|
7
|
+
|
|
8
|
+
The `rigs` skill is the procedure: follow it in order. This page is what it looks things up in.
|
|
9
|
+
|
|
10
|
+
- **Done** means the person is talking to the operator in a visible OpenRig view. A healthy daemon, a started kernel
|
|
11
|
+
or an opened window isn't done on its own. If they'd rather talk later, the handoff is still pending: say so, and
|
|
12
|
+
leave them the exact command.
|
|
13
|
+
- **Read readiness; don't assume it:**
|
|
14
|
+
- **The kernel:** the `Kernel:` line in `rig status`, and `rig ps --nodes --rig kernel`.
|
|
15
|
+
- **A team:** `rig ps --nodes --rig <team>`.
|
|
16
|
+
- A missing or unknown signal isn't ready.
|
|
17
|
+
- `rig up` exiting 1 with `Status: partial` and `Startup attention` means a seat is waiting at a prompt. Answer it,
|
|
18
|
+
or ask the person to, then run the `rig seat continue <seat>` it names.
|
|
19
|
+
- **Prerequisites:** check the person's existing toolchain first (mise, nvm, Homebrew or the nodejs.org installer)
|
|
20
|
+
and the PATH. Use what's there. Don't change a shared Homebrew's ownership, and don't make a local workaround the
|
|
21
|
+
standard route. If Node.js is installed after your session started, check that new shells and the session's hooks
|
|
22
|
+
can find it. In one published-0.6.11 Mac run, OpenRig's Claude hooks reported `node: command not found` until the
|
|
23
|
+
PATH was fixed.
|
|
24
|
+
- **Ask once, then reuse the answer:** the provider (Claude Code, Codex or both), Herdr, Ghostty on macOS,
|
|
25
|
+
remembered command allowances, and the team.
|
|
26
|
+
- **Before changing their machine:** say what applies to their route, then wait for a yes. See
|
|
27
|
+
[what OpenRig changes on your machine](../../README.md#what-openrig-changes-on-your-machine).
|
|
28
|
+
- **When something stops:**
|
|
29
|
+
- [Incomplete setup and restart](#incomplete-setup-and-restart) maps what you see to the next action.
|
|
30
|
+
- [What can interrupt installation and the OpenRig view](#what-can-interrupt-installation-and-the-openrig-view)
|
|
31
|
+
covers the view.
|
|
32
|
+
- [Headless or SSH handoff](#headless-or-ssh-handoff) covers no-display cases.
|
|
33
|
+
- A timed-out command may still have taken effect. Read `rig ps` or `rig seat status <seat>` before you run it
|
|
34
|
+
again.
|
|
35
|
+
- **Don't:**
|
|
36
|
+
- relaunch a team to reopen its view;
|
|
37
|
+
- start another seat to clear a prompt;
|
|
38
|
+
- build the person's project yourself. Give the goal to the operator.
|
|
15
39
|
|
|
16
40
|
## Before you start
|
|
17
41
|
|
|
42
|
+
> **What OpenRig changes on your machine**
|
|
43
|
+
> - **Install:** `@openrig/cli` goes in globally with npm.
|
|
44
|
+
> - **Setup:** `rig setup` adds an OpenRig block to `~/.tmux.conf`. It can install tmux (with Homebrew on macOS), and
|
|
45
|
+
> Herdr unless you pass `--no-herdr`. Plain `rig setup`, which is what the one-command install runs, checks both
|
|
46
|
+
> Claude Code and Codex and may install a missing one; `rig setup --providers claude` (or `codex`) limits it to
|
|
47
|
+
> yours.
|
|
48
|
+
> - **Starting OpenRig, for the coding agent you use** (paths are the usual defaults):
|
|
49
|
+
> - Codex: hooks and trust in `~/.codex/config.toml`.
|
|
50
|
+
> - Claude Code: workspace trust in `~/.claude.json`, and activity hooks in the project's
|
|
51
|
+
> `.claude/settings.local.json`, plus a status line unless you already have your own.
|
|
52
|
+
> - Discovery skills go in `~/.claude/skills` and `~/.agents/skills`.
|
|
53
|
+
> - **Starting a team in your project:** adds managed guidance to `AGENTS.md` or `CLAUDE.md`, plus the team's skills
|
|
54
|
+
> and plugins.
|
|
55
|
+
> - **Permissions:** by default, OpenRig's own kernel gets broader permissions than a project team gets by default.
|
|
56
|
+
> On Codex that's full access with no approval prompts (`-s danger-full-access -a never`). On Claude Code, its file
|
|
57
|
+
> tools, web fetches and operational commands, including reads under your home folder, run without asking. A
|
|
58
|
+
> permission policy, per-agent choice or Codex profile changes that. What your team can do depends on the team you
|
|
59
|
+
> choose and your settings; `workshop`, for example, ships with broad access.
|
|
60
|
+
> - **Backups:** OpenRig doesn't guarantee it can preserve or roll back these files, so back them up first.
|
|
61
|
+
>
|
|
62
|
+
> [Everything OpenRig writes, and why →](https://github.com/mvschwarz/openrig#what-openrig-changes-on-your-machine)
|
|
63
|
+
|
|
18
64
|
You need Node.js 22 or 24 and tmux, on macOS or Linux, and one working Claude
|
|
19
65
|
Code or Codex account: one is enough, since the kernel operator adapts the
|
|
20
66
|
shipped `starter` team to whichever you have. On Linux, the distribution's own
|
|
@@ -131,11 +177,11 @@ You can also read [`skills/rigs/SKILL.md`](../../skills/rigs/SKILL.md) directly.
|
|
|
131
177
|
script will do and changes nothing:
|
|
132
178
|
|
|
133
179
|
```sh
|
|
134
|
-
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.
|
|
180
|
+
curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.14/scripts/install.sh | sh -s -- --dry-run
|
|
135
181
|
```
|
|
136
182
|
|
|
137
183
|
The same command without `--dry-run`,
|
|
138
|
-
`curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.
|
|
184
|
+
`curl -fsSL https://raw.githubusercontent.com/mvschwarz/openrig/v0.6.14/scripts/install.sh | sh`, installs the
|
|
139
185
|
latest published `@openrig/cli` with `npm install -g`,
|
|
140
186
|
runs the Node.js and SQLite check, then `rig setup --dry-run` and `rig setup`. `rig setup` checks both Claude Code and
|
|
141
187
|
Codex and may install a missing one, as described below. A failed step among the first three prints
|
|
@@ -995,6 +1041,37 @@ same-seat stop/resume path after checking its retained policy; do not erase the
|
|
|
995
1041
|
rig or start a duplicate to reset permissions. A resume can reapply the stored
|
|
996
1042
|
launch mode, so verify the native mode again before continuing work.
|
|
997
1043
|
|
|
1044
|
+
## Optional Mac local-user check
|
|
1045
|
+
|
|
1046
|
+
On a Mac shared by multiple OS accounts, `transport.local_user_guard` can reduce
|
|
1047
|
+
accidental CLI routing to another account's local daemon. It is **off by default**.
|
|
1048
|
+
Enable it with `rig config set transport.local_user_guard true`, or set
|
|
1049
|
+
`OPENRIG_TRANSPORT_LOCAL_USER_GUARD=true` in the CLI's environment. Set it to
|
|
1050
|
+
`false` to turn it off; no daemon restart is needed for the CLI check.
|
|
1051
|
+
|
|
1052
|
+
When enabled, automatic local CLI data requests compare the daemon's reported
|
|
1053
|
+
`/healthz` PID and effective UID (`euid`) with two `ps` UID/start observations and
|
|
1054
|
+
a second health response, with at most one second of observation per check.
|
|
1055
|
+
Only stable agreement on a foreign effective UID stops the request. This does
|
|
1056
|
+
not require visibility into another user's socket descriptors. It does not
|
|
1057
|
+
stop the daemon, choose another port or retry. Diagnostic health/status checks
|
|
1058
|
+
remain available. Older daemons without `euid` remain unknown and are permitted.
|
|
1059
|
+
`sudo rig …` uses the caller's **effective** UID, so an enabled check against a
|
|
1060
|
+
user-owned daemon refuses when its reported/observed UID differs from root.
|
|
1061
|
+
|
|
1062
|
+
Explicit `OPENRIG_URL`/`RIGGED_URL` targets and registered remote hosts retain
|
|
1063
|
+
their selected routing, including tunnels. An internally resolved local URL is
|
|
1064
|
+
still checked. Default UI and TUI openings are checked before launch; this does
|
|
1065
|
+
not police later browser or TUI connections.
|
|
1066
|
+
|
|
1067
|
+
Missing, disagreeing, restricted or timed-out evidence **continues today's
|
|
1068
|
+
behavior**. This is a partial accidental-routing check, not authenticated user
|
|
1069
|
+
isolation: it trusts the daemon's PID/UID report and corroborates that process;
|
|
1070
|
+
it does not establish the socket's owner. Identity can change between observation
|
|
1071
|
+
and connection, and equal UIDs do not distinguish separate instances belonging
|
|
1072
|
+
to one account. The check
|
|
1073
|
+
does not add authentication to the daemon or protect direct HTTP clients.
|
|
1074
|
+
|
|
998
1075
|
## Custom settings and precedence
|
|
999
1076
|
|
|
1000
1077
|
- **OpenRig:** member `permission_policy` overrides rig `permission_policy`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Reference guides the help pack links to, loaded one file or section at a time by address
|
|
2
2
|
# (rig context get reference/<file>#<section>). Each file is a symlink to docs/reference/.
|
|
3
3
|
name: reference
|
|
4
|
-
version: "0.6.
|
|
4
|
+
version: "0.6.14"
|
|
5
5
|
taxonomy: world
|
|
6
6
|
purpose: "Version-matched reference guides the help guide links to. Load a single file or section by address; don't load the whole pack."
|
|
7
7
|
files:
|
|
@@ -1,116 +1,87 @@
|
|
|
1
|
-
# What changed in OpenRig 0.6.
|
|
1
|
+
# What changed in OpenRig 0.6.14
|
|
2
2
|
|
|
3
|
-
This note is for an agent on an install that was just upgraded to 0.6.
|
|
4
|
-
0.6.
|
|
3
|
+
This note is for an agent on an install that was just upgraded to 0.6.14. It lists only what behaves differently from
|
|
4
|
+
0.6.13 and what to do about it. For everything OpenRig can do, read the capability map:
|
|
5
5
|
`rig context get onboarding-width/public-what-you-can-do.md`. Each release replaces this file, so
|
|
6
6
|
`rig context get reference/whats-new.md` describes the installed version once the upgraded daemon is running. Without
|
|
7
7
|
a running daemon, read `$OPENRIG_HOME/reference/whats-new.md`. The daemon refreshes that copy when it starts, so right
|
|
8
|
-
after an upgrade it can still hold the previous version's note.
|
|
8
|
+
after an upgrade it can still hold the previous version's note. Coming from 0.6.12 or earlier, also read 0.6.13's
|
|
9
|
+
release notes: its changes and migration `117` arrive with this upgrade.
|
|
9
10
|
|
|
10
11
|
## After the upgrade
|
|
11
12
|
|
|
12
|
-
- **Restart the daemon** (`rig daemon stop`, then `rig daemon start`).
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
- **The bundled openrig-core plugin goes from 0.1.13 to 0.1.14.** Generated Claude hook commands in a project's
|
|
17
|
-
`.claude/settings.local.json` call the daemon's Node by its absolute path; existing bare-`node` entries refresh on
|
|
18
|
-
their own, and a person's wrapper is kept. The plugin's own manifest hooks still call bare `node`.
|
|
19
|
-
- **Seats pick up some changes only at their next launch:** a Pi seat's `effort` (sent as `--thinking`), a managed
|
|
20
|
-
Claude seat's `EDITOR`, `VISUAL`, `DISPLAY`, `XAUTHORITY` and `WAYLAND_DISPLAY`, and the shipped agent specs' role
|
|
21
|
-
file as the seat's role. Use `rig seat launch <seat> --fresh --stop --reason "<why>"` only when the person wants it
|
|
22
|
-
now; don't relaunch a working team just to pick these up.
|
|
23
|
-
- **Slack recovery's first pass after the upgrade** scans tracked threads inside the seven-day window once from their
|
|
24
|
-
root. Replies that already landed aren't delivered twice; recovered ones land as late rows that never answer a
|
|
25
|
-
decision.
|
|
13
|
+
- **Restart the daemon** (`rig daemon stop`, then `rig daemon start`). No migration runs. One setting is added,
|
|
14
|
+
`transport.local_user_guard`, off by default (see below).
|
|
15
|
+
- **The bundled openrig-core plugin goes from 0.1.14 to 0.1.15.** Installed copies are replaced and carry refocus's own
|
|
16
|
+
notes lookup.
|
|
26
17
|
|
|
27
18
|
## Output that changed shape
|
|
28
19
|
|
|
29
|
-
- **`rig
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
- **`rig
|
|
34
|
-
|
|
35
|
-
`hint`). It's a heuristic: `unknown` means unknown.
|
|
36
|
-
- **`rig provider status`** rows carry a sign-in fact (`usable`, `needs sign-in`, `unknown`; JSON `signIn`). A
|
|
37
|
-
signed-in Claude login never reads better than `unknown`. A signed-out Codex login reports `not_signed_in`, not
|
|
38
|
-
`rpc_error`.
|
|
39
|
-
- **`rig provider status`** (with `provider.usage_windows` on) Codex rows keep their last reading across a daemon
|
|
40
|
-
restart as history (`retained: "before_restart"`), labelled "kept from before the daemon restarted; not a current
|
|
41
|
-
reading", with availability unknown until a fresh read. Rows add `accountHistory` (`linked`, or `unknown`; every
|
|
42
|
-
Claude row is `unknown`), `lastObservedExhausted`, `retained` and, on an inactive account, `savedProfile: "not
|
|
43
|
-
linked"`. A window whose reset has passed gains `expectation`: planning, not a reading. Run `rig provider status
|
|
44
|
-
--refresh` before telling anyone an account has room.
|
|
45
|
-
- **`rig send`** can refuse with `caller_cancelled` (HTTP 409, `sent: false`, `inputPhase: "not_reached"`) when its
|
|
46
|
-
caller went away before input started.
|
|
47
|
-
- **`rig seat restart --keep-conversation`** reports name a Codex startup screen: `Codex startup gate (<kind>): …`, and
|
|
48
|
-
JSON gains `codexNoDaemonFlag`, `processMode` (always `unknown` for now) and `account.startupGateKind`.
|
|
49
|
-
- **`rig restore-check`**'s hook check can read `ready_with_caveats` where it read green; the exit code is still 0.
|
|
50
|
-
- **`GET /api/attention`** adds `queue-update:<qitemId>` items and a `"queue updates"` source.
|
|
51
|
-
- **The node-detail API's `targetPath`** names the file a guidance block is really in, or `""`; `declaredTarget` and
|
|
52
|
-
`effectiveTarget` are new.
|
|
53
|
-
- **`rig grow --json`'s `rigId`** is the resolved id, and `rig grow` and `rig remove` can return `rig_ambiguous`.
|
|
54
|
-
- **The one-line installer** ends with `INSTALLED, SETUP NOT COMPLETE (exit N)` when `rig setup` isn't ready.
|
|
20
|
+
- **`rig ask --wake`** on a seat whose runtime isn't Claude or Codex prints `Wake runtime '<runtime>' … is not
|
|
21
|
+
supported. Supported runtimes are claude and codex.` A `member@rig` target exits 2 (the daemon refuses it); a raw-id
|
|
22
|
+
`--runtime` value exits 1 (the CLI refuses it). No wake starts.
|
|
23
|
+
- **`/healthz`** gains `euid`, the daemon's effective user ID, beside `pid`, whether or not the Mac check is on.
|
|
24
|
+
- **`rig compact`** (manual) waits up to 240 seconds for its result, up from 180, because preparation now has 180
|
|
25
|
+
seconds, up from 120.
|
|
55
26
|
|
|
56
27
|
## Seats and restore
|
|
57
28
|
|
|
58
|
-
- **A
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
- **
|
|
67
|
-
|
|
68
|
-
- **
|
|
69
|
-
-
|
|
70
|
-
|
|
71
|
-
## Sends, wakes and the queue
|
|
72
|
-
|
|
73
|
-
- **A send whose caller went away** types nothing, then or later, if no input had started.
|
|
74
|
-
- **An old numbered menu in a Codex pane's scrollback** no longer blocks a send when a complete empty input box sits
|
|
75
|
-
below the status row.
|
|
76
|
-
- **An OMP seat** whose turn ended with a typed transient provider failure (408, 429, 500, 502, 503, 504 or 529) can
|
|
77
|
-
take an ordinary `rig send` retry; nothing retries on its own.
|
|
78
|
-
- **Parked rows for one seat that fall due in the same pass** arrive as one message naming each row.
|
|
79
|
-
- **A stuck-item finding on a person's item that an agent closed** goes to that agent, not the person.
|
|
80
|
-
- **`rig queue list --state "pending, in-progress"`** matches both states.
|
|
29
|
+
- **A seat that refuses every send with "Managed pane identity unavailable or changed; no input written."** because an
|
|
30
|
+
older OpenRig never recorded its tmux pane can be repaired in place: `rig reconcile-session <seat>
|
|
31
|
+
--repair-missing-pane --no-launch`. It fills only the missing pane and keeps the session, resume token and occupant
|
|
32
|
+
generation; the result names the same session, with continuity unverified. It refuses, writing nothing, with
|
|
33
|
+
`repair_not_applicable` (the binding already has a pane), `pane_ambiguous` (more than one pane or window),
|
|
34
|
+
`pane_missing` (no PID), `guard_target_changed`, `guard_operation_in_progress`, `typing_guard_enabled` or
|
|
35
|
+
`repair_timed_out`. Against an older daemon it reads `repair_missing_pane_unsupported` and never adopts. It records no
|
|
36
|
+
event.
|
|
37
|
+
- **A manual `rig compact` whose preparation stops at an ordinary approval** keeps waiting within its deadline instead
|
|
38
|
+
of giving up. OpenRig never answers the approval: the person, or an agent allowed to, answers it.
|
|
39
|
+
- **Refocus resolves each ancestor's notes file itself** (`NOTES.md`, then `MISSION_NOTES.md`) instead of starting `rig
|
|
40
|
+
scope resolve-notes` per ancestor. Its output, budgets and settings are unchanged.
|
|
81
41
|
|
|
82
42
|
## New things you can do
|
|
83
43
|
|
|
84
|
-
- **
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
- **See which model a seat was using:** `rig ps --nodes`, `rig roster show`, `rig roster find`.
|
|
90
|
-
- **Use a rig name in `rig grow` and `rig remove`.**
|
|
91
|
-
- **Slack:** missed messages in mapped channels, recent threads and relayed channels are recovered; `rig slack status`
|
|
92
|
-
shows a line per channel and a thread line.
|
|
44
|
+
- **Repair a missing pane without adopting:** `rig reconcile-session <seat> --repair-missing-pane --no-launch`.
|
|
45
|
+
- **Point a person at a page written for them:** `docs/reference/quickstart.md` ("Getting started") is the first-use
|
|
46
|
+
page, with a glossary. `docs/reference/getting-started.md` is now titled "OpenRig setup reference" and opens with what
|
|
47
|
+
the agent doing the setup needs; its sections and anchors are unchanged, so `rig context get
|
|
48
|
+
reference/getting-started.md#…` lookups still work.
|
|
93
49
|
|
|
94
50
|
## Off by default
|
|
95
51
|
|
|
96
|
-
- **
|
|
97
|
-
|
|
52
|
+
- **A Mac local-user check.** On a Mac shared by several accounts, `rig config set transport.local_user_guard true` (or
|
|
53
|
+
`OPENRIG_TRANSPORT_LOCAL_USER_GUARD=true` in the CLI's environment) makes the CLI refuse a local daemon another account
|
|
54
|
+
runs. It compares the PID and effective UID the daemon reports in `/healthz` with two `ps` readings and a second
|
|
55
|
+
health response, and refuses only when they agree on another account; the refusal names `rig daemon start --port
|
|
56
|
+
<unused-port>`. Missing, disagreeing or timed-out evidence, and an older daemon without `euid`, keep today's
|
|
57
|
+
behaviour. No daemon restart is needed. Explicit `OPENRIG_URL` targets and registered remote hosts keep their routing,
|
|
58
|
+
later browser or TUI connections aren't checked, and with it on `sudo rig …` against a user-owned daemon refuses. It
|
|
59
|
+
isn't authentication: it trusts the daemon's own report. Details: `rig context get
|
|
60
|
+
reference/getting-started.md#optional-mac-local-user-check`.
|
|
98
61
|
|
|
99
62
|
## What to stop doing
|
|
100
63
|
|
|
101
|
-
- **Don't
|
|
102
|
-
|
|
103
|
-
- **Don't
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
64
|
+
- **Don't use plain `rig reconcile-session` to fix a launched seat's missing pane.** It adopts the seat into a new
|
|
65
|
+
session with no resume token; use `--repair-missing-pane --no-launch`.
|
|
66
|
+
- **Don't abandon a manual `rig compact` because preparation hit an approval.** Answer it, or ask the person to, within
|
|
67
|
+
the 180 seconds.
|
|
68
|
+
- **Don't try `rig ask --wake` on a Pi or custom seat.** Use `rig ask` without `--wake` to search what it said, or send
|
|
69
|
+
to the live seat.
|
|
70
|
+
|
|
71
|
+
## Known gaps in 0.6.14
|
|
72
|
+
|
|
73
|
+
- **The compaction and refocus fixes** are tested without a native compaction or a loaded machine: confirm a
|
|
74
|
+
compaction by its restore request or the drop in context, and check that a restored seat is really working.
|
|
75
|
+
- **The pane repair refuses while typing protection is on.** The compaction refusal for a protected seat whose pane
|
|
76
|
+
isn't recorded still suggests plain `rig reconcile-session <seat> --no-launch`, which adopts. For a running launched
|
|
77
|
+
seat whose pane was never recorded, use `rig reconcile-session <seat> --repair-missing-pane --no-launch` instead;
|
|
78
|
+
it needs typing protection off, so turn protection off only if the person agrees. A delivery held from before the
|
|
79
|
+
repair can still refuse.
|
|
80
|
+
- **`rig context get reference/quickstart.md` doesn't resolve:** the page isn't in the reference context pack. Read it
|
|
81
|
+
from the package's `docs/reference/` or the repository.
|
|
108
82
|
- **On a Mac with more than one user account,** a second user's `rig` commands can reach the first user's daemon on
|
|
109
|
-
its default port (7433)
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
- **One Slack app across machines** hasn't run on two real machines, and Slack recovery doesn't catch up older open
|
|
115
|
-
threads.
|
|
116
|
-
- **`rig seat set-cwd`** checks the new folder once; switch promptly.
|
|
83
|
+
its default port (7433) unless `transport.local_user_guard` is on. The check trusts the daemon's own report, identity
|
|
84
|
+
can change between the check and the connection, and direct HTTP clients aren't covered.
|
|
85
|
+
- **0.6.13's other known gaps still apply:** a fresh in-place Claude handover can report ready early when the screen,
|
|
86
|
+
pane or process can't be read or proven; one Slack app across machines hasn't run on two real machines, and Slack
|
|
87
|
+
recovery doesn't catch up older open threads; `rig seat set-cwd` checks the new folder once.
|