@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.
Files changed (166) hide show
  1. package/README.md +6 -4
  2. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +6 -0
  3. package/daemon/context-packs/help/manifest.yaml +1 -1
  4. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
  5. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +25 -8
  6. package/daemon/context-packs/reference/getting-started.md +2 -2
  7. package/daemon/context-packs/reference/instance-layout.md +5 -0
  8. package/daemon/context-packs/reference/manifest.yaml +1 -1
  9. package/daemon/context-packs/reference/rig-spec.md +12 -9
  10. package/daemon/context-packs/reference/whats-new.md +76 -114
  11. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  12. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  13. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  14. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
  15. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  16. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  17. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  18. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  19. package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +6 -0
  20. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  21. package/daemon/context-packs/skills/core/openrig-architect/SKILL.md +3 -0
  22. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  23. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  24. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  25. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  26. package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
  27. package/daemon/context-packs/skills/core/openrig-software-factory/references/worked-example.md +15 -14
  28. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  29. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  30. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  31. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  33. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  34. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  36. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  46. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  49. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  54. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  55. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  57. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  58. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  61. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  62. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  63. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  64. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  65. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  66. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  67. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  68. package/daemon/dist/build-info.js +3 -3
  69. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +23 -2
  70. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  71. package/daemon/dist/domain/claude-compaction-enforcer.js +153 -94
  72. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  73. package/daemon/dist/domain/context-monitor.d.ts +5 -0
  74. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  75. package/daemon/dist/domain/context-monitor.js +21 -6
  76. package/daemon/dist/domain/context-monitor.js.map +1 -1
  77. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  78. package/daemon/dist/domain/gateway/slack/inbound.js +1 -0
  79. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  80. package/daemon/dist/domain/gateway/slack/queue-access.d.ts +2 -0
  81. package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
  82. package/daemon/dist/domain/gateway/slack/queue-access.js +1 -0
  83. package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
  84. package/daemon/dist/domain/gateway/slack/slack-api.d.ts +7 -2
  85. package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -1
  86. package/daemon/dist/domain/gateway/slack/slack-api.js +35 -3
  87. package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -1
  88. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +4 -0
  89. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
  90. package/daemon/dist/domain/gateway/slack/slack-delivery.js +16 -1
  91. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
  92. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +17 -0
  93. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  94. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +18 -15
  95. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  96. package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
  97. package/daemon/dist/domain/native-process-lineage.js +14 -2
  98. package/daemon/dist/domain/native-process-lineage.js.map +1 -1
  99. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  100. package/daemon/dist/domain/profile-resolver.js +54 -15
  101. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  102. package/daemon/dist/domain/queue-nudge-text.d.ts +4 -0
  103. package/daemon/dist/domain/queue-nudge-text.d.ts.map +1 -0
  104. package/daemon/dist/domain/queue-nudge-text.js +35 -0
  105. package/daemon/dist/domain/queue-nudge-text.js.map +1 -0
  106. package/daemon/dist/domain/queue-repository.d.ts +5 -0
  107. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  108. package/daemon/dist/domain/queue-repository.js +11 -6
  109. package/daemon/dist/domain/queue-repository.js.map +1 -1
  110. package/daemon/dist/domain/restore-orchestrator.d.ts +1 -0
  111. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  112. package/daemon/dist/domain/restore-orchestrator.js +17 -11
  113. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  114. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
  115. package/daemon/dist/domain/rig-teardown.js +6 -0
  116. package/daemon/dist/domain/rig-teardown.js.map +1 -1
  117. package/daemon/dist/domain/session-transport.d.ts +12 -1
  118. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  119. package/daemon/dist/domain/session-transport.js +33 -7
  120. package/daemon/dist/domain/session-transport.js.map +1 -1
  121. package/daemon/dist/domain/skill-catalog.d.ts +11 -0
  122. package/daemon/dist/domain/skill-catalog.d.ts.map +1 -1
  123. package/daemon/dist/domain/skill-catalog.js +136 -12
  124. package/daemon/dist/domain/skill-catalog.js.map +1 -1
  125. package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
  126. package/daemon/dist/domain/workflow-validator.js +22 -1
  127. package/daemon/dist/domain/workflow-validator.js.map +1 -1
  128. package/daemon/dist/routes/sessions.js +1 -1
  129. package/daemon/dist/routes/sessions.js.map +1 -1
  130. package/daemon/docs/reference/agent-startup-guide.md +1 -1
  131. package/daemon/docs/reference/bundle-formats.md +1 -1
  132. package/daemon/docs/reference/getting-started.md +2 -2
  133. package/daemon/docs/reference/instance-layout.md +5 -0
  134. package/daemon/docs/reference/publishing-a-rig-bundle.md +4 -2
  135. package/daemon/docs/reference/rig-spec.md +12 -9
  136. package/daemon/docs/reference/slack-app-setup.md +5 -1
  137. package/daemon/docs/reference/topology-naming.md +74 -0
  138. package/daemon/docs/reference/whats-new.md +76 -114
  139. package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +6 -0
  140. package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +3 -0
  141. package/daemon/specs/agents/shared/skills/core/openrig-software-factory/references/worked-example.md +15 -14
  142. package/dist/build-info.js +3 -3
  143. package/dist/commands/context.d.ts.map +1 -1
  144. package/dist/commands/context.js +8 -0
  145. package/dist/commands/context.js.map +1 -1
  146. package/dist/commands/launch.d.ts.map +1 -1
  147. package/dist/commands/launch.js +114 -8
  148. package/dist/commands/launch.js.map +1 -1
  149. package/dist/commands/proof.js +1 -1
  150. package/dist/commands/proof.js.map +1 -1
  151. package/dist/commands/scope.js +1 -1
  152. package/dist/commands/scope.js.map +1 -1
  153. package/dist/commands/skill.d.ts.map +1 -1
  154. package/dist/commands/skill.js +6 -0
  155. package/dist/commands/skill.js.map +1 -1
  156. package/dist/launch-plan-guard.d.ts +27 -0
  157. package/dist/launch-plan-guard.d.ts.map +1 -0
  158. package/dist/launch-plan-guard.js +73 -0
  159. package/dist/launch-plan-guard.js.map +1 -0
  160. package/package.json +2 -2
  161. package/tui/dist/commands/registry.js +1 -1
  162. package/tui/dist/main.js +16 -4
  163. package/tui/dist/main.js.map +1 -1
  164. package/tui/dist/render.js +1 -1
  165. package/tui/dist/scopes/scopes-model.js +4 -4
  166. 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: impl
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: impl
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: impl
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.impl
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.impl
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 `impl`, rig `my-team` → session `dev-impl@my-team`
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: impl
488
+ - id: build
486
489
  # ...
