Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@ jobs:
- name: Sync dependencies
run: uv sync --dev

- name: Run quality harness
run: uv run python tools/quality_harness.py --config .quality-harness.yml --report quality-harness-report.json
- name: Run dev checks enforce
run: uv run python -m ableton_cli.dev_checks_enforce --config .quality-harness.yml --report quality-harness-report.json --action-log quality-harness-action-log.json

- name: Upload quality harness report
if: always()
Expand All @@ -86,6 +86,14 @@ jobs:
path: quality-harness-report.json
if-no-files-found: error

- name: Upload quality harness action log
if: always()
uses: actions/upload-artifact@v4
with:
name: quality-harness-action-log
path: quality-harness-action-log.json
if-no-files-found: error

summary:
if: always()
needs: [test, quality-harness]
Expand Down
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,21 @@ uv run ableton-cli wait-ready
uv run ableton-cli song info
uv run ableton-cli transport play
uv run ableton-cli transport tempo set 128
uv run ableton-cli transport position get
uv run ableton-cli transport position set 32
uv run ableton-cli transport rewind
uv run ableton-cli tracks list
uv run ableton-cli track volume get 0
uv run ableton-cli track volume set 0 0.7
uv run ableton-cli track panning set 0 -- -0.25
uv run ableton-cli clip create 0 0 --length 4
uv run ableton-cli clip notes add 0 0 --notes-json '[{"pitch":60,"start_time":0.0,"duration":0.5,"velocity":100,"mute":false}]'
uv run ableton-cli clip cut-to-drum-rack --source-track 1 --source-clip 0 --slice-count 8 --create-trigger-clip --trigger-clip-slot 1
uv run ableton-cli arrangement clip create 0 --start 8 --length 4 --notes-json '[{"pitch":60,"start_time":0.0,"duration":0.5,"velocity":100,"mute":false}]'
uv run ableton-cli arrangement clip notes get 0 0 --start-time 0.0 --end-time 4.0 --pitch 60
uv run ableton-cli arrangement clip notes import-browser 0 0 sounds/Bass\ Loop.alc --mode replace --import-length --import-groove
uv run ableton-cli arrangement clip delete 0 --start 0 --end 16
uv run ableton-cli arrangement from-session --scenes "0:24,1:48"
uv run ableton-cli clip fire 0 0
uv run ableton-cli scenes list
uv run ableton-cli browser search drift --item-type loadable
Expand Down
9 changes: 9 additions & 0 deletions docs/man/ableton-cli.1.in
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,22 @@ Global options must come before subcommands:
Set tempo:

ableton-cli transport tempo set 128
ableton-cli transport position get
ableton-cli transport position set 32
ableton-cli transport rewind

Create clip and add notes:

ableton-cli clip create 0 0 --length 4
ableton-cli clip notes add 0 0 --notes-json '[{"pitch":60,"start_time":0.0,"duration":0.5,"velocity":100,"mute":false}]'
ableton-cli clip notes add 0 0 --notes-file ./notes.json
ableton-cli clip notes get 0 0 --start-time 0.0 --end-time 4.0 --pitch 60
ableton-cli clip cut-to-drum-rack --source-track 1 --source-clip 0 --slice-count 8 --create-trigger-clip --trigger-clip-slot 1
ableton-cli arrangement clip create 0 --start 8 --length 4 --notes-json '[{"pitch":60,"start_time":0.0,"duration":0.5,"velocity":100,"mute":false}]'
ableton-cli arrangement clip notes add 0 0 --notes-file ./notes.json
ableton-cli arrangement clip notes import-browser 0 0 sounds/Bass\ Loop.alc --mode replace --import-length --import-groove
ableton-cli arrangement clip delete 0 --all
ableton-cli arrangement from-session --scenes "0:24,1:48"

Scenes and mixer operations:

Expand Down
11 changes: 10 additions & 1 deletion docs/man/generated/ableton-cli.1
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH ABLETON-CLI "1" "February 2026" "ableton-cli 0.1.0" "User Commands"
.TH ABLETON-CLI "1" "March 2026" "ableton-cli 0.1.0" "User Commands"
.SH NAME
ableton-cli \- Control and inspect Ableton Live via local Remote Script
.SH DESCRIPTION
Expand Down Expand Up @@ -82,13 +82,22 @@ Global options must come before subcommands:
Set tempo:

ableton-cli transport tempo set 128
ableton-cli transport position get
ableton-cli transport position set 32
ableton-cli transport rewind

Create clip and add notes:

ableton-cli clip create 0 0 --length 4
ableton-cli clip notes add 0 0 --notes-json '[{"pitch":60,"start_time":0.0,"duration":0.5,"velocity":100,"mute":false}]'
ableton-cli clip notes add 0 0 --notes-file ./notes.json
ableton-cli clip notes get 0 0 --start-time 0.0 --end-time 4.0 --pitch 60
ableton-cli clip cut-to-drum-rack --source-track 1 --source-clip 0 --slice-count 8 --create-trigger-clip --trigger-clip-slot 1
ableton-cli arrangement clip create 0 --start 8 --length 4 --notes-json '[{"pitch":60,"start_time":0.0,"duration":0.5,"velocity":100,"mute":false}]'
ableton-cli arrangement clip notes add 0 0 --notes-file ./notes.json
ableton-cli arrangement clip notes import-browser 0 0 sounds/Bass\ Loop.alc --mode replace --import-length --import-groove
ableton-cli arrangement clip delete 0 --all
ableton-cli arrangement from-session --scenes "0:24,1:48"

