@open-agent-toolkit/cli 0.1.74 → 0.2.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 (77) hide show
  1. package/assets/docs/cli-utilities/configuration.md +18 -12
  2. package/assets/docs/cli-utilities/tool-packs.md +1 -1
  3. package/assets/docs/provider-sync/commands.md +26 -0
  4. package/assets/docs/provider-sync/config.md +17 -6
  5. package/assets/docs/provider-sync/index.md +17 -5
  6. package/assets/docs/provider-sync/manifest-and-drift.md +39 -1
  7. package/assets/docs/provider-sync/providers.md +8 -2
  8. package/assets/docs/provider-sync/scope-and-surface.md +5 -1
  9. package/assets/docs/reference/file-locations.md +9 -3
  10. package/assets/docs/reference/oat-directory-structure.md +11 -3
  11. package/assets/docs/reference/troubleshooting.md +11 -0
  12. package/assets/docs/workflows/index.md +1 -0
  13. package/assets/docs/workflows/skills/index.md +3 -0
  14. package/assets/docs/workflows/wave-workflows.md +77 -0
  15. package/assets/public-package-versions.json +4 -4
  16. package/assets/skills/create-agnostic-skill/SKILL.md +1 -1
  17. package/assets/skills/create-agnostic-skill/references/docs/skills-guide.md +24 -15
  18. package/assets/skills/oat-agent-instructions-analyze/references/docs/provider-reference.md +9 -3
  19. package/assets/skills/oat-agent-instructions-apply/references/docs/provider-reference.md +9 -3
  20. package/assets/skills/oat-wave-execute/SKILL.md +317 -0
  21. package/assets/skills/oat-wave-execute/assets/orchestration-log-template.md +54 -0
  22. package/assets/skills/oat-wave-execute/assets/wrapper-plan-template.md +157 -0
  23. package/assets/skills/oat-wave-execute/scripts/bootstrap-group.sh +195 -0
  24. package/assets/skills/oat-wave-program/SKILL.md +109 -0
  25. package/assets/skills/oat-wave-program/assets/execution-program-template.md +40 -0
  26. package/dist/commands/config/index.d.ts.map +1 -1
  27. package/dist/commands/config/index.js +55 -0
  28. package/dist/commands/init/index.d.ts +6 -2
  29. package/dist/commands/init/index.d.ts.map +1 -1
  30. package/dist/commands/init/index.js +90 -31
  31. package/dist/commands/init/tools/shared/skill-manifest.d.ts +1 -1
  32. package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
  33. package/dist/commands/init/tools/shared/skill-manifest.js +2 -0
  34. package/dist/commands/project/validate-plan/index.d.ts.map +1 -1
  35. package/dist/commands/project/validate-plan/index.js +2 -1
  36. package/dist/commands/project/validate-plan/validate-plan.js +1 -1
  37. package/dist/commands/remove/skill/remove-skill.d.ts +2 -0
  38. package/dist/commands/remove/skill/remove-skill.d.ts.map +1 -1
  39. package/dist/commands/remove/skill/remove-skill.js +20 -2
  40. package/dist/commands/shared/adopt-stray.d.ts.map +1 -1
  41. package/dist/commands/shared/adopt-stray.js +3 -0
  42. package/dist/commands/shared/cursor-skill-disposition.d.ts +17 -0
  43. package/dist/commands/shared/cursor-skill-disposition.d.ts.map +1 -0
  44. package/dist/commands/shared/cursor-skill-disposition.js +41 -0
  45. package/dist/commands/status/index.d.ts +10 -4
  46. package/dist/commands/status/index.d.ts.map +1 -1
  47. package/dist/commands/status/index.js +99 -31
  48. package/dist/config/oat-config.d.ts +0 -1
  49. package/dist/config/oat-config.d.ts.map +1 -1
  50. package/dist/config/oat-config.js +26 -23
  51. package/dist/config/sync-config.d.ts +6 -2
  52. package/dist/config/sync-config.d.ts.map +1 -1
  53. package/dist/config/sync-config.js +18 -6
  54. package/dist/config/user-sync-config.d.ts +11 -0
  55. package/dist/config/user-sync-config.d.ts.map +1 -0
  56. package/dist/config/user-sync-config.js +61 -0
  57. package/dist/drift/strays.d.ts +1 -1
  58. package/dist/drift/strays.d.ts.map +1 -1
  59. package/dist/drift/strays.js +2 -1
  60. package/dist/engine/compute-plan.d.ts.map +1 -1
  61. package/dist/engine/compute-plan.js +154 -4
  62. package/dist/engine/engine.types.d.ts +2 -2
  63. package/dist/engine/engine.types.d.ts.map +1 -1
  64. package/dist/engine/engine.types.js +1 -0
  65. package/dist/engine/execute-plan.d.ts.map +1 -1
  66. package/dist/engine/execute-plan.js +4 -0
  67. package/dist/fs/io.d.ts.map +1 -1
  68. package/dist/fs/io.js +6 -2
  69. package/dist/manifest/manifest.types.d.ts +12 -12
  70. package/dist/providers/cursor/paths.d.ts.map +1 -1
  71. package/dist/providers/cursor/paths.js +6 -4
  72. package/dist/providers/shared/adapter.types.d.ts +6 -0
  73. package/dist/providers/shared/adapter.types.d.ts.map +1 -1
  74. package/dist/providers/shared/adapter.utils.d.ts +2 -1
  75. package/dist/providers/shared/adapter.utils.d.ts.map +1 -1
  76. package/dist/providers/shared/adapter.utils.js +29 -6
  77. package/package.json +2 -2
