@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.
Files changed (232) hide show
  1. package/README.md +12 -6
  2. package/bin/oats.mjs +203 -54
  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 +16 -9
  31. package/capabilities/oats-okf/lib/binding-wire.mjs +47 -15
  32. package/capabilities/oats-okf/lib/config.mjs +2 -1
  33. package/capabilities/oats-okf/lib/consult.mjs +26 -4
  34. package/capabilities/oats-okf/lib/harvest-switch.mjs +16 -3
  35. package/capabilities/oats-okf/lib/inspection.mjs +26 -7
  36. package/capabilities/oats-okf/lib/io.mjs +9 -1
  37. package/capabilities/oats-okf/lib/sources.mjs +34 -3
  38. package/capabilities/oats-okf/lib/stores.mjs +8 -6
  39. package/capabilities/oats-okf/lib/worker.mjs +7 -17
  40. package/capabilities/oats-okf/oats.json +6 -3
  41. package/capabilities/oats-okf-harvest/bin/okf-harvest.mjs +2 -2
  42. package/capabilities/oats-okf-harvest/oats.json +3 -3
  43. package/capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md +6 -6
  44. package/capabilities/oats-okf-maintenance/bin/okf-maintenance.mjs +37 -16
  45. package/capabilities/oats-okf-maintenance/injects/maintainer.md +1 -1
  46. package/capabilities/oats-okf-maintenance/lib/provenance.mjs +6 -1
  47. package/capabilities/oats-okf-maintenance/oats.json +2 -2
  48. package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +17 -2
  49. package/capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md +11 -23
  50. package/capabilities/oats-workspace-experts/injects/oats-experts.md +26 -0
  51. package/capabilities/oats-workspace-experts/oats.json +9 -0
  52. package/docs/capabilities.md +160 -171
  53. package/docs/capability-manifest.schema.json +7 -10
  54. package/docs/configuration.md +213 -64
  55. package/docs/design/2026-09-16-knowledge-capability-contract.md +36 -50
  56. package/docs/design/2026-09-23-workspace-module-contracts.md +377 -544
  57. package/docs/design/2026-09-26-okf-knowledge-operations.md +132 -357
  58. package/docs/design/2026-09-27-team-model-v2.md +116 -0
  59. package/docs/design/2026-09-28-automations-trust.md +38 -0
  60. package/docs/design/2026-09-28-soul-launch-preference.md +63 -0
  61. package/docs/design/HISTORY.md +65 -0
  62. package/docs/design/README.md +23 -54
  63. package/docs/desktop-cli-api.md +1787 -1777
  64. package/docs/desktop.md +30 -91
  65. package/docs/execution-targets.md +146 -292
  66. package/docs/first-team.md +31 -17
  67. package/docs/implementation.md +76 -288
  68. package/docs/integrations.md +118 -320
  69. package/docs/knowledge-capability-authoring.md +25 -52
  70. package/docs/knowledge-reference/acceptance.md +3 -3
  71. package/docs/knowledge-reference/adoption.md +1 -1
  72. package/docs/knowledge-reference/harvester.md +2 -2
  73. package/docs/knowledge-reference/package-craft.md +3 -3
  74. package/docs/knowledge-reference/provider-mapping.md +3 -6
  75. package/docs/knowledge-reference/reader-capture.md +3 -3
  76. package/docs/knowledge-theory.md +62 -166
  77. package/docs/knowledge.md +225 -404
  78. package/docs/layers.md +42 -97
  79. package/docs/oats-local.schema.json +58 -5
  80. package/docs/oats-membership.schema.json +1 -8
  81. package/docs/oats-package.schema.json +5 -5
  82. package/docs/oats-workspace.schema.json +8 -22
  83. package/docs/official-catalog.md +25 -28
  84. package/docs/packages.md +45 -63
  85. package/docs/plans/0.30-close-out.md +61 -0
  86. package/docs/release-lane.md +77 -0
  87. package/docs/release-notes/oats-framework-v1.1.3.md +10 -8
  88. package/docs/release-notes/v0.19.0.md +48 -147
  89. package/docs/release-notes/v0.19.1.md +2 -3
  90. package/docs/release-notes/v0.19.3.md +2 -15
  91. package/docs/release-notes/v0.20.0.md +0 -15
  92. package/docs/release-notes/v0.22.0.md +71 -138
  93. package/docs/release-notes/v0.22.1.md +42 -90
  94. package/docs/release-notes/v0.22.10.md +1 -1
  95. package/docs/release-notes/v0.22.11.md +1 -47
  96. package/docs/release-notes/v0.22.12.md +4 -13
  97. package/docs/release-notes/v0.22.13.md +1 -42
  98. package/docs/release-notes/v0.22.14.md +3 -11
  99. package/docs/release-notes/v0.22.15.md +1 -46
  100. package/docs/release-notes/v0.22.16.md +6 -8
  101. package/docs/release-notes/v0.22.18.md +1 -99
  102. package/docs/release-notes/v0.22.19.md +3 -14
  103. package/docs/release-notes/v0.22.2.md +6 -15
  104. package/docs/release-notes/v0.22.3.md +0 -1
  105. package/docs/release-notes/v0.22.4.md +1 -14
  106. package/docs/release-notes/v0.22.5.md +2 -12
  107. package/docs/release-notes/v0.22.6.md +0 -3
  108. package/docs/release-notes/v0.23.0.md +9 -25
  109. package/docs/release-notes/v0.23.1.md +9 -25
  110. package/docs/release-notes/v0.23.2.md +2 -4
  111. package/docs/release-notes/v0.24.0.md +56 -97
  112. package/docs/release-notes/v0.24.1.md +7 -11
  113. package/docs/release-notes/v0.24.10.md +34 -45
  114. package/docs/release-notes/v0.24.11.md +12 -20
  115. package/docs/release-notes/v0.24.12.md +35 -48
  116. package/docs/release-notes/v0.24.13.md +34 -41
  117. package/docs/release-notes/v0.24.2.md +9 -13
  118. package/docs/release-notes/v0.24.3.md +7 -11
  119. package/docs/release-notes/v0.24.4.md +6 -6
  120. package/docs/release-notes/v0.24.5.md +6 -10
  121. package/docs/release-notes/v0.24.6.md +2 -5
  122. package/docs/release-notes/v0.24.7.md +46 -75
  123. package/docs/release-notes/v0.24.8.md +58 -96
  124. package/docs/release-notes/v0.24.9.md +38 -54
  125. package/docs/release-notes/v0.25.0.md +59 -76
  126. package/docs/release-notes/v0.25.1.md +57 -81
  127. package/docs/release-notes/v0.25.2.md +51 -70
  128. package/docs/release-notes/v0.25.3.md +11 -13
  129. package/docs/release-notes/v0.25.4.md +9 -13
  130. package/docs/release-notes/v0.25.5.md +3 -5
  131. package/docs/release-notes/v0.25.6.md +20 -29
  132. package/docs/release-notes/v0.25.7.md +5 -7
  133. package/docs/release-notes/v0.25.8.md +26 -39
  134. package/docs/release-notes/v0.26.0.md +175 -646
  135. package/docs/release-notes/v0.27.0.md +4 -5
  136. package/docs/release-notes/v0.27.1.md +4 -6
  137. package/docs/release-notes/v0.27.2.md +1 -1
  138. package/docs/release-notes/v0.28.0.md +57 -124
  139. package/docs/release-notes/v0.29.0.md +89 -208
  140. package/docs/release-notes/v0.29.1.md +1 -1
  141. package/docs/release-notes/v0.29.2.md +3 -4
  142. package/docs/release-notes/v0.29.4.md +90 -0
  143. package/docs/release-notes/v0.30.0.md +205 -0
  144. package/docs/schedules.md +280 -349
  145. package/docs/servers.md +99 -117
  146. package/docs/soul.schema.json +2 -9
  147. package/docs/souls-and-instances.md +145 -158
  148. package/docs/workspaces.md +132 -215
  149. package/lib/automations.mjs +28 -6
  150. package/lib/core.mjs +226 -74
  151. package/lib/instance-events.mjs +1 -1
  152. package/lib/instance-inspect.mjs +109 -34
  153. package/lib/instance-lifecycle.mjs +14 -1
  154. package/lib/instance-resolution.mjs +26 -27
  155. package/lib/launch-preference.mjs +87 -0
  156. package/lib/materialize.mjs +3 -3
  157. package/lib/packages.mjs +2 -5
  158. package/lib/resolve.mjs +29 -87
  159. package/lib/schedule.mjs +32 -18
  160. package/lib/teams-verbs.mjs +195 -0
  161. package/lib/teams.mjs +190 -0
  162. package/lib/triggers.mjs +53 -17
  163. package/lib/workspace.mjs +54 -147
  164. package/package-catalog.json +9 -15
  165. package/package.json +1 -1
  166. package/skills/oats-getting-started/SKILL.md +25 -13
  167. package/capabilities/oats-review/injects/review.md +0 -69
  168. package/capabilities/oats-review/oats.json +0 -10
  169. package/capabilities/oats-review/skills/code-review/SKILL.md +0 -44
  170. package/capabilities/oats-review/skills/security-review/SKILL.md +0 -59
  171. package/docs/conventions.md +0 -90
  172. package/docs/design/2026-09-07-architecture-reassessment.md +0 -131
  173. package/docs/design/2026-09-07-desktop-souls-capabilities.md +0 -50
  174. package/docs/design/2026-09-07-mobile-agent-management-proposal.md +0 -228
  175. package/docs/design/2026-09-08-expert-assisted-deployment-proposal.md +0 -558
  176. package/docs/design/2026-09-13-knowledge-and-memory-direction.md +0 -744
  177. package/docs/design/2026-09-13-knowledge-implementation.md +0 -127
  178. package/docs/design/2026-09-13-knowledge-location-contract.md +0 -340
  179. package/docs/design/2026-09-14-artifact-retention-contract.md +0 -190
  180. package/docs/design/2026-09-14-portable-souls-and-git-workspaces.md +0 -708
  181. package/docs/design/2026-09-14-portable-souls-contract-amendments.md +0 -85
  182. package/docs/design/2026-09-14-portable-souls-explainer.md +0 -750
  183. package/docs/design/2026-09-15-captured-dispatch.md +0 -127
  184. package/docs/design/2026-09-15-captured-resolution-records.md +0 -143
  185. package/docs/design/2026-09-15-package-preparation.md +0 -100
  186. package/docs/design/2026-09-15-portable-data-contract.md +0 -121
  187. package/docs/design/2026-09-15-portable-declarations.md +0 -189
  188. package/docs/design/2026-09-15-portable-souls-handoff.md +0 -150
  189. package/docs/design/2026-09-15-portable-souls-implementation.md +0 -417
  190. package/docs/design/2026-09-15-selection-lock-and-approval.md +0 -122
  191. package/docs/design/2026-09-15-source-observation.md +0 -119
  192. package/docs/design/2026-09-16-captured-admission.md +0 -77
  193. package/docs/design/2026-09-16-captured-helper-dispatch.md +0 -105
  194. package/docs/design/2026-09-16-captured-launch-inputs.md +0 -42
  195. package/docs/design/2026-09-16-command-profile-preparation.md +0 -86
  196. package/docs/design/2026-09-16-fresh-install-first-rollout.md +0 -47
  197. package/docs/design/2026-09-16-fresh-operator-walkthrough.md +0 -282
  198. package/docs/design/2026-09-16-messaging-capability-contract.md +0 -59
  199. package/docs/design/2026-09-16-portable-migration-evidence.md +0 -158
  200. package/docs/design/2026-09-16-portable-onboarding.md +0 -179
  201. package/docs/design/2026-09-16-prepare-request-transport.md +0 -26
  202. package/docs/design/2026-09-16-provider-binding-codecs.md +0 -98
  203. package/docs/design/2026-09-16-provider-binding-wire.md +0 -274
  204. package/docs/design/2026-09-17-capability-helper-input-contract.md +0 -95
  205. package/docs/design/2026-09-17-captured-backend-parity.md +0 -53
  206. package/docs/design/2026-09-17-captured-native-start.md +0 -58
  207. package/docs/design/2026-09-17-portable-boundary-hookup.md +0 -19
  208. package/docs/design/2026-09-17-portable-boundary-resources.md +0 -52
  209. package/docs/design/2026-09-17-public-captured-start.md +0 -108
  210. package/docs/design/2026-09-17-public-prepare-request.md +0 -90
  211. package/docs/design/2026-09-18-captured-pi-host.md +0 -205
  212. package/docs/design/2026-09-18-first-cut-release-checklist.md +0 -131
  213. package/docs/design/2026-09-18-herdr-protocol-compatibility.md +0 -60
  214. package/docs/design/2026-09-20-redesign-program-board.md +0 -142
  215. package/docs/design/2026-09-20-workspace-and-portable-adoption-plan.md +0 -289
  216. package/docs/design/2026-09-20-workspace-onboarding-public.md +0 -207
  217. package/docs/design/2026-09-22-desktop-parity-seams.md +0 -58
  218. package/docs/design/2026-09-23-simplified-workspace-model.md +0 -711
  219. package/docs/design/2026-09-23-workspace-v2-implementation-plan.md +0 -65
  220. package/docs/design/2026-09-24-desktop-phase-f-boundary.md +0 -242
  221. package/docs/design/2026-09-24-phase-d-plan.md +0 -305
  222. package/docs/design/2026-09-25-teams-contract.md +0 -258
  223. package/docs/design/2026-09-26-desktop-design-brief-architecture.md +0 -241
  224. package/docs/design/desktop-ux-plan.md +0 -362
  225. package/docs/design/launch-configurations.md +0 -168
  226. package/docs/design/okf-mirror-provenance.md +0 -105
  227. package/docs/design/operations-contract.md +0 -141
  228. package/docs/oats-member.schema.json +0 -38
  229. package/skills/integration-authoring/SKILL.md +0 -84
  230. package/skills/oats-support/SKILL.md +0 -79
  231. package/skills/skill-craft/SKILL.md +0 -109
  232. package/skills/soul-craft/SKILL.md +0 -116
