livepilot 1.8.3 → 1.9.0
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/AGENTS.md +46 -0
- package/CHANGELOG.md +41 -0
- package/README.md +26 -19
- package/bin/livepilot.js +4 -2
- package/livepilot/.claude-plugin/plugin.json +2 -2
- package/livepilot/skills/livepilot-core/SKILL.md +16 -8
- package/livepilot/skills/livepilot-core/references/overview.md +3 -3
- package/livepilot/skills/livepilot-release/SKILL.md +37 -29
- package/m4l_device/LivePilot_Analyzer.amxd +0 -0
- package/m4l_device/livepilot_bridge.js +170 -1
- package/mcp_server/__init__.py +1 -1
- package/mcp_server/m4l_bridge.py +32 -24
- package/mcp_server/memory/technique_store.py +2 -2
- package/mcp_server/server.py +16 -1
- package/mcp_server/tools/_perception_engine.py +3 -2
- package/mcp_server/tools/analyzer.py +8 -2
- package/mcp_server/tools/arrangement.py +12 -1
- package/mcp_server/tools/automation.py +4 -2
- package/mcp_server/tools/devices.py +95 -2
- package/mcp_server/tools/harmony.py +2 -2
- package/mcp_server/tools/midi_io.py +57 -22
- package/mcp_server/tools/notes.py +4 -0
- package/mcp_server/tools/scenes.py +65 -2
- package/mcp_server/tools/tracks.py +45 -2
- package/package.json +2 -2
- package/remote_script/LivePilot/__init__.py +2 -2
- package/remote_script/LivePilot/arrangement.py +42 -0
- package/remote_script/LivePilot/clip_automation.py +18 -30
- package/remote_script/LivePilot/scenes.py +110 -1
- package/remote_script/LivePilot/server.py +15 -2
- package/remote_script/LivePilot/tracks.py +73 -2
|
@@ -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 — 178 tools, 17 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.
|
|
12
|
+
"description": "Agentic production system for Ableton Live 12 — 178 tools, 17 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
|
|
13
|
+
"version": "1.9.0",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "Pilot Studio"
|
|
16
16
|
},
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# LivePilot v1.9.0 — Ableton Live 12
|
|
2
|
+
|
|
3
|
+
## Project
|
|
4
|
+
- **Repo:** This directory (LivePilot)
|
|
5
|
+
- **Type:** Agentic MCP production system for Ableton Live 12
|
|
6
|
+
- **Three layers:** Device Atlas (knowledge) + M4L Analyzer (perception) + Technique Memory (learning)
|
|
7
|
+
- **Sister projects:** TDPilot (TouchDesigner), ComfyPilot (ComfyUI)
|
|
8
|
+
- **Design spec:** `docs/specs/2026-03-17-livepilot-design.md`
|
|
9
|
+
|
|
10
|
+
## Architecture
|
|
11
|
+
- **Remote Script** (`remote_script/LivePilot/`): Runs inside Ableton's Python, ControlSurface base class, TCP socket on port 9878
|
|
12
|
+
- **MCP Server** (`mcp_server/`): Python FastMCP server, validates inputs, sends commands to Remote Script
|
|
13
|
+
- **M4L Bridge** (`m4l_device/`): Max for Live Audio Effect on master track, UDP/OSC bridge for deep LOM access
|
|
14
|
+
- UDP 9880: M4L -> Server (spectral data, responses)
|
|
15
|
+
- OSC 9881: Server -> M4L (commands)
|
|
16
|
+
- `livepilot_bridge.js`: 22 bridge commands for LiveAPI access
|
|
17
|
+
- `SpectralCache`: thread-safe, time-expiring data cache (5s max age)
|
|
18
|
+
- Bridge is optional — all core tools work without it
|
|
19
|
+
- **Plugin** (`livepilot/`): Codex plugin (marketplace-compatible: `.Codex-plugin/plugin.json`)
|
|
20
|
+
- **Installer** (`installer/`): Auto-detects Ableton path, copies Remote Script
|
|
21
|
+
|
|
22
|
+
## Key Rules
|
|
23
|
+
- ALL Live Object Model (LOM) calls must execute on Ableton's main thread via schedule_message queue
|
|
24
|
+
- Live 12 minimum — use modern note API (add_new_notes, get_notes_extended, apply_note_modifications)
|
|
25
|
+
- 178 tools across 17 domains: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, analyzer, automation, theory, generative, harmony, midi_io, perception
|
|
26
|
+
- JSON over TCP, newline-delimited, port 9878
|
|
27
|
+
- Structured errors with codes: INDEX_ERROR, NOT_FOUND, INVALID_PARAM, STATE_ERROR, TIMEOUT, INTERNAL
|
|
28
|
+
|
|
29
|
+
## M4L Bridge Notes
|
|
30
|
+
- OSC addresses must be sent WITHOUT leading `/` — Max `udpreceive` passes `/` as part of messagename
|
|
31
|
+
- `str_for_value` requires `call()` not `get()` (it's a function)
|
|
32
|
+
- `get()` in Max JS LiveAPI always returns arrays
|
|
33
|
+
- `warp_markers` is a dict property returning JSON string — use `JSON.parse()`
|
|
34
|
+
- `SimplerDevice.slices` lives on the `sample` child, not the device
|
|
35
|
+
- `replace_sample` only works on Simplers with existing samples
|
|
36
|
+
- Max freezes JS from search path cache, not source directory — copy to `~/Documents/Max 8/`
|
|
37
|
+
|
|
38
|
+
## Binary Patching Workflow (.amxd)
|
|
39
|
+
When modifying .amxd attributes that Max editor won't persist (e.g., `openinpresentation`):
|
|
40
|
+
1. Find the byte sequence in the .amxd binary
|
|
41
|
+
2. Replace with same-byte-count alternative (file size must not change)
|
|
42
|
+
3. Test by loading in Ableton
|
|
43
|
+
4. Structure: 24-byte `ampf` header + `ptch` chunk + `mx@c` header + JSON patcher + frozen deps
|
|
44
|
+
|
|
45
|
+
## Tool Count
|
|
46
|
+
Currently 178 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,46 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.0 — Scene Matrix, Freeze/Flatten, Plugin Deep Control (March 2026)
|
|
4
|
+
|
|
5
|
+
**10 new tools (168 → 178), 3 features shipped.**
|
|
6
|
+
|
|
7
|
+
### Scene Matrix Operations (+4 tools)
|
|
8
|
+
- `get_scene_matrix` — full N×M clip grid with states (empty/stopped/playing/triggered/recording)
|
|
9
|
+
- `fire_scene_clips` — fire a scene with optional track filter for selective launching
|
|
10
|
+
- `stop_all_clips` — stop all playing clips in the session (panic button)
|
|
11
|
+
- `get_playing_clips` — return all currently playing or triggered clips
|
|
12
|
+
|
|
13
|
+
### Track Freeze/Flatten (+3 tools)
|
|
14
|
+
- `freeze_track` — freeze a track (render devices to audio for CPU savings)
|
|
15
|
+
- `flatten_track` — flatten a frozen track (commit rendered audio permanently)
|
|
16
|
+
- `get_freeze_status` — check if a track is frozen
|
|
17
|
+
|
|
18
|
+
### Plugin Parameter Mapping (+3 tools, M4L)
|
|
19
|
+
- `get_plugin_parameters` — get ALL VST/AU plugin parameters including unconfigured ones
|
|
20
|
+
- `map_plugin_parameter` — add a plugin parameter to Ableton's Configure list for automation
|
|
21
|
+
- `get_plugin_presets` — list a plugin's internal presets and banks
|
|
22
|
+
|
|
23
|
+
### Infrastructure
|
|
24
|
+
- `SLOW_WRITE_COMMANDS` set for freeze_track (35s timeout vs 15s for normal writes)
|
|
25
|
+
- Removed "Coming" section from README — all roadmap features shipped or dropped
|
|
26
|
+
|
|
27
|
+
## 1.8.4 — Bug Fix Audit (March 2026)
|
|
28
|
+
|
|
29
|
+
**5 bugs fixed (2 P1, 3 P2), verified live in Ableton.**
|
|
30
|
+
|
|
31
|
+
### P1 — Safety-Critical
|
|
32
|
+
- Fix: `create_arrangement_clip` no longer hangs Ableton when `loop_length` is zero or negative — validation at MCP + Remote Script layers
|
|
33
|
+
- Fix: `import_midi_to_clip` now preserves the MIDI file's beat grid instead of scaling by session tempo — a 60 BPM MIDI imported at 120 BPM no longer doubles note positions
|
|
34
|
+
|
|
35
|
+
### P2 — Correctness
|
|
36
|
+
- Fix: `create_arrangement_clip` now sets `loop_end` on duplicated clips when `loop_length < source_length`, with documented LOM limitation for arrangement clip resizing
|
|
37
|
+
- Fix: `--status` / `--doctor` CLI commands no longer report success for error responses — only resolves true on valid pong
|
|
38
|
+
- Fix: `import_midi_to_clip` with `create_clip=True` now checks for existing clips before creating — clears notes if occupied, creates if empty
|
|
39
|
+
|
|
40
|
+
### Tests
|
|
41
|
+
- 2 new tests for MIDI tempo independence (`test_midi_io.py::TestImportTempoIndependence`)
|
|
42
|
+
- 255 total tests passing
|
|
43
|
+
|
|
3
44
|
## 1.8.3 — FluCoMa Wiring + Analyzer Fix (March 2026)
|
|
4
45
|
|
|
5
46
|
- Fix: wire 6 FluCoMa DSP objects into LivePilot_Analyzer.maxpat (spectral shape, mel bands, chroma, loudness, onset, novelty)
|
package/README.md
CHANGED
|
@@ -9,10 +9,9 @@
|
|
|
9
9
|
|
|
10
10
|
An agentic production system for Ableton Live 12.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
178 tools. Device atlas. Spectral perception. Technique memory.
|
|
13
13
|
Neo-Riemannian harmony. Euclidean rhythm. Species counterpoint.
|
|
14
14
|
|
|
15
|
-
It doesn't assist — it produces.
|
|
16
15
|
|
|
17
16
|
<br>
|
|
18
17
|
|
|
@@ -38,7 +37,7 @@ It doesn't assist — it produces.
|
|
|
38
37
|
│ └───────────────────┼───────────────────┘ │
|
|
39
38
|
│ ▼ │
|
|
40
39
|
│ ┌─────────────────┐ │
|
|
41
|
-
│ │
|
|
40
|
+
│ │ 178 MCP Tools │ │
|
|
42
41
|
│ │ 17 domains │ │
|
|
43
42
|
│ └────────┬────────┘ │
|
|
44
43
|
│ │ │
|
|
@@ -60,7 +59,7 @@ via a Max for Live device.
|
|
|
60
59
|
The memory gives it history — a searchable library of production decisions
|
|
61
60
|
that persists across sessions.
|
|
62
61
|
|
|
63
|
-
All three feed into
|
|
62
|
+
All three feed into 178 deterministic tools that execute on Ableton's main thread
|
|
64
63
|
through the official Live Object Model API. Everything is reversible with undo.
|
|
65
64
|
|
|
66
65
|
<br>
|
|
@@ -96,7 +95,7 @@ Every tool maps directly to an LOM call — no abstraction, no guessing.
|
|
|
96
95
|
The M4L Analyzer sits on the master track. UDP 9880 carries spectral data
|
|
97
96
|
from Max to the server. OSC 9881 sends commands back.
|
|
98
97
|
|
|
99
|
-
All
|
|
98
|
+
All 139 core tools work without it — the analyzer adds 29 more
|
|
100
99
|
and closes the feedback loop.
|
|
101
100
|
|
|
102
101
|
<br>
|
|
@@ -477,7 +476,7 @@ Check memory before creative decisions. Verify every mutation.
|
|
|
477
476
|
|
|
478
477
|
## Full Tool List
|
|
479
478
|
|
|
480
|
-
|
|
479
|
+
178 tools across 17 domains.
|
|
481
480
|
|
|
482
481
|
<br>
|
|
483
482
|
|
|
@@ -673,7 +672,7 @@ Check memory before creative decisions. Verify every mutation.
|
|
|
673
672
|
|
|
674
673
|
<br>
|
|
675
674
|
|
|
676
|
-
### Analyzer (
|
|
675
|
+
### Analyzer (29) `[M4L]`
|
|
677
676
|
|
|
678
677
|
| Tool | Description |
|
|
679
678
|
|------|-------------|
|
|
@@ -697,6 +696,26 @@ Check memory before creative decisions. Verify every mutation.
|
|
|
697
696
|
| `remove_warp_marker` | Remove warp marker |
|
|
698
697
|
| `scrub_clip` | Preview at beat position |
|
|
699
698
|
| `stop_scrub` | Stop preview |
|
|
699
|
+
| `get_spectral_shape` | 7 spectral descriptors via FluCoMa |
|
|
700
|
+
| `get_mel_spectrum` | 40-band mel spectrum |
|
|
701
|
+
| `get_chroma` | 12 pitch class energies |
|
|
702
|
+
| `get_onsets` | Real-time onset detection |
|
|
703
|
+
| `get_novelty` | Spectral novelty for section boundaries |
|
|
704
|
+
| `get_momentary_loudness` | EBU R128 momentary LUFS + peak |
|
|
705
|
+
| `check_flucoma` | Verify FluCoMa installation |
|
|
706
|
+
| `capture_audio` | Record master output to WAV |
|
|
707
|
+
| `capture_stop` | Cancel in-progress capture |
|
|
708
|
+
|
|
709
|
+
<br>
|
|
710
|
+
|
|
711
|
+
### Perception (4)
|
|
712
|
+
|
|
713
|
+
| Tool | Description |
|
|
714
|
+
|------|-------------|
|
|
715
|
+
| `analyze_loudness` | Integrated LUFS, true peak, LRA, streaming compliance |
|
|
716
|
+
| `analyze_spectrum_offline` | Spectral centroid, rolloff, flatness, 5-band balance |
|
|
717
|
+
| `compare_to_reference` | Mix vs reference: loudness + spectral delta |
|
|
718
|
+
| `read_audio_metadata` | Format, duration, sample rate, tags |
|
|
700
719
|
|
|
701
720
|
<br>
|
|
702
721
|
|
|
@@ -750,18 +769,6 @@ Check memory before creative decisions. Verify every mutation.
|
|
|
750
769
|
|
|
751
770
|
---
|
|
752
771
|
|
|
753
|
-
## Coming
|
|
754
|
-
|
|
755
|
-
```
|
|
756
|
-
□ Real-time DSP analysis via LOM meters
|
|
757
|
-
□ M4L bridge expansion — deeper LiveAPI access
|
|
758
|
-
□ Arrangement view — clip placement, tempo automation
|
|
759
|
-
□ Audio clip manipulation — stretch, slice, resample
|
|
760
|
-
□ Plugin parameter mapping — VST/AU deep control
|
|
761
|
-
```
|
|
762
|
-
|
|
763
|
-
<br>
|
|
764
|
-
|
|
765
772
|
---
|
|
766
773
|
|
|
767
774
|
## CLI
|
package/bin/livepilot.js
CHANGED
|
@@ -70,7 +70,7 @@ function ensureVenv(systemPython, prefixArgs) {
|
|
|
70
70
|
// Check if venv already exists and has our deps
|
|
71
71
|
if (fs.existsSync(venvPy)) {
|
|
72
72
|
try {
|
|
73
|
-
execFileSync(venvPy, ["-c", "import fastmcp; import midiutil; import pretty_midi"], {
|
|
73
|
+
execFileSync(venvPy, ["-c", "import fastmcp; import midiutil; import pretty_midi; import numpy; import pyloudnorm; import soundfile; import scipy"], {
|
|
74
74
|
encoding: "utf-8",
|
|
75
75
|
timeout: 10000,
|
|
76
76
|
stdio: "pipe",
|
|
@@ -127,10 +127,12 @@ function checkStatus() {
|
|
|
127
127
|
sock.on("data", (chunk) => {
|
|
128
128
|
buf += chunk.toString();
|
|
129
129
|
if (buf.includes("\n")) {
|
|
130
|
+
let ok = false;
|
|
130
131
|
try {
|
|
131
132
|
const resp = JSON.parse(buf.split("\n")[0]);
|
|
132
133
|
if (resp.ok === true && resp.result && resp.result.pong) {
|
|
133
134
|
console.log(" Ableton Live: connected on %s:%d", HOST, PORT);
|
|
135
|
+
ok = true;
|
|
134
136
|
} else {
|
|
135
137
|
console.log(" Ableton Live: unexpected response:", JSON.stringify(resp));
|
|
136
138
|
}
|
|
@@ -138,7 +140,7 @@ function checkStatus() {
|
|
|
138
140
|
console.log(" Ableton Live: invalid response");
|
|
139
141
|
}
|
|
140
142
|
sock.destroy();
|
|
141
|
-
resolve(
|
|
143
|
+
resolve(ok);
|
|
142
144
|
}
|
|
143
145
|
});
|
|
144
146
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "livepilot",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Agentic production system for Ableton Live 12 —
|
|
3
|
+
"version": "1.9.0",
|
|
4
|
+
"description": "Agentic production system for Ableton Live 12 — 178 tools, 17 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,17 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: livepilot-core
|
|
3
|
-
description: Core discipline for LivePilot — agentic production system for Ableton Live 12.
|
|
3
|
+
description: Core discipline for LivePilot — agentic production system for Ableton Live 12. 178 tools across 17 domains. Device atlas (280+ devices), M4L analyzer (spectrum/RMS/key detection), technique memory, automation intelligence (16 curve types, 15 recipes), music theory (Krumhansl-Schmuckler, species counterpoint), generative algorithms (Euclidean rhythm, tintinnabuli, phase shift), neo-Riemannian harmony (PRL transforms, Tonnetz), MIDI file I/O. Use whenever working with Ableton Live through MCP tools.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# LivePilot Core — Ableton Live 12
|
|
7
7
|
|
|
8
|
-
Agentic production system for Ableton Live 12.
|
|
8
|
+
Agentic production system for Ableton Live 12. 178 tools across 17 domains, three layers:
|
|
9
9
|
|
|
10
10
|
- **Device Atlas** — A structured knowledge corpus of 280+ instruments, 139 drum kits, and 350+ impulse responses. Consult the atlas before loading any device. It contains real browser URIs, preset names, and sonic descriptions. Never guess a device name — look it up.
|
|
11
11
|
- **M4L Analyzer** — Real-time audio analysis on the master bus (8-band spectrum, RMS/peak, key detection). Use it to verify mixing decisions, detect frequency problems, and find the key before writing harmonic content.
|
|
12
12
|
- **Technique Memory** — Persistent storage for production decisions. Consult `memory_recall` before creative tasks to understand the user's taste. Save techniques when the user likes something. The memory shapes future decisions without constraining them.
|
|
13
13
|
|
|
14
|
-
These layers sit on top of
|
|
14
|
+
These layers sit on top of 178 deterministic tools across 17 domains: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, analyzer, automation, theory, generative, harmony, MIDI I/O, and perception.
|
|
15
15
|
|
|
16
16
|
## Golden Rules
|
|
17
17
|
|
|
@@ -32,7 +32,7 @@ These layers sit on top of 168 deterministic tools across 17 domains: transport,
|
|
|
32
32
|
Not all tools respond instantly. Know the tiers and act accordingly.
|
|
33
33
|
|
|
34
34
|
### Instant (<1s) — Use freely, no warning needed
|
|
35
|
-
All
|
|
35
|
+
All 178 core tools (transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, automation, theory, generative, harmony, midi_io, perception) plus Layer A perception tools (spectral shape, timbral profile, mel spectrum, chroma, onsets, harmonic/percussive, novelty, momentary loudness). These are the reflex tools — call them anytime without hesitation.
|
|
36
36
|
|
|
37
37
|
### Fast (1-5s) — Use freely, barely noticeable
|
|
38
38
|
`analyze_loudness` · `analyze_dynamic_range` · `compare_loudness`
|
|
@@ -117,7 +117,7 @@ Never skip levels. The user's question determines the entry point, but always st
|
|
|
117
117
|
- MIDI track with no instrument loaded
|
|
118
118
|
- Notes programmed but clip not fired
|
|
119
119
|
|
|
120
|
-
## Tool Domains (
|
|
120
|
+
## Tool Domains (178 total)
|
|
121
121
|
|
|
122
122
|
### Transport (12)
|
|
123
123
|
`get_session_info` · `set_tempo` · `set_time_signature` · `start_playback` · `stop_playback` · `continue_playback` · `toggle_metronome` · `set_session_loop` · `undo` · `redo` · `get_recent_actions` · `get_session_diagnostics`
|
|
@@ -149,8 +149,8 @@ Never skip levels. The user's question determines the entry point, but always st
|
|
|
149
149
|
### Memory (8)
|
|
150
150
|
`memory_learn` · `memory_recall` · `memory_get` · `memory_replay` · `memory_list` · `memory_favorite` · `memory_update` · `memory_delete`
|
|
151
151
|
|
|
152
|
-
### Analyzer (
|
|
153
|
-
`get_master_spectrum` · `get_master_rms` · `get_detected_key` · `get_hidden_parameters` · `get_automation_state` · `walk_device_tree` · `get_clip_file_path` · `replace_simpler_sample` · `load_sample_to_simpler` · `get_simpler_slices` · `crop_simpler` · `reverse_simpler` · `warp_simpler` · `get_warp_markers` · `add_warp_marker` · `move_warp_marker` · `remove_warp_marker` · `scrub_clip` · `stop_scrub` · `get_display_values`
|
|
152
|
+
### Analyzer (29) — requires LivePilot Analyzer M4L device on master track
|
|
153
|
+
`get_master_spectrum` · `get_master_rms` · `get_detected_key` · `get_hidden_parameters` · `get_automation_state` · `walk_device_tree` · `get_clip_file_path` · `replace_simpler_sample` · `load_sample_to_simpler` · `get_simpler_slices` · `crop_simpler` · `reverse_simpler` · `warp_simpler` · `get_warp_markers` · `add_warp_marker` · `move_warp_marker` · `remove_warp_marker` · `scrub_clip` · `stop_scrub` · `get_display_values` · `get_spectral_shape` · `get_mel_spectrum` · `get_chroma` · `get_onsets` · `get_novelty` · `get_momentary_loudness` · `check_flucoma` · `capture_audio` · `capture_stop`
|
|
154
154
|
|
|
155
155
|
### Automation (8)
|
|
156
156
|
Clip automation CRUD + intelligent curve generation with 15 built-in recipes.
|
|
@@ -175,6 +175,14 @@ Clip automation CRUD + intelligent curve generation with 15 built-in recipes.
|
|
|
175
175
|
- Clear existing automation before rewriting: `clear_clip_automation` first
|
|
176
176
|
- Load `references/automation-atlas.md` for curve theory, genre recipes, diagnostic technique, and cross-track spectral mapping
|
|
177
177
|
|
|
178
|
+
### Perception (4) — offline audio analysis, no Ableton connection required
|
|
179
|
+
`analyze_loudness` · `analyze_spectrum_offline` · `compare_to_reference` · `read_audio_metadata`
|
|
180
|
+
|
|
181
|
+
**Key discipline:**
|
|
182
|
+
- These work on any local audio file — no Ableton connection needed
|
|
183
|
+
- Use `compare_to_reference` for A/B mix comparisons against reference tracks
|
|
184
|
+
- Use `analyze_loudness` to check streaming compliance (Spotify, Apple Music, YouTube targets)
|
|
185
|
+
|
|
178
186
|
### Theory (7)
|
|
179
187
|
Music theory analysis — built-in pure Python engine, zero external dependencies.
|
|
180
188
|
|
|
@@ -366,7 +374,7 @@ Deep production knowledge lives in `references/`. Consult these when making crea
|
|
|
366
374
|
|
|
367
375
|
| File | What's inside | When to consult |
|
|
368
376
|
|------|--------------|-----------------|
|
|
369
|
-
| `references/overview.md` | All
|
|
377
|
+
| `references/overview.md` | All 178 tools mapped with params, units, ranges | Quick lookup for any tool |
|
|
370
378
|
| `references/midi-recipes.md` | Drum patterns by genre, chord voicings, scales, hi-hat techniques, humanization, polymetrics | Programming MIDI notes, building beats |
|
|
371
379
|
| `references/sound-design.md` | Stock instruments/effects, parameter recipes for bass/pad/lead/pluck, device chain patterns | Loading and configuring devices |
|
|
372
380
|
| `references/mixing-patterns.md` | Gain staging, parallel compression, sidechain, EQ by instrument, bus processing, stereo width | Setting volumes, panning, adding effects |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# LivePilot v1.
|
|
1
|
+
# LivePilot v1.9.0 — Architecture & Tool Reference
|
|
2
2
|
|
|
3
|
-
Agentic production system for Ableton Live 12.
|
|
3
|
+
Agentic production system for Ableton Live 12. 178 tools across 17 domains. Device atlas (280+ devices), spectral perception (M4L analyzer), technique memory, automation intelligence (16 curve types, 15 recipes), music theory (Krumhansl-Schmuckler, species counterpoint), generative algorithms (Euclidean rhythm, tintinnabuli, phase shift, additive process), neo-Riemannian harmony (PRL transforms, Tonnetz), MIDI file I/O.
|
|
4
4
|
|
|
5
5
|
## Architecture
|
|
6
6
|
|
|
@@ -202,7 +202,7 @@ This turns "set EQ band 3 to -4 dB" into "cut 400 Hz by 4 dB, then read the spec
|
|
|
202
202
|
| `memory_update` | Updates name, tags, or qualities | `technique_id`, `name`, `tags`, `qualities` |
|
|
203
203
|
| `memory_delete` | Removes technique (backs up first) | `technique_id` |
|
|
204
204
|
|
|
205
|
-
### Analyzer (
|
|
205
|
+
### Analyzer (29) — Real-time DSP analysis (requires LivePilot Analyzer M4L device on master track)
|
|
206
206
|
|
|
207
207
|
| Tool | What it does | Key params |
|
|
208
208
|
|------|-------------|------------|
|
|
@@ -13,43 +13,56 @@ Run this checklist EVERY time the user says "update everything", "push", "releas
|
|
|
13
13
|
- [ ] `package-lock.json` → `"version"` (run `npm install --package-lock-only` if stale)
|
|
14
14
|
- [ ] `server.json` → `"version"` (TWO locations: top-level and package)
|
|
15
15
|
- [ ] `livepilot/.claude-plugin/plugin.json` → `"version"`
|
|
16
|
+
- [ ] `.claude-plugin/marketplace.json` → `"version"` in plugins array
|
|
16
17
|
- [ ] `mcp_server/__init__.py` → `__version__`
|
|
17
|
-
- [ ] `remote_script/LivePilot/__init__.py` →
|
|
18
|
+
- [ ] `remote_script/LivePilot/__init__.py` → `__version__` (log message auto-uses it)
|
|
18
19
|
- [ ] `m4l_device/livepilot_bridge.js` → version in ping response
|
|
20
|
+
- [ ] `CLAUDE.md` → header line
|
|
21
|
+
- [ ] `livepilot/skills/livepilot-core/references/overview.md` → header line
|
|
19
22
|
- [ ] `CHANGELOG.md` → latest version header
|
|
20
23
|
- [ ] `docs/social-banner.html` → version display
|
|
24
|
+
- [ ] `docs/M4L_BRIDGE.md` → ping response example
|
|
21
25
|
|
|
22
|
-
**How to check:** `grep -rn "1\.[0-9]\.[0-9]" package.json server.json livepilot/.claude-plugin/plugin.json mcp_server/__init__.py remote_script/LivePilot/__init__.py m4l_device/livepilot_bridge.js CHANGELOG.md docs/social-banner.html`
|
|
26
|
+
**How to check:** `grep -rn "1\.[0-9]\.[0-9]" package.json server.json livepilot/.claude-plugin/plugin.json .claude-plugin/marketplace.json mcp_server/__init__.py remote_script/LivePilot/__init__.py m4l_device/livepilot_bridge.js CHANGELOG.md CLAUDE.md livepilot/skills/livepilot-core/references/overview.md docs/social-banner.html docs/M4L_BRIDGE.md`
|
|
23
27
|
|
|
24
28
|
## 2. Tool Count (must ALL match)
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
Current: **178 tools across 17 domains**.
|
|
31
|
+
Core (no M4L): **139**. Analyzer (M4L): **29**. Perception (offline): **4**.
|
|
32
|
+
|
|
33
|
+
Verify: `grep -rc "@mcp.tool" mcp_server/tools/ | grep -v ":0" | awk -F: '{sum+=$2} END{print sum}'`
|
|
34
|
+
|
|
35
|
+
Files that reference tool count:
|
|
36
|
+
- [ ] `README.md` — header, PERCEPTION section ("139 core...29 analyzer"), Analyzer table header "(29)", Perception table header "(4)"
|
|
37
|
+
- [ ] `package.json` → `"description"` (178 tools, 17 domains)
|
|
28
38
|
- [ ] `server.json` → `"description"`
|
|
29
39
|
- [ ] `livepilot/.claude-plugin/plugin.json` → `"description"`
|
|
30
|
-
- [ ]
|
|
31
|
-
- [ ] `
|
|
32
|
-
- [ ] `livepilot/skills/livepilot-core/
|
|
33
|
-
- [ ] `
|
|
34
|
-
- [ ] `docs/manual/
|
|
35
|
-
- [ ] `docs/
|
|
36
|
-
- [ ] `docs/
|
|
40
|
+
- [ ] `.claude-plugin/marketplace.json` → `"description"`
|
|
41
|
+
- [ ] `CLAUDE.md` → "178 tools across 17 domains"
|
|
42
|
+
- [ ] `livepilot/skills/livepilot-core/SKILL.md` — "178 tools across 17 domains", Analyzer (29), Perception (4)
|
|
43
|
+
- [ ] `livepilot/skills/livepilot-core/references/overview.md` — "178 tools across 17 domains"
|
|
44
|
+
- [ ] `docs/manual/index.md` — domain table: Analyzer (29), Perception (4)
|
|
45
|
+
- [ ] `docs/manual/getting-started.md` — "139 core tools...29 analyzer"
|
|
46
|
+
- [ ] `docs/manual/tool-reference.md` — all domains present with correct counts
|
|
47
|
+
- [ ] `docs/TOOL_REFERENCE.md` — all domains present
|
|
48
|
+
- [ ] `docs/M4L_BRIDGE.md` — "139 core tools...29 analyzer"
|
|
37
49
|
- [ ] `docs/social-banner.html`
|
|
38
50
|
- [ ] `mcp_server/tools/analyzer.py` → module docstring
|
|
39
|
-
- [ ] `tests/test_tools_contract.py` → expected count
|
|
51
|
+
- [ ] `tests/test_tools_contract.py` → expected total count
|
|
40
52
|
|
|
41
|
-
**How to check:** `grep -rn "
|
|
53
|
+
**How to check:** `grep -rn "168\|139\|135\|127\|115\|107" --include="*.md" --include="*.json" --include="*.py" --include="*.html" . | grep -v node_modules | grep -v .git | grep -v __pycache__ | grep -v CHANGELOG`
|
|
42
54
|
|
|
43
55
|
## 3. Domain Count
|
|
44
56
|
|
|
45
|
-
|
|
46
|
-
|
|
57
|
+
Current: **17 domains**: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, analyzer, automation, theory, generative, harmony, midi_io, perception.
|
|
58
|
+
|
|
59
|
+
- [ ] All files that mention domain count say "17 domains"
|
|
60
|
+
- [ ] Domain lists include ALL 17 (especially perception — it's the newest and most often omitted)
|
|
47
61
|
|
|
48
62
|
## 4. npm Registry
|
|
49
63
|
|
|
50
64
|
- [ ] `npm view livepilot version` matches local version
|
|
51
65
|
- [ ] If not: `npm publish`
|
|
52
|
-
- [ ] Verify badge will update: badge URL in README.md points to shields.io/npm/v/livepilot
|
|
53
66
|
|
|
54
67
|
## 5. GitHub
|
|
55
68
|
|
|
@@ -57,9 +70,6 @@ Run this checklist EVERY time the user says "update everything", "push", "releas
|
|
|
57
70
|
- [ ] Topics are current (should include: ai, mcp, ableton, livepilot, max-for-live, audio-analysis)
|
|
58
71
|
- [ ] Latest release matches current version (`gh release list`)
|
|
59
72
|
- [ ] Release notes are current
|
|
60
|
-
- [ ] Old stale releases cleaned up
|
|
61
|
-
- [ ] Git tags: only relevant versions exist (`git tag -l`)
|
|
62
|
-
- [ ] No co-author or unwanted metadata in commit messages
|
|
63
73
|
|
|
64
74
|
## 6. Plugin Cache
|
|
65
75
|
|
|
@@ -74,28 +84,26 @@ Run this checklist EVERY time the user says "update everything", "push", "releas
|
|
|
74
84
|
|
|
75
85
|
## 8. Documentation Content
|
|
76
86
|
|
|
77
|
-
- [ ] `README.md` — features match current capabilities
|
|
78
|
-
- [ ] `docs/manual/getting-started.md` — install instructions current
|
|
79
|
-
- [ ] `docs/manual/tool-reference.md` — all tools
|
|
80
|
-
- [ ] `docs/
|
|
81
|
-
- [ ] `docs/
|
|
87
|
+
- [ ] `README.md` — features match current capabilities, "Coming" section is accurate
|
|
88
|
+
- [ ] `docs/manual/getting-started.md` — install instructions current
|
|
89
|
+
- [ ] `docs/manual/tool-reference.md` — all 17 domains listed, all 178 tools present
|
|
90
|
+
- [ ] `docs/TOOL_REFERENCE.md` — all 17 domains present
|
|
91
|
+
- [ ] `docs/M4L_BRIDGE.md` — architecture accurate, core tool count correct
|
|
82
92
|
|
|
83
93
|
## 9. Derived Artifacts
|
|
84
94
|
|
|
85
95
|
- [ ] `m4l_device/LivePilot_Analyzer.amxd` — frozen JS matches source? All commands present?
|
|
86
|
-
- [ ]
|
|
87
|
-
- [ ] Private backup repo — synced and pushed?
|
|
88
|
-
- [ ] `LivePilot-v*.INSTALL.txt` — updated?
|
|
96
|
+
- [ ] If `livepilot_bridge.js` changed → amxd needs rebuilding in Max editor
|
|
89
97
|
|
|
90
98
|
## 10. Code Consistency
|
|
91
99
|
|
|
92
100
|
- [ ] `@mcp.tool()` count matches documented tool count: `grep -r "@mcp.tool" mcp_server/tools/ | wc -l`
|
|
93
101
|
- [ ] No dead imports or unused code in recently changed files
|
|
94
102
|
- [ ] Remote script version matches MCP server version
|
|
103
|
+
- [ ] All tests pass: `python3 -m pytest tests/ -v`
|
|
95
104
|
|
|
96
105
|
## Quick Verify Command
|
|
97
106
|
|
|
98
|
-
Run this one-liner to catch most issues:
|
|
99
107
|
```bash
|
|
100
|
-
echo "=== Versions ===" && grep -h '"version"' package.json server.json livepilot/.claude-plugin/plugin.json | head -
|
|
108
|
+
echo "=== Versions ===" && grep -h '"version"' package.json server.json livepilot/.claude-plugin/plugin.json .claude-plugin/marketplace.json | head -6 && grep __version__ mcp_server/__init__.py remote_script/LivePilot/__init__.py && echo "=== Tool count ===" && grep -rc "@mcp.tool" mcp_server/tools/ | grep -v ":0" | awk -F: '{sum+=$2} END{print "Total:", sum}' && echo "=== Tests ===" && python3 -m pytest tests/ -q 2>&1 | tail -1
|
|
101
109
|
```
|
|
Binary file
|