convoke-agents 2.0.0 → 2.1.0
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 +1 -1
- package/INSTALLATION.md +10 -10
- package/README.md +137 -91
- package/UPDATE-GUIDE.md +21 -19
- package/index.js +10 -10
- package/package.json +1 -1
- package/scripts/convoke-doctor.js +45 -11
- package/scripts/docs-audit.js +1 -1
- package/scripts/install-vortex-agents.js +6 -2
- package/scripts/postinstall.js +4 -4
- package/scripts/update/convoke-migrate.js +3 -3
- package/scripts/update/convoke-update.js +4 -4
- package/scripts/update/convoke-version.js +4 -4
- package/scripts/update/lib/migration-runner.js +36 -17
- package/scripts/update/lib/refresh-installation.js +45 -1
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
|
-
|
|
4
|
-
|
|
3
|
+
```
|
|
4
|
+
██████╗ ██████╗ ███╗ ██╗██╗ ██╗ ██████╗ ██╗ ██╗███████╗
|
|
5
5
|
██╔════╝██╔═══██╗████╗ ██║██║ ██║██╔═══██╗██║ ██╔╝██╔════╝
|
|
6
6
|
██║ ██║ ██║██╔██╗ ██║██║ ██║██║ ██║█████╔╝ █████╗
|
|
7
7
|
██║ ██║ ██║██║╚██╗██║╚██╗ ██╔╝██║ ██║██╔═██╗ ██╔══╝
|
|
8
8
|
╚██████╗╚██████╔╝██║ ╚████║ ╚████╔╝ ╚██████╔╝██║ ██╗███████╗
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
╚═════╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝
|
|
10
|
+
Agent teams for complex systems
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
[](https://github.com/amalik/convoke-agents)
|
|
14
|
+
[](LICENSE)
|
|
15
|
+
|
|
16
|
+
</div>
|
|
12
17
|
|
|
13
|
-
|
|
18
|
+
Convoke organizes AI agents into domain-specialized teams. Each team brings deep expertise to a specific discipline — product 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**
|
|
14
25
|
|
|
15
|
-
[](https://github.com/amalik/convoke-agents)
|
|
16
26
|
[](docs/agents.md)
|
|
17
27
|
[](docs/agents.md)
|
|
18
|
-
[](LICENSE)
|
|
19
28
|
|
|
20
|
-
|
|
29
|
+
**Most teams skip validation and build on assumptions.**
|
|
21
30
|
|
|
22
|
-
|
|
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
|
-
│
|
|
37
|
+
│ Isla │──▶│ Mila │──▶│ Liam │──▶│ Wade │
|
|
29
38
|
│ Empathize │ │ Synthesize │ │ Hypothesize │ │ Externalize │
|
|
30
39
|
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
|
|
31
40
|
▲ │
|
|
32
41
|
│ │
|
|
33
42
|
│ ▼
|
|
34
|
-
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
|
35
|
-
│
|
|
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
|
-
|
|
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,90 @@ 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
|
|
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
|
-
|
|
136
|
+
### Quick Start
|
|
58
137
|
|
|
59
|
-
|
|
138
|
+
#### Prerequisites
|
|
60
139
|
|
|
61
140
|
- Node.js 18+ or Bun
|
|
62
141
|
- Git
|
|
63
142
|
- Claude Code or Claude.ai
|
|
64
143
|
|
|
65
|
-
|
|
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
|
-
|
|
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
|
-
|
|
156
|
+
#### Activate an Agent
|
|
157
|
+
|
|
158
|
+
**Claude Code (slash commands)**
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
/bmad-agent-bme-contextualization-expert # Emma 🎯
|
|
162
|
+
/bmad-agent-bme-discovery-empathy-expert # Isla 🔍
|
|
163
|
+
/bmad-agent-bme-research-convergence-specialist # Mila 🔬
|
|
164
|
+
/bmad-agent-bme-hypothesis-engineer # Liam 💡
|
|
165
|
+
/bmad-agent-bme-lean-experiments-specialist # Wade 🧪
|
|
166
|
+
/bmad-agent-bme-production-intelligence-specialist # Noah 📡
|
|
167
|
+
/bmad-agent-bme-learning-decision-expert # Max 🧭
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Claude Code (terminal) / Other AI assistants**
|
|
78
171
|
|
|
79
172
|
```bash
|
|
80
|
-
# Read an agent file to activate it
|
|
81
173
|
cat _bmad/bme/_vortex/agents/contextualization-expert.md # Emma 🎯
|
|
82
174
|
cat _bmad/bme/_vortex/agents/discovery-empathy-expert.md # Isla 🔍
|
|
83
175
|
cat _bmad/bme/_vortex/agents/research-convergence-specialist.md # Mila 🔬
|
|
@@ -87,14 +179,13 @@ cat _bmad/bme/_vortex/agents/production-intelligence-specialist.md # Noah 📡
|
|
|
87
179
|
cat _bmad/bme/_vortex/agents/learning-decision-expert.md # Max 🧭
|
|
88
180
|
```
|
|
89
181
|
|
|
90
|
-
**
|
|
182
|
+
**Claude.ai**
|
|
91
183
|
|
|
92
|
-
|
|
93
|
-
- **Claude.ai:** Copy the contents of any agent file and paste into the chat
|
|
184
|
+
Open any agent file from `_bmad/bme/_vortex/agents/` and paste its contents into your conversation.
|
|
94
185
|
|
|
95
|
-
Pick a workflow from the menu and follow the guided steps.
|
|
186
|
+
**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
187
|
|
|
97
|
-
|
|
188
|
+
#### Your First 15 Minutes
|
|
98
189
|
|
|
99
190
|
1. **Personalize** — If you haven't already, edit `_bmad/bme/_vortex/config.yaml` and replace `{user}` with your name
|
|
100
191
|
2. **Activate Emma** — `cat _bmad/bme/_vortex/agents/contextualization-expert.md`
|
|
@@ -105,7 +196,7 @@ Pick a workflow from the menu and follow the guided steps.
|
|
|
105
196
|
|
|
106
197
|
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
198
|
|
|
108
|
-
|
|
199
|
+
#### What Gets Installed
|
|
109
200
|
|
|
110
201
|
```
|
|
111
202
|
your-project/
|
|
@@ -121,69 +212,25 @@ your-project/
|
|
|
121
212
|
|
|
122
213
|
---
|
|
123
214
|
|
|
124
|
-
|
|
215
|
+
### Updating
|
|
125
216
|
|
|
126
217
|
```bash
|
|
127
|
-
npx convoke-version
|
|
128
|
-
npx convoke-update --dry-run
|
|
129
|
-
npx convoke-update
|
|
130
|
-
npx convoke-doctor
|
|
218
|
+
npx -p convoke-agents convoke-version # Check current version
|
|
219
|
+
npx -p convoke-agents convoke-update --dry-run # Preview changes
|
|
220
|
+
npx -p convoke-agents convoke-update # Apply update (auto-backup)
|
|
221
|
+
npx -p convoke-agents convoke-doctor # Diagnose issues
|
|
131
222
|
```
|
|
132
223
|
|
|
133
224
|
Your data in `_bmad-output/` is never touched. Automatic backups are created before every update.
|
|
134
225
|
|
|
135
226
|
> **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
227
|
> ```bash
|
|
137
|
-
> npx -p convoke-agents@latest convoke-update
|
|
228
|
+
> npx -p convoke-agents@latest convoke-update --yes
|
|
138
229
|
> ```
|
|
139
230
|
|
|
140
231
|
See [UPDATE-GUIDE.md](UPDATE-GUIDE.md) for migration paths and troubleshooting.
|
|
141
232
|
|
|
142
|
-
|
|
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
|
|
233
|
+
### Using the Agents
|
|
187
234
|
|
|
188
235
|
Each agent can be used independently or as part of the full Vortex flow:
|
|
189
236
|
|
|
@@ -195,7 +242,7 @@ Each agent can be used independently or as part of the full Vortex flow:
|
|
|
195
242
|
6. **Noah (Sensitize)** — Start here when experiments have graduated to production
|
|
196
243
|
7. **Max (Systematize)** — Start here when you have results and need to decide next steps
|
|
197
244
|
|
|
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
|
|
245
|
+
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
246
|
|
|
200
247
|
For detailed workflow descriptions and usage examples, see the [Agent Guide](docs/agents.md) and the individual user guides:
|
|
201
248
|
|
|
@@ -211,17 +258,16 @@ For detailed workflow descriptions and usage examples, see the [Agent Guide](doc
|
|
|
211
258
|
|
|
212
259
|
## How It Fits with BMAD Core
|
|
213
260
|
|
|
214
|
-
Convoke handles **
|
|
261
|
+
Convoke handles **discovery and validation**. BMAD Core handles **implementation**.
|
|
215
262
|
|
|
216
263
|
```
|
|
217
|
-
Convoke
|
|
218
|
-
|
|
219
|
-
│
|
|
220
|
-
│
|
|
221
|
-
│
|
|
222
|
-
│
|
|
223
|
-
|
|
224
|
-
└──────────────────────────────────────┘
|
|
264
|
+
Convoke Teams BMAD Core
|
|
265
|
+
┌──────────────────────────────┐ ┌──────────────────────┐
|
|
266
|
+
│ Vortex (Product Discovery) │ ──────> │ PM → Architect → Dev │
|
|
267
|
+
│ "Should we build this?" │ │ "Let's build it" │
|
|
268
|
+
│ │ <────── │ │
|
|
269
|
+
│ [Future teams] │ signals │ │
|
|
270
|
+
└──────────────────────────────┘ └──────────────────────┘
|
|
225
271
|
```
|
|
226
272
|
|
|
227
273
|
Convoke works standalone or as an extension — no BMAD Method installation required.
|
|
@@ -247,7 +293,7 @@ Convoke works standalone or as an extension — no BMAD Method installation requ
|
|
|
247
293
|
- **v1.6.x** — Wave 3: Complete 7-stream Vortex (added Mila, Liam, Noah — 7 agents, 22 workflows, handoff contracts, Compass routing)
|
|
248
294
|
- **v1.7.0** — Wave 4: Quality & onboarding (P0 test suite, docs audit tool, all 22 workflows production-ready, README overhaul, package size fix)
|
|
249
295
|
- **v2.0.0** — Product renamed to Convoke. CLI commands renamed to `convoke-*`. Package: `npm install convoke-agents`
|
|
250
|
-
- **Next** —
|
|
296
|
+
- **Next** — Additional domain-specialized teams, multi-agent collaboration, cross-team workflows
|
|
251
297
|
|
|
252
298
|
---
|
|
253
299
|
|
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
|
-
### `
|
|
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
|
|
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
|
-
### `
|
|
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
|
-
### `
|
|
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 `
|
|
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, `
|
|
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
|
|
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
|
@@ -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);
|
package/scripts/docs-audit.js
CHANGED
|
@@ -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',
|
|
@@ -132,6 +132,7 @@ function verifyInstallation(projectRoot) {
|
|
|
132
132
|
|
|
133
133
|
const checks = [
|
|
134
134
|
...AGENTS.map(a => ({ path: `_bmad/bme/_vortex/agents/${a.id}.md`, name: `${a.name} agent file` })),
|
|
135
|
+
...AGENTS.map(a => ({ path: `.claude/commands/bmad-agent-bme-${a.id}.md`, name: `${a.name} slash command` })),
|
|
135
136
|
{ path: '_bmad/bme/_vortex/config.yaml', name: 'Configuration file' },
|
|
136
137
|
];
|
|
137
138
|
|
|
@@ -174,11 +175,14 @@ function printSuccess() {
|
|
|
174
175
|
console.log(` ${YELLOW}1.${RESET} Personalize your config:`);
|
|
175
176
|
console.log(` Edit ${CYAN}_bmad/bme/_vortex/config.yaml${RESET} and replace ${YELLOW}{user}${RESET} with your name`);
|
|
176
177
|
console.log('');
|
|
177
|
-
console.log(` ${YELLOW}2.${RESET} Activate an agent
|
|
178
|
+
console.log(` ${YELLOW}2.${RESET} Activate an agent with a slash command (Claude Code):`);
|
|
178
179
|
for (const agent of AGENTS) {
|
|
179
|
-
console.log(` ${CYAN}
|
|
180
|
+
console.log(` ${CYAN}/bmad-agent-bme-${agent.id}${RESET} (${agent.name})`);
|
|
180
181
|
}
|
|
181
182
|
console.log('');
|
|
183
|
+
console.log(` ${YELLOW}3.${RESET} Or read the agent file directly:`);
|
|
184
|
+
console.log(` ${CYAN}cat _bmad/bme/_vortex/agents/{agent-id}.md${RESET}`);
|
|
185
|
+
console.log('');
|
|
182
186
|
}
|
|
183
187
|
|
|
184
188
|
async function main() {
|
package/scripts/postinstall.js
CHANGED
|
@@ -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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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(
|
|
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 <
|
|
79
|
-
const migration =
|
|
80
|
-
console.log(chalk.cyan(`\nMigration ${i + 1}/${
|
|
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.
|
|
112
|
-
console.log(chalk.cyan('[4/5]
|
|
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
|
-
|
|
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
|
}
|
|
@@ -165,6 +171,44 @@ async function refreshInstallation(projectRoot, options = {}) {
|
|
|
165
171
|
if (verbose) console.log(' Skipped guide copy (dev environment)');
|
|
166
172
|
}
|
|
167
173
|
|
|
174
|
+
// 6. Generate .claude/commands/ slash command files for each agent
|
|
175
|
+
const commandsTarget = path.join(projectRoot, '.claude', 'commands');
|
|
176
|
+
await fs.ensureDir(commandsTarget);
|
|
177
|
+
|
|
178
|
+
// Remove deprecated command files (agents no longer in registry)
|
|
179
|
+
const currentCommandFiles = new Set(AGENTS.map(a => `bmad-agent-bme-${a.id}.md`));
|
|
180
|
+
const existingCommands = (await fs.readdir(commandsTarget)).filter(f => f.startsWith('bmad-agent-bme-'));
|
|
181
|
+
for (const file of existingCommands) {
|
|
182
|
+
if (!currentCommandFiles.has(file)) {
|
|
183
|
+
await fs.remove(path.join(commandsTarget, file));
|
|
184
|
+
changes.push(`Removed deprecated command: ${file}`);
|
|
185
|
+
if (verbose) console.log(` Removed deprecated command: ${file}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
for (const agent of AGENTS) {
|
|
190
|
+
const filename = `bmad-agent-bme-${agent.id}.md`;
|
|
191
|
+
const content = `---
|
|
192
|
+
name: '${agent.id}'
|
|
193
|
+
description: '${agent.id} agent'
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
197
|
+
|
|
198
|
+
<agent-activation CRITICAL="TRUE">
|
|
199
|
+
1. LOAD the FULL agent file from {project-root}/_bmad/bme/_vortex/agents/${agent.id}.md
|
|
200
|
+
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
201
|
+
3. FOLLOW every step in the <activation> section precisely
|
|
202
|
+
4. DISPLAY the welcome/greeting as instructed
|
|
203
|
+
5. PRESENT the numbered menu
|
|
204
|
+
6. WAIT for user input before proceeding
|
|
205
|
+
</agent-activation>
|
|
206
|
+
`;
|
|
207
|
+
await fs.writeFile(path.join(commandsTarget, filename), content, 'utf8');
|
|
208
|
+
changes.push(`Refreshed command: ${filename}`);
|
|
209
|
+
if (verbose) console.log(` Refreshed command: ${filename}`);
|
|
210
|
+
}
|
|
211
|
+
|
|
168
212
|
return changes;
|
|
169
213
|
}
|
|
170
214
|
|