@@ -16,21 +16,23 @@ For the deep file-by-file reference, see:
16
16
  - [`.oat` Directory Structure](../reference/oat-directory-structure.md)
17
17
  - [Sync Config (`.oat/sync/config.json`)](../provider-sync/config.md)
18
18
 
19
- ## The four config surfaces
19
+ ## The five config surfaces
20
20
 
21
- | Surface | File | Typical contents | Primary CLI surface |
22
- | -------------------- | ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
23
- | Shared repo config | `.oat/config.json` | Repo-wide non-sync settings such as `projects.root`, `git.defaultBranch`, `documentation.*`, `archive.*`, `tools.*`, and shared `workflow.*` defaults | `oat config get/set/list/describe`, `oat gate` |
24
- | Repo-local config | `.oat/config.local.json` | Per-developer state for this checkout, such as `activeProject`, `lastPausedProject`, repo-local `activeIdea`, and local `workflow.*` overrides | `oat config get/set/list/describe`, `oat gate` |
25
- | User config | `~/.oat/config.json` | User-level state such as global `activeIdea` fallback, personal `workflow.*` defaults, and personal known provider strays | `oat config describe`, `oat gate` |
26
- | Provider sync config | `.oat/sync/config.json` | Provider enablement, sync strategy, and repo-level known stray settings | `oat providers set`, `oat config describe` |
21
+ | Surface | File | Typical contents | Primary CLI surface |
22
+ | ------------------------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
23
+ | Shared repo config | `.oat/config.json` | Repo-wide non-sync settings such as `projects.root`, `git.defaultBranch`, `documentation.*`, `archive.*`, `tools.*`, and shared `workflow.*` defaults | `oat config get/set/list/describe`, `oat gate` |
24
+ | Repo-local config | `.oat/config.local.json` | Per-developer state for this checkout, such as `activeProject`, `lastPausedProject`, repo-local `activeIdea`, and local `workflow.*` overrides | `oat config get/set/list/describe`, `oat gate` |
25
+ | User config | `~/.oat/config.json` | User-level state such as global `activeIdea` fallback and personal `workflow.*` defaults | `oat config describe`, `oat gate` |
26
+ | Project sync config | `.oat/sync/config.json` | Provider enablement, sync strategy, and repo-level known stray settings | `oat providers set`, `oat config describe` |
27
+ | User provider sync config | `~/.oat/sync/config.json` | User sync strategy and personal known provider strays | Provider-sync commands, `oat config describe` |
27
28
 
28
29
  The main split is:
29
30
 
30
31
  - `.oat/config.json` for shared repo behavior
31
32
  - `.oat/config.local.json` for local developer state
32
- - `~/.oat/config.json` for user-scope fallback state and personal provider-sync exceptions
33
- - `.oat/sync/config.json` for provider sync only
33
+ - `~/.oat/config.json` for user-scope fallback and workflow state
34
+ - `.oat/sync/config.json` for project provider sync
35
+ - `~/.oat/sync/config.json` for user provider sync
34
36
 
35
37
  ## The fastest way to inspect config
36
38
 
@@ -634,9 +636,13 @@ Use:
634
636
  - `oat config describe ...` to understand sync keys
635
637
  - `oat providers set ...` to mutate sync/provider settings
636
638
 
637
- Known provider strays are the narrow cross-surface exception: repo-wide
638
- `knownStrays` entries live in `.oat/sync/config.json`, while personal
639
- `knownStrays` entries can live in `~/.oat/config.json`.
639
+ Known provider strays follow sync ownership: repo-wide `knownStrays` entries
640
+ live in `.oat/sync/config.json`, while personal entries live in
641
+ `~/.oat/sync/config.json`. Before resolving user sync settings or writing any
642
+ general user-config change, OAT migrates legacy
643
+ `~/.oat/config.json#knownStrays` by writing the normalized union to the user
644
+ sync config first, then deleting only the legacy key. The migration is
645
+ idempotent.
640
646
 
641
647
  For the provider-sync schema details, use [Sync Config (`.oat/sync/config.json`)](../provider-sync/config.md).
642
648
 
@@ -17,7 +17,7 @@ This page covers CLI commands that manage bundled OAT tool packs and installed O
17
17
 
18
18
  - `core` - foundational diagnostics and docs access (`oat-doctor`, `oat-docs`)
19
19
  - `docs` - docs and agent-instructions governance workflows
20
- - `workflows` - project lifecycle skills, the project subagent-dispatch adapter, wrap-up reporting, reviewer agents, and core project templates
20
+ - `workflows` - project lifecycle skills, wave-program orchestration (`oat-wave-program`, `oat-wave-execute`), the project subagent-dispatch adapter, wrap-up reporting, reviewer agents, and core project templates
21
21
  - `ideas` - lightweight ideation and promotion flows
22
22
  - `utility` - review and repo-maintenance helpers plus the provider-neutral subagent-dispatch engine
23
23
  - `project-management` - file-backed backlog/reference skills plus backlog, roadmap, current-state, file-per-record decision, and AGENTS-guide templates
@@ -33,6 +33,15 @@ Key behavior:
33
33
 
34
34
  - Scope support (`project`, `user`, `all`)
35
35
  - Optional interactive stray adoption
