Releases: dreamrec/LivePilot
v1.26.0: rubric grader system + atlas-aware load preflight
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_searchnow surfacesself_contained,synthesis_type,complexity,use_cases,signature_techniques_count,first_technique_hint,gotchas_count,first_gotchawhenenriched=true. Truncation widened 120 → 400 chars.load_browser_itemappendsatlas_preflightwarning when the loaded device is enriched andself_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
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 onOriginalSimpler. 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_infopost-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.pyagainst"Sample Pitch Coarse"reappearing - Full suite: 3837 passed, 1 skipped
Counts
- Tool count: 459 → 462 (+3 atlas tools)
- Domain count: 55
server.jsondescription corrected (was 54 domains)
Install
npx livepilot --install(npm)- Claude Desktop one-click: download
livepilot-1.25.0.mcpbbelow
🤖 Generated with Claude Code
v1.24.0 — Compose Framework Rebuild
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.py—event_lexicon(42 events),genre_context(15 genres),artist_context(~25 producers). - Full mode: clean-room
apply_full_plan_v2with 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_indexvsindexfield-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_roleis empty stub — agent still reaches forsearch_browserfilename 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 belowSee CHANGELOG.md for full details.
v1.23.6 — analyzer cold-start + sidechain diagnostic + demo_story prose
Fixed
ensure_analyzer_on_mastercold-start disambiguation. On a fresh Live boot the User Library browser cache is uncached, andfind_and_load_device("LivePilot_Analyzer")can exceed the 20s recv timeout while BFS-ing the user library tree. The previous catch-block surfacedstatus="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 returnsstatus="cache_cold"with a retry hint instead. Genuine missing-.amxd path still returnsinstall_requiredcorrectly. (mcp_server/tools/analyzer.py)set_compressor_sidechaindiagnostic depth. When_find_sidechain_surfacereturns None on Compressor2 (Live 12.3.6+), the raised error now includesclass=...+canonical_parent.class=...+ a widened child-attribute walk (input_routings,routing_inputsadded 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_storyproduction_decision class-name leak.harmonic-foundationandrhythmic-driverrole branches fell back toprimary_clswhenuser_namewas empty — producing useless prose like "InstrumentGroupDevice chosen as harmonic spine." Both branches now useprimary_uname or t_name or primary_cls, matching the texture-role fallback that was already correct. (mcp_server/atlas/demo_story.py)atlas_extract_chainMacro N labeling on M4L devices. The rack-device path already resolved producer-named macros viaresolve_preset_for_device, but the M4L (.amxd) device path emitted rawMacro N. Now both paths cross-reference the preset sidecar — PitchLoop89's "Spectral Stretch" gets the proper name instead of "Macro 2" soset_device_parameterresolves at execution time. (mcp_server/atlas/extract_chain.py)- Bundled atlas stats refresh.
stats.enriched_deviceswas stale at87(from a v1.21.x scan); the actualenriched=Trueflag count had grown to135. 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 — wasversion: "1.23.1"and "30 commands" from prior releases; now1.23.6and32.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 atconcepts/genres/synthwave.yamlhad been the source-of-truth for v1.18+).
Tests
tests/test_ensure_analyzer_on_master.py— 2 new tests underTestColdBrowserCacheDisambiguationcovering the cache-cold branch (.amxdpresent → cache_cold) and the install-required branch (.amxdabsent → install_required). Existingtest_returns_install_required_when_device_not_in_browserupdated 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
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 withSTATE_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'sfinallyblock can acquire it), then accepts the new connection. get_session_infono longer crashes on Group tracks.song.tracksincludes Group tracks, which raise aRuntimeErroronarm/has_midi_input/has_audio_inputaccess.hasattr()returnsTrueregardless because Live's LOM doesn't useAttributeError— 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— rewrotetest_second_client_gets_explicit_state_error→test_second_client_replaces_stale_connectionfor 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
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 sidecarsatlas_transplant(Phase C) — BPM/scale/aesthetic translation with PRESERVE/SCALE/REMAP/REPLACE decisionsatlas_demo_story(Phase E) — track-by-track narrative for any of 104 factory demo.alsfilesatlas_extract_chain(Phase E) — surgical chain rebuild plan with three parameter-fidelity modesatlas_pack_aware_compose(Phase F) — pack-coherent project bootstrap with eclectic modeatlas_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:
- Artist route — vibe shorthand. Mapped to
reach_for/avoid/key_techniquesclusters, not a copy command. - 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_parsemacro 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
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)
Patch release — fixes the M4L bridge .amxd ping version that drifted in v1.23.1.
What changed
LivePilot_Analyzer.amxdwas 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 theamxd-freeze-driftCI guard and meant the bridge UI reported the wrong build label.- In-place binary patch at offsets 32653 + 6691677 (
1.23.0→1.23.2, 6 bytes each, file size unchanged at 6,754,576 bytes). - Source bumps in
livepilot_bridge.js(var VERSION) andLivePilot_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
v1.23.1 — Search tokenization patch
Fixed
extension_atlas_searchnow 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
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 searchextension_atlas_get(namespace, entity_id)— fetch full entry incl. body / requires_firmwareextension_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.pycallsload_overlays()at startup (try/except wrapped, non-fatal).
Behavior
- Loader uses
yaml.safe_loadonly — 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,tagsandartistsare required (search ranker depends on them). Other entity types treat these as optional. entity_idandentity_typeare str-coerced to defend against YAML scalar values likeentity_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.jsVERSION 1.21.3 → 1.23.0 (was 2 minor releases stale)m4l_device/LivePilot_Analyzer.maxpattext label v1.22.1 → v1.23.0m4l_device/LivePilot_Analyzer.amxdbinary patched in place at byte offsets 32653 + 6691677 (file size unchanged at 6754576 bytes)
See CHANGELOG.md and docs/EXTENSION_API.md for details.