@open-agent-toolkit/cli 0.0.66 → 0.0.69

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.
@@ -21,6 +21,7 @@ Skill behavior is defined by frontmatter plus the process contract in each `SKIL
21
21
  - Keep prerequisites and expected artifacts concrete.
22
22
  - Spell out blocked vs allowed activities for state-advancing skills.
23
23
  - Define user-facing progress indicators for longer workflows.
24
+ - Define a pre-work capability and authorization gate for skills that delegate to subagents, workers, or reviewers.
24
25
  - Keep output obligations explicit so downstream skills and users know what changed.
25
26
 
26
27
  ## Contract components
@@ -28,6 +29,7 @@ Skill behavior is defined by frontmatter plus the process contract in each `SKIL
28
29
  - Mode assertion (purpose, blocked/allowed activities)
29
30
  - Preconditions and required artifacts
30
31
  - User-facing progress indicator expectations
32
+ - Delegation capability detection and fallback behavior, when the skill dispatches helper agents
31
33
  - Output obligations
32
34
  - Escalation/guardrail behavior
33
35
 
@@ -59,6 +61,21 @@ Skill behavior is defined by frontmatter plus the process contract in each `SKIL
59
61
  - Use `create-agnostic-skill` when you want a reusable workflow skill that is not OAT-specific.
60
62
  - Use existing lifecycle skills as examples for progress banners, prerequisites, and artifact updates.
61
63
 
64
+ ## Delegation-Capable Skills
65
+
66
+ Skills that dispatch subagents, workers, reviewers, or fresh-context helper sessions need a capability model before work starts. Do not assume delegation is available, and do not silently downgrade just because the runtime needs user authorization.
67
+
68
+ At minimum, the skill contract should:
69
+
70
+ - Probe whether the host can dispatch the required helper role(s).
71
+ - Distinguish `available`, `authorization required`, and `not resolved`.
72
+ - Ask once at skill start when authorization is required, with the approval scope stated clearly.
73
+ - Lock the selected tier for the run unless the user explicitly changes execution mode.
74
+ - Stop before side effects if delegation is required for correctness and authorization remains unresolved.
75
+ - Document the fallback path and any quality or independence tradeoff.
76
+
77
+ Use `create-agnostic-skill` or `create-oat-skill` as the starting point; both include the current delegation guidance and optional capability-detection template.
78
+
62
79
  ## Reading project state
63
80
 
64
81
  Skills that need fields from the active project's `state.md` (e.g. `phase`, `phaseStatus`, `workflowMode`, `docsUpdated`, `lastCommit`) MUST query the CLI instead of hand-parsing YAML with `grep`/`awk`.
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.0.66",
3
- "docs-config": "0.0.66",
4
- "docs-theme": "0.0.66",
5
- "docs-transforms": "0.0.66"
2
+ "cli": "0.0.69",
3
+ "docs-config": "0.0.69",
4
+ "docs-theme": "0.0.69",
5
+ "docs-transforms": "0.0.69"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: create-agnostic-skill
3
- version: 1.2.1
3
+ version: 1.3.0
4
4
  description: Use when adding a reusable workflow skill for AI coding agents. Scaffolds a new .agents/skills skill using the Agent Skills open standard.
5
5
  argument-hint: '[skill-name]'
6
6
  disable-model-invocation: true
@@ -60,6 +60,7 @@ If not provided in arguments, ask for:
60
60
  - **Model invocation**: Should the agent be able to invoke this automatically? (default: no)
61
61
  - **User invocable**: (Claude Code only) Should this appear in the `/` menu? (default: yes)
62
62
  - **Tool restrictions**: (Claude Code only) Which tools should the skill be allowed to use?
63
+ - **Delegation**: Will the skill dispatch subagents or require a fresh-context worker/reviewer? If yes, define the capability probe, authorization gate, fallback tier, and approval scope.
63
64
  - **Supporting files**: Does the skill need templates, scripts, or reference files?
64
65
 
65
66
  ### Step 2: Apply Progressive Disclosure
@@ -295,9 +296,62 @@ Do **not** hard-code a specific Codex question tool name in skill prose unless t
295
296
 
296
297
  **When NOT to:**
297
298
 
298
- - Autonomous/subagent skills — use argument defaults or flags to drive decisions instead of prompting mid-execution
299
+ - Long-running autonomous skills after work has started resolve required decisions in a pre-work gate, then lock the choice for the run
299
300
  - Questions with open-ended answers — just ask conversationally in the skill prose
300
301
 
302
+ ### Delegation and Subagent Capability
303
+
304
+ Skills that dispatch subagents, reviewers, workers, or fresh-context helper sessions must define a pre-work capability model. Do not let generated skills assume delegation is available, silently downgrade because authorization is required, or ask repeated approval questions mid-run.
305
+
306
+ **When to include this section:**
307
+
308
+ - The skill uses provider subagents, task workers, reviewers, or multi-agent execution
309
+ - The skill's quality depends on fresh context or isolated review/implementation
310
+ - The skill has a fallback mode when delegation is unavailable
311
+
312
+ **Required guidance for delegation-capable skills:**
313
+
314
+ 1. **Probe before work starts.** Check whether the host can dispatch the needed worker/reviewer and whether dispatch requires user authorization.
315
+ 2. **Separate capability states.** Report `available`, `authorization required`, or `not resolved`; do not treat authorization-required as unavailable.
316
+ 3. **Ask once when authorization is required.** Use a concise question that names the delegation scope for the run. Approval should cover the stated worker roles and phases; a decline should select the documented fallback.
317
+ 4. **Lock the tier.** Once selected, keep the execution mode for the run unless the user explicitly changes it.
318
+ 5. **Fail closed before side effects.** If delegation is required for correctness and authorization is unresolved, stop before edits, writes, external side effects, or long-running work.
319
+ 6. **Document fallback behavior.** If inline or single-agent execution is acceptable, explain when it applies. If it changes quality, artifact freshness, or review independence, say so.
320
+
321
+ **Portable provider wording:**
322
+
323
+ - Claude Code: use Task/subagent dispatch when available; if the skill benefits from structured prompts, include `AskUserQuestion` in `allowed-tools`.
324
+ - Cursor: use the provider's explicit agent invocation or natural-language agent handoff when supported.
325
+ - Codex: use multi-agent spawning when available; if the host requires explicit user authorization before spawning, ask before falling back.
326
+ - Fallback: use inline/single-agent execution only when the user declines delegation or the runtime truly cannot dispatch the required agent.
327
+
328
+ **Good pre-work pattern:**
329
+
330
+ ```markdown
331
+ ### Step 0.5: Capability Detection
332
+
333
+ Before edits, writes, external side effects, or long-running work, detect whether the required helper agents are available.
334
+
335
+ - Available without authorization → Tier 1: delegated execution.
336
+ - Authorization required → ask once: "Authorize `{worker/reviewer}` delegation for this run?"
337
+ - Approved → Tier 1.
338
+ - Declined → Tier 2: documented fallback.
339
+ - Not resolved / unsupported → Tier 2: documented fallback.
340
+
341
+ Report:
342
+
343
+ `Selected: Tier {1|2} — {Delegated|Fallback}; Reason: {available|authorized|user declined delegation|dispatch unavailable|required role unresolved}`
344
+
345
+ Lock the selected tier for the run.
346
+ ```
347
+
348
+ **Anti-patterns:**
349
+
350
+ - Selecting inline fallback just because the user did not pre-mention subagents, when the skill itself requires delegation and authorization can be requested
351
+ - Asking for authorization after implementation or review has already started
352
+ - Re-asking for each phase when the first approval explicitly covered the run
353
+ - Hiding fallback quality differences from the user
354
+
301
355
  ### Progress Feedback
302
356
 
303
357
  For multi-step skills, print brief progress updates so the user knows what's happening:
@@ -13,11 +13,12 @@ Adjust based on complexity—not all sections are required:
13
13
  5. **Arguments** - Parameters parsed from `$ARGUMENTS`
14
14
  6. **Prerequisites** - Required setup or context (if applicable)
15
15
  7. **Workflow/Steps** - Numbered steps using "Step 1, 2, 3..." naming
16
- 8. **Quality Standards** - Checklist format for docs skills (if applicable)
17
- 9. **Examples** - Both "Basic Usage" and "Conversational" styles
18
- 10. **Reference** - Links to relevant documentation
19
- 11. **Troubleshooting** - Common issues and solutions
20
- 12. **Success Criteria** - Checklist of completion conditions
16
+ 8. **Capability Detection** - Required before work starts if the skill dispatches subagents/workers/reviewers
17
+ 9. **Quality Standards** - Checklist format for docs skills (if applicable)
18
+ 10. **Examples** - Both "Basic Usage" and "Conversational" styles
19
+ 11. **Reference** - Links to relevant documentation
20
+ 12. **Troubleshooting** - Common issues and solutions
21
+ 13. **Success Criteria** - Checklist of completion conditions
21
22
 
22
23
  ## Annotated Template
23
24
 
@@ -87,6 +88,24 @@ Parse from `$ARGUMENTS`:
87
88
 
88
89
  ## Workflow
89
90
 
91
+ <!-- Include this Step 0.5 only if the skill dispatches subagents, workers, reviewers, or fresh-context helpers. -->
92
+
93
+ ### Step 0.5: Capability Detection
94
+
95
+ Before edits, writes, external side effects, or long-running work, detect whether required helper agents are available.
96
+
97
+ - Available without authorization → Tier 1: delegated execution.
98
+ - Authorization required → ask once: "Authorize `{worker/reviewer}` delegation for this run?"
99
+ - Approved → Tier 1.
100
+ - Declined → Tier 2: documented fallback.
101
+ - Not resolved / unsupported → Tier 2: documented fallback.
102
+
103
+ Report the selected tier and reason before starting work:
104
+
105
+ `Selected: Tier {1|2} — {Delegated|Fallback}; Reason: {available|authorized|user declined delegation|dispatch unavailable|required role unresolved}`
106
+
107
+ Lock the selected tier for the run unless the user explicitly changes it.
108
+
90
109
  ### Step 1: First Step Title
91
110
 
92
111
  Clear instructions in imperative form. Tell the agent what to do.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-complete
3
- version: 1.4.5
3
+ version: 1.4.7
4
4
  description: Use when all implementation work is finished and the project is ready to close. Marks the OAT project lifecycle as complete.
5
5
  disable-model-invocation: true
6
6
  user-invocable: true
@@ -27,7 +27,7 @@ When executing this skill, provide lightweight progress feedback so the user can
27
27
  - `[3/6] Completing lifecycle…`
28
28
  - `[4/6] Generating PR description + archiving…`
29
29
  - `[5/6] Refreshing dashboard + committing…`
30
- - `[6/6] Opening PR…`
30
+ - `[6/6] Opening PR or syncing description…`
31
31
 
32
32
  ## Process
33
33
 
@@ -64,6 +64,17 @@ Ask all user questions at once so the user can answer them in a single interacti
64
64
 
65
65
  Before asking the batched questions, read `oat_pr_status` and `oat_pr_url` from `state.md` frontmatter.
66
66
 
67
+ **Capture pre-mutation PR state for later steps.** The skill mutates `state.md` (Step 5) and the project tree (Step 8) before Step 11.5 needs to know whether the PR was already open at the start. Persist that decision in a shell variable now:
68
+
69
+ ```bash
70
+ WAS_PR_OPEN_AT_START="false"
71
+ if [[ "${oat_pr_status:-}" == "open" ]]; then
72
+ WAS_PR_OPEN_AT_START="true"
73
+ fi
74
+ ```
75
+
76
+ Use the same `state.md` read you already perform for `oat_pr_status`/`oat_pr_url` — do not re-read after Step 5. Step 11.5 (Sync Open-PR Description on GitHub) consumes this value.
77
+
67
78
  **Workflow preference checks (before asking questions):**
68
79
 
69
80
  Some questions can be answered automatically from workflow preferences. Read each preference before deciding whether to include its question in the batched prompt:
@@ -299,7 +310,29 @@ fi
299
310
 
300
311
  5. **Write PR description artifact** — write to `{PROJECT_PATH}/pr/project-pr-YYYY-MM-DD.md` following the template and policies from `oat-project-pr-final` Step 4 (frontmatter policy, reference links policy, local path exclusion).
301
312
 
302
- If a PR description artifact already exists at `{PROJECT_PATH}/pr/project-pr-*.md`, skip generation and use the existing one instead.
313
+ If a PR description artifact already exists at `{PROJECT_PATH}/pr/project-pr-*.md`:
314
+
315
+ - When `SHOULD_ARCHIVE` is `true`, regenerate it (overwrite). The existing artifact was authored by `oat-project-pr-final` before any archive intent existed and links to artifact paths that will be local-only after Step 8. Regenerating ensures Step 11 / Step 11.5 push a body whose links still resolve on the remote.
316
+ - When `SHOULD_ARCHIVE` is `false`, skip generation and use the existing artifact as-is. No archive means the existing blob links remain valid.
317
+
318
+ **Archive-aware References (required when `SHOULD_ARCHIVE` is `true`):**
319
+
320
+ When archiving, the project artifacts at `{PROJECT_PATH}/{plan,implementation,discovery,spec,design,summary}.md` will move to a gitignored archive location in Step 8. After commit + push (Step 10), those paths no longer exist on the branch and any blob link to them returns 404 on GitHub. The PR description must anticipate this:
321
+
322
+ - **Drop References bullets** that point to artifacts about to become local-only:
323
+ - `plan.md`, `implementation.md`, `discovery.md`, `spec.md`, `design.md`, `summary.md`, `references/imported-plan.md`
324
+ - Active `reviews/` (the active project tree, including `reviews/`, moves with the archive)
325
+ - **Add a canonical project-record bullet** when `archive.summaryExportPath` is configured and `summary.md` exists:
326
+ - Resolve the export filename: `${SUMMARY_EXPORT_PATH}/$(date +%Y%m%d)-${PROJECT_NAME}.md` (matches `archive-utils.ts` naming).
327
+ - Reference it as a tracked, post-archive blob link, e.g.:
328
+ `- Project record: [${SUMMARY_EXPORT_PATH}/${YYYYMMDD}-${PROJECT_NAME}.md]({REPO_WEB}/blob/{BRANCH}/${SUMMARY_EXPORT_PATH}/${YYYYMMDD}-${PROJECT_NAME}.md)`
329
+ - Use the **current/head branch** for the blob link (the same `{BRANCH}` value used by `oat-project-pr-final` Step 4 for every other reference). Step 8 creates the export on the current checkout and Step 10 commits + pushes it on the feature branch, so the link resolves immediately while the PR is open and continues to resolve after merge once the file lands on the base branch.
330
+ - Anti-pattern: do **not** point this link at the base branch (`main` / resolved default branch). The export does not exist on the base branch until the PR merges, so a `blob/main/...` link 404s for the entire window the PR is open — the same class of broken link this whole step exists to prevent.
331
+ - When `archive.summaryExportPath` is unset or `summary.md` is missing, omit this bullet rather than emit a broken link.
332
+ - **Keep References bullets** that resolve independently of the archive: backlog item links under `.oat/repo/reference/backlog/`, decision-record links under `.oat/repo/reference/decisions/`, repo-reference docs, ticket URLs, and anything else under tracked paths outside the project directory.
333
+ - Apply the existing `localPaths`-based exclusion rule from `oat-project-pr-final` Step 4 on top of these rules — it already covers `.oat/**/pr` and `.oat/**/reviews/archived` and may catch additional patterns configured per repo.
334
+
335
+ Anti-pattern: do not "rescue" a dropped artifact by linking to its archived path under `.oat/projects/archived/<name>/...`. That path is gitignored on every checkout and never reaches the remote.
303
336
 
304
337
  ### Step 8: Archive Project (Conditional)
305
338
 
@@ -528,6 +561,46 @@ gh pr create --base main --title "{title}" --body-file "$TMP_BODY"
528
561
 
529
562
  Do not assume `gh` is installed; if missing, instruct manual PR creation using the file contents.
530
563
 
564
+ ### Step 11.5: Sync Open-PR Description on GitHub (Conditional)
565
+
566
+ **Run only when `WAS_PR_OPEN_AT_START="true"` AND `SHOULD_ARCHIVE="true"`.**
567
+
568
+ When the PR was already open at the start of this skill (typically because `oat-project-pr-final` ran earlier in the lifecycle) AND we just archived, the GitHub PR description authored by `oat-project-pr-final` still points to the active artifact paths. Step 8 moved those artifacts to a gitignored archive location and Step 10 pushed the move, so any blob link in the open PR body now 404s. Push the regenerated archive-aware body to the existing PR.
569
+
570
+ Skip this step when:
571
+
572
+ - The PR was not yet open at the start (`WAS_PR_OPEN_AT_START="false"`) — Step 11 already created the PR with the archive-aware body.
573
+ - No archive happened (`SHOULD_ARCHIVE="false"`) — the original blob links still resolve.
574
+ - `IS_SHARED_PROJECT="false"` — non-shared projects are not archived in this skill, so no link breakage.
575
+
576
+ Steps:
577
+
578
+ 1. Locate the PR description artifact at `{PROJECT_PATH}/pr/project-pr-*.md`. After Step 8, `PROJECT_PATH` points at the archived location, so the artifact lives at `{ARCHIVE_PATH}/pr/project-pr-*.md`.
579
+ 2. Strip YAML frontmatter (everything from the opening `---` through and including the closing `---`) and write the result to a temporary file. Verify the temp file does not start with YAML frontmatter keys.
580
+ 3. Resolve the open PR. Prefer the tracked URL captured in Step 2:
581
+
582
+ ```bash
583
+ PR_REF="${oat_pr_url:-}"
584
+ if [[ -z "$PR_REF" ]]; then
585
+ # Fall back to the head branch — gh auto-resolves to the open PR for the current branch.
586
+ PR_REF=$(git rev-parse --abbrev-ref HEAD)
587
+ fi
588
+ ```
589
+
590
+ 4. Push the updated body:
591
+
592
+ ```bash
593
+ gh pr edit "$PR_REF" --body-file "$TMP_BODY"
594
+ ```
595
+
596
+ 5. Clean up the temp file.
597
+
598
+ Failure handling:
599
+
600
+ - If `gh` is missing, warn and print the path to the regenerated artifact body so the user can paste it into the PR manually. Do not fail the skill.
601
+ - If `gh pr edit` fails (e.g. PR was merged between Step 2 and now, or the auth token lacks edit permission), warn and continue. Step 12's completion summary should call out that the PR body was not updated and surface the artifact path so the user can update it manually.
602
+ - Never re-archive or re-commit on failure here — the lifecycle bookkeeping in Step 10 already shipped.
603
+
531
604
  ### Step 12: Confirm to User
532
605
 
533
606
  Show user:
@@ -538,3 +611,4 @@ Show user:
538
611
  - Include commit hash and push result for the bookkeeping changes.
539
612
  - If PR was opened: include the PR URL.
540
613
  - If `oat_pr_url` is present, show it in the completion summary even when PR creation was skipped because the project already tracked an open PR.
614
+ - If Step 11.5 ran, report whether the PR description was synced (e.g. `PR description synced: <PR URL>`) or warn that the sync failed and surface the artifact path so the user can update it manually.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-next
3
- version: 1.0.3
3
+ version: 1.0.4
4
4
  description: Use when continuing work on the active OAT project. Reads project state, determines the next lifecycle action, and invokes the appropriate skill automatically.
5
5
  disable-model-invocation: true
6
6
  user-invocable: true
@@ -178,10 +178,12 @@ Phase-to-skill mapping for HiLL override:
178
178
  | Phase | Skill |
179
179
  | --------- | ---------------------- |
180
180
  | discovery | `oat-project-discover` |
181
- | spec | `oat-project-spec` |
181
+ | spec | `oat-project-design` |
182
182
  | design | `oat-project-design` |
183
183
  | plan | `oat-project-plan` |
184
184
 
185
+ Note: a `spec` HiLL phase only appears in legacy projects scaffolded before requirements confirmation was folded into `oat-project-design`. New projects scaffold with `['discovery', 'design']` HiLL checkpoints, so `spec` falls through to `oat-project-design` here as a graceful migration. The standalone `oat-project-spec` skill remains available as an opt-in for users who want to formalize requirements separately.
186
+
185
187
  Note: `implement` is intentionally omitted. Implementation-phase checkpoints are handled by `oat_plan_hill_phases` in plan.md (plan-phase-level gates), not by the workflow-level `oat_hill_checkpoints` in state.md.
186
188
 
187
189
  #### Step 3b: Phase Routing Tables
@@ -196,9 +198,9 @@ Otherwise, look up the target skill from the routing table for the current `oat_
196
198
  | Current Phase | Phase Status | Boundary Tier | Target Skill |
