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.
@@ -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 — 168 tools, 17 domains",
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 — 168 tools, 17 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
13
- "version": "1.8.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
- 168 tools. Device atlas. Spectral perception. Technique memory.
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
- │ │ 168 MCP Tools │ │
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 168 deterministic tools that execute on Ableton's main thread
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 135 core tools work without it — the analyzer adds 20 more
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
- 168 tools across 17 domains.
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 (20) `[M4L]`
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(true);
143
+ resolve(ok);
142
144
  }
143
145
  });
144
146
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "livepilot",
3
- "version": "1.8.3",
4
- "description": "Agentic production system for Ableton Live 12 — 168 tools, 17 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
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. 168 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.
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. 168 tools across 17 domains, three layers:
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 168 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.
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 168 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.
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 (168 total)
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 (20) — 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`
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 168 tools mapped with params, units, ranges | Quick lookup for any tool |
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.8.0 — Architecture & Tool Reference
1
+ # LivePilot v1.9.0 — Architecture & Tool Reference
2
2
 
3
- Agentic production system for Ableton Live 12. 168 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.
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 (20) — Real-time DSP analysis (requires LivePilot Analyzer M4L device on master track)
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` → version in log message
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
- - [ ] `README.md` every occurrence
27
- - [ ] `package.json` `"description"`
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
- - [ ] `CLAUDE.md`
31
- - [ ] `livepilot/skills/livepilot-core/SKILL.md` header and domain breakdown
32
- - [ ] `livepilot/skills/livepilot-core/references/overview.md`
33
- - [ ] `docs/manual/index.md`
34
- - [ ] `docs/manual/tool-reference.md`
35
- - [ ] `docs/TOOL_REFERENCE.md`
36
- - [ ] `docs/M4L_BRIDGE.md`
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 "127\|128\|129\|130\|131\|132\|133\|134" --include="*.md" --include="*.json" --include="*.py" --include="*.html" --include="*.js" . | grep -v node_modules | grep -v .git | grep -v __pycache__`
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
- - [ ] All files above that mention "11 domains" should say "12 domains"
46
- - [ ] Domain lists should include: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, automation, memory, analyzer
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, mentions M4L Analyzer
79
- - [ ] `docs/manual/tool-reference.md` — all tools listed
80
- - [ ] `docs/M4L_BRIDGE.md` — architecture accurate
81
- - [ ] `docs/TOOL_REFERENCE.md` — all tools listed with correct params
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
- - [ ] Distributable zip on Desktop rebuilt with latest?
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 -5 && grep __version__ mcp_server/__init__.py && echo "=== Tool count ===" && grep -rc "@mcp.tool" mcp_server/tools/ | tail -1 && echo "=== npm ===" && npm view livepilot version 2>/dev/null && echo "=== GitHub release ===" && gh release list --limit 1 && echo "=== Tags ===" && git tag -l
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