@open-agent-toolkit/cli 0.1.52 → 0.1.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/assets/docs/cli-utilities/tool-packs.md +23 -2
  2. package/assets/docs/contributing/skills.md +16 -0
  3. package/assets/docs/workflows/projects/implementation-execution.md +20 -0
  4. package/assets/docs/workflows/skills/index.md +3 -0
  5. package/assets/docs/workflows/skills/repo-improve.md +45 -0
  6. package/assets/public-package-versions.json +4 -4
  7. package/assets/skills/oat-dispatch-subagents/SKILL.md +254 -0
  8. package/assets/skills/oat-dispatch-subagents/references/provider-claude.md +44 -0
  9. package/assets/skills/oat-dispatch-subagents/references/provider-codex.md +69 -0
  10. package/assets/skills/oat-dispatch-subagents/references/provider-cursor.md +61 -0
  11. package/assets/skills/oat-dispatch-subagents/references/record-schema.md +109 -0
  12. package/assets/skills/oat-pjm-add-backlog-item/SKILL.md +6 -3
  13. package/assets/skills/oat-pjm-review-backlog/SKILL.md +22 -10
  14. package/assets/skills/oat-project-dispatch-subagents/SKILL.md +234 -0
  15. package/assets/skills/oat-repo-improve/SKILL.md +280 -0
  16. package/assets/skills/oat-repo-improve/references/audit-playbook.md +130 -0
  17. package/assets/skills/oat-repo-improve/references/plan-template.md +200 -0
  18. package/assets/skills/oat-repo-maintainability-review/SKILL.md +22 -7
  19. package/assets/templates/backlog-item.md +1 -0
  20. package/assets/templates/pjm-agents.md +8 -0
  21. package/assets/templates/reference-agents.md +3 -1
  22. package/dist/commands/init/tools/shared/skill-manifest.d.ts +2 -2
  23. package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
  24. package/dist/commands/init/tools/shared/skill-manifest.js +3 -0
  25. package/package.json +2 -2
