livepilot 1.26.0 → 1.26.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +1 -1
  3. package/installer/codex.js +87 -9
  4. package/livepilot/.Codex-plugin/plugin.json +8 -0
  5. package/livepilot/.claude-plugin/plugin.json +8 -0
  6. package/livepilot/.mcp.json +8 -0
  7. package/livepilot/agents/livepilot-producer/AGENT.md +314 -0
  8. package/livepilot/commands/arrange.md +47 -0
  9. package/livepilot/commands/beat.md +81 -0
  10. package/livepilot/commands/evaluate.md +49 -0
  11. package/livepilot/commands/memory.md +22 -0
  12. package/livepilot/commands/mix.md +47 -0
  13. package/livepilot/commands/perform.md +42 -0
  14. package/livepilot/commands/session.md +13 -0
  15. package/livepilot/commands/sounddesign.md +58 -0
  16. package/livepilot/rubrics/default_preset_check.md +82 -0
  17. package/livepilot/rubrics/layer_accumulation.md +79 -0
  18. package/livepilot/rubrics/layer_precision.md +79 -0
  19. package/livepilot/rubrics/modulation_presence.md +63 -0
  20. package/livepilot/rubrics/sound_design_depth.md +40 -0
  21. package/livepilot/skills/livepilot-arrangement/SKILL.md +164 -0
  22. package/livepilot/skills/livepilot-composition-engine/SKILL.md +151 -0
  23. package/livepilot/skills/livepilot-composition-engine/references/form-patterns.md +97 -0
  24. package/livepilot/skills/livepilot-composition-engine/references/transition-archetypes.md +102 -0
  25. package/livepilot/skills/livepilot-core/SKILL.md +261 -0
  26. package/livepilot/skills/livepilot-core/references/ableton-workflow-patterns.md +831 -0
  27. package/livepilot/skills/livepilot-core/references/affordances/_schema.md +160 -0
  28. package/livepilot/skills/livepilot-core/references/affordances/devices/auto-filter.yaml +133 -0
  29. package/livepilot/skills/livepilot-core/references/affordances/devices/chorus-ensemble.yaml +91 -0
  30. package/livepilot/skills/livepilot-core/references/affordances/devices/compressor.yaml +98 -0
  31. package/livepilot/skills/livepilot-core/references/affordances/devices/convolution-reverb.yaml +113 -0
  32. package/livepilot/skills/livepilot-core/references/affordances/devices/corpus.yaml +84 -0
  33. package/livepilot/skills/livepilot-core/references/affordances/devices/drift.yaml +105 -0
  34. package/livepilot/skills/livepilot-core/references/affordances/devices/echo.yaml +108 -0
  35. package/livepilot/skills/livepilot-core/references/affordances/devices/eq-eight.yaml +95 -0
  36. package/livepilot/skills/livepilot-core/references/affordances/devices/glue-compressor.yaml +88 -0
  37. package/livepilot/skills/livepilot-core/references/affordances/devices/granulator-iii.yaml +104 -0
  38. package/livepilot/skills/livepilot-core/references/affordances/devices/hybrid-reverb.yaml +83 -0
  39. package/livepilot/skills/livepilot-core/references/affordances/devices/operator.yaml +98 -0
  40. package/livepilot/skills/livepilot-core/references/affordances/devices/ping-pong-delay.yaml +104 -0
  41. package/livepilot/skills/livepilot-core/references/affordances/devices/poli.yaml +98 -0
  42. package/livepilot/skills/livepilot-core/references/affordances/devices/saturator.yaml +98 -0
  43. package/livepilot/skills/livepilot-core/references/affordances/devices/shifter.yaml +77 -0
  44. package/livepilot/skills/livepilot-core/references/affordances/devices/simpler.yaml +113 -0
  45. package/livepilot/skills/livepilot-core/references/affordances/devices/utility.yaml +95 -0
  46. package/livepilot/skills/livepilot-core/references/affordances/devices/vinyl-distortion.yaml +92 -0
  47. package/livepilot/skills/livepilot-core/references/affordances/devices/wavetable.yaml +98 -0
  48. package/livepilot/skills/livepilot-core/references/artist-vocabularies.md +389 -0
  49. package/livepilot/skills/livepilot-core/references/automation-atlas.md +272 -0
  50. package/livepilot/skills/livepilot-core/references/concepts/_schema.md +158 -0
  51. package/livepilot/skills/livepilot-core/references/concepts/artists/akufen.yaml +116 -0
  52. package/livepilot/skills/livepilot-core/references/concepts/artists/aphex-twin.yaml +133 -0
  53. package/livepilot/skills/livepilot-core/references/concepts/artists/arca-sophie.yaml +131 -0
  54. package/livepilot/skills/livepilot-core/references/concepts/artists/autechre.yaml +130 -0
  55. package/livepilot/skills/livepilot-core/references/concepts/artists/basic-channel.yaml +140 -0
  56. package/livepilot/skills/livepilot-core/references/concepts/artists/basinski.yaml +126 -0
  57. package/livepilot/skills/livepilot-core/references/concepts/artists/boards-of-canada.yaml +124 -0
  58. package/livepilot/skills/livepilot-core/references/concepts/artists/burial.yaml +127 -0
  59. package/livepilot/skills/livepilot-core/references/concepts/artists/com-truise-tycho.yaml +121 -0
  60. package/livepilot/skills/livepilot-core/references/concepts/artists/daft-punk.yaml +117 -0
  61. package/livepilot/skills/livepilot-core/references/concepts/artists/dj-premier-rza.yaml +119 -0
  62. package/livepilot/skills/livepilot-core/references/concepts/artists/gas.yaml +134 -0
  63. package/livepilot/skills/livepilot-core/references/concepts/artists/hawtin.yaml +127 -0
  64. package/livepilot/skills/livepilot-core/references/concepts/artists/isolee-luomo.yaml +130 -0
  65. package/livepilot/skills/livepilot-core/references/concepts/artists/j-dilla.yaml +133 -0
  66. package/livepilot/skills/livepilot-core/references/concepts/artists/jeff-mills.yaml +120 -0
  67. package/livepilot/skills/livepilot-core/references/concepts/artists/johannsson-richter.yaml +132 -0
  68. package/livepilot/skills/livepilot-core/references/concepts/artists/madlib.yaml +124 -0
  69. package/livepilot/skills/livepilot-core/references/concepts/artists/moodymann-theo-parrish.yaml +121 -0
  70. package/livepilot/skills/livepilot-core/references/concepts/artists/oneohtrix-point-never.yaml +126 -0
  71. package/livepilot/skills/livepilot-core/references/concepts/artists/photek-source-direct.yaml +120 -0
  72. package/livepilot/skills/livepilot-core/references/concepts/artists/rashad-spinn-traxman.yaml +122 -0
  73. package/livepilot/skills/livepilot-core/references/concepts/artists/robert-henke.yaml +113 -0
  74. package/livepilot/skills/livepilot-core/references/concepts/artists/shackleton.yaml +124 -0
  75. package/livepilot/skills/livepilot-core/references/concepts/artists/skream-mala.yaml +119 -0
  76. package/livepilot/skills/livepilot-core/references/concepts/artists/stars-of-the-lid.yaml +119 -0
  77. package/livepilot/skills/livepilot-core/references/concepts/artists/tim-hecker.yaml +122 -0
  78. package/livepilot/skills/livepilot-core/references/concepts/artists/villalobos.yaml +135 -0
  79. package/livepilot/skills/livepilot-core/references/concepts/genres/ambient.yaml +137 -0
  80. package/livepilot/skills/livepilot-core/references/concepts/genres/boom_bap.yaml +124 -0
  81. package/livepilot/skills/livepilot-core/references/concepts/genres/deep-minimal.yaml +130 -0
  82. package/livepilot/skills/livepilot-core/references/concepts/genres/deep_house.yaml +130 -0
  83. package/livepilot/skills/livepilot-core/references/concepts/genres/detroit_techno.yaml +116 -0
  84. package/livepilot/skills/livepilot-core/references/concepts/genres/disco.yaml +123 -0
  85. package/livepilot/skills/livepilot-core/references/concepts/genres/downtempo.yaml +129 -0
  86. package/livepilot/skills/livepilot-core/references/concepts/genres/drone.yaml +133 -0
  87. package/livepilot/skills/livepilot-core/references/concepts/genres/drum-and-bass.yaml +119 -0
  88. package/livepilot/skills/livepilot-core/references/concepts/genres/dub-techno.yaml +132 -0
  89. package/livepilot/skills/livepilot-core/references/concepts/genres/dub.yaml +129 -0
  90. package/livepilot/skills/livepilot-core/references/concepts/genres/dubstep.yaml +120 -0
  91. package/livepilot/skills/livepilot-core/references/concepts/genres/experimental.yaml +136 -0
  92. package/livepilot/skills/livepilot-core/references/concepts/genres/footwork.yaml +119 -0
  93. package/livepilot/skills/livepilot-core/references/concepts/genres/hip-hop.yaml +132 -0
  94. package/livepilot/skills/livepilot-core/references/concepts/genres/house.yaml +126 -0
  95. package/livepilot/skills/livepilot-core/references/concepts/genres/hyperpop.yaml +128 -0
  96. package/livepilot/skills/livepilot-core/references/concepts/genres/idm.yaml +134 -0
  97. package/livepilot/skills/livepilot-core/references/concepts/genres/lo_fi.yaml +129 -0
  98. package/livepilot/skills/livepilot-core/references/concepts/genres/microhouse.yaml +138 -0
  99. package/livepilot/skills/livepilot-core/references/concepts/genres/minimal-techno.yaml +116 -0
  100. package/livepilot/skills/livepilot-core/references/concepts/genres/modern-classical.yaml +123 -0
  101. package/livepilot/skills/livepilot-core/references/concepts/genres/soul.yaml +125 -0
  102. package/livepilot/skills/livepilot-core/references/concepts/genres/synthwave.yaml +123 -0
  103. package/livepilot/skills/livepilot-core/references/concepts/genres/techno.yaml +123 -0
  104. package/livepilot/skills/livepilot-core/references/concepts/genres/trap.yaml +120 -0
  105. package/livepilot/skills/livepilot-core/references/concepts/genres/uk-garage.yaml +121 -0
  106. package/livepilot/skills/livepilot-core/references/device-atlas/00-index.md +110 -0
  107. package/livepilot/skills/livepilot-core/references/device-atlas/distortion-and-character.md +687 -0
  108. package/livepilot/skills/livepilot-core/references/device-atlas/drums-and-percussion.md +753 -0
  109. package/livepilot/skills/livepilot-core/references/device-atlas/dynamics-and-punch.md +525 -0
  110. package/livepilot/skills/livepilot-core/references/device-atlas/eq-and-filtering.md +402 -0
  111. package/livepilot/skills/livepilot-core/references/device-atlas/midi-tools.md +963 -0
  112. package/livepilot/skills/livepilot-core/references/device-atlas/movement-and-modulation.md +874 -0
  113. package/livepilot/skills/livepilot-core/references/device-atlas/space-and-depth.md +571 -0
  114. package/livepilot/skills/livepilot-core/references/device-atlas/spectral-and-weird.md +714 -0
  115. package/livepilot/skills/livepilot-core/references/device-atlas/synths-native.md +953 -0
  116. package/livepilot/skills/livepilot-core/references/device-knowledge/00-index.md +34 -0
  117. package/livepilot/skills/livepilot-core/references/device-knowledge/automation-as-music.md +204 -0
  118. package/livepilot/skills/livepilot-core/references/device-knowledge/chains-genre.md +173 -0
  119. package/livepilot/skills/livepilot-core/references/device-knowledge/creative-thinking.md +211 -0
  120. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-distortion.md +188 -0
  121. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-space.md +162 -0
  122. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-spectral.md +229 -0
  123. package/livepilot/skills/livepilot-core/references/device-knowledge/instruments-synths.md +243 -0
  124. package/livepilot/skills/livepilot-core/references/genre-vocabularies.md +382 -0
  125. package/livepilot/skills/livepilot-core/references/m4l-devices.md +352 -0
  126. package/livepilot/skills/livepilot-core/references/memory-guide.md +178 -0
  127. package/livepilot/skills/livepilot-core/references/midi-recipes.md +402 -0
  128. package/livepilot/skills/livepilot-core/references/mixing-patterns.md +578 -0
  129. package/livepilot/skills/livepilot-core/references/overview.md +300 -0
  130. package/livepilot/skills/livepilot-core/references/pack-knowledge.md +319 -0
  131. package/livepilot/skills/livepilot-core/references/sample-manipulation.md +724 -0
  132. package/livepilot/skills/livepilot-core/references/sound-design-deep.md +140 -0
  133. package/livepilot/skills/livepilot-core/references/sound-design.md +393 -0
  134. package/livepilot/skills/livepilot-corpus-builder/SKILL.md +379 -0
  135. package/livepilot/skills/livepilot-creative-director/SKILL.md +455 -0
  136. package/livepilot/skills/livepilot-creative-director/references/anti-repetition-rules.md +214 -0
  137. package/livepilot/skills/livepilot-creative-director/references/creative-brief-template.md +222 -0
  138. package/livepilot/skills/livepilot-creative-director/references/hybrid-compilation.md +185 -0
  139. package/livepilot/skills/livepilot-creative-director/references/move-family-diversity-rule.md +258 -0
  140. package/livepilot/skills/livepilot-creative-director/references/phase-6-execution.md +409 -0
  141. package/livepilot/skills/livepilot-creative-director/references/the-four-move-rule.md +192 -0
  142. package/livepilot/skills/livepilot-devices/SKILL.md +213 -0
  143. package/livepilot/skills/livepilot-devices/references/load_browser_item-uri-grammar.md +82 -0
  144. package/livepilot/skills/livepilot-evaluation/SKILL.md +195 -0
  145. package/livepilot/skills/livepilot-evaluation/references/capability-modes.md +176 -0
  146. package/livepilot/skills/livepilot-evaluation/references/evaluation-contracts.md +121 -0
  147. package/livepilot/skills/livepilot-evaluation/references/memory-promotion.md +110 -0
  148. package/livepilot/skills/livepilot-mix-engine/SKILL.md +136 -0
  149. package/livepilot/skills/livepilot-mix-engine/references/mix-critics.md +143 -0
  150. package/livepilot/skills/livepilot-mix-engine/references/mix-moves.md +105 -0
  151. package/livepilot/skills/livepilot-mixing/SKILL.md +157 -0
  152. package/livepilot/skills/livepilot-notes/SKILL.md +130 -0
  153. package/livepilot/skills/livepilot-performance-engine/SKILL.md +122 -0
  154. package/livepilot/skills/livepilot-performance-engine/references/performance-safety.md +98 -0
  155. package/livepilot/skills/livepilot-release/SKILL.md +151 -0
  156. package/livepilot/skills/livepilot-sample-engine/SKILL.md +117 -0
  157. package/livepilot/skills/livepilot-sample-engine/references/sample-critics.md +87 -0
  158. package/livepilot/skills/livepilot-sample-engine/references/sample-philosophy.md +51 -0
  159. package/livepilot/skills/livepilot-sample-engine/references/sample-techniques.md +131 -0
  160. package/livepilot/skills/livepilot-sound-design-engine/SKILL.md +225 -0
  161. package/livepilot/skills/livepilot-sound-design-engine/references/patch-model.md +119 -0
  162. package/livepilot/skills/livepilot-sound-design-engine/references/sound-design-critics.md +118 -0
  163. package/livepilot/skills/livepilot-wonder/SKILL.md +143 -0
  164. package/m4l_device/LivePilot_Analyzer.amxd +0 -0
  165. package/m4l_device/LivePilot_Elektron.amxd +0 -0
  166. package/m4l_device/LivePilot_Elektron.maxpat +758 -0
  167. package/m4l_device/livepilot_bridge.js +1 -1
  168. package/m4l_device/livepilot_elektron_bridge.js +82 -0
  169. package/mcp_server/__init__.py +1 -1
  170. package/mcp_server/composer/develop/apply.py +1 -1
  171. package/mcp_server/composer/full/apply.py +32 -6
  172. package/mcp_server/m4l_bridge.py +5 -0
  173. package/mcp_server/runtime/execution_router.py +6 -0
  174. package/mcp_server/runtime/mcp_dispatch.py +18 -0
  175. package/mcp_server/runtime/remote_commands.py +2 -0
  176. package/mcp_server/server.py +11 -7
  177. package/package.json +20 -5
  178. package/remote_script/LivePilot/__init__.py +1 -1
  179. package/remote_script/LivePilot/server.py +63 -2
  180. package/requirements.txt +3 -3
  181. package/server.json +3 -3
