Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Livebridge

ASecurity

Control Ableton Live 12 through the LiveBridge MCP tools (live_*). Use whenever the user wants to make, edit, arrange, mix or play music in Ableton Live - beats, drum patterns, basslines, chords, melodies, loading instruments/effects/VST/AU plug-ins (Serum 2 included), setting device parameters, clips, scenes, arrangement, automation, recording, bouncing, tempo, routing - or wants Splice samples in their Live set, or asks about their Live set, even if they just say "Ableton", "Live", "my trac...

2 stars
0 votes
0 copies
0 views
Added 9/28/2026
ai-agentspythongoapi

Works with

cliapimcp

Security Analysis

A100/100

Scanned 9/28/2026

Install to Claude Code

$npx -y skills add valentijnh/livebridge-ableton-mcp --skill livebridge --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Livebridge?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Livebridge
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/valentijnh-livebridge/badge)](https://www.skillsdirectory.com/skills/valentijnh-livebridge)

More formats (shields.io, HTML) on the badges page.

Files
SKILL.md
---
name: livebridge
description: Control Ableton Live 12 through the LiveBridge MCP tools (live_*). Use whenever the user wants to make, edit, arrange, mix or play music in Ableton Live - beats, drum patterns, basslines, chords, melodies, loading instruments/effects/VST/AU plug-ins (Serum 2 included), setting device parameters, clips, scenes, arrangement, automation, recording, bouncing, tempo, routing - or wants Splice samples in their Live set, or asks about their Live set, even if they just say "Ableton", "Live", "my track", "the DAW" or "music production".
---

# Working in Ableton Live with LiveBridge

LiveBridge gives you ~168 `live_*` tools that drive a running Ableton Live 12 through its Live
Object Model. Every mutating call is **one undo step** in Live. You cannot hear the result
directly - you work from notes, parameters, names, level meters (`live_mixer_meters`), the two
analysis tools (`live_theory_analyze` for MIDI, `live_audio_analyze` for audio - section 4b) and
the user's feedback, so describe what you did in musical terms and invite them to listen.

**Making music, not just clips**: before arranging, building transitions/build-ups, choosing
effects or mixing, read **`PRODUCTION.md`** next to this file (MCP resource
`livebridge://production`): energy curves, section blueprints per genre, the build-up and
transition toolbox, effect chains, harmony/melody rules, density, mix targets and a finishing
checklist. A track must work as a whole: plan the sections first, make every part serve one
idea, check theory and sound with the analysis tools.

## 1. Start every session the same way

1. `live_status` - is Live reachable, which version/edition, is `allow_eval` on?
   - `type: "connection"`: tell the user to start Live and enable **Preferences -> Link, Tempo &
     MIDI -> Control Surface -> LiveBridge** (Input/Output: None). For another computer:
     `live_discover`, then `live_connect(host, port, token, persist=true)` (ask the user for the
     token; it is in the Live machine's `Remote Scripts/LiveBridge/config.json`).
   - `type: "auth"`: token mismatch - ask the user for the right token, then `live_connect`.
2. `live_set_snapshot` - tempo, signature, tracks (with `path`), devices, clips, scenes, selection.
   Big set? `detail="minimal"` first, then `live_tracks_get` / `live_clip_list` for details.
3. `live_view_selection` when the user says "this track", "this clip", "the selected device".

Re-snapshot after structural changes: indices shift when tracks, scenes, devices or clips are
added or removed. Prefer the `path` fields from the latest summary, or names.

## 2. Conventions

- **Time is in beats** (quarter notes). In 4/4 a bar = 4 beats; a 16th = 0.25. Note starts are
  clip-relative. Song positions, loop points and clip lengths also take Live's bars.beats.16ths
  as a string ("17.1.1" = bar 17; lengths are 0-based, "4.0.0" = 4 bars); clip/arrangement tools
  also accept `unit="bars"`; `live_time_convert` converts either way.
- **Pitch**: 60 = C3 (Live naming). Bass lives around C1-C2 (36-48), chords C3-C4, leads C4-C5.
  Note names ("F#2", "Bb3") work everywhere.
- **Drum Rack pads**: kick 36 (C1), rim 37, snare 38, clap 39, closed hat 42 (F#1), open hat 46,
  crash 49, ride 51 - `live_clip_write_pattern` takes these names and maps them onto the loaded
  kit's **pad names** (check `result.kit` and `warnings`; `live_drumrack_overview` shows the pads).
- Tracks, scenes, devices, clips accept an **index, a name (exact, then prefix) or a LOM path**
  in every tool. Tracks also take `"selected"`, `"master"` and return letters (`"A"` = first
  return); clips take `"selected"` (the clip in the Detail view); `slot` also takes a scene name.
- Colours (`color=`): a palette index 0-69, "#RRGGBB", `[r, g, b]` or a name ("red", "blue").
  Some create tools call it `color_index` (0-69) - check the schema; unknown argument names are
  rejected with the accepted list.
- **Name and colour what you create** (`name=`, `color=` on create tools): the user must recognise
  your tracks and clips.
- Volume/pan/sends in **dB text** ("-6 dB", "C", "L20"); device parameters by name and by the
  text the knob shows ("250 ms", "1.5 kHz", "Saw", "1/8"; compound displays such as Serum's
  "50% [-9.0 dB]" take "70%" or "-6 dB"). Read before you write
  (`live_device_parameters(filter=...)`) so you use the parameter's own units.

## 3. Prefer composite tools (fewer round trips, one undo step)

| Goal | Tool |
|---|---|
| New track with an instrument | `live_browser_load(query, category="instrument", new_track=true, track_name=...)` - or `live_tracks_create` + `live_device_insert(name)` for plain built-ins (Live 12.3+, fastest) |
| Drum kit | `live_browser_load("909 Core Kit", category="drum_kit", new_track=true, track_name="Drums")` |
| Serum 2 / a big VST3 synth | `live_plugin_expose(plugin="Serum 2", parameters=["sound_design"], new_track=true, track_name=...)` (loads it already controllable) |
| Drum/arp/bass step pattern | `live_clip_write_pattern` (creates the clip) |
| Chord progression | `live_clip_write_chords("Am7 Fmaj7 C G", voice_leading=true)` - Roman numerals in the song key work too ("i VI III VII") |
| Arpeggio | `live_clip_write_arp(chords="Am F C G", style="up", rate="1/16")` |
| Free notes | `live_clip_add_notes(notes=[["C3",0,1,100], ...], create=true)` |
| Groove/feel | `live_clip_transform_notes(quantize=..., swing=..., humanize_timing=..., velocity_scale=..., fit_scale=true, transpose_steps=...)`; Groove Pool: `live_groove_pool` + `live_clip_set(groove=...)` |
| Many mixer changes | `live_mixer_set_many` |
| Many parameters | `live_device_set_parameters` |
| A long build (many commands) | `live_command_batch([{cmd, args}, ...])` - bridge commands (see `live_commands`), one round trip, **one undo step**, `"$0.path"` references earlier results |
| Everything about the set | `live_set_snapshot` |

## 4. The full production recipe (8 bars, ~25 calls)

Genre starting points (tempo, feel, key):

| Genre | Tempo | Drums | Key / harmony |
|---|---|---|---|
| House | 122-126 | four-on-the-floor kick, clap on 2+4, off-beat open hat | minor, i-VI-III-VII |
| Techno | 128-135 | kick every beat, closed 16th hats, sparse clap | minor/phrygian, one chord + stabs |
| Hip-hop / boom bap | 85-95 | kick 1 + "and of 2", snare 2+4, swung hats (`swing=0.55`) | minor 7ths, ii-V |
| Trap | 140 (half-time feel) | 808 kick, snare on 3, 1/32 hat rolls | minor, dark pads |
| Drum & bass | 172-176 | two-step kick/snare, fast hats | minor, long pads |
| Lo-fi | 70-85 | swung, humanized, low velocity | major 7ths/9ths |

1. **Set** - `live_transport_set(tempo=124, signature="4/4")`; sections first if the user wants
   a song: `live_cue_layout(cues=[{"name":"Intro","bar":1},{"name":"Drop","bar":9}])` (works
   before any clip exists).
2. **Drums** - `live_browser_load("909 Core Kit", category="drum_kit", new_track=true,
   track_name="Drums")`; `live_drumrack_overview(track="Drums")` to see which pads hold what;
   `live_clip_write_pattern(track="Drums", slot=0, pattern={"kick":"x...x...x...x...",
   "clap":"....X.......X...", "hat":"..x...x...x...x.", "ohh":"......x.......x."}, repeat=8)`
   (8 bars of 16ths; check `result.kit` / `warnings` for rows that hit an empty pad).
   Samples onto pads: `live_drumrack_set_pad(note="C1", track="Drums", file_path=...)`.
3. **Bass** - `live_browser_load("Sub Bass", category="instrument", new_track=true,
   track_name="Bass")` (or `live_device_insert("Drift")` on a new MIDI track), then
   `live_clip_add_notes(track="Bass", slot=0, create=true, notes=[["A1",0,0.75],["A1",1.5,0.5],
   ["A1",2.5,1], ["F1",4,0.75], ...])` - roots (plus fifths/octaves), rhythmic gaps,
   monophonic, below C3. **Browser presets usually load as racks with macros**: shape them with
   `live_rack_macros(track="Bass", values={"Filter": 40})` (read it first); use
   `live_device_set_parameters` on the inner device path only when no macro covers it.
4. **Chords / pad** - `live_browser_load("Warm Pad", category="instrument", new_track=true,
   track_name="Pad")`; `live_clip_write_chords(track="Pad", slot=0, chords="Am7 Fmaj7 C G",
   duration=8, octave=3, voice_leading=true, velocity=80)` (4 chords x 8 beats = 8 bars);
   optional `live_clip_write_arp` on a lead.
5. **Serum 2 lead (optional)** - `live_plugin_expose(plugin="Serum 2",
   parameters=["sound_design"], new_track=true, track_name="Lead")` -> set the sound with
   `live_device_set_parameters(device=<returned device>, values={"Filter 1 Freq": "1.2 kHz",
   "Env 1 Attack": "5 ms", "A Octave": "+1 oct"})`.
6. **Splice sample (optional, credits!)** - see section 6: search -> ask -> download ->
   `live_splice_import_downloaded(files=[...], track=..., mode="session", warp=true)`; match
   key with `live_clip_set(pitch_coarse=...)`, check the warp with `live_clip_warp`.
7. **Effects** - `live_device_insert("EQ Eight", track=...)` with a **low cut** on everything
   that is not kick/bass (~100-150 Hz on pads/leads/hats); `Compressor` on the drum bus;
   `Utility` for gain (its knob is "Output"); returns: `live_device_insert("Reverb",
   track="A")` / `("Delay", track="B")` and `live_mixer_set(track="Pad", sends={"A": "-12 dB"})`.
   **Side-chain** the bass/pad to the kick: `live_device_insert("Compressor", track="Bass")`,
   then `live_routing_route(source="Drums", destination="Bass", method="sidechain")`.
   Group devices into a rack: `live_device_insert("Audio Effect Rack")`, `live_rack_insert_chain`,
   `live_device_move(target_chain=...)`.
8. **Gain staging / mix** - `live_mixer_set_many`: kick/drums around -6 dB, bass -8, pads -12,
   leads -10, returns -15 dB; `live_mixer_master(volume="0 dB")` with a Limiter last on the
   master. Play and read `live_mixer_meters(seconds=3)`: the master peak must stay below ~0.9
   (about -1 dBFS headroom; aim for -6 dB on the master before the limiter), no instrument track
   silent (peak 0 means nothing sounds - check notes, device on, routing).
9. **Arrangement** - put the variations in scenes, then `live_arrangement_from_scenes(sections=
   [{"scene":"Intro","bars":8}, {"scene":"Drop","bars":16}])`; extend loops with
   `live_arrangement_duplicate_clip(length=...)` / `live_arrangement_resize_clip`; check with
   `live_arrangement_overview`.
10. **Automation** - sweeps into session clips: `live_automation_shape(parameter="Filter Freq",
    shape="ramp_up", mode="events", track=..., slots=[0, 1, 2])` (several scene clips at once);
    show it with `live_view_clip_editor(envelope="Filter Freq")`. Clip envelopes survive the copy
    to the arrangement only on tracks without an instrument (check `envelopes.copied` in the
    duplicate result); **track automation in the arrangement**: `live_automation_record(parameter=
    "Filter Freq", track=..., points=[[0, "200 Hz"], [32, "4 kHz"]], start=..., end=...)` - it
    plays through the range in real time (poll `action="status"`), then restores the transport.
11. **Bounce / export** - `live_record_resample(start="1.1.1", bars=8, source="master")` records
    the section onto an audio track in real time (plays through the speakers; tell the user).
    Freeze a track: `live_record_resample(source="Bass", channel="Post FX")`.
12. **Save** - Live's API cannot save: ask the user to press **Cmd/Ctrl+S**.

A multi-step build can go through `live_command_batch` (one undo step, no rollback - steps before
a failure stay; next-tick state such as the playhead reads stale inside the batch).

## 4b. Check your work: theory and ears

- **`live_theory_analyze`** (MIDI, instant): `clips=[{"track":"Bass","slot":0},
  {"track":"Pad","slot":0}, {"track":"Lead","slot":0}]` -> key (+ runner-up), chord names with
  Roman numerals, `progression` (paste-able into `live_clip_write_chords`), `out_of_key` notes,
  `clashes` between parts (`semitone` rubs, `low_mud`) and suggestions. Use it **before** adding
  to the user's material (which key? which chords?) and **after** writing parts that play
  together. Fix clashes with `live_clip_modify_notes` / `live_clip_transform_notes(fit_scale=
  true)`. Drum Rack clips are recognised and only get statistics.
- **`live_audio_analyze`** (audio, ~1 s per minute of audio): `file_path=` or an audio clip
  (`track`+`slot`) -> LUFS, true peak, crest factor, 8-band spectral balance with plain-language
  `flags` (mud, harsh, no sub, wide low end, clipping), stereo correlation/width, tempo, key and
  the `energy` curve over time; `reference=` compares against a reference track. Uses:
  - *Hear the set*: `live_record_resample(...)` -> `clips[0].file_path` -> analyse (`kind="mix"`).
  - *Samples / Splice loops*: tempo + key before importing -> set warp/`pitch_coarse` to match.
  - *The user's reference track*: structure (`energy`), loudness and balance to aim for.
  It needs the optional audio libraries (`type: "unsupported"` carries the pip command - relay
  it). It measures; the user's ears decide.

## 5. Instruments, effects, plug-ins, samples, parameters

- Built-in device, no preset needed: `live_device_insert(name="EQ Eight", track=...)` (12.3+).
- Presets/sounds from Live's library: `live_browser_load(query, category="instrument" |
  "audio_effect" | "midi_effect" | "drum_kit")`, or `live_browser_search` +
  `live_browser_load(uri=...)`; replace a device in place with `live_browser_hotswap`.
- **Serum 2 / big VST3 plug-ins**: a plain load exposes **0** parameters (Live only shows the
  device's Configure list). Use `live_plugin_expose(plugin="Serum 2",
  parameters=["sound_design"], new_track=true)` - 120 curated controls; add names/groups
  ("osc a", "filter", "env", "lfo", "fx", "macros"; max 128 per rack), wire macros with
  `macros={"1": "Filter 1 Freq"}`, start from a sound with
  `live_plugin_preset_files(plugin="Serum 2")` -> `preset_file=`. Then
  `live_device_set_parameters` / automation on the returned `device` path. Expose **first**, then
  design: re-exposing restarts the sound from the preset/template. `.SerumPreset` files cannot be
  embedded (load them in Serum's window: `live_plugin_set(editor_open=true)`). Other VST3s:
  `live_plugin_param_map(plugin=...)` once. Audio Units expose nothing this way - prefer VST3;
  for AU/VST2 ask the user to use the device's **Configure** button (`live_plugin_configure`
  lists the names and waits).
- Plain plug-in load (no control needed): `live_browser_load("Serum 2", category="plugin",
  plugin_format="vst3", editor_open=false)`.
- Racks: `live_rack_macros` (read + set macros), `live_drumrack_overview`, `live_drumrack_set_pad`,
  `live_drumrack_convert` (pad <-> track), `live_simpler_action("to_drum_rack")` (slices to pads).
- Samples on disk: `live_sample_import(file_path, track, mode="session"|"arrangement"|"simpler")`,
  onto a pad with `note="C1"` (or `live_drumrack_set_pad(note, file_path=...)`); `.mid` files
  import as MIDI clips the same way. Paths are on the machine running Live; in LAN mode a file
  that only exists on Claude's machine is sent over automatically (`live_sample_upload` does it
  explicitly, also for URLs).
- Simpler: `live_simpler_get/set/action` (playback mode, warp, slices, crop, reverse,
  replace_sample).
- Non-parameter settings (Wavetable wavetables, Hybrid Reverb IR, EQ Eight modes, Looper):
  `live_device_properties` / `live_device_action`; the Wavetable modulation matrix:
  `live_device_modulation`.
- Audio -> MIDI (drums/harmony/melody) or audio -> Simpler: `live_clip_convert`.
- Save an A/B snapshot of a device: `live_device_set_state(save_to_compare_slot=true)`, compare
  with `compare_b`.

## 6. Splice

LiveBridge does not search Splice itself; the official Splice MCP (a separate server, usually named
`splice`) does. If its tools are missing, call `live_splice_setup_info` and relay the steps.
1. Search with the Splice tools (key, BPM, genre, instrument, loop vs one-shot); present a few
   options before downloading - **downloads cost the user's Splice credits** (max 100 / 24 h).
2. After downloading with the Splice MCP: `live_splice_import_downloaded(files=[<paths Splice
   reported>], track=..., mode="session"|"arrangement"|"simpler"|"drum_rack")` (files are sent to
   the Live machine automatically in LAN mode). Without paths use `newest=N,
   max_age_minutes=10`. `live_splice_watch_folder` is only for downloads the user makes by hand
   in the Splice app/browser.
3. Tidy up: `live_clip_set` (warp, gain, name), match tempo (`warping=true`), transpose with
   `pitch_coarse` if the key differs, fix hits with `live_clip_warp`. One-shots: `mode="simpler"`
   or onto a pad (`mode="drum_rack"`, `note=`).

## 7. Safety and etiquette

- **Ask before destructive actions** on the user's material: deleting tracks/scenes/clips that
  contain content, `replace=true`/`clear` on existing notes, overwriting a clip, randomising a
  device, deleting devices. Your own freshly created objects may be changed freely.
- Don't start or stop playback, arm tracks, record or resample unless asked (or clearly part of
  the task); say when you do. Keep volumes sane (nothing above 0 dB on the master).
- After a `type: "timeout"`, do **not** blindly repeat a mutating call - it may still have run;
  re-read the state first. `live_dialog_get` shows whether a Live dialog is open; answer it with
  `live_dialog_press(button, expect=...)` **only after the user said which button** (labels are
  not available - show the message and the button count).
- Undo is available: `live_transport_undo(steps=n)` (check the returned names; the user's own
  edits are on the same stack).
- **Not possible through Live's API**: saving the set, exporting files (bounce with
  `live_record_resample` instead), freeze/flatten, grouping or moving tracks, drawing arrangement
  automation lanes (record them with `live_automation_record`), menu commands, preferences. Say
  so plainly and ask the user to do it (e.g. "press Cmd/Ctrl+S to save"); remind them to save
  after substantial work.
- **Racks/devices the API cannot touch** (answer, don't try tools): mapping a parameter to a macro
  (user: right-click the knob -> *Map to Macro*; then you can drive the macro; plug-in macros:
  `live_plugin_expose(macros=...)`); deleting, duplicating or reordering rack chains (mute the
  chain instead; Drum Rack pads can be cleared or copied with `live_drumrack_set_pad`);
  key/velocity/chain-select zones; saving device/rack/plug-in presets (user: the device's save
  button; A/B slot: `save_to_compare_slot`); Sampler zones/samples (use Simpler:
  `live_sample_import(mode="simpler")`); the Drum Sampler's sample (hot-swap the pad with a
  sample: `live_browser_hotswap(drum_pad=...)` puts a Simpler there). Details:
  `docs/LIVE_API_NOTES.md` §12.
- `live_lom_*` and `live_eval_python` are escape hatches for things no curated tool covers
  (`live_commands` lists what the installed Remote Script supports; `live_command_call` runs such
  a bridge command directly). Use `live_lom_describe` to explore first; `live_eval_python` only
  when necessary, never with destructive code.

## 8. Token economy

Use `detail="minimal"`, `filter=`, `limit`/`offset` on list tools (paged answers carry `total`,
`count` and `next_offset` while more follow); fetch notes only for the clip
you edit (`live_clip_get_notes`); don't re-snapshot the whole set after every small edit - only
after structural changes or when something is unexpected.

## 9. Errors

| `type` | Do this |
|---|---|
| `connection` | Live not reachable - see step 1. |
| `not_found` | Index/name moved - re-snapshot, use names/paths. A plug-in parameter "Live does not expose" -> `live_plugin_expose`. |
| `invalid_state` | Read the message (slot full, audio vs MIDI track, frozen track) and adapt. |
| `bad_args` | Fix the argument; the message lists valid values (and accepted argument names). |
| `unsupported` | This Live version/edition can't; use the alternative the message suggests (e.g. browser instead of `live_device_insert` before 12.3). |
| `timeout` | A dialog may be open in Live - `live_dialog_get`, ask the user; verify before retrying. |
| `forbidden` | `live_eval_python` is disabled (no token or `allow_eval: false`); use curated/LOM tools. |

Attribution

valentijnhvalentijnh
View sourceMore from valentijnh →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Caveman

Ultra-compressed communication mode that cuts output tokens while keeping technical accuracy. Levels: lite, full, ultra and the wenyan variants. Use for /caveman, "caveman mode", "talk like caveman", "be brief" or "less tokens".

1074701 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

695601 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3351 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

691 votes

math-skill

A comprehensive mathematical reasoning skill for AI assistants — handles arithmetic to research-level problems with rigorous step-by-step reasoning, systematic verification, and transparent uncertainty handling

381 votes
View all in ai-agents →