197
199
  | ------------- | ------------ | -------------------- | -------------------------- |
198
200
  | discovery | in_progress | tier 3 (template) | `oat-project-discover` |
199
- | discovery | in_progress | tier 2 (substantive) | `oat-project-spec` |
200
- | discovery | complete | tier 1 | `oat-project-spec` |
201
- | spec | in_progress | tier 3 | `oat-project-spec` |
201
+ | discovery | in_progress | tier 2 (substantive) | `oat-project-design` |
202
+ | discovery | complete | tier 1 | `oat-project-design` |
203
+ | spec | in_progress | tier 3 | `oat-project-design` |
202
204
  | spec | in_progress | tier 2 | `oat-project-design` |
203
205
  | spec | complete | tier 1 | `oat-project-design` |
204
206
  | design | in_progress | tier 3 | `oat-project-design` |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-progress
3
- version: 1.2.3
3
+ version: 1.2.4
4
4
  description: Use when resuming work, checking status, or unsure which OAT skill to run next. Evaluates project progress and routes to the appropriate next step.
5
5
  disable-model-invocation: true
6
6
  user-invocable: true
@@ -186,7 +186,7 @@ Read `oat_workflow_mode` from `state.md` frontmatter:
186
186
  - In that case, do **not** advance to the next phase even if `oat_phase_status: complete`.
