murmur8 3.5.0 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,7 +18,7 @@ This is our shared manifesto — for every agent and the human. Read it before y
18
18
 
19
19
  ## We build things that matter
20
20
 
21
- We are not here to generate output. We are here to build a product that makes a real impact on the people or agents who use it. Every line of code, every test, every story should serve that purpose. If it doesn't make things better for the user, we ask why we're doing it. We enjoy building
21
+ We are not here to generate output. We are here to build a product that makes a real impact on the people or agents who use it. Every line of code, every test, every story should serve that purpose. If it doesn't make things better for the user, we ask why we're doing it. We enjoy building great things. We don't just make slop!
22
22
 
23
23
  ## We take pride in beautiful code
24
24
 
package/README.md CHANGED
@@ -1,8 +1,28 @@
1
1
  # murmur8
2
2
 
3
- A multi-agent workflow framework for automated feature development. Like a murmuration of starlings individual agents moving together as one, each responding to its neighbours to create something greater than the sum of its parts.
3
+ A multi-agent workflow framework for automated feature development In Claude Code and Copilot CLI. Four specialised AI agents collaborate in sequence to take features from specification to implementation, with built-in feedback loops and self-improvement capabilities.
4
4
 
5
- Four specialized AI agents collaborate in sequence to take features from specification to implementation, with built-in feedback loops and self-improvement capabilities.
5
+ Like a murmuration of starlings, individual agents move together as one, each responding to its neighbours to create something greater than the sum of its parts.
6
+
7
+ ## Upgrading to v4.0
8
+
9
+ v4.0 completes the murmuration theming by renaming all parallel internals. Existing users should be aware of the following breaking changes.
10
+
11
+ ### Breaking changes
12
+
13
+ - **Source file renamed**: `src/parallel.js` → `src/murm.js` — update any direct `require()` / `import` references
14
+ - **Exported functions renamed**: `runParallel` → `runMurm`, `abortParallel` → `abortMurm`, `rollbackParallel` → `rollbackMurm`, `readParallelConfig` → `readMurmConfig`, `writeParallelConfig` → `writeMurmConfig`, `getDefaultParallelConfig` → `getDefaultMurmConfig`, `validateParallelBatch` → `validateMurmBatch`
15
+ - **Status strings renamed**: `parallel_queued` → `murm_queued`, `parallel_running` → `murm_running`, `parallel_failed` → `murm_failed`, `parallel_complete` → `murm_complete` — update any code that matches on these values
16
+ - **On-disk paths renamed**: `.claude/parallel-config.json` → `.claude/murm-config.json`, `.claude/parallel-queue.json` → `.claude/murm-queue.json`, `.claude/parallel.lock` → `.claude/murm.lock`
17
+ - **CLI command renamed**: `parallel-config` → `murm-config`
18
+
19
+ ### Automatic migration
20
+
21
+ Legacy on-disk files (`.claude/parallel-config.json`, `.claude/parallel-queue.json`, `.claude/parallel.lock`) are **automatically migrated** to the new paths on first access. No manual action is needed for existing configs.
22
+
23
+ ### Backward-compatible aliases
24
+
25
+ The CLI commands `parallel`, `murmuration`, and `parallel-config` continue to work as aliases for `murm` and `murm-config` respectively.
6
26
 
7
27
  ## Agents
8
28
 
