@open-agent-toolkit/cli 0.3.12 → 0.3.14

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 (152) hide show
  1. package/README.md +1 -1
  2. package/assets/bundle-metadata.json +1 -1
  3. package/assets/docs/contributing/index.md +14 -1
  4. package/assets/docs/contributing/skills.md +64 -2
  5. package/assets/docs/contributing/smoke-testing.md +3 -3
  6. package/assets/docs/contributing/updating-model-guidance.md +2 -2
  7. package/assets/docs/contributing/verifying-cursor-pins.md +1 -1
  8. package/assets/docs/docs-tooling/add-docs-to-a-repo.md +112 -15
  9. package/assets/docs/docs-tooling/agent-instructions.md +131 -0
  10. package/assets/docs/docs-tooling/commands.md +74 -30
  11. package/assets/docs/docs-tooling/index.md +7 -6
  12. package/assets/docs/docs-tooling/meta.json +1 -1
  13. package/assets/docs/docs-tooling/workflows.md +357 -11
  14. package/assets/docs/{cli-utilities → getting-started}/bootstrap.md +60 -5
  15. package/assets/docs/{guide → getting-started}/concepts.md +28 -10
  16. package/assets/docs/getting-started/index.md +68 -0
  17. package/assets/docs/getting-started/meta.json +4 -0
  18. package/assets/docs/getting-started/quickstart.md +174 -0
  19. package/assets/docs/{cli-utilities → getting-started}/tool-packs.md +146 -15
  20. package/assets/docs/index.md +47 -48
  21. package/assets/docs/meta.json +6 -7
  22. package/assets/docs/provider-sync/commands.md +26 -3
  23. package/assets/docs/provider-sync/config.md +60 -1
  24. package/assets/docs/provider-sync/index.md +31 -15
  25. package/assets/docs/provider-sync/instruction-sync.md +43 -5
  26. package/assets/docs/provider-sync/manifest-and-drift.md +85 -0
  27. package/assets/docs/provider-sync/meta.json +1 -0
  28. package/assets/docs/provider-sync/pilot-with-a-team.md +236 -0
  29. package/assets/docs/provider-sync/scope-and-surface.md +37 -3
  30. package/assets/docs/reference/cli-reference.md +34 -34
  31. package/assets/docs/{cli-utilities → reference}/config-and-local-state.md +25 -9
  32. package/assets/docs/{cli-utilities → reference}/configuration.md +151 -34
  33. package/assets/docs/reference/docs-index-contract.md +19 -4
  34. package/assets/docs/reference/file-locations.md +7 -2
  35. package/assets/docs/reference/index.md +13 -1
  36. package/assets/docs/reference/meta.json +7 -1
  37. package/assets/docs/reference/oat-directory-structure.md +24 -22
  38. package/assets/docs/{workflows/projects/artifacts.md → reference/project-artifacts.md} +4 -4
  39. package/assets/docs/{workflows/projects/state-machine.md → reference/project-state-machine.md} +1 -1
  40. package/assets/docs/{workflows/projects/repo-analysis.md → reference/repository-pr-comments.md} +2 -2
  41. package/assets/docs/reference/troubleshooting.md +125 -10
  42. package/assets/docs/reference/what-oat-writes.md +410 -0
  43. package/assets/docs/skills/brainstorm.md +77 -0
  44. package/assets/docs/skills/diagnostics.md +56 -0
  45. package/assets/docs/{workflows/skills → skills}/explainer-kit.md +121 -0
  46. package/assets/docs/skills/index.md +416 -0
  47. package/assets/docs/{workflows/skills → skills}/meta.json +4 -2
  48. package/assets/docs/{workflows/skills → skills}/recon.md +49 -0
  49. package/assets/docs/skills/repo-improve.md +254 -0
  50. package/assets/docs/skills/research.md +237 -0
  51. package/assets/docs/skills/session-closeout.md +61 -0
  52. package/assets/docs/workflows/advanced/autonomy.md +344 -0
  53. package/assets/docs/workflows/{projects → advanced}/cursor-cloud.md +69 -1
  54. package/assets/docs/workflows/{projects → advanced}/dispatch-ceiling.md +163 -18
  55. package/assets/docs/workflows/{projects → advanced}/evidence-layers.md +1 -1
  56. package/assets/docs/workflows/advanced/index.md +19 -0
  57. package/assets/docs/workflows/advanced/meta.json +13 -0
  58. package/assets/docs/workflows/{projects → advanced}/orchestration-model.md +63 -4
  59. package/assets/docs/workflows/{projects → advanced}/programmatic-execution.md +4 -4
  60. package/assets/docs/{cli-utilities → workflows/advanced}/workflow-gates.md +162 -8
  61. package/assets/docs/workflows/advanced/worktree-bootstrap.md +83 -0
  62. package/assets/docs/workflows/approvals-and-automation.md +261 -0
  63. package/assets/docs/workflows/backlog-and-planning/backlog-lifecycle.md +348 -0
  64. package/assets/docs/workflows/backlog-and-planning/index.md +13 -0
  65. package/assets/docs/workflows/backlog-and-planning/meta.json +4 -0
  66. package/assets/docs/workflows/backlog-and-planning/remote-project-management.md +303 -0
  67. package/assets/docs/workflows/choose-workflow.md +114 -0
  68. package/assets/docs/workflows/ideas/index.md +3 -3
  69. package/assets/docs/workflows/ideas/lifecycle.md +218 -1
  70. package/assets/docs/workflows/index.md +11 -62
  71. package/assets/docs/workflows/meta.json +10 -2
  72. package/assets/docs/workflows/projects/closeout/closeout-skills.md +538 -0
  73. package/assets/docs/workflows/projects/closeout/index.md +14 -0
  74. package/assets/docs/workflows/projects/closeout/meta.json +4 -0
  75. package/assets/docs/workflows/projects/{pr-flow.md → closeout/pr-flow.md} +1 -1
  76. package/assets/docs/workflows/projects/{retro.md → closeout/retro.md} +1 -1
  77. package/assets/docs/workflows/projects/execution/execution-skills.md +258 -0
  78. package/assets/docs/workflows/projects/{implementation-execution.md → execution/implementation-execution.md} +8 -8
  79. package/assets/docs/workflows/projects/execution/index.md +15 -0
  80. package/assets/docs/workflows/projects/execution/meta.json +9 -0
  81. package/assets/docs/workflows/projects/execution/picking-up-projects.md +376 -0
  82. package/assets/docs/{cli-utilities → workflows/projects/execution}/project-log.md +1 -1
  83. package/assets/docs/workflows/projects/index.md +38 -49
  84. package/assets/docs/workflows/projects/lifecycle.md +47 -11
  85. package/assets/docs/workflows/projects/meta.json +2 -23
  86. package/assets/docs/workflows/projects/{design-modes.md → planning/design-modes.md} +29 -0
  87. package/assets/docs/workflows/projects/planning/hill-checkpoints.md +167 -0
  88. package/assets/docs/workflows/projects/planning/index.md +16 -0
  89. package/assets/docs/workflows/projects/planning/meta.json +10 -0
  90. package/assets/docs/workflows/projects/planning/planning-skills.md +381 -0
  91. package/assets/docs/workflows/projects/{splitting.md → planning/splitting.md} +3 -3
  92. package/assets/docs/workflows/projects/planning/starting-projects.md +511 -0
  93. package/assets/docs/workflows/projects/{reviews.md → reviews/index.md} +51 -5
  94. package/assets/docs/workflows/projects/reviews/meta.json +4 -0
  95. package/assets/docs/workflows/projects/reviews/review-flavors.md +643 -0
  96. package/assets/docs/workflows/projects/{reviewing-oat-prs.md → reviews/reviewing-oat-prs.md} +3 -3
  97. package/assets/docs/workflows/waves/index.md +12 -0
  98. package/assets/docs/workflows/waves/meta.json +4 -0
  99. package/assets/docs/workflows/waves/wave-workflows.md +206 -0
  100. package/assets/public-package-versions.json +4 -4
  101. package/assets/skills/oat-docs/SKILL.md +19 -19
  102. package/assets/skills/oat-docs-analyze/SKILL.md +27 -7
  103. package/assets/skills/oat-docs-analyze/references/quality-checklist.md +16 -3
  104. package/assets/skills/oat-docs-apply/SKILL.md +20 -3
  105. package/assets/skills/oat-docs-authoring/SKILL.md +11 -7
  106. package/assets/skills/oat-docs-authoring/references/docs-root-resolution.md +12 -5
  107. package/assets/skills/oat-docs-authoring/references/lifecycle-boundaries.md +7 -7
  108. package/assets/skills/oat-docs-authoring/references/oat-fumadocs-contract.md +13 -3
  109. package/assets/skills/oat-docs-authoring/references/targeted-authoring-workflow.md +5 -4
  110. package/assets/skills/oat-docs-authoring/references/validation.md +11 -1
  111. package/assets/skills/oat-docs-bootstrap/SKILL.md +31 -8
  112. package/assets/skills/oat-docs-bootstrap/assets/AGENTS.md.template +2 -1
  113. package/assets/skills/oat-doctor/SKILL.md +25 -25
  114. package/assets/skills/oat-project-document/SKILL.md +21 -2
  115. package/assets/templates/docs-markdown/contributing.md +35 -0
  116. package/assets/templates/docs-markdown/index.md +18 -0
  117. package/dist/commands/docs/index-generate/index.d.ts.map +1 -1
  118. package/dist/commands/docs/index-generate/index.js +41 -8
  119. package/dist/commands/docs/init/index.d.ts +17 -2
  120. package/dist/commands/docs/init/index.d.ts.map +1 -1
  121. package/dist/commands/docs/init/index.js +194 -14
  122. package/dist/commands/docs/init/markdown.d.ts +39 -0
  123. package/dist/commands/docs/init/markdown.d.ts.map +1 -0
  124. package/dist/commands/docs/init/markdown.js +317 -0
  125. package/dist/commands/docs/init/resolve-options.d.ts +3 -1
  126. package/dist/commands/docs/init/resolve-options.d.ts.map +1 -1
  127. package/dist/commands/docs/init/resolve-options.js +36 -0
  128. package/dist/commands/docs/init/scaffold.d.ts.map +1 -1
  129. package/dist/commands/docs/init/scaffold.js +11 -0
  130. package/dist/commands/shared/agents-md.d.ts +7 -0
  131. package/dist/commands/shared/agents-md.d.ts.map +1 -1
  132. package/dist/commands/shared/agents-md.js +131 -91
  133. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
  134. package/dist/commands/tools/shared/pack-manifest.js +1 -0
  135. package/dist/config/oat-config.d.ts +2 -1
  136. package/dist/config/oat-config.d.ts.map +1 -1
  137. package/dist/config/oat-config.js +4 -2
  138. package/package.json +2 -2
  139. package/assets/docs/cli-utilities/backlog-lifecycle.md +0 -80
  140. package/assets/docs/cli-utilities/index.md +0 -74
  141. package/assets/docs/cli-utilities/meta.json +0 -13
  142. package/assets/docs/cli-utilities/remote-project-management.md +0 -191
  143. package/assets/docs/guide/index.md +0 -31
  144. package/assets/docs/guide/meta.json +0 -4
  145. package/assets/docs/quickstart.md +0 -88
  146. package/assets/docs/workflows/projects/autonomy.md +0 -196
  147. package/assets/docs/workflows/projects/hill-checkpoints.md +0 -93
  148. package/assets/docs/workflows/projects/picking-up-projects.md +0 -124
  149. package/assets/docs/workflows/projects/review-flavors.md +0 -138
  150. package/assets/docs/workflows/skills/index.md +0 -184
  151. package/assets/docs/workflows/skills/repo-improve.md +0 -89
  152. package/assets/docs/workflows/wave-workflows.md +0 -77
