livepilot 1.26.0 → 1.26.2
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 +41 -0
- package/README.md +1 -1
- package/installer/codex.js +87 -9
- package/livepilot/.Codex-plugin/plugin.json +8 -0
- package/livepilot/.claude-plugin/plugin.json +8 -0
- package/livepilot/.mcp.json +8 -0
- package/livepilot/agents/livepilot-producer/AGENT.md +314 -0
- package/livepilot/commands/arrange.md +47 -0
- package/livepilot/commands/beat.md +81 -0
- package/livepilot/commands/evaluate.md +51 -0
- package/livepilot/commands/memory.md +22 -0
- package/livepilot/commands/mix.md +47 -0
- package/livepilot/commands/perform.md +42 -0
- package/livepilot/commands/session.md +13 -0
- package/livepilot/commands/sounddesign.md +58 -0
- package/livepilot/rubrics/default_preset_check.md +82 -0
- package/livepilot/rubrics/layer_accumulation.md +79 -0
- package/livepilot/rubrics/layer_precision.md +79 -0
- package/livepilot/rubrics/modulation_presence.md +63 -0
- package/livepilot/rubrics/sound_design_depth.md +40 -0
- package/livepilot/skills/livepilot-arrangement/SKILL.md +164 -0
- package/livepilot/skills/livepilot-composition-engine/SKILL.md +151 -0
- package/livepilot/skills/livepilot-composition-engine/references/form-patterns.md +97 -0
- package/livepilot/skills/livepilot-composition-engine/references/transition-archetypes.md +102 -0
- package/livepilot/skills/livepilot-core/SKILL.md +261 -0
- package/livepilot/skills/livepilot-core/references/ableton-workflow-patterns.md +831 -0
- package/livepilot/skills/livepilot-core/references/affordances/_schema.md +160 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/auto-filter.yaml +133 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/chorus-ensemble.yaml +91 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/compressor.yaml +98 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/convolution-reverb.yaml +113 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/corpus.yaml +84 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/drift.yaml +105 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/echo.yaml +108 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/eq-eight.yaml +95 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/glue-compressor.yaml +88 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/granulator-iii.yaml +104 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/hybrid-reverb.yaml +83 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/operator.yaml +98 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/ping-pong-delay.yaml +104 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/poli.yaml +98 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/saturator.yaml +98 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/shifter.yaml +77 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/simpler.yaml +113 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/utility.yaml +95 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/vinyl-distortion.yaml +92 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/wavetable.yaml +98 -0
- package/livepilot/skills/livepilot-core/references/artist-vocabularies.md +389 -0
- package/livepilot/skills/livepilot-core/references/automation-atlas.md +272 -0
- package/livepilot/skills/livepilot-core/references/concepts/_schema.md +158 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/akufen.yaml +116 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/aphex-twin.yaml +133 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/arca-sophie.yaml +131 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/autechre.yaml +130 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/basic-channel.yaml +140 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/basinski.yaml +126 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/boards-of-canada.yaml +124 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/burial.yaml +127 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/com-truise-tycho.yaml +121 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/daft-punk.yaml +117 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/dj-premier-rza.yaml +119 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/gas.yaml +134 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/hawtin.yaml +127 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/isolee-luomo.yaml +130 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/j-dilla.yaml +133 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/jeff-mills.yaml +120 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/johannsson-richter.yaml +132 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/madlib.yaml +124 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/moodymann-theo-parrish.yaml +121 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/oneohtrix-point-never.yaml +126 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/photek-source-direct.yaml +120 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/rashad-spinn-traxman.yaml +122 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/robert-henke.yaml +113 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/shackleton.yaml +124 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/skream-mala.yaml +119 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/stars-of-the-lid.yaml +119 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/tim-hecker.yaml +122 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/villalobos.yaml +135 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/ambient.yaml +137 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/boom_bap.yaml +124 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/deep-minimal.yaml +130 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/deep_house.yaml +130 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/detroit_techno.yaml +116 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/disco.yaml +123 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/downtempo.yaml +129 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/drone.yaml +133 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/drum-and-bass.yaml +119 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/dub-techno.yaml +132 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/dub.yaml +129 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/dubstep.yaml +120 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/experimental.yaml +136 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/footwork.yaml +119 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/hip-hop.yaml +132 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/house.yaml +126 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/hyperpop.yaml +128 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/idm.yaml +134 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/lo_fi.yaml +129 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/microhouse.yaml +138 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/minimal-techno.yaml +116 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/modern-classical.yaml +123 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/soul.yaml +125 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/synthwave.yaml +123 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/techno.yaml +123 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/trap.yaml +120 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/uk-garage.yaml +121 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/00-index.md +110 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/distortion-and-character.md +687 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/drums-and-percussion.md +753 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/dynamics-and-punch.md +525 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/eq-and-filtering.md +402 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/midi-tools.md +963 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/movement-and-modulation.md +874 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/space-and-depth.md +571 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/spectral-and-weird.md +714 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/synths-native.md +953 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/00-index.md +34 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/automation-as-music.md +204 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/chains-genre.md +173 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/creative-thinking.md +211 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/effects-distortion.md +188 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/effects-space.md +162 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/effects-spectral.md +229 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/instruments-synths.md +243 -0
- package/livepilot/skills/livepilot-core/references/genre-vocabularies.md +382 -0
- package/livepilot/skills/livepilot-core/references/m4l-devices.md +352 -0
- package/livepilot/skills/livepilot-core/references/memory-guide.md +178 -0
- package/livepilot/skills/livepilot-core/references/midi-recipes.md +402 -0
- package/livepilot/skills/livepilot-core/references/mixing-patterns.md +578 -0
- package/livepilot/skills/livepilot-core/references/overview.md +300 -0
- package/livepilot/skills/livepilot-core/references/pack-knowledge.md +319 -0
- package/livepilot/skills/livepilot-core/references/sample-manipulation.md +724 -0
- package/livepilot/skills/livepilot-core/references/sound-design-deep.md +140 -0
- package/livepilot/skills/livepilot-core/references/sound-design.md +393 -0
- package/livepilot/skills/livepilot-corpus-builder/SKILL.md +379 -0
- package/livepilot/skills/livepilot-creative-director/SKILL.md +462 -0
- package/livepilot/skills/livepilot-creative-director/references/anti-repetition-rules.md +214 -0
- package/livepilot/skills/livepilot-creative-director/references/creative-brief-template.md +222 -0
- package/livepilot/skills/livepilot-creative-director/references/hybrid-compilation.md +185 -0
- package/livepilot/skills/livepilot-creative-director/references/move-family-diversity-rule.md +258 -0
- package/livepilot/skills/livepilot-creative-director/references/phase-6-execution.md +409 -0
- package/livepilot/skills/livepilot-creative-director/references/the-four-move-rule.md +192 -0
- package/livepilot/skills/livepilot-devices/SKILL.md +213 -0
- package/livepilot/skills/livepilot-devices/references/load_browser_item-uri-grammar.md +82 -0
- package/livepilot/skills/livepilot-evaluation/SKILL.md +195 -0
- package/livepilot/skills/livepilot-evaluation/references/capability-modes.md +176 -0
- package/livepilot/skills/livepilot-evaluation/references/evaluation-contracts.md +121 -0
- package/livepilot/skills/livepilot-evaluation/references/memory-promotion.md +110 -0
- package/livepilot/skills/livepilot-mix-engine/SKILL.md +144 -0
- package/livepilot/skills/livepilot-mix-engine/references/mix-critics.md +143 -0
- package/livepilot/skills/livepilot-mix-engine/references/mix-moves.md +105 -0
- package/livepilot/skills/livepilot-mixing/SKILL.md +164 -0
- package/livepilot/skills/livepilot-notes/SKILL.md +130 -0
- package/livepilot/skills/livepilot-performance-engine/SKILL.md +122 -0
- package/livepilot/skills/livepilot-performance-engine/references/performance-safety.md +98 -0
- package/livepilot/skills/livepilot-release/SKILL.md +151 -0
- package/livepilot/skills/livepilot-sample-engine/SKILL.md +117 -0
- package/livepilot/skills/livepilot-sample-engine/references/sample-critics.md +87 -0
- package/livepilot/skills/livepilot-sample-engine/references/sample-philosophy.md +51 -0
- package/livepilot/skills/livepilot-sample-engine/references/sample-techniques.md +131 -0
- package/livepilot/skills/livepilot-sound-design-engine/SKILL.md +247 -0
- package/livepilot/skills/livepilot-sound-design-engine/references/patch-model.md +119 -0
- package/livepilot/skills/livepilot-sound-design-engine/references/sound-design-critics.md +118 -0
- package/livepilot/skills/livepilot-wonder/SKILL.md +143 -0
- package/m4l_device/LivePilot_Analyzer.amxd +0 -0
- package/m4l_device/LivePilot_Elektron.amxd +0 -0
- package/m4l_device/LivePilot_Elektron.maxpat +758 -0
- package/m4l_device/livepilot_bridge.js +1 -1
- package/m4l_device/livepilot_elektron_bridge.js +82 -0
- package/mcp_server/__init__.py +1 -1
- package/mcp_server/composer/develop/apply.py +1 -1
- package/mcp_server/composer/full/apply.py +32 -6
- package/mcp_server/composer/full/brief_builder.py +9 -0
- package/mcp_server/evaluation/feature_extractors.py +152 -8
- package/mcp_server/m4l_bridge.py +5 -0
- package/mcp_server/mix_engine/state_builder.py +19 -2
- package/mcp_server/mix_engine/tools.py +22 -0
- package/mcp_server/runtime/execution_router.py +6 -0
- package/mcp_server/runtime/mcp_dispatch.py +18 -0
- package/mcp_server/runtime/remote_commands.py +2 -0
- package/mcp_server/server.py +11 -7
- package/mcp_server/sound_design/tools.py +33 -0
- package/mcp_server/tools/_agent_os_engine/evaluation.py +7 -44
- package/mcp_server/tools/_agent_os_engine/models.py +2 -1
- package/mcp_server/tools/_conductor.py +5 -2
- package/mcp_server/tools/_evaluation_contracts.py +1 -1
- package/mcp_server/tools/_snapshot_normalizer.py +32 -3
- package/package.json +20 -5
- package/remote_script/LivePilot/__init__.py +1 -1
- package/remote_script/LivePilot/server.py +63 -2
- package/requirements.txt +3 -3
- package/server.json +3 -3
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: livepilot-notes
|
|
3
|
+
description: This skill should be used when the user asks to "write notes", "add a melody", "chord progression", "rhythm pattern", "MIDI notes", "transpose", "quantize", "Euclidean rhythm", "counterpoint", "scale", "key detection", "harmony", or wants to create, edit, or analyze MIDI content in Ableton Live.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# MIDI Notes — Create, Edit, and Analyze
|
|
7
|
+
|
|
8
|
+
Write melodies, chords, rhythms, and generative patterns in Ableton Live clips. Every note operation follows the Live 12 API.
|
|
9
|
+
|
|
10
|
+
## Note API Cycle
|
|
11
|
+
|
|
12
|
+
Four operations form the core CRUD cycle for MIDI notes:
|
|
13
|
+
|
|
14
|
+
1. **Create:** `add_notes(track_index, clip_index, notes)` — write new notes into a clip
|
|
15
|
+
2. **Read:** `get_notes(track_index, clip_index)` — retrieve all notes with IDs, pitches, timings
|
|
16
|
+
3. **Update:** `modify_notes(track_index, clip_index, modifications)` — change existing notes by `note_id`
|
|
17
|
+
4. **Delete:** `remove_notes(track_index, clip_index, start_time, duration, pitch_start, pitch_end)` — clear a region, or `remove_notes_by_id(track_index, clip_index, note_ids)` — surgical deletion by ID
|
|
18
|
+
|
|
19
|
+
Always create a clip first with `create_clip(track_index, clip_index, length)` before adding notes to it.
|
|
20
|
+
|
|
21
|
+
## Note Format
|
|
22
|
+
|
|
23
|
+
When calling `add_notes`, each note requires:
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"pitch": 60,
|
|
28
|
+
"start_time": 0.0,
|
|
29
|
+
"duration": 0.5,
|
|
30
|
+
"velocity": 100,
|
|
31
|
+
"mute": false
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
When reading with `get_notes`, each note also returns Live 12 extended fields:
|
|
36
|
+
- `note_id` — unique identifier for modify/remove operations
|
|
37
|
+
- `probability` — 0.0 to 1.0, per-note trigger probability (Live 12 feature)
|
|
38
|
+
- `velocity_deviation` — -127.0 to 127.0, randomizes velocity on each trigger
|
|
39
|
+
- `release_velocity` — 0.0 to 127.0, note-off velocity
|
|
40
|
+
|
|
41
|
+
Use `modify_notes` with `note_id` to update any field on existing notes — pitch, velocity, timing, probability, mute state.
|
|
42
|
+
|
|
43
|
+
## Duplication and Transposition
|
|
44
|
+
|
|
45
|
+
- `duplicate_notes(track_index, clip_index, time_offset)` — copy all notes forward by `time_offset` beats. Use for pattern repetition: a 4-beat pattern duplicated at offset 4.0 creates an 8-beat loop.
|
|
46
|
+
- `transpose_notes(track_index, clip_index, semitones, start_time, duration)` — shift pitches in a region by semitones. Positive = up, negative = down.
|
|
47
|
+
- `transpose_smart(track_index, clip_index, semitones, key)` — transpose with scale awareness. Notes stay within the target key, avoiding chromatic collisions.
|
|
48
|
+
|
|
49
|
+
## Quantization
|
|
50
|
+
|
|
51
|
+
`quantize_clip(track_index, clip_index, grid, amount)` snaps note start times to a rhythmic grid.
|
|
52
|
+
|
|
53
|
+
Grid enum values:
|
|
54
|
+
- 0 = None (no quantize)
|
|
55
|
+
- 1 = 1/4 notes
|
|
56
|
+
- 2 = 1/8 notes
|
|
57
|
+
- 3 = 1/8 triplets
|
|
58
|
+
- 4 = 1/8 + triplets (combined grid)
|
|
59
|
+
- 5 = 1/16 notes
|
|
60
|
+
- 6 = 1/16 triplets
|
|
61
|
+
- 7 = 1/16 + triplets (combined grid)
|
|
62
|
+
- 8 = 1/32 notes
|
|
63
|
+
|
|
64
|
+
The `amount` parameter (0.0-1.0) controls how far notes move toward the grid. Use 1.0 for rigid quantize, 0.5-0.7 for humanized feel.
|
|
65
|
+
|
|
66
|
+
## Theory Integration
|
|
67
|
+
|
|
68
|
+
Run these checks before firing any clip with melodic content:
|
|
69
|
+
|
|
70
|
+
1. `identify_scale(track_index, clip_index)` — detect the scale from existing notes (Krumhansl-Schmuckler algorithm). Returns key, mode, and confidence.
|
|
71
|
+
2. `detect_theory_issues(track_index, clip_index, strict=true)` — check for out-of-key notes, parallel fifths, voice crossing, augmented/diminished accidents. The `strict` flag enables all checks.
|
|
72
|
+
3. Fix problems with `modify_notes` — adjust offending pitches before the user hears them.
|
|
73
|
+
|
|
74
|
+
The theory engine knows 7 standard modes. Exotic scales (Hijaz, Hungarian minor, whole tone) produce false "out of key" warnings. Cross-reference flagged pitches against the intended scale manually. Use `key="C hijaz"` for Hijaz/Phrygian Dominant keys.
|
|
75
|
+
|
|
76
|
+
## Harmony Analysis and Suggestions
|
|
77
|
+
|
|
78
|
+
- `analyze_harmony(track_index, clip_index)` — identify chords in a clip, returns chord names, qualities, root notes, and progression analysis
|
|
79
|
+
- `suggest_next_chord(track_index, clip_index, key)` — given the current harmonic context, suggest the next chord with voice leading and functional reasoning
|
|
80
|
+
- `harmonize_melody(track_index, clip_index, key, style)` — generate harmony notes for an existing melody. Returns a note array ready for `add_notes` on a separate track.
|
|
81
|
+
- `generate_countermelody(track_index, clip_index, key, species)` — generate a counterpoint line against existing notes. Species 1-5 follow classical counterpoint rules. Returns notes for `add_notes`.
|
|
82
|
+
|
|
83
|
+
Both `harmonize_melody` and `generate_countermelody` return note arrays — do not call them and discard the output. Place the results into a clip with `add_notes`.
|
|
84
|
+
|
|
85
|
+
## Generative Algorithms
|
|
86
|
+
|
|
87
|
+
### Euclidean Rhythms
|
|
88
|
+
|
|
89
|
+
`generate_euclidean_rhythm(pulses, steps, pitch, velocity, duration)` — distribute `pulses` as evenly as possible across `steps` using the Bjorklund algorithm. Returns a note array. The tool identifies named rhythms automatically (e.g., 3 pulses in 8 steps = "tresillo", 5 in 8 = "cinquillo").
|
|
90
|
+
|
|
91
|
+
`layer_euclidean_rhythms(layers)` — stack multiple Euclidean patterns for polyrhythmic textures. Each layer specifies pulses, steps, pitch, and velocity. Returns a combined note array spanning all layers, ready for a single `add_notes` call or split across tracks.
|
|
92
|
+
|
|
93
|
+
### Minimalist Techniques
|
|
94
|
+
|
|
95
|
+
`generate_tintinnabuli(melody_pitches, key, mode, position)` — implement Arvo Part's technique: a T-voice (triad arpeggio) against a M-voice (stepwise melody). Returns two-voice note data.
|
|
96
|
+
|
|
97
|
+
`generate_phase_shift(pattern, shift_amount, repetitions)` — implement Steve Reich's phasing: two identical patterns drifting apart over time. One voice holds steady while the other shifts by `shift_amount` per repetition.
|
|
98
|
+
|
|
99
|
+
`generate_additive_process(melody_pitches, iterations)` — implement Philip Glass's additive technique: melody expanded by adding one note per iteration, building complexity gradually.
|
|
100
|
+
|
|
101
|
+
All generative tools return note arrays. Place them in clips with `add_notes`.
|
|
102
|
+
|
|
103
|
+
## Neo-Riemannian Harmony
|
|
104
|
+
|
|
105
|
+
- `navigate_tonnetz(chord, transform)` — apply PRL (Parallel, Relative, Leading-tone) transforms to a chord. Returns the neighbor chord and its relationship.
|
|
106
|
+
- `find_voice_leading_path(start_chord, end_chord)` — find the shortest harmonic path between two chords through Tonnetz space. Returns intermediate chords.
|
|
107
|
+
- `classify_progression(chords)` — identify the neo-Riemannian transform pattern in a chord sequence (e.g., PRL cycle, hexatonic, octatonic).
|
|
108
|
+
- `suggest_chromatic_mediants(chord)` — return all chromatic mediant relations with film score usage notes. Useful for dramatic harmonic shifts.
|
|
109
|
+
|
|
110
|
+
## MIDI File I/O
|
|
111
|
+
|
|
112
|
+
- `export_clip_midi(track_index, clip_index, file_path)` — export a session clip's notes to a .mid file
|
|
113
|
+
- `import_midi_to_clip(track_index, clip_index, file_path)` — load a .mid file into a clip, replacing existing notes
|
|
114
|
+
- `analyze_midi_file(file_path)` — offline analysis of any .mid file (tempo, note count, structure). No Ableton connection needed.
|
|
115
|
+
- `extract_piano_roll(file_path)` — return a 2D velocity matrix (pitch x time) from a .mid file for visualization
|
|
116
|
+
|
|
117
|
+
## Pitch Audit — Mandatory Before Firing
|
|
118
|
+
|
|
119
|
+
Before playing any clip with melodic or harmonic content:
|
|
120
|
+
|
|
121
|
+
1. `identify_scale` on every melodic track — verify all tracks share the same tonal center
|
|
122
|
+
2. `analyze_harmony` on chordal tracks — verify chord quality (no accidental augmented/diminished)
|
|
123
|
+
3. `detect_theory_issues(strict=true)` — check all theory rules
|
|
124
|
+
4. Report a clear tuning summary to the user before proceeding
|
|
125
|
+
5. Fix wrong notes with `modify_notes` before firing
|
|
126
|
+
|
|
127
|
+
## Reference
|
|
128
|
+
|
|
129
|
+
Supporting references live in the `livepilot-core` skill's `references/` directory:
|
|
130
|
+
- `livepilot-core/references/midi-recipes.md` — drum patterns by genre, chord voicings, scale tables, hi-hat articulations, humanization, polymetric layering
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: livepilot-performance-engine
|
|
3
|
+
description: This skill should be used when the user asks to "perform live", "what's safe to do during a show", "scene handoff", "energy flow", "performance mode", "safe moves", or wants live performance support with safety constraints.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Performance Engine — Safety-First Live Performance
|
|
7
|
+
|
|
8
|
+
The performance engine enforces a strict safety model for live performance. Every action is classified before execution. Destructive operations are blocked. Risky operations require user confirmation. Only safe operations execute freely.
|
|
9
|
+
|
|
10
|
+
## Safety Classification
|
|
11
|
+
|
|
12
|
+
Every performance action falls into one of four tiers.
|
|
13
|
+
|
|
14
|
+
### Safe — Execute Freely
|
|
15
|
+
|
|
16
|
+
These actions are non-destructive and audience-invisible if they fail. Execute without asking.
|
|
17
|
+
|
|
18
|
+
- `fire_scene` / `fire_clip` — launch scenes or clips (the core of live performance)
|
|
19
|
+
- `set_track_send` with small delta — nudge send levels (reverb/delay throws)
|
|
20
|
+
- `set_device_parameter` on mapped macros — macro knob adjustments
|
|
21
|
+
- `set_track_mute` / `set_track_solo` — mute/solo toggles
|
|
22
|
+
- `set_track_volume` with delta <= 3 dB — volume nudges
|
|
23
|
+
- `set_track_pan` with delta <= 0.2 — subtle pan shifts
|
|
24
|
+
- Filter sweeps via `set_device_parameter` on Auto Filter — smooth frequency movement
|
|
25
|
+
|
|
26
|
+
### Caution — Require User Confirmation
|
|
27
|
+
|
|
28
|
+
These actions are audible and may cause a noticeable glitch if wrong. Always ask before executing.
|
|
29
|
+
|
|
30
|
+
- `set_tempo` with delta <= 5 BPM — tempo nudge (can destabilize synced elements)
|
|
31
|
+
- `toggle_device` — enable/disable effects (may cause pops or silence)
|
|
32
|
+
- `set_track_pan` with delta > 0.2 — large pan moves are disorienting live
|
|
33
|
+
- `set_track_volume` with delta > 3 dB — large volume jumps
|
|
34
|
+
|
|
35
|
+
Present the action to the user: "I will [action]. This may [risk]. Confirm?"
|
|
36
|
+
|
|
37
|
+
### Blocked — Never Execute During Performance
|
|
38
|
+
|
|
39
|
+
These actions risk audible disasters, data loss, or session corruption during a live show.
|
|
40
|
+
|
|
41
|
+
- `delete_device` / `find_and_load_device` — device chain surgery causes audio interruption
|
|
42
|
+
- `create_arrangement_clip` / `create_clip` / `delete_clip` — clip creation/deletion
|
|
43
|
+
- `create_midi_track` / `create_audio_track` / `delete_track` — track structure changes
|
|
44
|
+
- `add_notes` / `modify_notes` / `remove_notes` — note editing while playing
|
|
45
|
+
- `set_clip_loop` / `set_clip_warp_mode` — clip property changes while playing
|
|
46
|
+
- `flatten_track` / `freeze_track` — CPU-intensive operations
|
|
47
|
+
- Any arrangement-view editing tools
|
|
48
|
+
|
|
49
|
+
If the user requests a blocked action during performance mode, explain why it is blocked and suggest a safe alternative: "That requires editing the device chain, which can cause audio dropouts during a live show. Instead, try [safe alternative]."
|
|
50
|
+
|
|
51
|
+
### Unknown — Treat as Blocked
|
|
52
|
+
|
|
53
|
+
Any action not explicitly classified above defaults to blocked. Do not experiment with unclassified actions during a live performance.
|
|
54
|
+
|
|
55
|
+
## Performance Loop
|
|
56
|
+
|
|
57
|
+
### Step 1 — Get State
|
|
58
|
+
|
|
59
|
+
Call `get_performance_state` to read the current session state:
|
|
60
|
+
- Playing status, current tempo, time signature
|
|
61
|
+
- Which scenes and clips are currently playing
|
|
62
|
+
- Track arm states, solo/mute states
|
|
63
|
+
- Current energy level estimate
|
|
64
|
+
|
|
65
|
+
### Step 2 — Get Safe Moves
|
|
66
|
+
|
|
67
|
+
Call `get_performance_safe_moves` to get a list of contextually appropriate safe actions based on the current state. The response is filtered by what makes musical sense right now — not just what is technically safe.
|
|
68
|
+
|
|
69
|
+
### Step 3 — Check Safety
|
|
70
|
+
|
|
71
|
+
Before executing any user request, call `check_safety(move_type)` to verify the classification. The response confirms: `safe`, `caution`, or `blocked` with an explanation.
|
|
72
|
+
|
|
73
|
+
### Step 4 — Execute Safe/Caution Only
|
|
74
|
+
|
|
75
|
+
- Safe: execute immediately
|
|
76
|
+
- Caution: present to user, wait for confirmation, then execute
|
|
77
|
+
- Blocked: refuse with explanation and alternative
|
|
78
|
+
|
|
79
|
+
### Step 5 — Scene Handoff
|
|
80
|
+
|
|
81
|
+
For transitioning between scenes (the primary live performance action), call `plan_scene_handoff(from_scene, to_scene)` to get a transition plan:
|
|
82
|
+
|
|
83
|
+
- Which clips change between the scenes
|
|
84
|
+
- Recommended launch timing (quantization)
|
|
85
|
+
- Volume/send adjustments to smooth the handoff
|
|
86
|
+
- Any tempo changes between scenes
|
|
87
|
+
|
|
88
|
+
Execute the handoff plan using safe actions only.
|
|
89
|
+
|
|
90
|
+
## Energy Flow
|
|
91
|
+
|
|
92
|
+
During a live set, track the energy trajectory:
|
|
93
|
+
|
|
94
|
+
1. `get_performance_state` includes an `energy_estimate` (0.0-1.0)
|
|
95
|
+
2. Use scene ordering to build energy arcs: low-energy scenes for intros/breakdowns, high-energy for drops/peaks
|
|
96
|
+
3. `plan_scene_handoff` accounts for energy delta — large energy jumps get transition suggestions
|
|
97
|
+
|
|
98
|
+
## Performance Mode Entry
|
|
99
|
+
|
|
100
|
+
When the user says "performance mode", "going live", or "starting the show":
|
|
101
|
+
|
|
102
|
+
1. Call `get_performance_state` to verify the session is ready
|
|
103
|
+
2. Confirm the safety model with the user: "Performance mode active. I will only execute safe actions freely and ask before caution-level moves. Destructive edits are blocked."
|
|
104
|
+
3. Switch to a response style optimized for speed: short confirmations, no lengthy explanations mid-performance
|
|
105
|
+
4. Prioritize scene launches and safe parameter nudges
|
|
106
|
+
|
|
107
|
+
## Performance Mode Exit
|
|
108
|
+
|
|
109
|
+
When the user says "done performing", "show's over", or "exit performance mode":
|
|
110
|
+
|
|
111
|
+
1. Confirm: "Performance mode ended. Full editing capabilities restored."
|
|
112
|
+
2. Resume normal operation with all tools available
|
|
113
|
+
|
|
114
|
+
## Emergency Actions
|
|
115
|
+
|
|
116
|
+
If something goes wrong during a live show:
|
|
117
|
+
|
|
118
|
+
- `stop_all_clips` — emergency silence (use only if requested)
|
|
119
|
+
- `set_master_volume(0.0)` — fade to silence
|
|
120
|
+
- `set_track_mute` on the problem track — isolate the issue
|
|
121
|
+
|
|
122
|
+
Never call `undo` during a live performance — it may revert a scene launch or clip state in unpredictable ways.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Performance Safety Reference
|
|
2
|
+
|
|
3
|
+
Complete classification of every LivePilot action for live performance contexts.
|
|
4
|
+
|
|
5
|
+
## Safe Actions (No Confirmation Needed)
|
|
6
|
+
|
|
7
|
+
| Action | Tool | Notes |
|
|
8
|
+
|--------|------|-------|
|
|
9
|
+
| Launch scene | `fire_scene` | Core performance action |
|
|
10
|
+
| Launch clip | `fire_clip` | Individual clip triggering |
|
|
11
|
+
| Stop clip | `stop_clip` | Individual clip stop |
|
|
12
|
+
| Stop track clips | `stop_track_clips` | Clear a track |
|
|
13
|
+
| Volume nudge (small) | `set_track_volume` | Delta <= 3 dB only |
|
|
14
|
+
| Send nudge | `set_track_send` | Small adjustments to reverb/delay throws |
|
|
15
|
+
| Macro nudge | `set_device_parameter` | On mapped macro controls only |
|
|
16
|
+
| Filter sweep | `set_device_parameter` | On Auto Filter frequency parameter |
|
|
17
|
+
| Mute toggle | `set_track_mute` | Non-destructive, reversible |
|
|
18
|
+
| Solo toggle | `set_track_solo` | Non-destructive, reversible |
|
|
19
|
+
| Pan nudge (small) | `set_track_pan` | Delta <= 0.2 only |
|
|
20
|
+
| Master volume | `set_master_volume` | For overall level control |
|
|
21
|
+
| Continue playback | `continue_playback` | Resume from pause |
|
|
22
|
+
| Jump to cue | `jump_to_cue` | Navigate arrangement cue points |
|
|
23
|
+
| Get state | `get_performance_state` | Read-only, always safe |
|
|
24
|
+
| Get playing clips | `get_playing_clips` | Read-only |
|
|
25
|
+
| Get scene matrix | `get_scene_matrix` | Read-only |
|
|
26
|
+
| Any get_* tool | various | All read-only tools are safe |
|
|
27
|
+
|
|
28
|
+
## Caution Actions (Require Confirmation)
|
|
29
|
+
|
|
30
|
+
| Action | Tool | Risk |
|
|
31
|
+
|--------|------|------|
|
|
32
|
+
| Tempo nudge | `set_tempo` | May destabilize warped audio, synced plugins |
|
|
33
|
+
| Device toggle | `toggle_device` | May cause audio pop, click, or silence |
|
|
34
|
+
| Large pan move | `set_track_pan` | Disorienting for audience if sudden |
|
|
35
|
+
| Large volume jump | `set_track_volume` | Jarring if delta > 3 dB |
|
|
36
|
+
| Fire scene clips | `fire_scene_clips` | Selective scene launch, less predictable |
|
|
37
|
+
| Set scene tempo | `set_scene_tempo` | Changes tempo on next scene fire |
|
|
38
|
+
|
|
39
|
+
### Confirmation Protocol
|
|
40
|
+
|
|
41
|
+
Present as: "[Action description]. Risk: [what could go wrong]. Confirm?"
|
|
42
|
+
|
|
43
|
+
Keep confirmations short during performance. One line maximum.
|
|
44
|
+
|
|
45
|
+
## Blocked Actions (Never During Performance)
|
|
46
|
+
|
|
47
|
+
### Device Chain Surgery
|
|
48
|
+
- `find_and_load_device` — loading causes audio thread hiccup
|
|
49
|
+
- `delete_device` — removing active device causes dropout
|
|
50
|
+
- `load_device_by_uri` — same as find_and_load
|
|
51
|
+
- `load_browser_item` — browser loading is unpredictable latency
|
|
52
|
+
|
|
53
|
+
### Track Structure
|
|
54
|
+
- `create_midi_track` / `create_audio_track` / `create_return_track` — track creation pauses audio engine momentarily
|
|
55
|
+
- `delete_track` — data loss, audio interruption
|
|
56
|
+
- `duplicate_track` — CPU spike
|
|
57
|
+
- `set_track_routing` — routing changes can cause feedback or silence
|
|
58
|
+
|
|
59
|
+
### Clip Editing
|
|
60
|
+
- `create_clip` / `delete_clip` / `duplicate_clip` — structural changes while playing
|
|
61
|
+
- `set_clip_loop` / `set_clip_warp_mode` / `quantize_clip` — property changes on playing clips
|
|
62
|
+
- `add_notes` / `modify_notes` / `remove_notes` — note editing mid-playback
|
|
63
|
+
|
|
64
|
+
### Arrangement Editing
|
|
65
|
+
- All `*_arrangement_*` tools — arrangement view editing during performance
|
|
66
|
+
- `set_arrangement_automation` — automation lane changes
|
|
67
|
+
|
|
68
|
+
### Heavy Operations
|
|
69
|
+
- `freeze_track` / `flatten_track` — CPU-intensive, blocks audio thread
|
|
70
|
+
- `start_recording` — may cause unexpected monitoring behavior
|
|
71
|
+
- `capture_audio` / `capture_midi` — resource-intensive
|
|
72
|
+
|
|
73
|
+
### Data Operations
|
|
74
|
+
- `undo` / `redo` — unpredictable state reversion during live playback
|
|
75
|
+
- `memory_learn` / `memory_delete` — non-urgent, save for after the show
|
|
76
|
+
- `import_midi_to_clip` — file I/O during performance
|
|
77
|
+
|
|
78
|
+
## Emergency Procedures
|
|
79
|
+
|
|
80
|
+
### Audio Problem
|
|
81
|
+
1. `set_track_mute(track_index, true)` on the problem track
|
|
82
|
+
2. If problem persists: `set_master_volume(0.0)` for fade to silence
|
|
83
|
+
3. Last resort: `stop_all_clips` for emergency silence
|
|
84
|
+
|
|
85
|
+
### Feedback Loop
|
|
86
|
+
1. `set_track_mute` on the suspected track immediately
|
|
87
|
+
2. `set_track_send` to zero on all sends for that track
|
|
88
|
+
3. Gradually unmute after identifying the routing issue
|
|
89
|
+
|
|
90
|
+
### Wrong Scene Launched
|
|
91
|
+
1. Immediately `fire_scene` on the correct scene
|
|
92
|
+
2. Or `stop_all_clips` and restart from the correct point
|
|
93
|
+
3. Do not use `undo` — it may revert more than intended
|
|
94
|
+
|
|
95
|
+
### CPU Spike
|
|
96
|
+
1. `set_track_mute` on the most CPU-heavy tracks (check `get_session_info` for device counts)
|
|
97
|
+
2. `toggle_device` to bypass heavy effects (with caution confirmation skipped in emergency)
|
|
98
|
+
3. If critical: `stop_all_clips` and restart with fewer active tracks
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: livepilot-release
|
|
3
|
+
description: Release checklist for LivePilot — run before ANY push, publish, or "update everything" request. Covers every file, channel, and artifact that references version numbers, tool counts, or project state.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# LivePilot Release Checklist
|
|
7
|
+
|
|
8
|
+
Run this checklist EVERY time the user says "update everything", "push", "release", "make sure everything is current", or similar.
|
|
9
|
+
|
|
10
|
+
## 1. Version Strings (must ALL match)
|
|
11
|
+
|
|
12
|
+
- [ ] `package.json` → `"version"`
|
|
13
|
+
- [ ] `package-lock.json` → `"version"` (run `npm install --package-lock-only` if stale)
|
|
14
|
+
- [ ] `server.json` → `"version"` (TWO locations: top-level and package)
|
|
15
|
+
- [ ] `livepilot/.Codex-plugin/plugin.json` → `"version"` (primary Codex manifest)
|
|
16
|
+
- [ ] `livepilot/.claude-plugin/plugin.json` → `"version"` (must match Codex plugin)
|
|
17
|
+
- [ ] `.claude-plugin/marketplace.json` → `"version"` in plugins array
|
|
18
|
+
- [ ] `mcp_server/__init__.py` → `__version__`
|
|
19
|
+
- [ ] `remote_script/LivePilot/__init__.py` → `__version__` (log message auto-uses it)
|
|
20
|
+
- [ ] `m4l_device/livepilot_bridge.js` → version in ping response
|
|
21
|
+
- [ ] `CLAUDE.md` → header line
|
|
22
|
+
- [ ] `livepilot/skills/livepilot-core/references/overview.md` → header line
|
|
23
|
+
- [ ] `CHANGELOG.md` → latest version header
|
|
24
|
+
- [ ] `docs/assets/banner-dark.svg` and `docs/assets/banner-light.svg` → current tool/domain display
|
|
25
|
+
- [ ] `docs/M4L_BRIDGE.md` → ping response example
|
|
26
|
+
|
|
27
|
+
**How to check:** `grep -rn "1\.[0-9]\.[0-9]" package.json server.json livepilot/.Codex-plugin/plugin.json livepilot/.claude-plugin/plugin.json .claude-plugin/marketplace.json mcp_server/__init__.py remote_script/LivePilot/__init__.py m4l_device/livepilot_bridge.js CHANGELOG.md CLAUDE.md livepilot/skills/livepilot-core/references/overview.md docs/M4L_BRIDGE.md`
|
|
28
|
+
|
|
29
|
+
## 2. Tool Count (must ALL match)
|
|
30
|
+
|
|
31
|
+
Current: **465 tools across 56 domains**.
|
|
32
|
+
Spectral/analyzer (bridge-only): **38**. The remaining tool surface works without the bridge or degrades gracefully. Backed by 32 bridge commands.
|
|
33
|
+
|
|
34
|
+
Verify: `grep -rc "@mcp.tool" mcp_server/tools/ | grep -v ":0" | awk -F: '{sum+=$2} END{print sum}'`
|
|
35
|
+
|
|
36
|
+
Files that reference tool count:
|
|
37
|
+
- [ ] `README.md` — header ("465 tools. 56 domains"), bridge section ("38 spectral/analyzer tools require bridge")
|
|
38
|
+
- [ ] `package.json` → `"description"`
|
|
39
|
+
- [ ] `server.json` → `"description"`
|
|
40
|
+
- [ ] `manifest.json` → `"description"`
|
|
41
|
+
- [ ] `livepilot/.Codex-plugin/plugin.json` → `"description"` (primary Codex manifest)
|
|
42
|
+
- [ ] `livepilot/.claude-plugin/plugin.json` → `"description"` (must match Codex plugin)
|
|
43
|
+
- [ ] `.claude-plugin/marketplace.json` → `"description"`
|
|
44
|
+
- [ ] `CLAUDE.md` → "465 tools across 56 domains"
|
|
45
|
+
- [ ] `CONTRIBUTING.md` → tool count in intro
|
|
46
|
+
- [ ] `livepilot/skills/livepilot-core/SKILL.md` — tool/domain count
|
|
47
|
+
- [ ] `livepilot/skills/livepilot-core/references/overview.md` — tool/domain count
|
|
48
|
+
- [ ] `docs/manual/index.md` — domain table with correct per-domain counts
|
|
49
|
+
- [ ] `docs/manual/getting-started.md` — bridge copy (avoid hard numeric core/bridge split — use "38 spectral tools require bridge")
|
|
50
|
+
- [ ] `docs/manual/tool-reference.md` — all domains present with correct counts
|
|
51
|
+
- [ ] `docs/manual/tool-catalog.md` — auto-regenerated by `python3 scripts/sync_metadata.py --fix`
|
|
52
|
+
(raw generator is `python3 scripts/generate_tool_catalog.py > docs/manual/tool-catalog.md`,
|
|
53
|
+
but you should never need to call it directly — `--fix` invokes it at the end of the chain
|
|
54
|
+
after the count bumps so the catalog stays coherent with the live `mcp.list_tools()` registry)
|
|
55
|
+
- [ ] `docs/M4L_BRIDGE.md` — bridge copy (avoid hard numeric core/bridge split — use "38 spectral tools require bridge")
|
|
56
|
+
- [ ] `docs/assets/banner-dark.svg` and `docs/assets/banner-light.svg`
|
|
57
|
+
- [ ] `tests/test_tools_contract.py` → expected total count
|
|
58
|
+
- [ ] `tests/test_skill_contracts.py` → catalog sync test passes
|
|
59
|
+
|
|
60
|
+
**How to check:** `grep -rn "168\|139\|135\|127\|115\|107" --include="*.md" --include="*.json" --include="*.py" --include="*.html" . | grep -v node_modules | grep -v .git | grep -v __pycache__ | grep -v CHANGELOG`
|
|
61
|
+
|
|
62
|
+
## 3. Domain Count
|
|
63
|
+
|
|
64
|
+
Current: **56 domains**: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, analyzer, automation, theory, generative, harmony, midi_io, perception, agent_os, composition, motif, research, planner, project_brain, runtime, evaluation, mix_engine, sound_design, transition_engine, reference_engine, translation_engine, performance_engine, song_brain, preview_studio, hook_hunter, stuckness_detector, wonder_mode, session_continuity, creative_constraints, device_forge, sample_engine, atlas, composer, experiment, musical_intelligence, semantic_moves, diagnostics, follow_actions, grooves, scales, take_lanes, miditool, synthesis_brain, creative_director, user_corpus, audit, grader.
|
|
65
|
+
|
|
66
|
+
- [ ] All files that mention domain count say "56 domains"
|
|
67
|
+
- [ ] Domain lists include ALL 56 (especially newer domains — they're the most often omitted)
|
|
68
|
+
|
|
69
|
+
## 4. npm Registry
|
|
70
|
+
|
|
71
|
+
- [ ] `npm view livepilot version` matches local version
|
|
72
|
+
- [ ] If not: `npm publish`
|
|
73
|
+
|
|
74
|
+
## 5. GitHub
|
|
75
|
+
|
|
76
|
+
- [ ] Repo description matches current tool count and features (`gh repo edit dreamrec/LivePilot --description "..."`)
|
|
77
|
+
- [ ] Topics are current (should include: ai, mcp, ableton, livepilot, max-for-live, audio-analysis)
|
|
78
|
+
- [ ] Latest release matches current version (`gh release list`)
|
|
79
|
+
- [ ] Release notes are current
|
|
80
|
+
- [ ] **NEW VERSION shows `Latest` flag in `gh release list`** — not just `Draft`. If a tag was deleted-then-recreated during release recovery (e.g., to move the tag to a fix commit), GitHub silently demotes the attached release to Draft AND clears its Latest flag. The release object survives (asset + body preserved) but the public-facing "what's the latest version" badge stays on the prior release. Fix in one call:
|
|
81
|
+
```bash
|
|
82
|
+
gh release edit v${VERSION} --draft=false --latest
|
|
83
|
+
```
|
|
84
|
+
This trap caught v1.18.0-era recovery and the v1.25.0 .amxd-freeze fix recovery. **Always re-verify after a tag-recreate flow.**
|
|
85
|
+
|
|
86
|
+
## 6. Plugin Cache
|
|
87
|
+
|
|
88
|
+
- [ ] `~/.claude/plugins/cache/dreamrec-LivePilot/livepilot/` has current version directory
|
|
89
|
+
- [ ] Old version directories removed
|
|
90
|
+
- [ ] `~/.claude/plugins/installed_plugins.json` → `livepilot@dreamrec-LivePilot` entry: update `version`, `installPath`, `gitCommitSha`, `lastUpdated`
|
|
91
|
+
|
|
92
|
+
## 7. Social/Promotional Assets
|
|
93
|
+
|
|
94
|
+
- [ ] `docs/assets/banner-dark.svg` and `docs/assets/banner-light.svg` — tool count and domain list
|
|
95
|
+
- [ ] GitHub repo social preview image (Settings > Social preview)
|
|
96
|
+
|
|
97
|
+
## 8. Documentation Content
|
|
98
|
+
|
|
99
|
+
- [ ] `README.md` — features match current capabilities, "Coming" section is accurate
|
|
100
|
+
- [ ] `docs/manual/getting-started.md` — install instructions current
|
|
101
|
+
- [ ] `docs/manual/tool-reference.md` — all 56 domains listed, all 465 tools present
|
|
102
|
+
- [ ] `docs/M4L_BRIDGE.md` — architecture accurate, core/bridge counts correct
|
|
103
|
+
|
|
104
|
+
## 9. Derived Artifacts
|
|
105
|
+
|
|
106
|
+
- [ ] `m4l_device/LivePilot_Analyzer.amxd` — frozen JS matches source? All commands present?
|
|
107
|
+
- [ ] If `livepilot_bridge.js` changed → amxd needs rebuilding in Max editor
|
|
108
|
+
- [ ] `dist/livepilot-${VERSION}.mcpb` — MCPB bundle for Claude Desktop one-click install.
|
|
109
|
+
**REQUIRED for every release** — the README's "Easiest: Claude Desktop Extension (1 click)"
|
|
110
|
+
path points at this asset. From v1.17 through v1.20.2 every release silently shipped
|
|
111
|
+
without it; v1.20.3+ MUST attach the bundle to the GitHub release.
|
|
112
|
+
```bash
|
|
113
|
+
# Build (produces dist/livepilot-${VERSION}.mcpb — versioned, in dist/, ~4-5 MB)
|
|
114
|
+
bash scripts/build_mcpb.sh
|
|
115
|
+
|
|
116
|
+
# Attach to the release (run after `gh release create`)
|
|
117
|
+
VERSION=$(python3 -c "import json; print(json.load(open('manifest.json'))['version'])")
|
|
118
|
+
gh release upload "v${VERSION}" "dist/livepilot-${VERSION}.mcpb" --clobber
|
|
119
|
+
```
|
|
120
|
+
The script stages `manifest.json` + `bin/livepilot.js` + `mcp_server/` + `remote_script/`
|
|
121
|
+
+ `m4l_device/` + `installer/` + `requirements.txt`, strips `__pycache__`/`*.pyc`/`.DS_Store`,
|
|
122
|
+
zips into `dist/`, and verifies the embedded manifest name+version+entry_point.
|
|
123
|
+
|
|
124
|
+
## 10. Code Consistency
|
|
125
|
+
|
|
126
|
+
- [ ] `@mcp.tool()` count matches documented tool count: `grep -r "@mcp.tool" mcp_server/tools/ | wc -l`
|
|
127
|
+
- [ ] No dead imports or unused code in recently changed files
|
|
128
|
+
- [ ] Remote script version matches MCP server version
|
|
129
|
+
- [ ] All tests pass: `python3 -m pytest tests/ -v`
|
|
130
|
+
|
|
131
|
+
## 11. Automated Checks
|
|
132
|
+
|
|
133
|
+
- [ ] `python scripts/sync_metadata.py --check` — all metadata in sync
|
|
134
|
+
- [ ] `python -m pytest tests/test_command_boundary_audit.py` — no invalid TCP targets
|
|
135
|
+
- [ ] `python -m pytest tests/test_move_annotations.py` — all moves annotated
|
|
136
|
+
- [ ] `python -m pytest tests/test_capability.py` — capability contract works
|
|
137
|
+
- [ ] `python -m pytest tests/test_capability_probe.py` — doctor probe works
|
|
138
|
+
|
|
139
|
+
## 12. Release Smoke Board
|
|
140
|
+
|
|
141
|
+
- [ ] Run through `docs/archive/release-smoke-board-v1.10-era.md` scenarios
|
|
142
|
+
against a real Ableton session (archived — still a useful pre-flight
|
|
143
|
+
checklist even if written against v1.10 tool surface)
|
|
144
|
+
- [ ] All preview modes correctly labeled (audible/metadata/analytical)
|
|
145
|
+
- [ ] Persistence survives server restart
|
|
146
|
+
|
|
147
|
+
## Quick Verify Command
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
echo "=== Versions ===" && grep -h '"version"' package.json server.json manifest.json livepilot/.Codex-plugin/plugin.json livepilot/.claude-plugin/plugin.json .claude-plugin/marketplace.json | head -8 && grep __version__ mcp_server/__init__.py remote_script/LivePilot/__init__.py && echo "=== Tool count ===" && grep -rc "@mcp.tool" mcp_server/ | grep -v ":0" | awk -F: '{sum+=$2} END{print "Total:", sum}' && echo "=== Tests ===" && python3 -m pytest tests/ -q 2>&1 | tail -1
|
|
151
|
+
```
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: livepilot-sample-engine
|
|
3
|
+
description: >
|
|
4
|
+
This skill should be used when the user asks to "sample", "chop",
|
|
5
|
+
"slice a loop", "find me a sample", "load a sample", "flip this",
|
|
6
|
+
"resample", "vocal chop", "found sound", "texture from", "turn this into",
|
|
7
|
+
"break", "one-shot", "load into Simpler", or when get_sample_opportunities
|
|
8
|
+
finds gaps in the song's sample usage.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Sample Engine — AI Sample Manipulation for Ableton Live
|
|
12
|
+
|
|
13
|
+
The Sample Engine is LivePilot's intelligence layer for sample discovery,
|
|
14
|
+
analysis, critique, and creative manipulation. It turns raw samples into
|
|
15
|
+
musical elements through 29 techniques drawn from Dilla, Burial, Amon Tobin,
|
|
16
|
+
Four Tet, and DJ Premier.
|
|
17
|
+
|
|
18
|
+
## Philosophy: Surgeon vs Alchemist
|
|
19
|
+
|
|
20
|
+
Every sample workflow is guided by one of two philosophies:
|
|
21
|
+
|
|
22
|
+
- **Surgeon** — Precision. Match key, align tempo, carve frequencies, blend
|
|
23
|
+
seamlessly. The sample should sound like it was always part of the track.
|
|
24
|
+
- **Alchemist** — Transformation. Reverse, stretch, destroy, rebuild.
|
|
25
|
+
The original creator shouldn't recognize their sample.
|
|
26
|
+
- **Auto** (default) — Context decides. Building a clean layer? Surgeon.
|
|
27
|
+
Stuck and need surprise? Alchemist. The critics and intent determine which.
|
|
28
|
+
|
|
29
|
+
## 6 MCP Tools
|
|
30
|
+
|
|
31
|
+
| Tool | Purpose |
|
|
32
|
+
|------|---------|
|
|
33
|
+
| `analyze_sample` | Build SampleProfile — material type, key, BPM, recommendations |
|
|
34
|
+
| `evaluate_sample_fit` | 6-critic battery — key, tempo, frequency, role, vibe, intent fit |
|
|
35
|
+
| `search_samples` | Search Splice library, Ableton browser, and local filesystem |
|
|
36
|
+
| `suggest_sample_technique` | Recommend techniques from the 29-recipe library |
|
|
37
|
+
| `plan_sample_workflow` | End-to-end plan: analyze + critique + technique + compiled steps |
|
|
38
|
+
| `get_sample_opportunities` | Analyze song for where samples could improve it |
|
|
39
|
+
|
|
40
|
+
## Workflow Modes
|
|
41
|
+
|
|
42
|
+
### Direct Request
|
|
43
|
+
User asks to do something specific with a sample:
|
|
44
|
+
```
|
|
45
|
+
"Chop this vocal into a rhythm"
|
|
46
|
+
-> analyze_sample -> evaluate_sample_fit(intent="rhythm")
|
|
47
|
+
-> suggest_sample_technique -> execute
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Discovery Mode
|
|
51
|
+
User wants to find and use a sample:
|
|
52
|
+
```
|
|
53
|
+
"Find me a dark vocal for this track"
|
|
54
|
+
-> search_samples(query="dark vocal") -> present candidates
|
|
55
|
+
-> user picks -> analyze -> critique -> plan -> execute
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Wonder Mode Integration
|
|
59
|
+
When stuck, Wonder Mode can suggest sample-based variants:
|
|
60
|
+
- 6 sample-domain semantic moves in the registry
|
|
61
|
+
- Compiled plans require agent to supply `file_path` from prior `search_samples` results
|
|
62
|
+
- Diagnosis detects: no_organic_texture, stale_drums, dense_but_static
|
|
63
|
+
- Note: Wonder does not yet auto-call `search_samples` — the agent must chain the calls
|
|
64
|
+
|
|
65
|
+
## Golden Rules
|
|
66
|
+
|
|
67
|
+
1. **Always analyze before loading** — `analyze_sample` tells you what
|
|
68
|
+
the material is before you commit to a technique
|
|
69
|
+
2. **Always critique before executing** — `evaluate_sample_fit` catches
|
|
70
|
+
key clashes, tempo mismatches, and frequency masking before they happen
|
|
71
|
+
3. **Respect the intent** — "rhythm" and "texture" need different approaches
|
|
72
|
+
even for the same sample
|
|
73
|
+
4. **Start from the nearest technique** — don't improvise a workflow when
|
|
74
|
+
a proven recipe exists in the library
|
|
75
|
+
5. **Present both plans** — surgeon and alchemist. Let the user choose.
|
|
76
|
+
|
|
77
|
+
## Material Types
|
|
78
|
+
|
|
79
|
+
| Type | Detection | Best Simpler Mode | Best Warp Mode |
|
|
80
|
+
|------|-----------|-------------------|----------------|
|
|
81
|
+
| vocal | "vocal", "vox", "voice" in name | Slice (Region) | Complex Pro |
|
|
82
|
+
| drum_loop | "drum", "break", "beat" in name | Slice (Transient) | Beats |
|
|
83
|
+
| instrument_loop | "guitar", "piano", "synth" | Slice (Beat) | Complex Pro |
|
|
84
|
+
| one_shot | "kick", "snare", "clap", short | Classic | Complex |
|
|
85
|
+
| texture | "ambient", "pad", "drone" | Classic | Texture |
|
|
86
|
+
| foley | "foley", "field", "recording" | Classic | Texture |
|
|
87
|
+
| fx | "fx", "riser", "sweep" | Classic | Complex |
|
|
88
|
+
| full_mix | full mix, long duration | Slice (Beat) | Complex Pro |
|
|
89
|
+
|
|
90
|
+
## 6 Sample Critics
|
|
91
|
+
|
|
92
|
+
Each scores 0.0-1.0 on one dimension of fitness:
|
|
93
|
+
|
|
94
|
+
1. **Key Fit** — Circle-of-fifths distance from song key
|
|
95
|
+
2. **Tempo Fit** — BPM match including half/double time
|
|
96
|
+
3. **Frequency Fit** — Spectral overlap with existing mix
|
|
97
|
+
4. **Role Fit** — Does this fill a missing role in the song?
|
|
98
|
+
5. **Vibe Fit** — Taste graph alignment (if evidence exists)
|
|
99
|
+
6. **Intent Fit** — Does the material serve the stated goal?
|
|
100
|
+
|
|
101
|
+
## Beyond Simpler — Sample-Adjacent Instruments in the Library
|
|
102
|
+
|
|
103
|
+
Simpler is the default sample container, but the installed packs ship instruments that change the *physics* of what playback means. When the user reaches for "more texture" / "less recognizable" / "evolving" / "grain" / "drone bed", consider these before defaulting to Simpler + warp:
|
|
104
|
+
|
|
105
|
+
- **Granulator III** (Live Suite, requires Live 12.0+ Max for Live) — Robert Henke's granular synth. Three modes: **Classic** (Granulator II engine), **Loop** (rhythmic playback), **Cloud** (up to 20 unsynced overlapping grains). MPE per-note control of grain size/shape/position. **Built-in real-time audio capture** — can grain whatever is currently playing in the session in one click. 59 presets. Reach for it when the user wants a sample to evolve, smear, or stop sounding like itself.
|
|
106
|
+
- **PitchLoop89** (Live Suite) — Henke / Publison DHM 89 emulation. Two independent pitch-shifting delay voices, ±24 semitones, fine ±1 semitone, per-voice feedback / pan / reverse. The right tool when "shimmer", "detuned cloud", or "pitched echo" describes the goal.
|
|
107
|
+
- **Drone Lab's Harmonic Drone Generator** — 8-voice M4L synth (Expert Math). Multiple tuning systems including just intonation, Pythagorean, Indonesian Pelog. The right tool when the source isn't a sample at all but a sustained tonal bed under whatever's already playing.
|
|
108
|
+
- **Lost and Found multisamples** — music box, mid-century Capri fan organ, DIY plastic guitar, melodica, kazoo, metal xylophone, plus 7 Drum Racks built from everyday objects (steel water bottle, analog clock, submerged objects). When the user wants found-sound character without recording their own.
|
|
109
|
+
|
|
110
|
+
These are awareness, not prescription — pick the one that fits the moment. Don't lock in a chain.
|
|
111
|
+
|
|
112
|
+
## Reference Docs
|
|
113
|
+
|
|
114
|
+
- `references/sample-techniques.md` — Full 29-technique catalog
|
|
115
|
+
- `references/sample-critics.md` — Critic scoring details
|
|
116
|
+
- `references/sample-philosophy.md` — Surgeon vs Alchemist guide
|
|
117
|
+
- `docs/research/2026-04-22-ableton-packs-deep-analysis.md` — Per-pack capabilities (44 installed packs scored against minimal/dub/cinematic aesthetic)
|