36
+ - Cursor-local skills are handled individually: Adopt moves the skill into the
37
+ matching canonical `.agents/skills` directory, while Keep Cursor-only
38
+ preserves it and records its exact path in the applicable sync config
39
+ - Aborting a Cursor migration preserves completed choices and leaves the
40
+ current and remaining skills unresolved
41
+ - Keep Cursor-only is blocked when a canonical skill has the same name; rename
42
+ one skill before retrying
43
+ - Non-interactive and JSON modes report unresolved Cursor skill actions without
44
+ choosing or mutating a disposition
36
45
  - JSON output for automation
37
46
 
38
47
  ## `oat sync`
@@ -46,6 +55,20 @@ Key behavior:
46
55
  - Mutates by default; use `--dry-run` to preview
47
56
  - Strategy-aware operations (`symlink`, `copy`, `auto`)
48
57
  - Provider enable/disable honored via sync config
58
+ - Cursor skills are native-read from canonical `.agents/skills`; sync does not
59
+ create `.cursor/skills` mirrors
60
+ - Upgrade cleanup removes only verified clean legacy Cursor skill views.
61
+ Changed or unverified views are preserved and detached from obsolete manifest
62
+ ownership.
63
+
64
+ Preview project and user cleanup before applying it:
65
+
66
+ ```bash
67
+ oat sync --scope all --dry-run
68
+ ```
69
+
70
+ Review every planned `remove` and `detach` operation before running the same
71
+ command without `--dry-run`.
49
72
 
50
73
  ## `oat providers list`
51
74
 
@@ -102,6 +125,9 @@ Key behavior:
102
125
  ## Notes
103
126
 
104
127
  - `oat init --scope project` is commonly used before provider-interop commands because it initializes `.oat/sync/config.json`.
128
+ - User-scope known-stray choices are stored in `~/.oat/sync/config.json`.
129
+ Legacy `~/.oat/config.json#knownStrays` entries migrate automatically before
130
+ user-scope stray filtering.
105
131
  - `oat doctor` complements interop workflows by surfacing environment and bundled-skill version issues before or after sync operations.
106
132
 
107
133
  ## Adjacent Instruction Integrity Commands
@@ -5,11 +5,12 @@ description: 'Configuration schema and behavior for provider sync in .oat/sync/c
5
5
 
6
6
  # Sync Config (`.oat/sync/config.json`)
7
7
 
8
- This document defines the project sync config used by provider-interop commands.
8
+ This document defines the project and user sync config used by provider-interop commands.
9
9
 
10
10
  ## Location
11
11
 
12
12
  - Project scope: `.oat/sync/config.json`
13
+ - User scope: `~/.oat/sync/config.json`
13
14
 
14
15
  ## Purpose
15
16
 
@@ -17,7 +18,7 @@ This document defines the project sync config used by provider-interop commands.
17
18
 
18
19
  Discovery note:
19
20
 
20
- - `oat config describe` includes `.oat/sync/config.json` in its catalog so you can inspect the sync/provider keys from the main config help surface.
21
+ - `oat config describe` includes both sync config scopes in its catalog so you can inspect sync/provider keys from the main config help surface.
21
22
  - Mutation ownership still lives with provider-sync commands such as `oat providers set`, not `oat config set`.
22
23
 
23
24
  It is read by:
@@ -64,7 +65,7 @@ Entries are exact provider-path matches after path normalization; they are not
64
65
  globs and do not suppress sibling paths.
65
66
 
66
67
  Project-level config in `.oat/sync/config.json` applies to everyone using the
67
- repository:
68
+ repository. A Keep Cursor-only choice for a project skill writes here:
68
69
 
69
70
  ```json
70
71
  {
@@ -74,11 +75,13 @@ repository:
74
75
  }
75
76
  ```
76
77
 
77
- User-level config in `~/.oat/config.json` is useful for personal provider-local
78
- files that should not be committed to the repository:
78
+ User-level config in `~/.oat/sync/config.json` owns personal provider-local
79
+ files and user-scope Keep Cursor-only choices:
79
80
 
80
81
  ```json
81
82
  {
83
+ "version": 1,
84
+ "defaultStrategy": "auto",
82
85
  "knownStrays": [".cursor/skills/cloud-environment-setup"]
83
86
  }
84
87
  ```
@@ -87,6 +90,12 @@ The common Cursor-only skill case is a good fit: the skill may intentionally
87
90
  exist in `.cursor/skills/cloud-environment-setup` while remaining outside the
88
91
  canonical `.agents/skills` inventory.
89
92
 
93
+ Earlier releases stored user `knownStrays` in `~/.oat/config.json`. Before OAT
94
+ resolves user sync config or writes any general user-config change, it
95
+ normalizes and unions those entries into `~/.oat/sync/config.json`, writes the
96
+ sync config first, then removes only the legacy key. Repeating the migration is
97
+ safe, including after interruption.
98
+
90
99
  ## Behavior notes
91
100
 
92
101
  - If `providers.<name>.enabled` is:
@@ -95,6 +104,8 @@ canonical `.agents/skills` inventory.
95
104
  - unset: provider falls back to directory detection.
96
105
  - `defaultStrategy` is used when no provider-specific `strategy` is set.
97
106
  - At runtime, config is normalized so `providers` is always present in memory.
107
+ - Project scans combine project and user known-stray paths. User scans use the
108
+ user sync config.
98
109
  - Codex project sync also manages generated materialized roles derived from
