@awebai/oats 0.24.0 → 0.24.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 +224 -394
- package/bin/oats.mjs +192 -13
- package/capabilities/oats-aweb/bin/oats-aweb-binding.mjs +11 -0
- package/capabilities/oats-aweb/bin/oats-aweb.mjs +26 -0
- package/capabilities/oats-aweb/lib/binding-wire.mjs +214 -0
- package/capabilities/oats-aweb/lib/captured-execution.mjs +91 -0
- package/capabilities/oats-aweb/lib/captured-native.mjs +91 -0
- package/capabilities/oats-aweb/lib/invocation-shape.mjs +135 -0
- package/capabilities/oats-aweb/lib/portable-binding.mjs +146 -0
- package/capabilities/oats-aweb/lib/session-readiness.mjs +56 -0
- package/capabilities/oats-aweb/oats.json +12 -3
- 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 +83 -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 +43 -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 +84 -0
- package/docs/packages.md +15 -7
- package/docs/release-notes/v0.24.1.md +17 -0
- package/docs/release-notes/v0.24.2.md +21 -0
- package/docs/souls-and-instances.md +45 -7
- package/docs/workspace-adoption.md +314 -0
- package/docs/workspaces.md +154 -0
- package/injects/oats-portable.md +8 -5
- package/lib/core.mjs +89 -17
- package/lib/portable-onboarding.mjs +19 -0
- package/lib/prepared-resources.mjs +1 -1
- package/lib/provider-binding-broker.mjs +6 -1
- package/lib/setup-expert-source.mjs +76 -0
- package/package-catalog.json +9 -5
- package/package.json +3 -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/souls/oats-setup-expert/AGENTS.md +60 -0
- package/souls/oats-setup-expert/soul.yaml +14 -0
- package/skills/oats-portable-setup/SKILL.md +0 -69
package/README.md
CHANGED
|
@@ -1,408 +1,238 @@
|
|
|
1
|
-
# OATS
|
|
1
|
+
# OATS: an open framework for specialised agent teams
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Free, open source, provider-agnostic, and decentralised by design.**
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@awebai/oats)
|
|
6
|
-
[](https://github.com/awebai/oats/actions/workflows/pull-request.yml)
|
|
7
6
|
[](https://github.com/awebai/oats/releases)
|
|
8
7
|
[](https://nodejs.org/)
|
|
9
8
|
[](LICENSE)
|
|
10
9
|
|
|
11
|
-
OATS
|
|
12
|
-
the same general assistant, a workspace owns a backend expert, a UI
|
|
13
|
-
specialist, a maintainer, a reviewer, a package owner, or any other role, each
|
|
14
|
-
with a precise curriculum, durable knowledge, and a full provider-native
|
|
15
|
-
session you can enter and steer.
|
|
16
|
-
|
|
17
|
-
OATS launches **Pi**, **Claude Code**, and **Codex**. A team may mix providers and models
|
|
18
|
-
while sharing the same souls, package and config contracts, instance
|
|
19
|
-
lifecycle, and coordination topology. On machines where `oats setup` has run,
|
|
20
|
-
the append-only, searchable **turn record** captures supported local transcripts
|
|
21
|
-
and aw client logs. It outlives models, harnesses, and this repository's own
|
|
22
|
-
designs.
|
|
23
|
-
|
|
24
|
-
> **Knowledge version scope:** framework v0.23.1 integrates the published
|
|
25
|
-
> OKF 2.0.0 package on the published OATS >=0.23.0 prerequisite. The optional
|
|
26
|
-
> theory catalog uses the published v0.23.0 source. See [release notes](docs/release-notes/v0.23.1.md);
|
|
27
|
-
> package acquisition, activation and live knowledge cutover remain separate operations.
|
|
28
|
-
|
|
29
|
-
## Contents
|
|
30
|
-
|
|
31
|
-
- [Highlights](#highlights)
|
|
32
|
-
- [Quick start](#quick-start)
|
|
33
|
-
- [How it works](#how-it-works)
|
|
34
|
-
- [The turn record](#the-turn-record)
|
|
35
|
-
- [Official packages](#official-packages)
|
|
36
|
-
- [OATS Desktop](#oats-desktop)
|
|
37
|
-
- [Maturity](#maturity)
|
|
38
|
-
- [Upgrading and migration](#upgrading-and-migration)
|
|
39
|
-
- [CLI essentials](#cli-essentials)
|
|
40
|
-
- [Documentation](#documentation)
|
|
41
|
-
- [Contributing](#contributing)
|
|
42
|
-
- [Releases and versioning](#releases-and-versioning)
|
|
43
|
-
- [Origins and acknowledgements](#origins-and-acknowledgements)
|
|
44
|
-
- [License](#license)
|
|
45
|
-
|
|
46
|
-
## Highlights
|
|
47
|
-
|
|
48
|
-
- **Specialists are project assets.** A soul is reviewed Markdown, YAML,
|
|
49
|
-
skills and capability-owned declarations that travel with the repository.
|
|
50
|
-
It can be instantiated many times without losing its identity or access
|
|
51
|
-
to accumulated expertise.
|
|
52
|
-
- **Instances are real sessions, not hidden subagent calls.** Each instance is
|
|
53
|
-
a disposable incarnation with a full Pi, Claude Code, or Codex session hosted in
|
|
54
|
-
tmux, an explicit task, its own home, and a repository or workspace view.
|
|
55
|
-
You can attach to it, steer it, message it, stop it, and inspect exactly
|
|
56
|
-
what it received.
|
|
57
|
-
- **An exact curriculum, fail closed.** At spawn, OATS resolves the scoped
|
|
58
|
-
config for the target soul and materializes only the resources selected for
|
|
59
|
-
that agent. Missing, duplicate, untrusted, incompatible, or escaping
|
|
60
|
-
resources stop the launch before an incomplete agent starts.
|
|
61
|
-
- **Expertise compounds.** With the official `oats.okf` knowledge package, an
|
|
62
|
-
instance keeps resumable working state and captures non-obvious lessons. A
|
|
63
|
-
separate directory worker judges notes and captured record evidence into
|
|
64
|
-
external owned knowledge nodes. Git delivery is PR-only; plain directories
|
|
65
|
-
use recoverable publication. Future instances read accepted snapshots.
|
|
66
|
-
- **Hash-locked distribution.** Capabilities ship in Git-acquired packages
|
|
67
|
-
with exact locks, integrity, dependency closure, and explicit executable
|
|
68
|
-
trust. Acquisition never implies activation.
|
|
69
|
-
- **Teams stay steerable.** Instances have explicit `child`, `parent`, and
|
|
70
|
-
`sibling` relationships, can carry cross-machine identities through a
|
|
71
|
-
messaging layer such as `oats.aweb`, and are visible together in OATS
|
|
72
|
-
Desktop.
|
|
73
|
-
- **Supported conversations stay on the record.** On machines where `oats
|
|
74
|
-
setup` has run, OATS captures Claude Code, Pi, and Codex transcripts plus aw
|
|
75
|
-
client logs. It skips sources matched by the local record's ignore list.
|
|
76
|
-
Native session turns are content-addressed, not signed, and carry exact
|
|
77
|
-
provenance. Projected aweb mail and chat keep their original message
|
|
78
|
-
signatures verbatim. Search the captured content locally with `oats recall`.
|
|
79
|
-
|
|
80
|
-
## Quick start
|
|
81
|
-
|
|
82
|
-
Follow [Run your first OATS team](docs/first-team.md) for the v2 setup path:
|
|
83
|
-
install matching released kernel/runtime packages, adopt a development config,
|
|
84
|
-
provision external knowledge and explicit owners, connect your team if desired,
|
|
85
|
-
and complete a real task through review, independent judgment and retirement.
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
npm install -g @awebai/oats@latest
|
|
89
|
-
pi install npm:@awebai/oats-pi@latest
|
|
90
|
-
cd /path/to/project
|
|
91
|
-
oats init --raw
|
|
92
|
-
oats install git:github.com/awebai/oats-okf@v2.0.0
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
Continue with the guide's bindings, base provisioning, model and executable-trust
|
|
96
|
-
setup before spawning. Raw initialization leaves integrations disabled; the
|
|
97
|
-
explicit installation acquires published OKF 2.0.0 without depending on an older
|
|
98
|
-
template/catalog pin. Neither step authenticates a runtime or joins a messaging
|
|
99
|
-
team. The v0.23.1 framework release integrates that published package into its catalog.
|
|
100
|
-
|
|
101
|
-
See [the first-team example](docs/first-team-demo.md) for historical v1 Pi and
|
|
102
|
-
Claude qualification, not v2 acceptance evidence. Existing OAS users: start with
|
|
103
|
-
[the migration command](docs/migration-from-oas.md).
|
|
104
|
-
|
|
105
|
-
## How it works
|
|
106
|
-
|
|
107
|
-
> **Package distributes. Capability teaches or enables. Config assigns. Soul specializes. Instance works.**
|
|
108
|
-
|
|
109
|
-
| Concept | Meaning |
|
|
110
|
-
| --- | --- |
|
|
111
|
-
| **Package** | Git or local acquisition, exact lock, update, integrity, dependency, and review unit. |
|
|
112
|
-
| **Capability** | Independently targetable behavior inside a package: skills, instructions, commands, agents, requirements, or lifecycle hooks. |
|
|
113
|
-
| **Config template** | A complete reference `oats-config.yaml` a package ships. You adopt one explicitly, and it becomes your ordinary local config. |
|
|
114
|
-
| **Adopted base** | The exact template recorded at adoption, kept commit-safe so guided sync can compare against it. |
|
|
115
|
-
| **Config** | Local authority: selects layers, targets capabilities to agent types and souls, applies settings, exclusions, and overrides. |
|
|
116
|
-
| **Soul** | Durable specialist identity and curriculum; the knowledge capability determines storage and ownership. |
|
|
117
|
-
| **Instance** | One disposable incarnation and provider-native working session. |
|
|
118
|
-
|
|
119
|
-
### Souls and instances
|
|
120
|
-
|
|
121
|
-
```text
|
|
122
|
-
agents/backend-expert/soul/
|
|
123
|
-
soul.yaml
|
|
124
|
-
AGENTS.md
|
|
125
|
-
CLAUDE.md -> AGENTS.md
|
|
126
|
-
skills/
|
|
127
|
-
okf.json # when using OKF v2: external owns/reads, not a bundle
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
Every instance has two operational surfaces. The **instance home** is the
|
|
131
|
-
brain and operational boundary: instructions, task, soul reference, selected
|
|
132
|
-
skills, provenance, and episodic state. **`work/`** is the repository or
|
|
133
|
-
workspace view where reading, editing, Git, builds, tests, and commits happen.
|
|
134
|
-
|
|
135
|
-
```text
|
|
136
|
-
<instance-home>/
|
|
137
|
-
AGENTS.md
|
|
138
|
-
CLAUDE.md -> AGENTS.md
|
|
139
|
-
TASK.md
|
|
140
|
-
instance.json
|
|
141
|
-
soul/
|
|
142
|
-
.agents/skills/
|
|
143
|
-
.claude/skills -> ../.agents/skills
|
|
144
|
-
work/
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
Work modes: `worktree` (isolated branch for implementation), `checkout` (the
|
|
148
|
-
repository's shared checkout), `attached` (another instance's tree, for
|
|
149
|
-
service agents and reviewers), `workspace` (read-only multi-repository context),
|
|
150
|
-
and explicit `directory` (owned non-Git execution for independent workers;
|
|
151
|
-
`repo` supplies configuration only). Directory mode rejects `--work-dir` and
|
|
152
|
-
`--branch`, and retirement preserves nonempty work in verified recovery storage.
|
|
153
|
-
Placement that cannot be proved fails closed.
|
|
154
|
-
|
|
155
|
-
Provider behavior stays deliberate. Pi runs with ambient skill, context, and
|
|
156
|
-
template discovery curtailed while operator-configured extensions remain
|
|
157
|
-
enabled. Claude Code keeps the operator's settings, skills, plugins, MCP,
|
|
158
|
-
hooks, and memory, and OATS adds its canonical composed resources. The
|
|
159
|
-
guarantee is an exact OATS-managed curriculum, not identical ambient behavior
|
|
160
|
-
across providers. Codex uses native instructions, skills and approval settings;
|
|
161
|
-
its launch support currently requires agents to check `aw` themselves for new messages.
|
|
162
|
-
|
|
163
|
-
### Configuration and layers
|
|
164
|
-
|
|
165
|
-
Config is scoped from laptop to workspace to repository. Closer declarations
|
|
166
|
-
win; within a level, soul beats agent type beats global. Explicit exclusions
|
|
167
|
-
and layer `none` are supported.
|
|
168
|
-
|
|
169
|
-
OATS has five conceptual layers:
|
|
170
|
-
|
|
171
|
-
1. **Soul**: durable specialist identity and curriculum (kernel).
|
|
172
|
-
2. **Knowledge**: capture and promotion contract (official option `oats.okf`).
|
|
173
|
-
3. **Instances**: homes, work modes, sessions, lifecycle (kernel).
|
|
174
|
-
4. **Messaging**: reachable agent identities (official option `oats.aweb`).
|
|
175
|
-
5. **Tasks**: durable work queue (optional `oats.jira`, `oats.linear`, or another provider).
|
|
176
|
-
|
|
177
|
-
Knowledge, messaging, and tasks are exclusive slots. Additive capabilities
|
|
178
|
-
such as authoring and review compose independently. Inspect the resolved
|
|
179
|
-
result with `oats doctor [context] --soul <name> --json`.
|
|
180
|
-
|
|
181
|
-
### Distribution packages
|
|
182
|
-
|
|
183
|
-
A Git repository may contain ordinary development content and one or more
|
|
184
|
-
package payloads; the default payload path is `oats-package/`.
|
|
185
|
-
|
|
186
|
-
```bash
|
|
187
|
-
oats install oats.okf # official short id
|
|
188
|
-
oats install https://github.com/example/project.git@v1.0.0 # Git source
|
|
189
|
-
oats install 'https://github.com/example/project.git@v1.0.0#dist' # contained path
|
|
190
|
-
oats install ../project/oats-package # local path
|
|
191
|
-
oats update <package-id> # explicit advance
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
Installing materializes each capability into
|
|
195
|
-
`.agents/capabilities/installed/<id>/`. The `lockfileVersion: 2` lock records
|
|
196
|
-
packages (source, exact commit, path, payload integrity, dependencies) and
|
|
197
|
-
capabilities (version, provider, path, artifact integrity, executable trust).
|
|
198
|
-
Bare `oats install` restores the exact lock and never advances source state.
|
|
199
|
-
|
|
200
|
-
## The turn record
|
|
201
|
-
|
|
202
|
-
`packages/record` is the load-bearing layer. On each machine where `oats setup`
|
|
203
|
-
has run, it captures Claude Code, Pi, and Codex transcripts plus aw client logs.
|
|
204
|
-
It skips sources matched by that record root's ignore list. Native session
|
|
205
|
-
turns are content-addressed, not signed, and carry exact provenance. Projected
|
|
206
|
-
aweb mail and chat keep their original message signatures verbatim. The
|
|
207
|
-
append-only record can be replicated and searched locally through a SQLite
|
|
208
|
-
full-text index. It has no runtime dependencies beyond Node.
|
|
209
|
-
|
|
210
|
-
```bash
|
|
211
|
-
oats setup # install capture hooks and the background watcher
|
|
212
|
-
oats capture --status # what is being captured, by whom
|
|
213
|
-
oats recall "<query>" # search every captured session and message
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
The normative specification and its conformance vectors live in
|
|
217
|
-
[`packages/record/docs/`](packages/record/docs/).
|
|
218
|
-
|
|
219
|
-
## Official packages
|
|
220
|
-
|
|
221
|
-
Official packages are independently versioned Git repositories in the
|
|
222
|
-
[`awebai`](https://github.com/awebai) organization, referenced from the
|
|
223
|
-
kernel's bundled catalog:
|
|
224
|
-
|
|
225
|
-
| Package | Provides |
|
|
226
|
-
| --- | --- |
|
|
227
|
-
| [`oats-okf`](https://github.com/awebai/oats-okf) | `oats.okf` external knowledge, durable capture and independent judgment |
|
|
228
|
-
| [`oats-aweb`](https://github.com/awebai/oats-aweb) | `oats.aweb` messaging and identity layer |
|
|
229
|
-
| [`oats-authoring`](https://github.com/awebai/oats-authoring) | capability, skill, soul, and integration authoring craft |
|
|
230
|
-
| [`oats-jira`](https://github.com/awebai/oats-jira) | adopter-selected Jira tasks layer |
|
|
231
|
-
| [`oats-linear`](https://github.com/awebai/oats-linear) | adopter-selected Linear tasks layer |
|
|
232
|
-
| [`oats-dev`](https://github.com/awebai/oats-dev) | OATS development config template plus `oats.review` |
|
|
233
|
-
|
|
234
|
-
The optional [`oats.knowledge-theory`](docs/knowledge-capability-authoring.md)
|
|
235
|
-
authoring package lives in this repository's `oats-package/` Git payload; its
|
|
236
|
-
catalog entry in framework v0.23.1 selects the already-published v0.23.0 Git
|
|
237
|
-
source, containing theory package 1.0.0. It is not a runtime knowledge layer.
|
|
238
|
-
|
|
239
|
-
Acquire OKF through the catalog Git payload. Its bundled npm mirror is not a
|
|
240
|
-
self-contained distribution: npm drops the source worker's canonical `CLAUDE.md`
|
|
241
|
-
symlink. The optional theory payload is excluded from npm entirely. Neither
|
|
242
|
-
limitation is permission to synthesize source aliases or weaken integrity checks.
|
|
243
|
-
|
|
244
|
-
External CLIs and runtime plugins are separate informed-consent requirements.
|
|
245
|
-
Spawn verifies them and never installs them implicitly.
|
|
246
|
-
|
|
247
|
-
## OATS Desktop
|
|
248
|
-
|
|
249
|
-
The CLI is the mutation boundary; OATS Desktop is the situational-awareness
|
|
250
|
-
layer. It shows identities, tasks, relationships, specialist context,
|
|
251
|
-
workspaces, real terminals, and lifecycle state in one view when a team has
|
|
252
|
-
too many concurrent sessions for a flat terminal list to remain readable.
|
|
253
|
-
|
|
254
|
-
Installers for macOS (arm64 and x64) and Linux (x64) are published on the
|
|
255
|
-
[Releases](https://github.com/awebai/oats/releases) page with checksums and
|
|
256
|
-
build provenance. The Desktop can also be run from `packages/desktop/` in a
|
|
257
|
-
framework checkout. See [OATS Desktop](docs/desktop.md).
|
|
258
|
-
|
|
259
|
-
## Maturity
|
|
260
|
-
|
|
261
|
-
This repository carries three layers of different maturity behind one `oats`
|
|
262
|
-
entry point:
|
|
263
|
-
|
|
264
|
-
| Layer | Where | Status |
|
|
265
|
-
| --- | --- | --- |
|
|
266
|
-
| Turn record | `packages/record` | **Core.** Stable, specified, conformance-tested. |
|
|
267
|
-
| Soul and instance runtime | `bin/`, `lib/`, `capabilities/` | **Shipped.** Maintained and in production use. |
|
|
268
|
-
| Synthesis tools (`oats experimental <dress\|spawn\|segments\|mind>`) | `packages/experimental` | **Experimental.** Unproven by design, interfaces may change, never included in the published package. |
|
|
269
|
-
|
|
270
|
-
## Upgrading and migration
|
|
271
|
-
|
|
272
|
-
**From OAS.** If a deployment was created by OAS (`@oas-framework/oas`, files
|
|
273
|
-
named `oas-config.yaml` and `oas-lock.json`), this kernel recognizes none of
|
|
274
|
-
those names. Convert each scope with one transactional command; any failure
|
|
275
|
-
restores the original bytes:
|
|
276
|
-
|
|
277
|
-
```bash
|
|
278
|
-
oats migrate --from-oas --dry-run
|
|
279
|
-
oats migrate --from-oas
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
Read [Migration from OAS](docs/migration-from-oas.md) first.
|
|
283
|
-
|
|
284
|
-
**From 0.18 official capabilities.** For OATS-named scopes, valid v1 locks and
|
|
285
|
-
installed capabilities keep working after the kernel upgrade. Preview and
|
|
286
|
-
apply the guided migration when ready:
|
|
287
|
-
|
|
288
|
-
```bash
|
|
289
|
-
oats migrate --official --recursive --dry-run --dir <team-root>
|
|
290
|
-
oats migrate --official --recursive --dir <team-root>
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
It preserves config files and capability ids, leaves custom, owned, and path
|
|
294
|
-
capabilities untouched, never transfers executable trust silently, and prints
|
|
295
|
-
exact follow-ups. `oats doctor` reports readiness and cutover state.
|
|
296
|
-
|
|
297
|
-
**From OKF v1 to v2.** This is a separate, breaking capability migration, not
|
|
298
|
-
a kernel lock conversion. Preserve legacy soul knowledge and live source
|
|
299
|
-
state/cursors, configure external bases and owners, accept provider delivery,
|
|
300
|
-
then deliberately cut over. See [knowledge migration](docs/knowledge-migration.md).
|
|
301
|
-
Updating npm or installing a package performs none of those live steps.
|
|
302
|
-
|
|
303
|
-
## CLI essentials
|
|
304
|
-
|
|
305
|
-
```bash
|
|
306
|
-
oats status --team
|
|
307
|
-
oats create <soul> --type <agent-type> --repo <repo> --work worktree
|
|
308
|
-
oats spawn <soul> --purpose <role> --task "..."
|
|
309
|
-
oats retire <instance>
|
|
310
|
-
|
|
311
|
-
oats install [<package-source>]
|
|
312
|
-
oats update <package-id>
|
|
313
|
-
oats trust <capability>
|
|
314
|
-
oats init --package <package-id> --config <template>
|
|
315
|
-
oats config diff | sync | adopt <package-id> --config <template>
|
|
316
|
-
oats doctor --json
|
|
10
|
+
OATS—**Open Agent Team Specification**—is a framework for building, running and coordinating teams of specialised AI agents. You can organise your team however you need, choosing models, harnesses and capabilities without being tied to a particular provider or stack.
|
|
317
11
|
|
|
318
|
-
|
|
319
|
-
```
|
|
12
|
+
**Capabilities are the building blocks of an OATS setup.** When you define an agent, you choose its capabilities. Each provides the know-how and tools for knowledge systems, messaging, task coordination or any other workflows, tools or ways of working. We provide defaults to get started, but you can adapt existing capabilities or create fully custom ones to shape how your agents work and which tools they use.
|
|
320
13
|
|
|
321
|
-
|
|
322
|
-
memory plus durable receipts, and `oats okf read`/`refresh` for accepted knowledge.
|
|
323
|
-
After retirement, select the durable source descriptor from deployment context.
|
|
324
|
-
See [knowledge commands](docs/knowledge.md#inspection-and-operator-commands).
|
|
325
|
-
|
|
326
|
-
Package, config, and lock operations have deterministic CLI and stable JSON
|
|
327
|
-
forms. Do not hand-edit the lock or installed stores.
|
|
14
|
+
The [official marketplace](docs/official-marketplace.md) is the reviewed list of official packages; listing is not executable approval.
|
|
328
15
|
|
|
329
|
-
|
|
16
|
+
For example, a kernel expert, a UX expert and a customer-support expert can share capabilities for learning and coordination, while each has specific capabilities for its own area of expertise.
|
|
17
|
+
|
|
18
|
+
Through your capabilities, you remain in control of:
|
|
19
|
+
|
|
20
|
+
- Which specialists make up the team.
|
|
21
|
+
- Which models and harnesses their instances use.
|
|
22
|
+
- Where their knowledge lives and how it develops.
|
|
23
|
+
- Which skills, tools and workflows they receive.
|
|
24
|
+
- How they communicate and coordinate.
|
|
25
|
+
|
|
26
|
+
These choices determine how your team operates and where the value of its work accumulates. Keeping them under your control means your knowledge, workflows and team structure can outlast any particular model or platform.
|
|
27
|
+
|
|
28
|
+
OATS also provides **OATS Desktop: a free, fully integrated ADE—an agentic IDE**. It brings your team, its work and its agent sessions into one place, making day-to-day collaboration with your agents clearer and more pleasant.
|
|
29
|
+
|
|
30
|
+
OATS builds on tools you already use—**Git, GitHub or GitLab, and your preferred agent harnesses**. People can share agent definitions, knowledge and workflows across projects without an OATS account, a central OATS server or an OATS-hosted database. Selected integrations may use their own servers or databases; those are your choices, not a mandatory OATS service.
|
|
31
|
+
|
|
32
|
+
## Why OATS
|
|
33
|
+
|
|
34
|
+
OATS grew from a practical need: we wanted control over our agent setups—not just which model answered a prompt, but also:
|
|
35
|
+
|
|
36
|
+
- The knowledge our agents accumulated.
|
|
37
|
+
- The know-how and workflows they used.
|
|
38
|
+
- The ways they communicated and coordinated.
|
|
39
|
+
- The systems on which all of this depended.
|
|
40
|
+
|
|
41
|
+
As model providers expand into complete agent platforms, choosing a model can also mean adopting that provider’s memory system, tools, workflows and communication channels. We wanted those to remain separate choices.
|
|
42
|
+
|
|
43
|
+
**We believe machine intelligence should become a commodity:** available from different providers through open interfaces, including local models that individuals can run and control themselves.
|
|
44
|
+
|
|
45
|
+
Models will still differ. But changing one should not mean abandoning the expertise, knowledge and working practices you have built around it.
|
|
46
|
+
|
|
47
|
+
OATS is our attempt to make that world practical.
|
|
48
|
+
|
|
49
|
+
## Souls and instances
|
|
50
|
+
|
|
51
|
+
OATS separates an agent’s reusable specialisation from the particular work it is doing.
|
|
52
|
+
|
|
53
|
+
### A soul defines a kind of expert
|
|
54
|
+
|
|
55
|
+
A **soul** is a reusable, versioned agent definition. It establishes:
|
|
56
|
+
|
|
57
|
+
- Its expertise and responsibilities.
|
|
58
|
+
- Its boundaries and operating principles.
|
|
59
|
+
- Its capabilities and specialised skills.
|
|
60
|
+
- The knowledge it should consult.
|
|
61
|
+
|
|
62
|
+
A soul is not a model or a conversation. It is the definition from which working agents are created. A UX-expert soul, for example, might combine interaction-design principles, accessibility skills and access to accepted product knowledge.
|
|
63
|
+
|
|
64
|
+
### An instance does the work
|
|
65
|
+
|
|
66
|
+
An **instance** is one incarnation of a soul, with its own identity, assignment, working context and state. It runs through a **harness**—the agent application, such as Pi, Claude Code or Codex—using the selected model.
|
|
67
|
+
|
|
68
|
+
Instances can have different lifetimes:
|
|
69
|
+
|
|
70
|
+
- **Short-lived instances** handle bounded work. For example, we use ephemeral developer and reviewer instances to implement and review specific changes.
|
|
71
|
+
- **Long-running instances** carry continuity across an area of work. We plan, investigate and reason with instances of expertise souls that may remain useful across many tasks.
|
|
72
|
+
|
|
73
|
+
An instance is not necessarily one ticket or one chat session. It can become deeply familiar with a situation over time. Lifetime follows the work: a short-lived instance can produce valuable learning, while a long-running instance does not automatically become a new soul.
|
|
74
|
+
|
|
75
|
+
### One soul can support many developers
|
|
76
|
+
|
|
77
|
+
Several developers may each work with an instance of the same kernel-expert soul:
|
|
78
|
+
|
|
79
|
+
- One investigates execution behaviour.
|
|
80
|
+
- Another develops a capability integration.
|
|
81
|
+
- Another supports an ongoing upgrade.
|
|
82
|
+
|
|
83
|
+
They share a specialisation, but not an active mind. Each develops an understanding of its assignment and keeps track of its own unfinished work. Accepted findings can become useful to other instances without making their working contexts identical.
|
|
84
|
+
|
|
85
|
+
## Fundamental capabilities—and any others you need
|
|
86
|
+
|
|
87
|
+
Three capability areas provide the foundation for working as a team:
|
|
88
|
+
|
|
89
|
+
| Capability | What it provides |
|
|
90
|
+
|---|---|
|
|
91
|
+
| **Knowledge** | How agents consult knowledge, capture experience and retain useful learning. |
|
|
92
|
+
| **Messaging** | How agents become reachable and communicate with people and other agents. |
|
|
93
|
+
| **Tasks** | How work is assigned, tracked and coordinated. |
|
|
94
|
+
|
|
95
|
+
These responsibilities are distinct. A conversation is not automatically a task record, and a task record is not automatically knowledge.
|
|
96
|
+
|
|
97
|
+
They are **not the only capabilities you can define**. Additional capabilities can provide domain tools, specialised skills, research methods, review procedures or integrations with your systems.
|
|
98
|
+
|
|
99
|
+
A **skill** teaches a way of working. A capability can supply that skill together with instructions, tools and supporting automation. OATS composes the selected resources into an instance’s working environment when it is created.
|
|
100
|
+
|
|
101
|
+
### Common contracts, different implementations
|
|
102
|
+
|
|
103
|
+
The kernel supplies soul and instance identity, configuration, lifecycle, resource composition and execution approval. Models and harnesses remain user-selected execution choices; capabilities may declare requirements that a chosen setup must satisfy.
|
|
104
|
+
|
|
105
|
+
Capabilities supply the behaviour behind their contracts:
|
|
106
|
+
|
|
107
|
+
- A knowledge capability can choose its storage, reading strategy and learning workflow.
|
|
108
|
+
- A messaging capability can use a different communication service.
|
|
109
|
+
- A task capability can connect agents to the tracker or coordination model you prefer.
|
|
110
|
+
- Additional capabilities can extend a team without becoming mandatory parts of OATS.
|
|
111
|
+
|
|
112
|
+
A **package** distributes capabilities and their resources. Acquiring one does not automatically activate it or approve executable code. Provider independence does not mean every combination is compatible; missing requirements must be reported, not silently discarded.
|
|
113
|
+
|
|
114
|
+
## Our approach to knowledge and learning
|
|
115
|
+
|
|
116
|
+
The following is **our reference approach**, implemented through the official `oats.okf` knowledge capability. Other knowledge capabilities may adopt it, adapt it or use a different model.
|
|
117
|
+
|
|
118
|
+
We distinguish four kinds of value:
|
|
119
|
+
|
|
120
|
+
| Value | Where it belongs in our model |
|
|
121
|
+
|---|---|
|
|
122
|
+
| Reusable procedures and know-how | Skills and capabilities |
|
|
123
|
+
| Durable judgment and awareness of the larger picture | Accepted knowledge |
|
|
124
|
+
| A detailed understanding of the current problem | Instance context |
|
|
125
|
+
| Unfinished work and next steps | Instance state |
|
|
126
|
+
|
|
127
|
+
An experienced instance can have all four. We do not want to push them all into a permanent knowledge base.
|
|
128
|
+
|
|
129
|
+
### Save expertise, not a second description of the code
|
|
130
|
+
|
|
131
|
+
> **Knowledge is what makes an expert an expert in a subject or project. It is not a description of what lives in the code.**
|
|
132
|
+
|
|
133
|
+
Our promotion test asks:
|
|
134
|
+
|
|
135
|
+
1. Would an appropriate future instance act differently for knowing this?
|
|
136
|
+
2. Could it not have obtained this simply by reading the repository?
|
|
137
|
+
|
|
138
|
+
We preserve decisions and rationale, rejected alternatives, discoveries, research conclusions, design inspiration and maintained situational awareness. We do not duplicate code structure, file maps, ordinary task progress or information already implicit and quickly learnable from the repository.
|
|
139
|
+
|
|
140
|
+
For example, **how to run a release** belongs in a skill. **Why installed-artifact verification is necessary** can be a lesson. **Which release check is still running** belongs in working state.
|
|
141
|
+
|
|
142
|
+
Knowledge should improve judgment, not become a second source of increasingly stale project documentation.
|
|
143
|
+
|
|
144
|
+
## Our default: oats.okf
|
|
145
|
+
|
|
146
|
+
`oats.okf` uses **Open Knowledge Format**: readable Markdown concepts with metadata, navigation and history.
|
|
147
|
+
|
|
148
|
+
Our default model is **centralised and per soul**:
|
|
149
|
+
|
|
150
|
+
- A team selects a shared knowledge base.
|
|
151
|
+
- Each adopted soul has a stable knowledge home.
|
|
152
|
+
- Its instances consult accepted knowledge relevant to their work.
|
|
153
|
+
- Useful learning can benefit future instances of that soul.
|
|
154
|
+
- Other souls read or link to relevant concepts rather than duplicating them.
|
|
155
|
+
|
|
156
|
+
For example, several UX-expert instances can contribute learning to the same knowledge home while retaining their own investigations and working state. Adopting a public soul does not implicitly send private learning back to its publisher.
|
|
157
|
+
|
|
158
|
+
### How learning flows
|
|
159
|
+
|
|
160
|
+
1. **Instances work and capture evidence.**
|
|
161
|
+
2. **An independent harvester judges what is worth retaining.**
|
|
162
|
+
3. **Proposed knowledge is validated and delivered through the configured acceptance process.**
|
|
163
|
+
4. **Future instances can consult the accepted result.**
|
|
164
|
+
|
|
165
|
+
Ordinary working instances do not directly rewrite the accepted knowledge base. For Git-backed knowledge, delivery uses pull requests; an open PR is not yet accepted knowledge. Plain-directory storage has its own publication mechanism. A delivery receipt is not proof of human approval or that another instance has read the result.
|
|
166
|
+
|
|
167
|
+
The current capability requires explicit bindings and provisioning. The default model is not a claim that every setup step is automatic.
|
|
168
|
+
|
|
169
|
+
## Knowledge and learning, your way
|
|
170
|
+
|
|
171
|
+
The approach above is our default, not a requirement. **You can set up your own knowledge procedures and ways of working and learning.** OATS provides the contracts and a default implementation; you can adapt existing capabilities or write your own.
|
|
172
|
+
|
|
173
|
+
For example, you might want:
|
|
174
|
+
|
|
175
|
+
- **New instances to inherit accumulated expertise.** A new kernel-expert instance begins with relevant decisions and lessons from earlier instances.
|
|
176
|
+
- **Instances to develop their own specialisations.** Two UX-expert instances share a foundation, but one develops a deep understanding of checkout flows while another focuses on navigation.
|
|
177
|
+
- **Long-running instances to retain working understanding.** A customer-support instance carries its investigations, observations and unresolved questions across many tasks.
|
|
178
|
+
- **Selected learning to become shared knowledge.** Useful findings are reviewed and made available to other instances, while task-specific context stays with the instance that needs it.
|
|
179
|
+
|
|
180
|
+
Your knowledge capability determines what context an instance receives, how it builds on experience, and which learning is retained or shared. It can organise knowledge per soul, per topic or per project, centrally or alongside soul definitions, provided that it actually supports the chosen arrangement. Mutable knowledge must not be written into immutable captured source artifacts.
|
|
181
|
+
|
|
182
|
+
The same principle applies to messaging and tasks: **OATS provides the contracts; you choose how your team works through them.**
|
|
183
|
+
|
|
184
|
+
## Expertise can evolve
|
|
185
|
+
|
|
186
|
+
Per-soul knowledge does not have to become a permanent silo. Souls can grow their scope, transfer knowledge to a more appropriate home, merge or split into more specialised souls.
|
|
187
|
+
|
|
188
|
+
We call a deliberate split into new reusable specialisations **speciation**. An overall expert handling recurring UX work, for example, may provide evidence for a dedicated UX expert with its own skills and knowledge home. The overall expert can then consult that expertise rather than duplicate it.
|
|
189
|
+
|
|
190
|
+
These are changes to propose and review—not changes agents make to themselves automatically. A busy period or a large collection of notes is not enough on its own.
|
|
191
|
+
|
|
192
|
+
See **[Knowledge, instances and evolving expertise](docs/knowledge-theory.md)** for the detailed explanation of:
|
|
193
|
+
|
|
194
|
+
- Long-running instance expertise and working context.
|
|
195
|
+
- Per-soul and topic-based knowledge.
|
|
196
|
+
- Speciation, widening, merging and ownership changes.
|
|
197
|
+
- Harvesting, maintenance and acceptance.
|
|
198
|
+
- Context handoffs and cloning.
|
|
199
|
+
- Knowledge-capability contracts and their implementation boundaries.
|
|
200
|
+
|
|
201
|
+
## Getting started
|
|
202
|
+
|
|
203
|
+
Begin with a small team and a real piece of work:
|
|
204
|
+
|
|
205
|
+
1. Choose compatible models and harnesses.
|
|
206
|
+
2. Select the capabilities your team needs.
|
|
207
|
+
3. Define specialists with clear responsibilities.
|
|
208
|
+
4. Create instances for their assignments.
|
|
209
|
+
5. Verify that work, communication, learning and handoff behave as intended.
|
|
210
|
+
|
|
211
|
+
Start with the [first-team guide](docs/first-team.md) and the [release notes](docs/release-notes/) for the supported scope of your chosen versions.
|
|
212
|
+
|
|
213
|
+
Further documentation:
|
|
330
214
|
|
|
331
215
|
- [Souls and instances](docs/souls-and-instances.md)
|
|
332
216
|
- [Configuration](docs/configuration.md)
|
|
333
|
-
- [
|
|
334
|
-
- [
|
|
335
|
-
- [
|
|
336
|
-
- [
|
|
337
|
-
- [
|
|
338
|
-
- [Implementation](docs/implementation.md)
|
|
217
|
+
- [Capabilities](docs/capabilities.md) and [layer contracts](docs/layers.md)
|
|
218
|
+
- [Knowledge operations](docs/knowledge.md)
|
|
219
|
+
- [Knowledge, instances and evolving expertise](docs/knowledge-theory.md)
|
|
220
|
+
- [Packages](docs/packages.md)
|
|
221
|
+
- [Execution targets](docs/execution-targets.md)
|
|
339
222
|
- [OATS Desktop](docs/desktop.md)
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
npm test
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
`npm test` runs the kernel, record, and experimental suites. The Desktop
|
|
360
|
-
suites need their own dependencies; install them once and the same command
|
|
361
|
-
picks them up:
|
|
362
|
-
|
|
363
|
-
```bash
|
|
364
|
-
(cd packages/desktop && ELECTRON_SKIP_BINARY_DOWNLOAD=1 npm ci)
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
Pull requests run the same checks on Node 22 through
|
|
368
|
-
[Pull Request CI](.github/workflows/pull-request.yml): tests, project
|
|
369
|
-
validation, a package dry run, and a clean-room install smoke test. Keep
|
|
370
|
-
changes small and reviewable, add a test with every behavior change, and
|
|
371
|
-
describe the reachable defect in the commit message.
|
|
372
|
-
|
|
373
|
-
## Releases and versioning
|
|
374
|
-
|
|
375
|
-
OATS follows [semantic versioning](https://semver.org/). Each release is a
|
|
376
|
-
Git tag `vX.Y.Z` with notes in [`docs/release-notes/`](docs/release-notes/).
|
|
377
|
-
A release publishes `@awebai/oats` and `@awebai/oats-pi` to npm and attaches
|
|
378
|
-
the Desktop installers, `SHA256SUMS`, and build provenance to the matching
|
|
379
|
-
[GitHub Release](https://github.com/awebai/oats/releases). The same release
|
|
380
|
-
can be built, staged, and published without GitHub Actions through the
|
|
381
|
-
[runnerless release lane](docs/release-lane.md). Official packages are
|
|
382
|
-
versioned and tagged in their own repositories and pinned by the kernel's
|
|
383
|
-
catalog.
|
|
384
|
-
|
|
385
|
-
## Origins and acknowledgements
|
|
386
|
-
|
|
387
|
-
OATS began as **OAS (Open Agent Specialization)**, designed and written by
|
|
388
|
-
Josep (Pepe) Garcia-Reyero Sais. The architecture, the kernel, the package
|
|
389
|
-
engine, the Desktop, and the official packages are his work; OATS continues
|
|
390
|
-
it under its current name, and his authorship is preserved throughout this
|
|
391
|
-
repository's history.
|
|
392
|
-
|
|
393
|
-
OATS grew from the a2am team architecture and the LFX engineering vision for
|
|
394
|
-
agent-native engineering. It builds on open formats and conventions including
|
|
395
|
-
AGENTS.md, Agent Skills, and OKF.
|
|
396
|
-
|
|
397
|
-
## License
|
|
398
|
-
|
|
399
|
-
[MIT](LICENSE) © 2026 OATS Framework
|
|
400
|
-
|
|
401
|
-
Session backends and unattended launches are described in
|
|
402
|
-
[execution targets](docs/execution-targets.md). Claude Code and Codex retain normal
|
|
403
|
-
native context and permissions **alongside the complete resolved OATS instance home**:
|
|
404
|
-
skills, capabilities, instructions, task, metadata, work placement and ordinary
|
|
405
|
-
hooks/approvals are still supplied. Add `--yolo` or select `yolo: true` in configuration
|
|
406
|
-
only for an explicit user opt-in to bypass; unattended execution does not imply it.
|
|
407
|
-
Aweb owns shared event delivery; terminal transport alone does not enable a
|
|
408
|
-
messaging broker.
|
|
223
|
+
|
|
224
|
+
This README explains the framework and its direction. Advanced mechanisms such as automatic speciation and context cloning require their own implementation and verification; the architectural model is not a claim that every feature or capability combination already works. Alternative knowledge layouts require a compatible capability, not a change to an undocumented kernel switch.
|
|
225
|
+
|
|
226
|
+
## Contributing and releases
|
|
227
|
+
|
|
228
|
+
Source, issues and pull requests live at [awebai/oats](https://github.com/awebai/oats). See the [implementation guide](docs/implementation.md) for repository details and the [release lane](docs/release-lane.md) for artifact verification and publication.
|
|
229
|
+
|
|
230
|
+
Versioned releases publish the kernel, Pi bridge and Desktop installers. Check the [release notes](docs/release-notes/) before changing an existing deployment; installing software does not automatically migrate knowledge or reconfigure live agents.
|
|
231
|
+
|
|
232
|
+
## Origins and licence
|
|
233
|
+
|
|
234
|
+
OATS began as **OAS—Open Agent Specialization**, designed and written by Josep (Pepe) Garcia-Reyero Sais. The architecture, kernel, package engine, Desktop and official packages are his work; OATS continues it under its current name.
|
|
235
|
+
|
|
236
|
+
OATS grew from the a2am team architecture and the LFX engineering vision for agent-native engineering. It builds on open formats and conventions, including AGENTS.md, Agent Skills and Open Knowledge Format.
|
|
237
|
+
|
|
238
|
+
OATS is free and [MIT-licensed](LICENSE). Models and services selected by a deployment may have their own licences and costs.
|