@@ -0,0 +1,109 @@
1
+ # Dispatch Record Schema
2
+
3
+ Load this reference only when constructing or validating dispatch evidence.
4
+ Use neutral scope, action, role, and authority fields. Calling workflows may
5
+ add namespaced metadata without redefining these fields.
6
+
7
+ ## Request
8
+
9
+ ```yaml
10
+ request_id: dispatch-unique-id
11
+ caller: oat-repo-improve
12
+ scope: repo:packages/cli
13
+ objective: Audit CLI correctness hotspots
14
+ action: analysis
15
+ role:
16
+ name: repo-audit-scout
17
+ class: recon
18
+ provider: codex
19
+ dispatch_context: root-native
20
+ dispatch_policy: economy
21
+ dispatch_ceiling: high
22
+ authority: read-only
23
+ expected_output: structured-findings
24
+ verification_evidence: file-line-references
25
+ deadline_seconds: 300
26
+ retry_limit: 1
27
+ authorization_scope: this-audit-run
28
+ selection_source: native-default
29
+ fallback:
30
+ mode: explicit-downgrade
31
+ target: reduced-quick-audit
32
+ escalate_when:
33
+ - evidence requires cross-package reconciliation
34
+ - security impact is consequential
35
+ ```
36
+
37
+ `dispatch_policy` and `dispatch_ceiling` are optional resolved inputs. The
38
+ general engine does not resolve their source.
39
+
40
+ ## Record
41
+
42
+ ```yaml
43
+ request_id: dispatch-unique-id
44
+ caller: oat-repo-improve
45
+ scope: repo:packages/cli
46
+ objective: Audit CLI correctness hotspots
47
+ action: analysis
48
+ role_name: repo-audit-scout
49
+ role_class: recon
50
+ provider: codex
51
+ dispatch_context: root-native
52
+ dispatch_policy: economy
53
+ dispatch_ceiling: high
54
+ catalog_snapshot:
55
+ id: root-native-1
56
+ source: tool-schema
57
+ observed_at: 2026-07-12T00:00:00Z
58
+ authority: read-only
59
+ role_selector: oat-recon-worker
60
+ model_selector: opaque-provider-selector
61
+ model_selector_granularity: opaque
62
+ effort_selector: economical
63
+ selection_source: native-default
64
+ candidates_considered:
65
+ - opaque-provider-selector
66
+ selection_reason: native-catalog
67
+ selected_route: native
68
+ deadline_seconds: 300
69
+ retry_limit: 1
70
+ payload: {}
71
+ launch_status: accepted
72
+ child_outcome: completed
73
+ configured_invocation_evidence: []
74
+ runtime_confirmation: not-reported
75
+ diagnostics: []
76
+ continuation_events: []
77
+ ```
78
+
79
+ `role_selector` is the exact provider or harness agent-type selector, when that
80
+ surface exists. Preserve opaque selectors byte-for-byte.
81
+
82
+ Use `selection_source: native-default` for the preferred same-runtime native
83
+ route, `policy-resolved` for a CLI/programmatic or cross-runtime route selected
84
+ by configured project/workflow/gate policy, and `explicit-user` for an
85
+ otherwise agent-proposed alternate route approved for the current run. For
86
+ `policy-resolved`, include the owning configuration in
87
+ `configured_invocation_evidence`. CLI or SDK availability alone is never a
88
+ selection source.
89
+
90
+ ## Recon Wave
91
+
92
+ ```yaml
93
+ wave_id: repo-audit-wave-1
94
+ scope: repo:packages/cli
95
+ shared_dispatch_record: dispatch-unique-id
96
+ lanes:
97
+ - lane_id: correctness
98
+ scope: packages/cli/src
99
+ launch_status: accepted
100
+ child_outcome: completed
101
+ - lane_id: security
102
+ scope: packages/cli/src
103
+ launch_status: accepted
104
+ child_outcome: completed
105
+ ```
106
+
107
+ The wave scope is the aggregate boundary. Lane scope may narrow it. Use one
108
+ shared record only when every dispatch axis listed in the main skill is
109
+ identical.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-pjm-add-backlog-item
3
- version: 1.2.0
3
+ version: 1.3.0
4
4
  description: Use when the user requests or confirms adding a new repo backlog item — e.g. "add a backlog item for X", "capture that as backlog", "track that follow-up", "file a backlog ticket", or confirms a previously offered backlog capture. Do NOT auto-invoke when a follow-up is mentioned. Creates the item file in the file-per-item backlog structure, regenerates the index, and prompts for curated overview updates.
5
5
  disable-model-invocation: false
6
6
  user-invocable: true
@@ -98,8 +98,10 @@ ITEM_PATH=".oat/repo/pjm/backlog/items/{id}.md"
98
98
  - `labels`
99
99
  - `assignee`
100
100
  - `associated_issues`
101
- 3. The agent should propose an initial `scope_estimate` based on the described work, then ask the user to confirm or adjust it.
102
- 4. Write the item body with:
101
+ - `external_plans` (initialize to `[]`; `oat-repo-improve` owns later reverse-link additions)
102
+ 3. Keep `external_plans` as a YAML string array of repo-relative paths under `.oat/repo/reference/external-plans/`. Do not pre-populate it from discussion or anticipated work.
103
+ 4. The agent should propose an initial `scope_estimate` based on the described work, then ask the user to confirm or adjust it.
104
+ 5. Write the item body with:
103
105
  - `## Description`
104
106
  - `## Acceptance Criteria`
105
107
 
@@ -147,6 +149,7 @@ Report:
147
149
 
148
150
  - New item file exists under `.oat/repo/pjm/backlog/items/` with a `BL-YYMMDD-slug` filename matching its `id`
149
151
  - Item includes populated frontmatter and both required body sections
152
+ - Item initializes `external_plans: []` for future reverse links
150
153
  - `scope_estimate` was proposed and confirmed
151
154
  - `oat backlog regenerate-index` ran successfully