99
110
  canonical agents and explicit model+effort targets. Dispatch-aware roles such
100
111
  as `oat-phase-implementer-gpt-5-6-terra-xhigh` and
@@ -106,7 +117,7 @@ canonical `.agents/skills` inventory.
106
117
  - Initial setup (interactive): `oat init --scope project`
107
118
  - Explicit updates: `oat providers set --scope project --enabled <providers> --disabled <providers>`
108
119
  - Apply sync changes: `oat sync --scope project`
109
- - Inspect the sync config contract: `oat config describe sync.defaultStrategy` or `oat config describe sync.providers.<name>.enabled`
120
+ - Inspect the sync config contract: `oat config describe sync.defaultStrategy`, `oat config describe sync.knownStrays`, or `oat config describe sync.providers.<name>.enabled`
110
121
 
111
122
  ## Related references
112
123
 
@@ -5,11 +5,16 @@ description: Standalone adoption lane for canonical assets, provider views, sync
5
5
 
6
6
  # Provider Sync
7
7
 
8
- Provider Sync is the OAT lane for keeping a canonical rules-and-skills layout in sync with provider-specific surfaces such as Claude, Cursor, Copilot, Gemini, or Codex.
8
+ Provider Sync is the OAT lane for reconciling a canonical rules-and-skills
9
+ layout with provider-specific surfaces such as Claude, Cursor, Copilot, Gemini,
10
+ or Codex.
9
11
 
10
12
  You can adopt this layer on its own. It does not require tracked OAT projects, and it is the right starting point when you mainly want interoperability and drift control.
11
13
 
12
- In practice, you edit the canonical layout in `.agents/` and `.oat/`, then let OAT generate or reconcile provider-specific views for Claude Code, Cursor, Copilot, Gemini, Codex, and other supported providers.
14
+ In practice, you edit the canonical layout in `.agents/` and `.oat/`. OAT
15
+ generates provider-specific views where required, leaves native-read assets in
16
+ their canonical directories, and keeps intentional provider-local adoption
17
+ surfaces visible.
13
18
 
14
19
  ## Contents
15
20
 
@@ -22,13 +27,19 @@ In practice, you edit the canonical layout in `.agents/` and `.oat/`, then let O
22
27
 
23
28
  ## What This Section Is
24
29
 
25
- This section explains how OAT treats `.agents/` and `.oat/` as the source of truth, how provider views are derived from those canonical assets, and how sync/adoption workflows keep everything aligned.
30
+ This section explains how OAT treats `.agents/` and `.oat/` as the source of
31
+ truth, when provider views are derived from those canonical assets, how
32
+ native-read mappings avoid redundant output, and how provider-local adoption
33
+ surfaces remain discoverable.
26
34
 
27
35
  ## What OAT Treats As Canonical
28
36
 
29
37
  - canonical skills, agents, and rules under `.agents/`
30
38
  - sync state and related metadata under `.oat/`
31
- - provider-specific files as derived views unless they are explicitly adopted back into canonical form
39
+ - provider-specific files as derived views when a mapping requires output
40
+ - native-read assets in canonical directories without mirrored provider files
41
+ - provider-local extension files as adoption candidates until explicitly
42
+ adopted or remembered as intentional strays
32
43
 
33
44
  ## Who It's For
34
45
 
@@ -41,7 +52,8 @@ This section explains how OAT treats `.agents/` and `.oat/` as the source of tru
41
52
  1. Run `oat init` to create the base OAT layout and setup state.
42
53
  2. Inspect current sync state with `oat status`.
43
54
  3. Adjust provider enablement with `oat providers ...` if needed.
44
- 4. Run `oat sync` to materialize provider views from canonical assets.
55
+ 4. Run `oat sync` to materialize required provider views and reconcile managed
56
+ state. Native-read assets do not produce provider-view operations.
45
57
  5. Re-run `oat status` after edits to confirm whether anything drifted or needs adoption.
46
58
 
47
59
  ## Start Here
@@ -55,10 +55,48 @@ Provider files ignored by Git are treated as intentionally local runtime files a
55
55
 
56
56
  Provider files listed in sync config `knownStrays` are also omitted from stray
57
57
  summaries and adoption prompts. Known strays can be configured at project scope
58
- in `.oat/sync/config.json` or user scope in `~/.oat/config.json`; entries use
58
+ in `.oat/sync/config.json` or user scope in `~/.oat/sync/config.json`; entries use
59
59
  exact provider-path matching, so `.cursor/skills/cloud-environment-setup` does
60
60
  not suppress `.cursor/skills/cloud-environment-setup-extra`.
61
61
 