@@ -19,7 +19,9 @@ This document defines the project and user sync config used by provider-interop
19
19
  Discovery note:
20
20
 
21
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.
22
- - Mutation ownership still lives with provider-sync commands such as `oat providers set`, not `oat config set`.
22
+ - Enablement mutation lives with `oat providers set`, not `oat config set`.
23
+ Strategy fields are edited directly in sync config; the provider command does
24
+ not set them.
23
25
 
24
26
  It is read by:
25
27
 
@@ -143,3 +145,60 @@ safe, including after interruption.
143
145
  - [`commands.md`](commands.md)
144
146
  - [`manifest-and-drift.md`](manifest-and-drift.md)
145
147
  - [`../reference/oat-directory-structure.md`](../reference/oat-directory-structure.md)
148
+
149
+ ## Choosing providers and strategy
150
+
151
+ ### Which providers to enable
152
+
153
+ Enabling a provider tells OAT to maintain that agent tool's provider views (the
154
+ per-tool files it generates from your `.agents/` canonical assets). Set it with
155
+ `oat providers set --enabled <list> --disabled <list>`.
156
+
157
+ | `enabled` | Choose it when | What you give up |
158
+ | --------------- | ---------------------------------- | --------------------------------------------------------------------------------- |
159
+ | `true` | Someone on the team uses that tool | Generated files appear in your diffs, even in checkouts without the tool's folder |
160
+ | `false` | Nobody uses that tool | OAT stops creating, updating, or removing its files; existing views stay on disk |
161
+ | Unset (default) | You have not chosen yet | Predictability: the provider is active only if its folder already exists |
162
+
163
+ Interactive `oat init` writes an explicit choice for each provider. While a
164
+ disabled provider's folder still exists, a non-interactive `oat sync` warns
165
+ about it on every run, and an interactive `oat sync --scope project` offers to
166
+ re-enable it with that option already ticked. Untick it, or delete the folder.
167
+
168
+ - If your team uses only Claude Code, enable `claude` and disable the others.
169
+ - If your team mixes Claude Code, Cursor, and Codex, enable those three and
170
+ disable `copilot` and `gemini`, so fresh checkouts and worktrees get the same
171
+ views without depending on which folders happen to exist.
172
+ - If you stop using a tool, disable it, then delete its old views yourself.
173
+
174
+ ### Links or copies
175
+
176
+ The strategy decides whether provider views are links to the canonical files or
177
+ copies of them. No command sets it: edit `defaultStrategy` or
178
+ `providers.<name>.strategy` in this file by hand, and keep `"version": 1` and
179
+ `"defaultStrategy"`, or sync and status stop with a validation error. The
180
+ "default strategy" that `oat providers inspect` prints for an adapter is not
181
+ used by sync; this file's setting always wins.
182
+
183
+ | Strategy | Choose it when | What you give up |
184
+ | ---------------- | ------------------------------------ | --------------------------------------------------------------------------------------------------------- |
185
+ | `auto` (default) | Almost always | Once `auto` has adopted a whole-folder link, switching strategy needs the manual recovery described above |
186
+ | `symlink` | You want one link per skill or agent | It refuses to sync through an existing whole-folder link |
187
+ | `copy` | Links really cannot work for you | Canonical edits reach the tools only after you run `oat sync` again |
188
+
189
+ Rules are always copied, whatever the strategy. If the operating system refuses
190
+ to create a link, `auto` and `symlink` quietly copy that entry instead, so check
191
+ the views sync actually produced. With `copy`, `oat status` can still report a
192
+ stale copy as in sync, because it compares the copy with what OAT last wrote.
193
+
194
+ > [!WARNING]
195
+ > The `copy` strategy stamps the absolute path of the checkout that ran sync
196
+ > into each copied skill. Committed copies therefore show as drifted in every
197
+ > other checkout (teammates, worktrees, CI), and each `oat sync` there rewrites
198
+ > them, so expect constant churn in Git if you commit copied views.
199
+
200
+ - If you are unsure, keep `auto`.
201
+ - If you want one link per entry, choose `symlink`, but remove any whole-folder
202
+ link first.
203
+ - If links truly cannot work, choose `copy`, rerun `oat sync` after every
204
+ canonical edit, and expect the churn described above.
@@ -11,15 +11,27 @@ or Codex.
11
11
 
