livepilot 1.26.0 → 1.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -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 +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/composer/develop/apply.py +1 -1
- package/mcp_server/composer/full/apply.py +32 -6
- 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 +11 -7
- 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,455 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: livepilot-creative-director
|
|
3
|
+
description: >
|
|
4
|
+
Use when the user makes an open-ended creative production request —
|
|
5
|
+
"make it feel like X", "sound like X", "develop this", "mutate",
|
|
6
|
+
"more interesting", "less generic", "take it somewhere", structure
|
|
7
|
+
decisions without exact specs, or any reference/style ask. Also use
|
|
8
|
+
when route_request returns workflow_mode="creative_search". NOT for
|
|
9
|
+
exact-parameter setting, quantize/mute ops, verification-only turns,
|
|
10
|
+
mixing to explicit targets, or performance-safe contexts.
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Creative Director — Divergence-First Routing
|
|
14
|
+
|
|
15
|
+
Routes creative intent through MANDATORY divergence before any commit.
|
|
16
|
+
Three plans with distinct `move.family` are the minimum output. Critics
|
|
17
|
+
defer until after selection. No new tools — this skill enforces a
|
|
18
|
+
discipline on top of existing `experiment`, `wonder_mode`, `preview_studio`,
|
|
19
|
+
`semantic_moves`, `evaluation`, and `memory` machinery.
|
|
20
|
+
|
|
21
|
+
## Atlas-first reflex (v1.23.x+, MANDATORY before any creative move)
|
|
22
|
+
|
|
23
|
+
Before producing ANY creative response, query the user's atlas overlays. The corpus contains 337 entries across 3 namespaces, plus 3,917 parameter-level JSON sidecars — far richer than anything inferable from training data alone.
|
|
24
|
+
|
|
25
|
+
**Query order:**
|
|
26
|
+
|
|
27
|
+
1. **`extension_atlas_search(namespace="packs", query=<intent>)`** — pack identity, signature workflows, hidden gems, anti-patterns, notable presets with macro deep-data, demo projects
|
|
28
|
+
2. **`extension_atlas_search(namespace="packs", query=<intent>, entity_type="cross_pack_workflow")`** — multi-pack signature recipes (15 entries: dub-techno spectral drone bed, BoC decayed pad, Mica Levi orchestral dread, etc.)
|
|
29
|
+
3. **`extension_atlas_search(namespace="m4l-devices", query=<sonic descriptor>)`** — M4L instrument/effect/midi-effect device catalog (155 entries)
|
|
30
|
+
4. **`atlas_search(...)`** — bundled atlas (Core Library, fallback)
|
|
31
|
+
|
|
32
|
+
**Multi-grain traversal:**
|
|
33
|
+
|
|
34
|
+
When an aesthetic-level query lands a pack-level result, AUTO-DRILL: pack → its `notable_presets` → those preset macro states → load via `load_browser_item`. Don't stop at "I found a relevant pack" — drill to the actual preset/parameter level the user can immediately use.
|
|
35
|
+
|
|
36
|
+
```python
|
|
37
|
+
# Example — agent received "make it sound like Henke / Monolake dub-techno"
|
|
38
|
+
hit = extension_atlas_search(namespace="packs", query="henke monolake dub-techno spectral")
|
|
39
|
+
# → pitchloop89 + dub_techno_spectral_drone_bed workflow + granulator_iii
|
|
40
|
+
|
|
41
|
+
workflow = extension_atlas_get("packs", "dub_techno_spectral_drone_bed")
|
|
42
|
+
# → reveals signal_flow: HDG → PitchLoop89 cross-feedback → Convolution Reverb
|
|
43
|
+
|
|
44
|
+
drone_lab = extension_atlas_get("packs", "drone_lab")
|
|
45
|
+
# → notable_presets reveals Razor Wire Drone with macros Filter Control=108, Movement=53...
|
|
46
|
+
|
|
47
|
+
# Now propose the move with concrete preset names + macro values, not vague descriptions
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**When the user mentions a producer or pack by name:**
|
|
51
|
+
|
|
52
|
+
- "BoC sublime pad" → atlas hit: `boc_decayed_pad` cross-pack-workflow + `inspired_by_nature` pack
|
|
53
|
+
- "Henke spectral chain" → atlas hit: `pitchloop89` + `granulator_iii` + 2 Henke cross-pack workflows
|
|
54
|
+
- "Mica Levi orchestral dread" → atlas hit: `mica_levi_orchestral_dread` workflow + the orchestral suite packs
|
|
55
|
+
- "Drone Lab" → atlas hit: `drone_lab` pack + 4 Drone Lab demo_project entries
|
|
56
|
+
|
|
57
|
+
The atlas knows the user's installed library at parameter depth. **Producer-anchor queries land specific moves, not vague descriptions.**
|
|
58
|
+
|
|
59
|
+
**Anti-pattern surfacing:**
|
|
60
|
+
|
|
61
|
+
Every pack entry has an `anti_patterns` body field listing "don't reach for this when X." Surface the relevant anti-pattern when proposing a move so the user knows the move's domain. (E.g. "Drone Lab is sustain-only — don't use for percussive content.")
|
|
62
|
+
|
|
63
|
+
**For deliberately rule-breaking creative requests** ("eclectic", "ignore the limits", "weird combo", "mix incompatible aesthetics"): stay in this skill and enter **Eclectic Mode**. Anti-patterns become prompt tension rather than guardrails: preserve hard safety rules and protected user constraints, but deliberately pair one normally-avoided element with one identity-preserving element. Do not route to a private or missing skill.
|
|
64
|
+
|
|
65
|
+
## Why This Exists
|
|
66
|
+
|
|
67
|
+
The agent repeats patterns when divergence is optional and convergence
|
|
68
|
+
is default. This skill inverts the defaults for creative intent:
|
|
69
|
+
|
|
70
|
+
- Wonder / experiment branching becomes REQUIRED, not rescue-only
|
|
71
|
+
- `get_anti_preferences`, `get_action_ledger_summary(limit=10)`, and `get_last_move` are READ before generating
|
|
72
|
+
- Three plans must differ by `move.family` (not by parameter values)
|
|
73
|
+
- Mix / sound-design critics wait until AFTER selection
|
|
74
|
+
- Concept packets (`artist-vocabularies.md` / `genre-vocabularies.md`)
|
|
75
|
+
are consulted when a reference is named
|
|
76
|
+
|
|
77
|
+
## When to Trigger
|
|
78
|
+
|
|
79
|
+
Creative intent symptoms:
|
|
80
|
+
|
|
81
|
+
- Reference / style asks: "like Villalobos", "Basic Channel feel",
|
|
82
|
+
"make it more dub-techno", "Dilla swing"
|
|
83
|
+
- Transformation asks: "develop", "mutate", "evolve", "take it somewhere",
|
|
84
|
+
"surprise me", "make it magical"
|
|
85
|
+
- Quality asks without parameters: "more interesting", "less generic",
|
|
86
|
+
"needs more character", "feels flat"
|
|
87
|
+
- Structure asks without specs: "add a breakdown", "needs a bridge",
|
|
88
|
+
"make the arrangement breathe"
|
|
89
|
+
- Open questions: "what would you do?", "any ideas?", "I don't know what I want"
|
|
90
|
+
- Routing: `route_request` returns `workflow_mode="creative_search"`
|
|
91
|
+
|
|
92
|
+
## When NOT to Trigger
|
|
93
|
+
|
|
94
|
+
- Exact parameter ops: "set track 3 volume to -6 dB", "pan to +0.25"
|
|
95
|
+
- Narrow deterministic edits: "quantize this clip", "mute track 2",
|
|
96
|
+
"transpose up an octave"
|
|
97
|
+
- Pure verification / diagnostics: "what's loaded on track 4?",
|
|
98
|
+
"analyze my mix"
|
|
99
|
+
- Mixing to explicit targets: "hit -14 LUFS integrated",
|
|
100
|
+
"make the kick peak at -8 dB"
|
|
101
|
+
- Performance-safe mode (unless user explicitly overrides)
|
|
102
|
+
|
|
103
|
+
Decision rule: **"Is there exactly one correct answer?"** Yes → bypass
|
|
104
|
+
this skill. No → divergence path.
|
|
105
|
+
|
|
106
|
+
## The Contract
|
|
107
|
+
|
|
108
|
+
When triggered, these phases are REQUIRED in order. Skip none.
|
|
109
|
+
|
|
110
|
+
### Phase 1 — Ground
|
|
111
|
+
|
|
112
|
+
Read in parallel (all are fast). All of these are REQUIRED, not
|
|
113
|
+
advisory — skipping them is how pattern-repetition survives:
|
|
114
|
+
|
|
115
|
+
- **`ensure_analyzer_on_master` (v1.20.3)** — idempotent pre-flight. Call this FIRST (before or alongside `get_session_info`), every turn, whether the project looks empty or not. The tool short-circuits when the analyzer is already loaded, so it's free to call repeatedly. Skipping it is how the v1.20.1 live-test campaign produced basic mixes — the analyzer-gated moves (`tighten_low_end`, `sculpt_midrange`, `balance_stereo_image`, etc.) degrade silently when there's no master spectrum to read. If the tool returns `install_required`, call `install_m4l_device(source_path="<repo>/m4l_device/LivePilot_Analyzer.amxd")` and retry. If it returns `warning: "not LAST on master"`, surface that to the user — the invariant is theirs to repair in Ableton's GUI.
|
|
116
|
+
- `get_session_info` · `get_capability_state`
|
|
117
|
+
- `memory_recall` (taste + recent context)
|
|
118
|
+
- `get_anti_preferences` — what the user has rejected before (HARD filter)
|
|
119
|
+
- `get_action_ledger_summary(limit=10)` — recent committed moves (repeat detection, see `references/anti-repetition-rules.md` for the recency threshold table). **v1.20 correction**: previous docs pointed at `memory_list`, which actually reads the persistent technique library (opt-in `memory_learn` writes) — a DIFFERENT store. The action ledger is the authoritative source; `apply_semantic_move` in explore mode populates it automatically.
|
|
120
|
+
- `get_last_move` — the single most recent committed move; populate the brief's `last_move_target` field so Phase 3 cannot repeat it
|
|
121
|
+
- `get_project_brain_summary` (or `build_project_brain` if absent) — track identity, accepted novelty band
|
|
122
|
+
- `explain_song_identity` when the project has one
|
|
123
|
+
- `detect_stuckness` — cheap; its confidence drives escalation decisions (see §Anti-Repetition Protocol below)
|
|
124
|
+
- **Concept packet load (HARD filter when present):** if the user named an artist or genre, or if `project_brain` has a genre identity, retrieve the structured YAML packet from `livepilot-core/references/concepts/artists/<slug>.yaml` or `livepilot-core/references/concepts/genres/<slug>.yaml`. Fall back to the narrative .md entry only if no matching YAML exists. The packet's `avoid` list is a HARD filter on Phase 3 candidates. The packet's `reach_for` lists seed the candidate device pool. The packet's `key_techniques` list resolves to atlas `signature_techniques` or `sample-techniques.md` / `sound-design-deep.md` entries. If NO reference is named and `project_brain` has no genre identity, skip packet loading — do not infer. See `livepilot-core/references/concepts/_schema.md` for the full packet structure and loading rules.
|
|
125
|
+
|
|
126
|
+
- **Hybrid references — call `compile_hybrid_brief` (v1.19+).** When the user names TWO OR MORE references (e.g., "Basic Channel meets Dilla swing", "Villalobos but sparse like Gas", "Madlib chop with Photek precision"), DO NOT try to merge the packets via prose reasoning. Call `compile_hybrid_brief(packet_ids=["basic-channel", "j-dilla"])` to get a merged brief that applies the explicit UNION / INTERSECTION / MAX / weighted-average rules documented in `references/hybrid-compilation.md`. The merged brief's `avoid` list is the HARD filter (superset of both sources). Check the returned `warnings` list — a non-empty entry means the packets had an unresolvable conflict (e.g., disjoint tempo ranges) that must be surfaced to the user, not silently averaged away. If the returned brief lands in your Phase 2 brief, cite both source packets in the `identity` line and carry any `warnings` into an "ambiguity" sub-line.
|
|
127
|
+
|
|
128
|
+
### Phase 2 — Compile the Creative Brief
|
|
129
|
+
|
|
130
|
+
**Timing:** after Phase 1 parallel reads complete, before any Phase 3
|
|
131
|
+
tool call. The brief appears ONCE per creative turn, inline in the
|
|
132
|
+
assistant message, at the top of the response body.
|
|
133
|
+
|
|
134
|
+
Emit an inline YAML block (not a tool call) with: identity, reference
|
|
135
|
+
anchors, protected qualities, anti-patterns, novelty budget, target
|
|
136
|
+
dimensions, `last_move_target` (from Phase 1 `get_last_move`),
|
|
137
|
+
locked dimensions, recommended skill chain.
|
|
138
|
+
|
|
139
|
+
**On `locked_dimensions` when user is silent:** the DEFAULT is to
|
|
140
|
+
leave `locked_dimensions: []` (nothing locked). Silence = permission
|
|
141
|
+
for rhythmic / timbral / spatial.
|
|
142
|
+
|
|
143
|
+
For **structural** specifically (section-level arrangement changes —
|
|
144
|
+
add/remove/reshape sections): silence = permission **with disclosure
|
|
145
|
+
conditional on the plan set**. The rule is:
|
|
146
|
+
|
|
147
|
+
- If the Phase 3 plan set **includes** a plan with dominant dimension
|
|
148
|
+
`structural` → flag the intent in the brief's `identity` line so the
|
|
149
|
+
user sees the structural change is in scope before preview.
|
|
150
|
+
- If the Phase 3 plan set **does not include** a structural plan → no
|
|
151
|
+
disclosure needed. Adding one when nothing structural is happening
|
|
152
|
+
is ceremonial noise that trains the user to ignore disclosures.
|
|
153
|
+
|
|
154
|
+
In practice: compile Phase 3 first, then decide whether the identity
|
|
155
|
+
line needs the disclosure. Structural changes are hard to reverse,
|
|
156
|
+
which is why disclosure exists — but only when they're actually going
|
|
157
|
+
to happen.
|
|
158
|
+
|
|
159
|
+
See `references/creative-brief-template.md` for the schema and filled
|
|
160
|
+
examples.
|
|
161
|
+
|
|
162
|
+
### Phase 3 — Generate three plans with distinct `move.family`
|
|
163
|
+
|
|
164
|
+
The SEVEN canonical families (from `semantic_moves/` + `sample_engine/moves.py`):
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
mix · arrangement · transition · sound_design · performance · device_creation · sample
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Each plan's dominant move MUST come from a different family. Two plans
|
|
171
|
+
in the same family is fabricated distinctness — see Honesty Rule below.
|
|
172
|
+
|
|
173
|
+
The `sample` family lives in `mcp_server/sample_engine/moves.py` (not
|
|
174
|
+
`semantic_moves/`) but registers into the same move registry.
|
|
175
|
+
`list_semantic_moves(domain="sample")` enumerates: `sample_chop_rhythm`,
|
|
176
|
+
`sample_texture_layer`, `sample_vocal_ghost`, `sample_break_layer`,
|
|
177
|
+
`sample_resample_destroy`, `sample_one_shot_accent`.
|
|
178
|
+
|
|
179
|
+
**Family vs. dimension.** Families are code-level (seven values from the
|
|
180
|
+
registry). Dimensions are musical (four values: structural / rhythmic /
|
|
181
|
+
timbral / spatial). A plan has exactly one dominant family AND one
|
|
182
|
+
dominant dimension — they are orthogonal. A rhythmic plan's family is
|
|
183
|
+
typically `arrangement` (clip-pattern edit) or `sound_design` (per-hit
|
|
184
|
+
feel); tag the seed with `dimension_hint: "rhythmic"` so the dimension
|
|
185
|
+
is explicit. See `references/move-family-diversity-rule.md` §"Family
|
|
186
|
+
vs. dimension" for the full axis separation.
|
|
187
|
+
|
|
188
|
+
Use `create_experiment(seeds=[...])` when plans have clear compiled
|
|
189
|
+
steps. Use `enter_wonder_mode` when the problem is diffuse. Use
|
|
190
|
+
`propose_composer_branches` for prompt-driven ideation.
|
|
191
|
+
|
|
192
|
+
See `references/move-family-diversity-rule.md` for edge cases (fewer
|
|
193
|
+
than 3 plausible families, user pre-locked a dimension).
|
|
194
|
+
|
|
195
|
+
### Phase 4 — Cover the four dimensions
|
|
196
|
+
|
|
197
|
+
A creative pass should distribute the three plans across structural +
|
|
198
|
+
rhythmic + timbral + spatial. See `references/the-four-move-rule.md`
|
|
199
|
+
for the family-to-dimension map.
|
|
200
|
+
|
|
201
|
+
If the user pre-locked a dimension ("don't touch the arrangement"),
|
|
202
|
+
drop that dimension and widen coverage across the remaining three.
|
|
203
|
+
|
|
204
|
+
### Phase 5 — Preview or rank
|
|
205
|
+
|
|
206
|
+
Audible → `create_preview_set` + `render_preview_variant` for each plan,
|
|
207
|
+
then `compare_preview_variants`.
|
|
208
|
+
|
|
209
|
+
Non-audible or fast → `rank_by_taste_and_identity`.
|
|
210
|
+
|
|
211
|
+
Never silently skip preview / ranking. Either run it or document why.
|
|
212
|
+
|
|
213
|
+
### Phase 6 — Select and execute
|
|
214
|
+
|
|
215
|
+
User picks, OR taste rank + identity fit pick. Route execution through
|
|
216
|
+
the right domain / engine skill — DO NOT execute arrangement / sound-design
|
|
217
|
+
changes directly from this skill.
|
|
218
|
+
|
|
219
|
+
- Structural changes → `livepilot-arrangement`
|
|
220
|
+
- Timbral changes → `livepilot-sound-design-engine`
|
|
221
|
+
- Rhythmic changes → `livepilot-notes`
|
|
222
|
+
- Harmonic changes → `livepilot-composition-engine`
|
|
223
|
+
|
|
224
|
+
**Default execution surface (v1.20+): `apply_semantic_move` or
|
|
225
|
+
`commit_experiment`.** `apply_semantic_move` in explore mode
|
|
226
|
+
populates the action ledger automatically — no manual
|
|
227
|
+
`add_session_memory(move_executed)` required. Anti-repetition
|
|
228
|
+
(Phase 3) reads the ledger via `get_last_move` and
|
|
229
|
+
`get_action_ledger_summary`; as long as the dispatched plan used
|
|
230
|
+
`apply_semantic_move` or `commit_experiment`, the family/target
|
|
231
|
+
signature is captured for the next turn's recency check.
|
|
232
|
+
|
|
233
|
+
Pick the right one:
|
|
234
|
+
|
|
235
|
+
- `apply_semantic_move(move_id, mode, args)` — when a single semantic
|
|
236
|
+
move matches the plan. `args` carries the user's seed targets
|
|
237
|
+
(return_track_index, device_chain, notes, etc. — see
|
|
238
|
+
`references/phase-6-execution.md` for each move's contract).
|
|
239
|
+
- `commit_experiment(winner)` — when divergence produced multiple
|
|
240
|
+
candidates and the user / taste-ranker picked one.
|
|
241
|
+
|
|
242
|
+
**v1.20 Phase 6 decision table.** Look up the pattern, use the listed
|
|
243
|
+
move. "ESCAPE HATCH" means no semantic move yet covers this pattern —
|
|
244
|
+
drop to raw tools under the policy below.
|
|
245
|
+
|
|
246
|
+
| Pattern | Move | Notes |
|
|
247
|
+
|---|---|---|
|
|
248
|
+
| Load device on track | `find_and_load_device` + `add_*_device_*` family | Pre-v1.20, unchanged |
|
|
249
|
+
| Load device chain on a RETURN | `build_send_chain` | NEW — v1.20 |
|
|
250
|
+
| Set multiple params on a device | `configure_device` | NEW — replaces batch `set_device_parameter` |
|
|
251
|
+
| Delete a device (with audit reason) | `remove_device` | NEW — reason auto-logged to session memory |
|
|
252
|
+
| Load a chord-source MIDI clip | `load_chord_source` | NEW — creates + names + voices in one move |
|
|
253
|
+
| Add one pad to a Drum Rack | `create_drum_rack_pad` | NEW — Dilla-style kit building |
|
|
254
|
+
| Set send levels across tracks | `configure_send_architecture` | NEW — one move, N sends |
|
|
255
|
+
| Rewire track output routing | `set_track_routing` | NEW — e.g., "Sends Only" bus |
|
|
256
|
+
| Configure a groove on clips | `configure_groove` | NEW — assign + tune timing_amount |
|
|
257
|
+
| Set scene metadata (name/color/tempo) | `set_scene_metadata` | NEW — conditional per-field |
|
|
258
|
+
| Rename / color a track | `set_track_metadata` | NEW — bundled rename + color |
|
|
259
|
+
| Any other pattern | **ESCAPE HATCH (see policy below)** | v1.21+ closes these as patterns accumulate |
|
|
260
|
+
|
|
261
|
+
Full contract (seed_args shape, emitted step sequence, verification
|
|
262
|
+
reads) for every NEW move: `references/phase-6-execution.md`.
|
|
263
|
+
|
|
264
|
+
**Affordance lookup:** before executing any plan that LOADS a device,
|
|
265
|
+
check if the device has an affordance YAML in
|
|
266
|
+
`livepilot-core/references/affordances/devices/<slug>.yaml`. Use it
|
|
267
|
+
to pick parameter ranges (subtle / moderate / aggressive) that match
|
|
268
|
+
the brief's `novelty_budget`, to identify the right `pairings` chain,
|
|
269
|
+
and to queue the required `remeasure` diagnostics for Phase 7. See
|
|
270
|
+
`livepilot-core/references/affordances/_schema.md` for the packet
|
|
271
|
+
structure. The affordance's resolved parameter dict is the ergonomic
|
|
272
|
+
input to `configure_device` (via `apply_semantic_move("configure_device", args={"param_overrides": ...})`).
|
|
273
|
+
|
|
274
|
+
**Brief compliance check (v1.18.3, still required under v1.20):**
|
|
275
|
+
before any tool call that could plausibly violate the brief's
|
|
276
|
+
`anti_patterns` or `locked_dimensions`, call
|
|
277
|
+
`check_brief_compliance(brief, tool_name, tool_args)`. This fires
|
|
278
|
+
even when you dispatch via `apply_semantic_move` — the compliance
|
|
279
|
+
check inspects each compiled plan step's per-tool signature against
|
|
280
|
+
the brief. A compiled plan CAN violate the brief (e.g., a
|
|
281
|
+
`configure_device` preset that reaches for "bright top-end" when the
|
|
282
|
+
brief forbids it). Check each step.
|
|
283
|
+
|
|
284
|
+
The tool returns `{"ok": bool, "violations": [...]}` — best-effort
|
|
285
|
+
keyword heuristic, NOT semantic understanding. Use it especially for:
|
|
286
|
+
|
|
287
|
+
- `set_device_parameter` / `batch_set_parameters` calls on EQ /
|
|
288
|
+
saturation / filter parameters (catches "bright top-end",
|
|
289
|
+
"aggressive transient" style anti_patterns)
|
|
290
|
+
- `load_browser_item` / `find_and_load_device` for new devices
|
|
291
|
+
(check against `avoid` device lists in concept packets)
|
|
292
|
+
- `create_scene` / `set_scene_*` / `set_scene_metadata` /
|
|
293
|
+
`refresh_repeated_section` (catches `locked_dimensions:
|
|
294
|
+
[structural]` violations)
|
|
295
|
+
- `add_notes` / `modify_notes` / `quantize_clip` / `assign_clip_groove`
|
|
296
|
+
when `locked_dimensions: [rhythmic]` is set
|
|
297
|
+
- `set_track_routing` (changing a routing to "Sends Only" can silence
|
|
298
|
+
a track — treat as structural under locked_dimensions)
|
|
299
|
+
|
|
300
|
+
When a violation fires:
|
|
301
|
+
1. **Do NOT auto-proceed.** Surface the violation to the user with
|
|
302
|
+
the reason + suggestion from the check response.
|
|
303
|
+
2. Offer three paths: (a) adjust the call to avoid the pattern,
|
|
304
|
+
(b) user explicitly overrides this anti_pattern for this turn,
|
|
305
|
+
(c) pick a different tool/plan.
|
|
306
|
+
3. Record the user's choice via `add_session_memory(category="override")`
|
|
307
|
+
so future anti-preference writes know this was an explicit decision.
|
|
308
|
+
|
|
309
|
+
The check is STATELESS — you pass the brief each time. Empty brief
|
|
310
|
+
(no anti_patterns, no locked_dimensions) always returns ok=True.
|
|
311
|
+
|
|
312
|
+
**Escape hatch policy (v1.20).** When no semantic move in the
|
|
313
|
+
decision table covers the pattern, raw tools remain permitted — BUT
|
|
314
|
+
only with the following mandatory logging contract. The hatch exists
|
|
315
|
+
because v1.20 ships a phased cutover, not a hard cutover; v1.21+
|
|
316
|
+
closes patterns as they accumulate.
|
|
317
|
+
|
|
318
|
+
Using the hatch requires ALL THREE, in this order:
|
|
319
|
+
|
|
320
|
+
1. The raw tool call itself (e.g., `set_device_parameter(...)`).
|
|
321
|
+
2. `add_session_memory(category="move_executed", content="...")` —
|
|
322
|
+
one-line ledger entry covering family + target + brief identity.
|
|
323
|
+
Without this, the next creative turn's anti-repetition read goes
|
|
324
|
+
blind (`get_last_move` / `get_action_ledger_summary` see nothing).
|
|
325
|
+
3. `add_session_memory(category="tech_debt", content="no semantic_move
|
|
326
|
+
for <pattern>", ...)` — tracking log that says "a semantic move
|
|
327
|
+
should exist for this." The content should name the pattern
|
|
328
|
+
precisely enough that a future commit can add the move.
|
|
329
|
+
|
|
330
|
+
**Both category="move_executed" AND category="tech_debt" are
|
|
331
|
+
required** — they serve different consumers:
|
|
332
|
+
|
|
333
|
+
- `move_executed` is consumed by anti-repetition (recency table,
|
|
334
|
+
Phase 3 hard-bias rule).
|
|
335
|
+
- `tech_debt` is consumed by release planning — v1.21 scope is driven
|
|
336
|
+
by the tech_debt log's contents. If patterns accumulate with
|
|
337
|
+
identical phrasing, they graduate to semantic moves in the next
|
|
338
|
+
minor release.
|
|
339
|
+
|
|
340
|
+
After the hatch write, propose adding the missing semantic move in
|
|
341
|
+
a follow-up turn. Do NOT silently continue using the hatch — that's
|
|
342
|
+
how the cutover stalls.
|
|
343
|
+
|
|
344
|
+
**Default-preference rule.** In doubt between `apply_semantic_move`
|
|
345
|
+
and the escape hatch: default to `apply_semantic_move`. Skip to the
|
|
346
|
+
hatch ONLY if the decision table has no row for the pattern AND
|
|
347
|
+
`list_semantic_moves(domain="<family>")` confirms no existing move
|
|
348
|
+
matches. The `apply_semantic_move` + `commit_experiment` pair is the
|
|
349
|
+
production-line; the hatch is an explicitly-logged branch, not a
|
|
350
|
+
shortcut.
|
|
351
|
+
|
|
352
|
+
**State-inference fallback is DEPRECATED** (see
|
|
353
|
+
`references/anti-repetition-rules.md` §v1.20 update). Pre-v1.20, the
|
|
354
|
+
director used "scan loaded devices + non-default mixer values to
|
|
355
|
+
guess recent moves" when the recency read came back empty. With
|
|
356
|
+
`apply_semantic_move` as default, that heuristic routes around the
|
|
357
|
+
real ledger and can double-count. Keep it documented ONLY for the
|
|
358
|
+
escape-hatch case where both memory entries were accidentally dropped.
|
|
359
|
+
|
|
360
|
+
### Phase 7 — Evaluate (critics fire HERE, not earlier)
|
|
361
|
+
|
|
362
|
+
`evaluate_move` with artistic dimensions (`style_fit`, `distinctiveness`,
|
|
363
|
+
`motif_coherence`, `section_contrast`, `restraint`) in addition to the
|
|
364
|
+
technical goal vector.
|
|
365
|
+
|
|
366
|
+
If the evaluation fails protected qualities → `undo` and return to
|
|
367
|
+
Phase 3 with the failure recorded.
|
|
368
|
+
|
|
369
|
+
### Phase 8 — Record
|
|
370
|
+
|
|
371
|
+
`memory_learn` with a verdict:
|
|
372
|
+
|
|
373
|
+
- `safe_win` — low novelty, confirmed
|
|
374
|
+
- `bold_win` — high novelty, kept by user
|
|
375
|
+
- `interesting_failure` — novel, kept for study, not reapplied
|
|
376
|
+
- `identity_break` — violated protected qualities
|
|
377
|
+
- `generic_fallback` — collapsed to a pattern; flag for anti-preference
|
|
378
|
+
|
|
379
|
+
On undo or explicit rejection → `record_anti_preference` with the
|
|
380
|
+
family + context.
|
|
381
|
+
|
|
382
|
+
## Anti-Repetition Protocol
|
|
383
|
+
|
|
384
|
+
Before Phase 3 generation, compute the family distribution over the
|
|
385
|
+
last 10 kept moves (`get_action_ledger_summary(limit=10)`). Apply the recency
|
|
386
|
+
threshold table from `references/anti-repetition-rules.md`:
|
|
387
|
+
|
|
388
|
+
| Recency count for one family | Rule |
|
|
389
|
+
|---|---|
|
|
390
|
+
| 0–2 of 10 | No penalty |
|
|
391
|
+
| 3–4 of 10 | ALLOWED as a plan's dominant family, but only as the **least-weighted** of the three |
|
|
392
|
+
| ≥ 5 of 10 | EXCLUDED from all three dominant slots (fully hard-biased away) |
|
|
393
|
+
|
|
394
|
+
**Borderline stuckness.** After computing the recency penalty, run
|
|
395
|
+
`detect_stuckness`. Its confidence governs which divergence path runs:
|
|
396
|
+
|
|
397
|
+
| Confidence | Path |
|
|
398
|
+
|---|---|
|
|
399
|
+
| `< 0.4` | Standard divergence (director continues) |
|
|
400
|
+
| `0.4 ≤ c < 0.5` | Borderline — stay in standard divergence BUT explicitly surface the option to the user: *"I'm staying in divergence mode; say the word and I'll switch to Wonder rescue."* Do NOT silently choose. |
|
|
401
|
+
| `≥ 0.5` | Escalate to `livepilot-wonder` rescue path (not director standard divergence) |
|
|
402
|
+
|
|
403
|
+
Full rules: `references/anti-repetition-rules.md`.
|
|
404
|
+
|
|
405
|
+
## Honesty Rules (inherited from Wonder Mode)
|
|
406
|
+
|
|
407
|
+
- Never describe an analytical-only variant as previewable
|
|
408
|
+
- Never fabricate distinctness by relabeling the same move
|
|
409
|
+
- Fewer than 3 variants is ACCEPTABLE only when, after honestly widening
|
|
410
|
+
across families AND checking concept packets, fewer real options exist
|
|
411
|
+
- On first-pass creative-director calls, actively widen BEFORE accepting
|
|
412
|
+
a smaller variant set (stuck-rescue is a separate context)
|
|
413
|
+
|
|
414
|
+
## Red Flags — STOP If You Catch Yourself Thinking
|
|
415
|
+
|
|
416
|
+
| Rationalization | Reality |
|
|
417
|
+
|---|---|
|
|
418
|
+
| "The user just wants one thing fixed" | Did they name exact parameters? If no, that's creative intent. |
|
|
419
|
+
| "I'll skip the brief, I know what they mean" | The brief pins protected qualities. Skipping them = pattern repetition. |
|
|
420
|
+
| "Three variants are overkill for this" | That's the collapse-to-mode instinct. Generate them anyway, then honestly cull. |
|
|
421
|
+
| "I'll run `analyze_mix` first to see what's needed" | Critics before divergence pre-converge the answer. Defer. |
|
|
422
|
+
| "The first plan looks good enough" | That's the most-likely completion, by definition. Generate two more. |
|
|
423
|
+
| "Fewer than 3 is fine per Wonder's honesty rule" | True for stuck-rescue. On first-pass, widen FIRST across families, fall back only after. |
|
|
424
|
+
| "Reading anti-preferences is slow" | It's an instant tool. The alternative is generating a rejected pattern. |
|
|
425
|
+
| **User said "quickly" / "just do it" / "don't overthink it" / "I'm in a rush"** | **User pressure framing. The brief is STILL mandatory. Compress PROSE (fewer words around each plan), not STRUCTURE (never skip the brief, Phase 1 reads, 3-family diversity, or preview). Phase 1 reads are instant — "quickly" buys nothing by skipping them.** |
|
|
426
|
+
| "User said 'a bit more like X' so novelty should be low" | Correct intuition, but the brief still compiles. "A bit more like X" maps to `novelty_budget ≈ 0.45` (see creative-brief-template). |
|
|
427
|
+
| "Two plans that both add sends feel distinct because the sends are different" | Both are `mix` family with spatial dimension. That is not distinctness. Regenerate from a different family. |
|
|
428
|
+
| "The rhythmic plan has to use a non-arrangement family somehow" | No — rhythmic is a DIMENSION, not a family. Rhythmic plans honestly tag `family=arrangement` (clip pattern) or `family=sound_design` (per-hit feel) with `dimension_hint="rhythmic"`. Not a fudge. |
|
|
429
|
+
|
|
430
|
+
## What This Skill Does NOT Do
|
|
431
|
+
|
|
432
|
+
- Does not replace `livepilot-wonder`, `livepilot-arrangement`, or any
|
|
433
|
+
engine skill — it ROUTES to them
|
|
434
|
+
- Does not execute arrangement / sound-design / mix tool calls directly
|
|
435
|
+
- Does not override user-specified locks ("don't touch X" wins every time)
|
|
436
|
+
- Does not fire when `livepilot-performance-engine` is active (safety wins)
|
|
437
|
+
- Does not replace `livepilot-core` — all Golden Rules still apply
|
|
438
|
+
|
|
439
|
+
## Relationship to Other Skills
|
|
440
|
+
|
|
441
|
+
| Situation | Route to |
|
|
442
|
+
|---|---|
|
|
443
|
+
| `detect_stuckness > 0.5` or user says "I'm stuck" | `livepilot-wonder` (rescue path) |
|
|
444
|
+
| Exact mix target ("-14 LUFS") | `livepilot-mix-engine` minimal-fix mode |
|
|
445
|
+
| Executing a chosen plan (structural) | `livepilot-arrangement` |
|
|
446
|
+
| Executing a chosen plan (timbral) | `livepilot-sound-design-engine` |
|
|
447
|
+
| Executing a chosen plan (rhythmic / melodic) | `livepilot-notes` + `livepilot-composition-engine` |
|
|
448
|
+
| Post-commit evaluation | `livepilot-evaluation` with artistic dimensions |
|
|
449
|
+
|
|
450
|
+
## References
|
|
451
|
+
|
|
452
|
+
- `references/creative-brief-template.md` — YAML schema + filled examples
|
|
453
|
+
- `references/move-family-diversity-rule.md` — how "distinct" is enforced
|
|
454
|
+
- `references/anti-repetition-rules.md` — pre-generation reads + bias rules
|
|
455
|
+
- `references/the-four-move-rule.md` — structural / rhythmic / timbral / spatial coverage
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# Anti-Repetition Protocol
|
|
2
|
+
|
|
3
|
+
The director's Phase 1 reads are not advisory. They are the mechanism
|
|
4
|
+
that breaks pattern repetition, because LLM-driven generation collapses
|
|
5
|
+
to the most-likely completion by default — and "most-likely" is almost
|
|
6
|
+
always "what I did last time."
|
|
7
|
+
|
|
8
|
+
## Ledger-state inference fallback
|
|
9
|
+
|
|
10
|
+
### v1.20 update: DEPRECATED in favor of the semantic-move ledger
|
|
11
|
+
|
|
12
|
+
The detection mechanisms below (`get_last_move`, `get_action_ledger_summary`) see
|
|
13
|
+
every move executed through `apply_semantic_move` or
|
|
14
|
+
`commit_experiment`. As of v1.20, the director SKILL.md Phase 6
|
|
15
|
+
defaults to these two tools — the pre-v1.20 "raw tools + manual
|
|
16
|
+
`add_session_memory` marker" path is now the ESCAPE HATCH only, used
|
|
17
|
+
when no semantic move covers the pattern (see
|
|
18
|
+
`phase-6-execution.md` §escape-hatch policy).
|
|
19
|
+
|
|
20
|
+
**Expected state:** the ledger is populated for every committed
|
|
21
|
+
creative move. `get_last_move` returns the most recent;
|
|
22
|
+
`get_action_ledger_summary(limit=10)` returns the recent window. No
|
|
23
|
+
inference needed.
|
|
24
|
+
|
|
25
|
+
**State-inference is DEPRECATED** — kept below for the narrow case
|
|
26
|
+
where:
|
|
27
|
+
|
|
28
|
+
1. Phase 6 used the escape hatch, AND
|
|
29
|
+
2. BOTH the `move_executed` marker AND the `tech_debt` log were
|
|
30
|
+
accidentally skipped.
|
|
31
|
+
|
|
32
|
+
That is a director-discipline bug, not a design state to route around.
|
|
33
|
+
Fix it at the source (policy: v1.20 `phase-6-execution.md` §escape
|
|
34
|
+
hatch — the two memory writes are MANDATORY). Do NOT use state-
|
|
35
|
+
inference as a general-purpose substitute for the ledger; the
|
|
36
|
+
heuristic can double-count moves that ARE already in the ledger,
|
|
37
|
+
which inflates recency scores and over-penalizes families.
|
|
38
|
+
|
|
39
|
+
### The heuristic (retained for emergency-only use)
|
|
40
|
+
|
|
41
|
+
**Only when ALL of: `get_last_move()=={}`,
|
|
42
|
+
`get_action_ledger_summary(limit=10)` returns no recent moves, AND you
|
|
43
|
+
have visual evidence Phase 6 ran via escape hatch
|
|
44
|
+
without logs.** Compare the current session state (track count,
|
|
45
|
+
return track device chains, clip slot contents) against a naive
|
|
46
|
+
"blank session" baseline. Any non-default device loadout or non-empty
|
|
47
|
+
return track suggests recent creative work that the ledger missed.
|
|
48
|
+
Infer the move family from what's loaded:
|
|
49
|
+
|
|
50
|
+
| Session-state signal | Inferred recent family |
|
|
51
|
+
|---|---|
|
|
52
|
+
| Non-empty return tracks with delay/reverb chains | `device_creation` / `mix` (spatial) |
|
|
53
|
+
| New devices on MIDI tracks (Drift, Meld, Operator, etc.) | `sound_design` / `device_creation` (timbral) |
|
|
54
|
+
| Modified mixer state (volume/pan/sends non-default) | `mix` |
|
|
55
|
+
| Clips with notes in previously-empty slots | `arrangement` / `sound_design` (rhythmic) |
|
|
56
|
+
| New scenes / renamed scenes | `arrangement` (structural) |
|
|
57
|
+
|
|
58
|
+
State inference is a best-effort fallback, not a replacement for the
|
|
59
|
+
ledger. When you find yourself reaching for it, log a `tech_debt`
|
|
60
|
+
entry describing WHY you had to — the root-cause fix belongs in
|
|
61
|
+
Phase 6 discipline, not in propagating inference.
|
|
62
|
+
|
|
63
|
+
## Mandatory pre-generation reads
|
|
64
|
+
|
|
65
|
+
Run all three in parallel during Phase 1. Skipping any of them = the
|
|
66
|
+
agent will repeat.
|
|
67
|
+
|
|
68
|
+
### 1. `get_anti_preferences`
|
|
69
|
+
|
|
70
|
+
Returns moves, device families, patches, and aesthetic directions the
|
|
71
|
+
user has previously rejected (via `record_anti_preference` or implicit
|
|
72
|
+
undo signals). Treat the response as a HARD filter on Phase 3 seeds.
|
|
73
|
+
|
|
74
|
+
If a candidate plan's dominant move appears in anti-preferences → do
|
|
75
|
+
not include it. Regenerate from a different family.
|
|
76
|
+
|
|
77
|
+
### 2. `get_action_ledger_summary(limit=10)`
|
|
78
|
+
|
|
79
|
+
**v1.20 correction**: previous docs pointed at `memory_list`, which
|
|
80
|
+
reads the persistent technique library — a DIFFERENT store from
|
|
81
|
+
the action ledger. Technique-library entries require explicit
|
|
82
|
+
`memory_learn` opt-in; the ledger records every committed move.
|
|
83
|
+
For recency detection, the ledger is the correct source.
|
|
84
|
+
|
|
85
|
+
Returns `recent_moves` — the last N kept moves in this session.
|
|
86
|
+
Inspect their `move_class` (family) distribution:
|
|
87
|
+
|
|
88
|
+
| Recency count for one family | Rule |
|
|
89
|
+
|---|---|
|
|
90
|
+
| 0 of 10 | Family is cold. No penalty. |
|
|
91
|
+
| 1–2 of 10 | Family is lightly used. No penalty; prefer-other-if-tied. |
|
|
92
|
+
| 3–4 of 10 | Family is a "recent hot zone." ALLOWED as a plan's dominant family, but only as the **least-weighted** of the three. Two of the three plans must come from other families. |
|
|
93
|
+
| ≥ 5 of 10 | Family is a **stuck pattern**. EXCLUDED from all three dominant slots — the other two or three plans must cover different families. Also: run `detect_stuckness`. If confidence > 0.5, escalate to Wonder rescue. If 0.4 ≤ confidence < 0.5, see the borderline-stuckness rule in `SKILL.md` §Anti-Repetition Protocol. |
|
|
94
|
+
|
|
95
|
+
The `≥5 of 10` threshold is the same threshold Wonder's stuck-rescue
|
|
96
|
+
path expects, but the director applies it proactively on creative
|
|
97
|
+
intent — the user does not need to say "I'm stuck" for the recency
|
|
98
|
+
rule to bite.
|
|
99
|
+
|
|
100
|
+
### 3. `get_last_move`
|
|
101
|
+
|
|
102
|
+
The most recent committed move. Phase 3 plans MUST NOT exactly repeat
|
|
103
|
+
the last move's family + target combination, even with different
|
|
104
|
+
parameters. That is the clearest pattern-repetition signal.
|
|
105
|
+
|
|
106
|
+
Populate the brief's `last_move_target` field (see
|
|
107
|
+
`creative-brief-template.md`) so the constraint survives between Phase
|
|
108
|
+
1 reads and Phase 3 generation.
|
|
109
|
+
|
|
110
|
+
## The bias rule
|
|
111
|
+
|
|
112
|
+
After Phase 1 reads, compute a "recency family vector":
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
recent_families = {family: count for move in last 10 committed moves}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Apply a penalty to seeds whose dominant family has a high recency
|
|
119
|
+
count. The penalty is informal (not a numeric score) — it just means:
|
|
120
|
+
when two families are equally good choices for a plan, prefer the one
|
|
121
|
+
NOT in `recent_families`.
|
|
122
|
+
|
|
123
|
+
This is the mirror of taste-aware ranking. Taste says "lean toward
|
|
124
|
+
what the user liked." Recency bias says "don't converge back to it
|
|
125
|
+
every time."
|
|
126
|
+
|
|
127
|
+
## Concept packet `avoid` is a HARD filter
|
|
128
|
+
|
|
129
|
+
When a packet is loaded (from `artist-vocabularies.md` or
|
|
130
|
+
`genre-vocabularies.md`), its `avoid` list is not a suggestion.
|
|
131
|
+
|
|
132
|
+
- A candidate plan whose techniques fall in `avoid` → drop it, no
|
|
133
|
+
negotiation.
|
|
134
|
+
- Example: dub_techno packet's `avoid: [bright transient-heavy hats]`.
|
|
135
|
+
A plan that loads Drum Bus with boosted transients on hats is
|
|
136
|
+
rejected even if otherwise diverse.
|
|
137
|
+
|
|
138
|
+
Packets compile. Vibes compile to filters.
|
|
139
|
+
|
|
140
|
+
## Recording anti-preferences
|
|
141
|
+
|
|
142
|
+
On these signals, write to `record_anti_preference` with enough context
|
|
143
|
+
that future sessions learn from it:
|
|
144
|
+
|
|
145
|
+
| Signal | What to record |
|
|
146
|
+
|---|---|
|
|
147
|
+
| User calls `discard_preview_set` | The family + technique of every variant in the set, tagged as "rejected in context X" |
|
|
148
|
+
| User runs `undo` within 2 turns of `commit_preview_variant` | The specific move + family + context |
|
|
149
|
+
| User says "no, not that" / "try something else" after preview | The preview-set's dominant family |
|
|
150
|
+
| Evaluation verdict = `generic_fallback` | The family and technique pattern |
|
|
151
|
+
|
|
152
|
+
Do NOT record anti-preferences on:
|
|
153
|
+
|
|
154
|
+
- Simple operational `undo` (volume / pan adjustments)
|
|
155
|
+
- `undo` in service of A/B comparison
|
|
156
|
+
- User re-ordering or renaming without rejection signal
|
|
157
|
+
|
|
158
|
+
## Example — detecting the stuck pattern
|
|
159
|
+
|
|
160
|
+
Session history shows the last 5 committed moves:
|
|
161
|
+
|
|
162
|
+
1. `widen_stereo` (family=`mix`)
|
|
163
|
+
2. `tighten_low_end` (family=`mix`)
|
|
164
|
+
3. `darken_without_losing_width` (family=`mix`)
|
|
165
|
+
4. `make_punchier` (family=`mix`)
|
|
166
|
+
5. `reduce_foreground_competition` (family=`mix`)
|
|
167
|
+
|
|
168
|
+
Phase 1 detects: `mix` is 5/5 of recent history. The user just said
|
|
169
|
+
"more interesting". Without anti-repetition, the most-likely
|
|
170
|
+
completion is ANOTHER `mix` move.
|
|
171
|
+
|
|
172
|
+
Correct Phase 3 response per the recency threshold table above:
|
|
173
|
+
|
|
174
|
+
- 5 of 10 (or 5 of 5, same conclusion) → `mix` is **EXCLUDED** from
|
|
175
|
+
all three dominant slots. Not "allowed as least-weighted" — that
|
|
176
|
+
rule applies at 3–4/10, not at 5/10.
|
|
177
|
+
- Three seeds must come from `{arrangement, transition, sound_design,
|
|
178
|
+
device_creation, performance}` — all three different.
|
|
179
|
+
- Run `detect_stuckness`:
|
|
180
|
+
- `> 0.5` → route to Wonder rescue (not standard divergence)
|
|
181
|
+
- `0.4 ≤ confidence < 0.5` → borderline — stay in standard
|
|
182
|
+
divergence BUT flag to the user ("I'm staying in divergence; say
|
|
183
|
+
the word to switch to Wonder rescue mode")
|
|
184
|
+
- `< 0.4` → standard divergence, no escalation
|
|
185
|
+
|
|
186
|
+
The "allow one mix plan as least-weighted" escape hatch that earlier
|
|
187
|
+
drafts mentioned applies ONLY at 3–4/10 recency, not at ≥ 5/10.
|
|
188
|
+
At 5/10 the family is fully excluded.
|
|
189
|
+
|
|
190
|
+
## Example — respecting user-specified deepening
|
|
191
|
+
|
|
192
|
+
User says: "I like where the timbre is going — push it further."
|
|
193
|
+
|
|
194
|
+
This is an explicit opt-in to stay in `sound_design`. The family
|
|
195
|
+
diversity rule still applies (three plans, different families), BUT:
|
|
196
|
+
|
|
197
|
+
- The dominant plan (the one recommended to the user) stays
|
|
198
|
+
`sound_design`
|
|
199
|
+
- The other two plans are framed as "alternative directions if the
|
|
200
|
+
deepening direction stops paying off"
|
|
201
|
+
- No anti-preference penalty applied this turn
|
|
202
|
+
|
|
203
|
+
Explicit deepening requests ALWAYS override recency bias. Silence does
|
|
204
|
+
not.
|
|
205
|
+
|
|
206
|
+
## What NOT to do
|
|
207
|
+
|
|
208
|
+
- Do not skip Phase 1 reads because "it's obvious what the user wants"
|
|
209
|
+
- Do not treat anti-preferences as soft suggestions
|
|
210
|
+
- Do not record every discarded variant as an anti-preference — that
|
|
211
|
+
floods the store with noise. Record only when the user actively
|
|
212
|
+
rejected something (see table above).
|
|
213
|
+
- Do not record anti-preferences for moves the user never actually
|
|
214
|
+
heard (analytical-only variants that were never rendered)
|