@curdx/flow 1.1.11 → 2.0.0-beta.2
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/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +2 -2
- package/CHANGELOG.md +79 -0
- package/README.md +74 -102
- package/agents/flow-adversary.md +1 -1
- package/agents/flow-architect.md +1 -1
- package/agents/flow-product-designer.md +1 -1
- package/agents/flow-qa-engineer.md +3 -3
- package/agents/flow-researcher.md +1 -1
- package/agents/flow-security-auditor.md +1 -1
- package/agents/flow-triage-analyst.md +3 -3
- package/agents/flow-ui-researcher.md +5 -5
- package/agents/flow-ux-designer.md +2 -2
- package/cli/install.js +16 -5
- package/commands/debug.md +10 -10
- package/commands/help.md +109 -87
- package/commands/implement.md +4 -4
- package/commands/init.md +5 -5
- package/commands/review.md +114 -130
- package/commands/spec.md +131 -89
- package/commands/start.md +100 -153
- package/commands/verify.md +110 -92
- package/gates/adversarial-review-gate.md +1 -1
- package/gates/coverage-audit-gate.md +1 -1
- package/gates/devex-gate.md +1 -1
- package/gates/edge-case-gate.md +1 -1
- package/gates/security-gate.md +3 -3
- package/hooks/scripts/session-start.sh +1 -1
- package/knowledge/epic-decomposition.md +2 -2
- package/knowledge/execution-strategies.md +4 -4
- package/knowledge/planning-reviews.md +6 -6
- package/knowledge/spec-driven-development.md +3 -3
- package/knowledge/two-stage-review.md +2 -2
- package/knowledge/wave-execution.md +5 -5
- package/package.json +1 -1
- package/agents/persona-amelia.md +0 -128
- package/agents/persona-david.md +0 -141
- package/agents/persona-emma.md +0 -179
- package/agents/persona-john.md +0 -105
- package/agents/persona-mary.md +0 -95
- package/agents/persona-oliver.md +0 -136
- package/agents/persona-rachel.md +0 -126
- package/agents/persona-serena.md +0 -175
- package/agents/persona-winston.md +0 -117
- package/commands/audit.md +0 -170
- package/commands/autoplan.md +0 -184
- package/commands/design.md +0 -155
- package/commands/discuss.md +0 -162
- package/commands/doctor.md +0 -124
- package/commands/index.md +0 -261
- package/commands/install-deps.md +0 -128
- package/commands/party.md +0 -241
- package/commands/plan-ceo.md +0 -117
- package/commands/plan-design.md +0 -107
- package/commands/plan-dx.md +0 -104
- package/commands/plan-eng.md +0 -108
- package/commands/qa.md +0 -118
- package/commands/requirements.md +0 -146
- package/commands/research.md +0 -141
- package/commands/security.md +0 -109
- package/commands/sketch.md +0 -118
- package/commands/spike.md +0 -181
- package/commands/status.md +0 -139
- package/commands/switch.md +0 -95
- package/commands/tasks.md +0 -189
- package/commands/triage.md +0 -160
package/commands/index.md
DELETED
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: index
|
|
3
|
-
description: Codebase index — scan brownfield projects and generate a module/component/API index. Provides the foundation for subsequent /curdx-flow:research.
|
|
4
|
-
argument-hint: "[--force]"
|
|
5
|
-
allowed-tools: [Read, Write, Bash, Grep, Glob]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Flow Index — Codebase Scan and Index
|
|
9
|
-
|
|
10
|
-
Generate an index for **brownfield projects** (existing code) so that flow-researcher and flow-architect can quickly acquire project-structure information.
|
|
11
|
-
|
|
12
|
-
## Applicable Scenarios
|
|
13
|
-
|
|
14
|
-
- Taking over an existing project — run `/curdx-flow:index` first to build understanding
|
|
15
|
-
- Large monorepo requiring indexes of subpackages
|
|
16
|
-
- Want to add a new feature to the current project — index before researching
|
|
17
|
-
|
|
18
|
-
## Not Applicable
|
|
19
|
-
|
|
20
|
-
- Greenfield projects (empty codebase)
|
|
21
|
-
- Micro projects (< 20 files)
|
|
22
|
-
|
|
23
|
-
## Step 1: Preflight
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
[ ! -d ".flow" ] && { echo "❌ Not a CurDX-Flow project. Run /curdx-flow:init first"; exit 1; }
|
|
27
|
-
|
|
28
|
-
INDEX_FILE=".flow/codebase-index.md"
|
|
29
|
-
|
|
30
|
-
# If one exists and --force is not set, ask
|
|
31
|
-
if [ -f "$INDEX_FILE" ] && [ "$ARGUMENTS" != "--force" ]; then
|
|
32
|
-
echo "ℹ Index already exists: $INDEX_FILE"
|
|
33
|
-
# AskUserQuestion: overwrite / incremental / cancel
|
|
34
|
-
fi
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Step 2: Detect Project Type
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
# Identify project language + build tool
|
|
41
|
-
if [ -f "package.json" ]; then
|
|
42
|
-
PROJECT_TYPE="node"
|
|
43
|
-
FRAMEWORK=$(grep -E "(react|vue|next|nuxt|svelte)" package.json | head -3)
|
|
44
|
-
elif [ -f "requirements.txt" ] || [ -f "pyproject.toml" ]; then
|
|
45
|
-
PROJECT_TYPE="python"
|
|
46
|
-
elif [ -f "Cargo.toml" ]; then
|
|
47
|
-
PROJECT_TYPE="rust"
|
|
48
|
-
elif [ -f "go.mod" ]; then
|
|
49
|
-
PROJECT_TYPE="go"
|
|
50
|
-
fi
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Step 3: Scan Directory Structure
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
# Top-level directories
|
|
57
|
-
DIRS=$(ls -d */ 2>/dev/null | grep -vE "(node_modules|dist|build|\.git|\.next)")
|
|
58
|
-
|
|
59
|
-
# File statistics
|
|
60
|
-
TOTAL_FILES=$(find . -type f -not -path "*/node_modules/*" -not -path "*/.git/*" | wc -l)
|
|
61
|
-
SRC_FILES=$(find src/ -type f 2>/dev/null | wc -l)
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## Step 4: Identify Modules
|
|
65
|
-
|
|
66
|
-
Use Grep + Glob to find module boundaries:
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
# TypeScript / JavaScript: find export default + public API
|
|
70
|
-
# Python: find __init__.py
|
|
71
|
-
# Rust: find mod.rs / lib.rs
|
|
72
|
-
# Go: find package declaration
|
|
73
|
-
|
|
74
|
-
# Typical pattern (Node project):
|
|
75
|
-
Glob: src/**/index.{ts,tsx,js}
|
|
76
|
-
Grep: "^export (default|const|function|class)" in index files
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## Step 5: Identify Components / Services / APIs
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
# UI components
|
|
83
|
-
Glob: src/**/*.{tsx,jsx,vue,svelte}
|
|
84
|
-
|
|
85
|
-
# API endpoints
|
|
86
|
-
Grep: "router\.\(get\|post\|put\|delete\)" or "app\.(get|post)" or "@app.route"
|
|
87
|
-
|
|
88
|
-
# DB models
|
|
89
|
-
Grep: "@Entity\|Schema\|Model\|prisma\."
|
|
90
|
-
|
|
91
|
-
# Services
|
|
92
|
-
Glob: src/**/*Service.{ts,js}
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
## Step 6: Build the Index Markdown
|
|
96
|
-
|
|
97
|
-
```markdown
|
|
98
|
-
# Codebase Index: <project name>
|
|
99
|
-
|
|
100
|
-
Generated: YYYY-MM-DD
|
|
101
|
-
Project type: Node (TypeScript + React)
|
|
102
|
-
Total files: 234 (189 under src/)
|
|
103
|
-
|
|
104
|
-
## Directory Structure
|
|
105
|
-
|
|
106
|
-
```
|
|
107
|
-
src/
|
|
108
|
-
├── auth/ ← authentication module
|
|
109
|
-
├── user/ ← user management
|
|
110
|
-
├── orders/ ← orders
|
|
111
|
-
├── ui/ ← shared UI components
|
|
112
|
-
├── api/ ← API routes
|
|
113
|
-
├── db/ ← DB layer
|
|
114
|
-
└── utils/ ← utility functions
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
## Module List
|
|
118
|
-
|
|
119
|
-
### Module: auth
|
|
120
|
-
- Path: src/auth/
|
|
121
|
-
- Entry: src/auth/index.ts
|
|
122
|
-
- Exports:
|
|
123
|
-
- `login(email, password)` - log in
|
|
124
|
-
- `logout(token)` - log out
|
|
125
|
-
- `refreshToken(token)` - refresh
|
|
126
|
-
- Dependencies: bcrypt, jsonwebtoken
|
|
127
|
-
- Tests: src/auth/*.test.ts (15 tests)
|
|
128
|
-
|
|
129
|
-
### Module: user
|
|
130
|
-
- Path: src/user/
|
|
131
|
-
- Entry: src/user/index.ts
|
|
132
|
-
- Exports:
|
|
133
|
-
- `getUser(id)` - fetch user
|
|
134
|
-
- `updateProfile(id, data)` - update profile
|
|
135
|
-
- Dependencies: prisma
|
|
136
|
-
- Tests: src/user/*.test.ts (8 tests)
|
|
137
|
-
|
|
138
|
-
### Module: orders
|
|
139
|
-
...
|
|
140
|
-
|
|
141
|
-
## UI Component List
|
|
142
|
-
|
|
143
|
-
### Shared components (src/ui/)
|
|
144
|
-
|
|
145
|
-
- `<Button>` - src/ui/Button.tsx
|
|
146
|
-
- `<Input>` - src/ui/Input.tsx
|
|
147
|
-
- `<Card>` - src/ui/Card.tsx
|
|
148
|
-
- ...
|
|
149
|
-
|
|
150
|
-
### Page components (src/pages/)
|
|
151
|
-
|
|
152
|
-
- `LoginPage` - src/pages/Login.tsx
|
|
153
|
-
- `DashboardPage` - src/pages/Dashboard.tsx
|
|
154
|
-
- ...
|
|
155
|
-
|
|
156
|
-
## API Endpoints
|
|
157
|
-
|
|
158
|
-
### /auth
|
|
159
|
-
- POST /auth/login → src/api/auth.ts:login
|
|
160
|
-
- POST /auth/logout → src/api/auth.ts:logout
|
|
161
|
-
- POST /auth/refresh → src/api/auth.ts:refresh
|
|
162
|
-
|
|
163
|
-
### /users
|
|
164
|
-
- GET /users/me → src/api/users.ts:getCurrent
|
|
165
|
-
- PUT /users/me → src/api/users.ts:update
|
|
166
|
-
- ...
|
|
167
|
-
|
|
168
|
-
## DB Models
|
|
169
|
-
|
|
170
|
-
- `User` - src/db/models/User.ts
|
|
171
|
-
- `Order` - src/db/models/Order.ts
|
|
172
|
-
- ...
|
|
173
|
-
|
|
174
|
-
## Tech Stack
|
|
175
|
-
|
|
176
|
-
- **Runtime**: Node 20 + TypeScript 5
|
|
177
|
-
- **Framework**: Next.js 14 (App Router)
|
|
178
|
-
- **UI**: React 18 + Tailwind + shadcn/ui
|
|
179
|
-
- **DB**: PostgreSQL + Prisma
|
|
180
|
-
- **Auth**: JWT + bcrypt
|
|
181
|
-
- **Testing**: Vitest + Playwright
|
|
182
|
-
|
|
183
|
-
## Commands
|
|
184
|
-
|
|
185
|
-
From package.json:
|
|
186
|
-
- `npm run dev` - dev server (localhost:3000)
|
|
187
|
-
- `npm test` - tests
|
|
188
|
-
- `npm run build` - production build
|
|
189
|
-
- `npm run lint` - ESLint
|
|
190
|
-
|
|
191
|
-
## Conventions
|
|
192
|
-
|
|
193
|
-
- File naming: PascalCase for components, camelCase for utilities
|
|
194
|
-
- Tests: `*.test.ts` adjacent to source file
|
|
195
|
-
- Types: standalone `types.ts` or inline interface
|
|
196
|
-
- Exports: each module's `index.ts` as the public API
|
|
197
|
-
|
|
198
|
-
## Hot Files (most modified recently)
|
|
199
|
-
|
|
200
|
-
- src/auth/login.ts (12 commits in the past 30 days)
|
|
201
|
-
- src/ui/Button.tsx (8 commits)
|
|
202
|
-
- ...
|
|
203
|
-
|
|
204
|
-
## Tech Debt / TODO
|
|
205
|
-
|
|
206
|
-
Scan for `// TODO:` / `// FIXME:`:
|
|
207
|
-
- src/auth/refresh.ts:28 - "TODO: add rate limiting"
|
|
208
|
-
- src/api/orders.ts:45 - "FIXME: handle concurrent updates"
|
|
209
|
-
- ...
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## Step 7: Save + Update .state
|
|
213
|
-
|
|
214
|
-
```bash
|
|
215
|
-
# Write
|
|
216
|
-
echo "$INDEX_CONTENT" > "$INDEX_FILE"
|
|
217
|
-
|
|
218
|
-
# If .flow/config.json exists, record the index time
|
|
219
|
-
python3 -c "
|
|
220
|
-
import json
|
|
221
|
-
c = json.load(open('.flow/config.json'))
|
|
222
|
-
c.setdefault('codebase_index', {})['last_updated'] = '$(date +%Y-%m-%d)'
|
|
223
|
-
json.dump(c, open('.flow/config.json','w'), indent=2, ensure_ascii=False)
|
|
224
|
-
"
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
## Step 8: Output
|
|
228
|
-
|
|
229
|
-
```
|
|
230
|
-
✓ Codebase index complete
|
|
231
|
-
|
|
232
|
-
File: .flow/codebase-index.md (~N lines)
|
|
233
|
-
|
|
234
|
-
Statistics:
|
|
235
|
-
Modules: M
|
|
236
|
-
UI components: K
|
|
237
|
-
API endpoints: L
|
|
238
|
-
DB models: J
|
|
239
|
-
|
|
240
|
-
You can now:
|
|
241
|
-
- Agents will read this index as context during /curdx-flow:research
|
|
242
|
-
- When running /curdx-flow:start for a new feature, reference this index first to find reusable modules
|
|
243
|
-
- View it manually to understand the project structure
|
|
244
|
-
|
|
245
|
-
Suggestion:
|
|
246
|
-
- Rerun after major code changes: /curdx-flow:index --force
|
|
247
|
-
- No need to run on every change (30-day stability is OK)
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
## Notes
|
|
251
|
-
|
|
252
|
-
- The index is **not full documentation**, it is a **quick guide**. Details still live in the source code.
|
|
253
|
-
- Large project scans may take 1-2 minutes
|
|
254
|
-
- Does not scan node_modules / dist / build / .git
|
|
255
|
-
- Exclusion list configurable (future enhancement)
|
|
256
|
-
|
|
257
|
-
## Error Recovery
|
|
258
|
-
|
|
259
|
-
- Project too large (10K+ files) → index by module
|
|
260
|
-
- Project type cannot be identified → provide a template for the user to fill in manually
|
|
261
|
-
- Some paths have permission issues → skip and continue with the rest
|
package/commands/install-deps.md
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: install-deps
|
|
3
|
-
description: Interactively install CurDX-Flow's recommended plugin dependencies (pua / claude-mem / frontend-design)
|
|
4
|
-
argument-hint: "[--all | --skip-prompt]"
|
|
5
|
-
allowed-tools: [Bash, AskUserQuestion]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# One-Shot Install of Recommended Plugins
|
|
9
|
-
|
|
10
|
-
CurDX-Flow auto-installs 3 MCPs via `plugin.json.mcpServers`:
|
|
11
|
-
- ✓ context7 — docs lookup
|
|
12
|
-
- ✓ sequential-thinking — structured thinking
|
|
13
|
-
- ✓ chrome-devtools — browser QA
|
|
14
|
-
|
|
15
|
-
This command interactively installs 3 recommended **plugins** (they are not MCPs and must be installed separately):
|
|
16
|
-
|
|
17
|
-
| Plugin | Purpose | Official/Community |
|
|
18
|
-
|--------|---------|--------------------|
|
|
19
|
-
| **pua** (tanweai/pua) | Prevent AI from giving up; enforces the three red lines | Community |
|
|
20
|
-
| **claude-mem** (thedotmack/claude-mem) | Automatic cross-session memory | Community |
|
|
21
|
-
| **frontend-design** | UI design skill | Anthropic official |
|
|
22
|
-
|
|
23
|
-
## Execution Steps
|
|
24
|
-
|
|
25
|
-
### Step 1: Network Check
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
if ! ping -c 1 -W 2 github.com >/dev/null 2>&1; then
|
|
29
|
-
echo "⚠️ Network unreachable, cannot install plugins from the marketplace."
|
|
30
|
-
echo "CurDX-Flow will run in degraded mode (MCPs remain available)."
|
|
31
|
-
exit 0
|
|
32
|
-
fi
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### Step 2: Detect Current Installation Status
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
INSTALLED=$(claude plugin list 2>/dev/null || echo "")
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Parse out which are installed and which are not.
|
|
42
|
-
|
|
43
|
-
### Step 3: Ask the User
|
|
44
|
-
|
|
45
|
-
If the `--all` argument is present, skip asking and install everything. Otherwise use AskUserQuestion:
|
|
46
|
-
|
|
47
|
-
**Question**: Which recommended plugins to install?
|
|
48
|
-
|
|
49
|
-
**Options** (list only those not installed):
|
|
50
|
-
- **all** — Install all (recommended)
|
|
51
|
-
- **recommended** — Install pua + claude-mem + frontend-design
|
|
52
|
-
- **custom** — Pick manually (follow up with a multi-select question)
|
|
53
|
-
- **skip** — Skip (the core MCPs are already enough)
|
|
54
|
-
|
|
55
|
-
If the user picks `custom`, use a second AskUserQuestion to let them multi-select which to install.
|
|
56
|
-
|
|
57
|
-
### Step 4: Run Installation
|
|
58
|
-
|
|
59
|
-
Based on the selection (install only those not yet installed):
|
|
60
|
-
|
|
61
|
-
#### pua
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
claude plugin marketplace add tanweai/pua
|
|
65
|
-
claude plugin install pua@pua-skills --scope user
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
#### claude-mem
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
claude plugin marketplace add thedotmack/claude-mem
|
|
72
|
-
claude plugin install claude-mem --scope user
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
#### frontend-design
|
|
76
|
-
|
|
77
|
-
Anthropic's official plugin is typically in the default marketplace:
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
# If the default marketplace is enabled
|
|
81
|
-
claude plugin install frontend-design --scope user
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
On failure, tell the user:
|
|
85
|
-
> frontend-design must be installed from the official marketplace. Inside Claude Code run:
|
|
86
|
-
> `/plugin`, then search for "frontend-design" in the Discover panel.
|
|
87
|
-
|
|
88
|
-
### Step 5: Update Marker
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
DATA_DIR="${CLAUDE_PLUGIN_DATA:-$HOME/.claude/plugins/data/curdx-flow}"
|
|
92
|
-
mkdir -p "$DATA_DIR"
|
|
93
|
-
echo "$(date +%Y-%m-%d)" > "$DATA_DIR/.deps-checked"
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Prevents the SessionStart hook from continuing to remind.
|
|
97
|
-
|
|
98
|
-
### Step 6: Verify and Report
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
claude plugin list 2>/dev/null | grep -E "pua|claude-mem|frontend-design"
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
Print the installation summary:
|
|
105
|
-
|
|
106
|
-
```
|
|
107
|
-
Install report:
|
|
108
|
-
✓ pua (v3.2.1)
|
|
109
|
-
✓ claude-mem (v12.3.0)
|
|
110
|
-
⚠ frontend-design (requires manual install via /plugin)
|
|
111
|
-
|
|
112
|
-
Next steps:
|
|
113
|
-
/curdx-flow:doctor — full health check
|
|
114
|
-
/curdx-flow:init — initialize project (if not yet initialized)
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
## Error Handling
|
|
118
|
-
|
|
119
|
-
- `claude plugin marketplace add` failure → report the specific error (usually network/permissions)
|
|
120
|
-
- `claude plugin install` failure → ask the user to run the command manually
|
|
121
|
-
- User interruption → keep what is already installed, resume on the next run
|
|
122
|
-
- Installed but needs updating → suggest `claude plugin update <name>`
|
|
123
|
-
|
|
124
|
-
## Notes
|
|
125
|
-
|
|
126
|
-
- This command only **installs**, it does not **configure**. See each plugin's own docs for configuration.
|
|
127
|
-
- Installation is **global** (scope=user), shared across all projects.
|
|
128
|
-
- Uninstall: `claude plugin uninstall <name>`
|
package/commands/party.md
DELETED
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: party
|
|
3
|
-
description: Party Mode — multiple persona agents independently think about one question at the same time. BMAD-style true multi-agent collaboration.
|
|
4
|
-
argument-hint: "<persona-1> <persona-2> ... \"<question>\""
|
|
5
|
-
allowed-tools: [Read, Task, AskUserQuestion]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Flow Party — Multi-Agent Independent Thinking
|
|
9
|
-
|
|
10
|
-
Have multiple **persona agents** (Mary/John/Winston, etc.) independently think about the same question at the same time. This is BMAD's true innovation: **not one LLM playing multiple roles, but multiple Task subprocesses each thinking on their own, avoiding opinion convergence**.
|
|
11
|
-
|
|
12
|
-
## When to use
|
|
13
|
-
|
|
14
|
-
- Hard decisions needing multiple perspectives (e.g., architecture selection)
|
|
15
|
-
- Spec review (separately reviewed from product / arch / qa)
|
|
16
|
-
- Brainstorming / divergent thinking
|
|
17
|
-
- Finding blind spots (one perspective may see what others cannot)
|
|
18
|
-
|
|
19
|
-
## When not to use
|
|
20
|
-
|
|
21
|
-
- Simple questions (overhead is high)
|
|
22
|
-
- Questions with a clear answer (agents will only echo)
|
|
23
|
-
- Execution tasks (use a dedicated executor)
|
|
24
|
-
|
|
25
|
-
## Step 1: Parse arguments
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
ARGS="$ARGUMENTS"
|
|
29
|
-
|
|
30
|
-
# Recognize personas (known list)
|
|
31
|
-
PERSONAS=()
|
|
32
|
-
QUESTION=""
|
|
33
|
-
|
|
34
|
-
# Simple parsing: persona names + a question wrapped in quotes at the end
|
|
35
|
-
# Example: /curdx-flow:party mary john winston "JWT or session?"
|
|
36
|
-
|
|
37
|
-
# Parsing logic: iterate words, add known persona names to PERSONAS, rest is the question
|
|
38
|
-
KNOWN_PERSONAS="mary john winston amelia rachel oliver serena david emma"
|
|
39
|
-
|
|
40
|
-
REMAINING=""
|
|
41
|
-
for word in $ARGS; do
|
|
42
|
-
if echo "$KNOWN_PERSONAS" | grep -qw "$word"; then
|
|
43
|
-
PERSONAS+=("$word")
|
|
44
|
-
else
|
|
45
|
-
REMAINING="$REMAINING $word"
|
|
46
|
-
fi
|
|
47
|
-
done
|
|
48
|
-
|
|
49
|
-
# REMAINING is the question (possibly with quotes)
|
|
50
|
-
QUESTION=$(echo "$REMAINING" | sed 's/^[[:space:]]*//;s/^["\x27]//;s/["\x27]$//')
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Step 2: Validate arguments
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
if [ ${#PERSONAS[@]} -lt 2 ]; then
|
|
57
|
-
echo "✗ Party Mode requires ≥ 2 personas"
|
|
58
|
-
echo "Available: mary john winston amelia rachel oliver serena david emma"
|
|
59
|
-
exit 1
|
|
60
|
-
fi
|
|
61
|
-
|
|
62
|
-
if [ ${#PERSONAS[@]} -gt 5 ]; then
|
|
63
|
-
echo "⚠ More than 5 personas will make output hard to read. Recommend ≤ 5"
|
|
64
|
-
fi
|
|
65
|
-
|
|
66
|
-
if [ -z "$QUESTION" ]; then
|
|
67
|
-
echo "✗ Please provide a question"
|
|
68
|
-
exit 1
|
|
69
|
-
fi
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## Step 3: Build shared context
|
|
73
|
-
|
|
74
|
-
All personas read the same background:
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
CONTEXT_FILES=()
|
|
78
|
-
[ -f "CLAUDE.md" ] && CONTEXT_FILES+=("CLAUDE.md")
|
|
79
|
-
[ -f ".flow/PROJECT.md" ] && CONTEXT_FILES+=(".flow/PROJECT.md")
|
|
80
|
-
[ -f ".flow/CONTEXT.md" ] && CONTEXT_FILES+=(".flow/CONTEXT.md")
|
|
81
|
-
|
|
82
|
-
# If there is an active spec, append
|
|
83
|
-
ACTIVE=$(cat .flow/.active-spec 2>/dev/null)
|
|
84
|
-
if [ -n "$ACTIVE" ]; then
|
|
85
|
-
for f in research.md requirements.md design.md; do
|
|
86
|
-
[ -f ".flow/specs/$ACTIVE/$f" ] && CONTEXT_FILES+=(".flow/specs/$ACTIVE/$f")
|
|
87
|
-
done
|
|
88
|
-
fi
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## Step 4: Dispatch each persona in parallel
|
|
92
|
-
|
|
93
|
-
**Key**: call multiple Task tools **in a single message** at the same time (parallel execution).
|
|
94
|
-
This way each persona thinks in an independent context without influencing the others.
|
|
95
|
-
|
|
96
|
-
```
|
|
97
|
-
# Parallel invocation (in a single message):
|
|
98
|
-
Task(mary):
|
|
99
|
-
subagent_type: general-purpose
|
|
100
|
-
description: "Mary thinking about $QUESTION"
|
|
101
|
-
prompt: |
|
|
102
|
-
You are Mary (Senior Analyst). Full definition:
|
|
103
|
-
${CLAUDE_PLUGIN_ROOT}/agents/persona-mary.md
|
|
104
|
-
|
|
105
|
-
Shared context:
|
|
106
|
-
$(cat ${CONTEXT_FILES[@]} 2>/dev/null)
|
|
107
|
-
|
|
108
|
-
Question: $QUESTION
|
|
109
|
-
|
|
110
|
-
Answer from Mary's perspective:
|
|
111
|
-
- First list explicit assumptions
|
|
112
|
-
- Give 2-3 interpretations from a research / analysis perspective
|
|
113
|
-
- Clearly state open questions
|
|
114
|
-
- Provide an initial recommendation (if any)
|
|
115
|
-
|
|
116
|
-
**Forbidden**:
|
|
117
|
-
- Speaking on behalf of other personas
|
|
118
|
-
- Claiming "synthesizing John's and Winston's opinions" (you don't know what they said)
|
|
119
|
-
- Echoing / converging
|
|
120
|
-
|
|
121
|
-
Output a concise view of <200 words.
|
|
122
|
-
|
|
123
|
-
Task(john):
|
|
124
|
-
... [john's prompt]
|
|
125
|
-
|
|
126
|
-
Task(winston):
|
|
127
|
-
... [winston's prompt]
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
**Parallel execution**: Claude Code's Task tool supports multiple invocations in a single message running in parallel.
|
|
131
|
-
|
|
132
|
-
## Step 5: Collect results
|
|
133
|
-
|
|
134
|
-
Each Task returns an independent answer. The main agent (you) aggregates:
|
|
135
|
-
|
|
136
|
-
```markdown
|
|
137
|
-
## Party Mode Results: <QUESTION>
|
|
138
|
-
|
|
139
|
-
### Mary (Senior Analyst)
|
|
140
|
-
<Mary's answer>
|
|
141
|
-
|
|
142
|
-
### John (Product Manager)
|
|
143
|
-
<John's answer>
|
|
144
|
-
|
|
145
|
-
### Winston (Architect)
|
|
146
|
-
<Winston's answer>
|
|
147
|
-
|
|
148
|
-
## Perspective comparison
|
|
149
|
-
|
|
150
|
-
| Dimension | Mary | John | Winston |
|
|
151
|
-
|-----------|------|------|---------|
|
|
152
|
-
| Main concern | ... | ... | ... |
|
|
153
|
-
| Recommended direction | ... | ... | ... |
|
|
154
|
-
| Open questions | ... | ... | ... |
|
|
155
|
-
|
|
156
|
-
## Points of disagreement
|
|
157
|
-
|
|
158
|
-
1. Mary and Winston disagree on X: <specifics>
|
|
159
|
-
2. Y raised by John that neither of the others considered: <specifics>
|
|
160
|
-
|
|
161
|
-
## Consensus
|
|
162
|
-
|
|
163
|
-
1. Everyone agrees on Z
|
|
164
|
-
|
|
165
|
-
## Recommendation
|
|
166
|
-
|
|
167
|
-
Based on multi-perspective synthesis:
|
|
168
|
-
- If you care about A → follow Mary
|
|
169
|
-
- If you care about B → follow Winston
|
|
170
|
-
- Middle-ground option: Y proposed by John
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
## Step 6: Let the user decide
|
|
174
|
-
|
|
175
|
-
```
|
|
176
|
-
AskUserQuestion:
|
|
177
|
-
question: "Having seen the multi-perspective analysis, which direction do you lean toward?"
|
|
178
|
-
options:
|
|
179
|
-
- Follow Mary's direction
|
|
180
|
-
- Follow John's direction
|
|
181
|
-
- Follow Winston's direction
|
|
182
|
-
- Synthesis: <specific compromise>
|
|
183
|
-
- Other (user input)
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
After the user chooses, write the decision to STATE.md (as D-NN, via /curdx-flow:discuss or manually).
|
|
187
|
-
|
|
188
|
-
## Typical usage
|
|
189
|
-
|
|
190
|
-
### Architecture selection
|
|
191
|
-
|
|
192
|
-
```
|
|
193
|
-
/curdx-flow:party winston mary "JWT vs Session — which is more suitable in this project"
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### Spec review
|
|
197
|
-
|
|
198
|
-
```
|
|
199
|
-
/curdx-flow:party john rachel oliver "are the ACs in requirements.md sufficient"
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
### Bug approach discussion
|
|
203
|
-
|
|
204
|
-
```
|
|
205
|
-
/curdx-flow:party david winston "should this crash be fixed at the root cause or wrapped in try-catch"
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
### UX decision
|
|
209
|
-
|
|
210
|
-
```
|
|
211
|
-
/curdx-flow:party emma john oliver "how to present login failure error messages"
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
## Forbidden
|
|
215
|
-
|
|
216
|
-
- ✗ Dispatching only 1 agent (that's not a Party — just use Task directly)
|
|
217
|
-
- ✗ Agents referencing each other (the point of independent thinking is isolation)
|
|
218
|
-
- ✗ Sequential dispatch (must be parallel Task invocations)
|
|
219
|
-
- ✗ Overly long agent output (each <300 words)
|
|
220
|
-
|
|
221
|
-
## Why Party Mode has value
|
|
222
|
-
|
|
223
|
-
### Single LLM playing multiple roles vs. true multi-agent
|
|
224
|
-
|
|
225
|
-
Single LLM: "As Mary I think X... As Winston I think Y... Synthesizing the two views, Z"
|
|
226
|
-
|
|
227
|
-
Problems:
|
|
228
|
-
- Opinions have already converged in advance (the LLM generates in one pass; later parts are influenced by earlier ones)
|
|
229
|
-
- "Synthesis" is done by the LLM itself, without real collision
|
|
230
|
-
- Easily becomes "one voice imitating multiple people"
|
|
231
|
-
|
|
232
|
-
True multi-agent (Party Mode):
|
|
233
|
-
- Mary's context contains only "I am Mary" and the question
|
|
234
|
-
- Winston's context contains only "I am Winston" and the question
|
|
235
|
-
- The two have no idea what the other said
|
|
236
|
-
- The output is truly independent thinking
|
|
237
|
-
- The differences are real differences, not acted out
|
|
238
|
-
|
|
239
|
-
---
|
|
240
|
-
|
|
241
|
-
_Source: BMAD's Party Mode, implemented in CurDX-Flow via parallel dispatch of Claude Code's Task tool._
|