livepilot 1.26.0 → 1.26.1

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.
Files changed (181) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +1 -1
  3. package/installer/codex.js +87 -9
  4. package/livepilot/.Codex-plugin/plugin.json +8 -0
  5. package/livepilot/.claude-plugin/plugin.json +8 -0
  6. package/livepilot/.mcp.json +8 -0
  7. package/livepilot/agents/livepilot-producer/AGENT.md +314 -0
  8. package/livepilot/commands/arrange.md +47 -0
  9. package/livepilot/commands/beat.md +81 -0
  10. package/livepilot/commands/evaluate.md +49 -0
  11. package/livepilot/commands/memory.md +22 -0
  12. package/livepilot/commands/mix.md +47 -0
  13. package/livepilot/commands/perform.md +42 -0
  14. package/livepilot/commands/session.md +13 -0
  15. package/livepilot/commands/sounddesign.md +58 -0
  16. package/livepilot/rubrics/default_preset_check.md +82 -0
  17. package/livepilot/rubrics/layer_accumulation.md +79 -0
  18. package/livepilot/rubrics/layer_precision.md +79 -0
  19. package/livepilot/rubrics/modulation_presence.md +63 -0
  20. package/livepilot/rubrics/sound_design_depth.md +40 -0
  21. package/livepilot/skills/livepilot-arrangement/SKILL.md +164 -0
  22. package/livepilot/skills/livepilot-composition-engine/SKILL.md +151 -0
  23. package/livepilot/skills/livepilot-composition-engine/references/form-patterns.md +97 -0
  24. package/livepilot/skills/livepilot-composition-engine/references/transition-archetypes.md +102 -0
  25. package/livepilot/skills/livepilot-core/SKILL.md +261 -0
  26. package/livepilot/skills/livepilot-core/references/ableton-workflow-patterns.md +831 -0
  27. package/livepilot/skills/livepilot-core/references/affordances/_schema.md +160 -0
  28. package/livepilot/skills/livepilot-core/references/affordances/devices/auto-filter.yaml +133 -0
  29. package/livepilot/skills/livepilot-core/references/affordances/devices/chorus-ensemble.yaml +91 -0
  30. package/livepilot/skills/livepilot-core/references/affordances/devices/compressor.yaml +98 -0
  31. package/livepilot/skills/livepilot-core/references/affordances/devices/convolution-reverb.yaml +113 -0
  32. package/livepilot/skills/livepilot-core/references/affordances/devices/corpus.yaml +84 -0
  33. package/livepilot/skills/livepilot-core/references/affordances/devices/drift.yaml +105 -0
  34. package/livepilot/skills/livepilot-core/references/affordances/devices/echo.yaml +108 -0
  35. package/livepilot/skills/livepilot-core/references/affordances/devices/eq-eight.yaml +95 -0
  36. package/livepilot/skills/livepilot-core/references/affordances/devices/glue-compressor.yaml +88 -0
  37. package/livepilot/skills/livepilot-core/references/affordances/devices/granulator-iii.yaml +104 -0
  38. package/livepilot/skills/livepilot-core/references/affordances/devices/hybrid-reverb.yaml +83 -0
  39. package/livepilot/skills/livepilot-core/references/affordances/devices/operator.yaml +98 -0
  40. package/livepilot/skills/livepilot-core/references/affordances/devices/ping-pong-delay.yaml +104 -0
  41. package/livepilot/skills/livepilot-core/references/affordances/devices/poli.yaml +98 -0
  42. package/livepilot/skills/livepilot-core/references/affordances/devices/saturator.yaml +98 -0
  43. package/livepilot/skills/livepilot-core/references/affordances/devices/shifter.yaml +77 -0
  44. package/livepilot/skills/livepilot-core/references/affordances/devices/simpler.yaml +113 -0
  45. package/livepilot/skills/livepilot-core/references/affordances/devices/utility.yaml +95 -0
  46. package/livepilot/skills/livepilot-core/references/affordances/devices/vinyl-distortion.yaml +92 -0
  47. package/livepilot/skills/livepilot-core/references/affordances/devices/wavetable.yaml +98 -0
  48. package/livepilot/skills/livepilot-core/references/artist-vocabularies.md +389 -0
  49. package/livepilot/skills/livepilot-core/references/automation-atlas.md +272 -0
  50. package/livepilot/skills/livepilot-core/references/concepts/_schema.md +158 -0
  51. package/livepilot/skills/livepilot-core/references/concepts/artists/akufen.yaml +116 -0
  52. package/livepilot/skills/livepilot-core/references/concepts/artists/aphex-twin.yaml +133 -0
  53. package/livepilot/skills/livepilot-core/references/concepts/artists/arca-sophie.yaml +131 -0
  54. package/livepilot/skills/livepilot-core/references/concepts/artists/autechre.yaml +130 -0
  55. package/livepilot/skills/livepilot-core/references/concepts/artists/basic-channel.yaml +140 -0
  56. package/livepilot/skills/livepilot-core/references/concepts/artists/basinski.yaml +126 -0
  57. package/livepilot/skills/livepilot-core/references/concepts/artists/boards-of-canada.yaml +124 -0
  58. package/livepilot/skills/livepilot-core/references/concepts/artists/burial.yaml +127 -0
  59. package/livepilot/skills/livepilot-core/references/concepts/artists/com-truise-tycho.yaml +121 -0
  60. package/livepilot/skills/livepilot-core/references/concepts/artists/daft-punk.yaml +117 -0
  61. package/livepilot/skills/livepilot-core/references/concepts/artists/dj-premier-rza.yaml +119 -0
  62. package/livepilot/skills/livepilot-core/references/concepts/artists/gas.yaml +134 -0
  63. package/livepilot/skills/livepilot-core/references/concepts/artists/hawtin.yaml +127 -0
  64. package/livepilot/skills/livepilot-core/references/concepts/artists/isolee-luomo.yaml +130 -0
  65. package/livepilot/skills/livepilot-core/references/concepts/artists/j-dilla.yaml +133 -0
  66. package/livepilot/skills/livepilot-core/references/concepts/artists/jeff-mills.yaml +120 -0
  67. package/livepilot/skills/livepilot-core/references/concepts/artists/johannsson-richter.yaml +132 -0
  68. package/livepilot/skills/livepilot-core/references/concepts/artists/madlib.yaml +124 -0
  69. package/livepilot/skills/livepilot-core/references/concepts/artists/moodymann-theo-parrish.yaml +121 -0
  70. package/livepilot/skills/livepilot-core/references/concepts/artists/oneohtrix-point-never.yaml +126 -0
  71. package/livepilot/skills/livepilot-core/references/concepts/artists/photek-source-direct.yaml +120 -0
  72. package/livepilot/skills/livepilot-core/references/concepts/artists/rashad-spinn-traxman.yaml +122 -0
  73. package/livepilot/skills/livepilot-core/references/concepts/artists/robert-henke.yaml +113 -0
  74. package/livepilot/skills/livepilot-core/references/concepts/artists/shackleton.yaml +124 -0
  75. package/livepilot/skills/livepilot-core/references/concepts/artists/skream-mala.yaml +119 -0
  76. package/livepilot/skills/livepilot-core/references/concepts/artists/stars-of-the-lid.yaml +119 -0
  77. package/livepilot/skills/livepilot-core/references/concepts/artists/tim-hecker.yaml +122 -0
  78. package/livepilot/skills/livepilot-core/references/concepts/artists/villalobos.yaml +135 -0
  79. package/livepilot/skills/livepilot-core/references/concepts/genres/ambient.yaml +137 -0
  80. package/livepilot/skills/livepilot-core/references/concepts/genres/boom_bap.yaml +124 -0
  81. package/livepilot/skills/livepilot-core/references/concepts/genres/deep-minimal.yaml +130 -0
  82. package/livepilot/skills/livepilot-core/references/concepts/genres/deep_house.yaml +130 -0
  83. package/livepilot/skills/livepilot-core/references/concepts/genres/detroit_techno.yaml +116 -0
  84. package/livepilot/skills/livepilot-core/references/concepts/genres/disco.yaml +123 -0
  85. package/livepilot/skills/livepilot-core/references/concepts/genres/downtempo.yaml +129 -0
  86. package/livepilot/skills/livepilot-core/references/concepts/genres/drone.yaml +133 -0
  87. package/livepilot/skills/livepilot-core/references/concepts/genres/drum-and-bass.yaml +119 -0
  88. package/livepilot/skills/livepilot-core/references/concepts/genres/dub-techno.yaml +132 -0
  89. package/livepilot/skills/livepilot-core/references/concepts/genres/dub.yaml +129 -0
  90. package/livepilot/skills/livepilot-core/references/concepts/genres/dubstep.yaml +120 -0
  91. package/livepilot/skills/livepilot-core/references/concepts/genres/experimental.yaml +136 -0
  92. package/livepilot/skills/livepilot-core/references/concepts/genres/footwork.yaml +119 -0
  93. package/livepilot/skills/livepilot-core/references/concepts/genres/hip-hop.yaml +132 -0
  94. package/livepilot/skills/livepilot-core/references/concepts/genres/house.yaml +126 -0
  95. package/livepilot/skills/livepilot-core/references/concepts/genres/hyperpop.yaml +128 -0
  96. package/livepilot/skills/livepilot-core/references/concepts/genres/idm.yaml +134 -0
  97. package/livepilot/skills/livepilot-core/references/concepts/genres/lo_fi.yaml +129 -0
  98. package/livepilot/skills/livepilot-core/references/concepts/genres/microhouse.yaml +138 -0
  99. package/livepilot/skills/livepilot-core/references/concepts/genres/minimal-techno.yaml +116 -0
  100. package/livepilot/skills/livepilot-core/references/concepts/genres/modern-classical.yaml +123 -0
  101. package/livepilot/skills/livepilot-core/references/concepts/genres/soul.yaml +125 -0
  102. package/livepilot/skills/livepilot-core/references/concepts/genres/synthwave.yaml +123 -0
  103. package/livepilot/skills/livepilot-core/references/concepts/genres/techno.yaml +123 -0
  104. package/livepilot/skills/livepilot-core/references/concepts/genres/trap.yaml +120 -0
  105. package/livepilot/skills/livepilot-core/references/concepts/genres/uk-garage.yaml +121 -0
  106. package/livepilot/skills/livepilot-core/references/device-atlas/00-index.md +110 -0
  107. package/livepilot/skills/livepilot-core/references/device-atlas/distortion-and-character.md +687 -0
  108. package/livepilot/skills/livepilot-core/references/device-atlas/drums-and-percussion.md +753 -0
  109. package/livepilot/skills/livepilot-core/references/device-atlas/dynamics-and-punch.md +525 -0
  110. package/livepilot/skills/livepilot-core/references/device-atlas/eq-and-filtering.md +402 -0
  111. package/livepilot/skills/livepilot-core/references/device-atlas/midi-tools.md +963 -0
  112. package/livepilot/skills/livepilot-core/references/device-atlas/movement-and-modulation.md +874 -0
  113. package/livepilot/skills/livepilot-core/references/device-atlas/space-and-depth.md +571 -0
  114. package/livepilot/skills/livepilot-core/references/device-atlas/spectral-and-weird.md +714 -0
  115. package/livepilot/skills/livepilot-core/references/device-atlas/synths-native.md +953 -0
  116. package/livepilot/skills/livepilot-core/references/device-knowledge/00-index.md +34 -0
  117. package/livepilot/skills/livepilot-core/references/device-knowledge/automation-as-music.md +204 -0
  118. package/livepilot/skills/livepilot-core/references/device-knowledge/chains-genre.md +173 -0
  119. package/livepilot/skills/livepilot-core/references/device-knowledge/creative-thinking.md +211 -0
  120. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-distortion.md +188 -0
  121. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-space.md +162 -0
  122. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-spectral.md +229 -0
  123. package/livepilot/skills/livepilot-core/references/device-knowledge/instruments-synths.md +243 -0
  124. package/livepilot/skills/livepilot-core/references/genre-vocabularies.md +382 -0
  125. package/livepilot/skills/livepilot-core/references/m4l-devices.md +352 -0
  126. package/livepilot/skills/livepilot-core/references/memory-guide.md +178 -0
  127. package/livepilot/skills/livepilot-core/references/midi-recipes.md +402 -0
  128. package/livepilot/skills/livepilot-core/references/mixing-patterns.md +578 -0
  129. package/livepilot/skills/livepilot-core/references/overview.md +300 -0
  130. package/livepilot/skills/livepilot-core/references/pack-knowledge.md +319 -0
  131. package/livepilot/skills/livepilot-core/references/sample-manipulation.md +724 -0
  132. package/livepilot/skills/livepilot-core/references/sound-design-deep.md +140 -0
  133. package/livepilot/skills/livepilot-core/references/sound-design.md +393 -0
  134. package/livepilot/skills/livepilot-corpus-builder/SKILL.md +379 -0
  135. package/livepilot/skills/livepilot-creative-director/SKILL.md +455 -0
  136. package/livepilot/skills/livepilot-creative-director/references/anti-repetition-rules.md +214 -0
  137. package/livepilot/skills/livepilot-creative-director/references/creative-brief-template.md +222 -0
  138. package/livepilot/skills/livepilot-creative-director/references/hybrid-compilation.md +185 -0
  139. package/livepilot/skills/livepilot-creative-director/references/move-family-diversity-rule.md +258 -0
  140. package/livepilot/skills/livepilot-creative-director/references/phase-6-execution.md +409 -0
  141. package/livepilot/skills/livepilot-creative-director/references/the-four-move-rule.md +192 -0
  142. package/livepilot/skills/livepilot-devices/SKILL.md +213 -0
  143. package/livepilot/skills/livepilot-devices/references/load_browser_item-uri-grammar.md +82 -0
  144. package/livepilot/skills/livepilot-evaluation/SKILL.md +195 -0
  145. package/livepilot/skills/livepilot-evaluation/references/capability-modes.md +176 -0
  146. package/livepilot/skills/livepilot-evaluation/references/evaluation-contracts.md +121 -0
  147. package/livepilot/skills/livepilot-evaluation/references/memory-promotion.md +110 -0
  148. package/livepilot/skills/livepilot-mix-engine/SKILL.md +136 -0
  149. package/livepilot/skills/livepilot-mix-engine/references/mix-critics.md +143 -0
  150. package/livepilot/skills/livepilot-mix-engine/references/mix-moves.md +105 -0
  151. package/livepilot/skills/livepilot-mixing/SKILL.md +157 -0
  152. package/livepilot/skills/livepilot-notes/SKILL.md +130 -0
  153. package/livepilot/skills/livepilot-performance-engine/SKILL.md +122 -0
  154. package/livepilot/skills/livepilot-performance-engine/references/performance-safety.md +98 -0
  155. package/livepilot/skills/livepilot-release/SKILL.md +151 -0
  156. package/livepilot/skills/livepilot-sample-engine/SKILL.md +117 -0
  157. package/livepilot/skills/livepilot-sample-engine/references/sample-critics.md +87 -0
  158. package/livepilot/skills/livepilot-sample-engine/references/sample-philosophy.md +51 -0
  159. package/livepilot/skills/livepilot-sample-engine/references/sample-techniques.md +131 -0
  160. package/livepilot/skills/livepilot-sound-design-engine/SKILL.md +225 -0
  161. package/livepilot/skills/livepilot-sound-design-engine/references/patch-model.md +119 -0
  162. package/livepilot/skills/livepilot-sound-design-engine/references/sound-design-critics.md +118 -0
  163. package/livepilot/skills/livepilot-wonder/SKILL.md +143 -0
  164. package/m4l_device/LivePilot_Analyzer.amxd +0 -0
  165. package/m4l_device/LivePilot_Elektron.amxd +0 -0
  166. package/m4l_device/LivePilot_Elektron.maxpat +758 -0
  167. package/m4l_device/livepilot_bridge.js +1 -1
  168. package/m4l_device/livepilot_elektron_bridge.js +82 -0
  169. package/mcp_server/__init__.py +1 -1
  170. package/mcp_server/composer/develop/apply.py +1 -1
  171. package/mcp_server/composer/full/apply.py +32 -6
  172. package/mcp_server/m4l_bridge.py +5 -0
  173. package/mcp_server/runtime/execution_router.py +6 -0
  174. package/mcp_server/runtime/mcp_dispatch.py +18 -0
  175. package/mcp_server/runtime/remote_commands.py +2 -0
  176. package/mcp_server/server.py +11 -7
  177. package/package.json +20 -5
  178. package/remote_script/LivePilot/__init__.py +1 -1
  179. package/remote_script/LivePilot/server.py +63 -2
  180. package/requirements.txt +3 -3
  181. package/server.json +3 -3
