@awebai/oats 0.23.0 → 0.23.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.
- package/README.md +48 -18
- package/capabilities/oats-okf/agents/memory-harvest/AGENTS.md +18 -24
- package/capabilities/oats-okf/agents/memory-harvest/soul.yaml +2 -2
- package/capabilities/oats-okf/bin/oats-okf.mjs +105 -517
- package/capabilities/oats-okf/injects/okf.md +32 -67
- package/capabilities/oats-okf/lib/config.mjs +112 -0
- package/capabilities/oats-okf/lib/inspection.mjs +96 -0
- package/capabilities/oats-okf/lib/io.mjs +103 -0
- package/capabilities/oats-okf/lib/migration.mjs +116 -0
- package/capabilities/oats-okf/lib/sources.mjs +238 -0
- package/capabilities/oats-okf/lib/stores.mjs +331 -0
- package/capabilities/oats-okf/lib/worker.mjs +352 -0
- package/capabilities/oats-okf/oats.json +23 -7
- package/capabilities/oats-okf/schemas/okf-base.schema.json +46 -0
- package/capabilities/oats-okf/schemas/okf-bindings.schema.json +112 -0
- package/capabilities/oats-okf/schemas/okf-soul.schema.json +37 -0
- package/capabilities/oats-okf/skills/memory-harvest/SKILL.md +263 -140
- package/capabilities/oats-okf/skills/okf/SKILL.md +13 -4
- package/docs/capabilities.md +14 -3
- package/docs/configuration.md +11 -1
- package/docs/design/okf-mirror-provenance.md +105 -0
- package/docs/desktop-cli-api.md +59 -10
- package/docs/first-team-demo.md +6 -1
- package/docs/first-team.md +151 -115
- package/docs/integrations.md +42 -42
- package/docs/knowledge-capability-authoring.md +10 -7
- package/docs/knowledge-migration.md +138 -0
- package/docs/knowledge.md +316 -129
- package/docs/layers.md +57 -62
- package/docs/migration-from-oas.md +7 -1
- package/docs/packages.md +26 -2
- package/docs/release-notes/v0.23.1.md +97 -0
- package/docs/release-notes/v0.23.2.md +49 -0
- package/docs/schedules.md +42 -3
- package/docs/souls-and-instances.md +55 -48
- package/package-catalog.json +6 -1
- package/package.json +1 -1
- package/capabilities/oats-okf/lib/harvest-branch.mjs +0 -43
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Internal: finalizing the OKF mirror's source provenance
|
|
2
|
+
|
|
3
|
+
The standalone `oats.okf` distribution is authoritative. The framework's
|
|
4
|
+
`capabilities/oats-okf/` and `scripts/okf-source-inventory.json` are generated
|
|
5
|
+
mirrors, not authoring surfaces. This procedure does not publish the source,
|
|
6
|
+
accept a PR, update the catalog, commit, fetch, or change branches.
|
|
7
|
+
|
|
8
|
+
## Development versus publication
|
|
9
|
+
|
|
10
|
+
- `node scripts/check-okf-mirror.mjs --generate --source <standalone-repository>`
|
|
11
|
+
captures current exported working bytes, including dirty/untracked files.
|
|
12
|
+
It always records `release.status: pending`, null final refs and
|
|
13
|
+
`published: false`, even when HEAD happens to have a published tag.
|
|
14
|
+
- `node scripts/check-okf-mirror.mjs --verify` uses only the checked-in inventory
|
|
15
|
+
and mirror. No Git, clone, credentials or network is needed for either a
|
|
16
|
+
pending or finalized inventory. It checks exact file sets (including empty
|
|
17
|
+
directories), file bytes, portable Git executable modes, literal symlink
|
|
18
|
+
targets, wrapper hashes, and consistent release metadata.
|
|
19
|
+
- `--verify-source --source <standalone-repository>` verifies pending snapshots
|
|
20
|
+
against their exact recorded working state, including branch/dirty metadata.
|
|
21
|
+
For published inventories it rechecks the immutable commit, payload, origin
|
|
22
|
+
tag object and peeled commit, ignoring the recorded local branch name. The
|
|
23
|
+
checkout must still be clean at the recorded accepted commit; renamed
|
|
24
|
+
branches and detached HEAD are supported. This published-source check needs
|
|
25
|
+
origin access. It does not depend on cached remote-tracking refs.
|
|
26
|
+
|
|
27
|
+
Offline verification is an integrity check of a reviewed checked-in inventory,
|
|
28
|
+
not independent proof that a remote still advertises a tag. The explicit source
|
|
29
|
+
check supplies that evidence. No boolean flag is a publication attestation.
|
|
30
|
+
|
|
31
|
+
## Post-publication command
|
|
32
|
+
|
|
33
|
+
Only after source review/merge and actual publication of `v2.0.0`:
|
|
34
|
+
|
|
35
|
+
1. Obtain the **accepted full merged commit ID** from the source review/release
|
|
36
|
+
record. Do not substitute a mutable branch name, abbreviated hash, or whatever
|
|
37
|
+
HEAD happens to resolve to. The legacy inventory field `finalMergedCommit`
|
|
38
|
+
records this caller-supplied acceptance; Git cannot prove human PR approval.
|
|
39
|
+
2. Have a clean standalone checkout at that commit, with the published tag
|
|
40
|
+
available locally and `origin` pointing to `awebai/oats-okf`. Fetch/check out
|
|
41
|
+
deliberately through the parent release procedure; the checker never does it.
|
|
42
|
+
3. From the framework checkout, run:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
node scripts/check-okf-mirror.mjs --finalize \
|
|
46
|
+
--source .agents/knowledge-rework/repos/okf \
|
|
47
|
+
--final-tag v2.0.0 \
|
|
48
|
+
--final-commit "${OKF_V2_ACCEPTED_COMMIT:?set the reviewed full merged source commit ID}" &&
|
|
49
|
+
node scripts/check-okf-mirror.mjs --verify-source \
|
|
50
|
+
--source .agents/knowledge-rework/repos/okf &&
|
|
51
|
+
node --test test/okf-mirror-parity.test.mjs
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The relative source path above is the existing ignored work-view convention;
|
|
55
|
+
substitute an explicitly resolved standalone repository path in other work
|
|
56
|
+
views. The command must not be run while source acceptance is still changing.
|
|
57
|
+
|
|
58
|
+
4. Review the resulting payload/inventory diff, run the remaining release gates,
|
|
59
|
+
then advance the catalog through the parent integration process. Finalization
|
|
60
|
+
itself never touches the catalog.
|
|
61
|
+
|
|
62
|
+
`--finalize` requires both `--final-tag` and a full SHA-1/SHA-256 `--final-commit`.
|
|
63
|
+
It replaces only the mirrored capability and inventory, just like `--generate`,
|
|
64
|
+
but stamps `release.status: published` only after all checks succeed:
|
|
65
|
+
|
|
66
|
+
- The version tag is exactly `v<distribution version>`; HEAD is the explicitly
|
|
67
|
+
accepted commit and Git reports a clean source tree. Masked index entries
|
|
68
|
+
(`assume-unchanged`/`skip-worktree`) are not accepted.
|
|
69
|
+
- Actual exported files and wrappers match raw objects at that commit, not just
|
|
70
|
+
Git status or filtered checkout content. Ignored exported extras, untracked
|
|
71
|
+
empty directories, CRLF/filter changes, hidden byte changes, mode drift with
|
|
72
|
+
`core.filemode=false`, and literal symlink-target differences fail closed.
|
|
73
|
+
Git replacement objects are disabled. Published inventories also record and
|
|
74
|
+
hash wrapper file modes; materialization preserves those modes and bytes.
|
|
75
|
+
- Exactly one effective origin fetch URL identifies the official source. The
|
|
76
|
+
usual official GitHub HTTPS/SSH spellings are equivalent. URL rewrites to an
|
|
77
|
+
unrelated repository are rejected. The remote query uses canonical public
|
|
78
|
+
HTTPS with source-local Git configuration disabled, so local upload-pack/SSH
|
|
79
|
+
overrides cannot fabricate its response. Prompts/helpers are disabled and
|
|
80
|
+
Git commands have a bounded timeout.
|
|
81
|
+
- The local tag resolves to the accepted commit. A fresh `ls-remote` query must
|
|
82
|
+
advertise the same tag object and the same peeled commit (or direct commit
|
|
83
|
+
for a lightweight tag). Both annotated and lightweight tags are supported.
|
|
84
|
+
Missing/unreachable origin, unpublished tags or mismatched refs fail closed.
|
|
85
|
+
- The source is checked again after staging the copy, before replacing the
|
|
86
|
+
mirror or inventory. Failed acceptance checks leave both untouched. Ordinary
|
|
87
|
+
filesystem failures during replacement are not a multi-file transaction.
|
|
88
|
+
|
|
89
|
+
The published record retains `source.head`, clean-state metadata, the branch
|
|
90
|
+
observed at generation (informational during immutable verification), the
|
|
91
|
+
accepted final tag/commit, `remote: origin`, and the exact `tagObject`. Thus
|
|
92
|
+
changing an annotated tag object without changing its commit still invalidates
|
|
93
|
+
`--verify-source`. Remote checks attest what was advertised when queried; they
|
|
94
|
+
cannot prevent an upstream tag from being moved later. Do not move released
|
|
95
|
+
tags, and re-run source verification at the release gate.
|
|
96
|
+
|
|
97
|
+
## Isolated regression coverage
|
|
98
|
+
|
|
99
|
+
`test/okf-mirror-parity.test.mjs` uses temporary source repositories and local bare
|
|
100
|
+
origins only, including tag creation/deletion/movement solely inside fixtures.
|
|
101
|
+
The JavaScript `finalizeOkfMirror`/`verifyOkfSource` APIs accept an explicit
|
|
102
|
+
`repository` expectation for these fixtures and record their real source
|
|
103
|
+
identity; the CLI cannot override the official repository. No tests publish to
|
|
104
|
+
GitHub. Checked-in mirror tests accept consistent pending **or** published
|
|
105
|
+
provenance, so finalizing the source does not require weakening those tests.
|
package/docs/desktop-cli-api.md
CHANGED
|
@@ -18,7 +18,8 @@ prints exactly one JSON object on stdout:
|
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
`version` is the installed package's exact semver (e.g. `0.20.0`).
|
|
21
|
-
Desktop 0.
|
|
21
|
+
Desktop 0.23 accepts `desktopApi === 1` and semver `>=0.22.0 <0.24.0`
|
|
22
|
+
(the earlier Desktop 0.22 band was `>=0.22.0 <0.23.0`).
|
|
22
23
|
|
|
23
24
|
Optional features are negotiated from the probe's `features` array. Starting
|
|
24
25
|
an existing home requires `session-start`; named launch configurations and
|
|
@@ -138,18 +139,66 @@ subcommand), `E_CAPABILITY_INACTIVE`, `E_CAPABILITY_BLOCKED` (untrusted),
|
|
|
138
139
|
`E_CAPABILITY_BROKEN`, `E_DUPLICATE_NAMESPACE`, `E_CONFIG_BROKEN` — all still
|
|
139
140
|
exactly one stdout envelope with a nonzero exit.
|
|
140
141
|
|
|
141
|
-
###
|
|
142
|
+
### Knowledge operations and OKF v2
|
|
142
143
|
|
|
143
|
-
|
|
144
|
+
Discover provider-declared operations rather than assuming a particular memory
|
|
145
|
+
format. The knowledge capability's version owns its result shape; CLI API v1
|
|
146
|
+
does not freeze the old OKF v1 `harvest: spawned|skipped` body for every provider.
|
|
147
|
+
See [knowledge](knowledge.md) for the prepared OKF 2.0.0 version scope.
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
oats operation run knowledge:inspect --home /absolute/source-home --json
|
|
151
|
+
oats operation run knowledge:harvest --home /absolute/source-home --json
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
The operation runner preserves the provider view/action through the ordinary
|
|
155
|
+
operations contract. Direct `oats okf inspect` returns the standard JSON-v1
|
|
156
|
+
success/error envelope. Its result includes:
|
|
157
|
+
|
|
158
|
+
- `summary`, durable `source`, frozen `owns`, `reads`, `bases`;
|
|
159
|
+
- `acceptedView` (the registered snapshot, not a fresh read), `status` with
|
|
160
|
+
capture/processing/delivery/acceptance receipts, and `scheduler` diagnostics;
|
|
161
|
+
- `liveMemory: {available, reason, observedAt}` and labeled `documents`.
|
|
162
|
+
|
|
163
|
+
Live Markdown documents are `Working state (STATE.md)`, `Log (log.md)` and
|
|
164
|
+
sorted `Pending note: <relative-name>`, including nested notes. Missing files
|
|
165
|
+
are omitted; durable receipts follow as a text document. Only a live source
|
|
166
|
+
whose pointer/metadata still matches may supply live memory. Retired, missing,
|
|
167
|
+
reused or unverified homes return durable documents and explicit unavailability.
|
|
168
|
+
Unsafe live documents fail instead of returning a partial success. Inspection is
|
|
169
|
+
read-only and does not capture, refresh, schedule or launch a model.
|
|
170
|
+
|
|
171
|
+
The explicit preview limit is **256 KiB per document**, with `truncated: true`
|
|
172
|
+
and original `bytes` for larger files. Smaller files are byte-exact. The complete
|
|
173
|
+
JSON envelope drains stdout; consumers must not clip it at a small output-buffer
|
|
174
|
+
limit. Provider `read` returns full Markdown, not this inspection preview.
|
|
175
|
+
|
|
176
|
+
After the home disappears, operate from durable deployment context:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
oats okf inspect --source /absolute/state/sources/UUID/source.json --soul domain-expert --json
|
|
180
|
+
oats okf refresh --source /absolute/state/sources/UUID/source.json --soul domain-expert --json
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Every descriptor-selected read/refresh creates its new view under that source's
|
|
184
|
+
state directory, not the invoking repository or a replacement home.
|
|
185
|
+
|
|
186
|
+
Direct `oats okf harvest --json` captures notes and record and requests an
|
|
187
|
+
independent directory worker. Representative result shapes (not exhaustive):
|
|
188
|
+
|
|
189
|
+
```json
|
|
190
|
+
{"status":"running","run":"<run-id>","instance":"<worker-instance>","home":"/absolute/worker-home"}
|
|
191
|
+
```
|
|
144
192
|
|
|
145
193
|
```json
|
|
146
|
-
{"
|
|
147
|
-
{"harvest":"skipped","reason":"no pending notes"}
|
|
194
|
+
{"status":"empty","processed":true}
|
|
148
195
|
```
|
|
149
196
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
197
|
+
An explicit `--no-launch` request can return `status: "ready"` without starting
|
|
198
|
+
a model; existing runs report their current status without starting duplicates.
|
|
199
|
+
Nonzero errors use the ordinary JSON-v1 error envelope. `running`/`ready` are not
|
|
200
|
+
successful knowledge delivery. Inspect and reconcile provider receipts; never
|
|
201
|
+
infer acceptance from a launch or from a worker disappearing.
|
|
154
202
|
|
|
155
|
-
|
|
203
|
+
Kernel envelope/dispatch tests live in `test/cli-json-contract.test.mjs`;
|
|
204
|
+
provider-specific behavior is qualified against the exported OKF runtime.
|
package/docs/first-team-demo.md
CHANGED
|
@@ -4,6 +4,10 @@ On 2026-09-05 we installed the published OATS artifacts and used Pi and
|
|
|
4
4
|
Claude Code workers to fix issues found during a fresh review. The first
|
|
5
5
|
team's work was release preparation in this repository.
|
|
6
6
|
|
|
7
|
+
> **Historical v1 qualification.** The results below remain evidence for the
|
|
8
|
+
> named versions, not the prepared v2 runtime. Current setup, external ownership
|
|
9
|
+
> and independent delivery are in [the first-team guide](first-team.md).
|
|
10
|
+
|
|
7
11
|
## The setup
|
|
8
12
|
|
|
9
13
|
| Component | Qualified value |
|
|
@@ -82,6 +86,7 @@ The run found first-use problems that unit tests alone had not resolved:
|
|
|
82
86
|
- A combined workspace roster did not make the workspace a spawn scope for
|
|
83
87
|
every child repository. Commands select the owning repository explicitly.
|
|
84
88
|
|
|
85
|
-
The [first-team guide](first-team.md)
|
|
89
|
+
The [first-team guide](first-team.md) now describes the prepared v2 setup;
|
|
90
|
+
these historical v1 outcomes are not v2 acceptance evidence. The
|
|
86
91
|
package owners are responsible for improving their defaults; the kernel
|
|
87
92
|
continues to resolve capabilities through the same replaceable contracts.
|
package/docs/first-team.md
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
# Run your first OATS team
|
|
2
2
|
|
|
3
|
-
Start with one repository and one small, real task.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Start with one repository and one small, real task. A soul keeps the role and
|
|
4
|
+
curated skills; an instance gets a working session and repository view. With OKF
|
|
5
|
+
v2, expertise lives in external owned nodes, not the soul or task branch.
|
|
6
6
|
|
|
7
|
-
This guide
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
> This guide targets the **v0.23.1 integration of published OKF 2.0.0**, whose
|
|
8
|
+
> published kernel prerequisite is OATS >=0.23.0. Check the matching framework
|
|
9
|
+
> release availability before installation; see [release notes](release-notes/v0.23.1.md).
|
|
10
|
+
> The [qualification example](first-team-demo.md) records real **v1** tasks on
|
|
11
|
+
> earlier versions, not v2 acceptance. Existing knowledge needs
|
|
12
|
+
> [v1 preservation and cutover](knowledge-migration.md), not fresh initialization.
|
|
12
13
|
|
|
13
14
|
## Install and choose a scope
|
|
14
15
|
|
|
15
|
-
Have Node.js 22+, Git, tmux
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
Install matching published kernel and Pi adapter releases. Have Node.js 22+, Git, tmux and an authenticated working runtime
|
|
17
|
+
available. OKF's independent worker can use Pi, Claude or Codex; authenticate
|
|
18
|
+
that selected runtime too. Plain-directory knowledge needs no Git/gh, although
|
|
19
|
+
this guide's coding worktree does need Git.
|
|
19
20
|
|
|
20
21
|
```bash
|
|
21
22
|
npm install -g @awebai/oats@latest
|
|
@@ -23,150 +24,186 @@ pi install npm:@awebai/oats-pi@latest
|
|
|
23
24
|
node --version
|
|
24
25
|
tmux -V
|
|
25
26
|
oats version
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Install matching kernel and adapter versions from the same release.
|
|
29
|
-
|
|
30
|
-
Use a repository with an initial Git commit. Keep your normal working
|
|
31
|
-
changes committed or otherwise accounted for before giving an agent work.
|
|
32
|
-
The commands below run from that repository:
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
27
|
cd /path/to/project
|
|
36
|
-
oats init --
|
|
28
|
+
oats init --raw
|
|
29
|
+
oats install git:github.com/awebai/oats-okf@v2.0.0
|
|
37
30
|
oats list
|
|
38
31
|
```
|
|
39
32
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
33
|
+
Use a repository with an initial commit for this coding-worktree example.
|
|
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.
|
|
44
40
|
|
|
45
|
-
For several repositories
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
shows the combined roster, but that does not select a repository for spawn.
|
|
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.
|
|
49
44
|
|
|
50
|
-
##
|
|
45
|
+
## Configure explicit knowledge and optional messaging
|
|
51
46
|
|
|
52
47
|
Edit the existing entries in `oats-config.yaml`; do not append a second
|
|
53
|
-
`capabilities`
|
|
54
|
-
aw, set `team.id` to its exact existing ID so instances join that team.
|
|
55
|
-
|
|
56
|
-
Under `capabilities.layers`, configure the model your Pi installation can
|
|
57
|
-
actually use. This example was used in our qualification; replace the
|
|
58
|
-
model if you authenticate through another provider:
|
|
48
|
+
`capabilities` map. This example targets only the source soul for knowledge:
|
|
59
49
|
|
|
60
50
|
```yaml
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
51
|
+
agent-types:
|
|
52
|
+
developers:
|
|
53
|
+
description: Coding experts
|
|
54
|
+
capabilities:
|
|
55
|
+
layers:
|
|
56
|
+
knowledge:
|
|
57
|
+
capability: oats.okf
|
|
58
|
+
from: installed
|
|
59
|
+
souls:
|
|
60
|
+
backend-expert:
|
|
61
|
+
enabled: true
|
|
62
|
+
settings:
|
|
63
|
+
bindings-file: /absolute/config/okf-bindings.json
|
|
64
|
+
harvest-runtime: pi
|
|
65
|
+
messaging: none
|
|
66
|
+
tasks: none
|
|
73
67
|
```
|
|
74
68
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
while an identity-retirement issue is being corrected. Workers still get
|
|
79
|
-
messaging identities. With a `souls` exclusion, state `global: true`
|
|
80
|
-
explicitly so scope-level commands such as `oats aweb setup` stay active.
|
|
69
|
+
There is no hardcoded required harvester model in v2: omitted `harvest-model`
|
|
70
|
+
uses the selected runtime's configured default. Choose a model explicitly if
|
|
71
|
+
needed. Source and worker runtimes are independent.
|
|
81
72
|
|
|
82
|
-
Review
|
|
73
|
+
Review the acquired Git payload and approve executable surfaces:
|
|
83
74
|
|
|
84
75
|
```bash
|
|
85
76
|
oats trust oats.okf
|
|
86
|
-
oats trust oats.aweb
|
|
87
|
-
oats aweb setup
|
|
88
|
-
oats doctor
|
|
89
77
|
```
|
|
90
78
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
team, join it rather than creating another with the same name. Setup's exit
|
|
95
|
-
status alone does not establish that onboarding finished.
|
|
96
|
-
|
|
97
|
-
Messaging is optional. To work without it, set `messaging: none`, omit the
|
|
98
|
-
aweb trust/setup commands, and keep the knowledge configuration above.
|
|
99
|
-
Packages, souls, Git worktrees, and local knowledge do not require hosted
|
|
100
|
-
messaging. See [configuration](configuration.md) for other providers.
|
|
79
|
+
Use the catalog Git package, not the bundled npm mirror: npm omits the source
|
|
80
|
+
worker's `CLAUDE.md` symlink, so the mirror is not a self-contained distribution.
|
|
81
|
+
Acquisition alone is not activation or trust.
|
|
101
82
|
|
|
102
|
-
|
|
83
|
+
Messaging is optional. If desired, retain/configure the template's `oats.aweb`
|
|
84
|
+
layer, set `team.name` and any existing `team.id`, then review/trust it and run
|
|
85
|
+
`oats aweb setup`. Follow its install, initialization and create/join instructions
|
|
86
|
+
until it confirms membership. Join an existing team rather than duplicating it;
|
|
87
|
+
setup's exit status alone does not establish onboarding completion. A source-only
|
|
88
|
+
knowledge target does not require the service worker to have a messaging identity.
|
|
103
89
|
|
|
104
|
-
|
|
105
|
-
included in 0.22.1.
|
|
90
|
+
## Create the soul and provision an external base
|
|
106
91
|
|
|
107
92
|
```bash
|
|
108
|
-
mkdir -p agents
|
|
109
93
|
oats create backend-expert --type developers --repo . --work worktree --runtime pi
|
|
110
94
|
```
|
|
111
95
|
|
|
112
|
-
Edit `agents/backend-expert/soul/AGENTS.md`
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
`.agents/config-templates/adopted/`. A worktree starts from a Git commit;
|
|
116
|
-
uncommitted soul changes are not present on the worker's branch. Keep aw
|
|
117
|
-
credentials out of Git.
|
|
96
|
+
Edit `agents/backend-expert/soul/AGENTS.md` for the role and required checks.
|
|
97
|
+
V2 does not scaffold knowledge in the soul. For a small local first base, create
|
|
98
|
+
`/absolute/config/okf-bindings.json`:
|
|
118
99
|
|
|
119
|
-
|
|
100
|
+
```json
|
|
101
|
+
{"version":1,"stateDir":"../durable-okf-state","bases":{"team":{"id":"team-knowledge","kind":"directory","path":"../team-knowledge"}}}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Those paths resolve from `/absolute/config`, not the project. Choose durable,
|
|
105
|
+
physical paths outside the source home/worktree and **outside every Git working
|
|
106
|
+
tree**, including ignored directories. State, accepted bases and bindings must
|
|
107
|
+
not overlap. Review [full placement rules](knowledge.md#bindings-document).
|
|
108
|
+
|
|
109
|
+
Create `/absolute/config/team-nodes.json`:
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{"backend":{"path":"backend","owner":"backend-expert-stable-id"}}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Explicitly provision the new base, refusing any existing destination:
|
|
120
116
|
|
|
121
117
|
```bash
|
|
122
|
-
oats
|
|
118
|
+
oats okf init --base team --nodes /absolute/config/team-nodes.json --confirm --soul backend-expert --json
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Write `agents/backend-expert/soul/okf.json`:
|
|
122
|
+
|
|
123
|
+
```json
|
|
124
|
+
{"version":1,"owner":"backend-expert-stable-id","owns":["team/backend"],"reads":[]}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
For team-shared Git knowledge instead, follow [Git provisioning](knowledge.md#owner-and-base-descriptors)
|
|
128
|
+
and review/merge its initialization PR before spawning. Git knowledge always
|
|
129
|
+
uses PR delivery, not commits on the coding instance's branch.
|
|
130
|
+
|
|
131
|
+
Review and commit soul/configuration/lock changes, generated ignore rules and
|
|
132
|
+
the adopted template base under `.agents/config-templates/adopted/`. Keep
|
|
133
|
+
credentials and private durable evidence out of Git. Check `oats doctor --soul
|
|
134
|
+
backend-expert --json`. Configuration and a successful doctor do not substitute
|
|
135
|
+
for accepted-base validation by the required spawn hook.
|
|
136
|
+
|
|
137
|
+
## Give an instance a real task
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
oats spawn backend-expert --purpose first-fix --task "Fix one small issue, run the relevant checks, commit the code change, and report what changed. Read the relevant accepted knowledge indexes and capture non-obvious lessons in notes."
|
|
123
141
|
oats status --team
|
|
124
142
|
```
|
|
125
143
|
|
|
126
|
-
Choose `--runtime claude`
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
144
|
+
Choose `--runtime claude` or `codex` if preferred. Complete any native folder
|
|
145
|
+
trust, authentication or messaging-plugin confirmations in the printed session.
|
|
146
|
+
A created window is not proof the agent is working.
|
|
147
|
+
|
|
148
|
+
The instance home is under `agents/<soul>/instances/<instance>/`; `work/` is its
|
|
149
|
+
Git worktree. `knowledge/view.json` identifies immutable accepted snapshots.
|
|
150
|
+
The worker reads indexes selectively, maintains state/log/notes, and never edits
|
|
151
|
+
accepted knowledge. This is instructional, not an OS filesystem sandbox.
|
|
152
|
+
Review its code commits through the repository's ordinary PR workflow.
|
|
131
153
|
|
|
132
|
-
|
|
133
|
-
`work/` directory is the repository worktree. Read the instance's report
|
|
134
|
-
and review its commits there. Agents using aw run coordination commands
|
|
135
|
-
from their own home, which holds their identity.
|
|
154
|
+
## Inspect, judge and retire
|
|
136
155
|
|
|
137
|
-
|
|
156
|
+
From the source home, read-only inspection shows identity-matching state/log/notes
|
|
157
|
+
plus durable processing receipts:
|
|
138
158
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
159
|
+
```bash
|
|
160
|
+
oats okf inspect --json
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Spawn registered one per-source command job, but **did not install a host timer**.
|
|
164
|
+
For this first task an operator may request one manual harvest from the source
|
|
165
|
+
home; without `--no-launch` this starts the configured model worker:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
oats okf harvest --json
|
|
169
|
+
```
|
|
143
170
|
|
|
144
|
-
The
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
171
|
+
The worker judges durable notes **and captured record**, in its own directory
|
|
172
|
+
execution space. It leaves live notes and soul skills untouched. Directory
|
|
173
|
+
delivery is recoverable publication with validation and receipts. Git delivery
|
|
174
|
+
requires a real reviewed PR and merge-visible acceptance. Inspect receipts rather
|
|
175
|
+
than equating a worker spawn with learning. See [operator commands](knowledge.md#inspection-and-operator-commands)
|
|
176
|
+
for scaffold-only requests, completion and retry.
|
|
177
|
+
|
|
178
|
+
Source retirement need not wait for a worker to finish: it must first certify
|
|
179
|
+
final notes/record custody. From the repository scope:
|
|
149
180
|
|
|
150
181
|
```bash
|
|
151
182
|
oats retire backend-expert-first-fix
|
|
152
183
|
oats status --team
|
|
153
184
|
```
|
|
154
185
|
|
|
155
|
-
Read the retirement result
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
186
|
+
Read the retirement result. An uncertified capture retains the home for retry;
|
|
187
|
+
never delete it to bypass recovery. Durable descriptors, evidence and runs survive
|
|
188
|
+
successful retirement. Use `oats okf inspect --source <absolute-source.json>
|
|
189
|
+
--soul backend-expert --json` from deployment context afterward. If messaging is
|
|
190
|
+
active, also verify its retirement receipt and roster rather than assuming local
|
|
191
|
+
cleanup proves identity release.
|
|
192
|
+
|
|
193
|
+
For automatic future judgment, review [source jobs](schedules.md#okf-v2-source-jobs)
|
|
194
|
+
and explicitly opt into host-timer installation. No-launch tests should never
|
|
195
|
+
install it or enable live model launches.
|
|
160
196
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
That
|
|
164
|
-
|
|
197
|
+
After provider acceptance, start a fresh instance of the same soul on a useful
|
|
198
|
+
task. Check that it finds **and uses** the promoted lesson without the original
|
|
199
|
+
source. That is the learning acceptance step; a no-launch reader only verifies
|
|
200
|
+
scaffolding and references.
|
|
165
201
|
|
|
166
|
-
## Optional conversation
|
|
202
|
+
## Optional host-wide conversation capture
|
|
167
203
|
|
|
168
|
-
Knowledge
|
|
169
|
-
|
|
204
|
+
Knowledge judgment and the native conversation record are separate. OKF uses
|
|
205
|
+
source-targeted native capture through the CLI; host-wide watcher/hook setup is
|
|
206
|
+
an additional deliberate operator action:
|
|
170
207
|
|
|
171
208
|
```bash
|
|
172
209
|
oats setup
|
|
@@ -174,6 +211,5 @@ oats capture --status
|
|
|
174
211
|
oats recall "a phrase from your completed task"
|
|
175
212
|
```
|
|
176
213
|
|
|
177
|
-
Capture
|
|
178
|
-
|
|
179
|
-
retain their source signatures. See [the turn record](../README.md#the-turn-record).
|
|
214
|
+
Capture respects privacy exclusions. Native turns are content-addressed; signed
|
|
215
|
+
aweb messages retain their source signatures. See [the turn record](../README.md#the-turn-record).
|