487
490
  - id: qa
488
491
  # ...
489
492
  edges:
490
493
  - kind: delegates_to
491
- from: impl # NOT dev.impl
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.impl # pod.member format
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. A message the human starts (or a reply in a thread OpenRig does not know) goes to
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.7
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.7. It lists only what behaves differently from
4
- 0.6.6 and what to do about it. For everything OpenRig can do, read the capability map:
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
- ## The OpenRig view is now the handoff
11
-
12
- - **Open the view as the step after install or start; don't wait to be asked.** Say you're opening it, run
13
- `rig terminal open saved:kernel --window`, then tell the person where it opened. Don't ask "Open the OpenRig view
14
- now?", don't wait for a phrase like "show me my agents", and don't finish by printing a command for them to copy. The
15
- same command brings their agents back later.
16
- - **The layout follows the person's terminal width.** On a narrow terminal the operator gets the first tab. On a wide
17
- one the dashboard and operator sit side by side and the advisor has its own tab. Inside herdr it opens a focused
18
- `openrig kernel` space. A `kernel` view the person saved themselves still wins.
19
- - **It opens where the caller is.** Terminal gets a window and Ghostty a tab. From Claude Desktop, iTerm or VS Code on a
20
- Mac it opens a new Ghostty or Terminal window, and macOS may ask to allow it: mention that clicking Allow is fine only
21
- in that case. Over SSH, in CI or with no display, it returns a definite no-window result with the reason. Relay the
22
- `run:` command it prints exactly, or give `env -u TMUX tmux attach-session -t '=<canonicalSessionName>'` for the
23
- operator.
24
- - **`rig terminal open <view>` opens a window by default.** Pass `--provider herdr` or `--provider cmux` only to add
25
- tiles to a workspace that's already visible. With `--json`, `reusedWorkspace` and `opened: []` mean an existing view
26
- was reused, which is success.
27
- - **The TUI's action is now "Open terminals ▸"** (it was `term ▸`). It opens a desktop window through the same
28
- launcher, so the TUI must run on the daemon's desktop.
29
- - **The `rigs` skill is installed for the person's own agent.** The daemon writes it to `~/.claude/skills/rigs` and
30
- `~/.agents/skills/rigs` and refreshes it on every upgrade. It now triggers on any mention of OpenRig, rigs or a team
31
- of coding agents. A copy added earlier with skills.sh is left alone and never refreshed.
32
-
33
- ## Installing and setting up
34
-
35
- - **Show the install preview first.** The published install command has a `--dry-run` preview
36
- (`rig context get reference/getting-started.md` has both forms). Run the install when the person agrees. If the only
37
- failures left are provider sign-ins, have them sign in and continue at "Start the kernel".
38
- - **If your own harness refuses a tool call while installing,** say so and show the refusal: Claude Code's auto mode can
39
- deny calls as well as approve them. Let the person review it in their harness or run that step themselves. A refused
40
- call doesn't prove the OpenRig command failed.
41
- - **`rig setup` installs herdr by default** on macOS and Linux; `--no-herdr` declines it. On a Mac, ask once about
42
- Ghostty and on yes rerun `rig setup --ghostty`, keeping `--no-herdr` if it was chosen. Setup no longer installs cmux,
43
- and an existing cmux still works. In `--json` output the `cmux_install` step is gone and `herdr_install` and
44
- `ghostty_install` appear.
45
- - **`rig doctor` checks Claude and Codex installs, and a login or configured provider credential,** the way setup does.
46
- It exits 1 when either harness is missing or has neither, including one the person doesn't use, so ignore a failure
47
- on an unused harness. A pass means a login or configured provider credential is available locally, not that a
48
- provider accepts the credential or that an agent can work; no provider request or agent work is tested.
49
- - **When setting up permissions,** recommend keeping the team default and offer remembered allowances only if the
50
- person wants fewer prompts. People slowed by prompts can be pointed to the workshop listing.
51
- - **Windows users go through WSL2.** For Pi seats there, offer either credential route; a global Pi login still isn't
52
- shared with managed seats.
53
-
54
- ## Fewer prompts
55
-
56
- - **In Claude team seats, help on lifecycle commands runs without a prompt.** `rig down --help` and `-h` forms run;
57
- the lifecycle actions themselves still ask. Pipelines, command substitutions, redirects and heredocs aren't allowed
58
- automatically.
59
- - **The kernel operator's Claude session runs routine inspection without prompts:** Python, command lookup, `cd`, text
60
- helpers and WebFetch. Compound commands and redirects still go to Claude's own permission check.
61
- - **Managed Codex seats no longer stop at the update menu on start.** Updating Codex is the operator's job: if a Codex
62
- seat says its model needs a newer Codex, offer to update Codex and restart that seat, without stopping the team. If a
63
- Codex seat shows a model-switch menu near a rate limit, ask the person; don't change the team's model.
64
-
65
- ## Messages, wakes and Slack
66
-
67
- - **A send or wake no longer answers a question that's waiting for a person.** It's refused with
68
- `target_needs_input`, and the reason ends `; latest hook, pane unrecognized` when the screen can't be read, even if
69
- the hook is minutes old. Read the seat with `rig capture` and get the question answered by whoever should answer it.
70
- Don't retry the send.
71
- - **Slack can post to a channel per rig or seat:** `rig slack channel-map list`, `set <match> <channel>` and
72
- `remove <match>`. After a change, invite the app to each channel, run `rig slack verify`, then `rig slack disable`
73
- and `rig slack enable` (or restart the daemon). Thread replies still reach the seat in any channel.
74
- - **A reaction on any part of a Slack ask reaches the seat that asked,** as a task tagged `human-reaction`. Treat it as
75
- a signal to interpret, not an answer; the ask stays open. An existing app needs the `reactions:read` scope, the
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 asking whether to open the OpenRig view, or waiting for a phrase.** Open it after install or start.
116
- - **Stop using `--provider herdr` for the first view,** and stop pre-warning about macOS prompts from Terminal or
117
- Ghostty.
118
- - **Stop suggesting `--skip-version-check --force` to get past a bundle pre-check failure.** The check always runs.
119
- - **Stop retrying a send refused with `target_needs_input`.** Get the question answered instead.
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.7
85
+ ## Known gaps in 0.6.8
123
86
 