@@ -1,558 +0,0 @@
1
- # Expert-assisted deployment and an extensible OATS
2
-
3
- Date: 2026-09-08
4
-
5
- Status: proposed implementation plan; direction endorsed by Juan on September 8.
6
- This document records the proposal and a takeover plan while Juan is away for
7
- a couple of days. It does not claim that the proposed deployment workflow has
8
- shipped. Current-state observations below are against main `daf2941`, following
9
- the publication of OATS 0.22.19. The September 8 follow-up incorporates Pepe's
10
- team-assignment and shared-knowledge requirements and Juan's explicit
11
- correction: one instance may belong to several teams, and OATS must support
12
- both local and global identities. The initial handoff understated these
13
- requirements; the sections below are part of the implementation scope.
14
-
15
- ## Outcome
16
-
17
- A user should be able to ask an OATS expert to add an agent to an existing team
18
- on another machine. The expert prepares or adopts the necessary workspace,
19
- configures the selected capabilities, starts the agent, and verifies that the
20
- result works. The resulting configuration and procedures belong to the user
21
- and remain usable by another agent, the CLI, and the GUI.
22
-
23
- A workspace can refer to several communication teams. An instance can have
24
- several memberships through one global identity. Its knowledge access and
25
- promotion destinations are selected explicitly, including shared organizational
26
- knowledge. A remote launch is not complete merely because a process starts in
27
- the correct directory.
28
-
29
- This makes the expert the normal conversational way to configure and extend
30
- OATS. Reliable commands perform repeatable operations; skills teach the expert
31
- how to choose and combine them. A working installation must remain operable
32
- without the expert running or the original setup conversation being available.
33
-
34
- The architecture principle is already in the
35
- September 3 architecture proposal (removed in 0.26.0; it is in the v0.25.x tags):
36
-
37
- > Contracts and bootstrap skills in OATS; implementations in packages.
38
-
39
- This plan applies that principle to deployment. It continues the
40
- [September 7 reassessment](2026-09-07-architecture-reassessment.md), whose
41
- provider-operation gaps were subsequently addressed by the
42
- [operations contract](operations-contract.md). It does not reopen those fixes
43
- or require the entire September 3 proposal to be implemented first.
44
-
45
- ## Current state and the missing boundary
46
-
47
- | Area | Implemented today | Remaining gap |
48
- |---|---|---|
49
- | Knowledge, messaging, tasks | Selectable packages, scoped bindings, inspection and declared provider operations | Maintain these boundaries as deployment and onboarding are added |
50
- | Harness launch | Pi, Claude and Codex; named launch configurations; instance start/restart | A new harness is still a kernel implementation change, not an arbitrary installable runtime provider |
51
- | Terminal execution | tmux and Herdr behind session operations | These backends do not prepare the team's repositories or capabilities |
52
- | Remote execution | Route operations over SSH to OATS in a registered remote workspace | The remote workspace must already exist and be usable |
53
- | Soul and work location | Filesystem souls and built-in worktree, checkout, attached and workspace modes | The proposed independent soul-store and work-target contracts are incomplete |
54
- | Expert onboarding | An `oats-expert` soul and a workspace setup playbook | A complete, maintained installation workflow with repeatable remote preparation |
55
- | Communication membership | OATS resolves one effective `team:`; its normal aweb spawn joins that team | Workspace team catalog and explicit per-type/per-soul membership sets, including several memberships for one instance |
56
- | Identity lifecycle | Normal aweb join defaults to local; OATS also has an explicit retained-identity path used for standing global identities | A complete local/global selection, creation/adoption, multi-team binding and lifecycle experience |
57
- | Shared knowledge | OKF instance state and promotion into the source soul's knowledge/skills | Configurable shared collections, scoped reads and promotion to the appropriate shared destination |
58
-
59
- In the current spawn path, a referenced repository must already exist and be
60
- a Git repository. Worktree mode creates a worktree from that repository;
61
- checkout mode uses the existing checkout. Neither is an initial clone or an
62
- implicit repository update. The worktree setup command runs after creation;
63
- its failure currently warns and continues. Capability spawn hooks also run
64
- after the repository has been resolved. None of these is a suitable substitute
65
- for preparing a missing remote workspace.
66
-
67
- The existing [expert soul](../../agents/oats-expert/soul/AGENTS.md) mixes
68
- portable installation advice with maintaining this repository and reviewing
69
- our development team's PRs. It also contains provider-specific knowledge
70
- instructions. Split those responsibilities: users need an installation expert
71
- that understands their selected capabilities, while this project's maintainer
72
- keeps its own development role and operating instructions.
73
-
74
- ## Responsibilities
75
-
76
- | Mechanism | Responsibility | Examples |
77
- |---|---|---|
78
- | OATS kernel | Configuration resolution, package composition, instance lifecycle, session routing and scheduling; inspectable results | Resolve an instance's captured configuration, start it on its execution host, expose its state |
79
- | Deployment capability package | Repeatable preparation and diagnosis, using existing OATS operations and host tools | Inspect a workspace, adopt or clone a repository, check requirements, report readiness |
80
- | Setup/repair skill | Workflow, choices, diagnosis and adaptation to the user's environment | Choose paths, understand existing repositories, select capabilities, explain and repair a failed prerequisite |
81
- | Lifecycle hook | A bounded extension at a known lifecycle event | Configure an identity during spawn; perform worktree-local environment setup |
82
- | Installation expert | Apply the skill, invoke operations, verify outcomes and record deployment decisions | Fulfil a request to add an agent on another host |
83
- | GUI | Present the same configuration, choices, actions and observations | Show where an agent works and explain why a deployment is not ready |
84
-
85
- Begin with an ordinary capability package containing namespaced commands,
86
- skills and documentation. Existing general capabilities compose additively;
87
- deployment does not need to become a fourth mandatory knowledge/messaging/tasks
88
- layer. The current `operation run` contract addresses those layers: do not
89
- pretend it already supplies an arbitrary deployment-provider interface. Extend
90
- discovery or invocation only as required by the first real consumer.
91
-
92
- Preparation commands should expose observed state and repeatable effects.
93
- Running them again against a correctly prepared workspace should reuse that
94
- workspace. A failure should identify what succeeded, what remains and how to
95
- continue. A small inspect/prepare interface is sufficient initially; its exact
96
- command names and schema are implementation decisions, not APIs promised here.
97
-
98
- Extract a work-target interface when the existing Git/filesystem coupling
99
- prevents the required flow. Keep Git preparation in its implementation package
100
- and have the kernel consume the resulting work location and lifecycle contract.
101
- Do not turn the first remote onboarding into a general infrastructure engine,
102
- workflow language or registry for every hypothetical backend.
103
-
104
- ## Team, host, deployment and work target
105
-
106
- Keep these concepts separate in configuration and the user experience:
107
-
108
- - **Workspace:** the OATS configuration boundary containing souls, deployment
109
- choices and references to one or several communication teams. This is not
110
- identical to an aweb workspace, which binds an identity home and its
111
- membership-specific coordination state.
112
- - **Communication team:** a provider's membership and coordination boundary.
113
- With aweb, membership is certified by that team's authority. One OATS
114
- workspace may use several such teams; one instance may join several.
115
- - **Host:** a machine reachable through the selected execution transport.
116
- - **Deployment:** a workspace's installed configuration, packages and locations
117
- on a particular host. One host may contain several deployments, and one
118
- deployment may serve instances with different or overlapping team memberships.
119
- - **Soul:** the reusable instructions and capabilities from which an instance
120
- is composed; its source need not be the repository the instance works on.
121
- - **Work target:** the repository, directory or other resource an instance
122
- operates on. The proposed broader contract is not fully implemented today.
123
- - **Instance home:** the durable local state and recorded configuration for
124
- one instance on its execution host.
125
-
126
- A server registration currently bundles an SSH host and one workspace path.
127
- Retain working routes while improving how deployments are represented; a
128
- second team on the same computer should not conceptually become a second
129
- computer. Registering a server alone neither copies local souls nor establishes
130
- remote team membership.
131
-
132
- The current `team:` block combines an OATS discovery/configuration boundary
133
- with a messaging team selection. Do not extend that shortcut into a requirement
134
- that every instance in a workspace belongs to exactly one common aweb team.
135
- Separate those meanings as this feature is implemented. A default team may
136
- remain a convenience; it is not the complete membership list.
137
-
138
- For example, `/srv/example-team` could be an explicitly selected remote
139
- workspace. Its repository mappings and agents root determine where individual
140
- homes and worktrees are created. That path is an example, not a new default or
141
- a claim about an existing installation. The selected harness does not choose
142
- the workspace location.
143
-
144
- ## Identity and membership: verified aweb contract
145
-
146
- These are aweb's existing concepts, not a new OATS identity protocol:
147
-
148
- | Property | Local identity | Global identity |
149
- |---|---|---|
150
- | Identifier | `did:key` | Stable `did:aw` plus current `did:key` |
151
- | Team memberships | Exactly one team | May hold several team certificates |
152
- | Public address | None | May hold zero, one or several addresses |
153
- | Runtime duration | May survive sequential sessions | May survive sequential sessions and preserve global trust continuity |
154
- | Joining another team | Does not reuse the same local identity | Reuses the existing global identity; does not mint another `did:aw` |
155
-
156
- Use `identity_scope: local|global` when referring to aweb's current contract.
157
- The older `lifetime: ephemeral|persistent` vocabulary is read-compatibility
158
- input. In particular, local does not mean expires on process exit: certificates
159
- have no expiry field, and deleting a directory does not itself revoke them.
160
- Local also does not mean on this computer, and global does not mean hosted.
161
-
162
- One global identity represents one principal. Its memberships and addresses
163
- are different handles/authorities for that principal, not separate agents.
164
- Several instances of the same soul do not automatically share an identity.
165
- Ordinary independent workers need independent identities; an explicit move or
166
- restart of the same standing agent preserves its identity.
167
-
168
- Aweb already stores multiple memberships in `.aw/teams.yaml` and per-team
169
- coordination bindings in `.aw/workspace.yaml`, with one `active_team` default.
170
- Switching the default neither joins nor leaves any team. Supported commands can
171
- select a team for one operation without changing that default. The selected
172
- team determines the certificate, member name and coordination context; an
173
- instance's memberships are not merged into one undifferentiated authority.
174
-
175
- The current CLI's global invite acceptance reuses an existing self-custodial
176
- global identity. It refuses to manufacture one as a side effect of `--global`.
177
- Creating a global identity/address requires the relevant namespace authority;
178
- team membership alone cannot provide that authority. Hosted and locally
179
- controlled team setup differ, so the deployment skill must inspect the actual
180
- authority and follow the supported create/join/fetch/connect path.
181
-
182
- Global addresses enable first contact. A local identity can send to a global
183
- address and receive a reply through the authenticated learned return route; it
184
- does not thereby acquire a global address. Cross-team messaging alone does not
185
- require joining the recipient's team. Membership is needed for that team's
186
- coordination and other membership-scoped resources.
187
-
188
- ### What OATS already does, and what it does not
189
-
190
- The current `oats.aweb` adapter's normal spawn path resolves one team, obtains
191
- an invite and joins with the instance name. It does not offer a general
192
- membership list or explicit new-global-identity workflow. The retained path
193
- (`settings.identity.source`) preserves existing identity material, reconnects
194
- one selected team and records retained custody; retirement releases the seat
195
- without deleting that identity. This is useful existing support for standing
196
- global agents, but it is not a complete multi-team onboarding contract.
197
-
198
- Retaining files containing several certificates is not proof that every team's
199
- coordination binding, command context and wake delivery works in the new home.
200
- Qualify those behaviors explicitly. Do not generalize the retained migration
201
- path's file-copy details into the permanent public identity-management API;
202
- use aweb's supported identity-home and lifecycle operations where available.
203
-
204
- Refresh the shipped instructions as part of this work. The current vendored
205
- [membership skill](../../capabilities/oats-aweb/skills/aweb-team-membership/SKILL.md),
206
- Hosted Path 3, still says `--address` creates a fresh global identity. The
207
- verified current CLI instead requires explicit `--global` and an existing
208
- self-custodial global identity. Its multi-membership explanation also needs the
209
- global-only qualification. Update and publish the provider skill from its
210
- owning source, then verify the materialized instructions; the stale recipe must
211
- not become the installation expert's onboarding procedure.
212
-
213
- ## Proposed workspace membership behavior
214
-
215
- Use the existing scoped capability configuration mechanism. The following are
216
- semantic requirements; final YAML keys and commands still need implementation
217
- review and must not be copied as a currently supported schema.
218
-
219
- - The workspace declares named references to available messaging teams and the
220
- information needed to connect to them. This is a catalog, not automatic
221
- enrollment of every agent into every listed team.
222
- - Workspace defaults, soul-type bindings and individual-soul overrides resolve
223
- an explicit membership set and identity choice. A more specific membership
224
- list replaces the inherited list; do not silently union it and retain an
225
- unwanted broader membership. Show provenance before creating the instance.
226
- - Support a new local identity for a single-team worker, creation of a distinct
227
- global identity through an available authority, and adoption of an existing
228
- global identity. A request for several memberships requires global scope;
229
- report the incompatibility before mutation rather than silently changing
230
- identity scope or creating one identity per team.
231
- - Keep concrete identity references, team IDs and namespace/address choices in
232
- deployment configuration. A portable developer soul can request suitable
233
- capabilities without carrying one organization's credentials or team IDs.
234
- - Resolve the membership set into the instance's recorded configuration. Start
235
- and restart preserve it. Joining or leaving a team is an explicit lifecycle
236
- operation; editing defaults must not silently change existing memberships.
237
- - Use an explicit team selector for team-scoped operations. Generated briefings
238
- describe all memberships and the default, and teach the agent how to select
239
- the appropriate team. Do not concatenate conflicting teams' instructions and
240
- assume the currently active team resolves the conflict.
241
-
242
- For example, one coordinator instance can use a global identity that belongs
243
- to Engineering and Release, selecting either context for the relevant work.
244
- A short-lived test worker can use a local identity in Engineering only. Another
245
- instance of the same developer soul can use a different identity and different
246
- memberships. None of these choices depends on which host runs the harness.
247
-
248
- The GUI should show one instance with several membership badges, its identity
249
- scope, and its default team. Filtering/grouping by a team must not turn that
250
- one instance into several independent agents. Preview creation/adoption and
251
- membership choices together, and expose per-membership readiness and problems.
252
-
253
- Incoming work must reach a multi-team instance without requiring the user to
254
- switch its active team first. Reuse aweb's identity/event mechanisms; determine
255
- the actual service/subscription coverage and share streams where supported.
256
- Do not create a GUI stream or model worker per team as the default design.
257
- Delivery across all configured memberships, with the GUI closed, is a required
258
- qualification; this document does not claim the current broker has passed it.
259
- The inspected `wakeStreamOpener` constructs its client through the selected
260
- membership's certificate-backed context. That code alone does not establish
261
- aggregation across every membership or service; verify the server event scope
262
- and the broker's behavior together before choosing subscription coverage.
263
-
264
- ### Membership, reach and visibility are separate
265
-
266
- Pepe's shared-engineering versus owner-only requirement has both a membership
267
- choice and a communication/visibility policy. A team badge or instructions in
268
- `AGENTS.md` cannot enforce that policy. Aweb currently documents inbound modes
269
- `open` and `team_and_contacts`; the latter admits verified same-team senders as
270
- well as contacts. It does not mean owner-only inside a shared team.
271
-
272
- The September 3 `reach: owner|team|org|external` ladder and `contacts_only`
273
- mapping are proposals, not current aweb API promises. Select distinct teams
274
- where their actual semantics meet the need, or implement the required policy
275
- in aweb and qualify it. Do not reinstate removed address-visibility fields or
276
- introduce OATS-specific routing enforcement. Public address discoverability,
277
- message admission and access to team work/knowledge each need their own
278
- accurate explanation.
279
-
280
- There is a concrete compatibility trap: the current CLI accepts the old
281
- `contacts-only`/`contacts_only` spelling but normalizes it to
282
- `team_and_contacts`. An accepted command is therefore not evidence of strict
283
- contacts-only enforcement. Do not use that spelling to implement `reach: owner`.
284
-
285
- ### Lifecycle outcomes
286
-
287
- Stopping a harness, restarting it, retiring an OATS home, leaving a team, and
288
- archiving a global identity are different operations. Preserve identity and
289
- memberships across stop/start or a harness change. For disposable local workers,
290
- use aweb's supported self-retirement and report whether the certificate was
291
- revoked and the member name released; do not infer it from local deletion.
292
-
293
- For global agents, retiring the execution home must preserve recoverable
294
- identity authority and must not implicitly archive the identity or revoke all
295
- memberships. Define custody before home removal, especially for a global
296
- identity created there rather than adopted from a retained source. Leaving one
297
- team must preserve the identity and remaining memberships. Moving hosts must
298
- re-establish and verify each required binding without leaving two independent
299
- workers using the same identity.
300
-
301
- If preparing several memberships fails partway through, report the memberships
302
- actually established and offer a repeatable resume/cleanup path. Do not delete
303
- an adopted identity or its pre-existing memberships to undo this attempt.
304
-
305
- ## Shared knowledge and promotion destinations
306
-
307
- The current OKF implementation promotes instance notes or captured record
308
- windows into the source soul's knowledge/skills. Workspace-mode harvesting
309
- changes how a soul update is delivered; it does not turn the workspace into a
310
- shared organizational knowledge destination. Existing shared KBs connected by
311
- instructions are useful deployments, not proof of this missing capability API.
312
-
313
- Keep three concerns explicit:
314
-
315
- | Knowledge | Custody and purpose |
316
- |---|---|
317
- | Instance state | Current task, progress and pending observations in the instance's context |
318
- | Reusable soul knowledge | General expertise and procedures that should travel with that soul |
319
- | Deployment knowledge | Organization, team or project decisions and procedures shared with appropriate instances |
320
-
321
- The knowledge capability should resolve an instance's readable collections and
322
- permitted promotion destinations from deployment policy and soul/type bindings.
323
- These are sets: an instance in several teams may need several knowledge
324
- collections. Team membership does not automatically authorize every collection
325
- or copying material between them. The knowledge provider owns access and
326
- storage semantics; OATS resolves the configured capability and exposes its
327
- effective choices and operations.
328
-
329
- Start with a shared versioned OKF repository or existing bundle where suitable.
330
- Specify its canonical location, collection references, read/update mechanism
331
- on each host, and how a promoted change becomes visible to readers. "Shared"
332
- requires a coherent source and an actual refresh path; a one-time copied folder
333
- on each server is insufficient. A database or central knowledge service is
334
- optional and belongs to the provider, not the kernel.
335
-
336
- The harvester selects a destination under that policy. A general debugging
337
- lesson may belong to the reusable soul; a private project decision belongs to
338
- the project's collection. Several team memberships must not cause private
339
- knowledge to be promoted to their union. Preserve source scope/provenance and
340
- keep ambiguous material pending for an owner instead of broadening it by
341
- default. Continue the existing promotion doctrine: durable decisions, rationale
342
- and useful procedures; do not fill the KB with duplicate descriptions of code.
343
-
344
- Make the destination explicit in the promotion result. With Git custody, use
345
- the destination repository's branch/review workflow, handle conflicting updates
346
- there, and confirm publication separately from starting the harvester. The
347
- reader must then be able to retrieve the accepted knowledge from another home
348
- or host. Inspection should expose available collections and freshness/update
349
- problems through provider operations, without the GUI assuming OKF paths.
350
-
351
- This stays inside the replaceable knowledge capability. The default OKF package
352
- needs this extension; another provider may implement a different store and
353
- harvester. The deployment expert configures and diagnoses it, and schedules
354
- invoke its declared operations. Neither expertise nor a cron substitutes for
355
- implementing the shared read/write contract.
356
-
357
- ## Evidence and boundaries for the September 8 amendment
358
-
359
- The identity findings were checked against aweb's canonical docs and CLI
360
- implementation in checkout `0a3a9a9`; the identity/team/wake files checked were
361
- unchanged against its fetched `origin/main` reference `bfdb208`. These references
362
- establish source behavior, not new installed multi-team acceptance:
363
-
364
- - [Identity model](https://github.com/awebai/aweb/blob/bfdb20886080e4ffe1f02b266f6116d12bd100fd/docs/identity.md)
365
- and [identity guide](https://github.com/awebai/aweb/blob/bfdb20886080e4ffe1f02b266f6116d12bd100fd/docs/identity-guide.md):
366
- scope, memberships, addresses, certificate and lifecycle distinctions.
367
- - [Work across teams](https://github.com/awebai/aweb/blob/bfdb20886080e4ffe1f02b266f6116d12bd100fd/docs/work-across-teams.md)
368
- and [aweb SOT](https://github.com/awebai/aweb/blob/bfdb20886080e4ffe1f02b266f6116d12bd100fd/docs/aweb-sot.md):
369
- membership lists, active selection and per-team coordination state.
370
- - [Global/local routing](https://github.com/awebai/aweb/blob/bfdb20886080e4ffe1f02b266f6116d12bd100fd/docs/global-local-identity-routing.md):
371
- addresses, learned return routes and current inbound-policy boundaries.
372
- - [CLI team implementation](https://github.com/awebai/aweb/blob/bfdb20886080e4ffe1f02b266f6116d12bd100fd/cli/go/cmd/aw/id_team.go):
373
- `ensureTeamAcceptScopeAllowed`, `resolveGlobalIdentityForTeamAccept` and
374
- `acceptHostedTeamInviteWithDetails` enforce single-team local scope and
375
- reuse existing global identity material.
376
- - [Inbound mode normalization](https://github.com/awebai/aweb/blob/bfdb20886080e4ffe1f02b266f6116d12bd100fd/cli/go/cmd/aw/inbound_mode.go)
377
- and [wake client construction](https://github.com/awebai/aweb/blob/bfdb20886080e4ffe1f02b266f6116d12bd100fd/cli/go/cmd/aw/wake.go):
378
- compatibility spellings and the selected client behind broker streams.
379
- - OATS [aweb adapter](../../capabilities/oats-aweb/bin/oats-aweb.mjs),
380
- [OKF adapter](../../capabilities/oats-okf/bin/oats-okf.mjs),
381
- [configuration](../configuration.md) and [layers](../layers.md): current
382
- single-team spawning, retained custody, soul-directed harvesting, and the
383
- explicitly proposed shared knowledge scoping.
384
-
385
- Before implementing against a deployed version, check its public CLI and
386
- service capabilities. Do not treat a proposal, a source test, a saved
387
- certificate, or an old migration receipt as proof that the full installed
388
- multi-team/wake/shared-knowledge journey has passed.
389
-
390
- ## Git preparation and updates
391
-
392
- The deployment package owns initial repository clone or adoption. Its saved
393
- configuration identifies the repository source, local destination and selected
394
- revision/update policy. Git credentials must work on the execution host;
395
- successful SSH access to that host does not establish repository access.
396
-
397
- Use an existing suitable checkout without overwriting it. For an isolated new
398
- agent, prepare the selected revision and create a separate worktree according
399
- to the work policy. Record the resolved revision so the result is inspectable.
400
- Fetch and selecting a revision are distinct from moving an active checkout.
401
-
402
- Starting an agent must not silently pull, reset or switch another agent's
403
- working checkout. Updates to an existing agent's work remain explicit work
404
- operations. A package that supports another work-target system can implement
405
- the corresponding behavior without teaching the kernel that system's details.
406
-
407
- ## The expert and the extensible installation
408
-
409
- Ship a portable setup/repair skill and make it usable by an existing agent
410
- before OATS has been installed. The same knowledge should support a resident
411
- installation expert once OATS works. This gives a repair path when the GUI or
412
- OATS lifecycle itself is unavailable.
413
-
414
- The expert should be available on demand and wake when asked. Schedules,
415
- message delivery and running sessions must not require a continuously active
416
- model supervising them. The expert can help create a recurring diagnostic job
417
- when useful; an always-busy expert is not a prerequisite for a healthy system.
418
-
419
- Keep reusable expert knowledge in its package. Hostnames, local paths, chosen
420
- providers and unfinished local work belong to deployment configuration and
421
- deployment-owned knowledge. Another expert instance must be able to take over
422
- from those records. Avoid a second authoritative deployment database hidden in
423
- the expert's memory.
424
-
425
- This is the useful interpretation of "Emacs-ification": an inspectable,
426
- programmable installation whose users can compose and share extensions, with
427
- an expert that understands the available operations. The CLI, GUI and expert
428
- should invoke the same mechanisms and report the same effective configuration.
429
-
430
- The expert may implement an extension when an actual requirement demands it.
431
- Package acquisition, versioning and the normal development/review process
432
- still apply. Teaching an expert to invent a fresh setup script on every
433
- installation would lose the repeatability that makes this approach valuable.
434
-
435
- ## Changing a deployment while agents work
436
-
437
- Changes need clear scope and application semantics:
438
-
439
- | Change | Intended behavior |
440
- |---|---|
441
- | Defaults or launch configuration for future instances | Save immediately; expose what future launches will use |
442
- | Existing instance's harness or launch recipe | Use an explicit targeted restart; preserve its home and identity |
443
- | Existing instance's capability bindings | Show captured bindings versus current configuration; apply through an explicit supported transition |
444
- | Work location or knowledge provider | Treat as a migration with a concrete preservation plan, not a config-only substitution |
445
- | Schedule | Apply through scheduling operations; distinguish a configured job from a successful run |
446
- | OATS or package implementation | Test the candidate, install the intended version, retain a recovery path and affect only the necessary processes |
447
-
448
- Some of these behaviors already have commands; others describe the desired
449
- contract. In particular, selecting a new knowledge provider does not imply
450
- automatic conversion of existing knowledge.
451
-
452
- The expert may perform authorized maintenance while work continues. Routine
453
- onboarding must not depend on rewriting the running kernel or restarting every
454
- agent. It should also be possible to recover without the particular expert
455
- session that initiated the change.
456
-
457
- ## Implementation sequence and takeover
458
-
459
- Juan has endorsed this direction and requested this written handoff so Pepe's
460
- agents can take over during his absence. Continue through the existing team
461
- coordination and review process. The slices below are ordered around one usable
462
- journey, with no prerequisite platform rewrite.
463
-
464
- 1. **Resolve the membership, identity and knowledge contracts.** Make the
465
- workspace team catalog, instance membership set, explicit identity scope,
466
- custody and shared-knowledge read/write destinations concrete. Use the
467
- verified aweb primitives, with owner review of any required aweb change.
468
- Done when one multi-team global instance and one single-team local instance
469
- can be described without conflating workspace, identity or knowledge scope.
470
- 2. **Separate and refresh the expert.** Distinguish the portable installation
471
- expert from the repository maintainer. Update the setup/repair skill to the
472
- actual CLI and selected-capability contracts. Make the skill usable outside
473
- OATS. Done when a fresh agent can understand an installation without inheriting
474
- our repository maintenance instructions or relying on a prior conversation.
475
- 3. **Exercise one real remote deployment.** Coordinate with the existing team's
476
- owner, inspect current state and prepare one additional agent on the intended
477
- host. Record the exact missing operations and the chosen deployment layout.
478
- Preserve existing workers. Done when the acceptance journey below succeeds.
479
- 4. **Package repeated preparation.** Extract the mechanical steps from that
480
- journey into inspect/prepare commands with structured results and a retry
481
- path. Add only the core boundary needed to consume them. Done when rerunning
482
- preparation reuses the prepared deployment and an incomplete attempt can be
483
- diagnosed and resumed without losing existing work.
484
- 5. **Expose the deployment in the GUI.** Distinguish host from workspace and
485
- communication-team membership; show identity scope and knowledge collections;
486
- show paths, readiness and actionable failures using the same operations as
487
- the expert. Done when a user can understand where an agent will run before
488
- starting it and manage the resulting instance afterward.
489
- 6. **Prove takeover and document the shipped path.** Have a fresh expert inspect
490
- the saved setup, explain it and perform a bounded addition or repair. Publish
491
- the working onboarding instructions and update this proposal with what
492
- actually shipped. No access to the original conversation should be required.
493
-
494
- Maintainers can divide package/skill work and GUI work once the operation shape
495
- is concrete. Agree that small contract before building two implementations.
496
- Use focused tests for new behavior and one bounded end-to-end qualification;
497
- documentation-only changes do not require launching harnesses or rebuilding
498
- Desktop.
499
-
500
- ## Acceptance journey
501
-
502
- Given an existing team and an accessible host, a user asks:
503
-
504
- > Add a developer to this team on that server, using this launch configuration.
505
-
506
- Success means:
507
-
508
- - The expert discovers and adopts suitable existing setup, or prepares the
509
- missing pieces at explicit recorded paths.
510
- - Selected capabilities are available; the instance has the intended team
511
- memberships, identity scope/custody and work target.
512
- - One global instance joins two teams using the same `did:aw`; each has its
513
- own valid binding and context. A single-team local instance is also supported;
514
- requesting a second membership for it produces an explicit scope error.
515
- - Per-team operations use the selected context; switching the default neither
516
- removes memberships nor prevents incoming work from the other team. The GUI
517
- represents one instance with multiple memberships accurately.
518
- - The chosen harness starts and can be attached to and managed from the GUI.
519
- - A real message reaches the agent and a useful response returns through the
520
- selected messaging/wake mechanism, including after the GUI closes.
521
- - Requested scheduling and knowledge behavior are verified separately from
522
- merely starting a process. For harvesting, verify useful knowledge output
523
- through the selected provider, not just that a harvester ran.
524
- - An agent promotes a project decision into the intended shared collection,
525
- and another authorized instance on another host retrieves it. A reusable
526
- soul lesson stays separately reusable; private project material is not
527
- copied into another team or the portable soul by default.
528
- - Restart preserves identity and memberships; leaving one global membership
529
- preserves the others. Retiring a home preserves recoverable global custody;
530
- local self-retirement reports the actual certificate/name-release result.
531
- - Existing agents continue working without an unrequested restart, identity
532
- replacement or checkout change.
533
- - A fresh expert can inspect the recorded result, repeat preparation without
534
- damage, and diagnose a deliberately missing prerequisite.
535
-
536
- ## Handoff boundaries and release baseline
537
-
538
- OATS 0.22.19 is the published baseline for this assessment. It includes named
539
- launch configurations and session restart alongside the earlier remote,
540
- provider-operation, scheduling and Desktop work. This document introduces no
541
- runtime changes, package installation, release or migration.
542
-
543
- Implementation taking over from this proposal should inspect current main and
544
- live deployment state rather than assuming that dated observations remain
545
- current. Keep machine-specific paths, credentials and operational receipts out
546
- of this portable public proposal; exchange them through the existing owner
547
- handoffs.
548
-
549
- Preserve Juan's operating constraints: do not disturb the TSM team until its
550
- deployment owner confirms completion; do not interrupt urgent work or restart
551
- existing agents to demonstrate onboarding. Keep one Desktop instance and
552
- bounded test sessions. Existing capture/harvesting holds are not lifted by this
553
- proposal. Coordinate any real pilot with its owner instead of enabling broad
554
- recurring jobs as a side effect.
555
-
556
- The next evidence sought is a repeatable, usable installation with a successful
557
- remote teammate and a working handover. Additional abstractions should earn
558
- their place by removing an observed obstacle to that outcome.