Public leaderboard

Public assessment

Pantani/ableton-mind (ableton-mind)

ableton-mind · v0.1.1 · scanned

What changed in the harness

Selection accuracy 98→100, token cost up 11%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

19.4 / 30

19.4 out of 30
03Economics

16.6 / 20

16.6 out of 20
04Discoverability

11.9 / 20

11.9 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

25 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
track_list
params_unexplained
Read-only list of regular, return, and master tracks in the current Live set. Use before addressing tracks by index or deciding where to create content; returns counts and the requested track sections without mutating the session. include_returns (default true) controls whether return tracks are included in the result; include_master (default true) controls whether the master track is included.
track_get_info
params_unexplained
Read-only details for one regular track by index. Use before track-scoped edits to inspect name, type, volume, panning, sends, clip slots, clips, and device counts; returns verified state without mutating the session. index is the zero-based position of the regular track in the session (0 = first track).
track_create
params_unexplained
Create a new MIDI or audio track, optionally at a specific position. Use when the user explicitly wants another track. NOT idempotent: every call creates a track; returns the created track and verifies that its type matches the request. type is 'midi' or 'audio' and selects the track kind; index (optional) is the zero-based position at which to insert the new track; name (optional) sets the new track's name.
track_upsert
params_unexplained
Find or create a track with a matching name and type. Use when a workflow needs a named target track but should avoid duplicates. Idempotent: returns changed=false when the track already exists; verified by returned name/type. name is the name the track must match or be created with; type is 'midi' or 'audio'; index (optional) is the zero-based position used when creating a new track.
track_set_name
params_unexplained
Rename a regular track by index. Use after track_list or track_get_info has confirmed the target track. Idempotent: unchanged names return changed=false; verified via read-after-write and returns before/after names. index is the zero-based position of the regular track; name is the new track name to apply.
track_set_volume
params_unexplained
Set a regular track's mixer volume as a normalized 0..1 value. Use for mix balance changes after confirming the track index. Idempotent within 1e-4; returns linear and dB before/after values with verification diff on mismatch. index is the zero-based position of the regular track.
create_midi_clip
params_unexplained
Create an empty MIDI clip in a session clip slot. Use when the target MIDI track and clip slot are known and a new clip is needed. NOT idempotent for occupied slots; wrapped in an undo step and verified by returned clip length/name. track_index is the zero-based track position; clip_slot_index is the zero-based session clip slot position within that track; length_beats is the clip's length in beats; name (optional) is the new clip's name.
clip_add_notes
params_unexplained
Add MIDI notes to an existing session clip. Use after creating or locating the target clip. NOT idempotent: repeated calls append notes; returns added count and verification diff if the count does not match. track_index is the zero-based track position; clip_slot_index is the zero-based session clip slot position within that track; notes is an array of MIDI note objects with pitch (0-127), start (beats from clip start), duration (beats), plus optional velocity (0-127) and mute.
clip_fire
params_unexplained
Trigger a session clip slot. Use when the user wants to launch a specific clip in Session view. Idempotent for already-playing clips, returning changed=false; playback state is async, so verification is marked unverified. track_index is the zero-based track position; clip_slot_index is the zero-based session clip slot position within that track.
clip_stop
params_unexplained
Stop playback for a specific session clip slot. Use to halt one clip without stopping the global transport. Idempotent for already-stopped clips; returns changed=false when no launch state changed and marks async playback verification unverified. track_index is the zero-based track position; clip_slot_index is the zero-based session clip slot position within that track.
clip_set_name
params_unexplained
Rename a session clip by track and slot index. Use after confirming the target clip exists. Idempotent: unchanged names return changed=false; verified via read-after-write and returns before/after names. track_index is the zero-based track position; clip_slot_index is the zero-based session clip slot position within that track; name is the new clip name to apply.
clip_set_loop
params_unexplained
Configure a clip's loop_start, loop_end, and/or looping flag while preserving omitted fields. Use for clip loop edits after locating the clip. Idempotent within 1e-4 and verified against only the fields provided by the caller. track_index is the zero-based track position; clip_slot_index is the zero-based session clip slot position within that track; loop_start (optional, beats) sets the loop start point; loop_end (optional, beats) sets the loop end point; looping (optional) enables or disables looping.
clip_set_envelope
params_unexplained
Replace all automation points for one clip envelope. Use when the user wants a complete envelope rewrite for mixer or device parameters. NOT idempotent for partial edits; returns written point count and verification diff after hold-curve expansion. track_index is the zero-based track position; clip_slot_index is the zero-based session clip slot position within that track; points is an array of automation points with time (beats from clip start), value, and optional curve_type ('linear'|'ramp'|'hold').
scene_fire
params_unexplained
Fire a Session view scene by index, triggering all clips on that row. Use for arrangement-style playback from scenes. NOT idempotent: re-triggering restarts clips; returns scene name and marks async transport verification unverified. index is the zero-based scene position in the Session view (0 = top scene).
device_get_parameters
params_unexplained
Read-only list of parameters for a device by track/device index. Use before parameter automation or value changes; returns value/range/automation state and knowledge-base unit/description metadata when the device matches bundled schemas. track_index is the zero-based track position holding the device; device_index is the zero-based device position within that track.
device_inspect_patcher
params_unexplained
Read-only Max for Live patcher discovery for a device. Use when deciding whether a device exposes inspectable M4L patcher metadata. Returns available=false with a reason when the target is not inspectable or the runtime lacks patcher access. track_index is the zero-based track position holding the device; device_index is the zero-based device position within that track.
device_inspect_plugin
params_unexplained
Read-only VST/AU plug-in discovery for a device. Use when identifying third-party plug-ins without relying on user-edited device names. Returns plug-in identity and parameters, or available=false with a reason for native devices or unsupported runtimes. track_index is the zero-based track position holding the device; device_index is the zero-based device position within that track.
arrangement_add_automation_point
params_unexplained
Add one automation point in the Arrangement view for a mixer or device parameter path. track_index selects the mixer/device track, parameter_path selects the parameter (e.g. mixer.volume or device.<i>.parameter.<n>), time is the beat position from song start, value is the parameter value to write at that time, and curve_type chooses the connecting curve shape: 'linear', 'ramp', or 'hold'. Use for incremental arrangement automation edits. NOT idempotent: repeated calls add more points; returns the written time/value/curve after the bridge accepts it.
session_snapshot
params_unexplained
Read-only deep snapshot of the Live session. Set include_clips to capture per-track clip slots (name/length/playing state) and include_devices to capture per-track devices (name/class_name); omit these to exclude that detail. Use before and after mutating tools to verify changes with session_diff; returns tracks with optional clips/devices and top-level session state without changing playback or session state.
session_diff
params_unexplained
Compare a previous session_snapshot with the current Live state. previous must be the full snapshot object returned by session_snapshot. Use after a mutation batch to verify what actually changed; returns added/removed/changed paths with before/after values and a change count.
render_preview
params_unexplained
Preview the current Live set state. mode selects the preview type: 'snapshot' returns deep state without audio, while 'bounce' is reserved for future audio export; bars is the number of bars to preview (positive integer). Use when an agent needs a lightweight result check; returns the preview result for the requested mode and bar count.
list_recipes
params_unexplained
Read-only list of embedded music recipes, optionally filtered by category to one of: drums, bass, chords, racks, arrangements, mixing, or live_performance. Use before apply_recipe to choose a valid recipe id; returns recipe metadata, tags, version, category, and total count without touching Live.
push_set_pad_color
params_unexplained
Set the color of one Ableton Push 2/3 pad. pad is the grid position 0..63 (8x8) and color is the pad LED color value 0..127. Use for visual feedback or performance layouts after hardware detection. Requires Push 2/3; returns sent=true with the pad and color accepted by the bridge.
push_set_button_led
params_unexplained
Set the LED color and mode for a Push transport or utility button. button selects the control to light (e.g. Play, Record, Stop, Metronome, Session, Browse), color is the LED color value 0..127, and mode is the blink behavior: 'solid', 'blink', or 'pulse'. Use for hardware feedback after Push detection. Requires Push 2/3; defaults mode to solid and returns sent=true with the accepted button/color/mode.
push_set_mode
params_unexplained
Switch Ableton Push 2/3 to note, session, drum, or step mode. mode selects the pad layout/workspace: note entry, session clip launching, drum rack pads, or step sequencer. Use when preparing a performance or editing workflow on Push hardware. Requires Push 2/3; returns sent=true with the mode accepted by the bridge.

