livepilot 1.9.22 → 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.
- package/.claude-plugin/marketplace.json +3 -3
- package/.mcpbignore +40 -0
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +38 -0
- package/CONTRIBUTING.md +1 -1
- package/README.md +47 -72
- package/bin/livepilot.js +135 -0
- package/livepilot/.Codex-plugin/plugin.json +2 -2
- package/livepilot/.claude-plugin/plugin.json +2 -2
- package/livepilot/agents/livepilot-producer/AGENT.md +13 -0
- package/livepilot/commands/arrange.md +42 -23
- package/livepilot/commands/mix.md +34 -19
- package/livepilot/commands/perform.md +31 -19
- package/livepilot/commands/sounddesign.md +38 -25
- package/livepilot/skills/livepilot-arrangement/SKILL.md +2 -1
- package/livepilot/skills/livepilot-composition-engine/references/transition-archetypes.md +2 -2
- package/livepilot/skills/livepilot-core/SKILL.md +60 -4
- package/livepilot/skills/livepilot-core/references/device-atlas/distortion-and-character.md +11 -11
- package/livepilot/skills/livepilot-core/references/device-atlas/drums-and-percussion.md +25 -25
- package/livepilot/skills/livepilot-core/references/device-atlas/dynamics-and-punch.md +21 -21
- package/livepilot/skills/livepilot-core/references/device-atlas/eq-and-filtering.md +13 -13
- package/livepilot/skills/livepilot-core/references/device-atlas/midi-tools.md +13 -13
- package/livepilot/skills/livepilot-core/references/device-atlas/movement-and-modulation.md +5 -5
- package/livepilot/skills/livepilot-core/references/device-atlas/space-and-depth.md +16 -16
- package/livepilot/skills/livepilot-core/references/device-atlas/spectral-and-weird.md +40 -40
- package/livepilot/skills/livepilot-core/references/m4l-devices.md +3 -3
- package/livepilot/skills/livepilot-core/references/overview.md +4 -4
- package/livepilot/skills/livepilot-evaluation/SKILL.md +12 -8
- package/livepilot/skills/livepilot-evaluation/references/memory-promotion.md +2 -2
- package/livepilot/skills/livepilot-mix-engine/SKILL.md +1 -1
- package/livepilot/skills/livepilot-mix-engine/references/mix-moves.md +2 -2
- package/livepilot/skills/livepilot-mixing/SKILL.md +3 -1
- package/livepilot/skills/livepilot-notes/SKILL.md +2 -1
- package/livepilot/skills/livepilot-release/SKILL.md +15 -15
- package/livepilot/skills/livepilot-sound-design-engine/SKILL.md +2 -2
- package/livepilot/skills/livepilot-wonder/SKILL.md +62 -0
- package/livepilot.mcpb +0 -0
- package/manifest.json +91 -0
- package/mcp_server/__init__.py +1 -1
- package/mcp_server/creative_constraints/__init__.py +6 -0
- package/mcp_server/creative_constraints/engine.py +277 -0
- package/mcp_server/creative_constraints/models.py +75 -0
- package/mcp_server/creative_constraints/tools.py +341 -0
- package/mcp_server/experiment/__init__.py +6 -0
- package/mcp_server/experiment/engine.py +213 -0
- package/mcp_server/experiment/models.py +120 -0
- package/mcp_server/experiment/tools.py +263 -0
- package/mcp_server/hook_hunter/__init__.py +5 -0
- package/mcp_server/hook_hunter/analyzer.py +342 -0
- package/mcp_server/hook_hunter/models.py +57 -0
- package/mcp_server/hook_hunter/tools.py +586 -0
- package/mcp_server/memory/taste_graph.py +261 -0
- package/mcp_server/memory/tools.py +88 -0
- package/mcp_server/mix_engine/critics.py +2 -2
- package/mcp_server/mix_engine/models.py +1 -1
- package/mcp_server/mix_engine/state_builder.py +2 -2
- package/mcp_server/musical_intelligence/__init__.py +8 -0
- package/mcp_server/musical_intelligence/detectors.py +421 -0
- package/mcp_server/musical_intelligence/phrase_critic.py +163 -0
- package/mcp_server/musical_intelligence/tools.py +221 -0
- package/mcp_server/preview_studio/__init__.py +5 -0
- package/mcp_server/preview_studio/engine.py +280 -0
- package/mcp_server/preview_studio/models.py +73 -0
- package/mcp_server/preview_studio/tools.py +423 -0
- package/mcp_server/runtime/session_kernel.py +96 -0
- package/mcp_server/runtime/tools.py +90 -1
- package/mcp_server/semantic_moves/__init__.py +13 -0
- package/mcp_server/semantic_moves/compiler.py +116 -0
- package/mcp_server/semantic_moves/mix_compilers.py +291 -0
- package/mcp_server/semantic_moves/mix_moves.py +157 -0
- package/mcp_server/semantic_moves/models.py +46 -0
- package/mcp_server/semantic_moves/performance_compilers.py +208 -0
- package/mcp_server/semantic_moves/performance_moves.py +81 -0
- package/mcp_server/semantic_moves/registry.py +32 -0
- package/mcp_server/semantic_moves/resolvers.py +126 -0
- package/mcp_server/semantic_moves/sound_design_compilers.py +266 -0
- package/mcp_server/semantic_moves/sound_design_moves.py +78 -0
- package/mcp_server/semantic_moves/tools.py +204 -0
- package/mcp_server/semantic_moves/transition_compilers.py +222 -0
- package/mcp_server/semantic_moves/transition_moves.py +76 -0
- package/mcp_server/server.py +10 -0
- package/mcp_server/session_continuity/__init__.py +6 -0
- package/mcp_server/session_continuity/models.py +86 -0
- package/mcp_server/session_continuity/tools.py +230 -0
- package/mcp_server/session_continuity/tracker.py +235 -0
- package/mcp_server/song_brain/__init__.py +6 -0
- package/mcp_server/song_brain/builder.py +477 -0
- package/mcp_server/song_brain/models.py +132 -0
- package/mcp_server/song_brain/tools.py +294 -0
- package/mcp_server/stuckness_detector/__init__.py +5 -0
- package/mcp_server/stuckness_detector/detector.py +400 -0
- package/mcp_server/stuckness_detector/models.py +66 -0
- package/mcp_server/stuckness_detector/tools.py +195 -0
- package/mcp_server/tools/_conductor.py +104 -6
- package/mcp_server/tools/analyzer.py +1 -1
- package/mcp_server/tools/devices.py +34 -0
- package/mcp_server/wonder_mode/__init__.py +6 -0
- package/mcp_server/wonder_mode/diagnosis.py +84 -0
- package/mcp_server/wonder_mode/engine.py +493 -0
- package/mcp_server/wonder_mode/session.py +114 -0
- package/mcp_server/wonder_mode/tools.py +285 -0
- package/package.json +2 -2
- package/remote_script/LivePilot/__init__.py +1 -1
- package/remote_script/LivePilot/browser.py +4 -1
- package/remote_script/LivePilot/devices.py +29 -0
- package/remote_script/LivePilot/tracks.py +11 -4
- 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 —
|
|
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 —
|
|
13
|
-
"version": "1.9.
|
|
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
|
-
-
|
|
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
|
|
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,43 @@
|
|
|
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
|
+
|
|
3
41
|
## 1.9.22 — Skill & Command Overhaul (April 2026)
|
|
4
42
|
|
|
5
43
|
### Skill Updates
|
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 **
|
|
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
|
-
|
|
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
|
-
│ │
|
|
53
|
-
│ │
|
|
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
|
|
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
|
-
|
|
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 —
|
|
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
|
|
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
|
|
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
|
|
333
|
+
### Easiest: Claude Desktop Extension (1 click)
|
|
334
334
|
|
|
335
|
-
|
|
336
|
-
|
|
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
|
-
|
|
338
|
+
1. Open Ableton Live 12
|
|
339
|
+
2. Preferences → Link, Tempo & MIDI → Control Surface → **LivePilot**
|
|
340
|
+
3. Start chatting
|
|
340
341
|
|
|
341
|
-
|
|
342
|
+
> [!TIP]
|
|
343
|
+
> The Desktop Extension auto-installs the Remote Script and M4L Analyzer on first launch.
|
|
342
344
|
|
|
343
|
-
|
|
344
|
-
<summary><strong>Claude Code</strong></summary>
|
|
345
|
+
### Quick: One Command Setup
|
|
345
346
|
|
|
346
347
|
```bash
|
|
347
|
-
|
|
348
|
+
npx livepilot --setup
|
|
348
349
|
```
|
|
349
350
|
|
|
350
|
-
|
|
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
|
-
|
|
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>
|
|
367
|
+
<summary><strong>2. MCP Client</strong></summary>
|
|
360
368
|
|
|
361
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
4
|
-
"description": "Agentic production system for Ableton Live 12 —
|
|
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.
|
|
4
|
-
"description": "Agentic production system for Ableton Live 12 —
|
|
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,26 +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
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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.
|