livepilot 1.17.5 → 1.18.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/CHANGELOG.md +219 -0
- package/README.md +1 -1
- package/m4l_device/LivePilot_Analyzer.amxd +0 -0
- package/m4l_device/livepilot_bridge.js +12 -1
- package/mcp_server/__init__.py +1 -1
- package/package.json +1 -1
- package/remote_script/LivePilot/__init__.py +1 -1
- package/server.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,224 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.18.0 — Creative Director + concept packets + device affordances (April 23 2026)
|
|
4
|
+
|
|
5
|
+
A structural feature release. Addresses the "agent doesn't variate
|
|
6
|
+
enough, feels stuck in the same repetitive patterns" failure mode by
|
|
7
|
+
adding an enforcement layer on top of the existing tool surface.
|
|
8
|
+
**Zero new Python. Zero new MCP tools.** The entire feature is skill
|
|
9
|
+
documentation, structured YAML data, and prompt-level contracts.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **`livepilot-creative-director` skill** — new top-level skill that
|
|
14
|
+
routes creative intent through mandatory divergence before any
|
|
15
|
+
commit. Eight-phase contract: ground → compile brief → generate 3
|
|
16
|
+
plans with distinct `move.family` → cover 4 dimensions → preview
|
|
17
|
+
or rank → select + execute → evaluate → record. Critics (analyze_mix,
|
|
18
|
+
evaluate_move) DEFER until Phase 7 — firing them earlier pre-converges
|
|
19
|
+
the answer. Includes four reference files:
|
|
20
|
+
- `creative-brief-template.md` — YAML schema + 4 filled examples,
|
|
21
|
+
novelty_budget table with 6 user-framing buckets
|
|
22
|
+
- `move-family-diversity-rule.md` — canonical 6 families + family-vs-
|
|
23
|
+
dimension split + collision-avoidance rules
|
|
24
|
+
- `anti-repetition-rules.md` — recency threshold table (0-2/10
|
|
25
|
+
neutral, 3-4/10 least-weighted, ≥5/10 EXCLUDED) + borderline-
|
|
26
|
+
stuckness band (0.4-0.5 surfaces user option)
|
|
27
|
+
- `the-four-move-rule.md` — structural + rhythmic + timbral + spatial
|
|
28
|
+
dimension coverage with narrow-idiom exceptions for dub-techno /
|
|
29
|
+
ambient / beat-focused packets
|
|
30
|
+
|
|
31
|
+
- **Structured concept packets** (42 YAMLs under
|
|
32
|
+
`livepilot/skills/livepilot-core/references/concepts/`) — 28 artist
|
|
33
|
+
packets + 14 genre packets. Each packet carries `sonic_identity`,
|
|
34
|
+
`reach_for`, `avoid` (HARD filter), `evaluation_bias.target_dimensions`
|
|
35
|
+
+ `protect` floors, `move_family_bias.favor` + `deprioritize`,
|
|
36
|
+
`dimensions_in_scope` + `dimensions_deprioritized`, and
|
|
37
|
+
`novelty_budget_default`. Narrative `artist-vocabularies.md` and
|
|
38
|
+
`genre-vocabularies.md` stay as human-facing overviews; YAMLs are
|
|
39
|
+
the machine source-of-truth.
|
|
40
|
+
|
|
41
|
+
- **Device affordance metadata** (20 YAMLs under
|
|
42
|
+
`livepilot/skills/livepilot-core/references/affordances/`) — per-
|
|
43
|
+
device affordance packets for Echo, Auto Filter, Convolution Reverb,
|
|
44
|
+
Hybrid Reverb, Ping Pong Delay, Drift, Corpus, Granulator III,
|
|
45
|
+
Simpler, Wavetable, Operator, Poli, Saturator, Compressor, Glue
|
|
46
|
+
Compressor, Utility, EQ Eight, Chorus-Ensemble, Shifter, Vinyl
|
|
47
|
+
Distortion. Each covers `musical_roles`, `strong_for` / `risky_for`,
|
|
48
|
+
`subtle` / `moderate` / `aggressive` parameter ranges, `pairings`
|
|
49
|
+
(with before/after/parallel order), `anti_pairings`, `remeasure`
|
|
50
|
+
queue, and `dimensional_impact` mapping to the four-move-rule.
|
|
51
|
+
|
|
52
|
+
- **Evaluation artistic dimensions** — `livepilot-evaluation/SKILL.md`
|
|
53
|
+
extended with Family B dimensions (style_fit, distinctiveness,
|
|
54
|
+
motif_coherence, section_contrast, restraint, surprise_without_breakage)
|
|
55
|
+
in addition to Family A (punch, weight, etc). Both required for
|
|
56
|
+
creative-director turns.
|
|
57
|
+
|
|
58
|
+
- **Creative-success verdict taxonomy** — 5 verdicts assigned at
|
|
59
|
+
evaluation Step 8b: `safe_win`, `bold_win`, `interesting_failure`,
|
|
60
|
+
`identity_break`, `generic_fallback`. Drives promotion decisions.
|
|
61
|
+
|
|
62
|
+
- **Verdict-gated reflection promotion rubric** — `memory-guide.md`
|
|
63
|
+
extended with a promotion matrix that keeps memory from converging
|
|
64
|
+
on safe_win-adjacent moves. `bold_win` promotes immediately;
|
|
65
|
+
`safe_win` conditional on user-keep-for-2-turns; `interesting_failure`
|
|
66
|
+
curiosity-store only; `identity_break` and `generic_fallback` record
|
|
67
|
+
anti-preferences instead.
|
|
68
|
+
|
|
69
|
+
- **Schema test harness** — `tests/test_creative_director.py` (27
|
|
70
|
+
passing, 1 xfail tracking missing genre YAMLs). Verifies skill file
|
|
71
|
+
structure, packet counts, canonical family/dimension enforcement,
|
|
72
|
+
cross-reference resolution, and cross-skill integration (director ↔
|
|
73
|
+
evaluation ↔ memory-guide).
|
|
74
|
+
|
|
75
|
+
### Changed
|
|
76
|
+
|
|
77
|
+
- `livepilot-core/SKILL.md`: fixed semantic_moves family count (5→6,
|
|
78
|
+
`device_creation` was missing from the docs). Added director routing
|
|
79
|
+
pointer in the V2 Engine Skills table and Flow B preamble.
|
|
80
|
+
- `livepilot-wonder/SKILL.md`: added creative-director as a trigger
|
|
81
|
+
(not only stuck-rescue); split honesty rule to actively widen across
|
|
82
|
+
families BEFORE accepting <3 variants on first-pass creative calls.
|
|
83
|
+
- `livepilot-producer/AGENT.md`: director added to subagent skills
|
|
84
|
+
index with "load FIRST on open-ended creative intent" note.
|
|
85
|
+
- `artist-vocabularies.md` + `genre-vocabularies.md`: cross-reference
|
|
86
|
+
callouts pointing to the new YAML packets.
|
|
87
|
+
- `m4l_device/LivePilot_Analyzer.amxd` + `.maxpat` + `livepilot_bridge.js`:
|
|
88
|
+
versioning text added to analyzer UI for live identification across
|
|
89
|
+
instances.
|
|
90
|
+
|
|
91
|
+
### Pressure-testing
|
|
92
|
+
|
|
93
|
+
The director was developed under TDD-for-skills discipline: three
|
|
94
|
+
subagent pressure-scenarios run in two rounds, with verdict-driven
|
|
95
|
+
fixes between rounds. Round 1 surfaced 9 issues, Round 2 verified
|
|
96
|
+
each was fixed and surfaced 3 more (higher-order patterns only visible
|
|
97
|
+
after first-order bugs were gone). PR 3 affordance work caught 3
|
|
98
|
+
schema-level bugs (`atlas_uri` semantic mismatch, phantom
|
|
99
|
+
`ir_length`, parameter-name canonicalization gap) before ship.
|
|
100
|
+
|
|
101
|
+
### Known gaps
|
|
102
|
+
|
|
103
|
+
- ~20 narrative-only genres (downtempo, boom_bap, lo_fi, synthwave,
|
|
104
|
+
techno, detroit_techno, soul, footwork, deep_house, french_house,
|
|
105
|
+
disco, electronic, electronica, cinematic, hyperpop, drone,
|
|
106
|
+
bass_music, soulful_house, acid_techno, nu_disco, juke) referenced
|
|
107
|
+
by artist packets but not yet YAML-ified. Tracked via
|
|
108
|
+
`test_all_artist_genre_refs_resolve_strictly` xfail.
|
|
109
|
+
|
|
110
|
+
### Known issues from pre-ship live verification (v1.18.1 patch targets)
|
|
111
|
+
|
|
112
|
+
12 issues surfaced while running director end-to-end against a real
|
|
113
|
+
Ableton session before pushing v1.18.0. Shipping as-is rather than
|
|
114
|
+
blocking the release; patching in a focused follow-up. Severity is
|
|
115
|
+
this author's subjective production-impact rating.
|
|
116
|
+
|
|
117
|
+
**High severity — users will hit these in the first 30 seconds:**
|
|
118
|
+
|
|
119
|
+
1. **`create_experiment` auto-proposal is broken.** When called without
|
|
120
|
+
explicit `seeds` or `move_ids`, the keyword-overlap selector
|
|
121
|
+
generates single-character `move_id` values (`"t"`, `"w"`, `"m"`)
|
|
122
|
+
that fail with `"Move t not found"` at run time. All three branches
|
|
123
|
+
fail. Workaround: director MUST pass explicit `move_ids=[...]` —
|
|
124
|
+
auto-proposal path is unusable. (`mcp_server/experiment/engine.py`
|
|
125
|
+
auto-propose logic.)
|
|
126
|
+
2. **`propose_composer_branches` ignores concept packets.** A prompt
|
|
127
|
+
referencing Basic Channel produced generic EDM scaffold
|
|
128
|
+
(`Intro → Build → Drop → Breakdown → Drop 2 → Outro` + 6 standard
|
|
129
|
+
layers) instead of BC's continuous-evolution dub-techno form.
|
|
130
|
+
Composer falls back to genre-family defaults and doesn't consult
|
|
131
|
+
`concepts/artists/*.yaml` or `concepts/genres/*.yaml` arrangement_idioms.
|
|
132
|
+
3. **Director Plan A bypasses the action ledger.** When the director
|
|
133
|
+
executes via raw tool calls (`load_browser_item`, `set_device_parameter`,
|
|
134
|
+
etc.) instead of `apply_semantic_move` / `create_experiment +
|
|
135
|
+
commit_experiment`, `get_last_move` returns empty and anti-repetition
|
|
136
|
+
goes blind. Either make semantic_move commits mandatory for director
|
|
137
|
+
plan execution, or add a session-state inference fallback that reads
|
|
138
|
+
device/track deltas directly.
|
|
139
|
+
|
|
140
|
+
**Medium severity — edges and enforcement gaps:**
|
|
141
|
+
|
|
142
|
+
4. **Affordance YAML — Ping Pong Delay is a ghost packet.**
|
|
143
|
+
`affordances/devices/ping-pong-delay.yaml` describes a standalone
|
|
144
|
+
device that doesn't exist in Live 12 (empty `search_browser` result).
|
|
145
|
+
Ping-pong is a MODE of `Echo` (`Channel Mode = 1`). Merge the
|
|
146
|
+
affordance into `echo.yaml` or delete the file.
|
|
147
|
+
5. **Affordance YAML — Auto Filter ranges are legacy.** Modern
|
|
148
|
+
`AutoFilter2` class uses 0-1 normalized for Frequency (display
|
|
149
|
+
`"448 Hz"` at raw `0.45`), NOT the 20-135 legacy range the affordance
|
|
150
|
+
YAML documents. Either update the affordance to reflect
|
|
151
|
+
AutoFilter2 OR ship separate legacy/modern variants.
|
|
152
|
+
6. **Affordance YAML — `ir_length` phantom on Convolution Reverb.**
|
|
153
|
+
Already fixed in commit 9 by renaming to `decay_time`, but worth
|
|
154
|
+
flagging that this class of field-vs-actual drift needs a
|
|
155
|
+
systematic check (script that compares affordance parameter names
|
|
156
|
+
to `get_device_parameters` output for each device).
|
|
157
|
+
7. **Packet `avoid` list is advisory, not runtime-enforced.** Director
|
|
158
|
+
SKILL.md documents the hard-filter rule but there's no code path
|
|
159
|
+
that compares user requests or tool args against the active packet's
|
|
160
|
+
`avoid` list before executing. Ask for "bump the high-end" under an
|
|
161
|
+
active BC packet and nothing blocks the EQ boost.
|
|
162
|
+
8. **`locked_dimensions` respect is declarative only.** Same class as
|
|
163
|
+
(7) — director compiles a brief with explicit locks but no runtime
|
|
164
|
+
pre-flight check blocks tool calls that touch locked dimensions.
|
|
165
|
+
9. **`propose_composer_branches` silent `count` degradation.** Requesting
|
|
166
|
+
3 branches at `freshness < 0.7` returns 2 (only canonical +
|
|
167
|
+
energy_shift). User-visible surface returns fewer than requested
|
|
168
|
+
without flagging.
|
|
169
|
+
10. **Wonder Mode degrades to zero executable variants on empty/sparse
|
|
170
|
+
session context.** Tested with `enter_wonder_mode("I'm stuck")` on
|
|
171
|
+
a mostly-empty session — returned 3 identical analytical-only
|
|
172
|
+
variants with `"No matching executable moves found"`. Needs a
|
|
173
|
+
cold-start path that proposes starting-point seeds from memory
|
|
174
|
+
or concept packets rather than requiring existing session content.
|
|
175
|
+
11. **Evaluation tie-break is coarse.** 3-branch experiment with
|
|
176
|
+
different semantic moves (add_space, add_warmth, widen_stereo)
|
|
177
|
+
all scored identical 0.6. No clear winner emerges. Classifier
|
|
178
|
+
needs finer resolution OR explicit tie-break by novelty/taste.
|
|
179
|
+
12. **Low-novelty-budget escape hatch missing from 3-plan rule.**
|
|
180
|
+
`"keep the vibe, just cleaner"` → `novelty_budget = 0.30`. The
|
|
181
|
+
3-distinct-families rule fights against narrow cleanup requests.
|
|
182
|
+
Need explicit clause: "if `novelty_budget < 0.35`, 1-2 mix-family
|
|
183
|
+
plans is acceptable and honest."
|
|
184
|
+
|
|
185
|
+
**Also worth fixing:**
|
|
186
|
+
|
|
187
|
+
- `batch_set_parameters` schema — requires `{"Name": {"value": v}}`,
|
|
188
|
+
not `{"Name": v}`. Docs didn't make this obvious.
|
|
189
|
+
- State continuity between experiment branches — before-snapshot
|
|
190
|
+
track levels drifted between branches (0.76 → 0 → 0.87). Each
|
|
191
|
+
branch sees a different baseline. Needs transport-state locking.
|
|
192
|
+
- Hybrid-reference compilation algorithm — multi-packet asks
|
|
193
|
+
("Basic Channel meets Dilla swing") work via LLM ad-hoc reasoning,
|
|
194
|
+
not via explicit union/intersection logic. Define the rule.
|
|
195
|
+
|
|
196
|
+
All 15 items are tracked for a v1.18.1 patch. The core v1.18.0
|
|
197
|
+
machinery (8-phase director contract, concept packets, affordances,
|
|
198
|
+
evaluation dimensions, verdict taxonomy) works correctly when plans
|
|
199
|
+
are constructed with explicit `move_ids` — which is the documented
|
|
200
|
+
primary path.
|
|
201
|
+
|
|
202
|
+
### Live Ableton session result
|
|
203
|
+
|
|
204
|
+
Test scenario: build a Basic Channel dub chain on a return track, then
|
|
205
|
+
source (Meld Juno Square chord stab) with sends. Chain built cleanly.
|
|
206
|
+
User feedback on initial Plan A: "super basic" (default presets lack
|
|
207
|
+
character). Swapped Drift default → `Poly Juno Square.adv` preset.
|
|
208
|
+
Improved character. Flow A of the director (build a single plan, verify,
|
|
209
|
+
iterate) is production-viable today. Flow B (divergence via experiment)
|
|
210
|
+
has the 3 high-severity issues above.
|
|
211
|
+
|
|
212
|
+
### Process note
|
|
213
|
+
|
|
214
|
+
This release was authored in a single session as a series of 6 PRs
|
|
215
|
+
(Creative Director skill → Concept packets → Affordances → Evaluation
|
|
216
|
+
dimensions → Reflection rubric → Test harness), each pressure-tested
|
|
217
|
+
before moving to the next. Outside-reviewer design plan is at
|
|
218
|
+
`docs/plans/livepilot_creativity_plan.md`.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
3
222
|
## 1.17.5 — Classify error-only commit payloads as failures (April 23 2026)
|
|
4
223
|
|
|
5
224
|
### Fixed
|
package/README.md
CHANGED
|
@@ -101,7 +101,7 @@ Most MCP servers are tool collections — they execute commands. LivePilot is an
|
|
|
101
101
|
|
|
102
102
|
**MCP Server** (`mcp_server/`) — Python FastMCP server. Validates inputs, routes commands to the Remote Script over TCP, manages the M4L bridge, runs the atlas, sample engine, composer, and all intelligence engines. This is what your AI client connects to.
|
|
103
103
|
|
|
104
|
-
**M4L Bridge** (`m4l_device/`) — Optional Max for Live Audio Effect on the master track. Provides deep LOM access through Max's LiveAPI that the ControlSurface API can't reach. UDP 9880 (M4L to server) carries spectral data and LiveAPI responses. OSC 9881 (server to M4L) sends commands. The 32 spectral/analyzer tools strictly require the bridge; device and sample tools that call the bridge also have graceful fallbacks, so core functionality works without it. Backed by
|
|
104
|
+
**M4L Bridge** (`m4l_device/`) — Optional Max for Live Audio Effect on the master track. Provides deep LOM access through Max's LiveAPI that the ControlSurface API can't reach. UDP 9880 (M4L to server) carries spectral data and LiveAPI responses. OSC 9881 (server to M4L) sends commands. The 32 spectral/analyzer tools strictly require the bridge; device and sample tools that call the bridge also have graceful fallbacks, so core functionality works without it. Backed by 31 bridge commands for hidden parameters, Simpler internals, warp markers, display values, and Simpler warp / Compressor sidechain writes that live on child objects Python can't reach.
|
|
105
105
|
|
|
106
106
|
**Device Atlas** (`mcp_server/atlas/`) — In-memory indexed JSON database. 1305 devices with browser URIs, 120 enriched with YAML sonic intelligence profiles (mood, genre, texture, recommended chains). 6 indexes: by_id, by_name, by_uri, by_category, by_tag, by_genre. The AI never hallucinates a device name or preset — it always resolves against the atlas first.
|
|
107
107
|
|
|
Binary file
|
|
@@ -31,6 +31,11 @@ autowatch = 1;
|
|
|
31
31
|
inlets = 2; // 0: OSC commands, 1: dspstate~ (sample rate)
|
|
32
32
|
outlets = 2; // 0: to udpsend (responses), 1: to buffer~/status
|
|
33
33
|
|
|
34
|
+
// Single source of truth for the bridge version — bumped alongside the
|
|
35
|
+
// rest of the release manifest. Surfaced in the UI via messnamed("livepilot_version", ...)
|
|
36
|
+
// so the frozen .amxd visibly reports which build it was last exported from.
|
|
37
|
+
var VERSION = "1.17.5";
|
|
38
|
+
|
|
34
39
|
// ── State ──────────────────────────────────────────────────────────────────
|
|
35
40
|
|
|
36
41
|
var cursor_a = null; // Primary LiveAPI cursor
|
|
@@ -95,7 +100,13 @@ function anything() {
|
|
|
95
100
|
function dispatch(cmd, args) {
|
|
96
101
|
switch(cmd) {
|
|
97
102
|
case "ping":
|
|
98
|
-
send_response({"ok": true, "version":
|
|
103
|
+
send_response({"ok": true, "version": VERSION});
|
|
104
|
+
break;
|
|
105
|
+
case "get_version":
|
|
106
|
+
// Side-channel for the UI label — emits on the "livepilot_version"
|
|
107
|
+
// named bus so a [r livepilot_version] in the patcher can set a
|
|
108
|
+
// [comment] without touching the OSC response outlet.
|
|
109
|
+
messnamed("livepilot_version", VERSION);
|
|
99
110
|
break;
|
|
100
111
|
case "get_params":
|
|
101
112
|
cmd_get_params(args);
|
package/mcp_server/__init__.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""LivePilot MCP Server — bridges MCP protocol to Ableton Live."""
|
|
2
|
-
__version__ = "1.
|
|
2
|
+
__version__ = "1.18.0"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "livepilot",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.18.0",
|
|
4
4
|
"mcpName": "io.github.dreamrec/livepilot",
|
|
5
5
|
"description": "Agentic production system for Ableton Live 12 — 427 tools, 52 domains. Device atlas (1305 devices), sample engine (Splice + browser + filesystem), auto-composition, spectral perception, technique memory, creative intelligence (12 engines)",
|
|
6
6
|
"author": "Pilot Studio",
|
|
@@ -5,7 +5,7 @@ Entry point for the ControlSurface. Ableton calls create_instance(c_instance)
|
|
|
5
5
|
when this script is selected in Preferences > Link, Tempo & MIDI.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
__version__ = "1.
|
|
8
|
+
__version__ = "1.18.0"
|
|
9
9
|
|
|
10
10
|
from _Framework.ControlSurface import ControlSurface
|
|
11
11
|
from . import router
|
package/server.json
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"url": "https://github.com/dreamrec/LivePilot",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "1.
|
|
9
|
+
"version": "1.18.0",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "livepilot",
|
|
14
|
-
"version": "1.
|
|
14
|
+
"version": "1.18.0",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
}
|