152
155
  - `.oat/repo/pjm/backlog/index.md` remains valid, with managed section untouched except by regeneration
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: oat-pjm-review-backlog
3
- version: 1.4.0
4
- description: Use when prioritizing the file-backed repo backlog or evaluating roadmap alignment. Produces value-effort ratings, dependency mapping, and execution recommendations.
3
+ version: 1.5.0
4
+ description: Use when prioritizing the file-backed repo backlog or evaluating roadmap alignment. Produces value-effort ratings, dependency mapping, execution recommendations, and an optional external-plan handoff.
5
5
  argument-hint: '[backlog-root] [--roadmap=<path>] [--output=<path>]'
6
6
  disable-model-invocation: true
7
7
  allowed-tools: Read, Write, Glob, Grep, Bash(git:*), AskUserQuestion, Task
@@ -48,13 +48,14 @@ When executing this skill, provide lightweight progress feedback so the user can
48
48
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
49
49
 
50
50
  - Before multi-step work, print short step indicators, e.g.:
51
- - `[1/7] Resolving backlog inputs…`
52
- - `[2/7] Cataloging backlog items…`
53
- - `[3/7] Reading codebase context…`
54
- - `[4/7] Writing review document…`
55
- - `[5/7] Summarizing recommendations…`
56
- - `[6/7] (Optional) Priority-alignment walkthrough…` — only print after the operator accepts the offer in Step 9
57
- - `[7/7] (Optional) Refreshing project kickoff handoffs…` — only print after the operator agrees a kickoff stack in Step 10
51
+ - `[1/8] Resolving backlog inputs…`
52
+ - `[2/8] Cataloging backlog items…`
53
+ - `[3/8] Reading codebase context…`
54
+ - `[4/8] Writing review document…`
55
+ - `[5/8] Summarizing recommendations…`
56
+ - `[6/8] (Optional) Priority-alignment walkthrough…` — only print after the operator accepts the offer in Step 9
57
+ - `[7/8] (Optional) Refreshing project kickoff handoffs…` — only print after the operator agrees a kickoff stack in Step 10
58
+ - `[8/8] (Optional) Handing selected items to repo improve…` — only print after the operator accepts the offer in Step 11
58
59
 
59
60
  ## Arguments
60
61
 
@@ -207,7 +208,7 @@ After the summary, ask the operator:
207
208
 
208
209
  If `.oat/repo/pjm/backlog/reviews/priority-alignment.md` already exists, frame it as an **update** to the existing document rather than a fresh create. Read the existing file first so the walkthrough builds on it.
209
210
 
210
- If the operator declines, stop after the summary. Do not silently write or modify `priority-alignment.md`.
211
+ If the operator declines, skip Steps 9–10 and continue to the Step 11 external-plan offer. Do not silently write or modify `priority-alignment.md`.
211
212
 
212
213
  **If the operator accepts, run the walkthrough:**
213
214
 
@@ -246,6 +247,16 @@ This step mirrors the **Project Kickoff Handoffs** section of the pjm instructio
246
247
 
247
248
  Every backlog item reference in a handoff — like every reference in review output and alignment docs — pairs the ID with its human-readable title per the **Reference Format Convention**. No bare IDs.
248
249
 
250
+ ### Step 11: Offer External Plan Generation (Optional)
251
+
252
+ After the review flow concludes, offer:
253
+
254
+ > Want to turn selected items from this backlog review into self-contained external implementation plans with `oat-repo-improve`?
255
+
256
+ If the operator accepts, invoke `oat-repo-improve` in `backlog-review` mode with the living review path. Also pass `backlog/reviews/priority-alignment.md` when it exists and was confirmed or refreshed during this run. The improve skill owns candidate selection, bounded live verification, plan generation under `.oat/repo/reference/external-plans/`, and backlog-item reverse links.
257
+
258
+ Do not generate external plans inside this skill. Do not assume the kickoff stack must become plans; present it as the recommended selection and let the operator adjust it. A generated external plan remains optional input to `oat-project-import-plan`, not a canonical OAT project plan.
259
+
249
260
  ## Success Criteria
250
261
 
251
262
  - Every active backlog item file has a value-effort rating with rationale