@@ -83,16 +103,16 @@ This updates `.blueprint/agents/`, `.blueprint/templates/`, `.blueprint/ways_of_
83
103
  | `npx murmur8 insights --bottlenecks` | View bottleneck analysis |
84
104
  | `npx murmur8 insights --failures` | View failure pattern analysis |
85
105
 
86
- ### Parallel Execution
106
+ ### Murmuration (Parallel Execution)
87
107
 
88
108
  | Command | Description |
89
109
  |---------|-------------|
90
- | `npx murmur8 parallel <slugs...>` | Run multiple features in parallel |
91
- | `npx murmur8 parallel <slugs...> --dry-run` | Preview execution plan |
92
- | `npx murmur8 parallel status` | Show status of running pipelines |
93
- | `npx murmur8 parallel cleanup` | Remove completed worktrees |
94
- | `npx murmur8 parallel-config` | View parallel configuration |
95
- | `npx murmur8 parallel-config set <key> <value>` | Modify parallel settings |
110
+ | `npx murmur8 murm <slugs...>` | Run multiple features in parallel |
111
+ | `npx murmur8 murm <slugs...> --dry-run` | Preview execution plan |
112
+ | `npx murmur8 murm status` | Show status of running pipelines |
113
+ | `npx murmur8 murm cleanup` | Remove completed worktrees |
114
+ | `npx murmur8 murm-config` | View murmuration configuration |
115
+ | `npx murmur8 murm-config set <key> <value>` | Modify murmuration settings |
96
116
 
97
117
  ### Configuration
98
118
 
@@ -106,8 +126,8 @@ This updates `.blueprint/agents/`, `.blueprint/templates/`, `.blueprint/ways_of_
106
126
  | `npx murmur8 retry-config reset` | Reset to defaults |
107
127
  | `npx murmur8 feedback-config` | View feedback thresholds |
108
128
  | `npx murmur8 feedback-config set <key> <value>` | Modify feedback settings |
109
- | `npx murmur8 parallel-config` | View parallel pipeline configuration |
110
- | `npx murmur8 parallel-config set <key> <value>` | Modify parallel settings |
129
+ | `npx murmur8 murm-config` | View murmuration pipeline configuration |
130
+ | `npx murmur8 murm-config set <key> <value>` | Modify murmuration settings |
111
131
 
112
132
  ## Usage
113
133
 
@@ -227,7 +247,7 @@ murmur8 includes these built-in modules for observability and self-improvement:
227
247
  | **handoff** | Structured summaries between agents for token efficiency |
228
248
  | **business-context** | Lazy loading of business context based on feature needs |
229
249
  | **tools** | Tool schemas and validation for Claude native features |
230
- | **parallel** | Parallel pipeline execution using git worktrees |
250
+ | **murm** | Murmuration pipeline execution using git worktrees |
231
251
  | **stack** | Configurable tech stack detection and configuration |
232
252
 
233
253
  ### How They Work Together
@@ -290,8 +310,8 @@ your-project/
290
310
  │ ├── pipeline-history.json # Execution history (gitignored)
291
311
  │ ├── retry-config.json # Retry configuration (gitignored)
292
312
  │ ├── feedback-config.json # Feedback thresholds (gitignored)
293
- │ ├── parallel-config.json # Parallel execution config (gitignored)
294
- │ ├── parallel-queue.json # Parallel pipeline state (gitignored)
313
+ │ ├── murm-config.json # Murmuration execution config (gitignored)
314
+ │ ├── murm-queue.json # Murmuration pipeline state (gitignored)
295
315
  │ ├── stack-config.json # Tech stack configuration (gitignored)
296
316
  │ └── implement-queue.json # Pipeline queue state (gitignored)
297
317
  └── test/
@@ -343,6 +363,30 @@ $ npx murmur8 insights
343
363
  - Avg duration: 14 min → 11 min (improving)
344
364
  ```
345
365
 
366
+ ## Multi-CLI Support (v4.1)
367
+
368
+ The `/implement-feature` skill works with both **Claude Code** and **GitHub Copilot CLI**. During initialization, murmur8 installs the skill to both locations:
369
+
370
+ | CLI | Location |
371
+ |-----|----------|
372
+ | Claude Code | `.claude/commands/implement-feature.md` |
373
+ | Copilot CLI | `.github/skills/implement-feature/SKILL.md` |
374
+
375
+ The Copilot CLI location is a symlink to the Claude Code master, ensuring both tools use identical skill definitions.
376
+
377
+ ### Usage
378
+
379
+ ```bash
380
+ # Initialize (installs skill for both CLIs)
381
+ npx murmur8 init
382
+
383
+ # Then use either CLI:
384
+ /implement-feature user-auth # Works in Claude Code
385
+ /implement-feature user-auth # Works in Copilot CLI
386
+ ```
387
+
388
+ Both CLIs execute the same pipeline: Alex → Cass → Nigel → Codey. The skill uses each CLI's native agent/task mechanism.
389
+
346
390
  ## Token Efficiency (v2.7)
347
391
 
348
392
  Version 2.7 introduces several optimizations to reduce token usage:
@@ -359,14 +403,14 @@ Version 2.7 introduces several optimizations to reduce token usage:
359
403
 
360
404
  **Total estimated savings: 10,000+ tokens per pipeline run** (more for technical features)
361
405
 
362
- ## Parallel Execution with Git Worktrees
406
+ ## Murmuration
363
407
 
364
408
  Run multiple feature pipelines simultaneously using git worktrees for isolation. Each feature gets its own worktree and branch, allowing true parallel development without conflicts.
365
409
 
366
410
  ### How It Works
367
411
 
368
412
  ```
