@awebai/oats 0.25.9 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -6
- package/bin/oats.mjs +576 -1714
- package/capabilities/oats-authoring/oats-package.json +2 -2
- package/capabilities/oats-authoring/oats.json +2 -2
- package/capabilities/oats-authoring/skills/integration-authoring/SKILL.md +46 -25
- package/capabilities/oats-authoring/skills/soul-craft/SKILL.md +13 -6
- package/capabilities/oats-aweb/bin/oats-aweb.mjs +279 -93
- package/capabilities/oats-aweb/injects/aweb.md +7 -2
- package/capabilities/oats-aweb/lib/binding-wire.mjs +89 -13
- package/capabilities/oats-aweb/lib/captured-native.mjs +1 -1
- package/capabilities/oats-aweb/lib/grant-custody.mjs +38 -0
- package/capabilities/oats-aweb/oats.json +8 -4
- package/capabilities/oats-jira/bin/oats-jira.mjs +4 -4
- package/capabilities/oats-jira/oats.json +2 -2
- package/capabilities/oats-jira/skills/jira-tasks/SKILL.md +6 -3
- package/capabilities/oats-linear/bin/oats-linear-hook.mjs +6 -4
- package/capabilities/oats-linear/oats.json +2 -2
- package/capabilities/oats-linear/skills/linear-tasks/SKILL.md +6 -0
- package/capabilities/oats-review/oats.json +3 -2
- package/docs/capabilities.md +218 -47
- package/docs/capability-manifest.schema.json +13 -4
- package/docs/configuration.md +17 -5
- package/docs/conventions.md +16 -26
- package/docs/design/2026-09-08-expert-assisted-deployment-proposal.md +1 -1
- package/docs/design/2026-09-13-knowledge-and-memory-direction.md +3 -3
- package/docs/design/2026-09-14-portable-souls-and-git-workspaces.md +2 -2
- package/docs/design/2026-09-15-portable-souls-handoff.md +2 -2
- package/docs/design/2026-09-15-portable-souls-implementation.md +1 -1
- package/docs/design/2026-09-20-redesign-program-board.md +2 -2
- package/docs/design/2026-09-23-workspace-module-contracts.md +1 -1
- package/docs/design/2026-09-23-workspace-v2-implementation-plan.md +1 -1
- package/docs/design/2026-09-24-desktop-phase-f-boundary.md +34 -1
- package/docs/design/2026-09-24-phase-d-plan.md +57 -0
- package/docs/design/2026-09-25-teams-contract.md +226 -0
- package/docs/design/README.md +3 -3
- package/docs/design/launch-configurations.md +20 -16
- package/docs/design/operations-contract.md +27 -10
- package/docs/desktop-cli-api.md +537 -261
- package/docs/desktop-instance-start.md +1 -1
- package/docs/desktop.md +7 -13
- package/docs/execution-targets.md +16 -18
- package/docs/first-team.md +14 -17
- package/docs/implementation.md +28 -59
- package/docs/integrations.md +64 -33
- package/docs/knowledge-capability-authoring.md +1 -1
- package/docs/knowledge-reference/package-craft.md +10 -8
- package/docs/knowledge-theory.md +1 -1
- package/docs/knowledge.md +10 -11
- package/docs/layers.md +16 -17
- package/docs/oats-local.schema.json +29 -1
- package/docs/oats-membership.schema.json +5 -3
- package/docs/oats-package.schema.json +2 -2
- package/docs/oats-workspace.schema.json +1 -1
- package/docs/{official-marketplace.md → official-catalog.md} +15 -16
- package/docs/packages.md +75 -52
- package/docs/release-notes/v0.22.0.md +1 -1
- package/docs/release-notes/v0.23.1.md +1 -1
- package/docs/release-notes/v0.26.0.md +670 -0
- package/docs/schedules.md +48 -126
- package/docs/soul.schema.json +11 -4
- package/docs/souls-and-instances.md +56 -43
- package/docs/workspaces.md +80 -58
- package/injects/instance-boundary.md +1 -1
- package/injects/work-attached.md +1 -1
- package/injects/work-workspace.md +2 -2
- package/lib/{portable-files.mjs → bounded-read.mjs} +6 -6
- package/lib/{portable-values.mjs → canonical-json.mjs} +3 -12
- package/lib/capability-contract.mjs +110 -0
- package/lib/config-data.mjs +2 -2
- package/lib/core.mjs +700 -4824
- package/lib/digest.mjs +12 -0
- package/lib/instance-inspect.mjs +396 -0
- package/lib/instance-lifecycle.mjs +3 -4
- package/lib/instance-resolution.mjs +212 -26
- package/lib/instruction-composition.mjs +0 -20
- package/lib/materialize.mjs +6 -4
- package/lib/operator-dispatch.mjs +33 -13
- package/lib/packages.mjs +25 -190
- package/lib/provider-binding.mjs +4 -2
- package/lib/provider-reasons.mjs +3 -68
- package/lib/resolve.mjs +204 -68
- package/lib/schedule.mjs +97 -272
- package/lib/servers.mjs +13 -13
- package/lib/{portable-shape.mjs → shape.mjs} +4 -3
- package/lib/tree-copy.mjs +44 -0
- package/lib/workspace.mjs +125 -20
- package/package-catalog.json +6 -6
- package/package.json +1 -1
- package/skills/integration-authoring/SKILL.md +48 -40
- package/skills/oats-getting-started/SKILL.md +105 -110
- package/skills/oats-support/SKILL.md +2 -2
- package/skills/soul-craft/SKILL.md +13 -6
- package/bin/oats-pi-sdk-host.mjs +0 -17
- package/docs/2026-09-03-architecture-proposal.md +0 -642
- package/docs/artifact-approvals.schema.json +0 -7
- package/docs/captured-invocation-context.schema.json +0 -7
- package/docs/captured-resolution.schema.json +0 -7
- package/docs/design/package-engine-contract.md +0 -813
- package/docs/design/package-runtime-api.md +0 -588
- package/docs/desktop-succession.md +0 -57
- package/docs/execution-capsule.schema.json +0 -108
- package/docs/first-team-demo.md +0 -92
- package/docs/knowledge-migration.md +0 -147
- package/docs/migration-from-oas.md +0 -103
- package/docs/oats-config.schema.json +0 -172
- package/docs/oats-lock-v3.schema.json +0 -7
- package/docs/oats-lock.schema.json +0 -175
- package/docs/operating-team-migration.md +0 -470
- package/docs/portable.schema.json +0 -2512
- package/docs/provider-check-input.schema.json +0 -7
- package/docs/rebuild-to-v2.md +0 -511
- package/docs/workspace-adoption.md +0 -74
- package/injects/framework-workspace.md +0 -7
- package/injects/local-soul.md +0 -19
- package/injects/oats-portable.md +0 -20
- package/injects/oats.md +0 -11
- package/injects/portable-instance-boundary.md +0 -39
- package/injects/portable-work-directory.md +0 -29
- package/lib/artifact-approvals.mjs +0 -120
- package/lib/artifact-tree.mjs +0 -141
- package/lib/capability-artifacts.mjs +0 -179
- package/lib/capability-execution.mjs +0 -15
- package/lib/capability-inputs.mjs +0 -39
- package/lib/capability-provenance.mjs +0 -231
- package/lib/captured-action-shape.mjs +0 -21
- package/lib/captured-admission-shape.mjs +0 -20
- package/lib/captured-binding-file.mjs +0 -36
- package/lib/captured-dispatch.mjs +0 -66
- package/lib/captured-instance-index.mjs +0 -277
- package/lib/captured-invocation-context.mjs +0 -130
- package/lib/captured-launch-request.mjs +0 -66
- package/lib/captured-operation-process.mjs +0 -15
- package/lib/captured-pi-custody.mjs +0 -29
- package/lib/captured-pi-host.mjs +0 -167
- package/lib/captured-pi-outcome.mjs +0 -172
- package/lib/captured-resolutions.mjs +0 -275
- package/lib/captured-scaffold.mjs +0 -87
- package/lib/captured-selector.mjs +0 -28
- package/lib/captured-session-backend.mjs +0 -52
- package/lib/captured-source-receipt-file.mjs +0 -72
- package/lib/helper-injection-policy.mjs +0 -104
- package/lib/legacy-lock-codec.mjs +0 -106
- package/lib/manifest-settings.mjs +0 -84
- package/lib/package-closure.mjs +0 -48
- package/lib/package-materialization.mjs +0 -83
- package/lib/pi-sdk-host.mjs +0 -229
- package/lib/portable-artifacts.mjs +0 -115
- package/lib/portable-choices.mjs +0 -82
- package/lib/portable-composition.mjs +0 -136
- package/lib/portable-digest.mjs +0 -105
- package/lib/portable-identity.mjs +0 -40
- package/lib/portable-lock.mjs +0 -117
- package/lib/portable-onboarding-request.mjs +0 -49
- package/lib/portable-onboarding.mjs +0 -256
- package/lib/portable-package-preparation.mjs +0 -188
- package/lib/portable-policy.mjs +0 -44
- package/lib/portable-soul.mjs +0 -42
- package/lib/portable-state.mjs +0 -80
- package/lib/prepare-composition.mjs +0 -170
- package/lib/prepared-bindings.mjs +0 -92
- package/lib/prepared-resources.mjs +0 -127
- package/lib/provider-binding-broker.mjs +0 -65
- package/lib/provider-binding-wire.mjs +0 -116
- package/lib/readiness.mjs +0 -225
- package/lib/repository-observation.mjs +0 -226
- package/lib/resolution-shape.mjs +0 -393
- package/lib/schedule-capsule.mjs +0 -206
- package/lib/soul-constraints.mjs +0 -40
- package/lib/source-projection.mjs +0 -84
- package/lib/source-spec.mjs +0 -189
- package/lib/workspace-definition.mjs +0 -126
- package/lib/workspace-discovery.mjs +0 -146
- package/skills/oats/SKILL.md +0 -162
- package/skills/oats-config/SKILL.md +0 -164
- package/skills/oats-packages/SKILL.md +0 -184
- package/skills/oats-portable/SKILL.md +0 -115
- package/skills/oats-portable-artifacts/SKILL.md +0 -63
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oats-getting-started
|
|
3
3
|
description: >-
|
|
4
|
-
How to
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
How to start with OATS (Open Agent Team Specification) from nothing — install
|
|
5
|
+
the CLI and pi adapter, decide which repository hosts the organisation's
|
|
6
|
+
workspace, write the three shared declarations (oats-workspace.yaml,
|
|
7
|
+
oats-membership.yaml, souls/<name>/soul.yaml), realize the workspace on this
|
|
8
|
+
machine with `oats onboard` and spawn the first soul. Use
|
|
9
|
+
for "get started with OATS", "set up/install/adopt OATS", "create my first
|
|
10
|
+
agent", or "how do I start using OATS".
|
|
9
11
|
---
|
|
10
12
|
|
|
11
13
|
# Getting started with OATS
|
|
12
14
|
|
|
13
|
-
OATS gives
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
OATS gives an organisation durable **souls** (role definitions kept in Git),
|
|
16
|
+
disposable **instances** (a soul at work, in its own home) and **capabilities**
|
|
17
|
+
(skills, instructions and hooks copied whole into each instance at spawn). One
|
|
18
|
+
**workspace** per organisation lists the repositories that belong to it. Do not
|
|
19
|
+
run setup blindly: explain each decision and ask before writing a file,
|
|
20
|
+
declaring a package or spawning.
|
|
21
|
+
|
|
22
|
+
This skill is the one pre-workspace bootstrap. Once the first instance exists,
|
|
23
|
+
the `oats.setup` capability's skills (and the `oats-operator-expert` soul, where
|
|
24
|
+
the workspace offers it) carry the rest; spawned instances get their own skills.
|
|
16
25
|
|
|
17
26
|
## 1. Install
|
|
18
27
|
|
|
@@ -21,139 +30,125 @@ npm install -g @awebai/oats
|
|
|
21
30
|
pi install npm:@awebai/oats-pi
|
|
22
31
|
```
|
|
23
32
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
isolation needs the kernel's launch flags and the changed adapter's
|
|
27
|
-
instance-only discovery. Reload pi after installing or upgrading the adapter.
|
|
28
|
-
|
|
29
|
-
This skill is the one pre-workspace ambient bootstrap. Spawned instances
|
|
30
|
-
receive exact local skills.
|
|
31
|
-
|
|
32
|
-
## 2. Choose scope
|
|
33
|
-
|
|
34
|
-
`oats-config.yaml` can live at:
|
|
33
|
+
Install matching versions and upgrade both together (`oats update`). Reload pi
|
|
34
|
+
after installing or upgrading the adapter. Check with `oats version`.
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
- workspace: shared multi-repo policy; or
|
|
38
|
-
- repository: repo-specific policy.
|
|
36
|
+
## 2. Decide where the workspace is hosted — first
|
|
39
37
|
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
The workspace file names every member repository, so whoever can read it sees
|
|
39
|
+
the member list. Ask:
|
|
42
40
|
|
|
43
|
-
|
|
41
|
+
- **Does the organisation already have an OATS workspace?** Then skip to step 4
|
|
42
|
+
with its repository reference.
|
|
43
|
+
- **Is any repository that will join private?** Then the workspace file lives
|
|
44
|
+
in a private repository that is not itself a public member (a dedicated
|
|
45
|
+
`<org>/workspace` repository is the honest shape). Otherwise any member,
|
|
46
|
+
often a dedicated `agents` repository, can host it.
|
|
44
47
|
|
|
45
|
-
|
|
46
|
-
|
|
48
|
+
Every member runs its capabilities' hooks on every operator's machine, gated
|
|
49
|
+
only by membership. In a mixed public/private organisation keep executable
|
|
50
|
+
capabilities in packages or private members, and only souls in public members.
|
|
47
51
|
|
|
48
|
-
|
|
49
|
-
|---|---|---|---|
|
|
50
|
-
| knowledge | `oats.okf` | soul OKF bundle, instance memory, harvest | nothing |
|
|
51
|
-
| messaging | `oats.aweb` | instance identity and team messaging | `aw` CLI |
|
|
52
|
-
| tasks | none | choose Jira, Linear, or another integration | provider-specific |
|
|
52
|
+
## 3. Write the shared declarations (in Git, reviewed like code)
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
choices: disable messaging for a solo repo; choose `oats.linear`/`oats.jira` for
|
|
56
|
-
tasks; use `--raw` for all layers off. Official integrations are acquired like
|
|
57
|
-
any other package; `oats init` acquires the selected ones into this scope's
|
|
58
|
-
installed/ store (locked). Executable surfaces (like OKF's harvest) need
|
|
59
|
-
`oats trust` before use — acquisition never grants executable trust. In an
|
|
60
|
-
interactive terminal with no layer flags, bare `oats init` prompts per layer;
|
|
61
|
-
through an agent, always pass explicit flags.
|
|
54
|
+
In the host repository, `oats-workspace.yaml`:
|
|
62
55
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
oats
|
|
76
|
-
oats
|
|
77
|
-
oats init --raw --knowledge oats.okf --no-tmux-mouse
|
|
78
|
-
oats init --tasks oats.linear --tmux-mouse
|
|
56
|
+
```yaml
|
|
57
|
+
schemaVersion: 2
|
|
58
|
+
name: acme
|
|
59
|
+
members:
|
|
60
|
+
- git:github.com/acme/agents # the host is a member too
|
|
61
|
+
- git:github.com/acme/platform
|
|
62
|
+
packages:
|
|
63
|
+
oats.framework: v1.1.3 # bare versions resolve through the official catalog
|
|
64
|
+
oats.okf: v2.1.5
|
|
65
|
+
teams:
|
|
66
|
+
global: { description: Org-wide souls }
|
|
67
|
+
defaults:
|
|
68
|
+
capabilities: { oats.core: { from: package } }
|
|
69
|
+
knowledge: { oats.okf: { from: package } }
|
|
79
70
|
```
|
|
80
71
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
72
|
+
Take the current package versions from the official catalog
|
|
73
|
+
(`package-catalog.json` in the OATS repository); ask which slots the user wants
|
|
74
|
+
filled (knowledge, messaging, tasks) instead of copying the example. No absolute
|
|
75
|
+
paths, accounts or team ids go in this file.
|
|
85
76
|
|
|
86
|
-
|
|
87
|
-
|
|
77
|
+
Declaring a package in `packages:` is the decision to trust it: its commands
|
|
78
|
+
and hooks run on every machine that spawns a soul using it. Show the user what
|
|
79
|
+
each package runs (its capability manifests' `commands` and `hooks`) before
|
|
80
|
+
adding its pin.
|
|
88
81
|
|
|
89
|
-
|
|
82
|
+
In **every** member repository, including the host, `oats-membership.yaml`:
|
|
90
83
|
|
|
91
|
-
|
|
84
|
+
```yaml
|
|
85
|
+
schemaVersion: 2
|
|
86
|
+
workspace: git:github.com/acme/agents
|
|
87
|
+
team: global
|
|
88
|
+
```
|
|
92
89
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
- one soul.
|
|
90
|
+
Membership is reciprocal: the workspace lists the repository and the
|
|
91
|
+
repository names the workspace back. Neither alone is membership.
|
|
96
92
|
|
|
97
|
-
|
|
93
|
+
A soul lives at `souls/<name>/` in a member repository: `soul.yaml`,
|
|
94
|
+
`AGENTS.md` (its canonical instructions) and `CLAUDE.md -> AGENTS.md`.
|
|
98
95
|
|
|
99
96
|
```yaml
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
additive:
|
|
105
|
-
vendor.code-review:
|
|
106
|
-
from: installed
|
|
107
|
-
agent-types:
|
|
108
|
-
developers: true
|
|
97
|
+
schemaVersion: 2
|
|
98
|
+
name: backend-expert
|
|
99
|
+
description: Owns backend architecture and implementation.
|
|
100
|
+
work: worktree # worktree | checkout | directory | workspace
|
|
109
101
|
```
|
|
110
102
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
103
|
+
A soul says where each extra capability comes from (`{ from: package }`,
|
|
104
|
+
`{ from: here }` or `{ from: <member repo key> }`), never a version. A soul
|
|
105
|
+
whose knowledge slot is filled by `oats.okf` also needs `okf.json` beside
|
|
106
|
+
`soul.yaml`; `docs/knowledge.md` in the OATS repository shows its shape.
|
|
107
|
+
Commit and push; OATS reads members over their remotes, not from local clones.
|
|
108
|
+
|
|
109
|
+
## 4. Realize the workspace on this machine
|
|
110
|
+
|
|
111
|
+
Ask the user **which directory** holds this machine's deployment — usually the
|
|
112
|
+
folder that already holds their clones. There is no required name.
|
|
115
113
|
|
|
116
114
|
```bash
|
|
117
|
-
oats
|
|
118
|
-
oats trust vendor.code-review --dir /path/to/workspace # approve executable surfaces
|
|
119
|
-
oats use vendor.code-review --type developers --dir /path/to/workspace
|
|
115
|
+
oats onboard <dir> --workspace git:github.com/acme/agents
|
|
120
116
|
```
|
|
121
117
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
requirements, package diagnosis) belongs to the `oats-packages` skill — part
|
|
126
|
-
of the kernel baseline inside spawned instances; in this pre-workspace
|
|
127
|
-
context use docs/packages.md and the top-level `oats help` output.
|
|
118
|
+
It writes `<dir>/oats-local.yaml` (the one per-machine file, never committed)
|
|
119
|
+
and `agents/`, confirms each member, resolves and locks the packages, and prints
|
|
120
|
+
the next steps. Fix any member that is not confirmed (`oats workspace status` says why) before going on.
|
|
128
121
|
|
|
129
|
-
|
|
122
|
+
Host-owned settings a package asks for (absolute paths, state directories) go
|
|
123
|
+
under `settings:` in `oats-local.yaml`, never in the workspace file. For
|
|
124
|
+
`oats.okf` that is `bindings-file` and `state-dir`; its own skill explains the
|
|
125
|
+
bindings file.
|
|
126
|
+
|
|
127
|
+
## 5. Sync after any change
|
|
130
128
|
|
|
131
129
|
```bash
|
|
132
|
-
oats
|
|
130
|
+
oats sync --dir <dir> # resolve every pin to a commit, fetch, verify integrity, write oats-lock.json
|
|
133
131
|
```
|
|
134
132
|
|
|
135
|
-
|
|
136
|
-
|
|
133
|
+
Run it after any change to the workspace file. It asks nothing; the lock pins
|
|
134
|
+
each package to an exact commit and integrity, and content that no longer
|
|
135
|
+
matches is refused (`E_PACKAGE_INTEGRITY`). Member capabilities come from
|
|
136
|
+
membership.
|
|
137
|
+
|
|
138
|
+
## 6. Spawn the first soul
|
|
137
139
|
|
|
138
|
-
|
|
140
|
+
A soul with `work: worktree | checkout` needs a clone of its repository at
|
|
141
|
+
`<dir>/<repo name>` (or named in `oats-local.yaml` `clones:`).
|
|
139
142
|
|
|
140
143
|
```bash
|
|
141
|
-
|
|
142
|
-
oats
|
|
143
|
-
# Optional: --type <agent-type> joins a declared family so typed config targets apply.
|
|
144
|
-
# Edit agents/backend-expert/soul/AGENTS.md: durable role, boundaries, workflow.
|
|
145
|
-
oats doctor . --soul backend-expert
|
|
144
|
+
oats souls --dir <dir> # what the workspace offers, with origin and team
|
|
145
|
+
oats spawn backend-expert --preview # modules, commits, merged provider settings — nothing created
|
|
146
146
|
oats spawn backend-expert --task "First concrete task"
|
|
147
147
|
oats status
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
For operations load the `oats` skill; for local deployment policy and
|
|
156
|
-
config-template adoption use `oats-config`; package acquisition/locks/trust beyond the
|
|
157
|
-
bootstrap above belong to `oats-packages` (kernel baseline inside spawned
|
|
158
|
-
instances); for custom layer/package work use `integration-authoring`; for
|
|
159
|
-
deep architecture or bugs use `oats-support`.
|
|
150
|
+
Create and spawn only when asked. After the first spawn, load the `oats.setup`
|
|
151
|
+
skills for the rest of the deployment (messaging, more souls, rebuilds). For
|
|
152
|
+
custom capabilities and integrations, use `integration-authoring`; for deep
|
|
153
|
+
architecture questions or bugs, use `oats-support`. The model in full is
|
|
154
|
+
`docs/workspaces.md` in the OATS repository.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: oats-support
|
|
3
3
|
description: >-
|
|
4
4
|
Route deep OATS framework questions to the framework's own expert agent.
|
|
5
|
-
Use when a user asks how OATS works beyond the basics in the oats skill, why
|
|
5
|
+
Use when a user asks how OATS works beyond the basics in the oats-operate skill, why
|
|
6
6
|
the framework behaves a certain way, wants framework changes or roadmap
|
|
7
7
|
context, or hits framework bugs — the answer is to instantiate the
|
|
8
8
|
oats-expert soul from the OATS framework repo and delegate. Triggers: "ask
|
|
@@ -74,6 +74,6 @@ harvests the instance's notes back into the expert's soul.
|
|
|
74
74
|
## Scope note
|
|
75
75
|
|
|
76
76
|
Quick questions (home layout, roster, lifecycle, doctor) are already
|
|
77
|
-
answered by the **oats** skill — use that first. Delegate to the expert for
|
|
77
|
+
answered by the **oats-operate** skill (the `oats.core` capability) — use that first. Delegate to the expert for
|
|
78
78
|
architecture, design rationale, roadmap, and anything you would otherwise
|
|
79
79
|
guess about.
|
|
@@ -28,7 +28,7 @@ real CLAUDE.md file diverging from AGENTS.md, that's a defect: merge and relink)
|
|
|
28
28
|
|---|---|---|
|
|
29
29
|
| **AGENTS.md** | always | Role, boundaries, the default workflow, memory pointers — only what applies to *every* session |
|
|
30
30
|
| **skills/** | on demand (description match) | Domain workflows, repeatable procedures ("how") — see `skill-craft` |
|
|
31
|
-
| **knowledge/** | on demand (index-first) | Facts, decisions, lessons ("what/why") — format per the knowledge
|
|
31
|
+
| **knowledge/** | on demand (index-first) | Facts, decisions, lessons ("what/why") — format per the knowledge capability (default okf) |
|
|
32
32
|
|
|
33
33
|
The test for every AGENTS.md line: **"would removing this cause mistakes in
|
|
34
34
|
most sessions?"** No → move it to a skill or a knowledge concept, or cut it.
|
|
@@ -53,7 +53,7 @@ Structure that works (keep the whole thing short — a screen or two):
|
|
|
53
53
|
"run the tests").
|
|
54
54
|
4. **Memory pointers.** Where its knowledge and state live (knowledge base
|
|
55
55
|
index, STATE.md discipline). Point, don't duplicate — the protocol lives
|
|
56
|
-
with your knowledge
|
|
56
|
+
with your knowledge capability (default okf: the memory-harvest skill).
|
|
57
57
|
5. **Escalation.** When to stop and ask the human or coordinator: the
|
|
58
58
|
human-gate triggers (security, authz, migrations, contract breaks),
|
|
59
59
|
plus "report to your spawner, don't self-fix" for infrastructure faults.
|
|
@@ -73,10 +73,17 @@ Style rules (from the agents.md standard + field experience):
|
|
|
73
73
|
|
|
74
74
|
## soul.yaml
|
|
75
75
|
|
|
76
|
-
Keep honest: `
|
|
77
|
-
checkout for reviewers/coordinators
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
Keep honest: `description` (one line; shows in rosters and pickers), `work`
|
|
77
|
+
(`worktree` for builders, `checkout` for reviewers/coordinators, `directory`
|
|
78
|
+
or `workspace` where the role needs them), and the capabilities the role
|
|
79
|
+
actually uses (`capabilities: { <cap>: { from: package | here | <repo key> } }`,
|
|
80
|
+
plus `knowledge` / `messaging` / `tasks` slots; `none` empties one). The
|
|
81
|
+
soul lives in its member repository, which is also what it works on.
|
|
82
|
+
|
|
83
|
+
Runtime, model and permission bypass are not soul fields: they are chosen at
|
|
84
|
+
spawn (`--runtime`, `--model`, `--yolo`) or by a host's named launch
|
|
85
|
+
configuration, so the same soul runs on any harness a host provides. Check a
|
|
86
|
+
soul with `oats spawn <soul> --preview` before committing it.
|
|
80
87
|
|
|
81
88
|
## Maintaining a soul
|
|
82
89
|
|
package/bin/oats-pi-sdk-host.mjs
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/** Explicit kernel-owned print adapter; not an alternate interpretation of Pi CLI. */
|
|
3
|
-
import { recordCapturedPiExit, runCapturedPiSdkHost } from "../lib/captured-pi-host.mjs";
|
|
4
|
-
|
|
5
|
-
try {
|
|
6
|
-
const argv = process.argv.slice(2);
|
|
7
|
-
process.exitCode = argv[0] === "--oats-pi-record-exit" ? recordCapturedPiExit(argv) : await runCapturedPiSdkHost(argv);
|
|
8
|
-
} catch (error) {
|
|
9
|
-
// Never echo arbitrary SDK/helper/provider error objects: those can contain
|
|
10
|
-
// native auth material. Native print mode owns its ordinary safe diagnostics.
|
|
11
|
-
const known = new Set(["E_PI_HOST_ARGS", "E_PI_HOST_SELECTION", "E_PI_HOST_MODEL", "E_PI_HOST_TASK", "E_PI_HOST_SDK", "E_PI_HOST_CURRICULUM", "E_PI_HOST_HISTORY", "E_PI_HOST_CUSTODY", "E_PI_HOST_RECORD_UNAVAILABLE", "E_PI_HOST_OUTCOME"]);
|
|
12
|
-
const code = known.has(error?.code) ? error.code : "E_PI_HOST_FAILED";
|
|
13
|
-
console.error(process.argv[2] === "--oats-pi-record-exit"
|
|
14
|
-
? `${code}: captured Pi process observation refused or failed; completion evidence remains held`
|
|
15
|
-
: `${code}: captured Pi host refused or failed; use the selected harness's native setup for model/auth prerequisites`);
|
|
16
|
-
process.exitCode = 1;
|
|
17
|
-
}
|