@open-agent-toolkit/cli 0.2.50 → 0.2.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/bootstrap.md +6 -2
- package/assets/docs/cli-utilities/tool-packs.md +87 -33
- package/assets/docs/provider-sync/commands.md +30 -2
- package/assets/docs/provider-sync/config.md +19 -0
- package/assets/docs/provider-sync/manifest-and-drift.md +37 -0
- package/assets/docs/provider-sync/providers.md +69 -2
- package/assets/docs/provider-sync/scope-and-surface.md +44 -0
- package/assets/docs/reference/cli-reference.md +21 -5
- package/assets/docs/reference/file-locations.md +8 -2
- package/assets/docs/reference/oat-directory-structure.md +25 -9
- package/assets/docs/workflows/projects/artifacts.md +9 -4
- package/assets/docs/workflows/projects/evidence-layers.md +110 -1
- package/assets/docs/workflows/projects/implementation-execution.md +13 -0
- package/assets/docs/workflows/projects/lifecycle.md +17 -5
- package/assets/docs/workflows/projects/orchestration-model.md +18 -0
- package/assets/docs/workflows/projects/picking-up-projects.md +26 -9
- package/assets/docs/workflows/projects/pr-flow.md +5 -3
- package/assets/docs/workflows/projects/reviewing-oat-prs.md +12 -8
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-dispatch-subagents/SKILL.md +57 -1
- package/assets/skills/oat-dispatch-subagents/references/record-schema.md +77 -1
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +3 -3
- package/assets/skills/oat-project-complete/SKILL.md +193 -26
- package/assets/skills/oat-project-complete/scripts/execute-synced-archive-entry.mjs +306 -0
- package/assets/skills/oat-project-complete/scripts/finalize-synced-archive.mjs +125 -0
- package/assets/skills/oat-project-complete/scripts/parse-synced-archive-resume-fields.mjs +106 -0
- package/assets/skills/oat-project-complete/scripts/recover-completion-receipts.mjs +110 -0
- package/assets/skills/oat-project-complete/scripts/resolve-synced-archive-entry.mjs +164 -0
- package/assets/skills/oat-project-dispatch-subagents/SKILL.md +24 -1
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +3 -3
- package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +11 -0
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +3 -3
- package/assets/skills/oat-project-plan-writing/SKILL.md +12 -1
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +3 -3
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +3 -3
- package/assets/skills/oat-project-review-provide/SKILL.md +12 -1
- package/assets/skills/oat-project-review-provide-remote/SKILL.md +12 -1
- package/dist/agents/canonical/index.d.ts +2 -0
- package/dist/agents/canonical/index.d.ts.map +1 -1
- package/dist/agents/canonical/index.js +1 -0
- package/dist/agents/canonical/resolve.d.ts +45 -0
- package/dist/agents/canonical/resolve.d.ts.map +1 -0
- package/dist/agents/canonical/resolve.js +175 -0
- package/dist/commands/decision/agents-guidance.d.ts +2 -2
- package/dist/commands/decision/agents-guidance.d.ts.map +1 -1
- package/dist/commands/decision/agents-guidance.js +1 -4
- package/dist/commands/decision/index.d.ts.map +1 -1
- package/dist/commands/decision/index.js +25 -6
- package/dist/commands/docs/init/index.d.ts +7 -1
- package/dist/commands/docs/init/index.d.ts.map +1 -1
- package/dist/commands/docs/init/index.js +53 -20
- package/dist/commands/doctor/index.d.ts +8 -2
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +157 -46
- package/dist/commands/init/index.d.ts +8 -3
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +64 -26
- package/dist/commands/init/tools/index.d.ts +12 -12
- package/dist/commands/init/tools/index.d.ts.map +1 -1
- package/dist/commands/init/tools/index.js +430 -99
- package/dist/commands/init/tools/install-state.d.ts +2 -0
- package/dist/commands/init/tools/install-state.d.ts.map +1 -1
- package/dist/commands/init/tools/install-state.js +11 -0
- package/dist/commands/init/tools/project-guidance.d.ts +49 -0
- package/dist/commands/init/tools/project-guidance.d.ts.map +1 -0
- package/dist/commands/init/tools/project-guidance.js +144 -0
- package/dist/commands/init/tools/workflows/index.d.ts +7 -0
- package/dist/commands/init/tools/workflows/index.d.ts.map +1 -1
- package/dist/commands/init/tools/workflows/index.js +160 -7
- package/dist/commands/pjm/index.d.ts.map +1 -1
- package/dist/commands/pjm/index.js +28 -3
- package/dist/commands/pjm/init.d.ts +5 -0
- package/dist/commands/pjm/init.d.ts.map +1 -1
- package/dist/commands/pjm/init.js +19 -3
- package/dist/commands/project/archive/archive-utils.d.ts +8 -1
- package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
- package/dist/commands/project/archive/archive-utils.js +147 -50
- package/dist/commands/project/archive/push-runner.d.ts.map +1 -1
- package/dist/commands/project/archive/push-runner.js +15 -2
- package/dist/commands/project/dispatch/index.d.ts +10 -0
- package/dist/commands/project/dispatch/index.d.ts.map +1 -0
- package/dist/commands/project/dispatch/index.js +137 -0
- package/dist/commands/project/dispatch/record.d.ts +91 -0
- package/dist/commands/project/dispatch/record.d.ts.map +1 -0
- package/dist/commands/project/dispatch/record.js +402 -0
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +2 -0
- package/dist/commands/project/links/compute.d.ts +1 -0
- package/dist/commands/project/links/compute.d.ts.map +1 -1
- package/dist/commands/project/links/compute.js +5 -4
- package/dist/commands/project/links/index.d.ts +9 -0
- package/dist/commands/project/links/index.d.ts.map +1 -1
- package/dist/commands/project/links/index.js +71 -2
- package/dist/commands/project/list.d.ts +10 -2
- package/dist/commands/project/list.d.ts.map +1 -1
- package/dist/commands/project/list.js +205 -29
- package/dist/commands/project/open/index.d.ts +2 -0
- package/dist/commands/project/open/index.d.ts.map +1 -1
- package/dist/commands/project/open/index.js +16 -1
- package/dist/commands/project/prune/index.d.ts +10 -4
- package/dist/commands/project/prune/index.d.ts.map +1 -1
- package/dist/commands/project/prune/index.js +85 -15
- package/dist/commands/project/pull/index.d.ts +4 -0
- package/dist/commands/project/pull/index.d.ts.map +1 -1
- package/dist/commands/project/pull/index.js +82 -3
- package/dist/commands/project/sync/git.d.ts +9 -0
- package/dist/commands/project/sync/git.d.ts.map +1 -1
- package/dist/commands/project/sync/git.js +18 -0
- package/dist/commands/project/sync/ref-sync.d.ts +16 -1
- package/dist/commands/project/sync/ref-sync.d.ts.map +1 -1
- package/dist/commands/project/sync/ref-sync.js +288 -17
- package/dist/commands/project/sync/resolve-target.d.ts +10 -0
- package/dist/commands/project/sync/resolve-target.d.ts.map +1 -1
- package/dist/commands/project/sync/resolve-target.js +56 -1
- package/dist/commands/providers/inspect/inspect.d.ts +8 -1
- package/dist/commands/providers/inspect/inspect.d.ts.map +1 -1
- package/dist/commands/providers/inspect/inspect.js +146 -26
- package/dist/commands/providers/list/list.d.ts +8 -1
- package/dist/commands/providers/list/list.d.ts.map +1 -1
- package/dist/commands/providers/list/list.js +139 -23
- package/dist/commands/providers/providers.types.d.ts +25 -1
- package/dist/commands/providers/providers.types.d.ts.map +1 -1
- package/dist/commands/providers/set/index.d.ts +9 -1
- package/dist/commands/providers/set/index.d.ts.map +1 -1
- package/dist/commands/providers/set/index.js +43 -33
- package/dist/commands/remove/skill/remove-skill.d.ts.map +1 -1
- package/dist/commands/remove/skill/remove-skill.js +11 -0
- package/dist/commands/shared/agents-md.d.ts +42 -14
- package/dist/commands/shared/agents-md.d.ts.map +1 -1
- package/dist/commands/shared/agents-md.js +364 -70
- package/dist/commands/shared/project-scope.d.ts +2 -0
- package/dist/commands/shared/project-scope.d.ts.map +1 -1
- package/dist/commands/shared/project-scope.js +5 -0
- package/dist/commands/state/generate.d.ts +2 -0
- package/dist/commands/state/generate.d.ts.map +1 -1
- package/dist/commands/state/generate.js +93 -28
- package/dist/commands/status/index.d.ts +8 -3
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +147 -32
- package/dist/commands/sync/apply.d.ts.map +1 -1
- package/dist/commands/sync/apply.js +220 -29
- package/dist/commands/sync/dry-run.d.ts.map +1 -1
- package/dist/commands/sync/dry-run.js +30 -6
- package/dist/commands/sync/index.d.ts +17 -2
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +106 -41
- package/dist/commands/sync/sync.types.d.ts +39 -2
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/commands/sync/sync.utils.d.ts +5 -1
- package/dist/commands/sync/sync.utils.d.ts.map +1 -1
- package/dist/commands/sync/sync.utils.js +73 -0
- package/dist/commands/tools/info/info-tool.d.ts +2 -0
- package/dist/commands/tools/info/info-tool.d.ts.map +1 -1
- package/dist/commands/tools/info/info-tool.js +34 -12
- package/dist/commands/tools/install/index.d.ts.map +1 -1
- package/dist/commands/tools/install/index.js +19 -3
- package/dist/commands/tools/list/list-tools.d.ts +2 -0
- package/dist/commands/tools/list/list-tools.d.ts.map +1 -1
- package/dist/commands/tools/list/list-tools.js +36 -7
- package/dist/commands/tools/remove/index.d.ts.map +1 -1
- package/dist/commands/tools/remove/index.js +150 -21
- package/dist/commands/tools/remove/remove-tools.d.ts +20 -0
- package/dist/commands/tools/remove/remove-tools.d.ts.map +1 -1
- package/dist/commands/tools/remove/remove-tools.js +122 -1
- package/dist/commands/tools/shared/format-pack-inventory.d.ts +19 -0
- package/dist/commands/tools/shared/format-pack-inventory.d.ts.map +1 -1
- package/dist/commands/tools/shared/format-pack-inventory.js +109 -0
- package/dist/commands/tools/shared/pack-evidence.d.ts +66 -0
- package/dist/commands/tools/shared/pack-evidence.d.ts.map +1 -0
- package/dist/commands/tools/shared/pack-evidence.js +132 -0
- package/dist/commands/tools/shared/pack-inventory.d.ts +1 -0
- package/dist/commands/tools/shared/pack-inventory.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts +44 -0
- package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts.map +1 -0
- package/dist/commands/tools/shared/pack-lifecycle-outcome.js +91 -0
- package/dist/commands/tools/update/index.d.ts.map +1 -1
- package/dist/commands/tools/update/index.js +74 -4
- package/dist/commands/tools/update/update-tools.d.ts +5 -0
- package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
- package/dist/commands/tools/update/update-tools.js +64 -2
- package/dist/config/oat-config.d.ts +5 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +17 -5
- package/dist/config/user-sync-config.d.ts +1 -0
- package/dist/config/user-sync-config.d.ts.map +1 -1
- package/dist/config/user-sync-config.js +8 -0
- package/dist/drift/detector.d.ts +2 -2
- package/dist/drift/detector.d.ts.map +1 -1
- package/dist/drift/detector.js +18 -0
- package/dist/drift/strays.d.ts.map +1 -1
- package/dist/drift/strays.js +5 -0
- package/dist/engine/collection-sync.d.ts +14 -0
- package/dist/engine/collection-sync.d.ts.map +1 -0
- package/dist/engine/collection-sync.js +282 -0
- package/dist/engine/compute-plan.d.ts +8 -1
- package/dist/engine/compute-plan.d.ts.map +1 -1
- package/dist/engine/compute-plan.js +303 -12
- package/dist/engine/engine.types.d.ts +61 -0
- package/dist/engine/engine.types.d.ts.map +1 -1
- package/dist/engine/execute-plan.d.ts +22 -2
- package/dist/engine/execute-plan.d.ts.map +1 -1
- package/dist/engine/execute-plan.js +459 -27
- package/dist/engine/provider-path-safety.d.ts +1 -0
- package/dist/engine/provider-path-safety.d.ts.map +1 -1
- package/dist/engine/provider-path-safety.js +15 -0
- package/dist/engine/scanner.d.ts +2 -2
- package/dist/engine/scanner.d.ts.map +1 -1
- package/dist/engine/scanner.js +21 -4
- package/dist/fs/io.d.ts +67 -0
- package/dist/fs/io.d.ts.map +1 -1
- package/dist/fs/io.js +536 -3
- package/dist/manifest/index.d.ts +2 -2
- package/dist/manifest/index.d.ts.map +1 -1
- package/dist/manifest/index.js +1 -1
- package/dist/manifest/manager.d.ts +2 -2
- package/dist/manifest/manager.d.ts.map +1 -1
- package/dist/manifest/manager.js +20 -3
- package/dist/manifest/manifest.types.d.ts +704 -13
- package/dist/manifest/manifest.types.d.ts.map +1 -1
- package/dist/manifest/manifest.types.js +131 -15
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +41 -10
- package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/cursor/codec/sync-extension.js +41 -10
- package/dist/providers/identity/absolute-paths.d.ts +68 -0
- package/dist/providers/identity/absolute-paths.d.ts.map +1 -0
- package/dist/providers/identity/absolute-paths.js +144 -0
- package/dist/providers/identity/claude-runtime-observation.d.ts +105 -0
- package/dist/providers/identity/claude-runtime-observation.d.ts.map +1 -0
- package/dist/providers/identity/claude-runtime-observation.fixtures.d.ts +40 -0
- package/dist/providers/identity/claude-runtime-observation.fixtures.d.ts.map +1 -0
- package/dist/providers/identity/claude-runtime-observation.fixtures.js +146 -0
- package/dist/providers/identity/claude-runtime-observation.js +229 -0
- package/dist/providers/identity/codex-runtime-observation.d.ts +75 -0
- package/dist/providers/identity/codex-runtime-observation.d.ts.map +1 -0
- package/dist/providers/identity/codex-runtime-observation.fixtures.d.ts +37 -0
- package/dist/providers/identity/codex-runtime-observation.fixtures.d.ts.map +1 -0
- package/dist/providers/identity/codex-runtime-observation.fixtures.js +539 -0
- package/dist/providers/identity/codex-runtime-observation.js +255 -0
- package/dist/providers/identity/generic-dispatch-record.d.ts +313 -0
- package/dist/providers/identity/generic-dispatch-record.d.ts.map +1 -0
- package/dist/providers/identity/generic-dispatch-record.js +539 -0
- package/dist/providers/identity/oat-dispatch-record.d.ts +1964 -0
- package/dist/providers/identity/oat-dispatch-record.d.ts.map +1 -0
- package/dist/providers/identity/oat-dispatch-record.js +691 -0
- package/dist/providers/identity/runtime-observation.d.ts +100 -0
- package/dist/providers/identity/runtime-observation.d.ts.map +1 -0
- package/dist/providers/identity/runtime-observation.js +169 -0
- package/dist/providers/shared/index.d.ts +2 -0
- package/dist/providers/shared/index.d.ts.map +1 -1
- package/dist/providers/shared/index.js +1 -0
- package/dist/providers/shared/materialization-extension.d.ts +12 -0
- package/dist/providers/shared/materialization-extension.d.ts.map +1 -1
- package/dist/providers/shared/registry.d.ts +69 -0
- package/dist/providers/shared/registry.d.ts.map +1 -0
- package/dist/providers/shared/registry.js +252 -0
- package/dist/providers/shared/restart-adviser.d.ts +26 -0
- package/dist/providers/shared/restart-adviser.d.ts.map +1 -0
- package/dist/providers/shared/restart-adviser.js +96 -0
- package/dist/shared/types.d.ts +4 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -47,7 +47,8 @@ After core initialization completes, `oat init` can enter an interactive guided
|
|
|
47
47
|
- choose **Yes** to run the per-pack scope selector for every pack that allows both scopes (`ideas`, `docs`, `workflows`, `utility`, `project-management`, `research`, `brainstorm`)
|
|
48
48
|
- choose **No** to apply additive per-pack defaults without extra scope prompts
|
|
49
49
|
- on a fresh install every pack defaults to **user** scope, so capabilities follow you across repositories; an existing install keeps its current placement
|
|
50
|
-
-
|
|
50
|
+
- after placement is chosen, repository `AGENTS.md` guidance is a separate opt-in. Accepting creates the managed `OAT tools` section only when the root file is absent. An existing file or symlink is never replaced: OAT prints a repository-relative, copy-pasteable managed-block patch instead. Declining leaves `AGENTS.md` unchanged
|
|
51
|
+
- installing `project-management` installs the capability only. Adopting it for this repository is a third, separate choice made with `oat pjm init` — see [Install vs. initialize](tool-packs.md#install-vs-initialize)
|
|
51
52
|
2. **Local paths** — multi-select from default gitignored artifact paths (analysis, PR, reviews, ideas). Pre-existing paths are pre-checked; only new paths are added.
|
|
52
53
|
3. **Documentation** — detect or enter docs metadata for the repo when documentation exists.
|
|
53
54
|
4. **Provider sync** — sync provider project views via `oat sync --scope project`.
|
|
@@ -58,12 +59,15 @@ Hook install note:
|
|
|
58
59
|
- The optional OAT pre-commit hook installs into Git's active hook directory.
|
|
59
60
|
- If a repo uses a managed hook folder such as `.githooks/`, that path must already be configured in Git, or OAT must configure it during the prompt flow before hook install.
|
|
60
61
|
|
|
61
|
-
**Non-interactive mode:** Fresh-init guided setup offers are interactive-only. If `--setup` is passed in non-interactive mode (`--json`, piped input, non-TTY, or `OAT_NON_INTERACTIVE=1`), guided setup does not prompt: tool packs use additive defaults, local-path and documentation prompts are skipped unless already configured, and provider sync is skipped unless separately requested.
|
|
62
|
+
**Non-interactive mode:** Fresh-init guided setup offers are interactive-only. If `--setup` is passed in non-interactive mode (`--json`, piped input, non-TTY, or `OAT_NON_INTERACTIVE=1`), guided setup does not prompt: tool packs use additive defaults, local-path and documentation prompts are skipped unless already configured, and provider sync is skipped unless separately requested. Repository guidance also defaults to no write; pass `--project-guidance` to opt in explicitly or `--no-project-guidance` to record an explicit decline.
|
|
62
63
|
|
|
63
64
|
```bash
|
|
64
65
|
# Explicit guided setup on an existing repo
|
|
65
66
|
oat init --setup --scope project
|
|
66
67
|
|
|
68
|
+
# Install capabilities and create or propose repository guidance
|
|
69
|
+
oat init --setup --project-guidance
|
|
70
|
+
|
|
67
71
|
# Fresh init — guided setup is offered automatically
|
|
68
72
|
oat init --scope project
|
|
69
73
|
```
|
|
@@ -169,16 +169,64 @@ Commands report both. `oat tools list` and `oat tools info` show placement,
|
|
|
169
169
|
intent source, and completeness. `oat status` and `oat doctor` report drift
|
|
170
170
|
between intent and inventory with a scoped recovery command.
|
|
171
171
|
|
|
172
|
+
### Requested scope versus realized placement
|
|
173
|
+
|
|
174
|
+
Intent and inventory are reported as separate, source-qualified facts, so a
|
|
175
|
+
pack you declared but never installed is never rendered as installed. The
|
|
176
|
+
interactive picker labels each pack from **realized** placement — the scopes
|
|
177
|
+
where managed assets actually exist on disk — not from declared `tools.*`
|
|
178
|
+
intent. A pack declared at project scope with nothing materialized shows as
|
|
179
|
+
not installed, which is the honest answer.
|
|
180
|
+
|
|
181
|
+
Installation outcomes carry `realizedPlacement` alongside the requested scope,
|
|
182
|
+
so JSON consumers can tell the two apart. Selecting `User scope` installs at
|
|
183
|
+
user scope only; it never silently widens to `project + user`.
|
|
184
|
+
|
|
185
|
+
One caveat worth knowing: `oat tools list` and `oat tools info` human output,
|
|
186
|
+
and `oat status` JSON, still print a `placement` field derived from
|
|
187
|
+
declaration rather than realization. For a declared-but-absent pack that field
|
|
188
|
+
reads `project` even though nothing is installed. Prefer the picker labels and
|
|
189
|
+
`realizedPlacement` when you need the truthful answer. Retiring the
|
|
190
|
+
declaration-derived field is tracked in the repository backlog.
|
|
191
|
+
|
|
172
192
|
A pack is **complete** at a scope when every managed asset the current release
|
|
173
193
|
declares for that scope is present, **partial** when only some are, and
|
|
174
194
|
**absent** when none are.
|
|
175
195
|
|
|
196
|
+
### Three independent repository choices
|
|
197
|
+
|
|
198
|
+
Tool-pack setup separates three decisions that do not imply one another:
|
|
199
|
+
|
|
200
|
+
1. **Capability placement** chooses whether pack assets live at project scope,
|
|
201
|
+
user scope, or both. Placement controls where the capability is available;
|
|
202
|
+
it does not authorize a repository `AGENTS.md` edit.
|
|
203
|
+
2. **Project guidance** is an explicit choice to create an absent root
|
|
204
|
+
`AGENTS.md` or print a manual patch for its managed `OAT tools` section. Use
|
|
205
|
+
`--project-guidance` to accept or `--no-project-guidance` to decline on
|
|
206
|
+
`oat init --setup`, `oat init tools`, and `oat tools install` flows. The
|
|
207
|
+
interactive prompt defaults to decline. Non-interactive runs perform no
|
|
208
|
+
guidance write unless `--project-guidance` is present and report the exact
|
|
209
|
+
opt-in command instead. When `AGENTS.md` already exists or is a contained
|
|
210
|
+
symlink, accepted guidance performs zero writes and prints the same
|
|
211
|
+
repository-relative, copy-pasteable managed block on every run. The patch
|
|
212
|
+
describes the complete realized project-and-user pack inventory and tells
|
|
213
|
+
the operator to remove a legacy `OAT workflows` block manually when needed.
|
|
214
|
+
3. **PJM adoption** is the repository decision to use project-management state.
|
|
215
|
+
Make it separately with `oat pjm init`; neither installing the
|
|
216
|
+
`project-management` pack nor accepting tool guidance adopts PJM.
|
|
217
|
+
|
|
218
|
+
These choices stay independent for standalone workflows installs too. For
|
|
219
|
+
example, `oat init tools workflows --scope user --project-guidance` installs
|
|
220
|
+
the workflows capability at user scope while updating guidance in the current
|
|
221
|
+
repository. A blocked guidance update is reported separately and does not
|
|
222
|
+
undo or misreport the successful capability install.
|
|
223
|
+
|
|
176
224
|
### Where pack assets land
|
|
177
225
|
|
|
178
226
|
| Asset kind | Project scope | User scope | Ownership |
|
|
179
227
|
| ----------------- | ---------------------------------------------------------------------------------- | ---------------------------- | --------------------------------------------------- |
|
|
180
228
|
| Skill | `.agents/skills/<name>/` | `~/.agents/skills/<name>/` | Managed — updated and removed by OAT |
|
|
181
|
-
| Agent | `.agents/agents/<name>.md` | `~/.agents/agents/<name>.md` | Managed
|
|
229
|
+
| Agent | `.agents/agents/<name>.md` | `~/.agents/agents/<name>.md` | Managed; provider projection is capability-driven |
|
|
182
230
|
| Template | `.oat/templates/<name>` | `~/.oat/templates/<name>` | Seeded once at project scope; managed at user scope |
|
|
183
231
|
| Script | `.oat/scripts/<name>` | `~/.oat/scripts/<name>` | Managed, executable |
|
|
184
232
|
| Bundled docs tree | not applicable | `~/.oat/docs/` | Managed directory (core pack) |
|
|
@@ -189,30 +237,33 @@ creates `~/.oat/ideas/backlog.md` and `~/.oat/ideas/scratchpad.md`. Only the
|
|
|
189
237
|
`workflows` project-scaffold seeds — `.oat/projects-root`, `.oat/config.json`,
|
|
190
238
|
and the project `.gitkeep` files — are pinned to project scope.
|
|
191
239
|
|
|
192
|
-
#### User-scope
|
|
193
|
-
|
|
194
|
-
Canonical **agents** are installed at either scope.
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
role
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
240
|
+
#### User-scope agent projection is provider-capability driven
|
|
241
|
+
|
|
242
|
+
Canonical **agents** are installed at either scope. User sync scans them when
|
|
243
|
+
an active provider declares user-agent capability. Explicit enablement wins
|
|
244
|
+
without filesystem detection, explicit disablement wins despite detection, and
|
|
245
|
+
an unset adapter follows detection. Provider mappings and registered
|
|
246
|
+
materialization extensions then determine the output: entry sync, native read,
|
|
247
|
+
extension-owned role materialization, or explicit unsupported evidence.
|
|
248
|
+
|
|
249
|
+
Core sync does not write extension-owned role paths. Codex and Cursor own their
|
|
250
|
+
generated managed-role outputs through provider extensions, while other user
|
|
251
|
+
agents continue through each active adapter's declared mapping. Per-asset sync
|
|
252
|
+
results distinguish changed, current, missing, failed, unsupported, and unknown
|
|
253
|
+
outcomes, so one failed or unsupported asset does not erase evidence for its
|
|
254
|
+
siblings.
|
|
255
|
+
|
|
256
|
+
Materialization is not runtime visibility. `oat status` and `oat doctor` report
|
|
257
|
+
the registered refresh policy separately and say `not-reported` when they did
|
|
258
|
+
not inspect a running provider catalog. A provider file being current therefore
|
|
259
|
+
does not mean the active session is proven to see it.
|
|
260
|
+
|
|
261
|
+
After a successful provider-visible file change, OAT conservatively advises
|
|
262
|
+
starting a new provider session so it has an opportunity to load the changed
|
|
263
|
+
asset. This repository policy is not a provider hot-reload guarantee, an
|
|
264
|
+
application-process restart requirement, or proof of visibility. No advice is
|
|
265
|
+
emitted for current/no-op, planned-only, failed, missing, inactive, or
|
|
266
|
+
unsupported materialization.
|
|
216
267
|
|
|
217
268
|
Repository templates under `.oat/templates/` are **owner-owned seeds**. OAT
|
|
218
269
|
compares a source-backed seed with its bundled default: a byte-equivalent copy
|
|
@@ -285,9 +336,12 @@ adoption**, and the two are tracked independently:
|
|
|
285
336
|
fresh install, so `~/.agents/skills/` and `~/.oat/templates/` receive the
|
|
286
337
|
managed assets and no repository file is touched.
|
|
287
338
|
- **Initialize (adoption)**: `oat pjm init` instantiates the two-layer working
|
|
288
|
-
repo-reference surface under `.oat/repo/`,
|
|
289
|
-
|
|
339
|
+
repo-reference surface under `.oat/repo/`, creates repository guidance only
|
|
340
|
+
when the root `AGENTS.md` is absent, and records explicit adoption in
|
|
290
341
|
`.oat/config.json` as `pjm.initialized: true` with a `pjm.schemaVersion`.
|
|
342
|
+
When the root file or a contained symlink already exists, adoption completes
|
|
343
|
+
independently and OAT prints a manual project-management/decision patch
|
|
344
|
+
without changing that file.
|
|
291
345
|
|
|
292
346
|
Having the pack installed does **not** mean this repository uses PJM. Adoption
|
|
293
347
|
is a per-repository decision recorded by `oat pjm init`:
|
|
@@ -315,7 +369,7 @@ neither recognized legacy input nor a complete current layout is skipped with
|
|
|
315
369
|
an `oat pjm init` recovery. `--print-prompt` only reads the bundled prompt and
|
|
316
370
|
does not inspect adoption or modify the repository.
|
|
317
371
|
|
|
318
|
-
Decision records still require repository PJM adoption. Run `oat pjm init` first: like every repository-mutating PJM command, `oat decision init` fails closed in an unadopted repository, writes nothing, and returns `oat pjm init` as the recovery. Once the repository is adopted, `oat decision init` scaffolds only the decision surface — the decision directory, generated index, and decision-specific AGENTS guidance — without touching current state, roadmap, or backlog artifacts. It does not require the `project-management` pack. If the pack is installed later,
|
|
372
|
+
Decision records still require repository PJM adoption. Run `oat pjm init` first: like every repository-mutating PJM command, `oat decision init` fails closed in an unadopted repository, writes nothing, and returns `oat pjm init` as the recovery. Once the repository is adopted, `oat decision init` scaffolds only the decision surface — the decision directory, generated index, and decision-specific AGENTS guidance — without touching current state, roadmap, or backlog artifacts. It does not require the `project-management` pack. A missing AGENTS file can be created exclusively; an existing file or symlink is left byte-for-byte unchanged and receives a manual decision-guidance patch. If the pack is installed later, project-management guidance remains a separate managed section so the decision instructions stay independently reusable.
|
|
319
373
|
|
|
320
374
|
`oat pjm init` is idempotent and non-destructive. Existing reference docs are skipped and left unchanged, so curated repo state is not overwritten on repeated runs.
|
|
321
375
|
|
|
@@ -500,9 +554,9 @@ Key behavior:
|
|
|
500
554
|
output prints `Adopted project tool pack: <pack>` once per adopted pack;
|
|
501
555
|
JSON output adds `adoptedPacks` only when the list is non-empty. This is pack
|
|
502
556
|
intent reconciliation, not repository PJM adoption
|
|
503
|
-
- A user-only install needs no Git repository and performs no repository writes
|
|
504
|
-
-
|
|
505
|
-
- Repository `AGENTS.md` guidance for project management is owned by adoption, not by pack placement. Installing the `project-management` pack
|
|
557
|
+
- A user-only capability install needs no Git repository and performs no repository writes unless `--project-guidance` explicitly requests the separate repository guidance update
|
|
558
|
+
- Offers repository `AGENTS.md` guidance independently of capability scope. Pass `--project-guidance` to create an absent file or print a manual managed `OAT tools` patch for an existing file/symlink, or `--no-project-guidance` to decline; the interactive prompt defaults to decline and non-interactive runs write nothing without the explicit opt-in
|
|
559
|
+
- Repository `AGENTS.md` guidance for project management is owned by adoption, not by pack placement. Installing the `project-management` pack never writes the section. `oat pjm init` creates guidance only when the root file is absent; otherwise it completes scaffold/adoption and prints a manual patch without changing the existing file or symlink
|
|
506
560
|
- Interactive runs can prompt to update selected outdated skills
|
|
507
561
|
- Successful installs report the final scope chosen for each pack, including `project + user` when a pack is installed in both, and auto-sync only the scopes actually changed by the install so untouched scopes are never re-synced or pruned
|
|
508
562
|
- Install-triggered auto-sync limits removal planning to the canonical entries from the pack that was just installed, so stale manifest drift in unrelated packs does not delete other provider views
|
|
@@ -771,11 +825,11 @@ brainstorm`, and `oat tools remove --pack brainstorm` manage the skill plus
|
|
|
771
825
|
|
|
772
826
|
### Auto-sync behavior
|
|
773
827
|
|
|
774
|
-
All mutation commands (`install`, `update`, `remove`, `migrate`) automatically run `oat sync --scope <scope>` after successful operations. This
|
|
828
|
+
All mutation commands (`install`, `update`, `remove`, `migrate`) automatically run `oat sync --scope <scope>` after successful operations. This reconciles provider files without manual intervention; it does not prove that an already-running provider catalog has loaded them.
|
|
775
829
|
|
|
776
830
|
Use `--no-sync` on any mutation command to skip this step.
|
|
777
831
|
|
|
778
|
-
For `oat tools install`, the follow-up sync still
|
|
832
|
+
For `oat tools install`, the follow-up sync still reconciles provider views immediately, but its removal pass is scoped to the canonical entries that were just installed. New-session advice is shown only when a registered provider/content policy applies to a successful current-run change. It gives the provider an opportunity to load the changed asset; it does not tell you to restart the application process or prove runtime visibility. This avoids deleting unrelated provider views when a worktree has stale manifest entries for packs whose canonical content is absent locally.
|
|
779
833
|
|
|
780
834
|
Removal and migration use the symmetric contract: the follow-up sync prunes exactly the provider views for the canonical paths that were removed, in that scope only, and only after the canonical source is confirmed absent.
|
|
781
835
|
|
|
@@ -55,6 +55,21 @@ Key behavior:
|
|
|
55
55
|
|
|
56
56
|
- Mutates by default; use `--dry-run` to preview
|
|
57
57
|
- Strategy-aware operations (`symlink`, `copy`, `auto`)
|
|
58
|
+
- Configured `auto` may adopt an existing exact collection-directory alias.
|
|
59
|
+
When the destination is absent, the current runtime falls back per entry;
|
|
60
|
+
OAT does not create or unlink a collection alias without identity-bound
|
|
61
|
+
guarded primitives. Configuring an explicit per-entry strategy does not
|
|
62
|
+
release an owned collection: the current runtime fails closed for deferred
|
|
63
|
+
collection-directory copies and symlinks because it cannot keep every
|
|
64
|
+
destination ancestor identity-bound.
|
|
65
|
+
To leave the provider directory externally owned, run
|
|
66
|
+
`oat providers set --scope <scope> --disabled <provider>` and then
|
|
67
|
+
`oat sync --scope <scope>` to detach OAT ownership. Then verify and remove
|
|
68
|
+
the preserved alias before managing that directory manually.
|
|
69
|
+
Automatic transition requires an identity-bound, non-following publication
|
|
70
|
+
primitive. Deferred file operations and ordinary non-transition per-entry
|
|
71
|
+
symlinks retain their existing behavior. Explicit `symlink` and `copy` remain
|
|
72
|
+
per-entry modes; `oat sync` does not add a `--strategy` option.
|
|
58
73
|
- Provider enable/disable honored via sync config
|
|
59
74
|
- Cursor skills are native-read from canonical `.agents/skills`; sync does not
|
|
60
75
|
create `.cursor/skills` mirrors
|
|
@@ -83,27 +98,40 @@ oat sync --scope all --dry-run
|
|
|
83
98
|
Review every planned `remove` and `detach` operation before running the same
|
|
84
99
|
command without `--dry-run`.
|
|
85
100
|
|
|
101
|
+
Dry-run and apply output include a `Collection aliases` section with scope,
|
|
102
|
+
provider, content kind, action, ownership, scope-relative canonical/provider
|
|
103
|
+
directories, reason, and planned or applied result. JSON reports the same
|
|
104
|
+
redacted fields under `collectionOperations`; collection proofs are reduced to
|
|
105
|
+
status and a safe reason rather than filesystem identities or absolute scope
|
|
106
|
+
roots. Real-directory fallback is reported as `fallback-per-entry`.
|
|
107
|
+
|
|
86
108
|
## `oat providers list`
|
|
87
109
|
|
|
88
110
|
Purpose:
|
|
89
111
|
|
|
90
112
|
- Summarize adapters, detection, and mapping-level health summary
|
|
113
|
+
- Summarize managed collection aliases by `oat-created` and `adopted-exact`
|
|
114
|
+
ownership in both human and JSON output
|
|
91
115
|
|
|
92
116
|
## `oat providers inspect <provider>`
|
|
93
117
|
|
|
94
118
|
Purpose:
|
|
95
119
|
|
|
96
120
|
- Show adapter mappings and per-scope mapping state details
|
|
121
|
+
- Show each owned collection alias with scope-relative paths, ownership, and
|
|
122
|
+
last-verification time
|
|
97
123
|
|
|
98
124
|
## `oat providers set`
|
|
99
125
|
|
|
100
126
|
Purpose:
|
|
101
127
|
|
|
102
|
-
- Enable or disable
|
|
128
|
+
- Enable or disable providers in the selected scope's sync config; project is
|
|
129
|
+
the default scope
|
|
103
130
|
|
|
104
131
|
Key behavior:
|
|
105
132
|
|
|
106
|
-
-
|
|
133
|
+
- Updates the selected scope's sync config to toggle provider enablement
|
|
134
|
+
- Scope: `--scope project|user` (defaults to `project`)
|
|
107
135
|
- Options: `--enabled <providers>`, `--disabled <providers>` (comma-separated)
|
|
108
136
|
- Changes take effect on next `oat sync`
|
|
109
137
|
|
|
@@ -103,6 +103,25 @@ safe, including after interruption.
|
|
|
103
103
|
- `false`: provider is inactive even if directory is detected.
|
|
104
104
|
- unset: provider falls back to directory detection.
|
|
105
105
|
- `defaultStrategy` is used when no provider-specific `strategy` is set.
|
|
106
|
+
- `auto` prefers a safe exact collection-directory alias when the canonical
|
|
107
|
+
collection and provider mapping are eligible. The current runtime can adopt
|
|
108
|
+
an existing exact alias; an absent destination falls back to per-entry sync
|
|
109
|
+
because guarded alias creation is unavailable. OAT does not automatically
|
|
110
|
+
unlink collection aliases. Configuring an explicit per-entry strategy does
|
|
111
|
+
not release an owned collection. Deferred collection-directory copies and
|
|
112
|
+
symlinks fail closed with manual recovery guidance on the current runtime.
|
|
113
|
+
To make the provider directory externally owned, disable the provider with
|
|
114
|
+
`oat providers set --scope <scope> --disabled <provider>`, run
|
|
115
|
+
`oat sync --scope <scope>` to detach OAT ownership, and then verify and remove
|
|
116
|
+
the preserved alias before managing the directory manually. Automatic
|
|
117
|
+
transition requires an identity-bound,
|
|
118
|
+
non-following publication primitive. Deferred file operations and ordinary
|
|
119
|
+
non-transition per-entry symlinks retain their existing behavior. A real
|
|
120
|
+
provider directory falls back to per-entry sync; broken, foreign, nested,
|
|
121
|
+
unsafe, or unverifiable collection identity fails closed without replacement.
|
|
122
|
+
- Explicit `symlink` and `copy` always remain per-entry strategies. Strategy is
|
|
123
|
+
configured here (globally or per provider); `oat sync` intentionally has no
|
|
124
|
+
`--strategy` flag.
|
|
106
125
|
- At runtime, config is normalized so `providers` is always present in memory.
|
|
107
126
|
- Project scans combine project and user known-stray paths. User scans use the
|
|
108
127
|
user sync config.
|
|
@@ -32,6 +32,38 @@ Autonomous worktree bootstrap also treats sync output as setup state. `oat-workt
|
|
|
32
32
|
|
|
33
33
|
For transformed mappings such as project-scoped rules, the manifest stores hashes for the rendered provider output that was actually written, not the canonical source markdown. This keeps drift detection aligned with the on-disk managed file.
|
|
34
34
|
|
|
35
|
+
### Collection alias ownership
|
|
36
|
+
|
|
37
|
+
Manifest version 2 can record an exact collection-directory alias plus the
|
|
38
|
+
canonical entries inherited through it. Collection records distinguish links
|
|
39
|
+
created by OAT (`oat-created`) from exact links OAT adopted without rewriting
|
|
40
|
+
(`adopted-exact`). Inherited entries use the `collection` strategy and refer to
|
|
41
|
+
their owning collection record; OAT does not mutate provider child paths under
|
|
42
|
+
that alias.
|
|
43
|
+
|
|
44
|
+
The current runtime adopts an existing alias only when it exactly resolves to
|
|
45
|
+
the canonical collection and has the same entry set. When the destination is
|
|
46
|
+
absent, `auto` falls back to ordinary per-entry sync: Node does not expose the
|
|
47
|
+
identity-bound parent-relative primitive OAT requires to create a collection
|
|
48
|
+
alias safely. OAT does not use copy fallback for collection aliases.
|
|
49
|
+
|
|
50
|
+
OAT also does not automatically unlink a collection alias in the current
|
|
51
|
+
runtime because a separate identity check followed by path-based removal has a
|
|
52
|
+
final replacement race. Disabling a provider detaches ownership while
|
|
53
|
+
preserving the alias. Configuring an explicit per-entry strategy does not
|
|
54
|
+
release an owned collection. Deferred collection-directory copies and symlinks
|
|
55
|
+
fail closed because the current runtime cannot publish through replaceable
|
|
56
|
+
ancestors without following them.
|
|
57
|
+
To leave the provider directory externally owned, run
|
|
58
|
+
`oat providers set --scope <scope> --disabled <provider>` and then
|
|
59
|
+
`oat sync --scope <scope>` to detach OAT ownership. Then verify and remove the
|
|
60
|
+
preserved alias before managing the directory manually. Automatic transition
|
|
61
|
+
requires an identity-bound, non-following publication primitive.
|
|
62
|
+
Deferred file operations and ordinary non-transition per-entry symlinks retain
|
|
63
|
+
their existing behavior. Real directories, destination races, broken links,
|
|
64
|
+
foreign targets, and unverifiable identities are preserved and fail closed.
|
|
65
|
+
Canonical targets are never removed.
|
|
66
|
+
|
|
35
67
|
## Drift states
|
|
36
68
|
|
|
37
69
|
- `in_sync`
|
|
@@ -47,6 +79,11 @@ For transformed mappings such as project-scoped rules, the manifest stores hashe
|
|
|
47
79
|
|
|
48
80
|
Rendered rule files participate in the same drift states as other managed copies. If a provider rule file is edited directly, drift is computed against the expected rendered output for that provider.
|
|
49
81
|
|
|
82
|
+
Collection-backed entries are checked through the owning collection identity.
|
|
83
|
+
An exact alias is `in_sync`; an absent alias is `missing`; and a broken,
|
|
84
|
+
replaced, foreign, or otherwise unverifiable alias is `drifted`. Provider list
|
|
85
|
+
and inspect output summarize collection ownership separately from copy mode.
|
|
86
|
+
|
|
50
87
|
## Stray adoption
|
|
51
88
|
|
|
52
89
|
`oat init` and `oat status` can offer adoption of unmanaged provider entries into canonical `.agents`.
|
|
@@ -13,6 +13,7 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
|
|
|
13
13
|
- User: `~/.agents/skills` -> `~/.claude/skills`, `~/.agents/agents` -> `~/.claude/agents`
|
|
14
14
|
- Rule files stay `.md` and are rendered with Claude-compatible frontmatter when needed
|
|
15
15
|
- Managed phase implementers and optional nested workers use the exact configured candidate returned as `providers.claude.dispatchArgs.model`; OAT passes that value as the actual Agent `model`
|
|
16
|
+
- Claude's official subagent contract says existing agent directories are watched and changes load within seconds. It describes a conditional restart for the first agent added to a directory that was absent when the session started, for agents added through `--add-dir`, and when Claude starts with `--disable-slash-commands`. OAT cannot observe those session-start and launch-mode facts. After a successful provider-visible file change, the generic OAT repository policy therefore conservatively advises starting a new provider session; it does not claim that Claude hot-reloaded the file or that the application process must restart. The provider semantics were verified against [Claude Code subagent documentation](https://code.claude.com/docs/en/sub-agents) on 2026-08-31.
|
|
16
17
|
|
|
17
18
|
=== "Cursor"
|
|
18
19
|
|
|
@@ -62,7 +63,7 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
|
|
|
62
63
|
- All project-generated Codex variants and config registrations are repository-owned, version-controlled output and are never auto-ignored by OAT. User-config output remains under `~/.codex`.
|
|
63
64
|
- A single role can be materialized directly with `oat providers codex materialize <agent-name> --model <model-id> --effort <reasoning-effort>`; `--agent-path` selects a specific canonical markdown agent, `--role-name` overrides the generated role name, and `--scope user` writes a user-config-owned role.
|
|
64
65
|
- Aggregate Codex config drift metadata (`aggregateConfigHash`) is emitted in sync/status codex extension output and intentionally not stored as a separate manifest row
|
|
65
|
-
- Sync-time materialization is best effort; managed workflow correctness uses exact registered roles or a fresh child pinned to the resolved model plus reasoning effort with canonical role instructions,
|
|
66
|
+
- Sync-time materialization is best effort; managed workflow correctness uses exact registered roles or a fresh child pinned to the resolved model plus reasoning effort with canonical role instructions. After a successful provider-visible file change, OAT conservatively advises starting a new Codex session so it has an opportunity to load the role. This repository policy is not a Codex hot-reload contract, an application-process restart requirement, or proof that the new session exposed the role.
|
|
66
67
|
- Codex `max` is a first-class dispatch effort. It is present only for the Sol family in the committed supported catalogue, for both implementer and reviewer roles.
|
|
67
68
|
- Codex multi-agent dispatch uses config-defined roles (`[agents.<name>]`) and `agent_type`
|
|
68
69
|
- Codex subagent workflows require `[features] multi_agent = true` in active Codex config layers
|
|
@@ -103,10 +104,76 @@ Claude binds the exact model argument described above. Cursor launches the
|
|
|
103
104
|
exact native variant. A missing or unselectable managed target blocks rather
|
|
104
105
|
than falling back to the root target or a base role.
|
|
105
106
|
|
|
107
|
+
### Post-launch runtime observation
|
|
108
|
+
|
|
109
|
+
Runtime observation is a separate, optional layer from the configured
|
|
110
|
+
invocation above. It never changes launch, fallback, policy, ceiling, role,
|
|
111
|
+
authority, or any selector: it only records what a provider said about its own
|
|
112
|
+
child, so a configured selection and an observed identity stay independently
|
|
113
|
+
readable.
|
|
114
|
+
|
|
115
|
+
Codex reports child lineage, role, model, and effort through its session and
|
|
116
|
+
turn metadata. It reports no service tier: the parser accepts one for forward
|
|
117
|
+
compatibility, but no captured rollout carries the field. Claude reports role, model, effort, and service tier
|
|
118
|
+
from its on-disk transcript metadata, and lineage only as root-or-child: it
|
|
119
|
+
emits no depth field, so a subagent turn is recorded as `depth-unknown` rather
|
|
120
|
+
than given an invented depth. Claude's role comes from the same class of
|
|
121
|
+
bounded role identifier Codex records, and is reported only on the subagent
|
|
122
|
+
turns that carry one. Cursor exposes no metadata channel and stays explicitly
|
|
123
|
+
`not-reported`.
|
|
124
|
+
|
|
125
|
+
`not-exposed` is reserved for an axis a provider genuinely does not have. It is
|
|
126
|
+
not a stand-in for an axis that simply went unreported on a given run, and it is
|
|
127
|
+
never written in place of a value the provider did report.
|
|
128
|
+
|
|
129
|
+
Observation is metadata-only. Parsers select entries by type and never read
|
|
130
|
+
conversation content, and raw provider output is projected through the owning
|
|
131
|
+
parser's allowlist before validation, so instruction text, conversation bodies,
|
|
132
|
+
and working directories are dropped rather than merely ignored. A missing,
|
|
133
|
+
unparseable, or uncorrelated
|
|
134
|
+
observation is `not-reported`, never a copy of the requested arguments or the
|
|
135
|
+
materialized pin. An observed mismatch is evidence for a human to read; it is
|
|
136
|
+
not a fallback trigger and cannot authorize replacement or retry.
|
|
137
|
+
|
|
138
|
+
## Materialization, refresh, and visibility
|
|
139
|
+
|
|
140
|
+
OAT reports three separate facts rather than collapsing them into “available”:
|
|
141
|
+
|
|
142
|
+
1. **Materialization** says whether the canonical asset's provider output was
|
|
143
|
+
changed, current, missing, failed, unsupported, or unknown.
|
|
144
|
+
2. **Catalog refresh policy** is provider- and content-specific. A policy is
|
|
145
|
+
`live`, `manual-refresh`, `restart-required`, or `unknown`, with its source
|
|
146
|
+
and verification date.
|
|
147
|
+
3. **Runtime visibility** says whether the active provider catalog was actually
|
|
148
|
+
observed. `oat sync`, `oat status`, `oat doctor`, and install-triggered sync
|
|
149
|
+
do not query a running provider session, so they report visibility as
|
|
150
|
+
`not-reported` or `unknown`, never `visible`.
|
|
151
|
+
|
|
152
|
+
After a successful provider-visible file change, `oat sync` conservatively
|
|
153
|
+
advises starting a new provider session so the provider has an opportunity to
|
|
154
|
+
load the changed asset. This repository decision was approved on 2026-08-31 and
|
|
155
|
+
is recorded in the active project's implementation record. It is safety
|
|
156
|
+
guidance, not a provider hot-reload guarantee, an instruction to restart the
|
|
157
|
+
application process, or proof that the new session loaded or exposed the asset.
|
|
158
|
+
The compatibility schema reports this session boundary as `restart-required`;
|
|
159
|
+
with `repository-decision` provenance, that state means “start a new provider
|
|
160
|
+
session,” not “restart the application.”
|
|
161
|
+
No advice is emitted for current/no-op, planned-only, failed, missing, inactive,
|
|
162
|
+
or unsupported materialization.
|
|
163
|
+
|
|
164
|
+
A truthful provider/content-specific policy takes precedence over this generic
|
|
165
|
+
repository decision. Claude's documented behavior remains conditional on
|
|
166
|
+
session-start and launch-mode facts that OAT cannot observe, so OAT does not
|
|
167
|
+
claim those conditions were met; the conservative new-session advice still
|
|
168
|
+
applies after a successful file change. Unsupported capabilities retain an
|
|
169
|
+
`unknown` policy rather than inheriting advice. A current file with no
|
|
170
|
+
current-session catalog probe is still not proof of provider visibility.
|
|
171
|
+
|
|
106
172
|
## Scope rules
|
|
107
173
|
|
|
108
174
|
- Project scope: skills + agents + rules
|
|
109
|
-
- User scope: skills
|
|
175
|
+
- User scope: skills plus capability-supported ordinary agents (provider mappings vary by adapter)
|
|
176
|
+
- The two bundled managed roles separately participate in Codex and Cursor extension expansion for user-owned targets
|
|
110
177
|
- Rules are project-scoped only in this release
|
|
111
178
|
- Codex user-scope sync materializes user-config custom roles under `~/.codex`; project-config and supported-catalogue output remains project-scoped and version controlled
|
|
112
179
|
- Cursor user-scope sync materializes user-config variants under `~/.cursor/agents`; project-config and supported-catalogue output remains project-scoped and version controlled
|
|
@@ -33,6 +33,7 @@ Rules are currently project-scoped canonical content. Unlike skills and agents,
|
|
|
33
33
|
- Canonical `.agents/rules` is source of truth for rules; provider rule files are derived rendered copies
|
|
34
34
|
- Each scope syncs independently. When the same canonical asset exists at both project and user scope, OAT reports the duplication with both paths and versions and does **not** infer which copy a provider executes; resolve it explicitly with `oat tools migrate`
|
|
35
35
|
- Pack removal and migration drive a symmetric removal sync: the exact canonical paths that were removed are pruned from provider views in that scope only, and only after the canonical source is confirmed absent
|
|
36
|
+
- A successful provider write proves materialization only. Catalog refresh policy and current-session visibility are separate evidence; without a provider catalog observation, OAT does not claim the asset is visible.
|
|
36
37
|
|
|
37
38
|
## Implemented command surface
|
|
38
39
|
|
|
@@ -42,6 +43,8 @@ Rules are currently project-scoped canonical content. Unlike skills and agents,
|
|
|
42
43
|
- `oat providers inspect`
|
|
43
44
|
- `oat providers set`
|
|
44
45
|
- `oat providers codex materialize`
|
|
46
|
+
- `oat project dispatch record` (project-aware dispatch evidence only; never a
|
|
47
|
+
provider launcher)
|
|
45
48
|
|
|
46
49
|
## Adjacent CLI commands (commonly used with provider interop)
|
|
47
50
|
|
|
@@ -52,6 +55,8 @@ Rules are currently project-scoped canonical content. Unlike skills and agents,
|
|
|
52
55
|
## Provider enablement model
|
|
53
56
|
|
|
54
57
|
- Project provider enablement is stored in `.oat/sync/config.json` (`providers.<name>.enabled`).
|
|
58
|
+
- User provider enablement is stored in `~/.oat/sync/config.json`. `oat providers set --scope user --enabled claude` and `oat providers set --scope user --disabled claude` update this canonical user config while preserving unrelated fields.
|
|
59
|
+
- `oat providers list` and `oat providers inspect` show configuration-owned activation separately from filesystem detection, plus registered scope/content capability, projection modes, native reads, materialization, and visibility evidence.
|
|
55
60
|
- `oat init --scope project` (interactive) prompts for supported providers and persists explicit true/false values.
|
|
56
61
|
- `oat sync --scope project` uses config-aware provider activation and can prompt to remediate detected mismatches.
|
|
57
62
|
- Cursor provider enablement still controls agents, rules, migration discovery, and legacy cleanup even though Cursor reads canonical skills without a generated skill view.
|
|
@@ -62,6 +67,36 @@ Rules are currently project-scoped canonical content. Unlike skills and agents,
|
|
|
62
67
|
- Codex aggregate config drift is reported via sync/status extension metadata (`aggregateConfigHash`); it is not persisted as a separate manifest schema entry.
|
|
63
68
|
- Codex user-config materialization writes user-owned implementer and reviewer roles under the user provider directory, `~/.codex`; it does not write those roles into the repository.
|
|
64
69
|
|
|
70
|
+
## Provider refresh evidence
|
|
71
|
+
|
|
72
|
+
Refresh advice is emitted only for a successful, relevant current-run change.
|
|
73
|
+
For every supported provider-visible capability without a stronger sourced
|
|
74
|
+
policy, the registry records the OAT repository decision approved on
|
|
75
|
+
2026-08-31: start a new provider session so it has an opportunity to load the
|
|
76
|
+
changed asset. This is conservative safety guidance, not a provider hot-reload
|
|
77
|
+
guarantee, an application-process restart requirement, or proof that the new
|
|
78
|
+
session loaded or exposed the asset. Current/no-op, planned-only, failed,
|
|
79
|
+
missing, inactive, and unsupported materialization receive no such advice;
|
|
80
|
+
unsupported capabilities keep an `unknown` policy.
|
|
81
|
+
|
|
82
|
+
The compatibility schema names this session boundary `restart-required`. When
|
|
83
|
+
its provenance is `repository-decision`, the recovery text means “start a new
|
|
84
|
+
provider session,” not “restart the application.”
|
|
85
|
+
|
|
86
|
+
A truthful provider/content-specific policy takes precedence over the generic
|
|
87
|
+
repository decision. The official Claude Code subagent contract, verified on
|
|
88
|
+
2026-08-31, says existing agent directories are watched and changes load within
|
|
89
|
+
seconds. It describes a conditional restart for the first agent added to a
|
|
90
|
+
directory absent at session start, for agents added through `--add-dir`, and
|
|
91
|
+
when Claude starts with `--disable-slash-commands`. OAT cannot observe those
|
|
92
|
+
runtime conditions and does not claim they occurred; it applies only the
|
|
93
|
+
generic new-session guidance after a successful file change.
|
|
94
|
+
|
|
95
|
+
`oat status`, `oat doctor`, and `oat init` expose that their running-provider
|
|
96
|
+
catalog observation is `not-reported`. They inspect filesystem/configuration
|
|
97
|
+
state, not the provider's active catalog. Only an actual current-session probe
|
|
98
|
+
can establish `visible`.
|
|
99
|
+
|
|
65
100
|
## Codex managed dispatch
|
|
66
101
|
|
|
67
102
|
For managed Codex work, the resolver-returned materialized role is attempted as
|
|
@@ -73,6 +108,15 @@ role-selection rejection. Missing runtime telemetry, missing self-report, or a
|
|
|
73
108
|
child accepted by the native route that later returns `BLOCKED` are not
|
|
74
109
|
role-selection rejection and do not permit fallback.
|
|
75
110
|
|
|
111
|
+
Project workflows construct and redact the complete dispatch payload before
|
|
112
|
+
the native call, then persist its accepted or `blocked-before-start` result
|
|
113
|
+
immediately under the active project's `dispatch/` directory. The generic
|
|
114
|
+
record remains provider-neutral. OAT-specific canonical role, rejection,
|
|
115
|
+
fallback, and runtime facts live only under its `oat` namespace. A qualifying
|
|
116
|
+
fallback is a fresh request that preserves exact target and controls and is
|
|
117
|
+
explicitly labeled an approximation; timeout, refusal after acceptance,
|
|
118
|
+
runtime mismatch, malformed output, and missing telemetry never authorize it.
|
|
119
|
+
|
|
76
120
|
## Non-interop namespaces in the same CLI
|
|
77
121
|
|
|
78
122
|
- `oat project new <name>` (workflow/project scaffolding)
|
|
@@ -80,13 +80,19 @@ Notable commands introduced in the current CLI surface:
|
|
|
80
80
|
`--no-commit` leaves the new record uncommitted for the caller to persist.
|
|
81
81
|
With `--json`, the receipt includes `status`, `sha`, and `ref`, plus
|
|
82
82
|
`conflicts` when applicable and per-child results when coordination children
|
|
83
|
-
were requested.
|
|
83
|
+
were requested. A project whose authoritative ref is
|
|
84
|
+
`refs/oat/completed/<project>` is terminal and cannot be pulled or opened.
|
|
85
|
+
A same-SHA `refs/oat/projects/<project>` ref is only an inert alias; differing
|
|
86
|
+
active and completed SHAs are reported as a terminal mismatch that must be
|
|
87
|
+
repaired before lifecycle work continues.
|
|
84
88
|
- `oat project links [project] --format markdown|json` - render SHA-pinned
|
|
85
89
|
links for the linkable artifacts on the project ref. On GitHub origins the
|
|
86
90
|
artifacts become full-SHA blob links; other hosts degrade to the retained ref
|
|
87
91
|
and short SHA without guessing a web URL. `--durable-summary <path>` accepts
|
|
88
92
|
only a path contained in the repository, normalizes it repository-relative,
|
|
89
|
-
and renders it as a code span rather than a guessed remote link.
|
|
93
|
+
and renders it as a code span rather than a guessed remote link. Completed
|
|
94
|
+
projects resolve through `refs/oat/completed/<project>` while the rendered
|
|
95
|
+
artifact URLs remain pinned to the verified full source SHA.
|
|
90
96
|
- `oat project pause [project]` - persist the pause state and clear the active
|
|
91
97
|
project pointer. If synced publication is declined or fails after the pause
|
|
92
98
|
commit is created, that clean commit is retained; address the publication
|
|
@@ -99,7 +105,10 @@ Notable commands introduced in the current CLI surface:
|
|
|
99
105
|
commit. If remote deletion succeeds but local checkout removal fails, the
|
|
100
106
|
local ref, record, and checkouts are retained. Resolve the reported local
|
|
101
107
|
obstruction and retry `prune --force`; do not run `project push`, which would
|
|
102
|
-
republish the deleted remote ref.
|
|
108
|
+
republish the deleted remote ref. For a completed project, explicit prune
|
|
109
|
+
deletes the completed ref and any same-SHA active alias but preserves durable
|
|
110
|
+
local and S3 archive snapshots. A differing-SHA terminal mismatch blocks
|
|
111
|
+
prune and retains both refs.
|
|
103
112
|
- `oat project migrate <path> --to synced [--no-commit]` - migrate an existing
|
|
104
113
|
shared project to synced storage while preserving its artifacts and
|
|
105
114
|
retargeting the active project pointer. `--no-commit` leaves the parent
|
|
@@ -110,7 +119,13 @@ Notable commands introduced in the current CLI surface:
|
|
|
110
119
|
parents. A malformed discovery record with no materialized checkout appears
|
|
111
120
|
as a `recorded-invalid` row. When the checkout is materialized, its existing
|
|
112
121
|
row instead carries the restore hint and `recordError` parse diagnostic in
|
|
113
|
-
`--json` output.
|
|
122
|
+
`--json` output. Fully retired completed refs and same-SHA active aliases are
|
|
123
|
+
omitted from active discovery. A differing-SHA active/completed pair appears
|
|
124
|
+
as a `terminal-invalid` row with a recovery diagnosis. When reconciling a
|
|
125
|
+
local synced record or checkout, only a verified missing
|
|
126
|
+
`refs/oat/completed/<project>` result counts as absence. Transport,
|
|
127
|
+
authentication, and other lookup failures fail the command closed; they are
|
|
128
|
+
never converted into a `recorded-absent` row or pull guidance.
|
|
114
129
|
- `oat tools migrate --pack <pack> --from <scope> --to <scope>` - move one installed pack between project and user scope. Always previews first, installs and re-inventories the destination before touching the source, and offers source removal only after the destination is verified complete. Declining or running non-interactively leaves the pack installed at both scopes rather than failing. `--dry-run` stops after the preview; there is no force flag. See [Tool Packs](../cli-utilities/tool-packs.md#oat-tools-migrate).
|
|
115
130
|
- `oat pjm doctor --json` - read-only repository PJM diagnostics whose result carries an additive `adoption` object (`state` of `declared` | `inferred-legacy` | `partial-initialization` | `none`, `repoRoot`, and `recovery`). This, not `oat tools has project-management`, is the check that answers whether _this repository_ adopted PJM.
|
|
116
131
|
- `oat config dump --json` - merged config with source attribution
|
|
@@ -121,8 +136,9 @@ Notable commands introduced in the current CLI surface:
|
|
|
121
136
|
- `oat review latest --json` - find the newest review artifact by `oat_generated_at`, scanning the active or specified project's `reviews/` and `reviews/archived/` directories plus ad-hoc review locations. Same-time candidates use target priority, then lifecycle recency (`final` > higher phase/task > lower phase/task). The JSON contract returns `path`, `scope`, `generatedAt`, `kind` (`project` or `adhoc`), `archived`, and `actionable`, with `null` values when no review exists. Archived project reviews remain discoverable as history but return `actionable: false`.
|
|
122
137
|
- `oat project list --json` - summary state for tracked projects under the configured projects root
|
|
123
138
|
- `oat project complete-state <project-path>` - apply the canonical completed-state mutation to a project's `state.md`; used by `oat-project-complete` during lifecycle closeout
|
|
124
|
-
- `oat project archive [project-path] [--project-recap-run <project-relative-path>] [--no-commit]` - archive a tracked project through the same local move, summary export, and
|
|
139
|
+
- `oat project archive [project-path] [--project-recap-run <project-relative-path>] [--no-commit]` - archive a tracked project through the same local move, summary export, and configured S3 upload path used by completion. When omitted, the project path falls back to the active project. The optional recap path must identify a `project-recap` run inside the project's `explainers/` directory. Archive stages the selected complete package into `.oat/repo/reference/project-recaps/<YYYYMMDD-project-slug>/`, verifies every manifest-declared immutable file byte, then atomically installs the export before deleting the active project. Existing destinations, incomplete legacy hash coverage, stale bytes, path escapes, and recipe mismatches fail without removing the active project. For synced projects, a configured S3 upload must succeed before terminal cleanup. Successful closeout makes `refs/oat/completed/<project>` authoritative, deletes the tracked JSON record and nested checkout, and leaves archive metadata sufficient for an idempotent recordless retry. Legacy complete records receive a cleanup diagnosis rather than pull/open guidance. With `--json`, the terminal receipt reports `completedRef`, `verifiedSourceSha`, whether `activeAliasDisposition` was `retained` or `removed`, whether `recordRetired` completed, and the parent `lifecycleCommit`. `--no-commit` is a manual/library-only option: for a synced project it still removes the checkout but deliberately leaves `lifecycleCommit` null. Never pass it through `oat-project-complete`, which requires that receipt.
|
|
125
140
|
- `oat repo archive sync [project-name]` - hydrate archived project snapshots from the configured repo-scoped S3 archive into `.oat/projects/archived/`. The old `oat project archive sync` path remains as a deprecated shim.
|
|
141
|
+
- `oat project dispatch record --event-file <json-file-or-dash> [--project <project-path>]` - validate one generic dispatch record plus its namespaced OAT evidence event, and persist it into the project's append-only `dispatch/` journal. Omit `--project` to validate without persisting. Revision 1 is `dispatch/<request-id>.json` and every later revision is `dispatch/<request-id>@<NNNN>.json`; superseded revisions are never replaced or removed. The command validates and records evidence only — it never launches a provider. A `runtime-observation` event may carry either a finished `observation` or the provider `metadata` envelope (`provider`, `observedAt`, `entries`) to normalize, but not both. `entries` may be raw provider output: they are projected through the owning parser's allowlist, are never persisted, and both forms have their `match` derived from the record's configured invocation rather than trusted from the caller, with the observation's `provider` bound to the record's. With `--json`, the result adds `runtimeIdentity` with separate `configured` and `observed` objects plus a `match` of `matching`, `mismatching`, `not-comparable`, or `null`; observation is corroboration only and never overrides configured invocation. Error output is redacted on a best-effort basis; absolute paths in identity fields are rejected outright, while some prose forms (colon-prefixed, URL routes) can survive. See [Evidence Layers](../workflows/projects/evidence-layers.md).
|
|
126
142
|
- `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. See [Implementation Execution](../workflows/projects/implementation-execution.md#parallel-phase-groups).
|
|
127
143
|
- `oat project log append|check|synthesize|rollup` - manage the optional append-only project observation log: append validated judgment or structural entries, inspect grammar and synthesis status, complete end-of-run synthesis, and roll observations into `summary.md` plus the configured repository ledger. See [Project Log](../cli-utilities/project-log.md).
|
|
128
144
|
- `oat project set-mode` — deprecated no-op. Execution mode is no longer user-selectable; emits a deprecation warning and preserves the `--json` contract.
|