12
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.
13
13
 
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.
14
+ In practice, you edit the canonical layout in `.agents/`, and choose providers
15
+ in `.oat/sync/config.json`; the rest of `.oat/sync/`, such as the manifest, is
16
+ written by OAT. OAT generates provider-specific views where required, leaves
17
+ native-read assets in their canonical directories, and keeps intentional
18
+ provider-local adoption surfaces visible.
19
+
20
+ > [!WARNING]
21
+ > `oat sync` and `oat init` default to scope `all`, so they also write under
22
+ > your home directory. Pass `--scope project` when you mean to change only this
23
+ > repository. Re-running `oat sync` also rewrites the files it generates in
24
+ > provider folders such as `.claude/` and `.codex/`, so an edit made to a
25
+ > generated copy there is lost. Make changes in `.agents/` instead.
26
+
27
+ Piloting with a team? Start with
28
+ [Pilot Provider Sync with One Team](pilot-with-a-team.md).
18
29
 
19
30
  ## Contents
20
31
 
32
+ - [Pilot Provider Sync with One Team](pilot-with-a-team.md) - A week-one plan for trying Provider Sync on one repository.
21
33
  - [Provider Interop Commands](commands.md) - `oat status`, `oat sync`, and `oat providers ...` behavior.
22
- - [Sync Config](config.md) - Provider config model, enablement, and scope semantics.
34
+ - [Sync Config (`.oat/sync/config.json`)](config.md) - Provider config model, enablement, and scope semantics.
23
35
  - [Instruction Sync](instruction-sync.md) - Project-scoped `AGENTS.md` / `CLAUDE.md` validation, repair, and Claude-only adoption.
24
36
  - [Manifest and Drift](manifest-and-drift.md) - How OAT tracks synced state, stray files, and adoption decisions.
25
37
  - [Providers](providers.md) - Provider-specific mappings, capabilities, and path conventions.
@@ -27,15 +39,17 @@ surfaces visible.
27
39
 
28
40
  ## What This Section Is
