@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.
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "oatVersion": "0.3.14"
3
+ "oatVersion": "0.3.15"
4
4
  }
@@ -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
+ ![What the diagram shows](/diagrams/name-light.svg)
90
+ ![What the diagram shows](/diagrams/name-dark.svg)
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
- ```mermaid
26
- flowchart TD
27
- F["Fixture template\ntools/smoke/fixture/"] --> PRE["Preflight\ninstall + auth + fixture + local oat"]
28
- PRE -->|blocked| STOP["Exit before provisioning"]
29
- PRE -->|ready| PREP["Prepare / provision\ndisposable worktree + isolated config + manifest"]
30
- PREP --> DRIVE["Drive\nper-harness protocol"]
31
- DRIVE --> AUTO["Automated: runner launches provider"]
32
- DRIVE --> OP["Operator: printed command + prompt"]
33
- AUTO --> COLLECT["Collect\nevidence bundle + report"]
34
- OP --> COLLECT
35
- COLLECT --> CLEAN["Cleanup\nmanifest-scoped"]
36
- COLLECT -.->|--keep| SKIP["Cleanup skipped"]
37
- ```
25
+ === "Diagram"
26
+
27
+ ![Smoke-test flow: fixture template, preflight (exit before provisioning if blocked), prepare and provision, drive automatically or by an operator, collect evidence, then manifest-scoped cleanup, skipped with --keep](/diagrams/smoke-testing-light.svg)
28
+ ![Smoke-test flow: fixture template, preflight (exit before provisioning if blocked), prepare and provision, drive automatically or by an operator, collect evidence, then manifest-scoped cleanup, skipped with --keep](/diagrams/smoke-testing-dark.svg)
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
- ```mermaid
70
- flowchart TD
71
- SETUP["Bootstrap once\nConfirm inputs, then oat docs init"]
72
- MD["Markdown\nValidate files and config"]
73
- APP["Docs app\nInstall and verify build"]
74
- AN["Analyze\nRead docs, write findings"]
75
- PLAN["Plan from findings\nNo docs writes yet"]
76
- Q{"Approve changes?"}
77
- APPLY["Apply approved items\nNew branch, verify, offer PR"]
78
- STOP["Skip all\nNo docs changed"]
79
- SETUP --> MD
80
- SETUP --> APP
81
- MD -.-> AN
82
- APP -.-> AN
83
- AN --> PLAN
84
- PLAN --> Q
85
- Q -->|"approved"| APPLY
86
- Q -->|"all skipped"| STOP
87
- ```
69
+ === "Diagram"
70
+
71
+ ![Bootstrap once with oat docs init into plain Markdown or a docs app, then analyze, plan, and either apply approved changes or stop when all are skipped](/diagrams/docs-workflows-light.svg)
72
+ ![Bootstrap once with oat docs init into plain Markdown or a docs app, then analyze, plan, and either apply approved changes or stop when all are skipped](/diagrams/docs-workflows-dark.svg)
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
- ```mermaid
13
- flowchart LR
14
- GOAL["What do you\nneed first?"] --> SYNC["Align coding tools\nProvider Sync"]
15
- GOAL --> SKILLS["Help with one task\nReusable Skills"]
16
- GOAL --> WORK["Resume longer work\nWorkflows"]
17
- GOAL --> DOCS["Maintain documentation\nMarkdown or a docs site"]
18
- SYNC -.-> LATER["Add another path\nwhenever useful"]
19
- SKILLS -.-> LATER
20
- WORK -.-> LATER
21
- DOCS -.-> LATER
22
- ```
12
+ === "Diagram"
13
+
14
+ ![Four independent starting points: align coding tools with Provider Sync, help with one task with reusable skills, resume longer work with workflows, or maintain documentation; add another path whenever useful](/diagrams/adoption-paths-light.svg)
15
+ ![Four independent starting points: align coding tools with Provider Sync, help with one task with reusable skills, resume longer work with workflows, or maintain documentation; add another path whenever useful](/diagrams/adoption-paths-dark.svg)
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
- ```mermaid
40
- flowchart LR
41
- SKILLS[".agents/skills/"] --> OAT["oat sync"]
42
- AGENTS[".agents/agents/"] --> OAT
43
- RULES[".agents/rules/"] --> OAT
44
- OAT --> CLAUDE[".claude/"]
45
- OAT --> CURSOR[".cursor/"]
46
- OAT --> COPILOT[".github/"]
47
- OAT --> CODEX[".codex/"]
48
- ```
46
+ === "Diagram"
47
+
48
+ ![Canonical skills, agents and rules in .agents/ flow through oat sync into provider views under .claude/, .cursor/, .github/ and .codex/](/diagrams/provider-views-light.svg)
49
+ ![Canonical skills, agents and rules in .agents/ flow through oat sync into provider views under .claude/, .cursor/, .github/ and .codex/](/diagrams/provider-views-dark.svg)
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
- ```mermaid
19
- flowchart TD
20
- CANON["Canonical assets\nEdit .agents/"]
21
- SYNC["oat sync\nGenerate views"]
22
- VIEWS["Provider views"]
23
- MANIFEST["Sync manifest"]
24
- STATUS["oat status\nInspect before resolving"]
25
- TRACKED["Tracked views\nin_sync / drifted / missing"]
26
- STRAY["Unmanaged files\nstray"]
27
- CANON --> SYNC
28
- SYNC --> VIEWS
29
- SYNC --> MANIFEST
30
- MANIFEST --> STATUS
31
- VIEWS --> STATUS
32
- STATUS --> TRACKED
33
- STATUS --> STRAY
34
- ```
18
+ === "Diagram"
19
+
20
+ ![You edit canonical assets in .agents/; oat sync generates provider views and the sync manifest; oat status reads both and reports tracked views as in_sync, drifted or missing, and unmanaged files as stray](/diagrams/sync-and-drift-light.svg)
21
+ ![You edit canonical assets in .agents/; oat sync generates provider views and the sync manifest; oat status reads both and reports tracked views as in_sync, drifted or missing, and unmanaged files as stray](/diagrams/sync-and-drift-dark.svg)
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
- ```mermaid
19
- flowchart TD
20
- D["Discovery in progress"] --> RS["Ready for spec"]
21
- RS --> S["Spec in progress"] --> RD["Ready for design"]
22
- RD --> G["Design in progress"] --> RP["Ready for plan"]
23
- RP --> P["Plan in progress"] --> RI["Ready for implement"]
24
- RI --> I["Implement in progress"] --> IC["Implement complete"]
25
- IC --> PRO["PR open (pr_open)"]
26
- PRO --> REV["Revise (in_progress)"]
27
- REV --> PRO
28
- PRO --> C["Complete"]
29
-
30
- I --> RV["Review received"]
31
- RV --> FA["Fixes added"]
32
- FA --> FC["Fixes completed"]
33
- FC --> PASSED["Review passed"]
34
- PASSED --> I
35
-
36
- LITE["Lite: batched interview\n(no discovery/spec/design)"] -. entry point .-> P
37
- ```
18
+ === "Diagram"
19
+
20
+ ![Project state machine: discovery, spec, design, plan and implementation phases, then PR open and complete; a review loop returns to implementation, a revise loop runs from PR open and back, and lite enters at planning](/diagrams/project-state-machine-light.svg)
21
+ ![Project state machine: discovery, spec, design, plan and implementation phases, then PR open and complete; a review loop returns to implementation, a revise loop runs from PR open and back, and lite enters at planning](/diagrams/project-state-machine-dark.svg)
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
- ```mermaid
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
- L1 --> L2 --> L3
24
+ ![Three evidence layers: policy resolution, launcher-owned configured invocation, and optional runtime-observed identity; assertions check layers 1 and 2 and only record layer 3, which resolves to reported or not-reported](/diagrams/evidence-layers-light.svg)
25
+ ![Three evidence layers: policy resolution, launcher-owned configured invocation, and optional runtime-observed identity; assertions check layers 1 and 2 and only record layer 3, which resolves to reported or not-reported](/diagrams/evidence-layers-dark.svg)
29
26
 
30
- A["Assertions"] -->|assert on| L1
31
- A -->|assert on| L2
32
- A -.->|record only| L3
27
+ === "Mermaid source"
33
28
 
34
- L3 --> R["reported\n(both present + trusted provenance)"]
35
- L3 --> NR["not-reported\n(anything else normalizes here)"]
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
- ```mermaid
33
- flowchart TD
34
- Root["Project root\nlifecycle owner"]
35
- Adapter["Project dispatch adapter"]
36
- Engine["Provider-neutral dispatch engine"]
37
-
38
- Root --> Adapter --> Engine
39
- Engine --> P["Phase implementer\none per phase"]
40
- P --> T1["Planned task commit"]
41
- P --> T2["Planned task commit"]
42
- P -. optional .-> Recon["Recon / specialist / isolated fanout"]
43
-
44
- Root -. independent review lane .-> Adapter
45
- Engine -. exact reviewer route .-> R["Phase reviewer"]
46
- R -->|blocking findings| Root
47
- Root -->|resume bounded fix| P
48
-
49
- Root -. external gate lane .-> G["Configured cross-runtime gate"]
50
- ```
32
+ === "Diagram"
33
+
34
+ ![Default topology: the project root goes through the dispatch adapter and provider-neutral engine to one phase implementer per phase, which makes planned task commits and optionally a recon or specialist fanout; the engine routes an exact phase reviewer whose blocking findings return to the root, which resumes a bounded fix; dashed lanes show independent review and an external cross-runtime gate](/diagrams/orchestration-model-1-default-topology-light.svg)
35
+ ![Default topology: the project root goes through the dispatch adapter and provider-neutral engine to one phase implementer per phase, which makes planned task commits and optionally a recon or specialist fanout; the engine routes an exact phase reviewer whose blocking findings return to the root, which resumes a bounded fix; dashed lanes show independent review and an external cross-runtime gate](/diagrams/orchestration-model-1-default-topology-dark.svg)
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
- ```mermaid
87
- sequenceDiagram
88
- participant Root as Project root
89
- participant Adapter as Project adapter
90
- participant Engine as Dispatch engine
91
- participant Record as Run record in implementation.md
92
- participant Phase as Phase implementer
93
-
94
- Root->>Adapter: Phase + lifecycle authority
95
- Adapter->>Engine: Provider-neutral dispatch request
96
- Engine-->>Root: Exact route + request ID
97
- Root->>Phase: Phase Scope
98
- Root->>Record: Accepted or blocked-before-start result
99
- Phase-->>Root: Phase report + commits
100
- ```
93
+ === "Diagram"
94
+
95
+ ![Dispatch layers sequence: the project root passes phase and lifecycle authority to the adapter, the adapter sends a provider-neutral request to the engine, the engine returns the exact route and request ID, the root sends the phase scope and records the accepted or blocked result in implementation.md, and the implementer returns its report and commits](/diagrams/orchestration-model-2-dispatch-layers-light.svg)
96
+ ![Dispatch layers sequence: the project root passes phase and lifecycle authority to the adapter, the adapter sends a provider-neutral request to the engine, the engine returns the exact route and request ID, the root sends the phase scope and records the accepted or blocked result in implementation.md, and the implementer returns its report and commits](/diagrams/orchestration-model-2-dispatch-layers-dark.svg)
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
- ```mermaid
26
- flowchart TD
27
- Q{"How formed is\nthe thought?"}
28
- BS["oat-brainstorm\n(may end inline\nor as a doc)"]
29
- SP["Scratchpad seed\n.oat/ideas/\nscratchpad.md"]
30
- ID["Idea\n.oat/ideas/{idea}/\ndiscovery.md"]
31
- SUM["Summarized idea\n.oat/ideas/{idea}/\nsummary.md"]
32
- BL["Backlog item\n.oat/repo/pjm/\nbacklog/items/"]
33
- PR["Project\n.oat/projects/\n{scope}/{slug}/"]
34
- SPLIT["Parent +\nchild projects"]
35
-
36
- Q -->|unsure| BS
37
- Q -->|seed| SP
38
- Q -->|explore| ID
39
- Q -->|scoped| BL
40
- Q -->|ready| PR
41
- BS -.-> ID
42
- BS -.-> BL
43
- BS -.->|"project(s)"| PR
44
- SP -.->|optional| ID
45
- ID -.->|optional| SUM
46
- SUM -.->|optional| PR
47
- BL -.->|optional| PR
48
- PR -.->|"optional\n(spec-driven)"| SPLIT
49
- ```
25
+ === "Diagram"
26
+
27
+ ![Where a thought starts depending on how formed it is: oat-brainstorm when unsure, a scratchpad seed, an idea, a backlog item, or a project, with optional moves between them and an optional spec-driven split into parent and child projects](/diagrams/ideas-lifecycle-light.svg)
28
+ ![Where a thought starts depending on how formed it is: oat-brainstorm when unsure, a scratchpad seed, an idea, a backlog item, or a project, with optional moves between them and an optional spec-driven split into parent and child projects](/diagrams/ideas-lifecycle-dark.svg)
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
- ```mermaid
42
- flowchart LR
43
- Root["Project root\nlifecycle owner"] --> P["Phase implementer\none per phase"]
44
- P --> T1["Task 1\nbounded commit"]
45
- P --> T2["Task 2\nbounded commit"]
46
- P -. optional benefit-driven .-> N["Recon / specialist child"]
47
-
48
- P --> Report["Phase report\nverification + commits"]
49
- Report --> Root
50
- Root --> Ledger["Commit task ledger\npre-review bookkeeping"]
51
- Ledger --> R["Independent phase reviewer"]
52
- R -->|pass| Book["Review-outcome bookkeeping\n+ next phase"]
53
- R -->|blocking findings| Fix["Resume phase implementer\nbounded fix scope"]
54
- Fix --> R2["Fresh root-owned review round"]
55
- ```
41
+ === "Diagram"
42
+
43
+ ![Phase execution: the project root dispatches one phase implementer, which makes bounded task commits and optionally a recon or specialist child, then reports back; the root commits the task ledger, an independent reviewer passes the phase or sends blocking findings to a resumed implementer for a bounded fix and a fresh review round](/diagrams/implementation-execution-1-quick-look-light.svg)
44
+ ![Phase execution: the project root dispatches one phase implementer, which makes bounded task commits and optionally a recon or specialist child, then reports back; the root commits the task ledger, an independent reviewer passes the phase or sends blocking findings to a resumed implementer for a bounded fix and a fresh review round](/diagrams/implementation-execution-1-quick-look-dark.svg)
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
- ```mermaid
447
- sequenceDiagram
448
- participant Root
449
- participant Phase as Phase implementer
450
- participant Review as Phase reviewer
451
-
452
- Root->>Phase: Phase Scope (request_id=A)
453
- Phase-->>Root: DONE + task commits
454
- Root->>Review: Review phase commit range
455
- Review-->>Root: Critical / High findings
456
- Root->>Phase: Resume A in fix mode
457
- Phase-->>Root: Fix commit + verification
458
- Root->>Review: New independent review round
459
- Review-->>Root: Pass
460
- ```
453
+ === "Diagram"
454
+
455
+ ![Fix continuity sequence: root sends the phase scope with request_id A, the implementer returns DONE with task commits, the reviewer returns Critical or High findings, root resumes request A in fix mode, the implementer returns a fix commit, and a new independent review round passes](/diagrams/implementation-execution-2-fix-continuity-light.svg)
456
+ ![Fix continuity sequence: root sends the phase scope with request_id A, the implementer returns DONE with task commits, the reviewer returns Critical or High findings, root resumes request A in fix mode, the implementer returns a fix commit, and a new independent review round passes](/diagrams/implementation-execution-2-fix-continuity-dark.svg)
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
- ```mermaid
39
- flowchart LR
40
- D["Discovery"] --> S["Spec"] --> G["Design"] --> P["Plan"]
41
- P --> I["Implement (oat-project-implement)"]
42
- I --> R["Review loop"] --> PR["PR flow"]
43
- PR --> DOC["Docs sync (optional)"]
44
- DOC --> C["Complete"]
45
- ```
38
+ === "Diagram"
39
+
40
+ ![Project lifecycle map: discovery, spec, design, plan, implement, review loop, PR flow, optional docs sync, complete](/diagrams/project-lifecycle-1-lifecycle-map-light.svg)
41
+ ![Project lifecycle map: discovery, spec, design, plan, implement, review loop, PR flow, optional docs sync, complete](/diagrams/project-lifecycle-1-lifecycle-map-dark.svg)
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
- ```mermaid
344
- flowchart LR
345
- D["Discover"] --> S["Spec"] --> G["Design"] --> P["Plan"]
346
- P --> I["Implement (oat-project-implement)"]
347
- I --> R["Review"] --> PR["PR"] --> Doc["Docs (optional)"] --> C["Complete"]
348
- ```
350
+ === "Diagram"
351
+
352
+ ![Spec-driven lane: discover, spec, design, plan, implement, review, PR, optional docs, complete](/diagrams/project-lifecycle-2-spec-driven-light.svg)
353
+ ![Spec-driven lane: discover, spec, design, plan, implement, review, PR, optional docs, complete](/diagrams/project-lifecycle-2-spec-driven-dark.svg)
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
- ```mermaid
369
- flowchart LR
370
- Q["Quick Start\n(adaptive discovery)"] --> D{"Design depth?"}
371
- D -->|Straight to plan| P["Plan"]
372
- D -->|Lightweight design| LD["Design (quick)"] --> P
373
- D -->|Promote| SD["→ Spec-Driven lane"]
374
- P --> QI["Implement (oat-project-implement)"]
375
- QI --> QR["Review / PR"]
376
- ```
382
+ === "Diagram"
383
+
384
+ ![Quick lane: quick start with adaptive discovery, then a design-depth choice (straight to plan, lightweight design, or promote to spec-driven), plan, implement, review and PR](/diagrams/project-lifecycle-3-quick-lane-light.svg)
385
+ ![Quick lane: quick start with adaptive discovery, then a design-depth choice (straight to plan, lightweight design, or promote to spec-driven), plan, implement, review and PR](/diagrams/project-lifecycle-3-quick-lane-dark.svg)
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
- ```mermaid
390
- flowchart LR
391
- L["Lite interview\n(one batched round)"] --> P["Single-phase plan\n(one approval)"]
392
- P --> I["Implement (oat-project-implement)"]
393
- I --> R["Final review"] --> PR["PR (default closeout)"]
394
- P -->|Scope grows| Q["Promote to Quick"]
395
- ```
410
+ === "Diagram"
411
+
412
+ ![Lite lane: one batched interview, a single-phase plan with one approval, implement, final review and PR, with promotion to quick if scope grows](/diagrams/project-lifecycle-4-lite-lane-light.svg)
413
+ ![Lite lane: one batched interview, a single-phase plan with one approval, implement, final review and PR, with promotion to quick if scope grows](/diagrams/project-lifecycle-4-lite-lane-dark.svg)
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
- ```mermaid
424
- flowchart LR
425
- subgraph Before
426
- LPLAN["plan.md\nfive core sections plus adaptive\nProduct Behavior / Technical Design"]
427
- LSTATE["state.md\noat_workflow_mode: lite"]
428
- end
429
-
430
- CMD["oat project promote\n--to quick"]
431
-
432
- subgraph After
433
- DISC["discovery.md\nderived from the lite plan\noat_ready_for: oat-project-quick-start"]
434
- REF["references/lite-plan.md\noriginal lite plan, preserved"]
435
- QPLAN["plan.md\nfresh quick-start template"]
436
- QSTATE["state.md\noat_workflow_mode: quick\noat_phase: discovery (complete)\noat_ready_for: oat-project-quick-start"]
437
- end
438
-
439
- LPLAN --> CMD
440
- LSTATE --> CMD
441
- CMD -->|derive| DISC
442
- CMD -->|move| REF
443
- CMD -->|scaffold| QPLAN
444
- CMD -->|rewrite| QSTATE
445
- ```
451
+ === "Diagram"
452
+
453
+ ![Promoting a lite project to quick: oat project promote --to quick derives discovery.md from the lite plan, moves the original to references/lite-plan.md, scaffolds a fresh quick plan.md, and rewrites state.md to quick mode](/diagrams/project-lifecycle-5-promote-lite-to-quick-light.svg)
454
+ ![Promoting a lite project to quick: oat project promote --to quick derives discovery.md from the lite plan, moves the original to references/lite-plan.md, scaffolds a fresh quick plan.md, and rewrites state.md to quick mode](/diagrams/project-lifecycle-5-promote-lite-to-quick-dark.svg)
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
- ```mermaid
459
- flowchart LR
460
- I["Import Plan"] --> II1["Implement (oat-project-implement)"]
461
- II1 --> IR["Review / PR"]
462
- ```
493
+ === "Diagram"
494
+
495
+ ![Import lane: import a plan, implement, then review and PR](/diagrams/project-lifecycle-6-import-lane-light.svg)
496
+ ![Import lane: import a plan, implement, then review and PR](/diagrams/project-lifecycle-6-import-lane-dark.svg)
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
- ```mermaid
469
- flowchart LR
470
- W["Work on branch\n(no project)"] --> Cap["oat-project-capture"]
471
- Cap --> R["Review / PR"]
472
- ```
510
+ === "Diagram"
511
+
512
+ ![Capture lane: work on a branch without a project, run oat-project-capture, then review and PR](/diagrams/project-lifecycle-7-capture-lane-light.svg)
513
+ ![Capture lane: work on a branch without a project, run oat-project-capture, then review and PR](/diagrams/project-lifecycle-7-capture-lane-dark.svg)
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
- ```mermaid
42
- flowchart TD
43
- subgraph Planning
44
- PL["Planning-phase\nartifact self-review"] --> PLR["Inherit planning parent"]
45
- PLR --> PLT["Parent model\n(root already at/above ceiling)"]
46
- end
47
-
48
- subgraph Implementation
49
- IM["Root-owned phase\nself-review"] --> IMR["Resolve dispatch ceiling"]
50
- IMR --> IMPIN["At-ceiling pin\n(ceiling final candidate)"]
51
- IMR --> IMINH["Inherit\n(only if dispatcher known at/above ceiling)"]
52
- IMR --> IMCLI["Exact CLI reviewer\n(selected pre-launch)"]
53
- end
54
-
55
- subgraph Gates
56
- PG["Phase review gate\n(external)"] --> PGR["Configured exec target\n(gates.execTargets)"]
57
- PGR --> PGT["Separate reviewer CLI\n(prefers another model family;\nfalls back with a warning)"]
58
-
59
- LG["Lifecycle / final gate"] --> LGR["Configured exec target\n(gates.execTargets)"]
60
- LGR --> LGT["Separate reviewer CLI\n(never replaced by self-review;\nfalls back with a warning)"]
61
- LGT -. may spawn .-> LGN["Nested managed\nreviewer child inside gate"]
62
- end
63
- ```
41
+ === "Diagram"
42
+
43
+ ![Review flavors: planning self-review inherits the planning parent; implementation self-review resolves the dispatch ceiling to an at-ceiling pin, inherit, or an exact CLI reviewer; phase and lifecycle gates run a separate reviewer CLI from a configured exec target, and the lifecycle gate's reviewer CLI may spawn a nested reviewer child](/diagrams/review-flavors-light.svg)
44
+ ![Review flavors: planning self-review inherits the planning parent; implementation self-review resolves the dispatch ceiling to an at-ceiling pin, inherit, or an exact CLI reviewer; phase and lifecycle gates run a separate reviewer CLI from a configured exec target, and the lifecycle gate's reviewer CLI may spawn a nested reviewer child](/diagrams/review-flavors-dark.svg)
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,6 +1,6 @@
1
1
  {
2
- "cli": "0.3.14",
3
- "docs-config": "0.3.14",
4
- "docs-theme": "0.3.14",
5
- "docs-transforms": "0.3.14"
2
+ "cli": "0.3.15",
3
+ "docs-config": "0.3.15",
4
+ "docs-theme": "0.3.15",
5
+ "docs-transforms": "0.3.15"
6
6
  }
@@ -1,11 +1,23 @@
1
- import { DocsPage, Mermaid, Tab, Tabs } from '@open-agent-toolkit/docs-theme';
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 = { ...defaultComponents, Mermaid, Tab, Tabs };
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[] }>;
@@ -3,6 +3,7 @@
3
3
  @import 'fumadocs-ui/css/preset.css';
4
4
 
5
5
  @source '../node_modules/fumadocs-ui/dist/**/*.js';
6
+ @source '../node_modules/@open-agent-toolkit/docs-theme/dist/**/*.js';
6
7
 
7
8
  /* remark-github-blockquote-alert callout styling (fd-* design tokens) */
8
9
  @layer base {
@@ -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.14",
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.14"
37
+ "@open-agent-toolkit/control-plane": "0.3.15"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^22.10.0",