livepilot 1.9.21 → 1.9.23

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.
Files changed (110) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.mcpbignore +40 -0
  3. package/AGENTS.md +2 -2
  4. package/CHANGELOG.md +47 -0
  5. package/CONTRIBUTING.md +1 -1
  6. package/README.md +47 -72
  7. package/bin/livepilot.js +135 -0
  8. package/livepilot/.Codex-plugin/plugin.json +2 -2
  9. package/livepilot/.claude-plugin/plugin.json +2 -2
  10. package/livepilot/agents/livepilot-producer/AGENT.md +13 -0
  11. package/livepilot/commands/arrange.md +42 -14
  12. package/livepilot/commands/beat.md +68 -21
  13. package/livepilot/commands/evaluate.md +23 -13
  14. package/livepilot/commands/mix.md +35 -11
  15. package/livepilot/commands/perform.md +31 -19
  16. package/livepilot/commands/sounddesign.md +38 -17
  17. package/livepilot/skills/livepilot-arrangement/SKILL.md +2 -1
  18. package/livepilot/skills/livepilot-composition-engine/references/transition-archetypes.md +2 -2
  19. package/livepilot/skills/livepilot-core/SKILL.md +60 -4
  20. package/livepilot/skills/livepilot-core/references/device-atlas/distortion-and-character.md +11 -11
  21. package/livepilot/skills/livepilot-core/references/device-atlas/drums-and-percussion.md +25 -25
  22. package/livepilot/skills/livepilot-core/references/device-atlas/dynamics-and-punch.md +21 -21
  23. package/livepilot/skills/livepilot-core/references/device-atlas/eq-and-filtering.md +13 -13
  24. package/livepilot/skills/livepilot-core/references/device-atlas/midi-tools.md +13 -13
  25. package/livepilot/skills/livepilot-core/references/device-atlas/movement-and-modulation.md +5 -5
  26. package/livepilot/skills/livepilot-core/references/device-atlas/space-and-depth.md +16 -16
  27. package/livepilot/skills/livepilot-core/references/device-atlas/spectral-and-weird.md +40 -40
  28. package/livepilot/skills/livepilot-core/references/m4l-devices.md +3 -3
  29. package/livepilot/skills/livepilot-core/references/overview.md +4 -4
  30. package/livepilot/skills/livepilot-evaluation/SKILL.md +12 -8
  31. package/livepilot/skills/livepilot-evaluation/references/memory-promotion.md +2 -2
  32. package/livepilot/skills/livepilot-mix-engine/SKILL.md +1 -1
  33. package/livepilot/skills/livepilot-mix-engine/references/mix-moves.md +2 -2
  34. package/livepilot/skills/livepilot-mixing/SKILL.md +3 -1
  35. package/livepilot/skills/livepilot-notes/SKILL.md +2 -1
  36. package/livepilot/skills/livepilot-release/SKILL.md +15 -15
  37. package/livepilot/skills/livepilot-sound-design-engine/SKILL.md +2 -2
  38. package/livepilot/skills/livepilot-wonder/SKILL.md +62 -0
  39. package/livepilot.mcpb +0 -0
  40. package/m4l_device/livepilot_bridge.js +1 -1
  41. package/manifest.json +91 -0
  42. package/mcp_server/__init__.py +1 -1
  43. package/mcp_server/creative_constraints/__init__.py +6 -0
  44. package/mcp_server/creative_constraints/engine.py +277 -0
  45. package/mcp_server/creative_constraints/models.py +75 -0
  46. package/mcp_server/creative_constraints/tools.py +341 -0
  47. package/mcp_server/experiment/__init__.py +6 -0
  48. package/mcp_server/experiment/engine.py +213 -0
  49. package/mcp_server/experiment/models.py +120 -0
  50. package/mcp_server/experiment/tools.py +263 -0
  51. package/mcp_server/hook_hunter/__init__.py +5 -0
  52. package/mcp_server/hook_hunter/analyzer.py +342 -0
  53. package/mcp_server/hook_hunter/models.py +57 -0
  54. package/mcp_server/hook_hunter/tools.py +586 -0
  55. package/mcp_server/memory/taste_graph.py +261 -0
  56. package/mcp_server/memory/tools.py +88 -0
  57. package/mcp_server/mix_engine/critics.py +2 -2
  58. package/mcp_server/mix_engine/models.py +1 -1
  59. package/mcp_server/mix_engine/state_builder.py +2 -2
  60. package/mcp_server/musical_intelligence/__init__.py +8 -0
  61. package/mcp_server/musical_intelligence/detectors.py +421 -0
  62. package/mcp_server/musical_intelligence/phrase_critic.py +163 -0
  63. package/mcp_server/musical_intelligence/tools.py +221 -0
  64. package/mcp_server/preview_studio/__init__.py +5 -0
  65. package/mcp_server/preview_studio/engine.py +280 -0
  66. package/mcp_server/preview_studio/models.py +73 -0
  67. package/mcp_server/preview_studio/tools.py +423 -0
  68. package/mcp_server/runtime/session_kernel.py +96 -0
  69. package/mcp_server/runtime/tools.py +90 -1
  70. package/mcp_server/semantic_moves/__init__.py +13 -0
  71. package/mcp_server/semantic_moves/compiler.py +116 -0
  72. package/mcp_server/semantic_moves/mix_compilers.py +291 -0
  73. package/mcp_server/semantic_moves/mix_moves.py +157 -0
  74. package/mcp_server/semantic_moves/models.py +46 -0
  75. package/mcp_server/semantic_moves/performance_compilers.py +208 -0
  76. package/mcp_server/semantic_moves/performance_moves.py +81 -0
  77. package/mcp_server/semantic_moves/registry.py +32 -0
  78. package/mcp_server/semantic_moves/resolvers.py +126 -0
  79. package/mcp_server/semantic_moves/sound_design_compilers.py +266 -0
  80. package/mcp_server/semantic_moves/sound_design_moves.py +78 -0
  81. package/mcp_server/semantic_moves/tools.py +204 -0
  82. package/mcp_server/semantic_moves/transition_compilers.py +222 -0
  83. package/mcp_server/semantic_moves/transition_moves.py +76 -0
  84. package/mcp_server/server.py +10 -0
  85. package/mcp_server/session_continuity/__init__.py +6 -0
  86. package/mcp_server/session_continuity/models.py +86 -0
  87. package/mcp_server/session_continuity/tools.py +230 -0
  88. package/mcp_server/session_continuity/tracker.py +235 -0
  89. package/mcp_server/song_brain/__init__.py +6 -0
  90. package/mcp_server/song_brain/builder.py +477 -0
  91. package/mcp_server/song_brain/models.py +132 -0
  92. package/mcp_server/song_brain/tools.py +294 -0
  93. package/mcp_server/stuckness_detector/__init__.py +5 -0
  94. package/mcp_server/stuckness_detector/detector.py +400 -0
  95. package/mcp_server/stuckness_detector/models.py +66 -0
  96. package/mcp_server/stuckness_detector/tools.py +195 -0
  97. package/mcp_server/tools/_conductor.py +104 -6
  98. package/mcp_server/tools/analyzer.py +1 -1
  99. package/mcp_server/tools/devices.py +34 -0
  100. package/mcp_server/wonder_mode/__init__.py +6 -0
  101. package/mcp_server/wonder_mode/diagnosis.py +84 -0
  102. package/mcp_server/wonder_mode/engine.py +493 -0
  103. package/mcp_server/wonder_mode/session.py +114 -0
  104. package/mcp_server/wonder_mode/tools.py +285 -0
  105. package/package.json +2 -2
  106. package/remote_script/LivePilot/__init__.py +1 -1
  107. package/remote_script/LivePilot/browser.py +4 -1
  108. package/remote_script/LivePilot/devices.py +29 -0
  109. package/remote_script/LivePilot/tracks.py +11 -4
  110. package/scripts/generate_tool_catalog.py +131 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