62
+ ### Cursor skill migration
63
+
64
+ Cursor reads canonical project and user skills directly from `.agents/skills`
65
+ and `~/.agents/skills`. OAT therefore treats `.cursor/skills` as a Cursor-only
66
+ extension and adoption surface rather than generated output.
67
+
68
+ Interactive `oat init` and `oat status` ask about every unresolved Cursor-local
69
+ skill separately:
70
+
71
+ - **Adopt:** move the skill to the matching canonical `.agents/skills`
72
+ directory without creating a Cursor skill view or manifest row. If identical
73
+ canonical content already exists, OAT removes the redundant Cursor-local
74
+ copy.
75
+ - **Keep Cursor-only:** leave the skill in place and immediately add its exact
76
+ normalized path to the applicable project or user sync config.
77
+ - **Abort:** keep the current and remaining skills unresolved. Choices already
78
+ completed in the same run remain saved.
79
+
80
+ Keep Cursor-only is unavailable when a canonical skill has the same name.
81
+ Rename one skill before retrying; Cursor does not document a safe precedence
82
+ rule for duplicates discovered from both roots. Non-interactive and JSON modes
83
+ report pending migration actions without choosing or mutating a disposition.
84
+
85
+ ### Retiring legacy Cursor skill views
86
+
87
+ When upgrading from generated Cursor skill views, sync classifies each obsolete
88
+ manifest-owned path before acting:
89
+
90
+ - Verified clean symlinks and managed copies are removed with their manifest
91
+ entries.
92
+ - Missing paths lose only their stale manifest entries.
93
+ - Modified, replaced, broken, unreadable, or otherwise unverified paths are
94
+ preserved while OAT detaches their obsolete manifest ownership.
95
+ - Unmanaged Cursor-only content is never removed.
96
+
97
+ Use `oat sync --scope <project|user|all> --dry-run` to distinguish planned
98
+ removal from preserve-and-detach operations before running a mutating sync.
99
+
62
100
  For rules, adoption maps provider-native files back into `.agents/rules/*.md`:
63
101
 
64
102
  - Claude: `.claude/rules/*.md`
@@ -16,8 +16,12 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
16
16
 
17
17
  === "Cursor"
18
18
 
19
- - Project: `.agents/skills` -> `.cursor/skills`, `.agents/agents` -> `.cursor/agents`, `.agents/rules` -> `.cursor/rules`
20
- - User: `~/.agents/skills` -> `~/.cursor/skills`, `~/.agents/agents` -> `~/.cursor/agents`
19
+ - Project skills are native-read from `.agents/skills`; agents and rules still sync to `.cursor/agents` and `.cursor/rules`
20
+ - User skills are native-read from `~/.agents/skills`; agents still sync to `~/.cursor/agents`
21
+ - `.cursor/skills` and `~/.cursor/skills` remain supported Cursor-only extension and adoption surfaces. OAT does not generate skill views there.
22
+ - Interactive `oat init` and `oat status` ask for an individual disposition for each unresolved Cursor-local skill: adopt it into `.agents/skills` or keep it Cursor-only and remember the exact path in sync config
23
+ - Keep-local is blocked when a canonical skill has the same name because Cursor does not document a safe duplicate-resolution order
24
+ - During upgrades, OAT removes only verified clean legacy managed skill views. Changed or replaced views are preserved, detached from manifest ownership, and offered for migration.
21
25
  - Sync materializes pinned Markdown definitions for both `oat-phase-implementer` and `oat-reviewer`. Each generated name keeps the configured flat ladder ID, while an explicit verified mapping writes the separate bracket-form frontmatter model. OAT never derives one form from the other.
22
26
  - Generated definitions carry `supported-catalogue`, `project-config`, or `user-config` ownership. Project and supported output lives in the tracked `.cursor/agents` view; user-owned output lives under `~/.cursor/agents`. Cleanup reconciles only the applicable owner.
23
27
  - Managed dispatch requires `providers.cursor.dispatchArgs.variant` and launches that exact resolver-selected native agent type first. Skills do not pass a Task-level model argument or normalize Cursor model strings.
@@ -107,6 +111,8 @@ than falling back to the root target or a base role.
107
111
 
108
112
  - Stray adoption is available in `oat init` and `oat status`.
109
113
  - Adoption reconciles canonical plus the adopted provider first.
114
+ - Native-read Cursor skill adoption moves the provider-local skill into `.agents/skills` without recreating a `.cursor/skills` view or manifest entry.
115
+ - Choosing Keep Cursor-only leaves the skill in place and records its exact normalized path in the project or user sync config.
110
116
  - Rule adoption normalizes provider filenames back to canonical `.agents/rules/*.md` entries before cross-provider fanout.
111
117
  - Cross-provider fanout is explicit via `oat sync --scope all`.
112
118
 
@@ -13,7 +13,8 @@ This capability is intentionally independent from OAT workflow artifacts. Teams
13
13
 
14
14
  - Canonical directories: `.agents/skills`, `.agents/agents`, `.agents/rules`
15
15
  - Managed provider views: `.claude/*`, `.cursor/*`, `.github/*`, `.copilot/*`, `.codex/*` (where applicable)
16
- - Native-read providers may use canonical `.agents/*` directly without mirrored provider directories (for example, Gemini and Codex canonical mappings)
16
+ - Native-read mappings use canonical `.agents/*` directly without mirrored provider directories. Cursor skills, Gemini skills and agents, and Codex canonical mappings use this model.
17
+ - Cursor's `.cursor/skills` and `~/.cursor/skills` directories are provider-local extension and adoption surfaces, not managed output directories.
17
18
  - Manifest tracking: `.oat/sync/manifest.json` (project) and `~/.oat/sync/manifest.json` (user)
18
19
 
19
20
  Rules are currently project-scoped canonical content. Unlike skills and agents, synced rule files for Claude, Cursor, and Copilot are rendered copies with provider-specific frontmatter and filename extensions.
@@ -24,6 +25,8 @@ Rules are currently project-scoped canonical content. Unlike skills and agents,
24
25
  - Explicit `--dry-run` for safe preview of mutations
25
26
  - Scoped destructive actions only for manifest-tracked entries
26
27
  - Cross-provider compatibility via adapters