Selection evidence

Confusable tool pairs.

14 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
device_inspect_patcher device_inspect_plugin high Identical read-only schema and both are 'inspect the device' tools; a task like 'inspect the device on track 0' doesn't specify patcher vs plugin, so either is a plausible wrong pick.
device_get_parameters device_set_parameter medium A task phrased around 'the device parameter' without an explicit get/set verb (e.g. 'change that parameter', 'look at the parameter') can be routed to the read tool when a write was intended or vice versa, since both share the device/parameter vocabulary.
stop clip_stop medium Both halt audio and share stop/playback language; a task like 'stop that clip' or just 'really stop it' is ambiguous between global transport stop and per-slot clip stop.
track_get_info session_get_info medium Both are read-only 'get info' tools with identical tokens; a vague request like 'get info about the current set' or 'tell me what's going on' could select either, since only the track-vs-session qualifier disambiguates.
track_set_name clip_set_name medium Both rename by index and share rename/set/name tokens; 'set this name' or 'rename that' referencing a slot inside a track can be routed to the clip tool instead of the track tool or vice versa.
push_set_button_led push_set_mode medium Both have a 'mode' concept, so 'set the push mode' / 'put the push in pulse mode' is ambiguous between LED button mode and note/session/drum/step layout mode.
clip_fire scene_fire medium Both use fire/launch/trigger language on session slots; a task like 'fire that slot' or 'launch that row' doesn't clearly distinguish a single clip from a whole scene.
session_snapshot session_diff medium Both are read-only session state tools built around snapshots; 'snapshot the session' vs 'show me what changed' can be conflated, especially when a user asks to capture state then see changes as one request.
track_create track_upsert medium track_create also accepts a name, so 'create a track called Drums' is ambiguous with the idempotent find-or-create upsert; a non-idempotent create can be chosen when dedup was intended.
session_get_info session_snapshot medium Both read-only snapshots of the session; 'show me the current session/live set state' could route to the lightweight info tool or the deep snapshot tool since neither request is specific.
list_recipes list_prompts medium Both are read-only 'what's available' listers; 'show me the available workflows/options' is ambiguous between bundled music recipes and MCP prompt workflows.
device_get_parameters device_inspect_plugin medium Both are read-only device inspection returning parameters; 'inspect the plugin on this device' could be routed to the generic parameter tool instead of the plugin discovery tool.
create_midi_clip clip_add_notes medium Both operate on MIDI clips by slot; 'create a MIDI clip with these notes' is ambiguous because one tool creates an empty clip and the other adds notes, so a single-step selection can pick the wrong one.
list_prompts list_resources medium Both are MCP discovery listers with identical tokens; 'list what this server exposes' / 'what's available here' doesn't specify whether prompts or resource URIs are wanted.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard