@openrig/cli 0.6.7 → 0.6.8
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 +6 -4
- package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +6 -0
- 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 +25 -8
- package/daemon/context-packs/reference/getting-started.md +2 -2
- package/daemon/context-packs/reference/instance-layout.md +5 -0
- package/daemon/context-packs/reference/manifest.yaml +1 -1
- package/daemon/context-packs/reference/rig-spec.md +12 -9
- package/daemon/context-packs/reference/whats-new.md +76 -114
- 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/SKILL.md +6 -0
- package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-architect/SKILL.md +3 -0
- 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-software-factory/references/worked-example.md +15 -14
- 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/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/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/build-info.js +3 -3
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts +23 -2
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.js +153 -94
- package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
- package/daemon/dist/domain/context-monitor.d.ts +5 -0
- package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/context-monitor.js +21 -6
- package/daemon/dist/domain/context-monitor.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.js +1 -0
- package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts +2 -0
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/queue-access.js +1 -0
- package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-api.d.ts +7 -2
- package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-api.js +35 -3
- package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +4 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.js +16 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +17 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js +18 -15
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
- package/daemon/dist/domain/native-process-lineage.js +14 -2
- package/daemon/dist/domain/native-process-lineage.js.map +1 -1
- package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.js +54 -15
- package/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/daemon/dist/domain/queue-nudge-text.d.ts +4 -0
- package/daemon/dist/domain/queue-nudge-text.d.ts.map +1 -0
- package/daemon/dist/domain/queue-nudge-text.js +35 -0
- package/daemon/dist/domain/queue-nudge-text.js.map +1 -0
- package/daemon/dist/domain/queue-repository.d.ts +5 -0
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +11 -6
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.d.ts +1 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +17 -11
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
- package/daemon/dist/domain/rig-teardown.js +6 -0
- package/daemon/dist/domain/rig-teardown.js.map +1 -1
- package/daemon/dist/domain/session-transport.d.ts +12 -1
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +33 -7
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/skill-catalog.d.ts +11 -0
- package/daemon/dist/domain/skill-catalog.d.ts.map +1 -1
- package/daemon/dist/domain/skill-catalog.js +136 -12
- package/daemon/dist/domain/skill-catalog.js.map +1 -1
- package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-validator.js +22 -1
- package/daemon/dist/domain/workflow-validator.js.map +1 -1
- package/daemon/dist/routes/sessions.js +1 -1
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/docs/reference/agent-startup-guide.md +1 -1
- package/daemon/docs/reference/bundle-formats.md +1 -1
- package/daemon/docs/reference/getting-started.md +2 -2
- package/daemon/docs/reference/instance-layout.md +5 -0
- package/daemon/docs/reference/publishing-a-rig-bundle.md +4 -2
- package/daemon/docs/reference/rig-spec.md +12 -9
- package/daemon/docs/reference/slack-app-setup.md +5 -1
- package/daemon/docs/reference/topology-naming.md +74 -0
- package/daemon/docs/reference/whats-new.md +76 -114
- package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +6 -0
- package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +3 -0
- package/daemon/specs/agents/shared/skills/core/openrig-software-factory/references/worked-example.md +15 -14
- package/dist/build-info.js +3 -3
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +8 -0
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +114 -8
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/proof.js +1 -1
- package/dist/commands/proof.js.map +1 -1
- package/dist/commands/scope.js +1 -1
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +6 -0
- package/dist/commands/skill.js.map +1 -1
- package/dist/launch-plan-guard.d.ts +27 -0
- package/dist/launch-plan-guard.d.ts.map +1 -0
- package/dist/launch-plan-guard.js +73 -0
- package/dist/launch-plan-guard.js.map +1 -0
- package/package.json +2 -2
- package/tui/dist/commands/registry.js +1 -1
- package/tui/dist/main.js +16 -4
- package/tui/dist/main.js.map +1 -1
- package/tui/dist/render.js +1 -1
- package/tui/dist/scopes/scopes-model.js +4 -4
- package/tui/dist/types.d.ts +1 -1
|
@@ -8,6 +8,9 @@ This is the canonical reference for the pod-aware RigSpec YAML format. Every fie
|
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
+
For choosing IDs, see [naming rigs, pods and seats](topology-naming.md). Keep the same
|
|
12
|
+
logical names in edges, startup instructions, workflow targets and runtime presets.
|
|
13
|
+
|
|
11
14
|
## Minimal Valid Example
|
|
12
15
|
|
|
13
16
|
```yaml
|
|
@@ -18,7 +21,7 @@ pods:
|
|
|
18
21
|
- id: dev
|
|
19
22
|
label: Development
|
|
20
23
|
members:
|
|
21
|
-
- id:
|
|
24
|
+
- id: build
|
|
22
25
|
agent_ref: "local:agents/impl"
|
|
23
26
|
profile: default
|
|
24
27
|
runtime: claude-code
|
|
@@ -105,7 +108,7 @@ pods:
|
|
|
105
108
|
required: true
|
|
106
109
|
actions: []
|
|
107
110
|
members:
|
|
108
|
-
- id:
|
|
111
|
+
- id: build
|
|
109
112
|
agent_ref: "local:agents/impl"
|
|
110
113
|
profile: default
|
|
111
114
|
runtime: claude-code
|
|
@@ -131,7 +134,7 @@ pods:
|
|
|
131
134
|
cwd: "."
|
|
132
135
|
edges:
|
|
133
136
|
- kind: delegates_to
|
|
134
|
-
from:
|
|
137
|
+
from: build
|
|
135
138
|
to: qa
|
|
136
139
|
|
|
137
140
|
- id: rev
|
|
@@ -152,13 +155,13 @@ pods:
|
|
|
152
155
|
edges:
|
|
153
156
|
- kind: delegates_to
|
|
154
157
|
from: orch.lead
|
|
155
|
-
to: dev.
|
|
158
|
+
to: dev.build
|
|
156
159
|
- kind: delegates_to
|
|
157
160
|
from: orch.peer
|
|
158
161
|
to: dev.qa
|
|
159
162
|
- kind: can_observe
|
|
160
163
|
from: rev.r1
|
|
161
|
-
to: dev.
|
|
164
|
+
to: dev.build
|
|
162
165
|
- kind: can_observe
|
|
163
166
|
from: rev.r2
|
|
164
167
|
to: dev.qa
|
|
@@ -453,7 +456,7 @@ The canonical session name is derived from the pod ID, member ID, and rig name:
|
|
|
453
456
|
{podId}-{memberId}@{rigName}
|
|
454
457
|
```
|
|
455
458
|
|
|
456
|
-
Example: pod `dev`, member `
|
|
459
|
+
Example: pod `dev`, member `build`, rig `my-team` → session `dev-build@my-team`
|
|
457
460
|
|
|
458
461
|
Pod and member IDs cannot contain `@` because the first `@` separates their portion
|
|
459
462
|
of the session address from the rig name. Rig names may still contain `@`.
|
|
@@ -482,13 +485,13 @@ Edges within a pod use **unqualified member IDs** (just the member `id`, not `po
|
|
|
482
485
|
pods:
|
|
483
486
|
- id: dev
|
|
484
487
|
members:
|
|
485
|
-
- id:
|
|
488
|
+
- id: build
|
|
486
489
|
# ...
|
|
487
490
|
- id: qa
|
|
488
491
|
# ...
|
|
489
492
|
edges:
|
|
490
493
|
- kind: delegates_to
|
|
491
|
-
from:
|
|
494
|
+
from: build # NOT dev.build
|
|
492
495
|
to: qa # NOT dev.qa
|
|
493
496
|
```
|
|
494
497
|
|
|
@@ -502,7 +505,7 @@ Edges between pods use **fully-qualified `pod.member` IDs**:
|
|
|
502
505
|
edges:
|
|
503
506
|
- kind: delegates_to
|
|
504
507
|
from: orch.lead # pod.member format
|
|
505
|
-
to: dev.
|
|
508
|
+
to: dev.build # pod.member format
|
|
506
509
|
```
|
|
507
510
|
|
|
508
511
|
Cross-pod edges must reference different pods. An edge where both `from` and `to` are in the same pod is a validation error — use pod-local edges instead.
|
|
@@ -140,8 +140,12 @@ rig slack channel-map remove pr@my-rig
|
|
|
140
140
|
Without a map, OpenRig records nothing about a post's channel, so if the default channel
|
|
141
141
|
changes while a post is being retried, the retry goes to the new default channel (as it always
|
|
142
142
|
has); that also applies to a post first tried before the map was added.
|
|
143
|
+
- **Rate limits on posts.** When Slack rate-limits a post and asks for a pause of 10 seconds or
|
|
144
|
+
less, OpenRig waits that long and retries the post once. A longer pause, or a second refusal,
|
|
145
|
+
is left to the retry of retained posts.
|
|
143
146
|
- **Replies and new messages.** A reply in an item's thread reaches that item's seat, in any
|
|
144
|
-
channel.
|
|
147
|
+
channel. To answer it in the same thread, the seat sends `rig queue create --human-intent update
|
|
148
|
+
--reply-to <the inbound reply's row>`. A message the human starts (or a reply in a thread OpenRig does not know) goes to
|
|
145
149
|
the connector's inbound destination, whichever channel it is in. Missed-message recovery
|
|
146
150
|
(below) covers the default channel only.
|
|
147
151
|
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Naming rigs, pods and seats
|
|
2
|
+
|
|
3
|
+
Names tell people and agents what a team does and who does each part. Use the
|
|
4
|
+
team's purpose for the rig, a domain for each pod, and a role for each seat.
|
|
5
|
+
These are authoring conventions, not additional parser restrictions.
|
|
6
|
+
|
|
7
|
+
## What each name means
|
|
8
|
+
|
|
9
|
+
| Level | Meaning | Example |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| Fleet | A group of OpenRig instances | Your development fleet |
|
|
12
|
+
| Instance | One daemon and its rigs; several instances can share a machine | The instance selected by a registered host route |
|
|
13
|
+
| Rig | A team or project purpose | `starter`, `workshop`, `factory`, or your project's name |
|
|
14
|
+
| Pod | A domain or shared context | `orch`, `dev`, `review`, `research`, `sre` |
|
|
15
|
+
| Seat (member) | A role within that pod | `lead`, `advisor`, `build`, `qa`, `design`, `review` |
|
|
16
|
+
|
|
17
|
+
The logical seat ID is `pod.member`: `dev.build`. Its session address is
|
|
18
|
+
`pod-member@rig`: `dev-build@workshop`. A cross-instance command also selects the
|
|
19
|
+
registered host route; a display label is not a route. Discover actual addresses
|
|
20
|
+
with `rig ps --nodes` and host routes with `rig host list` before sending work.
|
|
21
|
+
|
|
22
|
+
Runtime, model and account belong in configuration. Changing a provider does not
|
|
23
|
+
change the role's name. Keep machine and instance identifiers stable rather than
|
|
24
|
+
renaming them whenever their workload changes.
|
|
25
|
+
|
|
26
|
+
## How the software teams grow
|
|
27
|
+
|
|
28
|
+
| Team | Logical seats |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| Starter | `dev.build`, `dev.review` |
|
|
31
|
+
| Workshop | `orch.lead`, `dev.build`, `dev.qa`, `dev.review` |
|
|
32
|
+
| Factory | `orch.lead`, `orch.advisor`, `dev.build`, `dev.qa`, `dev.design`, `review.r1`, `review.r2` |
|
|
33
|
+
|
|
34
|
+
Starter and Factory are built-in teams. Workshop is a
|
|
35
|
+
[bundle](https://github.com/mvschwarz/openrig-world/tree/main/rigs/workshop).
|
|
36
|
+
The built-in specs live under `packages/daemon/specs/rigs/launch/` in the product
|
|
37
|
+
source. Runtime presets keep these logical names.
|
|
38
|
+
|
|
39
|
+
Workshop's one code reviewer is `dev.review`; Factory has an independent review
|
|
40
|
+
pod with `review.r1` and `review.r2`. Both are intentional. A small team does not
|
|
41
|
+
need every pod or role from a larger one.
|
|
42
|
+
|
|
43
|
+
## Name a new team
|
|
44
|
+
|
|
45
|
+
Start with the outcome, then group its work by domain. For a team studying a
|
|
46
|
+
dataset, `research.analyst` and `research.synthesizer` describe useful roles.
|
|
47
|
+
For operating a service, `sre.admin` describes the domain and responsibility.
|
|
48
|
+
Use a project-specific rig name when that helps distinguish two teams.
|
|
49
|
+
|
|
50
|
+
Avoid a generic operation such as `check` as the pod name: it does not say whether
|
|
51
|
+
the team owns software quality, research validation or service health. Put the
|
|
52
|
+
role in its domain, such as `dev.qa`. This is a rule for choosing new names, not a
|
|
53
|
+
word blacklist or a demand that all teams share one roster.
|
|
54
|
+
|
|
55
|
+
Use the same IDs in the rig spec, edges, workflow targets, configuration presets,
|
|
56
|
+
startup instructions and terminal views. Validate those references together.
|
|
57
|
+
See [RigSpec](rig-spec.md) and [publishing a bundle](publishing-a-rig-bundle.md).
|
|
58
|
+
|
|
59
|
+
## Existing identities and retained references
|
|
60
|
+
|
|
61
|
+
An existing team's address remains its actual address until it is deliberately
|
|
62
|
+
migrated. Changing a label does not rename a seat or move its conversation, queue
|
|
63
|
+
or work. Preserve those records and verify the new routes when doing a migration;
|
|
64
|
+
do not edit a database or restart a team just to make a display match an example.
|
|
65
|
+
|
|
66
|
+
`first-project` is the compatibility name for Starter; it is not a second team
|
|
67
|
+
template. Existing-name safeguards still apply. See
|
|
68
|
+
[getting started](getting-started.md) before using the alias.
|
|
69
|
+
|
|
70
|
+
The `factory-rsi` bundle is a retained reference with original workflow-bound
|
|
71
|
+
addresses, including `build.implementer` and `check.qa`. It is distinct from the
|
|
72
|
+
current built-in Factory and is not the naming template for a new team. Old
|
|
73
|
+
release notes, pinned bundles, run records and compatibility tests keep the
|
|
74
|
+
identities they describe.
|
|
@@ -1,128 +1,90 @@
|
|
|
1
|
-
# What changed in OpenRig 0.6.
|
|
1
|
+
# What changed in OpenRig 0.6.8
|
|
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.8. It lists only what behaves differently from
|
|
4
|
+
0.6.7 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
8
|
after an upgrade it can still hold the previous version's note.
|
|
9
9
|
|
|
10
|
-
##
|
|
11
|
-
|
|
12
|
-
- **
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
`
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
- **
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
- **
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
##
|
|
66
|
-
|
|
67
|
-
- **A
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
- **A
|
|
75
|
-
|
|
76
|
-
`reaction_added` event and a reinstall, and `rig slack verify` warns when the scope is missing.
|
|
77
|
-
- **A long Slack ask is posted in parts.** If it still can't be posted, you get a task `<ask id>-undeliverable`, tagged
|
|
78
|
-
`slack-undeliverable`: shorten the ask or link a file for the long part, and send it as a new ask.
|
|
79
|
-
- **Replies sent with "Also send to #channel" now arrive** at the seat that asked, like any other thread reply.
|
|
80
|
-
|
|
81
|
-
## Running teams
|
|
82
|
-
|
|
83
|
-
- **`rig down` prints what each agent seemed to be doing before it stops them,** on one stderr line, or "unknown". It's
|
|
84
|
-
a best-effort snapshot, not a record of what was interrupted. `rig down --host` now exits 2 when the remote teardown
|
|
85
|
-
reports errors.
|
|
86
|
-
- **Before a handover or compaction, write the seat's recap** with
|
|
87
|
-
`rig context recap-write --rig <rig> --seat <seat> --file <draft.md>`, not a file tool, so earlier recaps are kept.
|
|
88
|
-
`rig seat handover <seat>` now works on the same seat again and again; a seat left half-handed-over recovers by
|
|
89
|
-
running it again.
|
|
90
|
-
- **After a managed compaction, read the `refocusing` skill and consume the current topology and work traces
|
|
91
|
-
delivered with the restore.** Don't rerun them just to duplicate the delivery; name a missing trace. For a new trace
|
|
92
|
-
outside that context, use the skill's one-command form. The daemon now installs the skill globally.
|
|
93
|
-
- **The built-in starter and factory leads publish their team's roster** at first start, so `rig roster list` and
|
|
94
|
-
`rig roster find <topic>` know those teams.
|
|
95
|
-
- **Claiming a parked queue item clears its `blocked_on`.** To park it again on the same gate, run
|
|
96
|
-
`rig queue update <id> --state blocked` without `--blocked-on`: it reuses the previous gate. Add the usual wake when
|
|
97
|
-
one is required.
|
|
98
|
-
- **A periodic reminder first fires one interval after you register it,** not immediately.
|
|
99
|
-
- **Workflows:** `rig workflow run` and `rig workflow watch` exit 3 for an aborted instance. When a step that was sent
|
|
100
|
-
back completes again, the steps that depend on it run again too, including ones that had passed.
|
|
101
|
-
- **Sharing teams:** `rig bundle create` and `rig up <link>` name the bundle after `rig.yaml`'s `name`, and
|
|
102
|
-
`rig bundle check` names the file in each finding. Submissions go to `mvschwarz/openrig-registry`. The bundle safety
|
|
103
|
-
check always runs, even with `--skip-version-check --force`.
|
|
104
|
-
- **`rig context add <url> --git` retrieves shallowly by default:** the initial retrieval fetches only the current
|
|
105
|
-
commit, and a server that refuses shallow retrieval falls back to a full clone with a warning. Use
|
|
106
|
-
`rig context source update` for later revisions.
|
|
107
|
-
- **Values that used to fail quietly are refused:** a bad `rig chatroom history --since` (fix the value; the room isn't
|
|
108
|
-
empty) and a `--wake-after` such as `7d` (use hours, for example `168h`).
|
|
109
|
-
- **Pi seats print a `[pi-runner] seat …:` line at start** saying whether a credential was found and, if not, how to
|
|
110
|
-
fix it. A MiniMax model gets `MINIMAX_API_KEY` when that name is in `recovery.provider_auth_env_allowlist`.
|
|
111
|
-
- **`agents.advisor_session` defaults to the kernel's advisor seat.**
|
|
10
|
+
## Skills from the managed catalog
|
|
11
|
+
|
|
12
|
+
- **A skill with uncommitted changes in the catalog now blocks only itself.** Before, one edited skill made the whole
|
|
13
|
+
catalog unavailable to work-install, launch and restore preflight. Now that skill is skipped and named, and the
|
|
14
|
+
remaining clean skills stay available for projection.
|
|
15
|
+
- **Read the warning, don't retry.** `catalog_skill_skipped` names a skill nobody selected; `selected_skill_skipped`
|
|
16
|
+
names the selector and the folder. The fix is to commit or restore that folder's content in the catalog, then run the
|
|
17
|
+
projection again.
|
|
18
|
+
- **A selected skipped skill makes the inspection commands exit 1.** `rig context work-install --runtime <runtime>`
|
|
19
|
+
and `rig skill loadout --runtime <runtime>` inspect by default. Use `--apply-skills` with work-install or `--apply`
|
|
20
|
+
with skill loadout to project the remaining clean skills. Read the warnings and projection result; exit 1 alone does
|
|
21
|
+
not say whether files were changed. With `--json`, skipped skills are in `skillLoadout.skipped` or
|
|
22
|
+
`loadout.skipped`, respectively.
|
|
23
|
+
- **A seat keeps the copy it already has** of a skipped skill, unchanged. After the catalog change is committed or
|
|
24
|
+
restored, the next applied projection can refresh it. No seat receives the skipped skill's uncommitted files, and
|
|
25
|
+
launch only warns about the skip.
|
|
26
|
+
- **An uncommitted `catalog.yaml` still makes the whole catalog unavailable,** because it changes every selection.
|
|
27
|
+
|
|
28
|
+
## Launch plans
|
|
29
|
+
|
|
30
|
+
- **`rig launch <rig> <seat> --plan` previews one seat's launch** without launching it, locally or with `--host`. Use
|
|
31
|
+
it before starting a single seat, as `--seats … --plan` already allowed for several.
|
|
32
|
+
- **A plan is never sent to a daemon older than 0.5.9,** which would ignore the flag and launch. If `rig launch --plan`
|
|
33
|
+
refuses for that reason, restart or upgrade that daemon. If it exits non-zero saying the daemon may have acted, check
|
|
34
|
+
`rig ps --nodes -A` before retrying.
|
|
35
|
+
|
|
36
|
+
## Slack
|
|
37
|
+
|
|
38
|
+
- **Answer a person's thread reply in that thread.** When someone replies inside a thread OpenRig opened, answer with
|
|
39
|
+
`rig queue create --human-intent update --reply-to <the inbound reply's row>`, and the answer posts in that thread.
|
|
40
|
+
A top-level message is still answered top-level.
|
|
41
|
+
- **A short rate limit is waited out.** When Slack asks for a pause of 10 seconds or less, OpenRig waits and retries the
|
|
42
|
+
post once. A longer pause is still left to the usual retry of retained messages.
|
|
43
|
+
|
|
44
|
+
## Managed compaction
|
|
45
|
+
|
|
46
|
+
- **A quiet seat is restored after `/compact`.** The turn boundary, the restore request and the read-depth
|
|
47
|
+
audit now reach a Claude seat that takes no turn after compacting. Before, they waited for the seat's next turn,
|
|
48
|
+
so a seat with nothing to do could sit unrestored. Each stage still waits until the seat's screen shows it idle.
|
|
49
|
+
|
|
50
|
+
## Workflows
|
|
51
|
+
|
|
52
|
+
- **Validate before you run.** `rig workflow validate` reports `step_cannot_finish` when no allowed exit can finish a
|
|
53
|
+
step or route onward, and such a workflow cannot be instantiated. Allow `done` or an exit with a route onward. In a
|
|
54
|
+
dependency graph, `handoff` can also finish a sink without a next step. A spec that validated on 0.6.7 may need a
|
|
55
|
+
correction.
|
|
56
|
+
|
|
57
|
+
## The TUI
|
|
58
|
+
|
|
59
|
+
- **Type whole commands on an empty command line.** The footer toggle is now `F`, and in a selected Scopes view the
|
|
60
|
+
mini-requirements and narrative keys are `M` and `N`, so `find`, `feed`, `mission`, `narrative` and `needs` reach the
|
|
61
|
+
command line intact.
|
|
62
|
+
- **`j` and `k` move the selection down and up** when the command line is empty. With text on the line they're ordinary
|
|
63
|
+
letters.
|
|
64
|
+
|
|
65
|
+
## Smaller changes
|
|
66
|
+
|
|
67
|
+
- **A Claude seat launched with `--remote-control`** confirms its identity instead of staying "identity not confirmed".
|
|
68
|
+
- **`rig down` still saves its recovery snapshot** when finding one seat's resume details fails.
|
|
69
|
+
- **A wake for a handed-off task shows its summary** on one line, so read it to see what the task is for.
|
|
70
|
+
- **`rig scope audit` accepts slice folders numbered 100 and above.** `rig proof add --file` keeps a leading UTF-8
|
|
71
|
+
byte-order mark.
|
|
72
|
+
- **Building from source no longer needs POSIX shell tools** for the CLI and TUI output. It hasn't been run on Windows
|
|
73
|
+
yet; WSL2 is still the way to run OpenRig there.
|
|
74
|
+
- **A topology naming reference** explains how to name a team's pods and seats: `rig context get
|
|
75
|
+
reference/topology-naming.md`.
|
|
112
76
|
|
|
113
77
|
## What to stop doing
|
|
114
78
|
|
|
115
|
-
- **Stop
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
- **Stop
|
|
119
|
-
- **Stop
|
|
120
|
-
- **Stop telling people to untick "Also send to #channel" when they answer in Slack.** Those replies now arrive.
|
|
79
|
+
- **Stop treating a non-zero work-install exit as proof that nothing changed.** Read the skipped-skill warnings and
|
|
80
|
+
projection result. Inspection alone changes no skill files; an applied projection can update clean skills while
|
|
81
|
+
reporting a skipped one.
|
|
82
|
+
- **Stop scripting around the TUI's single-letter keys.** Type the command whole.
|
|
83
|
+
- **Stop assuming a workflow that validated on 0.6.7 can finish.** Validate it again on 0.6.8.
|
|
121
84
|
|
|
122
|
-
## Known gaps in 0.6.
|
|
85
|
+
## Known gaps in 0.6.8
|
|
123
86
|
|
|
124
|
-
- **Not yet checked on a real machine:**
|
|
125
|
-
The full first install from nothing and a Linux run come after this release.
|
|
87
|
+
- **Not yet checked on a real machine:** the full first install from nothing, on Mac, Linux and Windows.
|
|
126
88
|
- **Only one selected lifecycle-help command has been checked in a live Claude session;** source and parser coverage
|
|
127
89
|
is broader. If a help command still asks, report it.
|
|
128
90
|
- **Codex team seats aren't asked before lifecycle commands yet.**
|
|
@@ -92,6 +92,12 @@ the human (a pending human decision, or a row parked on the human), since a
|
|
|
92
92
|
reply in that thread would answer the decision. In every such case the
|
|
93
93
|
`--verify` result says `threaded: false` with the reason.
|
|
94
94
|
|
|
95
|
+
To answer a reply the human typed inside one of your threads, `--reply-to` the
|
|
96
|
+
row their reply landed as. The update posts in that thread unless one of the
|
|
97
|
+
cases above applies, and `--verify` reports it the same way. A message the
|
|
98
|
+
human started at the top level of the channel has no thread yet, so the answer
|
|
99
|
+
posts as a new message.
|
|
100
|
+
|
|
95
101
|
A **decision** with a few clear choices can carry `--human-questions-file <path>`:
|
|
96
102
|
a JSON array of 1–4 questions, each
|
|
97
103
|
`{"id", "question", "options": [{"id", "label", "recommended"?}]}` with 2–4
|
|
@@ -39,6 +39,9 @@ the format you will author. Load the selected paths from public onboarding;
|
|
|
39
39
|
consult additional skills when their triggers apply. A design task does not
|
|
40
40
|
require reading the whole command library.
|
|
41
41
|
|
|
42
|
+
- Read `topology-naming.md` before choosing new identities: rig = purpose, pod =
|
|
43
|
+
domain, member = role. Keep names stable across runtime choices and match every
|
|
44
|
+
edge, preset and workflow target to the declared IDs.
|
|
42
45
|
- Read the relevant sections of `rig-spec.md` and `agent-spec.md` before writing
|
|
43
46
|
those declarations. Consult `agent-startup-guide.md` for startup/loadout work
|
|
44
47
|
and `edge-types.md` when selecting relationships. Resolve the installed
|
package/daemon/specs/agents/shared/skills/core/openrig-software-factory/references/worked-example.md
CHANGED
|
@@ -120,25 +120,26 @@ rig grow --help
|
|
|
120
120
|
|
|
121
121
|
Set `RIG_ID` to the `rigId` for the running `starter`, and `PROJECT_ROOT`
|
|
122
122
|
to the absolute code repository. Verify its existing `dev` pod and choose unused
|
|
123
|
-
member names.
|
|
123
|
+
member names. Here `parser` owns CSV parsing and `cli` owns the command interface.
|
|
124
|
+
When the user has authorized the added capacity and cost, run:
|
|
124
125
|
|
|
125
126
|
```sh
|
|
126
|
-
rig grow "$RIG_ID"
|
|
127
|
+
rig grow "$RIG_ID" parser cli --pod dev --runtime codex --cwd "$PROJECT_ROOT" --json
|
|
127
128
|
rig ps --nodes --rig starter --json
|
|
128
129
|
```
|
|
129
130
|
|
|
130
|
-
For one builder, omit `
|
|
131
|
-
with addresses `dev-
|
|
131
|
+
For one builder, omit `cli`. The expected new logical IDs are `dev.parser` and `dev.cli`,
|
|
132
|
+
with addresses `dev-parser@starter` and `dev-cli@starter`; use the actual
|
|
132
133
|
returned identities. The command adds and launches the named seats.
|
|
133
134
|
|
|
134
135
|
To put those seats in a **new** pod instead, choose this alternative once, with an
|
|
135
|
-
unused pod
|
|
136
|
+
unused domain pod such as `data`; do not run both examples for the same desired capacity:
|
|
136
137
|
|
|
137
138
|
```sh
|
|
138
|
-
rig grow "$RIG_ID"
|
|
139
|
+
rig grow "$RIG_ID" parser cli --new-pod data --runtime codex --cwd "$PROJECT_ROOT" --json
|
|
139
140
|
```
|
|
140
141
|
|
|
141
|
-
That alternative produces `
|
|
142
|
+
That alternative produces `data.parser`/`data.cli` and corresponding `data-...`
|
|
142
143
|
addresses. `--pod` and `--new-pod` are mutually exclusive. With one existing pod,
|
|
143
144
|
`--pod` can be inferred; select it explicitly when the intended target matters.
|
|
144
145
|
The runtime defaults to `claude-code` and cwd defaults to the caller's current
|
|
@@ -153,7 +154,7 @@ agent specs, use the optional Architect path below and `rig expand --help`.
|
|
|
153
154
|
Inspect each node's status/error and native pane. Confirm existing seats and work
|
|
154
155
|
remain present; a created node is not readiness. Partial results can leave nodes
|
|
155
156
|
persisted. After a timeout, reconcile topology before retrying. Fix the reported
|
|
156
|
-
cause, then use `rig launch "$RIG_ID" dev.
|
|
157
|
+
cause, then use `rig launch "$RIG_ID" dev.parser` only for an already-created seat that
|
|
157
158
|
failed to start. That command does not create a missing seat.
|
|
158
159
|
|
|
159
160
|
New seats do not inherit the owner's conversation or task. Record the agreed
|
|
@@ -163,8 +164,8 @@ checks, next owner and stopping condition. Then deliver the context instruction,
|
|
|
163
164
|
for example for the first builder:
|
|
164
165
|
|
|
165
166
|
```sh
|
|
166
|
-
rig send dev-
|
|
167
|
-
rig capture dev-
|
|
167
|
+
rig send dev-parser@starter "Read $PROJECT_ROOT/SPEC.md and the addressed sources in $PROJECT_ROOT/.openrig/factory/TASK-A.md. Run rig whoami --json and rig queue list --owned --json in your own seat; report your identity, scope and any native readiness/permission blocker. Await the bounded queue assignment."
|
|
168
|
+
rig capture dev-parser@starter
|
|
168
169
|
```
|
|
169
170
|
|
|
170
171
|
Read the actual reply and pane; resolve startup/login/permission prompts under the
|
|
@@ -174,7 +175,7 @@ the coordinator creates the distinct agreed task (or hands off an existing owned
|
|
|
174
175
|
task instead of duplicating it):
|
|
175
176
|
|
|
176
177
|
```sh
|
|
177
|
-
rig queue create --destination dev-
|
|
178
|
+
rig queue create --destination dev-parser@starter \
|
|
178
179
|
--body-file "$PROJECT_ROOT/.openrig/factory/TASK-A.md" \
|
|
179
180
|
--summary 'Implement the agreed independent change A' --json
|
|
180
181
|
```
|
|
@@ -191,7 +192,7 @@ working agreement and assigned work, not the seat's name or default agent label.
|
|
|
191
192
|
| Seat in this example | Deliberately agreed responsibility |
|
|
192
193
|
| --- | --- |
|
|
193
194
|
| `dev-build@starter` | Initially implements and coordinates; can become the dedicated orchestrator, selecting outcomes, separating tasks, owning integration and retaining next-work custody. |
|
|
194
|
-
| `dev-
|
|
195
|
+
| `dev-parser@starter`, `dev-cli@starter` | Implement distinct authorized tasks and return exact candidates/evidence. Neither silently edits the other's files or folds both candidates without integration ownership. |
|
|
195
196
|
| `dev-review@starter` | Retains independent judgment under the project's review policy. The implementer does not count its own check as independent review. |
|
|
196
197
|
|
|
197
198
|
This is one progression, not a required four-seat layout. One extra builder may
|
|
@@ -240,8 +241,8 @@ YAML authoring is optional; ordinary growth uses the commands above.
|
|
|
240
241
|
### Remove capacity deliberately
|
|
241
242
|
|
|
242
243
|
When a seat is no longer needed, preserve its work and next owner first.
|
|
243
|
-
`rig remove "$RIG_ID" dev.
|
|
244
|
-
removes the whole optional
|
|
244
|
+
`rig remove "$RIG_ID" dev.parser` removes that seat; `rig shrink "$RIG_ID" data`
|
|
245
|
+
removes the whole optional data pod. These end the affected sessions. Removal
|
|
245
246
|
refuses active work unless you explicitly select a live `--fallback <live-seat>`
|
|
246
247
|
to receive it. Check the exact targets, handoff and returned outcomes; do not use
|
|
247
248
|
fallback to discard an obligation or remove seats merely because they look idle.
|
package/dist/build-info.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// GENERATED by scripts/build-package.sh — the packaged build-identity stamp.
|
|
2
2
|
export const BUILD_INFO = {
|
|
3
|
-
semver: "0.6.
|
|
4
|
-
commit: "
|
|
3
|
+
semver: "0.6.8",
|
|
4
|
+
commit: "aa126c74d5d1568a6091c037450720c552e50e49",
|
|
5
5
|
dirty: false,
|
|
6
|
-
builtAt: "2026-10-
|
|
6
|
+
builtAt: "2026-10-08T22:15:13Z",
|
|
7
7
|
};
|
|
8
8
|
export function stampFields(info = BUILD_INFO) {
|
|
9
9
|
if (!info.commit) return {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqM9C,wBAAgB,cAAc,CAAC,YAAY,CAAC,EAAE,UAAU,GAAG;IAAE,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqM9C,wBAAgB,cAAc,CAAC,YAAY,CAAC,EAAE,UAAU,GAAG;IAAE,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,OAAO,CAuvBxH"}
|
package/dist/commands/context.js
CHANGED
|
@@ -264,6 +264,14 @@ Examples:
|
|
|
264
264
|
return;
|
|
265
265
|
}
|
|
266
266
|
skillLoadout = resolvedSkills.loadout;
|
|
267
|
+
// A skill with uncommitted catalog content blocks only itself: name it, project the rest, and exit non-zero
|
|
268
|
+
// when something selected it.
|
|
269
|
+
const skippedSkills = skillLoadout.skipped ?? [];
|
|
270
|
+
if (!opts.json)
|
|
271
|
+
for (const skip of skippedSkills)
|
|
272
|
+
console.error(`Warning: ${skip.message}`);
|
|
273
|
+
if (skippedSkills.some((skip) => skip.selectedBy.length > 0))
|
|
274
|
+
process.exitCode = 1;
|
|
267
275
|
skillProjection = reconcileSkillLoadout({
|
|
268
276
|
loadout: skillLoadout,
|
|
269
277
|
runtime: opts.runtime === "codex" ? "codex" : "claude-code",
|