Skip to content

Releases: dreamrec/LivePilot

v1.26.0: rubric grader system + atlas-aware load preflight

08 May 21:07

Choose a tag to compare

v1.26.0 — rubric grader system + atlas-aware load preflight + Drift fingerprint

Closes the chronic-regression class for CLAUDE.md §1/§2/§4/§5/§7.3 binding rules — anti-pattern violations now have programmatic enforcement, and silent-instrument loads are caught structurally at load time.

Three new MCP tools (462 → 465)

  • grader_list_rubrics() — names + light/heavy classification.
  • grader_evaluate(rubric_id, heavy=False, include_brief=True) — single rubric, light (~3s) or heavy (~6s) state.
  • grader_evaluate_all(heavy=True) — all 5 rubrics in one call, ~5× cheaper than per-rubric.

Five rubrics

Rubric Binding rule Detection
layer_accumulation §7.3 track count, buried-track threshold, role-volume hierarchy
default_preset_check §1 banned-default fingerprints (Drift / UltraAnalog / InstrumentMeld / MxDeviceInstrument-Poli)
modulation_presence §4 melodic layers have modulation routings or clip automation
layer_precision §5 7 criteria wrapping audit/checks (timbre, sequence, stereo, masking, modulation, params, effects)
sound_design_depth §2 instrument parameter programming, including Drift factory-fingerprint detection

Drift factory-fingerprint

audit/checks._check_drift_params captures Drift's 12-param factory state. Zero deviations on a melodic-role track → unprogrammed_instrument fail. Closes the gap where Drift's bipolar defaults (Mod Matrix Amt = 0.5, Vel > Vol = 0.5) escaped the generic _SUSPICIOUS_AT_ZERO heuristic.

Atlas-aware load preflight

  • atlas_search now surfaces self_contained, synthesis_type, complexity, use_cases, signature_techniques_count, first_technique_hint, gotchas_count, first_gotcha when enriched=true. Truncation widened 120 → 400 chars.
  • load_browser_item appends atlas_preflight warning when the loaded device is enriched and self_contained=false. Catches granular samplers (Granulator III, Vector Grain) at load time.

Class-name extensions

audit/checks._INSTRUMENT_CLASSES and _EFFECT_CATEGORIES now include Live's actual runtime class names: UltraAnalog, InstrumentMeld, MxDeviceInstrument, LoungeLizard, Eq8, Compressor2, AutoFilter2, GlueCompressor, MultibandDynamics, HybridReverb, Chorus2, PingPongDelay. §1 banned-default detection uses (class_name, name) fingerprint tuples.

mcp_server/audit/state.py

Shared per-track signal helpers — safe_call, fetch_notes_for_clips, has_clip_automation, count_wavetable_routings. Removes the duplication that had crept in.

Tests

110+ new tests across 8 new test files. 237 pass on grader+audit+browser-preflight+contract surfaces.