@@ -256,4 +267,5 @@ Every backlog item reference in a handoff — like every reference in review out
256
267
  - Living review is written to `.oat/repo/pjm/backlog/reviews/backlog-and-roadmap-review.md` (unless `--output` is explicitly overridden); dated snapshots, when emitted, live in the same `backlog/reviews/` directory and never under `.oat/repo/reviews/`
257
268
  - The operator is offered (but never forced into) a collaborative walkthrough that produces or updates `backlog/reviews/priority-alignment.md`; if the operator accepts, the file is written using the priority-alignment template and includes a Changelog entry for this pass; if the operator declines, no file is created or modified
258
269
  - When a priority-alignment pass produces an agreed kickoff stack, one handoff per kickoff-stack item is written or refreshed under `.oat/repo/pjm/handoffs/` (with item reference, recommended mode, input pointers, repo conventions/gates, and a close-out requiring the Backlog Lifecycle executed and the handoff deleted in the same shipping PR); handoffs for reprioritized-out items are deleted in the same pass; kickoff-stack membership, lane count, and ordering remain human decisions the skill presents rather than chooses
270
+ - The operator is offered an optional `oat-repo-improve backlog-review <review>` handoff; this skill never writes external plans itself
259
271
  - Every user-facing reference to a backlog item pairs the ID with a human-readable title (per the Reference Format Convention)