187
187
  - Recommend continuing the current phase skill to capture explicit approval:
188
188
  - discovery gate pending -> `oat-project-discover`
189
- - spec gate pending -> `oat-project-spec`
189
+ - spec gate pending (legacy projects only — newly scaffolded projects no longer use a spec HiLL gate) -> `oat-project-design`
190
190
  - design gate pending -> `oat-project-design`
191
191
 
192
192
  **Drift detection (apply before routing `implement | in_progress`):**
@@ -226,8 +226,8 @@ Routing matrix by mode:
226
226
  | oat_phase | oat_phase_status | Next Skill |
227
227
  | --------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
228
228
  | discovery | in_progress | Continue `oat-project-discover` |
229
- | discovery | complete | `oat-project-spec` |
230
- | spec | in_progress | Continue `oat-project-spec` |
229
+ | discovery | complete | `oat-project-design` (folds requirements confirmation in; standalone `oat-project-spec` remains an opt-in alternative) |
230
+ | spec | in_progress | `oat-project-design` (legacy phase — design reuses any existing `spec.md`) |
231
231
  | spec | complete | `oat-project-design` |
232
232
  | design | in_progress | Continue `oat-project-design` |
233
233
  | design | complete | `oat-project-plan` |
@@ -282,8 +282,8 @@ Workflow:
282
282
  oat-project-import-plan - Import an external markdown plan and normalize plan.md
