@open-agent-toolkit/cli 0.3.14 → 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.
- 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/manifest-and-drift.md +24 -17
- package/assets/docs/reference/project-state-machine.md +27 -20
- package/assets/docs/workflows/advanced/evidence-layers.md +19 -12
- package/assets/docs/workflows/advanced/orchestration-model.md +48 -34
- package/assets/docs/workflows/ideas/lifecycle.md +32 -25
- package/assets/docs/workflows/projects/execution/implementation-execution.md +44 -30
- package/assets/docs/workflows/projects/lifecycle.md +112 -63
- package/assets/docs/workflows/projects/reviews/review-flavors.md +30 -23
- package/assets/public-package-versions.json +4 -4
- package/assets/templates/docs-app-fuma/app/[[...slug]]/page.tsx +14 -2
- package/assets/templates/docs-app-fuma/app/globals.css +1 -0
- package/dist/release/public-package-contract.js +1 -1
- package/package.json +2 -2
|
@@ -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
|
|
|
@@ -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
|
|
@@ -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`;
|
|
@@ -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.
|
|
@@ -29,25 +29,32 @@ Terms used on this page:
|
|
|
29
29
|
|
|
30
30
|
## Default Topology
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
32
|
+
=== "Diagram"
|
|
33
|
+
|
|
34
|
+

|
|
35
|
+

|
|
36
|
+
|
|
37
|
+
=== "Mermaid source"
|
|
38
|
+
|
|
39
|
+
```mermaid
|
|
40
|
+
flowchart TD
|
|
41
|
+
Root["Project root\nlifecycle owner"]
|
|
42
|
+
Adapter["Project dispatch adapter"]
|
|
43
|
+
Engine["Provider-neutral dispatch engine"]
|
|
44
|
+
|
|
45
|
+
Root --> Adapter --> Engine
|
|
46
|
+
Engine --> P["Phase implementer\none per phase"]
|
|
47
|
+
P --> T1["Planned task commit"]
|
|
48
|
+
P --> T2["Planned task commit"]
|
|
49
|
+
P -. optional .-> Recon["Recon / specialist / isolated fanout"]
|
|
50
|
+
|
|
51
|
+
Root -. independent review lane .-> Adapter
|
|
52
|
+
Engine -. exact reviewer route .-> R["Phase reviewer"]
|
|
53
|
+
R -->|blocking findings| Root
|
|
54
|
+
Root -->|resume bounded fix| P
|
|
55
|
+
|
|
56
|
+
Root -. external gate lane .-> G["Configured cross-runtime gate"]
|
|
57
|
+
```
|
|
51
58
|
|
|
52
59
|
The solid implementation lane is mandatory. The dotted nested lane is
|
|
53
60
|
benefit-driven. A run does not fail merely because the phase agent cannot or
|
|
@@ -83,21 +90,28 @@ matrix. The lifecycle workflow remains authoritative for classification,
|
|
|
83
90
|
selection judgment, synthesis, and state mutation. The dispatch engine does
|
|
84
91
|
not edit `plan.md`, `implementation.md`, or project state.
|
|
85
92
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
93
|
+
=== "Diagram"
|
|
94
|
+
|
|
95
|
+

|
|
96
|
+

|
|
97
|
+
|
|
98
|
+
=== "Mermaid source"
|
|
99
|
+
|
|
100
|
+
```mermaid
|
|
101
|
+
sequenceDiagram
|
|
102
|
+
participant Root as Project root
|
|
103
|
+
participant Adapter as Project adapter
|
|
104
|
+
participant Engine as Dispatch engine
|
|
105
|
+
participant Record as Run record in implementation.md
|
|
106
|
+
participant Phase as Phase implementer
|
|
107
|
+
|
|
108
|
+
Root->>Adapter: Phase + lifecycle authority
|
|
109
|
+
Adapter->>Engine: Provider-neutral dispatch request
|
|
110
|
+
Engine-->>Root: Exact route + request ID
|
|
111
|
+
Root->>Phase: Phase Scope
|
|
112
|
+
Root->>Record: Accepted or blocked-before-start result
|
|
113
|
+
Phase-->>Root: Phase report + commits
|
|
114
|
+
```
|
|
101
115
|
|
|
102
116
|
## Phase Execution
|
|
103
117
|
|
|
@@ -22,31 +22,38 @@ Each level has its own independent backlog, scratchpad, and active-idea config v
|
|
|
22
22
|
|
|
23
23
|
Start in the home that matches how formed the thought is. Every home is a fine place to stop. Dashed arrows are optional moves.
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
25
|
+
=== "Diagram"
|
|
26
|
+
|
|
27
|
+

|
|
28
|
+

|
|
29
|
+
|
|
30
|
+
=== "Mermaid source"
|
|
31
|
+
|
|
32
|
+
```mermaid
|
|
33
|
+
flowchart TD
|
|
34
|
+
Q{"How formed is\nthe thought?"}
|
|
35
|
+
BS["oat-brainstorm\n(may end inline\nor as a doc)"]
|
|
36
|
+
SP["Scratchpad seed\n.oat/ideas/\nscratchpad.md"]
|
|
37
|
+
ID["Idea\n.oat/ideas/{idea}/\ndiscovery.md"]
|
|
38
|
+
SUM["Summarized idea\n.oat/ideas/{idea}/\nsummary.md"]
|
|
39
|
+
BL["Backlog item\n.oat/repo/pjm/\nbacklog/items/"]
|
|
40
|
+
PR["Project\n.oat/projects/\n{scope}/{slug}/"]
|
|
41
|
+
SPLIT["Parent +\nchild projects"]
|
|
42
|
+
|
|
43
|
+
Q -->|unsure| BS
|
|
44
|
+
Q -->|seed| SP
|
|
45
|
+
Q -->|explore| ID
|
|
46
|
+
Q -->|scoped| BL
|
|
47
|
+
Q -->|ready| PR
|
|
48
|
+
BS -.-> ID
|
|
49
|
+
BS -.-> BL
|
|
50
|
+
BS -.->|"project(s)"| PR
|
|
51
|
+
SP -.->|optional| ID
|
|
52
|
+
ID -.->|optional| SUM
|
|
53
|
+
SUM -.->|optional| PR
|
|
54
|
+
BL -.->|optional| PR
|
|
55
|
+
PR -.->|"optional\n(spec-driven)"| SPLIT
|
|
56
|
+
```
|
|
50
57
|
|
|
51
58
|
Where to start:
|
|
52
59
|
|
|
@@ -38,21 +38,28 @@ and updates project state.
|
|
|
38
38
|
|
|
39
39
|
Tasks execute serially in one worktree for the phase.
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
41
|
+
=== "Diagram"
|
|
42
|
+
|
|
43
|
+

|
|
44
|
+

|
|
45
|
+
|
|
46
|
+
=== "Mermaid source"
|
|
47
|
+
|
|
48
|
+
```mermaid
|
|
49
|
+
flowchart LR
|
|
50
|
+
Root["Project root\nlifecycle owner"] --> P["Phase implementer\none per phase"]
|
|
51
|
+
P --> T1["Task 1\nbounded commit"]
|
|
52
|
+
P --> T2["Task 2\nbounded commit"]
|
|
53
|
+
P -. optional benefit-driven .-> N["Recon / specialist child"]
|
|
54
|
+
|
|
55
|
+
P --> Report["Phase report\nverification + commits"]
|
|
56
|
+
Report --> Root
|
|
57
|
+
Root --> Ledger["Commit task ledger\npre-review bookkeeping"]
|
|
58
|
+
Ledger --> R["Independent phase reviewer"]
|
|
59
|
+
R -->|pass| Book["Review-outcome bookkeeping\n+ next phase"]
|
|
60
|
+
R -->|blocking findings| Fix["Resume phase implementer\nbounded fix scope"]
|
|
61
|
+
Fix --> R2["Fresh root-owned review round"]
|
|
62
|
+
```
|
|
56
63
|
|
|
57
64
|
## Ownership
|
|
58
65
|
|
|
@@ -443,21 +450,28 @@ The new dispatch record links to the original `request_id` through the existing
|
|
|
443
450
|
`continuation_events` field. This is a new fix scope, not replacement of an
|
|
444
451
|
accepted failed launch and not a new schema version.
|
|
445
452
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
453
|
+
=== "Diagram"
|
|
454
|
+
|
|
455
|
+

|
|
456
|
+

|
|
457
|
+
|
|
458
|
+
=== "Mermaid source"
|
|
459
|
+
|
|
460
|
+
```mermaid
|
|
461
|
+
sequenceDiagram
|
|
462
|
+
participant Root
|
|
463
|
+
participant Phase as Phase implementer
|
|
464
|
+
participant Review as Phase reviewer
|
|
465
|
+
|
|
466
|
+
Root->>Phase: Phase Scope (request_id=A)
|
|
467
|
+
Phase-->>Root: DONE + task commits
|
|
468
|
+
Root->>Review: Review phase commit range
|
|
469
|
+
Review-->>Root: Critical / High findings
|
|
470
|
+
Root->>Phase: Resume A in fix mode
|
|
471
|
+
Phase-->>Root: Fix commit + verification
|
|
472
|
+
Root->>Review: New independent review round
|
|
473
|
+
Review-->>Root: Pass
|
|
474
|
+
```
|
|
461
475
|
|
|
462
476
|
## Parallel Phase Groups
|
|
463
477
|
|
|
@@ -35,14 +35,21 @@ For a one-page view of where people approve and what runs automatically in each
|
|
|
35
35
|
|
|
36
36
|
## Lifecycle Map
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
```
|
|
38
|
+
=== "Diagram"
|
|
39
|
+
|
|
40
|
+