28
+ - Native-read assets stay canonical while provider-local adoption sources remain discoverable independently
29
+ - Obsolete managed mappings are deleted only when their provider paths are verified clean; changed or unverified paths are preserved and detached from manifest ownership
27
30
  - Canonical `.agents/agents` is source of truth for subagents; provider views are derived
28
31
  - Canonical `.agents/rules` is source of truth for rules; provider rule files are derived rendered copies
29
32
 
@@ -47,6 +50,7 @@ Rules are currently project-scoped canonical content. Unlike skills and agents,
47
50
  - Project provider enablement is stored in `.oat/sync/config.json` (`providers.<name>.enabled`).
48
51
  - `oat init --scope project` (interactive) prompts for supported providers and persists explicit true/false values.
49
52
  - `oat sync --scope project` uses config-aware provider activation and can prompt to remediate detected mismatches.
53
+ - Cursor provider enablement still controls agents, rules, migration discovery, and legacy cleanup even though Cursor reads canonical skills without a generated skill view.
50
54
  - Codex project-scope subagent sync writes `.codex/config.toml` and `.codex/agents/*.toml` at command layer after path-mapping sync. Every generated project Codex variant and registration is repository-owned, version-controlled provider output. OAT provides no automatic ignore mechanism for this project output; collaborators review and commit it like other project configuration.
51
55
  - Default Codex execution requires `root (0) → phase implementer (1)`. Sync and direct materialization continue to apply an `agents.max_depth` floor of `2` as optional nested-work capability without lowering a higher target value. A project write may read a higher lower-precedence user value and preserves it in project configuration; it writes only project `.codex/config.toml`. User scope writes only `~/.codex/config.toml` and does not read or change project configuration.
52
56
  - Missing depth or depth `1` does not block default phase execution. Invalid values or explicit values below `1` fail managed implementation preflight. `oat doctor` reports whether optional depth-two nesting is available and gives a scope-specific repair when the configured value is unusable.
@@ -14,6 +14,9 @@ For detailed `.oat/` tree semantics, see:
14
14
  - Skills: `.agents/skills/`
15
15
  - Agents/subagents: `.agents/agents/`
16
16
  - Rules: `.agents/rules/`
17
+ - Cursor reads project skills directly from `.agents/skills/` and user skills
18
+ directly from `~/.agents/skills/`. `.cursor/skills/` remains a Cursor-only
19
+ extension and adoption surface, not generated output.
17
20
 
18
21
  ## OAT runtime/state
19
22
 
@@ -23,11 +26,12 @@ For detailed `.oat/` tree semantics, see:
23
26
  - Projects root config: `projects.root` in `.oat/config.json` (read via `oat config get projects.root`)
24
27
  - Archive config: `archive.s3Uri`, `archive.s3SyncOnComplete`, `archive.summaryExportPath`, `archive.wrapUpExportPath`, `archive.awsProfile`, and `archive.awsRegion` in `.oat/config.json`
25
28
  - Workflow gate config: `workflow.gates.skills` and `workflow.gates.execTargets` in `.oat/config.json`, `.oat/config.local.json`, or `~/.oat/config.json` (manage via `oat gate`)
26
- - Project manifests/config: `.oat/sync/`
29
+ - Project sync manifest/config: `.oat/sync/`
30
+ - User sync manifest/config: `~/.oat/sync/`
27
31
 
28
32
  Config discovery via CLI:
29
33
 
30
- - `oat config describe` lists the supported config surfaces and keys across `.oat/config.json`, `.oat/config.local.json`, `~/.oat/config.json`, and `.oat/sync/config.json`.
34
+ - `oat config describe` lists the supported config surfaces and keys across `.oat/config.json`, `.oat/config.local.json`, `~/.oat/config.json`, `.oat/sync/config.json`, and `~/.oat/sync/config.json`.
31
35
  - `oat config describe <key>` shows file location, scope, default, mutability, and the owning command for one key.
32
36
  - `oat config list` shows the currently resolved values for the repo-local/shared command surface.
33
37
 
@@ -36,7 +40,9 @@ Config ownership note:
36
40
  - `.oat/config.json` is the canonical home for shared non-sync settings (for example, `worktrees.root`, `projects.root`).
37
41
  - `.oat/config.local.json` is the canonical home for per-developer lifecycle state (for example, `activeProject`, `lastPausedProject`, `activeIdea`).
38
42
  - `~/.oat/config.json` is the canonical home for user-level state (for example, `activeIdea` at global scope).
39
- - `.oat/sync/config.json` remains the sync/provider config contract.
43
+ - `.oat/sync/config.json` owns project sync/provider settings and known strays.
44
+ - `~/.oat/sync/config.json` owns user sync/provider settings and personal known
45
+ strays. OAT migrates the legacy `~/.oat/config.json#knownStrays` key here.
40
46
  - Legacy `.oat/active-project` / `.oat/projects-root` / `.oat/active-idea` files may still exist as inert compatibility artifacts in some repos/worktrees.
41
47
 
42
48
  ## OAT workflow
@@ -58,12 +58,16 @@ Project scope is used for project workflows and repo-local sync state. User scop
58
58
  | Path | Purpose |
59
59
  | ------------------------- | ----------------------------------------------------------------- |
60
60
  | `.oat/sync/manifest.json` | Records sync-managed provider entries and drift contract state |