@@ -0,0 +1,234 @@
1
+ ---
2
+ name: oat-project-dispatch-subagents
3
+ version: 1.1.0
4
+ description: Use when an OAT project lifecycle skill needs to translate project state, phase or task scope, gates, and write authority into a provider-neutral subagent dispatch.
5
+ disable-model-invocation: true
6
+ user-invocable: false
7
+ allowed-tools: Read, Bash
8
+ ---
9
+
10
+ # Dispatching OAT Project Subagents
11
+
12
+ Use this internal adapter for OAT project lifecycle delegation. It resolves
13
+ project policy and lifecycle authority, then invokes `oat-dispatch-subagents`
14
+ for provider selection, launch, recovery, and generic evidence.
15
+
16
+ ## Progress Indicators (User-Facing)
17
+
18
+ This skill is an internal dependency; the calling project lifecycle skill owns
19
+ progress indicators and decides whether a sub-banner is useful. When surfacing
20
+ a distinct project dispatch wave, use:
21
+
22
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
23
+ OAT ▸ PROJECT SUBAGENT DISPATCH
24
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
25
+
26
+ Do not repeat the banner for every task. Return a compact project-scope and
27
+ dispatch summary for the caller to incorporate.
28
+
29
+ ## Required Loading
30
+
31
+ Resolve and read `oat-dispatch-subagents` from the active skill catalog before
32
+ every lifecycle dispatch. Follow its provider-reference loading rule and
33
+ request/record contract. Do not copy provider mechanics into this adapter.
34
+
35
+ If the engine skill is unavailable, stop before project mutation or child
36
+ launch and tell the user to install the utility pack at the matching scope:
37
+
38
+ ```bash
39
+ oat tools install utility --scope project
40
+ ```
41
+
42
+ Use `--scope user` when workflows are intentionally user-scoped. Do not fall
43
+ back to duplicated inline dispatch logic.
44
+
45
+ ## Ownership Boundary
46
+
47
+ This adapter owns:
48
+
49
+ - active project, workflow mode, phase, and task scope resolution;
50
+ - project and phase dispatch policy and named ceiling resolution;
51
+ - lifecycle role policy, gates, task IDs, write roots, commits, and worktrees;
52
+ - translation into a generic dispatch request;
53
+ - project-specific outcome bookkeeping layered on the generic record.
54
+
55
+ The general dispatch skill owns capability, authorization, catalogs,
56
+ candidate intersection, route selection, launch acceptance, continuation, and
57
+ recovery. Calling lifecycle skills still own sequencing, plan mutation,
58
+ cross-task synthesis, user checkpoints, and final artifact writes.
59
+
60
+ ## Resolve Project Context
61
+
62
+ Resolve a user-supplied project path first. Otherwise use the active project.
63
+ Read state through the OAT CLI source of truth rather than ad-hoc YAML parsing:
64
+
65
+ ```bash
66
+ oat project status --project-path "$PROJECT_PATH" --json
67
+ ```
68
+
69
+ Before dispatch, establish:
70
+
71
+ - project path, workflow mode, current phase, and phase status;
72
+ - lifecycle scope such as phase ID or `pNN-tNN` task ID;
73
+ - declared dependencies and parallel group, when applicable;
74
+ - task file boundary, required verification, and write authority;
75
+ - worktree and commit expectations;
76
+ - configured HiLL, phase-review, and lifecycle-gate requirements;
77
+ - effective dispatch policy and named ceiling.
78
+
79
+ If project state cannot be resolved or conflicts with the requested lifecycle
80
+ scope, block before invoking the general engine.
81
+
82
+ ## Resolve Dispatch Policy
83
+
84
+ Use the current OAT CLI resolver contract for the active provider and
85
+ lifecycle role. Do not duplicate dispatch matrices or parse configuration
86
+ layers directly. Preserve the resolver's exact candidate selectors and
87
+ provider arguments.
88
+
89
+ Project policy may cap or select a target. Translate the resolved policy and
90
+ ceiling into the generic request; do not ask the general engine to read
91
+ `state.md` or infer project configuration.
92
+
93
+ Configured project policy is standing, scope-bound route authorization. When
94
+ the resolver selects a CLI/programmatic or cross-runtime route, pass it to the
95
+ general engine with `selection_source: policy-resolved` and evidence of the
96
+ owning project, phase/task, provider, lifecycle role, policy/ceiling, and exact
97
+ route. Do not ask the user to re-authorize that route for each task.
98
+
99
+ Prefer native dispatch when it satisfies the resolved contract, but do not
100
+ replace a required policy-resolved route merely because a weaker native surface
101
+ exists. Cursor task subagents are a representative case: project policy may
102
+ route through the Cursor CLI/programmatic surface when native model
103
+ availability cannot satisfy the selected target. Configured cross-family gates
104
+ use the same policy-resolved tier. Ambient CLI availability and stale
105
+ conversational approval are never project policy.
106
+
107
+ ## Lifecycle Roles
108
+
109
+ Map each lifecycle role to a generic baseline class and add project policy:
110
+
111
+ | Lifecycle role | Generic class | Project-specific contract |
112
+ | -------------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
113
+ | Phase coordinator | `coordinator` | Own one phase dossier. Prefer an explicit suitable native target; inherit only when the root/session target is deliberately suitable. |
114
+ | Task worker | `worker` | Own one task and bounded files. Use an explicit native or pre-selected alternate target; never silently inherit an expensive root model. |
115
+ | Fix worker | `worker` | Own listed findings and bounded files. Preserve retry/fix-loop limits and original task context. |
116
+ | Planning self-review | `reviewer` | Inherit the planning parent by default unless the plan-writing contract requires an exact independent reviewer. |
117
+ | Implementation self-review | `reviewer` | Target the resolved reviewer ceiling; inherit only when the review-owning dispatcher is known to satisfy it. |
118
+ | Phase gate | `reviewer` | Use the configured independent target and fail closed when unavailable. |
119
+ | Lifecycle gate | `reviewer` | Stay independent of producer context and fail closed rather than substituting same-context self-review. |
120
+
121
+ The calling lifecycle skill remains authoritative when its reviewed contract
122
+ is stricter than this table.
123
+
124
+ ## Adapt the Request
125
+
126
+ For every lifecycle dispatch:
127
+
128
+ 1. Validate project state and requested phase/task scope.
129
+ 2. Resolve lifecycle role policy, provider, named ceiling, and exact
130
+ configuration through current CLI interfaces.
131
+ 3. Define objective, bounded files or read scope, expected output,
132
+ verification evidence, escalation conditions, authority, deadline, retry
133
+ limit, and fallback.
134
+ 4. Map the lifecycle role to a generic class.
135
+ 5. Add project metadata without replacing neutral request fields.
136
+ 6. Add `selection_source: policy-resolved` plus owning configuration evidence
137
+ for every configured non-native route.
138
+ 7. Invoke `oat-dispatch-subagents` with the complete request.
139
+ 8. Preserve its generic dispatch record unchanged.
140
+ 9. Add lifecycle outcome metadata and let the calling workflow perform state,
141
+ plan, implementation-log, commit, or review-table writes.
142
+
143
+ Example adapter input:
144
+
145
+ ```yaml
146
+ project_path: .oat/projects/shared/example
147
+ project_mode: quick
148
+ project_phase: implement
149
+ scope: p01-t02
150
+ lifecycle_role: task-worker
151
+ file_boundary:
152
+ - packages/cli/src/example.ts
153
+ verification:
154
+ - pnpm --filter @open-agent-toolkit/cli test
155
+ commit_policy: one-commit-per-task
156
+ worktree: root
157
+ ```
158
+
159
+ Example namespaced metadata added to the generic request:
160
+
161
+ ```yaml
162
+ project:
163
+ path: .oat/projects/shared/example
164
+ mode: quick
165
+ phase: implement
166
+ phase_id: p01
167
+ task_id: p01-t02
168
+ file_boundary:
169
+ - packages/cli/src/example.ts
170
+ commit_policy: one-commit-per-task
171
+ worktree: root
172
+ ```
173
+
174
+ ## Coordinator and Worker Topology
175
+
176
+ Use a phase coordinator only when the lifecycle workflow declares that
177
+ topology. A coordinator may dispatch task workers when nesting and authority
178
+ permit it, but it must not widen task boundaries, alter plan sequencing, or
179
+ take over user checkpoints.
180
+
181
+ For parallel groups, preserve plan-declared isolation. Each worktree receives
182
+ only its assigned phase/task boundaries and must not mutate sibling worktrees.
183
+ The root lifecycle workflow retains merge ordering and conflict resolution.
184
+
185
+ ## Gates and Independence
186
+
187
+ Gate independence is project policy layered on the generic reviewer class.
188
+ Resolve the configured gate target before launch and pass it as exact selection
189
+ input. If the required independent target cannot be enforced, block the gate;
190
+ do not silently downgrade to producer-context review.
191
+
192
+ Treat gate artifacts, receive eligibility, and lifecycle disposition as caller
193
+ concerns. The dispatch engine returns evidence and output but does not mutate
194
+ review tables or project state.
195
+
196
+ ## Lifecycle Record Extension
197
+
198
+ Preserve the generic record and attach project metadata separately:
199
+
200
+ ```yaml
201
+ project_dispatch:
202
+ project_path: .oat/projects/shared/example
203
+ workflow_mode: quick
204
+ phase: implement
205
+ phase_id: p01
206
+ task_id: p01-t02
207
+ lifecycle_role: task-worker
208
+ file_boundary:
209
+ - packages/cli/src/example.ts
210
+ worktree: root
211
+ commit_policy: one-commit-per-task
212
+ gate_requirement: none
213
+ generic_dispatch_record: dispatch-unique-id
214
+ lifecycle_outcome:
215
+ task_status: complete
216
+ verification_status: passed
217
+ commit: abc1234
218
+ ```
219
+
220
+ Do not rewrite generic route, selector, acceptance, outcome, or diagnostic
221
+ fields inside the lifecycle extension.
222
+
223
+ ## Failure Boundaries
224
+
225
+ - Invalid or stale project state: block before generic dispatch.
226
+ - Scope outside the plan or assigned worktree: block and return to the caller.
227
+ - Incomplete resolver result: do not invent a target; surface the diagnostic.
228
+ - Generic pre-start rejection: apply caller retry policy through the general
229
+ engine.
230
+ - Accepted child failure: return the terminal outcome to the lifecycle caller;
231
+ do not select a replacement automatically.
232
+ - Required gate target unavailable: fail closed.
233
+ - Verification or commit failure after worker completion: lifecycle caller owns
234
+ repair and bookkeeping; do not falsify the child outcome.