369
- murmur8 parallel user-auth dashboard notifications
413
+ murmur8 murm <slug-a> <slug-b> <slug-c>
370
414
 
371
415
 
372
416
  ┌───────────────────────────────────────┐
@@ -384,19 +428,19 @@ murmur8 parallel user-auth dashboard notifications
384
428
  ┌───────────────────────────────────────┐
385
429
  │ Create Isolated Worktrees │
386
430
  │ │
387
- │ .claude/worktrees/feat-user-auth/
388
- │ └─ branch: feature/user-auth
431
+ │ .claude/worktrees/feat-<slug-a>/
432
+ │ └─ branch: feature/<slug-a>
389
433
  │ │
390
- │ .claude/worktrees/feat-dashboard/
391
- │ └─ branch: feature/dashboard
434
+ │ .claude/worktrees/feat-<slug-b>/
435
+ │ └─ branch: feature/<slug-b>
392
436
  │ │
393
- │ .claude/worktrees/feat-notifications/│
394
- │ └─ branch: feature/notifications
437
+ │ .claude/worktrees/feat-<slug-c>/ │
438
+ │ └─ branch: feature/<slug-c>
395
439
  └───────────────────────────────────────┘
396
440
 
397
441
 
398
442
  ┌───────────────────────────────────────┐
399
- │ Spawn Parallel Pipelines
443
+ │ Spawn Pipelines
400
444
  │ (max 3 concurrent by default) │
401
445
  │ │
402
446
  │ Each runs: Alex → Nigel → Codey │
@@ -416,22 +460,22 @@ murmur8 parallel user-auth dashboard notifications
416
460
 
417
461
  ```bash
418
462
  # Run 3 features in parallel (default concurrency)
419
- npx murmur8 parallel user-auth dashboard notifications
463
+ npx murmur8 murm <slug-a> <slug-b> <slug-c>
420
464
 
421
465
  # Preview what would happen without executing
422
- npx murmur8 parallel user-auth dashboard --dry-run
466
+ npx murmur8 murm <slug-a> <slug-b> --dry-run
423
467
 
424
468
  # Limit concurrent pipelines
425
- npx murmur8 parallel feat-a feat-b feat-c feat-d --max-concurrency=2
469
+ npx murmur8 murm <slug-a> <slug-b> <slug-c> <slug-d> --max-concurrency=2
426
470
 
427
471
  # Check status of running pipelines
428
- npx murmur8 parallel status
472
+ npx murmur8 murm status
429
473
 
430
474
  # Skip pre-flight feature validation
431
- npx murmur8 parallel user-auth dashboard --skip-preflight
475
+ npx murmur8 murm <slug-a> <slug-b> --skip-preflight
432
476
 
433
477
  # Clean up completed/aborted worktrees
434
- npx murmur8 parallel cleanup
478
+ npx murmur8 murm cleanup
435
479
  ```
436
480
 
437
481
  ### Pre-flight Batch Validation (v2.8)
@@ -439,7 +483,7 @@ npx murmur8 parallel cleanup
439
483
  Before parallel execution, the system validates the batch to prevent wasted resources:
440
484
 
441
485
  ```
442
- $ npx murmur8 parallel feat-a feat-b feat-c --dry-run
486
+ $ npx murmur8 murm feat-a feat-b feat-c --dry-run
443
487
 
444
488
  Pre-flight Validation
445
489
  =====================
@@ -484,11 +528,11 @@ Suggested commands:
484
528
 
485
529
  ### Configuration
486
530
 
487
- The parallel module is **CLI-agnostic** — configure it to work with different AI coding tools:
531
+ The murmuration module is **CLI-agnostic** — configure it to work with different AI coding tools:
488
532
 
489
533
  ```bash
