@open-agent-toolkit/cli 0.3.37 → 0.3.39
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/README.md +2 -2
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/getting-started/bootstrap.md +15 -16
- package/assets/docs/getting-started/tool-packs.md +15 -14
- package/assets/docs/provider-sync/commands.md +6 -5
- package/assets/docs/provider-sync/manifest-and-drift.md +26 -19
- package/assets/docs/provider-sync/pilot-with-a-team.md +17 -17
- package/assets/docs/provider-sync/providers.md +4 -4
- package/assets/docs/provider-sync/scope-and-surface.md +5 -5
- package/assets/docs/reference/cli-reference.md +8 -5
- package/assets/docs/reference/oat-directory-structure.md +1 -1
- package/assets/docs/reference/project-artifacts.md +12 -3
- package/assets/docs/reference/troubleshooting.md +4 -5
- package/assets/docs/reference/what-oat-writes.md +54 -59
- package/assets/docs/skills/repo-improve.md +23 -19
- package/assets/docs/workflows/advanced/workflow-gates.md +7 -1
- package/assets/docs/workflows/projects/closeout/closeout-skills.md +9 -6
- package/assets/docs/workflows/projects/execution/execution-skills.md +1 -2
- package/assets/docs/workflows/projects/execution/implementation-execution.md +3 -2
- package/assets/docs/workflows/projects/lifecycle.md +3 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-brief/SKILL.md +1 -1
- package/assets/skills/oat-project-brief/references/brief-contract.md +32 -9
- package/assets/skills/oat-project-complete/SKILL.md +17 -7
- package/assets/skills/oat-project-implement/SKILL.md +2 -2
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +14 -4
- package/assets/skills/oat-project-pr-final/SKILL.md +2 -2
- package/assets/skills/oat-project-pr-progress/SKILL.md +23 -12
- package/assets/skills/oat-repo-knowledge-index/SKILL.md +226 -131
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +5 -2
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +10 -5
- package/dist/commands/init/tools/index.d.ts.map +1 -1
- package/dist/commands/init/tools/index.js +106 -28
- package/dist/commands/init/tools/project-guidance.js +1 -1
- package/dist/commands/project/closeout-check/index.d.ts.map +1 -1
- package/dist/commands/project/closeout-check/index.js +4 -8
- package/dist/commands/project/delivery/check.d.ts.map +1 -1
- package/dist/commands/project/delivery/check.js +32 -14
- package/dist/commands/project/delivery/evidence.d.ts +39 -0
- package/dist/commands/project/delivery/evidence.d.ts.map +1 -1
- package/dist/commands/project/delivery/evidence.js +163 -17
- package/dist/commands/project/delivery/refresh.d.ts.map +1 -1
- package/dist/commands/project/delivery/refresh.js +13 -16
- package/dist/commands/project/journal-check/index.d.ts +2 -0
- package/dist/commands/project/journal-check/index.d.ts.map +1 -1
- package/dist/commands/project/journal-check/index.js +78 -1
- package/dist/commands/project/journal-check/types.d.ts +1 -1
- package/dist/commands/project/journal-check/types.d.ts.map +1 -1
- package/dist/commands/project/new/index.d.ts.map +1 -1
- package/dist/commands/project/new/index.js +1 -0
- package/dist/commands/project/new/scaffold.d.ts +1 -1
- package/dist/commands/project/new/scaffold.d.ts.map +1 -1
- package/dist/commands/project/new/scaffold.js +1 -1
- package/dist/commands/providers/codex/materialize.d.ts +5 -1
- package/dist/commands/providers/codex/materialize.d.ts.map +1 -1
- package/dist/commands/providers/codex/materialize.js +6 -1
- package/dist/commands/shared/exact-path-commit.d.ts.map +1 -1
- package/dist/commands/shared/exact-path-commit.js +11 -1
- package/dist/commands/shared/scope-option.d.ts +3 -1
- package/dist/commands/shared/scope-option.d.ts.map +1 -1
- package/dist/commands/shared/scope-option.js +4 -2
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +4 -1
- package/dist/commands/tools/install/index.d.ts.map +1 -1
- package/dist/commands/tools/install/index.js +1 -1
- package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts +11 -0
- package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-lifecycle-outcome.js +16 -0
- package/dist/config/oat-config.d.ts +6 -1
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +14 -22
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/providers/codex/codec/config-merge.d.ts +19 -0
- package/dist/providers/codex/codec/config-merge.d.ts.map +1 -1
- package/dist/providers/codex/codec/config-merge.js +75 -8
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +84 -38
- package/dist/providers/cursor/codec/materialize.d.ts.map +1 -1
- package/dist/providers/cursor/codec/materialize.js +17 -1
- package/package.json +3 -3
|
@@ -8,7 +8,8 @@ description: 'Every file, link and Git ref that OAT commands create in your repo
|
|
|
8
8
|
This page lists what each OAT command writes in your repository, under your
|
|
9
9
|
home directory and on your shared `origin` remote, which of those files belong
|
|
10
10
|
in Git, and how to back out of OAT completely. Everything here was observed by
|
|
11
|
-
running OAT CLI version 0.3.14 on macOS
|
|
11
|
+
running OAT CLI version 0.3.14 on macOS, except statements marked with a later
|
|
12
|
+
version, which describe what changed in that version. The removal procedure in
|
|
12
13
|
[Remove everything](#remove-everything) was run end to end twice, once
|
|
13
14
|
originally and once in an independent re-run, and both times it returned the
|
|
14
15
|
repository and the home directory to their pre-OAT state.
|
|
@@ -23,11 +24,11 @@ agents, templates and scripts that `oat tools install` adds.
|
|
|
23
24
|
|
|
24
25
|
## The short version
|
|
25
26
|
|
|
26
|
-
- With `--scope project`, `oat init`, `oat sync` and `oat tools install
|
|
27
|
-
write only inside the repository.
|
|
28
|
-
`oat
|
|
29
|
-
`core` pack
|
|
30
|
-
|
|
27
|
+
- With `--scope project`, `oat init`, `oat sync` and `oat tools install`
|
|
28
|
+
write only inside the repository. `oat tools install --scope project`
|
|
29
|
+
without a pack name and `oat init --scope project --setup` skip the
|
|
30
|
+
user-only `core` pack and say so, and `oat tools install core --scope project`
|
|
31
|
+
exits 1 (0.3.39 and later).
|
|
31
32
|
- Without `--scope`, `oat init` and `oat sync` use scope `all`, so they can
|
|
32
33
|
also write under your home directory, and `oat tools install <pack>` installs
|
|
33
34
|
a pack that is not yet installed under your home directory (user scope).
|
|
@@ -47,11 +48,12 @@ agents, templates and scripts that `oat tools install` adds.
|
|
|
47
48
|
Where a file already existed, OAT appended its own marked block instead of
|
|
48
49
|
replacing it. This held for `.gitignore`, `.gitattributes` and an existing
|
|
49
50
|
`pre-commit` hook. From version 0.3.37, an existing `.codex/config.toml` is
|
|
50
|
-
edited in place: OAT changes only
|
|
51
|
-
`
|
|
52
|
-
settings stay as they were (see the
|
|
51
|
+
edited in place: OAT changes only its own `[agents.<name>]` tables and adds
|
|
52
|
+
`multi_agent` and `max_depth` when they are missing, and comments, blank lines,
|
|
53
|
+
table order and your other settings stay as they were (see the
|
|
53
54
|
[provider table](#syncing-provider-views)). Earlier versions rewrote the whole
|
|
54
|
-
file and dropped its comments.
|
|
55
|
+
file and dropped its comments, and versions before 0.3.39 also changed a
|
|
56
|
+
`multi_agent` or `max_depth` value you had set. A pre-existing
|
|
55
57
|
`~/.claude/settings.json` was left untouched.
|
|
56
58
|
|
|
57
59
|
### Setting up
|
|
@@ -85,13 +87,13 @@ views OAT manages. A provider does not have to be enabled: an existing
|
|
|
85
87
|
`.claude/` directory in the repository, or `~/.claude/` in your home directory,
|
|
86
88
|
is enough for `oat sync` to create Claude views.
|
|
87
89
|
|
|
88
|
-
| Provider | Repository views created by `oat sync --scope project`
|
|
89
|
-
| -------- |
|
|
90
|
-
| Claude | `.claude/skills/<name>` and `.claude/agents/<name>.md`, relative symlinks into `.agents/`
|
|
91
|
-
| Cursor | `.cursor/agents/`: relative symlinks for agents, plus generated model-variant files marked `# oat-managed: true`
|
|
92
|
-
| Copilot | `.github/agents/`, relative symlinks
|
|
93
|
-
| Codex | `.codex/agents/*.toml` and `.codex/config.toml`, generated files. In an existing `config.toml`, OAT adds its `[agents.<name>]` tables and
|
|
94
|
-
| Gemini | Nothing
|
|
90
|
+
| Provider | Repository views created by `oat sync --scope project` |
|
|
91
|
+
| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
92
|
+
| Claude | `.claude/skills/<name>` and `.claude/agents/<name>.md`, relative symlinks into `.agents/` |
|
|
93
|
+
| Cursor | `.cursor/agents/`: relative symlinks for agents, plus generated model-variant files marked `# oat-managed: true` |
|
|
94
|
+
| Copilot | `.github/agents/`, relative symlinks |
|
|
95
|
+
| Codex | `.codex/agents/*.toml` and `.codex/config.toml`, generated files. In an existing `config.toml`, OAT adds its `[agents.<name>]` tables; your other settings and comments stay byte for byte (0.3.37 and later). It adds `[features] multi_agent = true` and `[agents] max_depth` only when they are missing and names each key it added; a value you set is kept, and sync reports a conflict when OAT needs a different one (0.3.39 and later). |
|
|
96
|
+
| Gemini | Nothing |
|
|
95
97
|
|
|
96
98
|
OAT creates skill views only for Claude. It reports the other providers' skill
|
|
97
99
|
support as `native-read` and creates no skill views for them. No generated
|
|
@@ -107,7 +109,7 @@ file contained an absolute path.
|
|
|
107
109
|
| Command | In the repository | Under your home directory |
|
|
108
110
|
| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
109
111
|
| `oat tools install <pack> --scope project` | The pack's skills in `.agents/skills/`, plus any agents in `.agents/agents/`, templates in `.oat/templates/` and scripts in `.oat/scripts/` it ships; `tools.<pack>: true` in `.oat/config.json`. Views for enabled providers, unless you pass `--no-sync`. | Nothing |
|
|
110
|
-
| `oat tools install --scope user` | Nothing,
|
|
112
|
+
| `oat tools install --scope user` | Nothing, even when a pack is already installed at project scope (0.3.39 and later) | `~/.agents/skills/`, `~/.agents/agents/`, `~/.oat/config.json`, `~/.oat/docs/`, `~/.oat/ideas/`, `~/.oat/scripts/`, `~/.oat/templates/`. Provider links only if a provider is detected. |
|
|
111
113
|
| `oat tools install core` | Nothing | `~/.oat/config.json`, `~/.agents/skills/oat-docs`, `~/.agents/skills/oat-doctor`, and `~/.oat/docs/` (a bundled copy of these docs) |
|
|
112
114
|
|
|
113
115
|
Some packs write more at project scope. The ideas pack adds
|
|
@@ -116,9 +118,10 @@ Some packs write more at project scope. The ideas pack adds
|
|
|
116
118
|
`.oat/projects/archived/.gitkeep` and a `projects.root` setting. Passing
|
|
117
119
|
`--project-guidance` adds a marked `<!-- OAT tools -->` block to `AGENTS.md`,
|
|
118
120
|
creating the file if needed. Installing every pack at once with
|
|
119
|
-
`oat tools install --scope project` puts
|
|
120
|
-
|
|
121
|
-
|
|
121
|
+
`oat tools install --scope project` puts the other seven packs in the
|
|
122
|
+
repository, skips core with a message that it is user-scope only (0.3.39 and
|
|
123
|
+
later; earlier versions installed core in your home directory), and also adds a
|
|
124
|
+
`localPaths` setting and a `# OAT local paths` block to `.gitignore`.
|
|
122
125
|
|
|
123
126
|
No tool pack command wrote to `origin`.
|
|
124
127
|
|
|
@@ -198,14 +201,16 @@ is anything that differs between machines.
|
|
|
198
201
|
- **Generated provider files** (Cursor model variants, Codex agents and
|
|
199
202
|
`config.toml` tables). Committed, they arrive with every clone. Not
|
|
200
203
|
committed, each teammate runs `oat sync --scope project` to generate them.
|
|
201
|
-
Either way, `oat tools remove`
|
|
202
|
-
|
|
204
|
+
Either way, `oat tools remove` deletes the removed agents' Codex roles and
|
|
205
|
+
tables (0.3.39 and later) but leaves Cursor model variants until the next
|
|
206
|
+
`oat sync --scope project`; see [Backing out](#backing-out).
|
|
203
207
|
- **Pack files in `.oat/`** (templates, scripts, ideas, `projects-root`).
|
|
204
208
|
Committed, every clone has them. Not committed, each teammate needs the same
|
|
205
209
|
`oat tools install` to get them.
|
|
206
|
-
- **`AGENTS.md` guidance block.** It tells agents how to refresh views
|
|
207
|
-
|
|
208
|
-
|
|
210
|
+
- **`AGENTS.md` guidance block.** It tells agents how to refresh views with
|
|
211
|
+
`oat sync --scope project`, which writes only inside the repository (0.3.39
|
|
212
|
+
and later; earlier blocks recommend `oat sync --scope all`, which also writes
|
|
213
|
+
under each reader's home directory).
|
|
209
214
|
- **A hook inside the working tree.** Committed, everyone using that hooks path
|
|
210
215
|
gets the drift warning. A hook in `.git/hooks` is never committed.
|
|
211
216
|
- **`pr/` and `reviews/archived/` folders.** Whether PR material and archived
|
|
@@ -231,9 +236,8 @@ is anything that differs between machines.
|
|
|
231
236
|
4. **Install personal packs separately.** User-scope packs live under each
|
|
232
237
|
person's `~/.agents` and `~/.oat`, so nobody receives them from the
|
|
233
238
|
repository. A teammate who wants them runs `oat tools install --scope user`,
|
|
234
|
-
which installs all eight packs
|
|
235
|
-
|
|
236
|
-
[surprises](#known-surprises-in-0314).
|
|
239
|
+
which installs all eight packs and writes nothing into the repository
|
|
240
|
+
(0.3.39 and later).
|
|
237
241
|
5. **Fetch synced projects explicitly.** A fresh clone does not receive
|
|
238
242
|
`refs/oat/*`, so synced projects are not in it. See
|
|
239
243
|
[Picking Up Projects](../workflows/projects/execution/picking-up-projects.md)
|
|
@@ -256,14 +260,14 @@ The hook does nothing when no `oat` binary is on `PATH`, and
|
|
|
256
260
|
|
|
257
261
|
### Supported removal commands
|
|
258
262
|
|
|
259
|
-
| Command | Removes
|
|
260
|
-
| --------------------------------------------------------------------- |
|
|
261
|
-
| `oat tools remove --pack <pack> --scope project` (one pack at a time) | The pack's skills and agents in `.agents/`, their symlink views (Claude, Copilot, Cursor symlinks),
|
|
262
|
-
| `oat tools remove --all` | Nothing: exits 2 with `Pack core does not allow project scope`, with or without `--scope project`
|
|
263
|
-
| `oat tools remove --all --scope user` | With only core installed at user scope: `~/.agents/skills/oat-docs`, `~/.agents/skills/oat-doctor`, `~/.oat/docs/` and their `~/.claude/skills/` links
|
|
264
|
-
| `oat remove skill <name> --scope project` | The canonical skill, its Claude view and its manifest entry
|
|
265
|
-
| `oat project prune <name>` (synced projects only) | The worktree, the pointer file, the local ref and the ref on `origin`; commits `chore(oat): prune synced project <name>` on the current branch
|
|
266
|
-
| `oat init --scope project --no-hook` | OAT's hook block. If the file holds only OAT's block, the whole `pre-commit` file is deleted.
|
|
263
|
+
| Command | Removes | Leaves behind |
|
|
264
|
+
| --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
265
|
+
| `oat tools remove --pack <pack> --scope project` (one pack at a time) | The pack's skills and agents in `.agents/`, their symlink views (Claude, Copilot, Cursor symlinks), its `.oat/scripts/*.sh`, and from 0.3.39 its agents' generated Codex roles and `[agents.*]` tables | `.oat/templates/`, `.oat/ideas/`, `.oat/projects-root`, `.oat/config.json` (with a stale `tools.requiredBy` entry), `.oat/sync/`, both `.gitignore` blocks, `.gitattributes`, projects, empty folders, and generated Cursor model variants until the next `oat sync --scope project` |
|
|
266
|
+
| `oat tools remove --all` | Nothing: exits 2 with `Pack core does not allow project scope`, with or without `--scope project` | Everything |
|
|
267
|
+
| `oat tools remove --all --scope user` | With only core installed at user scope: `~/.agents/skills/oat-docs`, `~/.agents/skills/oat-doctor`, `~/.oat/docs/` and their `~/.claude/skills/` links | `~/.oat/config.json` (now `{"version": 1}`), `~/.oat/sync/manifest.json`, an empty `~/.agents/skills/` and an empty `~/.claude/skills/` |
|
|
268
|
+
| `oat remove skill <name> --scope project` | The canonical skill, its Claude view and its manifest entry | Nothing for that skill |
|
|
269
|
+
| `oat project prune <name>` (synced projects only) | The worktree, the pointer file, the local ref and the ref on `origin`; commits `chore(oat): prune synced project <name>` on the current branch | An empty `.oat/projects/synced/` |
|
|
270
|
+
| `oat init --scope project --no-hook` | OAT's hook block. If the file holds only OAT's block, the whole `pre-commit` file is deleted. | Your own hook lines, byte for byte |
|
|
267
271
|
|
|
268
272
|
No command deletes a shared or local project. `oat project prune` refuses a
|
|
269
273
|
shared project, and `oat project archive` moves a project to
|
|
@@ -340,36 +344,28 @@ prune to erase sensitive content. Rewriting history is not covered here.
|
|
|
340
344
|
|
|
341
345
|
## Known surprises in 0.3.14
|
|
342
346
|
|
|
343
|
-
These
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
- `oat tools install --scope
|
|
351
|
-
|
|
352
|
-
`localPaths` to `.oat/config.json` and a `# OAT local paths` block to
|
|
353
|
-
`.gitignore`.
|
|
354
|
-
- `oat tools install workflows --scope project` does not add that block, but
|
|
347
|
+
These behaviors were observed in version 0.3.14. Entries that later versions
|
|
348
|
+
fixed have been removed: from 0.3.39, `core` under `--scope project` is refused
|
|
349
|
+
or skipped, an explicit `--scope` writes only that scope, `init --setup` honors
|
|
350
|
+
`--scope` and does not run `gh`, the guidance block recommends
|
|
351
|
+
`oat sync --scope project`, local-scope `oat project new` reports why it made no
|
|
352
|
+
commit, and piping output into `head` exits quietly.
|
|
353
|
+
|
|
354
|
+
- `oat tools install workflows --scope project` does not add the
|
|
355
|
+
`# OAT local paths` block to `.gitignore`, but
|
|
355
356
|
`oat tools install --scope project` does, so `pr/` and `reviews/archived/`
|
|
356
357
|
folders are committable in one setup and ignored in the other.
|
|
357
358
|
- `oat tools remove --all` fails unless you add `--scope user`.
|
|
358
359
|
- After removing packs, a stale `tools.requiredBy` entry stays in
|
|
359
360
|
`.oat/config.json`, and `oat status` reports the utility pack as missing and
|
|
360
361
|
suggests `oat tools update`.
|
|
361
|
-
- Removing a pack leaves its generated Cursor
|
|
362
|
-
`oat sync`
|
|
362
|
+
- Removing a pack leaves its generated Cursor model variants until the next
|
|
363
|
+
`oat sync --scope project` removes them. Its agents' generated Codex roles
|
|
364
|
+
and `config.toml` tables are removed with the pack (0.3.39 and later).
|
|
363
365
|
- An existing `.claude/` folder, in the repository or your home directory, is
|
|
364
366
|
enough for `oat sync` to create Claude views without enabling Claude.
|
|
365
367
|
- After `oat tools install <pack> --no-sync`, running the same install again
|
|
366
368
|
reports `unchanged` and creates no views; run `oat sync --scope project`.
|
|
367
|
-
- The `AGENTS.md` block from `--project-guidance` recommends
|
|
368
|
-
`oat sync --scope all`, which also writes under your home directory.
|
|
369
|
-
- `oat project new --scope local` prints `Scaffold commit: skipped (--no-commit)`
|
|
370
|
-
even when you did not pass that flag.
|
|
371
|
-
- Piping `oat tools list` or `oat status` into `head` crashes with an
|
|
372
|
-
`Error: write EPIPE` stack trace.
|
|
373
369
|
|
|
374
370
|
## Not covered here
|
|
375
371
|
|
|
@@ -399,8 +395,7 @@ These are current behaviors as of version 0.3.14.
|
|
|
399
395
|
[Config and Local State](config-and-local-state.md).
|
|
400
396
|
- **Files you place at a view path yourself.** See
|
|
401
397
|
[Manifest and Drift](../provider-sync/manifest-and-drift.md).
|
|
402
|
-
-
|
|
403
|
-
2.31.
|
|
398
|
+
- **Git versions older than 2.31.**
|
|
404
399
|
|
|
405
400
|
## Related
|
|
406
401
|
|
|
@@ -209,15 +209,22 @@ explicitly save a report before asking another workflow to consume its path.
|
|
|
209
209
|
so use the slash or `$` form rather than relying on the agent to pick it. It
|
|
210
210
|
does not require a project name or an active-project pointer.
|
|
211
211
|
|
|
212
|
-
**Prerequisites:** A Git repository, the OAT CLI,
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
212
|
+
**Prerequisites:** A Git repository, the OAT CLI, the utility-pack dispatch
|
|
213
|
+
skills, and an installed `oat-codebase-mapper` provider projection. Before
|
|
214
|
+
changing knowledge on either a first generation or a refresh, the skill
|
|
215
|
+
resolves `oat-dispatch-subagents` and `subagent-orchestration`, then checks that
|
|
216
|
+
the active Claude, Codex, or Cursor provider can launch its mapper projection.
|
|
217
|
+
A missing dispatch skill reports the utility-pack install/update commands; a
|
|
218
|
+
missing mapper projection reports the workflows-pack commands or `oat sync`.
|
|
219
|
+
An unsupported host or declined authorization reports that limitation without
|
|
220
|
+
irrelevant install advice. Every failure stops before cleanup, thin-index
|
|
221
|
+
creation, or a write probe. Needs an active OAT project: no. If a knowledge
|
|
222
|
+
directory already exists, choose whether to refresh it or skip the run.
|
|
223
|
+
Refresh removes only regular Markdown files marked `oat_generated: true` and
|
|
224
|
+
regenerates the eight named outputs. Hand-written notes survive; an unmarked
|
|
225
|
+
expected-output collision stops the run before deletion so you can decide how
|
|
226
|
+
to preserve it. Symlinked knowledge directories and output collisions are
|
|
227
|
+
refused.
|
|
221
228
|
|
|
222
229
|
**Example scenario:** A new teammate needs to understand which packages own
|
|
223
230
|
the CLI, how shared configuration reaches applications, and which test
|
|
@@ -232,16 +239,13 @@ index is an onboarding and retrieval aid, not a declaration that all
|
|
|
232
239
|
architecture concerns have been fixed or that every future question is
|
|
233
240
|
answered.
|
|
234
241
|
|
|
235
|
-
**What it does without asking:** The
|
|
236
|
-
knowledge
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
Afterwards it records the run in `.oat/tracking.json` and regenerates the
|
|
243
|
-
`.oat/state.md` dashboard with `oat state refresh`; those two files are not
|
|
244
|
-
part of the commit. It does not push.
|
|
242
|
+
**What it does without asking:** The run resolves a usable mapper route before
|
|
243
|
+
changing knowledge and may ask once for authorization covering the write probe
|
|
244
|
+
and four mapper lanes. It offers read-only fallback only after a launched probe
|
|
245
|
+
verifies that writes are blocked. It preserves manual notes while preparing and
|
|
246
|
+
generating the eight owned outputs. It commits only the exact owned paths with
|
|
247
|
+
hooks enabled, leaving unrelated staged and unstaged work intact, then updates
|
|
248
|
+
the tracking dashboard without pushing.
|
|
245
249
|
|
|
246
250
|
**Expected output:** Eight files under `.oat/repo/knowledge/`:
|
|
247
251
|
`project-index.md`, `stack.md`, `architecture.md`, `structure.md`,
|
|
@@ -299,7 +299,13 @@ milestone's `plan` carrier, `oat_milestone_gates[mNN].plan`, written with
|
|
|
299
299
|
for a re-alignment amendment it is the only approval evidence. The implement
|
|
300
300
|
exit gate at milestone closeout writes `oat_milestone_gates[mNN].exit` (never
|
|
301
301
|
`oat_implement_exit_gate`, which goal uses only at terminal closeout). It runs
|
|
302
|
-
|
|
302
|
+
the configured command verbatim with `--review-scope final`, before the
|
|
303
|
+
milestone's integrated review, and runs again after queued fixes. Its own
|
|
304
|
+
Type `code`, Invocation `gate` Reviews row and artifact count as bookkeeping
|
|
305
|
+
only when the row's non-placeholder Reviewed Head equals the carrier's
|
|
306
|
+
`reviewed_head` and the artifact's project-relative path is under `reviews/`
|
|
307
|
+
(including `reviews/archived/`). That row never serves as the integrated review
|
|
308
|
+
or unlocks delivery fields, and no placeholder row is required before the gate runs.
|
|
303
309
|
`oat project delivery check` reports the exit carrier's freshness, and
|
|
304
310
|
`oat project delivery refresh` marks it stale when delivery evidence no longer
|
|
305
311
|
holds.
|
|
@@ -143,7 +143,9 @@ deliveries exist and registers only when
|
|
|
143
143
|
`oat project delivery check --subject <mNN|dNN>` reports `status: ok`. It
|
|
144
144
|
commits a `registering` registry entry before creating anything, then creates
|
|
145
145
|
the PR, or on resume attaches the single PR that `gh pr list` finds for the
|
|
146
|
-
head branch (more than one match stops at `oat-project-reconcile`).
|
|
146
|
+
head branch (more than one match stops at `oat-project-reconcile`). For a
|
|
147
|
+
stacked milestone, registration instead records `kind: stack` and attaches its
|
|
148
|
+
existing layer pull requests base to tip; it never creates a stack. It then
|
|
147
149
|
records the member, `status: open`, and `oat_milestone_status: delivered`, and
|
|
148
150
|
appends one structural project-log entry. Stale review or exit-gate evidence
|
|
149
151
|
stops before registration: for the active milestone the skill writes
|
|
@@ -190,10 +192,10 @@ generates or refreshes a missing or stale `summary.md` through
|
|
|
190
192
|
decision-record promotion also happen. It then writes the PR description,
|
|
191
193
|
pushes the current branch with `git push -u origin`, and runs
|
|
192
194
|
`gh pr create`. For a synced project, it also publishes the project artifacts
|
|
193
|
-
with `oat project push` before and after creating the PR.
|
|
194
|
-
|
|
195
|
-
whether to continue when the latest final review has
|
|
196
|
-
merges the PR.
|
|
195
|
+
with `oat project push` before and after creating the PR. When you do not pass
|
|
196
|
+
a PR title or base branch, it fills them from the defaults without asking. The
|
|
197
|
+
only question it asks is whether to continue when the latest final review has
|
|
198
|
+
not passed. It never merges the PR.
|
|
197
199
|
|
|
198
200
|
**Goal projects:** in a goal project this skill is the terminal delivery
|
|
199
201
|
registration owner, not a second project PR. It runs its own registration step
|
|
@@ -582,7 +584,8 @@ writes a PR description file, clears the active
|
|
|
582
584
|
project (or keeps it until an archive succeeds), commits the completion
|
|
583
585
|
bookkeeping, and pushes it. A yes to the PR question, or
|
|
584
586
|
`workflow.createPrOnComplete: true` when no PR is tracked, creates a new PR
|
|
585
|
-
against
|
|
587
|
+
against the base branch resolved from `git.defaultBranch` (default `main`), the
|
|
588
|
+
same way `oat-project-pr-final` resolves it. If a PR is already open, the skill updates its description
|
|
586
589
|
with `gh pr edit` when archiving or for a synced project. Archives keep no
|
|
587
590
|
`pr/` directory, so when archiving the skill carries the regenerated PR body in
|
|
588
591
|
a temporary file until the PR is created or updated; a run that resumes an
|
|
@@ -76,8 +76,7 @@ is ready.
|
|
|
76
76
|
|
|
77
77
|
The number of fix attempts after a failed review comes from
|
|
78
78
|
`oat_orchestration_retry_limit` in the project's `state.md` (default 2, range
|
|
79
|
-
0–5).
|
|
80
|
-
that flag, so passing it changes nothing.
|
|
79
|
+
0–5).
|
|
81
80
|
|
|
82
81
|
**Prerequisites:** Select an existing project with an approved, complete
|
|
83
82
|
`plan.md` whose readiness points to `oat-project-implement`. The lifecycle
|
|
@@ -569,8 +569,9 @@ worktree registrations before materializing or updating the current checkout.
|
|
|
569
569
|
|
|
570
570
|
Default execution needs the root-to-phase-agent depth. `agents.max_depth >= 2`
|
|
571
571
|
is useful capability for optional phase-agent nesting, but it is not a default
|
|
572
|
-
topology preflight requirement.
|
|
573
|
-
so recon or specialist fanout is available when justified
|
|
572
|
+
topology preflight requirement. When `agents.max_depth` is absent, sync adds
|
|
573
|
+
`2` so recon or specialist fanout is available when justified; an explicit
|
|
574
|
+
value is kept.
|
|
574
575
|
|
|
575
576
|
## Accepted Launches
|
|
576
577
|
|
|
@@ -612,7 +612,9 @@ from a first–last range. `oat-project-pr-progress` registers a delivery only
|
|
|
612
612
|
when `oat project delivery check --subject <mNN|dNN>` reports `status: ok`,
|
|
613
613
|
writing the `oat_deliveries` entry (`registering`) before it creates the pull
|
|
614
614
|
request so an interrupted run resumes by `gh pr list` instead of opening a
|
|
615
|
-
duplicate.
|
|
615
|
+
duplicate. For a stacked milestone, registration instead records `kind: stack`
|
|
616
|
+
and attaches its existing layer pull requests base to tip; it never creates a
|
|
617
|
+
stack.
|
|
616
618
|
|
|
617
619
|
**Freshness.** Evidence keeps the revision actually reviewed. Commits after it
|
|
618
620
|
count as bookkeeping only when they touch the project's tracking files in
|
|
@@ -531,7 +531,8 @@ root commits shared routing, registry, gate and acceptance records.
|
|
|
531
531
|
|
|
532
532
|
`oat_deliveries` entries carry `delivery_id` (`dNN`, unique), `milestone`, a
|
|
533
533
|
`scope` frozen on registration, the agreed `endpoint` (`open | merged`),
|
|
534
|
-
`kind: pr`, `status`
|
|
534
|
+
`kind: pr | stack`, `status`
|
|
535
|
+
(`registering | open | at_endpoint | superseded`), the
|
|
535
536
|
supersession links `superseded_by` and `covers_scope_of`, an additive
|
|
536
537
|
`corrects_delivery_id`, persisted `lookup` keys (`repository`, `head_branch`,
|
|
537
538
|
`head_sha_at_registration`), `members` (`url`, `base`, `reviewed_head`,
|
|
@@ -540,12 +541,26 @@ supersession links `superseded_by` and `covers_scope_of`, an additive
|
|
|
540
541
|
binding `exit_gate`, and the first observed `endpoint_attainment`.
|
|
541
542
|
|
|
542
543
|
- **Idempotent registration.** The registration owner writes the entry with
|
|
543
|
-
`status: registering` and its `lookup` keys
|
|
544
|
-
pull request, then records the URL and `status: open
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
`
|
|
544
|
+
`status: registering` and its `lookup` keys. For `kind: pr`, it commits
|
|
545
|
+
before creating the pull request, then records the URL and `status: open`; on
|
|
546
|
+
resume, `gh pr list --repo <repository> --head <head_branch> --state all
|
|
547
|
+
--json url,headRefOid` attaches exactly one match, creates once for zero
|
|
548
|
+
matches, and stops for more than one. For `kind: stack`, registration is
|
|
549
|
+
attach-only: the `registering` write records every existing member URL in
|
|
550
|
+
base-to-tip order, and resume re-checks each URL rather than creating a
|
|
551
|
+
stack. For a PR lookup, more than one stops and routes to
|
|
552
|
+
`oat-project-reconcile`; a missing, closed-unmerged or re-targeted stack
|
|
553
|
+
layer follows the same stop-and-route.
|
|
554
|
+
- **Stacked deliveries.** A stack records members base to tip. For a configured
|
|
555
|
+
code carrier bound to a reviewed head, the exit carrier is judged against
|
|
556
|
+
the tip member's observed head, and every lower member's observed head must
|
|
557
|
+
be an ancestor of the tip (`stack-order` otherwise). Null carriers and
|
|
558
|
+
unreviewed-resolution carriers (`no_gate`, `project_disabled`) are evaluated
|
|
559
|
+
exactly as for `kind: pr`; the integrated review remains per member.
|
|
560
|
+
Post-review bookkeeping lands on the tip member's branch, because a commit
|
|
561
|
+
on a lower layer changes upper members' bases and stales their review. A stack
|
|
562
|
+
that fails the configured-carrier order check is never repaired in place:
|
|
563
|
+
replace it through supersession with `covers_scope_of`.
|
|
549
564
|
- **Prerequisites.** Before registration the owner runs
|
|
550
565
|
`oat project delivery refresh --project <path>` and
|
|
551
566
|
`oat project delivery check --project <path> --subject <mNN|dNN> --json`; it
|
|
@@ -562,7 +577,8 @@ all --json url,headRefOid`: exactly one match is attached without creating a
|
|
|
562
577
|
share their member pull request (`gh` allows one open pull request per head
|
|
563
578
|
and base), so one member URL may appear in several deliveries. Coverage
|
|
564
579
|
judges each delivery's own frozen scope and bound evidence, never the shared
|
|
565
|
-
member alone; `oat_pr_url` and `oat_pr_status` project the latest member
|
|
580
|
+
member alone; `oat_pr_url` and `oat_pr_status` project the latest member,
|
|
581
|
+
which is the tip member for a stack.
|
|
566
582
|
- **Evidence capture.** The exit-gate result accepted for the delivery is
|
|
567
583
|
persisted as its `exit_gate` with the delivery evidence; overwriting the
|
|
568
584
|
milestone's working carrier for a correction never relabels another
|
|
@@ -600,7 +616,14 @@ changes only permitted bookkeeping:
|
|
|
600
616
|
the evidence being recorded or archived, and, for a delivery whose member
|
|
601
617
|
pull request is shared (12.7, Shared members), the review artifacts recorded
|
|
602
618
|
for the deliveries that share it; each delivery is still judged on its own
|
|
603
|
-
frozen scope, reviewed revisions and `exit_gate`.
|
|
619
|
+
frozen scope, reviewed revisions and `exit_gate`. The artifact of a Reviews
|
|
620
|
+
row with Type `code`, Invocation `gate`, and a non-placeholder Reviewed Head
|
|
621
|
+
equal to the judged carrier's `reviewed_head` is also admitted in evidence
|
|
622
|
+
scopes built for that carrier (its review and exit evaluations), provided
|
|
623
|
+
its project-relative artifact path is under `reviews/` (including
|
|
624
|
+
`reviews/archived/`). The gate row is never integrated-review evidence and
|
|
625
|
+
its artifact never joins a delivery's own review-artifact set, so it cannot
|
|
626
|
+
unlock set-once fields. `summary.md` is derived
|
|
604
627
|
institutional memory, never the authority for outcomes, approach,
|
|
605
628
|
constraints, decisions or endpoint, which live in the brief; any change to
|
|
606
629
|
it is bookkeeping. Path membership alone is insufficient for the other
|
|
@@ -5,7 +5,7 @@ disable-model-invocation: true
|
|
|
5
5
|
user-invocable: true
|
|
6
6
|
allowed-tools: Read, Write, Bash, AskUserQuestion
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.7.
|
|
8
|
+
version: 1.7.19
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Complete Project
|
|
@@ -1139,11 +1139,17 @@ carries the same Steps 0.5 through 4 contract:
|
|
|
1139
1139
|
1. **Archive residual review artifacts** — already handled in Step 4.
|
|
1140
1140
|
2. **Validate required artifacts** — read available project artifacts (`plan.md`, `implementation.md`, `spec.md`, `design.md`, `discovery.md`) based on workflow mode from `state.md`.
|
|
1141
1141
|
3. **Check final review status** — already checked in Step 3.1. Use the result, don't re-check.
|
|
1142
|
-
4. **Collect project summary** — if `summary.md` exists (from Step 3.5), use it as the primary source for the PR description's Summary section (per `oat-project-pr-final` Step 3.0). Read remaining artifacts and collect git context:
|
|
1142
|
+
4. **Collect project summary** — if `summary.md` exists (from Step 3.5), use it as the primary source for the PR description's Summary section (per `oat-project-pr-final` Step 3.0). Read remaining artifacts and collect git context. Resolve `BASE_BRANCH` here with the same chain the final PR skill uses (this skill takes no base argument); Step 11 reuses it:
|
|
1143
1143
|
|
|
1144
1144
|
```bash
|
|
1145
1145
|
BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
1146
|
-
|
|
1146
|
+
# Resolution chain: OAT config > git remote > fallback
|
|
1147
|
+
BASE_BRANCH=$(oat config get git.defaultBranch 2>/dev/null || true)
|
|
1148
|
+
if [ -z "$BASE_BRANCH" ]; then
|
|
1149
|
+
BASE_BRANCH=$(git rev-parse --abbrev-ref origin/HEAD 2>/dev/null | sed 's|origin/||' || true)
|
|
1150
|
+
fi
|
|
1151
|
+
BASE_BRANCH="${BASE_BRANCH:-main}"
|
|
1152
|
+
MERGE_BASE=$(git merge-base "origin/$BASE_BRANCH" HEAD 2>/dev/null || git merge-base "$BASE_BRANCH" HEAD 2>/dev/null || echo "")
|
|
1147
1153
|
|
|
1148
1154
|
if [[ -n "$MERGE_BASE" ]]; then
|
|
1149
1155
|
git log --oneline "${MERGE_BASE}..HEAD"
|
|
@@ -1628,17 +1634,21 @@ Steps:
|
|
|
1628
1634
|
description artifact at `PR_DESCRIPTION_PATH`.
|
|
1629
1635
|
2. For the non-archive artifact, write the stripped body to a temporary file (remove all lines from the opening `---` through the closing `---`, inclusive).
|
|
1630
1636
|
3. Verify the temp file does not start with YAML frontmatter keys.
|
|
1631
|
-
4.
|
|
1637
|
+
4. Reuse the `BASE_BRANCH` resolved in Step 7 item 4. A Step 3.65 resume
|
|
1638
|
+
route that skipped Step 7 has not set it: run that step's resolution block
|
|
1639
|
+
first. Never create the PR with an empty base.
|
|
1640
|
+
5. Create the PR from the branch already pushed in Step 10:
|
|
1632
1641
|
|
|
1633
1642
|
```bash
|
|
1634
|
-
|
|
1643
|
+
: "${BASE_BRANCH:?BASE_BRANCH is unset; run the Step 7 base-branch resolution first}"
|
|
1644
|
+
gh pr create --base "$BASE_BRANCH" --title "{title}" --body-file "$TMP_BODY"
|
|
1635
1645
|
```
|
|
1636
1646
|
|
|
1637
|
-
|
|
1647
|
+
6. Clean up the temp file, including `PR_BODY_FILE`, once the PR is created.
|
|
1638
1648
|
When `gh` is missing or `gh pr create` fails, keep it and report its path
|
|
1639
1649
|
in Step 12.
|
|
1640
1650
|
|
|
1641
|
-
Do not assume `gh` is installed; if missing, instruct manual PR creation using the file contents.
|
|
1651
|
+
Do not assume `gh` is installed; if missing, instruct manual PR creation using the file contents and note the resolved base branch (`BASE_BRANCH`).
|
|
1642
1652
|
|
|
1643
1653
|
### Step 11.5: Sync Open-PR Description on GitHub (Conditional)
|
|
1644
1654
|
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
name: oat-project-implement
|
|
3
3
|
description: Use when the user explicitly asks to implement an approved OAT plan — e.g. "implement the plan", "start implementation", or accepts a previously offered implementation step. Do NOT auto-invoke just because plan.md is ready. Dispatches one phase implementer per phase, owns independent phase review and bounded fix routing, and supports plan-declared worktree-isolated parallel phases.
|
|
4
4
|
oat_gateable: true
|
|
5
|
-
argument-hint: '[--
|
|
5
|
+
argument-hint: '[--dry-run]'
|
|
6
6
|
disable-model-invocation: false
|
|
7
7
|
user-invocable: true
|
|
8
8
|
allowed-tools: Read, Write, Bash(git:*), Bash(oat:*), Bash(oat project log:*), Glob, Grep, AskUserQuestion, Task
|
|
9
9
|
metadata:
|
|
10
|
-
version: 2.3.
|
|
10
|
+
version: 2.3.24
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# Implementation Phase
|
|
@@ -59,10 +59,20 @@ recovery owner for that carrier:
|
|
|
59
59
|
1. **Exit gate before the integrated review.** Resolve and run the configured
|
|
60
60
|
implement exit gate exactly as Step 14 does (`oat gate resolve
|
|
61
61
|
oat-project-implement --project "$PROJECT_PATH" --json`, canonical
|
|
62
|
-
`oat --json gate review`, receive eligibility, `onFailure`, `maxAttempts`)
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
`oat --json gate review`, receive eligibility, `onFailure`, `maxAttempts`).
|
|
63
|
+
Run the configured command verbatim, including its
|
|
64
|
+
`--review-scope final`; do not rewrite that argument to the milestone's
|
|
65
|
+
phase IDs. The carrier subject still records the milestone's ordered phase
|
|
66
|
+
set. The goal ladder exception applies: this gate precedes the integrated
|
|
67
|
+
delivery review, and queued fixes require it to run again. The gate's own
|
|
68
|
+
Reviews row is admitted as carrier bookkeeping only when it has Type
|
|
69
|
+
`code`, Invocation `gate`, and a non-placeholder Reviewed Head equal to the
|
|
70
|
+
carrier's `reviewed_head`; its non-placeholder artifact is admitted with
|
|
71
|
+
that row only when its project-relative path is under `reviews/` (including
|
|
72
|
+
`reviews/archived/`). This row never serves as the milestone or delivery
|
|
73
|
+
integrated review and never joins a delivery's own evidence artifacts, so
|
|
74
|
+
it cannot unlock set-once delivery fields. Do not create a placeholder
|
|
75
|
+
Reviews row before the gate runs.
|
|
66
76
|
2. **Write the milestone carrier.** Record `oat_milestone_gates[mNN].exit`
|
|
67
77
|
with the gate approval record core, `resolution` (`configured`, `no_gate`,
|
|
68
78
|
or `project_disabled`), `subject: { kind: code, scope: [ordered phase
|
|
@@ -5,7 +5,7 @@ disable-model-invocation: false
|
|
|
5
5
|
user-invocable: true
|
|
6
6
|
allowed-tools: Read, Write, Bash(awk:*), Bash(gh:*), Bash(git:*), Bash(mktemp:*), Bash(oat:*), Bash(rm:*), Glob, Grep, AskUserQuestion
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.6.
|
|
8
|
+
version: 1.6.13
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Project PR (Final)
|
|
@@ -90,7 +90,7 @@ oat-project-pr-final title="feat: add review loop"
|
|
|
90
90
|
|
|
91
91
|
### Without arguments
|
|
92
92
|
|
|
93
|
-
Run the `oat-project-pr-final` skill and it
|
|
93
|
+
Run the `oat-project-pr-final` skill and it fills these from the defaults below without asking, then pushes the branch and creates the PR:
|
|
94
94
|
|
|
95
95
|
- PR title
|
|
96
96
|
- default when a known ticket is associated: `[{TICKET-NUM}] {Descriptive Project Title}`
|