283
283
  oat-project-promote-spec-driven - Promote quick/import project to spec-driven lifecycle
284
284
  oat-project-discover - Start discovery phase (requirements gathering)
285
- oat-project-spec - Create specification from discovery
286
- oat-project-design - Create technical design from spec
285
+ oat-project-design - Confirm requirements + create technical design (folds spec authoring inline)
286
+ oat-project-spec - Optional standalone specification (most projects skip this — design handles it)
287
287
  oat-project-plan - Create implementation plan from design (spec-driven mode)
288
288
  oat-project-implement - Execute implementation plan (sequential or parallel)
289
289
  oat-project-reconcile - Reconcile manual/human commits with plan tasks
@@ -18,13 +18,13 @@ const TEMPLATES_BY_MODE = {
18
18
  };
19
19
  const STATE_TEMPLATE_BY_MODE = {
20
20
  'spec-driven': {
21
- hillCheckpoints: "['discovery', 'spec', 'design']",
21
+ hillCheckpoints: "['discovery', 'design']",
22
22
  phase: 'discovery',
23
23
  status: 'Discovery',
24
24
  currentPhase: 'Discovery - Gathering requirements and understanding the problem space',
25
25
  artifacts: [
26
26
  '- **Discovery:** `discovery.md` (in_progress)',
27
- '- **Spec:** `spec.md` (scaffolded template — not started)',
27
+ '- **Spec:** `spec.md` (scaffolded template — authored inline by `oat-project-design`)',
28
28
  '- **Design:** `design.md` (scaffolded template — not started)',
29
29
  '- **Plan:** `plan.md` (scaffolded template — not started)',
30
30
  '- **Implementation:** `implementation.md` (scaffolded template — not started)',
@@ -34,7 +34,7 @@ const STATE_TEMPLATE_BY_MODE = {
34
34
  '- ✓ Downstream lifecycle files scaffolded',
35
35
  '- ⧗ Awaiting user input',
36
36
  ],
37
- nextMilestone: 'Complete discovery and move to specification phase',
37
+ nextMilestone: 'Complete discovery and move to design phase',
38
38
  },
39
39
  quick: {
40
40
  hillCheckpoints: '[]',
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/commands/state/generate.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAClD;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AA4GD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvE;AAqaD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CA2C9B"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/commands/state/generate.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAClD;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AA4GD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvE;AA8aD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CA2C9B"}
@@ -207,9 +207,14 @@ function computeNextStep(project, hasProjects, state) {
207
207
  if (state.phaseStatus === 'complete' &&
208
208
  phaseInHillList(state.phase, state.hillCheckpoints) &&
209
209
  !phaseInHillList(state.phase, state.hillCompleted)) {
210
+ // Spec is no longer a discrete HiLL checkpoint in newly-scaffolded projects —
211
+ // requirements confirmation is folded into oat-project-design. Legacy
212
+ // projects whose state.md still lists `spec` in oat_hill_checkpoints route
213
+ // to oat-project-design here so they finish through the consolidated flow
214
+ // rather than being pushed back at the deprecated standalone skill.
210
215
  const phaseSkillMap = {
211
216
  discovery: 'oat-project-discover',
212
- spec: 'oat-project-spec',
217
+ spec: 'oat-project-design',
213
218
  design: 'oat-project-design',
214
219
  plan: 'oat-project-plan',
215
220
  implement: 'oat-project-implement',
@@ -227,12 +232,14 @@ function computeNextStep(project, hasProjects, state) {
227
232
  reason: 'Continue discovery phase',
228
233
  },
229
234
  'spec-driven:discovery:complete': {
230
- step: 'oat-project-spec',
231
- reason: 'Create specification from discovery',
235
+ step: 'oat-project-design',
236
+ reason: 'Confirm requirements and produce design (spec is folded into design)',
232
237
  },
238
+ // Legacy projects whose phase still reads `spec` route to design — the
239
+ // consolidated oat-project-design skill handles existing spec.md gracefully.
233
240
  'spec-driven:spec:in_progress': {
234
- step: 'oat-project-spec',
235
- reason: 'Continue specification phase',
241
+ step: 'oat-project-design',
242
+ reason: 'Continue into design (spec is folded into design — legacy phase)',
236
243
  },
237
244
  'spec-driven:spec:complete': {
238
245
  step: 'oat-project-design',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-agent-toolkit/cli",
3
- "version": "0.0.66",
3
+ "version": "0.0.69",
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",
@@ -33,7 +33,7 @@
33
33
  "ora": "^9.0.0",
34
34
  "yaml": "2.8.2",
35
35
  "zod": "^3.25.76",
36
- "@open-agent-toolkit/control-plane": "0.0.66"
36
+ "@open-agent-toolkit/control-plane": "0.0.69"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/node": "^22.10.0",