490
534
  # View current configuration
491
- npx murmur8 parallel-config
535
+ npx murmur8 murm-config
492
536
 
493
537
  # Output:
494
538
  # cli: npx claude
@@ -496,7 +540,7 @@ npx murmur8 parallel-config
496
540
  # skillFlags: --no-commit
497
541
  # worktreeDir: .claude/worktrees
498
542
  # maxConcurrency: 3
499
- # queueFile: .claude/parallel-queue.json
543
+ # queueFile: .claude/murm-queue.json
500
544
  ```
501
545
 
502
546
  #### Configuration Options
@@ -511,31 +555,31 @@ npx murmur8 parallel-config
511
555
  | `maxFeatures` | `10` | Maximum features per batch |
512
556
  | `timeout` | `30` | Timeout per pipeline (minutes) |
513
557
  | `minDiskSpaceMB` | `500` | Minimum disk space warning threshold |
514
- | `queueFile` | `.claude/parallel-queue.json` | State persistence file |
558
+ | `queueFile` | `.claude/murm-queue.json` | State persistence file |
515
559
 
516
560
  #### Examples for Different CLIs
517
561
 
518
562
  ```bash
519
563
  # Claude Code (default)
520
- npx murmur8 parallel-config set cli "npx claude"
521
- npx murmur8 parallel-config set skill "/implement-feature"
564
+ npx murmur8 murm-config set cli "npx claude"
565
+ npx murmur8 murm-config set skill "/implement-feature"
522
566
 
523
567
  # Cursor
524
- npx murmur8 parallel-config set cli "cursor"
525
- npx murmur8 parallel-config set skill "composer"
526
- npx murmur8 parallel-config set skillFlags ""
568
+ npx murmur8 murm-config set cli "cursor"
569
+ npx murmur8 murm-config set skill "composer"
570
+ npx murmur8 murm-config set skillFlags ""
527
571
 
528
572
  # Aider
529
- npx murmur8 parallel-config set cli "aider"
530
- npx murmur8 parallel-config set skill "--message"
531
- npx murmur8 parallel-config set skillFlags "implement feature:"
573
+ npx murmur8 murm-config set cli "aider"
574
+ npx murmur8 murm-config set skill "--message"
575
+ npx murmur8 murm-config set skillFlags "implement feature:"
532
576
 
533
577
  # Custom agent script
534
- npx murmur8 parallel-config set cli "./my-agent.sh"
535
- npx murmur8 parallel-config set skill "run"
578
+ npx murmur8 murm-config set cli "./my-agent.sh"
579
+ npx murmur8 murm-config set skill "run"
536
580
 
537
581
  # Reset to defaults
538
- npx murmur8 parallel-config reset
582
+ npx murmur8 murm-config reset
539
583
  ```
540
584
 
541
585
  ### State Management
@@ -543,10 +587,10 @@ npx murmur8 parallel-config reset
543
587
  Each feature progresses through these states:
544
588
 
545
589
  ```
