@open-agent-toolkit/cli 0.3.14 → 0.3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/NOTICES.md +48 -0
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/contributing/markdown-features.md +38 -0
- package/assets/docs/contributing/smoke-testing.md +20 -13
- package/assets/docs/docs-tooling/workflows.md +26 -19
- package/assets/docs/getting-started/concepts.md +35 -21
- package/assets/docs/provider-sync/commands.md +21 -0
- package/assets/docs/provider-sync/manifest-and-drift.md +24 -17
- package/assets/docs/reference/cli-reference.md +2 -1
- package/assets/docs/reference/configuration.md +10 -2
- package/assets/docs/reference/project-state-machine.md +27 -20
- package/assets/docs/skills/index.md +1 -0
- package/assets/docs/skills/recon.md +8 -5
- package/assets/docs/workflows/advanced/autonomy.md +10 -0
- package/assets/docs/workflows/advanced/evidence-layers.md +19 -12
- package/assets/docs/workflows/advanced/orchestration-model.md +48 -34
- package/assets/docs/workflows/advanced/workflow-gates.md +109 -10
- package/assets/docs/workflows/approvals-and-automation.md +3 -1
- package/assets/docs/workflows/ideas/lifecycle.md +32 -25
- package/assets/docs/workflows/projects/closeout/closeout-skills.md +62 -1
- package/assets/docs/workflows/projects/execution/implementation-execution.md +67 -33
- package/assets/docs/workflows/projects/execution/project-log.md +6 -0
- package/assets/docs/workflows/projects/lifecycle.md +119 -63
- package/assets/docs/workflows/projects/reviews/index.md +63 -1
- package/assets/docs/workflows/projects/reviews/review-flavors.md +30 -23
- package/assets/docs/workflows/waves/wave-workflows.md +11 -3
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-autonomous/SKILL.md +1 -1
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +172 -165
- package/assets/skills/oat-project-complete-auto/SKILL.md +388 -0
- package/assets/skills/oat-project-document/SKILL.md +1 -1
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +172 -165
- package/assets/skills/oat-project-implement/SKILL.md +6 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +28 -1
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +172 -165
- package/assets/skills/oat-project-implement/references/docs/complexity-review-fallback.md +262 -0
- package/assets/skills/oat-project-implement/references/docs/gate-approval-record.md +80 -0
- package/assets/skills/oat-project-implement/references/phase-execution.md +18 -0
- package/assets/skills/oat-project-lite/SKILL.md +1 -1
- package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +172 -165
- package/assets/skills/oat-project-next/SKILL.md +19 -2
- package/assets/skills/oat-project-next/references/docs/gate-approval-record.md +80 -0
- package/assets/skills/oat-project-pr-final/SKILL.md +4 -3
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +172 -165
- package/assets/skills/oat-project-progress/SKILL.md +15 -1
- package/assets/skills/oat-project-progress/references/docs/gate-approval-record.md +80 -0
- package/assets/skills/oat-project-quick-start/SKILL.md +31 -3
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +172 -165
- package/assets/skills/oat-project-quick-start/references/docs/complexity-review-fallback.md +262 -0
- package/assets/skills/oat-project-quick-start/references/docs/gate-approval-record.md +80 -0
- package/assets/skills/oat-project-review-receive/SKILL.md +21 -3
- package/assets/skills/oat-project-review-receive/references/docs/complexity-review-fallback.md +262 -0
- package/assets/skills/oat-wave-execute/SKILL.md +49 -28
- package/assets/skills/oat-wave-program/SKILL.md +15 -6
- package/assets/skills/oat-wrap-up/SKILL.md +9 -3
- package/assets/skills/oat-wrap-up/references/report-template.md +1 -1
- package/assets/skills/recon/SKILL.md +1 -1
- package/assets/skills/recon/references/packet-contract.md +18 -3
- package/assets/skills/recon/scripts/lib/contracts.mjs +16 -2
- package/assets/skills/recon/scripts/reconcile-ledger.mjs +20 -10
- package/assets/skills/recon/scripts/render-packet.mjs +31 -3
- package/assets/skills/recon/scripts/validate-packet.mjs +5 -5
- package/assets/templates/docs-app-fuma/app/[[...slug]]/page.tsx +14 -2
- package/assets/templates/docs-app-fuma/app/globals.css +1 -0
- package/assets/templates/state.md +7 -0
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +13 -0
- package/dist/commands/gate/index.d.ts +5 -0
- package/dist/commands/gate/index.d.ts.map +1 -1
- package/dist/commands/gate/index.js +270 -9
- package/dist/commands/shared/frontmatter.d.ts +1 -1
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +1 -0
- package/dist/commands/state/generate.d.ts +1 -1
- package/dist/commands/state/generate.d.ts.map +1 -1
- package/dist/commands/state/generate.js +87 -8
- package/dist/commands/sync/apply.d.ts.map +1 -1
- package/dist/commands/sync/apply.js +31 -5
- package/dist/commands/sync/dry-run.d.ts.map +1 -1
- package/dist/commands/sync/dry-run.js +28 -11
- package/dist/commands/sync/sync.utils.d.ts +13 -0
- package/dist/commands/sync/sync.utils.d.ts.map +1 -1
- package/dist/commands/sync/sync.utils.js +21 -1
- package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-manifest.js +1 -0
- package/dist/config/oat-config.d.ts +1 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +3 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +1 -0
- package/dist/drift/detector.js +6 -6
- package/dist/engine/compute-plan.d.ts.map +1 -1
- package/dist/engine/compute-plan.js +87 -2
- package/dist/engine/engine.types.d.ts +10 -1
- package/dist/engine/engine.types.d.ts.map +1 -1
- package/dist/engine/engine.types.js +4 -0
- package/dist/engine/execute-plan.d.ts.map +1 -1
- package/dist/engine/execute-plan.js +42 -5
- package/dist/engine/managed-copy-hash.d.ts +4 -3
- package/dist/engine/managed-copy-hash.d.ts.map +1 -1
- package/dist/engine/managed-copy-hash.js +4 -3
- package/dist/fs/assets.d.ts.map +1 -1
- package/dist/fs/assets.js +7 -1
- package/dist/manifest/hash.d.ts +8 -10
- package/dist/manifest/hash.d.ts.map +1 -1
- package/dist/release/public-package-contract.js +1 -1
- package/dist/ui/output.js +1 -1
- package/dist/validation/skills.d.ts.map +1 -1
- package/dist/validation/skills.js +13 -0
- package/package.json +2 -2
package/assets/NOTICES.md
CHANGED
|
@@ -154,3 +154,51 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
154
154
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
155
155
|
SOFTWARE.
|
|
156
156
|
```
|
|
157
|
+
|
|
158
|
+
## tkstang/skills
|
|
159
|
+
|
|
160
|
+
**Source:** https://github.com/tkstang/skills/tree/main/skills/complexity-review
|
|
161
|
+
**License:** MIT
|
|
162
|
+
**Version referenced:** `complexity-review` 1.0.2 (commit `8767bce4819a2cae1a9f257de650a5ed0ae0afc1`)
|
|
163
|
+
|
|
164
|
+
### `complexity-review` skill
|
|
165
|
+
|
|
166
|
+
Source files: `skills/complexity-review/SKILL.md` and
|
|
167
|
+
`skills/complexity-review/references/evidence-guide.md`.
|
|
168
|
+
|
|
169
|
+
Passages adapted and condensed into `.agents/docs/complexity-review-fallback.md`:
|
|
170
|
+
the core premise, contract restatement, simplest viable baseline, machinery
|
|
171
|
+
inventory, deletion test, evidence and recommendation scales, ledger columns,
|
|
172
|
+
verdict criteria, report sections, and reviewer stance. The OAT version adds
|
|
173
|
+
the budget-exhaustion triggers, the installed-skill probe, the read-only
|
|
174
|
+
dispatch contract, the REQUIRES-OPERATOR, open-finding, and disposition
|
|
175
|
+
sections, and the decision-message record.
|
|
176
|
+
|
|
177
|
+
Consumer OAT skills: `oat-project-implement`, `oat-project-quick-start`, and
|
|
178
|
+
`oat-project-review-receive` (each vendors the doc under `references/docs/`).
|
|
179
|
+
|
|
180
|
+
### Upstream MIT license
|
|
181
|
+
|
|
182
|
+
```text
|
|
183
|
+
MIT License
|
|
184
|
+
|
|
185
|
+
Copyright (c) 2026 Thomas Stang
|
|
186
|
+
|
|
187
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
188
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
189
|
+
in the Software without restriction, including without limitation the rights
|
|
190
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
191
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
192
|
+
furnished to do so, subject to the following conditions:
|
|
193
|
+
|
|
194
|
+
The above copyright notice and this permission notice shall be included in all
|
|
195
|
+
copies or substantial portions of the Software.
|
|
196
|
+
|
|
197
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
198
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
199
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
200
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
201
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
202
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
203
|
+
SOFTWARE.
|
|
204
|
+
```
|
|
@@ -62,6 +62,44 @@ Fenced code blocks with `mermaid` are rendered as diagrams.
|
|
|
62
62
|
A[Read docs tree] --> B[Generate index]
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
+
Rendered Mermaid diagrams use the site palette. Click or tap one to open it
|
|
66
|
+
full screen at a legible size; on a phone, pan to see the rest. Press Escape,
|
|
67
|
+
the close button, or click again to close it.
|
|
68
|
+
|
|
69
|
+
## Images and Diagram SVGs
|
|
70
|
+
|
|
71
|
+
Every Markdown image opens in a zoom view when clicked. SVG images open full
|
|
72
|
+
screen at a legible size, like Mermaid diagrams. Put images under
|
|
73
|
+
`public/` and link them with a root-relative path such as
|
|
74
|
+
`/diagrams/name.svg`; the site adds its base path.
|
|
75
|
+
|
|
76
|
+
Name a pair of files `<name>-light.<ext>` and `<name>-dark.<ext>` to show one
|
|
77
|
+
image per site theme. Place both images together; each is shown only in its
|
|
78
|
+
theme.
|
|
79
|
+
|
|
80
|
+
A diagram that needs to read well, especially on a phone, gets a hand-drawn SVG
|
|
81
|
+
pair next to its Mermaid source. Mermaid stays the source of truth: when you
|
|
82
|
+
change the Mermaid, update both SVGs in the same change.
|
|
83
|
+
|
|
84
|
+
=== "Syntax"
|
|
85
|
+
|
|
86
|
+
````text
|
|
87
|
+
=== "Diagram"
|
|
88
|
+
|
|
89
|
+

|
|
90
|
+

|
|
91
|
+
|
|
92
|
+
=== "Mermaid source"
|
|
93
|
+
|
|
94
|
+
```mermaid
|
|
95
|
+
flowchart LR
|
|
96
|
+
A[Read docs tree] --> B[Generate index]
|
|
97
|
+
```
|
|
98
|
+
````
|
|
99
|
+
|
|
100
|
+
The alt text describes what the diagram shows and claims nothing the Mermaid
|
|
101
|
+
does not.
|
|
102
|
+
|
|
65
103
|
## Tabs
|
|
66
104
|
|
|
67
105
|
Tab groups use the existing tab transform syntax:
|
|
@@ -22,19 +22,26 @@ outcome of any particular run.
|
|
|
22
22
|
|
|
23
23
|
## Data flow
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
25
|
+
=== "Diagram"
|
|
26
|
+
|
|
27
|
+

|
|
28
|
+

|
|
29
|
+
|
|
30
|
+
=== "Mermaid source"
|
|
31
|
+
|
|
32
|
+
```mermaid
|
|
33
|
+
flowchart TD
|
|
34
|
+
F["Fixture template\ntools/smoke/fixture/"] --> PRE["Preflight\ninstall + auth + fixture + local oat"]
|
|
35
|
+
PRE -->|blocked| STOP["Exit before provisioning"]
|
|
36
|
+
PRE -->|ready| PREP["Prepare / provision\ndisposable worktree + isolated config + manifest"]
|
|
37
|
+
PREP --> DRIVE["Drive\nper-harness protocol"]
|
|
38
|
+
DRIVE --> AUTO["Automated: runner launches provider"]
|
|
39
|
+
DRIVE --> OP["Operator: printed command + prompt"]
|
|
40
|
+
AUTO --> COLLECT["Collect\nevidence bundle + report"]
|
|
41
|
+
OP --> COLLECT
|
|
42
|
+
COLLECT --> CLEAN["Cleanup\nmanifest-scoped"]
|
|
43
|
+
COLLECT -.->|--keep| SKIP["Cleanup skipped"]
|
|
44
|
+
```
|
|
38
45
|
|
|
39
46
|
Collection runs even when the drive stage fails, so a broken run still produces
|
|
40
47
|
an evidence bundle before cleanup reclaims its resources.
|
|
@@ -66,25 +66,32 @@ skills.
|
|
|
66
66
|
|
|
67
67
|
Diagram: bootstrap once, then analyze, approve and apply only agreed improvements.
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
69
|
+
=== "Diagram"
|
|
70
|
+
|
|
71
|
+

|
|
72
|
+

|
|
73
|
+
|
|
74
|
+
=== "Mermaid source"
|
|
75
|
+
|
|
76
|
+
```mermaid
|
|
77
|
+
flowchart TD
|
|
78
|
+
SETUP["Bootstrap once\nConfirm inputs, then oat docs init"]
|
|
79
|
+
MD["Markdown\nValidate files and config"]
|
|
80
|
+
APP["Docs app\nInstall and verify build"]
|
|
81
|
+
AN["Analyze\nRead docs, write findings"]
|
|
82
|
+
PLAN["Plan from findings\nNo docs writes yet"]
|
|
83
|
+
Q{"Approve changes?"}
|
|
84
|
+
APPLY["Apply approved items\nNew branch, verify, offer PR"]
|
|
85
|
+
STOP["Skip all\nNo docs changed"]
|
|
86
|
+
SETUP --> MD
|
|
87
|
+
SETUP --> APP
|
|
88
|
+
MD -.-> AN
|
|
89
|
+
APP -.-> AN
|
|
90
|
+
AN --> PLAN
|
|
91
|
+
PLAN --> Q
|
|
92
|
+
Q -->|"approved"| APPLY
|
|
93
|
+
Q -->|"all skipped"| STOP
|
|
94
|
+
```
|
|
88
95
|
|
|
89
96
|
- **Setup, once.** `oat-docs-bootstrap` checks the repo without writing, asks
|
|
90
97
|
you to confirm its inputs, then runs `oat docs init`. Plain Markdown setup validates authored files,
|
|
@@ -9,17 +9,24 @@ OAT combines a provider-sync layer, reusable skills and CLI tooling, and an opti
|
|
|
9
9
|
|
|
10
10
|
## Choose What to Adopt
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
12
|
+
=== "Diagram"
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+

|
|
16
|
+
|
|
17
|
+
=== "Mermaid source"
|
|
18
|
+
|
|
19
|
+
```mermaid
|
|
20
|
+
flowchart LR
|
|
21
|
+
GOAL["What do you\nneed first?"] --> SYNC["Align coding tools\nProvider Sync"]
|
|
22
|
+
GOAL --> SKILLS["Help with one task\nReusable Skills"]
|
|
23
|
+
GOAL --> WORK["Resume longer work\nWorkflows"]
|
|
24
|
+
GOAL --> DOCS["Maintain documentation\nMarkdown or a docs site"]
|
|
25
|
+
SYNC -.-> LATER["Add another path\nwhenever useful"]
|
|
26
|
+
SKILLS -.-> LATER
|
|
27
|
+
WORK -.-> LATER
|
|
28
|
+
DOCS -.-> LATER
|
|
29
|
+
```
|
|
23
30
|
|
|
24
31
|
- **Provider Sync:** `oat init --scope project`, choose providers, then `oat sync --scope project`.
|
|
25
32
|
- **Reusable skills:** `oat tools install --scope user`; no repository initialization is needed.
|
|
@@ -36,16 +43,23 @@ Continue with [Provider Sync](../provider-sync/index.md), [Tool Packs](tool-pack
|
|
|
36
43
|
|
|
37
44
|
OAT keeps canonical assets in repo-controlled locations and projects provider-specific views from that source of truth. The canonical form is what you edit and review directly; provider views are synchronized outputs that let Claude Code, Cursor, Copilot, Gemini, and Codex consume the same intent in their native layouts.
|
|
38
45
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
=== "Diagram"
|
|
47
|
+
|
|
48
|
+

|
|
49
|
+

|
|
50
|
+
|
|
51
|
+
=== "Mermaid source"
|
|
52
|
+
|
|
53
|
+
```mermaid
|
|
54
|
+
flowchart LR
|
|
55
|
+
SKILLS[".agents/skills/"] --> OAT["oat sync"]
|
|
56
|
+
AGENTS[".agents/agents/"] --> OAT
|
|
57
|
+
RULES[".agents/rules/"] --> OAT
|
|
58
|
+
OAT --> CLAUDE[".claude/"]
|
|
59
|
+
OAT --> CURSOR[".cursor/"]
|
|
60
|
+
OAT --> COPILOT[".github/"]
|
|
61
|
+
OAT --> CODEX[".codex/"]
|
|
62
|
+
```
|
|
49
63
|
|
|
50
64
|
Gemini CLI is a native read-only consumer; OAT does not generate a `.gemini/` view through sync.
|
|
51
65
|
|
|
@@ -98,6 +98,27 @@ Key behavior:
|
|
|
98
98
|
failures, but skew present — apply reports
|
|
99
99
|
`Manifest version refreshed; no content changes required.` instead of
|
|
100
100
|
`No changes required.`, so a manifest write is never described as a no-op.
|
|
101
|
+
- A faithful copy-strategy entry whose manifest row records a stale
|
|
102
|
+
`contentHash` (a pre-framing legacy digest or a tampered value) is planned as
|
|
103
|
+
`skip` with the reason
|
|
104
|
+
`already in sync; restamp stale manifest content hash`, and `--json` plan
|
|
105
|
+
entries carry the verified digest as `restampContentHash`. Apply writes that
|
|
106
|
+
digest, so the next run is a no-op. Only a row that tracks the same provider
|
|
107
|
+
path that sync checked is restamped. Dry-run then reports
|
|
108
|
+
`Run without --dry-run to restamp N stale manifest content hashes.` instead
|
|
109
|
+
of `No changes to apply.`. Apply reports
|
|
110
|
+
`Manifest content hash restamped for N entries; no content changes required.`
|
|
111
|
+
(combined with the version-refresh sentence when both happen), or
|
|
112
|
+
`Manifest content hash restamped for N entries.` beside a partial failure.
|
|
113
|
+
- A copy-strategy canonical skill directory without `SKILL.md`, or agent
|
|
114
|
+
directory without `AGENT.md`, is planned as an `error` operation whose reason
|
|
115
|
+
names the missing file, instead of a copy that never verifies and is retried
|
|
116
|
+
on every run. It changes nothing and is not a planned operation; other
|
|
117
|
+
entries still sync. Apply reports it as a failed result (`status: failed`
|
|
118
|
+
with a `failure` in `--json` `operationResults`) and exits 1. Dry-run lists
|
|
119
|
+
it, warns `N entry cannot sync until its configuration error is fixed.`,
|
|
120
|
+
counts it in `summary.failed`, and still exits 0. Symlink strategy is
|
|
121
|
+
unaffected.
|
|
101
122
|
|
|
102
123
|
`oat sync` is not the only command that replaces a manifest's producer version.
|
|
103
124
|
`oat init`, `oat remove skill`, and `oat status` each capture the manifest's
|
|
@@ -15,23 +15,30 @@ This page explains how OAT remembers what it manages and how it distinguishes cl
|
|
|
15
15
|
|
|
16
16
|
Diagram: canonical assets produce provider views and a manifest; status reports what changed and how to resolve it.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
18
|
+
=== "Diagram"
|
|
19
|
+
|
|
20
|
+

|
|
21
|
+

|
|
22
|
+
|
|
23
|
+
=== "Mermaid source"
|
|
24
|
+
|
|
25
|
+
```mermaid
|
|
26
|
+
flowchart TD
|
|
27
|
+
CANON["Canonical assets\nEdit .agents/"]
|
|
28
|
+
SYNC["oat sync\nGenerate views"]
|
|
29
|
+
VIEWS["Provider views"]
|
|
30
|
+
MANIFEST["Sync manifest"]
|
|
31
|
+
STATUS["oat status\nInspect before resolving"]
|
|
32
|
+
TRACKED["Tracked views\nin_sync / drifted / missing"]
|
|
33
|
+
STRAY["Unmanaged files\nstray"]
|
|
34
|
+
CANON --> SYNC
|
|
35
|
+
SYNC --> VIEWS
|
|
36
|
+
SYNC --> MANIFEST
|
|
37
|
+
MANIFEST --> STATUS
|
|
38
|
+
VIEWS --> STATUS
|
|
39
|
+
STATUS --> TRACKED
|
|
40
|
+
STATUS --> STRAY
|
|
41
|
+
```
|
|
35
42
|
|
|
36
43
|
- **What you edit.** Only the canonical files under `.agents/` (skills, agents,
|
|
37
44
|
rules). `oat sync` reads them and writes provider views as symlinks or copies
|
|
@@ -162,7 +162,7 @@ Notable commands introduced in the current CLI surface:
|
|
|
162
162
|
- `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. Lite plans must contain exactly one phase, declare no parallel groups, and give every Validation Criteria bullet either a backticked command or a `manual:` instruction. See [Implementation Execution](../workflows/projects/execution/implementation-execution.md#parallel-phase-groups).
|
|
163
163
|
- `oat project log append|check|synthesize|rollup` - manage the optional append-only project observation log: append validated judgment or structural entries, inspect grammar and synthesis status, complete end-of-run synthesis, and roll observations into `summary.md` plus the configured repository ledger. See [Project Log](../workflows/projects/execution/project-log.md).
|
|
164
164
|
- `oat project set-mode` — deprecated no-op. Execution mode is no longer user-selectable; emits a deprecation warning and preserves the `--json` contract.
|
|
165
|
-
- `oat gate review <prompt...>` - run a stateful, headless OAT review through the target registry, parse the produced review artifact, and exit nonzero for configured blocking findings. `--timeout-ms <milliseconds>` overrides target, `workflow.gateTimeouts`, environment, and scope defaults; accepted values are 1,000–14,400,000. Final/phase/range code reviews default to 30 minutes, while task code
|
|
165
|
+
- `oat gate review <prompt...>` - run a stateful, headless OAT review through the target registry, parse the produced review artifact, and exit nonzero for configured blocking findings. `--timeout-ms <milliseconds>` overrides target, `workflow.gateTimeouts`, environment, and scope defaults; accepted values are 1,000–14,400,000. Final/phase/range code reviews and artifact reviews default to 30 minutes, while task code reviews default to 15 minutes. With `--json`, the result envelope on exit is the canonical completion signal: `status` is `ok` | `blocked` | `review_failed` | `artifact_missing` | `artifact_validation_failed` | `targeting_correlation_failed`, alongside `runId`, `generatedAt`, and `artifactPath` when available. `artifact_missing` means an accepted child exited cleanly without an artifact; fix synchronous review/artifact completion and start a new run, without review-receive or same-run remediation. For `targeting_correlation_failed`, correct the project declaration or artifact routing and start a new run; do not run review-receive even if an artifact path is present. For `artifact_validation_failed`, correct the artifact and rerun the gate until it revalidates as `ok` or `blocked`. Invoke `oat-project-review-receive` only when all three conditions hold: `status` is `ok` or `blocked`, `receiveEligible` is `true`, and `handoff` is non-null. `review_failed` may include structured `refusal`, `noOutputProduced`, and metadata-only `activityEvidence`; these diagnostic fields never make a run receive-eligible. After a timeout, a validated run-correlated artifact returns the ordinary `ok` or `blocked` envelope with additive `lateCompletion: true`. When post-selection work fails after the reviewer already committed a run-correlated artifact, the gate re-validates that selected snapshot through the same eligibility path rather than re-parsing whatever the path now holds, never re-dispatching, and returns the ordinary `ok` or `blocked` envelope with additive `postSelectionRecovery: true`; the artifact must still be present and unchanged for re-validation to succeed. When nothing recovers, `review_failed` names the failing sub-step in `postSelection.step` and its cause in `postSelection.code`. Duplicate run-ID matches or a changed artifact with a mismatched run ID retain `targeting_correlation_failed` and `receiveEligible: false`. Orchestrators should read the structured result rather than poll the filesystem. See [Workflow Gates](../workflows/advanced/workflow-gates.md).
|
|
166
166
|
- `oat gate route --expect-runtime <runtime> --expect-model <model> --can-await <true|false> --json` - return the headless child route (`inline`, `delegate-sync`, or `refuse`) from provider-marker and model evidence. Ambiguous or contradictory evidence never routes inline.
|
|
167
167
|
- `oat gate exec <prompt...>` / `oat gate cross-provider-exec <prompt...>` - run a generic target prompt. `--timeout-ms` uses the same validated CLI override; untyped runs otherwise retain the legacy default path.
|
|
168
168
|
- `oat gate target set <id> --invocation-model <model|provider-default> --invocation-reasoning-effort <effort|provider-default>` - persist optional configured invocation metadata alongside an exec target without inferring it from the target command.
|
|
@@ -203,6 +203,7 @@ The `workflow.*` namespace holds user-facing workflow preferences that let you a
|
|
|
203
203
|
- `workflow.hillCheckpointDefault` (`every` | `final`) — default HiLL checkpoint behavior in `oat-project-implement`
|
|
204
204
|
- `workflow.archiveOnComplete` (`boolean`) — skip the archive prompt in `oat-project-complete`
|
|
205
205
|
- `workflow.createPrOnComplete` (`boolean`) — skip the "Open a PR?" prompt in `oat-project-complete`
|
|
206
|
+
- `workflow.autonomousComplete` (`boolean`, default `false`) — standing opt-in for the non-interactive `oat-project-complete-auto` companion; when `false` it stops with "interactive completion required"
|
|
206
207
|
- `workflow.postImplementSequence` (legacy `wait` | `summary` | `pr` | `docs-pr`, or structured `{preApproval, postApproval}` arrays) — approval-aware post-implementation chaining
|
|
207
208
|
- `workflow.reviewExecutionModel` (`subagent` | `inline` | `fresh-session`) — default final-review execution model
|
|
208
209
|
- `workflow.autoReviewAtHillCheckpoints` (`boolean`) — auto-run the extra lifecycle review at HiLL checkpoints
|
|
@@ -272,7 +272,13 @@ packaged `assets/` directory next to the installed CLI. Setting a non-empty
|
|
|
272
272
|
required bundle directory is empty in the packed tarball.
|
|
273
273
|
- Produce a matching bundle with `bash packages/cli/scripts/bundle-assets.sh`
|
|
274
274
|
while `OAT_ASSETS_DIR` points at the target directory (the script already
|
|
275
|
-
honors the variable as its destination).
|
|
275
|
+
honors the variable as its destination). Because publishing replaces the
|
|
276
|
+
destination, the script accepts an override destination only when it is
|
|
277
|
+
absent, an empty directory, or a previous bundle (a directory holding
|
|
278
|
+
`bundle-metadata.json`); it refuses anything else, including a directory it
|
|
279
|
+
cannot list. The default `packages/cli/assets` destination is exempt. The
|
|
280
|
+
script also stops before copying when an inventory lookup comes back empty,
|
|
281
|
+
absolute, climbing with `..`, or naming the repository root.
|
|
276
282
|
|
|
277
283
|
This is primarily a test-isolation and packaging seam; day-to-day use of the CLI
|
|
278
284
|
does not need it.
|
|
@@ -294,7 +300,7 @@ must be integer milliseconds from `1,000` through `14,400,000`.
|
|
|
294
300
|
"workflow": {
|
|
295
301
|
"gateTimeouts": {
|
|
296
302
|
"code": 2400000,
|
|
297
|
-
"artifact":
|
|
303
|
+
"artifact": 2400000
|
|
298
304
|
},
|
|
299
305
|
"gates": {
|
|
300
306
|
"execTargets": {
|
|
@@ -712,6 +718,7 @@ Workflow preference keys live under the `workflow.*` namespace:
|
|
|
712
718
|
- `workflow.hillCheckpointDefault` — `every` or `final`. Default HiLL checkpoint behavior in `oat-project-implement` (a HiLL, or human-in-the-loop, checkpoint is a stop for your review): pause after every phase or only after the last phase. When unset, the skill prompts. See [Choosing a checkpoint default](#choosing-a-checkpoint-default).
|
|
713
719
|
- `workflow.archiveOnComplete` — boolean. Skip the "Archive after completion?" prompt in `oat-project-complete`. When unset, the skill prompts.
|
|
714
720
|
- `workflow.createPrOnComplete` — boolean. Skip the "Open a PR?" prompt in `oat-project-complete`; when true, completion auto-triggers PR creation. When unset, the skill prompts.
|
|
721
|
+
- `workflow.autonomousComplete` — boolean, default `false`. Standing opt-in for `oat-project-complete-auto`, the non-interactive completion companion that runs only when a workflow names it as a step (today `oat-wave-execute` closeout step 8 and the `oat-wave-program` completion checkpoint). Its `OAT_AUTONOMOUS` lifecycle route refuses until a lifecycle skill names the companion, and none does today. When `false`, the companion stops with "interactive completion required" and writes nothing. The interactive `oat-project-complete` is unaffected.
|
|
715
722
|
- `workflow.postImplementSequence` — legacy `wait`, `summary`, `pr`, or `docs-pr`, or `{ "preApproval": [...], "postApproval": [...] }`. Legacy values remain strings and keep their existing mappings. Structured arrays contain ordered, globally unique `summary`, `document`, `pr`, and `retro` steps. `retro` is post-approval only: a structured value containing it in `preApproval` is rejected. Pre-approval steps run after final review and before final HiLL approval; post-approval steps run only after that approval. Plain retrieval keeps legacy strings and prints structured values as compact JSON; `--json` returns the raw value.
|
|
716
723
|
- `workflow.retro.filing.repo` — `issues`, `backlog`, or `none`; unset by default. Selects the repo-lane filing destination.
|
|
717
724
|
- `workflow.retro.filing.upstream` — `issues` or `none`; unset by default. Selects the upstream-lane filing destination.
|
|
@@ -889,6 +896,7 @@ Other preferences **depend on per-repo configuration** to be safe. These should
|
|
|
889
896
|
- `workflow.archiveOnComplete` — correctness depends on the repo's `archive.s3Uri` / `archive.s3SyncOnComplete` being configured. A user-level `true` would try to archive in repos that aren't set up for it.
|
|
890
897
|
- `workflow.postImplementSequence` — correctness depends on `documentation.requireForProjectCompletion`. Setting `pr` at user level would foot-gun you in any repo that requires docs, because completion would later block on the docs gate while the PR is already open.
|
|
891
898
|
- `workflow.createPrOnComplete` — this key is almost always redundant with `postImplementSequence`-driven flows. When it's meaningful, its correctness depends on the same per-repo docs and PR gates. Prefer shared scope, or omit it entirely and rely on `postImplementSequence: pr` or `docs-pr` to handle PR creation at the end of implement.
|
|
899
|
+
- `workflow.autonomousComplete` — authorizes unattended completion, which archives with the repo's `workflow.archiveOnComplete` and `archive.*` settings. It never creates a PR: it reads and reports `workflow.createPrOnComplete` without acting on it, and only updates the description of an already tracked PR. A user-level `true` would authorize autonomous completion in every repo, including ones whose archive settings were never chosen for it. Set it with `--shared` (or `--local` for one checkout) in each repo whose completion settings you have reviewed.
|
|
892
900
|
|
|
893
901
|
**Cross-repo foot-gun example:** If you set `workflow.createPrOnComplete: true --user`, it applies to every repo you work on. In a repo with `documentation.requireForProjectCompletion: true` and `postImplementSequence: pr` (no docs step), running `oat-project-complete` would try to auto-create a PR, then immediately hit the docs gate and block you — leaving you with an open PR and a stuck completion. Your user-level preference silently asserted something that only holds in a specific shared-config shape.
|
|
894
902
|
|
|
@@ -15,26 +15,33 @@ This page is the compact contract for how project lifecycle state and review sta
|
|
|
15
15
|
|
|
16
16
|
## State Transition Map
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
18
|
+
=== "Diagram"
|
|
19
|
+
|
|
20
|
+

|
|
21
|
+

|
|
22
|
+
|
|
23
|
+
=== "Mermaid source"
|
|
24
|
+
|
|
25
|
+
```mermaid
|
|
26
|
+
flowchart TD
|
|
27
|
+
D["Discovery in progress"] --> RS["Ready for spec"]
|
|
28
|
+
RS --> S["Spec in progress"] --> RD["Ready for design"]
|
|
29
|
+
RD --> G["Design in progress"] --> RP["Ready for plan"]
|
|
30
|
+
RP --> P["Plan in progress"] --> RI["Ready for implement"]
|
|
31
|
+
RI --> I["Implement in progress"] --> IC["Implement complete"]
|
|
32
|
+
IC --> PRO["PR open (pr_open)"]
|
|
33
|
+
PRO --> REV["Revise (in_progress)"]
|
|
34
|
+
REV --> PRO
|
|
35
|
+
PRO --> C["Complete"]
|
|
36
|
+
|
|
37
|
+
I --> RV["Review received"]
|
|
38
|
+
RV --> FA["Fixes added"]
|
|
39
|
+
FA --> FC["Fixes completed"]
|
|
40
|
+
FC --> PASSED["Review passed"]
|
|
41
|
+
PASSED --> I
|
|
42
|
+
|
|
43
|
+
LITE["Lite: batched interview\n(no discovery/spec/design)"] -. entry point .-> P
|
|
44
|
+
```
|
|
38
45
|
|
|
39
46
|
The solid chain is the spec-driven progression. Lite enters at **Plan in
|
|
40
47
|
progress** and never sets `oat_phase` to `discovery`, `spec`, or `design`;
|
|
@@ -303,11 +303,14 @@ downgrades. Every claim a review kept below `verified` (an unresolved issue
|
|
|
303
303
|
scoped to it or global to its review, a coverage finding that names it, or a
|
|
304
304
|
non-affirming disposition) is listed under Review Downgrades with the review's
|
|
305
305
|
own text, even when it is not a key claim, so a `complete` packet cannot hide a
|
|
306
|
-
downgraded claim.
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
306
|
+
downgraded claim. The required reviews are semantic, adversarial, and coverage,
|
|
307
|
+
plus redundant verification when the run achieves `thorough`; contradiction
|
|
308
|
+
resolution is never required. A claim that any required review left without a
|
|
309
|
+
disposition stays `unresolved`, so the run publishes an honest packet instead of
|
|
310
|
+
failing validation. Any claim below `verified` that an incorporated assurance
|
|
311
|
+
review, core or thorough, listed in its brief but left without a disposition is
|
|
312
|
+
listed there as not reviewed by that review; a claim outside a required review's
|
|
313
|
+
brief is listed as outside its brief, never as that review's omission. A review's
|
|
311
314
|
`unresolvedIssues` entry may name the claim IDs it affects or apply to the
|
|
312
315
|
whole review; a legacy plain-string entry is read as review-wide. A material
|
|
313
316
|
coverage gap does not fail publication by itself: the claims it affects stay
|
|
@@ -75,6 +75,16 @@ A boundary is a successful fail-closed outcome, not permission to continue with
|
|
|
75
75
|
a guessed answer. The run reports what stopped, the evidence, and the operator
|
|
76
76
|
action needed to resume.
|
|
77
77
|
|
|
78
|
+
When a review or gate budget runs out (a review-cycle cap, the orchestration
|
|
79
|
+
retry limit, or a gate's `maxAttempts`), the run first dispatches the
|
|
80
|
+
[complexity review](../projects/reviews/index.md#complexity-review-at-budget-exhaustion)
|
|
81
|
+
and includes its decision-message content in the boundary report. The run never
|
|
82
|
+
selects the disposition, including **simplify**: the operator chooses when
|
|
83
|
+
resuming. A quick-start plan gate outcome is persisted as
|
|
84
|
+
`oat_quick_start_gate` (see
|
|
85
|
+
[Gate approval records](workflow-gates.md#gate-approval-records)); a failed
|
|
86
|
+
`prompt` gate is recorded as `blocked`, never as approved.
|
|
87
|
+
|
|
78
88
|
The canonical autonomy contract and exhaustive gate inventory
|
|
79
89
|
(`.agents/docs/autonomy-contract.md`, vendored into each consuming skill at
|
|
80
90
|
`references/docs/autonomy-contract.md`) map each prompt to its autonomous
|
|
@@ -19,21 +19,28 @@ never gates a conclusion on its own.
|
|
|
19
19
|
|
|
20
20
|
## Layer map
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
flowchart TD
|
|
24
|
-
L1["Layer 1 — Policy resolution\nnamed ceiling · candidates · capped/uncapped mode"]
|
|
25
|
-
L2["Layer 2 — Launcher-owned configured invocation\nroute · target/model/effort axes · selection reason ·\ncandidates considered · launch acceptance"]
|
|
26
|
-
L3["Layer 3 — Runtime-observed identity (optional)\nproducer + model, only under trusted provenance"]
|
|
22
|
+
=== "Diagram"
|
|
27
23
|
|
|
28
|
-
|
|
24
|
+

|
|
25
|
+

|
|
29
26
|
|
|
30
|
-
|
|
31
|
-
A -->|assert on| L2
|
|
32
|
-
A -.->|record only| L3
|
|
27
|
+
=== "Mermaid source"
|
|
33
28
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
```mermaid
|
|
30
|
+
flowchart TD
|
|
31
|
+
L1["Layer 1 — Policy resolution\nnamed ceiling · candidates · capped/uncapped mode"]
|
|
32
|
+
L2["Layer 2 — Launcher-owned configured invocation\nroute · target/model/effort axes · selection reason ·\ncandidates considered · launch acceptance"]
|
|
33
|
+
L3["Layer 3 — Runtime-observed identity (optional)\nproducer + model, only under trusted provenance"]
|
|
34
|
+
|
|
35
|
+
L1 --> L2 --> L3
|
|
36
|
+
|
|
37
|
+
A["Assertions"] -->|assert on| L1
|
|
38
|
+
A -->|assert on| L2
|
|
39
|
+
A -.->|record only| L3
|
|
40
|
+
|
|
41
|
+
L3 --> R["reported\n(both present + trusted provenance)"]
|
|
42
|
+
L3 --> NR["not-reported\n(anything else normalizes here)"]
|
|
43
|
+
```
|
|
37
44
|
|
|
38
45
|
Assertions bind to Layers 1 and 2. Layer 3 is recorded as `reported` or
|
|
39
46
|
`not-reported`; its absence never invalidates Layer 2.
|