61
- | `.oat/sync/config.json` | Sync behavior config (default strategy + provider-level settings) |
61
+ | `.oat/sync/config.json` | Project sync behavior, provider settings, and known-stray choices |
62
+
63
+ The equivalent user files are `~/.oat/sync/manifest.json` and
64
+ `~/.oat/sync/config.json`.
62
65
 
63
66
  `config.json` currently includes:
64
67
 
65
68
  - `version`
66
69
  - `defaultStrategy`
70
+ - `knownStrays` (optional exact provider-local paths)
67
71
  - `providers.<provider>.enabled`
68
72
  - `providers.<provider>.strategy` (optional override)
69
73
 
@@ -79,7 +83,10 @@ Current config ownership:
79
83
  - `.oat/config.json` owns shared non-sync repo settings (including `worktrees.root`, `projects.root`, and `documentation.*`).
80
84
  - `.oat/config.local.json` owns per-developer project lifecycle state (`activeProject`, `lastPausedProject`, `activeIdea`).
81
85
  - `~/.oat/config.json` owns user-level state (`activeIdea` at global scope).
82
- - `.oat/sync/config.json` continues to own sync/provider behavior.
86
+ - `.oat/sync/config.json` owns project sync/provider behavior and project known strays.
87
+ - `~/.oat/sync/config.json` owns user sync/provider behavior and personal known
88
+ strays. OAT migrates legacy `~/.oat/config.json#knownStrays` entries here
89
+ without removing unrelated user config.
83
90
 
84
91
  CLI discovery surfaces:
85
92
 
@@ -255,13 +262,14 @@ Common user-scope entries:
255
262
  config.json
256
263
  ideas/
257
264
  sync/
265
+ config.json
258
266
  manifest.json