546
- parallel_queued → worktree_created → parallel_running → merge_pending → parallel_complete
547
- │ │
548
- ▼ ▼
549
- parallel_failed merge_conflict
590
+ murm_queued → worktree_created → murm_running → merge_pending → murm_complete
591
+ │ │
592
+ ▼ ▼
593
+ murm_failed merge_conflict
550
594
  ```
551
595
 
552
596
  - **Successful features**: Merged to main, worktree cleaned up
package/SKILL.md CHANGED
@@ -189,6 +189,8 @@ historyEntry = {
189
189
 
190
190
  ## Step 6: Spawn Alex Agent
191
191
 
192
+ **Announce:** `} Alex — creating feature spec`
193
+
192
194
  **History:** Record `stages.alex.startedAt` before spawning.
193
195
 
194
196
  **Runtime prompt:** `.blueprint/prompts/alex-runtime.md`
@@ -281,6 +283,8 @@ Then continue with your task.
281
283
 
282
284
  ## Step 7: Spawn Cass Agent
283
285
 
286
+ **Announce:** ` } Cass — writing user stories`
287
+
284
288
  **History:** Record `stages.cass.startedAt` before spawning.
285
289
 
286
290
  **Runtime prompt:** `.blueprint/prompts/cass-runtime.md`
@@ -379,6 +383,8 @@ Then continue with your task.
379
383
 
380
384
  ## Step 8: Spawn Nigel Agent
381
385
 
386
+ **Announce:** ` } Nigel — building tests`
387
+
382
388
  **History:** Record `stages.nigel.startedAt` before spawning.
383
389
 
384
390
  **Runtime prompt:** `.blueprint/prompts/nigel-runtime.md`
@@ -480,6 +486,8 @@ Then continue with your task.
480
486
 
481
487
  ## Step 9: Spawn Codey Agent (Plan)
482
488
 
489
+ **Announce:** ` } Codey — drafting implementation plan`
490
+
483
491
  **History:** Record `stages.codeyPlan.startedAt` before spawning.
484
492
 
485
493
  **Runtime prompt:** `.blueprint/prompts/codey-plan-runtime.md`
@@ -536,6 +544,8 @@ For detailed guidance, see: .blueprint/agents/AGENT_DEVELOPER_CODEY.md
536
544
 
537
545
  ## Step 10: Spawn Codey Agent (Implement)
538
546
 
547
+ **Announce:** ` } Codey — implementing feature`
548
+
539
549
  **History:** Record `stages.codeyImplement.startedAt` before spawning.
540
550
 
541
551
  **Runtime prompt:** `.blueprint/prompts/codey-implement-runtime.md`
@@ -631,7 +641,13 @@ historyEntry.commitHash = "{hash}";
631
641
 
632
642
  **Display summary:**
633
643
  ```
634
- ## Completed
644
+ } Alex — creating feature spec ✓
645
+ } Cass — writing user stories ✓
646
+ } Nigel — building tests ✓
647
+ } Codey — drafting plan ✓
648
+ } Codey — implementing feature ✓
649
+
650
+ ## Landed
635
651
  - feature_{slug}
636
652
  - Stories: N
637
653
  - Tests: N (all passing)
package/bin/cli.js CHANGED
@@ -22,18 +22,18 @@ const {
22
22
  formatStatus,
23
23
  getDefaultConfig,
24
24
  splitByLimit,
25
- runParallel,
25
+ runMurm,
26
26
  loadQueue,
27
27
  cleanupWorktrees,
28
- readParallelConfig,
29
- writeParallelConfig,
30
- getDefaultParallelConfig,
31
- abortParallel,
28
+ readMurmConfig,
29
+ writeMurmConfig,
30
+ getDefaultMurmConfig,
31
+ abortMurm,
32
32
  getLockInfo,
33
33
  getDetailedStatus,
34
34
  formatDetailedStatus,
35
- rollbackParallel
36
- } = require('../src/parallel');
35
+ rollbackMurm
36
+ } = require('../src/murm');
37
37
 
38
38
  const args = process.argv.slice(2);
39
39
  const command = args[0];
@@ -170,30 +170,30 @@ const commands = {
170
170
  },
171
171
  description: 'View or modify project tech stack configuration'
172
172
  },
173
- 'parallel-config': {
173
+ 'murm-config': {
174
174
  fn: () => {
175
175
  if (subArg === 'set') {
176
176
  const key = args[2];
177
177
  const value = args[3];
178
178
  if (!key || !value) {
179
- console.error('Usage: parallel-config set <key> <value>');
179
+ console.error('Usage: murm-config set <key> <value>');
180
180
  console.error('Valid keys: cli, skill, skillFlags, worktreeDir, maxConcurrency, queueFile');
181
181
  process.exit(1);
182
182
  }
183
- const config = readParallelConfig();
183
+ const config = readMurmConfig();
184
184
  if (key === 'maxConcurrency') {
185
185
  config[key] = parseInt(value, 10);
186
186
  } else {
187
187
  config[key] = value;
188
188
  }
189
- writeParallelConfig(config);
189
+ writeMurmConfig(config);
190
190
  console.log(`Set ${key} = ${value}`);
191
191
  } else if (subArg === 'reset') {
192
- writeParallelConfig(getDefaultParallelConfig());
193
- console.log('Parallel configuration reset to defaults.');
192
+ writeMurmConfig(getDefaultMurmConfig());
193
+ console.log('Murmuration configuration reset to defaults.');
194
194
  } else {
195
- const config = readParallelConfig();
196
- console.log('Parallel Configuration\n');
195
+ const config = readMurmConfig();
196
+ console.log('Murmuration Configuration\n');
197
197
  console.log(` cli: ${config.cli}`);
198
198
  console.log(` skill: ${config.skill}`);
199
199
  console.log(` skillFlags: ${config.skillFlags}`);
@@ -203,10 +203,15 @@ const commands = {
203
203
  console.log(` timeout: ${config.timeout} min`);
204
204
  console.log(` minDiskSpaceMB: ${config.minDiskSpaceMB}`);
205
205
  console.log(` queueFile: ${config.queueFile}`);
206
- console.log('\nTo change: murmur8 parallel-config set <key> <value>');
206
+ console.log('\nTo change: murmur8 murm-config set <key> <value>');
207
+ console.log('Run pipelines: murmur8 murm <slug1> <slug2> ...');
207
208
  }
208
209
  },
209
- description: 'View or modify parallel pipeline configuration'
210
+ description: 'View or modify murmuration pipeline configuration'
211
+ },
212
+ 'parallel-config': {
213
+ fn: null, // alias — set below
214
+ description: 'View or modify murmuration pipeline configuration (alias for murm-config)'
210
215
  },
211
216
  parallel: {
212
217
  fn: async () => {
@@ -222,29 +227,29 @@ const commands = {
222
227
 
223
228
  if (!queue.features || queue.features.length === 0) {
224
229
  if (lock) {
225
- console.log(`Parallel execution in progress (PID: ${lock.pid})`);
230
+ console.log(`Murmuration execution in progress (PID: ${lock.pid})`);
226
231
  console.log(`Started: ${lock.startedAt}`);
227
232
  console.log(`Features: ${lock.features.join(', ')}`);
228
233
  } else {
229
- console.log('No parallel pipelines active.');
234
+ console.log('No murmuration pipelines active.');
230
235
  }
231
236
  return;
232
237
  }
233
238
 
234
- console.log('Parallel Pipeline Status\n');
239
+ console.log('Murmuration Pipeline Status\n');
235
240
  console.log(formatStatus(queue.features));
236
241
  const summary = {
237
- running: queue.features.filter(f => f.status === 'parallel_running').length,
238
- pending: queue.features.filter(f => f.status === 'parallel_queued').length,
239
- completed: queue.features.filter(f => f.status === 'parallel_complete').length,
240
- failed: queue.features.filter(f => f.status === 'parallel_failed').length,
242
+ running: queue.features.filter(f => f.status === 'murm_running').length,
243
+ pending: queue.features.filter(f => f.status === 'murm_queued').length,
244
+ completed: queue.features.filter(f => f.status === 'murm_complete').length,
245
+ failed: queue.features.filter(f => f.status === 'murm_failed').length,
241
246
  conflicts: queue.features.filter(f => f.status === 'merge_conflict').length
242
247
  };
243
248
  console.log(`\nRunning: ${summary.running} | Pending: ${summary.pending} | Completed: ${summary.completed} | Failed: ${summary.failed} | Conflicts: ${summary.conflicts}`);
244
249
 
245
250
  // Show log paths for running/failed
246
251
  const withLogs = queue.features.filter(f =>
247
- f.logPath && (f.status === 'parallel_running' || f.status === 'parallel_failed')
252
+ f.logPath && (f.status === 'murm_running' || f.status === 'murm_failed')
248
253
  );
249
254
  if (withLogs.length > 0) {
250
255
  console.log('\nLog files:');
@@ -256,17 +261,17 @@ const commands = {
256
261
  } else if (subArg === 'rollback') {
257
262
  const dryRunFlag = args.includes('--dry-run');
258
263
  const forceFlag = args.includes('--force');
259
- await rollbackParallel({ dryRun: dryRunFlag, force: forceFlag });
264
+ await rollbackMurm({ dryRun: dryRunFlag, force: forceFlag });
260
265
  } else if (subArg === 'cleanup') {
261
266
  const cleaned = await cleanupWorktrees();
262
267
  console.log(`Cleaned ${cleaned} worktree(s).`);
263
268
  } else if (subArg === 'abort') {
264
269
  const cleanupFlag = args.includes('--cleanup');
265
- await abortParallel({ cleanup: cleanupFlag });
270
+ await abortMurm({ cleanup: cleanupFlag });
266
271
  } else {
267
272
  const slugs = args.slice(1).filter(a => !a.startsWith('--') && !a.startsWith('-'));
268
273
  if (slugs.length === 0) {
269
- console.error('Usage: murmur8 parallel <slug1> <slug2> ... [options]');
274
+ console.error('Usage: murmur8 murm <slug1> <slug2> ... [options]');
270
275
  console.error('\nOptions:');
271
276
  console.error(' --dry-run Preview execution plan without running');
272
277
  console.error(' --yes, -y Skip confirmation prompt');
@@ -275,9 +280,9 @@ const commands = {
275
280
  console.error(' --skip-preflight Skip feature validation checks');
276
281
  console.error(' --max-concurrency=N Set max parallel pipelines (default: 3)');
277
282
  console.error('\nSubcommands:');
278
- console.error(' parallel status Show status of all pipelines');
279
- console.error(' parallel abort Stop all running pipelines');
280
- console.error(' parallel cleanup Remove completed/aborted worktrees');
283
+ console.error(' murm status Show status of all pipelines');
284
+ console.error(' murm abort Stop all running pipelines');
285
+ console.error(' murm cleanup Remove completed/aborted worktrees');
281
286
  process.exit(1);
282
287
  }
283
288
 
@@ -292,18 +297,31 @@ const commands = {
292
297
  if (maxFlag) {
293
298
  options.maxConcurrency = parseInt(maxFlag.split('=')[1], 10);
294
299
  }
295
- const result = await runParallel(slugs, options);
300
+ const result = await runMurm(slugs, options);
296
301
  process.exit(result.success ? 0 : 1);
297
302
  }
298
303
  },
299
304
  description: 'Run multiple feature pipelines in parallel using git worktrees'
300
305
  },
306
+ murm: {
307
+ fn: null, // alias — set below
308
+ description: 'Run multiple feature pipelines in parallel (murmuration)'
309
+ },
310
+ murmuration: {
311
+ fn: null, // alias — set below
312
+ description: 'Run multiple feature pipelines in parallel (murmuration)'
313
+ },
301
314
  help: {
302
315
  fn: showHelp,
303
316
  description: 'Show this help message'
304
317
  }
305
318
  };
306
319
 
320
+ // Wire aliases
321
+ commands.murm.fn = commands.parallel.fn;
322
+ commands.murmuration.fn = commands.parallel.fn;
323
+ commands['parallel-config'].fn = commands['murm-config'].fn;
324
+
307
325
  function showHelp() {
308
326
  console.log(`
309
327
  murmur8 - Multi-agent workflow framework
@@ -335,23 +353,26 @@ Commands:
335
353
  stack-config View current tech stack configuration
336
354
  stack-config set <key> <value> Modify a config value (language, runtime, frameworks, etc.)
337
355
  stack-config reset Reset tech stack configuration to defaults
338
- parallel <slugs...> Run multiple feature pipelines in parallel
339
- parallel <slugs...> --dry-run Show execution plan without running
340
- parallel <slugs...> --yes Skip confirmation prompt
341
- parallel <slugs...> --verbose Stream output to console
342
- parallel <slugs...> --skip-preflight Skip feature validation checks
343
- parallel status Show status of all parallel pipelines
344
- parallel status --detailed Show progress bars and stage info
345
- parallel abort Stop all running pipelines
346
- parallel abort --cleanup Stop all and remove worktrees
347
- parallel rollback Undo completed merges and cleanup failures
348
- parallel rollback --dry-run Preview what would be rolled back
349
- parallel cleanup Remove completed/aborted worktrees
350
- parallel-config View parallel pipeline configuration
351
- parallel-config set <key> <value> Modify config (cli, skill, skillFlags, etc.)
352
- parallel-config reset Reset parallel configuration to defaults
356
+ murm <slugs...> Run multiple feature pipelines in parallel (murmuration)
357
+ murm <slugs...> --dry-run Show execution plan without running
358
+ murm <slugs...> --yes Skip confirmation prompt
359
+ murm <slugs...> --verbose Stream output to console
360
+ murm <slugs...> --skip-preflight Skip feature validation checks
361
+ murm status Show status of all parallel pipelines
362
+ murm status --detailed Show progress bars and stage info
363
+ murm abort Stop all running pipelines
364
+ murm abort --cleanup Stop all and remove worktrees
365
+ murm rollback Undo completed merges and cleanup failures
366
+ murm rollback --dry-run Preview what would be rolled back
367
+ murm cleanup Remove completed/aborted worktrees
368
+ murm-config View murmuration pipeline configuration
369
+ murm-config set <key> <value> Modify config (cli, skill, skillFlags, etc.)
370
+ murm-config reset Reset murmuration configuration to defaults
353
371
  help Show this help message
354
372
 
373
+ Aliases: parallel, murmuration (same as murm)
374
+ parallel-config (same as murm-config)
375
+
355
376
  Examples:
356
377
  npx murmur8 init
357
378
  npx murmur8 update
@@ -360,7 +381,7 @@ Examples:
360
381
  npx murmur8 history
361
382
  npx murmur8 history --stats
362
383
  npx murmur8 insights --feedback
363
- npx murmur8 feedback-config
384
+ npx murmur8 murm user-auth dashboard --dry-run
364
385
  `);
365
386
  }
366
387
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "murmur8",
3
- "version": "3.5.0",
3
+ "version": "4.1.1",
4
4
  "description": "Multi-agent workflow framework for automated feature development",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -15,12 +15,13 @@
15
15
  "ai",
16
16
  "automation",
17
17
  "claude",
18
+ "copilot",
18
19
  "feature-development"
19
20
  ],
20
21
  "author": "NewmanJustice",
21
22
  "repository": {
22
23
  "type": "git",
23
- "url": "git+https://github.com/NewmanJustice/agent-workflow.git"
24
+ "url": "git+https://github.com/NewmanJustice/murmur8.git"
24
25
  },
25
26
  "license": "MIT",
26
27
  "engines": {
package/src/history.js CHANGED
@@ -1,6 +1,7 @@
1
1
  const fs = require('fs');
2
2
  const path = require('path');
3
3
  const readline = require('readline');
4
+ const { colorize } = require('./theme');
4
5
 
5
6
  const HISTORY_FILE = '.claude/pipeline-history.json';
6
7
 
@@ -104,17 +105,6 @@ function formatDate(isoString) {
104
105
  return date.toISOString().replace('T', ' ').slice(0, 19);
105
106
  }
106
107
 
107
- function colorize(text, color, useColor) {
108
- if (!useColor) return text;
109
- const colors = {
110
- green: '\x1b[32m',
111
- red: '\x1b[31m',
112
- yellow: '\x1b[33m',
113
- reset: '\x1b[0m'
114
- };
115
- return `${colors[color] || ''}${text}${colors.reset}`;
116
- }
117
-
118
108
  function displayHistory(options = {}) {
119
109
  const showAll = options.all || false;
120
110
  const useColor = options.color !== false && process.stdout.isTTY;
package/src/index.js CHANGED
@@ -82,6 +82,7 @@ const {
82
82
  displayStackConfig
83
83
  } = require('./stack');
84
84
  const tools = require('./tools');
85
+ const theme = require('./theme');
85
86
 
86
87
  module.exports = {
87
88
  init,
@@ -146,6 +147,8 @@ module.exports = {
146
147
  displayStackConfig,
147
148
  // Tools module (model native features)
148
149
  tools,
150
+ // Theme module (murmuration visual theming)
151
+ theme,
149
152
  // Interactive mode exports
150
153
  parseInteractiveFlags,
151
154
  shouldEnterInteractiveMode,