Install
$ agentstack add skill-korben00-ableton-producer-skills-ableton-live-runner ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Ableton Live Runner
The foundation skill for driving Ableton Live via the Extension SDK (JS/TS automation that runs in a Node process beside Live). Every other ableton-* skill produces a composition function; this skill is responsible for getting that code to actually run inside Live, reliably, despite the beta's rough edges.
When to use
Use this skill whenever Ableton work needs to reach the running app: scaffolding the runner project, inserting devices, writing clips, rendering audio, or recovering from a failed connection. The content/musical-logic skills (genre-cover, reharmonize, bassline, drum-groove, etc.) all assume this skill's workflow and helpers.
Prerequisites (verify first)
- Ableton Live 12 is open (Suite gives the full device set; everything falls back to
Drift). - Developer Mode is ON: Live → Preferences → Extensions → Developer Mode. **It resets to OFF on
every Live restart — re-check it each time.**
- A runner project exists (an Extension SDK project with
src/extension.ts,npm start= build +
extensions-cli run, and .env pointing EXTENSION_HOST_PATH at ExtensionHostNodeModule.node). To start a new one, copy examples/extension-template.ts into the project's src/extension.ts.
Core workflow
The single most important rule: get the code right before running, because each run effectively costs a Live restart (see gotchas — one reliable activation per session).
- Write/patch
src/extension.ts(use the scaffold inexamples/extension-template.ts; drop the
musical logic from the relevant skill into compose()).
- Build to typecheck:
npm --prefix run build:dev— fix any TS error before running. - Kill stale host (always, between runs):
``bash pkill -f "ExtensionHostNodeModule"; pkill -f "extensions-cli run"; pkill -f " start" ``
- Run in the background and watch the log:
``bash npm --prefix start > /tmp/ableton-run.log 2>&1 & ``
- Diagnose the log (this is where the two failure signatures matter):
- Lines
sends greeting→cannot send now→send success→ then[ext]: ...andDone.= ✅. - Host logs
Started: Extension Hostthen nothing = Developer Mode is OFF → ask the user
to enable it, then re-run.
send successappears but noactivate()output = the once-per-session activation bug →
the only reliable fix is restart Ableton Live, then re-run on the fresh session.
- Kill the host when done (
pkillas above) to leave a clean state for the next run.
Reusable helpers (in the scaffold)
makeTrack(song, name, instruments, fxSlots, notes, lengthBeats)— creates a MIDI track, inserts
the first instrument that loads (end the list with "Drift"), inserts one FX per slot (each slot a fallback list), then writes the clip notes.
clearPriorTracks(song)— idempotent re-runs: deletes tracks whose names are inTRACK_NAMES,
re-reading song.tracks each pass (deleting invalidates handles). Call it before creating tracks.
setParam(track, deviceName, paramName, value)— dial a device knob viaDeviceParameter.setValue.vary(base, spread)— velocity humanization;inRanges(bar, ranges)— section gating.
Key constraints to design around
insertDeviceloads default presets only (no browser presets/kits).Drum Rackis empty/silent
→ tell the user to drag a kit. Get timbre via the right native device + setParam.
- No
File → Newandsong.tempois global → keep different songs in different Sets; make
re-runs idempotent with clearPriorTracks.
- Note times are beats, clip-local. Setting the whole
clip.notesarray at once is atomic/fast. - No automation curves and no real-time/transport — this is composition/arrangement, not live
performance.
Additional resources
references/gotchas.md— the full list of beta failure modes (connection, activation, devices,
handles, timing). Read this whenever something silently fails.
references/sdk-api.md— API cheatsheet: Song/Track/Clip/Device/Resources/UI surface, the
NoteDescription shape, working device names, MIDI/GM-drum constants.
examples/extension-template.ts— the proven scaffold with all helpers; the starting point for
every composition skill.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Korben00
- Source: Korben00/ableton-producer-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.