@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.
Files changed (224) hide show
  1. package/README.md +12 -6
  2. package/bin/oats.mjs +194 -50
  3. package/capabilities/oats-aweb/bin/oats-aweb.mjs +538 -204
  4. package/capabilities/oats-aweb/injects/aweb.md +1 -1
  5. package/capabilities/oats-aweb/lib/binding-wire.mjs +31 -22
  6. package/capabilities/oats-aweb/oats.json +5 -12
  7. package/capabilities/oats-aweb/skills/VENDORED.md +4 -4
  8. package/capabilities/oats-aweb/skills/aweb-team-membership/SKILL.md +1 -1
  9. package/capabilities/oats-aweb/skills/oats-aweb/SKILL.md +83 -13
  10. package/capabilities/oats-code-review/injects/reviewer.md +26 -0
  11. package/capabilities/oats-code-review/oats.json +16 -0
  12. package/capabilities/oats-code-review/skills/adversarial-review/SKILL.md +66 -0
  13. package/capabilities/oats-code-review/skills/review-dev-docs/SKILL.md +30 -0
  14. package/capabilities/oats-code-review/skills/security-review/SKILL.md +56 -0
  15. package/capabilities/oats-code-review/skills/simplification-review/SKILL.md +34 -0
  16. package/capabilities/oats-developer/injects/developer.md +38 -0
  17. package/capabilities/oats-developer/oats.json +17 -0
  18. package/capabilities/oats-developer/skills/execution-strategy/SKILL.md +43 -0
  19. package/capabilities/oats-developer/skills/maintain-dev-docs/SKILL.md +47 -0
  20. package/capabilities/oats-developer/skills/run-the-review-loop/SKILL.md +65 -0
  21. package/capabilities/oats-developer/skills/understand-the-spec/SKILL.md +37 -0
  22. package/capabilities/oats-developer/skills/worktrees/SKILL.md +36 -0
  23. package/capabilities/oats-engineering-expert/injects/expert.md +37 -0
  24. package/capabilities/oats-engineering-expert/oats.json +17 -0
  25. package/capabilities/oats-engineering-expert/skills/coordinate-developers/SKILL.md +37 -0
  26. package/capabilities/oats-engineering-expert/skills/coordinate-experts/SKILL.md +52 -0
  27. package/capabilities/oats-engineering-expert/skills/land-your-prs/SKILL.md +50 -0
  28. package/capabilities/oats-engineering-expert/skills/plan-and-spec/SKILL.md +53 -0
  29. package/capabilities/oats-engineering-expert/skills/verify-developer-work/SKILL.md +49 -0
  30. package/capabilities/oats-okf/bin/oats-okf.mjs +8 -4
  31. package/capabilities/oats-okf/lib/binding-wire.mjs +47 -15
  32. package/capabilities/oats-okf/lib/inspection.mjs +26 -7
  33. package/capabilities/oats-okf/lib/sources.mjs +16 -2
  34. package/capabilities/oats-okf/lib/worker.mjs +5 -16
  35. package/capabilities/oats-okf/oats.json +6 -3
  36. package/capabilities/oats-okf-harvest/bin/okf-harvest.mjs +2 -2
  37. package/capabilities/oats-okf-harvest/oats.json +3 -3
  38. package/capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md +6 -6
  39. package/capabilities/oats-okf-maintenance/bin/okf-maintenance.mjs +2 -2
  40. package/capabilities/oats-okf-maintenance/injects/maintainer.md +1 -1
  41. package/capabilities/oats-okf-maintenance/oats.json +2 -2
  42. package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +1 -1
  43. package/capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md +11 -23
  44. package/capabilities/oats-workspace-experts/injects/oats-experts.md +26 -0
  45. package/capabilities/oats-workspace-experts/oats.json +9 -0
  46. package/docs/capabilities.md +160 -171
  47. package/docs/capability-manifest.schema.json +6 -11
  48. package/docs/configuration.md +213 -64
  49. package/docs/design/2026-09-16-knowledge-capability-contract.md +36 -50
  50. package/docs/design/2026-09-23-workspace-module-contracts.md +377 -544
  51. package/docs/design/2026-09-26-okf-knowledge-operations.md +132 -357
  52. package/docs/design/2026-09-27-team-model-v2.md +97 -117
  53. package/docs/design/2026-09-28-automations-trust.md +38 -0
  54. package/docs/design/2026-09-28-soul-launch-preference.md +63 -0
  55. package/docs/design/HISTORY.md +65 -0
  56. package/docs/design/README.md +23 -54
  57. package/docs/desktop-cli-api.md +1787 -1777
  58. package/docs/desktop.md +30 -91
  59. package/docs/execution-targets.md +146 -292
  60. package/docs/first-team.md +31 -17
  61. package/docs/implementation.md +76 -288
  62. package/docs/integrations.md +118 -320
  63. package/docs/knowledge-capability-authoring.md +25 -52
  64. package/docs/knowledge-reference/acceptance.md +3 -3
  65. package/docs/knowledge-reference/adoption.md +1 -1
  66. package/docs/knowledge-reference/harvester.md +2 -2
  67. package/docs/knowledge-reference/package-craft.md +3 -3
  68. package/docs/knowledge-reference/provider-mapping.md +3 -6
  69. package/docs/knowledge-reference/reader-capture.md +3 -3
  70. package/docs/knowledge-theory.md +62 -166
  71. package/docs/knowledge.md +225 -404
  72. package/docs/layers.md +42 -97
  73. package/docs/oats-local.schema.json +58 -5
  74. package/docs/oats-membership.schema.json +1 -8
  75. package/docs/oats-package.schema.json +5 -5
  76. package/docs/oats-workspace.schema.json +8 -22
  77. package/docs/official-catalog.md +25 -28
  78. package/docs/packages.md +45 -63
  79. package/docs/plans/0.30-close-out.md +61 -0
  80. package/docs/release-lane.md +77 -0
  81. package/docs/release-notes/oats-framework-v1.1.3.md +10 -8
  82. package/docs/release-notes/v0.19.0.md +48 -147
  83. package/docs/release-notes/v0.19.1.md +2 -3
  84. package/docs/release-notes/v0.19.3.md +2 -15
  85. package/docs/release-notes/v0.20.0.md +0 -15
  86. package/docs/release-notes/v0.22.0.md +71 -138
  87. package/docs/release-notes/v0.22.1.md +42 -90
  88. package/docs/release-notes/v0.22.10.md +1 -1
  89. package/docs/release-notes/v0.22.11.md +1 -47
  90. package/docs/release-notes/v0.22.12.md +4 -13
  91. package/docs/release-notes/v0.22.13.md +1 -42
  92. package/docs/release-notes/v0.22.14.md +3 -11
  93. package/docs/release-notes/v0.22.15.md +1 -46
  94. package/docs/release-notes/v0.22.16.md +6 -8
  95. package/docs/release-notes/v0.22.18.md +1 -99
  96. package/docs/release-notes/v0.22.19.md +3 -14
  97. package/docs/release-notes/v0.22.2.md +6 -15
  98. package/docs/release-notes/v0.22.3.md +0 -1
  99. package/docs/release-notes/v0.22.4.md +1 -14
  100. package/docs/release-notes/v0.22.5.md +2 -12
  101. package/docs/release-notes/v0.22.6.md +0 -3
  102. package/docs/release-notes/v0.23.0.md +9 -25
  103. package/docs/release-notes/v0.23.1.md +9 -25
  104. package/docs/release-notes/v0.23.2.md +2 -4
  105. package/docs/release-notes/v0.24.0.md +56 -97
  106. package/docs/release-notes/v0.24.1.md +7 -11
  107. package/docs/release-notes/v0.24.10.md +34 -45
  108. package/docs/release-notes/v0.24.11.md +12 -20
  109. package/docs/release-notes/v0.24.12.md +35 -48
  110. package/docs/release-notes/v0.24.13.md +34 -41
  111. package/docs/release-notes/v0.24.2.md +9 -13
  112. package/docs/release-notes/v0.24.3.md +7 -11
  113. package/docs/release-notes/v0.24.4.md +6 -6
  114. package/docs/release-notes/v0.24.5.md +6 -10
  115. package/docs/release-notes/v0.24.6.md +2 -5
  116. package/docs/release-notes/v0.24.7.md +46 -75
  117. package/docs/release-notes/v0.24.8.md +58 -96
  118. package/docs/release-notes/v0.24.9.md +38 -54
  119. package/docs/release-notes/v0.25.0.md +59 -76
  120. package/docs/release-notes/v0.25.1.md +57 -81
  121. package/docs/release-notes/v0.25.2.md +51 -70
  122. package/docs/release-notes/v0.25.3.md +11 -13
  123. package/docs/release-notes/v0.25.4.md +9 -13
  124. package/docs/release-notes/v0.25.5.md +3 -5
  125. package/docs/release-notes/v0.25.6.md +20 -29
  126. package/docs/release-notes/v0.25.7.md +5 -7
  127. package/docs/release-notes/v0.25.8.md +26 -39
  128. package/docs/release-notes/v0.26.0.md +175 -646
  129. package/docs/release-notes/v0.27.0.md +4 -5
  130. package/docs/release-notes/v0.27.1.md +4 -6
  131. package/docs/release-notes/v0.27.2.md +1 -1
  132. package/docs/release-notes/v0.28.0.md +57 -124
  133. package/docs/release-notes/v0.29.0.md +89 -208
  134. package/docs/release-notes/v0.29.1.md +1 -1
  135. package/docs/release-notes/v0.29.2.md +3 -4
  136. package/docs/release-notes/v0.30.0.md +205 -0
  137. package/docs/schedules.md +280 -363
  138. package/docs/servers.md +99 -117
  139. package/docs/soul.schema.json +2 -9
  140. package/docs/souls-and-instances.md +145 -158
  141. package/docs/workspaces.md +132 -215
  142. package/lib/automations.mjs +21 -6
  143. package/lib/core.mjs +226 -74
  144. package/lib/instance-events.mjs +1 -1
  145. package/lib/instance-inspect.mjs +109 -34
  146. package/lib/instance-lifecycle.mjs +14 -1
  147. package/lib/instance-resolution.mjs +26 -27
  148. package/lib/launch-preference.mjs +87 -0
  149. package/lib/materialize.mjs +3 -3
  150. package/lib/resolve.mjs +29 -87
  151. package/lib/schedule.mjs +1 -1
  152. package/lib/teams-verbs.mjs +195 -0
  153. package/lib/teams.mjs +190 -0
  154. package/lib/triggers.mjs +2 -2
  155. package/lib/workspace.mjs +54 -147
  156. package/package-catalog.json +9 -15
  157. package/package.json +1 -1
  158. package/skills/oats-getting-started/SKILL.md +25 -13
  159. package/capabilities/oats-review/injects/review.md +0 -69
  160. package/capabilities/oats-review/oats.json +0 -10
  161. package/capabilities/oats-review/skills/code-review/SKILL.md +0 -44
  162. package/capabilities/oats-review/skills/security-review/SKILL.md +0 -59
  163. package/docs/conventions.md +0 -90
  164. package/docs/design/2026-09-07-architecture-reassessment.md +0 -131
  165. package/docs/design/2026-09-07-desktop-souls-capabilities.md +0 -50
  166. package/docs/design/2026-09-07-mobile-agent-management-proposal.md +0 -228
  167. package/docs/design/2026-09-08-expert-assisted-deployment-proposal.md +0 -558
  168. package/docs/design/2026-09-13-knowledge-and-memory-direction.md +0 -744
  169. package/docs/design/2026-09-13-knowledge-implementation.md +0 -127
  170. package/docs/design/2026-09-13-knowledge-location-contract.md +0 -340
  171. package/docs/design/2026-09-14-artifact-retention-contract.md +0 -190
  172. package/docs/design/2026-09-14-portable-souls-and-git-workspaces.md +0 -708
  173. package/docs/design/2026-09-14-portable-souls-contract-amendments.md +0 -85
  174. package/docs/design/2026-09-14-portable-souls-explainer.md +0 -750
  175. package/docs/design/2026-09-15-captured-dispatch.md +0 -127
  176. package/docs/design/2026-09-15-captured-resolution-records.md +0 -143
  177. package/docs/design/2026-09-15-package-preparation.md +0 -100
  178. package/docs/design/2026-09-15-portable-data-contract.md +0 -121
  179. package/docs/design/2026-09-15-portable-declarations.md +0 -189
  180. package/docs/design/2026-09-15-portable-souls-handoff.md +0 -150
  181. package/docs/design/2026-09-15-portable-souls-implementation.md +0 -417
  182. package/docs/design/2026-09-15-selection-lock-and-approval.md +0 -122
  183. package/docs/design/2026-09-15-source-observation.md +0 -119
  184. package/docs/design/2026-09-16-captured-admission.md +0 -77
  185. package/docs/design/2026-09-16-captured-helper-dispatch.md +0 -105
  186. package/docs/design/2026-09-16-captured-launch-inputs.md +0 -42
  187. package/docs/design/2026-09-16-command-profile-preparation.md +0 -86
  188. package/docs/design/2026-09-16-fresh-install-first-rollout.md +0 -47
  189. package/docs/design/2026-09-16-fresh-operator-walkthrough.md +0 -282
  190. package/docs/design/2026-09-16-messaging-capability-contract.md +0 -59
  191. package/docs/design/2026-09-16-portable-migration-evidence.md +0 -158
  192. package/docs/design/2026-09-16-portable-onboarding.md +0 -179
  193. package/docs/design/2026-09-16-prepare-request-transport.md +0 -26
  194. package/docs/design/2026-09-16-provider-binding-codecs.md +0 -98
  195. package/docs/design/2026-09-16-provider-binding-wire.md +0 -274
  196. package/docs/design/2026-09-17-capability-helper-input-contract.md +0 -95
  197. package/docs/design/2026-09-17-captured-backend-parity.md +0 -53
  198. package/docs/design/2026-09-17-captured-native-start.md +0 -58
  199. package/docs/design/2026-09-17-portable-boundary-hookup.md +0 -19
  200. package/docs/design/2026-09-17-portable-boundary-resources.md +0 -52
  201. package/docs/design/2026-09-17-public-captured-start.md +0 -108
  202. package/docs/design/2026-09-17-public-prepare-request.md +0 -90
  203. package/docs/design/2026-09-18-captured-pi-host.md +0 -205
  204. package/docs/design/2026-09-18-first-cut-release-checklist.md +0 -131
  205. package/docs/design/2026-09-18-herdr-protocol-compatibility.md +0 -60
  206. package/docs/design/2026-09-20-redesign-program-board.md +0 -142
  207. package/docs/design/2026-09-20-workspace-and-portable-adoption-plan.md +0 -289
  208. package/docs/design/2026-09-20-workspace-onboarding-public.md +0 -207
  209. package/docs/design/2026-09-22-desktop-parity-seams.md +0 -58
  210. package/docs/design/2026-09-23-simplified-workspace-model.md +0 -711
  211. package/docs/design/2026-09-23-workspace-v2-implementation-plan.md +0 -65
  212. package/docs/design/2026-09-24-desktop-phase-f-boundary.md +0 -242
  213. package/docs/design/2026-09-24-phase-d-plan.md +0 -305
  214. package/docs/design/2026-09-25-teams-contract.md +0 -258
  215. package/docs/design/2026-09-26-desktop-design-brief-architecture.md +0 -241
  216. package/docs/design/desktop-ux-plan.md +0 -362
  217. package/docs/design/launch-configurations.md +0 -168
  218. package/docs/design/okf-mirror-provenance.md +0 -105
  219. package/docs/design/operations-contract.md +0 -141
  220. package/docs/oats-member.schema.json +0 -38
  221. package/skills/integration-authoring/SKILL.md +0 -84
  222. package/skills/oats-support/SKILL.md +0 -79
  223. package/skills/skill-craft/SKILL.md +0 -109
  224. package/skills/soul-craft/SKILL.md +0 -116
@@ -1,44 +0,0 @@
1
- ---
2
- name: code-review
3
- description: General code review discipline for reviewing a diff or commit range — correctness, design, readability, tests, and API surface, with severity-ranked, actionable findings. Use when asked to review code changes, a commit, a diff, or a PR for quality.
4
- ---
5
-
6
- # Code review
7
-
8
- Review the CHANGE, not the codebase. The standard (from Google's engineering
9
- practices): approve when the change **improves overall code health**, even if
10
- imperfect — demand blockers, suggest the rest.
11
-
12
- ## Pass order (read the diff twice)
13
-
14
- **Pass 1 — does it work?**
15
- - Correctness: logic errors, off-by-one, inverted conditions, wrong operator.
16
- - Edge cases: empty/null/undefined inputs, zero/negative counts, unicode,
17
- concurrent access, timeouts, partial failure mid-operation.
18
- - Error handling: swallowed exceptions, missing cleanup on the error path,
19
- errors that lie about the cause. Every catch must justify itself.
20
- - State: mutation of shared state, stale caches, ordering assumptions.
21
- - Resource lifecycle: files/handles/processes/listeners opened but not closed.
22
-
23
- **Pass 2 — should it be this way?**
24
- - Design: is this the simplest change that solves the problem? Flag
25
- speculative generality and dead configurability.
26
- - Consistency: does it follow the codebase's existing patterns, naming, and
27
- error conventions? (Local consistency beats personal preference.)
28
- - Readability: could a maintainer six months from now follow it without the
29
- PR description? Names carry meaning; comments explain WHY, not what.
30
- - API surface: new exports/flags/config keys are forever — are they earned?
31
- - Tests: does the change carry tests that would FAIL if the logic regressed?
32
- Tests that mirror the implementation instead of the behavior are findings.
33
- - Performance: only flag measurable problems (N+1, unbounded growth,
34
- sync-blocking hot paths) — not micro-optimizations.
35
-
36
- ## Reporting
37
-
38
- - Verdict: `APPROVE` / `APPROVE WITH NITS` / `NEEDS CHANGES`.
39
- - Each finding: `severity — file:line — what + why + concrete fix`.
40
- Severities: **blocker** (wrong/unsafe/regression), **important** (should
41
- fix before merge), **nit** (better, not required — prefix "Nit:").
42
- - Ask questions where intent is unclear instead of asserting a fault.
43
- - Do not pad: no restating the diff, no praise quotas, no style opinions a
44
- formatter could hold. If it's clean, say APPROVE and one line why.
@@ -1,59 +0,0 @@
1
- ---
2
- name: security-review
3
- description: Security-focused review of a diff or commit range — injection, secrets, trust boundaries, authz, unsafe deserialization, supply chain, and path/command safety, ranked by exploitability. Use when asked to security-review changes or as the second pass of a full review.
4
- ---
5
-
6
- # Security review
7
-
8
- Review the change as an attacker would read it: every new input is hostile,
9
- every boundary crossing is an opportunity. Grounded in the OWASP code-review
10
- model — findings ranked by exploitability, not by pattern-match count.
11
-
12
- ## Checklist by trust boundary
13
-
14
- **Inputs (anything the process didn't create itself)**
15
- - Command injection: user/config/network data reaching `exec`/`spawn`/shell
16
- strings. Quoting is not escaping; prefer argv arrays. Flag every
17
- interpolated shell string that carries external data.
18
- - Path traversal: joins with external segments (`../`), symlink following,
19
- zip-slip in extraction. Require canonicalize-then-prefix-check.
20
- - Injection into interpreters: SQL/NoSQL/LDAP/regex/eval/Function/template
21
- engines fed external strings.
22
- - Deserialization: YAML/JSON/pickle-style loads of untrusted bytes with
23
- type resolution or object construction.
24
- - SSRF: URLs from outside fetched by the server; check scheme/host pinning.
25
-
26
- **Secrets & data**
27
- - Hardcoded credentials, tokens, private keys — including in tests, fixtures,
28
- and example configs. Entropy-looking strings deserve a question.
29
- - Secrets in logs, error messages, process args (visible in `ps`), URLs.
30
- - New persistence of sensitive data: is it needed, is it protected, is it
31
- cleaned up on retire/delete paths?
32
-
33
- **AuthN/AuthZ**
34
- - New endpoints/commands/IPC surfaces: who can reach them, and what do they
35
- authorize against? "Bound to localhost" is a real but WEAK boundary — note
36
- what a local malicious process could do.
37
- - Privilege boundaries: does the change let low-trust config/data cause
38
- high-trust execution (hooks, plugins, migrations, CI)?
39
- - TOCTOU: check-then-use on files/permissions/state.
40
-
41
- **Supply chain & execution**
42
- - New dependencies: are they necessary, pinned, and from expected owners?
43
- - Downloaded/cloned artifacts: integrity-checked before execution?
44
- - Anything that writes then executes (temp scripts, curl|sh patterns).
45
-
46
- **Web-facing (when applicable)**
47
- - XSS: external strings reaching innerHTML/attributes without escaping.
48
- - CSRF on state-changing endpoints; CORS wildcards; missing content-type
49
- discipline on APIs.
50
-
51
- ## Reporting
52
-
53
- - Verdict shares the scale: `APPROVE` / `APPROVE WITH NITS` / `NEEDS CHANGES`
54
- — any credible injection/secret/authz finding is a **blocker**.
55
- - Each finding: `severity — file:line — attack scenario in one sentence +
56
- concrete fix`. If you cannot articulate the attack, downgrade to a
57
- question rather than inventing a threat.
58
- - Distinguish "exploitable now" from "hardening" — both are reportable,
59
- only the first blocks.
@@ -1,90 +0,0 @@
1
- # Conventions — canonical files and generated views
2
-
3
- OATS uses one canonical source for durable soul content and generated,
4
- instance-local views for deployment composition.
5
-
6
- ## Operating documents
7
-
8
- ```text
9
- souls/<name>/AGENTS.md # canonical role instructions (in the member repo)
10
- souls/<name>/CLAUDE.md -> AGENTS.md
11
- instance/AGENTS.md # generated regular file
12
- instance/CLAUDE.md -> AGENTS.md
13
- ```
14
-
15
- Never maintain an independent soul `CLAUDE.md`. Config-dependent capability,
16
- work-mode, and workspace instructions belong only in generated instance
17
- `AGENTS.md`; they must not be reconciled into the committed soul.
18
-
19
- Generated blocks use `<!-- oats:<source> src=<file> -->` markers for
20
- provenance. Edit the canonical soul, source file, or target binding, then spawn
21
- a new instance. `oats doctor --soul <name>` previews the same final composition.
22
-
23
- ## Skills
24
-
25
- The only OATS-managed runtime skill root is the instance:
26
-
27
- ```text
28
- instance/.agents/skills/ # canonical exact set
29
- instance/.claude/skills -> ../.agents/skills
30
- ```
31
-
32
- Spawn copies kernel + soul-private + active capability skills into real
33
- instance-local directories there. Directory symlinks are not used because
34
- harness recursive discovery may not descend through them. Under the workspace
35
- model (0.25) every capability is copied whole into
36
- `instance/.oats/modules/<capability>/` and its skills into
37
- `instance/.agents/skills/<capability>/<skill>/`; nothing is installed at a
38
- config level. Config-level `.agents/skills` is not an OATS capability source
39
- or an ambient runtime discovery root.
40
-
41
- Harnesses start normally (workspace-model decision 13, and the behaviour of
42
- every launch a 0.25 kernel performs, classic homes included): Pi starts with
43
- cwd = the instance home, the composed `AGENTS.md` appended to its system
44
- prompt, and its own skill, context and extension discovery intact — the
45
- instance's copied skills are found because they sit under cwd; machine-level
46
- and repo-level skills resolve exactly as without OATS. *(0.24 kernels started
47
- Pi with ambient skill and context discovery disabled and the one instance path
48
- explicit; that exclusion is gone.)* Claude runs provider-native: it reads the
49
- instance's `.claude/skills` and `CLAUDE.md` symlinks, and the operator's own
50
- user and project configuration — skills, plugins, settings — stays in effect.
51
- Neither harness gets a redirected config home.
52
- `composition.materialized.harnessPosture` in `instance.json` records what each
53
- instance actually exposes. `oats-getting-started` is the sole pre-workspace
54
- ambient bootstrap.
55
-
56
- Duplicate skill directory names within the OATS-composed set are errors
57
- (`E_SKILL_DUPLICATE`, naming both capabilities) unless the classic config's
58
- `skill-overrides` selects a source; between a composed skill and an ambient
59
- repo/machine skill the harness's own precedence decides (decision 16).
60
-
61
- ## Package locations
62
-
63
- **Workspace model (0.25, current):** nothing is installed. A capability lives
64
- where its owner keeps it and is copied whole into each instance at spawn:
65
-
66
- ```text
67
- <member repo>/capabilities/<name>/oats.json # member-tier capability, latest state (membership is the trust)
68
- <package repo>/oats-package/oats-package.json # package-tier: versioned via oats-workspace.yaml packages:
69
- <deployment>/oats-lock.json # lockfileVersion 3: package commit and integrity
70
- <instance>/.oats/modules/<capability>/ # the copy this instance runs
71
- ```
72
-
73
- ## Quick map
74
-
75
- | Thing | Canonical location |
76
- |---|---|
77
- | Shared declaration | `oats-workspace.yaml` in the host repo; `oats-membership.yaml` in every member |
78
- | Per-machine config | `<deployment>/oats-local.yaml` (uncommitted) |
79
- | Acquisition lock | `<deployment>/oats-lock.json` (v3) |
80
- | Soul source | `<member repo>/souls/<name>/` |
81
- | Soul operating doc | `souls/<name>/AGENTS.md` |
82
- | Soul Claude view | `souls/<name>/CLAUDE.md -> AGENTS.md` |
83
- | Soul-private skills | `souls/<name>/skills/` |
84
- | Instance operating doc | `instance/AGENTS.md` (generated) |
85
- | Instance skill set | `instance/.agents/skills/` |
86
- | Instance modules | `instance/.oats/modules/<capability>/` |
87
- | Instance metadata | `instance/instance.json` (`modules{}`, `providers{}`, `workspace{}`) |
88
-
89
- Symlinks prevent compatibility paths from drifting. Generated regular files
90
- separate canonical portable identity from scope-dependent runtime policy.
@@ -1,131 +0,0 @@
1
- # Architecture reassessment: usable agents with replaceable services
2
-
3
- Assessment of main `76c0ea4`, September 7, 2026. Requested by Juan after
4
- operating the Desktop; incorporates Pepe's terminal, shortcut, split and soul
5
- management feedback. This records the direction and implementation gaps, not a
6
- claim that every item below has shipped.
7
-
8
- The requirements authority for this assessment is Juan's September 3
9
- “Architecture simplification and generlization” in his OATS project KB:
10
- souls carry instructions and capabilities; a harvester converts ephemeral
11
- state into knowledge accessible through the selected knowledge capability;
12
- packages distribute souls and capabilities; OATS constructs and operates
13
- instances across runtimes and platforms. The private Bookshelf README points
14
- to September 1's adoption/sovereignty strategy. Its relevant constraint is that
15
- changing a runtime or service provider must not erase the team's relationships
16
- or working knowledge. The older August proposals about genomes, clothes and
17
- turn-record experiments are background, not reasons to expand this release.
18
-
19
- ## Decision
20
-
21
- Keep the existing package and capability-layer mechanism. Correct the places
22
- where the CLI and GUI bypass it. The architecture is broadly right; the
23
- operator experience and some service boundaries are incomplete. More
24
- abstractions will not fix a terminal that cannot accept a screenshot.
25
-
26
- | Component | Owns | Must not assume |
27
- |---|---|---|
28
- | OATS kernel | Soul/instance construction, configuration, lifecycle, host placement, scheduling, capability resolution | A particular knowledge provider, messaging service, or GUI |
29
- | Session backend | Durable terminal, attach/detach, resize, literal input, observation | OATS soul/package semantics or task success |
30
- | Knowledge capability | Knowledge access and representation; its harvester and promotion policy | Every installation uses OKF or stores memory in the same files |
31
- | Messaging capability / aweb | Durable messages, identities, event subscriptions and delivery policy | A particular model harness or an open Desktop window |
32
- | Task capability | Durable work and task semantics | A particular terminal backend |
33
- | Desktop | Inspect effective configuration; explicit operator actions; terminal input, files, layout | Provider names, SSH commands, or a second lifecycle implementation |
34
-
35
- Scheduling belongs to OATS, and a scheduled harvest is one use of scheduling.
36
- Harvesting behavior belongs to the knowledge capability. Starting an agent,
37
- writing a prompt, and producing reviewed knowledge are different outcomes.
38
- The UI must retain those distinctions.
39
-
40
- ## What already fits, and what does not
41
-
42
- `lib/core.mjs` already selects exclusive knowledge/messaging/tasks layers by
43
- manifest, resolves scoped capability settings, dispatches lifecycle hooks, and
44
- materializes runtime instructions. Jira and Linear demonstrate that a layer
45
- can have alternative implementations. OKF's harvester is already an exported
46
- capability agent. There is no reason to replace this machinery.
47
-
48
- The remaining coupling is concrete:
49
-
50
- - The retire receipt reads `hookResults.meta["oats.okf"].harvested`, although
51
- current OKF does not supply a retire hook. Remove the dead provider-specific
52
- inference; do not invent successful harvesting at retirement.
53
- - Remote capability routing recognizes `okf harvest` specifically in
54
- `bin/oats.mjs` and `lib/servers.mjs`.
55
- - Desktop harvest actions and scheduled-harvest definitions construct
56
- `oats okf harvest`; the editor recognizes that exact argv.
57
- - The “brain” view presents `STATE.md`, `log.md` and `notes/` as universal
58
- knowledge structure. These are conventions of the current setup.
59
-
60
- The next service contract should expose the **effective knowledge provider and
61
- its supported operations for a specific soul/home**. Discovering a capability
62
- command namespace alone is insufficient: it does not promise a `harvest` verb
63
- or a shared file layout. A provider may offer harvest, different operations,
64
- or read-only access. Desktop must show only declared operations and route
65
- execution through the selected CLI capability. The same resolution must apply
66
- locally, remotely, and when a scheduled operation runs.
67
-
68
- Keep that change small: explicit operation metadata, scoped discovery, and one
69
- invocation route using the existing capability engine. Do not add a plugin
70
- framework, generic workflow language, or a second knowledge store. Demonstrate
71
- replaceability with a tiny alternative-provider fixture that uses a different
72
- command and storage layout; a full second product is unnecessary.
73
-
74
- ## tmux and Herdr
75
-
76
- The current kernel defaults to a shared tmux session (`pi-agents`) with a
77
- window per instance. An agent does not require another tmux server. The GUI
78
- creates a temporary session linking only the selected window. That isolates
79
- viewers: switching a terminal elsewhere cannot redirect a GUI tab to another
80
- agent, and an agent exiting cannot silently expose a sibling under its label.
81
- The `oatsdesk-*` name in Juan's screenshot is this viewer. Its status bar can
82
- be hidden with a viewer-local setting. Do not alter global tmux settings or
83
- merge/move live agent sessions to solve a display defect.
84
-
85
- Herdr 0.8.2 is a separate terminal runtime, not a tmux-compatible superset.
86
- Its documented direct terminal attachment, socket API, events and SSH support
87
- are useful. Its semantic agent state comes from detection and/or integrations;
88
- it is richer evidence, not proof that a particular message was consumed.
89
- The [socket API](https://herdr.dev/docs/socket-api/) explicitly distinguishes
90
- agent-state waits from arbitrary command completion. The
91
- [remote documentation](https://herdr.dev/docs/persistence-remote/) also
92
- separates a local thin client from running a client entirely on the server;
93
- only the former can directly bridge the local desktop clipboard.
94
-
95
- Keep one OATS session contract and both existing adapters for now. Do not add
96
- another supervisor above them. Qualify Herdr's actual literal multi-line
97
- input, exact occupant checks, detach, resize, process exit and remote behavior
98
- before selecting it as the default for new instances. Inspect `pane run`
99
- implementation before replacing it merely because its name sounds like shell
100
- execution. Removing tmux is a later deployment choice, not a prerequisite for
101
- consistent UI or remote agents. Existing tmux agents stay where they are.
102
-
103
- ## Desktop correction sequence
104
-
105
- 1. **Terminal essentials.** Hide viewer chrome, accept dropped files and pasted
106
- images without pressing Enter, upload remote files to the execution host,
107
- preserve the destination tab across async work, and show transfer failures.
108
- Keep a single GUI and bounded viewers. This is the immediate implementation.
109
- 2. **Keyboard and splits.** Restore Ctrl+Tab navigation inside Mac terminals;
110
- let an already-open terminal fill an empty split without a second attach;
111
- expose draggable and keyboard-operable separators. Follow up specific
112
- keyboard reports with real input tests, especially terminal editing keys
113
- and non-US layouts. App shortcuts must not silently steal terminal edits.
114
- 3. **Souls & capabilities.** Replace the launch-centric roster with a management
115
- surface showing souls, installed capabilities, effective layer providers,
116
- source/version, scoped activation and runtime defaults. Inspect and launch
117
- are distinct actions. Edits use existing CLI operations with the exact scope
118
- visible; installing a capability must not silently activate it. This is not
119
- a marketplace or Team Builder project.
120
- 4. **Provider-neutral operations.** Introduce the scoped operation contract
121
- above, then use it for manual harvest, schedules and knowledge inspection.
122
- No second hardcoded default is accepted as a generalization.
123
- 5. **Operating rollout.** Enable schedules per team with the owner's learning
124
- policy. Capture-lock recovery is a separate reliability issue affecting
125
- unattended harvesting; it does not block arbitrary scheduled wakes.
126
-
127
- Acceptance must include real Electron file objects, actual terminal bytes,
128
- remote transfer hashes, split focus/resize without extra PTYs, and a provider
129
- replacement fixture. Unit tests of mocked argv alone do not establish these
130
- boundaries. Reuse the existing agents and GUI sparingly; no model is needed to
131
- exercise attachment transport or terminal layout.
@@ -1,50 +0,0 @@
1
- # Souls and capabilities in Desktop
2
-
3
- Selecting a soul opens its details. Launch and Schedule are explicit actions;
4
- Quick Open and Enter inspect instead of launching. The existing local Files
5
- browser remains available. It is separate from provider knowledge inspection.
6
-
7
- The inspector reads the kernel's `oats inspect --json` answer on selection,
8
- Refresh, or after an explicit mutation. The roster's eight-second poll never
9
- rescans capabilities or replaces an editor. Workspace changes invalidate old
10
- responses. Same-named souls are addressed by name plus agents root; instances
11
- are addressed by their exact home.
12
-
13
- The Capabilities button inspects workspace defaults, with a member-scope
14
- selector where a workspace contains several roots. Installed version, source
15
- and health are separate from effective activation, provenance and settings.
16
- Enable, explicit disable and return to inheritance call `oats use`; layer-wide
17
- disable is distinct from excluding a single capability, and is available only
18
- when inspecting a workspace or member scope, never an individual soul. These changes apply to
19
- future instances. Existing homes retain their captured bindings and settings.
20
-
21
- Authored souls expose only the fields the kernel reports as editable. Desktop
22
- edits runtime, model, backend, YOLO, description and instructions through
23
- `oats soul set`. Packaged souls remain read-only and explain where their source
24
- must be changed. Instructions use a private temporary file; the CLI owns remote
25
- transfer and mutation. Desktop does not modify YAML or resolve capabilities.
26
-
27
- An instance's action menu opens Knowledge & capabilities. The kernel supplies
28
- its snapshot, differences from current configuration, and declared provider
29
- operations. View operations return labeled documents; Desktop renders their
30
- text and treats remote paths as provenance, never as local files to open. Actions
31
- without required arguments can run here. Operations requiring arguments explain
32
- that they need the CLI. No provider is assumed to support harvesting.
33
-
34
- Schedules store an operation address and exact home with the kernel's generic
35
- `operation` job kind. The form discovers declared, available actions on demand.
36
- The server verifies that declaration again at save time, and the kernel resolves
37
- and validates the provider at execution time. Existing command schedules remain
38
- visible and runnable, but the GUI does not reverse-parse their argv to edit them.
39
-
40
- Every capability request requires an exact advertised workspace. Remote requests
41
- require its saved server registration and the CLI's operations API feature; all
42
- routing stays in OATS. The consumer never performs SSH or silently substitutes a
43
- local workspace. The proxy allows the CLI's bounded operation to return its
44
- receipt before timing out.
45
-
46
- Validation: scope/identity and remote-route refusal; private instructions and
47
- failure cleanup; declared schedule actions; stale inspection/save responses;
48
- provider text rendering; explicit launch and existing runtime flows. Native
49
- Electron rendering is checked with a temporary fixture frame in the existing
50
- GUI, without starting a model, agent, or another application instance.
@@ -1,228 +0,0 @@
1
- # Proposal: manage server agents from an iPhone
2
-
3
- Status: proposed, September 7, 2026. Requested by Juan following a feasibility
4
- assessment. This document authorizes no implementation, deployment, or changes
5
- to running teams. Recommendations below are not shipped functionality.
6
-
7
- ## Purpose and recommendation
8
-
9
- Let an operator manage OATS agents on a server and talk to them from an iPhone.
10
- Agents keep working when the phone is locked, disconnected, or switched off.
11
- Screenshots and files are part of the first useful experience.
12
-
13
- Start with one server reached privately through Tailscale and a mobile web app
14
- that can be installed on the iPhone Home Screen. Build on the existing OATS
15
- control and session contracts. A native iPhone app can consume the same service
16
- later if sharing, voice, notifications, or other native integration justify it.
17
-
18
- The substantial work is making the client/server boundary explicit and making
19
- conversation delivery reliable. A narrow management and terminal client is
20
- feasible without rewriting the kernel. A polished conversation experience is
21
- more than embedding the Desktop terminal in a small screen.
22
-
23
- This extends the [architecture reassessment](2026-09-07-architecture-reassessment.md)
24
- and its interpretation of Juan's KB direction: standard components with clear
25
- contracts, replaceable service providers, and preserved identity and knowledge
26
- across runtime changes. It does not supersede those contracts.
27
-
28
- ## What exists and what is missing
29
-
30
- Assessment baseline: source main `d20f082`, with Desktop behavior inspected in
31
- the lead worktree containing that main. These are reusable pieces, not a claim
32
- that a remote mobile API already exists.
33
-
34
- | Area | Existing basis | Work needed for mobile |
35
- | --- | --- | --- |
36
- | Lifecycle and configuration | CLI-backed roster, spawn/start, model choices, retirement and schedule operations | Authenticated network access with exact target selection and truthful results |
37
- | Terminal access | Session adapters, HTTP pane capture/input, Electron PTY attachment | Network streaming, resize, reconnect and bounded viewer lifetime outside Electron |
38
- | Attachments | Desktop file/image ingestion and execution-host upload | Browser or native file selection, authenticated upload and visible transfer state |
39
- | Provider operations | Scoped inspection and declared capability operations | Reuse the same discovery and invocation routes in mobile views |
40
- | Conversations | aweb is the intended owner of durable identity, messages and delivery | Qualify the human/agent conversation, reply and replay contracts before promising chat |
41
- | Background operation | Durable agent sessions and OATS scheduling mechanisms | Qualify service, scheduler and message wake operation with every GUI closed |
42
-
43
- The current [Desktop HTTP backend](../../packages/desktop/server/oats-web.mjs)
44
- binds to loopback and checks local Host/Origin values. It assumes a trusted
45
- local client; it is not an authenticated remote service. Live terminal data,
46
- resize and attachment calls currently cross
47
- [Electron IPC](../../packages/desktop/main.mjs). Exposing the current port
48
- unchanged or running Electron headlessly would not complete the required work.
49
-
50
- ## Architecture and ownership
51
-
52
- ```mermaid
53
- flowchart TD
54
- Phone[iPhone: mobile web or native client] -->|HTTPS over Tailscale| Service[OATS host control service]
55
- Desktop[Desktop client] -->|Shared control contracts| Service
56
- Service --> Kernel[Existing OATS CLI and kernel]
57
- Kernel --> Sessions[Session adapters: tmux or Herdr]
58
- Service --> Messaging[Selected messaging provider: aweb initially]
59
- Kernel --> Providers[Selected knowledge and task capabilities]
60
- ```
61
-
62
- The service is a proposed independently runnable form of the existing control
63
- backend, with the necessary terminal transport moved out of Electron. It
64
- delegates lifecycle mutations to the supported OATS CLI. Desktop adoption can
65
- be incremental; mobile must not introduce a second lifecycle implementation.
66
-
67
- | Component | Responsibility |
68
- | --- | --- |
69
- | OATS kernel | Construction, lifecycle, runtime/model configuration, host placement, schedules and capability resolution |
70
- | Host control service | Authenticated client access, scoped command dispatch, bounded live observations, attachments and terminal viewers |
71
- | Session backend | Durable execution, attach/detach, literal input, resize and terminal observation |
72
- | Messaging provider | Durable identity, conversations, events, delivery and any missing human/agent messaging semantics |
73
- | Knowledge provider | Knowledge representation, access, harvest and promotion policy |
74
- | Phone and Desktop | Operator interaction and presentation of the same contracts |
75
-
76
- Use one control service for the selected deployment on a host, not a process
77
- per agent or client. Existing schedulers and message wake mechanisms remain
78
- responsible for their work; do not build another scheduler or wake broker in
79
- the mobile client. Share bounded subscriptions and roster refreshes where
80
- possible. Open terminal viewers only when needed, apply output backpressure,
81
- and detach abandoned viewers without stopping agents.
82
-
83
- tmux and Herdr remain interchangeable session adapters. Mobile access does not
84
- require a Herdr migration. Start with a direct connection to one execution
85
- host; later add saved server endpoints or reuse OATS registered-host routing.
86
- SSH credentials for routed hosts stay on the routing server, not the phone.
87
-
88
- ## Private access through Tailscale
89
-
90
- Install the ordinary Tailscale app on the iPhone and connect the server to the
91
- same tailnet. Use Tailscale Serve to proxy the loopback service over HTTPS,
92
- accessible only through the tailnet's access rules. No embedded VPN or public
93
- Funnel endpoint is needed. This is a proposed deployment choice, not a current
94
- OATS installation instruction. [Tailscale Serve documentation](https://tailscale.com/docs/features/tailscale-serve)
95
-
96
- Network membership must map to an explicit authorized operator. For an initial
97
- single-owner deployment, choose a simple revocable application session or
98
- validated Tailscale identity; do not add a second account platform. If trusting
99
- Serve's identity headers, keep the backend reachable only through the trusted
100
- local proxy path and follow its header-handling requirements. Configure the
101
- actual HTTPS Host/Origin rather than removing the existing checks.
102
- [Tailscale identity headers](https://tailscale.com/docs/features/tailscale-serve#identity-headers)
103
-
104
- Authorize every action, terminal attachment and upload against a registered
105
- workspace and exact instance home. Keep runtime permission settings such as
106
- `yolo` separate from who may control the agent. Exclude multi-tenant hosting
107
- and elaborate permissions administration from the first version.
108
-
109
- ## Phone experience
110
-
111
- The primary screen lists workspaces and their agents, with readable names and
112
- running, stopped, needs-input or unknown states. A disconnected server is
113
- unreachable, not evidence that its agents stopped. Do not infer needs-input
114
- or task completion solely from terminal activity.
115
-
116
- An agent page offers conversation, start controls and session details. Starting
117
- a stopped agent uses its existing home and shows runtime/model options and
118
- effective permission mode. Make a launch override distinct from editing future
119
- defaults. A running agent's model does not silently change because a setting
120
- was edited. Interrupt and retirement are explicit actions with their existing
121
- semantics; retirement is not relabeled as a harmless Stop button.
122
-
123
- The composer supports text and selected photos/files with visible upload state.
124
- Upload to the agent's execution host, preserve the destination while a transfer
125
- is in flight, and submit only when attachments are ready. Failed transfers stay
126
- visible and must not silently redirect to another agent. Start with a file/photo
127
- picker; system dictation can supply text. A native share extension and realtime
128
- spoken conversation are later options.
129
-
130
- Terminal access is a secondary view for interactive harness prompts and tools.
131
- Provide touch-accessible Escape, interrupt and other essential terminal keys.
132
- Avoid exposing tmux session names, Desktop split layouts or backend chrome.
133
- Pasting or uploading into a terminal does not automatically press Enter; a
134
- conversation Send action is an explicit submission.
135
-
136
- ## Reliable conversations and background behavior
137
-
138
- Terminal input is useful across harnesses, but a pane transcript is not a
139
- durable conversation model. Rich chat should use the selected messaging
140
- provider, initially aweb. Missing durable reply, read-state or replay semantics
141
- belong in that provider's contract, not an OATS-specific message database or an
142
- ANSI-output parser. An installation without those capabilities can still offer
143
- management and a terminal, with chat availability described honestly.
144
-
145
- Before qualifying chat, establish the following behavior:
146
-
147
- - The operator has their own sender identity; the client does not impersonate
148
- the destination agent. Replies remain associated with the conversation.
149
- - Stable message IDs and replay cursors allow reconnect and missed-message
150
- retrieval. Retry after an uncertain send does not submit the same request
151
- twice. Offline text remains a draft until explicitly sent; do not queue
152
- terminal keystrokes or destructive controls for automatic replay.
153
- - Accepted, delivered and acted-on are different observations. An input write
154
- or agent wake is not proof of a completed task. Unknown outcomes remain
155
- unknown until the existing operation can be reconciled.
156
- - Delivery and wake continue on the server while clients are absent. Waking a
157
- running harness and starting a stopped instance are different actions;
158
- follow explicit policy before a message starts an agent or consumes compute.
159
-
160
- iOS normally suspends background apps. Do not depend on an always-connected
161
- phone SSE, WebSocket or SSH session. The server retains state; a notification
162
- signals new activity, and reopening the client fetches authoritative updates.
163
- Notifications can be delayed or disabled and are not delivery receipts.
164
- [Apple background execution documentation](https://developer.apple.com/documentation/uikit/extending-your-app-s-background-execution-time)
165
-
166
- Home Screen web apps support Web Push on iOS/iPadOS 16.4 and later, with
167
- permission requested through user interaction. Native applications can use
168
- APNs. Both require a server-side notification path and device testing. Keep
169
- sensitive message bodies out of lock-screen notifications by default. Private
170
- application access can remain on Tailscale while the server makes outbound
171
- connections to the push service; test this combination on a real phone rather
172
- than assuming VPN reconnection or notification behavior.
173
- [WebKit Web Push documentation](https://webkit.org/blog/13878/web-push-for-web-apps-on-ios-and-ipados/)
174
- [Apple remote notification documentation](https://developer.apple.com/documentation/usernotifications/setting-up-a-remote-notification-server)
175
-
176
- ## Proposed delivery sequence
177
-
178
- 1. **Prove the service boundary.** Extract only what an independent client
179
- needs, retain existing CLI dispatch and add authenticated network access.
180
- Qualify one server over Tailscale, including operation with Desktop closed.
181
- 2. **Deliver mobile management and terminal access.** Workspace/agent list,
182
- start with model choices, explicit lifecycle actions, terminal input/output,
183
- screenshots/files and reconnect. Reuse existing schedule controls and
184
- provider inspection. This is useful without claiming polished chat.
185
- 3. **Qualify conversations and notifications.** Resolve the messaging-provider
186
- contract gaps, then implement conversation presentation, replay, send
187
- deduplication and opt-in notifications. Prove delivery while the app sleeps.
188
- 4. **Decide on native and broader hosting.** Use actual phone experience to
189
- choose whether native sharing, voice and polish justify another client.
190
- Expand to multiple servers through existing routes or explicit endpoints;
191
- avoid adding a fleet control platform as a prerequisite.
192
-
193
- The browser client is the recommended first delivery vehicle, not an
194
- architectural dependency. If native is chosen first, the same server and
195
- messaging requirements apply. No calendar estimate is justified until the
196
- service extraction and conversation-contract gaps have been scoped.
197
-
198
- ## Acceptance before calling it usable
199
-
200
- - With Desktop closed and the phone locked or disconnected, existing agents
201
- keep running and an explicitly enabled test schedule and message wake work.
202
- No production team or harvest schedule is changed to demonstrate this.
203
- - Start the intended stopped home with the chosen runtime/model. Same-named
204
- instances elsewhere cannot receive its actions. Unreachable hosts display
205
- uncertainty and retrying an interrupted mutation does not blindly repeat it.
206
- - Upload an actual iPhone screenshot and a file to the execution host; verify
207
- complete bytes and destination, and demonstrate a visible transfer failure.
208
- - Switch Wi-Fi/cellular, lock/unlock, and reconnect. Conversation history catches
209
- up without duplicate sends. A terminal reconnect can show a bounded current
210
- capture; it must not pretend to recover a durable conversation transcript.
211
- - Close terminal views and disconnect abruptly without killing agent sessions
212
- or accumulating PTYs. Repeated reconnects and slow clients leave bounded
213
- memory/process use; share observations instead of polling each agent per view.
214
- - Test a real notification, denied notification permission, expired client
215
- access and tailnet disconnection. The UI preserves drafts and accurately
216
- states what it knows, without showing an unsuccessful send as delivered.
217
- - A different knowledge provider's declared operations remain usable without
218
- mobile code assuming OKF, a particular file layout or a universal harvester.
219
-
220
- Open implementation decisions are the initial operator authentication method,
221
- the existing aweb contracts that need extension, notification ownership under
222
- the messaging provider, and the precise terminal stream protocol. Settle them
223
- with narrow proofs before expanding scope. This proposal changes neither
224
- current deployment defaults nor the priority of ongoing reliability work.
225
-
226
- Related contracts: [provider operations](operations-contract.md),
227
- [Desktop CLI API](../desktop-cli-api.md), [servers](../servers.md),
228
- [schedules](../schedules.md), and [Desktop](../desktop.md).