From livepilot
This skill should be used when the user asks to "write notes", "add a melody", "chord progression", "rhythm pattern", "MIDI notes", "transpose", "quantize", "Euclidean rhythm", "counterpoint", "scale", "key detection", "harmony", or wants to create, edit, or analyze MIDI content in Ableton Live.
How this skill is triggered — by the user, by Claude, or both
Slash command
/livepilot:livepilot-notesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Write melodies, chords, rhythms, and generative patterns in Ableton Live clips. Every note operation follows the Live 12 API.
Write melodies, chords, rhythms, and generative patterns in Ableton Live clips. Every note operation follows the Live 12 API.
Four operations form the core CRUD cycle for MIDI notes:
add_notes(track_index, clip_index, notes) — write new notes into a clipget_notes(track_index, clip_index) — retrieve all notes with IDs, pitches, timingsmodify_notes(track_index, clip_index, modifications) — change existing notes by note_idremove_notes(track_index, clip_index, start_time, duration, pitch_start, pitch_end) — clear a region, or remove_notes_by_id(track_index, clip_index, note_ids) — surgical deletion by IDAlways create a clip first with create_clip(track_index, clip_index, length) before adding notes to it.
When calling add_notes, each note requires:
{
"pitch": 60,
"start_time": 0.0,
"duration": 0.5,
"velocity": 100,
"mute": false
}
When reading with get_notes, each note also returns Live 12 extended fields:
note_id — unique identifier for modify/remove operationsprobability — 0.0 to 1.0, per-note trigger probability (Live 12 feature)velocity_deviation — -127.0 to 127.0, randomizes velocity on each triggerrelease_velocity — 0.0 to 127.0, note-off velocityUse modify_notes with note_id to update any field on existing notes — pitch, velocity, timing, probability, mute state.
duplicate_notes(track_index, clip_index, time_offset) — copy all notes forward by time_offset beats. Use for pattern repetition: a 4-beat pattern duplicated at offset 4.0 creates an 8-beat loop.transpose_notes(track_index, clip_index, semitones, start_time, duration) — shift pitches in a region by semitones. Positive = up, negative = down.transpose_smart(track_index, clip_index, semitones, key) — transpose with scale awareness. Notes stay within the target key, avoiding chromatic collisions.quantize_clip(track_index, clip_index, grid, amount) snaps note start times to a rhythmic grid.
Grid enum values:
The amount parameter (0.0-1.0) controls how far notes move toward the grid. Use 1.0 for rigid quantize, 0.5-0.7 for humanized feel.
Run these checks before firing any clip with melodic content:
identify_scale(track_index, clip_index) — detect the scale from existing notes (Krumhansl-Schmuckler algorithm). Returns key, mode, and confidence.detect_theory_issues(track_index, clip_index, strict=true) — check for out-of-key notes, parallel fifths, voice crossing, augmented/diminished accidents. The strict flag enables all checks.modify_notes — adjust offending pitches before the user hears them.The theory engine knows 7 standard modes. Exotic scales (Hijaz, Hungarian minor, whole tone) produce false "out of key" warnings. Cross-reference flagged pitches against the intended scale manually. Use key="C hijaz" for Hijaz/Phrygian Dominant keys.
analyze_harmony(track_index, clip_index) — identify chords in a clip, returns chord names, qualities, root notes, and progression analysissuggest_next_chord(track_index, clip_index, key) — given the current harmonic context, suggest the next chord with voice leading and functional reasoningharmonize_melody(track_index, clip_index, key, style) — generate harmony notes for an existing melody. Returns a note array ready for add_notes on a separate track.generate_countermelody(track_index, clip_index, key, species) — generate a counterpoint line against existing notes. Species 1-5 follow classical counterpoint rules. Returns notes for add_notes.Both harmonize_melody and generate_countermelody return note arrays — do not call them and discard the output. Place the results into a clip with add_notes.
generate_euclidean_rhythm(pulses, steps, pitch, velocity, duration) — distribute pulses as evenly as possible across steps using the Bjorklund algorithm. Returns a note array. The tool identifies named rhythms automatically (e.g., 3 pulses in 8 steps = "tresillo", 5 in 8 = "cinquillo").
layer_euclidean_rhythms(layers) — stack multiple Euclidean patterns for polyrhythmic textures. Each layer specifies pulses, steps, pitch, and velocity. Returns a combined note array spanning all layers, ready for a single add_notes call or split across tracks.
generate_tintinnabuli(melody_pitches, key, mode, position) — implement Arvo Part's technique: a T-voice (triad arpeggio) against a M-voice (stepwise melody). Returns two-voice note data.
generate_phase_shift(pattern, shift_amount, repetitions) — implement Steve Reich's phasing: two identical patterns drifting apart over time. One voice holds steady while the other shifts by shift_amount per repetition.
generate_additive_process(melody_pitches, iterations) — implement Philip Glass's additive technique: melody expanded by adding one note per iteration, building complexity gradually.
All generative tools return note arrays. Place them in clips with add_notes.
navigate_tonnetz(chord, transform) — apply PRL (Parallel, Relative, Leading-tone) transforms to a chord. Returns the neighbor chord and its relationship.find_voice_leading_path(start_chord, end_chord) — find the shortest harmonic path between two chords through Tonnetz space. Returns intermediate chords.classify_progression(chords) — identify the neo-Riemannian transform pattern in a chord sequence (e.g., PRL cycle, hexatonic, octatonic).suggest_chromatic_mediants(chord) — return all chromatic mediant relations with film score usage notes. Useful for dramatic harmonic shifts.export_clip_midi(track_index, clip_index, file_path) — export a session clip's notes to a .mid fileimport_midi_to_clip(track_index, clip_index, file_path) — load a .mid file into a clip, replacing existing notesanalyze_midi_file(file_path) — offline analysis of any .mid file (tempo, note count, structure). No Ableton connection needed.extract_piano_roll(file_path) — return a 2D velocity matrix (pitch x time) from a .mid file for visualizationBefore playing any clip with melodic or harmonic content:
identify_scale on every melodic track — verify all tracks share the same tonal centeranalyze_harmony on chordal tracks — verify chord quality (no accidental augmented/diminished)detect_theory_issues(strict=true) — check all theory rulesmodify_notes before firingSupporting references live in the livepilot-core skill's references/ directory:
livepilot-core/references/midi-recipes.md — drum patterns by genre, chord voicings, scale tables, hi-hat articulations, humanization, polymetric layeringnpx claudepluginhub dreamrec/livepilot --plugin livepilotComposes original melodies for songs, themes, or exercises using motivic development and melodic arc design.
Constructive arrangement — actually building song structure in Ableton. Use when the user asks to "arrange", "structure a song", "add an intro", "build a verse", "create sections", "scene to arrangement", "record to arrangement", or wants to place clips on the timeline or organize scenes. For analysis of existing structure ("improve transitions", "detect motifs", "analyze composition"), use livepilot-composition-engine instead.
Generates and plays live electronic music from a text description (genre, mood, activity) using Strudel. Invoke with /Your Task to get DJ Claude to produce dynamic, layered tracks.