@awebai/oats 0.29.3 → 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 +203 -54
- 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 +16 -9
- package/capabilities/oats-okf/lib/binding-wire.mjs +47 -15
- package/capabilities/oats-okf/lib/config.mjs +2 -1
- package/capabilities/oats-okf/lib/consult.mjs +26 -4
- package/capabilities/oats-okf/lib/harvest-switch.mjs +16 -3
- package/capabilities/oats-okf/lib/inspection.mjs +26 -7
- package/capabilities/oats-okf/lib/io.mjs +9 -1
- package/capabilities/oats-okf/lib/sources.mjs +34 -3
- package/capabilities/oats-okf/lib/stores.mjs +8 -6
- package/capabilities/oats-okf/lib/worker.mjs +7 -17
- 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 +37 -16
- package/capabilities/oats-okf-maintenance/injects/maintainer.md +1 -1
- package/capabilities/oats-okf-maintenance/lib/provenance.mjs +6 -1
- package/capabilities/oats-okf-maintenance/oats.json +2 -2
- package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +17 -2
- 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 +7 -10
- 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 +116 -0
- 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.29.4.md +90 -0
- package/docs/release-notes/v0.30.0.md +205 -0
- package/docs/schedules.md +280 -349
- 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 +28 -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/packages.mjs +2 -5
- package/lib/resolve.mjs +29 -87
- package/lib/schedule.mjs +32 -18
- package/lib/teams-verbs.mjs +195 -0
- package/lib/teams.mjs +190 -0
- package/lib/triggers.mjs +53 -17
- 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/knowledge.md
CHANGED
|
@@ -1,101 +1,59 @@
|
|
|
1
|
-
# Knowledge
|
|
1
|
+
# Knowledge
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
including co-location, without writing into a home's read-only module copies.
|
|
3
|
+
The **knowledge slot** gives a working soul durable, reviewed expertise:
|
|
4
|
+
decisions and their rationale, rejected alternatives, discovered limits. The
|
|
5
|
+
kernel owns the slot, its configuration and command dispatch; the capability
|
|
6
|
+
that fills it owns the format, the instructions and how knowledge is promoted.
|
|
7
|
+
The model is in [Knowledge, instances and evolving expertise](knowledge-theory.md).
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
This page is the operator guide for the default filler, the `oats.okf` package.
|
|
10
|
+
Its runtime internals (custody, publication, locks) are in the
|
|
11
|
+
[oats-okf README](https://github.com/awebai/oats-okf).
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
| Surface | What it holds |
|
|
14
|
+
|---|---|
|
|
15
|
+
| Accepted bases (Git or directory) | Soul knowledge: OKF concepts in nodes, each node owned by one soul. |
|
|
16
|
+
| `souls/<name>/okf.json` | The nodes the soul owns and reads. |
|
|
17
|
+
| Instance home: `STATE.md`, `log.md`, `notes/` | Instance knowledge. |
|
|
18
|
+
| The bindings file and its `stateDir` | Where each base lives on this machine; durable harvest evidence. |
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
> the published OATS >=0.23.0 kernel. Framework v0.23.1 integrates its catalog
|
|
22
|
-
> and mirror; publishing packages does not activate or deploy them automatically.
|
|
23
|
-
> See [release notes](release-notes/v0.23.1.md).
|
|
20
|
+
## Setup
|
|
24
21
|
|
|
25
|
-
|
|
22
|
+
### Pin and select the package
|
|
26
23
|
|
|
27
|
-
|
|
28
|
-
|---|---|
|
|
29
|
-
| `soul/AGENTS.md`, `soul/skills/` | Curated specialist identity and procedures, reviewed as soul artifacts. |
|
|
30
|
-
| `soul/okf.json` | Stable owner ID and external `owns`/`reads` node references; no knowledge bytes. |
|
|
31
|
-
| External accepted bases | Durable OKF knowledge, either Git PR-only or a recoverable plain directory. |
|
|
32
|
-
| Instance `knowledge/` | Immutable accepted reader snapshot with `view.json` and `bases/<alias>/`. |
|
|
33
|
-
| Instance `STATE.md`, `log.md`, `notes/` | Rewritable task state, append-only milestones and captured insights. |
|
|
34
|
-
| External `stateDir` | Durable per-source evidence, frozen descriptors, runs, proposals and receipts. |
|
|
35
|
-
| Worker `work/` | Independent directory execution with staged bases and explicit judgment. |
|
|
36
|
-
|
|
37
|
-
The turn record is episodic evidence, not accepted expertise. OKF captures both
|
|
38
|
-
notes **and** attributed record content, then judges them separately from capture.
|
|
39
|
-
V2 never automatically edits soul skills; a procedure candidate may become an
|
|
40
|
-
external Playbook for separate human review.
|
|
41
|
-
|
|
42
|
-
## Acquire, bind and provision explicitly
|
|
43
|
-
|
|
44
|
-
The authoritative distribution is [awebai/oats-okf](https://github.com/awebai/oats-okf),
|
|
45
|
-
whose `oats-package/oats-package.json` exports exactly
|
|
46
|
-
`oats-package/capabilities/oats-okf/`. The framework's `capabilities/oats-okf/`
|
|
47
|
-
is a bundled mirror, **not a self-contained Git distribution in the npm
|
|
48
|
-
artifact**: npm drops the source worker's `CLAUDE.md -> AGENTS.md` symlink.
|
|
49
|
-
Acquire the catalog Git payload; do not install a copied npm mirror as a local
|
|
50
|
-
package or repair missing aliases in installed artifacts.
|
|
51
|
-
|
|
52
|
-
Under the 0.25 workspace model OKF is a **package**: pin it once in the
|
|
53
|
-
workspace file, let `oats sync` resolve, verify and lock it, and let every soul that
|
|
54
|
-
fills the knowledge slot say (or inherit) `oats.okf: { from: package }`.
|
|
55
|
-
Operator-level `oats okf` commands run from the deployment directory with
|
|
56
|
-
`--soul <name>` (an explicit `--soul` does not override an invoking instance's
|
|
57
|
-
saved settings — use a clean shell). The pinned version resolves through the
|
|
58
|
-
official catalog:
|
|
24
|
+
The workspace pins the package and fills the slot for every soul by default:
|
|
59
25
|
|
|
60
26
|
```yaml
|
|
61
|
-
# oats-workspace.yaml
|
|
27
|
+
# oats-workspace.yaml (excerpt)
|
|
62
28
|
packages:
|
|
63
|
-
oats.okf:
|
|
29
|
+
oats.okf: v4.0.4
|
|
64
30
|
defaults:
|
|
65
31
|
knowledge: { oats.okf: { from: package } }
|
|
32
|
+
stores:
|
|
33
|
+
org: git:github.com/acme/knowledge
|
|
34
|
+
```
|
|
66
35
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
knowledge
|
|
71
|
-
|
|
36
|
+
- `oats sync` locks the pin. `oats spawn <soul> --preview --json` shows the
|
|
37
|
+
module a soul resolves and its merged `settings.oats.okf`.
|
|
38
|
+
- A soul without knowledge says `knowledge: none`.
|
|
39
|
+
- `stores:` names the workspace's knowledge repositories; the kernel validates
|
|
40
|
+
them as repo refs. oats.okf does not read `stores:`: the bindings file says
|
|
41
|
+
where each base lives.
|
|
72
42
|
|
|
73
|
-
|
|
43
|
+
Each machine points the package at its bindings file in `oats-local.yaml`:
|
|
44
|
+
|
|
45
|
+
```yaml
|
|
46
|
+
# oats-local.yaml (excerpt)
|
|
74
47
|
settings:
|
|
75
48
|
oats.okf:
|
|
76
|
-
bindings-file: /
|
|
77
|
-
state-dir: /
|
|
49
|
+
bindings-file: /Users/ana/.oats/okf-bindings.json
|
|
50
|
+
state-dir: /Users/ana/.oats/okf
|
|
78
51
|
```
|
|
79
52
|
|
|
80
|
-
```bash
|
|
81
|
-
oats sync # resolves v2.1.3 to a commit, verifies its integrity, writes the lock
|
|
82
|
-
oats spawn domain-expert --preview --json # the exact oats.okf module (package, version, commit) + settings.oats.okf (the merged payload)
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
Pinning activates nothing by itself: the soul's `okf.json` must exist and the
|
|
86
|
-
merged payload (soul `knowledge:` ⊕ `settings.oats.okf` ⊕ `--provider`) must be
|
|
87
|
-
bindable — it may carry **only** the four settings below (`bindings-file`,
|
|
88
|
-
`state-dir`, `harvest-runtime`, `harvest-model`); `owns`/`reads`/`root` on the
|
|
89
|
-
soul payload are refused by 2.1.3, not read. The lock stays exact until the
|
|
90
|
-
workspace bumps `packages.oats.okf`; v1 operators must plan migration before
|
|
91
|
-
that bump. Executable changes come with a new version, reviewed as a new pin. A
|
|
92
|
-
service worker need not itself fill the knowledge slot (`knowledge: none`).
|
|
93
|
-
|
|
94
53
|
### Bindings document
|
|
95
54
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
directory, not the current working directory:
|
|
55
|
+
Capability-owned JSON at an absolute path; relative paths inside it resolve
|
|
56
|
+
from its own directory:
|
|
99
57
|
|
|
100
58
|
```json
|
|
101
59
|
{
|
|
@@ -110,375 +68,238 @@ directory, not the current working directory:
|
|
|
110
68
|
"repository": "https://github.com/example/project.git",
|
|
111
69
|
"root": "knowledge",
|
|
112
70
|
"acceptedBranch": "main",
|
|
113
|
-
"pr": {"repository": "example/project"}
|
|
71
|
+
"pr": { "repository": "example/project" }
|
|
114
72
|
},
|
|
115
|
-
"team": {
|
|
116
|
-
"id": "team-knowledge",
|
|
117
|
-
"kind": "directory",
|
|
118
|
-
"path": "../team-knowledge"
|
|
119
|
-
}
|
|
73
|
+
"team": { "id": "team-knowledge", "kind": "directory", "path": "../team-knowledge" }
|
|
120
74
|
}
|
|
121
75
|
}
|
|
122
76
|
```
|
|
123
77
|
|
|
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
|
-
|
|
153
|
-
{"version":1,"id":"project-knowledge","nodes":{"expert":{"path":"expert","owner":"domain-expert-stable-id"},"steward":{"path":"steward","owner":"steward-stable-id"}}}
|
|
154
|
-
```
|
|
78
|
+
- **The `id` must match the base.** The alias (`project`) is yours, and souls'
|
|
79
|
+
`okf.json` names it. The `id` must equal the `id` in the base's
|
|
80
|
+
`okf-base.json` at its root (here `knowledge/okf-base.json`), or every read
|
|
81
|
+
of that base fails with `E_BASE` ("base identity/nodes mismatch").
|
|
82
|
+
- **Git bases** (HTTPS, SSH or a durable local repository; `root: "."` for a
|
|
83
|
+
dedicated repository) are delivered to only by same-repository PR, through
|
|
84
|
+
`git` and `gh`. A URL with embedded credentials is refused.
|
|
85
|
+
- **Directory bases** need no Git and must not sit inside a Git working tree.
|
|
86
|
+
- **Paths** are physical and nonoverlapping: state outside every base and
|
|
87
|
+
instance home, the bindings file outside state and bases.
|
|
88
|
+
- `stateDir` holds per-source evidence and the consult cache; `cron` and `tz`
|
|
89
|
+
schedule each source's harvest job (defaults shown).
|
|
90
|
+
- Every base must be usable at spawn: one bad base blocks every knowledge-slot
|
|
91
|
+
spawn on the machine, and the error names its alias.
|
|
92
|
+
|
|
93
|
+
### Settings
|
|
94
|
+
|
|
95
|
+
`oats.okf` declares seven settings; the harvester capability declares one.
|
|
96
|
+
|
|
97
|
+
| Setting | Default | Meaning |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| `bindings-file` | none (required) | Absolute path of the bindings document. |
|
|
100
|
+
| `state-dir` | none | Absolute path; required by the package's readiness check. Evidence lives at the bindings `stateDir`. |
|
|
101
|
+
| `harvest` | `off` | The harvest switch, a host setting ([below](#the-harvest-switch)). |
|
|
102
|
+
| `harvest-runtime` | `pi` | The harvester's harness: `pi`, `claude` or `codex`. |
|
|
103
|
+
| `harvest-model` | the harness default | A model pin for the harvester. |
|
|
104
|
+
| `git-timeout` | `600` | Seconds for each remote Git operation. |
|
|
105
|
+
| `consult-max-age` | `300` | Seconds a cached accepted commit may age before a consult refetches; `0` always refetches. |
|
|
106
|
+
| `harvester-max-age` (`oats.okf-harvest`) | `7d` | How long a harvester waits for its PR before it retires. |
|
|
155
107
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
not ambiguously identify different souls within one state namespace.
|
|
108
|
+
Host facts go in `oats-local.yaml` `settings.oats.okf`; a soul's `knowledge:`
|
|
109
|
+
payload carries only what is true of all its instances, such as
|
|
110
|
+
`harvest-runtime` or the harvest opt-out.
|
|
160
111
|
|
|
161
|
-
|
|
162
|
-
author or direct maintainer of the base. `reads` selects initial context.
|
|
163
|
-
**Neither is an ACL.** All configured bases are discoverable/readable. Missing
|
|
164
|
-
bindings, owner declarations, base metadata or indexes fail required spawn rather
|
|
165
|
-
than silently bootstrapping empty knowledge.
|
|
112
|
+
## The soul's okf.json
|
|
166
113
|
|
|
167
|
-
|
|
168
|
-
`nodes` object above, without its wrapper), then run from the **deployment
|
|
169
|
-
directory** (the one holding `oats-local.yaml`), naming the soul whose
|
|
170
|
-
`knowledge:` payload and `settings.oats.okf` the command should run with:
|
|
114
|
+
Each soul that uses oats.okf has an `okf.json` beside its `soul.yaml`:
|
|
171
115
|
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
oats okf init --base team --nodes /absolute/config/team-nodes.json --confirm --soul domain-expert --json
|
|
175
|
-
# Git: writes an operator proposal, never pushes or claims acceptance.
|
|
176
|
-
oats okf init --base project --nodes /absolute/config/project-nodes.json --output /absolute/new-bundle-stage --soul domain-expert --json
|
|
116
|
+
```json
|
|
117
|
+
{ "version": 1, "owner": "domain-expert", "owns": ["project/expert"], "reads": ["project/steward", "team/operations"] }
|
|
177
118
|
```
|
|
178
119
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
lock does not pin (`E_PACKAGE_MISSING` until `oats sync` locks the declared
|
|
188
|
-
version; drifted content is `E_PACKAGE_INTEGRITY`).
|
|
189
|
-
*0.25.0 still answers `E_CAPABILITY_INACTIVE` here (the operator-level dispatch
|
|
190
|
-
lands in 0.25.1); the interim is to run the module binary directly with
|
|
191
|
-
`OATS_SETTINGS` and `OATS_CLI_BIN` set, as the tarball smoke does.*
|
|
192
|
-
|
|
193
|
-
Put the Git proposal at the configured root in an operator-owned checkout and
|
|
194
|
-
review/merge it through a PR before spawning working sources. Existing ownership
|
|
195
|
-
changes require an explicit reviewed operator change, not harvest. The standalone
|
|
196
|
-
capability includes JSON Schemas; filesystem containment, ownership and full OKF
|
|
197
|
-
validation remain additional runtime checks.
|
|
198
|
-
|
|
199
|
-
## Working-agent reads and capture
|
|
200
|
-
|
|
201
|
-
At session start, after compaction and on resume, read `STATE.md` and the relevant
|
|
202
|
-
knowledge indexes. `knowledge/view.json` identifies each base's relative path,
|
|
203
|
-
digest and Git accepted head. Content lives under `knowledge/bases/<alias>/`.
|
|
204
|
-
Follow relevant links only; do not bulk-load bases. A link `/expert/decision.md`
|
|
205
|
-
is rooted in **that base**, not filesystem `/`. Consult prior decisions before
|
|
206
|
-
re-deriving them and cite base/node/concept paths.
|
|
207
|
-
|
|
208
|
-
**Working agents never write accepted knowledge or soul knowledge.** This is an
|
|
209
|
-
instruction boundary, not an OS sandbox; tools still have the operator's access.
|
|
210
|
-
Snapshots are immutable by protocol, not live mounts. For current accepted text:
|
|
120
|
+
- `owner` is the soul's stable owner ID, which the base's `okf-base.json`
|
|
121
|
+
names as the owner of each of its nodes.
|
|
122
|
+
- `owns` lists the `alias/node` destinations the harvester may write; `reads`
|
|
123
|
+
lists the nodes the soul consults first. **Neither is an access control
|
|
124
|
+
list:** every configured base is readable.
|
|
125
|
+
- A missing `okf.json`, base metadata or index fails the spawn; nothing is
|
|
126
|
+
bootstrapped empty. A legacy `soul/knowledge/` fails it with a migration
|
|
127
|
+
diagnostic.
|
|
211
128
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
oats okf refresh --json
|
|
216
|
-
# From the deployment directory (oats-local.yaml), even after source retirement — --soul selects the resolution:
|
|
217
|
-
oats okf read --source /absolute/state/sources/UUID/source.json --base project --path expert/index.md --soul domain-expert --json
|
|
218
|
-
oats okf refresh --source /absolute/state/sources/UUID/source.json --soul domain-expert --json
|
|
219
|
-
```
|
|
129
|
+
`oats okf init` creates a base ([operator commands](#operator-level-commands)):
|
|
130
|
+
a directory base directly (`--confirm`), a Git base as a proposal (`--output`)
|
|
131
|
+
that you merge through a PR.
|
|
220
132
|
|
|
221
|
-
|
|
222
|
-
**Every `--source` read/refresh** places its view under
|
|
223
|
-
`<stateDir>/sources/<source-id>/views/`, even while the source is live. It never
|
|
224
|
-
writes a cache into the invoking repository, a retired home or a replacement
|
|
225
|
-
home. Results identify the actual path and provider receipts. Choose `--home`
|
|
226
|
-
or `--source`, not both. `read` returns full Markdown text; it has no preview cap.
|
|
227
|
-
|
|
228
|
-
A Git PR is not accepted until its merge is visible on the accepted branch.
|
|
229
|
-
Directory reads hold the cooperative publication lock while copying; a pending
|
|
230
|
-
journal blocks fresh views, not existing snapshots. All bases and references
|
|
231
|
-
validate before a view is published. Old views remain available; there is no
|
|
232
|
-
automatic garbage collection.
|
|
233
|
-
|
|
234
|
-
Working agents keep state current, append milestones and capture non-obvious
|
|
235
|
-
insights as Markdown notes with provenance. They are not instructed to run a
|
|
236
|
-
harvest after commits or taught worker mechanics. Capture should be cheap;
|
|
237
|
-
importance is the independent judge's decision.
|
|
238
|
-
|
|
239
|
-
## Durable evidence and retirement
|
|
240
|
-
|
|
241
|
-
Required spawn registers a random source ID outside the home; the home retains
|
|
242
|
-
only a pointer. The durable descriptor freezes bindings, owner destinations,
|
|
243
|
-
source role and allowlisted provenance, not credentials or wholesale launch
|
|
244
|
-
metadata. State includes:
|
|
245
|
-
|
|
246
|
-
```text
|
|
247
|
-
<stateDir>/owners.json
|
|
248
|
-
<stateDir>/sources/<uuid>/source.json
|
|
249
|
-
<stateDir>/sources/<uuid>/status.json
|
|
250
|
-
<stateDir>/sources/<uuid>/inputs/<hash>.json
|
|
251
|
-
<stateDir>/sources/<uuid>/runs/<uuid>/
|
|
252
|
-
<stateDir>/sources/<uuid>/views/
|
|
253
|
-
<stateDir>/migrations/<uuid>/
|
|
254
|
-
```
|
|
133
|
+
## The harvest switch
|
|
255
134
|
|
|
256
|
-
|
|
257
|
-
remain untouched. Through the supported `OATS_CLI_BIN` boundary, capture uses
|
|
258
|
-
native `capture --home`, then `recall --ids-only` byte metadata to plan bounded
|
|
259
|
-
windows before fetching full text. Full returned record text is copied into
|
|
260
|
-
custody, not saved as commands that still need the source home. Privacy-excluded
|
|
261
|
-
sessions remain excluded; raw excluded transcripts are not copied.
|
|
262
|
-
|
|
263
|
-
Final capture drains the visible backlog before certifying custody. The capture
|
|
264
|
-
budget is 85 seconds; timeouts, holds, skips, malformed/incomplete records or a
|
|
265
|
-
single turn over 1 MiB fail closed and retain the source home for retry rather
|
|
266
|
-
than truncate evidence. A genuinely empty record is reported honestly.
|
|
267
|
-
Retirement captures/enqueues; **it does not wait for a model or GitHub**.
|
|
268
|
-
After successful custody transfer the home may disappear while judgment and
|
|
269
|
-
publication continue. Unexpected disappearance leaves existing evidence usable
|
|
270
|
-
but reports `finalCaptureUncertified`, not fictitious final capture success.
|
|
271
|
-
Durable evidence has no automatic deletion.
|
|
272
|
-
|
|
273
|
-
One scheduler **command job per source** runs from stable deployment context,
|
|
274
|
-
using the durable descriptor and source soul selector. Dispatch remains activation
|
|
275
|
-
and trust gated after retirement, without inheriting another instance's identity.
|
|
276
|
-
Registration idempotently creates/verifies the job; setup failures are retryable,
|
|
277
|
-
and disabled jobs are not silently re-enabled. No host timer is installed without
|
|
278
|
-
explicit operator consent. See [schedules](schedules.md#okf-v2-source-jobs).
|
|
279
|
-
|
|
280
|
-
## Independent judgment and delivery
|
|
281
|
-
|
|
282
|
-
A worker uses **`work: directory`**, never an attached source tree. It stages
|
|
283
|
-
`work/bases/<alias>/` independently of the source branch, runtime and lifetime.
|
|
284
|
-
It reads durable `input.json` and `staging.json`, edits only owned staged nodes
|
|
285
|
-
and allowed navigation, and writes `judgment.json`. A scaffold-only request
|
|
286
|
-
stops before any model launch. Service agents do not register/capture themselves;
|
|
287
|
-
no-launch sources cannot cause scheduled model launches.
|
|
288
|
-
|
|
289
|
-
OKF's two-part promotion test is: would a future instance act differently, **and**
|
|
290
|
-
could it not discover this by reading the repository? Decisions and rationale,
|
|
291
|
-
rejected alternatives, discovered limits and owned/freshness-marked slow state
|
|
292
|
-
qualify. Code descriptions, task residue, secrets and verbatim third-party
|
|
293
|
-
messages do not. Preserve explicit human acceptance evidence instead of
|
|
294
|
-
re-judging accepted decisions. These are OKF choices, not kernel-wide doctrine.
|
|
295
|
-
|
|
296
|
-
Each input gets `promote`, `merge` or `drop`, a reason and actual concept paths.
|
|
297
|
-
Concepts cite input hashes and record turn IDs. Completion validates ownership,
|
|
298
|
-
base navigation/history, full OKF conformance, baseline, provenance and explicit
|
|
299
|
-
judgment; credential-shaped output checks do not replace human/model judgment.
|
|
300
|
-
Deleting a staged concept requires an explicit removal reason. Workers never
|
|
301
|
-
edit live notes, accepted bases or soul skills themselves.
|
|
302
|
-
|
|
303
|
-
| Provider | Successful delivery |
|
|
304
|
-
|---|---|
|
|
305
|
-
| Git | Verified content delta, real commit/push and same-repository PR through native `git`/`gh`. No force push, source-branch commit or direct fallback. Merge-visible acceptance is separate from PR delivery. |
|
|
306
|
-
| Directory | Durable proposal, cooperative base lock, baseline comparison, publication journal, file-by-file atomic replacement and full validation/digest receipt. Pending publication blocks fresh reads. No Git dependency. |
|
|
135
|
+
Harvest is off unless the **host** switches it on:
|
|
307
136
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
137
|
+
| Where | Setting | Effect |
|
|
138
|
+
|---|---|---|
|
|
139
|
+
| `oats-local.yaml` | `settings.oats.okf.harvest: on` (default `off`) | This host harvests the working souls it spawns. |
|
|
140
|
+
| `soul.yaml` | `knowledge: { harvest: off }` | This soul is never harvested. The opt-out is absolute. |
|
|
141
|
+
|
|
142
|
+
- A soul can only opt out. A soul's `harvest: on` is ignored with a warning,
|
|
143
|
+
and keeps that soul off until the line is removed. An unreadable opt-out
|
|
144
|
+
counts as off.
|
|
145
|
+
- **Off means no capture at all:** no source, custody or schedule, and no
|
|
146
|
+
final capture at retire. A manual `oats okf harvest` answers
|
|
147
|
+
`E_HARVEST_OFF`. Consultation works either way.
|
|
148
|
+
- On applies to new spawns. Off (host or soul) stops capture at a source's
|
|
149
|
+
next scheduled run; evidence already in custody stays.
|
|
150
|
+
- `oats okf setup --harvest on|off` writes the host setting;
|
|
151
|
+
`oats okf harvest-status` reports the effective value, the row that decided
|
|
152
|
+
it and the registered sources.
|
|
313
153
|
|
|
314
154
|
## Knowledge operations
|
|
315
155
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
> capture, custody and delivery. The design and its decisions are in
|
|
319
|
-
> [the knowledge-operations plan](design/2026-09-26-okf-knowledge-operations.md).
|
|
320
|
-
> The setup procedure is the `oats-onboarding` skill ("Knowledge operations with
|
|
321
|
-
> OKF") and okf's `okf-trigger-setup`.
|
|
322
|
-
|
|
323
|
-
From 4.0.0, harvested knowledge is judged by a harvester, reviewed by a
|
|
324
|
-
maintainer and merged without an operator in the loop, except where a merge
|
|
325
|
-
would supersede a human-accepted decision.
|
|
156
|
+
The rationale is in the
|
|
157
|
+
[knowledge-operations design record](design/2026-09-26-okf-knowledge-operations.md).
|
|
326
158
|
|
|
327
159
|
### The flow
|
|
328
160
|
|
|
329
|
-
1. **
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
2. **
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
`
|
|
339
|
-
owned and
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
`
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
161
|
+
1. **Consult.** A working instance reads its soul's bases remotely at their
|
|
162
|
+
accepted state (no local copy): at task start, after compaction and before
|
|
163
|
+
decisions. It keeps its own `STATE.md`, `log.md` and `notes/`, and never
|
|
164
|
+
writes accepted knowledge (an instruction boundary, not a sandbox).
|
|
165
|
+
2. **Capture** (harvest on). Spawn registers a durable source outside the home
|
|
166
|
+
and a scheduler job, `okf-<source id>`. Each job run, and the final capture
|
|
167
|
+
at retire, copies notes and bounded transcript windows into custody.
|
|
168
|
+
Retire never waits for judgment or GitHub.
|
|
169
|
+
3. **Harvest.** The job spawns the package soul `oats.okf/knowledge-harvester`
|
|
170
|
+
(harness from `harvest-runtime`). It judges the input, edits only the
|
|
171
|
+
source's owned nodes and delivers: for a Git base, a PR labelled
|
|
172
|
+
`okf-harvest` with a fenced `okf-harvest` provenance block. It stays until
|
|
173
|
+
the PR is merged or closed and never closes it. A directory base gets a
|
|
174
|
+
journalled publication instead.
|
|
175
|
+
4. **Review.** A trigger spawns a new `oats.okf/knowledge-maintainer` per
|
|
176
|
+
harvest PR. It records a verdict (`merge`, `amend+merge`,
|
|
177
|
+
`request-changes` or `close`), merges with the host's `gh` and tells the
|
|
178
|
+
harvester. A PR that would supersede a human-accepted decision gets
|
|
179
|
+
`okf-needs-human` and waits for a human.
|
|
180
|
+
|
|
181
|
+
The promotion test is in
|
|
182
|
+
[What deserves to become knowledge](knowledge-theory.md#what-deserves-to-become-knowledge).
|
|
183
|
+
Both package souls hold `knowledge: none`, so nothing harvests them. They
|
|
184
|
+
message each other through the messaging capability, in the deployment's
|
|
185
|
+
default team.
|
|
186
|
+
|
|
187
|
+
### Triggers
|
|
188
|
+
|
|
189
|
+
- **Source jobs** run from the deployment and outlive the source instance.
|
|
190
|
+
Registration never installs a host timer: `oats schedule host install` is
|
|
191
|
+
an explicit step. A drained, retired source's job is removed.
|
|
192
|
+
`oats schedule disable okf-<source id>` brakes one source; it is not the
|
|
193
|
+
switch. See [Knowledge harvest jobs](schedules.md#knowledge-harvest-jobs).
|
|
194
|
+
- **The review trigger** comes from the package template
|
|
195
|
+
`oats.okf:harvest-review`: one workspace file
|
|
196
|
+
(`oats-triggers/okf-harvest-review.yaml`, `runsOn` the host, `owner` a
|
|
197
|
+
GitHub account that can merge on the knowledge-base repo), or
|
|
198
|
+
`oats trigger add --from oats.okf:harvest-review --set repo=github.com/<owner>/<repo>`
|
|
199
|
+
on one machine. It is independent of the harvest switch. See
|
|
200
|
+
[Triggers](schedules.md#triggers) and
|
|
201
|
+
[Workspace triggers and schedules](schedules.md#workspace-triggers-and-schedules).
|
|
202
|
+
|
|
203
|
+
The setup procedure is the `okf-trigger-setup` skill. Keep harvest off until
|
|
204
|
+
its `oats trigger test` passes.
|
|
362
205
|
|
|
363
206
|
### Who gets which okf skills
|
|
364
207
|
|
|
365
208
|
| Capability | Composed into | Skills | Inject |
|
|
366
209
|
|---|---|---|---|
|
|
367
|
-
| `oats.okf` | every working soul
|
|
368
|
-
| `oats.okf-harvest` | `oats.okf/knowledge-harvester`
|
|
369
|
-
| `oats.okf-maintenance` | `oats.okf/knowledge-maintainer`
|
|
370
|
-
|
|
371
|
-
Working souls get no promotion doctrine: the harvester is the only judge of
|
|
372
|
-
what is promoted, and the maintainer the only one who merges. The shared
|
|
373
|
-
skills ship as identical copies in each capability. The harvester and the
|
|
374
|
-
maintainer hold no knowledge slot, so nothing harvests them.
|
|
210
|
+
| `oats.okf` | every working soul it serves | [`okf-consultation`](../capabilities/oats-okf/skills/okf-consultation/SKILL.md), [`okf-instance-knowledge`](../capabilities/oats-okf/skills/okf-instance-knowledge/SKILL.md) | Consult soul and instance knowledge; capture with judgment. |
|
|
211
|
+
| `oats.okf-harvest` | `oats.okf/knowledge-harvester` | `knowledge-theory`, [`knowledge-harvest`](../capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md), `okf-authoring` | A judge; its staged roots are its only write surface. |
|
|
212
|
+
| `oats.okf-maintenance` | `oats.okf/knowledge-maintainer` | `knowledge-theory`, [`knowledge-review`](../capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md), `okf-authoring`, [`okf-trigger-setup`](../capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md) | One PR per instance; never supersede silently. |
|
|
375
213
|
|
|
376
|
-
|
|
214
|
+
Working souls get no promotion doctrine: only the harvester judges and only
|
|
215
|
+
the maintainer merges. `knowledge-theory` and `okf-authoring` ship as
|
|
216
|
+
identical copies in both role capabilities.
|
|
377
217
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
| Where | Setting | Effect |
|
|
381
|
-
|---|---|---|
|
|
382
|
-
| The host, `oats-local.yaml` | `settings.oats.okf.harvest: on` (default `off`) | This host harvests its working souls. |
|
|
383
|
-
| A soul, `soul.yaml` | `knowledge: { harvest: off }` | This soul is never harvested, whatever the host says. |
|
|
218
|
+
## Inspection and operator commands
|
|
384
219
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
Keep harvest off until the end-to-end check in `okf-trigger-setup` passes.
|
|
220
|
+
- **From an instance home**, `oats okf …` runs the home's copy of the module
|
|
221
|
+
with the settings recorded at spawn.
|
|
222
|
+
- **From the deployment directory** (holding `oats-local.yaml`), in a shell
|
|
223
|
+
without another instance's `OATS_*` identity, every capability command
|
|
224
|
+
needs `--soul <name>` (`E_BAD_ARGS` without it). The kernel resolves the
|
|
225
|
+
soul as a spawn would, fetches its module at the locked commit into
|
|
226
|
+
`<deployment>/.oats/modules/` and runs it with the soul's merged settings.
|
|
227
|
+
An unlocked package is `E_PACKAGE_MISSING` until `oats sync`.
|
|
394
228
|
|
|
395
|
-
###
|
|
229
|
+
### Consult
|
|
396
230
|
|
|
397
|
-
|
|
398
|
-
|
|
231
|
+
Consult commands read the accepted state, never an open PR. All take `--json`
|
|
232
|
+
and `--fresh` (refetch the accepted branch now):
|
|
399
233
|
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
234
|
+
```bash
|
|
235
|
+
oats okf bases # accepted commit or digest, freshness, validity
|
|
236
|
+
oats okf index [--base ALIAS] [NODE] # owned, then read, nodes' indexes
|
|
237
|
+
oats okf cat --base project /expert/decisions/retry-policy.md [--from PATH]
|
|
238
|
+
oats okf ls --base project /expert/lessons
|
|
239
|
+
oats okf links --base project /expert/decisions/retry-policy.md
|
|
240
|
+
oats okf search backoff [--base ALIAS | --all] [--node NODE] [--regex] [--case-sensitive]
|
|
406
241
|
```
|
|
407
242
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
## Inspection and operator commands
|
|
243
|
+
- They run from an instance home, or from the deployment with `--soul NAME`
|
|
244
|
+
and `--home PATH` or `--source FILE` (the source form works after the
|
|
245
|
+
instance retired).
|
|
246
|
+
- `/node/x.md` is rooted in the base; paths never leave it. A failed fetch
|
|
247
|
+
serves the cached commit with `stale: true`.
|
|
248
|
+
- `oats okf read` and `refresh` answer `E_REMOVED`: use `cat` and `index`.
|
|
249
|
+
- `okf-consultation` teaches navigation, search and citation.
|
|
416
250
|
|
|
417
|
-
|
|
418
|
-
dispatcher resolves `okf` from the home's materialized module
|
|
419
|
-
(`instance.json.modules` → `<home>/.oats/modules/oats.okf/`). For cross-source
|
|
420
|
-
or retired-source commands, run from the **deployment directory** (the one
|
|
421
|
-
holding `oats-local.yaml`) in a clean operator shell without another instance's
|
|
422
|
-
`OATS_*`/`PI_*` identity, and select the source soul with `--soul <name>`: the
|
|
423
|
-
kernel resolves that soul as a spawn would and dispatches to the deployment's
|
|
424
|
-
copy of its `oats.okf` module with the soul's merged payload (see
|
|
425
|
-
[Acquire, bind and provision explicitly](#acquire-bind-and-provision-explicitly)).
|
|
426
|
-
No `oats-config.yaml` chain is consulted; a namespace no module of the soul
|
|
427
|
-
provides is `E_UNKNOWN_COMMAND`.
|
|
251
|
+
### Inspect
|
|
428
252
|
|
|
429
253
|
```bash
|
|
430
|
-
|
|
431
|
-
oats okf inspect --home /absolute/instance-home --json
|
|
432
|
-
oats operation run knowledge:inspect --home /absolute/instance-home --json
|
|
433
|
-
# Durable source selection after the home disappears:
|
|
254
|
+
oats okf inspect --home /absolute/instance-home --soul domain-expert --json
|
|
434
255
|
oats okf inspect --source /absolute/state/sources/UUID/source.json --soul domain-expert --json
|
|
435
|
-
|
|
436
|
-
oats okf harvest --no-launch --json
|
|
437
|
-
oats okf run-source --source /absolute/state/sources/UUID/source.json --manual --no-launch --soul domain-expert --json
|
|
256
|
+
oats okf harvest-status --soul domain-expert --json
|
|
438
257
|
```
|
|
439
258
|
|
|
440
|
-
`inspect`
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
`
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
259
|
+
`inspect` is read-only: frozen `owns`, `reads` and bases, the accepted
|
|
260
|
+
resolution registered at spawn, durable receipts (capture, processing,
|
|
261
|
+
delivery, acceptance) and scheduler health. A live home adds `STATE.md`,
|
|
262
|
+
`log.md` and pending notes (256 KiB preview each, `truncated: true` beyond);
|
|
263
|
+
a retired home shows durable records only; a harvest-off home shows its
|
|
264
|
+
declaration, bases and working memory. `oats operation run knowledge:inspect
|
|
265
|
+
--home PATH --json` is the same view through the generic operation interface.
|
|
266
|
+
|
|
267
|
+
### Operator-level commands
|
|
268
|
+
|
|
269
|
+
Run these from the deployment with `--soul <name>`:
|
|
270
|
+
|
|
271
|
+
| Command | Purpose |
|
|
272
|
+
|---|---|
|
|
273
|
+
| `setup --harvest on\|off` | Write `settings.oats.okf.harvest` in `oats-local.yaml`. |
|
|
274
|
+
| `setup --source FILE [--enable \| --disable] [--install-host]` | Verify, toggle or host-install a source's job. |
|
|
275
|
+
| `run-source --source FILE [--manual] [--no-launch]` | Run a source's job by hand; `--no-launch` stops at a scaffold. |
|
|
276
|
+
| `init --base ALIAS --nodes FILE (--confirm \| --output PATH)` | Provision a directory base or stage a Git proposal. |
|
|
277
|
+
| `migrate …` | Move a legacy `soul/knowledge/` into a base. |
|
|
278
|
+
| `unlock --lock PATH --token TOKEN` | Release a directory-base lock of a dead local process. |
|
|
279
|
+
|
|
280
|
+
From an instance home, `oats okf harvest [--no-launch]` captures now and
|
|
281
|
+
requests a harvester.
|
|
282
|
+
|
|
283
|
+
### Completion and recovery
|
|
284
|
+
|
|
285
|
+
The harvester completes its run with `oats okf-harvest complete`, which calls
|
|
286
|
+
the source's `oats okf complete`. The operator forms are for recovery:
|
|
463
287
|
|
|
464
288
|
```bash
|
|
465
|
-
oats okf complete --source /absolute/state/sources/UUID/source.json --run RUN_UUID --judgment
|
|
466
|
-
oats okf retry --source /absolute/state/sources/UUID/source.json --soul domain-expert --json
|
|
289
|
+
oats okf complete --source /absolute/state/sources/UUID/source.json --run RUN_UUID [--judgment FILE] --soul domain-expert --json
|
|
290
|
+
oats okf retry --source /absolute/state/sources/UUID/source.json [--launch | --rejudge | --run ID --rejudge | --adopt-home PATH] --soul domain-expert --json
|
|
467
291
|
```
|
|
468
292
|
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
[standalone runtime guide](https://github.com/awebai/oats-okf#independent-worker-and-completion)
|
|
476
|
-
for exact recovery, adoption and lock-release procedures.
|
|
293
|
+
`retry` never discards an uncertain delivery; `--rejudge` keeps old proposals
|
|
294
|
+
and refreshes only unresolved destinations. After a PR merges, `complete` for
|
|
295
|
+
the run without `--judgment` records acceptance. Never remove a pending
|
|
296
|
+
directory journal to force progress. Exact recovery, adoption and migration
|
|
297
|
+
procedures are in the
|
|
298
|
+
[oats-okf README](https://github.com/awebai/oats-okf#independent-worker-and-completion).
|
|
477
299
|
|
|
478
300
|
## Without a knowledge capability
|
|
479
301
|
|
|
480
|
-
`
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
migration and does not erase existing memory.
|
|
302
|
+
`knowledge: none`, on a soul or as the workspace default, is valid: no OKF
|
|
303
|
+
state, instructions or harvest source. Another capability may fill the slot
|
|
304
|
+
with its own model ([authoring guide](knowledge-capability-authoring.md)).
|
|
305
|
+
Switching slots migrates and erases nothing.
|