@awebai/oats 0.24.12 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/oats.mjs +936 -2822
- package/docs/capabilities.md +136 -323
- package/docs/configuration.md +68 -533
- package/docs/design/2026-09-16-fresh-operator-walkthrough.md +19 -14
- package/docs/design/2026-09-16-portable-migration-evidence.md +2 -0
- package/docs/design/2026-09-16-portable-onboarding.md +4 -2
- package/docs/design/2026-09-20-redesign-program-board.md +1 -1
- package/docs/design/2026-09-20-workspace-and-portable-adoption-plan.md +2 -0
- package/docs/design/2026-09-23-simplified-workspace-model.md +711 -0
- package/docs/design/2026-09-23-workspace-module-contracts.md +309 -0
- package/docs/design/2026-09-23-workspace-v2-implementation-plan.md +65 -0
- package/docs/design/README.md +20 -8
- package/docs/design/operations-contract.md +1 -0
- package/docs/design/package-engine-contract.md +1 -1
- package/docs/design/package-runtime-api.md +1 -1
- package/docs/desktop-cli-api.md +386 -6
- package/docs/desktop-succession.md +3 -4
- package/docs/first-team.md +107 -224
- package/docs/implementation.md +6 -4
- package/docs/integrations.md +45 -44
- package/docs/knowledge-capability-authoring.md +10 -4
- package/docs/knowledge-migration.md +5 -4
- package/docs/knowledge-reference/package-craft.md +11 -3
- package/docs/knowledge.md +24 -8
- package/docs/layers.md +3 -3
- package/docs/oats-local.schema.json +50 -0
- package/docs/oats-membership.schema.json +23 -0
- package/docs/oats-workspace.schema.json +133 -48
- package/docs/official-marketplace.md +9 -6
- package/docs/packages.md +229 -440
- package/docs/rebuild-to-v2.md +233 -0
- package/docs/release-notes/v0.24.13.md +51 -0
- package/docs/release-notes/v0.25.0.md +99 -0
- package/docs/soul.schema.json +41 -68
- package/docs/souls-and-instances.md +175 -108
- package/docs/workspace-adoption.md +70 -345
- package/docs/workspaces.md +429 -119
- package/lib/core.mjs +419 -55
- package/lib/instance-resolution.mjs +312 -0
- package/lib/materialize.mjs +580 -0
- package/lib/packages.mjs +501 -1273
- package/lib/remote.mjs +639 -0
- package/lib/resolve.mjs +576 -0
- package/lib/schedule.mjs +194 -34
- package/lib/workspace.mjs +635 -0
- package/package.json +1 -1
- package/lib/portable-migration-artifacts.mjs +0 -135
- package/lib/portable-migration-evidence.mjs +0 -305
- package/lib/portable-migration-store.mjs +0 -199
- package/lib/portable-migration.mjs +0 -104
- package/lib/portable-onboarding-acceptance.mjs +0 -66
- package/lib/setup-expert-source.mjs +0 -100
package/docs/first-team.md
CHANGED
|
@@ -1,263 +1,146 @@
|
|
|
1
1
|
# Run your first OATS team
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
>
|
|
8
|
-
>
|
|
9
|
-
>
|
|
10
|
-
> The [qualification example](first-team-demo.md) records real
|
|
11
|
-
>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
3
|
+
> **Workspace model (0.25).** This page is the v2 first-team guide. The 0.24
|
|
4
|
+
> surface it used to describe (`oats-config.yaml`, `oats init` / `install` /
|
|
5
|
+
> `use` / `trust`, the 0.24 `oats onboard --dir` bootstrap that created a local
|
|
6
|
+
> `oats-setup-expert`) no longer exists; those verbs answer `E_UNKNOWN_COMMAND`
|
|
7
|
+
> naming their replacement. Model: [workspaces.md](workspaces.md) ·
|
|
8
|
+
> packages: [packages.md](packages.md) · moving a 0.24 deployment:
|
|
9
|
+
> [rebuild-to-v2.md](rebuild-to-v2.md) (§5 is the deployment layout this page
|
|
10
|
+
> creates). The [qualification example](first-team-demo.md) records real v1
|
|
11
|
+
> tasks on 0.23 and is not v2 acceptance.
|
|
12
|
+
|
|
13
|
+
Start with one workspace, one member repository and one small, real task. A
|
|
14
|
+
soul keeps the role and its curated skills; an instance gets a working session
|
|
15
|
+
and a repository view; every capability the instance runs is copied whole into
|
|
16
|
+
its home at spawn from a **member** repository (latest state, trusted by
|
|
17
|
+
membership) or from a **package** (a pinned version, executables approved once
|
|
18
|
+
per version in the lock). Nothing is installed.
|
|
19
|
+
|
|
20
|
+
## 0. Prerequisites
|
|
21
|
+
|
|
22
|
+
Node.js 22+, Git with read access to the repositories below (your own
|
|
23
|
+
credential helpers; the kernel never prompts), tmux, and an authenticated
|
|
24
|
+
harness (Pi, Claude or Codex).
|
|
20
25
|
|
|
21
26
|
```bash
|
|
22
27
|
npm install -g @awebai/oats@latest
|
|
23
|
-
|
|
24
|
-
node --version
|
|
25
|
-
tmux -V
|
|
26
|
-
oats version
|
|
27
|
-
cd /path/to/project
|
|
28
|
-
oats init --raw
|
|
29
|
-
oats install git:github.com/awebai/oats-okf@v2.0.0
|
|
30
|
-
oats list
|
|
28
|
+
node --version && tmux -V && oats version --json # features must list workspace-v2
|
|
31
29
|
```
|
|
32
30
|
|
|
33
|
-
|
|
34
|
-
Raw initialization writes editable configuration with integrations disabled;
|
|
35
|
-
installation separately acquires the published OKF 2.0.0 closure and exact lock.
|
|
36
|
-
Neither step approves hooks, authenticates a runtime or joins a team. Inspect
|
|
37
|
-
the acquired version before continuing. An existing development template or
|
|
38
|
-
lock may still select v1: follow explicit preservation/update/cutover instead
|
|
39
|
-
of applying fresh initialization or carrying v1 knowledge settings into v2.
|
|
40
|
-
|
|
41
|
-
For several repositories initialize their common workspace, then select the
|
|
42
|
-
repository owning the soul with `--dir /path/to/workspace/project` for
|
|
43
|
-
create/spawn/retire. A team roster does not select a work repository for spawn.
|
|
44
|
-
|
|
45
|
-
## Onboarding with the setup expert
|
|
46
|
-
|
|
47
|
-
On **OATS 0.24.2 or later**, start in an explicit empty deployment:
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
oats onboard --dir /absolute/new-deployment --json
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
`oats onboard` ships from 0.24.2 (earlier kernels refuse it). It is a
|
|
54
|
-
classic local bootstrap, not captured preparation or workspace enrollment. It
|
|
55
|
-
acquires `oats.framework` from the official catalog, exact-locks its artifacts,
|
|
56
|
-
selects only `oats.core` and `oats.setup` for the new local `oats-setup-expert`,
|
|
57
|
-
and prints the exact next spawn command. Review and run the returned
|
|
58
|
-
`result.next.command` when ready; it addresses this same kernel and deployment.
|
|
59
|
-
Onboarding itself never launches a model, changes native authentication or
|
|
60
|
-
installs capture hooks/services. **`oats setup` remains the separate record
|
|
61
|
-
capture-setup command**, not an alias for onboarding.
|
|
62
|
-
|
|
63
|
-
The expert receives `oats-operate`, `oats-souls`, `oats-config`, `oats-packages`
|
|
64
|
-
and `oats-workspace-setup`, without duplicate legacy kernel skill copies. It has
|
|
65
|
-
no hard knowledge/messaging dependency, so it can help select and configure those
|
|
66
|
-
providers afterward. Catalog identity grants no executable trust: the bootstrap
|
|
67
|
-
uses resource-only core/setup capabilities and refuses unexpected executable
|
|
68
|
-
surfaces instead of auto-approving them.
|
|
31
|
+
## 1. Declare the workspace (shared, in Git)
|
|
69
32
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
providers for other souls. Failures report partial acquisition/creation rather
|
|
73
|
-
than claiming atomic captured preparation. Preserve that evidence before retrying.
|
|
33
|
+
Three files, all committed ([rebuild-to-v2.md](rebuild-to-v2.md) §§2–4 show
|
|
34
|
+
each field):
|
|
74
35
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
catalog names; the kernel's bundled catalog is only the fallback (it is a
|
|
86
|
-
snapshot at the kernel's own release and lags every framework release cut
|
|
87
|
-
afterwards). `OATS_PACKAGE_CATALOG` still overrides both. The result reports
|
|
88
|
-
`catalog.origin` (`workspace` | `bundled` | `override`), and an integrity
|
|
89
|
-
refusal names the lag when the bundled entry caused it.
|
|
36
|
+
- `oats-workspace.yaml` (`schemaVersion: 2`) in **one** host repository: `name`,
|
|
37
|
+
`members: [<repo ref>, …]`, `teams:`, `packages: { oats.framework: v<x>, … }`,
|
|
38
|
+
`defaults:`. A member is a repo ref, never a revision.
|
|
39
|
+
- `oats-membership.yaml` (`{ schemaVersion: 2, workspace: <host ref>, team? }`)
|
|
40
|
+
in **every** member — the backlink half of the handshake. A repo listed
|
|
41
|
+
without a backlink is `no-backlink` and contributes nothing.
|
|
42
|
+
- `souls/<name>/soul.yaml` (`schemaVersion: 2`) in the member that owns the
|
|
43
|
+
soul: `name`, `description`, `work: worktree|checkout|directory|workspace`,
|
|
44
|
+
and `capabilities: { <cap>: { from: here | <repo key> | package } | off }`.
|
|
45
|
+
A capability is a directory `capabilities/<cap>/oats.json` in a member.
|
|
90
46
|
|
|
91
|
-
The
|
|
47
|
+
The smallest real setup is one repository that is host **and** member: it
|
|
48
|
+
carries the workspace file, its own `oats-membership.yaml` pointing at itself,
|
|
49
|
+
one soul and, optionally, one capability. Every soul gets `oats.core` from the
|
|
50
|
+
`oats.framework` package by default.
|
|
92
51
|
|
|
93
|
-
##
|
|
52
|
+
## 2. Realize it on this machine — `oats onboard`
|
|
94
53
|
|
|
95
|
-
|
|
96
|
-
`
|
|
97
|
-
|
|
98
|
-
```yaml
|
|
99
|
-
agent-types:
|
|
100
|
-
developers:
|
|
101
|
-
description: Coding experts
|
|
102
|
-
capabilities:
|
|
103
|
-
layers:
|
|
104
|
-
knowledge:
|
|
105
|
-
capability: oats.okf
|
|
106
|
-
from: installed
|
|
107
|
-
souls:
|
|
108
|
-
backend-expert:
|
|
109
|
-
enabled: true
|
|
110
|
-
settings:
|
|
111
|
-
bindings-file: /absolute/config/okf-bindings.json
|
|
112
|
-
harvest-runtime: pi
|
|
113
|
-
messaging: none
|
|
114
|
-
tasks: none
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
There is no hardcoded required harvester model in v2: omitted `harvest-model`
|
|
118
|
-
uses the selected runtime's configured default. Choose a model explicitly if
|
|
119
|
-
needed. Source and worker runtimes are independent.
|
|
120
|
-
|
|
121
|
-
Review the acquired Git payload and approve executable surfaces:
|
|
54
|
+
`oats onboard` is the bootstrap: it writes a minimal `oats-local.yaml`, creates
|
|
55
|
+
`agents/` and runs the first `sync` ([rebuild-to-v2.md](rebuild-to-v2.md) §5 is
|
|
56
|
+
the resulting layout).
|
|
122
57
|
|
|
123
58
|
```bash
|
|
124
|
-
oats
|
|
59
|
+
oats onboard ~/acme-workspace --workspace git:github.com/acme/agents
|
|
125
60
|
```
|
|
126
61
|
|
|
127
|
-
Use the catalog Git package, not the bundled npm mirror: npm omits the source
|
|
128
|
-
worker's `CLAUDE.md` symlink, so the mirror is not a self-contained distribution.
|
|
129
|
-
Acquisition alone is not activation or trust.
|
|
130
|
-
|
|
131
|
-
Messaging is optional. If desired, retain/configure the template's `oats.aweb`
|
|
132
|
-
layer, set `team.name` and any existing `team.id`, then review/trust it and run
|
|
133
|
-
`oats aweb setup`. Follow its install, initialization and create/join instructions
|
|
134
|
-
until it confirms membership. Join an existing team rather than duplicating it;
|
|
135
|
-
setup's exit status alone does not establish onboarding completion. A source-only
|
|
136
|
-
knowledge target does not require the service worker to have a messaging identity.
|
|
137
|
-
|
|
138
|
-
## Create the soul and provision an external base
|
|
139
|
-
|
|
140
|
-
```bash
|
|
141
|
-
oats create backend-expert --type developers --repo . --work worktree --runtime pi
|
|
142
62
|
```
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
```json
|
|
149
|
-
{"version":1,"stateDir":"../durable-okf-state","bases":{"team":{"id":"team-knowledge","kind":"directory","path":"../team-knowledge"}}}
|
|
63
|
+
~/acme-workspace/ # the taught "<name>-workspace" convention
|
|
64
|
+
├── oats-local.yaml # { schemaVersion: 2, workspace: git:github.com/acme/agents }
|
|
65
|
+
├── oats-lock.json # lockfileVersion 3: commit + integrity + approval per package
|
|
66
|
+
├── agents/ # instance homes
|
|
67
|
+
└── <member>/ # clones of the members you work IN (printed as next steps)
|
|
150
68
|
```
|
|
151
69
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
70
|
+
Read the report it prints: every member row must be `✓↔` (confirmed) — fix
|
|
71
|
+
`no-backlink` / `backlink-elsewhere` / `cannot-read` before going on. If it
|
|
72
|
+
exits `2`, a package needs executable approval: run `oats sync` in a terminal
|
|
73
|
+
and answer `approve <id> <version>? [y/N]`. Approval is per package version,
|
|
74
|
+
once, recorded in the lock; member capabilities need none. Then clone the
|
|
75
|
+
member you will work in beside `oats-local.yaml` (only a soul's work target
|
|
76
|
+
needs a clone — discovery and resolution run over the remotes).
|
|
156
77
|
|
|
157
|
-
|
|
78
|
+
`--json` returns `onboardApi: 2` (`local`, `dir`, `agents`, `lock`, the full
|
|
79
|
+
`sync` report, `hosting`, `next.clone[]`, `next.spawn`); running it twice is
|
|
80
|
+
`E_ALREADY_ONBOARDED` (use `oats sync`); a mistyped ref is `E_REPO_REF`, an
|
|
81
|
+
unreadable one `E_REMOTE_UNREADABLE` with `details.rolledBack: true` — nothing
|
|
82
|
+
half-written is left behind. Exact shapes:
|
|
83
|
+
[desktop-cli-api.md](desktop-cli-api.md#oats-onboard-onboardapi-2).
|
|
158
84
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
85
|
+
Host-owned provider values (absolute paths, state roots) go under `settings:` in
|
|
86
|
+
`oats-local.yaml` afterwards — never in the workspace file, whose schema refuses
|
|
87
|
+
them. Do not commit `oats-local.yaml`.
|
|
162
88
|
|
|
163
|
-
|
|
89
|
+
## 3. Look before you spawn
|
|
164
90
|
|
|
165
91
|
```bash
|
|
166
|
-
oats
|
|
92
|
+
oats souls # every non-private soul of every confirmed member, with origin and team
|
|
93
|
+
oats capabilities # member (origin: member <key> @ <commit>) and package (package <id> v<ver>) capabilities
|
|
94
|
+
oats workspace status # membership table, packages, approval state
|
|
95
|
+
oats spawn backend-expert --preview # modules[] with from/commit/changedSince, composed skill names, team
|
|
167
96
|
```
|
|
168
97
|
|
|
169
|
-
|
|
98
|
+
The preview is where a skill-name clash between two composed capabilities
|
|
99
|
+
(`E_SKILL_DUPLICATE`) or an unapproved package (`E_PACKAGE_UNAPPROVED`) shows
|
|
100
|
+
up, before anything is created.
|
|
170
101
|
|
|
171
|
-
|
|
172
|
-
{"version":1,"owner":"backend-expert-stable-id","owns":["team/backend"],"reads":[]}
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
For team-shared Git knowledge instead, follow [Git provisioning](knowledge.md#owner-and-base-descriptors)
|
|
176
|
-
and review/merge its initialization PR before spawning. Git knowledge always
|
|
177
|
-
uses PR delivery, not commits on the coding instance's branch.
|
|
178
|
-
|
|
179
|
-
Review and commit soul/configuration/lock changes, generated ignore rules and
|
|
180
|
-
the adopted template base under `.agents/config-templates/adopted/`. Keep
|
|
181
|
-
credentials and private durable evidence out of Git. Check `oats doctor --soul
|
|
182
|
-
backend-expert --json`. Configuration and a successful doctor do not substitute
|
|
183
|
-
for accepted-base validation by the required spawn hook.
|
|
184
|
-
|
|
185
|
-
## Give an instance a real task
|
|
102
|
+
## 4. Give an instance a real task
|
|
186
103
|
|
|
187
104
|
```bash
|
|
188
|
-
oats spawn backend-expert --purpose first-fix --task "Fix one small issue, run the relevant checks, commit the code change, and report what changed.
|
|
189
|
-
oats status
|
|
105
|
+
oats spawn backend-expert --purpose first-fix --task "Fix one small issue, run the relevant checks, commit the code change, and report what changed."
|
|
106
|
+
oats status
|
|
190
107
|
```
|
|
191
108
|
|
|
192
|
-
|
|
193
|
-
trust
|
|
194
|
-
|
|
109
|
+
`--runtime pi|claude|codex` picks the harness; complete any native folder
|
|
110
|
+
trust or authentication prompt in the printed session. The instance home is
|
|
111
|
+
`agents/<soul>/instances/<instance>/`; `work/` is its repository view;
|
|
112
|
+
`.oats/modules/<cap>/` and `.agents/skills/<cap>/` are the copied capabilities;
|
|
113
|
+
`instance.json` records `modules` (from, commit, digest), `providers` and
|
|
114
|
+
`workspace`. A running instance never changes under itself — a member that
|
|
115
|
+
moves affects only new spawns, and `oats status` shows the drift
|
|
116
|
+
(`member moved since (now @ …)` / `capability no longer present`).
|
|
195
117
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
accepted knowledge. This is instructional, not an OS filesystem sandbox.
|
|
200
|
-
Review its code commits through the repository's ordinary PR workflow.
|
|
118
|
+
Instance-specific provider values belong to the spawn:
|
|
119
|
+
`oats spawn <soul> --provider <cap> key=value` (repeatable; dotted keys nest),
|
|
120
|
+
recorded under `instance.json.providers.<cap>`.
|
|
201
121
|
|
|
202
|
-
##
|
|
122
|
+
## 5. Judge and retire
|
|
203
123
|
|
|
204
|
-
|
|
205
|
-
plus durable processing receipts:
|
|
206
|
-
|
|
207
|
-
```bash
|
|
208
|
-
oats okf inspect --json
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
Spawn registered one per-source command job, but **did not install a host timer**.
|
|
212
|
-
For this first task an operator may request one manual harvest from the source
|
|
213
|
-
home; without `--no-launch` this starts the configured model worker:
|
|
214
|
-
|
|
215
|
-
```bash
|
|
216
|
-
oats okf harvest --json
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
The worker judges durable notes **and captured record**, in its own directory
|
|
220
|
-
execution space. It leaves live notes and soul skills untouched. Directory
|
|
221
|
-
delivery is recoverable publication with validation and receipts. Git delivery
|
|
222
|
-
requires a real reviewed PR and merge-visible acceptance. Inspect receipts rather
|
|
223
|
-
than equating a worker spawn with learning. See [operator commands](knowledge.md#inspection-and-operator-commands)
|
|
224
|
-
for scaffold-only requests, completion and retry.
|
|
225
|
-
|
|
226
|
-
Source retirement need not wait for a worker to finish: it must first certify
|
|
227
|
-
final notes/record custody. From the repository scope:
|
|
124
|
+
Review the instance's code through the repository's ordinary PR workflow. Then:
|
|
228
125
|
|
|
229
126
|
```bash
|
|
230
127
|
oats retire backend-expert-first-fix
|
|
231
|
-
oats status
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
Read the retirement result. An uncertified capture retains the home for retry;
|
|
235
|
-
never delete it to bypass recovery. Durable descriptors, evidence and runs survive
|
|
236
|
-
successful retirement. Use `oats okf inspect --source <absolute-source.json>
|
|
237
|
-
--soul backend-expert --json` from deployment context afterward. If messaging is
|
|
238
|
-
active, also verify its retirement receipt and roster rather than assuming local
|
|
239
|
-
cleanup proves identity release.
|
|
240
|
-
|
|
241
|
-
For automatic future judgment, review [source jobs](schedules.md#okf-v2-source-jobs)
|
|
242
|
-
and explicitly opt into host-timer installation. No-launch tests should never
|
|
243
|
-
install it or enable live model launches.
|
|
244
|
-
|
|
245
|
-
After provider acceptance, start a fresh instance of the same soul on a useful
|
|
246
|
-
task. Check that it finds **and uses** the promoted lesson without the original
|
|
247
|
-
source. That is the learning acceptance step; a no-launch reader only verifies
|
|
248
|
-
scaffolding and references.
|
|
249
|
-
|
|
250
|
-
## Optional host-wide conversation capture
|
|
251
|
-
|
|
252
|
-
Knowledge judgment and the native conversation record are separate. OKF uses
|
|
253
|
-
source-targeted native capture through the CLI; host-wide watcher/hook setup is
|
|
254
|
-
an additional deliberate operator action:
|
|
255
|
-
|
|
256
|
-
```bash
|
|
257
|
-
oats setup
|
|
258
|
-
oats capture --status
|
|
259
|
-
oats recall "a phrase from your completed task"
|
|
128
|
+
oats status
|
|
260
129
|
```
|
|
261
130
|
|
|
262
|
-
|
|
263
|
-
|
|
131
|
+
Read the retirement result rather than assuming local cleanup proves release;
|
|
132
|
+
knowledge and messaging capabilities (packages such as `oats.okf`, `oats.aweb`)
|
|
133
|
+
add their own retire hooks and receipts — see [knowledge.md](knowledge.md) and
|
|
134
|
+
[capabilities.md](capabilities.md) once you add them to `packages:` and to the
|
|
135
|
+
soul's `capabilities:`.
|
|
136
|
+
|
|
137
|
+
## The standalone case
|
|
138
|
+
|
|
139
|
+
If you can read a member repository but not its workspace host (a public member
|
|
140
|
+
of a privately hosted workspace — decision 26), point `oats-local.yaml` at the
|
|
141
|
+
member: `oats sync` and `oats spawn` then give the **standalone view** — the
|
|
142
|
+
repo's own souls with their `from: here` capabilities plus `oats.core`, marked
|
|
143
|
+
`standalone: true` in `sync --json` and `instance.json.workspace.standalone`.
|
|
144
|
+
A repository with no `oats-membership.yaml` is not a member and gets no such
|
|
145
|
+
view (`E_WORKSPACE_SCHEMA`); a network failure reading the host is
|
|
146
|
+
`E_REMOTE_UNREADABLE`, never a silent standalone.
|
package/docs/implementation.md
CHANGED
|
@@ -26,10 +26,12 @@ own Claude configuration is deliberately left enabled.
|
|
|
26
26
|
| `test/` | Capability resolver/composition/security lifecycle tests. |
|
|
27
27
|
| `agents/` | The framework's own portable expert souls. |
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
`
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
Capabilities have two sources and one destination: a member repo's
|
|
30
|
+
`capabilities/<name>/` (latest state, trusted by membership) or a package pinned
|
|
31
|
+
in the workspace's `packages:` and locked in `oats-lock.json` (v3); at spawn each
|
|
32
|
+
is copied whole into the instance's `.oats/modules/<name>/`. Nothing is
|
|
33
|
+
installed at a deployment (`lib/remote.mjs`, `lib/workspace.mjs`,
|
|
34
|
+
`lib/resolve.mjs`, `lib/packages.mjs`, `lib/materialize.mjs`).
|
|
33
35
|
|
|
34
36
|
The live control panel is the OATS Desktop app (`packages/desktop/`): an
|
|
35
37
|
Electron shell over a bundled zero-dependency localhost server that uses
|
package/docs/integrations.md
CHANGED
|
@@ -29,54 +29,50 @@ offers comments.
|
|
|
29
29
|
|
|
30
30
|
## Selecting an integration
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
already declares the slot, so
|
|
34
|
-
`
|
|
32
|
+
The workspace supplies a default per slot; a soul may name another, or `none`.
|
|
33
|
+
The manifest already declares the slot, so a soul's `capabilities:` entry does
|
|
34
|
+
not repeat it — a capability with `layer: knowledge` fills the knowledge slot
|
|
35
|
+
wherever it arrives from:
|
|
35
36
|
|
|
36
37
|
```yaml
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
# oats-workspace.yaml — one default per slot, for every soul
|
|
39
|
+
defaults:
|
|
40
|
+
knowledge: { oats.okf: { from: package } }
|
|
41
|
+
messaging: { oats.aweb: { from: package } }
|
|
42
|
+
tasks: { oats.linear: { from: package } }
|
|
43
|
+
|
|
44
|
+
# souls/planner/soul.yaml — keep the defaults, supply the soul's payloads
|
|
45
|
+
knowledge:
|
|
46
|
+
owns: planner
|
|
47
|
+
reads: [developer]
|
|
48
|
+
messaging:
|
|
49
|
+
channels: [product]
|
|
50
|
+
tasks:
|
|
51
|
+
team: ENG
|
|
52
|
+
project: Agent Platform
|
|
53
|
+
|
|
54
|
+
# souls/support-triager/soul.yaml — opt out of one slot, replace another
|
|
55
|
+
knowledge: none # empties the slot
|
|
41
56
|
capabilities:
|
|
42
|
-
|
|
43
|
-
knowledge:
|
|
44
|
-
capability: oats.okf
|
|
45
|
-
from: installed
|
|
46
|
-
settings:
|
|
47
|
-
bindings-file: /absolute/config/okf-bindings.json
|
|
48
|
-
messaging:
|
|
49
|
-
capability: oats.aweb
|
|
50
|
-
from: installed
|
|
51
|
-
agent-types:
|
|
52
|
-
product-agents:
|
|
53
|
-
enabled: true
|
|
54
|
-
settings:
|
|
55
|
-
team: example-team
|
|
56
|
-
tasks:
|
|
57
|
-
capability: oats.linear
|
|
58
|
-
from: installed
|
|
59
|
-
agent-types:
|
|
60
|
-
product-agents:
|
|
61
|
-
enabled: true
|
|
62
|
-
settings:
|
|
63
|
-
team: ENG
|
|
64
|
-
project: Agent Platform
|
|
57
|
+
oats.jira: { from: package } # its manifest says layer: tasks → replaces the default
|
|
65
58
|
```
|
|
66
59
|
|
|
67
|
-
|
|
60
|
+
Packages are pinned once in the workspace's `packages:`
|
|
61
|
+
(`oats.okf: v2.1.3`, …) and synced ([packages.md](packages.md)). Host-owned
|
|
62
|
+
values (absolute paths) go in `oats-local.yaml`:
|
|
68
63
|
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
oats
|
|
72
|
-
|
|
73
|
-
oats
|
|
64
|
+
```yaml
|
|
65
|
+
settings:
|
|
66
|
+
oats.okf:
|
|
67
|
+
bindings-file: /absolute/config/okf-bindings.json
|
|
68
|
+
oats.aweb:
|
|
69
|
+
delivery: channel
|
|
74
70
|
```
|
|
75
71
|
|
|
76
|
-
Every
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
is
|
|
72
|
+
Every soul gets one implementation per slot. Two layered capabilities arriving
|
|
73
|
+
for one slot (a default plus a soul entry, or two soul entries) is
|
|
74
|
+
`E_SLOT_CONFLICT`; spell `<cap>: off` to remove the one you do not want. `none`
|
|
75
|
+
is a slot selection, not a policy: a soul with `messaging: none` has no address.
|
|
80
76
|
|
|
81
77
|
## Bundled integrations
|
|
82
78
|
|
|
@@ -156,8 +152,12 @@ exist and match its owner. Acquisition/activation never bootstraps a knowledge
|
|
|
156
152
|
base. If activating globally, provision each working soul first or target only
|
|
157
153
|
ready sources.
|
|
158
154
|
|
|
159
|
-
```
|
|
160
|
-
|
|
155
|
+
```yaml
|
|
156
|
+
# oats-local.yaml
|
|
157
|
+
settings:
|
|
158
|
+
oats.okf:
|
|
159
|
+
bindings-file: /absolute/config/okf-bindings.json
|
|
160
|
+
harvest-runtime: claude
|
|
161
161
|
```
|
|
162
162
|
|
|
163
163
|
- `harvest-runtime: pi | claude | codex` defaults to `pi`, independently of the
|
|
@@ -197,8 +197,9 @@ that CLI cannot revoke the certificate.
|
|
|
197
197
|
|
|
198
198
|
## oats.aweb settings (1.10.0)
|
|
199
199
|
|
|
200
|
-
Set
|
|
201
|
-
soul
|
|
200
|
+
Set in `oats-local.yaml` under `settings.oats.aweb.<key>` (host-owned), in the
|
|
201
|
+
soul's `messaging:` payload (true of every instance), or per spawn with
|
|
202
|
+
`oats spawn … --provider oats.aweb <key>=<value>`.
|
|
202
203
|
|
|
203
204
|
- `delivery: channel | session` (default `channel`). `session` hands
|
|
204
205
|
notification delivery to the host wake broker: `AWEB_DELIVERY=session` in
|
|
@@ -40,12 +40,18 @@ aliases or relax installed-artifact integrity checks.
|
|
|
40
40
|
Select a deployment scope explicitly and acquire the published source, then
|
|
41
41
|
opt in for an author soul:
|
|
42
42
|
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
```yaml
|
|
44
|
+
# oats-workspace.yaml
|
|
45
|
+
packages:
|
|
46
|
+
oats.framework: v1.1.3 # provides oats.core, oats.setup, oats.knowledge-theory
|
|
47
|
+
|
|
48
|
+
# souls/<author-soul>/soul.yaml
|
|
49
|
+
capabilities:
|
|
50
|
+
oats.knowledge-theory: { from: package }
|
|
46
51
|
```
|
|
47
52
|
|
|
48
|
-
|
|
53
|
+
`oats sync` resolves the version to a commit and locks it; the package is read
|
|
54
|
+
at `oats-package/` of its repository.
|
|
49
55
|
The `oats.knowledge-theory` catalog shortcut uses that same published v0.23.0
|
|
50
56
|
source. The current authoring-reference patch is package 1.0.1: once framework
|
|
51
57
|
v0.23.1 is published, an explicit initial Git acquisition at that tag selects
|
|
@@ -25,10 +25,11 @@ knowledge layer. V2 uses external accepted bases and independent workers, not
|
|
|
25
25
|
The required v2 spawn hook refuses a legacy `soul/knowledge/`; it never silently
|
|
26
26
|
substitutes an empty bundle.
|
|
27
27
|
|
|
28
|
-
After publication,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
After publication, bump `packages.oats.okf` in the workspace file and run
|
|
29
|
+
`oats sync`: the new version resolves to a commit and its executables are
|
|
30
|
+
approved once. An existing lock never advances by itself. Package content is
|
|
31
|
+
read from the catalog **Git** repository, never from an npm mirror (npm drops
|
|
32
|
+
the source worker's canonical `CLAUDE.md` symlink).
|
|
32
33
|
|
|
33
34
|
## 2. Bind and provision external destinations
|
|
34
35
|
|
|
@@ -104,11 +104,19 @@ not satisfy a skill's missing reference if it is outside the capability root.
|
|
|
104
104
|
|
|
105
105
|
## Acquisition, activation and trust
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
In a *test* workspace, pin the package by a direct ref and give it to a soul:
|
|
108
|
+
|
|
109
|
+
```yaml
|
|
110
|
+
# test workspace's oats-workspace.yaml
|
|
111
|
+
packages:
|
|
112
|
+
example.knowledge-pkg: git:/abs/path/to/source-repo.git@v0.1.0 # a tag; branches are refused
|
|
113
|
+
defaults:
|
|
114
|
+
knowledge: { example.knowledge: { from: package } }
|
|
115
|
+
```
|
|
108
116
|
|
|
109
117
|
```bash
|
|
110
|
-
oats
|
|
111
|
-
oats
|
|
118
|
+
oats sync --dir /path/to/test-workspace # resolve, lock, approve once
|
|
119
|
+
oats spawn <soul> --preview --json # the module as it would be materialized
|
|
112
120
|
```
|
|
113
121
|
|
|
114
122
|
These are illustrative user operations, not instructions to change a live
|
package/docs/knowledge.md
CHANGED
|
@@ -57,17 +57,33 @@ instance identity (an explicit `--soul` does not override an invoking instance's
|
|
|
57
57
|
saved settings). The explicit Git source works before and after the v0.23.1
|
|
58
58
|
framework catalog integration:
|
|
59
59
|
|
|
60
|
+
```yaml
|
|
61
|
+
# oats-workspace.yaml
|
|
62
|
+
packages:
|
|
63
|
+
oats.okf: v2.1.3
|
|
64
|
+
defaults:
|
|
65
|
+
knowledge: { oats.okf: { from: package } }
|
|
66
|
+
|
|
67
|
+
# souls/domain-expert/soul.yaml
|
|
68
|
+
knowledge:
|
|
69
|
+
owns: domain-expert
|
|
70
|
+
|
|
71
|
+
# oats-local.yaml (this machine)
|
|
72
|
+
settings:
|
|
73
|
+
oats.okf:
|
|
74
|
+
bindings-file: /absolute/config/okf-bindings.json
|
|
75
|
+
```
|
|
76
|
+
|
|
60
77
|
```bash
|
|
61
|
-
oats
|
|
62
|
-
oats
|
|
63
|
-
oats use oats.okf --soul domain-expert --settings bindings-file=/absolute/config/okf-bindings.json
|
|
64
|
-
oats doctor --soul domain-expert --json
|
|
78
|
+
oats sync # resolves v2.1.3 to a commit, asks executable approval once
|
|
79
|
+
oats spawn domain-expert --preview --json # the exact oats.okf module (package, version, commit)
|
|
65
80
|
```
|
|
66
81
|
|
|
67
|
-
|
|
68
|
-
`oats
|
|
69
|
-
|
|
70
|
-
|
|
82
|
+
Pinning activates nothing by itself: the soul's `knowledge:` payload and the
|
|
83
|
+
machine's `settings.oats.okf` must be bindable. The lock stays exact until the
|
|
84
|
+
workspace bumps `packages.oats.okf`; v1 operators must plan migration before
|
|
85
|
+
that bump. Executable changes come with a new version and a new approval. A
|
|
86
|
+
service worker need not itself fill the knowledge slot (`knowledge: none`).
|
|
71
87
|
|
|
72
88
|
### Bindings document
|
|
73
89
|
|