@open-agent-toolkit/cli 0.3.13 → 0.3.15

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 (124) 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/markdown-features.md +38 -0
  5. package/assets/docs/contributing/skills.md +64 -2
  6. package/assets/docs/contributing/smoke-testing.md +23 -16
  7. package/assets/docs/contributing/updating-model-guidance.md +2 -2
  8. package/assets/docs/contributing/verifying-cursor-pins.md +1 -1
  9. package/assets/docs/docs-tooling/add-docs-to-a-repo.md +32 -0
  10. package/assets/docs/docs-tooling/agent-instructions.md +131 -0
  11. package/assets/docs/docs-tooling/index.md +1 -0
  12. package/assets/docs/docs-tooling/meta.json +1 -1
  13. package/assets/docs/docs-tooling/workflows.md +338 -2
  14. package/assets/docs/{cli-utilities → getting-started}/bootstrap.md +60 -5
  15. package/assets/docs/getting-started/concepts.md +120 -0
  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 +142 -14
  20. package/assets/docs/index.md +47 -48
  21. package/assets/docs/meta.json +6 -7
  22. package/assets/docs/provider-sync/commands.md +25 -2
  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 +32 -1
  26. package/assets/docs/provider-sync/manifest-and-drift.md +92 -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 +33 -33
  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/file-locations.md +4 -1
  34. package/assets/docs/reference/index.md +13 -1
  35. package/assets/docs/reference/meta.json +7 -1
  36. package/assets/docs/reference/oat-directory-structure.md +1 -1
  37. package/assets/docs/{workflows/projects/artifacts.md → reference/project-artifacts.md} +4 -4
  38. package/assets/docs/{workflows/projects/state-machine.md → reference/project-state-machine.md} +28 -21
  39. package/assets/docs/{workflows/projects/repo-analysis.md → reference/repository-pr-comments.md} +2 -2
  40. package/assets/docs/reference/troubleshooting.md +125 -10
  41. package/assets/docs/reference/what-oat-writes.md +410 -0
  42. package/assets/docs/skills/brainstorm.md +77 -0
  43. package/assets/docs/skills/diagnostics.md +56 -0
  44. package/assets/docs/{workflows/skills → skills}/explainer-kit.md +121 -0
  45. package/assets/docs/skills/index.md +416 -0
  46. package/assets/docs/{workflows/skills → skills}/meta.json +4 -2
  47. package/assets/docs/{workflows/skills → skills}/recon.md +49 -0
  48. package/assets/docs/skills/repo-improve.md +254 -0
  49. package/assets/docs/skills/research.md +237 -0
  50. package/assets/docs/skills/session-closeout.md +61 -0
  51. package/assets/docs/workflows/advanced/autonomy.md +344 -0
  52. package/assets/docs/workflows/{projects → advanced}/cursor-cloud.md +69 -1
  53. package/assets/docs/workflows/{projects → advanced}/dispatch-ceiling.md +163 -18
  54. package/assets/docs/workflows/{projects → advanced}/evidence-layers.md +20 -13
  55. package/assets/docs/workflows/advanced/index.md +19 -0
  56. package/assets/docs/workflows/advanced/meta.json +13 -0
  57. package/assets/docs/workflows/{projects → advanced}/orchestration-model.md +108 -35
  58. package/assets/docs/workflows/{projects → advanced}/programmatic-execution.md +4 -4
  59. package/assets/docs/{cli-utilities → workflows/advanced}/workflow-gates.md +162 -8
  60. package/assets/docs/workflows/advanced/worktree-bootstrap.md +83 -0
  61. package/assets/docs/workflows/approvals-and-automation.md +261 -0
  62. package/assets/docs/workflows/backlog-and-planning/backlog-lifecycle.md +348 -0
  63. package/assets/docs/workflows/backlog-and-planning/index.md +13 -0
  64. package/assets/docs/workflows/backlog-and-planning/meta.json +4 -0
  65. package/assets/docs/workflows/backlog-and-planning/remote-project-management.md +303 -0
  66. package/assets/docs/workflows/choose-workflow.md +114 -0
  67. package/assets/docs/workflows/ideas/index.md +3 -3
  68. package/assets/docs/workflows/ideas/lifecycle.md +225 -1
  69. package/assets/docs/workflows/index.md +11 -62
  70. package/assets/docs/workflows/meta.json +10 -2
  71. package/assets/docs/workflows/projects/closeout/closeout-skills.md +538 -0
  72. package/assets/docs/workflows/projects/closeout/index.md +14 -0
  73. package/assets/docs/workflows/projects/closeout/meta.json +4 -0
  74. package/assets/docs/workflows/projects/{pr-flow.md → closeout/pr-flow.md} +1 -1
  75. package/assets/docs/workflows/projects/{retro.md → closeout/retro.md} +1 -1
  76. package/assets/docs/workflows/projects/execution/execution-skills.md +258 -0
  77. package/assets/docs/workflows/projects/{implementation-execution.md → execution/implementation-execution.md} +52 -38
  78. package/assets/docs/workflows/projects/execution/index.md +15 -0
  79. package/assets/docs/workflows/projects/execution/meta.json +9 -0
  80. package/assets/docs/workflows/projects/execution/picking-up-projects.md +376 -0
  81. package/assets/docs/{cli-utilities → workflows/projects/execution}/project-log.md +1 -1
  82. package/assets/docs/workflows/projects/index.md +38 -49
  83. package/assets/docs/workflows/projects/lifecycle.md +159 -74
  84. package/assets/docs/workflows/projects/meta.json +2 -23
  85. package/assets/docs/workflows/projects/{design-modes.md → planning/design-modes.md} +29 -0
  86. package/assets/docs/workflows/projects/planning/hill-checkpoints.md +167 -0
  87. package/assets/docs/workflows/projects/planning/index.md +16 -0
  88. package/assets/docs/workflows/projects/planning/meta.json +10 -0
  89. package/assets/docs/workflows/projects/planning/planning-skills.md +381 -0
  90. package/assets/docs/workflows/projects/{splitting.md → planning/splitting.md} +3 -3
  91. package/assets/docs/workflows/projects/planning/starting-projects.md +511 -0
  92. package/assets/docs/workflows/projects/{reviews.md → reviews/index.md} +51 -5
  93. package/assets/docs/workflows/projects/reviews/meta.json +4 -0
  94. package/assets/docs/workflows/projects/reviews/review-flavors.md +650 -0
  95. package/assets/docs/workflows/projects/{reviewing-oat-prs.md → reviews/reviewing-oat-prs.md} +3 -3
  96. package/assets/docs/workflows/waves/index.md +12 -0
  97. package/assets/docs/workflows/waves/meta.json +4 -0
  98. package/assets/docs/workflows/waves/wave-workflows.md +206 -0
  99. package/assets/public-package-versions.json +4 -4
  100. package/assets/skills/oat-docs/SKILL.md +19 -19
  101. package/assets/skills/oat-docs-analyze/SKILL.md +1 -1
  102. package/assets/skills/oat-docs-apply/SKILL.md +1 -1
  103. package/assets/skills/oat-docs-authoring/SKILL.md +1 -1
  104. package/assets/skills/oat-docs-bootstrap/SKILL.md +1 -1
  105. package/assets/skills/oat-doctor/SKILL.md +25 -25
  106. package/assets/templates/docs-app-fuma/app/[[...slug]]/page.tsx +14 -2
  107. package/assets/templates/docs-app-fuma/app/globals.css +1 -0
  108. package/dist/release/public-package-contract.js +1 -1
  109. package/package.json +2 -2
  110. package/assets/docs/cli-utilities/backlog-lifecycle.md +0 -80
  111. package/assets/docs/cli-utilities/index.md +0 -74
  112. package/assets/docs/cli-utilities/meta.json +0 -13
  113. package/assets/docs/cli-utilities/remote-project-management.md +0 -191
  114. package/assets/docs/guide/concepts.md +0 -88
  115. package/assets/docs/guide/index.md +0 -31
  116. package/assets/docs/guide/meta.json +0 -4
  117. package/assets/docs/quickstart.md +0 -88
  118. package/assets/docs/workflows/projects/autonomy.md +0 -196
  119. package/assets/docs/workflows/projects/hill-checkpoints.md +0 -93
  120. package/assets/docs/workflows/projects/picking-up-projects.md +0 -124
  121. package/assets/docs/workflows/projects/review-flavors.md +0 -138
  122. package/assets/docs/workflows/skills/index.md +0 -184
  123. package/assets/docs/workflows/skills/repo-improve.md +0 -89
  124. package/assets/docs/workflows/wave-workflows.md +0 -77
