@awebai/oats 0.24.0 → 0.24.1
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 +224 -394
- package/bin/oats.mjs +29 -1
- package/capabilities/oats-okf/lib/captured-worker.mjs +12 -4
- package/capabilities/oats-okf/oats.json +1 -1
- package/docs/capabilities.md +4 -0
- package/docs/design/2026-09-20-redesign-program-board.md +70 -0
- package/docs/design/2026-09-20-workspace-and-portable-adoption-plan.md +287 -0
- package/docs/design/2026-09-20-workspace-onboarding-public.md +124 -0
- package/docs/design/README.md +42 -0
- package/docs/first-team.md +1 -1
- package/docs/knowledge-theory.md +353 -111
- package/docs/knowledge.md +10 -1
- package/docs/layers.md +89 -354
- package/docs/official-marketplace.md +79 -0
- package/docs/packages.md +4 -0
- package/docs/release-notes/v0.24.1.md +17 -0
- package/docs/souls-and-instances.md +20 -7
- package/docs/workspace-adoption.md +285 -0
- package/docs/workspaces.md +154 -0
- package/injects/oats-portable.md +4 -5
- package/lib/core.mjs +43 -4
- package/lib/portable-onboarding.mjs +19 -0
- package/lib/prepared-resources.mjs +1 -1
- package/package-catalog.json +2 -1
- package/package.json +1 -1
- package/skills/oats-config/SKILL.md +4 -5
- package/skills/oats-portable/SKILL.md +1 -2
- package/skills/oats-portable-artifacts/SKILL.md +2 -2
- package/skills/oats-portable-setup/SKILL.md +0 -69
package/docs/layers.md
CHANGED
|
@@ -1,382 +1,117 @@
|
|
|
1
1
|
# The OATS contracts
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
[the 2026-09-03 architecture proposal](2026-09-03-architecture-proposal.md)).
|
|
5
|
-
Sections distinguish **shipped**, **prepared** and **proposed** behavior.
|
|
6
|
-
The knowledge section describes the prepared OKF v2 integration; its release
|
|
7
|
-
gates are explicit in [v0.23.1 notes](release-notes/v0.23.1.md). A
|
|
8
|
-
proposed clause describes the contract the kernel will be refactored toward;
|
|
9
|
-
it is not a claim about current behavior, and the shipped documents
|
|
10
|
-
([souls and instances](souls-and-instances.md),
|
|
11
|
-
[capabilities](capabilities.md), [implementation](implementation.md)) remain
|
|
12
|
-
authoritative for what the code does now.
|
|
3
|
+
OATS supplies common contracts; capabilities supply behavior. The current architecture combines [Git workspaces and portable sources](workspaces.md), retained instance execution and provider-owned knowledge, messaging and tasks.
|
|
13
4
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
> Every main component is replaceable by another that offers the same
|
|
17
|
-
> contract, with the exception of OATS itself. OATS knows only contracts.
|
|
18
|
-
|
|
19
|
-
A contract is finished when two implementations satisfy it and a soul runs
|
|
20
|
-
unchanged behind each. Each section ends with that test.
|
|
5
|
+
This page is the current conceptual map, not a replacement for the versioned schemas or a claim that every provider/profile is implemented. Use [release scope](release-notes/v0.24.0.md) and actual readiness results. Earlier contract inventories remain in [Git history](https://github.com/awebai/oats/blob/249899a9a1ae865cc640fbc52b3585765fba473f/docs/layers.md); dated designs are navigated through the [design index](design/README.md).
|
|
21
6
|
|
|
22
7
|
## How the pieces fit
|
|
23
8
|
|
|
24
9
|
```text
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
├──
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
instance = (soul, runtime provider, work target?, task)
|
|
10
|
+
Git workspace definition
|
|
11
|
+
├── admits repositories with reciprocal backlinks
|
|
12
|
+
├── supplies bounded defaults and provider declarations
|
|
13
|
+
└── imports exported souls by source reference and revision
|
|
14
|
+
└── soul declares requirements, defaults and software sources
|
|
15
|
+
└── preparation resolves and retains an approved composition
|
|
16
|
+
└── instance runs against an independent work target
|
|
17
|
+
├── knowledge capability
|
|
18
|
+
├── messaging capability
|
|
19
|
+
├── tasks capability
|
|
20
|
+
└── any additional capabilities
|
|
37
21
|
```
|
|
38
22
|
|
|
39
|
-
The
|
|
40
|
-
lifecycle events, and instantiation. Everything else is an implementation
|
|
41
|
-
behind one of the contracts below.
|
|
23
|
+
The workspace definition, source repository, local deployment, work target and messaging team are different identities. They may share a repository or machine without becoming interchangeable authority.
|
|
42
24
|
|
|
43
25
|
## Soul format
|
|
44
26
|
|
|
45
|
-
|
|
46
|
-
repo, work, runtime, model, type), `AGENTS.md` (the operating definition),
|
|
47
|
-
`skills/`, and whatever a knowledge implementation adds. It is committed and
|
|
48
|
-
reviewed like code, and it never runs by itself.
|
|
27
|
+
Portable `soul.yaml` uses `schemaVersion: 1`, a name, optional role/runtime/work preferences and explicit requirements/defaults. Canonical `AGENTS.md`, its `CLAUDE.md` alias and the declared resources provide the operating curriculum. See the [schema](soul.schema.json).
|
|
49
28
|
|
|
50
|
-
|
|
51
|
-
implementation fills them. Its `AGENTS.md` speaks of "your knowledge", "your
|
|
52
|
-
task layer", "your messaging"; the bound capability's injected block says
|
|
53
|
-
what those are in this installation. A soul that names a tracker, a mail
|
|
54
|
-
system, or a knowledge format in its own text is not portable and is
|
|
55
|
-
malformed under this contract.
|
|
29
|
+
A soul can require a concrete implementation **and its source**, or require a provider by presence with supported defaults/operator choice. Naming OKF or a tracker does not make a soul malformed: it makes a particular source policy explicit. A source that genuinely promises interchangeable implementations must use compatible requirements and test that claim.
|
|
56
30
|
|
|
57
|
-
|
|
58
|
-
runtime (a compiled native session, a finetune reference) is a realization
|
|
59
|
-
artifact attached to the (soul, runtime) pair, never soul content.
|
|
31
|
+
Concrete capability selections carry `source`; software must not be inferred from an ambient installation or the publisher's unshared config. Imports retain source identity and revision rather than creating local forks. Source updates do not silently rewrite an existing instance's retained curriculum.
|
|
60
32
|
|
|
61
|
-
|
|
62
|
-
bound to Linear with no change to its files.
|
|
33
|
+
Classic `kind`/`type`/`repo` declarations and config-targeted agent types are a compatibility model, not mandatory fields or a third policy tier in portable resolution. See [souls and instances](souls-and-instances.md) and [classic configuration](configuration.md).
|
|
63
34
|
|
|
64
|
-
##
|
|
35
|
+
## Workspace, repository and adoption contracts
|
|
65
36
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
37
|
+
- `oats-workspace.yaml` declares intended members, defaults, imports and optional provider-owned stores/team/catalog references.
|
|
38
|
+
- `oats.yaml` advertises a repository's actual soul/package/knowledge exports and, for membership, a workspace backlink.
|
|
39
|
+
- Membership requires compatible observations on both sides; folder adjacency or a copied declaration is not admission.
|
|
40
|
+
- External source import does not adopt the publisher's workspace. A framework repository may host its own development workspace without imposing it on consumers.
|
|
41
|
+
- Operator choices and workspace defaults must respect source requirements. Git read access is not write permission, executable approval or messaging enrollment.
|
|
70
42
|
|
|
71
|
-
|
|
43
|
+
The [workspace guide](workspaces.md) explains these boundaries and the [declaration contract](design/2026-09-15-portable-declarations.md) defines their versioned forms.
|
|
72
44
|
|
|
73
|
-
|
|
74
|
-
- what knowledge it may read (custody scope) and whether it may write
|
|
75
|
-
knowledge (a harvester is a type permitted to write);
|
|
76
|
-
- its communication **reach**, in both directions.
|
|
45
|
+
## Capability manifest and lifecycle events
|
|
77
46
|
|
|
78
|
-
`
|
|
79
|
-
below:
|
|
47
|
+
A capability's `oats.json` declares its identity, optional fundamental `layer`, resources, host/runtime prerequisites, commands, operations and supported lifecycle contributions. A distribution package's `oats-package.json` exports one or more capabilities; a package is not itself an active integration or workspace.
|
|
80
48
|
|
|
81
|
-
|
|
82
|
-
reach: owner # only agents owned by the same human
|
|
83
|
-
reach: team # any agent in the deployment's team
|
|
84
|
-
reach: org # any team in the same organization
|
|
85
|
-
reach: external # agents outside the organization
|
|
86
|
-
```
|
|
49
|
+
The current [manifest schema](capability-manifest.schema.json) includes the published binding interface and helper/input declarations. A manifest shape alone does not certify its implementation:
|
|
87
50
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
51
|
+
- Captured fundamental providers expose their declared normalize/bind/check phases through the existing broker. The kernel resolves their fields without implementing their domain model.
|
|
52
|
+
- Commands/hooks execute only with the appropriate exact artifact approval and invocation authority.
|
|
53
|
+
- Helper behavior and optional source-receipt inputs are declared by their owner, not guessed from a layer name.
|
|
54
|
+
- Required setup/capture outcomes cannot be silently omitted to make a launch or cleanup appear successful.
|
|
55
|
+
- Legacy hook environment and captured binding/invocation inputs are distinct contracts. A legacy hook is not automatically safe for retained execution.
|
|
91
56
|
|
|
92
|
-
|
|
93
|
-
`OATS_SOUL_TYPE`; packages may ship types; a type may declare `reach`.
|
|
57
|
+
Use [capability details](capabilities.md), the [provider wire](design/2026-09-16-provider-binding-wire.md), [helper/input contract](design/2026-09-17-capability-helper-input-contract.md) and [package runtime boundary](design/package-runtime-api.md).
|
|
94
58
|
|
|
95
|
-
|
|
96
|
-
different capability sets and different knowledge scopes with no per-soul
|
|
97
|
-
configuration.
|
|
59
|
+
## The three fundamental slots
|
|
98
60
|
|
|
99
|
-
|
|
61
|
+
Knowledge, messaging and tasks are exclusive provider slots: zero or one selected implementation of each per composition. `none` is an explicit permitted choice only where requirements allow it. Additional capabilities are unlimited and nonexclusive; the three slots do not limit domain tools or workflows.
|
|
100
62
|
|
|
101
|
-
|
|
102
|
-
`oats.json` manifest declaring: `capability` (id), optional `layer`,
|
|
103
|
-
`skills`, `inject`, `commands`, `requires` (host commands and runtime
|
|
104
|
-
packages), `environment` (launch variables it may contribute, vendor-prefixed),
|
|
105
|
-
and `hooks`. Accepted events are `soul-scaffold`, `spawn`, and `retire`. Hooks
|
|
106
|
-
receive `OATS_EVENT`, `OATS_CAPABILITY`, `OATS_LAYER`, `OATS_INSTANCE`,
|
|
107
|
-
`OATS_HOME` (with `OATS_INSTANCE_HOME` as its alias), `OATS_AGENT`,
|
|
108
|
-
`OATS_SOUL`, `OATS_CONTEXT`, `OATS_WORKSPACE`, `OATS_ROOT`, `OATS_LEVEL`,
|
|
109
|
-
`OATS_SETTINGS`, `OATS_META`, and the team variables, and may return `meta`, `brief`, `warning`, runtime-specific
|
|
110
|
-
`launch` arguments, and (spawn only) `env`. Only a spawn hook may be
|
|
111
|
-
`required`. The full contract, including trust and rollback, is in
|
|
112
|
-
[capabilities](capabilities.md) and is not restated here.
|
|
113
|
-
|
|
114
|
-
**Contract.** The event list is the API that makes capabilities composable
|
|
115
|
-
and changes rarely. An implementation of any slot below is a capability that
|
|
116
|
-
declares that slot as its `layer`; two active capabilities cannot fill one
|
|
117
|
-
slot for one soul. Packages talk to the kernel only through the structured
|
|
118
|
-
CLI boundary (`oats ... --json`, `OATS_CLI_BIN`), never by importing kernel
|
|
119
|
-
files; see [package-runtime-api](design/package-runtime-api.md).
|
|
120
|
-
|
|
121
|
-
**Proposed.** A fourth event, `harvest`, run by `oats harvest` for every
|
|
122
|
-
active capability that declares it, with the same environment as `spawn`
|
|
123
|
-
plus the instance whose ephemeral state is to be promoted. The knowledge
|
|
124
|
-
implementation's harvest hook is how promotion is triggered without the
|
|
125
|
-
kernel knowing the knowledge format.
|
|
126
|
-
|
|
127
|
-
**Test.** Two capabilities filling the same slot in two installations; the
|
|
128
|
-
kernel's code has no branch that names either.
|
|
129
|
-
|
|
130
|
-
## The knowledge contract
|
|
131
|
-
|
|
132
|
-
**Shipped kernel contract.** Zero or one knowledge capability per soul,
|
|
133
|
-
selected under `capabilities.layers.knowledge`. `none` creates no
|
|
134
|
-
provider memory or harvest flow and does not delete existing state. The kernel
|
|
135
|
-
owns neither the format nor a mandatory promotion doctrine.
|
|
136
|
-
|
|
137
|
-
**Prepared reference implementation: oats.okf 2.0.0 / framework v0.23.1.**
|
|
138
|
-
All accepted knowledge is external. Explicit bindings name Git or non-Git
|
|
139
|
-
bases; `soul/okf.json` declares stable ownership and read references, while
|
|
140
|
-
`okf-base.json` identifies accepted nodes. Missing configuration or knowledge
|
|
141
|
-
fails working-source spawn, never creates an empty substitute.
|
|
142
|
-
|
|
143
|
-
*Read.* Sources consult immutable accepted views, index-first and selectively.
|
|
144
|
-
Prior rationale should be consulted rather than re-derived. OKF's `owns` routes
|
|
145
|
-
responsibility and `reads` chooses starting context: neither is an ACL, and all
|
|
146
|
-
configured bases are discoverable/readable. Cannot-write is instruction, not an
|
|
147
|
-
OS sandbox. A directory publication journal blocks fresh views; Git readers see
|
|
148
|
-
only the accepted branch, not an open PR.
|
|
149
|
-
|
|
150
|
-
*Capture and judgment.* Working agents capture state/log/notes; durable source
|
|
151
|
-
custody also copies full native record windows through the public CLI. A separate
|
|
152
|
-
worker judges from frozen input without needing the source home, worktree or
|
|
153
|
-
model. Source retirement waits for certified capture, not a model or GitHub.
|
|
154
|
-
Workers use independent `directory` execution and never edit source notes or
|
|
155
|
-
soul skills. Existing hooks and per-source command schedules supply this flow;
|
|
156
|
-
the proposed generic `harvest` event above is not implemented or required.
|
|
157
|
-
|
|
158
|
-
*Delivery custody.* Knowledge placement, not soul residency or work mode,
|
|
159
|
-
determines delivery. All Git bases use verified PR-only delivery with separate
|
|
160
|
-
merge-visible acceptance. Genuine non-Git directories use cooperative locks,
|
|
161
|
-
baseline comparison, journalled publication and validated receipts, without Git
|
|
162
|
-
or gh. There is no direct Git fallback and no cross-base distributed transaction.
|
|
163
|
-
Source descriptors, proposals and processing/delivery/acceptance receipts outlive
|
|
164
|
-
source retirement. Inspection can show matching live Markdown plus durable
|
|
165
|
-
receipts; missing/reused homes cannot supply live memory for an old source.
|
|
166
|
-
|
|
167
|
-
*Reference promotion doctrine.* OKF accepts durable behavior-changing judgment
|
|
168
|
-
that is not recoverable merely by reading code: rationale, rejected alternatives,
|
|
169
|
-
discovered limits and maintained slow state. It rejects code descriptions, task
|
|
170
|
-
residue, secrets and verbatim third-party messages. Human-accepted decisions keep
|
|
171
|
-
acceptance evidence; maintained state needs an owner and freshness discipline.
|
|
172
|
-
One canonical concept is preferable to copied claims. These are the default
|
|
173
|
-
capability's choices, not a compulsory judge for every knowledge implementation.
|
|
174
|
-
|
|
175
|
-
See [the runtime guide](knowledge.md) and [v1 migration](knowledge-migration.md)
|
|
176
|
-
for current commands and constraints. The [reference theory](knowledge-theory.md)
|
|
177
|
-
and [authoring curriculum](knowledge-capability-authoring.md) are optional;
|
|
178
|
-
capabilities may adopt, adapt or replace them and own their complete runtime.
|
|
179
|
-
|
|
180
|
-
**Test.** OKF's Git and directory providers exercise independent custody within
|
|
181
|
-
one capability. A second knowledge capability with a different model remains a
|
|
182
|
-
separate replaceability test; two OKF providers do not prove that test by
|
|
183
|
-
renaming them as two integrations.
|
|
184
|
-
|
|
185
|
-
## The tasks contract
|
|
186
|
-
|
|
187
|
-
**Shipped.** The `tasks` slot. Bundled implementations are `oats.jira`
|
|
188
|
-
(the `jira-tasks` protocol via `acli`) and `oats.linear` (JSON-first
|
|
189
|
-
`oats linear` commands and the `linear-tasks` skill). There is no default;
|
|
190
|
-
`tasks: none` is valid.
|
|
191
|
-
|
|
192
|
-
**Contract.** Where shared work state lives and how an instance claims,
|
|
193
|
-
updates, blocks, hands off, and completes work, taught by the implementation's
|
|
194
|
-
injected block and skill. An instance is identified to the tracker in a way
|
|
195
|
-
that survives the instance (today a label, `agent-<instance-name>`). Task
|
|
196
|
-
state, status, and outcomes live in the tracker; conversation lives in the
|
|
197
|
-
communication slot; the two are not merged even when one tool offers both.
|
|
198
|
-
|
|
199
|
-
Verdicts and review outcomes are task records. That is how verification
|
|
200
|
-
enters the model without a component: a reviewer is a soul type, and what it
|
|
201
|
-
concludes is written where work state lives.
|
|
202
|
-
|
|
203
|
-
**Test.** Jira and Linear already satisfy it; a third (beads, GitHub Issues)
|
|
204
|
-
is the proof that the contract is not a description of either.
|
|
205
|
-
|
|
206
|
-
## The communication contract
|
|
207
|
-
|
|
208
|
-
**Shipped.** The `messaging` slot. The bundled implementation is `oats.aweb`:
|
|
209
|
-
a team-scoped aweb identity minted per instance at spawn (alias = instance
|
|
210
|
-
name) by a required spawn hook and deleted at retire, the `aweb-messaging`,
|
|
211
|
-
`aweb-team-membership`, and `aweb-identity` skills, `oats aweb roster` and
|
|
212
|
-
`oats aweb setup`, and channel-plugin launch arguments so a session is woken
|
|
213
|
-
by incoming mail. `messaging: none` is valid.
|
|
214
|
-
|
|
215
|
-
**Contract.** How an instance becomes reachable and reaches others. The
|
|
216
|
-
implementation supplies:
|
|
217
|
-
|
|
218
|
-
- an address for the instance, discoverable by teammates, and the roster
|
|
219
|
-
that lists them across machines;
|
|
220
|
-
- durable asynchronous mail and synchronous chat, with reply and
|
|
221
|
-
acknowledgement state;
|
|
222
|
-
- a wake-up signal when work arrives, with the decision to resume or launch
|
|
223
|
-
left to the runtime owner;
|
|
224
|
-
- enforcement of the soul type's `reach`, outbound by what the address can
|
|
225
|
-
reach and inbound by who may deliver to it;
|
|
226
|
-
- a statement of whether the address can outlive the instance. For a durable
|
|
227
|
-
specialist the answer should be yes, realized however the implementation
|
|
228
|
-
chooses (for aweb: a soul-level identity served through per-instance
|
|
229
|
-
grants).
|
|
230
|
-
|
|
231
|
-
Communication is only communication. Task coordination lives in the tasks
|
|
232
|
-
slot.
|
|
233
|
-
|
|
234
|
-
*Fully local.* It must remain possible to run everything filesystem-based and
|
|
235
|
-
fully local, meaning with no dependency on a hosted service the operator
|
|
236
|
-
cannot replace. Communication needs a server; a self-hosted one on localhost
|
|
237
|
-
satisfies the constraint. What the implementation must hold on *its*
|
|
238
|
-
servers, and the traffic that must pass through them, is minimized. For aweb
|
|
239
|
-
today every delivery passes through an aweb server, hosted or self-hosted on
|
|
240
|
-
localhost with the reserved `local` namespace (`aweb-abhw` records the open
|
|
241
|
-
decision on a lighter local server). `reach: owner` maps to a contacts-only
|
|
242
|
-
inbound mode that aweb does not ship yet (`aweb-abhx`).
|
|
243
|
-
|
|
244
|
-
**Proposed.** The slot is renamed from `messaging` to `communication` in
|
|
245
|
-
documentation first; the config key stays `messaging` until a release
|
|
246
|
-
decides otherwise.
|
|
247
|
-
|
|
248
|
-
**Test.** aweb and a second implementation (a Slack bridge, an A2A gateway)
|
|
249
|
-
behind the same injected promises; a soul's `AGENTS.md` unchanged between
|
|
250
|
-
them.
|
|
251
|
-
|
|
252
|
-
## The capture contract (proposed)
|
|
253
|
-
|
|
254
|
-
**Shipped, outside the slot model.** On machines where `oats setup` has run,
|
|
255
|
-
`packages/record` captures Claude Code, Pi, and Codex transcripts plus aw
|
|
256
|
-
client logs. It skips sources matched by the local record's ignore list. It
|
|
257
|
-
stores captured turns in an append-only, content-addressed record with a search
|
|
258
|
-
index (`oats setup`, `oats capture`, `oats recall`). It is not a capability. A knowledge capability may consume source-targeted
|
|
259
|
-
capture/recall through the supported CLI boundary, as OKF v2 does.
|
|
260
|
-
|
|
261
|
-
**Contract.** The format of ephemeral state. Two kinds satisfy it: an agent's
|
|
262
|
-
own notes (its report of what mattered, today created by the knowledge
|
|
263
|
-
implementation) and a captured session (ground truth). The harvester may
|
|
264
|
-
consume either or both. Clothes, the optional spawn-time selection of past
|
|
265
|
-
conversation, are one consumer of the same contract and depend on nothing
|
|
266
|
-
else in this document. Capture never mediates the harness and fails visibly;
|
|
267
|
-
a silent capture gap is worse than none.
|
|
268
|
-
|
|
269
|
-
**Proposed.** `capture` becomes a slot; `packages/record` is wrapped as a
|
|
270
|
-
bundled, framework-trusted capability whose spawn hook records the
|
|
271
|
-
instance-to-session mapping; `oats setup`, `oats capture`, and `oats recall`
|
|
272
|
-
become kernel aliases resolving to the active capture implementation.
|
|
273
|
-
Whether capture is exclusive or additive is open.
|
|
274
|
-
|
|
275
|
-
**Test.** The record beside a notes-only implementation; the harvester reads
|
|
276
|
-
both.
|
|
277
|
-
|
|
278
|
-
## The runtime provider contract (proposed)
|
|
279
|
-
|
|
280
|
-
**Shipped.** Two runtimes, `pi` and `claude`, selected by `soul.yaml` or
|
|
281
|
-
`--runtime`, launched in a local tmux window; the branching lives inside
|
|
282
|
-
`spawnInstance`. The worked example in the
|
|
283
|
-
[proposal](2026-09-03-architecture-proposal.md#worked-example-todays-pi-launch-as-bundle-and-handle)
|
|
284
|
-
names today's launch in the contract's terms.
|
|
285
|
-
|
|
286
|
-
**Contract.** OATS hands a provider a realization bundle and receives an
|
|
287
|
-
instance handle:
|
|
63
|
+
### The knowledge contract
|
|
288
64
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
65
|
+
The kernel supplies selection, retained identity/resources, approval, invocation/lifecycle context, independent helper execution and truthful outcomes. It does not mandate OKF, memory filenames, a taxonomy, a harvester or external-only mutable placement.
|
|
66
|
+
|
|
67
|
+
The knowledge capability supplies organization, stores, readers, evidence capture, judgment, maintenance and delivery/acceptance policy. Mutable knowledge is never permission to alter immutable retained software/source artifacts.
|
|
68
|
+
|
|
69
|
+
The reference OKF model uses centralised per-soul knowledge, stable ownership/read routing, independent promotion and PR-only Git delivery. `owns` routes harvests; `reads` selects context; neither is an ACL. Directory publication, a proposed PR, an accepted merge and a fresh reader's observation are separate facts.
|
|
70
|
+
|
|
71
|
+
Alternatives may choose different placement or learning procedures. A supported co-located profile is not implied merely because the architecture allows one. See [knowledge theory](knowledge-theory.md), [version-scoped operations](knowledge.md) and [provider-neutral boundary](design/2026-09-16-knowledge-capability-contract.md).
|
|
72
|
+
|
|
73
|
+
### The tasks contract
|
|
74
|
+
|
|
75
|
+
A task provider owns work assignment, claims, status, blockers, outcomes and handoff procedures. OATS supplies the selected capability/runtime boundary, not one mandatory tracker workflow. Jira and Linear are available integrations; no tasks provider is mandatory when source requirements permit none.
|
|
76
|
+
|
|
77
|
+
Messaging is conversation, not automatically task state. Accepted knowledge may explain a decision or important situation without duplicating the tracker.
|
|
78
|
+
|
|
79
|
+
### The communication contract
|
|
80
|
+
|
|
81
|
+
The current slot name is **`messaging`**. The capability owns native identity, addressing, team membership, transport, wake delivery and qualification. A team alias in a workspace is a declaration, not proof that an actor is enrolled or a privacy property is enforced.
|
|
82
|
+
|
|
83
|
+
The released aweb1.10.3 integration supports its legacy setup/lifecycle path but lacks the captured provider-binding interface required for a new portable profile. That capability needs adaptation and real qualification; a codec that always refuses readiness is not completed messaging support.
|
|
84
|
+
|
|
85
|
+
The earlier proposed `reach` ladder is **not an enforced universal field**. In particular, aweb's `team_and_contacts` includes verified same-team senders; the compatibility spellings `contacts-only` and `contacts_only` do not establish owner-only admission. A config command succeeding proves neither inbound/outbound restrictions nor knowledge visibility. See the [identity/membership amendment](design/2026-09-08-expert-assisted-deployment-proposal.md#membership-reach-and-visibility-are-separate) and [messaging boundary](design/2026-09-16-messaging-capability-contract.md).
|
|
86
|
+
|
|
87
|
+
Roster membership is not a live process or a responsive session. Retirement may leave provider-side records or incomplete cleanup; inspect the actual outcome rather than promising aliases disappear.
|
|
88
|
+
|
|
89
|
+
## Runtime and work-target contracts
|
|
90
|
+
|
|
91
|
+
The selected runtime owns its normal model/authentication/profile mechanisms. OATS supplies complete composed resources, task, work selection and retained execution authority; it does not copy or repair credentials or enable permission bypass merely because a session is unattended.
|
|
92
|
+
|
|
93
|
+
Pi, Claude Code and Codex have version/profile-specific support. Claude Code and Codex retain normal native context and permissions; strict selected Pi execution has its own verified profile limits. Tmux and Herdr are backend choices, not soul identities. A source can support several realizations without every combination being qualified.
|
|
94
|
+
|
|
95
|
+
The work target is independent of source publication and knowledge placement. Preserve the selected work-mode discipline and ownership. Unsupported required lifecycle, wake, plugin or recovery behavior must remain explicit, not be replaced with an easier hidden profile. See [execution targets](execution-targets.md) and the [release notes](release-notes/v0.24.0.md).
|
|
96
|
+
|
|
97
|
+
## Kernel briefings versus operational capabilities
|
|
98
|
+
|
|
99
|
+
The kernel owns only what describes the layout it creates: the `instance-boundary` briefing (home versus `work/`), the selected work-mode briefing and config-declared injections. Knowing how to *operate* OATS (status, spawn, retire, soul discovery) and how to *configure* it (workspaces, packages, trust) is capability content — accepted as the official capabilities `oats.core` (explicit default on every soul, removable) and `oats.setup` (held by the onboarding-created `oats-setup-expert`). At the0.24 baseline those skills are still kernel-shipped; see the [workspace guide](workspaces.md#how-a-soul-knows-oats-accepted-direction-not-yet-shipped) and the adoption plan's distribution packages.
|
|
100
|
+
|
|
101
|
+
## Capture and knowledge are separate
|
|
102
|
+
|
|
103
|
+
The native turn record is an evidence substrate, not accepted knowledge or a compulsory fourth fundamental slot. A capability decides which evidence it consumes and how it judges it. Source attribution, before-read custody and incomplete-outcome handling remain necessary wherever those guarantees are promised.
|
|
104
|
+
|
|
105
|
+
A successful capture is not a completed judgment; completed judgment is not accepted Git knowledge. Source loss or retirement must not erase pending obligations or make an uncertain record complete. See [the record package](../packages/record/README.md) and the relevant versioned lifecycle contracts.
|
|
106
|
+
|
|
107
|
+
## Replaceability without invented readiness
|
|
108
|
+
|
|
109
|
+
A capability boundary is useful when implementations can differ without a new kernel-owned version of their behavior. But:
|
|
110
|
+
|
|
111
|
+
- Two stores within OKF are not proof of a genuinely different knowledge model.
|
|
112
|
+
- Schema validation is not native authority, provider readiness or learning.
|
|
113
|
+
- A working old configuration does not prove compatibility with a new captured profile.
|
|
114
|
+
- Workspace membership does not select every capability a member exports.
|
|
115
|
+
- Published primitives and documentation do not constitute a completed deployment.
|
|
303
116
|
|
|
304
|
-
|
|
305
|
-
nothing of tmux; the **platform** (today tmux: session, window, working
|
|
306
|
-
directory) is a separate module with launch, alive, stop, and list. The
|
|
307
|
-
handle is recorded in `instance.json` with a kind; the existing `tmux` field
|
|
308
|
-
is kept beside it.
|
|
309
|
-
|
|
310
|
-
A provider declares which runtime packages the active capabilities require
|
|
311
|
-
of it and verifies them before launch; it never installs them. A provider
|
|
312
|
-
without a filesystem receives the bundle as a document rather than files;
|
|
313
|
-
how is open.
|
|
314
|
-
|
|
315
|
-
**Test.** Pi and Claude Code behind one interface with `spawnInstance` free of
|
|
316
|
-
runtime names, proven by the golden fixtures (step 1). A hosted provider is
|
|
317
|
-
the second real implementation and is not built until one asks.
|
|
318
|
-
|
|
319
|
-
## The soul store contract (proposed)
|
|
320
|
-
|
|
321
|
-
**Shipped.** Souls live under `agents/` (committed) or `local-agents/`
|
|
322
|
-
(never committed) at a scope, and capability packages may ship souls under
|
|
323
|
-
`agents:` in their manifest. Three lookups find them; instance homes live in
|
|
324
|
-
the soul-owning repository's primary checkout.
|
|
325
|
-
|
|
326
|
-
**Contract.** A store lists souls, finds one by name, and says where its
|
|
327
|
-
instances live. The filesystem is the single implementation; a package and a
|
|
328
|
-
provider registry are the candidates that would prove the contract.
|
|
329
|
-
Separating the store from the work target is what removes the repository
|
|
330
|
-
from the architecture: today one path decides who the soul is, where its
|
|
331
|
-
knowledge lives, and what it works on.
|
|
332
|
-
|
|
333
|
-
**Test.** A soul found through a second store, instantiated with the same
|
|
334
|
-
bundle.
|
|
335
|
-
|
|
336
|
-
## The work target contract
|
|
337
|
-
|
|
338
|
-
**Shipped.** Five modes decide what `<instance-home>/work` is and what
|
|
339
|
-
discipline the instance follows: `worktree` (an isolated branch), `checkout`
|
|
340
|
-
(the shared current branch), `attached` (another instance's tree),
|
|
341
|
-
`workspace` (the whole team scope, read-only), plus explicit `directory`
|
|
342
|
-
(instance-owned non-Git execution for independent workers). A config may run a
|
|
343
|
-
setup script inside each fresh worktree. Retirement preserves ordinary work,
|
|
344
|
-
quarantines incomplete cleanup, and never removes a shared tree. The
|
|
345
|
-
generated instructions state the home/work boundary before the mode block.
|
|
346
|
-
|
|
347
|
-
**Contract.** The work target is a parameter of instantiation independent of
|
|
348
|
-
where the soul is stored. Each mode is a module that prepares the view,
|
|
349
|
-
states its discipline, and knows how to retire it safely, with the
|
|
350
|
-
retirement baseline and inspection alongside. The four Git/context modes retain
|
|
351
|
-
their existing semantics; directory execution never acts as an implicit fallback.
|
|
352
|
-
|
|
353
|
-
**Proposed.** An additional target, `none`, for instances that operate on nothing
|
|
354
|
-
(a mail-only agent). It replaces no mode.
|
|
355
|
-
|
|
356
|
-
**Test.** An instance of one soul spawned with each target, the same soul
|
|
357
|
-
files throughout.
|
|
358
|
-
|
|
359
|
-
## The package contract
|
|
360
|
-
|
|
361
|
-
**Shipped, and not touched by the migration.** Acquisition, exact version and
|
|
362
|
-
commit, payload and artifact integrity, dependency closure, executable trust,
|
|
363
|
-
and transactional restore; see [packages](packages.md),
|
|
364
|
-
[capabilities](capabilities.md), and the
|
|
365
|
-
[package-engine contract](design/package-engine-contract.md).
|
|
366
|
-
|
|
367
|
-
**Proposed.** A package may also ship soul types.
|
|
368
|
-
|
|
369
|
-
## The replaceability test, summarized
|
|
370
|
-
|
|
371
|
-
| Contract | Implementations today | Second implementation |
|
|
372
|
-
| --- | --- | --- |
|
|
373
|
-
| Knowledge | `oats.okf` | plain Markdown or wiki |
|
|
374
|
-
| Tasks | `oats.jira`, `oats.linear` | beads, GitHub Issues |
|
|
375
|
-
| Communication | `oats.aweb` | Slack bridge, A2A gateway |
|
|
376
|
-
| Capture | `packages/record`, OKF notes | either alone |
|
|
377
|
-
| Runtime provider | Pi, Claude Code (entangled) | a hosted provider |
|
|
378
|
-
| Soul store | filesystem | package, provider registry |
|
|
379
|
-
| Work target | worktree, checkout, attached, workspace | `none` |
|
|
380
|
-
|
|
381
|
-
Where only one implementation exists, the contract is still a description of
|
|
382
|
-
that one; those rows are the work.
|
|
117
|
+
Use the same kernel contracts, preserve declared requirements and verify the specific supported profile. New generic authority or schema semantics require an explicit decision rather than an undocumented bypass.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# The official OATS marketplace
|
|
2
|
+
|
|
3
|
+
The marketplace is the reviewed [package-catalog.json](../package-catalog.json)
|
|
4
|
+
list in [awebai/oats](https://github.com/awebai/oats), not a separate registry
|
|
5
|
+
service. **A package listed there is official.** A name, logo, repository owner
|
|
6
|
+
or workspace membership alone does not make a package official.
|
|
7
|
+
|
|
8
|
+
## Find and use packages
|
|
9
|
+
|
|
10
|
+
- Browse the catalog for the kernel/source version you use. Each package entry
|
|
11
|
+
identifies its repository, release ref and payload root; capability aliases
|
|
12
|
+
can point to the package that supplies them.
|
|
13
|
+
- Today, `oats install <capability-or-package-id>` resolves official short names
|
|
14
|
+
through the CLI's catalog. For example, `oats install oats.okf --dir /absolute/scope`
|
|
15
|
+
selects the listed package; it does not enroll a team or adopt
|
|
16
|
+
the publisher's workspace. See [package operations](packages.md).
|
|
17
|
+
- The Desktop marketplace view/search is **planned for the parity phase**, not
|
|
18
|
+
shipped by this policy or by OATS 0.24. There is no new marketplace CLI verb.
|
|
19
|
+
- **Discoverable ≠ installed ≠ approved.** Acquisition and exact locking are
|
|
20
|
+
separate from capability selection and per-capability executable approval.
|
|
21
|
+
Official status never grants trust, credentials or permission to run code.
|
|
22
|
+
- Listing also does not prove that every harness, provider combination or
|
|
23
|
+
deployment profile is supported. Check the package's declared compatibility,
|
|
24
|
+
requirements and current readiness limits.
|
|
25
|
+
|
|
26
|
+
## How a package becomes official
|
|
27
|
+
|
|
28
|
+
1. Publish a source-complete release and open a PR to `package-catalog.json` in
|
|
29
|
+
`awebai/oats`, giving the package's URL, immutable tag ref and payload path.
|
|
30
|
+
2. Include evidence for the acceptance criteria below. External packages go
|
|
31
|
+
through the same process as packages maintained in the OATS repositories.
|
|
32
|
+
3. An OATS maintainer reviews the entry, its exact release and trust posture.
|
|
33
|
+
Officialness follows the reviewed list change, not an unmerged proposal.
|
|
34
|
+
|
|
35
|
+
### Acceptance criteria
|
|
36
|
+
|
|
37
|
+
- **Complete source:** a valid `oats-package.json` at the declared payload root,
|
|
38
|
+
with all exported capabilities, instructions, skills, references and required
|
|
39
|
+
runtime files contained in the supported package closure.
|
|
40
|
+
- **Immutable release:** a real published tag resolving to the reviewed commit,
|
|
41
|
+
with reproducible payload/integrity evidence. Do not list a floating branch,
|
|
42
|
+
invent a future ref or move an already published tag.
|
|
43
|
+
- **Valid declarations:** capability manifests validate against the supported
|
|
44
|
+
schema and state truthful identities, compatibility and requirements.
|
|
45
|
+
- **Honest execution surface:** commands, hooks, launch environment and other
|
|
46
|
+
executable contributions are declared accurately. Review their effects;
|
|
47
|
+
approval still binds to each capability's exact artifact, not its official name.
|
|
48
|
+
- **Maintainership:** a documented, reachable maintainer contact or maintained
|
|
49
|
+
issue/security-reporting route.
|
|
50
|
+
- **License:** clear redistribution terms for the package and its dependencies,
|
|
51
|
+
with required license notices included in the distributed payload.
|
|
52
|
+
- **No secrets:** no credentials, signing keys, tokens or private instance state;
|
|
53
|
+
only supported nonsecret configuration and credential references where needed.
|
|
54
|
+
- **No hidden prerequisites:** host/runtime requirements use the supported
|
|
55
|
+
manifest fields; external services, network access and operator setup/consent
|
|
56
|
+
are documented. Do not conceal an installation or host mutation in setup code.
|
|
57
|
+
|
|
58
|
+
Contact and license evidence may live in the package/repository documentation;
|
|
59
|
+
this policy does not invent new catalog or manifest fields.
|
|
60
|
+
|
|
61
|
+
## Planned first set
|
|
62
|
+
|
|
63
|
+
- Already listed: `oats.okf`, `oats.aweb`, `oats.authoring`, `oats.jira`,
|
|
64
|
+
`oats.linear`, `oats.dev` and `oats.knowledge-theory`.
|
|
65
|
+
- **Planned, not yet listed:** `oats.core` for OATS operation/soul guidance, and
|
|
66
|
+
`oats.setup` for OATS Soul Setup, configuration and package guidance. Add their
|
|
67
|
+
catalog entries only after their actual D1 package releases exist and pass
|
|
68
|
+
review. They are not available merely because this document names them.
|
|
69
|
+
|
|
70
|
+
The [workspace adoption guide](workspace-adoption.md) describes the separate
|
|
71
|
+
planned setup-expert flow. No package is silently added to an existing soul.
|
|
72
|
+
|
|
73
|
+
## Updates, deprecation and removal
|
|
74
|
+
|
|
75
|
+
Use the same catalog PR and maintainer-review path to update, deprecate or remove
|
|
76
|
+
an entry. State the reason, affected releases and supported replacement or hold,
|
|
77
|
+
and assess existing locks/restores before changing discovery. Preserve immutable
|
|
78
|
+
release history. A list change is not permission to rewrite a deployment's locks,
|
|
79
|
+
revoke or grant local approvals, uninstall packages or delete retained resources.
|
package/docs/packages.md
CHANGED
|
@@ -5,6 +5,10 @@ capabilities. It is *transport*, not the installed entity. A package is one
|
|
|
5
5
|
`oats-package.json` at a package root that declares one or more **capabilities**
|
|
6
6
|
and, optionally, one or more reference **config templates**.
|
|
7
7
|
|
|
8
|
+
The [official marketplace policy](official-marketplace.md) explains how packages
|
|
9
|
+
join the reviewed catalog and how entries are updated or removed. Discoverable,
|
|
10
|
+
installed and approved are separate states; a listing never grants executable trust.
|
|
11
|
+
|
|
8
12
|
Acquisition stages the package in a temporary transaction directory, validates
|
|
9
13
|
the whole selected payload, **materializes each declared capability** into
|
|
10
14
|
`.agents/capabilities/installed/<id>/`, writes the exact lock, and discards the
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# OATS v0.24.1 — workspace adoption, public inspection, captured custody on the home route
|
|
2
|
+
|
|
3
|
+
Kernel/Pi/Desktop **0.24.1**. Publication is not deployment; every operator still installs, approves and qualifies locally.
|
|
4
|
+
|
|
5
|
+
## What changed
|
|
6
|
+
|
|
7
|
+
- **Framework repository joins the Git workspace model.** `oats-workspace.yaml` (workspace `oats-development`, seven intended members) and `oats.yaml` (exports: transitional `souls/oats-expert` edition, `oats-package`, `capabilities/oats-authoring`) are published at the repository root. Member indexes are on `main` in oats-okf, oats-aweb, oats-authoring and oats-jira. Membership is discovery, not activation; `imports` stay empty until sources are pinned at reviewed revisions.
|
|
8
|
+
- **`oats inspect --request <absolute-json> [--json]`** — read-only inspection of a source/workspace/member through the existing onboarding facade. Metadata only: provider payloads and adoption values are omitted, no deployment state or approval is touched, captured selectors are refused.
|
|
9
|
+
- **Captured custody on the home-only session route.** `oats session inspect|input --home H` now applies the existing captured incarnation/custody checks for captured homes and refuses before any transport when the home was replaced (integrity drift). Non-captured homes are unchanged. This is the route the aweb broker uses.
|
|
10
|
+
- **OKF 2.1.1 pairing.** The mirror, `package-catalog.json` ref and the transitional soul's source pin `oats.okf@v2.1.1`: ordinary Claude/Codex helpers with a complete approved capability closure are accepted by the OKF consumer; strict Pi still requires an explicit model and the sole-OKF profile.
|
|
11
|
+
- **Official marketplace policy** — `docs/official-marketplace.md`: the reviewed `package-catalog.json` list *is* the official marketplace; listing is by maintainer-reviewed PR; discoverable ≠ installed ≠ approved.
|
|
12
|
+
- **Kernel setup skill removed.** `skills/oats-portable-setup` is deleted on the human's instruction; setup guidance moves to the planned `oats.setup` capability (see the [decision](https://github.com/awebai/oats/blob/main/agents/oats-expert/soul/knowledge/decisions/official-capabilities-oats-core-setup-and-marketplace.md)).
|
|
13
|
+
- Docs: `docs/workspaces.md`, `docs/workspace-adoption.md`, condensed `docs/layers.md`, `docs/design/README.md` navigation, program board.
|
|
14
|
+
|
|
15
|
+
## Not in this cut
|
|
16
|
+
|
|
17
|
+
`oats.core` / `oats.setup` capabilities, explicit default `oats.core` on soul creation, `oats-setup-expert` onboarding, the five expert soul editions, the aweb portable adapter (aweb 1.10.3 still has no binding interface) and Desktop marketplace views are in progress — see the [program board](../design/2026-09-20-redesign-program-board.md).
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
# Souls and instances
|
|
2
2
|
|
|
3
|
-
Souls and instances are the two layers the OATS kernel owns. A soul
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Souls and instances are the two layers the OATS kernel owns. A soul defines a
|
|
4
|
+
reusable specialisation. An instance is a named working incarnation, with its own
|
|
5
|
+
ID, home, work view and lifecycle—not necessarily one task or chat session.
|
|
6
|
+
|
|
7
|
+
An instance may be ephemeral, such as a developer or reviewer doing bounded work,
|
|
8
|
+
or long-running, carrying planning, investigation and domain understanding across
|
|
9
|
+
many tasks. Lifetime does not itself change the soul's identity. See the
|
|
10
|
+
[canonical knowledge and specialisation model](knowledge-theory.md) for how skills,
|
|
11
|
+
shared knowledge, working context and state differ.
|
|
12
|
+
|
|
13
|
+
This operational guide includes the configuration-based soul and lifecycle forms.
|
|
14
|
+
Portable source definitions and captured lifecycle have their own versioned scope;
|
|
15
|
+
see the [0.24 release notes](release-notes/v0.24.0.md) rather than assuming every
|
|
16
|
+
legacy example below applies to a captured instance.
|
|
6
17
|
|
|
7
18
|
## Soul anatomy
|
|
8
19
|
|
|
@@ -45,10 +56,12 @@ runtime-specific guidance, while keeping `AGENTS.md` canonical.
|
|
|
45
56
|
|
|
46
57
|
## Instance anatomy
|
|
47
58
|
|
|
48
|
-
An instance
|
|
49
|
-
|
|
50
|
-
compactions
|
|
51
|
-
|
|
59
|
+
An instance has a lifecycle, but need not be short-lived. It is the identity of
|
|
60
|
+
one instantiated soul while its assignment is alive. Supported session continuations,
|
|
61
|
+
compactions and restarts can preserve that continuity. Model or harness changes must
|
|
62
|
+
follow the selected execution profile; they are not permission to reinterpret a
|
|
63
|
+
captured recipe. Retirement should account for valuable context and unfinished work,
|
|
64
|
+
not assume an experienced instance is cheap to replace.
|
|
52
65
|
|
|
53
66
|
An instance has a home directory, a task, and a worktree when the work mode
|
|
54
67
|
needs one. Its runtime setup is composed from the canonical soul plus
|