124
- - **Not yet checked on a real machine:** opening the view from Claude Desktop, and the plain-tmux layout without herdr.
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
@@ -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. When the user has authorized the added capacity and cost, run:
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" a b --pod dev --runtime codex --cwd "$PROJECT_ROOT" --json
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 `b`. The expected new logical IDs are `dev.a` and `dev.b`,
131
- with addresses `dev-a@starter` and `dev-b@starter`; use the actual
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 ID; do not run both examples for the same desired capacity:
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" a b --new-pod build --runtime codex --cwd "$PROJECT_ROOT" --json
139
+ rig grow "$RIG_ID" parser cli --new-pod data --runtime codex --cwd "$PROJECT_ROOT" --json
139
140
  ```
140
141
 
141
- That alternative produces `build.a`/`build.b` and corresponding `build-...`
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.a` only for an already-created seat that
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-a@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."
167
- rig capture dev-a@starter
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-a@starter \
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-a@starter`, `dev-b@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
+ | `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.a` removes that seat; `rig shrink "$RIG_ID" build`
244
- removes the whole optional build pod. These end the affected sessions. Removal
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.
@@ -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.7",
4
- commit: "b3c3c8575f2a646c07ecc49bbf07927473effc9d",
3
+ semver: "0.6.8",
4
+ commit: "aa126c74d5d1568a6091c037450720c552e50e49",
5
5
  dirty: false,
6
- builtAt: "2026-10-08T11:56:22Z",
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,CAkvBxH"}
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"}
@@ -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",