convoke-agents 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -916,5 +916,5 @@ No changes to installation flow. Reinstallation will fix the Wade workflow bug.
916
916
  **For detailed technical documentation, see:**
917
917
  - [README.md](README.md) - Project overview
918
918
  - [INSTALLATION.md](INSTALLATION.md) - Installation guide
919
- - [BMAD-METHOD-COMPATIBILITY.md](BMAD-METHOD-COMPATIBILITY.md) - Integration details
919
+ - [BMAD-METHOD-COMPATIBILITY.md](docs/BMAD-METHOD-COMPATIBILITY.md) - Integration details
920
920
  - User guides in `_bmad/bme/_vortex/guides/`
package/INSTALLATION.md CHANGED
@@ -17,7 +17,7 @@ Convoke works **standalone** or as an extension to [BMAD Method](https://github.
17
17
  ## Quick Install
18
18
 
19
19
  ```bash
20
- npm install convoke-agents && npx convoke-install-vortex
20
+ npm install convoke-agents && npx -p convoke-agents convoke-install-vortex
21
21
  ```
22
22
 
23
23
  All 7 Vortex agents (Emma, Isla, Mila, Liam, Wade, Noah, Max) with 22 workflows are installed and ready to use.
@@ -30,10 +30,10 @@ All 7 Vortex agents (Emma, Isla, Mila, Liam, Wade, Noah, Max) with 22 workflows
30
30
 
31
31
  ```bash
32
32
  # Install into your project
33
- npm install convoke
33
+ npm install convoke-agents
34
34
 
35
35
  # Install all Vortex agents and workflows
36
- npx convoke-install-vortex
36
+ npx -p convoke-agents convoke-install-vortex
37
37
  ```
38
38
 
39
39
  ### Option 2: Clone from Source (Contributors Only)
@@ -42,7 +42,7 @@ For contributors or developers who want to modify agents or contribute to the pr
42
42
 
43
43
  ```bash
44
44
  git clone https://github.com/amalik/convoke-agents.git
45
- cd convoke
45
+ cd convoke-agents
46
46
  npm install
47
47
  ```
48
48
 
@@ -153,7 +153,7 @@ Hey Amalik! I'm Emma — your Contextualization Expert...
153
153
  If the agent doesn't activate or you see raw markdown instead, run diagnostics:
154
154
 
155
155
  ```bash
156
- npx convoke-doctor
156
+ npx -p convoke-agents convoke-doctor
157
157
  ```
158
158
 
159
159
  This checks project root, config validity, agent files, workflows, output directory, and version consistency — with actionable fix suggestions for each issue.
@@ -165,14 +165,14 @@ This checks project root, config validity, agent files, workflows, output direct
165
165
  Start with diagnostics — it catches most issues:
166
166
 
167
167
  ```bash
168
- npx convoke-doctor
168
+ npx -p convoke-agents convoke-doctor
169
169
  ```
170
170
 
171
171
  ### Permission denied errors
172
172
 
173
173
  ```bash
174
174
  chmod +x scripts/*.js
175
- npx convoke-install-vortex
175
+ npx -p convoke-agents convoke-install-vortex
176
176
  ```
177
177
 
178
178
  ### Config file already exists
@@ -191,7 +191,7 @@ Check that files are in place:
191
191
  ```bash
192
192
  ls -la _bmad/bme/_vortex/agents/
193
193
  ls -la _bmad/bme/_vortex/workflows/
194
- npx convoke-doctor
194
+ npx -p convoke-agents convoke-doctor
195
195
  ```
196
196
 
197
197
  ---
@@ -201,7 +201,7 @@ npx convoke-doctor
201
201
  1. **Read the user guides** in `_bmad-output/vortex-artifacts/`
202
202
  2. **Activate an agent** — start with Emma for strategic framing or Isla for user research
203
203
  3. **Follow a workflow** — each agent presents a menu of guided workflows
204
- 4. **Check updates** — run `npx convoke-version` periodically
204
+ 4. **Check updates** — run `npx -p convoke-agents convoke-version` periodically
205
205
 
206
206
  See the [Agent Guide](docs/agents.md) for detailed workflow descriptions and the recommended Vortex flow.
207
207
 
@@ -222,7 +222,7 @@ rm -rf _bmad/bme/_vortex/
222
222
  rm -rf _bmad-output/vortex-artifacts/
223
223
 
224
224
  # 4. Uninstall npm package
225
- npm uninstall convoke
225
+ npm uninstall convoke-agents
226
226
  ```
227
227
 
228
228
  ---
package/README.md CHANGED
@@ -1,38 +1,47 @@
1
1
  <div align="center">
2
2
 
3
- <pre>
4
- ██████╗ ██████╗ ███╗ ██╗██╗ ██╗ ██████╗ ██╗ ██╗███████╗
3
+ ```
4
+ ██████╗ ██████╗ ███╗ ██╗██╗ ██╗ ██████╗ ██╗ ██╗███████╗
5
5
  ██╔════╝██╔═══██╗████╗ ██║██║ ██║██╔═══██╗██║ ██╔╝██╔════╝
6
6
  ██║ ██║ ██║██╔██╗ ██║██║ ██║██║ ██║█████╔╝ █████╗
7
7
  ██║ ██║ ██║██║╚██╗██║╚██╗ ██╔╝██║ ██║██╔═██╗ ██╔══╝
8
8
  ╚██████╗╚██████╔╝██║ ╚████║ ╚████╔╝ ╚██████╔╝██║ ██╗███████╗
9
- ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝
10
- Agent teams for complex systems
11
- </pre>
12
-
13
- **Validate your product ideas before writing a single line of code — 7 discovery agents guide you from insight to evidence**
9
+ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝
10
+ Agent teams for complex systems
11
+ ```
14
12
 
15
13
  [![Version](https://img.shields.io/badge/version-2.0.0-blue)](https://github.com/amalik/convoke-agents)
16
- [![Agents](https://img.shields.io/badge/agents-7-brightgreen)](docs/agents.md)
17
- [![Workflows](https://img.shields.io/badge/workflows-22-success)](docs/agents.md)
18
14
  [![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
19
15
 
20
16
  </div>
21
17
 
22
- Most teams skip validation and build on assumptions. Convoke guides you through seven discovery streams — from understanding your users to testing your riskiest assumptions so you can make evidence-based decisions before committing to code. Each stream builds on the previous one's findings, and when gaps appear, the system routes you back to fill them.
18
+ Convoke organizes AI agents into domain-specialized teams. Each team brings deep expertise to a specific disciplineproduct discovery, implementation, operations, or whatever your domain requires. **Vortex**, the product discovery team, is the first. You can install teams independently or combine them.
19
+
20
+ ---
21
+
22
+ ## Vortex — Product Discovery Team
23
+
24
+ **7 agents guide you from insight to evidence and back again — a continuous discovery loop, not a one-shot checklist**
25
+
26
+ [![Agents](https://img.shields.io/badge/agents-7-brightgreen)](docs/agents.md)
27
+ [![Workflows](https://img.shields.io/badge/workflows-22-success)](docs/agents.md)
28
+
29
+ **Most teams skip validation and build on assumptions.**
30
+
31
+ Vortex guides you through seven discovery streams — from understanding your users to interpreting production signals — so you can make evidence-based decisions before, during, and after you build. Each stream builds on the previous one's findings, and when gaps appear, the system routes you back to fill them.
23
32
 
24
33
  ```
25
34
  7 Streams · 7 Agents
26
35
 
27
36
  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
28
- Isla 🔍 │──▶│ Mila 🔬 │──▶│ Liam 💡 │──▶│ Wade 🧪
37
+ Isla │──▶│ Mila │──▶│ Liam │──▶│ Wade │
29
38
  │ Empathize │ │ Synthesize │ │ Hypothesize │ │ Externalize │
30
39
  └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
31
40
  ▲ │
32
41
  │ │
33
42
  │ ▼
34
- ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
35
- Emma 🎯 │◀──│ Max 🧭 │◀──│ Noah 📡 │◀──────────┘
43
+ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
44
+ Emma │◀──│ Max │◀──│ Noah │◀───────────┘
36
45
  │Contextualize│ │ Systematize │ │ Sensitize │
37
46
  └─────────────┘ └─────────────┘ └─────────────┘
38
47
  │ │ │
@@ -40,7 +49,35 @@ Most teams skip validation and build on assumptions. Convoke guides you through
40
49
  ▶ Start at Emma · back to any stream
41
50
  ```
42
51
 
43
- Each agent above runs one of these streams. You don't follow a fixed path — the system guides you to whichever stream needs attention based on what you've learned so far.
52
+ *Suggested flow. Each workflow ends with a Compass routing to whichever stream needs attention you can start or return to any agent.*
53
+
54
+ <details>
55
+ <summary>22 Vortex Workflows</summary>
56
+
57
+ - Assumption Mapping
58
+ - Behavior Analysis
59
+ - Contextualize Scope
60
+ - Empathy Map
61
+ - Experiment Design
62
+ - Hypothesis Engineering
63
+ - Lean Experiment
64
+ - Lean Persona
65
+ - Learning Card
66
+ - MVP
67
+ - Pattern Mapping
68
+ - Pivot Patch Persevere
69
+ - Pivot Resynthesis
70
+ - Product Vision
71
+ - Production Monitoring
72
+ - Proof of Concept
73
+ - Proof of Value
74
+ - Research Convergence
75
+ - Signal Interpretation
76
+ - User Discovery
77
+ - User Interview
78
+ - Vortex Navigation
79
+
80
+ </details>
44
81
 
45
82
  | Agent | Stream | What they do |
46
83
  |-------|--------|-------------|
@@ -49,35 +86,78 @@ Each agent above runs one of these streams. You don't follow a fixed path — th
49
86
  | **Mila** 🔬 | Synthesize | Converge research into clear problem definitions |
50
87
  | **Liam** 💡 | Hypothesize | Turn problems into testable hypotheses and experiments |
51
88
  | **Wade** 🧪 | Externalize | Test assumptions with MVPs, experiments, and prototypes |
52
- | **Noah** 📡 | Sensitize | Interpret production signals and user behavior |
89
+ | **Noah** 📡 | Sensitize | Interpret production signals, user behavior, and engagement patterns |
53
90
  | **Max** 🧭 | Systematize | Capture learnings and decide: pivot, patch, or persevere |
54
91
 
92
+ ### What Agents Produce
93
+
94
+ Here's a sample of real output from a busy parents meal planning project — each excerpt is from the [full 7-agent journey example](_bmad-output/journey-examples/busy-parents-7-agent-journey.md).
95
+
96
+ #### Emma 🎯 Contextualize
97
+
98
+ Emma frames the right problem. Here's the Job-to-be-Done she produced:
99
+
100
+ > **Job-to-be-Done:** Eliminate the daily 5:30 PM dinner decision so I can feed my family well without the mental load of planning, shopping, and deciding under time pressure.
101
+ >
102
+ > **Riskiest Assumptions:**
103
+ > 1. Decision fatigue — not cooking skill or ingredient access — is the primary barrier to weeknight dinner success
104
+ > 2. Parents would trust and act on an externally-provided dinner suggestion rather than needing to choose themselves
105
+ > 3. "Good enough" nutrition is an acceptable standard — parents aren't seeking perfection, they're seeking relief from guilt
106
+
107
+ #### Liam 💡 Hypothesize
108
+
109
+ Liam turns problems into testable ideas. Here's one of three hypotheses he produced:
110
+
111
+ > **Hypothesis 1: The Pre-Commute Decision Eliminator**
112
+ >
113
+ > We believe that busy parents will act on a single dinner suggestion delivered at 4:00 PM within 3 minutes because the decision burden — not cooking — is their primary barrier, and an earlier intervention catches them before the anxiety spiral begins.
114
+ >
115
+ > **Riskiest Assumption:** Parents will trust and act on an automated suggestion without second-guessing. Research shows they want "someone to tell me what to make" — but "someone" may need to be a trusted person, not an algorithm.
116
+
117
+ #### Max 🧭 Systematize
118
+
119
+ Max captures what you learned and decides what to do next:
120
+
121
+ > **Recommendation: PATCH** (iterate on timing, don't pivot direction)
122
+ >
123
+ > The core hypothesis is validated. The product direction (decision elimination via single suggestion) is correct. The timing mechanism needs refinement — shift from fixed 4:00 PM delivery to adaptive delivery based on each user's observed engagement pattern.
124
+ >
125
+ > **Three Actions:**
126
+ > 1. **Implement adaptive timing** — shift the push notification to match each user's observed engagement window. Engineering effort: 1-2 sprints.
127
+ > 2. **Route to Isla for timing investigation** — qualitative research on why users engage at 3:15 PM. Is it anxiety relief, logistical planning, or habit?
128
+ > 3. **Test willingness to pay immediately** — the mechanism works, but we have no commercial validation. Run a landing page test with pricing before further product investment.
129
+
130
+ Want to see the complete walkthrough of all 7 agents applied to the example above?
131
+
132
+ **[See the full 7-agent journey example →](_bmad-output/journey-examples/busy-parents-7-agent-journey.md)**
133
+
55
134
  ---
56
135
 
57
- ## Quick Start
136
+ ### Quick Start
58
137
 
59
- ### Prerequisites
138
+ #### Prerequisites
60
139
 
61
140
  - Node.js 18+ or Bun
62
141
  - Git
63
142
  - Claude Code or Claude.ai
64
143
 
65
- ### Install
144
+ #### Install
66
145
 
67
146
  ```bash
68
- npm install convoke-agents && npx convoke-install-vortex
147
+ npm install convoke-agents && npx -p convoke-agents convoke-install-vortex
69
148
  ```
70
149
 
71
- All 7 agents with 22 workflows are installed and ready to use.
150
+ All 7 agents with 22 workflows are installed and ready to use. Something not working? Run `npx -p convoke-agents convoke-doctor` or check the [FAQ](docs/faq.md).
72
151
 
73
- ### Personalize
152
+ #### Personalize
74
153
 
75
154
  Open `_bmad/bme/_vortex/config.yaml` and replace `{user}` with your name. Agents use this to personalize their interactions.
76
155
 
77
- ### Activate an Agent
156
+ #### Activate an Agent
157
+
158
+ **Claude Code / Terminal**
78
159
 
79
160
  ```bash
80
- # Read an agent file to activate it
81
161
  cat _bmad/bme/_vortex/agents/contextualization-expert.md # Emma 🎯
82
162
  cat _bmad/bme/_vortex/agents/discovery-empathy-expert.md # Isla 🔍
83
163
  cat _bmad/bme/_vortex/agents/research-convergence-specialist.md # Mila 🔬
@@ -87,14 +167,13 @@ cat _bmad/bme/_vortex/agents/production-intelligence-specialist.md # Noah 📡
87
167
  cat _bmad/bme/_vortex/agents/learning-decision-expert.md # Max 🧭
88
168
  ```
89
169
 
90
- **How activation works:** Each agent is a markdown file containing a full persona, menu system, and workflow instructions. When Claude reads the file, it adopts that agent's expertise and presents you with an interactive menu.
170
+ **Claude.ai**
91
171
 
92
- - **Claude Code / Terminal:** Use the `cat` commands above
93
- - **Claude.ai:** Copy the contents of any agent file and paste into the chat
172
+ Open any agent file from `_bmad/bme/_vortex/agents/` and paste its contents into your conversation.
94
173
 
95
- Pick a workflow from the menu and follow the guided steps.
174
+ **How activation works:** Each agent is a markdown file containing a full persona, menu system, and workflow instructions. When Claude reads the file, it adopts that agent's expertise and presents you with an interactive menu. Pick a workflow from the menu and follow the guided steps.
96
175
 
97
- ### Your First 15 Minutes
176
+ #### Your First 15 Minutes
98
177
 
99
178
  1. **Personalize** — If you haven't already, edit `_bmad/bme/_vortex/config.yaml` and replace `{user}` with your name
100
179
  2. **Activate Emma** — `cat _bmad/bme/_vortex/agents/contextualization-expert.md`
@@ -105,7 +184,7 @@ Pick a workflow from the menu and follow the guided steps.
105
184
 
106
185
  Each workflow ends with a Compass routing suggestion. You don't need to follow a linear path — the system guides you to whichever stream needs attention.
107
186
 
108
- ### What Gets Installed
187
+ #### What Gets Installed
109
188
 
110
189
  ```
111
190
  your-project/
@@ -121,69 +200,25 @@ your-project/
121
200
 
122
201
  ---
123
202
 
124
- ## Updating
203
+ ### Updating
125
204
 
126
205
  ```bash
127
- npx convoke-version # Check current version
128
- npx convoke-update --dry-run # Preview changes
129
- npx convoke-update # Apply update (auto-backup)
130
- npx convoke-doctor # Diagnose issues
206
+ npx -p convoke-agents convoke-version # Check current version
207
+ npx -p convoke-agents convoke-update --dry-run # Preview changes
208
+ npx -p convoke-agents convoke-update # Apply update (auto-backup)
209
+ npx -p convoke-agents convoke-doctor # Diagnose issues
131
210
  ```
132
211
 
133
212
  Your data in `_bmad-output/` is never touched. Automatic backups are created before every update.
134
213
 
135
214
  > **Tip:** If `npx convoke-update` reports "Already up to date" but you know a newer version exists, npx may be serving a cached copy. Force the latest with:
136
215
  > ```bash
137
- > npx -p convoke-agents@latest convoke-update
216
+ > npx -p convoke-agents@latest convoke-update --yes
138
217
  > ```
139
218
 
140
219
  See [UPDATE-GUIDE.md](UPDATE-GUIDE.md) for migration paths and troubleshooting.
141
220
 
142
- ## What Agents Produce
143
-
144
- Here's a sample of real output from a busy parents meal planning project — each excerpt is from the [full 7-agent journey example](_bmad-output/journey-examples/busy-parents-7-agent-journey.md).
145
-
146
- ### Emma 🎯 Contextualize
147
-
148
- Emma frames the right problem. Here's the Job-to-be-Done she produced:
149
-
150
- > **Job-to-be-Done:** Eliminate the daily 5:30 PM dinner decision so I can feed my family well without the mental load of planning, shopping, and deciding under time pressure.
151
- >
152
- > **Riskiest Assumptions:**
153
- > 1. Decision fatigue — not cooking skill or ingredient access — is the primary barrier to weeknight dinner success
154
- > 2. Parents would trust and act on an externally-provided dinner suggestion rather than needing to choose themselves
155
- > 3. "Good enough" nutrition is an acceptable standard — parents aren't seeking perfection, they're seeking relief from guilt
156
-
157
- ### Liam 💡 Hypothesize
158
-
159
- Liam turns problems into testable ideas. Here's one of three hypotheses he produced:
160
-
161
- > **Hypothesis 1: The Pre-Commute Decision Eliminator**
162
- >
163
- > We believe that busy parents will act on a single dinner suggestion delivered at 4:00 PM within 3 minutes because the decision burden — not cooking — is their primary barrier, and an earlier intervention catches them before the anxiety spiral begins.
164
- >
165
- > **Riskiest Assumption:** Parents will trust and act on an automated suggestion without second-guessing. Research shows they want "someone to tell me what to make" — but "someone" may need to be a trusted person, not an algorithm.
166
-
167
- ### Max 🧭 Systematize
168
-
169
- Max captures what you learned and decides what to do next:
170
-
171
- > **Recommendation: PATCH** (iterate on timing, don't pivot direction)
172
- >
173
- > The core hypothesis is validated. The product direction (decision elimination via single suggestion) is correct. The timing mechanism needs refinement — shift from fixed 4:00 PM delivery to adaptive delivery based on each user's observed engagement pattern.
174
- >
175
- > **Three Actions:**
176
- > 1. **Implement adaptive timing** — shift the push notification to match each user's observed engagement window. Engineering effort: 1-2 sprints.
177
- > 2. **Route to Isla for timing investigation** — qualitative research on why users engage at 3:15 PM. Is it anxiety relief, logistical planning, or habit?
178
- > 3. **Test willingness to pay immediately** — the mechanism works, but we have no commercial validation. Run a landing page test with pricing before further product investment.
179
-
180
- Want to see the complete walkthrough of all 7 agents applied to the example above?
181
-
182
- **📖 [See the full 7-agent journey example →](_bmad-output/journey-examples/busy-parents-7-agent-journey.md)**
183
-
184
- ---
185
-
186
- ## Using the Agents
221
+ ### Using the Agents
187
222
 
188
223
  Each agent can be used independently or as part of the full Vortex flow:
189
224
 
@@ -195,7 +230,7 @@ Each agent can be used independently or as part of the full Vortex flow:
195
230
  6. **Noah (Sensitize)** — Start here when experiments have graduated to production
196
231
  7. **Max (Systematize)** — Start here when you have results and need to decide next steps
197
232
 
198
- Max's **Vortex Navigation** workflow helps identify which stream needs attention based on evidence gaps — you don't have to follow a linear path. Every workflow ends with a **Vortex Compass** that routes you to the right next agent based on what you learned. Ten handoff contracts (HC1-HC10) ensure structured information flows between agents, so each agent gets exactly the data it needs from the previous one.
233
+ Max's **Vortex Navigation** workflow helps identify which stream needs attention based on evidence gaps — you don't have to follow a linear path. Every workflow ends with a **Vortex Compass** that routes you to the right next agent based on what you learned. Ten handoff contracts (HC1-HC10) ensure structured information flows between agents see the [contracts directory](_bmad/bme/_vortex/contracts/) for details.
199
234
 
200
235
  For detailed workflow descriptions and usage examples, see the [Agent Guide](docs/agents.md) and the individual user guides:
201
236
 
@@ -211,17 +246,16 @@ For detailed workflow descriptions and usage examples, see the [Agent Guide](doc
211
246
 
212
247
  ## How It Fits with BMAD Core
213
248
 
214
- Convoke handles **pre-implementation validation**. BMAD Core handles **implementation**.
249
+ Convoke handles **discovery and validation**. BMAD Core handles **implementation**.
215
250
 
216
251
  ```
217
- Convoke (Vortex) BMAD Core
218
- ┌──────────────────────────────────────┐ ┌──────────────────────┐
219
- Isla Mila → Liam → Wade → Noah ───> │ PM → Architect → Dev │
220
- ↑ ↓ │ "Let's build it" │
221
- └──── Max ◀── Noah Max ↻ └──────────────────────┘
222
- Emma provides context at any point
223
- │ "Should we build this?" │
224
- └──────────────────────────────────────┘
252
+ Convoke Teams BMAD Core
253
+ ┌──────────────────────────────┐ ┌──────────────────────┐
254
+ Vortex (Product Discovery) ──────> │ PM → Architect → Dev │
255
+ "Should we build this?" │ "Let's build it" │
256
+ <──────
257
+ [Future teams] │ signals
258
+ └──────────────────────────────┘ └──────────────────────┘
225
259
  ```
226
260
 
227
261
  Convoke works standalone or as an extension — no BMAD Method installation required.
@@ -247,7 +281,7 @@ Convoke works standalone or as an extension — no BMAD Method installation requ
247
281
  - **v1.6.x** — Wave 3: Complete 7-stream Vortex (added Mila, Liam, Noah — 7 agents, 22 workflows, handoff contracts, Compass routing)
248
282
  - **v1.7.0** — Wave 4: Quality & onboarding (P0 test suite, docs audit tool, all 22 workflows production-ready, README overhaul, package size fix)
249
283
  - **v2.0.0** — Product renamed to Convoke. CLI commands renamed to `convoke-*`. Package: `npm install convoke-agents`
250
- - **Next** — Multi-agent collaboration, cross-agent workflows, analytics
284
+ - **Next** — Additional domain-specialized teams, multi-agent collaboration, cross-team workflows
251
285
 
252
286
  ---
253
287
 
package/UPDATE-GUIDE.md CHANGED
@@ -11,10 +11,10 @@ How to update your Convoke installation to the latest version.
11
11
  npm install convoke-agents@latest
12
12
 
13
13
  # Preview changes (dry run)
14
- npx convoke-update --dry-run
14
+ npx -p convoke-agents convoke-update --dry-run
15
15
 
16
16
  # Apply the update
17
- npx convoke-update
17
+ npx -p convoke-agents convoke-update
18
18
  ```
19
19
 
20
20
  Your data is backed up automatically before any changes.
@@ -23,7 +23,7 @@ Your data is backed up automatically before any changes.
23
23
 
24
24
  ## Update Commands
25
25
 
26
- ### `npx convoke-update`
26
+ ### `convoke-update`
27
27
 
28
28
  Main update command — applies migrations and refreshes your installation.
29
29
 
@@ -34,27 +34,29 @@ Main update command — applies migrations and refreshes your installation.
34
34
  | `--verbose` or `-v` | Show detailed output |
35
35
 
36
36
  ```bash
37
- npx convoke-update --dry-run # Preview
38
- npx convoke-update # Apply with confirmation
39
- npx convoke-update --yes # Apply without confirmation
37
+ npx -p convoke-agents convoke-update --dry-run # Preview
38
+ npx -p convoke-agents convoke-update # Apply with confirmation
39
+ npx -p convoke-agents convoke-update --yes # Apply without confirmation
40
40
  ```
41
41
 
42
- ### `npx convoke-version`
42
+ ### `convoke-version`
43
43
 
44
44
  Show current version, latest available version, and migration history.
45
45
 
46
46
  ```bash
47
- npx convoke-version
47
+ npx -p convoke-agents convoke-version
48
48
  ```
49
49
 
50
- ### `npx convoke-doctor`
50
+ ### `convoke-doctor`
51
51
 
52
52
  Run diagnostics on your installation. Checks project root, config validity, agent files, workflows, output directory permissions, migration lock status, and version consistency — with actionable fix suggestions.
53
53
 
54
54
  ```bash
55
- npx convoke-doctor
55
+ npx -p convoke-agents convoke-doctor
56
56
  ```
57
57
 
58
+ > **Why `-p convoke-agents`?** The CLI commands (`convoke-update`, `convoke-doctor`, etc.) are binaries inside the `convoke-agents` package. Without `-p convoke-agents`, npx tries to find a standalone package with that name, which doesn't exist.
59
+
58
60
  ---
59
61
 
60
62
  ## Migration Paths
@@ -93,8 +95,8 @@ What happens:
93
95
 
94
96
  ```bash
95
97
  npm install convoke-agents@latest
96
- npx convoke-update --dry-run # Preview
97
- npx convoke-update # Apply
98
+ npx -p convoke-agents convoke-update --dry-run # Preview
99
+ npx -p convoke-agents convoke-update # Apply
98
100
  ```
99
101
 
100
102
  ---
@@ -141,7 +143,7 @@ Artifacts created with earlier agents (Emma, Isla, Wade, Max) were not designed
141
143
 
142
144
  ### What Is Managed by the Update System
143
145
 
144
- These change between versions but are handled automatically by `npx convoke-update`:
146
+ These change between versions but are handled automatically by `convoke-update`:
145
147
 
146
148
  - **Agent definition files** — Persona, menu, and instruction content in `_bmad/bme/_vortex/agents/`
147
149
  - **Workflow step files** — Step content, templates, and validation in `_bmad/bme/_vortex/workflows/`
@@ -160,10 +162,10 @@ A previous migration may have crashed. Remove the lock file:
160
162
 
161
163
  ```bash
162
164
  rm _bmad-output/.migration-lock
163
- npx convoke-update
165
+ npx -p convoke-agents convoke-update
164
166
  ```
165
167
 
166
- Or run `npx convoke-doctor` to diagnose — it detects stale locks.
168
+ Or run `npx -p convoke-agents convoke-doctor` to diagnose — it detects stale locks.
167
169
 
168
170
  ### Update fails and won't rollback
169
171
 
@@ -181,7 +183,7 @@ cp -r _bmad-output/.backups/{backup-dir}/workflows _bmad/bme/_vortex/
181
183
 
182
184
  ### "Already up to date" but version is outdated
183
185
 
184
- npx caches package binaries. If you installed at an older version, `npx convoke-update` may keep running the cached script instead of the latest. Force-fetch the latest:
186
+ npx caches package binaries. If you installed at an older version, `convoke-update` may keep running the cached script instead of the latest. Force-fetch the latest:
185
187
 
186
188
  ```bash
187
189
  npx -p convoke-agents@latest convoke-update
@@ -194,7 +196,7 @@ This tells npx to download `convoke-agents@latest` first, then run the `convoke-
194
196
  Reinstall from scratch (preserves user data):
195
197
 
196
198
  ```bash
197
- npx convoke-install-vortex
199
+ npx -p convoke-agents convoke-install-vortex
198
200
  ```
199
201
 
200
202
  ### Check migration logs
@@ -210,10 +212,10 @@ cat _bmad-output/.logs/migration-*.log | tail -100
210
212
 
211
213
  If you encounter issues:
212
214
 
213
- 1. Run `npx convoke-doctor` for diagnostics
215
+ 1. Run `npx -p convoke-agents convoke-doctor` for diagnostics
214
216
  2. Check migration logs in `_bmad-output/.logs/`
215
217
  3. Restore from backup in `_bmad-output/.backups/`
216
- 4. [Report an issue](https://github.com/amalik/convoke-agents/issues) — include your version (`npx convoke-version`) and error message
218
+ 4. [Report an issue](https://github.com/amalik/convoke-agents/issues) — include your version (`npx -p convoke-agents convoke-version`) and error message
217
219
 
218
220
  ---
219
221
 
package/index.js CHANGED
@@ -5,11 +5,11 @@
5
5
  * Product discovery through Contextualize, Empathize, Externalize, and Systematize streams.
6
6
  *
7
7
  * This is a CLI-first package. Use the bin commands:
8
- * npx convoke-install-vortex – Install all Vortex agents (primary)
9
- * npx convoke-install – Install all agents (umbrella alias)
10
- * npx convoke-update – Check for and apply updates
11
- * npx convoke-version – Show installed vs latest version
12
- * npx convoke-doctor – Diagnose installation issues
8
+ * npx -p convoke-agents convoke-install-vortex – Install all Vortex agents (primary)
9
+ * npx -p convoke-agents convoke-install – Install all agents (umbrella alias)
10
+ * npx -p convoke-agents convoke-update – Check for and apply updates
11
+ * npx -p convoke-agents convoke-version – Show installed vs latest version
12
+ * npx -p convoke-agents convoke-doctor – Diagnose installation issues
13
13
  *
14
14
  * @license MIT
15
15
  */
@@ -45,11 +45,11 @@ if (require.main === module) {
45
45
  }
46
46
  console.log('');
47
47
  console.log(`${GREEN}Commands:${RESET}`);
48
- console.log(` ${CYAN}npx convoke-install-vortex${RESET} Install all Vortex agents`);
49
- console.log(` ${CYAN}npx convoke-install${RESET} Install all agents ${GRAY}(alias)${RESET}`);
50
- console.log(` ${CYAN}npx convoke-update${RESET} Check for updates`);
51
- console.log(` ${CYAN}npx convoke-version${RESET} Show version info`);
52
- console.log(` ${CYAN}npx convoke-doctor${RESET} Diagnose issues`);
48
+ console.log(` ${CYAN}npx -p convoke-agents convoke-install-vortex${RESET} Install all Vortex agents`);
49
+ console.log(` ${CYAN}npx -p convoke-agents convoke-install${RESET} Install all agents ${GRAY}(alias)${RESET}`);
50
+ console.log(` ${CYAN}npx -p convoke-agents convoke-update${RESET} Check for updates`);
51
+ console.log(` ${CYAN}npx -p convoke-agents convoke-version${RESET} Show version info`);
52
+ console.log(` ${CYAN}npx -p convoke-agents convoke-doctor${RESET} Diagnose issues`);
53
53
  console.log('');
54
54
  }
55
55
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "convoke-agents",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "Agent teams for complex systems, compatible with BMad Method",
5
5
  "main": "index.js",
6
6
  "files": [
@@ -48,6 +48,9 @@ async function main() {
48
48
  // 7. Version consistency
49
49
  checks.push(checkVersionConsistency(projectRoot));
50
50
 
51
+ // 8. Workflow step structure
52
+ checks.push(checkWorkflowStepStructure(projectRoot));
53
+
51
54
  printResults(checks);
52
55
 
53
56
  const failed = checks.filter(c => !c.passed);
@@ -66,7 +69,7 @@ function checkProjectRoot(projectRoot) {
66
69
  name: 'Project root',
67
70
  passed: false,
68
71
  error: 'Could not find _bmad/ directory',
69
- fix: 'Run this command from inside a Convoke project, or run: npx convoke-install'
72
+ fix: 'Run this command from inside a Convoke project, or run: npx -p convoke-agents convoke-install'
70
73
  };
71
74
  }
72
75
 
@@ -78,7 +81,7 @@ function checkConfig(projectRoot) {
78
81
  name: 'Config file',
79
82
  passed: false,
80
83
  error: 'config.yaml not found',
81
- fix: 'Run: npx convoke-install'
84
+ fix: 'Run: npx -p convoke-agents convoke-install'
82
85
  };
83
86
  }
84
87
 
@@ -91,7 +94,7 @@ function checkConfig(projectRoot) {
91
94
  name: 'Config file',
92
95
  passed: false,
93
96
  error: 'config.yaml is empty or invalid',
94
- fix: 'Delete _bmad/bme/_vortex/config.yaml and run: npx convoke-install'
97
+ fix: 'Delete _bmad/bme/_vortex/config.yaml and run: npx -p convoke-agents convoke-install'
95
98
  };
96
99
  }
97
100
 
@@ -100,7 +103,7 @@ function checkConfig(projectRoot) {
100
103
  name: 'Config file',
101
104
  passed: false,
102
105
  error: 'config.yaml missing agents section',
103
- fix: 'Run: npx convoke-update'
106
+ fix: 'Run: npx -p convoke-agents convoke-update'
104
107
  };
105
108
  }
106
109
 
@@ -110,7 +113,7 @@ function checkConfig(projectRoot) {
110
113
  name: 'Config file',
111
114
  passed: false,
112
115
  error: `YAML parse error: ${err.message}`,
113
- fix: 'Check config.yaml for syntax errors, or delete and run: npx convoke-install'
116
+ fix: 'Check config.yaml for syntax errors, or delete and run: npx -p convoke-agents convoke-install'
114
117
  };
115
118
  }
116
119
  }
@@ -124,7 +127,7 @@ function checkAgents(projectRoot) {
124
127
  name: 'Agent files',
125
128
  passed: false,
126
129
  error: 'agents/ directory not found',
127
- fix: 'Run: npx convoke-install-vortex'
130
+ fix: 'Run: npx -p convoke-agents convoke-install-vortex'
128
131
  };
129
132
  }
130
133
 
@@ -135,7 +138,7 @@ function checkAgents(projectRoot) {
135
138
  name: 'Agent files',
136
139
  passed: false,
137
140
  error: `Missing: ${missing.join(', ')}`,
138
- fix: 'Run: npx convoke-install-vortex to reinstall'
141
+ fix: 'Run: npx -p convoke-agents convoke-install-vortex to reinstall'
139
142
  };
140
143
  }
141
144
 
@@ -150,7 +153,7 @@ function checkAgents(projectRoot) {
150
153
  name: 'Agent files',
151
154
  passed: false,
152
155
  error: `Empty agent files: ${empty.join(', ')}`,
153
- fix: 'Run: npx convoke-install to restore agent files'
156
+ fix: 'Run: npx -p convoke-agents convoke-install to restore agent files'
154
157
  };
155
158
  }
156
159
 
@@ -166,7 +169,7 @@ function checkWorkflows(projectRoot) {
166
169
  name: 'Workflow directories',
167
170
  passed: false,
168
171
  error: 'workflows/ directory not found',
169
- fix: 'Run: npx convoke-install'
172
+ fix: 'Run: npx -p convoke-agents convoke-install'
170
173
  };
171
174
  }
172
175
 
@@ -179,7 +182,7 @@ function checkWorkflows(projectRoot) {
179
182
  name: 'Workflow directories',
180
183
  passed: false,
181
184
  error: `Missing: ${missing.join(', ')}`,
182
- fix: 'Run: npx convoke-update to restore workflows'
185
+ fix: 'Run: npx -p convoke-agents convoke-update to restore workflows'
183
186
  };
184
187
  }
185
188
 
@@ -281,13 +284,44 @@ function checkVersionConsistency(projectRoot) {
281
284
  name: 'Version consistency',
282
285
  passed: false,
283
286
  error: `Package: ${packageVersion}, Config: ${installedVersion}`,
284
- fix: 'Run: npx convoke-update'
287
+ fix: 'Run: npx -p convoke-agents convoke-update'
285
288
  };
286
289
  } catch (_err) {
287
290
  return { name: 'Version consistency', passed: true, info: 'Could not read config version' };
288
291
  }
289
292
  }
290
293
 
294
+ function checkWorkflowStepStructure(projectRoot) {
295
+ const workflowsDir = path.join(projectRoot, '_bmad/bme/_vortex/workflows');
296
+
297
+ if (!fs.existsSync(workflowsDir)) {
298
+ return { name: 'Workflow step structure', passed: true, info: 'No workflows directory' };
299
+ }
300
+
301
+ const issues = [];
302
+
303
+ for (const wf of WORKFLOW_NAMES) {
304
+ const stepsDir = path.join(workflowsDir, wf, 'steps');
305
+ if (!fs.existsSync(stepsDir)) continue;
306
+
307
+ const files = fs.readdirSync(stepsDir).filter(f => f.endsWith('.md'));
308
+ if (files.length < 4 || files.length > 6) {
309
+ issues.push(`${wf}: ${files.length} step files (expected 4-6)`);
310
+ }
311
+ }
312
+
313
+ if (issues.length > 0) {
314
+ return {
315
+ name: 'Workflow step structure',
316
+ passed: false,
317
+ error: issues.join('; '),
318
+ fix: 'Run: npx -p convoke-agents convoke-install-vortex to reinstall clean workflow files'
319
+ };
320
+ }
321
+
322
+ return { name: 'Workflow step structure', passed: true, info: 'All workflows have valid step counts' };
323
+ }
324
+
291
325
  function printResults(checks) {
292
326
  const passed = checks.filter(c => c.passed);
293
327
  const failed = checks.filter(c => !c.passed);
@@ -22,7 +22,7 @@ const USER_FACING_DOCS = [
22
22
  'UPDATE-GUIDE.md',
23
23
  'INSTALLATION.md',
24
24
  'CHANGELOG.md',
25
- 'BMAD-METHOD-COMPATIBILITY.md',
25
+ 'docs/BMAD-METHOD-COMPATIBILITY.md',
26
26
  '_bmad/bme/_vortex/guides/EMMA-USER-GUIDE.md',
27
27
  '_bmad/bme/_vortex/guides/ISLA-USER-GUIDE.md',
28
28
  '_bmad/bme/_vortex/guides/MILA-USER-GUIDE.md',
@@ -40,7 +40,7 @@ async function main() {
40
40
  const agentNames = AGENTS.map(a => a.name).join(' + ');
41
41
  console.log('To install agents into your project, run:');
42
42
  console.log('');
43
- console.log(` ${CYAN}npx convoke-install${RESET} - Install all agents (${agentNames})`);
43
+ console.log(` ${CYAN}npx -p convoke-agents convoke-install${RESET} - Install all agents (${agentNames})`);
44
44
  console.log('');
45
45
  return;
46
46
  }
@@ -73,10 +73,10 @@ async function main() {
73
73
  }
74
74
 
75
75
  console.log('To preview changes without applying:');
76
- console.log(` ${CYAN}npx convoke-update --dry-run${RESET}`);
76
+ console.log(` ${CYAN}npx -p convoke-agents convoke-update --dry-run${RESET}`);
77
77
  console.log('');
78
78
  console.log('To apply the update:');
79
- console.log(` ${CYAN}npx convoke-update${RESET}`);
79
+ console.log(` ${CYAN}npx -p convoke-agents convoke-update${RESET}`);
80
80
  console.log('');
81
81
  console.log(`${BOLD}Your data will be backed up automatically before any changes.${RESET}`);
82
82
  console.log('');
@@ -94,7 +94,7 @@ async function main() {
94
94
  const agentNames = AGENTS.map(a => a.name).join(' + ');
95
95
  console.log('To install agents into your project, run:');
96
96
  console.log('');
97
- console.log(` ${CYAN}npx convoke-install${RESET} - Install all agents (${agentNames})`);
97
+ console.log(` ${CYAN}npx -p convoke-agents convoke-install${RESET} - Install all agents (${agentNames})`);
98
98
  console.log('');
99
99
  }
100
100
  }
@@ -39,7 +39,7 @@ async function main() {
39
39
  console.error('');
40
40
  console.error(chalk.red(`Migration '${migrationName}' not found.`));
41
41
  console.error('');
42
- console.error('Run ' + chalk.cyan('npx convoke-migrate') + ' to see available migrations.');
42
+ console.error('Run ' + chalk.cyan('npx -p convoke-agents convoke-migrate') + ' to see available migrations.');
43
43
  console.error('');
44
44
  process.exit(1);
45
45
  }
@@ -152,10 +152,10 @@ function showAvailableMigrations() {
152
152
  console.log('');
153
153
  });
154
154
 
155
- console.log('Usage: ' + chalk.cyan('npx convoke-migrate <migration-name>'));
155
+ console.log('Usage: ' + chalk.cyan('npx -p convoke-agents convoke-migrate <migration-name>'));
156
156
  console.log('');
157
157
  console.log(chalk.yellow('Warning: Manual migrations bypass safety checks.'));
158
- console.log(chalk.yellow(' Use ' + chalk.cyan('npx convoke-update') + ' for normal updates.'));
158
+ console.log(chalk.yellow(' Use ' + chalk.cyan('npx -p convoke-agents convoke-update') + ' for normal updates.'));
159
159
  console.log('');
160
160
  }
161
161
 
@@ -86,7 +86,7 @@ async function main() {
86
86
  case 'no-project':
87
87
  console.log(chalk.red('Not in a Convoke project. Could not find _bmad/ directory.'));
88
88
  console.log('');
89
- console.log('Run: ' + chalk.cyan('npx convoke-install'));
89
+ console.log('Run: ' + chalk.cyan('npx -p convoke-agents convoke-install'));
90
90
  console.log('');
91
91
  process.exit(1);
92
92
  break;
@@ -94,7 +94,7 @@ async function main() {
94
94
  case 'fresh':
95
95
  console.log(chalk.yellow('No previous installation detected.'));
96
96
  console.log('');
97
- console.log('Run: ' + chalk.cyan('npx convoke-install'));
97
+ console.log('Run: ' + chalk.cyan('npx -p convoke-agents convoke-install'));
98
98
  console.log('');
99
99
  process.exit(0);
100
100
  break;
@@ -102,7 +102,7 @@ async function main() {
102
102
  case 'broken':
103
103
  console.log(chalk.red('Installation appears incomplete or corrupted.'));
104
104
  console.log('');
105
- console.log('Recommend running: ' + chalk.cyan('npx convoke-install'));
105
+ console.log('Recommend running: ' + chalk.cyan('npx -p convoke-agents convoke-install'));
106
106
  console.log('');
107
107
  process.exit(1);
108
108
  break;
@@ -110,7 +110,7 @@ async function main() {
110
110
  case 'no-version':
111
111
  console.log(chalk.yellow('Could not detect current version.'));
112
112
  console.log('');
113
- console.log('Run: ' + chalk.cyan('npx convoke-install'));
113
+ console.log('Run: ' + chalk.cyan('npx -p convoke-agents convoke-install'));
114
114
  console.log('');
115
115
  process.exit(0);
116
116
  break;
@@ -25,7 +25,7 @@ async function main() {
25
25
  console.log(chalk.yellow('Status: Not in a Convoke project'));
26
26
  console.log(`Package version: ${chalk.cyan(targetVersion)}`);
27
27
  console.log('');
28
- console.log('Run: ' + chalk.cyan('npx convoke-install'));
28
+ console.log('Run: ' + chalk.cyan('npx -p convoke-agents convoke-install'));
29
29
  console.log('');
30
30
  return;
31
31
  }
@@ -38,7 +38,7 @@ async function main() {
38
38
  console.log(chalk.yellow('Status: Not installed'));
39
39
  console.log(`Package version: ${chalk.cyan(targetVersion)}`);
40
40
  console.log('');
41
- console.log('Run: ' + chalk.cyan('npx convoke-install'));
41
+ console.log('Run: ' + chalk.cyan('npx -p convoke-agents convoke-install'));
42
42
  console.log('');
43
43
  return;
44
44
  }
@@ -50,7 +50,7 @@ async function main() {
50
50
  console.log('');
51
51
  console.log(chalk.yellow('This indicates an installation error.'));
52
52
  console.log('');
53
- console.log('Try running: ' + chalk.cyan('npx convoke-install'));
53
+ console.log('Try running: ' + chalk.cyan('npx -p convoke-agents convoke-install'));
54
54
  console.log('');
55
55
  console.log('If the problem persists, check the installation logs.');
56
56
  console.log('');
@@ -64,7 +64,7 @@ async function main() {
64
64
  console.log('');
65
65
  console.log(chalk.yellow('Some required files are missing.'));
66
66
  console.log('');
67
- console.log('Run: ' + chalk.cyan('npx convoke-install') + ' to reinstall');
67
+ console.log('Run: ' + chalk.cyan('npx -p convoke-agents convoke-install') + ' to reinstall');
68
68
  console.log('');
69
69
  return;
70
70
  }
@@ -48,16 +48,30 @@ async function runMigrations(fromVersion, options = {}) {
48
48
  return { success: true, migrations: [], skipped: true };
49
49
  }
50
50
 
51
- console.log(chalk.cyan(`Found ${migrations.length} migration(s) to apply:`));
52
- migrations.forEach((m, i) => {
53
- const icon = m.breaking ? chalk.red('⚠') : chalk.green('✓');
54
- console.log(` ${i + 1}. ${icon} ${m.name} - ${m.description}`);
51
+ // Filter out already-applied migrations using history in config.yaml
52
+ const configPath = path.join(projectRoot, '_bmad/bme/_vortex/config.yaml');
53
+ const unappliedMigrations = migrations.filter(m => {
54
+ if (registry.hasMigrationBeenApplied(m.name, configPath)) {
55
+ console.log(chalk.yellow(`Skipping already-applied: ${m.name}`));
56
+ return false;
57
+ }
58
+ return true;
55
59
  });
60
+
61
+ if (unappliedMigrations.length === 0) {
62
+ console.log(chalk.yellow('No new migrations to apply'));
63
+ } else {
64
+ console.log(chalk.cyan(`Found ${unappliedMigrations.length} migration(s) to apply:`));
65
+ unappliedMigrations.forEach((m, i) => {
66
+ const icon = m.breaking ? chalk.red('⚠') : chalk.green('✓');
67
+ console.log(` ${i + 1}. ${icon} ${m.name} - ${m.description}`);
68
+ });
69
+ }
56
70
  console.log('');
57
71
 
58
72
  // If dry run, just preview
59
73
  if (dryRun) {
60
- return await previewMigrations(migrations);
74
+ return await previewMigrations(unappliedMigrations);
61
75
  }
62
76
 
63
77
  // 2. Acquire migration lock
@@ -75,9 +89,9 @@ async function runMigrations(fromVersion, options = {}) {
75
89
 
76
90
  // 4. Execute migration deltas sequentially
77
91
  console.log(chalk.cyan('[2/5] Running migration deltas...'));
78
- for (let i = 0; i < migrations.length; i++) {
79
- const migration = migrations[i];
80
- console.log(chalk.cyan(`\nMigration ${i + 1}/${migrations.length}: ${migration.name}`));
92
+ for (let i = 0; i < unappliedMigrations.length; i++) {
93
+ const migration = unappliedMigrations[i];
94
+ console.log(chalk.cyan(`\nMigration ${i + 1}/${unappliedMigrations.length}: ${migration.name}`));
81
95
 
82
96
  try {
83
97
  const changes = await executeMigration(migration, projectRoot, { verbose });
@@ -108,14 +122,8 @@ async function runMigrations(fromVersion, options = {}) {
108
122
  console.log(chalk.green('✓ Installation refreshed'));
109
123
  console.log('');
110
124
 
111
- // 6. Update migration history in config.yaml
112
- console.log(chalk.cyan('[4/5] Updating configuration...'));
113
- await updateMigrationHistory(projectRoot, fromVersion, toVersion, results);
114
- console.log(chalk.green('✓ Migration history updated'));
115
- console.log('');
116
-
117
- // 7. Validate installation
118
- console.log(chalk.cyan('[5/5] Validating installation...'));
125
+ // 6. Validate installation (before writing history, so rollback stays clean)
126
+ console.log(chalk.cyan('[4/5] Validating installation...'));
119
127
  const validationResult = await validator.validateInstallation(backupMetadata, projectRoot);
120
128
 
121
129
  validationResult.checks.forEach(check => {
@@ -140,6 +148,17 @@ async function runMigrations(fromVersion, options = {}) {
140
148
  console.log(chalk.green('✓ Installation validated'));
141
149
  console.log('');
142
150
 
151
+ // 7. Update migration history in config.yaml (after validation succeeds)
152
+ console.log(chalk.cyan('[5/5] Updating configuration...'));
153
+ const hasDeltas = results.some(r => r.name !== 'refresh-installation');
154
+ if (hasDeltas) {
155
+ await updateMigrationHistory(projectRoot, fromVersion, toVersion, results);
156
+ console.log(chalk.green('✓ Migration history updated'));
157
+ } else {
158
+ console.log(chalk.green('✓ No new deltas to record'));
159
+ }
160
+ console.log('');
161
+
143
162
  // 8. Cleanup old backups
144
163
  const deletedCount = await backupManager.cleanupOldBackups(5, projectRoot);
145
164
  if (deletedCount > 0) {
@@ -222,7 +241,7 @@ async function previewMigrations(migrations) {
222
241
  console.log(chalk.gray(' - Update user guides (with .bak backup)'));
223
242
  console.log('');
224
243
  console.log(chalk.green('To apply these changes, run:'));
225
- console.log(chalk.cyan(' npx convoke-update'));
244
+ console.log(chalk.cyan(' npx -p convoke-agents convoke-update'));
226
245
  console.log('');
227
246
 
228
247
  return { success: true, dryRun: true, previews };
@@ -73,8 +73,14 @@ async function refreshInstallation(projectRoot, options = {}) {
73
73
  if (!isSameRoot) {
74
74
  for (const wf of WORKFLOW_NAMES) {
75
75
  const src = path.join(workflowsSource, wf);
76
+ const dest = path.join(workflowsTarget, wf);
76
77
  if (fs.existsSync(src)) {
77
- await fs.copy(src, path.join(workflowsTarget, wf), { overwrite: true });
78
+ // Remove existing workflow directory first to clear stale files
79
+ // (e.g., renamed step files from previous versions)
80
+ if (fs.existsSync(dest)) {
81
+ await fs.remove(dest);
82
+ }
83
+ await fs.copy(src, dest, { overwrite: true });
78
84
  changes.push(`Refreshed workflow: ${wf}`);
79
85
  if (verbose) console.log(` Refreshed workflow: ${wf}`);
80
86
  }