Skip to content

Commit 41dbcd6

Browse files
freekmurzeclaude
andcommitted
Add ableton skill
Co-Authored-By: Claude <noreply@anthropic.com>
1 parent d7738f0 commit 41dbcd6

1 file changed

Lines changed: 221 additions & 0 deletions

File tree

Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
---
2+
name: ableton
3+
description: Control Ableton Live through the AbletonMCP tools. Use when the user wants to build tracks, patches, clips, drums, automation, or generative music in Ableton, or asks to change any device, mixer, or transport setting in their Live set. Triggers on "Ableton", "Live set", "make a patch", "build a track", "add a synth", "write a clip", "sidechain", "automate", or any request to change how something sounds in their DAW.
4+
---
5+
6+
# Controlling Ableton Live
7+
8+
You are driving a real Live set that a musician cares about. Everything you do
9+
lands immediately in their project. Act accordingly.
10+
11+
## The rule that governs everything: you cannot hear
12+
13+
You have no audio input. You can set a filter to 0.37 and confirm the value
14+
took, but you have no idea what came out of the speakers.
15+
16+
So never tell the user something sounds good, warm, punchy, or lush. You don't
17+
know. Describe what you built and what you verified, then let them judge.
18+
19+
Where you're genuinely useful is the tedious, mechanical work: 200 automation
20+
breakpoints, coprime loop lengths, phase offsets across six parameters,
21+
session scaffolding. Where you're useless is taste. Don't pretend otherwise.
22+
23+
## Verify everything. Status codes lie.
24+
25+
A `success` response does not mean the change happened. Always read the value
26+
back.
27+
28+
This is not paranoia. Several commands return success while doing nothing, or
29+
while doing something different from what was asked. Read back after every
30+
change that matters:
31+
32+
```python
33+
# set it
34+
cmd("set_device_parameter", {"track_index": 0, "device_index": 1,
35+
"parameter_index": 5, "value": 0.42})
36+
# then PROVE it
37+
ps = cmd("get_device_parameters", {"track_index": 0, "device_index": 1})
38+
```
39+
40+
If a read-back disagrees with what you asked for, say so plainly rather than
41+
reporting success.
42+
43+
## Read the device before you set it
44+
45+
Never guess parameter names, indices, or ranges. Every device differs, and
46+
similar devices differ in surprising ways.
47+
48+
Call `get_device_parameters` first. It returns `name`, `value`, `min`, `max`,
49+
and `value_string`. That last field is the text Live prints on the knob
50+
("Off", "1/16", "440 Hz"), and it's the only way to know what a bare float
51+
like `Transpose Mode = 0.0` actually means.
52+
53+
Ranges are not always 0 to 1. `Gate` on the Arpeggiator runs 1 to 200.
54+
`Transpose` on Drift runs -48 to 48. `Depth` on the M4L LFO runs 0 to 100.
55+
Read first.
56+
57+
## Dropdowns are unreachable. Ask the user to click.
58+
59+
Live doesn't expose routing choices as automatable parameters. If it's a
60+
dropdown or a Map button in the UI, the API cannot set it. Known cases:
61+
62+
The Max for Live LFO's Map button. Every other knob on it (Rate, Depth,
63+
Jitter, Smooth, Phase, Shape) is yours, but the target isn't. Whenever you use a
64+
Max for Live LFO to modulate a parameter, you MUST stop and ask the user to
65+
click Map and pick the target. Do not proceed as if it is done, and do not
66+
pretend a workaround makes it unnecessary. Set every knob on the LFO first, then
67+
say exactly which knob to Map onto (device and parameter name). The click is
68+
once per LFO; after it, you own the rest.
69+
70+
A Compressor's sidechain Audio From source. You can set `S/C On`, threshold,
71+
ratio, attack, release, and the whole sidechain EQ. You cannot pick the source
72+
track.
73+
74+
Drift's modulation matrix source and destination selectors. The amounts
75+
(`Mod Matrix Amt 1`, `LP Mod Amt 1`) are settable; the routing is not.
76+
77+
Grouping tracks (Cmd+G). The Live API cannot group existing tracks: it only
78+
reads group membership, never creates a group. Do not promise grouping. When
79+
the goal is a shared effect across tracks, which is the usual reason to group,
80+
make a return track instead: create_return_track, load the effect on it, then
81+
raise each source track's send. That is fully scriptable and is the right home
82+
for a send effect like a shared echo or reverb. Only a real group needs the user
83+
to select the tracks and press Cmd+G.
84+
85+
Don't fake your way around these. Set everything you can, then tell the user
86+
exactly which control to click, naming the device and the parameter.
87+
88+
## Free-running modulation of an arbitrary parameter needs the Map click
89+
90+
There is no combination of tools that is free-running AND aims at any parameter
91+
AND needs no click. Be honest about which you are giving up:
92+
93+
A native device LFO (Auto Filter's LFO to cutoff, Auto Pan) is free-running and
94+
fully scriptable, but only reaches its own fixed target. Reach for these first
95+
when the target is one they cover, because they need no click.
96+
97+
`add_shaped_automation` draws a waveform onto any parameter, but it is clip
98+
automation: it repeats every loop and is phase-locked to the bar. It is not
99+
free-running. A long or coprime clip length hides the repetition but does not
100+
remove it. Use it when a loop-locked, editable curve is acceptable.
101+
102+
The Max for Live LFO is the only way to get free-running modulation of an
103+
arbitrary parameter, and it requires the one Map click. If the user wants that
104+
combination, ask for the click. Never imply `add_shaped_automation` is
105+
equivalent to a real LFO; it loops, a real LFO does not.
106+
107+
## Parameter names that will bite you
108+
109+
These commands silently defaulted on a wrong argument name in older versions,
110+
and the names are not what you'd guess:
111+
112+
`set_track_volume` wants `volume`, not `value`.
113+
`set_track_pan` wants `pan`, not `value`.
114+
`set_send_level` wants `level`, not `value`.
115+
`load_browser_item` wants `item_uri`, not `uri`.
116+
`load_browser_item_to_return` wants `return_index`, not `return_track_index`.
117+
`set_clip_automation` wants `parameter_name` and `envelope_data`, not indices
118+
and points.
119+
120+
The MCP tool layer uses the correct names. If you're calling the socket
121+
directly, check the handler signature first.
122+
123+
## Note probability: use the right command
124+
125+
`add_notes_to_clip` uses Live's legacy 5-tuple API and cannot carry
126+
probability. It will silently drop it.
127+
128+
For anything generative, use `add_notes_with_probability`. Each note takes
129+
`pitch`, `start_time`, `duration`, `velocity`, `mute`, plus optional
130+
`probability` (0 to 1) and `velocity_deviation`. It returns
131+
`verified_first_note` so you can prove probability actually landed.
132+
133+
Weight probability rather than randomising it flat. Structural notes (bass
134+
roots, the downbeat kick) belong at 0.9 to 1.0 so the music keeps its skeleton.
135+
Decorative notes (hats, melody, arp tones) sit at 0.3 to 0.7 so the texture
136+
shifts. Uniform random probability everywhere reads as broken, not generative.
137+
138+
## Reaching inside racks
139+
140+
`get_device_parameters` on a drum rack or instrument rack returns only the
141+
rack's own macros, which are usually unassigned and useless. The devices
142+
inside are invisible to it.
143+
144+
Use `get_rack_chains` to list the chains, then `get_chain_device_parameters`
145+
and `set_chain_device_parameter` with `chain_index` and `chain_device_index`
146+
to reach the actual device. That's how you set a single drum pad's decay.
147+
148+
Note that MIDI note length does nothing on a drum rack. Drum racks are one-shot
149+
triggers. If a drum hit is too long, the fix is the pad's decay envelope inside
150+
the rack, never the note duration in the clip.
151+
152+
## Clip automation targets by name. Be specific.
153+
154+
`set_clip_automation` matches a parameter name across devices on the track.
155+
Names collide constantly: `Frequency` exists on Auto Filter, Erosion, Reverb,
156+
and Grain Delay simultaneously.
157+
158+
Always pass `device_index` to scope it. Without it, an ambiguous name will
159+
raise (good) or, in older versions, silently automate the wrong device (bad).
160+
161+
Verify with `get_clip_automation`, which samples the envelope and returns the
162+
real curve plus `is_flat`. If `is_flat` is true, your automation didn't land.
163+
164+
## Generative patches: what actually works
165+
166+
Coprime loop lengths are the strongest tool you have. Clips at 3, 5, 7, 11,
167+
13, and 17 bars won't realign for over a million bars. Same clips, endlessly
168+
shifting relationship, no automation needed.
169+
170+
Unsynced LFOs drift against the grid. Set `LFO T Mode` to free (not synced)
171+
and a very slow `LFO Freq`. On the M4L LFO, `Jitter` makes the period itself
172+
wander, so it never repeats even against itself. A synced LFO is just a loop.
173+
174+
Drawn automation is the opposite of generative. It repeats identically every
175+
pass. Reach for LFOs and probability instead when the goal is "never the same
176+
twice."
177+
178+
Live's `Random` MIDI effect has `Chance` at 0 by default, so it does nothing
179+
until you raise it. Pair it with the `Scale` device to keep scattered pitches
180+
in key. Set Scale's `Map 0` through `Map 11` explicitly rather than using
181+
`Use Current Scale`, which depends on the song scale and will surprise you.
182+
183+
## Sound design facts worth knowing
184+
185+
Note length is inaudible when sustain is near zero. Every note decays to
186+
silence immediately, so a 4 beat note and a half beat note sound identical.
187+
If the user asks for varied note lengths, raise sustain first or nothing
188+
changes.
189+
190+
A pure tone plus high resonance plus a long release is a bell, by definition.
191+
If the user says something sounds like a bell and doesn't want that, remove the
192+
pitch (use noise) or the resonance. You can't fix it by tweaking the release.
193+
194+
Big and staccato are opposites. Length and reverb make things big; both destroy
195+
staccato. Don't try to deliver both from the same parameters.
196+
197+
Reverb is usually the reason something isn't staccato, not note length. Check
198+
both the track's own reverb and its return sends.
199+
200+
Timing is what makes something sound digital. Notes on exact grid positions
201+
read as machine-made no matter how much you vary velocity. Offset each note by
202+
a small random amount, biased late (players drag behind the beat far more often
203+
than they rush), and it reads as human.
204+
205+
An arpeggiator discards incoming note timing and emits at its own fixed rate.
206+
Editing clip note lengths on an arp track does nothing. Automate `Gate` if you
207+
want note length to vary.
208+
209+
## Safety
210+
211+
Ask before destructive work. Deleting tracks, clearing a set, or overwriting
212+
clips the user built by hand deserves a confirmation.
213+
214+
Live won't delete the last remaining track. Create the new one first, then
215+
delete the old.
216+
217+
There's no command for a new Live set. That's File, New Live Set, by hand.
218+
219+
Prefer working in Session view for anything that loops or phases. Arrangement
220+
view is a fixed timeline, and launching a scene restarts every clip, which
221+
resets any phasing you set up.

0 commit comments

Comments
 (0)