@@ -11,17 +11,52 @@ the work, then `oat gate review` dispatches a normal OAT review to another
11
11
  runtime such as Codex or Claude and maps blocking review findings to the gate
12
12
  exit status.
13
13
 
14
+ **In short:**
15
+
16
+ - **What this page is for:** setting up a _gate_, an extra review (or other
17
+ command) that a lifecycle skill runs as its last step, usually by a second
18
+ agent CLI such as Codex, Claude Code, or Cursor. No gate is configured by
19
+ default.
20
+ - **Who needs it:** a team lead setting a review policy, or anyone who wants a
21
+ second model to check plans or code. If you have only one agent CLI
22
+ installed, you can skip gates.
23
+ - **Know first:** every gate needs an explicit `--on-failure` (`block`,
24
+ `prompt`, or `warn`). The reviewer prefers a different model family but falls
25
+ back to the best available reviewer with only a warning, so check
26
+ `diversity.achieved` in the gate result. A shared gate guides agents; a
27
+ teammate can still turn it off on their own machine.
28
+ - **Decide:** [Choosing gate posture](#choosing-gate-posture),
29
+ [When the gate finds blocking problems](#when-the-gate-finds-blocking-problems),
30
+ and [How independent the reviewer must be](#how-independent-the-reviewer-must-be).
31
+ The sections between here and there are the detailed contract.
32
+
33
+ The shortest way to add an independent review to the implement step, shared
34
+ with your team through the committed `.oat/config.json`, is the same command as
35
+ in
36
+ [Approvals and Automation](../approvals-and-automation.md#a-person-approves-the-plan-and-the-final-result-and-an-independent-model-reviews-the-code):
37
+
38
+ ```bash
39
+ oat gate set oat-project-implement \
40
+ --command 'oat --json gate review --project "$PROJECT_PATH" --review-type code --review-scope final "Use oat-project-review-provide code final for the declared project"' \
41
+ --on-failure block \
42
+ --layer shared
43
+ ```
44
+
45
+ Type it exactly as shown; `$PROJECT_PATH` stays literal, because the skill sets
46
+ it when the gate runs. Commit `.oat/config.json` afterwards.
47
+
14
48
  `oat gate cross-provider-exec` remains the generic child-status executor. It
15
49
  selects an exec target, runs the prompt, and exits with the child process
16
50
  status. Use `oat gate review` when the command is specifically an OAT review
17
51
  gate that should inspect the produced review artifact.
18
52
 
19
- :::note Release note: default avoidance changed
20
- Gate dispatch now defaults to `--avoid same-family`, not `same-runtime`.
21
- For multi-family providers such as Cursor, this prevents a gate from reviewing
22
- with the same model family that produced the work. Use `--avoid none` only when
23
- you intentionally allow same-family review.
24
- :::
53
+ > [!NOTE]
54
+ > **Release note: default avoidance changed.**
55
+ > Gate dispatch now defaults to `--avoid same-family`, not `same-runtime`.
56
+ > For multi-family providers such as Cursor, this prefers a different model
57
+ > family, but falls back to the best available target with a recorded warning
58
+ > when diversity is unavailable. Inspect `diversity.achieved`; use `--avoid none` only when
59
+ > you intentionally allow same-family review.
25
60
 
26
61
  ## Gate config
27
62
 
@@ -205,7 +240,7 @@ generation stale again, and a malformed waiver fails closed. An interactive
205
240
  implement run offers the waiver before it persists `stale`; an operator can
206
241
  also give it when resuming implementation after `oat-project-next` reports
207
242
  stale state. See
208
- [Implementation Execution](../workflows/projects/implementation-execution.md).
243
+ [Implementation Execution](../projects/execution/implementation-execution.md).
209
244
 
210
245
  Only an artifact with `oat_review_invocation: gate` and the matching
211
246
  `oat_gate_run_id` can satisfy configured-gate provenance. A normal final
@@ -405,7 +440,7 @@ status.
405
440
  `oat-project-implement` uses `oat gate review` per phase when a project opts in
406
441
  via the `oat_phase_review_gate` plan frontmatter — a non-pausing gate that runs
407
442
  after each selected phase's standard reviewer passes. See
408
- [Reviews → Phase review gate](../workflows/projects/reviews.md#phase-review-gate)
443
+ [Reviews → Phase review gate](../projects/reviews/index.md#phase-review-gate)
409
444
  for the frontmatter contract and how passing versus blocking gates are
410
445
  dispositioned.
411
446
 
@@ -1058,3 +1093,122 @@ starts and then fails, OAT does not try another target after dispatch. If no
1058
1093
  different-family target is available, OAT warns, records the degraded achieved
1059
1094
  level, and runs the best available target rather than pretending diversity was
1060
1095
  achieved.
1096
+
1097
+ ## Choosing gate posture
1098
+
1099
+ A gate is an extra review that a lifecycle skill runs as its last step: the
1100
+ skill hands the work to a second agent CLI (the reviewer) and turns its findings
1101
+ into a pass or a fail. No gate is configured by default. A gate on a planning
1102
+ skill reviews the plan before any code is written; a gate on
1103
+ `oat-project-implement` reviews the finished code before closeout. Either one
1104
+ needs a working reviewer CLI on the machine and adds time to every run.
1105
+
1106
+ `oat gate set` writes to your user config unless you pass `--layer`. A gate set
1107
+ with `--layer shared` is committed with the repository and wins over a
1108
+ user-level gate for the same skill. It does not bind every machine: a
1109
+ repo-local setting, stored in the gitignored `.oat/config.local.json`,
1110
+ overrides the shared gate on that machine (for example
1111
+ `oat gate set <skill> --disable --layer local`), and a project can disable a
1112
+ configured gate in its own `state.md` (see
1113
+ [Per-project gate overrides](#per-project-gate-overrides)). See
1114
+ [Can a teammate weaken a team rule?](../approvals-and-automation.md#can-a-teammate-weaken-a-team-rule).
1115
+
1116
+ - If you are a solo developer and want speed, or you have only one agent CLI
1117
+ installed, skip gates.
1118
+ - If you want a second model to check every plan before coding, gate the
1119
+ planning skills.
1120
+ - If your team is rolling out a review policy, set the gate with
1121
+ `--layer shared` and commit it.
1122
+
1123
+ ### When the gate finds blocking problems
1124
+
1125
+ | `onFailure` | Choose it when | What you give up |
1126
+ | ----------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------- |
1127
+ | `block` | Findings must be fixed | Time: the agent fixes and reruns, then hands over to a person and leaves the skill incomplete if still failing |
1128
+ | `prompt` | A person should decide each case | Unattended runs: with no answer, the gate stays blocked |
1129
+ | `warn` | The review is advisory only | Enforcement: the failure is recorded and the skill continues |
1130
+
1131
+ Every gate needs an explicit `onFailure`; there is no default.
1132
+ `maxAttempts` defaults to two runs in total: the first run plus one
1133
+ fix-and-rerun. A reviewer that fails to start, times out without producing a
1134
+ review, or produces an invalid result has not reviewed anything, so treat that
1135
+ as a failed gate, never as a pass.
1136
+
1137
+ How the skills handle that case differs:
1138
+
1139
+ - `oat-project-implement` and `oat-project-lite` keep it blocked whatever
1140
+ `onFailure` says, so even a `warn` gate does not let them continue.
1141
+ - `oat-project-plan`, `oat-project-quick-start`, and `oat-project-import-plan`
1142
+ apply your `onFailure` setting to any failed gate run, including one where no
1143
+ review happened. With `block`, they retry and then hand the problem to you,
1144
+ as for findings. With `prompt`, they ask you. With `warn`, they record the
1145
+ failure and finish planning, so the plan can be marked ready although no
1146
+ reviewer looked at it.
1147
+
1148
+ So if you put a `warn` gate on a planning skill, check the outcome before you
1149
+ run `/oat-project-implement`. The gate's JSON result has a `status` field, and
1150
+ each `oat gate review` run that starts a reviewer also adds a line to the
1151
+ project's `project-log.md` ending in `status=…` and `run=…` (it skips this only when `workflow.projectLog` is `false` and the
1152
+ project has no `project-log.md` yet): `status=ok` means the review ran and passed; `status=review_failed`,
1153
+ `artifact_validation_failed`, or `targeting_correlation_failed` means no usable
1154
+ review was produced. If you need a planning gate that cannot be skipped this
1155
+ way, use `block`.
1156
+
1157
+ - If the work is high-risk (production, security, or data-migration code),
1158
+ choose `block`.
1159
+ - If a maintainer is available and should decide whether to accept findings,
1160
+ choose `prompt`.
1161
+ - If the gate runs in CI or a script, choose `block` to enforce it or `warn` to
1162
+ keep it advisory. Never choose `prompt`, because nobody can answer it.
1163
+
1164
+ ### How independent the reviewer must be
1165
+
1166
+ The `--avoid` option in the gate command controls which reviewers are excluded.
1167
+ A model family is the maker or line of model, such as Claude versus GPT; a
1168
+ runtime is the agent CLI, such as Claude Code, Codex, or Cursor.
1169
+
1170
+ > [!WARNING]
1171
+ > The default, `same-family`, falls back to the best available reviewer when no
1172
+ > reviewer from a different model family is available, and only records a
1173
+ > warning in the result. That fallback can pick the same agent CLI that did
1174
+ > the work. Before relying on a gate for an independent review, check
1175
+ > `diversity.achieved` in the gate result: `different-family` means the
1176
+ > reviewer really was from another family. A reviewer that cannot start, or a
1177
+ > review that cannot be validated, is different: that blocks the gate. See
1178
+ > [Independence: what blocks and what falls back](../projects/reviews/review-flavors.md#independence-what-blocks-and-what-falls-back).
1179
+
1180
+ | `--avoid` | Choose it when | What you give up |
1181
+ | ----------------------- | -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
1182
+ | `same-family` (default) | You want a different model family when one exists | A guarantee, because of the fallback above |
1183
+ | `same-runtime` | You need the reviewer to use a different agent CLI | Runs on machines with only one CLI. On a host OAT does not recognize, such as CI, it excludes nothing. It never checks the model family |
1184
+ | `none` | You knowingly accept a review from the same family | Independence |
1185
+
1186
+ - For most teams, including mixed Claude Code, Cursor, and Codex teams, keep
1187
+ `same-family`.
1188
+ - For a high-risk change, keep `same-family` and check `diversity.achieved` in
1189
+ every gate result. For a hard guarantee in a manual run, pin a known
1190
+ independent reviewer with `--target`. Stored lifecycle gate commands refuse
1191
+ `--target`.
1192
+ - Choose `none` only when you deliberately want a same-family review, and do not
1193
+ present it as independent evidence.
1194
+
1195
+ ### Reviewer setup and time budget
1196
+
1197
+ An exec target is a saved command that starts a reviewer CLI, such as
1198
+ `claude -p`. The built-in targets deliberately leave out the provider flags that
1199
+ skip tool-approval prompts, so an unattended reviewer can stall on such a
1200
+ prompt. On a trusted machine that runs gates unattended, add your own target
1201
+ with the permissions it needs, for example with `--layer user`.
1202
+
1203
+ A code review of a whole phase, a phase range, or the final result may run for
1204
+ 30 minutes by default; other reviews get 15 minutes. OAT uses the first timeout
1205
+ it finds: the command's `--timeout-ms`, then the target's `timeoutMs`, then
1206
+ `workflow.gateTimeouts`, then the `OAT_GATE_EXEC_TIMEOUT_MS` environment
1207
+ variable, then the built-in default.
1208
+
1209
+ - If one reviewer keeps timing out on large final reviews, raise that target's
1210
+ `timeoutMs` rather than slowing every review.
1211
+
1212
+ A timeout that leaves no valid review artifact is a failed review, never a pass.
1213
+ If the reviewer did write a valid artifact after the timeout, OAT uses it and
1214
+ reports it as a late completion.
@@ -0,0 +1,83 @@
1
+ ---
2
+ title: Worktree bootstrap
3
+ description: 'Create or validate an isolated Git worktree and run the repository-specific readiness checks before implementation.'
4
+ ---
5
+
6
+ # Worktree bootstrap
7
+
8
+ Use a separate worktree when a task needs its own branch and checkout. Bootstrap
9
+ prepares that checkout. It does not approve a plan, implement code, or prove that
10
+ another worktree's tests pass here.
11
+
12
+ Examples beginning with `/` invoke an agent skill. Providers that use `$` skill
13
+ syntax use `$oat-worktree-bootstrap` instead. These are not terminal commands.
14
+ For host-managed worktrees, follow the host's conventions and validate the
15
+ existing checkout rather than creating a duplicate to normalize its path.
16
+
17
+ Terms used on this page:
18
+
19
+ - **Worktree:** a separate Git checkout of the same repository, with its own
20
+ folder and branch, created with `git worktree add`.
21
+ - **Active project:** the OAT project your checkout currently points to,
22
+ stored as `activeProject` in `.oat/config.local.json`.
23
+ - **Synced project:** a project whose artifacts live on a separate Git ref
24
+ instead of on your feature branch; `oat project pull` brings them into a
25
+ checkout.
26
+
27
+ ## oat-worktree-bootstrap
28
+
29
+ **Invocation:** Name the branch for a new worktree and optionally choose its base.
30
+ Without `--base`, a new branch starts from `origin/main`. `--path` overrides the
31
+ worktree root, not the final branch-specific directory. The skill runs only
32
+ when you invoke it by name.
33
+
34
+ ```text
35
+ /oat-worktree-bootstrap export-filter --base origin/main
36
+ ```
37
+
38
+ To prepare the current already-registered worktree instead:
39
+
40
+ ```text
41
+ /oat-worktree-bootstrap --existing
42
+ ```
43
+
44
+ **Prerequisites:** Needs an active OAT project: no, but the skill uses one if
45
+ it is set. You need a Git repository, its required toolchain, and OAT files in
46
+ `.oat/` and `.agents/`. Creation requires a branch name and a repository clean
47
+ enough for the operation. If the active-project pointer exists but is invalid,
48
+ the skill asks you to clear or open the intended project rather than rewrite
49
+ it.
50
+
51
+ **What it does without asking:** the skill creates the worktree with
52
+ `git worktree add`, which also creates the branch when it does not exist yet.
53
+ It copies `.oat/config.local.json` into the new worktree when the worktree has
54
+ none, copies configured local-only paths with `oat local sync`, and pulls an
55
+ active synced project with `oat project pull`. It then runs the repository's
56
+ setup command (for example, dependency installation) and its readiness and
57
+ baseline checks, stating each selected command before running it. Apart from
58
+ the invalid-pointer question above, it asks before continuing only when the
59
+ baseline check fails;
60
+ if you choose to proceed anyway and an active project has `implementation.md`,
61
+ it appends a timestamped baseline-failure note there.
62
+
63
+ **Example scenario:** You need to implement an export filter without mixing its
64
+ changes into a reporting branch. Bootstrap creates the feature worktree at the
65
+ chosen base, carries safe local context, and runs that repository's setup and
66
+ baseline checks. If Orca or another host already created the checkout, choose
67
+ `--existing` to validate and initialize that same worktree.
68
+
69
+ **Expected output:** The reported checkout has the intended branch and path,
70
+ bootstrap results, readiness status, and a next action. Root selection follows
71
+ the explicit `--path`, environment, configured root, then documented directory
72
+ precedence. Repository-local roots must be Git-ignored before creation.
73
+
74
+ Local config copies only when the destination is absent. Configured local paths
75
+ are synchronized, and active synced project context is pulled when present.
76
+ Setup comes from repository instructions and manifests, not an assumed package
77
+ manager. Baseline failures require a disposition. Setup failure or a dirty
78
+ post-bootstrap worktree cannot be reported as ready.
79
+
80
+ **Next step:** Review the actual readiness result, then use
81
+ `oat-project-implement` for an approved tracked plan. Without an active project,
82
+ choose a [project entry workflow](../projects/planning/starting-projects.md)
83
+ before tracked implementation.
@@ -0,0 +1,261 @@
1
+ ---
2
+ title: Approvals and Automation
3
+ description: Where a person approves in each OAT workflow mode, what runs without asking, how many agent runs a project starts, and which controls are advisory rather than enforced.
4
+ ---
5
+
6
+ # Where people approve, and what runs automatically
7
+
8
+ This page shows where a person approves work in each OAT workflow mode, what
9
+ an agent does without asking, and how many agent runs a project starts. It also
10
+ says which team settings a developer can change on their own machine, and links
11
+ to the detail.
12
+
13
+ ## At a glance
14
+
15
+ A HiLL (human-in-the-loop lifecycle) checkpoint is a point where the agent
16
+ stops and waits for a person to approve before it continues.
17
+
18
+ | Mode | A person approves before code is written | Pauses during implementation | Reviews that run automatically | At the end | Never |
19
+ | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------- |
20
+ | No project | You direct each step yourself | None | None; run `oat-review-provide` when you want a review | OAT opens no pull request | Not applicable |
21
+ | Lite | Once: the requirements and the single-phase plan | None | Plan review, phase review, final review | Opens a pull request by itself; no setting removes this step | Merges a pull request |
22
+ | Quick | You confirm the requirements (or the lightweight design). No plan-approval prompt: the plan is marked ready after an automatic review | First run lists the phases and asks where to stop; suggested: after every phase | Plan review, a review after every phase, final review | Opens a pull request by itself only if `workflow.postImplementSequence` asks | Merges a pull request |
23
+ | Spec-driven | Discovery, then the requirements and design. Planning asks you in chat to confirm the task breakdown, but no plan approval is recorded; the plan is marked ready after an automatic review | Same as quick | Same as quick | Same as quick | Merges a pull request |
24
+ | Imported plan | No approval step; OAT normalizes your plan and reviews it automatically | Same as quick | Same as quick | Same as quick | Merges a pull request |
25
+ | Autonomous run | None; it answers its own questions and stops only at defined boundaries | None; it approves the final checkpoint itself after a passing final review | All of the above, plus a review at every checkpoint | Opens a pull request by default | Merges or force-pushes |
26
+
27
+ Phase reviews need no person. The final review always runs, but an interactive
28
+ run first asks how to run it unless `workflow.reviewExecutionModel` is set. If
29
+ the final phase is a checkpoint, you approve the finished work after the final
30
+ review; with `workflow.postImplementSequence` set to `pr` or `docs-pr`, the pull
31
+ request opens before that approval.
32
+
33
+ **Quick, spec-driven, and imported projects have no plan-approval prompt.**
34
+ Planning ends with an automatic plan review. That review applies Critical and
35
+ High fixes itself and offers you the Medium and Low ones, and then the skill
36
+ marks `plan.md` ready for implementation. The planning skill
37
+ (`/oat-project-quick-start`, `/oat-project-plan`, or `/oat-project-import-plan`)
38
+ then stops: it reports the phases and names `/oat-project-implement` as the
39
+ next step, and no code is written until you run that skill (or
40
+ `/oat-project-next`, which starts it without asking). That stop is your chance
41
+ to review the plan, so read `plan.md` when planning finishes and before you run
42
+ `/oat-project-implement`. Do not re-run `/oat-project-quick-start` to continue:
43
+ on a quick project whose plan is ready, it starts implementation straight away.
44
+
45
+ What does and does not give a person a say on the plan:
46
+
47
+ - **Lite:** its single approval covers the requirements and the plan, and the
48
+ decision is written into `plan.md`.
49
+ - **Spec-driven:** `/oat-project-plan` asks "Does this breakdown make sense? Any
50
+ tasks missing?" in the chat and revises until you confirm. That confirmation
51
+ is not recorded as an approval, and the automatic review that follows can
52
+ still change the plan.
53
+ - **Quick and imported:** nothing asks you to approve or confirm the plan.
54
+ Planning may still ask setup questions, such as which dispatch policy to use
55
+ or whether to add gates.
56
+ - **A `plan` checkpoint does not add a pause.** Listing `plan` in a project's
57
+ `oat_hill_checkpoints` in `state.md` does not stop the agent: the planning
58
+ skill marks that checkpoint complete itself when it finishes.
59
+ - **First implementation run:** `oat-project-implement` lists every phase and
60
+ asks where to pause before any task runs. That is a checkpoint question, not
61
+ a plan approval, but it is the last point to stop before code is written. It
62
+ is skipped when `workflow.hillCheckpointDefault` is set and in autonomous
63
+ runs. See [HiLL Checkpoints](projects/planning/hill-checkpoints.md).
64
+ - **Autonomous runs:** no person sees the plan before implementation.
65
+
66
+ ## How many agent runs does a project start?
67
+
68
+ An agent run is one model launch for one bounded job, such as implementing or
69
+ reviewing a phase. A _gate_ is an optional extra review that a skill runs as
70
+ its last step, by a separate reviewer agent, usually in a different agent tool.
71
+ No gate is configured by default.
72
+
73
+ | Step | Runs | Limit |
74
+ | ------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
75
+ | Plan review | 1, plus 1 re-review after each round of fixes | `oat_orchestration_retry_limit` in `state.md`: 2 re-reviews by default |
76
+ | Each implementation phase | 1 implementer and 1 reviewer | A Critical or High finding adds a fix and a new review, at most 2 rounds by default |
77
+ | Final review | 1 reviewer | At most 3 review cycles, then the agent stops and asks you how to proceed |
78
+ | Review at checkpoints | 1 extra review at each checkpoint before the last, when on | Off unless you answer yes to the auto-review question on the first implementation run or set `workflow.autoReviewAtHillCheckpoints`; autonomous runs always turn it on |
79
+ | Gate (optional) | 1 reviewer run per gate | `maxAttempts`, 2 runs in total by default |
80
+
81
+ OAT does not estimate prices. Cost depends on your provider's pricing and on
82
+ your _dispatch policy_: the highest model tier OAT may use for subagents.
83
+ Implementers may run below that tier, but under a capped policy (Economy,
84
+ Balanced, High, or Frontier), phase and final reviews use the last model listed
85
+ for that policy's tier. See [Dispatch Policy](advanced/dispatch-ceiling.md).
86
+
87
+ **Illustration, derived from the defaults:** a three-phase quick project, run
88
+ interactively with no gates and checkpoint reviews off, where no review finds a
89
+ Critical or High problem, uses 8 agent runs: 1 plan review, 3 implementers, 3
90
+ phase reviewers, and 1 final reviewer. Each phase review that returns a Critical
91
+ or High finding adds 2 runs, a fix and a new review, at most twice per phase, so
92
+ the phases alone can reach 18. Not counted: the summary, documentation, and pull
93
+ request steps, the project explainer and project recap, and the optional phase
94
+ gate review (one extra reviewer run per selected phase). A blocked
95
+ implementation gate also reruns the final review before the gate runs again.
96
+
97
+ ## What OAT does without asking
98
+
99
+ - **Commits** once per task, plus tracking commits at each phase and review
100
+ boundary, on your current branch. See
101
+ [Execution Skills](projects/execution/execution-skills.md#oat-project-implement).
102
+ - **Pushes project files to `origin`.** New projects default to the _synced_
103
+ scope: the project's files live on their own Git ref, which is pushed to
104
+ `origin` every time a skill saves it. To stop that, run
105
+ `oat config set projects.defaultScope shared`. This changes the team's
106
+ committed `.oat/config.json`. Project files are then committed on your branch
107
+ and reach `origin` only when the branch is pushed. Use the `local` scope to
108
+ keep them on this machine only. See
109
+ [Before your first project](projects/planning/starting-projects.md#before-your-first-project).
110
+ - **Starts subagents**, an implementer and a reviewer per phase, without asking
111
+ each time. On Codex, when launching subagents needs authorization, it asks
112
+ once per run.
113
+ - **Merges parallel phases into your branch.** When the plan declares a
114
+ parallel group, it runs each phase in its own worktree and merges the phases
115
+ that pass review into your current branch with `git merge --no-ff`.
116
+ - **Pushes your branch and opens the pull request** without confirming. The
117
+ final-PR step (`oat-project-pr-final`) runs `git push -u origin <branch>` and
118
+ `gh pr create`: always in lite, when `workflow.postImplementSequence` includes
119
+ `pr`, and in autonomous runs. `oat-project-complete` opens a pull request
120
+ without asking when `workflow.createPrOnComplete` is `true`, and it also
121
+ pushes your branch after archiving a synced project, whether or not it opens
122
+ a pull request. Autonomous runs also push the branch, without force, after
123
+ each lifecycle step such as planning and implementation. See
124
+ [Autonomous Project Execution](advanced/autonomy.md).
125
+
126
+ ## Set it up the way you want
127
+
128
+ ### A person approves the plan and the final result, and an independent model reviews the code
129
+
130
+ 1. Run `/oat-project-quick-start` and confirm the requirements when asked, or
131
+ `/oat-project-new` to also approve discovery and design.
132
+ 2. When planning finishes, the skill stops and names `/oat-project-implement`
133
+ as the next step. There is no plan-approval prompt, so read `plan.md` now
134
+ and ask the agent for any changes before you start implementation; that
135
+ reading is your plan approval, and nothing records it. Do not re-run
136
+ `/oat-project-quick-start` to continue, because on a ready plan it starts
137
+ implementation straight away.
138
+ 3. At the first implementation prompt, choose "Stop only after the final
139
+ phase". To make that your own default, run
140
+ `oat config set workflow.hillCheckpointDefault final --user`. Use `--shared`
141
+ instead only if your team has agreed that every project pauses only at the
142
+ end. Either way, a configured value is used on each project's first
143
+ implementation run without asking and replaces any checkpoint value already
144
+ in `plan.md`.
145
+ 4. Keep the pull request until you approve:
146
+ `oat config set workflow.postImplementSequence wait --shared` (a legacy
147
+ value that is still supported), then run `/oat-project-pr-final` yourself.
148
+ 5. Add a review gate on implementation and commit `.oat/config.json`:
149
+
150
+ ```bash
151
+ oat gate set oat-project-implement \
152
+ --command 'oat --json gate review --project "$PROJECT_PATH" --review-type code --review-scope final "Use oat-project-review-provide code final for the declared project"' \
153
+ --on-failure block \
154
+ --layer shared
155
+ ```
156
+
157
+ `--on-failure` is required. With `block`, the agent fixes findings and reruns
158
+ the gate (2 runs in total by default), then hands over to you. The gate runs
159
+ after the final code review and before your approval. The built-in reviewer
160
+ targets run without permission-bypass flags and can stall on the reviewing
161
+ tool's approval prompts; read
162
+ [Permissions for unattended review](#permissions-for-unattended-review)
163
+ before relying on this unattended.
164
+
165
+ > [!WARNING]
166
+ > The default independence setting falls back to the best available reviewer,
167
+ > which may be from the same model family, and only records a warning. Check
168
+ > `diversity.achieved` in the gate result: `different-family` means the review
169
+ > was independent. See
170
+ > [Workflow Gates](advanced/workflow-gates.md#how-independent-the-reviewer-must-be).
171
+
172
+ ### Maximum human control
173
+
174
+ 1. Work on a feature branch: `git switch -c my-change`.
175
+ 2. Stop OAT from pushing project files every time it saves them.
176
+ `oat config set projects.defaultScope shared` makes it commit them on your
177
+ branch instead, but this edits the team's committed `.oat/config.json`, and
178
+ the files still reach `origin` whenever that branch is pushed, for example
179
+ when the pull request opens. To keep them on this machine only, create the
180
+ project with the `local` scope (next step), or run
181
+ `export OAT_PROJECTS_DEFAULT_SCOPE=local` in your shell.
182
+ 3. Run `/oat-project-new my-change` (spec-driven; add `--scope local` for a
183
+ local project) and choose the collaborative design mode, so you approve
184
+ discovery and each design section.
185
+ 4. At the first implementation prompt, keep "Stop after each phase". Check
186
+ first with `oat config get workflow.hillCheckpointDefault`: if it prints
187
+ `final`, the prompt will not appear and the project pauses only at the end.
188
+ Unset it in the layer that sets it, or set `every` for yourself with
189
+ `oat config set workflow.hillCheckpointDefault every --user` (a shared or
190
+ local value still wins over a user value).
191
+ 5. Avoid automatic pull requests: do not use lite, run
192
+ `oat config set workflow.postImplementSequence wait --shared` (a legacy
193
+ value that is still supported), and leave `workflow.createPrOnComplete`
194
+ unset.
195
+
196
+ ### Mostly unattended, within limits
197
+
198
+ 1. Work on a feature branch; an autonomous run pushes whichever branch is
199
+ checked out.
200
+ 2. Set a dispatch policy, which autonomy never chooses:
201
+ `oat config set workflow.dispatchPolicy.policy balanced --local`. A policy in
202
+ config overrides each project's own choice.
203
+ 3. Give any gate `--on-failure block` or `warn`; a failing `prompt` gate stops
204
+ the run.
205
+ 4. Run `/oat-project-autonomous "<your goal>"`.
206
+
207
+ It still stops at a product decision, a destructive action, an unresolved
208
+ Critical finding, a protected branch or required approval, a missing
209
+ credential, or a question it has no rule for. It never merges; review the pull
210
+ request yourself.
211
+
212
+ ## Can a teammate weaken a team rule?
213
+
214
+ Yes, on their own machine. Configuration resolves local first
215
+ (`.oat/config.local.json`), then shared (the committed `.oat/config.json`),
216
+ then user (`~/.oat/config.json`). Shared beats user, but local beats shared,
217
+ and `oat init` adds `.oat/config.local.json` to `.gitignore`, so the change
218
+ never appears in a diff. A few keys, such as `projects.defaultScope`, also take
219
+ an environment variable that beats every file.
220
+
221
+ - `oat gate set oat-project-implement --disable --layer local` switches a
222
+ shared gate off for that checkout.
223
+ - Interactive planning asks whether to keep or disable each configured gate
224
+ for the new project. A **Disable** answer, or a hand edit, writes
225
+ `oat_skill_gate_overrides: { oat-project-implement: disabled }` to that
226
+ project's `state.md`, and OAT records the gate as disabled by the project.
227
+ - `oat config set workflow.autoArtifactReview.plan false --local` skips the
228
+ automatic plan review on that machine; the plan records the skip.
229
+ - A local `workflow.hillCheckpointDefault`, or an edit to
230
+ `oat_plan_hill_phases` in `plan.md`, changes where a project pauses.
231
+
232
+ These controls guide agents on a developer's machine; they are not an
233
+ enforcement boundary. Enforce team rules with branch protection, required
234
+ reviewers, and CI checks.
235
+
236
+ ## Permissions for unattended review
237
+
238
+ An _exec target_ is a saved command that starts a reviewer tool. The built-in
239
+ targets run `codex exec`, `claude -p`, and `cursor-agent -p`, and OAT adds only
240
+ a model choice and the prompt, never a permission-bypass flag. An unattended
241
+ gate can therefore be stopped by the reviewing tool's own permission checks.
242
+
243
+ - An attended review needs no bypass, but it takes the place of a gate; it does
244
+ not satisfy one. Leave the gate unset, choose the fresh-session option at the
245
+ final-review prompt (or set `workflow.reviewExecutionModel` to
246
+ `fresh-session`), and run `oat-project-review-provide code final` yourself in
247
+ another session or agent tool that has the OAT skills installed. Answer its
248
+ prompts, then run `oat-project-review-receive` in the original session.
249
+ - Some trusted-target examples in [Workflow Gates](advanced/workflow-gates.md)
250
+ add a provider's permission-bypass flag. A team may choose that for a trusted
251
+ machine; OAT does not require it.
252
+ - OAT documents no narrower permission allowlist for reviewers. If you build
253
+ one, test it on an unattended gate before you rely on it.
254
+
255
+ ## Where to go next
256
+
257
+ - [Choose a Workflow](choose-workflow.md) to pick a mode.
258
+ - [Execution Skills](projects/execution/execution-skills.md) for what
259
+ implementation does step by step.
260
+ - [Workflow Gates](advanced/workflow-gates.md) for gate setup and limits.
261
+ - [Configuration](../reference/configuration.md) for every setting named here.