@openrig/cli 0.6.0 → 0.6.2

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 (187) hide show
  1. package/daemon/assets/claude-statusline-context.cjs +11 -2
  2. package/daemon/assets/guidance/openrig-start.md +7 -0
  3. package/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md +66 -13
  4. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +7 -0
  5. package/daemon/context-packs/help/help.md +130 -0
  6. package/daemon/context-packs/help/manifest.yaml +9 -0
  7. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
  8. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +3 -0
  9. package/daemon/context-packs/reference/getting-started.md +506 -0
  10. package/daemon/context-packs/reference/instance-layout.md +106 -0
  11. package/daemon/context-packs/reference/manifest.yaml +16 -0
  12. package/daemon/context-packs/reference/rig-spec.md +580 -0
  13. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  14. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  15. package/daemon/context-packs/skills/applying-a-permission-policy/SKILL.md +66 -13
  16. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +3 -3
  17. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
  18. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  19. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  20. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  21. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  22. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  23. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  24. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  25. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  26. package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +7 -0
  27. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  28. package/daemon/context-packs/skills/core/openrig-software-factory/SKILL.md +37 -6
  29. package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
  30. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  31. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  33. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  34. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  36. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  46. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  49. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  54. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  55. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  57. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  58. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  61. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  62. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  63. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  64. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  65. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  66. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  67. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  68. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  69. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  70. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +3 -0
  71. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  72. package/daemon/dist/adapters/codex-runtime-adapter.js +10 -2
  73. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  74. package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
  75. package/daemon/dist/adapters/pi-runner.js +5 -0
  76. package/daemon/dist/adapters/pi-runner.js.map +1 -1
  77. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  78. package/daemon/dist/adapters/tmux.js +19 -8
  79. package/daemon/dist/adapters/tmux.js.map +1 -1
  80. package/daemon/dist/build-info.js +3 -3
  81. package/daemon/dist/domain/bootstrap-orchestrator.d.ts +1 -1
  82. package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
  83. package/daemon/dist/domain/bootstrap-orchestrator.js +18 -0
  84. package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
  85. package/daemon/dist/domain/bundle-source-resolver.d.ts +15 -0
  86. package/daemon/dist/domain/bundle-source-resolver.d.ts.map +1 -1
  87. package/daemon/dist/domain/bundle-source-resolver.js +49 -0
  88. package/daemon/dist/domain/bundle-source-resolver.js.map +1 -1
  89. package/daemon/dist/domain/codex-git-add-dirs.d.ts +16 -0
  90. package/daemon/dist/domain/codex-git-add-dirs.d.ts.map +1 -0
  91. package/daemon/dist/domain/codex-git-add-dirs.js +43 -0
  92. package/daemon/dist/domain/codex-git-add-dirs.js.map +1 -0
  93. package/daemon/dist/domain/context-usage-store.d.ts +2 -2
  94. package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  95. package/daemon/dist/domain/context-usage-store.js +4 -3
  96. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  97. package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
  98. package/daemon/dist/domain/model-divergence/current-generation-record.js +6 -3
  99. package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
  100. package/daemon/dist/domain/native-resume-probe.js +17 -5
  101. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  102. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  103. package/daemon/dist/domain/restore-orchestrator.js +17 -1
  104. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  105. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  106. package/daemon/dist/domain/rigspec-instantiator.js +8 -1
  107. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  108. package/daemon/dist/domain/seat-identity-reconciler.d.ts +3 -0
  109. package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
  110. package/daemon/dist/domain/seat-identity-reconciler.js +29 -1
  111. package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
  112. package/daemon/dist/domain/session-transport.d.ts +5 -0
  113. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  114. package/daemon/dist/domain/session-transport.js +42 -0
  115. package/daemon/dist/domain/session-transport.js.map +1 -1
  116. package/daemon/dist/domain/sqlite-time.d.ts +5 -0
  117. package/daemon/dist/domain/sqlite-time.d.ts.map +1 -0
  118. package/daemon/dist/domain/sqlite-time.js +7 -0
  119. package/daemon/dist/domain/sqlite-time.js.map +1 -0
  120. package/daemon/dist/domain/terminal/herdr-adapter.d.ts +2 -1
  121. package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
  122. package/daemon/dist/domain/terminal/herdr-adapter.js +9 -4
  123. package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
  124. package/daemon/dist/domain/terminal/terminal-provider.d.ts +5 -2
  125. package/daemon/dist/domain/terminal/terminal-provider.d.ts.map +1 -1
  126. package/daemon/dist/domain/terminal/terminal-views-store.d.ts +2 -0
  127. package/daemon/dist/domain/terminal/terminal-views-store.d.ts.map +1 -1
  128. package/daemon/dist/domain/terminal/terminal-views-store.js +1 -0
  129. package/daemon/dist/domain/terminal/terminal-views-store.js.map +1 -1
  130. package/daemon/dist/domain/terminal/view-composer.d.ts +2 -0
  131. package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -1
  132. package/daemon/dist/domain/terminal/view-composer.js +2 -0
  133. package/daemon/dist/domain/terminal/view-composer.js.map +1 -1
  134. package/daemon/dist/domain/transcript-rotation.d.ts +2 -2
  135. package/daemon/dist/domain/transcript-rotation.d.ts.map +1 -1
  136. package/daemon/dist/domain/transcript-rotation.js +11 -4
  137. package/daemon/dist/domain/transcript-rotation.js.map +1 -1
  138. package/daemon/dist/routes/activity.d.ts.map +1 -1
  139. package/daemon/dist/routes/activity.js +2 -1
  140. package/daemon/dist/routes/activity.js.map +1 -1
  141. package/daemon/dist/routes/require-sender-identity.d.ts +18 -0
  142. package/daemon/dist/routes/require-sender-identity.d.ts.map +1 -1
  143. package/daemon/dist/routes/require-sender-identity.js +31 -2
  144. package/daemon/dist/routes/require-sender-identity.js.map +1 -1
  145. package/daemon/dist/routes/restore-check.d.ts.map +1 -1
  146. package/daemon/dist/routes/restore-check.js +3 -0
  147. package/daemon/dist/routes/restore-check.js.map +1 -1
  148. package/daemon/dist/routes/seat.d.ts.map +1 -1
  149. package/daemon/dist/routes/seat.js +4 -3
  150. package/daemon/dist/routes/seat.js.map +1 -1
  151. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  152. package/daemon/dist/routes/sessions.js +2 -1
  153. package/daemon/dist/routes/sessions.js.map +1 -1
  154. package/daemon/dist/routes/terminal-ws.d.ts.map +1 -1
  155. package/daemon/dist/routes/terminal-ws.js +1 -6
  156. package/daemon/dist/routes/terminal-ws.js.map +1 -1
  157. package/daemon/dist/routes/transport.js +3 -2
  158. package/daemon/dist/routes/transport.js.map +1 -1
  159. package/daemon/dist/startup.d.ts.map +1 -1
  160. package/daemon/dist/startup.js +5 -0
  161. package/daemon/dist/startup.js.map +1 -1
  162. package/daemon/docs/reference/getting-started.md +101 -49
  163. package/daemon/docs/reference/help.md +130 -0
  164. package/daemon/docs/reference/rig-bundle.md +24 -8
  165. package/daemon/specs/agents/apps/vault-specialist/skills/vault-user/SKILL.md +5 -0
  166. package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +7 -0
  167. package/daemon/specs/agents/shared/skills/core/openrig-software-factory/SKILL.md +37 -6
  168. package/daemon/specs/rigs/launch/first-project-claude/CULTURE.md +39 -0
  169. package/daemon/specs/rigs/launch/first-project-claude/rig.yaml +30 -0
  170. package/daemon/specs/rigs/launch/first-project-mixed/CULTURE.md +39 -0
  171. package/daemon/specs/rigs/launch/first-project-mixed/rig.yaml +31 -0
  172. package/dist/build-info.js +3 -3
  173. package/dist/commands/bundle.d.ts.map +1 -1
  174. package/dist/commands/bundle.js +6 -3
  175. package/dist/commands/bundle.js.map +1 -1
  176. package/dist/commands/setup.d.ts.map +1 -1
  177. package/dist/commands/setup.js +14 -4
  178. package/dist/commands/setup.js.map +1 -1
  179. package/dist/commands/up.js +2 -2
  180. package/dist/commands/up.js.map +1 -1
  181. package/dist/commands/view.d.ts.map +1 -1
  182. package/dist/commands/view.js +3 -0
  183. package/dist/commands/view.js.map +1 -1
  184. package/package.json +1 -1
  185. package/tui/dist/hydrate.d.ts.map +1 -1
  186. package/tui/dist/hydrate.js +3 -2
  187. package/tui/dist/hydrate.js.map +1 -1