CLAUDE.md additions

  • §9b — kill orphan LivePilot processes (don't ask the user)
  • §9c — arrangement build finalization (loop / cursor / orange button)

Install

Drag livepilot-1.26.0.mcpb into Claude Desktop, or npx livepilot --install from the package.

v1.25.0 — Hybrid Knowledge Surface

02 May 08:33

Choose a tag to compare

Hybrid Knowledge Surface

Three new MCP tools (atlas_explore, atlas_audition, atlas_substitute) plus the AtlasResolver framework class with overlay-union in resolve_for_role (packs/demo_project +0.15 boost, all-namespace pass for m4l-devices / user.* / elektron). The _DESIGN_TARGETS text in full-mode brief is rewritten to mandate four-source search per role: factory atlas, extension_atlas overlays, demo_project ground-truth, Anthropic Ableton Knowledge MCP.

load_browser_item(role="drum") fix

Two compounding bugs that made role="drum" a no-op since v1.20 are fixed:

  • Wrong parameter name — _SIMPLER_ROLE_DEFAULTS["drum"] set "Sample Pitch Coarse" to 36, but that parameter does NOT exist on OriginalSimpler. Replaced with ("Transpose", 24) so drum samples no longer play 24 semitones below original pitch.
  • Device-detection logic that relied on response fields the underlying TCP command never returned. Now uses get_device_info post-load probe to read class + name.

Same parameter-name fix applied in _analyzer_engine/sample.py::_simpler_post_load_hygiene (drum_root → 60 - drum_root Transpose translation, clamped to ±48).

M4L instrument post-load hygiene

New _M4L_INSTRUMENT_HYGIENE map runs unconditionally post-load, name-matched to known problem M4L instruments. Initial entry: Harmonic Drone Generator from Drone Lab pack — sets Latch=0, Volume=-40, Density=40 so fresh HDG loads no longer slam an 8-voice drone at full volume on first MIDI hit.

Tests

  • tests/composer/framework/test_atlas_resolver.py (17 cases)
  • tests/atlas/test_explore_tools.py (20 cases)
  • Regression guards in test_next_steps_2026_04_22.py against "Sample Pitch Coarse" reappearing
  • Full suite: 3837 passed, 1 skipped

Counts

  • Tool count: 459 → 462 (+3 atlas tools)
  • Domain count: 55
  • server.json description corrected (was 54 domains)

Install

  • npx livepilot --install (npm)
  • Claude Desktop one-click: download livepilot-1.25.0.mcpb below

🤖 Generated with Claude Code

v1.24.0 — Compose Framework Rebuild

02 May 04:32

Choose a tag to compare

Compose framework rebuild — fast / full / develop modes share an Applier substrate; full mode is a clean-room rewrite around an LLM-creative two-phase brief flow (LLM provides FORM, framework provides VOCABULARY).

Highlights

Compose framework

  • New mcp_server/composer/framework/applier.py — shared pre-flight (analyzer + bridge handshake retry) + post-flight (monitoring=Auto + back_to_arranger) for fast / full / develop modes.
  • New mcp_server/composer/framework/knowledge_pack.pyevent_lexicon (42 events), genre_context (15 genres), artist_context (~25 producers).
  • Full mode: clean-room apply_full_plan_v2 with per-section variants, native arrangement clip flow, drum-role pitch repair, zombie/leftover-track cleanup.
  • Develop mode: extend an existing 8-bar loop without disturbing the seed.
  • Fast mode: tier-classified hunt order (curated → atlas → bare). Bans bare-melodic Tier-B when curated alternatives exist.

Bugs fixed (live test wave)

  • BUG-FULL-MODE-14: bridge UDP race (handshake retry loop in Applier.preflight).
  • BUG-FULL-MODE-17: monitoring=In on every track (state polarity wrong; now Auto).
  • BUG-FULL-MODE-18: flat-tile arrangement instead of per-section variants.
  • BUG-FULL-MODE-19: track_index vs index field-name cascade in apply_full_plan_v2.
  • BUG-FULL-MODE-20: zombie tracks (catches default-named + true-empty).
  • BUG-FULL-MODE-21: drum pitch super-low (Transpose+24 ported from fast → full).
  • BUG-FULL-MODE-22 + 23: 32-tile arrangement (switched to create_native_arrangement_clip).

Known gaps (deferred to v1.25)

  • KnowledgePack.atlas_candidates_per_role is empty stub — agent still reaches for search_browser filename match instead of consulting indexed atlas. Headline of v1.25.
  • Full-mode reasoning loop (analyze→adjust→re-analyze) deferred.
  • Drum craft + bass craft sophistication passes deferred.

Tool count

459 (up from 453 in v1.23.6).

Install

npm install -g livepilot
# or download the .mcpb attached below

See CHANGELOG.md for full details.

v1.23.6 — analyzer cold-start + sidechain diagnostic + demo_story prose

30 Apr 19:10

Choose a tag to compare

Fixed

  • ensure_analyzer_on_master cold-start disambiguation. On a fresh Live boot the User Library browser cache is uncached, and find_and_load_device("LivePilot_Analyzer") can exceed the 20s recv timeout while BFS-ing the user library tree. The previous catch-block surfaced status="install_required" even though the .amxd is sitting at the canonical install path — sending the agent into a reinstall loop. New _analyzer_amxd_installed_at_user_library() filesystem check disambiguates: when the .amxd is present at ~/Music/Ableton/User Library/Presets/Audio Effects/Max Audio Effect/, the tool now returns status="cache_cold" with a retry hint instead. Genuine missing-.amxd path still returns install_required correctly. (mcp_server/tools/analyzer.py)
  • set_compressor_sidechain diagnostic depth. When _find_sidechain_surface returns None on Compressor2 (Live 12.3.6+), the raised error now includes class=... + canonical_parent.class=... + a widened child-attribute walk (input_routings, routing_inputs added to the probe). Lets the next live failure leave a tighter trail so the actual Compressor2 LOM shape can be confirmed in one round trip rather than a separate probe session. No behavior change for legacy Compressor (I) or the two known Compressor2 hypotheses. (remote_script/LivePilot/mixing.py)
  • atlas_demo_story production_decision class-name leak. harmonic-foundation and rhythmic-driver role branches fell back to primary_cls when user_name was empty — producing useless prose like "InstrumentGroupDevice chosen as harmonic spine." Both branches now use primary_uname or t_name or primary_cls, matching the texture-role fallback that was already correct. (mcp_server/atlas/demo_story.py)
  • atlas_extract_chain Macro N labeling on M4L devices. The rack-device path already resolved producer-named macros via resolve_preset_for_device, but the M4L (.amxd) device path emitted raw Macro N. Now both paths cross-reference the preset sidecar — PitchLoop89's "Spectral Stretch" gets the proper name instead of "Macro 2" so set_device_parameter resolves at execution time. (mcp_server/atlas/extract_chain.py)
  • Bundled atlas stats refresh. stats.enriched_devices was stale at 87 (from a v1.21.x scan); the actual enriched=True flag count had grown to 135. Recounted in place. No tool consumes the field with semantically-different behavior, but the stale stat had drifted past the soft-warn threshold's intent. (mcp_server/atlas/device_atlas.json)

Docs / drift

  • docs/M4L_BRIDGE.md: amxd ping reference and bridge-cmd count corrected — was version: "1.23.1" and "30 commands" from prior releases; now 1.23.6 and 32.
  • livepilot/skills/livepilot-core/references/genre-vocabularies.md: added Synthwave / Retrowave / Outrun entry to match the 15-genre claim in CLAUDE.md/AGENTS.md (file had 14; the YAML packet at concepts/genres/synthwave.yaml had been the source-of-truth for v1.18+).

Tests

  • tests/test_ensure_analyzer_on_master.py — 2 new tests under TestColdBrowserCacheDisambiguation covering the cache-cold branch (.amxd present → cache_cold) and the install-required branch (.amxd absent → install_required). Existing test_returns_install_required_when_device_not_in_browser updated to monkeypatch the new path-check helper so it exercises the genuinely-not-installed path regardless of dev-machine state.
  • Total: 3409 passing, 1 skipped, 0 failed (up from 3407 in v1.23.5).

Audit notes

A full read-only audit pass against BUGS.md + BUGS_TESTING_2026-04-30.md confirmed that 14 of the bugs documented in those files were already fixed in v1.23.4's bugfixes-2026-04-26 commit batch but never marked closed in the testing doc. No-ops here, but worth noting that the 38-bug list in the testing file is now ~5 genuinely-open items.

v1.23.5 — Remote Script reliability patch

30 Apr 15:50

Choose a tag to compare

v1.23.5 — Remote Script reliability patch

Patch release wrapping the PR #35 reimplementation (commit 4aec8e6) into a proper version cycle so npm, MCPB, the plugin marketplace, and Ableton User Library Remote Script all carry the same code. v1.23.4 shipped before those Remote Script fixes landed, leaving npm/MCPB stale relative to the marketplace mirror — this release closes that gap.

Fixed (Remote Script reliability)

Two production-blocking bugs in the Remote Script that ships into the Ableton process. Reported by @juancarlosaxtro-hash in PR #35; reimplemented cleanly with regression tests because the originally-submitted patch contained Python indentation errors that broke transport.py parse.

  • TCP server now replaces stale clients instead of rejecting new connections. Previously, when the MCP server restarted uncleanly (e.g. user relaunched Claude Desktop), the Remote Script's recv() loop didn't notice the disconnect for up to a second. During that window, the legitimate reconnect was rejected with STATE_ERROR("Another client is already connected") — often requiring a full Ableton restart to recover. New behavior: when the accept loop sees a new connection while one is "active", it closes the stale socket from the accept loop, joins the old client thread (with 2 s timeout, OUTSIDE the lock so the thread's finally block can acquire it), then accepts the new connection.
  • get_session_info no longer crashes on Group tracks. song.tracks includes Group tracks, which raise a RuntimeError on arm / has_midi_input / has_audio_input access. hasattr() returns True regardless because Live's LOM doesn't use AttributeError — only try/except on the actual access works. Without the guard, any session with a Group track failed the entire session-info call. Surgical try/except around the three LOM-fragile properties only.

Tests

  • tests/test_remote_server_single_client.py — rewrote test_second_client_gets_explicit_state_errortest_second_client_replaces_stale_connection for the new kick-stale semantics.
  • tests/test_remote_transport_group_tracks.py — new file, 4 tests covering normal-track baseline, mixed Group+normal sessions, all-Group edge case, and non-fragile-field preservation.
  • Total: 3407 passing, 1 skipped, 0 failed.

Install

MCPB one-click: Download livepilot-1.23.5.mcpb below.

npm: npm i -g livepilot@1.23.5 (after publish — see release commit).

Plugin marketplace: Update via Claude Code → Plugins → LivePilot → Update.

v1.23.4 — User Corpus + Pack-Atlas Phases C/D/E/F

30 Apr 15:05

Choose a tag to compare

v1.23.4 — User Corpus + Pack-Atlas Phases C/D/E/F

Two flagship architectural additions that make LivePilot adapt to your specific library rather than only the Ableton-shipped device set.

User Corpus subsystem — 14 new MCP tools

Plugin Knowledge Engine 4-phase pipeline (mcp_server/user_corpus/):

Phase Tool What it produces
1. Detect corpus_detect_plugins Inventory of installed VST3/AU/AUv3/VST2/AAX/CLAP/LV2 plugins. Path-walks /Library/Audio/Plug-Ins/{VST3,Components} + runs auval -a for AUv3/Mac Catalyst coverage
2. Canonicalize corpus_canonicalize_plugins Dedupes by vendor+name, prefers VST3 over AU, strips vendor suffix variants ("Valhalla DSP, LLC" = "Valhalladsp" = "Valhalla DSP")
2.5. Cluster corpus_cluster_plugins Groups by vendor for batched research dispatch
3. Research corpus_research_targets Emits structured WebSearch task packets the agent fulfills
4. Synthesize corpus_emit_synthesis_briefs Sonnet-subagent dispatch — writes per-plugin identity.yaml with sonic_fingerprint / reach_for / avoid / key_techniques / parameter_glossary / genre_affinity / producer_anchors

The output overlays land at ~/.livepilot/atlas-overlays/<namespace>/ across 4 namespaces (user/, m4l-devices/, packs/, elektron/) and survive npm updates. Every reasoning tool — atlas_search, atlas_chain_suggest, atlas_macro_fingerprint, atlas_describe_chain — consults the overlay alongside the factory atlas with a 50/50 result-budget split. Each result is tagged source: factory_atlas | user_overlay:<namespace>, so the agent always knows whether a recommendation is Ableton stock or your gear.

Why versatility outside Ableton matters. A static knowledge base ages out the day you install a new plugin. The corpus builder makes LivePilot's knowledge boundary equal to your library, not Ableton's library. Every plugin you add can be re-scanned and synthesized in minutes; every saved .adg rack you build can be indexed alongside Ableton's factory chains.

Quick start (3 commands):

corpus_setup_wizard           # one-shot — runs the full pipeline
# OR fine-grained:
corpus_detect_plugins use_auval=true
corpus_canonicalize_plugins
corpus_cluster_plugins
corpus_research_targets
corpus_emit_synthesis_briefs

See docs/USER_CORPUS_GUIDE.md and docs/PLUGIN_KNOWLEDGE_ENGINE.md for full documentation.

Pack-Atlas Phases C/D/E/F — six corpus-driven orchestration tools

  • atlas_macro_fingerprint (Phase D) — "more like this" preset similarity across 3,813 sidecars
  • atlas_transplant (Phase C) — BPM/scale/aesthetic translation with PRESERVE/SCALE/REMAP/REPLACE decisions
  • atlas_demo_story (Phase E) — track-by-track narrative for any of 104 factory demo .als files
  • atlas_extract_chain (Phase E) — surgical chain rebuild plan with three parameter-fidelity modes
  • atlas_pack_aware_compose (Phase F) — pack-coherent project bootstrap with eclectic mode
  • atlas_cross_pack_chain (Phase F) — 15 cross-pack workflow recipes with aesthetic overrides

All tools are dry-run by default — they return plans, not session mutations.

Two Routes — README addition

LivePilot accepts two equally first-class command modes:

  1. Artist route — vibe shorthand. Mapped to reach_for/avoid/key_techniques clusters, not a copy command.
  2. Intent route — direct musical specification. Swing percentages, micro-timing offsets in milliseconds, dB cuts, frequency ranges, modulation depths, envelope shapes — anything the LOM exposes.

The artist route is shorthand. The intent route is surgical. LivePilot is not a "make it sound like X" plagiarism tool — it's a precision control surface that also understands cultural shorthand when that's the fastest signal.

Bugfix waves

38 bugs surfaced across 5 testing rounds (4 P0 / 13 P1 / 14 P2 / 7 P3); 36 fixed, 2 deferred to v1.23.5. Highlights:

  • als_deep_parse macro extraction (was returning rack defaults instead of authored values — every demo sidecar shipped with macros at 0)
  • Live 9/10 .als scale-mode index decoding (15 modes mapped)
  • Plugin device metadata parsing from <PluginDesc> blocks
  • Chain-recursion symmetry across extract_chain / demo_story / transplant
  • 5-bug type-coercion family for direct Python callers
  • BUG-T#2 startup self-test warning fired spuriously on direct module imports

Stats

  • Tool count: 439 → 453 (+14 corpus_*)
  • Tests: 3403 passing, 1 skipped, 0 failed (up from 3180 in v1.23.3)
  • Domains: 54 (User Corpus added)

Install

MCPB one-click: Download livepilot-1.23.4.mcpb below.

npm: npx livepilot --install (after npm i -g livepilot@1.23.4).

Plugin marketplace: Update via Claude Code → Plugins → LivePilot → Update.

See README.md for full install routes.

v1.23.3 — classify_simpler_slices auto-resolves file_path

25 Apr 14:25

Choose a tag to compare

Headline fix: classify_simpler_slices now classifies slices when file_path is omitted (closes the v1.12 follow-up that left the tool's docstring promise unmet for 11 minor versions).

Pivots to Remote Script TCP path for sample-path resolution — reads device.sample.file_path directly via Live's Python LOM. The M4L bridge get_simpler_file_path case is kept as a forward-compat fallback.

CI amxd-freeze-drift gate updated to grep var VERSION = "X.Y.Z" (source-of-truth in bridge.js) instead of the legacy JSON form "version": "X.Y.Z" — eliminates the post-export binary-patch hack required since the v1.20-era refactor.

Live-verified end-to-end against Ableton 12.4 + a 23-slice WAV drum break: full classification (KICK/HAT/ghost labels + spectral % per slice) returns without manual file_path argument.

ff29381 carried forward: insert_rack_chain returns chain_index so add_drum_rack_pad no longer clobbers chain 0 on the second pad.

See CHANGELOG.md v1.23.3 entry for the full breakdown.

v1.23.2 — m4l ping version sync (.amxd freeze-drift fix)

25 Apr 09:35

Choose a tag to compare

Patch release — fixes the M4L bridge .amxd ping version that drifted in v1.23.1.

What changed

  • LivePilot_Analyzer.amxd was still embedding "version": "1.23.0" after the v1.23.1 patch (the patch only touched the Python/JS server surface, not the m4l_device files). This tripped the amxd-freeze-drift CI guard and meant the bridge UI reported the wrong build label.
  • In-place binary patch at offsets 32653 + 6691677 (1.23.01.23.2, 6 bytes each, file size unchanged at 6,754,576 bytes).
  • Source bumps in livepilot_bridge.js (var VERSION) and LivePilot_Analyzer.maxpat (UI comment label) so the next Max freeze starts in sync.

What did NOT change

  • Bridge functionality is identical to v1.23.1.
  • All 433 tools across 53 domains unchanged.
  • All extension/overlay behavior from v1.23.0/v1.23.1 unchanged.

Install

  • Plugin: Claude Code's Plugins panel will show an Update button — click it.
  • npm: npx -y livepilot@1.23.2
  • One-click .mcpb: download from this release.

v1.23.1 — Search tokenization patch

25 Apr 09:13

Choose a tag to compare

v1.23.1 — Search tokenization patch

Fixed

  • extension_atlas_search now tokenizes multi-word queries on whitespace and uses AND-of-substrings semantics. "sophie ponyboy" correctly matches "SOPHIE — Ponyboy kick" (em-dash separator no longer blocks the match). Single-token queries are unaffected (backwards-compatible).

Found during v1.23.0 smoke testing of the new extension_atlas_* surface.
3 new tests cover multi-token AND, separator-agnostic matching, and per-token score aggregation.

See CHANGELOG.md for full details.

v1.23.0 — User-local atlas overlays

25 Apr 08:51

Choose a tag to compare

v1.23.0 — User-local atlas overlay mechanism

Added

  • User-local atlas overlay loader at ~/.livepilot/atlas-overlays/<namespace>/ — drop YAML files to extend the atlas with custom hardware libraries, signature chains, technique recipes, etc. Survives npm updates. Generalizes the v1.22.0 user-scan pattern from "atlas data" to "any user-local namespace."
  • 3 new MCP tools (430 → 433):
    • extension_atlas_search(query, namespace?, entity_type?, limit?) — weighted substring search
    • extension_atlas_get(namespace, entity_id) — fetch full entry incl. body / requires_firmware
    • extension_atlas_list(namespace?) — enumerate namespaces + entity_type counts
  • New file: mcp_server/atlas/overlays.py (~261 lines) — OverlayEntry dataclass, OverlayIndex class, load_overlays() with safe_load, lazy path resolver, module-level singleton + accessor.
  • New doc: docs/EXTENSION_API.md — public API contract for v1.23.0+ extension authors.
  • Boot hook in mcp_server/server.py calls load_overlays() at startup (try/except wrapped, non-fatal).

Behavior

  • Loader uses yaml.safe_load only — rejects Python tags (!!python/*).
  • Per-file parse failures log a WARN and skip; per-entry validation failures log a WARN and skip; duplicate (namespace, entity_type, entity_id) last-loaded wins with a WARN.
  • For entity_type: signature_chain, tags and artists are required (search ranker depends on them). Other entity types treat these as optional.
  • entity_id and entity_type are str-coerced to defend against YAML scalar values like entity_id: 42.

Notes for extension authors

  • The contract (OverlayEntry field names, extension_atlas_* tool API) is stable from v1.23.0 forward.
  • Tool-name collisions: FastMCP enforces first-registered-wins. Bundled tools always beat extensions.
  • Phase 2 (user-local Python extensions via register(mcp)) lands in a future minor version.

Tests

  • 32 new tests (22 unit + 8 MCP-tool + 2 e2e integration), all green.
  • Full suite: 3176 pass, 1 skip, 0 fail.
  • Contract test now passes at 433 tools (was failing at 430).

M4L bridge

  • m4l_device/livepilot_bridge.js VERSION 1.21.3 → 1.23.0 (was 2 minor releases stale)
  • m4l_device/LivePilot_Analyzer.maxpat text label v1.22.1 → v1.23.0
  • m4l_device/LivePilot_Analyzer.amxd binary patched in place at byte offsets 32653 + 6691677 (file size unchanged at 6754576 bytes)

See CHANGELOG.md and docs/EXTENSION_API.md for details.