259
267
  ```
260
268
 
261
269
  User scope is primarily for:
262
270
 
263
271
  - User-level ideas
264
- - User-level provider sync state where applicable
272
+ - User-level provider sync state and personal known-stray choices
265
273
 
266
274
  ## Practical guidance
267
275
 
@@ -20,6 +20,17 @@ description: 'Common issues and fixes for skills visibility, worktrees, sync, an
20
20
 
21
21
  Expected for native-read skill mappings. Codex can read canonical skills without mirrored provider writes.
22
22
 
23
+ ## Cursor appears detected but no skill sync actions are listed
24
+
25
+ Expected for native-read skill mappings. Verify project skills under
26
+ `.agents/skills` and personal skills under `~/.agents/skills`; Cursor reads
27
+ those canonical directories directly. Sync will not create `.cursor/skills`
28
+ mirrors.
29
+
30
+ Use `.cursor/skills` only for intentionally Cursor-specific packages. Interactive
31
+ `oat init` and `oat status` offer each unresolved Cursor-local skill for
32
+ canonical adoption or a remembered Keep Cursor-only choice.
33
+
23
34
  ## `sync` reports provider config mismatch
24
35
 
25
36
  - For interactive runs, select detected providers to enable when prompted.
@@ -13,6 +13,7 @@ Use this section when you want explicit project artifacts, stable task IDs, revi
13
13
 
14
14
  - [Ideas Workflow](ideas/index.md) - Lightweight idea capture, brainstorming, and promotion into tracked projects when the work becomes concrete.
15
15
  - [Workflow & Projects](projects/index.md) - Lifecycle, artifacts, reviews, PR flow, and repository analysis.
16
+ - [Wave Workflows](wave-workflows.md) - Program-level coordination for executing a corpus of external plans as ordered wrapper projects.
16
17
  - [Skills](skills/index.md) - Workflow-oriented skill discovery and use-case routing.
17
18
 
18
19
  ## What This Section Is
@@ -27,6 +27,7 @@ Use this section when you want to choose the right OAT skill for a task. If you
27
27
  - Turn a repo audit, maintainability review, backlog review, backlog directory, or backlog item into standalone external implementation plans: `oat-repo-improve`. Plans land under `.oat/repo/reference/external-plans/`; execute them directly or optionally pass one to `oat-project-import-plan` for tracked OAT execution.
28
28
  - Work on docs surfaces: `authoring-docs` (general documentation baseline), `oat-docs-authoring` (targeted OAT/Fumadocs authoring), `oat-docs-bootstrap` (guided bootstrap of a new docs app), `oat-docs-analyze`, `oat-docs-apply`, and `oat-project-document`
29
29
  - Generate a shipping digest or scheduled recap: `oat-wrap-up`
30
+ - Run a wave program over a corpus of external plans: `oat-wave-program` (durable program artifact: new/refresh/wave-close) and `oat-wave-execute` (one wave as a wrapper project) — see [Wave Workflows](../wave-workflows.md)
30
31
  - Research a topic in depth: `deep-research`
31
32
  - Analyze an artifact, codebase, or document: `analyze`
32
33
  - Compare options with domain-aware dimensions: `compare`
@@ -71,6 +72,8 @@ Use this section when you want to choose the right OAT skill for a task. If you
71
72
  - `oat-project-document`
72
73
  - `oat-wrap-up`
73
74
  - `oat-project-complete`
75
+ - `oat-wave-program`
76
+ - `oat-wave-execute`
74
77
 
75
78
  === "Ideas"
76
79
 
@@ -0,0 +1,77 @@
1
+ ---
2
+ title: Wave Workflows
3
+ description: How OAT coordinates a corpus of external plans into waves while preserving project-lifecycle ownership and human judgment.
4
+ ---
5
+
6
+ # Wave Workflows
7
+
8
+ A wave is a program layer above the per-project OAT lifecycle. It groups external implementation plans into an ordered delivery unit, then runs that unit as a wrapper OAT project. The wrapper uses the normal project lifecycle rather than replacing it.
9
+
10
+ Use wave workflows when a plan corpus is too large to execute as one project and needs durable sequencing across multiple projects, worktree groups, and merges.
11
+
12
+ ## The Two Wave Skills
13
+
14
+ The workflow pack provides two complementary skills:
15
+
16
+ - `oat-wave-program` 1.1.0 maintains the durable execution-program artifact over the full plan corpus. Its `new` mode inventories the corpus, verifies the coverage invariant, and records the orchestrator-composed, operator-approved first program; `refresh` adds newly landed plans to the artifact and records the orchestrator's re-composition of waves not yet started; and `wave-close` records a completed wave. Composing waves is the orchestrating agent's judgment; the skill records the result.
17
+ - `oat-wave-execute` 1.5.0 runs one wave. It owns the repeatable mechanical layer: wrapper-project scaffolding, branch conventions, worktree bootstrap, briefs, gates, merge choreography, bookkeeping cadence, and closeout order.
18
+
19
+ `oat-wave-program` records which plans belong to each wave. `oat-wave-execute` consumes that mapping and executes one wave through the project lifecycle.
20
+
21
+ ## Mechanical Work and Judgment
22
+
23
+ The ownership split is load-bearing. The skills automate mechanics, but the orchestrator retains judgment.
24
+
25
+ The skills own:
26
+
27
+ - integration and phase branch naming
28
+ - wrapper-project scaffolding
29
+ - worktree bootstrap
30
+ - merge choreography
31
+ - artifact and ledger bookkeeping
32
+ - repeatable verification and closeout sequencing
33
+
34
+ The orchestrator owns:
35
+
36
+ - wave and parallel-group composition
37
+ - review-finding dispositions
38
+ - verification of load-bearing worker claims
39
+ - merge-order decisions under live drift
40
+ - cross-lane and end-of-run synthesis
41
+ - all user checkpoints
42
+
43
+ Do not treat a generated grouping or a mechanically successful lane as a substitute for these decisions.
44
+
45
+ ## Composition With Project Implementation
46
+
47
+ Each wave is scaffolded as a quick-mode wrapper project. Its plan points to the source plans while preserving their requirements, and `oat-project-implement` remains the lifecycle owner for phase execution, independent review, bounded fixes, checkpoints, and project state.
48
+
49
+ For plan-declared parallel groups, `oat-wave-execute` invokes its bundled `scripts/bootstrap-group.sh` helper. The helper wraps the standard worktree bootstrap flow, creates phase worktrees at an explicit base, initializes each worktree, checks provider-view parity, and reports structured status. `oat-project-implement` then dispatches and verifies each phase in its assigned worktree. The wave layer owns the serialized fan-in and integration gates after those phases pass.
50
+
51
+ This composition keeps the responsibilities separate:
52
+
53
+ 1. `oat-wave-program` records the program and wave membership.
54
+ 2. `oat-wave-execute` scaffolds and coordinates one wrapper project.
55
+ 3. `oat-project-implement` executes that project's phases.
56
+ 4. `oat-wave-program wave-close` updates the durable program after the wave merges.
57
+
58
+ ## Execution-Program Artifact Format
59
+
60
+ The execution-program artifact is durable reference material under `.oat/repo/reference/external-plans/`. It is not an executable plan or an `oat-project-import-plan` target.
61
+
62
+ The current format contains:
63
+
64
+ - **Wave table:** one row per source plan, including its link, source index, assigned wave, ordering or dependency notes, and status (`pending`, `in-wave`, `done`, `deferred`, or `dropped`).
65
+ - **Coverage invariant:** every plan in every source plan index appears in exactly one row. A deferred or dropped plan includes a reason and re-entry trigger; an omitted plan is an error.
66
+ - **Wave sections:** the theme, lane list, intra-wave ordering, and cross-wave prerequisites for each wave.
67
+ - **Status ledger:** each wave advances from composed to in-progress to merged, with the wrapper-project link, PR, merge SHA, and completion-record link recorded as they become available.
68
+
69
+ > **Important:** This format is documented as a description, not a stable contract. Contract work is deferred in **BL-260718-document-execution-program — Document execution-program artifact as stable OAT contract**, grouped with **BL-260718-add-oat-wave-lifecycle-cli — Add oat wave lifecycle CLI command family**.
70
+
71
+ Until that grouped work ships, consumers should follow the bundled skill and template rather than depending on an independently versioned schema.
72
+
73
+ ## Related
74
+
75
+ - [Project lifecycle](projects/lifecycle.md)
76
+ - [Implementation execution](projects/implementation-execution.md)
77
+ - [Project artifacts](projects/artifacts.md)
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.1.74",
3
- "docs-config": "0.1.74",
4
- "docs-theme": "0.1.74",
5
- "docs-transforms": "0.1.74"
2
+ "cli": "0.2.0",
3
+ "docs-config": "0.2.0",
4
+ "docs-theme": "0.2.0",
5
+ "docs-transforms": "0.2.0"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: create-agnostic-skill
3
- version: 1.4.0
3
+ version: 1.4.1
4
4
  description: Use when adding a reusable workflow skill for AI coding agents. Scaffolds a new .agents/skills skill using the Agent Skills open standard.
5
5
  argument-hint: '[skill-name]'
6
6
  disable-model-invocation: true