29
41
 
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
42
+ This section explains how OAT treats `.agents/` as the source of truth, with
43
+ provider settings in `.oat/sync/config.json`, when provider views are derived
44
+ from those canonical assets, how
32
45
  native-read mappings avoid redundant output, and how provider-local adoption
33
46
  surfaces remain discoverable.
34
47
 
35
48
  ## What OAT Treats As Canonical
36
49
 
37
50
  - canonical skills, agents, and rules under `.agents/`
38
- - sync state and related metadata under `.oat/`
51
+ - provider settings in `.oat/sync/config.json`, and sync state that OAT writes
52
+ to `.oat/sync/manifest.json`
39
53
  - provider-specific files as derived views when a mapping requires output
40
54
  - native-read assets in canonical directories without mirrored provider files
41
55
  - provider-local extension files as adoption candidates until explicitly
@@ -49,16 +63,18 @@ surfaces remain discoverable.
49
63
 
50
64
  ## Typical Flow
51
65
 
52
- 1. Run `oat init` to create the base OAT layout and setup state.
53
- 2. Inspect current sync state with `oat status`.
66
+ 1. Run `oat init --scope project` to create the base OAT layout and setup state.
67
+ 2. Inspect current sync state with `oat status --scope project`.
54
68
  3. Adjust provider enablement with `oat providers ...` if needed.
55
- 4. Run `oat sync` to materialize required provider views and reconcile managed
56
- state. Native-read assets do not produce provider-view operations.
57
- 5. Re-run `oat status` after edits to confirm whether anything drifted or needs adoption.
69
+ 4. Run `oat sync --scope project` to materialize required provider views and
70
+ reconcile managed state. Native-read assets do not produce provider-view
71
+ operations.
72
+ 5. Re-run `oat status --scope project` after edits to confirm whether anything
73
+ drifted or needs adoption.
58
74
 
59
75
  ## Start Here
60
76
 
61
- - Use [CLI Bootstrap](../cli-utilities/bootstrap.md) when you are bootstrapping OAT and want the sync-relevant setup path.
77
+ - Use [CLI Bootstrap](../getting-started/bootstrap.md) when you are bootstrapping OAT and want the sync-relevant setup path.
62
78
  - Go to [Commands](commands.md) once you are actively using `oat status`, `oat sync`, and `oat providers`.
63
79
  - Read [Scope and Surface](scope-and-surface.md) when you need the canonical/provider-view mental model.
64
80
 
@@ -72,7 +88,7 @@ surfaces remain discoverable.
72
88
 
73
89
  ## Go Deeper
74
90
 
75
- - [CLI Bootstrap](../cli-utilities/bootstrap.md) - Foundational setup before first sync.
91
+ - [CLI Bootstrap](../getting-started/bootstrap.md) - Foundational setup before first sync.
76
92
  - [Scope and Surface](scope-and-surface.md) - Canonical assets, provider views, scopes, and the sync surface area.
77
93
  - [Commands](commands.md) - `oat status`, `oat sync`, and `oat providers ...` behavior.
78
94
  - [Instruction Sync](instruction-sync.md) - Project-scoped `AGENTS.md` / `CLAUDE.md` validation, repair, and Claude-only adoption.
@@ -41,22 +41,29 @@ to fix.
41
41
 
42
42
  The content root is derived from `documentation.root` in `.oat/config.json`:
43
43
 
44
- - `<documentation.root>/docs` when that path is a directory;
45
- - otherwise `documentation.root` itself.
44
+ - for tooling `markdown`, the literal configured `documentation.root`, even
45
+ when it contains a child directory named `docs`;
46
+ - for other or undeclared tooling, `<documentation.root>/docs` when that path is
47
+ a directory, otherwise `documentation.root` itself.
46
48
 
47
49
  This is the same derivation `oat docs generate-index` uses to pick its default
48
50
  docs directory, so the excluded tree and the indexed tree agree by
49
51
  construction. (`oat docs generate-index --docs-dir` overrides the index side
50
52
  only; it does not change what instruction sync excludes.)
51
53
 
52
- **App-level instruction files are still synced.** `documentation.root`
53
- canonically names the docs _app_ root, and a file like
54
+ **Framework app-level instruction files are still synced.** For framework tooling, `documentation.root`
55
+ names the docs _app_ root, and a file like
54
56
  `apps/oat-docs/AGENTS.md` is instructions for working on the docs app rather
55
57
  than a documentation page. When the app root has a `docs` child, only that
56
58
  child is skipped, and the app root is still synced (under a shim strategy it
57
59
  keeps receiving its `CLAUDE.md` pointer). Opt the app root out explicitly if
58
60
  you do not want it synced.
59
61
 
62
+ For configured Markdown, the entire content root remains excluded, including
63
+ existing local AGENTS files and parent pages outside a nested `docs` subsection.
64
+ Bootstrap preserves local guidance and creates no docs-root AGENTS. Pointer sync
65
+ never replaces authored content or those local instruction files.
66
+
60
67
  Add further paths with `instructions.claude.excludes`, a list of
61
68
  repository-relative directories. Set it with
62
69
  `oat config set instructions.claude.excludes "vendor,third_party/docs"`
@@ -460,5 +467,36 @@ oat instructions sync --force --strategy copy
460
467
 
461
468
  - [Provider Interop Commands](commands.md)
462
469
  - [Provider Interop CLI Scope and Surface](scope-and-surface.md)
463
- - [Config and Local State](../cli-utilities/config-and-local-state.md)
470
+ - [Config and Local State](../reference/config-and-local-state.md)
464
471
  - [Troubleshooting](../reference/troubleshooting.md)