@@ -0,0 +1,506 @@
1
+ # Getting started: one useful change in your repository
2
+
3
+ Start with a repository and one bounded change you can exercise. The shipped
4
+ first-project recipes provide the same two seats: an outcome owner and an
5
+ independent checker. Choose Claude Code, Codex, or one of each using the accounts
6
+ you already have. Terminal-provider support does not change the harness or login.
7
+
8
+ You need Node.js 22 or 24 and tmux, on macOS or Linux. On a Mac with Apple
9
+ silicon, use Node.js 22 (see the [compatibility
10
+ history](../releases/v0.5.15.md#known-compatibility-limitation)). Native
11
+ Windows is not supported yet, and WSL2 has not been tested. Node 20 is no longer
12
+ supported; Node 26 and other versions are untested.
13
+
14
+ **Choose permissions before starting the team.** Ordinary OpenRig launches use
15
+ Codex's `-s workspace-write`, with approval policy from your native configuration,
16
+ or Claude Code's `acceptEdits`, which still leaves commands subject to native
17
+ rules and prompts. Codex's sandbox normally blocks network access, including the
18
+ local OpenRig daemon. A command allowance does not change general sandbox/network
19
+ settings. The starter's `profile: default` selects OpenRig resources, not a native
20
+ permission profile.
21
+ Agent-guided setup [asks once](#have-your-agent-configure-permissions): “Allow
22
+ your agents to run OpenRig commands without repeated permission prompts?”
23
+ **Yes — recommended** / **No — keep prompts**. An existing explicit choice is
24
+ reused; No or no answer leaves settings unchanged. Broader access is separate.
25
+
26
+ > Everything below reports **what is currently true**, never a guarantee that
27
+ > downstream work will succeed. "Daemon up" does not mean every agent is healthy;
28
+ > "kernel ready" does not mean every kernel agent is healthy; a workspace root
29
+ > being *live* does not mean it is the *right* one for your project.
30
+
31
+ ## Prepare and launch
32
+
33
+ Type `rig` in an ordinary terminal to open the startup and work TUI. It shows
34
+ the daemon address; **d** expands the selected instance path and diagnostics.
35
+ If the daemon is stopped, press Enter
36
+ to start that daemon, then choose the rigs and seats you want. Kernel is
37
+ recommended first; selecting its operator does not start every kernel seat.
38
+ The same view is available with **S** from ordinary TUI work.
39
+ **?** opens Help even while connection checks are pending. **w** skips startup;
40
+ **Esc** goes back, or leaves startup from its first page. These choices do not
41
+ start a daemon or a seat. **L** opens local reading before or after connecting:
42
+ choose configured Specs, project intent, projects, or missions and slices, then
43
+ select a directory or file. **r** reads the selected source again; **Esc** returns.
44
+ Local reading uses this machine's configured workspace paths and file allowlist,
45
+ including when the selected daemon address is remote. It shows disk provenance,
46
+ missing or denied sources, binary files and the 1 MiB text truncation boundary.
47
+ These disk snapshots may change after reading and do not supply live queue,
48
+ execution or topology state. Live views load after a confirmed connection and
49
+ deliberate entry; a stalled live read does not prevent Help or local reading.
50
+ When terminal transport is unavailable, **t** starts the empty terminal service
51
+ so recovery choices can be inspected. It launches no seats.
52
+
53
+ For a previously occupied seat, Enter attempts its previous conversation.
54
+ If history is unavailable, read the reason. **f** opens a separate fresh-start
55
+ decision for that named seat; **Esc** declines without launching it. A confirmed
56
+ fresh conversation receives the configured context and retains the old history,
57
+ but does not resume that history. Authentication or runtime failures require
58
+ repair of that prerequisite. **o** opens the existing native terminal here; detach
59
+ to return (tmux defaults to Ctrl-b, then d). Decide native trust/auth prompts
60
+ there. If a fresh start paused before context delivery, **c** finishes that
61
+ delivery to the same occupant. **r** reads actual state again; **d** expands details.
62
+
63
+ ### Choose your providers
64
+
65
+ Ask: **“Which working account do you want this team to use: Claude Code, Codex,
66
+ or both?”** Reuse an explicit choice already made. Recommend the account the
67
+ user already has working; a second subscription is not a prerequisite.
68
+
69
+ | Choice | Starter name | Owner / checker runtime and model |
70
+ | --- | --- | --- |
71
+ | Two Codex agents (existing route) | `first-project` | Both `codex`, pinned `gpt-6-astra` |
72
+ | Two Claude agents | `first-project-claude` | Both `claude-code`, configured native default model |
73
+ | One of each | `first-project-mixed` | Claude owner (native default); Codex checker (`gpt-6-astra`) |
74
+
75
+ Claude uses the same unpinned model convention as the existing Claude kernel and
76
+ implementation-pair recipes: OpenRig does not pass a model override. Read the
77
+ selected harness's configured model and show it alongside the recipe and launch
78
+ command before proceeding. Confirm account access to any pin; if unavailable,
79
+ ask for a supported model choice rather than silently substituting a model or
80
+ provider. After launch, confirm the actual native model before assigning work.
81
+
82
+ Install OpenRig and check `tmux -V`. Check **only the selected providers**:
83
+
84
+ - Claude Code: `claude --version` and `claude auth status`. If sign-in is missing,
85
+ ask once: “Please run `claude auth login` in your launch environment.”
86
+ - Codex: `codex --version` and `codex login status`. If sign-in is missing,
87
+ ask once: “Please run `codex login` in your launch environment.”
88
+
89
+ Install a missing selected CLI using its provider's installation instructions.
90
+ The other provider's CLI/login and Herdr/cmux are optional. Do not copy credentials
91
+ or start repeated sign-in attempts. Recheck the selected login after the user
92
+ completes it. `rig setup --dry-run` previews the broader setup; applying
93
+ `rig setup` installs/checks **both** harnesses and cmux, so it is optional for
94
+ this selected-provider path, not a requirement to fix an unused provider.
95
+
96
+ ### Kernel startup stays automatic
97
+
98
+ On a fresh instance, ordinary daemon startup chooses the kernel variant from
99
+ successful native auth probes: Claude alone, Codex alone, or both. Thus an absent
100
+ unused provider is fine. The project recipe does **not** constrain that probe:
101
+ if both accounts are authenticated, automatic kernel startup uses both, even
102
+ when the two project agents use just one provider. No manual kernel setup is
103
+ needed for this journey. The starter choice is not an instance-wide provider
104
+ restriction; a request to use only one provider for everything is separate.
105
+ Preserve any existing managed kernel and working rigs.
106
+
107
+ ### Launch the two project seats
108
+
109
+ Set `starter` to the chosen name from the table; the existing Codex route remains:
110
+
111
+ ```sh
112
+ cd <your-repository>
113
+ starter=first-project # or first-project-claude or first-project-mixed
114
+ rig specs preview "$starter" --kind rig
115
+ rig up "$starter" --cwd . --plan
116
+ rig up "$starter" --cwd .
117
+ rig status
118
+ rig ps --nodes --rig "$starter"
119
+ ```
120
+
121
+ Preview the selected seats, models and resources. Plan checks resolution and
122
+ preflight for the working directory. Launch starts the daemon if needed, with
123
+ the kernel behavior above. Read readiness for the project seats, not only daemon
124
+ health. Resolve a named authentication, trust or permission prompt before giving
125
+ that seat work. No new team is needed when returning to an existing project.
126
+
127
+ When a seat pauses, open its existing terminal with **o** in the startup view.
128
+ Read the proposed command, working directory and target instance. For an intended
129
+ local `rig` call, choose the native prompt's one-time approval if that is the scope
130
+ you want; a saved command-prefix allowance also affects future matching calls.
131
+ Decline an unexpected operation and tell the same agent what to do instead.
132
+ Approval controls whether an action may run; the sandbox controls its filesystem
133
+ and network access. Turning approvals off does not grant network access.
134
+
135
+ After answering, watch for the command's result and the agent continuing. Read
136
+ the corresponding queue row and transition from your ordinary terminal. If an
137
+ operation timed out, read its result before asking for another attempt: it may
138
+ already have taken effect. A delivered message or disappearing prompt alone is
139
+ not progress. If startup is still waiting for context delivery, use **c** for the
140
+ same occupant, then **r** to refresh. Do not start another seat to clear a prompt.
141
+
142
+ These starters are deliberately small starting points, not universal teams.
143
+ For a different installed runtime or team shape, inspect `rig specs ls --kind
144
+ rig` and `rig specs preview <name>` before selecting it. A seven-seat showcase
145
+ is optional and consumes more concurrent capacity.
146
+
147
+ ## Give the owner an outcome
148
+
149
+ For example, in a project that imports CSV files:
150
+
151
+ ```sh
152
+ rig send "dev-owner@$starter" 'Improve the CSV import error when a required column is missing: name the column and leave the existing data unchanged. Add a regression check, ask dev-check for an independent check of the exact candidate, and record the result and how I can try it. Keep the change local; do not publish.'
153
+ ```
154
+
155
+ Replace the example with a real problem in your repository. Include what the
156
+ user should observe, a boundary and how success can be checked. The owner
157
+ creates and claims a durable task, implements it, and routes the selected
158
+ independent check. You should not have to relay the review between terminals.
159
+ `rig send` is the initial conversation; the queue and repository artifacts
160
+ retain the work. An unbound shell does not need to impersonate a queue owner.
161
+
162
+ Use the chosen rig name in its seat addresses (for example,
163
+ `dev-owner@first-project-claude`). From an actual project seat, follow the work with
164
+ `rig queue list --limit 1000`: its default scope is the caller's current rig.
165
+ `queue list` has no `--rig` option. From an observer shell or another rig, use
166
+ `rig queue list --destination "dev-owner@$starter" --limit 1000` and the same
167
+ command for `"dev-check@$starter"`, after verifying those live addresses.
168
+ These show each destination's obligations, not a whole-rig view. An unbound shell
169
+ must not pretend to be a seat to change scope; use `--all-rigs` only when that
170
+ broader view is intended. Then read `rig queue show <id> --full` and
171
+ `rig queue transitions <id>`. A delivered message is not a reviewed result.
172
+ Read the artifact, exercise its behavior, and check the candidate reviewed.
173
+
174
+ ## Share the dashboard and return to it
175
+
176
+ ```sh
177
+ rig tui --shared
178
+ ```
179
+
180
+ A fresh kernel runs the ordinary TUI in its existing `operator-human` terminal.
181
+ This command attaches another client to that terminal. **Ctrl-b, then d**
182
+ detaches without quitting the TUI; return with the same command and the view
183
+ stays where it was. Another authorized agent can capture or operate that same
184
+ pane. It should tell you before changing your view. The terminal is not a
185
+ human inbox and does not prove anyone is watching it.
186
+
187
+ Plain `rig tui` remains an independent local view. If an older kernel or a TUI
188
+ you quit shows a shell, run `rig tui` in that shell once. `--shared` does not
189
+ start or replace a terminal, so a missing binding is reported with recovery
190
+ guidance rather than creating a second kernel.
191
+
192
+ Herdr users follow the same launch and task path. To place the managed team in
193
+ Herdr, use `rig terminal open "$starter" --provider herdr`; for the shared
194
+ dashboard, use `rig terminal open kernel --provider herdr`. The equivalent
195
+ cmux provider is also available. Read the opened/absent/degraded result: a
196
+ partial terminal view is not a healthy team. Repeated terminal-open calls can
197
+ create another provider workspace; return to the one already open when you
198
+ want to preserve it. This is terminal integration, not native plugin enrollment.
199
+
200
+ ## Continue real project work
201
+
202
+ Return to the same owner with the next outcome, citing the earlier result.
203
+ The seat address and durable queue survive closing your viewing terminal.
204
+ Keep intent, acceptance and evidence in the repository's existing project,
205
+ mission and slice artifacts; the starter reads those before inventing a path.
206
+
207
+ If the project has no work tree, start with `rig workspace doctor` and
208
+ `rig scope mission create --help`, then `rig scope slice create --help`. Set
209
+ the actual intended outcome before creating work. `rig scope` retains what is
210
+ being built. When repeated coordination warrants a workflow, discover with
211
+ `rig workflow specs`, inspect its owners and inputs, and instantiate the
212
+ selected name with `rig workflow instantiate --help`. A workflow is not needed
213
+ merely to make the first local change.
214
+
215
+ For a continuing team, [OpenRig Software Factory](../../packages/daemon/specs/agents/shared/skills/core/openrig-software-factory/SKILL.md)
216
+ offers manual/team work, queue-supported orchestration without Workflow, and an
217
+ optional explicit Workflow path, with wake defaults, token costs and permission
218
+ choices visible. Give its short request to your existing agent. After
219
+ installation, discover the compatible bundled recipe with `rig context show
220
+ skills/core/openrig-software-factory --json`; retain a missing/version-mismatch
221
+ result rather than silently using newer instructions. Its growth section keeps
222
+ three choices clear: stay with the pair, add one or two seats to the running rig
223
+ with `rig grow` and no YAML, or optionally author a custom rig. It covers
224
+ new-seat context/work ownership, concurrency costs and saving the expanded spec.
225
+ This guide remains the short first-use path.
226
+
227
+ ## Incomplete setup and restart
228
+
229
+ | Observation | Next action |
230
+ | --- | --- |
231
+ | Tool missing or login fails | Use the specific setup/auth hint; recheck that executable in the launch shell. Do not send work to an unready seat. |
232
+ | Daemon is healthy, kernel is still starting | Read `rig status` and `rig ps --nodes --rig kernel`; kernel readiness is separate. |
233
+ | Shared terminal is absent | Inspect the existing kernel binding and recovery state; use standalone `rig tui` while resolving it. |
234
+ | Viewing terminal was closed | Reattach with `rig tui --shared`; do not relaunch the team. |
235
+ | Daemon restarted but tmux survived | Re-read `rig status` and the existing queue; a daemon restart is not a fresh project. |
236
+ | Host reboot lost tmux sessions | Open `rig`, start the daemon if needed, and select the existing rig and seats. Resume is the default; a fresh conversation needs a separate decision. |
237
+ | Launch reports no usable snapshot | Inspect the existing rig and retained project files, then follow the same-seat recovery below. |
238
+ | Work is waiting on a prompt or decision | Read the row, transition and named prompt; preserve the obligation until the missing decision arrives. |
239
+
240
+ If a snapshot is unavailable, the startup view checks the selected seat's
241
+ retained startup source and authoritative occupant relation. It reports a
242
+ missing or ambiguous source instead of selecting an arbitrary historical row.
243
+ Repair the named source, retry, or leave the seat stopped. Check the retained
244
+ queue, project notes and observed result before continuing work.
245
+
246
+ `rig setup` prints the short form of this path; `rig status` points back here.
247
+
248
+ ## Kernel framing (what `rig setup` does and does not do)
249
+
250
+ Explicit CLI daemon startup retains its automatic kernel behavior. The TUI
251
+ starts the daemon with kernel auto-boot disabled so the user can select seats:
252
+
253
+ - `rig setup` installs/verifies the runtime; it does not start the daemon or the
254
+ kernel.
255
+ - Starting the daemon (`rig daemon start`, or implicitly via `rig up`) is what
256
+ boots the kernel rig in the background.
257
+ - Starting it from bare `rig` prepares no agents automatically. The TUI offers
258
+ kernel setup and individual seat selection after connecting.
259
+ - **Kernel readiness is a distinct signal from daemon health.** The daemon's HTTP
260
+ health binds early; the kernel can still be booting or a kernel agent can be
261
+ unhealthy while the daemon is up. `rig status` surfaces kernel readiness
262
+ separately (via `/api/kernel/status`); `rig daemon start --wait-for-kernel`
263
+ polls it.
264
+
265
+ ## The scope <-> workflow bridge
266
+
267
+ Two related primitives, often confused by new operators:
268
+
269
+ - **`rig scope`** manages **durable, on-disk artifacts** - missions and slices
270
+ (markdown/YAML files in your workspace). These are the persistent record of
271
+ *what work exists*.
272
+ - **`rig workflow`** manages a **runtime instance** - when you
273
+ `rig workflow instantiate <name>`, the daemon creates a workflow instance plus
274
+ an **entry qitem** that routes the first step to an owner. This is the live
275
+ coordination of *who does the next step*.
276
+
277
+ Scope files retain what the work is; workflow instances and their queue packets
278
+ retain who acts next. Creating or editing a mission does not start work. You can
279
+ instantiate a named workflow with `rig workflow instantiate <name>`, or explicitly
280
+ inspect an authored lifecycle with `rig workflow compile` and create its runtime
281
+ with `rig workflow instantiate-lifecycle`. Compilation alone does not start work.
282
+ [OpenRig Software Factory](../../packages/daemon/specs/agents/shared/skills/core/openrig-software-factory/SKILL.md)
283
+ shows a small reviewed example and how to retain custody through a genuine wait.
284
+
285
+ ## Have your agent configure permissions
286
+
287
+ Before team launch, your agent asks once, unless you already made an explicit
288
+ choice for these harnesses and this scope:
289
+
290
+ > Allow your agents to run OpenRig commands without repeated permission prompts?
291
+ > **Yes — recommended** / **No — keep prompts**
292
+
293
+ This covers the entire `rig` family, including starting/stopping agents,
294
+ configuration and launching processes. It is not global YOLO or permission to
295
+ invent work. The scope is your personal settings for this project unless you
296
+ explicitly choose user-wide sessions, which can affect your other projects.
297
+
298
+ On an actual **Yes**, the agent backs up the relevant files, adds the existing
299
+ native rules without duplicates, and preserves stricter rules and unrelated
300
+ settings. It checks bare and actual absolute-path invocations, rule loading and
301
+ repeated harmless reads in the target conversation. No or no answer leaves
302
+ settings alone and continues with existing prompts. Unsupported scope or a
303
+ managed restriction is reported; it is not permission to grant broader access.
304
+
305
+ The agent remembers an explicit choice, scope and exact additions in existing
306
+ onboarding context, so setup does not ask again. You do not need to approve each
307
+ routine edit separately. To undo, say **“Undo the OpenRig command allowances
308
+ added by this setup; keep my other rules.”** The agent removes only its recorded
309
+ additions, preserves earlier rules and later edits, and verifies reloading.
310
+ Other pre-existing allowances may still permit commands after this undo.
311
+
312
+ Use the maintained **Applying a permission policy** procedure:
313
+
314
+ ```sh
315
+ rig context get skills/applying-a-permission-policy/SKILL.md
316
+ ```
317
+
318
+ In a source checkout, read [its source](../../packages/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md).
319
+ In an npm installation, the same file is under
320
+ `@openrig/cli/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md`
321
+ below the matching `npm root -g` or local `npm root`. Use the version supplying
322
+ your `rig` executable. It covers Codex/Claude command rules, actual config roots,
323
+ preserving restrictions and verifying the target conversation. A missing guide or
324
+ unsupported native version is a reported gap, not permission to silently bypass.
325
+
326
+ The broader launch-mode recipes below are optional. Command-family rules do not
327
+ require changing the starter's sandbox or everyone else's defaults.
328
+
329
+ ## Opt-in permissive operation
330
+
331
+ Permissive operation lets agents act with your account's filesystem and network
332
+ access with fewer permission stops. They can damage files or send data without
333
+ another confirmation. Use it only for work and an environment you deliberately
334
+ trust; it does not supply missing credentials or override organization policy.
335
+
336
+ Make changes in a **user-owned spec before its first launch**. To customize the
337
+ starter, run `rig specs show first-project --kind rig` and find its `Path`, ending
338
+ in `specs/rigs/launch/first-project/rig.yaml`. Copy that whole `specs` directory to
339
+ `./openrig-specs` in your repository, keeping its layout: copying only `rig.yaml`
340
+ breaks its relative agent and culture references. Leave the installed copy alone.
341
+ The examples below use `./openrig-specs/rigs/launch/first-project/rig.yaml`. If you
342
+ already have a running `first-project`, follow the existing-session advice below
343
+ before changing it; this is not a live permission switch.
344
+
345
+ ### Codex: select sandbox and approvals together
346
+
347
+ For Codex versions supporting named `.config.toml` profiles, create
348
+ `~/.codex/first-project-permissive.config.toml` (under `CODEX_HOME` instead if you
349
+ set it for the daemon's launch environment):
350
+
351
+ ```toml
352
+ sandbox_mode = "danger-full-access"
353
+ approval_policy = "never"
354
+ ```
355
+
356
+ In the copied rig, add this field to **each Codex member** that should use it;
357
+ keep the member's existing `profile: default`:
358
+
359
+ ```yaml
360
+ codex_config_profile: first-project-permissive
361
+ ```
362
+
363
+ Leave `permission_policy` absent or set it to `none`, with no member-level YOLO
364
+ override. OpenRig then passes `-p first-project-permissive` instead of its default
365
+ `-s workspace-write`, so the native profile supplies both settings. Higher-priority
366
+ native project configuration or managed requirements can still change/refuse the
367
+ result. Inspect native `/status` before assigning work.
368
+
369
+ ```sh
370
+ rig policy current --spec ./openrig-specs/rigs/launch/first-project/rig.yaml
371
+ rig up ./openrig-specs/rigs/launch/first-project/rig.yaml --cwd . --plan
372
+ rig up ./openrig-specs/rigs/launch/first-project/rig.yaml --cwd .
373
+ ```
374
+
375
+ OpenRig's `permission_policy: builtin:yolo` setting selects
376
+ `-s danger-full-access -a never` on fresh, resume and fork launches, replacing
377
+ the named-profile argument. The profile recipe above remains useful when you
378
+ want to maintain those choices in native configuration. The legacy
379
+ environment-only `OPENRIG_YOLO=1` path remains sandbox-only when no resolved
380
+ policy is present. A standalone `codex --yolo` command is not an OpenRig setting.
381
+
382
+ To return to a restricted next launch, change the selected profile to:
383
+
384
+ ```toml
385
+ sandbox_mode = "workspace-write"
386
+ approval_policy = "on-request"
387
+
388
+ [sandbox_workspace_write]
389
+ network_access = false
390
+ ```
391
+
392
+ ### Per-seat permission mode
393
+
394
+ Permission mode is the native execution choice; work posture is project guidance.
395
+ For an existing managed seat, select future-launch permissions explicitly:
396
+
397
+ ```sh
398
+ rig seat set-permissions owner@first-project --mode full_bypass --reason "Operator selected broader access"
399
+ rig seat status owner@first-project --json
400
+ ```
401
+
402
+ This records the actor, reason and old/new choice on that seat. It does not
403
+ relaunch it, alter native history, change sibling seats, or edit permission
404
+ rules/hooks. A later lifecycle action remains a separate decision. The explicit
405
+ seat choice overrides the inherited member/rig policy; `--mode inherit` clears
406
+ it without changing that inherited policy. `floor` selects the existing normal
407
+ launch path (including a Codex named profile when configured); it does not
408
+ rewrite a native profile or force its approval settings.
409
+
410
+ Codex and Claude accept `floor` and `full_bypass`. Additional Claude native modes,
411
+ including `auto`, require support advertised by the managed executable's help.
412
+ OpenRig resolves the first executable on its managed launch PATH at the seat's
413
+ absolute working directory, then uses that exact path for discovery and launch.
414
+ It does not use interactive shell aliases or a shell's modified PATH. Relative
415
+ PATH entries and a relative `CLAUDE_CONFIG_DIR` resolve from the seat directory.
416
+
417
+ For these explicit native modes, fresh, resume, fork and legacy restore use the
418
+ same managed environment: PATH, HOME, `CLAUDE_CONFIG_DIR` (default HOME/.claude)
419
+ and the configured classic-renderer setting. Other shell customizations are
420
+ excluded. The existing managed identity and allowlisted provider-auth channel
421
+ is retained by variable name; credentials are not copied into launch commands
422
+ or capability evidence. Help runs without that credential channel. Existing
423
+ login files remain under the managed home. Configure the daemon's managed
424
+ launch environment deliberately before selecting a mode; this is not a probe
425
+ of an arbitrary interactive shell.
426
+
427
+ Each selection and each later launch checks support again, without a cache.
428
+ A changed node/occupant, binding, cwd, executable or capability environment
429
+ refuses at the next check: after help, before selection/audit mutation, and
430
+ immediately before paste and Enter. A failure after a valid paste is partial
431
+ input, not a successful launch or a claim that earlier input was rolled back.
432
+ An existing explicit selection is retained on refusal; no fallback is chosen.
433
+ Ordinary and inherited launch paths are unchanged. The status response
434
+ distinguishes desired settings, generation-bound
435
+ launch arguments and an unverified native effect. Inspect the native session
436
+ after an authorized launch before claiming its actual permission behavior.
437
+
438
+ The rig-level verbs are `rig policy permissions list`, `show`, `current` and
439
+ `apply`. Existing `rig policy list/show/current/apply` remain compatibility
440
+ aliases with the same JSON and exit behavior. Pi resource trust and the per-seat
441
+ typing guard are separate controls.
442
+
443
+ ### Claude Code: a different launch flag
444
+
445
+ The shipped `first-project` uses Codex. For a user-owned **Claude Code** rig,
446
+ OpenRig normally passes `--permission-mode acceptEdits`: edits can proceed, while
447
+ other actions follow native rules and prompts. It does not add a global
448
+ `Bash(rig:*)` allowance. To explicitly select the bypass launch flag for that rig:
449
+
450
+ ```sh
451
+ rig policy apply yolo --spec ./my-claude-rig/rig.yaml
452
+ rig policy current --spec ./my-claude-rig/rig.yaml
453
+ ```
454
+
455
+ This records `permission_policy: builtin:yolo`; the next managed launch passes
456
+ `--dangerously-skip-permissions`. Member-level policies take precedence. To return
457
+ future launches to OpenRig's `acceptEdits` mode, use `rig policy apply none --spec
458
+ ./my-claude-rig/rig.yaml` and remove any member-level bypass override. Native rules
459
+ and managed restrictions still matter; this flag is not a promise about sandbox
460
+ or account access. See [Claude permissions](https://code.claude.com/docs/en/permissions).
461
+
462
+ **Already running:** changing a file or running `rig policy apply` does not revoke
463
+ a live agent's permissions, nor rewrite a stored rig's policy on restore. Pause
464
+ work and use the native permission controls for that conversation (current
465
+ Codex and Claude CLIs expose `/permissions`); inspect the effective mode again.
466
+ Keep the launch spec/profile consistent for subsequent launches. If the native
467
+ version cannot apply the change in place, preserve the work and use the supported
468
+ same-seat stop/resume path after checking its retained policy; do not erase the
469
+ rig or start a duplicate to reset permissions. A resume can reapply the stored
470
+ launch mode, so verify the native mode again before continuing work.
471
+
472
+ ## Custom settings and precedence
473
+
474
+ - **OpenRig:** member `permission_policy` overrides rig `permission_policy`.
475
+ Normal managed launches bind the default mode explicitly when neither is set;
476
+ exporting `OPENRIG_YOLO=1` in a client shell is not a reliable per-team recipe.
477
+ A custom policy file is relative to the declaring rig spec, with no absolute
478
+ path or `..`. `surface: flag` selects a launch mode. Config-surface policies
479
+ (`locked`, `standard`, `open`, or custom) describe intent: recording one does
480
+ not translate and enforce its rules. Apply and inspect the actual native
481
+ settings separately. See [RigSpec policy references](rig-spec.md#attaching-a-permission-policy).
482
+ - **Codex:** personal settings live in `~/.codex/config.toml` or `CODEX_HOME`;
483
+ trusted project settings live in `.codex/config.toml`. Current precedence is
484
+ CLI overrides, trusted project settings, selected profile, user settings,
485
+ cloud defaults when supplied, `/etc/codex/config.toml` on Unix, then built-in
486
+ defaults, subject to managed requirements. OpenRig's explicit sandbox flag
487
+ wins over a file's `sandbox_mode`; use `codex_config_profile` for a custom
488
+ sandbox instead. For workspace edits with network access while retaining
489
+ approvals, use a named profile with `sandbox_mode = "workspace-write"`,
490
+ `approval_policy = "on-request"` and `[sandbox_workspace_write]`
491
+ `network_access = true`. That grants network access generally, not just to
492
+ the local daemon. See [Codex configuration](https://learn.chatgpt.com/docs/config-file/config-basic)
493
+ and [sandbox/approval controls](https://learn.chatgpt.com/docs/agent-approvals-security).
494
+ - **Claude Code:** use `~/.claude/settings.json`, shared project
495
+ `.claude/settings.json`, or personal project `.claude/settings.local.json`.
496
+ Managed settings precede launch flags, then project-local, project-shared and
497
+ user settings. Permission-rule lists combine; a higher-level allow is not a
498
+ way to defeat a deny. OpenRig's `acceptEdits` launch flag overrides a file's
499
+ `permissions.defaultMode`; selected runtime resources may also merge into
500
+ project-local settings. See [Claude settings and precedence](https://code.claude.com/docs/en/settings)
501
+ and [OpenRig's runtime config disclosure](agent-startup-guide.md#runtime-config-disclosure).
502
+
503
+ These recipes do not establish every provider/version/config combination.
504
+ Check the installed version and effective settings. Newer permission-profile or
505
+ automatic review features are provider choices, not implicit OpenRig capabilities.
506
+ Selecting rules or a broader mode does not change the shipped defaults.
@@ -0,0 +1,106 @@
1
+ # OpenRig Instance Layout
2
+
3
+ An OpenRig instance keeps its managed state under one configured
4
+ `$OPENRIG_HOME`. `rig daemon start` and direct daemon first start reconcile the
5
+ same additive layout before the database is opened or the listener binds.
6
+
7
+ ```text
8
+ $OPENRIG_HOME/
9
+ config.json # typed instance settings; created as an empty object
10
+ state/ # runtime-owned durable state
11
+ context/ # addressable context library (`context.root`)
12
+ system/
13
+ system-world.yaml # selected baseline context + skill identities
14
+ skills/ # managed skill catalog (`skills.root`)
15
+ workspace/ # project work tree (`workspace.root`)
16
+ SPEC.md # project intent
17
+ project.yaml # project context and skill selection
18
+ workspace.yaml # project-location catalog
19
+ .gitignore
20
+ missions/
21
+ exhaust/
22
+ specs/ # canonical instance spec library
23
+ topology/ # instance, rig, pod, and seat continuity tree
24
+ plugins/ # installed OpenRig plugins
25
+ run/ # process coordination files
26
+ logs/ # daemon and operation logs
27
+ transcripts/ # durable per-seat terminal transcripts
28
+ backups/ # operator-created recovery artifacts
29
+ secrets/ # local connector and host secrets
30
+ ```
31
+
32
+ The initializer creates only missing managed entries. It never overwrites an
33
+ existing file, and it checks every managed path before the first write. A path
34
+ with the wrong type is reported by its exact location; unrelated user-owned
35
+ content is preserved. A second run against an already-converged instance writes
36
+ nothing.
37
+
38
+ The workspace subtree is owned by the [Project Workspace
39
+ Contract](project-workspace.md). The instance initializer calls that owner
40
+ rather than carrying another copy of its file bytes. `skills/` and `topology/`
41
+ are created as empty roots; their respective catalog and topology workflows own
42
+ their contents.
43
+
44
+ ## Context library setting
45
+
46
+ The addressable context library has one typed setting and one environment
47
+ override:
48
+
49
+ | Surface | Value |
50
+ | --- | --- |
51
+ | Config key | `context.root` |
52
+ | Environment | `OPENRIG_CONTEXT_ROOT` |
53
+ | Default | `$OPENRIG_HOME/context` |
54
+ | Resolved property | `contextRoot` |
55
+
56
+ The removed `context.packs_root`, `context.packsRoot`, and
57
+ `OPENRIG_CONTEXT_PACKS_ROOT` spellings are refused with guidance to use
58
+ `context.root`; they are not compatibility aliases. Bundle installation and
59
+ `rig context add` both resolve the same configured landing root.
60
+
61
+ ## System World
62
+
63
+ The System World is the instance-wide baseline selected before topology/role
64
+ and Project World material. Its versioned manifest contains ordered context-pack
65
+ references plus managed skill identities; it never contains authoritative skill
66
+ bytes. The default manifest is installed additively at
67
+ `$OPENRIG_HOME/context/system/system-world.yaml`.
68
+
69
+ | Surface | Value |
70
+ | --- | --- |
71
+ | Config key | `context.system_world` |
72
+ | Environment | `OPENRIG_CONTEXT_SYSTEM_WORLD` |
73
+ | Default | `default` |
74
+ | Resolved property | `systemWorld` |
75
+
76
+ `default` selects the installed manifest, a safe relative or absolute path
77
+ selects an explicit replacement, and `disabled` is an explicit off state.
78
+ Missing or malformed selections fail; absence is never inferred as disablement.
79
+ `rig context work-install --json` reports the effective state, source, manifest,
80
+ context selectors, and skills. With `--runtime`, its managed skill loadout then
81
+ combines System World, topology, and Project World selectors with provenance.
82
+
83
+ For a pre-0.5.9 home, use the `openrig-upgrade` skill's
84
+ `migrate-telemetry-state-0.5.9.mjs` helper as an Agent-Operated Migration. Its
85
+ order is plan → `--apply-state` → separately activate the target runtime →
86
+ paired new-root samples newer than any bounded legacy tail → `--verify` → the
87
+ non-destructive finalizer `--apply-library`. During activation, runtime readers
88
+ are canonical-first with legacy-fallback and a custom context-library root
89
+ remains stable. Verification binds exact accepted tail bytes; finalization
90
+ revalidates them, copies without overwrite, and switches config last. It never
91
+ removes the legacy telemetry or library. `--rollback` reverses only helper-owned
92
+ config, System World, empty-directory, and copied-library effects. The helper
93
+ must stop rather than claim success if writer/reader convergence, resumed legacy
94
+ writes, byte drift, collision, or any migration-owned path cannot be proved.
95
+ `--help` prints the phase grammar without inventorying; no phase flag is the
96
+ intentional read-only plan, and unknown options fail nonzero before plan or
97
+ mutation.
98
+
99
+ ## Existing spec libraries
100
+
101
+ Creating `$OPENRIG_HOME/specs` does not migrate existing launch-era specs.
102
+ Upgraded installations may still have a separate legacy specs library that the
103
+ runtime reads for compatibility. Treat the two-home state as an explicit
104
+ limitation: use the live spec-library commands to determine where a spec is
105
+ served from, and do not infer convergence merely because the canonical
106
+ directory exists.
@@ -0,0 +1,16 @@
1
+ # Reference guides the help pack links to, loaded one file or section at a time by address
2
+ # (rig context get reference/<file>#<section>). Each file is a symlink to docs/reference/.
3
+ name: reference
4
+ version: "0.6.2"
5
+ taxonomy: world
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
+ files:
8
+ - path: getting-started.md
9
+ role: reference
10
+ summary: "Getting started: setup, first team, recovery after a reboot, and permissions."
11
+ - path: instance-layout.md
12
+ role: reference
13
+ summary: "Where an OpenRig instance keeps its files and configuration."
14
+ - path: rig-spec.md
15
+ role: reference
16
+ summary: "The rig specification format."