@@ -0,0 +1,213 @@
1
+ ---
2
+ name: livepilot-devices
3
+ description: This skill should be used when the user asks to "load a device", "add an effect", "find a plugin", "device chain", "rack", "preset", "sound design setup", "load instrument", "find a synth", or wants to browse, load, and configure devices in Ableton Live.
4
+ ---
5
+
6
+ # Device Loading and Configuration
7
+
8
+ Load instruments, effects, and plugins into Ableton Live tracks. Every device operation follows one discipline: search first, verify after.
9
+
10
+ ## Primary Workflow — Atlas-Driven
11
+
12
+ The device atlas contains 1,305 devices with sonic descriptions, recipes, and recommendations. Always start here:
13
+
14
+ 1. **Discover:** `atlas_search(query)` — find devices by name, sound character, or genre
15
+ 2. **Learn:** `atlas_device_info(device_id)` — full parameters, recipes, gotchas, pairings
16
+ 3. **Suggest:** `atlas_suggest(intent, genre)` — "I need a warm pad" → ranked device+recipe combos
17
+ 4. **Chain:** `atlas_chain_suggest(role, genre)` — full device chain for a track role (instrument + effects)
18
+ 5. **Load:** Use the URI from atlas results → `load_browser_item(uri)` or `find_and_load_device(name)`
19
+ 6. **Recipe:** Apply starter recipe params → `batch_set_parameters(params)` from the atlas entry
20
+ 7. **Verify:** `get_device_info(track_index, device_index)` — check health flags
21
+
22
+ If the atlas doesn't have a device (newly installed plugin, user sample), fall back to the browser workflow below.
23
+
24
+ ## Browser Workflow — The Fallback Path
25
+
26
+ Use the browser workflow when the atlas doesn't have what you need:
27
+
28
+ 1. **Search:** `search_browser(path, name_filter)` — returns a list of matching items with exact URIs
29
+ 2. **Inspect:** Read the results. Confirm the item name, type, and path match what you need
30
+ 3. **Load:** `load_browser_item(uri)` — pass the exact URI string from search results
31
+
32
+ Common search paths:
33
+ - `path="Instruments"` — synths, samplers, instrument racks
34
+ - `path="Drums"` — drum racks, drum kits, percussion
35
+ - `path="Audio Effects"` — reverb, delay, compressor, EQ, saturator
36
+ - `path="MIDI Effects"` — arpeggiator, chord, scale, random
37
+ - `path="Sounds"` — preset sounds organized by category
38
+ - `path="Samples"` — audio samples, one-shots, loops
39
+
40
+ Combine path with `name_filter` to narrow results. Example: `search_browser(path="Drums", name_filter="808 Kit")`.
41
+
42
+ NEVER invent device or preset names. A hallucinated name like "echomorph-hpf" or "Drift Pad Wonk" will crash the load. Always search first, then use the exact URI from results.
43
+
44
+ For the full URI grammar reference (the three forms — FileId, bare-name, path-style — failure modes, and discovery recipe), see `references/load_browser_item-uri-grammar.md`.
45
+
46
+ ## find_and_load_device — The Shortcut
47
+
48
+ Use `find_and_load_device(name)` ONLY for these simple built-in effects:
49
+ - "Reverb"
50
+ - "Delay"
51
+ - "Compressor"
52
+ - "EQ Eight"
53
+ - "Saturator"
54
+ - "Utility"
55
+
56
+ For everything else — instruments, racks, presets, AU/VST plugins — use the browser workflow. The shortcut matches greedily and can load a sample file instead of a synth when names overlap (e.g., "Drift" matches "Synth Bass Drift Pad Wonk Bass.wav" before the Drift synthesizer).
57
+
58
+ ## Plugin Health Verification
59
+
60
+ After loading any device, verify it actually works:
61
+
62
+ 1. Call `get_device_info(track_index, device_index)` on the newly loaded device
63
+ 2. Check `parameter_count` — if the device is an AU/VST plugin (`class_name` contains "PluginDevice") and `parameter_count` is 1 or less, the plugin is dead. The shell loaded but the DSP engine crashed.
64
+ 3. Check `health_flags` for `opaque_or_failed_plugin` (dead or untweakable AU/VST) or `sample_dependent` (needs source audio)
65
+ 4. Check `plugin_host_status` and `mcp_sound_design_ready`
66
+ 5. If `mcp_sound_design_ready` is `false`: delete the device with `delete_device`, replace it with a native Ableton alternative, and report the failure to the user
67
+
68
+ Dead plugin recovery pattern:
69
+ ```
70
+ get_device_info → parameter_count <= 1 on PluginDevice?
71
+ → delete_device(track_index, device_index)
72
+ → search_browser for native alternative
73
+ → load_browser_item with replacement URI
74
+ → report failure and substitution to user
75
+ ```
76
+
77
+ ## Rack Introspection
78
+
79
+ Use `walk_device_tree(track_index)` to see the full nested structure of racks on a track — Instrument Racks, Audio Effect Racks, and Drum Racks with all their chains and sub-devices.
80
+
81
+ Use `get_rack_chains(track_index, device_index)` to inspect individual rack chain contents. For Drum Racks, this reveals which pads have samples loaded and which chains exist. An empty Drum Rack (zero chains) produces silence.
82
+
83
+ Set chain volumes with `set_chain_volume(track_index, device_index, chain_index, volume)` to balance rack layers.
84
+
85
+ ## Drum Rack Rule
86
+
87
+ NEVER load a bare "Drum Rack" — it is an empty container with zero chains and produces silence. Always load a kit preset through the browser:
88
+
89
+ ```
90
+ search_browser(path="Drums", name_filter="Kit")
91
+ ```
92
+
93
+ Pick a real kit from results: "909 Core Kit", "808 Core Kit", "Boom Bap Kit", "Lo-Fi Kit", etc. These come pre-loaded with samples on their pads.
94
+
95
+ After loading any Drum Rack preset, verify with `get_rack_chains` that chains exist and have named pads like "Bass Drum", "Snare", "Hi-Hat".
96
+
97
+ ## Custom Drum Rack Construction (build a kit from one-shots)
98
+
99
+ When the user asks for a custom kit ("build me a minimal-techno kit", "make a Dilla-style boom-bap kit from these samples"), use `add_drum_rack_pad` — NOT repeated `load_browser_item` calls.
100
+
101
+ **Why this matters (BUG-2026-04-22 #1):** Calling `load_browser_item` repeatedly on a track that contains a Drum Rack does NOT add new pads. The first call creates a chain at note 36; every subsequent call REPLACES the existing chain instead of appending to the next pad. After 7 sequential drops you end up with exactly 1 chain — only the last sample. This is a Live API limitation, not something to work around with retry loops.
102
+
103
+ **The canonical workflow:**
104
+
105
+ ```
106
+ # 1. Make sure a Drum Rack exists on the track. Either:
107
+ # - Load a preset kit and clear it, or
108
+ # - insert_device(track_index=N, device_name="Drum Rack") for an empty rack
109
+ # 2. For each sample:
110
+ add_drum_rack_pad(
111
+ track_index=N,
112
+ pad_note=36, # 36=Kick, 38=Snare, 42=Closed HH, 46=Open HH
113
+ file_path="/abs/path/to/sample.wav",
114
+ )
115
+ ```
116
+
117
+ `add_drum_rack_pad` does the full atomic build per pad: insert_rack_chain → set_drum_chain_note → insert empty Simpler into the chain → load sample via the native Live 12.4 replace_sample API with nested addressing. Returns `{ok, chain_index, pad_note, nested_device_index}` so you can verify and chain further calls.
118
+
119
+ Requires Live 12.4+ (uses native nested-sample loading). On older versions returns an error directing the caller to the legacy separate-tracks workaround.
120
+
121
+ For nested-Simpler operations on existing pads (e.g., adjust loop points after the kit is built), `replace_simpler_sample` and `load_sample_to_simpler` accept `chain_index` and `nested_device_index` for explicit deep addressing.
122
+
123
+ ## Sample-Dependent Devices
124
+
125
+ These devices load "successfully" with many parameters but produce zero audio without source material. Since MCP tools cannot load samples into third-party plugin UIs, NEVER use these as standalone instruments:
126
+
127
+ - **Granular synths:** iDensity, Tardigrain, Koala Sampler, Burns Audio Granular
128
+ - **Bare samplers:** Simpler (empty), Sampler (empty) — always load a preset, never the empty shell
129
+ - **Sample players:** AudioLayer, sEGments
130
+
131
+ Use self-contained synthesizers instead — these produce sound immediately from MIDI input alone:
132
+ - **Wavetable** — versatile wavetable synthesis
133
+ - **Operator** — FM synthesis, 4 operators
134
+ - **Drift** — analog-modeled, warm and organic
135
+ - **Analog** — subtractive analog modeling
136
+ - **Meld** — MPE-ready, two engines
137
+ - **Collision** — physical modeling, mallet/resonator
138
+ - **Tension** — physical modeling, string/exciter
139
+
140
+ If granular textures are needed: use Wavetable with aggressive wavetable position modulation, Operator with FM feedback and short envelopes, or load a Simpler/Sampler **preset** (not the bare instrument) from the Sounds browser.
141
+
142
+ ## Simpler Operations
143
+
144
+ For Simpler devices that already have samples loaded:
145
+
146
+ - `load_sample_to_simpler(track_index, device_index, file_path)` — load audio into Simpler
147
+ - `replace_simpler_sample(track_index, device_index, file_path)` — swap the current sample. Only works on Simplers that already have a sample loaded.
148
+ - `crop_simpler(track_index, device_index)` — trim sample to current start/end points
149
+ - `reverse_simpler(track_index, device_index)` — reverse the loaded sample
150
+ - `get_simpler_slices(track_index, device_index)` — retrieve auto-detected slice points (Slice mode)
151
+ - `set_simpler_playback_mode(track_index, device_index, playback_mode)` — switch modes: 0=Classic, 1=One-Shot, 2=Slice. Optional: `slice_by` (0=Transient, 1=Beat, 2=Region, 3=Manual), `sensitivity` (0.0-1.0, Transient only)
152
+ - `warp_simpler(track_index, device_index, beats)` — warp sample to fit N beats
153
+
154
+ ### Slice Workflow
155
+
156
+ For slice-based production, use `plan_slice_workflow`:
157
+ 1. `plan_slice_workflow(file_path=..., intent="rhythm")` — generates a complete workflow with Simpler setup, slice mapping, and MIDI notes
158
+ 2. Intents: `rhythm`, `hook`, `texture`, `percussion`, `melodic`
159
+ 3. The tool returns a step-by-step plan — execute each tool call in sequence
160
+
161
+ Manual slice workflow: load sample → `set_simpler_playback_mode(playback_mode=2)` → `get_simpler_slices` → program MIDI notes targeting slice indices (C3 = slice 0, C#3 = slice 1, etc.)
162
+
163
+ ### New Device Operations (12.3+)
164
+
165
+ - `insert_device(track_index, device_name)` — insert native device by name (10x faster than browser, 12.3+)
166
+ - `insert_rack_chain(track_index, device_index)` — add chain to Instrument/Audio/Drum Rack
167
+ - `set_drum_chain_note(track_index, device_index, chain_index, note)` — assign MIDI note to Drum Rack chain
168
+ - `add_drum_rack_pad(track_index, pad_note, file_path)` — atomic single-pad build (chain + note + Simpler + sample). 12.4+. Use this for custom kit construction; see the "Custom Drum Rack Construction" section above.
169
+ - `move_device(track_index, device_index, new_index)` — reorder devices on a track
170
+
171
+ ### Plugin Deep Control
172
+
173
+ - `get_plugin_parameters(track_index, device_index)` — all AU/VST plugin parameters
174
+ - `map_plugin_parameter(track_index, device_index, parameter_index)` — map for automation
175
+ - `get_plugin_presets(track_index, device_index)` — list plugin presets
176
+
177
+ ## Parameter Name Quirks (BUG-2026-04-22 #10)
178
+
179
+ Ableton's parameter names are inconsistent across devices. When `set_device_parameter` or `batch_set_parameters` errors with "Parameter 'X' not found," the response already lists the first 20 available names — read it and pick the right one. Common surprises:
180
+
181
+ | You'd expect | Actual name | Where |
182
+ |---|---|---|
183
+ | `Width` | `Stereo Width` | Utility |
184
+ | `Cutoff` | `Filter Freq` / `Frequency` | Various filters — check per-device |
185
+ | `Resonance` | `Filter Resonance` / `Q` | Same |
186
+ | `Drive` | `Drive` (Saturator) but `Drive Amount` (some racks) | Saturator vs racks |
187
+ | `Mix` | `Dry/Wet` | Almost every native effect |
188
+ | `Volume` | `Volume` (mixer) but `Sample Volume` / `Out Volume` | On certain devices |
189
+
190
+ When in doubt, call `get_device_parameters(track_index, device_index)` first — it returns the exact `name` of every parameter and the `name` field is what `set_device_parameter` accepts.
191
+
192
+ ## Effect Chain Best Practices
193
+
194
+ After loading any effect, verify its key parameters are not at pass-through defaults:
195
+ - **Reverb:** `Dry/Wet` should be > 0 (typically 20-40% for subtle, 60-100% for creative)
196
+ - **Delay:** `Dry/Wet` > 0, `Feedback` set appropriately
197
+ - **Compressor:** `Threshold` below signal level, `Ratio` > 1:1
198
+ - **EQ Eight:** At least one band with non-zero gain
199
+ - **Saturator:** `Drive` > 0 dB
200
+ - **Utility:** `Gain` at target value, `Width` as needed
201
+
202
+ Use `get_device_parameters` to read current values, then `set_device_parameter` or `batch_set_parameters` to configure. Use `toggle_device` to bypass/enable devices for A/B comparison.
203
+
204
+ ## Device Presets
205
+
206
+ - `get_device_presets(track_index, device_index)` — list available presets for the loaded device
207
+ - `get_plugin_parameters(track_index, device_index)` — see all AU/VST plugin parameters
208
+ - `get_plugin_presets(track_index, device_index)` — list presets for AU/VST plugins
209
+ - `map_plugin_parameter(track_index, device_index, parameter_index)` — map a plugin parameter for automation
210
+
211
+ ## Device Atlas Reference
212
+
213
+ Consult `references/device-atlas/` in the livepilot-core skill for the full corpus of 280+ instruments, 139 drum kits, and 350+ impulse responses. The atlas contains real browser URIs, preset names, and sonic descriptions. Use it as your lookup table before loading any device — never guess a name that is not in the atlas or in browser search results.
@@ -0,0 +1,82 @@
1
+ # `load_browser_item` URI Grammar
2
+
3
+ > Reference for the URI strings accepted by `load_browser_item(track_index, uri, ...)`.
4
+ > Resolves the BUG-2026-04-22 #14 friction (URI format was undocumented and required reverse-engineering).
5
+
6
+ ## TL;DR
7
+
8
+ URIs are produced by `search_browser` / `get_browser_items` / `get_browser_tree` — never invent them by hand. The format is `query:<Top-Level-Folder>#<Item-Identifier>`. Three known forms in the wild:
9
+
10
+ | Form | Example | When you'll see it |
11
+ |---|---|---|
12
+ | **File ID** | `query:Drums#FileId_29738` | Browser items that resolve to a file in Live's installed packs (samples, presets, kits). The numeric FileId is stable across sessions on the same machine. |
13
+ | **Bare name** | `query:Synths#Operator` | Native devices and effects whose name is unique within the folder. Most built-in instruments. |
14
+ | **Path-like** | `query:UserLibrary#Samples:Splice:Filename.wav` | Items inside the User Library or other deep folder paths. The fragment uses `:` as a path separator within the URI's hash. |
15
+
16
+ ## Discovery recipe
17
+
18
+ You almost never need to construct a URI from scratch. Always:
19
+
20
+ 1. **Search:** `search_browser(path="Drums", name_filter="909 Core")` — returns each match with its exact `uri` field.
21
+ 2. **Or browse:** `get_browser_tree()` for the top-level structure; `get_browser_items(path="Drums")` to drill down. Items include their URI.
22
+ 3. **Use the URI verbatim:** pass the exact string from the result to `load_browser_item(uri=...)`. Do not modify, normalize, or reconstruct it.
23
+
24
+ ## Why three forms exist
25
+
26
+ Live's browser is backed by multiple resolvers under the hood:
27
+
28
+ - **Pack content** is keyed by an internal FileId from a per-machine SQLite index — fast lookup, opaque names.
29
+ - **Native devices** are addressed by their stable English class name within their folder.
30
+ - **User Library / Samples** items use a path-style fragment because they're filesystem-rooted, not pack-indexed.
31
+
32
+ The URI you receive from search/browse already has the correct form for that item — there is no "preferred" or "canonical" form, only "the one Live's browser knows."
33
+
34
+ ## What goes wrong if you guess
35
+
36
+ - **Guessed FileId**: silently fails or loads the wrong sample.
37
+ - **Guessed bare name** for a non-unique item: loads whatever Live's matcher hits first (e.g., `query:Synths#Drift` may match a `Drift Pad Wonk Bass.wav` sample before the `Drift` synth — see the `find_and_load_device` warning in `livepilot-devices` SKILL).
38
+ - **Path with wrong separator** (using `/` instead of `:`): URI parses but resolves to nothing.
39
+ - **Stale FileId** copied from a different machine: stale FileIds aren't portable.
40
+
41
+ ## Top-level folders (current Live 12.4)
42
+
43
+ | Folder | Typical content |
44
+ |---|---|
45
+ | `Sounds` | Genre-organized presets across all native synths |
46
+ | `Drums` | Drum Racks, drum kits, percussion one-shots |
47
+ | `Instruments` | Synths, samplers, instrument racks (top-level entries) |
48
+ | `Audio Effects` | Reverb, delay, compressor, EQ, saturator, etc. |
49
+ | `MIDI Effects` | Arpeggiator, chord, scale, random, MPE Tools |
50
+ | `Max for Live` | Native + installed M4L devices |
51
+ | `Plug-ins` | Installed AU/VST plugins |
52
+ | `Clips` | Sample loops + MIDI clips that ship with packs |
53
+ | `Samples` | The big one — ~22,000 individual audio files |
54
+ | `Packs` | Pack-level entries that resolve to internal preset/sample lists |
55
+ | `User Library` | Your personal saved devices, racks, samples, sets |
56
+ | `Current Project` | Items in the current Live set's project folder |
57
+
58
+ ## Behaviour after load (BUG-2026-04-22 #16)
59
+
60
+ `load_browser_item` is context-dependent — same URI, different result:
61
+
62
+ - **Empty track:** creates a Simpler with the sample loaded (instruments load directly).
63
+ - **Track with an instrument already:** drops the new device after the existing one (Live's "load to selected" behavior).
64
+ - **Track with a Drum Rack:** the FIRST `load_browser_item` of a sample creates a chain on note 36; **every subsequent call REPLACES that chain** instead of appending to the next pad. To build a kit pad-by-pad, use `add_drum_rack_pad(track_index, pad_note, file_path)` instead — it does the chain + note + Simpler + sample sequence atomically per pad.
65
+
66
+ See the "Custom Drum Rack Construction" section in `livepilot-devices` SKILL for the canonical kit-build flow.
67
+
68
+ ## Role-aware defaults (BUG-2026-04-22 #17 + #18)
69
+
70
+ `load_browser_item(role=...)` applies post-load Simpler defaults so the loaded sample plays correctly without per-bug-memory hand-tweaking:
71
+
72
+ | Role | Snap | Volume | Trigger Mode | Root note |
73
+ |---|---|---|---|---|
74
+ | `"drum"` | 0 | 0 dB | 0 (Trigger / one-shot) | C1 (36) |
75
+ | `"melodic"` | 1 | 0 dB | 1 (Gate / held) | C3 (60) |
76
+ | `"texture"` | 0 | -6 dB | 1 (Gate) | C3 (60) |
77
+
78
+ Omit `role` to keep Live's raw defaults (Volume=-12 dB, Snap=1, root=C3). Useful when loading a non-Simpler device or when you want the legacy behavior.
79
+
80
+ ## Trigger Mode polarity (BUG-2026-04-22 #9)
81
+
82
+ Reverse from intuition: `Trigger Mode value=0` is **Trigger** (one-shot), `value=1` is **Gate** (held). The `role="drum"` default sets it to 0, the others to 1.
@@ -0,0 +1,195 @@
1
+ ---
2
+ name: livepilot-evaluation
3
+ description: This skill should be used when the user asks to "evaluate a change", "was that good", "keep or undo", "A/B compare", "rate my change", "check if that helped", or wants to use the universal evaluation loop to judge production moves.
4
+ ---
5
+
6
+ # Evaluation Engine — Universal Move Judgment
7
+
8
+ The evaluation engine is the shared decision layer used by all other engines (mix, sound design, composition, performance). It determines whether a change improved the session, and whether to keep it, undo it, or learn from it.
9
+
10
+ ## The Universal Evaluation Loop
11
+
12
+ Every production move follows this loop regardless of which engine initiated it.
13
+
14
+ ### Step 1 — Compile Goal Vector
15
+
16
+ Call `compile_goal_vector(request_text, targets, protect, mode, aggression)` to establish what you are trying to achieve.
17
+
18
+ **request_text**: a plain-text description of the intended improvement (e.g., "reduce masking between bass and kick in 100-200 Hz range").
19
+
20
+ **targets**: dict of dimension → weight (e.g., `{"punch": 0.4, "weight": 0.3, "clarity": 0.3}`). Weights are normalized to sum to 1.0.
21
+
22
+ **Valid dimensions split into two families:**
23
+
24
+ **Family A — Technical / measurable** (derived from spectrum, RMS, LUFS, masking reports):
25
+ energy, punch, weight, density, brightness, warmth, width, depth, motion, contrast, clarity, cohesion, groove, tension, novelty, polish, emotion.
26
+
27
+ **Family B — Artistic / identity** (derived from concept packets, motif graphs, section labels, taste graphs): required on any goal vector invoked by `livepilot-creative-director`:
28
+ - **style_fit** — how well the result matches the concept packet's sonic_identity
29
+ - **distinctiveness** — how much the result differs from the baseline completion pattern
30
+ - **motif_coherence** — whether recurring motifs survive / evolve meaningfully
31
+ - **section_contrast** — whether section-level differences stay legible
32
+ - **restraint** — whether the result respects protected qualities and avoids additive drift
33
+ - **surprise_without_breakage** — whether novelty was introduced without violating identity
34
+
35
+ Both families share the same 0.0 – 1.0 scale. A technically improved result can still be artistically worse — both must pass for a creative-director turn to be kept.
36
+
37
+ **protect**: dict of dimension → minimum threshold (e.g., `{"clarity": 0.7}`). If a dimension drops below this value after a move, the move is undone.
38
+
39
+ **Modes** control how aggressively you act:
40
+
41
+ - `observe` — read-only analysis, no changes. Use for diagnostics and status checks.
42
+ - `improve` — targeted fixes for specific issues. The default mode. Make the smallest change that addresses the problem.
43
+ - `explore` — creative experimentation. Wider parameter ranges, more tolerance for unexpected results. Use when the user says "try something", "experiment", or "surprise me".
44
+ - `finish` — polish and finalize. Conservative moves only, protect what already works. Use when the user says "almost done", "final touches", or "wrap it up".
45
+ - `diagnose` — identify problems without fixing them. Like observe but with critic analysis. Use when the user says "what's wrong" without asking for fixes.
46
+
47
+ ### Step 2 — Build World Model
48
+
49
+ Call `build_world_model` to snapshot the current session state and available capabilities:
50
+
51
+ - Session info: tracks, clips, devices, tempo, time signature
52
+ - Capability state: analyzer connected, M4L bridge active, FluCoMa available
53
+ - Recent actions: last moves taken and their outcomes
54
+ - Active constraints: performance mode safety limits, user anti-preferences
55
+
56
+ The world model determines what tools are available and what measurements are possible.
57
+
58
+ ### Step 3 — Get Turn Budget
59
+
60
+ Call `get_turn_budget(mode)` to determine how many moves you should make this turn:
61
+
62
+ - `observe` / `diagnose`: 0 moves (read-only)
63
+ - `improve`: 1-3 moves per turn, evaluate after each
64
+ - `explore`: 1-5 moves per turn, wider tolerance
65
+ - `finish`: 1 move per turn, strict evaluation
66
+
67
+ Do not exceed the turn budget. If more work is needed, complete the current turn, report progress, and start a new turn.
68
+
69
+ ### Step 4 — Capture Before
70
+
71
+ Take measurements appropriate to the engine context:
72
+
73
+ - **Mix engine**: `get_master_spectrum` + `get_master_rms`
74
+ - **Sound design**: `get_device_parameters` + `get_master_spectrum`
75
+ - **Composition**: `get_notes` or `get_arrangement_notes` + `get_section_graph`
76
+ - **Universal**: `get_mix_snapshot` for full session state
77
+
78
+ Always capture before executing. Without a before snapshot, evaluation is meaningless.
79
+
80
+ ### Step 5 — Execute Intervention
81
+
82
+ Apply the planned change using the appropriate tool. Execute exactly one move, then proceed to evaluation.
83
+
84
+ ### Step 6 — Capture After
85
+
86
+ Repeat the same measurements from Step 4. Use identical tool calls to ensure comparable data.
87
+
88
+ ### Step 7 — Evaluate
89
+
90
+ Call the appropriate evaluator:
91
+
92
+ - `evaluate_move(goal_vector, before_snapshot, after_snapshot)` — universal evaluator. `goal_vector` is the dict returned by `compile_goal_vector`. Snapshots should contain `spectrum` (9-band dict sub_low → air, or 8-band from pre-v1.16 .amxd builds), `rms`, `peak`.
93
+ - `evaluate_mix_move(before_snapshot, after_snapshot, targets, protect)` — mix-specific with protection constraints. `targets` and `protect` are dicts of dimension → weight/threshold.
94
+ - `evaluate_composition_move(before_snapshot, after_snapshot, goal_vector)` — composition-specific
95
+ - `evaluate_with_fabric(engine, before_snapshot, after_snapshot, targets, protect)` — routes to the appropriate engine-specific evaluator. `engine` must be one of: `"sonic"`, `"composition"`, `"mix"`, `"transition"`, `"translation"`.
96
+
97
+ ### Step 8 — Read the Verdict
98
+
99
+ Every evaluator returns:
100
+
101
+ - `keep_change` (bool): whether the change should stay
102
+ - `score` (0.0-1.0): magnitude of improvement (0.5 = neutral, >0.5 = better, <0.5 = worse)
103
+ - `goal_progress` (0.0-1.0): how much closer to the stated goal
104
+ - `collateral_damage` (list): things that got worse as a side effect
105
+ - `explanation` (string): human-readable judgment summary
106
+
107
+ ### Step 8b — Creative-Success Verdict (for creative-director turns)
108
+
109
+ When the evaluation is invoked by `livepilot-creative-director`, also
110
+ assign one of five verdict tags. This is a structured classification
111
+ on top of `keep_change` / `score`, for learning and debugging:
112
+
113
+ | Verdict | Meaning | Technical score | Artistic score | User kept | Action |
114
+ |---|---|---|---|---|---|
115
+ | `safe_win` | Low-novelty move that landed cleanly | ≥ 0.6 | ≥ 0.55 | yes | Memory-learn candidate. Use as baseline for future similar asks. |
116
+ | `bold_win` | High-novelty move that landed and stuck | ≥ 0.55 | ≥ 0.65 | yes | STRONG memory-learn candidate. Surface when user asks for similar in the future. |
117
+ | `interesting_failure` | Novel, didn't land technically, but user kept for study | < 0.55 | ≥ 0.60 | yes | Note in memory but DO NOT promote for auto-replay. User keeping it ≠ reusability. |
118
+ | `identity_break` | Technically OK but violated protected qualities | ≥ 0.55 | < 0.45 | no | Auto-undo. `record_anti_preference` with the protected quality that was violated. |
119
+ | `generic_fallback` | Both scores ≤ mid, collapsed to a default pattern | < 0.55 | < 0.55 | no | Auto-undo. This is the "stuck in patterns" signature. `record_anti_preference` with the family+target combo. |
120
+
121
+ Include the verdict in `memory_learn` payload so future sessions can
122
+ filter by type. The director's Phase 8 uses these tags explicitly.
123
+
124
+ ### Step 9 — Keep or Undo
125
+
126
+ If `keep_change` is `false`:
127
+ 1. Call `undo()` immediately
128
+ 2. Report to the user: what was tried, why it was undone, citing `collateral_damage`
129
+ 3. Consider an alternative approach for the same goal
130
+
131
+ If `keep_change` is `true`:
132
+ 1. Report the improvement with score and explanation
133
+ 2. If `score > 0.7`, this is a memory promotion candidate (see below)
134
+
135
+ ### Step 10 — Repeat or Stop
136
+
137
+ Check turn budget remaining. If budget allows and goal_progress < 1.0, return to Step 4 for the next move. Otherwise, summarize progress and stop.
138
+
139
+ ## Capability Modes
140
+
141
+ The world model includes a capability state that affects what measurements are available. Call `get_capability_state` to check.
142
+
143
+ ### normal
144
+ Full measured evaluation. M4L analyzer connected, all spectral/RMS/key tools available. Critics use real data. This is the best mode.
145
+
146
+ ### measured_degraded
147
+ Analyzer data is stale (older than 5 seconds) or intermittent. Measurements may not reflect current state. Re-trigger analysis before trusting cached values. Inform the user that data freshness is limited.
148
+
149
+ ### judgment_only
150
+ No analyzer connected. Evaluation relies on device parameter changes, track structure, and role-based heuristics. Critics cannot use spectral evidence. Inform the user: "Evaluation is based on parameter analysis only — spectral verification unavailable."
151
+
152
+ ### read_only
153
+ Session disconnected or in an error state. No tools can modify the session. Only read operations from cached data. Inform the user and suggest reconnecting.
154
+
155
+ ## Action Ledger
156
+
157
+ Every move is recorded in the action ledger for accountability and learning.
158
+
159
+ - `get_action_ledger_summary` — summary of all actions taken this session with scores
160
+ - `get_recent_actions` — last N actions with full detail
161
+ - `get_last_move` — the most recent action and its evaluation result
162
+
163
+ Use the ledger to avoid repeating failed approaches. If a move type has been undone twice for the same issue, try a different strategy.
164
+
165
+ ## Memory Promotion
166
+
167
+ Successful moves can be promoted to persistent memory for future sessions.
168
+
169
+ - `get_promotion_candidates` — list moves from this session that scored > 0.7 and are eligible for saving
170
+ - `memory_learn(name, type, qualities, payload, tags)` — save a technique to memory. `type` must be one of: `beat_pattern`, `device_chain`, `mix_template`, `browser_pin`, `preference`. `qualities` must include a `summary` field. `payload` contains the technique data.
171
+ - `record_anti_preference(dimension, direction)` — record something the user explicitly rejected. `dimension` is the quality axis (e.g., "brightness", "width"), `direction` must be `"increase"` or `"decrease"`. This ensures the rejected direction is never suggested again.
172
+
173
+ ### Promotion Rules
174
+
175
+ 1. Only promote moves the user confirmed satisfaction with — a high score alone is not enough
176
+ 2. Anti-preferences are permanent until explicitly deleted
177
+ 3. Check `get_anti_preferences` before suggesting any move to avoid repeating rejected ideas
178
+ 4. Promotion is optional — never force it. Suggest when appropriate: "That scored 0.85 — want me to save this technique for future sessions?"
179
+ 5. **For creative-director turns**, apply the verdict-driven promotion rubric:
180
+ - `safe_win` → promote if user keeps ≥ 2 subsequent turns (avoid over-promoting minor moves)
181
+ - `bold_win` → promote immediately; tag with concept packet + novelty_budget context
182
+ - `interesting_failure` → DO NOT auto-promote; store as a "curiosity" note only
183
+ - `identity_break` → NEVER promote; `record_anti_preference` instead
184
+ - `generic_fallback` → NEVER promote; `record_anti_preference` with family+target combo
185
+ - See `livepilot-core/references/memory-guide.md` for the full promotion rubric.
186
+
187
+ ## A/B Comparison
188
+
189
+ When the user asks "was that good?" or "A/B compare":
190
+
191
+ 1. The before snapshot is A, the after snapshot is B
192
+ 2. Call the evaluator to get the score
193
+ 3. Present the comparison: "Before: [metrics]. After: [metrics]. Score: [score]. [explanation]"
194
+ 4. If the user prefers A, call `undo()` to revert to it
195
+ 5. If the user prefers B, keep the current state