472
+
473
+ ## Which instruction strategy should I choose?
474
+
475
+ A shim is a `CLAUDE.md` that OAT keeps next to an `AGENTS.md` so that Claude
476
+ Code setups which read only `CLAUDE.md` still see the instructions. The
477
+ strategy decides whether OAT keeps shims and what form they take.
478
+
479
+ | Strategy | Choose it when | What you give up |
480
+ | ---------------- | ----------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
481
+ | `none` (default) | Every contributor's Claude Code reads `AGENTS.md` itself, at default settings | Older releases, or a setting that loads only `CLAUDE.md`, see no instructions |
482
+ | `pointer` | Some contributors need a `CLAUDE.md` | One small file per directory, containing only `@AGENTS.md`; it never goes stale |
483
+ | `symlink` | Contributors need a `CLAUDE.md` and links work on every machine | Portability on machines where links are a problem |
484
+ | `copy` | A tool needs the full instruction text in `CLAUDE.md` | After each `AGENTS.md` edit, sync skips the changed copy until you run it with `--force` |
485
+
486
+ The default is `none` because Claude Code stops reading every `AGENTS.md` in the
487
+ project as soon as any `CLAUDE.md` exists (see
488
+ [Claude Code and AGENTS.md](#claude-code-and-agentsmd)), so shims in some
489
+ directories but not others hide the instructions in the rest. Shims are
490
+ maintained only by `oat instructions sync`; `oat sync` never touches them. If a
491
+ `CLAUDE.md` holds text that is not in its `AGENTS.md`, move that text into
492
+ `AGENTS.md` before removing the shim.
493
+
494
+ - If you can confirm that everyone uses a current Claude Code at default
495
+ settings, keep `none`.
496
+ - If you cannot confirm every contributor's setup, for example on a mixed team
497
+ or an open-source project, choose `pointer`. It works everywhere and never
498
+ duplicates the instruction text.
499
+ - If you are sure links work on every contributor's machine, `symlink` is an
500
+ alternative to `pointer`.
501
+ - Choose `copy` only when a consumer needs the full text, and plan to run
502
+ `oat instructions sync --force` after editing `AGENTS.md`.
@@ -13,6 +13,67 @@ This page explains how OAT remembers what it manages and how it distinguishes cl
13
13
  - When to use it: when `oat status` shows drift or strays and you need to understand why OAT thinks a file is managed, missing, or adoptable.
14
14
  - Primary commands: `oat status`, `oat init`, `oat sync`
15
15
 
16
+ Diagram: canonical assets produce provider views and a manifest; status reports what changed and how to resolve it.
17
+
18
+ ```mermaid
19
+ flowchart TD
20
+ CANON["Canonical assets\nEdit .agents/"]
21
+ SYNC["oat sync\nGenerate views"]
22
+ VIEWS["Provider views"]
23
+ MANIFEST["Sync manifest"]
24
+ STATUS["oat status\nInspect before resolving"]
25
+ TRACKED["Tracked views\nin_sync / drifted / missing"]
26
+ STRAY["Unmanaged files\nstray"]
27
+ CANON --> SYNC
28
+ SYNC --> VIEWS
29
+ SYNC --> MANIFEST
30
+ MANIFEST --> STATUS
31
+ VIEWS --> STATUS
32
+ STATUS --> TRACKED
33
+ STATUS --> STRAY
34
+ ```
35
+
36
+ - **What you edit.** Only the canonical files under `.agents/` (skills, agents,
37
+ rules). `oat sync` reads them and writes provider views as symlinks or copies
38
+ under `.claude/`, `.cursor/`, `.github/` and `.codex/`. It records each
39
+ per-entry view in `.oat/sync/manifest.json`, one entry per canonical path and
40
+ provider. Codex roles and config are generated too, but are tracked by the
41
+ Codex extension, not as manifest entries.
42
+ - **What `oat status` reports.** A view is `in_sync` when it still matches what
43
+ the last sync recorded, `drifted` (`modified`, `broken` or `replaced`) when
44
+ its content or link changed or its target is gone, and `missing` when no view
45
+ exists or it was never tracked. A provider file OAT does not manage is a
46
+ `stray`.
47
+ - **What re-running `oat sync` does.** It writes unless you pass `--dry-run`.
48
+ It recreates missing views and rewrites drifted ones from canonical, so an
49
+ edit made in a provider copy is lost, not merged. A file you placed at a
50
+ view's path without OAT is replaced too. When a skill or rule is deleted
51
+ from `.agents/`, sync removes its views. When an agent is deleted or
52
+ renamed, it does not; see the warning below.
53
+ - **What to do with a stray.** In an interactive `oat status` or `oat init` you
54
+ can adopt it, which moves or converts it into `.agents/`. For a Cursor or
55
+ Copilot skill you can keep it in place; OAT records the path under
56
+ `knownStrays` in `.oat/sync/config.json` and leaves it out of later reports.
57
+ You can also list a path there by hand.
58
+
59
+ > [!WARNING]
60
+ > Sync does not clean up after a deleted or renamed agent. With Cursor enabled,
61
+ > once `.agents/agents/<name>.md` is gone, `oat sync`, `oat sync --dry-run` and
62
+ > `oat status` exit 1 with
63
+ > `Cursor agent definition is a symbolic link at .cursor/agents/<name>.md whose target escapes the sync scope.`
64
+ > With Codex enabled, the agent's generated files stay behind. After deleting
65
+ > or renaming an agent, clean up by hand:
66
+ >
67
+ > 1. Delete the link `.cursor/agents/<name>.md`.
68
+ > 2. Delete the link `.claude/agents/<name>.md`; until it is gone, the same
69
+ > error names that path instead.
70
+ > 3. Delete `.codex/agents/<name>.toml`.
71
+ > 4. In `.codex/config.toml`, delete the `[agents.<name>]` table.
72
+ > 5. Run `oat sync --scope project`; it should now succeed.
73
+ >
74
+ > Skills and rules are not affected: sync removes their views when the
75
+ > canonical file is deleted.
76
+
16
77
  ## Manifest locations
17
78
 
18
79
  - Project: `.oat/sync/manifest.json`
@@ -271,3 +332,27 @@ reasoning effort, and OAT writes a role such as
271
332
  - `.oat/projects/<scope>/<project>/design.md`
272
333
  - `packages/cli/src/manifest/**`
273
334
  - `packages/cli/src/drift/**`
335
+
336
+ ## Choosing a stray disposition
337
+
338
+ A stray is a file in a provider folder (such as `.cursor/skills/`) that OAT
339
+ does not manage. Interactive `oat init` and `oat status` ask what to do with
340
+ each one.
341
+
342
+ | Choice | Choose it when | What you give up |
343
+ | ---------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
344
+ | Adopt | Every agent tool should get it | Keeping it in one tool only: OAT moves it into `.agents/`. Generated provider views receive a link; Cursor and Copilot skills are read canonically, without recreating the provider-local path or adding a managed-view manifest row. |
345
+ | Keep tool-only | A Cursor or Copilot skill is meant for that tool only | Other tools never see it. Its exact path is saved in `knownStrays` and no longer reported |
346
+ | Decide later (default) | You are not sure who should own it yet | It is reported again on every run |
347
+
348
+ Keep is offered only for Cursor and Copilot skills, and OAT refuses it when a
349
+ canonical skill with the same name exists; resolve that clash instead. Keeping a
350
+ skill only stops OAT from reporting that path. It does not check that the
351
+ skill is correct or up to date with anything else.
352
+
353
+ - If a skill should work in every agent tool, adopt it.
354
+ - If a Cursor- or Copilot-only skill is personal, keep it at user scope; if the
355
+ team needs it, keep it at project scope.
356
+ - For any other stray you want to keep, add its exact path to `knownStrays` by
357
+ hand, or gitignore it.
358
+ - If you are not sure yet, choose Decide later so it stays visible.
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "title": "Provider Sync",
3
3
  "pages": [
4
+ "pilot-with-a-team",
4
5
  "commands",
5
6
  "config",
6
7
  "instruction-sync",
@@ -0,0 +1,236 @@
1
+ ---
2
+ title: Pilot Provider Sync with One Team
3
+ description: 'A week-one plan for trying Provider Sync on one repository with a team that mixes Claude Code, Cursor, and Codex: setup, teammate onboarding, what to watch, and how to decide.'
4
+ ---
5
+
6
+ # Pilot Provider Sync with One Team
7
+
8
+ Provider Sync gives a team one set of skills, agents, and rules, kept in the
9
+ repository as canonical assets (the files you edit, under `.agents/`), and
10
+ shows them to each coding tool, or provider, in that tool's own format. When a
11
+ provider view (the per-tool file OAT generates, such as
12
+ `.claude/skills/<name>`) no longer matches what OAT wrote, OAT reports it as
13
+ drift.
14
+
15
+ This pilot needs no tracked workflows and no project management setup. OAT
16
+ does not commit or push anything during it: you review the changes, commit
17
+ them, and open the pull request yourself.
18
+
19
+ ## Before you start
20
+
21
+ The team needs Node.js 22.17 or newer and Git 2.31 or newer. Each person
22
+ installs the CLI with:
23
+
24
+ ```bash
25
+ npm install --global @open-agent-toolkit/cli
26
+ ```
27
+
28
+ Agree on one CLI version for the pilot. Each sync stamps its CLI version into
29
+ the sync manifest, so if you commit that file, mixed versions show up as small,
30
+ noisy changes to it. To install a specific version, add it to the package name:
31
+ `npm install --global @open-agent-toolkit/cli@<version>`.
32
+
33
+ One person does the setup, on a branch. The pilot adds these to the
34
+ repository:
35
+
36
+ - `.agents/` with your skills, agents, and rules
37
+ - `.oat/sync/config.json` (which providers are on) and
38
+ `.oat/sync/manifest.json` (what OAT last wrote)
39
+ - a marked OAT block in `.gitignore`, and a `.gitattributes` file or block
40
+ - provider views such as `.claude/skills/`, `.cursor/agents/`, and `.codex/`
41
+
42
+ [What OAT Writes](../reference/what-oat-writes.md) lists every path, what
43
+ creates it, and whether it is meant to be committed.
44
+
45
+ ## Week one
46
+
47
+ Scope decides which tree a command works on: `project` is this repository and
48
+ `user` is your home directory. Every command below passes `--scope project`, so
49
+ nothing is written outside the repository.
50
+
51
+ 1. Install the CLI (see above), then check it runs:
52
+
53
+ ```bash
54
+ oat --version
55
+ ```
56
+
57
+ 2. Create a branch and initialize the repository:
58
+
59
+ ```bash
60
+ git switch -c try-provider-sync
61
+ oat init --scope project
62
+ ```
63
+
64
+ If `oat init` asks whether to run guided setup, answer no: guided setup
65
+ installs every tool pack into your home directory, which this pilot does not
66
+ need. Then look at `git status`: you should see `.gitignore`,
67
+ `.gitattributes`, and `.oat/` (which holds `.oat/sync/manifest.json`). The
68
+ empty `.agents/skills`,
69
+ `.agents/agents`, and `.agents/rules` folders are also created, but Git
70
+ shows them only once they contain files. Nothing is written in your home
71
+ directory.
72
+
73
+ 3. Choose providers explicitly. For a team that mixes Claude Code, Cursor, and
74
+ Codex:
75
+
76
+ ```bash
77
+ oat providers set --scope project --enabled claude,cursor,codex --disabled copilot,gemini
78
+ ```
79
+
80
+ Look at the new `.oat/sync/config.json`. Set every provider explicitly,
81
+ because a provider you leave unset is still synced whenever its folder (for
82
+ example `.claude/`) exists, which differs from one checkout to the next.
83
+ [Sync Config](config.md#which-providers-to-enable) explains each choice.
84
+
85
+ 4. Add one real skill your team already repeats. A skill is a folder with a
86
+ `SKILL.md` file:
87
+
88
+ ```markdown title=".agents/skills/review-migration/SKILL.md"
89
+ ---
90
+ name: review-migration
91
+ description: Use when reviewing a database migration for rollback safety.
92
+ ---
93
+
94
+ # Review a migration
95
+
96
+ Check that the migration can be rolled back and that the previous release
97
+ still works against the new schema. Report problems; do not run the
98
+ migration.
99
+ ```
100
+
101
+ [Writing Skills](../contributing/skills.md#frontmatter-fields-in-active-use)
102
+ lists the frontmatter fields. A rule is a Markdown file in `.agents/rules/`
103
+ instead; see
104
+ [Canonical rule frontmatter](providers.md#canonical-rule-frontmatter).
105
+
106
+ 5. Preview the sync, then apply it:
107
+
108
+ ```bash
109
+ oat sync --scope project --dry-run
110
+ oat sync --scope project
111
+ ```
112
+
113
+ The preview lists each planned operation and changes nothing. After the real
114
+ run, `.claude/skills/review-migration` should be a link to
115
+ `../../.agents/skills/review-migration`. Start a new session in each tool so
116
+ it picks up the change.
117
+
118
+ 6. Check the result:
119
+
120
+ ```bash
121
+ oat status --scope project
122
+ ```
123
+
124
+ Every row should read `in_sync`. A `missing` row means that entry has not
125
+ been synced yet.
126
+
127
+ 7. Review the diff and commit it. Use
128
+ [What to commit](../reference/what-oat-writes.md#what-to-commit) to check
129
+ each path.
130
+
131
+ 8. Push the branch and open a pull request. The team reviews it like any other
132
+ change.
133
+
134
+ ## What each teammate does
135
+
136
+ After the pilot branch merges, each teammate installs the same CLI version. If
137
+ the pilot committed its provider views, nothing else is needed to start: the
138
+ views are relative links into `.agents/` and generated files that contain no
139
+ machine-specific paths, and Cursor and Codex read skills from `.agents/skills`
140
+ directly. To confirm, run `oat status --scope project`; a `missing` row means a
141
+ view was not committed, and `oat sync --scope project` creates it. The links and
142
+ generated files were checked on macOS, including in a fresh clone; how Windows
143
+ checkouts handle committed links was not tested.
144
+
145
+ Run `oat sync --scope project`, and commit its output in the same change, when
146
+ you add, rename, or delete a skill, agent, or rule, or change an agent or rule.
147
+ Deleting or renaming an agent also needs the manual cleanup described below.
148
+ Rules, Codex agent files and Cursor's per-model agent variants are generated
149
+ copies, so they only change when sync runs. An edit inside an existing linked
150
+ skill reaches Claude Code at once, because the view is a link.
151
+
152
+ Make every change in `.agents/`, never in the provider folders. Re-running sync
153
+ overwrites edits made to generated copies, replaces an untracked file sitting
154
+ at a view path, and removes the view of a deleted skill or rule. Editing
155
+ through a link changes the canonical file itself, which is easy to miss in
156
+ review.
157
+
158
+ Agents are the exception. After you delete or rename an agent, delete its old
159
+ links in `.cursor/agents/` and `.claude/agents/` yourself: with Cursor enabled,
160
+ `oat sync` and `oat status` stop with an error saying the link's target
161
+ `escapes the sync scope` until both links are gone. Also delete its
162
+ `.codex/agents/<name>.toml` file and the `[agents.<name>]` table in
163
+ `.codex/config.toml`, which sync leaves behind.
164
+
165
+ Before committing, run `oat status --scope project`. It exits 1 when any view
166
+ is missing or drifted, or when a stray file sits in a provider folder. For a
167
+ check that ignores strays, such as a CI step, run
168
+ `oat status --scope project --hook`: it prints one warning line and exits 1
169
+ only when a view is missing or drifted.
170
+
171
+ For an automatic reminder, a teammate can add OAT's optional pre-commit hook
172
+ with `oat init --scope project --hook`. Git does not copy hooks when you clone,
173
+ so each person adds it in their own clone. The hook only warns; it never blocks
174
+ a commit, and it does nothing if `oat` is not installed. If the repository sets
175
+ Git's `core.hooksPath`, the hook goes in that folder instead, which may be
176
+ inside the working tree. Remove it with `oat init --scope project --no-hook`.
177
+
178
+ ## Mixed tools
179
+
180
+ | Provider | What OAT generates in the repository | What the team should know |
181
+ | ----------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
182
+ | Claude Code | A relative link per skill in `.claude/skills/` and per agent in `.claude/agents/`; rules as generated copies in `.claude/rules/` | The only provider with skill views, so a new skill reaches Claude Code only after sync |
183
+ | Cursor | No skill files: it reads `.agents/skills`. A link per agent in `.cursor/agents/`; rules as `.cursor/rules/*.mdc` files | Its `.cursor/skills/` folder is not managed; skills found there are reported as strays |
184
+ | Codex | No skill files: it reads `.agents/skills`. A generated `.codex/agents/<name>.toml` per agent, registered in `.codex/config.toml` | Sync merges into an existing `.codex/config.toml`: it adds OAT's tables, turns on `multi_agent` and raises `max_depth` to at least 2, and keeps your other settings |
185
+ | Gemini | Nothing; it reads skills and agents from `.agents/` directly | Nothing to commit |
186
+
187
+ If OAT's own implementer and reviewer agents are installed in the repository,
188
+ sync also generates one file per supported model for each of them, in
189
+ `.cursor/agents/` and `.codex/agents/`, which can add dozens of files to the
190
+ first diff. The skill links, agent links, rule copies, generated agent files
191
+ and `.codex/config.toml` merge were observed by running the CLI in a test
192
+ repository. [Providers](providers.md) also covers Copilot and the user scope.
193
+
194
+ ## What to watch for in week one
195
+
196
+ - **A bare `oat sync` or `oat init` can also write in your home directory.**
197
+ Both default to scope `all`. Use `--scope project` in shared instructions,
198
+ scripts, and CI.
199
+ - **Edits in provider folders are not safe.** Sync overwrites edits to
200
+ generated copies from `.agents/`, and an edit made through a link silently
201
+ changes the canonical file.
202
+ - **Disabling a provider leaves its views in place.** Delete them yourself.
203
+ While a disabled provider's folder exists, sync warns on every run, and an
204
+ interactive sync offers to re-enable it with the box already ticked; untick
205
+ it.
206
+ - **Keep the default `auto` strategy unless links cannot work.** The `copy`
207
+ strategy records the absolute path of the checkout that ran sync, so copies
208
+ show as drifted in every other checkout and churn in Git.
209
+ - **Strays are reported, not deleted.** A stray is a file in a provider folder
210
+ that OAT does not manage. See
211
+ [Choosing a stray disposition](manifest-and-drift.md#choosing-a-stray-disposition).
212
+
213
+ ## Deciding after the pilot
214
+
215
+ The pilot is working when:
216
+
217
+ - one change in `.agents/` shows up in Claude Code, Cursor, and Codex after one
218
+ sync and one commit
219
+ - teammates on different tools use the same skill without copying it by hand
220
+ - `oat status --scope project` shows every row `in_sync` before commits, or in
221
+ CI with `--hook`
222
+ - nobody has had to edit a provider folder by hand
223
+
224
+ **If you stop**, follow [Backing out](../reference/what-oat-writes.md#backing-out).
225
+ There is no uninstall command: stopping means one commit that deletes the files
226
+ the pilot added and OAT's blocks in `.gitignore` and `.gitattributes`, plus
227
+ `oat init --scope project --no-hook` in each clone that added the hook. Your
228
+ skills are plain files, so you can keep them.
229
+
230
+ ## Next
231
+
232
+ - [Provider Sync](index.md) and [Commands](commands.md)
233
+ - [Sync Config](config.md) and [Scope and Surface](scope-and-surface.md)
234
+ - [Manifest and Drift](manifest-and-drift.md) and [Providers](providers.md)
235
+ - [Quickstart](../getting-started/quickstart.md)
236
+ - [What OAT Writes](../reference/what-oat-writes.md)
@@ -25,7 +25,7 @@ Rules are currently project-scoped canonical content. Unlike skills and agents,
25
25
 
26
26
  - Mutate by default; `--dry-run` to preview
27
27
  - Explicit `--dry-run` for safe preview of mutations
28
- - Scoped destructive actions only for manifest-tracked entries
28
+ - Deletions are limited to manifest-tracked entries: sync removes a skill or rule view only when the manifest records it and its canonical source is gone. Deleted agents are not cleaned up this way: with Cursor enabled, sync and status stop with an `escapes the sync scope` error until you delete the agent's dangling links in `.cursor/agents/` and `.claude/agents/`, and Codex's `.codex/agents/<name>.toml` and `[agents.<name>]` table are never removed (see [Manifest and Drift](manifest-and-drift.md#quick-look)). A provider file with no canonical source and no manifest entry is reported as a stray by `oat status`, not deleted. Writing a view is not limited this way: sync replaces whatever sits at a view's expected path, including an untracked file (see the warning under [Choosing sync scope](#choosing-sync-scope))
29
29
  - Cross-provider compatibility via adapters
30
30
  - Native-read assets stay canonical while provider-local adoption sources remain discoverable independently
31
31
  - Obsolete managed mappings are deleted only when their provider paths are verified clean; changed or unverified paths are preserved and detached from manifest ownership
@@ -50,8 +50,8 @@ Rules are currently project-scoped canonical content. Unlike skills and agents,
50
50
 
51
51
  ## Adjacent CLI commands (commonly used with provider interop)
52
52
 
53
- - `oat init` (bootstrap canonical structure and sync config) — see `../cli-utilities/bootstrap.md`
54
- - `oat tools ...` (install/update/remove/migrate/list/inspect tools) — see `../cli-utilities/tool-packs.md`
53
+ - `oat init` (bootstrap canonical structure and sync config) — see [CLI Bootstrap](../getting-started/bootstrap.md)
54
+ - `oat tools ...` (install/update/remove/migrate/list/inspect tools) — see [Tool Packs and Installed Assets](../getting-started/tool-packs.md)
55
55
  - `oat doctor` (environment + skill-version diagnostics) — see `../reference/cli-reference.md`
56
56
 
57
57
  ## Provider enablement model
@@ -131,3 +131,37 @@ runtime mismatch, malformed output, and missing telemetry never authorize it.
131
131
  - `.oat/projects/<scope>/<project>/design.md`
132
132
  - `.oat/projects/<scope>/<project>/plan.md`
133
133
  - `.oat/projects/<scope>/<project>/implementation.md`
134
+
135
+ ## Choosing sync scope
136
+
137
+ `oat sync` and `oat status` take `--scope project`, `--scope user`, or
138
+ `--scope all`. Project scope works on this repository's canonical assets (the
139
+ files under `.agents/`) and its provider views (the per-tool copies or links
140
+ such as `.claude/skills/<name>`). User scope does the same for `~/.agents/` and
141
+ the tool folders in your home directory. All runs project scope, then user scope.
142
+
143
+ | Scope | Choose it when | What you give up |
144
+ | --------------- | --------------------------------------------------- | ------------------------------------------------- |
145
+ | `project` | CI, scripts, or a team checkout | Your personal skills are not refreshed |
146
+ | `user` | You keep personal skills that you use in every repo | Rules are not synced; they exist only per project |
147
+ | `all` (default) | You maintain both trees on your own machine | Every run also writes into your home directory |
148
+
149
+ User scope never syncs rules: only project scope distributes the rules in
150
+ `.agents/rules` to provider folders. Edit the files under `.agents/` rather than
151
+ the provider views, because sync overwrites changes made in the views.
152
+
153
+ > [!WARNING]
154
+ > A bare `oat sync` uses scope `all`, so it also writes under your home
155
+ > directory. Every sync also overwrites edits made directly in provider folders,
156
+ > replaces an untracked file sitting at a view path, and removes the view of a
157
+ > deleted skill or rule. It does not clean up after a deleted or renamed agent;
158
+ > see [Manifest and Drift](manifest-and-drift.md#quick-look) for the manual
159
+ > steps. Pass `--scope` explicitly, and preview with `--dry-run` when you are
160
+ > unsure.
161
+
162
+ - If the run is in CI or a script, always pass `--scope project`, and preview
163
+ with `--dry-run` when you change what is synced.
164
+ - If you want personal skills in every repository, put them in
165
+ `~/.agents/skills` and run `oat sync --scope user`.
166
+ - If you deliberately maintain both trees on your own machine, `--scope all` (or
167
+ a bare `oat sync`) is fine.