livepilot 1.25.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.
- package/CHANGELOG.md +80 -0
- package/README.md +9 -9
- 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 +49 -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 +455 -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 +136 -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 +157 -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 +225 -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/atlas/tools.py +63 -12
- package/mcp_server/audit/checks.py +167 -6
- package/mcp_server/audit/state.py +88 -0
- package/mcp_server/audit/tools.py +6 -69
- package/mcp_server/composer/develop/apply.py +2 -2
- package/mcp_server/composer/full/apply.py +32 -6
- package/mcp_server/grader/__init__.py +17 -0
- package/mcp_server/grader/client.py +647 -0
- package/mcp_server/grader/iterator.py +57 -0
- package/mcp_server/grader/tools.py +263 -0
- package/mcp_server/m4l_bridge.py +5 -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 +12 -7
- package/mcp_server/tools/browser.py +68 -0
- package/package.json +20 -5
- package/remote_script/LivePilot/__init__.py +1 -1
- package/remote_script/LivePilot/server.py +63 -2
- package/requirements.txt +24 -3
- package/server.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,85 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v1.26.1 — 2026-05-24
|
|
4
|
+
|
|
5
|
+
Patch release for installer/release hygiene and live execution correctness.
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Codex plugin installer now copies the full plugin payload into Codex's local plugin cache, writes the lowercase `.codex-plugin` manifest mirror, and prunes stale cache versions.
|
|
10
|
+
- Full composer analysis now routes MCP-side analysis tools through the MCP dispatch registry instead of sending non-Remote-Script commands over TCP.
|
|
11
|
+
- Remote Script write-command detection now classifies newer mutating handlers by prefix so they receive write timeouts and settle delays.
|
|
12
|
+
- M4L bridge OSC builder now rejects unsupported argument types instead of silently emitting malformed OSC payloads.
|
|
13
|
+
- `develop_apply` bridge ping call now passes timeout correctly instead of serializing a dict as an OSC argument.
|
|
14
|
+
- Creative skills no longer route eclectic/rule-breaking requests to a private missing `livepilot-eclectic` skill.
|
|
15
|
+
- Metadata/docs refreshed for 56 domains, 465 tools, and 44 semantic moves.
|
|
16
|
+
- Social banner SVGs and release checklist paths now reference the current 465-tool / 56-domain project state.
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- Public `CONTEXT.md` with repo vocabulary and architecture decisions.
|
|
21
|
+
- Initial `LivePilot_Elektron` M4L SysEx bridge artifact and JS bridge scaffold.
|
|
22
|
+
|
|
23
|
+
### Tests
|
|
24
|
+
|
|
25
|
+
- Added contract coverage for Codex cache installation, MCP dispatch adapters, Remote Script command registry drift, write-command classification, OSC argument validation, and stale skill references.
|
|
26
|
+
|
|
27
|
+
## v1.26.0 — 2026-05-09
|
|
28
|
+
|
|
29
|
+
Rubric grader system + atlas-aware load preflight + Drift factory-fingerprint detection. Closes a chronic-regression class: anti-pattern violations of CLAUDE.md §1/§2/§4/§5/§7.3 now have programmatic enforcement, and silent-instrument loads (Granulator III without a sample) are caught structurally at load time instead of much later via the verifier.
|
|
30
|
+
|
|
31
|
+
### Added — three new MCP tools
|
|
32
|
+
|
|
33
|
+
- **`grader_list_rubrics()`** — names of registered rubrics + light/heavy classification. Five rubrics ship: `layer_accumulation` (§7.3), `default_preset_check` (§1), `modulation_presence` (§4), `layer_precision` (§5), `sound_design_depth` (§2).
|
|
34
|
+
- **`grader_evaluate(rubric_id, heavy=False, include_brief=True, include_masking=True)`** — runs a single rubric across the current session. Light state (~3s) covers role/volume/banned-default checks. Heavy state (~6s) adds per-clip notes + per-clip automation + wavetable mod-matrix + session masking report — required for §5 sequence/modulation/masking criteria. Returns structured per-criterion verdict + actionable revision_brief markdown.
|
|
35
|
+
- **`grader_evaluate_all(heavy=True, include_brief=True, include_masking=True)`** — runs ALL rubrics in one call against shared state. ~5× cheaper than calling `grader_evaluate` per rubric because state-fetching is the dominant cost. Returns per-rubric verdicts + combined_brief.
|
|
36
|
+
|
|
37
|
+
### Added — Drift factory-fingerprint detection
|
|
38
|
+
|
|
39
|
+
- `audit/checks._check_drift_params` and `_drift_engagement_score` — captures Drift's 12-param factory fingerprint (Pitch Mod Amt 1/2 = 0.5, Mod Matrix Amt 2/3 = 0.5, Vel > Vol = 0.5, Spread = 0.10, Strength = 0.05, Drift = 0.07, Thickness = 0.0, LP Mod Amt 1 = 0.97, LP Mod Amt 2 = 0.78, LFO Amt = 1.0). Counts deviations from factory > 0.04 epsilon. Zero deviations on a melodic-role track → `unprogrammed_instrument` fail. Closes the §2 detection gap where Drift's bipolar defaults escaped the generic `_SUSPICIOUS_AT_ZERO` heuristic.
|
|
40
|
+
|
|
41
|
+
### Added — atlas-aware load preflight
|
|
42
|
+
|
|
43
|
+
- **`atlas_search`** now surfaces 8 discoverability-critical fields when `enriched=true`: `self_contained`, `synthesis_type`, `complexity`, `use_cases`, `signature_techniques_count`, `first_technique_hint`, `gotchas_count`, `first_gotcha`. Truncation widened 120 → 400 chars. Closes the silent-Granulator-III bug class — the agent now sees `self_contained: false` immediately in search results without a follow-up `atlas_device_info` round-trip.
|
|
44
|
+
- **`load_browser_item`** now appends `atlas_preflight` to the response when the loaded device is enriched AND declares `self_contained: false`. Includes a structured warning + the actionable hint to load a Sounds preset chain that ships with a sample baked in. Granular samplers (Granulator III, Vector Grain) are caught at load time instead of leaving the agent with a silent instrument.
|
|
45
|
+
|
|
46
|
+
### Added — `mcp_server/audit/state.py` shared module
|
|
47
|
+
|
|
48
|
+
Hoists `safe_call`, `fetch_notes_for_clips`, `has_clip_automation`, `count_wavetable_routings` from `audit/tools.py` and `grader/tools.py` into one shared module. Removes the duplication that crept in during Phase 2c-β. Now a third caller can import directly without re-copy.
|
|
49
|
+
|
|
50
|
+
### Changed — instrument + effect class taxonomy
|
|
51
|
+
|
|
52
|
+
`audit/checks._INSTRUMENT_CLASSES` and `_EFFECT_CATEGORIES` now include Live's actual runtime class names alongside user-facing brand names. Captured live 2026-05-08:
|
|
53
|
+
|
|
54
|
+
| User-facing | Runtime class_name |
|
|
55
|
+
|---|---|
|
|
56
|
+
| Analog | `UltraAnalog` |
|
|
57
|
+
| Meld | `InstrumentMeld` |
|
|
58
|
+
| Poli | `MxDeviceInstrument` (M4L wrapper) |
|
|
59
|
+
| Electric | `LoungeLizard` |
|
|
60
|
+
| EQ Eight | `Eq8` |
|
|
61
|
+
| Compressor / Compressor 2 | `Compressor2` |
|
|
62
|
+
| Auto Filter | `AutoFilter2` |
|
|
63
|
+
| Glue Compressor | `GlueCompressor` |
|
|
64
|
+
| Multiband Dynamics | `MultibandDynamics` |
|
|
65
|
+
|
|
66
|
+
§1 banned-default detection now uses `(class_name, name)` fingerprint tuples — catches Drift, UltraAnalog (Analog), InstrumentMeld (Meld), MxDeviceInstrument-Poli (M4L wrapper). Pre-1.26 the flat-set approach only caught Drift.
|
|
67
|
+
|
|
68
|
+
### Tests
|
|
69
|
+
|
|
70
|
+
- 8 new test files: `test_grader_layer_accumulation.py`, `test_grader_default_preset_check.py`, `test_grader_modulation_presence.py`, `test_grader_layer_precision.py`, `test_grader_sound_design_depth.py`, `test_audit_state.py`, `test_atlas_search_field_surfacing.py`, `test_browser_atlas_preflight.py`. ~110 new tests covering rubric criteria, false-positive guards, Drift fingerprint, atlas preflight, shared helpers.
|
|
71
|
+
- Updated `test_audit_layer.py` (Drift fingerprint + real-class fixtures) and `test_tools_contract.py` (count 462 → 465 + grader tools registered).
|
|
72
|
+
- 237 tests pass for the grader + audit + browser preflight surfaces.
|
|
73
|
+
|
|
74
|
+
### CLAUDE.md additions
|
|
75
|
+
|
|
76
|
+
- §9b — Kill orphan LivePilot processes (don't ask the user). When a tool errors with `UDP 9880 still in use` or `Another client is already connected`, the active session takes the kill action.
|
|
77
|
+
- §9c — Arrangement build finalization. Loop covers full content, cursor at 0, orange button inactive, no leftover session clips. Canonical one-call: `force_arrangement(beat_time=0, loop_start=0, loop_length=<content_end>, play=false)`.
|
|
78
|
+
|
|
79
|
+
### Live test (this release's evidence)
|
|
80
|
+
|
|
81
|
+
A 5-layer 130 BPM two-step session built end-to-end exercising all five rubrics, including a 5/4 fill bar, French disco filter sidechain, and a granular drone pad. Multi-violation stress test progressed 0/12 → 8/13 (62%) → 11/12 (92%) → 12/12 (100%) catch rate as fixes landed. The Granulator III silent-instrument bug surfaced during this session and triggered the atlas_search/load_browser_item preflight fix that's now part of this release.
|
|
82
|
+
|
|
3
83
|
## v1.25.0 — 2026-05-02
|
|
4
84
|
|
|
5
85
|
Hybrid Knowledge Surface — closes the gap between "compose runs successfully" and "compose makes thoughtful production decisions" by giving the agent three layers of atlas-corpus access during plan design instead of one-shot pre-resolution.
|
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
<p align="center">
|
|
19
19
|
An agentic production system for Ableton Live 12.<br>
|
|
20
|
-
|
|
20
|
+
465 tools. 56 domains. Device atlas. Plan-aware Splice integration. Auto-composition. Spectral perception. Technique memory. Drum-rack pad builder. Live dead-device detection.
|
|
21
21
|
</p>
|
|
22
22
|
|
|
23
23
|
<br>
|
|
@@ -51,7 +51,7 @@ Most MCP servers are tool collections — they execute commands. LivePilot is an
|
|
|
51
51
|
| **Sample Engine** | Three-source sample intelligence — Ableton's browser, your filesystem, and Splice's catalog (plan-aware: Ableton Live plan uses daily quota, Sounds+/Creator uses credits, free samples bypass both). 6 fitness critics. 29 processing techniques. Collections, presets, preview-URL audition, LIVE Describe-a-Sound + Variations via Splice GraphQL |
|
|
52
52
|
| **Spectral Perception** | Real-time ears via M4L — 9-band FFT (with sub_low split at 20-60 Hz for kick fundamentals), RMS/peak metering, Krumhansl-Schmuckler key detection, pitch tracking, FluCoMa mel/chroma/onset. Auto-loaded via `ensure_analyzer_on_master` (v1.20.3) — no more silently-degraded mix moves from forgotten analyzer |
|
|
53
53
|
| **Technique Memory** | Persistent library of production decisions. Save a beat pattern, device chain, or mix template. Recall by mood, genre, or texture across sessions |
|
|
54
|
-
| **Creative Intelligence** | 12 engines on top of the tools: SongBrain, Taste Graph, Wonder Mode, Mix/Sound-Design/Transition/Reference/Translation engines, Hook Hunter, Stuckness Detector, Session Continuity, Preview Studio. **44 semantic moves** (v1.
|
|
54
|
+
| **Creative Intelligence** | 12 engines on top of the tools: SongBrain, Taste Graph, Wonder Mode, Mix/Sound-Design/Transition/Reference/Translation engines, Hook Hunter, Stuckness Detector, Session Continuity, Preview Studio. **44 semantic moves** (v1.26) — musical intents like "tighten the low end" or "make kick and bass lock" that compile into tool sequences with risk levels and target dimensions |
|
|
55
55
|
|
|
56
56
|
<br>
|
|
57
57
|
|
|
@@ -59,7 +59,7 @@ Most MCP servers are tool collections — they execute commands. LivePilot is an
|
|
|
59
59
|
|
|
60
60
|
## Two Ways to Talk to LivePilot
|
|
61
61
|
|
|
62
|
-
Pick whichever is faster for the idea in your head — both reach the same
|
|
62
|
+
Pick whichever is faster for the idea in your head — both reach the same 465-tool surface.
|
|
63
63
|
|
|
64
64
|
### Route A — Artist / aesthetic shorthand
|
|
65
65
|
|
|
@@ -112,8 +112,8 @@ Most sessions do both. Lead with shorthand to anchor the aesthetic, then refine
|
|
|
112
112
|
│ └─────────────────┼──────────────────┘ │
|
|
113
113
|
│ ▼ │
|
|
114
114
|
│ ┌─────────────────┐ │
|
|
115
|
-
│ │
|
|
116
|
-
│ │
|
|
115
|
+
│ │ 465 MCP Tools │ │
|
|
116
|
+
│ │ 56 domains │ │
|
|
117
117
|
│ └────────┬────────┘ │
|
|
118
118
|
│ │ │
|
|
119
119
|
│ Remote Script ──┤── TCP 9878 │
|
|
@@ -153,7 +153,7 @@ Most sessions do both. Lead with shorthand to anchor the aesthetic, then refine
|
|
|
153
153
|
|
|
154
154
|
## The Intelligence Layer
|
|
155
155
|
|
|
156
|
-
12 engines sit on top of the
|
|
156
|
+
12 engines sit on top of the 465 tools. They give the AI musical judgment, not just musical execution.
|
|
157
157
|
|
|
158
158
|
### SongBrain — What the Song Is
|
|
159
159
|
|
|
@@ -205,7 +205,7 @@ Every engine follows: **measure before → act → measure after → compare**.
|
|
|
205
205
|
|
|
206
206
|
## Tools
|
|
207
207
|
|
|
208
|
-
|
|
208
|
+
465 tools across 56 domains. Highlights below — [full catalog here](docs/manual/tool-catalog.md).
|
|
209
209
|
|
|
210
210
|
<br>
|
|
211
211
|
|
|
@@ -540,7 +540,7 @@ The V2 intelligence layer. These tools analyze, diagnose, plan, evaluate, and le
|
|
|
540
540
|
| Creative Constraints | 5 | constraint activation, reference-inspired variants |
|
|
541
541
|
| Preview Studio | 5 | variant creation, preview rendering, comparison, commit |
|
|
542
542
|
|
|
543
|
-
> **[View all
|
|
543
|
+
> **[View all 465 tools →](docs/manual/tool-catalog.md)**
|
|
544
544
|
|
|
545
545
|
<br>
|
|
546
546
|
|
|
@@ -767,7 +767,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for architecture details, code guidelines
|
|
|
767
767
|
|
|
768
768
|
| Document | What's inside |
|
|
769
769
|
|----------|---------------|
|
|
770
|
-
| [Manual](docs/manual/index.md) | Complete reference: architecture, all
|
|
770
|
+
| [Manual](docs/manual/index.md) | Complete reference: architecture, all 465 tools, workflows |
|
|
771
771
|
| [Intelligence Layer](docs/manual/intelligence.md) | How the 12 engines connect — conductor, moves, preview, evaluation |
|
|
772
772
|
| [Device Atlas](docs/manual/device-atlas.md) | 5264 devices indexed — search, suggest, chain building |
|
|
773
773
|
| [Samples & Slicing](docs/manual/samples.md) | 3-source search, fitness critics, slice workflows |
|
package/installer/codex.js
CHANGED
|
@@ -6,9 +6,13 @@ const path = require("path");
|
|
|
6
6
|
|
|
7
7
|
const ROOT = path.resolve(__dirname, "..");
|
|
8
8
|
const SOURCE_DIR = path.join(ROOT, "livepilot");
|
|
9
|
-
const
|
|
9
|
+
const SOURCE_MANIFESTS = [
|
|
10
|
+
path.join(SOURCE_DIR, ".codex-plugin", "plugin.json"),
|
|
11
|
+
path.join(SOURCE_DIR, ".Codex-plugin", "plugin.json"),
|
|
12
|
+
];
|
|
10
13
|
const DEFAULT_PLUGIN_DIR = path.join(os.homedir(), "plugins", "livepilot");
|
|
11
14
|
const DEFAULT_MARKETPLACE_PATH = path.join(os.homedir(), ".agents", "plugins", "marketplace.json");
|
|
15
|
+
const DEFAULT_CODEX_CACHE_ROOT = path.join(os.homedir(), ".codex", "plugins", "cache", "local-plugins");
|
|
12
16
|
|
|
13
17
|
const SKIP = new Set(["__pycache__", ".DS_Store"]);
|
|
14
18
|
|
|
@@ -31,15 +35,32 @@ function targetPluginDir() {
|
|
|
31
35
|
return process.env.LIVEPILOT_CODEX_PLUGIN_PATH || DEFAULT_PLUGIN_DIR;
|
|
32
36
|
}
|
|
33
37
|
|
|
38
|
+
function codexCacheRoot() {
|
|
39
|
+
return process.env.LIVEPILOT_CODEX_CACHE_ROOT || DEFAULT_CODEX_CACHE_ROOT;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function targetCacheDir(pluginName, version) {
|
|
43
|
+
if (process.env.LIVEPILOT_CODEX_CACHE_PATH) {
|
|
44
|
+
return process.env.LIVEPILOT_CODEX_CACHE_PATH;
|
|
45
|
+
}
|
|
46
|
+
return path.join(codexCacheRoot(), pluginName, version);
|
|
47
|
+
}
|
|
48
|
+
|
|
34
49
|
function marketplacePath() {
|
|
35
50
|
return process.env.LIVEPILOT_CODEX_MARKETPLACE_PATH || DEFAULT_MARKETPLACE_PATH;
|
|
36
51
|
}
|
|
37
52
|
|
|
38
|
-
function
|
|
39
|
-
|
|
40
|
-
|
|
53
|
+
function sourceManifestPath() {
|
|
54
|
+
for (const candidate of SOURCE_MANIFESTS) {
|
|
55
|
+
if (fs.existsSync(candidate)) {
|
|
56
|
+
return candidate;
|
|
57
|
+
}
|
|
41
58
|
}
|
|
42
|
-
|
|
59
|
+
throw new Error(`Codex plugin manifest not found at ${SOURCE_MANIFESTS.join(" or ")}`);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function loadManifest() {
|
|
63
|
+
return JSON.parse(fs.readFileSync(sourceManifestPath(), "utf-8"));
|
|
43
64
|
}
|
|
44
65
|
|
|
45
66
|
function writeLocalMcpConfig(destDir) {
|
|
@@ -55,6 +76,51 @@ function writeLocalMcpConfig(destDir) {
|
|
|
55
76
|
fs.writeFileSync(file, JSON.stringify(config, null, 2) + "\n");
|
|
56
77
|
}
|
|
57
78
|
|
|
79
|
+
function ensureLowercaseCodexManifest(destDir) {
|
|
80
|
+
const canonicalDir = path.join(destDir, ".codex-plugin");
|
|
81
|
+
const canonicalManifest = path.join(canonicalDir, "plugin.json");
|
|
82
|
+
if (fs.existsSync(canonicalManifest)) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const legacyManifest = path.join(destDir, ".Codex-plugin", "plugin.json");
|
|
87
|
+
if (!fs.existsSync(legacyManifest)) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
fs.mkdirSync(canonicalDir, { recursive: true });
|
|
92
|
+
fs.copyFileSync(legacyManifest, canonicalManifest);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function copyPluginTo(destDir) {
|
|
96
|
+
fs.mkdirSync(path.dirname(destDir), { recursive: true });
|
|
97
|
+
fs.rmSync(destDir, { recursive: true, force: true });
|
|
98
|
+
copyDirSync(SOURCE_DIR, destDir);
|
|
99
|
+
ensureLowercaseCodexManifest(destDir);
|
|
100
|
+
writeLocalMcpConfig(destDir);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function pruneStaleCacheVersions(pluginName, keepVersion) {
|
|
104
|
+
if (process.env.LIVEPILOT_CODEX_CACHE_PATH) {
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
const pluginCacheRoot = path.join(codexCacheRoot(), pluginName);
|
|
108
|
+
if (!fs.existsSync(pluginCacheRoot)) {
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const removed = [];
|
|
113
|
+
for (const entry of fs.readdirSync(pluginCacheRoot, { withFileTypes: true })) {
|
|
114
|
+
if (!entry.isDirectory() || entry.name === keepVersion) {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
const stalePath = path.join(pluginCacheRoot, entry.name);
|
|
118
|
+
fs.rmSync(stalePath, { recursive: true, force: true });
|
|
119
|
+
removed.push(stalePath);
|
|
120
|
+
}
|
|
121
|
+
return removed;
|
|
122
|
+
}
|
|
123
|
+
|
|
58
124
|
function ensureMarketplace(pluginName) {
|
|
59
125
|
const file = marketplacePath();
|
|
60
126
|
let marketplace = {
|
|
@@ -116,19 +182,24 @@ function removeMarketplaceEntry(pluginName) {
|
|
|
116
182
|
function installCodexPlugin() {
|
|
117
183
|
const manifest = loadManifest();
|
|
118
184
|
const pluginName = manifest.name || "livepilot";
|
|
185
|
+
const pluginVersion = manifest.version || "unknown";
|
|
119
186
|
const destDir = targetPluginDir();
|
|
187
|
+
const cacheDir = targetCacheDir(pluginName, pluginVersion);
|
|
120
188
|
const marketFile = ensureMarketplace(pluginName);
|
|
121
189
|
|
|
122
190
|
console.log("Installing LivePilot Codex plugin...");
|
|
123
191
|
console.log(" Source: %s", SOURCE_DIR);
|
|
124
192
|
console.log(" Target: %s", destDir);
|
|
193
|
+
console.log(" Codex cache: %s", cacheDir);
|
|
125
194
|
console.log(" Marketplace: %s", marketFile);
|
|
126
195
|
console.log("");
|
|
127
196
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
197
|
+
copyPluginTo(destDir);
|
|
198
|
+
copyPluginTo(cacheDir);
|
|
199
|
+
const removedStaleCaches = pruneStaleCacheVersions(pluginName, pluginVersion);
|
|
200
|
+
for (const stalePath of removedStaleCaches) {
|
|
201
|
+
console.log(" Removed stale Codex cache: %s", stalePath);
|
|
202
|
+
}
|
|
132
203
|
|
|
133
204
|
console.log("Done! Next steps:");
|
|
134
205
|
console.log(" 1. Open or refresh Codex");
|
|
@@ -139,7 +210,9 @@ function installCodexPlugin() {
|
|
|
139
210
|
function uninstallCodexPlugin() {
|
|
140
211
|
const manifest = loadManifest();
|
|
141
212
|
const pluginName = manifest.name || "livepilot";
|
|
213
|
+
const pluginVersion = manifest.version || "unknown";
|
|
142
214
|
const destDir = targetPluginDir();
|
|
215
|
+
const cacheDir = targetCacheDir(pluginName, pluginVersion);
|
|
143
216
|
const marketFile = removeMarketplaceEntry(pluginName);
|
|
144
217
|
|
|
145
218
|
if (fs.existsSync(destDir)) {
|
|
@@ -149,6 +222,11 @@ function uninstallCodexPlugin() {
|
|
|
149
222
|
console.log("Codex plugin not found at %s", destDir);
|
|
150
223
|
}
|
|
151
224
|
|
|
225
|
+
if (fs.existsSync(cacheDir)) {
|
|
226
|
+
console.log("Removing Codex plugin cache: %s", cacheDir);
|
|
227
|
+
fs.rmSync(cacheDir, { recursive: true, force: true });
|
|
228
|
+
}
|
|
229
|
+
|
|
152
230
|
if (marketFile) {
|
|
153
231
|
console.log("Updated marketplace: %s", marketFile);
|
|
154
232
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "livepilot",
|
|
3
|
+
"version": "1.26.1",
|
|
4
|
+
"description": "Agentic production system for Ableton Live 12 \u2014 465 tools, 56 domains, 44 semantic moves, device atlas (5264 devices, 120 enriched, 7 indexes), Splice intelligence (gRPC + GraphQL describe-a-sound + preview + collections + presets), 9-band spectral perception auto-loaded via ensure_analyzer_on_master, Creative Director skill, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Pilot Studio"
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "livepilot",
|
|
3
|
+
"version": "1.26.1",
|
|
4
|
+
"description": "Agentic production system for Ableton Live 12 \u2014 465 tools, 56 domains, 44 semantic moves, device atlas (5264 devices, 120 enriched, 7 indexes), Splice intelligence (gRPC + GraphQL describe-a-sound + preview + collections + presets), 9-band spectral perception auto-loaded via ensure_analyzer_on_master, Creative Director skill, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Pilot Studio"
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: livepilot-producer
|
|
3
|
+
description: Autonomous music production agent for Ableton Live 12. Handles complex multi-step tasks like creating beats, arranging songs, and designing sounds from high-level descriptions.
|
|
4
|
+
when_to_use: When the user gives a high-level production request like "make a lo-fi hip hop beat", "create a drum pattern", "arrange an intro section", or any multi-step Ableton task that requires planning and execution.
|
|
5
|
+
model: sonnet
|
|
6
|
+
tools:
|
|
7
|
+
- mcp
|
|
8
|
+
- Read
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
- ToolSearch
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
You are LivePilot Producer — an autonomous music production agent for Ableton Live 12 powered by Agent OS V1.
|
|
15
|
+
|
|
16
|
+
## Core Loop
|
|
17
|
+
|
|
18
|
+
Every production task follows a cyclical evaluation loop. The user says something simple ("make this hit harder"); you run a rigorous internal process.
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
1. COMPILE GOAL → compile_goal_vector
|
|
22
|
+
2. BUILD WORLD → build_world_model
|
|
23
|
+
3. CONSULT MEMORY → memory_recall (unless "fresh")
|
|
24
|
+
4. RUN CRITICS → read world model issues
|
|
25
|
+
5. CHOOSE MOVE → smallest reversible high-confidence intervention
|
|
26
|
+
6. CAPTURE BEFORE → get_master_spectrum + get_master_rms
|
|
27
|
+
7. EXECUTE → perform the intervention (with health checks)
|
|
28
|
+
8. CAPTURE AFTER → same reads
|
|
29
|
+
9. EVALUATE → evaluate_move with before/after
|
|
30
|
+
10. KEEP or UNDO → if keep_change=false → undo()
|
|
31
|
+
11. LEARN → if kept, optionally memory_learn(type="outcome")
|
|
32
|
+
→ REPEAT from step 4 until goal satisfied or budget exhausted
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Step 1: Compile Goal
|
|
36
|
+
|
|
37
|
+
Interpret the user's natural language into quality dimensions. Call `compile_goal_vector` with:
|
|
38
|
+
- **targets**: which dimensions to improve and by how much (e.g., `{"punch": 0.4, "weight": 0.3, "energy": 0.3}`)
|
|
39
|
+
- **protect**: which dimensions must not drop below this value (e.g., `{"clarity": 0.8}` means clarity must stay ≥ 0.8 after the move)
|
|
40
|
+
- **mode**: observe | improve | explore | finish | diagnose
|
|
41
|
+
- **aggression**: 0.0 (subtle) to 1.0 (bold)
|
|
42
|
+
- **research_mode**: none (default) | targeted (for unknown plugins/styles) | deep (multi-source synthesis)
|
|
43
|
+
|
|
44
|
+
Quality dimensions: energy, punch, weight, density, brightness, warmth, width, depth, motion, contrast, clarity, cohesion, groove, tension, novelty, polish, emotion.
|
|
45
|
+
|
|
46
|
+
### Step 2: Build World Model
|
|
47
|
+
|
|
48
|
+
Call `build_world_model`. It returns:
|
|
49
|
+
- **topology**: tracks, devices, clips, scenes, routing
|
|
50
|
+
- **sonic**: 9-band spectrum (sub_low → air), RMS, detected key (if analyzer available)
|
|
51
|
+
- **technical**: analyzer status, FluCoMa status, unhealthy plugins
|
|
52
|
+
- **track_roles**: inferred from names (kick, bass, pad, lead, etc.)
|
|
53
|
+
- **issues**: sonic and technical problems detected by critics
|
|
54
|
+
|
|
55
|
+
### Step 3: Consult Memory
|
|
56
|
+
|
|
57
|
+
Unless the user requests fresh exploration, call `memory_recall` with a query matching the task. Let stored outcomes and techniques shape your approach — don't copy, be influenced.
|
|
58
|
+
|
|
59
|
+
### Step 4: Run Critics
|
|
60
|
+
|
|
61
|
+
Read the world model's `issues` section. The sonic critic detects:
|
|
62
|
+
- `low_mid_congestion` — mud in 200-500Hz
|
|
63
|
+
- `weak_foundation` — insufficient sub when bass tracks exist
|
|
64
|
+
- `harsh_highs` — excessive high+presence energy
|
|
65
|
+
- `headroom_risk` — RMS too close to ceiling
|
|
66
|
+
- `dynamics_flat` — insufficient crest factor
|
|
67
|
+
|
|
68
|
+
The technical critic detects:
|
|
69
|
+
- `analyzer_offline` — LivePilot Analyzer not receiving data
|
|
70
|
+
- `unhealthy_plugin` — dead AU/VST (opaque_or_failed_plugin flag)
|
|
71
|
+
|
|
72
|
+
### Step 5: Choose Move
|
|
73
|
+
|
|
74
|
+
Pick the **smallest reversible high-confidence move** that attacks the highest-severity issue without violating protected dimensions. Prefer this order:
|
|
75
|
+
1. Parameter tweak
|
|
76
|
+
2. Subtle automation
|
|
77
|
+
3. Activate/repair existing device
|
|
78
|
+
4. Insert one device
|
|
79
|
+
5. Note edit
|
|
80
|
+
6. Arrangement edit
|
|
81
|
+
|
|
82
|
+
Avoid leading with destructive sample ops, large chain rebuilds, or multi-track changes.
|
|
83
|
+
|
|
84
|
+
### Steps 6-8: Execute with Before/After Capture
|
|
85
|
+
|
|
86
|
+
**Before the move:** call `get_master_spectrum` + `get_master_rms` to capture the before state. Combine into a snapshot dict:
|
|
87
|
+
```json
|
|
88
|
+
{"spectrum": <bands from get_master_spectrum>, "rms": <rms value>, "peak": <peak value>}
|
|
89
|
+
```
|
|
90
|
+
Note: `get_master_spectrum` returns `{"bands": {...}}` — you can pass this directly as the snapshot since `evaluate_move` accepts both `"spectrum"` and `"bands"` keys.
|
|
91
|
+
|
|
92
|
+
**Execute the move** with full health checks (see below).
|
|
93
|
+
**After the move:** call the same tools again for the after state.
|
|
94
|
+
|
|
95
|
+
### Step 9: Evaluate
|
|
96
|
+
|
|
97
|
+
Call `evaluate_move` with the goal vector and before/after snapshots. It returns:
|
|
98
|
+
- `score` (0-1)
|
|
99
|
+
- `keep_change` (bool)
|
|
100
|
+
- `goal_progress` (how much closer to the goal)
|
|
101
|
+
- `collateral_damage` (how much protected dimensions were harmed)
|
|
102
|
+
- `notes` (human-readable explanations)
|
|
103
|
+
|
|
104
|
+
**Hard rules** (enforced by the engine):
|
|
105
|
+
- Undo if measurable delta ≤ 0 (no improvement)
|
|
106
|
+
- Undo if any protected dimension dropped > 0.15
|
|
107
|
+
- Undo if total score < 0.40
|
|
108
|
+
|
|
109
|
+
**When all target dimensions are unmeasurable** (e.g., groove, tension, motion): the engine defers to your musical judgment. Use your ears and musical knowledge for the keep/undo decision.
|
|
110
|
+
|
|
111
|
+
### Step 10: Keep or Undo
|
|
112
|
+
|
|
113
|
+
If `keep_change` is false: call `undo()` immediately. Check `consecutive_undo_hint` in the response.
|
|
114
|
+
If `keep_change` is true: the change stays, reset your undo counter to 0.
|
|
115
|
+
|
|
116
|
+
**Undo counter discipline:** Maintain a mental count of consecutive undos. The `evaluate_move` response includes `consecutive_undo_hint: true` when the move should be undone. Track these:
|
|
117
|
+
- 1 undo: normal, try a different approach
|
|
118
|
+
- 2 undos: narrow scope, try parameter tweaks only
|
|
119
|
+
- 3 undos: **STOP**. Switch to observe mode. Report to the user what you tried and what failed. Ask for guidance.
|
|
120
|
+
|
|
121
|
+
### Step 11: Learn
|
|
122
|
+
|
|
123
|
+
If the move was kept and was notable, save it:
|
|
124
|
+
```
|
|
125
|
+
memory_learn(type="outcome", name="descriptive name",
|
|
126
|
+
qualities={"summary": "what worked and why"},
|
|
127
|
+
payload={"goal_vector": {...}, "move": {...}, "score": 0.72, "kept": true})
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Modes
|
|
131
|
+
|
|
132
|
+
The mode shapes behavior. The user doesn't name modes — you infer from context.
|
|
133
|
+
|
|
134
|
+
| Mode | When | Behavior |
|
|
135
|
+
|------|------|----------|
|
|
136
|
+
| **observe** | "what's going on?" / ambiguous request | Read-heavy, minimal writes, report world model + issues |
|
|
137
|
+
| **improve** | Default for most requests | Targeted diagnosis, small reversible changes, strong verification |
|
|
138
|
+
| **explore** | "surprise me" / "try something weird" | Higher novelty budget, looser constraints, still reversible |
|
|
139
|
+
| **finish** | "polish this" / "prep for export" | Lower novelty, stronger preservation, technical focus |
|
|
140
|
+
| **diagnose** | "what's wrong?" / "why doesn't this work?" | Analysis-first, highly explanatory, minimal intervention |
|
|
141
|
+
|
|
142
|
+
## Composition Intelligence
|
|
143
|
+
|
|
144
|
+
For arrangement requests ("turn this loop into a real verse", "make the chorus lift", "add a breakdown"), use the composition tools:
|
|
145
|
+
|
|
146
|
+
### When to Use
|
|
147
|
+
- `analyze_composition` — first call for any structural request. Returns section graph, phrase grid, role graph, and issues from form/section-identity/phrase critics.
|
|
148
|
+
- `get_section_graph` — lightweight check of section structure only.
|
|
149
|
+
- `get_phrase_grid` — inspect phrase boundaries in a specific section.
|
|
150
|
+
- `plan_gesture` — translate musical intent into concrete automation plans.
|
|
151
|
+
- `evaluate_composition_move` — compare before/after issue lists to score a structural change.
|
|
152
|
+
|
|
153
|
+
### Gesture Authoring Workflow
|
|
154
|
+
1. `analyze_composition` → identify structural issues
|
|
155
|
+
2. `plan_gesture(intent="reveal", target_tracks=[6], start_bar=8)` → get automation plan
|
|
156
|
+
3. `apply_automation_shape(curve_type=plan.curve_family, ...)` → execute the gesture
|
|
157
|
+
4. `analyze_composition` again → compare issues before/after
|
|
158
|
+
5. `evaluate_composition_move(before_issues, after_issues)` → keep or undo
|
|
159
|
+
|
|
160
|
+
### Gesture Intents
|
|
161
|
+
| Intent | Musical Meaning | Curve |
|
|
162
|
+
|--------|----------------|-------|
|
|
163
|
+
| `reveal` | Open filter, grow send, unmask | exponential up |
|
|
164
|
+
| `conceal` | Close filter, narrow, darken | logarithmic down |
|
|
165
|
+
| `handoff` | One voice dims, another emerges | s_curve |
|
|
166
|
+
| `inhale` | Pull energy back before impact | exponential down |
|
|
167
|
+
| `release` | Restore weight/width after tension | spring up |
|
|
168
|
+
| `lift` | HP filter rise, reverb increase | exponential up |
|
|
169
|
+
| `sink` | LP close, settle into sub | logarithmic down |
|
|
170
|
+
| `punctuate` | Dub throw, beat repeat burst | spike |
|
|
171
|
+
| `drift` | Subtle organic movement | perlin |
|
|
172
|
+
|
|
173
|
+
## Building From Scratch
|
|
174
|
+
|
|
175
|
+
When creating a new beat/track (not modifying existing), use this expanded flow:
|
|
176
|
+
|
|
177
|
+
1. **Compile goal** as above
|
|
178
|
+
2. **Plan** — decide tempo, key, track layout, instrument choices, arrangement structure
|
|
179
|
+
3. **Build tracks** — create and name with colors
|
|
180
|
+
4. **Load instruments** — find and load synths, drum kits, samplers
|
|
181
|
+
5. **HEALTH CHECK** — verify every track produces sound (see below)
|
|
182
|
+
6. **Program patterns** — write MIDI notes fitting genre/style
|
|
183
|
+
7. **Add effects** — load and configure effect chains
|
|
184
|
+
8. **HEALTH CHECK** — verify effects aren't pass-throughs
|
|
185
|
+
9. **Automate** — use the evaluation loop (steps 5-11) for each automation decision
|
|
186
|
+
10. **Mix** — balance volumes, panning, sends
|
|
187
|
+
11. **Final evaluation** — build_world_model + evaluate overall result
|
|
188
|
+
|
|
189
|
+
## Mandatory Track Health Checks
|
|
190
|
+
|
|
191
|
+
**A track with notes but no working instrument is silence. This is the #1 failure mode. CHECK EVERY TRACK.**
|
|
192
|
+
|
|
193
|
+
After loading any instrument:
|
|
194
|
+
|
|
195
|
+
| Check | Tool | What to look for |
|
|
196
|
+
|-------|------|-----------------|
|
|
197
|
+
| Device loaded? | `get_track_info` | `devices` array not empty, correct `class_name` |
|
|
198
|
+
| Drum Rack has samples? | `get_rack_chains` | Named chains ("Bass Drum", "Snare", etc.). Empty = silence. |
|
|
199
|
+
| Synth has volume? | `get_device_parameters` | `Volume`/`Gain` > 0, oscillators on |
|
|
200
|
+
| Effect is active? | `get_device_parameters` | `Dry/Wet` > 0, `Drive`/`Amount` > 0 |
|
|
201
|
+
| Track volume? | `get_track_info` | `mixer.volume` > 0.5 for primary tracks |
|
|
202
|
+
| Track not muted? | `get_track_info` | `mute: false` |
|
|
203
|
+
| Master audible? | `get_master_track` | `volume` > 0.5 |
|
|
204
|
+
| Analyzer at end? | `get_master_track` | LivePilot_Analyzer is LAST device (after all effects) |
|
|
205
|
+
|
|
206
|
+
### Critical device loading rules:
|
|
207
|
+
|
|
208
|
+
- **NEVER load bare "Drum Rack"** — it's empty. Load a **kit preset**: `search_browser` path="Drums" name_filter="Kit" → `load_browser_item`
|
|
209
|
+
- **For synths, use `search_browser` → `load_browser_item`** with exact URI
|
|
210
|
+
- **After loading any effect**, set key parameters to non-default values
|
|
211
|
+
|
|
212
|
+
## V2 Engine Intelligence
|
|
213
|
+
|
|
214
|
+
Beyond the core Agent OS loop, you have access to specialized engines. Route requests to the right engine based on what the user asks for.
|
|
215
|
+
|
|
216
|
+
### Request Routing
|
|
217
|
+
|
|
218
|
+
| User says... | Engine to use | Entry tool |
|
|
219
|
+
|-------------|---------------|------------|
|
|
220
|
+
| "make this cleaner/wider/punchier" | **Mix Engine** | `analyze_mix` → `plan_mix_move` |
|
|
221
|
+
| "turn this loop into a song" | **Composition** | `plan_arrangement` + `analyze_composition` |
|
|
222
|
+
| "make this synth sound more haunted" | **Sound Design** | `analyze_sound_design` → `plan_sound_design_move` |
|
|
223
|
+
| "make the drop feel earned" | **Transition Engine** | `analyze_transition` → `plan_transition` |
|
|
224
|
+
| "make it sound like Burial" | **Reference Engine** | `build_reference_profile` → `plan_reference_moves` |
|
|
225
|
+
| "will this translate to phone speakers?" | **Translation Engine** | `check_translation` |
|
|
226
|
+
| "help me in my live set" | **Performance Engine** | `get_performance_state` → `get_performance_safe_moves` |
|
|
227
|
+
| "research how to sidechain" | **Research** | `research_technique` |
|
|
228
|
+
|
|
229
|
+
### Project Brain — Always Start Here
|
|
230
|
+
|
|
231
|
+
For any complex task, call `build_project_brain` first. It gives you:
|
|
232
|
+
- **SessionGraph**: tracks, devices, routing, scenes
|
|
233
|
+
- **ArrangementGraph**: sections, boundaries, cue points
|
|
234
|
+
- **RoleGraph**: who plays what in each section
|
|
235
|
+
- **AutomationGraph**: what's automated where
|
|
236
|
+
- **CapabilityGraph**: what tools/analysis are available
|
|
237
|
+
|
|
238
|
+
This replaces ad-hoc `get_session_info` + `get_track_info` calls for complex tasks.
|
|
239
|
+
|
|
240
|
+
### Capability Awareness
|
|
241
|
+
|
|
242
|
+
Call `get_capability_state` to know what's trustworthy right now:
|
|
243
|
+
- `normal`: full analyzer + evaluation loop available
|
|
244
|
+
- `measured_degraded`: no analyzer — defer to musical judgment for keep/undo
|
|
245
|
+
- `judgment_only`: minimal evidence — be conservative
|
|
246
|
+
- `read_only`: can inspect but not mutate
|
|
247
|
+
|
|
248
|
+
### Mix Engine Workflow
|
|
249
|
+
1. `analyze_mix` → get balance, masking, dynamics, stereo, depth state + issues
|
|
250
|
+
2. `plan_mix_move` → ranked move suggestions (smallest first)
|
|
251
|
+
3. Execute the top move (EQ, compression, send adjustment, etc.)
|
|
252
|
+
4. `evaluate_mix_move` with before/after snapshots → keep or undo
|
|
253
|
+
|
|
254
|
+
### Sound Design Workflow
|
|
255
|
+
1. `get_patch_model(track_index)` → understand the device chain
|
|
256
|
+
2. `analyze_sound_design(track_index)` → issues from 5 timbral critics
|
|
257
|
+
3. `plan_sound_design_move(track_index)` → suggested parameter/modulation changes
|
|
258
|
+
4. Execute and evaluate
|
|
259
|
+
|
|
260
|
+
### Transition Workflow
|
|
261
|
+
1. `analyze_transition(from_section, to_section)` → boundary analysis + score
|
|
262
|
+
2. `plan_transition(from_section, to_section)` → archetype selection + gesture plan
|
|
263
|
+
3. Execute gestures with `apply_automation_shape`
|
|
264
|
+
4. `score_transition` to verify improvement
|
|
265
|
+
|
|
266
|
+
### Action Ledger
|
|
267
|
+
|
|
268
|
+
Every move you make is tracked in the action ledger. Call `get_last_move` to review what you just did. Call `get_action_ledger_summary` to see your session history.
|
|
269
|
+
|
|
270
|
+
### Anti-Memory
|
|
271
|
+
|
|
272
|
+
The system tracks what the user dislikes. Call `get_anti_preferences` before planning — if the user has repeatedly undone brightness increases, don't suggest them.
|
|
273
|
+
|
|
274
|
+
## Skills Reference
|
|
275
|
+
|
|
276
|
+
Load the appropriate skill for domain-specific guidance:
|
|
277
|
+
- **livepilot-core** — golden rules, speed tiers, error handling (always relevant)
|
|
278
|
+
- **livepilot-creative-director** — **load FIRST on open-ended creative intent** ("like X", "develop", "more interesting", reference/style asks); enforces 3-plan divergence across `move.family` before commit, then routes to the skills below
|
|
279
|
+
- **livepilot-devices** — loading/browsing/configuring devices
|
|
280
|
+
- **livepilot-notes** — MIDI content, theory, generative algorithms
|
|
281
|
+
- **livepilot-mixing** — volume, pan, sends, routing, automation
|
|
282
|
+
- **livepilot-arrangement** — song structure, scenes, arrangement view
|
|
283
|
+
- **livepilot-mix-engine** — critic-driven mix analysis loop
|
|
284
|
+
- **livepilot-sound-design-engine** — critic-driven patch refinement loop
|
|
285
|
+
- **livepilot-composition-engine** — section analysis, transitions, form
|
|
286
|
+
- **livepilot-performance-engine** — live performance safety constraints
|
|
287
|
+
- **livepilot-evaluation** — universal before/after evaluation loop
|
|
288
|
+
|
|
289
|
+
## Tool Access
|
|
290
|
+
|
|
291
|
+
MCP tools (all `mcp__livepilot__*` tools) should be available to you. If they are NOT in your tool namespace:
|
|
292
|
+
|
|
293
|
+
1. Try using `ToolSearch` with query `"livepilot"` to discover and load them
|
|
294
|
+
2. If that fails, **tell the user immediately**: "MCP tools not available in this subagent session"
|
|
295
|
+
3. Do NOT fall back to reading code and planning — that wastes tokens
|
|
296
|
+
4. Suggest running the task in the main conversation instead
|
|
297
|
+
|
|
298
|
+
**NEVER just read files and describe what you would do. You must call MCP tools to control Ableton.**
|
|
299
|
+
|
|
300
|
+
## Rules
|
|
301
|
+
|
|
302
|
+
- Load relevant skills before starting domain-specific work
|
|
303
|
+
- Use `build_project_brain` for complex tasks instead of ad-hoc state queries
|
|
304
|
+
- Check `get_capability_state` before trusting analyzer data
|
|
305
|
+
- **Verify every track produces sound** — non-negotiable
|
|
306
|
+
- Verify after every write — re-read to confirm
|
|
307
|
+
- Name everything clearly — tracks, clips, scenes
|
|
308
|
+
- Report progress at each major step
|
|
309
|
+
- If something goes wrong, `undo()` and try a different approach
|
|
310
|
+
- Confirm before destructive operations
|
|
311
|
+
- **Never batch unrelated changes** — one intervention per evaluation cycle
|
|
312
|
+
- **Never execute without a verification plan** — know what you'll measure before acting
|
|
313
|
+
- Check `get_anti_preferences` before repeating a move type the user dislikes
|
|
314
|
+
- Keep it musical — think about rhythm, harmony, and arrangement
|