@@ -0,0 +1,379 @@
1
+ ---
2
+ name: livepilot-corpus-builder
3
+ description: Build a private knowledge corpus from your own Live projects, rack library, Max devices, and plugin presets. Use when the user says "build my corpus", "scan my projects", "index my racks", "make atlas of my library", "private atlas from my files", or wants Claude to know their personal sound (not just Ableton's factory content).
4
+ version: 1
5
+ ---
6
+
7
+ # LivePilot — Private Corpus Builder
8
+
9
+ Use this skill when the user wants to create a private corpus-atlas from
10
+ their own filesystem content. The result becomes queryable through the same
11
+ `atlas_*` and `extension_atlas_*` MCP tools that already index Ableton's
12
+ factory packs.
13
+
14
+ **You are NOT scanning anything blindly.** Every step needs the user to
15
+ confirm a path, a scanner type, and (optionally) opt in to AI annotation.
16
+
17
+ ---
18
+
19
+ ## When to invoke
20
+
21
+ Trigger words: "build my corpus", "scan my projects", "index my racks",
22
+ "make atlas of my library", "private atlas", "know my own sound", "my
23
+ production knowledge", "scan my plugin presets".
24
+
25
+ This skill is the right entry point for the FIRST time a user wants to
26
+ build their corpus. For subsequent runs (incremental scans, adding sources)
27
+ the user can just call `corpus_*` tools directly — the skill is about
28
+ ergonomics for newcomers.
29
+
30
+ ---
31
+
32
+ ## Workflow (6 steps)
33
+
34
+ ### Step 1 — Confirm intent + state
35
+
36
+ Read [docs/USER_CORPUS_GUIDE.md](../../../docs/USER_CORPUS_GUIDE.md) for
37
+ the architecture (don't paste it back to the user — assume they want
38
+ results, not docs). Tell the user:
39
+
40
+ > "I'll set up a private corpus at `~/.livepilot/atlas-overlays/user/`,
41
+ > scan whatever folders you point me at, and make the result queryable
42
+ > via the same atlas tools. Mechanical scan first (fast, deterministic).
43
+ > AI annotation is optional and runs as a separate step."
44
+
45
+ Then call:
46
+
47
+ ```
48
+ corpus_status()
49
+ ```
50
+
51
+ If `sources: []`, this is a fresh setup — call `corpus_setup_wizard()`
52
+ (step 1.5 below) to detect candidates. If sources already exist, ask
53
+ whether to add new ones, rescan existing, or both.
54
+
55
+ ### Step 1.5 — First-run wizard (NEW — recommended for new users)
56
+
57
+ ```
58
+ corpus_setup_wizard()
59
+ ```
60
+
61
+ This surveys the user's filesystem for sensible scan targets and returns
62
+ a candidate packet — no scanning happens yet. Walk the user through each
63
+ candidate one at a time:
64
+
65
+ > "I found a User Library folder with 1,234 .adg rack presets — should I
66
+ > index it? (default: yes)"
67
+ >
68
+ > "I see 431 .amxd Max devices in MAX MONTY/m4l_2024 — index them too?"
69
+ >
70
+ > "Also a bundle of plugin presets at ~/Library/Audio/Presets — these
71
+ > tend to be noisy (5,000+ files often). Skip or include?"
72
+
73
+ For each YES, call `corpus_add_source(...)` with the candidate's suggested_id, type, path. Then ask the separate plugin-detection question:
74
+
75
+ > "Want me to also detect installed VST3/AU/VST2 plugins via
76
+ > corpus_detect_plugins? Independent of file scanning — different layer."
77
+
78
+ If yes, call `corpus_detect_plugins()` after the file scan completes.
79
+
80
+ Personal `.als` project folders are NEVER auto-suggested — privacy-sensitive.
81
+ The user must point at any specific session they want indexed.
82
+
83
+ ### Step 2 — Initialize
84
+
85
+ ```
86
+ corpus_init()
87
+ ```
88
+
89
+ Idempotent. Creates the output dir + a default manifest if absent.
90
+
91
+ ### Step 3 — Discover what to scan
92
+
93
+ Ask the user:
94
+
95
+ > "Which folders should I index? Common places (you can pick any combo):
96
+ > - Live projects: typically `~/Music/<your-folder>` or wherever you save .als files
97
+ > - Rack library: `~/Music/Ableton/User Library/Presets`
98
+ > - Max devices: `~/Documents/Max <N>/Max for Live Devices`
99
+ > - Plugin presets: `~/Library/Audio/Presets` (macOS) or `%APPDATA%\VST3 Presets` (Windows)
100
+ > Tell me a path + what type of content it has, and I'll add it."
101
+
102
+ Run `corpus_list_scanners()` to show the user what types are supported
103
+ on this install.
104
+
105
+ For each path the user names:
106
+
107
+ ```
108
+ corpus_add_source(
109
+ source_id="<short-id-they-pick>",
110
+ type="<als | adg | amxd | plugin-preset>",
111
+ path="<absolute path>",
112
+ recursive=True,
113
+ )
114
+ ```
115
+
116
+ **Recommendations:**
117
+ - Use short, lowercase, hyphenated source IDs: `my-projects`, `my-racks`,
118
+ `m4l-devices`. They become part of every entity_id and namespace.
119
+ - For very large libraries (>2000 files), suggest scanning a subset first
120
+ to validate before doing the full sweep.
121
+ - Ask about exclude patterns for backup folders, version-control checkouts,
122
+ and `.als-archive` files.
123
+
124
+ ### Step 4 — Run the scan
125
+
126
+ ```
127
+ corpus_scan() # all sources
128
+ # OR
129
+ corpus_scan(source_id="my-projects") # one source
130
+ ```
131
+
132
+ Show the user the per-source progress + error counts. If any source had
133
+ errors, surface the first 3 with paths so they can see whether to ignore
134
+ or fix them. Common error causes:
135
+ - Live 11 corruption sentinel files
136
+ - Password-protected projects
137
+ - Symlink loops
138
+ - Filesystem permissions
139
+
140
+ If a path doesn't exist, the manifest still keeps the source — the user
141
+ can fix the path with `corpus_remove_source` then re-add.
142
+
143
+ ### Step 5 — Verify queryability
144
+
145
+ After scanning, the new sidecars are on disk but the running MCP server
146
+ hasn't loaded them yet (overlays are read at boot). Tell the user:
147
+
148
+ > "Restart the MCP server to load the new sidecars into the overlay
149
+ > index. After restart you can query via:
150
+ > - `extension_atlas_search(query='...', namespace='user.<source_id>')`
151
+ > - `extension_atlas_get(...)`
152
+ > - `atlas_*` tools that respect overlay namespaces"
153
+
154
+ If they're inside Claude Code, the MCP server is already restarted on
155
+ each session start, so the next session sees the new corpus.
156
+
157
+ Demonstrate one search after restart:
158
+
159
+ ```
160
+ extension_atlas_search(query="pad", namespace="user.<their-source-id>")
161
+ ```
162
+
163
+ If matches return: green light. If no matches: check that wrappers
164
+ were written (look at `~/.livepilot/atlas-overlays/user/<output_subdir>/`
165
+ for `*.yaml` files), check the wrapper's tags, and verify the namespace
166
+ is `user.<source_id>` not `user/<source_id>`.
167
+
168
+ ### Step 6 — Optional: AI annotation
169
+
170
+ If the user wants the corpus to have free-form descriptions (sonic
171
+ fingerprint, reach-for, key-techniques — like the factory pack identity
172
+ YAMLs), do an AI annotation pass.
173
+
174
+ Per the [feedback rule on subagents](../../../../../.claude/projects/-Users-visansilviugeorge-Desktop-DREAM-AI-LivePilot/memory/feedback_use_sonnet_subagents_for_token_economy.md),
175
+ this MUST use parallel sonnet subagents. Pattern:
176
+
177
+ 1. Read the source's `_parses/*.json` directory.
178
+ 2. Group sidecars into batches of ~20 entries.
179
+ 3. For each batch, dispatch ONE sonnet agent with:
180
+ - The batch's JSON sidecars
181
+ - The artist + genre vocabulary references from
182
+ `livepilot/skills/livepilot-core/references/`
183
+ - The annotation YAML schema (see USER_CORPUS_GUIDE.md §"AI annotation")
184
+ 4. Each agent writes one `annotated/<slug>.yaml` per sidecar in its batch.
185
+ 5. Synthesize a summary in main: total annotated, failures, sample preview.
186
+
187
+ **Brief template for the annotation subagent:** "You are writing producer-
188
+ oriented annotation YAMLs for these N sidecars. Read each sidecar's
189
+ device list + scale + BPM. Read the artist/genre vocabularies for register
190
+ matching. Write one YAML per sidecar with sonic_fingerprint (3-5 sentences),
191
+ reach_for / avoid bullet lists, genre_affinity tags, producer_anchors when
192
+ the device combo or aesthetic register clearly maps to a known producer."
193
+
194
+ Cap subagents at 3 in flight at once to avoid context bloat in main.
195
+
196
+ ---
197
+
198
+ ## Anti-patterns (don't do these)
199
+
200
+ 1. **Don't auto-scan without confirmation.** The user's filesystem is
201
+ private; ask before every new path.
202
+ 2. **Don't recurse into protected folders.** Watch for paths like
203
+ `~/Library/Application Support/com.ableton.live/Drm` or anything in
204
+ `/System/...`. Filter via `exclude_globs`.
205
+ 3. **Don't apply AI annotation to ALL sources by default.** It's expensive
206
+ in tokens and the user may only care about annotations for their .als
207
+ projects, not their .adg rack library.
208
+ 4. **Don't suggest deleting the manifest** to "start over" — `corpus_remove_source`
209
+ preserves sidecars on disk so they can be reused. Manifest delete is
210
+ destructive only to the source-list, not to indexed data.
211
+ 5. **Don't try to write to the bundled atlas tree.** Always write under
212
+ `~/.livepilot/atlas-overlays/user/`. The factory atlas at `packs/` is
213
+ read-only from this skill's perspective.
214
+
215
+ ---
216
+
217
+ ## Quick reference — corpus tools (14 total)
218
+
219
+ | Tool | When |
220
+ |------|------|
221
+ | **File scanning (Phase 1)** | |
222
+ | `corpus_setup_wizard` | First-run filesystem survey + approval prompts (recommended entry point) |
223
+ | `corpus_init` | First-time setup |
224
+ | `corpus_add_source` | After wizard approval — for each folder |
225
+ | `corpus_remove_source` | When a source's path changes or you want to redefine |
226
+ | `corpus_scan` | After every batch of source additions; periodically for incremental |
227
+ | `corpus_status` | Whenever the user asks "what do I have" |
228
+ | `corpus_list_scanners` | When the user asks "what file types can I scan" |
229
+ | **Plugin knowledge (Phase 2-4)** | |
230
+ | `corpus_detect_plugins` | Enumerate installed VST3/AU/VST2/AAX (Mac: also runs `auval -a` for AUv3) |
231
+ | `corpus_canonicalize_plugins` | Dedupe inventory: prefer VST3, merge "Valhalla DSP, LLC" + "Valhalladsp" via canonical-vendor key |
232
+ | `corpus_cluster_plugins` | Group canonical plugins by vendor → dispatch manifest for efficient research |
233
+ | `corpus_discover_manuals` | Find + extract local manual PDFs/HTML for one plugin |
234
+ | `corpus_research_targets` | Emit WebSearch task packet for one plugin (no local manual or to verify) |
235
+ | `corpus_emit_synthesis_briefs` | Emit sonnet-subagent briefs to write `identity.yaml` per plugin |
236
+ | `corpus_trim_plugin_identity` | Slim a plugin's identity to overlay-required minimum + `research-priority:low` tag |
237
+
238
+ For querying the built corpus, use the existing `atlas_*` and
239
+ `extension_atlas_*` tools with `namespace="user.<source_id>"`.
240
+
241
+ ---
242
+
243
+ ## Plugin knowledge engine — Phase 2-4 agent flow
244
+
245
+ When the user asks: *"learn about my installed plugins"*, *"index my VST library"*,
246
+ *"build knowledge of all my plugins"* — this is the Plugin Knowledge Engine.
247
+ See [docs/PLUGIN_KNOWLEDGE_ENGINE.md](../../../docs/PLUGIN_KNOWLEDGE_ENGINE.md)
248
+ for full architecture.
249
+
250
+ ### Step P1 — Detect (deterministic)
251
+
252
+ ```
253
+ corpus_detect_plugins()
254
+ ```
255
+
256
+ Walks OS-standard plugin folders, parses each bundle's identity metadata
257
+ (VST3 `moduleinfo.json` / AU `Info.plist` / VST2 CcnK / AAX manifest), writes
258
+ `~/.livepilot/atlas-overlays/user/plugins/_inventory.json`. On macOS expect
259
+ 30-200 plugins typical; runtime <2 seconds.
260
+
261
+ Show the user the count + format breakdown. Ask if they want to proceed with
262
+ all detected plugins or filter to a subset (by vendor, format, size).
263
+
264
+ ### Step P2 — Local manuals (deterministic)
265
+
266
+ For each plugin (or the priority subset):
267
+
268
+ ```
269
+ corpus_discover_manuals(plugin_id="<id>")
270
+ ```
271
+
272
+ Globs the standard manual locations + extracts text from the top candidate
273
+ via pypdf / bs4 / pdfplumber. Section splitter detects chapter headings.
274
+
275
+ Many modern plugins won't have local manuals (vendors point to web docs).
276
+ That's expected — Step P3 picks up the slack.
277
+
278
+ ### Step P2.5 — Canonicalize + cluster the inventory (NEW — efficiency step)
279
+
280
+ After `corpus_detect_plugins` returns the raw inventory (often 100-200 plugins
281
+ on a populated Mac with iOS-port apps), call:
282
+
283
+ ```
284
+ corpus_canonicalize_plugins() # dedupes by vendor+name, prefers VST3
285
+ corpus_cluster_plugins() # groups by vendor for efficient research
286
+ ```
287
+
288
+ `corpus_canonicalize_plugins` collapses cross-format duplicates ("Valhalla DSP,
289
+ LLC" + "Valhalladsp" → one record with `formats_available: [AU, VST3]`) and
290
+ filters utility/system entries (Apple system AUs, Splice loaders) by default.
291
+ On a real machine this typically reduces ~120 raw plugins → ~50-70 canonical.
292
+
293
+ `corpus_cluster_plugins` groups by canonical vendor + flags singletons. The
294
+ result tells the agent which vendors to research as CLUSTERS (one shared
295
+ WebSearch pass + N lean identity yamls) vs SINGLETONS (independent research).
296
+ Typical clustering: Cem Olcay (9 MIDI tools = 1 shared pass), Moog (6 = 1
297
+ pass), chowdsp (4 = 1 pass) — vs flagship singletons like Drambo / Audulus 4
298
+ that warrant their own research.
299
+
300
+ **Wave-dispatch pattern from real-world testing:**
301
+ - ~5-8 cluster agents in parallel + 1-2 singleton-batch agents = ~7-10 total
302
+ parallel sonnet subagents.
303
+ - Each cluster agent is briefed with: plugin IDs from `corpus_cluster_plugins`
304
+ output, the existing reference identity (e.g., Valhalla Supermassive's), the
305
+ shared-research strategy from the cluster manifest's `research_strategy`
306
+ field.
307
+ - Singleton-batch agents handle 5-7 unrelated plugins each with independent
308
+ research per plugin.
309
+ - Token cost: ~80K per flagship singleton; ~30K-50K per cluster plugin (after
310
+ research-sharing amortization). 60 plugins ≈ 700K-1M total.
311
+
312
+ ### Step P3 — Web research (agent-driven, dispatch sonnet subagents)
313
+
314
+ For each plugin without a local manual (or to supplement an outdated one):
315
+
316
+ ```
317
+ corpus_research_targets(plugin_id="<id>")
318
+ ```
319
+
320
+ Returns a structured packet of search queries the agent fulfills via
321
+ **WebSearch + WebFetch**. **Per the standing rule on subagents**, dispatch
322
+ parallel sonnet agents — one per plugin OR one per query type — to:
323
+
324
+ 1. Run `WebSearch(query=<query>)` for each query in `research_targets`
325
+ 2. Pick the top relevant URL per result set (skip paywalls, marketing pages)
326
+ 3. `WebFetch(url=<url>, prompt="extract concrete sound design techniques + parameter recipes")`
327
+ 4. Cache the extracted text to `<cache_root>/<target_type>/<n>.txt` with the source URL stamped in the first line
328
+
329
+ Cap parallel subagents at 5 to avoid main-context bloat. Each subagent writes
330
+ to disk + returns a one-paragraph summary.
331
+
332
+ ### Step P4 — AI synthesis (agent-driven, dispatch sonnet subagents)
333
+
334
+ After research is cached for a batch of plugins:
335
+
336
+ ```
337
+ corpus_emit_synthesis_briefs(plugin_ids=[...])
338
+ ```
339
+
340
+ Returns one `synthesis_brief` per plugin — a self-contained packet with all
341
+ identity + manual + research data plus a YAML schema to fill. Dispatch one
342
+ sonnet subagent per brief (or batches of 3 in parallel) using the `Agent`
343
+ tool with `subagent_type="general-purpose"` and `model="sonnet"`. Each
344
+ subagent:
345
+
346
+ 1. Reads `brief["synthesis_inputs"]`
347
+ 2. Writes a YAML at `brief["output_path"]` matching `brief["synthesis_schema"]`
348
+ 3. Returns a 200-word summary of what they wrote
349
+
350
+ Result: per-plugin `~/.livepilot/atlas-overlays/user/plugins/<plugin_id>/identity.yaml`
351
+ with `sonic_fingerprint`, `reach_for`, `avoid`, `key_techniques`,
352
+ `parameter_glossary`, `comparable_plugins`, `genre_affinity`, `producer_anchors`.
353
+
354
+ ### Querying after the engine completes
355
+
356
+ The plugin identity YAMLs are picked up by the overlay loader on next MCP
357
+ server boot. Then:
358
+
359
+ ```
360
+ extension_atlas_search(query="warm pad analog", namespace="user.plugins")
361
+ extension_atlas_get(namespace="user.plugins", entity_id="u-he-diva")
362
+ atlas_chain_suggest(role="bass", genre="dub_techno")
363
+ # may now return user-installed plugins ranked by reach_for / genre_affinity
364
+ ```
365
+
366
+ The agent has knowledge of *the user's* sound, not just Ableton's defaults.
367
+
368
+ ---
369
+
370
+ ## Universal extensibility
371
+
372
+ If the user has a content type the built-in scanners don't cover (Reaper
373
+ .rpp, Bitwig .bwproject, custom JSON metadata files, etc.) tell them they
374
+ can add a Scanner subclass to `mcp_server/user_corpus/scanners/` —
375
+ documented in [docs/USER_CORPUS_GUIDE.md](../../../docs/USER_CORPUS_GUIDE.md)
376
+ under "Scanner abstraction (write your own)". The 4 built-in scanners
377
+ are the reference implementations; the pattern is plugin-style — drop in
378
+ a file with `@register_scanner`, name a `type_id`, implement `scan_one`
379
+ + `derive_tags` + `derive_description`. The runner picks it up.