@awebai/oats 0.29.4 → 0.30.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 +12 -6
- package/bin/oats.mjs +194 -50
- package/capabilities/oats-aweb/bin/oats-aweb.mjs +538 -204
- package/capabilities/oats-aweb/injects/aweb.md +1 -1
- package/capabilities/oats-aweb/lib/binding-wire.mjs +31 -22
- package/capabilities/oats-aweb/oats.json +5 -12
- package/capabilities/oats-aweb/skills/VENDORED.md +4 -4
- package/capabilities/oats-aweb/skills/aweb-team-membership/SKILL.md +1 -1
- package/capabilities/oats-aweb/skills/oats-aweb/SKILL.md +83 -13
- package/capabilities/oats-code-review/injects/reviewer.md +26 -0
- package/capabilities/oats-code-review/oats.json +16 -0
- package/capabilities/oats-code-review/skills/adversarial-review/SKILL.md +66 -0
- package/capabilities/oats-code-review/skills/review-dev-docs/SKILL.md +30 -0
- package/capabilities/oats-code-review/skills/security-review/SKILL.md +56 -0
- package/capabilities/oats-code-review/skills/simplification-review/SKILL.md +34 -0
- package/capabilities/oats-developer/injects/developer.md +38 -0
- package/capabilities/oats-developer/oats.json +17 -0
- package/capabilities/oats-developer/skills/execution-strategy/SKILL.md +43 -0
- package/capabilities/oats-developer/skills/maintain-dev-docs/SKILL.md +47 -0
- package/capabilities/oats-developer/skills/run-the-review-loop/SKILL.md +65 -0
- package/capabilities/oats-developer/skills/understand-the-spec/SKILL.md +37 -0
- package/capabilities/oats-developer/skills/worktrees/SKILL.md +36 -0
- package/capabilities/oats-engineering-expert/injects/expert.md +37 -0
- package/capabilities/oats-engineering-expert/oats.json +17 -0
- package/capabilities/oats-engineering-expert/skills/coordinate-developers/SKILL.md +37 -0
- package/capabilities/oats-engineering-expert/skills/coordinate-experts/SKILL.md +52 -0
- package/capabilities/oats-engineering-expert/skills/land-your-prs/SKILL.md +50 -0
- package/capabilities/oats-engineering-expert/skills/plan-and-spec/SKILL.md +53 -0
- package/capabilities/oats-engineering-expert/skills/verify-developer-work/SKILL.md +49 -0
- package/capabilities/oats-okf/bin/oats-okf.mjs +8 -4
- package/capabilities/oats-okf/lib/binding-wire.mjs +47 -15
- package/capabilities/oats-okf/lib/inspection.mjs +26 -7
- package/capabilities/oats-okf/lib/sources.mjs +16 -2
- package/capabilities/oats-okf/lib/worker.mjs +5 -16
- package/capabilities/oats-okf/oats.json +6 -3
- package/capabilities/oats-okf-harvest/bin/okf-harvest.mjs +2 -2
- package/capabilities/oats-okf-harvest/oats.json +3 -3
- package/capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md +6 -6
- package/capabilities/oats-okf-maintenance/bin/okf-maintenance.mjs +2 -2
- package/capabilities/oats-okf-maintenance/injects/maintainer.md +1 -1
- package/capabilities/oats-okf-maintenance/oats.json +2 -2
- package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +1 -1
- package/capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md +11 -23
- package/capabilities/oats-workspace-experts/injects/oats-experts.md +26 -0
- package/capabilities/oats-workspace-experts/oats.json +9 -0
- package/docs/capabilities.md +160 -171
- package/docs/capability-manifest.schema.json +6 -11
- package/docs/configuration.md +213 -64
- package/docs/design/2026-09-16-knowledge-capability-contract.md +36 -50
- package/docs/design/2026-09-23-workspace-module-contracts.md +377 -544
- package/docs/design/2026-09-26-okf-knowledge-operations.md +132 -357
- package/docs/design/2026-09-27-team-model-v2.md +97 -117
- package/docs/design/2026-09-28-automations-trust.md +38 -0
- package/docs/design/2026-09-28-soul-launch-preference.md +63 -0
- package/docs/design/HISTORY.md +65 -0
- package/docs/design/README.md +23 -54
- package/docs/desktop-cli-api.md +1787 -1777
- package/docs/desktop.md +30 -91
- package/docs/execution-targets.md +146 -292
- package/docs/first-team.md +31 -17
- package/docs/implementation.md +76 -288
- package/docs/integrations.md +118 -320
- package/docs/knowledge-capability-authoring.md +25 -52
- package/docs/knowledge-reference/acceptance.md +3 -3
- package/docs/knowledge-reference/adoption.md +1 -1
- package/docs/knowledge-reference/harvester.md +2 -2
- package/docs/knowledge-reference/package-craft.md +3 -3
- package/docs/knowledge-reference/provider-mapping.md +3 -6
- package/docs/knowledge-reference/reader-capture.md +3 -3
- package/docs/knowledge-theory.md +62 -166
- package/docs/knowledge.md +225 -404
- package/docs/layers.md +42 -97
- package/docs/oats-local.schema.json +58 -5
- package/docs/oats-membership.schema.json +1 -8
- package/docs/oats-package.schema.json +5 -5
- package/docs/oats-workspace.schema.json +8 -22
- package/docs/official-catalog.md +25 -28
- package/docs/packages.md +45 -63
- package/docs/plans/0.30-close-out.md +61 -0
- package/docs/release-lane.md +77 -0
- package/docs/release-notes/oats-framework-v1.1.3.md +10 -8
- package/docs/release-notes/v0.19.0.md +48 -147
- package/docs/release-notes/v0.19.1.md +2 -3
- package/docs/release-notes/v0.19.3.md +2 -15
- package/docs/release-notes/v0.20.0.md +0 -15
- package/docs/release-notes/v0.22.0.md +71 -138
- package/docs/release-notes/v0.22.1.md +42 -90
- package/docs/release-notes/v0.22.10.md +1 -1
- package/docs/release-notes/v0.22.11.md +1 -47
- package/docs/release-notes/v0.22.12.md +4 -13
- package/docs/release-notes/v0.22.13.md +1 -42
- package/docs/release-notes/v0.22.14.md +3 -11
- package/docs/release-notes/v0.22.15.md +1 -46
- package/docs/release-notes/v0.22.16.md +6 -8
- package/docs/release-notes/v0.22.18.md +1 -99
- package/docs/release-notes/v0.22.19.md +3 -14
- package/docs/release-notes/v0.22.2.md +6 -15
- package/docs/release-notes/v0.22.3.md +0 -1
- package/docs/release-notes/v0.22.4.md +1 -14
- package/docs/release-notes/v0.22.5.md +2 -12
- package/docs/release-notes/v0.22.6.md +0 -3
- package/docs/release-notes/v0.23.0.md +9 -25
- package/docs/release-notes/v0.23.1.md +9 -25
- package/docs/release-notes/v0.23.2.md +2 -4
- package/docs/release-notes/v0.24.0.md +56 -97
- package/docs/release-notes/v0.24.1.md +7 -11
- package/docs/release-notes/v0.24.10.md +34 -45
- package/docs/release-notes/v0.24.11.md +12 -20
- package/docs/release-notes/v0.24.12.md +35 -48
- package/docs/release-notes/v0.24.13.md +34 -41
- package/docs/release-notes/v0.24.2.md +9 -13
- package/docs/release-notes/v0.24.3.md +7 -11
- package/docs/release-notes/v0.24.4.md +6 -6
- package/docs/release-notes/v0.24.5.md +6 -10
- package/docs/release-notes/v0.24.6.md +2 -5
- package/docs/release-notes/v0.24.7.md +46 -75
- package/docs/release-notes/v0.24.8.md +58 -96
- package/docs/release-notes/v0.24.9.md +38 -54
- package/docs/release-notes/v0.25.0.md +59 -76
- package/docs/release-notes/v0.25.1.md +57 -81
- package/docs/release-notes/v0.25.2.md +51 -70
- package/docs/release-notes/v0.25.3.md +11 -13
- package/docs/release-notes/v0.25.4.md +9 -13
- package/docs/release-notes/v0.25.5.md +3 -5
- package/docs/release-notes/v0.25.6.md +20 -29
- package/docs/release-notes/v0.25.7.md +5 -7
- package/docs/release-notes/v0.25.8.md +26 -39
- package/docs/release-notes/v0.26.0.md +175 -646
- package/docs/release-notes/v0.27.0.md +4 -5
- package/docs/release-notes/v0.27.1.md +4 -6
- package/docs/release-notes/v0.27.2.md +1 -1
- package/docs/release-notes/v0.28.0.md +57 -124
- package/docs/release-notes/v0.29.0.md +89 -208
- package/docs/release-notes/v0.29.1.md +1 -1
- package/docs/release-notes/v0.29.2.md +3 -4
- package/docs/release-notes/v0.30.0.md +205 -0
- package/docs/schedules.md +280 -363
- package/docs/servers.md +99 -117
- package/docs/soul.schema.json +2 -9
- package/docs/souls-and-instances.md +145 -158
- package/docs/workspaces.md +132 -215
- package/lib/automations.mjs +21 -6
- package/lib/core.mjs +226 -74
- package/lib/instance-events.mjs +1 -1
- package/lib/instance-inspect.mjs +109 -34
- package/lib/instance-lifecycle.mjs +14 -1
- package/lib/instance-resolution.mjs +26 -27
- package/lib/launch-preference.mjs +87 -0
- package/lib/materialize.mjs +3 -3
- package/lib/resolve.mjs +29 -87
- package/lib/schedule.mjs +1 -1
- package/lib/teams-verbs.mjs +195 -0
- package/lib/teams.mjs +190 -0
- package/lib/triggers.mjs +2 -2
- package/lib/workspace.mjs +54 -147
- package/package-catalog.json +9 -15
- package/package.json +1 -1
- package/skills/oats-getting-started/SKILL.md +25 -13
- package/capabilities/oats-review/injects/review.md +0 -69
- package/capabilities/oats-review/oats.json +0 -10
- package/capabilities/oats-review/skills/code-review/SKILL.md +0 -44
- package/capabilities/oats-review/skills/security-review/SKILL.md +0 -59
- package/docs/conventions.md +0 -90
- package/docs/design/2026-09-07-architecture-reassessment.md +0 -131
- package/docs/design/2026-09-07-desktop-souls-capabilities.md +0 -50
- package/docs/design/2026-09-07-mobile-agent-management-proposal.md +0 -228
- package/docs/design/2026-09-08-expert-assisted-deployment-proposal.md +0 -558
- package/docs/design/2026-09-13-knowledge-and-memory-direction.md +0 -744
- package/docs/design/2026-09-13-knowledge-implementation.md +0 -127
- package/docs/design/2026-09-13-knowledge-location-contract.md +0 -340
- package/docs/design/2026-09-14-artifact-retention-contract.md +0 -190
- package/docs/design/2026-09-14-portable-souls-and-git-workspaces.md +0 -708
- package/docs/design/2026-09-14-portable-souls-contract-amendments.md +0 -85
- package/docs/design/2026-09-14-portable-souls-explainer.md +0 -750
- package/docs/design/2026-09-15-captured-dispatch.md +0 -127
- package/docs/design/2026-09-15-captured-resolution-records.md +0 -143
- package/docs/design/2026-09-15-package-preparation.md +0 -100
- package/docs/design/2026-09-15-portable-data-contract.md +0 -121
- package/docs/design/2026-09-15-portable-declarations.md +0 -189
- package/docs/design/2026-09-15-portable-souls-handoff.md +0 -150
- package/docs/design/2026-09-15-portable-souls-implementation.md +0 -417
- package/docs/design/2026-09-15-selection-lock-and-approval.md +0 -122
- package/docs/design/2026-09-15-source-observation.md +0 -119
- package/docs/design/2026-09-16-captured-admission.md +0 -77
- package/docs/design/2026-09-16-captured-helper-dispatch.md +0 -105
- package/docs/design/2026-09-16-captured-launch-inputs.md +0 -42
- package/docs/design/2026-09-16-command-profile-preparation.md +0 -86
- package/docs/design/2026-09-16-fresh-install-first-rollout.md +0 -47
- package/docs/design/2026-09-16-fresh-operator-walkthrough.md +0 -282
- package/docs/design/2026-09-16-messaging-capability-contract.md +0 -59
- package/docs/design/2026-09-16-portable-migration-evidence.md +0 -158
- package/docs/design/2026-09-16-portable-onboarding.md +0 -179
- package/docs/design/2026-09-16-prepare-request-transport.md +0 -26
- package/docs/design/2026-09-16-provider-binding-codecs.md +0 -98
- package/docs/design/2026-09-16-provider-binding-wire.md +0 -274
- package/docs/design/2026-09-17-capability-helper-input-contract.md +0 -95
- package/docs/design/2026-09-17-captured-backend-parity.md +0 -53
- package/docs/design/2026-09-17-captured-native-start.md +0 -58
- package/docs/design/2026-09-17-portable-boundary-hookup.md +0 -19
- package/docs/design/2026-09-17-portable-boundary-resources.md +0 -52
- package/docs/design/2026-09-17-public-captured-start.md +0 -108
- package/docs/design/2026-09-17-public-prepare-request.md +0 -90
- package/docs/design/2026-09-18-captured-pi-host.md +0 -205
- package/docs/design/2026-09-18-first-cut-release-checklist.md +0 -131
- package/docs/design/2026-09-18-herdr-protocol-compatibility.md +0 -60
- package/docs/design/2026-09-20-redesign-program-board.md +0 -142
- package/docs/design/2026-09-20-workspace-and-portable-adoption-plan.md +0 -289
- package/docs/design/2026-09-20-workspace-onboarding-public.md +0 -207
- package/docs/design/2026-09-22-desktop-parity-seams.md +0 -58
- package/docs/design/2026-09-23-simplified-workspace-model.md +0 -711
- package/docs/design/2026-09-23-workspace-v2-implementation-plan.md +0 -65
- package/docs/design/2026-09-24-desktop-phase-f-boundary.md +0 -242
- package/docs/design/2026-09-24-phase-d-plan.md +0 -305
- package/docs/design/2026-09-25-teams-contract.md +0 -258
- package/docs/design/2026-09-26-desktop-design-brief-architecture.md +0 -241
- package/docs/design/desktop-ux-plan.md +0 -362
- package/docs/design/launch-configurations.md +0 -168
- package/docs/design/okf-mirror-provenance.md +0 -105
- package/docs/design/operations-contract.md +0 -141
- package/docs/oats-member.schema.json +0 -38
- package/skills/integration-authoring/SKILL.md +0 -84
- package/skills/oats-support/SKILL.md +0 -79
- package/skills/skill-craft/SKILL.md +0 -109
- package/skills/soul-craft/SKILL.md +0 -116
package/docs/integrations.md
CHANGED
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
# Integrations: binding an implementation to a contract
|
|
2
2
|
|
|
3
|
-
An **integration** is a capability
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
targeting, instance-local composition, locks, trust, hooks, and commands.
|
|
3
|
+
An **integration** is a capability that fills one exclusive slot:
|
|
4
|
+
`knowledge`, `messaging` (the communication contract) or `tasks`. The
|
|
5
|
+
contracts themselves are in [the OATS contracts](layers.md); this page is
|
|
6
|
+
about choosing an implementation and building one. For manifests, hooks,
|
|
7
|
+
commands and settings in general, read [capability packages](capabilities.md)
|
|
8
|
+
first.
|
|
10
9
|
|
|
11
10
|
## The slots
|
|
12
11
|
|
|
13
12
|
For each soul, OATS resolves zero or one implementation per slot:
|
|
14
13
|
|
|
15
|
-
| Slot | Contract |
|
|
14
|
+
| Slot | Contract | Official providers |
|
|
16
15
|
| --- | --- | --- |
|
|
17
16
|
| `knowledge` | [knowledge](layers.md#the-knowledge-contract) | `oats.okf` |
|
|
18
17
|
| `messaging` | [communication](layers.md#the-communication-contract) | `oats.aweb` |
|
|
19
18
|
| `tasks` | [tasks](layers.md#the-tasks-contract) | `oats.jira`, `oats.linear` |
|
|
20
19
|
|
|
21
|
-
A capability
|
|
22
|
-
|
|
23
|
-
configuration error; capabilities without `layer` compose additively.
|
|
20
|
+
A capability becomes an integration by declaring exactly one `layer` in its
|
|
21
|
+
manifest. Capabilities without `layer` compose additively.
|
|
24
22
|
|
|
25
23
|
Exclusivity is the point. Task state belongs to the selected tasks
|
|
26
24
|
implementation even when a messaging tool also offers task features, and
|
|
@@ -29,332 +27,132 @@ offers comments.
|
|
|
29
27
|
|
|
30
28
|
## Selecting an integration
|
|
31
29
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
A soul gets a capability from its own `capabilities:` and slot choices plus
|
|
31
|
+
the workspace `defaults`. Member capabilities are trusted by membership;
|
|
32
|
+
package capabilities by the workspace's `packages:` declaration, which pins
|
|
33
|
+
each by version and is locked by `oats sync` ([workspaces.md](workspaces.md#membership-and-trust),
|
|
34
|
+
[packages.md](packages.md)).
|
|
35
|
+
|
|
36
|
+
The manifest already declares the slot, so a `capabilities:` entry does not
|
|
37
|
+
repeat it: a capability with `layer: tasks` fills the tasks slot wherever it
|
|
38
|
+
arrives from.
|
|
36
39
|
|
|
37
40
|
```yaml
|
|
38
|
-
# oats-workspace.yaml
|
|
41
|
+
# oats-workspace.yaml: one default per slot, for every soul
|
|
42
|
+
packages:
|
|
43
|
+
oats.okf: v4.0.4
|
|
44
|
+
oats.aweb: v1.17.1
|
|
45
|
+
oats.linear: v1.0.1
|
|
46
|
+
oats.jira: v1.0.1
|
|
39
47
|
defaults:
|
|
40
48
|
knowledge: { oats.okf: { from: package } }
|
|
41
49
|
messaging: { oats.aweb: { from: package } }
|
|
42
50
|
tasks: { oats.linear: { from: package } }
|
|
43
51
|
|
|
44
|
-
# souls/planner/soul.yaml
|
|
45
|
-
knowledge:
|
|
46
|
-
owns: planner
|
|
47
|
-
reads: [developer]
|
|
48
|
-
messaging:
|
|
49
|
-
channels: [product]
|
|
52
|
+
# souls/planner/soul.yaml: keep the defaults, supply a slot payload
|
|
50
53
|
tasks:
|
|
51
54
|
team: ENG
|
|
52
55
|
project: Agent Platform
|
|
53
56
|
|
|
54
|
-
# souls/support-triager/soul.yaml
|
|
57
|
+
# souls/support-triager/soul.yaml: opt out of one slot, replace another
|
|
55
58
|
knowledge: none # empties the slot
|
|
56
59
|
capabilities:
|
|
57
|
-
oats.jira: { from: package } # its manifest says layer: tasks
|
|
60
|
+
oats.jira: { from: package } # its manifest says layer: tasks, so it replaces the default
|
|
58
61
|
```
|
|
59
62
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
oats.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
**`oats.linear`** fills `tasks`: JSON-first `oats linear` commands, the
|
|
98
|
-
`linear-tasks` skill, and an advisory spawn hook. Uses `LINEAR_API_KEY`;
|
|
99
|
-
secrets never belong in OATS config. See
|
|
100
|
-
`capabilities/oats-linear/README.md` for its support boundary.
|
|
101
|
-
|
|
102
|
-
> **Removed: `oats.web`.** The browser web-panel capability was retired in
|
|
103
|
-
> favor of the OATS Desktop app (`packages/desktop/`), which bundles the same
|
|
104
|
-
> zero-dependency loopback server. If an `oats-workspace.yaml` (`packages:`,
|
|
105
|
-
> `defaults.capabilities`) or a `soul.yaml` still names `oats.web`, remove that
|
|
106
|
-
> entry and `oats sync`.
|
|
63
|
+
- A soul's slot key is either `none` or that slot's payload (settings for the
|
|
64
|
+
provider that fills it).
|
|
65
|
+
- Two layered capabilities for one slot (a default plus a soul entry, or two
|
|
66
|
+
soul entries) is `E_SLOT_CONFLICT`; spell `<cap>: off` to remove the one you
|
|
67
|
+
do not want.
|
|
68
|
+
- `none` is a slot selection, not a policy: a soul with `messaging: none` has
|
|
69
|
+
no address.
|
|
70
|
+
- Host facts (absolute paths, custody directories) go in the deployment's
|
|
71
|
+
`oats-local.yaml` under `settings.<capability>`. The full merge order of
|
|
72
|
+
provider settings is in [capabilities.md](capabilities.md#who-gets-a-capability).
|
|
73
|
+
|
|
74
|
+
## Official providers
|
|
75
|
+
|
|
76
|
+
Each provider's own repository documents its settings, commands and
|
|
77
|
+
operations in full.
|
|
78
|
+
|
|
79
|
+
| Slot | Provider | Needs on the host | Documentation |
|
|
80
|
+
| --- | --- | --- | --- |
|
|
81
|
+
| `knowledge` | `oats.okf` | `settings.oats.okf.bindings-file` and `state-dir` (absolute paths) in `oats-local.yaml`; `git` and `gh` for Git-backed bases; the harvest harness (`harvest-runtime`: `pi`, `claude` or `codex`) when harvest is on | [awebai/oats-okf](https://github.com/awebai/oats-okf), [knowledge.md](knowledge.md) |
|
|
82
|
+
| `messaging` | `oats.aweb` | the `aw` CLI at 1.36.13 or later; for channel delivery, `@awebai/pi` in pi or the `aweb-channel` plugin in Claude Code; host-only `root`, `roots` and `residents` in `oats-local.yaml` | [awebai/oats-aweb](https://github.com/awebai/oats-aweb) |
|
|
83
|
+
| `tasks` | `oats.jira` | `acli`, authenticated to the Jira site; `site` and `project` in the soul's `tasks:` payload or `settings.oats.jira` | [awebai/oats-jira](https://github.com/awebai/oats-jira) |
|
|
84
|
+
| `tasks` | `oats.linear` | `LINEAR_API_KEY` in the environment (never in OATS config); `team` (and optionally `project`) in the soul's `tasks:` payload or `settings.oats.linear` | [awebai/oats-linear](https://github.com/awebai/oats-linear) |
|
|
85
|
+
|
|
86
|
+
- **`oats.okf`** consults the soul's external OKF bases, keeps instance
|
|
87
|
+
knowledge, and, where the host switches harvest on, hands each instance's
|
|
88
|
+
notes and session to the `knowledge-harvester` package soul; the
|
|
89
|
+
`knowledge-maintainer` package soul reviews the resulting PRs.
|
|
90
|
+
- **`oats.aweb`** mints a messaging identity for each instance at spawn and
|
|
91
|
+
removes it at retire, contributes the aweb messaging skills, and wires the
|
|
92
|
+
channel so sessions are woken by mail. `oats aweb roster` lists the team.
|
|
93
|
+
- **`oats.jira`** teaches the `jira-tasks` protocol and adds an advisory spawn
|
|
94
|
+
hook that names the configured site and project.
|
|
95
|
+
- **`oats.linear`** provides JSON-first `oats linear` commands, the
|
|
96
|
+
`linear-tasks` skill and an advisory spawn hook.
|
|
97
|
+
|
|
98
|
+
The pinned versions and each package's capabilities and souls are in the
|
|
99
|
+
[official catalog](official-catalog.md#the-packages).
|
|
107
100
|
|
|
108
101
|
## Building an integration
|
|
109
102
|
|
|
110
|
-
|
|
111
|
-
`
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
spawn
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
`
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
**Tasks.** Teach claim, update, block, hand off, and complete; identify the
|
|
103
|
+
Building an integration is implementing a contract. The framework's
|
|
104
|
+
`integrations-expert` soul is the specialist for contract design.
|
|
105
|
+
|
|
106
|
+
**Any slot.**
|
|
107
|
+
|
|
108
|
+
- A namespaced capability manifest with exactly one `layer`.
|
|
109
|
+
- An `inject` that tells the instance what this implementation is and which
|
|
110
|
+
skill to load before first use; skills that carry the craft.
|
|
111
|
+
- Commands that support `--json`; hooks only on the accepted events.
|
|
112
|
+
- `requires` for every host command and harness package, and `environment`
|
|
113
|
+
for every launch variable contributed, under the vendor prefix. A
|
|
114
|
+
requirement row may carry `when: { <setting>: <value> }` (it applies only
|
|
115
|
+
when the effective setting matches), `minVersion` (a floor on the installed
|
|
116
|
+
harness package) and `ifInstalled: true` (an absent package satisfies the
|
|
117
|
+
row, so the floor applies only to an ambient extension).
|
|
118
|
+
- A setting that is a host fact (a custody directory, a state root) is
|
|
119
|
+
declared `hostOnly: true`. The resolver then accepts it only from
|
|
120
|
+
`oats-local.yaml` `settings.<cap>` and refuses it elsewhere
|
|
121
|
+
(`E_WORKSPACE_SCHEMA`, reason `host-only-key`). The provider cannot enforce
|
|
122
|
+
this itself: it receives one merged payload without provenance.
|
|
123
|
+
- A slot provider that declares `binding` answers `oats readiness` through
|
|
124
|
+
its `binding.check` command
|
|
125
|
+
([capabilities.md](capabilities.md#readiness-check-bindingcheck)).
|
|
126
|
+
- Package commands and hooks reach the kernel only through `OATS_CLI_BIN` and
|
|
127
|
+
the JSON envelope, never by importing kernel files. Never name target souls
|
|
128
|
+
in the manifest: which souls get a capability is configuration.
|
|
129
|
+
|
|
130
|
+
**Knowledge.** The capability owns its complete runtime and format, including
|
|
131
|
+
reader and capture instructions, judgment and delivery. Do not assume a soul
|
|
132
|
+
bundle, an attached worker, a Git store or a shared harvester. The
|
|
133
|
+
[authoring guide](knowledge-capability-authoring.md) describes the reference
|
|
134
|
+
model and how to adapt or replace it.
|
|
135
|
+
|
|
136
|
+
**Communication.**
|
|
137
|
+
|
|
138
|
+
- Mint an address on `spawn` with a `required` hook, and remove it on
|
|
139
|
+
`retire`.
|
|
140
|
+
- Supply the roster; teach send, reply, chat and "read the event first" in the
|
|
141
|
+
inject and skill; contribute launch arguments so the session is woken.
|
|
142
|
+
- Enforce the soul type's `reach` on both sides, state whether the address
|
|
143
|
+
outlives the instance, and keep task coordination out.
|
|
144
|
+
- Emit `identity: { mode, alias, team, address|null, resident|null, grant?:
|
|
145
|
+
{ id, expiresAt, scopes } }` in the spawn meta (and in the launch meta when
|
|
146
|
+
it renews). This is a messaging-layer contract: the kernel copies it
|
|
147
|
+
through, from the capability whose recorded layer is `messaging`, as the
|
|
148
|
+
principal the instance acts as (`oats status --json instances[].identity`,
|
|
149
|
+
the roster's `identity:` line, `oats inspect --home … selected.identity`),
|
|
150
|
+
adds `provider: <capability id>`, and never interprets `grant`. The choice
|
|
151
|
+
of identity travels as `--provider <cap> identity.mode=…
|
|
152
|
+
identity.resident=…`.
|
|
153
|
+
|
|
154
|
+
**Tasks.** Teach claim, update, block, hand off and complete; identify the
|
|
163
155
|
instance to the tracker in a way that survives it; keep conversation out.
|
|
164
156
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
Test an integration as a capability package: acquire, lock, trust, activate,
|
|
168
|
-
spawn, retire, with the golden fixtures as the behavior oracle for the kernel
|
|
169
|
-
side.
|
|
170
|
-
|
|
171
|
-
## oats.okf v2 settings and recovery
|
|
172
|
-
|
|
173
|
-
V2 requires `bindings-file`, an absolute path to capability-owned JSON. Paths
|
|
174
|
-
inside it resolve from that file's directory. The source soul needs stable
|
|
175
|
-
`owner`, `owns` and `reads` declarations; every referenced accepted node must
|
|
176
|
-
exist and match its owner. Acquisition/activation never bootstraps a knowledge
|
|
177
|
-
base. If activating globally, provision each working soul first or target only
|
|
178
|
-
ready sources.
|
|
179
|
-
|
|
180
|
-
```yaml
|
|
181
|
-
# oats-local.yaml
|
|
182
|
-
settings:
|
|
183
|
-
oats.okf:
|
|
184
|
-
bindings-file: /absolute/config/okf-bindings.json
|
|
185
|
-
harvest-runtime: claude
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
- `harvest-runtime: pi | claude | codex` defaults to `pi`, independently of the
|
|
189
|
-
source. Select an installed/authenticated runtime on the execution host.
|
|
190
|
-
- `harvest-model` optionally pins its model. Omitted models use the harness
|
|
191
|
-
default; native Claude/Codex names are not Pi provider-prefixed patterns.
|
|
192
|
-
- Old record-window settings and `--from-record --force` recovery are not v2
|
|
193
|
-
interfaces. Every capture takes notes **and** record; use durable run receipts
|
|
194
|
-
and explicit `retry`/`complete` reconciliation, never old watermark moves.
|
|
195
|
-
|
|
196
|
-
For remote sources, configure custody and credentials on their execution host,
|
|
197
|
-
not the viewer. One source job continues from stable deployment context after
|
|
198
|
-
retirement, subject to current activation/trust. Timer installation requires
|
|
199
|
-
explicit consent. `inspect` is read-only and combines identity-guarded live
|
|
200
|
-
memory with durable receipts; `--source` remains usable after home deletion.
|
|
201
|
-
[Command and recovery details](knowledge.md#inspection-and-operator-commands).
|
|
202
|
-
|
|
203
|
-
## oats.aweb late joins (1.10.3)
|
|
204
|
-
|
|
205
|
-
`aw team join` at spawn gets 120 s (a slow link is slow, not broken). If the
|
|
206
|
-
join is reported failed or is killed on timeout but the home then holds a
|
|
207
|
-
bound identity (signing key, team certificate, workspace alias), the hook
|
|
208
|
-
reports that alias in its meta so the kernel's compensation retires it
|
|
209
|
-
instead of orphaning it. The retire hook likewise reads the alias from the
|
|
210
|
-
home's `.aw/workspace.yaml` when its meta carries none.
|
|
211
|
-
|
|
212
|
-
## oats.aweb retire report (1.10.2)
|
|
213
|
-
|
|
214
|
-
On a host whose installed `aw` is 1.36.1 or later, the retire hook deletes
|
|
215
|
-
the workspace with `aw workspace delete <alias> --json` and reports what the
|
|
216
|
-
platform answered: `meta.aliasReusable` is true when `alias_released` is
|
|
217
|
-
true (the certificate was revoked and a later spawn may reuse the slug),
|
|
218
|
-
false otherwise with `meta.aliasReason` carrying the platform's reason and a
|
|
219
|
-
warning naming the fresh-purpose remedy. On an older `aw` the pre-1.36.1
|
|
220
|
-
report stands (`aliasReusable: false`, warning naming aweb-abim), because
|
|
221
|
-
that CLI cannot revoke the certificate.
|
|
222
|
-
|
|
223
|
-
## oats.aweb settings (1.12.2)
|
|
224
|
-
|
|
225
|
-
Set portable team policy in the workspace/soul `messaging:` payload; set host
|
|
226
|
-
facts in `oats-local.yaml` under `settings.oats.aweb.<key>`. Per-spawn
|
|
227
|
-
`oats spawn … --provider oats.aweb <key>=<value>` is for non-host settings only.
|
|
228
|
-
The effective payload is merged in order: workspace messaging, `byTeam[<primary label>]`,
|
|
229
|
-
soul messaging, `oats-local.yaml` `settings.oats.aweb`, then per-spawn
|
|
230
|
-
`--provider` values. `root`, `roots`, and `residents` are manifest-declared
|
|
231
|
-
`hostOnly: true`: absolute root/custody paths are accepted only from
|
|
232
|
-
`oats-local.yaml`; kernels since 0.25.6 refuse those keys in the workspace file,
|
|
233
|
-
`byTeam`, soul payloads and `--provider` flags with `E_WORKSPACE_SCHEMA` reason
|
|
234
|
-
`host-only-key`.
|
|
235
|
-
|
|
236
|
-
- `team: <team id>`. The payload team wins over `OATS_TEAM_ID`/
|
|
237
|
-
`OATS_TEAM_NAME`; if both are set and differ, the hook warns and uses the
|
|
238
|
-
payload. Workspace v2 spawns can have an empty `OATS_TEAM_ID`, so set this in
|
|
239
|
-
the workspace file's `messaging:` / `messaging.byTeam.<label>.team`, or in
|
|
240
|
-
`settings.oats.aweb.team` for a host override.
|
|
241
|
-
- `root: /absolute/dir`. Host-owned absolute directory whose `.aw` is the aweb
|
|
242
|
-
minting root. A declared root without `.aw` is fatal; run `oats aweb setup`
|
|
243
|
-
there or set `settings.oats.aweb.root` to the initialized root.
|
|
244
|
-
- `roots: { <team id>: /absolute/dir }`. Host-owned map for deployments that
|
|
245
|
-
mint into several aweb teams. When a team is known, `roots[team]` wins over
|
|
246
|
-
`root`.
|
|
247
|
-
- Minting root resolution for spawn and setup is: `roots[team]` when the team is
|
|
248
|
-
known and present, else `root`. With no declared root, workspace v2 uses
|
|
249
|
-
`<OATS_WORKSPACE>` (the deployment directory whose `.aw` is used) and never
|
|
250
|
-
searches above it; classic deployments with `OATS_TEAM_SCOPE` keep the
|
|
251
|
-
historical bounded candidate search order exactly (team scope, home, home git
|
|
252
|
-
root, context, context git root, then workspace).
|
|
253
|
-
- `binding-check` answers `needs-configuration` before spawn with one problem
|
|
254
|
-
per missing item: `no messaging root at <dir>: run oats aweb setup there or
|
|
255
|
-
set settings.oats.aweb.root`; `no team: set messaging.byTeam.<label>.team in
|
|
256
|
-
the workspace file or settings.oats.aweb.team`. With both present it answers
|
|
257
|
-
`ready`.
|
|
258
|
-
In classic deployments this readiness check approximates the full bounded
|
|
259
|
-
spawn search by checking `OATS_TEAM_SCOPE` before `OATS_WORKSPACE`; the spawn
|
|
260
|
-
hook itself still keeps the exact 1.12.0 bounded candidate order. With no
|
|
261
|
-
explicit team and no workspace team label, readiness follows spawn: an active
|
|
262
|
-
aweb team at the root is enough to answer ready; an unmapped workspace team
|
|
263
|
-
label still reports the team-setting remedy above.
|
|
264
|
-
- `oats aweb setup` is idempotent and uses existing aw primitives. With
|
|
265
|
-
`--username <u>` it runs `aw init --username <u>` at the messaging root and
|
|
266
|
-
tells the operator to map the workspace team to `default:<u>.aweb.ai` when
|
|
267
|
-
that team is not already the configured target. With `AWEB_API_KEY` in the
|
|
268
|
-
environment it runs `aw init` at the root for the hosted team behind the key.
|
|
269
|
-
With `--invite <token>` it runs `aw team join <token>`. It never prints the
|
|
270
|
-
API key or invite token, re-reads `aw team list --json` after the action, and
|
|
271
|
-
prints the same ready/needs-configuration verdict as binding-check.
|
|
272
|
-
- `identity.mode: local | global` (default `local`). Any other value is fatal.
|
|
273
|
-
Local mode is the historical behavior: a spawned team identity is minted for
|
|
274
|
-
the instance, or `identity.source` uses the existing retained-seat flow below.
|
|
275
|
-
Its spawn meta includes `identity: { mode: "local", alias, team, address:
|
|
276
|
-
null, resident: null }` beside the existing top-level `alias`, `team`, and
|
|
277
|
-
`delivery` keys. Local-mode spawn output contributes
|
|
278
|
-
`env.AWEB_IDENTITY_HOME=<home>/.aw` (and retained-seat local mode contributes
|
|
279
|
-
the same path) so `aw mail`, `aw chat`, `aw whoami`, `aw wake`, and
|
|
280
|
-
`aw workspace status` work from the instance's `work/` or any other cwd.
|
|
281
|
-
- `identity.mode: global` makes the instance act as a resident global identity
|
|
282
|
-
through an aweb session grant; it never mints a new global identity and never
|
|
283
|
-
copies root keys into the instance home. `identity.resident` is required and
|
|
284
|
-
resolves through `residents.<name>` to an absolute custody directory whose
|
|
285
|
-
`.aw/identity.yaml` already exists. Missing or unresolved residents fail with
|
|
286
|
-
the `oats-local.yaml settings.oats.aweb.residents.<name>` key to set. Optional
|
|
287
|
-
`identity.scopes` defaults to exactly `[mail.read, mail.send, chat.read,
|
|
288
|
-
chat.send]`; optional `identity.ttl` defaults to `8h` (aw accepts `60s` to
|
|
289
|
-
`720h`). Spawn first runs `aw custody status --json` in the resident custody
|
|
290
|
-
directory and uses exactly the reported `socket_path`; a status without a
|
|
291
|
-
socket is refused. It then runs `aw id grant mint --team <team-id> --scope
|
|
292
|
-
<comma-list> --ttl <ttl> --label oats:<instance> --out
|
|
293
|
-
<home>/.aweb-identity --custody-socket <preflight-socket> --json` from the
|
|
294
|
-
custody directory when aw is 1.36.2 or later for `--team`; grants need aw >=
|
|
295
|
-
1.36.3 (`CUSTODY_ATTACH_MIN`) with aweb server >= 1.27.5 for
|
|
296
|
-
`--custody-socket`. `AWEB_IDENTITY_HOME`
|
|
297
|
-
is removed from mint/revoke child environments: grant commands are not
|
|
298
|
-
identity-home-aware and intentionally refuse both `--identity-home` and
|
|
299
|
-
external `AWEB_IDENTITY_HOME`, so cwd selects the custody identity. The hook
|
|
300
|
-
parses the whole JSON document because aw `--json` output is indented across
|
|
301
|
-
lines, with a fallback to the first brace-prefixed block when progress lines
|
|
302
|
-
precede it; it then verifies the minted grant's `team_id`, reads back
|
|
303
|
-
`<grantHome>/grant.yaml` (not `encryption.yaml`) and requires
|
|
304
|
-
`custody.socket_path` to equal the preflight socket, and runs
|
|
305
|
-
`aw custody status --json` with `AWEB_IDENTITY_HOME=<grantHome>` from the grant
|
|
306
|
-
home to verify the resident alias and ready team row. Missing or mismatched
|
|
307
|
-
custody attachment revokes the grant, removes the grant home and fails the
|
|
308
|
-
spawn. It returns `env.AWEB_IDENTITY_HOME=<home>/.aweb-identity`. If the minted
|
|
309
|
-
team differs, the hook revokes the grant and keeps nothing. Receiving, wake registration,
|
|
310
|
-
and `aw whoami` work through a grant. On aw 1.36.1 the server rejected mail
|
|
311
|
-
or chat sent through a grant with 422 (`from_did must match the authenticated
|
|
312
|
-
sender`) because the client signed with the grant-key DID. aw 1.36.2 with
|
|
313
|
-
aweb server 1.27.5, the floor, fixes this; grant mail and chat sends passed
|
|
314
|
-
real-server acceptance there. A hosted team whose server has not yet adopted
|
|
315
|
-
1.27.5 still refuses grant sends; the custody preflight reports that as
|
|
316
|
-
needs-configuration before spawn through `grant_status_endpoint_ready`.
|
|
317
|
-
Retire revokes
|
|
318
|
-
`meta.identity.grant.id` through the custody directory; with no grant id it
|
|
319
|
-
reports `nothing-to-revoke`. A failed revoke exits nonzero and reports the TTL
|
|
320
|
-
expiry. A binding-less home readiness check for global mode never reports ready
|
|
321
|
-
for a grant home whose `grant.yaml` lacks `custody.socket_path`; it reports
|
|
322
|
-
`needs-configuration` / code `custody` and tells the operator to retire and
|
|
323
|
-
respawn on an aw new enough to attach custody.
|
|
324
|
-
- `residents: { <name>: /abs/custody/dir }` is the host-owned map for global
|
|
325
|
-
mode. Each custody directory's `.aw` holds the resident identity root keys and
|
|
326
|
-
team certificate. Do not put this map in committed source; the hook cannot
|
|
327
|
-
distinguish payload provenance.
|
|
328
|
-
- `delivery: channel | session` (default `channel`). `session` hands
|
|
329
|
-
notification delivery to the host wake broker: `AWEB_DELIVERY=session` in
|
|
330
|
-
the launch environment (declared by the manifest), no Claude channel flag,
|
|
331
|
-
a pi extension that honours the opt-out (`@awebai/pi` 0.3.10 or later) and
|
|
332
|
-
a Claude Code channel plugin that does too (`aweb-channel` 1.7.9 or later),
|
|
333
|
-
both enforced as conditional requirements with a version floor when
|
|
334
|
-
installed (an older plugin starts its own channel server beside the broker
|
|
335
|
-
and can fetch a message before the broker delivers it), and a briefing
|
|
336
|
-
and registration of the home with the host wake broker (`aw wake register`).
|
|
337
|
-
Until an aw that ships `aw wake` exists (aweb-abil), session mode REFUSES
|
|
338
|
-
to spawn rather than leave an instance that nothing wakes: it is for broker
|
|
339
|
-
qualification only; leave the default otherwise.
|
|
340
|
-
- `identity: { source: "/abs/path/to/legacy/.aw" }`, per soul, explicit and
|
|
341
|
-
never inferred. The spawned instance becomes the retained seat of that
|
|
342
|
-
existing identity (same did:aw and address). The aweb service URL comes
|
|
343
|
-
from the source's `workspace.yaml` (`aweb_url`); a hosted-init source has
|
|
344
|
-
none, so set `OATS_AWEB_URL` (for example `https://app.aweb.ai/api`) in
|
|
345
|
-
the spawn environment when the source lacks it: the identity-authority files
|
|
346
|
-
are copied into the home's `.aw` (never `workspace.yaml` or caches), the
|
|
347
|
-
coordination binding is reconnected with `aw workspace connect`, and the
|
|
348
|
-
seat is verified online before the instance is briefed. A lock beside the
|
|
349
|
-
source (`.aw-retained-seat.json`) refuses a second seat while a holder is
|
|
350
|
-
live. Retire releases the lock and touches neither the identity nor the
|
|
351
|
-
source; removing the legacy `.aw` is a human step. Rehearse on a disposable
|
|
352
|
-
global identity first: a send, a claim and a heartbeat from the new home
|
|
353
|
-
must all work before any real seat moves.
|
|
354
|
-
|
|
355
|
-
Requirement rows in a manifest may carry `when: { <setting>: <value> }` (the
|
|
356
|
-
row applies only when the capability's effective setting matches) and
|
|
357
|
-
`minVersion` (the version is read from the package.json under the install
|
|
358
|
-
directory the runtime's listing names; an older or absent manifest fails the
|
|
359
|
-
requirement with the install remedy). `ifInstalled: true` makes an absent
|
|
360
|
-
package satisfy the row, so the floor applies only to an ambient extension.
|
|
157
|
+
Test an integration as a capability package: pin, sync, spawn and retire, with
|
|
158
|
+
the golden fixtures as the behavior oracle for the kernel side.
|
|
@@ -7,66 +7,40 @@ The released skill includes checked copies of this set; authors and the
|
|
|
7
7
|
|
|
8
8
|
## Authority and scope
|
|
9
9
|
|
|
10
|
-
OATS offers an opinionated reference knowledge theory.
|
|
11
|
-
other capabilities may adopt, adapt
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
OATS offers an opinionated reference knowledge theory. The default provider,
|
|
11
|
+
OKF, follows it; other capabilities may adopt, adapt or replace it. The kernel
|
|
12
|
+
owns slot selection, composition, lifecycle, work-mode boundaries and the
|
|
13
|
+
hook contract, not a memory model or a judge.
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
a design/authoring reference, not a claim that all default runtime behavior
|
|
22
|
-
has already shipped. Verify the capability version actually being evaluated.
|
|
15
|
+
Every implementing capability supplies its full runtime: reader tools,
|
|
16
|
+
injections, capture conventions, judgment instructions, a harvester if any,
|
|
17
|
+
lifecycle and scheduling, validation, delivery and diagnostics. Reuse may be
|
|
18
|
+
explicit and versioned, never a hidden fetch of mutable doctrine. The theory
|
|
19
|
+
expert advises authors; it does not operate their stores or approve their
|
|
20
|
+
compatibility. Composing this capability selects no knowledge provider.
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
injections, capture conventions, judgment instructions, harvester if any,
|
|
26
|
-
lifecycle/scheduling machinery, validation, delivery and diagnostics. Reuse
|
|
27
|
-
may be explicit and versioned, never a hidden fetch of mutable doctrine.
|
|
28
|
-
The theory expert advises authors; it does not operate their stores or approve
|
|
29
|
-
their compatibility. Installing the theory package activates nothing.
|
|
22
|
+
## Getting the authoring package
|
|
30
23
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
from the already-published framework v0.23.0 Git `oats-package/` subtree. Git preserves the canonical
|
|
36
|
-
source `CLAUDE.md -> AGENTS.md` symlink; npm omits symlinks, so a partial npm
|
|
37
|
-
copy is not a supported distribution. Acquisition does not repair source
|
|
38
|
-
aliases or relax installed-artifact integrity checks.
|
|
39
|
-
|
|
40
|
-
Select a deployment scope explicitly and acquire the published source, then
|
|
41
|
-
opt in for an author soul:
|
|
24
|
+
`oats.knowledge-theory` ships in the `oats.framework` package, read from Git
|
|
25
|
+
(npm omits the package's `CLAUDE.md -> AGENTS.md` symlink, so an npm copy is
|
|
26
|
+
not a supported distribution). Pin the framework and give the capability to
|
|
27
|
+
an author soul:
|
|
42
28
|
|
|
43
29
|
```yaml
|
|
44
30
|
# oats-workspace.yaml
|
|
45
31
|
packages:
|
|
46
|
-
oats.framework: v1.
|
|
32
|
+
oats.framework: v1.4.0 # provides oats.core, oats.setup, oats.knowledge-theory
|
|
47
33
|
|
|
48
34
|
# souls/<author-soul>/soul.yaml
|
|
49
35
|
capabilities:
|
|
50
36
|
oats.knowledge-theory: { from: package }
|
|
51
37
|
```
|
|
52
38
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
the patch instead. It does not silently change the catalog's 1.0.0 selection
|
|
59
|
-
or an existing lock. For local development, use an explicit complete source
|
|
60
|
-
package path instead. Activation targets the authoring skill, without
|
|
61
|
-
selecting or replacing a knowledge capability.
|
|
62
|
-
|
|
63
|
-
The expert is an oats.framework **package soul** from framework 1.3.0
|
|
64
|
-
(`oats-package/souls/knowledge-theory-expert/`, reading `oats.knowledge-theory`
|
|
65
|
-
1.1.0 from its own package): spawn it by its qualified name in the author's
|
|
66
|
-
repository, `oats spawn oats.framework/knowledge-theory-expert --repo <repo>`.
|
|
67
|
-
Before 1.3.0 it was a capability-defined agent, which OATS 0.29.0 removed.
|
|
68
|
-
There are no executable surfaces to trust in this package. Installed experts
|
|
69
|
-
use their materialized local curriculum, not this repository at runtime.
|
|
39
|
+
The expert is the framework's package soul `knowledge-theory-expert`, which
|
|
40
|
+
reads `oats.knowledge-theory` from its own package. Spawn it in the author's
|
|
41
|
+
repository: `oats spawn oats.framework/knowledge-theory-expert --repo <repo>`.
|
|
42
|
+
The package has no commands or hooks, and an expert uses its copied local
|
|
43
|
+
curriculum, not this repository.
|
|
70
44
|
|
|
71
45
|
## A bounded authoring session
|
|
72
46
|
|
|
@@ -98,9 +72,9 @@ use their materialized local curriculum, not this repository at runtime.
|
|
|
98
72
|
- Custody: named destinations, owner identity, accepted state, concurrency,
|
|
99
73
|
retry and reader-refresh semantics. No credentials in the report.
|
|
100
74
|
- Proposed artifacts: capability manifest, local resources, instructions,
|
|
101
|
-
skills,
|
|
75
|
+
skills, package souls, hooks and operations, and the declared environment.
|
|
102
76
|
- Verification: tests run, actual receipts/visibility, failures, untested claims
|
|
103
|
-
and the next required
|
|
77
|
+
and the next required reviews. Do not call scaffold-only an agent trial.
|
|
104
78
|
|
|
105
79
|
## Maintaining these references
|
|
106
80
|
|
|
@@ -108,6 +82,5 @@ Edit this file and `docs/knowledge-reference/` in the framework source, then
|
|
|
108
82
|
run `node scripts/check-knowledge-theory-package.mjs --write` from that checkout.
|
|
109
83
|
Run `node scripts/check-knowledge-theory-package.mjs` and
|
|
110
84
|
`node --test test/knowledge-theory-package.test.mjs` to verify parity and the
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
repository docs do not change any installed capability at runtime.
|
|
85
|
+
packaged copy. The copies ship with the next framework release; editing the
|
|
86
|
+
docs changes no deployed capability.
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
These are reusable authoring cases for the [reference model](model.md), plus
|
|
4
4
|
generic package isolation checks. They are not compulsory theoretical
|
|
5
|
-
conformance tests for an [alternative model](adoption.md).
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
conformance tests for an [alternative model](adoption.md). OKF's cases exercise
|
|
6
|
+
both Git and real non-Git custody. Record provider/kernel versions and checks
|
|
7
|
+
actually run.
|
|
8
8
|
|
|
9
9
|
## Package and policy isolation
|
|
10
10
|
|
|
@@ -25,7 +25,7 @@ lifecycle effects, scheduling, native persistence, validation and diagnostics.
|
|
|
25
25
|
There is no invisible shared theory layer underneath it. It must be usable
|
|
26
26
|
without the expert running or reference documentation fetched over the network.
|
|
27
27
|
|
|
28
|
-
The default
|
|
28
|
+
The default OKF model chooses external bases/nodes, instructional
|
|
29
29
|
read/capture-only workers, independent harvesting, PR-only Git delivery and
|
|
30
30
|
real non-Git custody. These are adoption choices, not new mandatory kernel
|
|
31
31
|
fields. OKF-specific files, schemas and validator calls stay in OKF. A
|