3
3
  "name": "dreamrec-LivePilot",
4
- "description": "Agentic MCP production system for Ableton Live 12 — 237 tools, 32 domains",
4
+ "description": "Agentic MCP production system for Ableton Live 12 — 293 tools, 39 domains",
5
5
  "owner": {
6
6
  "name": "dreamrec",
7
7
  "email": "dreamrec@users.noreply.github.com"
@@ -9,8 +9,8 @@
9
9
  "plugins": [
10
10
  {
11
11
  "name": "livepilot",
12
- "description": "Agentic production system for Ableton Live 12 — 237 tools, 32 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
13
- "version": "1.9.21",
12
+ "description": "Agentic production system for Ableton Live 12 — 293 tools, 39 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
13
+ "version": "1.9.23",
14
14
  "author": {
15
15
  "name": "Pilot Studio"
16
16
  },
package/.mcpbignore ADDED
@@ -0,0 +1,40 @@
1
+ # Development files
2
+ .git
3
+ .git-backup-full
4
+ .github
5
+ .claude
6
+ .playwright-mcp
7
+ .pytest_cache
8
+ .venv
9
+ __pycache__
10
+
11
+ # Test and CI
12
+ tests/
13
+ scripts/
14
+ .github/
15
+
16
+ # Build artifacts
17
+ *.pyc
18
+ .DS_Store
19
+ *.egg-info
20
+
21
+ # Credentials and tokens
22
+ .mcpregistry_*
23
+ .env
24
+ .npmrc
25
+
26
+ # Docs and marketing (not needed at runtime)
27
+ docs/specs/
28
+ docs/social-banner.*
29
+ docs/screenshots/
30
+
31
+ # Large binary already in User Library after install
32
+ # m4l_device/LivePilot_Analyzer.amxd
33
+
34
+ # Dev config
35
+ .mcp.json
36
+ .npmignore
37
+ .editorconfig
38
+ CODE_OF_CONDUCT.md
39
+ CONTRIBUTING.md
40
+ SECURITY.md
package/AGENTS.md CHANGED
@@ -22,7 +22,7 @@
22
22
  ## Key Rules
23
23
  - ALL Live Object Model (LOM) calls must execute on Ableton's main thread via schedule_message queue
24
24
  - Live 12 minimum — use modern note API (add_new_notes, get_notes_extended, apply_note_modifications)
25
- - 236 tools across 31 domains: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, analyzer, automation, theory, generative, harmony, midi_io, perception, agent_os, composition, motif, research, planner, project_brain, runtime, evaluation, mix_engine, sound_design, transition_engine, reference_engine, translation_engine, performance_engine
25
+ - 293 tools across 39 domains: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, analyzer, automation, theory, generative, harmony, midi_io, perception, agent_os, composition, motif, research, planner, project_brain, runtime, evaluation, mix_engine, sound_design, transition_engine, reference_engine, translation_engine, performance_engine
26
26
  - JSON over TCP, newline-delimited, port 9878
27
27
  - Structured errors with codes: INDEX_ERROR, NOT_FOUND, INVALID_PARAM, STATE_ERROR, TIMEOUT, INTERNAL
28
28
 
@@ -43,4 +43,4 @@ When modifying .amxd attributes that Max editor won't persist (e.g., `openinpres
43
43
  4. Structure: 24-byte `ampf` header + `ptch` chunk + `mx@c` header + JSON patcher + frozen deps
44
44
 
45
45
  ## Tool Count
46
- Currently 236 tools. If adding/removing tools, update: README.md, package.json description, livepilot/.Codex-plugin/plugin.json, server.json, livepilot/skills/livepilot-core/SKILL.md, livepilot/skills/livepilot-core/references/overview.md, AGENTS.md, CHANGELOG.md, tests/test_tools_contract.py, docs/manual/index.md, docs/manual/tool-reference.md
46
+ Currently 257 tools. If adding/removing tools, update: README.md, package.json description, livepilot/.Codex-plugin/plugin.json, server.json, livepilot/skills/livepilot-core/SKILL.md, livepilot/skills/livepilot-core/references/overview.md, AGENTS.md, CHANGELOG.md, tests/test_tools_contract.py, docs/manual/index.md, docs/manual/tool-reference.md
package/CHANGELOG.md CHANGED
@@ -1,5 +1,52 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.23-wonder-v1.5 — Wonder Mode V1.5: Stuck-Rescue Workflow (April 2026)
4
+
5
+ ### Wonder Mode Redesign (292->293 tools)
6
+ - **feat(wonder_mode):** Diagnosis-first workflow — stuckness detection drives variant generation
7
+ - **feat(wonder_mode):** Honest variant labeling — `analytical_only: true` for non-executable variants
8
+ - **feat(wonder_mode):** Real distinctness enforcement — variants must differ by move, family, or plan shape
9
+ - **feat(wonder_mode):** WonderSession lifecycle — diagnosis -> variants -> preview -> commit/discard
10
+ - **feat(wonder_mode):** `discard_wonder_session` tool — reject all variants, keep creative thread open
11
+ - **feat(preview_studio):** Wonder-aware preview — accepts `wonder_session_id`, refuses analytical variants
12
+ - **feat(preview_studio):** Commit lifecycle hooks — records outcome to continuity and taste
13
+ - **feat(session_continuity):** No more premature turn recording — only commit/reject record turns
14
+ - **feat(skills):** New `livepilot-wonder` skill with trigger conditions and honesty rules
15
+
16
+ ## 1.9.23 — Stage 2: The Magic Layer (April 2026)
17
+
18
+ ### Wonder Mode Rebuild
19
+ - **feat(wonder_mode):** Full engine rebuild — variants now built from real semantic moves matched by keyword+taste scoring, not templates
20
+ - **feat(wonder_mode):** Ranking uses bell-curve novelty centered on user's novelty_band, sacred element penalty, and coherence scoring
21
+ - **feat(wonder_mode):** Taste fit uses full TasteGraph (family preference, dimension alignment, anti-preferences, risk alignment)
22
+ - **feat(wonder_mode):** Each variant carries `targets_snapshot`, `compiled_plan`, and `score_breakdown` with all 4 component scores
23
+ - **breaking(wonder_mode):** Removed `generate_wonder_variants` tool (redundant with `enter_wonder_mode`)
24
+
25
+ ### New Tools (10 new, -1 removed = net +9, 283→292)
26
+ - **feat(preview_studio):** `render_preview_variant` — render a short preview of a variant using Ableton's undo system
27
+ - **feat(hook_hunter):** `detect_hook_neglect` — check if a strong hook is underused across sections
28
+ - **feat(hook_hunter):** `compare_phrase_impact` — compare emotional impact across multiple sections
29
+ - **feat(stuckness_detector):** `start_rescue_workflow` — structured step-by-step rescue plan for a specific stuckness type
30
+ - **feat(wonder_mode):** `rank_wonder_variants` — rank wonder variants by taste + identity + phrase impact
31
+ - **feat(session_continuity):** `open_creative_thread` — open a new creative thread for exploration
32
+ - **feat(session_continuity):** `list_open_creative_threads` — list all open non-stale creative threads
33
+ - **feat(session_continuity):** `explain_preference_vs_identity` — explain taste vs identity tension for a candidate
34
+ - **feat(creative_constraints):** `generate_constrained_variants` — generate triptych variants under active constraints
35
+ - **feat(creative_constraints):** `generate_reference_inspired_variants` — generate variants inspired by distilled reference principles
36
+
37
+ ### Fixes
38
+ - **fix(wonder_mode):** Fixed taste graph access to use session-scoped lifespan context instead of creating fresh stores
39
+ - **fix(session_continuity):** Fixed taste graph access to match preview_studio pattern
40
+
41
+ ## 1.9.22 — Skill & Command Overhaul (April 2026)
42
+
43
+ ### Skill Updates
44
+ - **feat(beat):** Added Step 0 "Session Prep" — for fresh projects, deletes all tracks and loads M4L Analyzer on master before starting. Includes perception check (Step 11) with spectral balance verification.
45
+ - **feat(mix):** Added analyzer auto-load (Step 2), spectral targets by genre (Step 6), mandatory meter verification after every change (Step 8), capture+analyze loop (Step 11)
46
+ - **feat(sounddesign):** Added mandatory `value_string` verification (Step 5), perception check (Step 11), organic movement with perlin curves (Step 8)
47
+ - **feat(arrange):** Added motif detection (Step 3), gesture template execution (Step 7), perlin organic movement (Step 8), emotional arc verification (Step 9), LRA check for dynamic range (Step 10)
48
+ - **feat(evaluate):** Added analyzer auto-load (Step 2), full perception snapshot with track meters (Step 6), capture+analyze offline as ground truth option
49
+
3
50
  ## 1.9.21 — Verification Discipline Pass (April 2026)
4
51
 
5
52
  ### Systemic Fixes
package/CONTRIBUTING.md CHANGED
@@ -98,7 +98,7 @@ Prefix with `fix:`, `feat:`, `docs:`, `refactor:`, `test:`, or `chore:`.
98
98
 
99
99
  ## Tool Count Discipline
100
100
 
101
- Currently **236 tools**. If you add or remove a `@mcp.tool()` decorator, update all of these files:
101
+ Currently **293 tools**. If you add or remove a `@mcp.tool()` decorator, update all of these files:
102
102
 
103
103
  - `README.md`
104
104
  - `CLAUDE.md`
package/README.md CHANGED
@@ -17,7 +17,7 @@
17
17
 
18
18
  <p align="center">
19
19
  An agentic production system for Ableton Live 12.<br>
20
- 236 tools. Device atlas. Spectral perception. Technique memory.
20
+ 293 tools. Device atlas. Spectral perception. Technique memory.
21
21
  </p>
22
22
 
23
23
  <br>
@@ -49,8 +49,8 @@
49
49
  │ └───────────────────┼───────────────────┘ │
50
50
  │ ▼ │
51
51
  │ ┌─────────────────┐ │
52
- │ │ 236 MCP Tools │ │
53
- │ │ 31 domains │ │
52
+ │ │ 293 MCP Tools │ │
53
+ │ │ 39 domains │ │
54
54
  │ └────────┬────────┘ │
55
55
  │ │ │
56
56
  │ Remote Script ──┤── TCP 9878 │
@@ -71,7 +71,7 @@ via a Max for Live device.
71
71
  The **memory** gives it history — a searchable library of production decisions
72
72
  that persists across sessions.
73
73
 
74
- All three feed into 236 deterministic tools that execute on Ableton's main thread.
74
+ All three feed into 293 deterministic tools that execute on Ableton's main thread.
75
75
 
76
76
  <br>
77
77
 
@@ -79,7 +79,7 @@ All three feed into 236 deterministic tools that execute on Ableton's main threa
79
79
 
80
80
  ## Tools
81
81
 
82
- 236 tools across 31 domains. Highlights below — [full catalog here](docs/manual/tool-catalog.md).
82
+ 293 tools across 39 domains. Highlights below — [full catalog here](docs/manual/tool-catalog.md).
83
83
 
84
84
  <br>
85
85
 
@@ -99,13 +99,13 @@ All three feed into 236 deterministic tools that execute on Ableton's main threa
99
99
 
100
100
  <br>
101
101
 
102
- ### Perception — 29 tools `[M4L]`
102
+ ### Perception — 30 tools `[M4L]`
103
103
 
104
104
  The M4L Analyzer sits on the master track. UDP 9880 carries spectral data
105
105
  from Max to the server. OSC 9881 sends commands back.
106
106
 
107
107
  > [!TIP]
108
- > All 207 core tools work without the analyzer — it adds 29 more and closes the feedback loop.
108
+ > All 207 core tools work without the analyzer — it adds 30 more and closes the feedback loop.
109
109
 
110
110
  ```
111
111
  SPECTRAL ─────── 8-band frequency decomposition (sub → air)
@@ -322,7 +322,7 @@ read_audio_metadata Format, duration, sample rate, tags
322
322
 
323
323
  <br>
324
324
 
325
- > **[View all 236 tools →](docs/manual/tool-catalog.md)**
325
+ > **[View all 293 tools →](docs/manual/tool-catalog.md)**
326
326
 
327
327
  <br>
328
328
 
@@ -330,123 +330,98 @@ read_audio_metadata Format, duration, sample rate, tags
330
330
 
331
331
  ## Install
332
332
 
333
- ### 1. Remote Script
333
+ ### Easiest: Claude Desktop Extension (1 click)
334
334
 
335
- ```bash
336
- npx livepilot --install
337
- ```
335
+ Download [`livepilot.mcpb`](https://github.com/dreamrec/LivePilot/releases/latest) and double-click it.
336
+ Claude Desktop installs everything automatically. Then:
338
337
 
339
- Restart Ableton Preferences → Link, Tempo & MIDI → Control Surface → **LivePilot**
338
+ 1. Open Ableton Live 12
339
+ 2. Preferences → Link, Tempo & MIDI → Control Surface → **LivePilot**
340
+ 3. Start chatting
340
341
 
341
- ### 2. MCP Client
342
+ > [!TIP]
343
+ > The Desktop Extension auto-installs the Remote Script and M4L Analyzer on first launch.
342
344
 
343
- <details open>
344
- <summary><strong>Claude Code</strong></summary>
345
+ ### Quick: One Command Setup
345
346
 
346
347
  ```bash
347
- claude mcp add LivePilot -- npx livepilot
348
+ npx livepilot --setup
348
349
  ```
349
350
 
350
- Plugin (adds skills, slash commands, producer agent):
351
+ This runs the full setup wizard: checks Python, installs the Remote Script, creates the Python environment, copies the M4L Analyzer, and tests the Ableton connection.
352
+
353
+ ### Manual: Step by Step
354
+
355
+ <details>
356
+ <summary><strong>1. Remote Script</strong></summary>
351
357
 
352
358
  ```bash
353
- claude plugin add github:dreamrec/LivePilot/plugin
359
+ npx livepilot --install
354
360
  ```
355
361
 
362
+ Restart Ableton → Preferences → Link, Tempo & MIDI → Control Surface → **LivePilot**
363
+
356
364
  </details>
357
365
 
358
366
  <details>
359
- <summary><strong>Claude Desktop (macOS)</strong></summary>
367
+ <summary><strong>2. MCP Client</strong></summary>
360
368
 
361
- `~/Library/Application Support/Claude/claude_desktop_config.json`:
369
+ **Claude Code:**
370
+ ```bash
371
+ claude mcp add LivePilot -- npx livepilot
372
+ claude plugin add github:dreamrec/LivePilot/plugin
373
+ ```
362
374
 
375
+ **Claude Desktop (macOS)** — `~/Library/Application Support/Claude/claude_desktop_config.json`:
363
376
  ```json
364
377
  {
365
378
  "mcpServers": {
366
- "LivePilot": {
367
- "command": "npx",
368
- "args": ["livepilot"]
369
- }
379
+ "LivePilot": { "command": "npx", "args": ["livepilot"] }
370
380
  }
371
381
  }
372
382
  ```
373
383
 
374
- </details>
375
-
376
- <details>
377
- <summary><strong>Claude Desktop (Windows)</strong></summary>
378
-
384
+ **Claude Desktop (Windows):**
379
385
  ```cmd
380
386
  npm install -g livepilot
381
387
  livepilot --install
382
388
  ```
383
-
384
389
  `%APPDATA%\Claude\claude_desktop_config.json`:
385
-
386
390
  ```json
387
391
  {
388
392
  "mcpServers": {
389
- "LivePilot": {
390
- "command": "livepilot"
391
- }
393
+ "LivePilot": { "command": "livepilot" }
392
394
  }
393
395
  }
394
396
  ```
395
397
 
396
- </details>
397
-
398
- <details>
399
- <summary><strong>Cursor</strong></summary>
400
-
401
- `.cursor/mcp.json`:
402
-
398
+ **Cursor** — `.cursor/mcp.json`:
403
399
  ```json
404
400
  {
405
401
  "mcpServers": {
406
- "LivePilot": {
407
- "command": "npx",
408
- "args": ["livepilot"]
409
- }
402
+ "LivePilot": { "command": "npx", "args": ["livepilot"] }
410
403
  }
411
404
  }
412
405
  ```
413
406
 
414
- </details>
415
-
416
- <details>
417
- <summary><strong>VS Code / Windsurf</strong></summary>
418
-
419
- VS Code — `.vscode/mcp.json`:
420
-
407
+ **VS Code** — `.vscode/mcp.json`:
421
408
  ```json
422
409
  {
423
410
  "servers": {
424
- "LivePilot": {
425
- "command": "npx",
426
- "args": ["livepilot"]
427
- }
428
- }
429
- }
430
- ```
431
-
432
- Windsurf — `~/.codeium/windsurf/mcp_config.json`:
433
-
434
- ```json
435
- {
436
- "mcpServers": {
437
- "LivePilot": {
438
- "command": "npx",
439
- "args": ["livepilot"]
440
- }
411
+ "LivePilot": { "command": "npx", "args": ["livepilot"] }
441
412
  }
442
413
  }
443
414
  ```
444
415
 
445
416
  </details>
446
417
 
447
- ### 3. M4L Analyzer (optional)
418
+ <details>
419
+ <summary><strong>3. M4L Analyzer (optional)</strong></summary>
448
420
 
449
- Drag `LivePilot_Analyzer.amxd` onto the master track.
421
+ Drag `LivePilot_Analyzer.amxd` onto the master track for real-time spectral analysis.
422
+ The `--setup` wizard and Desktop Extension do this automatically.
423
+
424
+ </details>
450
425
 
451
426
  Unlocks 29 additional tools: spectral analysis, key detection,
452
427
  sample manipulation, deep device introspection, plugin parameter mapping.
package/bin/livepilot.js CHANGED
@@ -485,6 +485,109 @@ async function setupFlucoma() {
485
485
  }
486
486
  }
487
487
 
488
+ // ---------------------------------------------------------------------------
489
+ // Setup wizard — unified installer
490
+ // ---------------------------------------------------------------------------
491
+
492
+ async function setup() {
493
+ console.log("LivePilot Setup Wizard v%s", PKG.version);
494
+ console.log("═".repeat(50));
495
+ console.log("");
496
+
497
+ let ok = true;
498
+
499
+ // 1. Python
500
+ console.log("Step 1/5: Checking Python...");
501
+ const pyInfo = findPython();
502
+ if (pyInfo) {
503
+ console.log(" ✓ %s", pyInfo.version);
504
+ } else {
505
+ console.log(" ✗ Python >= 3.9 not found");
506
+ console.log(" Install: brew install python@3.12 (macOS) or python.org (Windows)");
507
+ ok = false;
508
+ }
509
+
510
+ // 2. Install Remote Script
511
+ console.log("");
512
+ console.log("Step 2/5: Installing Remote Script...");
513
+ try {
514
+ const { install } = require(path.join(ROOT, "installer", "install.js"));
515
+ install();
516
+ console.log(" ✓ Remote Script installed");
517
+ } catch (err) {
518
+ console.log(" ✗ Failed: %s", err.message);
519
+ ok = false;
520
+ }
521
+
522
+ // 3. Bootstrap Python venv
523
+ console.log("");
524
+ console.log("Step 3/5: Setting up Python environment...");
525
+ if (pyInfo) {
526
+ try {
527
+ ensureVenv(pyInfo.cmd, pyInfo.prefixArgs);
528
+ console.log(" ✓ Virtual environment ready");
529
+ } catch (err) {
530
+ console.log(" ✗ Failed: %s", err.message);
531
+ ok = false;
532
+ }
533
+ } else {
534
+ console.log(" ⊘ Skipped (no Python)");
535
+ }
536
+
537
+ // 4. Copy M4L Analyzer to User Library
538
+ console.log("");
539
+ console.log("Step 4/5: Installing M4L Analyzer...");
540
+ const analyzerSrc = path.join(ROOT, "m4l_device", "LivePilot_Analyzer.amxd");
541
+ if (fs.existsSync(analyzerSrc)) {
542
+ const home = require("os").homedir();
543
+ let dest;
544
+ if (process.platform === "darwin") {
545
+ dest = path.join(home, "Music", "Ableton", "User Library", "Presets",
546
+ "Audio Effects", "Max Audio Effect");
547
+ } else {
548
+ dest = path.join(home, "Documents", "Ableton", "User Library", "Presets",
549
+ "Audio Effects", "Max Audio Effect");
550
+ }
551
+ try {
552
+ fs.mkdirSync(dest, { recursive: true });
553
+ fs.copyFileSync(analyzerSrc, path.join(dest, "LivePilot_Analyzer.amxd"));
554
+ console.log(" ✓ Analyzer copied to %s", dest);
555
+ } catch (err) {
556
+ console.log(" ✗ Failed: %s", err.message);
557
+ }
558
+ } else {
559
+ console.log(" ⊘ Analyzer not found in package (optional)");
560
+ }
561
+
562
+ // 5. Connection test
563
+ console.log("");
564
+ console.log("Step 5/5: Testing Ableton connection...");
565
+ const reachable = await checkStatus();
566
+ if (reachable) {
567
+ console.log(" ✓ Ableton Live is running and reachable");
568
+ } else {
569
+ console.log(" ⊘ Ableton not running (start it and select LivePilot as Control Surface)");
570
+ }
571
+
572
+ // Summary
573
+ console.log("");
574
+ console.log("═".repeat(50));
575
+ if (ok) {
576
+ console.log("✓ Setup complete! Next steps:");
577
+ console.log("");
578
+ console.log(" 1. Open Ableton Live 12");
579
+ console.log(" 2. Go to Preferences → Link, Tempo & MIDI");
580
+ console.log(" 3. Set Control Surface to 'LivePilot'");
581
+ console.log(" 4. Start making music with AI!");
582
+ console.log("");
583
+ console.log(" Claude Code: claude mcp add LivePilot -- npx livepilot");
584
+ console.log(" Claude Desktop: Already configured if using Desktop Extension");
585
+ } else {
586
+ console.log("⚠ Setup completed with issues. Run 'npx livepilot --doctor' for details.");
587
+ }
588
+ }
589
+
590
+
488
591
  // ---------------------------------------------------------------------------
489
592
  // Main
490
593
  // ---------------------------------------------------------------------------
@@ -507,6 +610,7 @@ async function main() {
507
610
  console.log("");
508
611
  console.log("Commands:");
509
612
  console.log(" (none) Start the MCP server");
613
+ console.log(" --setup Full setup wizard (install + configure + test)");
510
614
  console.log(" --install Install Remote Script into Ableton Live");
511
615
  console.log(" --uninstall Remove Remote Script from Ableton Live");
512
616
  console.log(" --status Check if Ableton Live is reachable");
@@ -553,6 +657,37 @@ async function main() {
553
657
  process.exit(passed ? 0 : 1);
554
658
  }
555
659
 
660
+ // --setup (unified installer wizard)
661
+ if (flag === "--setup") {
662
+ await setup();
663
+ return;
664
+ }
665
+
666
+ // Auto-install Remote Script when launched from Desktop Extension
667
+ if (process.env.LIVEPILOT_AUTO_INSTALL === "true") {
668
+ try {
669
+ const { install } = require(path.join(ROOT, "installer", "install.js"));
670
+ const { findAbletonPaths } = require(path.join(ROOT, "installer", "paths.js"));
671
+ const candidates = findAbletonPaths();
672
+ if (candidates.length > 0) {
673
+ // Check if already installed
674
+ const target = path.join(candidates[0].path, "LivePilot");
675
+ if (!fs.existsSync(target)) {
676
+ console.error("LivePilot: auto-installing Remote Script to %s", candidates[0].path);
677
+ install();
678
+ console.error("LivePilot: Remote Script installed. Select 'LivePilot' in Ableton > Preferences > Link, Tempo & MIDI > Control Surface.");
679
+ }
680
+ }
681
+ } catch (err) {
682
+ console.error("LivePilot: auto-install skipped (%s)", err.message);
683
+ }
684
+ }
685
+
686
+ // Custom TCP port from Desktop Extension config
687
+ if (process.env.LIVEPILOT_TCP_PORT && process.env.LIVEPILOT_TCP_PORT !== "9878") {
688
+ process.env.LIVE_MCP_PORT = process.env.LIVEPILOT_TCP_PORT;
689
+ }
690
+
556
691
  // Default: start MCP server
557
692
  const pyInfo = findPython();
558
693
  if (!pyInfo) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "livepilot",
3
- "version": "1.9.21",
4
- "description": "Agentic production system for Ableton Live 12 — 237 tools, 32 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
3
+ "version": "1.9.23",
4
+ "description": "Agentic production system for Ableton Live 12 — 293 tools, 39 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
5
5
  "author": {
6
6
  "name": "Pilot Studio"
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "livepilot",
3
- "version": "1.9.21",
4
- "description": "Agentic production system for Ableton Live 12 — 237 tools, 32 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
3
+ "version": "1.9.23",
4
+ "description": "Agentic production system for Ableton Live 12 — 293 tools, 39 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
5
5
  "author": {
6
6
  "name": "Pilot Studio"
7
7
  }
@@ -8,6 +8,7 @@ tools:
8
8
  - Read
9
9
  - Glob
10
10
  - Grep
11
+ - ToolSearch
11
12
  ---
12
13
 
13
14
  You are LivePilot Producer — an autonomous music production agent for Ableton Live 12 powered by Agent OS V1.
@@ -200,6 +201,7 @@ After loading any instrument:
200
201
  | Track volume? | `get_track_info` | `mixer.volume` > 0.5 for primary tracks |
201
202
  | Track not muted? | `get_track_info` | `mute: false` |
202
203
  | Master audible? | `get_master_track` | `volume` > 0.5 |
204
+ | Analyzer at end? | `get_master_track` | LivePilot_Analyzer is LAST device (after all effects) |
203
205
 
204
206
  ### Critical device loading rules:
205
207
 
@@ -283,6 +285,17 @@ Load the appropriate skill for domain-specific guidance:
283
285
  - **livepilot-performance-engine** — live performance safety constraints
284
286
  - **livepilot-evaluation** — universal before/after evaluation loop
285
287
 
288
+ ## Tool Access
289
+
290
+ MCP tools (all `mcp__livepilot__*` tools) should be available to you. If they are NOT in your tool namespace:
291
+
292
+ 1. Try using `ToolSearch` with query `"livepilot"` to discover and load them
293
+ 2. If that fails, **tell the user immediately**: "MCP tools not available in this subagent session"
294
+ 3. Do NOT fall back to reading code and planning — that wastes tokens
295
+ 4. Suggest running the task in the main conversation instead
296
+
297
+ **NEVER just read files and describe what you would do. You must call MCP tools to control Ableton.**
298
+
286
299
  ## Rules
287
300
 
288
301
  - Load relevant skills before starting domain-specific work
@@ -3,17 +3,45 @@ name: arrange
3
3
  description: Guided arrangement — build song structure with sections, transitions, and energy flow
4
4
  ---
5
5
 
6
- Guide the user through arranging their session into a full song structure.
7
-
8
- 1. **Read the session** — `get_session_info` to see all tracks and clips
9
- 2. **Analyze current structure** — `get_section_graph` to see inferred sections from scene names. If no sections, `get_scenes_info` for raw scene data.
10
- 3. **Ask about the target structure** — what form? (verse-chorus, AABA, build-drop, through-composed). What energy arc? (gradual build, peaks and valleys, flat)
11
- 4. **Plan the arrangement** — `plan_arrangement` with the target structure. Review the proposed section order and transitions.
12
- 5. **Build sections** — for each section, create or duplicate scenes, set scene names and colors. Use `duplicate_scene` for variations.
13
- 6. **Check transitions** — `analyze_transition(from_section, to_section)` for each adjacent pair. `score_transition` to evaluate quality.
14
- 7. **Plan weak transitions** — `plan_transition` for any scored below 0.6. Execute the suggested gestures (filter sweeps, energy ramps, rhythmic fills).
15
- 8. **Check emotional arc** — `get_emotional_arc` to verify the energy flow matches the target.
16
- 9. **Translation check** — `check_translation` to verify mono compatibility and spectral consistency across sections.
17
- 10. **Record to arrangement** — when the user is happy, guide them through `back_to_arranger` and recording the session performance to the timeline.
18
-
19
- Use the livepilot-composition-engine skill for section analysis and transition planning. Present the arrangement as a visual timeline to the user.
6
+ Guide the user through arranging their session using the V2 orchestration pipeline.
7
+
8
+ ## Orchestration Flow
9
+
10
+ 1. **Session kernel** — `get_session_kernel(request_text=<user's request>, mode="improve")`
11
+ 2. **Route** — `route_request(<user's request>)` for engine routes + semantic moves
12
+
13
+ ## Analysis Phase
14
+
15
+ 3. **Scene matrix** — `get_scene_matrix` for the full clip grid
16
+ 4. **Section purposes** — `infer_section_purposes` to understand what each scene is doing
17
+ 5. **Emotional arc** — `score_emotional_arc` does the song have build climax → resolve?
18
+ 6. **Repetition check** — `detect_repetition_fatigue` — are patterns overused?
19
+ 7. **Motif analysis** `get_motif_graph` for recurring patterns and fatigue risk
20
+ 8. **Role conflicts** — `detect_role_conflicts` to find competing tracks
21
+
22
+ ## Planning Phase
23
+
24
+ 9. **Ask about target** — what form? (verse-chorus, build-drop, through-composed). What energy arc?
25
+ 10. **Plan arrangement** — `plan_arrangement(target_bars, style)` for section blueprint
26
+ 11. **Propose moves** — `propose_next_best_move(request_text)` for arrangement semantic moves (e.g., `create_buildup_tension`, `smooth_scene_handoff`)
27
+ 12. **Preview** — `preview_semantic_move(move_id)` to see the gesture plan
28
+
29
+ ## Execution Phase
30
+
31
+ 13. **Build sections** — duplicate scenes, set names/colors, use `transform_motif` for melodic development
32
+ 14. **Apply gestures** — `apply_gesture_template` for transitions:
33
+ - `pre_arrival_vacuum` — energy suck before drops
34
+ - `harmonic_tint_rise` — filter opening for intros
35
+ - `re_entry_spotlight` — highlight returning elements
36
+ - `tension_ratchet` — stepped energy build
37
+ - `outro_decay_dissolve` — gradual dissolution
38
+ 15. **Add organic movement** — `apply_automation_shape(curve_type="perlin")` on filters/sends
39
+ 16. **Verify arc** — `score_emotional_arc` again to confirm improvement
40
+ 17. **Perception check** — `capture_audio` + `analyze_loudness` to verify LRA > 2 LU
41
+
42
+ ## Summary
43
+
44
+ 18. **Report** — "What I did / what improved / what I protected / what remains"
45
+ 19. **Session memory** — `add_session_memory` for arrangement decisions
46
+
47
+ For exploratory arrangement, use `create_experiment` to try multiple section orderings.