@awebai/oats 0.22.0 → 0.22.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 +40 -50
- package/bin/oats.mjs +242 -22
- package/capabilities/oats-authoring/LICENSE +21 -0
- package/capabilities/oats-authoring/oats-package.json +11 -0
- package/capabilities/oats-authoring/oats.json +4 -4
- package/capabilities/oats-authoring/skills/integration-authoring/SKILL.md +63 -0
- package/capabilities/oats-authoring/skills/skill-craft/SKILL.md +109 -0
- package/capabilities/oats-authoring/skills/soul-craft/SKILL.md +109 -0
- package/capabilities/oats-aweb/injects/aweb.md +4 -3
- package/capabilities/oats-aweb/oats.json +7 -7
- package/capabilities/oats-aweb/skills/LICENSE +21 -0
- package/capabilities/oats-aweb/skills/VENDORED.md +26 -0
- package/capabilities/oats-aweb/skills/aweb-identity/SKILL.md +201 -0
- package/capabilities/oats-aweb/skills/aweb-messaging/SKILL.md +161 -0
- package/capabilities/oats-aweb/skills/aweb-messaging/references/messaging-scenarios.md +61 -0
- package/capabilities/oats-aweb/skills/aweb-team-membership/SKILL.md +328 -0
- package/capabilities/oats-aweb/skills/aweb-team-membership/references/team-membership-reference.md +74 -0
- package/capabilities/oats-jira/oats.json +1 -1
- package/capabilities/oats-linear/oats.json +1 -1
- package/capabilities/oats-okf/agents/{memory-harvest.md → memory-harvest/AGENTS.md} +3 -1
- package/capabilities/oats-okf/agents/memory-harvest/soul.yaml +6 -0
- package/capabilities/oats-okf/bin/oats-okf.mjs +201 -54
- package/capabilities/oats-okf/injects/okf.md +7 -0
- package/capabilities/oats-okf/oats.json +5 -2
- package/capabilities/oats-okf/skills/memory-harvest/SKILL.md +42 -1
- package/capabilities/oats-review/oats.json +1 -1
- package/docs/2026-09-03-architecture-proposal.md +642 -0
- package/docs/execution-targets.md +181 -0
- package/docs/first-team-demo.md +87 -0
- package/docs/first-team.md +179 -0
- package/docs/implementation.md +14 -1
- package/docs/integrations.md +83 -65
- package/docs/layers.md +356 -80
- package/docs/migration-from-oas.md +80 -116
- package/docs/oats-config.schema.json +1 -0
- package/docs/operating-team-migration.md +217 -0
- package/docs/release-notes/v0.22.1.md +106 -0
- package/docs/release-notes/v0.22.2.md +69 -0
- package/docs/servers.md +94 -0
- package/docs/souls-and-instances.md +30 -3
- package/lib/core.mjs +626 -415
- package/lib/herdr.mjs +95 -0
- package/lib/servers.mjs +436 -0
- package/lib/session-input.mjs +78 -0
- package/lib/session-viewer.mjs +51 -0
- package/package-catalog.json +2 -2
- package/package.json +1 -1
- package/packages/record/README.md +76 -16
- package/packages/record/bin/capture.mjs +59 -3
- package/packages/record/bin/recall.mjs +67 -1
- package/packages/record/docs/turn-record-sot.md +1 -1
- package/packages/record/lib/sessions-for-home.mjs +130 -0
- package/packages/record/lib/store.mjs +207 -43
- package/skills/oats/SKILL.md +6 -2
- package/capabilities/oats-aweb/package.json +0 -20
- package/capabilities/oats-jira/package.json +0 -25
- package/capabilities/oats-linear/README.md +0 -234
- package/capabilities/oats-linear/package.json +0 -29
- package/capabilities/oats-linear/test/oats-linear.test.mjs +0 -168
- package/capabilities/oats-okf/package.json +0 -22
|
@@ -1,122 +1,86 @@
|
|
|
1
1
|
# Migrating from OAS to OATS
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
Since plan step 1 landed (below), the silence is closed: `oats doctor` names
|
|
30
|
-
an un-migrated OAS scope with the remedy, and every `oats migrate` form —
|
|
31
|
-
plain or guided, dry run or apply — exits nonzero when `oas-config.yaml` /
|
|
32
|
-
`oas-lock.json` are visible from the scope (detection is by name only; the
|
|
33
|
-
kernel never parses OAS files).
|
|
34
|
-
|
|
35
|
-
## Migrating: `oats migrate --from-oas`
|
|
3
|
+
OATS is the successor to OAS. **OATS 0.22.0 was published on 2026-09-03**:
|
|
4
|
+
the kernel, Pi adapter, and Desktop assets are available. The published
|
|
5
|
+
kernel acquired the official OKF, aweb, authoring, and development packages
|
|
6
|
+
from its catalog during the 2026-09-05 qualification. You no longer need a
|
|
7
|
+
framework checkout to migrate.
|
|
8
|
+
|
|
9
|
+
Use the migration command rather than renaming files by hand. The OATS
|
|
10
|
+
kernel does not read `oas-*` configuration names or `oas.*` capability IDs.
|
|
11
|
+
An unchanged agent-directory layout can make an old scope look familiar
|
|
12
|
+
while its knowledge and messaging configuration remains unmigrated.
|
|
13
|
+
|
|
14
|
+
## Upgrade one scope
|
|
15
|
+
|
|
16
|
+
Finish or preserve active work before changing a daily-use deployment.
|
|
17
|
+
Install OATS alongside the old CLI, then inspect the plan for the exact
|
|
18
|
+
scope you intend to convert:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install -g @awebai/oats@latest
|
|
22
|
+
pi install npm:@awebai/oats-pi@latest
|
|
23
|
+
oats migrate --from-oas --dry-run --dir /path/to/scope
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Read any held or unmapped package rows before applying. A dry run reports
|
|
27
|
+
what can be converted; it is not a guarantee that every historical package
|
|
28
|
+
version has a supported replacement. When the plan is correct:
|
|
36
29
|
|
|
37
30
|
```bash
|
|
38
|
-
oats migrate --from-oas --
|
|
39
|
-
oats
|
|
40
|
-
oats migrate --from-oas --recursive --dir <root> # every visible OAS scope
|
|
31
|
+
oats migrate --from-oas --dir /path/to/scope
|
|
32
|
+
oats doctor /path/to/scope
|
|
41
33
|
```
|
|
42
34
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
1. **Done.** `oats migrate` / `oats doctor` detect an OAS scope and fail
|
|
96
|
-
**loud** with the exact remedy (never exit 0 on "nothing to migrate" when
|
|
97
|
-
`oas-*` siblings exist). `detectOasScopes` in `lib/core.mjs`,
|
|
98
|
-
`discoverOasScopes` in `lib/packages.mjs`, wired in `bin/oats.mjs`;
|
|
99
|
-
tests in `test/oas-scope-detection.test.mjs`.
|
|
100
|
-
2. **Done.** Catalog aliases `oas.*` → `oats.*` so legacy locks map instead
|
|
101
|
-
of holding — as *renaming* aliases (`{ "package": "oats.okf",
|
|
102
|
-
"capability": "oats.okf" }`), because the replacement packages export the
|
|
103
|
-
successor ids, never the legacy ones. All seven 0.20 ids are mapped in
|
|
104
|
-
`package-catalog.json`.
|
|
105
|
-
3. **Done.** `oats migrate --from-oas`: one transactional command covering
|
|
106
|
-
all four breaks (section above), fixture built from the real deployment
|
|
107
|
-
shape, idempotent, byte-identical rollback on failure, with a migrated
|
|
108
|
-
scope reaching green `oats doctor` and spawns composing the knowledge and
|
|
109
|
-
messaging injections again (`test/from-oas-migration.test.mjs`).
|
|
110
|
-
4. v0.22.0 release: notes and version alignment are **done**; remaining are
|
|
111
|
-
the tag, npm publish of `@awebai/oats` + `@awebai/oats-pi`, and the
|
|
112
|
-
desktop GitHub Release.
|
|
113
|
-
5. `npm deprecate` the `@oas-framework/*` packages with a pointer here.
|
|
114
|
-
6. Close the `oats-okf` / `oats-aweb` publication gates so migrated scopes
|
|
115
|
-
can restore their capabilities under the new ids.
|
|
116
|
-
|
|
117
|
-
Until 4–6 are done, OAS users (this includes real daily users) should stay
|
|
118
|
-
on `@oas-framework/oas` — it keeps working and loses nothing by
|
|
119
|
-
waiting. The conversion command exists, but until the v0.22.0 release it is
|
|
120
|
-
only reachable from a repo checkout, and until the satellite publication
|
|
121
|
-
gates close the catalog's package refs are not a supported acquisition
|
|
122
|
-
source for migrated scopes.
|
|
35
|
+
Run the exact `oats trust <capability> --dir <scope>` commands printed by
|
|
36
|
+
migration for the executable capabilities you approve. Trust does not
|
|
37
|
+
transfer automatically. Verify the team ID and messaging membership with
|
|
38
|
+
`oats aweb setup --dir /path/to/scope`, then exercise a real task, harvest,
|
|
39
|
+
and retirement as described in [Run your first team](first-team.md).
|
|
40
|
+
|
|
41
|
+
For a multi-repository deployment, start with one scope. The explicit
|
|
42
|
+
`--recursive --dir /path/to/workspace` form converts every discovered OAS
|
|
43
|
+
scope, with a separate transaction for each; it is not one transaction for
|
|
44
|
+
the whole workspace.
|
|
45
|
+
|
|
46
|
+
If you use Desktop, install [OATS Desktop](desktop.md) too. The old OAS
|
|
47
|
+
Desktop discovers the old package name and cannot operate the new CLI.
|
|
48
|
+
OATS Desktop 0.22.0 accepts kernel versions `>=0.22.0 <0.23.0`.
|
|
49
|
+
|
|
50
|
+
## What the command converts
|
|
51
|
+
|
|
52
|
+
One transaction covers two phases within a scope:
|
|
53
|
+
|
|
54
|
+
1. Rename `oas-config.yaml` and `oas-lock.json` to their `oats-` names;
|
|
55
|
+
convert the `oas:` defaults key and catalog-mapped capability IDs;
|
|
56
|
+
rename installed `oas.json` manifests and soul scaffold-owner files.
|
|
57
|
+
2. Convert the old lock to official package lockfile version 2, acquiring
|
|
58
|
+
the replacement artifacts and removing superseded installed directories.
|
|
59
|
+
|
|
60
|
+
The catalog includes aliases for the seven OAS 0.20 capability IDs, mapping
|
|
61
|
+
`oas.*` names to the corresponding `oats.*` packages and capabilities.
|
|
62
|
+
Aliases guide migration; they are not runtime compatibility shims.
|
|
63
|
+
Comments and unrelated configuration text are preserved, including old
|
|
64
|
+
names in comments. Those comments can be updated separately.
|
|
65
|
+
|
|
66
|
+
A failure in either phase restores that scope's original OAS bytes. A
|
|
67
|
+
second successful run finds nothing to convert. `oats doctor` and migration
|
|
68
|
+
commands identify visible OAS-named scopes and give a remedy rather than
|
|
69
|
+
silently declaring an unmigrated deployment ready.
|
|
70
|
+
|
|
71
|
+
## Compatibility and remaining transition work
|
|
72
|
+
|
|
73
|
+
The migration fixtures were built from an OAS 0.20.x deployment. OAS
|
|
74
|
+
0.21.x uses the same file names and configuration keys, but may lock package
|
|
75
|
+
versions outside the OATS catalog's mapped line. Inspect the dry run before
|
|
76
|
+
converting those scopes; do not replace an unmapped version by guessing.
|
|
77
|
+
|
|
78
|
+
The old `@oas-framework/*` packages have not been deprecated as part of
|
|
79
|
+
this rollout. Their update checks therefore do not announce the OATS
|
|
80
|
+
rename; deprecation belongs to their maintainer. An existing OAS deployment
|
|
81
|
+
can keep running until its own migration plan is ready. This is no longer a
|
|
82
|
+
requirement to wait for OATS publication.
|
|
83
|
+
|
|
84
|
+
See the [0.22.0 release notes](release-notes/v0.22.0.md) for the rename,
|
|
85
|
+
package versions, and compatibility changes, and the
|
|
86
|
+
[first-team qualification](first-team-demo.md) for current operating evidence.
|
|
@@ -72,6 +72,7 @@
|
|
|
72
72
|
},
|
|
73
73
|
"type": "object",
|
|
74
74
|
"properties": {
|
|
75
|
+
"yolo": { "type": "boolean", "description": "Skip Codex/Claude permission prompts. Closest scope wins; soul and launch overrides take precedence." },
|
|
75
76
|
"name": { "type": "string" },
|
|
76
77
|
"team": {
|
|
77
78
|
"type": "object",
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# Full operating-team migration
|
|
2
|
+
|
|
3
|
+
Planning record, 2026-09-05. Juan asked lead to discuss the migration with
|
|
4
|
+
Merlin and plan for all teams on this machine to be managed by OATS, with
|
|
5
|
+
harvesting fully working. This expands the earlier release/configuration
|
|
6
|
+
rollout. It does not describe an already completed migration.
|
|
7
|
+
|
|
8
|
+
The cjr runbook is owned by Merlin at
|
|
9
|
+
`~/cjr/agents/docs/2026-09-05-oats-migration.md`. This document records the
|
|
10
|
+
shared framework work and the wider rollout.
|
|
11
|
+
|
|
12
|
+
Fresh identities are authorized for specialists and reviewers. Merlin retains
|
|
13
|
+
both `cjr.aweb.ai/merlin` and his existing durable DID. Aweb clarified that
|
|
14
|
+
re-minting the same address changes identity and breaks continuity; the supported
|
|
15
|
+
path is an explicit transfer of his existing authority with one live process.
|
|
16
|
+
Other teams' retained identities follow the same requirement where applicable.
|
|
17
|
+
|
|
18
|
+
An isolated check against installed 0.22.1 confirmed that an explicit
|
|
19
|
+
existing spawn destination is refused without changing its instructions or
|
|
20
|
+
uncommitted notes. Purpose-based naming chooses an unused suffix. The old
|
|
21
|
+
cjr respawn-clobber report therefore is not reproduced by this journey;
|
|
22
|
+
identity adoption and concurrent handover still need their own tests.
|
|
23
|
+
|
|
24
|
+
## Completion means operating teams
|
|
25
|
+
|
|
26
|
+
Every continuing seat must have a supported OATS launch, composition,
|
|
27
|
+
status, handover and retirement path. Its outstanding work, knowledge and
|
|
28
|
+
required skills must survive a change of runtime session; identity/address
|
|
29
|
+
continuity follows the explicit policy for that seat.
|
|
30
|
+
Every remembering role must have a tested learning path; reviewers retain
|
|
31
|
+
their explicit exclusion from accumulated memory. Config discovery alone
|
|
32
|
+
establishes none of this.
|
|
33
|
+
|
|
34
|
+
The published 0.22.1 release supports useful Pi/Claude worker work and
|
|
35
|
+
notes-based harvest. Its observed qualifications included operator-assisted
|
|
36
|
+
retirement. Standing-agent adoption, automatic service retirement and
|
|
37
|
+
record-fed learning remain work, not shipped guarantees.
|
|
38
|
+
|
|
39
|
+
## Scope inventory
|
|
40
|
+
|
|
41
|
+
Reconfirm the live inventory with each owner at handover; process presence
|
|
42
|
+
and old directories are evidence to investigate, not the authoritative list
|
|
43
|
+
of continuing seats.
|
|
44
|
+
|
|
45
|
+
| Scope | Starting point | Required disposition |
|
|
46
|
+
| --- | --- | --- |
|
|
47
|
+
| `~/awebai/oats` | Live Claude coordinator and Codex lead; managed review workers also running | Oats owns coordinator handover; lead owns lead handover; preserve established identities |
|
|
48
|
+
| `~/cjr` | Knowledge/config preparation landed at `5afb3e8b`; managed developer pilot running; legacy Merlin and Minerva observed live | Merlin owns pilot and safe handovers; preserve his DID and address; harvest acceptance remains pending |
|
|
49
|
+
| `~/awebai/aweb` | Live Claude coordinator and frontend in legacy homes | Oats owns coordinator handover; lead coordinates frontend with aweb after its current work; preserve identities and cover child repositories |
|
|
50
|
+
| `~/tsm` | Five live seats: Zeus, Prometeo, Argos, Themis on Claude; Hermes on Codex. No OATS config/souls found | Lead coordinates with Zeus; cross-team handoff currently rejected by local identity routing; establish a supported route, then prepare souls/knowledge and safe handovers |
|
|
51
|
+
| `~/prj/beadhub-all` | Live Codex session, despite stale offline roster | Lead sent handover request to Beadhub; preserve its established identity and current work; no billing/production changes |
|
|
52
|
+
| `~/prj/docflow` | Live Claude session; credential workspace alias `alice` on `docflow:juan.aweb.ai` | Lead and Merlin establish responsible owner and handover; that alias is not proof of a globally routable address |
|
|
53
|
+
| `ai.aweb` on `aweb-agents` | Athena last seen 53 days ago; remote legacy home exists in inventory | Aweb and oats own archival inspection; do not resurrect as a continuing seat |
|
|
54
|
+
| `~/awebai/demo-aweb/bob` | Live Pi demo | Aweb owns safe stop and archival disposition; it is not an operating-team migration |
|
|
55
|
+
| `~/.turn-record` | Live Pi capture service under launchd | Retain as infrastructure; qualify record capture separately from standing seats |
|
|
56
|
+
|
|
57
|
+
The live inventory above was checked on 2026-09-05 using harness process
|
|
58
|
+
working directories, without interrupting them. Old aweb presence timestamps
|
|
59
|
+
are insufficient to decide whether a harness is alive. A migration plan or
|
|
60
|
+
new soul directory does not establish that the corresponding seat moved.
|
|
61
|
+
|
|
62
|
+
Grace's missing old local path and the offline retirement, docs, bertha,
|
|
63
|
+
cowork, federation, membership-review, aazb-reviewer, id-bugs, billing and
|
|
64
|
+
claweb entries are archival investigations, not launch requests. Preserve
|
|
65
|
+
homes until their work and authority have a recorded disposition. Do not
|
|
66
|
+
bulk-delete aliases based on roster age; certificate cleanup belongs to the
|
|
67
|
+
aweb lifecycle fix and its verified recovery procedure.
|
|
68
|
+
|
|
69
|
+
## Shared prerequisites and owners
|
|
70
|
+
|
|
71
|
+
Oats coordinates framework/package work and the machine-wide inventory.
|
|
72
|
+
Lead independently reviews the design and concrete journey evidence. Merlin
|
|
73
|
+
owns cjr's repository changes, task selection and eventual handovers. Other
|
|
74
|
+
teams' owners control their work and handover sequence; oats records those
|
|
75
|
+
owners before scheduling each migration. Oats accepted ownership of
|
|
76
|
+
`aweb-abep` (service self-retirement), followed by `aweb-abfz` (record-fed
|
|
77
|
+
learning). Self-retirement merged at 568eeae; record-fed learning is implemented
|
|
78
|
+
and under independent review, with package publication pending. Lead owns
|
|
79
|
+
the full-machine plan and runtime/wake qualification, including the Codex
|
|
80
|
+
support requirement. The aweb coordinator owns identity continuity and route
|
|
81
|
+
semantics, with oats coordinating the rehearsal and package changes.
|
|
82
|
+
|
|
83
|
+
### Recreate or retain identities according to the actual requirement
|
|
84
|
+
|
|
85
|
+
Cjr's default is a new OATS-minted identity and an explicit handover of
|
|
86
|
+
outstanding work, knowledge, contacts and task responsibility. Old identities
|
|
87
|
+
are retired only after that handover is accepted. Pilot identities remain
|
|
88
|
+
uniquely named so no existing address has to be removed for the experiment.
|
|
89
|
+
|
|
90
|
+
Merlin is the exception. Oats owns the explicit source-authority binding in the
|
|
91
|
+
messaging capability; aweb supplied this supported handover:
|
|
92
|
+
|
|
93
|
+
1. Rehearse using a disposable self-custodial global identity and a second-team
|
|
94
|
+
contact, checking DID, address, conversations and write attribution.
|
|
95
|
+
2. Stop the old process. Copy authority only: signing.key, identity.yaml,
|
|
96
|
+
teams.yaml, team certificates, encryption.yaml and encryption keys. Keep
|
|
97
|
+
private files owner-only; exclude workspace.yaml and caches.
|
|
98
|
+
3. In the new home run `aw workspace connect --service <url> --team <team>` to
|
|
99
|
+
rebind the existing identity. Do not mint or join as a new identity.
|
|
100
|
+
4. Verify the same DID/address, host/path binding, heartbeat, message routes and
|
|
101
|
+
task writes. Preserve the old home for rollback until acceptance, then remove
|
|
102
|
+
its old credential copy. Never have two processes using the identity.
|
|
103
|
+
|
|
104
|
+
Do not delete Merlin's global workspace as part of handover: aweb reports that
|
|
105
|
+
this is unsupported and can release claims. Retiring a managed execution with
|
|
106
|
+
retained authority must release the execution without destroying the identity.
|
|
107
|
+
Never put credentials in Git or manufacture instance.json for adoption.
|
|
108
|
+
|
|
109
|
+
### Make harvest finish without an operator
|
|
110
|
+
|
|
111
|
+
Kernel issue `aweb-abep` is real in 0.22.1: bare `retire --self` is refused,
|
|
112
|
+
while the harvester's instructions tell it to use that command. Oats owns
|
|
113
|
+
the supported service-exit path, with lead review. A deferred external
|
|
114
|
+
retirement is a candidate; the live agent must not inspect and delete its
|
|
115
|
+
own working state. Completion requires an actual harvester to finish,
|
|
116
|
+
report and clean up without operator retirement, with visible recoverable
|
|
117
|
+
failure rather than silent loss. Do not release capabilities while the
|
|
118
|
+
runtime can still act, or make the read-only status command delete homes.
|
|
119
|
+
|
|
120
|
+
Review cjr's local `memory-harvest` override before the pilot: selected
|
|
121
|
+
implementation, required skill, authenticated model, source worktree,
|
|
122
|
+
promotion destination and self-harvest exclusion. The configured model is
|
|
123
|
+
OpenAI via `openai-codex/gpt-5.5`, already used by the local record/mind setup.
|
|
124
|
+
Pi is needed even for Claude workers. A model setting is not proof of a run.
|
|
125
|
+
|
|
126
|
+
### Finish temporary identity retirement
|
|
127
|
+
|
|
128
|
+
The aweb owner must resolve the remote lifecycle defect tracked under
|
|
129
|
+
`aweb-aaum.6`; oats coordinates package integration. The five leaked release
|
|
130
|
+
identities are a reproduction. Independently verify coordination cleanup,
|
|
131
|
+
claims and certificate state. Admin cleanup is a recovery procedure, not
|
|
132
|
+
proof of automatic retirement. This gates temporary-worker completion;
|
|
133
|
+
adopted standing executions instead must preserve their durable identity.
|
|
134
|
+
|
|
135
|
+
### Recover standing executions after reboot
|
|
136
|
+
|
|
137
|
+
Tmux and Herdr keep agents alive when a viewer disconnects; a machine reboot
|
|
138
|
+
ends those executions. Replaying `instance.json.command` manually does not
|
|
139
|
+
refresh OATS's independent session receipt and is not a supported recovery.
|
|
140
|
+
The first planned recovery reuses the tested retained-authority handover:
|
|
141
|
+
preserve the stopped home, knowledge and identity, then create its replacement
|
|
142
|
+
with a new receipt and one active holder. That capability binding is not built
|
|
143
|
+
yet; until qualified, rebooted standing seats remain down. A terminal-only
|
|
144
|
+
restart operation may follow; it must refresh the receipt without rerunning
|
|
145
|
+
resource-provisioning hooks. No automatic supervisor is required for the first
|
|
146
|
+
supported manual recovery.
|
|
147
|
+
|
|
148
|
+
### Include noncoding learning and all actual runtimes
|
|
149
|
+
|
|
150
|
+
`aweb-abfz` is the open record-fed learning epic. Its bounded acceptance is
|
|
151
|
+
a standing session that wrote no notes and made no code commit producing a
|
|
152
|
+
reviewed knowledge proposal with provenance to exact recorded turns, then a
|
|
153
|
+
successor reading that knowledge. Notes-based harvest must continue working.
|
|
154
|
+
Oats owns this after service self-retirement: select the source instance's
|
|
155
|
+
own recorded turns through a record helper, feed them to existing OKF
|
|
156
|
+
judgment, and deliver proposals through the same review path. Verify exact
|
|
157
|
+
source provenance, correct soul destination and safe repeat processing.
|
|
158
|
+
Storing transcripts or running the mind daemon alone does not satisfy this
|
|
159
|
+
gate.
|
|
160
|
+
|
|
161
|
+
The inventory includes Codex sessions. Main now includes reviewed native Codex launch (b7d4159), alongside Pi
|
|
162
|
+
and Claude; released Codex launch/status/stop/composition support is required
|
|
163
|
+
unless a seat's owner explicitly chooses a runtime change. No silent fallback
|
|
164
|
+
to Pi. Test channel delivery with the installed runtime and selected config;
|
|
165
|
+
manual polling is not wake-up. Establish any actual machine-policy change
|
|
166
|
+
needed before making it. Include daemon health and restart/recovery behavior
|
|
167
|
+
in the operating instructions.
|
|
168
|
+
|
|
169
|
+
## Rollout sequence
|
|
170
|
+
|
|
171
|
+
1. **Prepare without disturbing sessions.** Record each seat's identity,
|
|
172
|
+
home, work path/branch, outstanding tasks/messages, notes, skills and
|
|
173
|
+
launch mechanism. Review/commit the isolated config changes. Give every
|
|
174
|
+
knowledge store a disposition, preserving source material; migrate needed
|
|
175
|
+
context into indexed soul knowledge and team rules. Materialize required
|
|
176
|
+
skills explicitly instead of depending on a user's Claude skill links.
|
|
177
|
+
2. **Rehearse required identity transitions on test identities.** Prove
|
|
178
|
+
temporary retirement and Merlin-style retained-authority handover, including
|
|
179
|
+
cross-team routing. If another team requires retained-key adoption, test
|
|
180
|
+
its write binding, exclusivity, failure recovery and retained-identity
|
|
181
|
+
retirement separately. Do not use the active Codex lead or a standing
|
|
182
|
+
coordinator as the initial experiment.
|
|
183
|
+
3. **Run cjr's useful worker pilot.** Merlin selected extending
|
|
184
|
+
`kb/tools/kb-jobs-check.py` to cover the machine's launchd jobs. Limit the
|
|
185
|
+
task to health reporting; do not enable/disable jobs. Use a fresh named
|
|
186
|
+
developer in a worktree and a fresh code reviewer. Verify required skills,
|
|
187
|
+
aw communication, a reviewed task commit, a real harvested promotion on
|
|
188
|
+
the correct branch, and a second developer reading the promoted lesson
|
|
189
|
+
through the soul's index. Verify harvester and worker retirement. A
|
|
190
|
+
workaround-assisted run is recorded as partial, not automatic completion.
|
|
191
|
+
4. **Transfer cjr seats at agreed safe boundaries.** Prove the never-run
|
|
192
|
+
roles with new managed workers. Then hand Hermione's and Dumbledore's work
|
|
193
|
+
to fresh identities, followed by Minerva's work; Merlin goes last using the
|
|
194
|
+
verified address-continuity procedure. Checkpoint work/mail/notes and
|
|
195
|
+
explicitly transfer responsibilities. Avoid duplicate owners of the same
|
|
196
|
+
task. Preserve old homes until successor acceptance; retire old identities
|
|
197
|
+
through the supported remote path. Every remembering role gets the learning
|
|
198
|
+
check; reviewers get the exclusion check.
|
|
199
|
+
5. **Repeat across the inventory.** Prepare other scopes in parallel with
|
|
200
|
+
framework work; apply the proven handover with each team owner. Oats/aweb,
|
|
201
|
+
tsm, beadhub and docflow all need explicit outcomes. Offline homes receive
|
|
202
|
+
an explicit disposition. Retire old launch scripts only after no continuing
|
|
203
|
+
seat depends on them.
|
|
204
|
+
6. **Qualify continuous operation.** Prove record-fed promotion for noncoding
|
|
205
|
+
sessions, successor knowledge use, wake-up and recovery, and working health
|
|
206
|
+
checks. Document one supported operator path to start, inspect, hand over,
|
|
207
|
+
harvest and retire each role. Close the full migration only then.
|
|
208
|
+
|
|
209
|
+
## Evidence and progress
|
|
210
|
+
|
|
211
|
+
Keep separate milestones per team: config ready; skills/knowledge ready;
|
|
212
|
+
new workers qualified; standing seats transferred; learning qualified;
|
|
213
|
+
retirement/recovery verified. Record exact published versions and relevant
|
|
214
|
+
commits. Preserve failed-step evidence and outstanding limitations; do not
|
|
215
|
+
substitute a green `doctor`, a roster row or a successful hook report for
|
|
216
|
+
the corresponding live check. Keep credentials and private case data out of
|
|
217
|
+
the shared rollout record.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# OATS v0.22.1
|
|
2
|
+
|
|
3
|
+
A bounded reliability release, made from the first day of operating OATS on
|
|
4
|
+
its own repository from the published 0.22.0 artifacts. Every item below was
|
|
5
|
+
either reproduced during that run or found by the independent review that
|
|
6
|
+
preceded it, plus the golden fixtures that guard the kernel's outputs and a
|
|
7
|
+
release-workflow correction (a release with nothing to bump finishes rather
|
|
8
|
+
than fails). The Desktop compatibility band (`>=0.22.0 <0.23.0`) already
|
|
9
|
+
covers this kernel; no Desktop rebuild is needed.
|
|
10
|
+
|
|
11
|
+
## Fixes
|
|
12
|
+
|
|
13
|
+
- **`oats create` in a fresh scope no longer crashes.** After `oats init`,
|
|
14
|
+
the first `oats create` died with a raw stack trace because it demanded the
|
|
15
|
+
`agents/` directory that only `create` itself populates. It now bootstraps
|
|
16
|
+
the roster root at the enclosing repository, reports that once (and as
|
|
17
|
+
`agentsRoot` in `--json`), and the 0.22.0 workaround `mkdir agents` is no
|
|
18
|
+
longer needed.
|
|
19
|
+
- **Spawn preflights executables and compensates every post-hook failure.**
|
|
20
|
+
A missing runtime binary or tmux was detected only after the home, worktree,
|
|
21
|
+
branch, and required capability hooks (an aweb identity) had been created,
|
|
22
|
+
and those throws bypassed compensation, leaving a branch, a worktree, and
|
|
23
|
+
remote state with no `instance.json` and no quarantine. The runtime binary,
|
|
24
|
+
tmux (when launching), and the task input are now checked before any
|
|
25
|
+
mutation, and one compensation path owns every failure after the spawn
|
|
26
|
+
hooks: retire hooks run once, Git topology is removed and verified, a
|
|
27
|
+
window that may have been created is stopped and verified before
|
|
28
|
+
credentials are touched, and unresolvable cleanup retains the home with
|
|
29
|
+
its receipt for a retryable `oats retire`. Six fault-injection tests cover
|
|
30
|
+
the paths.
|
|
31
|
+
- **The turn record's stream lock is ownership-safe and bounded.** A late
|
|
32
|
+
contender could judge a live holder's lock stale by age and enter the same
|
|
33
|
+
critical section, and the old holder then unlinked whatever lock was in
|
|
34
|
+
place. The lock now carries an owner token; staleness is proven from the
|
|
35
|
+
holder's liveness, with age only as the fallback for a foreign-host or
|
|
36
|
+
tokenless lock; release removes only a lock the releaser owns; and every
|
|
37
|
+
failed acquire iteration passes one deadline check, so an unreadable lock
|
|
38
|
+
or a lock that cannot be removed fails with the underlying code and path
|
|
39
|
+
instead of spinning forever. Known limit, documented: a pid reused after a
|
|
40
|
+
reboot makes an abandoned lock read as held until an operator removes it.
|
|
41
|
+
- **README claims match the implementation.** Native captured turns are
|
|
42
|
+
content-addressed, not signed; projected aweb mail and chat keep their
|
|
43
|
+
original signatures; capture covers Claude Code, Pi, and Codex transcripts
|
|
44
|
+
plus aw client logs on machines where `oats setup` ran, subject to the
|
|
45
|
+
ignore list. The contracts document and the turn-record specification say
|
|
46
|
+
the same.
|
|
47
|
+
- **Bundled capabilities match their published tags.** The copies of the
|
|
48
|
+
official packages bundled under `capabilities/` claimed the published
|
|
49
|
+
version numbers but differed from the published payloads; the bundled
|
|
50
|
+
`oats.okf` still imported kernel internals and shipped an older harvester
|
|
51
|
+
layout. All six are now byte-identical to the tagged payloads (`oats.okf`
|
|
52
|
+
1.4.1, `oats.aweb` 1.8.0, `oats.jira` 1.0.0, `oats.linear` 1.0.0,
|
|
53
|
+
`oats.authoring` 1.0.0, `oats.review` 1.2.0 from `oats.dev` 1.0.0). Two
|
|
54
|
+
new tests guard it: no file under `capabilities/` may name kernel internals
|
|
55
|
+
or shell out to `oats root`, and every bundled manifest must carry the
|
|
56
|
+
version the catalog pins. The clean-room smoke asserts the same pin before
|
|
57
|
+
wrapping the bundled package, so it now proves the released package and
|
|
58
|
+
kernel combination. The bundled `oats.linear` README and test moved with
|
|
59
|
+
their package.
|
|
60
|
+
|
|
61
|
+
## Documentation
|
|
62
|
+
|
|
63
|
+
- **Run your first OATS team** (`docs/first-team.md`) is the tested path from
|
|
64
|
+
install to a real task, harvest, retirement, and a successor, with the
|
|
65
|
+
caveats the run met: the harvester runs in Pi even for Claude Code workers,
|
|
66
|
+
a Claude Code spawn needs two interactive confirmations today, and a
|
|
67
|
+
messaging layer entry that excludes a soul must state `global: true`.
|
|
68
|
+
- **First-team example** (`docs/first-team-demo.md`) records what actually
|
|
69
|
+
happened on 2026-09-05: two workers, two promotions, one successor that
|
|
70
|
+
read its predecessor's promoted lesson.
|
|
71
|
+
- **Migration from OAS** is rewritten from shipped state: the packages are
|
|
72
|
+
published, the seven catalog aliases exist, and the OAS npm deprecation
|
|
73
|
+
remains with its maintainer.
|
|
74
|
+
- `docs/layers.md` is now the OATS contracts and `docs/integrations.md` the
|
|
75
|
+
binding guide; `docs/2026-09-03-architecture-proposal.md` records the
|
|
76
|
+
component model and the migration plan agreed with the framework's author.
|
|
77
|
+
|
|
78
|
+
## Known operating limits and issues, not fixed here
|
|
79
|
+
|
|
80
|
+
- The qualified `oats.okf` 1.4.1 configuration runs its harvester in Pi, so
|
|
81
|
+
a Pi-runnable model is required even for Claude Code workers.
|
|
82
|
+
- A Claude Code worker's first launch can stop on Claude's folder-trust
|
|
83
|
+
prompt and on the aweb channel plugin's development-channels
|
|
84
|
+
confirmation; attach to the tmux session and answer them. A created
|
|
85
|
+
window is not evidence that the agent has started.
|
|
86
|
+
- Retiring an instance reports its aweb identity deleted while the server
|
|
87
|
+
keeps the alias (aweb-aaum.6). Local cleanup is complete; the name cannot
|
|
88
|
+
be reused until an administrator removes the alias. Use a fresh
|
|
89
|
+
`--purpose` for successors.
|
|
90
|
+
- The OKF harvester's default model assumes the `github-copilot` provider;
|
|
91
|
+
set `harvest-model` under the knowledge layer settings to a model your Pi
|
|
92
|
+
can run. A package change is proposed.
|
|
93
|
+
- `oats spawn` resolves the roster root from the working directory, so from
|
|
94
|
+
a workspace root pass `--dir <repo>` even though `oats status --team`
|
|
95
|
+
lists the souls.
|
|
96
|
+
- `oats status` lists the retirement-baselines directory as a phantom
|
|
97
|
+
instance, retire leaves that baseline file behind, and `oats retire --json`
|
|
98
|
+
prints a bare object rather than the schema-v1 envelope. Tracked; each
|
|
99
|
+
changes a golden fixture deliberately.
|
|
100
|
+
|
|
101
|
+
## Install
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
npm install -g @awebai/oats@0.22.1
|
|
105
|
+
pi install npm:@awebai/oats-pi@0.22.1
|
|
106
|
+
```
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# OATS v0.22.2
|
|
2
|
+
|
|
3
|
+
OATS now launches native Codex, supports Herdr alongside tmux, and routes
|
|
4
|
+
agent lifecycle commands to registered SSH servers. This release also adds
|
|
5
|
+
record-fed harvesting and lets agents finish their own retirement.
|
|
6
|
+
|
|
7
|
+
## Native runtimes and one permission setting
|
|
8
|
+
|
|
9
|
+
Choose Pi, Claude Code or Codex when creating or spawning an agent. Codex
|
|
10
|
+
uses its native CLI, instructions and skill discovery. Unknown runtimes are
|
|
11
|
+
rejected before provisioning.
|
|
12
|
+
|
|
13
|
+
Set `yolo: true` in a scope's `oats-config.yaml`, override it in a soul, or
|
|
14
|
+
use `oats spawn --yolo` / `--no-yolo`. Desktop offers the same launch choice.
|
|
15
|
+
Codex receives `--yolo` and a launch-local trust setting for the generated
|
|
16
|
+
home; Claude receives `--dangerously-skip-permissions`. Pi is unchanged.
|
|
17
|
+
With no setting, OATS leaves native permission policy in place.
|
|
18
|
+
|
|
19
|
+
## Persistent terminals and SSH execution
|
|
20
|
+
|
|
21
|
+
Use `--backend tmux|herdr` at spawn. The instance's saved session receipt
|
|
22
|
+
identifies its execution; inspect, input, attach and retirement use that
|
|
23
|
+
original target. Closing a viewer leaves the agent running.
|
|
24
|
+
|
|
25
|
+
`oats session inspect|input|attach --home <absolute-home>` provides the
|
|
26
|
+
harness-neutral terminal interface. Input sends literal text and Enter;
|
|
27
|
+
submission is not proof that the agent processed a message.
|
|
28
|
+
|
|
29
|
+
Register an existing SSH host with `oats server add`, then use `--server`
|
|
30
|
+
on spawn, status, retire and session inspect/attach. Saved routes keep
|
|
31
|
+
retirement and attachment available if a registration changes. SSH retains
|
|
32
|
+
responsibility for keys and host verification. Desktop includes a server
|
|
33
|
+
selector and the remote terminal adapter; remote roster projection remains
|
|
34
|
+
a follow-up, so use the CLI to attach to a remote instance in this release.
|
|
35
|
+
|
|
36
|
+
Live checks covered native Codex launch and subsequent terminal input on
|
|
37
|
+
both local backends. A real remote Claude session accepted input through
|
|
38
|
+
the Desktop terminal helper, survived viewer closure, and ended its viewer
|
|
39
|
+
on retirement. Herdr roster checks include public IDs beyond the ninth
|
|
40
|
+
workspace. These checks do not establish reboot recovery.
|
|
41
|
+
|
|
42
|
+
## Learning and retirement
|
|
43
|
+
|
|
44
|
+
The official `oats.okf` 1.5.0 capability can feed harvest from an instance's
|
|
45
|
+
captured turns even when it wrote no notes. It selects that home's sessions,
|
|
46
|
+
reads bounded windows, and advances its watermark over the supplied record.
|
|
47
|
+
Notes-based harvesting remains supported. Record commands require Node 22.5
|
|
48
|
+
or later on the execution host.
|
|
49
|
+
|
|
50
|
+
`oats retire --self` records retirement intent and starts detached completion.
|
|
51
|
+
Completion stops the runtime before releasing capability resources and
|
|
52
|
+
removing the home. Failed cleanup remains visible and recoverable through
|
|
53
|
+
status. The roster also stops treating retirement bookkeeping directories
|
|
54
|
+
as instances. Retiring an instance whose work tree is large no longer fails with
|
|
55
|
+
`git ENOBUFS` during work preservation: every git call on the retirement path
|
|
56
|
+
now runs with a buffer far above Node's 1 MiB default (found on a real
|
|
57
|
+
~9,500-file tree).
|
|
58
|
+
|
|
59
|
+
## Package versions and remaining work
|
|
60
|
+
|
|
61
|
+
The catalog pins `oats.okf` v1.5.0 and `oats.aweb` v1.9.0. The latter updates
|
|
62
|
+
native Codex's messaging instructions; its Pi and Claude channel delivery
|
|
63
|
+
is unchanged. Native Codex has no automatic aweb delivery in this release.
|
|
64
|
+
|
|
65
|
+
The aweb host wake broker, session-delivery capability glue, retained-identity
|
|
66
|
+
handover and supported standing-seat reboot recovery are still being
|
|
67
|
+
completed. Hosted temporary aliases also remain non-reusable until aweb's
|
|
68
|
+
certificate-retirement fix ships; use fresh purpose names. A configured
|
|
69
|
+
team or successful spawn does not mean its standing agents have migrated.
|