claude-code-workflow 6.3.53 → 6.3.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/action-planning-agent.md +26 -1
- package/.claude/commands/flow-create.md +675 -0
- package/.claude/commands/workflow/plan.md +14 -1
- package/.claude/commands/workflow/tools/task-generate-agent.md +35 -24
- package/.claude/commands/workflow/unified-execute-with-file.md +0 -15
- package/.claude/skills/flow-coordinator/SKILL.md +394 -0
- package/.claude/skills/flow-coordinator/templates/analyze.json +16 -0
- package/.claude/skills/flow-coordinator/templates/brainstorm-to-issue.json +36 -0
- package/.claude/skills/flow-coordinator/templates/brainstorm.json +16 -0
- package/.claude/skills/flow-coordinator/templates/bugfix-hotfix.json +16 -0
- package/.claude/skills/flow-coordinator/templates/bugfix.json +47 -0
- package/.claude/skills/flow-coordinator/templates/coupled.json +71 -0
- package/.claude/skills/flow-coordinator/templates/debug.json +16 -0
- package/.claude/skills/flow-coordinator/templates/docs.json +27 -0
- package/.claude/skills/flow-coordinator/templates/full.json +61 -0
- package/.claude/skills/flow-coordinator/templates/issue.json +43 -0
- package/.claude/skills/flow-coordinator/templates/lite-lite-lite.json +16 -0
- package/.claude/skills/flow-coordinator/templates/multi-cli-plan.json +47 -0
- package/.claude/skills/flow-coordinator/templates/rapid-to-issue.json +46 -0
- package/.claude/skills/flow-coordinator/templates/rapid.json +47 -0
- package/.claude/skills/flow-coordinator/templates/review.json +43 -0
- package/.claude/skills/flow-coordinator/templates/tdd.json +34 -0
- package/.claude/skills/flow-coordinator/templates/test-fix.json +26 -0
- package/package.json +92 -92
|
@@ -119,7 +119,7 @@ CONTEXT: Existing user database schema, REST API endpoints
|
|
|
119
119
|
**After Phase 1**: Initialize planning-notes.md with user intent
|
|
120
120
|
|
|
121
121
|
```javascript
|
|
122
|
-
// Create
|
|
122
|
+
// Create planning notes document with N+1 context support
|
|
123
123
|
const planningNotesPath = `.workflow/active/${sessionId}/planning-notes.md`
|
|
124
124
|
const userGoal = structuredDescription.goal
|
|
125
125
|
const userConstraints = structuredDescription.context || "None specified"
|
|
@@ -144,6 +144,19 @@ Write(planningNotesPath, `# Planning Notes
|
|
|
144
144
|
|
|
145
145
|
## Consolidated Constraints (Phase 4 Input)
|
|
146
146
|
1. ${userConstraints}
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Task Generation (Phase 4)
|
|
151
|
+
(To be filled by action-planning-agent)
|
|
152
|
+
|
|
153
|
+
## N+1 Context
|
|
154
|
+
### Decisions
|
|
155
|
+
| Decision | Rationale | Revisit? |
|
|
156
|
+
|----------|-----------|----------|
|
|
157
|
+
|
|
158
|
+
### Deferred
|
|
159
|
+
- [ ] (For N+1)
|
|
147
160
|
`)
|
|
148
161
|
```
|
|
149
162
|
|
|
@@ -378,16 +378,26 @@ Hard Constraints:
|
|
|
378
378
|
- Return completion status with document count and task breakdown summary
|
|
379
379
|
|
|
380
380
|
## PLANNING NOTES RECORD (REQUIRED)
|
|
381
|
-
After completing
|
|
381
|
+
After completing, update planning-notes.md:
|
|
382
382
|
|
|
383
383
|
**File**: .workflow/active/{session_id}/planning-notes.md
|
|
384
|
-
**Location**: Create new section after "## Consolidated Constraints"
|
|
385
|
-
**Format**:
|
|
386
|
-
\`\`\`
|
|
387
|
-
## Task Generation (Phase 4)
|
|
388
384
|
|
|
385
|
+
1. **Task Generation (Phase 4)**: Task count and key tasks
|
|
386
|
+
2. **N+1 Context**: Key decisions (with rationale) + deferred items
|
|
387
|
+
|
|
388
|
+
\`\`\`markdown
|
|
389
|
+
## Task Generation (Phase 4)
|
|
389
390
|
### [Action-Planning Agent] YYYY-MM-DD
|
|
390
|
-
- **
|
|
391
|
+
- **Tasks**: [count] ([IDs])
|
|
392
|
+
|
|
393
|
+
## N+1 Context
|
|
394
|
+
### Decisions
|
|
395
|
+
| Decision | Rationale | Revisit? |
|
|
396
|
+
|----------|-----------|----------|
|
|
397
|
+
| [choice] | [why] | [Yes/No] |
|
|
398
|
+
|
|
399
|
+
### Deferred
|
|
400
|
+
- [ ] [item] - [reason]
|
|
391
401
|
\`\`\`
|
|
392
402
|
`
|
|
393
403
|
)
|
|
@@ -543,19 +553,13 @@ Hard Constraints:
|
|
|
543
553
|
- Return: task count, task IDs, dependency summary (internal + cross-module)
|
|
544
554
|
|
|
545
555
|
## PLANNING NOTES RECORD (REQUIRED)
|
|
546
|
-
After completing
|
|
556
|
+
After completing, append to planning-notes.md:
|
|
547
557
|
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
**
|
|
558
|
+
\`\`\`markdown
|
|
559
|
+
### [${module.name}] YYYY-MM-DD
|
|
560
|
+
- **Tasks**: [count] ([IDs])
|
|
561
|
+
- **CROSS deps**: [placeholders used]
|
|
551
562
|
\`\`\`
|
|
552
|
-
## Task Generation (Phase 4)
|
|
553
|
-
|
|
554
|
-
### [Action-Planning Agent - ${module.name}] YYYY-MM-DD
|
|
555
|
-
- **Note**: [智能补充:简短总结本模块任务数量、关键任务等]
|
|
556
|
-
\`\`\`
|
|
557
|
-
|
|
558
|
-
**Note**: Multiple module agents will append their records. Phase 3 Integration Coordinator will add final summary.
|
|
559
563
|
`
|
|
560
564
|
)
|
|
561
565
|
);
|
|
@@ -638,14 +642,21 @@ Module Count: ${modules.length}
|
|
|
638
642
|
- Return: task count, per-module breakdown, resolved dependency count
|
|
639
643
|
|
|
640
644
|
## PLANNING NOTES RECORD (REQUIRED)
|
|
641
|
-
After
|
|
645
|
+
After integration, update planning-notes.md:
|
|
642
646
|
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
**
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
647
|
+
\`\`\`markdown
|
|
648
|
+
### [Coordinator] YYYY-MM-DD
|
|
649
|
+
- **Total**: [count] tasks
|
|
650
|
+
- **Resolved**: [CROSS:: resolutions]
|
|
651
|
+
|
|
652
|
+
## N+1 Context
|
|
653
|
+
### Decisions
|
|
654
|
+
| Decision | Rationale | Revisit? |
|
|
655
|
+
|----------|-----------|----------|
|
|
656
|
+
| CROSS::X → IMPL-Y | [why this resolution] | [Yes/No] |
|
|
657
|
+
|
|
658
|
+
### Deferred
|
|
659
|
+
- [ ] [unresolved CROSS or conflict] - [reason]
|
|
649
660
|
\`\`\`
|
|
650
661
|
`
|
|
651
662
|
)
|
|
@@ -873,21 +873,6 @@ function calculateParallel(tasks) {
|
|
|
873
873
|
| Agent unavailable | Fallback to universal-executor |
|
|
874
874
|
| Execution interrupted | Support resume with `/workflow:unified-execute-with-file --continue` |
|
|
875
875
|
|
|
876
|
-
## Usage Recommendations
|
|
877
|
-
|
|
878
|
-
Use `/workflow:unified-execute-with-file` when:
|
|
879
|
-
- Executing any planning document (IMPL_PLAN.md, brainstorm conclusions, analysis recommendations)
|
|
880
|
-
- Multiple tasks with dependencies need orchestration
|
|
881
|
-
- Want minimal progress tracking without clutter
|
|
882
|
-
- Need to handle failures gracefully and resume
|
|
883
|
-
- Want to parallelize where possible but ensure correctness
|
|
884
|
-
|
|
885
|
-
Use for consuming output from:
|
|
886
|
-
- `/workflow:plan` → IMPL_PLAN.md
|
|
887
|
-
- `/workflow:brainstorm-with-file` → synthesis.json → execution
|
|
888
|
-
- `/workflow:analyze-with-file` → conclusions.json → execution
|
|
889
|
-
- `/workflow:debug-with-file` → recommendations → execution
|
|
890
|
-
- `/workflow:lite-plan` → task JSONs → execution
|
|
891
876
|
|
|
892
877
|
## Session Resume
|
|
893
878
|
|
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flow-coordinator
|
|
3
|
+
description: Template-driven workflow coordinator with minimal state tracking. Executes command chains from workflow templates with slash-command execution (mainprocess/async). Triggers on "flow-coordinator", "workflow template", "orchestrate".
|
|
4
|
+
allowed-tools: Task, AskUserQuestion, Read, Write, Bash, Glob, Grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Flow Coordinator
|
|
8
|
+
|
|
9
|
+
Lightweight workflow coordinator that executes command chains from predefined templates, supporting slash-command execution with mainprocess (blocking) and async (background) modes.
|
|
10
|
+
|
|
11
|
+
## Architecture
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
User Task → Select Template → status.json Init → Execute Steps → Complete
|
|
15
|
+
↑ │
|
|
16
|
+
└──────────────── Resume (from status.json) ─────┘
|
|
17
|
+
|
|
18
|
+
Step Execution:
|
|
19
|
+
execution mode?
|
|
20
|
+
├─ mainprocess → SlashCommand (blocking, main process)
|
|
21
|
+
└─ async → ccw cli --tool claude --mode write (background)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Core Concepts
|
|
25
|
+
|
|
26
|
+
**Template-Driven**: Workflows defined as JSON templates in `templates/`, decoupled from coordinator logic.
|
|
27
|
+
|
|
28
|
+
**Execution Type**: `slash-command` only
|
|
29
|
+
- ALL workflow commands (`/workflow:*`) use `slash-command` type
|
|
30
|
+
- Two execution modes:
|
|
31
|
+
- `mainprocess`: SlashCommand (blocking, main process)
|
|
32
|
+
- `async`: CLI background (ccw cli with claude tool)
|
|
33
|
+
|
|
34
|
+
**Dynamic Discovery**: Templates discovered at runtime via Glob, not hardcoded.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Execution Flow
|
|
39
|
+
|
|
40
|
+
```javascript
|
|
41
|
+
async function execute(task) {
|
|
42
|
+
// 1. Discover and select template
|
|
43
|
+
const templates = await discoverTemplates();
|
|
44
|
+
const template = await selectTemplate(templates);
|
|
45
|
+
|
|
46
|
+
// 2. Init status
|
|
47
|
+
const sessionId = `fc-${timestamp()}`;
|
|
48
|
+
const statusPath = `.workflow/.flow-coordinator/${sessionId}/status.json`;
|
|
49
|
+
const status = initStatus(template, task);
|
|
50
|
+
write(statusPath, JSON.stringify(status, null, 2));
|
|
51
|
+
|
|
52
|
+
// 3. Execute steps based on execution config
|
|
53
|
+
await executeSteps(status, statusPath);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async function executeSteps(status, statusPath) {
|
|
57
|
+
for (let i = status.current; i < status.steps.length; i++) {
|
|
58
|
+
const step = status.steps[i];
|
|
59
|
+
status.current = i;
|
|
60
|
+
|
|
61
|
+
// Execute based on step mode (all steps use slash-command type)
|
|
62
|
+
const execConfig = step.execution || { type: 'slash-command', mode: 'mainprocess' };
|
|
63
|
+
|
|
64
|
+
if (execConfig.mode === 'async') {
|
|
65
|
+
// Async execution - stop and wait for hook callback
|
|
66
|
+
await executeSlashCommandAsync(step, status, statusPath);
|
|
67
|
+
break;
|
|
68
|
+
} else {
|
|
69
|
+
// Mainprocess execution - continue immediately
|
|
70
|
+
await executeSlashCommandSync(step, status);
|
|
71
|
+
step.status = 'done';
|
|
72
|
+
write(statusPath, JSON.stringify(status, null, 2));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// All steps complete
|
|
77
|
+
if (status.current >= status.steps.length) {
|
|
78
|
+
status.complete = true;
|
|
79
|
+
write(statusPath, JSON.stringify(status, null, 2));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Template Discovery
|
|
87
|
+
|
|
88
|
+
**Dynamic query** - never hardcode template list:
|
|
89
|
+
|
|
90
|
+
```javascript
|
|
91
|
+
async function discoverTemplates() {
|
|
92
|
+
// Discover all JSON templates
|
|
93
|
+
const files = Glob('*.json', { path: 'templates/' });
|
|
94
|
+
|
|
95
|
+
// Parse each template
|
|
96
|
+
const templates = [];
|
|
97
|
+
for (const file of files) {
|
|
98
|
+
const content = JSON.parse(Read(file));
|
|
99
|
+
templates.push({
|
|
100
|
+
name: content.name,
|
|
101
|
+
description: content.description,
|
|
102
|
+
steps: content.steps.map(s => s.cmd).join(' → '),
|
|
103
|
+
file: file
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return templates;
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Template Selection
|
|
114
|
+
|
|
115
|
+
User chooses from discovered templates:
|
|
116
|
+
|
|
117
|
+
```javascript
|
|
118
|
+
async function selectTemplate(templates) {
|
|
119
|
+
// Build options from discovered templates
|
|
120
|
+
const options = templates.slice(0, 4).map(t => ({
|
|
121
|
+
label: t.name,
|
|
122
|
+
description: t.steps
|
|
123
|
+
}));
|
|
124
|
+
|
|
125
|
+
const response = await AskUserQuestion({
|
|
126
|
+
questions: [{
|
|
127
|
+
question: 'Select workflow template:',
|
|
128
|
+
header: 'Template',
|
|
129
|
+
options: options,
|
|
130
|
+
multiSelect: false
|
|
131
|
+
}]
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
// Handle "Other" - show remaining templates or custom input
|
|
135
|
+
if (response.template === 'Other') {
|
|
136
|
+
return await selectFromRemainingTemplates(templates.slice(4));
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return templates.find(t => t.name === response.template);
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Status Schema
|
|
146
|
+
|
|
147
|
+
**Creation**: Copy template JSON → Update `id`, `template`, `goal`, set all steps `status: "pending"`
|
|
148
|
+
|
|
149
|
+
**Location**: `.workflow/.flow-coordinator/{session-id}/status.json`
|
|
150
|
+
|
|
151
|
+
**Core Fields**:
|
|
152
|
+
- `id`: Session ID (fc-YYYYMMDD-HHMMSS)
|
|
153
|
+
- `template`: Template name
|
|
154
|
+
- `goal`: User task description
|
|
155
|
+
- `current`: Current step index
|
|
156
|
+
- `steps[]`: Step array from template (with runtime `status`, `session`, `taskId`)
|
|
157
|
+
- `complete`: All steps done?
|
|
158
|
+
|
|
159
|
+
**Step Status**: `pending` → `running` → `done` | `failed` | `skipped`
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Extended Template Schema
|
|
164
|
+
|
|
165
|
+
**Templates stored in**: `templates/*.json` (discovered at runtime via Glob)
|
|
166
|
+
|
|
167
|
+
**TemplateStep Fields**:
|
|
168
|
+
- `cmd`: Full command path (e.g., `/workflow:lite-plan`, `/workflow:execute`)
|
|
169
|
+
- `args?`: Arguments with `{{goal}}` and `{{prev}}` placeholders
|
|
170
|
+
- `unit?`: Minimum execution unit name (groups related commands)
|
|
171
|
+
- `optional?`: Can be skipped by user
|
|
172
|
+
- `execution`: Type and mode configuration
|
|
173
|
+
- `type`: Always `'slash-command'` (for all workflow commands)
|
|
174
|
+
- `mode`: `'mainprocess'` (blocking) or `'async'` (background)
|
|
175
|
+
- `contextHint?`: Natural language guidance for context assembly
|
|
176
|
+
|
|
177
|
+
**Template Example**:
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"name": "rapid",
|
|
181
|
+
"steps": [
|
|
182
|
+
{
|
|
183
|
+
"cmd": "/workflow:lite-plan",
|
|
184
|
+
"args": "\"{{goal}}\"",
|
|
185
|
+
"unit": "quick-implementation",
|
|
186
|
+
"execution": { "type": "slash-command", "mode": "mainprocess" },
|
|
187
|
+
"contextHint": "Create lightweight implementation plan"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"cmd": "/workflow:lite-execute",
|
|
191
|
+
"args": "--in-memory",
|
|
192
|
+
"unit": "quick-implementation",
|
|
193
|
+
"execution": { "type": "slash-command", "mode": "async" },
|
|
194
|
+
"contextHint": "Execute plan from previous step"
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Execution Implementation
|
|
203
|
+
|
|
204
|
+
### Mainprocess Mode (Blocking)
|
|
205
|
+
|
|
206
|
+
```javascript
|
|
207
|
+
async function executeSlashCommandSync(step, status) {
|
|
208
|
+
// Build command: /workflow:cmd -y args
|
|
209
|
+
const cmd = buildCommand(step, status);
|
|
210
|
+
const result = await SlashCommand({ command: cmd });
|
|
211
|
+
|
|
212
|
+
step.session = result.session_id;
|
|
213
|
+
step.status = 'done';
|
|
214
|
+
return result;
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Async Mode (Background)
|
|
219
|
+
|
|
220
|
+
```javascript
|
|
221
|
+
async function executeSlashCommandAsync(step, status, statusPath) {
|
|
222
|
+
// Build prompt: /workflow:cmd -y args + context
|
|
223
|
+
const prompt = buildCommandPrompt(step, status);
|
|
224
|
+
|
|
225
|
+
step.status = 'running';
|
|
226
|
+
write(statusPath, JSON.stringify(status, null, 2));
|
|
227
|
+
|
|
228
|
+
// Execute via ccw cli in background
|
|
229
|
+
const taskId = Bash(
|
|
230
|
+
`ccw cli -p "${escapePrompt(prompt)}" --tool claude --mode write`,
|
|
231
|
+
{ run_in_background: true }
|
|
232
|
+
).task_id;
|
|
233
|
+
|
|
234
|
+
step.taskId = taskId;
|
|
235
|
+
write(statusPath, JSON.stringify(status, null, 2));
|
|
236
|
+
|
|
237
|
+
console.log(`Executing: ${step.cmd} (async)`);
|
|
238
|
+
console.log(`Resume: /flow-coordinator --resume ${status.id}`);
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Prompt Building
|
|
245
|
+
|
|
246
|
+
Prompts are built in format: `/workflow:cmd -y args` + context
|
|
247
|
+
|
|
248
|
+
```javascript
|
|
249
|
+
function buildCommandPrompt(step, status) {
|
|
250
|
+
// step.cmd already contains full path: /workflow:lite-plan, /workflow:execute, etc.
|
|
251
|
+
let prompt = `${step.cmd} -y`;
|
|
252
|
+
|
|
253
|
+
// Add arguments (with placeholder replacement)
|
|
254
|
+
if (step.args) {
|
|
255
|
+
const args = step.args
|
|
256
|
+
.replace('{{goal}}', status.goal)
|
|
257
|
+
.replace('{{prev}}', getPreviousSessionId(status));
|
|
258
|
+
prompt += ` ${args}`;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// Add context based on contextHint
|
|
262
|
+
if (step.contextHint) {
|
|
263
|
+
const context = buildContextFromHint(step.contextHint, status);
|
|
264
|
+
prompt += `\n\nContext:\n${context}`;
|
|
265
|
+
} else {
|
|
266
|
+
// Default context: previous session IDs
|
|
267
|
+
const previousContext = collectPreviousResults(status);
|
|
268
|
+
if (previousContext) {
|
|
269
|
+
prompt += `\n\nPrevious results:\n${previousContext}`;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
return prompt;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
function buildContextFromHint(hint, status) {
|
|
277
|
+
// Parse contextHint instruction and build context accordingly
|
|
278
|
+
// Examples:
|
|
279
|
+
// "Summarize IMPL_PLAN.md" → read and summarize plan
|
|
280
|
+
// "List test coverage gaps" → analyze previous test results
|
|
281
|
+
// "Pass session ID" → just return session reference
|
|
282
|
+
|
|
283
|
+
return parseAndBuildContext(hint, status);
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Example Prompt Output
|
|
288
|
+
|
|
289
|
+
```
|
|
290
|
+
/workflow:lite-plan -y "Implement user registration"
|
|
291
|
+
|
|
292
|
+
Context:
|
|
293
|
+
Task: Implement user registration
|
|
294
|
+
Previous results:
|
|
295
|
+
- None (first step)
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
```
|
|
299
|
+
/workflow:execute -y --in-memory
|
|
300
|
+
|
|
301
|
+
Context:
|
|
302
|
+
Task: Implement user registration
|
|
303
|
+
Previous results:
|
|
304
|
+
- lite-plan: WFS-plan-20250130 (planning-context.md)
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## User Interaction
|
|
310
|
+
|
|
311
|
+
### Step 1: Select Template
|
|
312
|
+
|
|
313
|
+
```
|
|
314
|
+
Select workflow template:
|
|
315
|
+
|
|
316
|
+
○ rapid lite-plan → lite-execute → test-cycle-execute
|
|
317
|
+
○ coupled plan → plan-verify → execute → review → test
|
|
318
|
+
○ bugfix lite-fix → lite-execute → test-cycle-execute
|
|
319
|
+
○ tdd tdd-plan → execute → tdd-verify
|
|
320
|
+
○ Other (more templates or custom)
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Step 2: Review Execution Plan
|
|
324
|
+
|
|
325
|
+
```
|
|
326
|
+
Template: coupled
|
|
327
|
+
Steps:
|
|
328
|
+
1. /workflow:plan (slash-command mainprocess)
|
|
329
|
+
2. /workflow:plan-verify (slash-command mainprocess)
|
|
330
|
+
3. /workflow:execute (slash-command async)
|
|
331
|
+
4. /workflow:review-session-cycle (slash-command mainprocess)
|
|
332
|
+
5. /workflow:review-cycle-fix (slash-command mainprocess)
|
|
333
|
+
6. /workflow:test-fix-gen (slash-command mainprocess)
|
|
334
|
+
7. /workflow:test-cycle-execute (slash-command async)
|
|
335
|
+
|
|
336
|
+
Proceed? [Confirm / Cancel]
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## Resume Capability
|
|
342
|
+
|
|
343
|
+
```javascript
|
|
344
|
+
async function resume(sessionId) {
|
|
345
|
+
const statusPath = `.workflow/.flow-coordinator/${sessionId}/status.json`;
|
|
346
|
+
const status = JSON.parse(Read(statusPath));
|
|
347
|
+
|
|
348
|
+
// Find first incomplete step
|
|
349
|
+
status.current = status.steps.findIndex(s => s.status !== 'done');
|
|
350
|
+
if (status.current === -1) {
|
|
351
|
+
console.log('All steps complete');
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// Continue executing steps
|
|
356
|
+
await executeSteps(status, statusPath);
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
## Available Templates
|
|
363
|
+
|
|
364
|
+
Templates discovered from `templates/*.json`:
|
|
365
|
+
|
|
366
|
+
| Template | Use Case | Steps |
|
|
367
|
+
|----------|----------|-------|
|
|
368
|
+
| rapid | Simple feature | /workflow:lite-plan → /workflow:lite-execute → /workflow:test-cycle-execute |
|
|
369
|
+
| coupled | Complex feature | /workflow:plan → /workflow:plan-verify → /workflow:execute → /workflow:review-session-cycle → /workflow:test-fix-gen |
|
|
370
|
+
| bugfix | Bug fix | /workflow:lite-fix → /workflow:lite-execute → /workflow:test-cycle-execute |
|
|
371
|
+
| tdd | Test-driven | /workflow:tdd-plan → /workflow:execute → /workflow:tdd-verify |
|
|
372
|
+
| test-fix | Fix failing tests | /workflow:test-fix-gen → /workflow:test-cycle-execute |
|
|
373
|
+
| brainstorm | Exploration | /workflow:brainstorm-with-file |
|
|
374
|
+
| debug | Debug with docs | /workflow:debug-with-file |
|
|
375
|
+
| analyze | Collaborative analysis | /workflow:analyze-with-file |
|
|
376
|
+
| issue | Issue workflow | /workflow:issue:plan → /workflow:issue:queue → /workflow:issue:execute |
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## Design Principles
|
|
381
|
+
|
|
382
|
+
1. **Minimal fields**: Only essential tracking data
|
|
383
|
+
2. **Flat structure**: No nested objects beyond steps array
|
|
384
|
+
3. **Step-level execution**: Each step defines how it's executed
|
|
385
|
+
4. **Resumable**: Any step can be resumed from status
|
|
386
|
+
5. **Human readable**: Clear JSON format
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
## Reference Documents
|
|
391
|
+
|
|
392
|
+
| Document | Purpose |
|
|
393
|
+
|----------|---------|
|
|
394
|
+
| templates/*.json | Workflow templates (dynamic discovery) |
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "analyze",
|
|
3
|
+
"description": "Collaborative analysis with multi-round discussion - deep exploration and understanding",
|
|
4
|
+
"level": 3,
|
|
5
|
+
"steps": [
|
|
6
|
+
{
|
|
7
|
+
"cmd": "/workflow:analyze-with-file",
|
|
8
|
+
"args": "\"{{goal}}\"",
|
|
9
|
+
"execution": {
|
|
10
|
+
"type": "slash-command",
|
|
11
|
+
"mode": "mainprocess"
|
|
12
|
+
},
|
|
13
|
+
"contextHint": "Multi-round collaborative analysis with iterative understanding. Generate discussion.md with comprehensive analysis and conclusions"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "brainstorm-to-issue",
|
|
3
|
+
"description": "Bridge brainstorm session to issue workflow - convert exploration insights to executable issues",
|
|
4
|
+
"level": 4,
|
|
5
|
+
"steps": [
|
|
6
|
+
{
|
|
7
|
+
"cmd": "/workflow:issue:from-brainstorm",
|
|
8
|
+
"args": "--auto",
|
|
9
|
+
"unit": "brainstorm-to-issue",
|
|
10
|
+
"execution": {
|
|
11
|
+
"type": "slash-command",
|
|
12
|
+
"mode": "mainprocess"
|
|
13
|
+
},
|
|
14
|
+
"contextHint": "Convert brainstorm session findings into issue plans and solutions"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"cmd": "/workflow:issue:queue",
|
|
18
|
+
"unit": "brainstorm-to-issue",
|
|
19
|
+
"execution": {
|
|
20
|
+
"type": "slash-command",
|
|
21
|
+
"mode": "mainprocess"
|
|
22
|
+
},
|
|
23
|
+
"contextHint": "Build execution queue from converted brainstorm issues"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"cmd": "/workflow:issue:execute",
|
|
27
|
+
"args": "--queue auto",
|
|
28
|
+
"unit": "brainstorm-to-issue",
|
|
29
|
+
"execution": {
|
|
30
|
+
"type": "slash-command",
|
|
31
|
+
"mode": "async"
|
|
32
|
+
},
|
|
33
|
+
"contextHint": "Execute issues from queue with state tracking"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "brainstorm",
|
|
3
|
+
"description": "Multi-perspective ideation with documentation - explore possibilities with multiple analytical viewpoints",
|
|
4
|
+
"level": 4,
|
|
5
|
+
"steps": [
|
|
6
|
+
{
|
|
7
|
+
"cmd": "/workflow:brainstorm-with-file",
|
|
8
|
+
"args": "\"{{goal}}\"",
|
|
9
|
+
"execution": {
|
|
10
|
+
"type": "slash-command",
|
|
11
|
+
"mode": "mainprocess"
|
|
12
|
+
},
|
|
13
|
+
"contextHint": "Multi-perspective ideation with interactive diverge-converge cycles. Generate brainstorm.md with synthesis of ideas and recommendations"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "bugfix-hotfix",
|
|
3
|
+
"description": "Urgent production fix - immediate diagnosis and fix with minimal overhead",
|
|
4
|
+
"level": 1,
|
|
5
|
+
"steps": [
|
|
6
|
+
{
|
|
7
|
+
"cmd": "/workflow:lite-fix",
|
|
8
|
+
"args": "--hotfix \"{{goal}}\"",
|
|
9
|
+
"execution": {
|
|
10
|
+
"type": "slash-command",
|
|
11
|
+
"mode": "async"
|
|
12
|
+
},
|
|
13
|
+
"contextHint": "Urgent hotfix mode: quick diagnosis and immediate fix for critical production issue"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "bugfix",
|
|
3
|
+
"description": "Standard bug fix workflow - lightweight diagnosis and execution with testing",
|
|
4
|
+
"level": 2,
|
|
5
|
+
"steps": [
|
|
6
|
+
{
|
|
7
|
+
"cmd": "/workflow:lite-fix",
|
|
8
|
+
"args": "\"{{goal}}\"",
|
|
9
|
+
"unit": "bug-fix",
|
|
10
|
+
"execution": {
|
|
11
|
+
"type": "slash-command",
|
|
12
|
+
"mode": "mainprocess"
|
|
13
|
+
},
|
|
14
|
+
"contextHint": "Analyze bug report, trace execution flow, identify root cause with fix strategy"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"cmd": "/workflow:lite-execute",
|
|
18
|
+
"args": "--in-memory",
|
|
19
|
+
"unit": "bug-fix",
|
|
20
|
+
"execution": {
|
|
21
|
+
"type": "slash-command",
|
|
22
|
+
"mode": "async"
|
|
23
|
+
},
|
|
24
|
+
"contextHint": "Implement fix based on diagnosis. Execute against in-memory state from lite-fix analysis."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"cmd": "/workflow:test-fix-gen",
|
|
28
|
+
"unit": "test-validation",
|
|
29
|
+
"optional": true,
|
|
30
|
+
"execution": {
|
|
31
|
+
"type": "slash-command",
|
|
32
|
+
"mode": "mainprocess"
|
|
33
|
+
},
|
|
34
|
+
"contextHint": "Generate test tasks to verify bug fix and prevent regression"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"cmd": "/workflow:test-cycle-execute",
|
|
38
|
+
"unit": "test-validation",
|
|
39
|
+
"optional": true,
|
|
40
|
+
"execution": {
|
|
41
|
+
"type": "slash-command",
|
|
42
|
+
"mode": "async"
|
|
43
|
+
},
|
|
44
|
+
"contextHint": "Execute test-fix cycle until all tests pass"
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|