|
|
41
|
+

|
|
42
|
+
|
|
43
|
+
=== "Mermaid source"
|
|
44
|
+
|
|
45
|
+
```mermaid
|
|
46
|
+
flowchart LR
|
|
47
|
+
D["Discovery"] --> S["Spec"] --> G["Design"] --> P["Plan"]
|
|
48
|
+
P --> I["Implement (oat-project-implement)"]
|
|
49
|
+
I --> R["Review loop"] --> PR["PR flow"]
|
|
50
|
+
PR --> DOC["Docs sync (optional)"]
|
|
51
|
+
DOC --> C["Complete"]
|
|
52
|
+
```
|
|
46
53
|
|
|
47
54
|
This map shows the spec-driven default. The quick, lite, import, and capture
|
|
48
55
|
lanes each skip part of it — see [Lane diagrams](#lane-diagrams) below. Lite in
|
|
@@ -340,12 +347,19 @@ See [Implementation Execution](execution/implementation-execution.md) for the fu
|
|
|
340
347
|
|
|
341
348
|
### Spec-Driven workflow lane
|
|
342
349
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
350
|
+
=== "Diagram"
|
|
351
|
+
|
|
352
|
+

|
|
353
|
+

|
|
354
|
+
|
|
355
|
+
=== "Mermaid source"
|
|
356
|
+
|
|
357
|
+
```mermaid
|
|
358
|
+
flowchart LR
|
|
359
|
+
D["Discover"] --> S["Spec"] --> G["Design"] --> P["Plan"]
|
|
360
|
+
P --> I["Implement (oat-project-implement)"]
|
|
361
|
+
I --> R["Review"] --> PR["PR"] --> Doc["Docs (optional)"] --> C["Complete"]
|
|
362
|
+
```
|
|
349
363
|
|
|
350
364
|
During the Design step, `oat-project-design` asks how to work through the document unless a mode was selected by argument, environment, or `workflow.designMode`. The three full-design choices are collaborative, selective collaborative, and draft-and-review.
|
|
351
365
|
|
|
@@ -365,15 +379,22 @@ effort controls.
|
|
|
365
379
|
|
|
366
380
|
### Quick lane
|
|
367
381
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
382
|
+
=== "Diagram"
|
|
383
|
+
|
|
384
|
+

|
|
385
|
+

|
|
386
|
+
|
|
387
|
+
=== "Mermaid source"
|
|
388
|
+
|
|
389
|
+
```mermaid
|
|
390
|
+
flowchart LR
|
|
391
|
+
Q["Quick Start\n(adaptive discovery)"] --> D{"Design depth?"}
|
|
392
|
+
D -->|Straight to plan| P["Plan"]
|
|
393
|
+
D -->|Lightweight design| LD["Design (quick)"] --> P
|
|
394
|
+
D -->|Promote| SD["→ Spec-Driven lane"]
|
|
395
|
+
P --> QI["Implement (oat-project-implement)"]
|
|
396
|
+
QI --> QR["Review / PR"]
|
|
397
|
+
```
|
|
377
398
|
|
|
378
399
|
Quick lane lightweight design intentionally keeps a smaller collaborative/draft choice. Selective collaborative becomes available only after promotion into the full spec-driven design lane.
|
|
379
400
|
|
|
@@ -386,13 +407,20 @@ should use the dispatch-policy names, including explicit `Uncapped` and
|
|
|
386
407
|
|
|
387
408
|
### Lite lane
|
|
388
409
|
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
410
|
+
=== "Diagram"
|
|
411
|
+
|
|
412
|
+

|
|
413
|
+

|
|
414
|
+
|
|
415
|
+
=== "Mermaid source"
|
|
416
|
+
|
|
417
|
+
```mermaid
|
|
418
|
+
flowchart LR
|
|
419
|
+
L["Lite interview\n(one batched round)"] --> P["Single-phase plan\n(one approval)"]
|
|
420
|
+
P --> I["Implement (oat-project-implement)"]
|
|
421
|
+
I --> R["Final review"] --> PR["PR (default closeout)"]
|
|
422
|
+
P -->|Scope grows| Q["Promote to Quick"]
|
|
423
|
+
```
|
|
396
424
|
|
|
397
425
|
Lite keeps planning and validation in `plan.md`. The interview selects a
|
|
398
426
|
`minimal`, `product`, `technical`, or `both` content shape and records the
|
|
@@ -420,29 +448,36 @@ from its five core sections plus any adaptive Product Behavior and Technical
|
|
|
420
448
|
Design, a **fresh** quick template takes over the `plan.md` path, and `state.md`
|
|
421
449
|
is **rewritten** to quick mode.
|
|
422
450
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
451
|
+
=== "Diagram"
|
|
452
|
+
|
|
453
|
+

|
|
454
|
+

|
|
455
|
+
|
|
456
|
+
=== "Mermaid source"
|
|
457
|
+
|
|
458
|
+
```mermaid
|
|
459
|
+
flowchart LR
|
|
460
|
+
subgraph Before
|
|
461
|
+
LPLAN["plan.md\nfive core sections plus adaptive\nProduct Behavior / Technical Design"]
|
|
462
|
+
LSTATE["state.md\noat_workflow_mode: lite"]
|
|
463
|
+
end
|
|
464
|
+
|
|
465
|
+
CMD["oat project promote\n--to quick"]
|
|
466
|
+
|
|
467
|
+
subgraph After
|
|
468
|
+
DISC["discovery.md\nderived from the lite plan\noat_ready_for: oat-project-quick-start"]
|
|
469
|
+
REF["references/lite-plan.md\noriginal lite plan, preserved"]
|
|
470
|
+
QPLAN["plan.md\nfresh quick-start template"]
|
|
471
|
+
QSTATE["state.md\noat_workflow_mode: quick\noat_phase: discovery (complete)\noat_ready_for: oat-project-quick-start"]
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
LPLAN --> CMD
|
|
475
|
+
LSTATE --> CMD
|
|
476
|
+
CMD -->|derive| DISC
|
|
477
|
+
CMD -->|move| REF
|
|
478
|
+
CMD -->|scaffold| QPLAN
|
|
479
|
+
CMD -->|rewrite| QSTATE
|
|
480
|
+
```
|
|
446
481
|
|
|
447
482
|
The project slug, directory, and branch are untouched, so history and any open
|
|
448
483
|
work continue uninterrupted. `oat_ready_for` is stamped on **both** `discovery.md`
|
|
@@ -455,21 +490,35 @@ categorical `reason` and exit non-zero. See
|
|
|
455
490
|
|
|
456
491
|
### Import lane
|
|
457
492
|
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
493
|
+
=== "Diagram"
|
|
494
|
+
|
|
495
|
+

|
|
496
|
+

|
|
497
|
+
|
|
498
|
+
=== "Mermaid source"
|
|
499
|
+
|
|
500
|
+
```mermaid
|
|
501
|
+
flowchart LR
|
|
502
|
+
I["Import Plan"] --> II1["Implement (oat-project-implement)"]
|
|
503
|
+
II1 --> IR["Review / PR"]
|
|
504
|
+
```
|
|
463
505
|
|
|
464
506
|
### Capture lane
|
|
465
507
|
|
|
466
508
|
Retroactive project creation for work done outside the OAT project workflow. Common scenario: mobile/cloud sessions where you brainstorm and implement with an agent, then want to open a PR and review from your desktop.
|
|
467
509
|
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
510
|
+
=== "Diagram"
|
|
511
|
+
|
|
512
|
+

|
|
513
|
+

|
|
514
|
+
|
|
515
|
+
=== "Mermaid source"
|
|
516
|
+
|
|
517
|
+
```mermaid
|
|
518
|
+
flowchart LR
|
|
519
|
+
W["Work on branch\n(no project)"] --> Cap["oat-project-capture"]
|
|
520
|
+
Cap --> R["Review / PR"]
|
|
521
|
+
```
|
|
473
522
|
|
|
474
523
|
Entry point: `/oat-project-capture` (skill-only, no CLI command — requires agent conversation context).
|
|
475
524
|
|
|
@@ -38,29 +38,36 @@ for the deep review request/receive mechanics.
|
|
|
38
38
|
|
|
39
39
|
## Flow map
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
41
|
+
=== "Diagram"
|
|
42
|
+
|
|
43
|
+

|
|
44
|
+

|
|
45
|
+
|
|
46
|
+
=== "Mermaid source"
|
|
47
|
+
|
|
48
|
+
```mermaid
|
|
49
|
+
flowchart TD
|
|
50
|
+
subgraph Planning
|
|
51
|
+
PL["Planning-phase\nartifact self-review"] --> PLR["Inherit planning parent"]
|
|
52
|
+
PLR --> PLT["Parent model\n(root already at/above ceiling)"]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
subgraph Implementation
|
|
56
|
+
IM["Root-owned phase\nself-review"] --> IMR["Resolve dispatch ceiling"]
|
|
57
|
+
IMR --> IMPIN["At-ceiling pin\n(ceiling final candidate)"]
|
|
58
|
+
IMR --> IMINH["Inherit\n(only if dispatcher known at/above ceiling)"]
|
|
59
|
+
IMR --> IMCLI["Exact CLI reviewer\n(selected pre-launch)"]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
subgraph Gates
|
|
63
|
+
PG["Phase review gate\n(external)"] --> PGR["Configured exec target\n(gates.execTargets)"]
|
|
64
|
+
PGR --> PGT["Separate reviewer CLI\n(prefers another model family;\nfalls back with a warning)"]
|
|
65
|
+
|
|
66
|
+
LG["Lifecycle / final gate"] --> LGR["Configured exec target\n(gates.execTargets)"]
|
|
67
|
+
LGR --> LGT["Separate reviewer CLI\n(never replaced by self-review;\nfalls back with a warning)"]
|
|
68
|
+
LGT -. may spawn .-> LGN["Nested managed\nreviewer child inside gate"]
|
|
69
|
+
end
|
|
70
|
+
```
|
|
64
71
|
|
|
65
72
|
The dotted branch marks the only flavor that may **spawn a nested managed
|
|
66
73
|
reviewer child** inside the gate exec target: the lifecycle/final gate.
|
|
@@ -1,11 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
DocsPage,
|
|
3
|
+
Mermaid,
|
|
4
|
+
Tab,
|
|
5
|
+
Tabs,
|
|
6
|
+
ZoomImage,
|
|
7
|
+
} from '@open-agent-toolkit/docs-theme';
|
|
2
8
|
import defaultComponents from 'fumadocs-ui/mdx';
|
|
3
9
|
import type { Metadata } from 'next';
|
|
4
10
|
import { notFound } from 'next/navigation';
|
|
5
11
|
|
|
6
12
|
import { source } from '@/lib/source';
|
|
7
13
|
|
|
8
|
-
const mdxComponents = {
|
|
14
|
+
const mdxComponents = {
|
|
15
|
+
...defaultComponents,
|
|
16
|
+
Mermaid,
|
|
17
|
+
Tab,
|
|
18
|
+
Tabs,
|
|
19
|
+
img: ZoomImage,
|
|
20
|
+
};
|
|
9
21
|
|
|
10
22
|
type PageProps = {
|
|
11
23
|
params: Promise<{ slug?: string[] }>;
|
|
@@ -149,7 +149,7 @@ const PUBLIC_PACKAGE_CONTRACTS = [
|
|
|
149
149
|
requiredPackedTextFiles: [],
|
|
150
150
|
forbiddenPathPatterns: [...COMMON_FORBIDDEN_PATH_PATTERNS],
|
|
151
151
|
versionPolicyAdditionalRoots: [],
|
|
152
|
-
versionPolicyIgnorePatterns: [],
|
|
152
|
+
versionPolicyIgnorePatterns: ['src/**/*.test.ts'],
|
|
153
153
|
},
|
|
154
154
|
{
|
|
155
155
|
workspaceDir: 'packages/docs-transforms',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-agent-toolkit/cli",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.15",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Open Agent Toolkit CLI",
|
|
6
6
|
"homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/cli",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"ora": "^9.0.0",
|
|
35
35
|
"yaml": "2.8.2",
|
|
36
36
|
"zod": "^3.25.76",
|
|
37
|
-
"@open-agent-toolkit/control-plane": "0.3.
|
|
37
|
+
"@open-agent-toolkit/control-plane": "0.3.15"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^22.10.0",
|