Scenes and mixer operations:

Expand Down
11 changes: 11 additions & 0 deletions docs/skills/skill-actions.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ Stable action names and CLI mappings for automation wrappers.
| `arrangement_record_start` | `uv run ableton-cli --output json arrangement record start` | Start arrangement recording when supported by Live API. |
| `arrangement_record_stop` | `uv run ableton-cli --output json arrangement record stop` | Stop arrangement recording when supported by Live API. |
| `set_tempo` | `uv run ableton-cli --output json transport tempo set <bpm>` | Update song tempo in BPM. |
| `transport_position_get` | `uv run ableton-cli --output json transport position get` | Read current transport beat/time position. |
| `transport_position_set` | `uv run ableton-cli --output json transport position set <beats>` | Move transport playhead to a beat position. |
| `transport_rewind` | `uv run ableton-cli --output json transport rewind` | Rewind transport playhead to beat 0. |
| `list_tracks` | `uv run ableton-cli --output json tracks list` | List all tracks and their basic properties. |
| `create_midi_track` | `uv run ableton-cli --output json tracks create midi [--index <index>]` | Insert a MIDI track at an index or append. |
| `create_audio_track` | `uv run ableton-cli --output json tracks create audio [--index <index>]` | Insert an audio track at an index or append. |
Expand All @@ -35,6 +38,13 @@ Stable action names and CLI mappings for automation wrappers.
| `get_clip_notes` | `uv run ableton-cli --output json clip notes get <track> <clip> [--start-time <beats>] [--end-time <beats>] [--pitch <midi>]` | Read clip notes with optional time/pitch filters. |
| `clear_clip_notes` | `uv run ableton-cli --output json clip notes clear <track> <clip> [--start-time <beats>] [--end-time <beats>] [--pitch <midi>]` | Remove matching clip notes by optional time/pitch filters. |
| `replace_clip_notes` | `uv run ableton-cli --output json clip notes replace <track> <clip> (--notes-json '<json-array>' | --notes-file <path>) [--start-time <beats>] [--end-time <beats>] [--pitch <midi>]` | Clear matching notes then add replacement notes. |
| `arrangement_clip_notes_add` | `uv run ableton-cli --output json arrangement clip notes add <track> <index> (--notes-json '<json-array>' | --notes-file <path>)` | Add MIDI notes to an arrangement clip by list index. |
| `arrangement_clip_notes_get` | `uv run ableton-cli --output json arrangement clip notes get <track> <index> [--start-time <beats>] [--end-time <beats>] [--pitch <midi>]` | Read arrangement clip notes with optional time/pitch filters. |
| `arrangement_clip_notes_clear` | `uv run ableton-cli --output json arrangement clip notes clear <track> <index> [--start-time <beats>] [--end-time <beats>] [--pitch <midi>]` | Remove matching arrangement clip notes by optional time/pitch filters. |
| `arrangement_clip_notes_replace` | `uv run ableton-cli --output json arrangement clip notes replace <track> <index> (--notes-json '<json-array>' | --notes-file <path>) [--start-time <beats>] [--end-time <beats>] [--pitch <midi>]` | Clear matching arrangement notes then add replacements. |
| `arrangement_clip_notes_import_browser` | `uv run ableton-cli --output json arrangement clip notes import-browser <track> <index> <target> [--mode <replace|append>] [--import-length] [--import-groove]` | Import notes from a browser `.alc` item into an arrangement clip. |
| `arrangement_clip_delete` | `uv run ableton-cli --output json arrangement clip delete <track> [index] [--start <beat> --end <beat>] [--all]` | Delete arrangement clips by index, time range, or all mode. |
| `arrangement_from_session` | `uv run ableton-cli --output json arrangement from-session --scenes "0:24,1:48"` | Expand session scenes into Arrangement using explicit scene durations. |
| `clip_duplicate` | `uv run ableton-cli --output json clip duplicate <track> <src_clip> <dst_clip>` | Duplicate a clip into an empty destination slot. |
| `set_clip_name` | `uv run ableton-cli --output json clip name set <track> <clip> <name>` | Rename a clip. |
| `fire_clip` | `uv run ableton-cli --output json clip fire <track> <clip>` | Launch a clip slot. |
Expand Down Expand Up @@ -93,6 +103,7 @@ Stable action names and CLI mappings for automation wrappers.
- `uv run ableton-cli clip groove set <track> <clip> <target>`: Assign a `.agr` groove by browser path or URI.
- `uv run ableton-cli clip groove amount set <track> <clip> <0.0-1.0>`: Set groove amount on a clip.
- `uv run ableton-cli clip groove clear <track> <clip>`: Clear groove assignment from a clip.
- `uv run ableton-cli clip cut-to-drum-rack (--source-track <track> --source-clip <clip> | --source <uri-or-path>) (--grid <fraction-or-beats> | --slice-count <n>) [--target-track <track>] [--start-pad <pad>] [--create-trigger-clip --trigger-clip-slot <clip>]`: Slice audio source and map slices into Drum Rack pads.

Operational note: after `install-remote-script --yes`, reload Ableton's Control Surface assignment (`None` -> `AbletonCliRemote`) or restart Ableton Live to apply updated Remote Script code.

Expand Down
1 change: 1 addition & 0 deletions output/chiptune_noise_notes.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions output/chiptune_sq1_notes.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions output/chiptune_sq2_notes.json

Large diffs are not rendered by default.

Loading